Draco18s Posted April 4, 2018 Share Posted April 4, 2018 (edited) CauldronRecipe(List<Item> items, ItemStack output) See that list? You are currently throwing it in the garbage can. for (int i = 0; i < itemStacks.size(); i++) { for (ItemStack itemstack1 : itemStacks) { See these two loops? They iterate over the same items. They will always match. You need to get the first list (from the constructor) into the second loop. Edited April 4, 2018 by Draco18s Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
EmeraldJelly Posted April 4, 2018 Author Share Posted April 4, 2018 (edited) private ItemStack resultItem = ItemStack.EMPTY; List<ItemStack> items = new ArrayList<ItemStack>(); public CauldronRecipe(List<ItemStack> items, ItemStack output) { this.resultItem = output; this.items = items; } for (int i = 0; i < itemStacks.size(); i++) { ItemStack itemstack = itemStacks.get(i); if (itemstack != ItemStack.EMPTY) { boolean flag = false; for (ItemStack itemstack1 : this.items) { Like that? Where do I check for matching now, like when I throw the items in and get the list what class of mine (and how) do I check if it matches.. Edited April 4, 2018 by EmeraldJelly Quote Link to comment Share on other sites More sharing options...
Draco18s Posted April 4, 2018 Share Posted April 4, 2018 (edited) Well, you need to make sure that your matches method isn't modifying the recipe. You can do this by cloning the list that has items removed from it, and removing from the clone. Edited April 4, 2018 by Draco18s Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
EmeraldJelly Posted April 5, 2018 Author Share Posted April 5, 2018 (edited) That does not answer my question.. The list is a public static final. Final's cannot be modified. 2 hours ago, EmeraldJelly said: Like that? Where do I check for matching now, like when I throw the items in and get the list what class of mine (and how) do I check if it matches.. Edited April 5, 2018 by EmeraldJelly Quote Link to comment Share on other sites More sharing options...
jhdoran Posted April 5, 2018 Share Posted April 5, 2018 29 minutes ago, EmeraldJelly said: That does not answer my question.. The list is a public static final. Final's cannot be modified. You were advised to clone the list. Therefore, don't make the new list public static final. Quote Link to comment Share on other sites More sharing options...
EmeraldJelly Posted April 5, 2018 Author Share Posted April 5, 2018 (edited) ok then I wont, but that still doesn't answer my question. Considered it cloned and non final. But still. Here is everything I have. Rather then giving me bits and pieces in many different replies of small tiny things I got wrong, I kindly ask for you to tell me what and where I need to put specific things to get this all to work together nicely. Recipe List Class Spoiler package emeraldjelly.mystica.util.recipe.cauldron; import emeraldjelly.mystica.init.ModItems; import emeraldjelly.mystica.util.recipe.recipetypes.CauldronRecipe; import net.minecraft.item.ItemStack; import java.util.ArrayList; import java.util.Arrays; public class CauldronRecipes { public static CauldronRecipe EMPTYLACRIMA = new CauldronRecipe(new ArrayList<ItemStack> (Arrays.asList(new ItemStack(ModItems.LACRIMITESHARDS), new ItemStack(ModItems.LACRIMITESHARDS))), new ItemStack(ModItems.LACRIMITESHARDS)); } Recipe Class Spoiler package emeraldjelly.mystica.util.recipe.recipetypes; ; import emeraldjelly.mystica.api.ICauldronRecipe; import emeraldjelly.mystica.init.ModItems; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class CauldronRecipe implements ICauldronRecipe { //What am Missing in this class? Where do I make all of this code happen? private ItemStack resultItem = ItemStack.EMPTY; List<ItemStack> items = new ArrayList<ItemStack>(); public CauldronRecipe(List<ItemStack> items, ItemStack output) { this.resultItem = output; this.items = items; } @Override public boolean matches(List<ItemStack> itemStacks) { List<ItemStack> items1 = items; for (int i = 0; i < itemStacks.size(); i++) { ItemStack itemstack = itemStacks.get(i); if (itemstack != ItemStack.EMPTY) { boolean flag = false; for (ItemStack itemstack1 : items1) { if (!itemstack.hasTagCompound() && itemstack.getItem() == itemstack1.getItem() && ( itemstack1.getMetadata() == OreDictionary.WILDCARD_VALUE || itemstack.getMetadata() == itemstack1.getMetadata())) { flag = true; itemStacks.remove(itemstack1); break; } } if (!flag) { return false; } } } return itemStacks.isEmpty(); } @Override public ItemStack getCraftingResult() { return resultItem; } } TileEntity Class Spoiler package emeraldjelly.mystica.blocks.tileentity; import emeraldjelly.mystica.util.recipe.recipetypes.CauldronRecipe; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EntitySelectors; import net.minecraft.util.ITickable; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.items.ItemStackHandler; import java.util.ArrayList; import java.util.List; public class TileEntitySorcerersCauldron extends TileEntity implements ITickable { //Do i need to Implement anything else? public static AxisAlignedBB AABB = new AxisAlignedBB(0, 0, 0, 1, 1.2D, 1); static List<ItemStack> items = new ArrayList<>(); private int cooldown; private ItemStackHandler handler; public TileEntitySorcerersCauldron() { this.cooldown = 0; this.handler = new ItemStackHandler(5); } @Override public NBTTagCompound writeToNBT(NBTTagCompound compound) { compound.setInteger("Cooldown", this.cooldown); compound.setTag("ItemStackHandler", this.handler.serializeNBT()); return super.writeToNBT(compound); } @Override public void readFromNBT(NBTTagCompound compound) { this.cooldown = compound.getInteger("Cooldown"); this.handler.deserializeNBT(compound.getCompoundTag("ItemStackHandler")); super.readFromNBT(compound); } @Override public void update() { this.cooldown++; this.cooldown %= 100; populateCauldronList(getCaptureItems(world)); } public List<EntityItem> getCaptureItems(World worldIn) { return worldIn.<EntityItem>getEntitiesWithinAABB(EntityItem.class, AABB, EntitySelectors.IS_ALIVE); } public void populateCauldronList(List<EntityItem> entityItems) { for (int i = 0; i < entityItems.size(); i++) { items.add(new ItemStack(entityItems.get(i).getItem().getItem())); } checkAndCraft(items); } public void checkAndCraft(List<ItemStack> itemsList) { } @Override public SPacketUpdateTileEntity getUpdatePacket() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); int metadata = getBlockMetadata(); return new SPacketUpdateTileEntity(this.pos, metadata, nbt); } @Override public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) { this.readFromNBT(pkt.getNbtCompound()); } @Override public NBTTagCompound getUpdateTag() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); return nbt; } @Override public void handleUpdateTag(NBTTagCompound tag) { this.readFromNBT(tag); } @Override public NBTTagCompound getTileData() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); return nbt; } } Edited April 5, 2018 by EmeraldJelly Quote Link to comment Share on other sites More sharing options...
Draco18s Posted April 5, 2018 Share Posted April 5, 2018 static wasn't an appropriate keyword anyway. You want the list to be per recipe. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
EmeraldJelly Posted April 5, 2018 Author Share Posted April 5, 2018 I: that doesn't solve anything...... Quote Link to comment Share on other sites More sharing options...
Draco18s Posted April 5, 2018 Share Posted April 5, 2018 Post your current code and describe the problem that is still affecting you. I also recommend using the debugger. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
jhdoran Posted April 5, 2018 Share Posted April 5, 2018 I stopped reading when I hit matches with variables: itemstack, itemStacks, itemstack1. None of these are descriptive. Slightly better than 11l1ll11, 1ll1l11l and 11llll1l1. If you are confused, it would help to unconfuse by rewriting the code so that it made sense. Variables like "flag" don't help. I believe I recognize the Furnace here, but that was obfuscated code to begin with. Quote Link to comment Share on other sites More sharing options...
EmeraldJelly Posted April 5, 2018 Author Share Posted April 5, 2018 (edited) 15 minutes ago, jhdoran said: I stopped reading when I hit matches with variables: itemstack, itemStacks, itemstack1. None of these are descriptive. Slightly better than 11l1ll11, 1ll1l11l and 11llll1l1. If you are confused, it would help to unconfuse by rewriting the code so that it made sense. Variables like "flag" don't help. I believe I recognize the Furnace here, but that was obfuscated code to begin with. Uh there is no Furnace involved... And 31 minutes ago, Draco18s said: Post your current code and describe the problem that is still affecting you. I also recommend using the debugger. My current code is the one I posted above... 1 hour ago, EmeraldJelly said: ok then I wont, but that still doesn't answer my question. Considered it cloned and non final. But still. Here is everything I have. Rather then giving me bits and pieces in many different replies of small tiny things I got wrong, I kindly ask for you to tell me what and where I need to put specific things to get this all to work together nicely. Recipe List Class Reveal hidden contents package emeraldjelly.mystica.util.recipe.cauldron; import emeraldjelly.mystica.init.ModItems; import emeraldjelly.mystica.util.recipe.recipetypes.CauldronRecipe; import net.minecraft.item.ItemStack; import java.util.ArrayList; import java.util.Arrays; public class CauldronRecipes { public static CauldronRecipe EMPTYLACRIMA = new CauldronRecipe(new ArrayList<ItemStack> (Arrays.asList(new ItemStack(ModItems.LACRIMITESHARDS), new ItemStack(ModItems.LACRIMITESHARDS))), new ItemStack(ModItems.LACRIMITESHARDS)); } Recipe Class Reveal hidden contents package emeraldjelly.mystica.util.recipe.recipetypes; ; import emeraldjelly.mystica.api.ICauldronRecipe; import emeraldjelly.mystica.init.ModItems; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class CauldronRecipe implements ICauldronRecipe { //What am Missing in this class? Where do I make all of this code happen? private ItemStack resultItem = ItemStack.EMPTY; List<ItemStack> items = new ArrayList<ItemStack>(); public CauldronRecipe(List<ItemStack> items, ItemStack output) { this.resultItem = output; this.items = items; } @Override public boolean matches(List<ItemStack> itemStacks) { List<ItemStack> items1 = items; for (int i = 0; i < itemStacks.size(); i++) { ItemStack itemstack = itemStacks.get(i); if (itemstack != ItemStack.EMPTY) { boolean flag = false; for (ItemStack itemstack1 : items1) { if (!itemstack.hasTagCompound() && itemstack.getItem() == itemstack1.getItem() && ( itemstack1.getMetadata() == OreDictionary.WILDCARD_VALUE || itemstack.getMetadata() == itemstack1.getMetadata())) { flag = true; itemStacks.remove(itemstack1); break; } } if (!flag) { return false; } } } return itemStacks.isEmpty(); } @Override public ItemStack getCraftingResult() { return resultItem; } } TileEntity Class Reveal hidden contents package emeraldjelly.mystica.blocks.tileentity; import emeraldjelly.mystica.util.recipe.recipetypes.CauldronRecipe; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EntitySelectors; import net.minecraft.util.ITickable; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.items.ItemStackHandler; import java.util.ArrayList; import java.util.List; public class TileEntitySorcerersCauldron extends TileEntity implements ITickable { //Do i need to Implement anything else? public static AxisAlignedBB AABB = new AxisAlignedBB(0, 0, 0, 1, 1.2D, 1); static List<ItemStack> items = new ArrayList<>(); private int cooldown; private ItemStackHandler handler; public TileEntitySorcerersCauldron() { this.cooldown = 0; this.handler = new ItemStackHandler(5); } @Override public NBTTagCompound writeToNBT(NBTTagCompound compound) { compound.setInteger("Cooldown", this.cooldown); compound.setTag("ItemStackHandler", this.handler.serializeNBT()); return super.writeToNBT(compound); } @Override public void readFromNBT(NBTTagCompound compound) { this.cooldown = compound.getInteger("Cooldown"); this.handler.deserializeNBT(compound.getCompoundTag("ItemStackHandler")); super.readFromNBT(compound); } @Override public void update() { this.cooldown++; this.cooldown %= 100; populateCauldronList(getCaptureItems(world)); } public List<EntityItem> getCaptureItems(World worldIn) { return worldIn.<EntityItem>getEntitiesWithinAABB(EntityItem.class, AABB, EntitySelectors.IS_ALIVE); } public void populateCauldronList(List<EntityItem> entityItems) { for (int i = 0; i < entityItems.size(); i++) { items.add(new ItemStack(entityItems.get(i).getItem().getItem())); } checkAndCraft(items); } public void checkAndCraft(List<ItemStack> itemsList) { } @Override public SPacketUpdateTileEntity getUpdatePacket() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); int metadata = getBlockMetadata(); return new SPacketUpdateTileEntity(this.pos, metadata, nbt); } @Override public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) { this.readFromNBT(pkt.getNbtCompound()); } @Override public NBTTagCompound getUpdateTag() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); return nbt; } @Override public void handleUpdateTag(NBTTagCompound tag) { this.readFromNBT(tag); } @Override public NBTTagCompound getTileData() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); return nbt; } } MY PROBLEM IS AS FOLLOWS: I want to know how the HELL I can get check to see if the items picked up by the cauldron matches using the matches code FROM the TileEntity class. Inputting the list of items put in FROM the getCapturedItems method, and outputting and spawning in the world the correct output correlating to the recipe that it matches... I will describe the steps I want to take, please tell me how to take them. (ALL WITHIN THE TILEENTITY CLASS) Step 1: put dropped items into a list. Step 2: check to see if those items match any recipes. Step 3: grab that recipes output. Step 4: spawn the output into the world. Step 5: clear the list of dropped items. Edited April 5, 2018 by EmeraldJelly Quote Link to comment Share on other sites More sharing options...
Draco18s Posted April 5, 2018 Share Posted April 5, 2018 (edited) 15 minutes ago, EmeraldJelly said: I want to know how the HELL I can get check to see if the items picked up by the cauldron matches using the matches code FROM the TileEntity class. The TE passes a list of item stacks (its contents) to the recipe's matches method. That method compares the contents as I originally described. 15 minutes ago, EmeraldJelly said: Inputting the list of items put in FROM the getCapturedItems method, and outputting and spawning in the world the correct output correlating to the recipe that it matches... Captured Drops should be stored in an ItemStackHandler inventory. 15 minutes ago, EmeraldJelly said: Step 1: put dropped items into a list. Step 2: check to see if those items match any recipes. Step 3: grab that recipes output. Step 4: spawn the output into the world. Step 5: clear the list of dropped items. 1. ItemStackHandler as any other inventory. Creating a list from this should not in any way require my help. It's basic Java 2. See above. 3. For each recipe, does it match, if so, get that recipe's output. You will already have a reference to the recipe in order to check matches, just use that same reference. 4. new EntityItem(...); entity.spawnInWorld(...) 5. If the recipe matches, remove its recipe inputs from the TE's inventory Edited April 5, 2018 by Draco18s Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
EmeraldJelly Posted April 5, 2018 Author Share Posted April 5, 2018 1 minute ago, Draco18s said: The TE passes a list of item stacks (its contents) to the recipe's matches method. That method compares the contents as I originally described. Captured Drops should be stored in an ItemStackHandler inventory. 1. ItemStackHandler as any other inventory. Creating a list from this should not in any way require my help. It's basic Java 2. See above. 3. For each recipe, does it match, if so, get that recipe's output. You will already have a reference to the recipe in order to check matches, just use that same reference. 4. new EntityItem(); entity.spawnInWorld() 5. If the recipe matches, remove its recipe inputs from the TE's inventory This ALL makes sense to me now just 1 missing piece of the puzzle. How do I make the TE communicate with the Recipe class? Because it flat out wont let me call matches from the TE class. And I cannot extend more then 1 thing. Quote Link to comment Share on other sites More sharing options...
Draco18s Posted April 5, 2018 Share Posted April 5, 2018 That's what CaudronRecipes is for. It should contain a list of all ICauldronRecipe instances. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
EmeraldJelly Posted April 5, 2018 Author Share Posted April 5, 2018 (edited) uhh. can you like write an example of that please. Im sorry I keep bothering you. Last thing I promise. Edited April 5, 2018 by EmeraldJelly Quote Link to comment Share on other sites More sharing options...
Draco18s Posted April 5, 2018 Share Posted April 5, 2018 (edited) I have a class like this for one of my "machines": https://github.com/Draco18s/ReasonableRealism/blob/1.12.1/src/main/java/com/draco18s/ores/recipes/OreProcessingRecipes.java (Actually, three machines) Edited April 5, 2018 by Draco18s Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
EmeraldJelly Posted April 5, 2018 Author Share Posted April 5, 2018 (edited) and which one of your tile entities uses that? All im asking is what LINE of code do I use to get my TileEntity to send that information over to the recipe classes and in return get a true or false for match and the output item. Where do I put that. Edited April 5, 2018 by EmeraldJelly Quote Link to comment Share on other sites More sharing options...
Draco18s Posted April 5, 2018 Share Posted April 5, 2018 I use a library API reference. But your CauldronRecipes class can just contain a static reference to the list of ICauldronRecipe instances. https://github.com/Draco18s/ReasonableRealism/blob/1.12.1/src/main/java/com/draco18s/ores/entities/TileEntitySifter.java#L91 Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
EmeraldJelly Posted April 5, 2018 Author Share Posted April 5, 2018 But I STILL do not know how to CALL THAT MATCHES METHOD IN THE CAULDRON RECPE CLASS. Quote Link to comment Share on other sites More sharing options...
Draco18s Posted April 5, 2018 Share Posted April 5, 2018 In your TE: CauldronRecipes.getResult(myItems) 1 hour ago, Draco18s said: It should contain a list of all ICauldronRecipe instances. 1 hour ago, Draco18s said: 3. For each recipe, does it match, if so, get that recipe's output. You will already have a reference to the recipe in order to check matches, just use that same reference. In CauldronRecipes: public static ItemStack getResult(List<ItemStack> items) { foreach(ICauldronRecipe recipe in RECIPES) { if(recipe.matches(items)) { //do stuff } } } Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
EmeraldJelly Posted April 5, 2018 Author Share Posted April 5, 2018 (edited) Oml.. I think that is it LOL Here ill send you my final code and you can tell me if there is anything I missed but I dont think so THANK YOU, YOU ARE A GOD XD!!! (Oh also I think my getCaptureEntities Method is flawed, what do I do there XD) TileEntity Spoiler package emeraldjelly.mystica.blocks.tileentity; import emeraldjelly.mystica.api.ICauldronRecipe; import emeraldjelly.mystica.util.recipe.cauldron.CauldronRecipes; import emeraldjelly.mystica.util.recipe.recipetypes.CauldronRecipe; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EntitySelectors; import net.minecraft.util.ITickable; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.items.ItemStackHandler; import java.util.ArrayList; import java.util.List; public class TileEntitySorcerersCauldron extends TileEntity implements ITickable { //Do i need to Implement anything else? public static AxisAlignedBB AABB = new AxisAlignedBB(0, 0, 0, 1, 1.2D, 1); static List<ItemStack> items = new ArrayList<>(); private int cooldown; private ItemStackHandler handler; public TileEntitySorcerersCauldron() { this.cooldown = 0; this.handler = new ItemStackHandler(5); } @Override public NBTTagCompound writeToNBT(NBTTagCompound compound) { compound.setInteger("Cooldown", this.cooldown); compound.setTag("ItemStackHandler", this.handler.serializeNBT()); return super.writeToNBT(compound); } @Override public void readFromNBT(NBTTagCompound compound) { this.cooldown = compound.getInteger("Cooldown"); this.handler.deserializeNBT(compound.getCompoundTag("ItemStackHandler")); super.readFromNBT(compound); } @Override public void update() { this.cooldown++; this.cooldown %= 100; populateCauldronList(getCaptureItems(world)); } public List<EntityItem> getCaptureItems(World worldIn) { return worldIn.<EntityItem>getEntitiesWithinAABB(EntityItem.class, AABB, EntitySelectors.IS_ALIVE); } public void populateCauldronList(List<EntityItem> entityItems) { for (int i = 0; i < entityItems.size(); i++) { items.add(new ItemStack(entityItems.get(i).getItem().getItem())); } checkAndCraft(items); } public void checkAndCraft(List<ItemStack> itemsList) { EntityItem entityItem = new EntityItem(world, pos.getX(), pos.getY(), pos.getZ(), CauldronRecipes.getResult(items)); } @Override public SPacketUpdateTileEntity getUpdatePacket() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); int metadata = getBlockMetadata(); return new SPacketUpdateTileEntity(this.pos, metadata, nbt); } @Override public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) { this.readFromNBT(pkt.getNbtCompound()); } @Override public NBTTagCompound getUpdateTag() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); return nbt; } @Override public void handleUpdateTag(NBTTagCompound tag) { this.readFromNBT(tag); } @Override public NBTTagCompound getTileData() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); return nbt; } } CauldronRecipes Spoiler package emeraldjelly.mystica.util.recipe.cauldron; import emeraldjelly.mystica.api.ICauldronRecipe; import emeraldjelly.mystica.init.ModItems; import emeraldjelly.mystica.util.recipe.recipetypes.CauldronRecipe; import net.minecraft.item.ItemStack; import paulscode.sound.ICodec; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class CauldronRecipes { public static void init() { RECIPES.add(EMPTYLACRIMA); } public static List<ICauldronRecipe> RECIPES = new ArrayList<ICauldronRecipe>(); public static final CauldronRecipe EMPTYLACRIMA = new CauldronRecipe(new ArrayList<ItemStack> (Arrays.asList(new ItemStack(ModItems.LACRIMITESHARDS), new ItemStack(ModItems.LACRIMITESHARDS))), new ItemStack(ModItems.LACRIMITESHARDS)); public static ItemStack getResult(List<ItemStack> items) { for (ICauldronRecipe recipe : RECIPES) { if (recipe.matches(items)) { return recipe.getCraftingResult(); } } return null; } } CauldronRecipe Spoiler package emeraldjelly.mystica.util.recipe.recipetypes; ; import emeraldjelly.mystica.api.ICauldronRecipe; import emeraldjelly.mystica.init.ModItems; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class CauldronRecipe implements ICauldronRecipe { //What am Missing in this class? Where do I make all of this code happen? static public ItemStack resultItem = ItemStack.EMPTY; static List<ItemStack> items = new ArrayList<ItemStack>(); public CauldronRecipe(List<ItemStack> items, ItemStack output) { this.resultItem = output; this.items = items; } @Override public boolean matches(List<ItemStack> itemStacks) { List<ItemStack> items1 = items; for (int i = 0; i < itemStacks.size(); i++) { ItemStack itemstack = itemStacks.get(i); if (itemstack != ItemStack.EMPTY) { boolean flag = false; for (ItemStack itemstack1 : items1) { if (!itemstack.hasTagCompound() && itemstack.getItem() == itemstack1.getItem() && ( itemstack1.getMetadata() == OreDictionary.WILDCARD_VALUE || itemstack.getMetadata() == itemstack1.getMetadata())) { flag = true; itemStacks.remove(itemstack1); break; } } if (!flag) { return false; } } } return itemStacks.isEmpty(); } @Override public ItemStack getCraftingResult() { return resultItem; } } ICauldronRecipe Spoiler package emeraldjelly.mystica.api; import net.minecraft.item.ItemStack; import java.util.List; public interface ICauldronRecipe { /** * Used to check if a recipe matches current crafting inventory */ boolean matches(List<ItemStack> itemStacks); /** * Returns an Item that is the result of this recipe */ ItemStack getCraftingResult(); } Edited April 5, 2018 by EmeraldJelly Quote Link to comment Share on other sites More sharing options...
EmeraldJelly Posted April 5, 2018 Author Share Posted April 5, 2018 19 hours ago, EmeraldJelly said: Oml.. I think that is it LOL Here ill send you my final code and you can tell me if there is anything I missed but I dont think so THANK YOU, YOU ARE A GOD XD!!! (Oh also I think my getCaptureEntities Method is flawed, what do I do there XD) TileEntity Reveal hidden contents package emeraldjelly.mystica.blocks.tileentity; import emeraldjelly.mystica.api.ICauldronRecipe; import emeraldjelly.mystica.util.recipe.cauldron.CauldronRecipes; import emeraldjelly.mystica.util.recipe.recipetypes.CauldronRecipe; import net.minecraft.entity.item.EntityItem; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.play.server.SPacketUpdateTileEntity; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.EntitySelectors; import net.minecraft.util.ITickable; import net.minecraft.util.math.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.items.ItemStackHandler; import java.util.ArrayList; import java.util.List; public class TileEntitySorcerersCauldron extends TileEntity implements ITickable { //Do i need to Implement anything else? public static AxisAlignedBB AABB = new AxisAlignedBB(0, 0, 0, 1, 1.2D, 1); static List<ItemStack> items = new ArrayList<>(); private int cooldown; private ItemStackHandler handler; public TileEntitySorcerersCauldron() { this.cooldown = 0; this.handler = new ItemStackHandler(5); } @Override public NBTTagCompound writeToNBT(NBTTagCompound compound) { compound.setInteger("Cooldown", this.cooldown); compound.setTag("ItemStackHandler", this.handler.serializeNBT()); return super.writeToNBT(compound); } @Override public void readFromNBT(NBTTagCompound compound) { this.cooldown = compound.getInteger("Cooldown"); this.handler.deserializeNBT(compound.getCompoundTag("ItemStackHandler")); super.readFromNBT(compound); } @Override public void update() { this.cooldown++; this.cooldown %= 100; populateCauldronList(getCaptureItems(world)); } public List<EntityItem> getCaptureItems(World worldIn) { return worldIn.<EntityItem>getEntitiesWithinAABB(EntityItem.class, AABB, EntitySelectors.IS_ALIVE); } public void populateCauldronList(List<EntityItem> entityItems) { for (int i = 0; i < entityItems.size(); i++) { items.add(new ItemStack(entityItems.get(i).getItem().getItem())); } checkAndCraft(items); } public void checkAndCraft(List<ItemStack> itemsList) { EntityItem entityItem = new EntityItem(world, pos.getX(), pos.getY(), pos.getZ(), CauldronRecipes.getResult(items)); } @Override public SPacketUpdateTileEntity getUpdatePacket() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); int metadata = getBlockMetadata(); return new SPacketUpdateTileEntity(this.pos, metadata, nbt); } @Override public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity pkt) { this.readFromNBT(pkt.getNbtCompound()); } @Override public NBTTagCompound getUpdateTag() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); return nbt; } @Override public void handleUpdateTag(NBTTagCompound tag) { this.readFromNBT(tag); } @Override public NBTTagCompound getTileData() { NBTTagCompound nbt = new NBTTagCompound(); this.writeToNBT(nbt); return nbt; } } CauldronRecipes Reveal hidden contents package emeraldjelly.mystica.util.recipe.cauldron; import emeraldjelly.mystica.api.ICauldronRecipe; import emeraldjelly.mystica.init.ModItems; import emeraldjelly.mystica.util.recipe.recipetypes.CauldronRecipe; import net.minecraft.item.ItemStack; import paulscode.sound.ICodec; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class CauldronRecipes { public static void init() { RECIPES.add(EMPTYLACRIMA); } public static List<ICauldronRecipe> RECIPES = new ArrayList<ICauldronRecipe>(); public static final CauldronRecipe EMPTYLACRIMA = new CauldronRecipe(new ArrayList<ItemStack> (Arrays.asList(new ItemStack(ModItems.LACRIMITESHARDS), new ItemStack(ModItems.LACRIMITESHARDS))), new ItemStack(ModItems.LACRIMITESHARDS)); public static ItemStack getResult(List<ItemStack> items) { for (ICauldronRecipe recipe : RECIPES) { if (recipe.matches(items)) { return recipe.getCraftingResult(); } } return null; } } CauldronRecipe Reveal hidden contents package emeraldjelly.mystica.util.recipe.recipetypes; ; import emeraldjelly.mystica.api.ICauldronRecipe; import emeraldjelly.mystica.init.ModItems; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraftforge.oredict.OreDictionary; import java.util.ArrayList; import java.util.Arrays; import java.util.List; public class CauldronRecipe implements ICauldronRecipe { //What am Missing in this class? Where do I make all of this code happen? static public ItemStack resultItem = ItemStack.EMPTY; static List<ItemStack> items = new ArrayList<ItemStack>(); public CauldronRecipe(List<ItemStack> items, ItemStack output) { this.resultItem = output; this.items = items; } @Override public boolean matches(List<ItemStack> itemStacks) { List<ItemStack> items1 = items; for (int i = 0; i < itemStacks.size(); i++) { ItemStack itemstack = itemStacks.get(i); if (itemstack != ItemStack.EMPTY) { boolean flag = false; for (ItemStack itemstack1 : items1) { if (!itemstack.hasTagCompound() && itemstack.getItem() == itemstack1.getItem() && ( itemstack1.getMetadata() == OreDictionary.WILDCARD_VALUE || itemstack.getMetadata() == itemstack1.getMetadata())) { flag = true; itemStacks.remove(itemstack1); break; } } if (!flag) { return false; } } } return itemStacks.isEmpty(); } @Override public ItemStack getCraftingResult() { return resultItem; } } ICauldronRecipe Reveal hidden contents package emeraldjelly.mystica.api; import net.minecraft.item.ItemStack; import java.util.List; public interface ICauldronRecipe { /** * Used to check if a recipe matches current crafting inventory */ boolean matches(List<ItemStack> itemStacks); /** * Returns an Item that is the result of this recipe */ ItemStack getCraftingResult(); } It Crashes my game...... Spoiler [17:54:28] [main/FATAL] [net.minecraft.client.Minecraft]: Reported exception thrown! net.minecraft.util.ReportedException: Colliding entity with block at net.minecraft.world.World.updateEntities(World.java:1942) ~[World.class:?] at net.minecraft.client.Minecraft.runTick(Minecraft.java:1972) ~[Minecraft.class:?] at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1186) ~[Minecraft.class:?] at net.minecraft.client.Minecraft.run(Minecraft.java:441) [Minecraft.class:?] at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_151] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_151] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_151] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_151] at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_151] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_151] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_151] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_151] at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?] at GradleStart.main(GradleStart.java:25) [start/:?] Caused by: java.lang.NullPointerException at net.minecraft.entity.item.EntityItem.<init>(EntityItem.java:66) ~[EntityItem.class:?] at emeraldjelly.mystica.blocks.tileentity.TileEntitySorcerersCauldron.checkAndCraft(TileEntitySorcerersCauldron.java:65) ~[TileEntitySorcerersCauldron.class:?] at emeraldjelly.mystica.blocks.tileentity.TileEntitySorcerersCauldron.onCollideAddItems(TileEntitySorcerersCauldron.java:58) ~[TileEntitySorcerersCauldron.class:?] at emeraldjelly.mystica.blocks.SorcerersCauldron.onEntityCollidedWithBlock(SorcerersCauldron.java:43) ~[SorcerersCauldron.class:?] at net.minecraft.entity.Entity.doBlockCollisions(Entity.java:1152) ~[Entity.class:?] at net.minecraft.entity.Entity.move(Entity.java:1070) ~[Entity.class:?] at net.minecraft.entity.item.EntityItem.onUpdate(EntityItem.java:132) ~[EntityItem.class:?] at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2168) ~[World.class:?] at net.minecraft.world.World.updateEntity(World.java:2127) ~[World.class:?] at net.minecraft.world.World.updateEntities(World.java:1928) ~[World.class:?] ... 16 more [17:54:28] [main/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:629]: ---- Minecraft Crash Report ---- // Ouch. That hurt Time: 4/5/18 5:54 PM Description: Colliding entity with block java.lang.NullPointerException: Colliding entity with block at net.minecraft.entity.item.EntityItem.<init>(EntityItem.java:66) at emeraldjelly.mystica.blocks.tileentity.TileEntitySorcerersCauldron.checkAndCraft(TileEntitySorcerersCauldron.java:65) at emeraldjelly.mystica.blocks.tileentity.TileEntitySorcerersCauldron.onCollideAddItems(TileEntitySorcerersCauldron.java:58) at emeraldjelly.mystica.blocks.SorcerersCauldron.onEntityCollidedWithBlock(SorcerersCauldron.java:43) at net.minecraft.entity.Entity.doBlockCollisions(Entity.java:1152) at net.minecraft.entity.Entity.move(Entity.java:1070) at net.minecraft.entity.item.EntityItem.onUpdate(EntityItem.java:132) at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2168) at net.minecraft.world.World.updateEntity(World.java:2127) at net.minecraft.world.World.updateEntities(World.java:1928) at net.minecraft.client.Minecraft.runTick(Minecraft.java:1972) at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1186) at net.minecraft.client.Minecraft.run(Minecraft.java:441) at net.minecraft.client.main.Main.main(Main.java:118) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) at GradleStart.main(GradleStart.java:25) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Client thread Stacktrace: at net.minecraft.entity.item.EntityItem.<init>(EntityItem.java:66) at emeraldjelly.mystica.blocks.tileentity.TileEntitySorcerersCauldron.checkAndCraft(TileEntitySorcerersCauldron.java:65) at emeraldjelly.mystica.blocks.tileentity.TileEntitySorcerersCauldron.onCollideAddItems(TileEntitySorcerersCauldron.java:58) at emeraldjelly.mystica.blocks.SorcerersCauldron.onEntityCollidedWithBlock(SorcerersCauldron.java:43) -- Block being collided with -- Details: Block: myt:sorcerers_cauldron Block location: World: (1353,237,197), Chunk: (at 9,14,5 in 84,12; contains blocks 1344,0,192 to 1359,255,207), Region: (2,0; contains chunks 64,0 to 95,31, blocks 1024,0,0 to 1535,255,511) Stacktrace: at net.minecraft.entity.Entity.doBlockCollisions(Entity.java:1152) -- Entity being checked for collision -- Details: Entity Type: minecraft:item (net.minecraft.entity.item.EntityItem) Entity ID: 70 Entity Name: item.item.lacrimite_shards Entity's Exact location: 1353.13, 237.00, 197.12 Entity's Block location: World: (1353,237,197), Chunk: (at 9,14,5 in 84,12; contains blocks 1344,0,192 to 1359,255,207), Region: (2,0; contains chunks 64,0 to 95,31, blocks 1024,0,0 to 1535,255,511) Entity's Momentum: 0.00, 0.00, 0.00 Entity's Passengers: [] Entity's Vehicle: ~~ERROR~~ NullPointerException: null Stacktrace: at net.minecraft.entity.Entity.move(Entity.java:1070) at net.minecraft.entity.item.EntityItem.onUpdate(EntityItem.java:132) at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2168) at net.minecraft.world.World.updateEntity(World.java:2127) -- Entity being ticked -- Details: Entity Type: minecraft:item (net.minecraft.entity.item.EntityItem) Entity ID: 70 Entity Name: item.item.lacrimite_shards Entity's Exact location: 1353.13, 237.00, 197.12 Entity's Block location: World: (1353,237,197), Chunk: (at 9,14,5 in 84,12; contains blocks 1344,0,192 to 1359,255,207), Region: (2,0; contains chunks 64,0 to 95,31, blocks 1024,0,0 to 1535,255,511) Entity's Momentum: 0.00, 0.00, 0.00 Entity's Passengers: [] Entity's Vehicle: ~~ERROR~~ NullPointerException: null Stacktrace: at net.minecraft.world.World.updateEntities(World.java:1928) -- Affected level -- Details: Level name: MpServer All players: 1 total; [EntityPlayerSP['Player109'/21, l='MpServer', x=1353.90, y=237.00, z=195.75]] Chunk stats: MultiplayerChunkCache: 623, 623 Level seed: 0 Level generator: ID 01 - flat, ver 0. Features enabled: false Level generator options: Level spawn location: World: (1276,4,173), Chunk: (at 12,0,13 in 79,10; contains blocks 1264,0,160 to 1279,255,175), Region: (2,0; contains chunks 64,0 to 95,31, blocks 1024,0,0 to 1535,255,511) Level time: 165317 game time, 5850 day time Level dimension: 0 Level storage version: 0x00000 - Unknown? Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false) Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false Forced entities: 14 total; [EntityItem['item.item.lacrimite_shards'/70, l='MpServer', x=1353.13, y=237.00, z=197.12], EntityChicken['Chicken'/7, l='MpServer', x=1275.25, y=237.00, z=204.23], EntityPig['Pig'/10, l='MpServer', x=1309.38, y=237.00, z=159.29], EntityPig['Pig'/11, l='MpServer', x=1310.60, y=237.00, z=177.26], EntityCow['Cow'/12, l='MpServer', x=1310.55, y=237.00, z=239.85], EntitySheep['Sheep'/13, l='MpServer', x=1315.24, y=237.00, z=270.53], EntitySheep['Sheep'/14, l='MpServer', x=1328.78, y=237.00, z=219.06], EntitySheep['Sheep'/15, l='MpServer', x=1348.24, y=237.00, z=138.40], EntityItemFrame['entity.ItemFrame.name'/16, l='MpServer', x=1348.03, y=238.50, z=202.50], EntityItemFrame['entity.ItemFrame.name'/17, l='MpServer', x=1348.03, y=238.50, z=203.50], EntityItemFrame['entity.ItemFrame.name'/18, l='MpServer', x=1348.03, y=238.50, z=204.50], EntityItemFrame['entity.ItemFrame.name'/19, l='MpServer', x=1348.03, y=238.50, z=205.50], EntityPig['Pig'/20, l='MpServer', x=1408.28, y=237.00, z=216.75], EntityPlayerSP['Player109'/21, l='MpServer', x=1353.90, y=237.00, z=195.75]] Retry entities: 0 total; [] Server brand: fml,forge Server type: Integrated singleplayer server Stacktrace: at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:461) at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2896) at net.minecraft.client.Minecraft.run(Minecraft.java:462) at net.minecraft.client.main.Main.main(Main.java:118) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) at GradleStart.main(GradleStart.java:25) -- System Details -- Details: Minecraft Version: 1.12.2 Operating System: Mac OS X (x86_64) version 10.13.3 Java Version: 1.8.0_151, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 507934096 bytes (484 MB) / 1094713344 bytes (1044 MB) up to 1908932608 bytes (1820 MB) JVM Flags: 0 total; IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 FML: MCP 9.42 Powered by Forge 14.23.2.2640 5 mods loaded, 5 mods active States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored | State | ID | Version | Source | Signature | |:--------- |:--------- |:------------ |:-------------------------------- |:--------- | | UCHIJAAAA | minecraft | 1.12.2 | minecraft.jar | None | | UCHIJAAAA | mcp | 9.42 | minecraft.jar | None | | UCHIJAAAA | FML | 8.0.99.99 | forgeSrc-1.12.2-14.23.2.2640.jar | None | | UCHIJAAAA | forge | 14.23.2.2640 | forgeSrc-1.12.2-14.23.2.2640.jar | None | | UCHIJAAAA | myt | a0.1 | Mystica_main | None | Loaded coremods (and transformers): GL info: ' Vendor: 'Intel Inc.' Version: '2.1 INTEL-10.30.14' Renderer: 'Intel(R) Iris(TM) Graphics 550' Launched Version: 1.12.2 LWJGL: 2.9.2 OpenGL: Intel(R) Iris(TM) Graphics 550 GL version 2.1 INTEL-10.30.14, Intel Inc. GL Caps: Using GL 1.3 multitexturing. Using GL 1.3 texture combiners. Using framebuffer objects because ARB_framebuffer_object is supported and separate blending is supported. Shaders are available because OpenGL 2.1 is supported. VBOs are available because OpenGL 1.5 is supported. Using VBOs: Yes Is Modded: Definitely; Client brand changed to 'fml,forge' Type: Client (map_client.txt) Resource Packs: Current Language: English (US) Profiler Position: N/A (disabled) CPU: 4x Intel(R) Core(TM) i5-6267U CPU @ 2.90GHz [17:54:28] [main/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:629]: #@!@# Game crashed! Crash report saved to: #@!@# /Users/nicholasbrewster/Desktop/Coding/Modding/Mystica/run/./crash-reports/crash-2018-04-05_17.54.28-client.txt AL lib: (EE) alc_cleanup: 1 device not closed Process finished with exit code 255 [17:54:28] [main/FATAL] [net.minecraft.client.Minecraft]: Reported exception thrown! net.minecraft.util.ReportedException: Colliding entity with block at net.minecraft.world.World.updateEntities(World.java:1942) ~[World.class:?] at net.minecraft.client.Minecraft.runTick(Minecraft.java:1972) ~[Minecraft.class:?] at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1186) ~[Minecraft.class:?] at net.minecraft.client.Minecraft.run(Minecraft.java:441) [Minecraft.class:?] at net.minecraft.client.main.Main.main(Main.java:118) [Main.class:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_151] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_151] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_151] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_151] at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) [launchwrapper-1.12.jar:?] at net.minecraft.launchwrapper.Launch.main(Launch.java:28) [launchwrapper-1.12.jar:?] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_151] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_151] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_151] at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_151] at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) [start/:?] at GradleStart.main(GradleStart.java:25) [start/:?] Caused by: java.lang.NullPointerException at net.minecraft.entity.item.EntityItem.<init>(EntityItem.java:66) ~[EntityItem.class:?] at emeraldjelly.mystica.blocks.tileentity.TileEntitySorcerersCauldron.checkAndCraft(TileEntitySorcerersCauldron.java:65) ~[TileEntitySorcerersCauldron.class:?] at emeraldjelly.mystica.blocks.tileentity.TileEntitySorcerersCauldron.onCollideAddItems(TileEntitySorcerersCauldron.java:58) ~[TileEntitySorcerersCauldron.class:?] at emeraldjelly.mystica.blocks.SorcerersCauldron.onEntityCollidedWithBlock(SorcerersCauldron.java:43) ~[SorcerersCauldron.class:?] at net.minecraft.entity.Entity.doBlockCollisions(Entity.java:1152) ~[Entity.class:?] at net.minecraft.entity.Entity.move(Entity.java:1070) ~[Entity.class:?] at net.minecraft.entity.item.EntityItem.onUpdate(EntityItem.java:132) ~[EntityItem.class:?] at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2168) ~[World.class:?] at net.minecraft.world.World.updateEntity(World.java:2127) ~[World.class:?] at net.minecraft.world.World.updateEntities(World.java:1928) ~[World.class:?] ... 16 more [17:54:28] [main/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:629]: ---- Minecraft Crash Report ---- // Ouch. That hurt :( Time: 4/5/18 5:54 PM Description: Colliding entity with block java.lang.NullPointerException: Colliding entity with block at net.minecraft.entity.item.EntityItem.<init>(EntityItem.java:66) at emeraldjelly.mystica.blocks.tileentity.TileEntitySorcerersCauldron.checkAndCraft(TileEntitySorcerersCauldron.java:65) at emeraldjelly.mystica.blocks.tileentity.TileEntitySorcerersCauldron.onCollideAddItems(TileEntitySorcerersCauldron.java:58) at emeraldjelly.mystica.blocks.SorcerersCauldron.onEntityCollidedWithBlock(SorcerersCauldron.java:43) at net.minecraft.entity.Entity.doBlockCollisions(Entity.java:1152) at net.minecraft.entity.Entity.move(Entity.java:1070) at net.minecraft.entity.item.EntityItem.onUpdate(EntityItem.java:132) at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2168) at net.minecraft.world.World.updateEntity(World.java:2127) at net.minecraft.world.World.updateEntities(World.java:1928) at net.minecraft.client.Minecraft.runTick(Minecraft.java:1972) at net.minecraft.client.Minecraft.runGameLoop(Minecraft.java:1186) at net.minecraft.client.Minecraft.run(Minecraft.java:441) at net.minecraft.client.main.Main.main(Main.java:118) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) at GradleStart.main(GradleStart.java:25) A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- Head -- Thread: Client thread Stacktrace: at net.minecraft.entity.item.EntityItem.<init>(EntityItem.java:66) at emeraldjelly.mystica.blocks.tileentity.TileEntitySorcerersCauldron.checkAndCraft(TileEntitySorcerersCauldron.java:65) at emeraldjelly.mystica.blocks.tileentity.TileEntitySorcerersCauldron.onCollideAddItems(TileEntitySorcerersCauldron.java:58) at emeraldjelly.mystica.blocks.SorcerersCauldron.onEntityCollidedWithBlock(SorcerersCauldron.java:43) -- Block being collided with -- Details: Block: myt:sorcerers_cauldron Block location: World: (1353,237,197), Chunk: (at 9,14,5 in 84,12; contains blocks 1344,0,192 to 1359,255,207), Region: (2,0; contains chunks 64,0 to 95,31, blocks 1024,0,0 to 1535,255,511) Stacktrace: at net.minecraft.entity.Entity.doBlockCollisions(Entity.java:1152) -- Entity being checked for collision -- Details: Entity Type: minecraft:item (net.minecraft.entity.item.EntityItem) Entity ID: 70 Entity Name: item.item.lacrimite_shards Entity's Exact location: 1353.13, 237.00, 197.12 Entity's Block location: World: (1353,237,197), Chunk: (at 9,14,5 in 84,12; contains blocks 1344,0,192 to 1359,255,207), Region: (2,0; contains chunks 64,0 to 95,31, blocks 1024,0,0 to 1535,255,511) Entity's Momentum: 0.00, 0.00, 0.00 Entity's Passengers: [] Entity's Vehicle: ~~ERROR~~ NullPointerException: null Stacktrace: at net.minecraft.entity.Entity.move(Entity.java:1070) at net.minecraft.entity.item.EntityItem.onUpdate(EntityItem.java:132) at net.minecraft.world.World.updateEntityWithOptionalForce(World.java:2168) at net.minecraft.world.World.updateEntity(World.java:2127) -- Entity being ticked -- Details: Entity Type: minecraft:item (net.minecraft.entity.item.EntityItem) Entity ID: 70 Entity Name: item.item.lacrimite_shards Entity's Exact location: 1353.13, 237.00, 197.12 Entity's Block location: World: (1353,237,197), Chunk: (at 9,14,5 in 84,12; contains blocks 1344,0,192 to 1359,255,207), Region: (2,0; contains chunks 64,0 to 95,31, blocks 1024,0,0 to 1535,255,511) Entity's Momentum: 0.00, 0.00, 0.00 Entity's Passengers: [] Entity's Vehicle: ~~ERROR~~ NullPointerException: null Stacktrace: at net.minecraft.world.World.updateEntities(World.java:1928) -- Affected level -- Details: Level name: MpServer All players: 1 total; [EntityPlayerSP['Player109'/21, l='MpServer', x=1353.90, y=237.00, z=195.75]] Chunk stats: MultiplayerChunkCache: 623, 623 Level seed: 0 Level generator: ID 01 - flat, ver 0. Features enabled: false Level generator options: Level spawn location: World: (1276,4,173), Chunk: (at 12,0,13 in 79,10; contains blocks 1264,0,160 to 1279,255,175), Region: (2,0; contains chunks 64,0 to 95,31, blocks 1024,0,0 to 1535,255,511) Level time: 165317 game time, 5850 day time Level dimension: 0 Level storage version: 0x00000 - Unknown? Level weather: Rain time: 0 (now: false), thunder time: 0 (now: false) Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: false Forced entities: 14 total; [EntityItem['item.item.lacrimite_shards'/70, l='MpServer', x=1353.13, y=237.00, z=197.12], EntityChicken['Chicken'/7, l='MpServer', x=1275.25, y=237.00, z=204.23], EntityPig['Pig'/10, l='MpServer', x=1309.38, y=237.00, z=159.29], EntityPig['Pig'/11, l='MpServer', x=1310.60, y=237.00, z=177.26], EntityCow['Cow'/12, l='MpServer', x=1310.55, y=237.00, z=239.85], EntitySheep['Sheep'/13, l='MpServer', x=1315.24, y=237.00, z=270.53], EntitySheep['Sheep'/14, l='MpServer', x=1328.78, y=237.00, z=219.06], EntitySheep['Sheep'/15, l='MpServer', x=1348.24, y=237.00, z=138.40], EntityItemFrame['entity.ItemFrame.name'/16, l='MpServer', x=1348.03, y=238.50, z=202.50], EntityItemFrame['entity.ItemFrame.name'/17, l='MpServer', x=1348.03, y=238.50, z=203.50], EntityItemFrame['entity.ItemFrame.name'/18, l='MpServer', x=1348.03, y=238.50, z=204.50], EntityItemFrame['entity.ItemFrame.name'/19, l='MpServer', x=1348.03, y=238.50, z=205.50], EntityPig['Pig'/20, l='MpServer', x=1408.28, y=237.00, z=216.75], EntityPlayerSP['Player109'/21, l='MpServer', x=1353.90, y=237.00, z=195.75]] Retry entities: 0 total; [] Server brand: fml,forge Server type: Integrated singleplayer server Stacktrace: at net.minecraft.client.multiplayer.WorldClient.addWorldInfoToCrashReport(WorldClient.java:461) at net.minecraft.client.Minecraft.addGraphicsAndWorldToCrashReport(Minecraft.java:2896) at net.minecraft.client.Minecraft.run(Minecraft.java:462) at net.minecraft.client.main.Main.main(Main.java:118) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at net.minecraft.launchwrapper.Launch.launch(Launch.java:135) at net.minecraft.launchwrapper.Launch.main(Launch.java:28) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at net.minecraftforge.gradle.GradleStartCommon.launch(GradleStartCommon.java:97) at GradleStart.main(GradleStart.java:25) -- System Details -- Details: Minecraft Version: 1.12.2 Operating System: Mac OS X (x86_64) version 10.13.3 Java Version: 1.8.0_151, Oracle Corporation Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation Memory: 507934096 bytes (484 MB) / 1094713344 bytes (1044 MB) up to 1908932608 bytes (1820 MB) JVM Flags: 0 total; IntCache: cache: 0, tcache: 0, allocated: 0, tallocated: 0 FML: MCP 9.42 Powered by Forge 14.23.2.2640 5 mods loaded, 5 mods active States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored | State | ID | Version | Source | Signature | |:--------- |:--------- |:------------ |:-------------------------------- |:--------- | | UCHIJAAAA | minecraft | 1.12.2 | minecraft.jar | None | | UCHIJAAAA | mcp | 9.42 | minecraft.jar | None | | UCHIJAAAA | FML | 8.0.99.99 | forgeSrc-1.12.2-14.23.2.2640.jar | None | | UCHIJAAAA | forge | 14.23.2.2640 | forgeSrc-1.12.2-14.23.2.2640.jar | None | | UCHIJAAAA | myt | a0.1 | Mystica_main | None | Loaded coremods (and transformers): GL info: ' Vendor: 'Intel Inc.' Version: '2.1 INTEL-10.30.14' Renderer: 'Intel(R) Iris(TM) Graphics 550' Launched Version: 1.12.2 LWJGL: 2.9.2 OpenGL: Intel(R) Iris(TM) Graphics 550 GL version 2.1 INTEL-10.30.14, Intel Inc. GL Caps: Using GL 1.3 multitexturing. Using GL 1.3 texture combiners. Using framebuffer objects because ARB_framebuffer_object is supported and separate blending is supported. Shaders are available because OpenGL 2.1 is supported. VBOs are available because OpenGL 1.5 is supported. Using VBOs: Yes Is Modded: Definitely; Client brand changed to 'fml,forge' Type: Client (map_client.txt) Resource Packs: Current Language: English (US) Profiler Position: N/A (disabled) CPU: 4x Intel(R) Core(TM) i5-6267U CPU @ 2.90GHz [17:54:28] [main/INFO] [STDOUT]: [net.minecraft.init.Bootstrap:printToSYSOUT:629]: #@!@# Game crashed! Crash report saved to: #@!@# /Users/nicholasbrewster/Desktop/Coding/Modding/Mystica/run/./crash-reports/crash-2018-04-05_17.54.28-client.txt AL lib: (EE) alc_cleanup: 1 device not closed Process finished with exit code 255 Quote Link to comment Share on other sites More sharing options...
Draco18s Posted April 5, 2018 Share Posted April 5, 2018 You're attempting to spawn the recipe result before you've checked to make sure that there IS a result. Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
EmeraldJelly Posted April 5, 2018 Author Share Posted April 5, 2018 7 minutes ago, Draco18s said: You're attempting to spawn the recipe result before you've checked to make sure that there IS a result. I added a simple != null check, but again I think the problem is, it's not Capturing the items correctly, can you help me fix that, I believe its the only thing stopping this from working properly. Quote Link to comment Share on other sites More sharing options...
Draco18s Posted April 5, 2018 Share Posted April 5, 2018 Your AABB is static, that won't work. Each TE needs to have its own AABB collection volume, or they will only pull items from the world origin Quote Apparently I'm a complete and utter jerk and come to this forum just like to make fun of people, be confrontational, and make your personal life miserable. If you think this is the case, JUST REPORT ME. Otherwise you're just going to get reported when you reply to my posts and point it out, because odds are, I was trying to be nice. Exception: If you do not understand Java, I WILL NOT HELP YOU and your thread will get locked. DO NOT PM ME WITH PROBLEMS. No help will be given. Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.