Jump to content

Recommended Posts

Posted (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 by Draco18s

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.

  • Replies 67
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Posted Images

Posted (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 by EmeraldJelly
Posted (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 by Draco18s

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.

Posted (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 by EmeraldJelly
Posted
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.

Posted (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 by EmeraldJelly
Posted

static wasn't an appropriate keyword anyway. You want the list to be per recipe.

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.

Posted

Post your current code and describe the problem that is still affecting you. I also recommend using the debugger.

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.

Posted

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.

Posted (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 by EmeraldJelly
Posted (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 by Draco18s

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.

Posted
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. 

Posted

That's what CaudronRecipes is for. It should contain a list of all ICauldronRecipe instances.

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.

Posted (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 by Draco18s

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.

Posted (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 by EmeraldJelly
Posted

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

static.PNG

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.

Posted

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
      }
    }
}

 

 

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.

Posted (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 by EmeraldJelly
Posted
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

 

 

Posted

You're attempting to spawn the recipe result before you've checked to make sure that there IS a result.

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.

Posted
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.

Posted

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

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.

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Announcements




  • Recently Browsing

    • No registered users viewing this page.
  • Posts

    • Version 1.19 - Forge 41.0.63 I want to create a wolf entity that I can ride, so far it seems to be working, but the problem is that when I get on the wolf, I can’t control it. I then discovered that the issue is that the server doesn’t detect that I’m riding the wolf, so I’m struggling with synchronization. However, it seems to not be working properly. As I understand it, the server receives the packet but doesn’t register it correctly. I’m a bit new to Java, and I’ll try to provide all the relevant code and prints *The comments and prints are translated by chatgpt since they were originally in Spanish* Thank you very much in advance No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. No player is mounted, or the passenger is not a player. MountableWolfEntity package com.vals.valscraft.entity; import com.vals.valscraft.network.MountSyncPacket; import com.vals.valscraft.network.NetworkHandler; import net.minecraft.client.Minecraft; import net.minecraft.network.syncher.EntityDataAccessor; import net.minecraft.network.syncher.EntityDataSerializers; import net.minecraft.network.syncher.SynchedEntityData; import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.Mob; import net.minecraft.world.entity.ai.attributes.AttributeSupplier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.animal.Wolf; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.Entity; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.phys.Vec3; import net.minecraftforge.event.TickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.network.PacketDistributor; public class MountableWolfEntity extends Wolf { private boolean hasSaddle; private static final EntityDataAccessor<Byte> DATA_ID_FLAGS = SynchedEntityData.defineId(MountableWolfEntity.class, EntityDataSerializers.BYTE); public MountableWolfEntity(EntityType<? extends Wolf> type, Level level) { super(type, level); this.hasSaddle = false; } @Override protected void defineSynchedData() { super.defineSynchedData(); this.entityData.define(DATA_ID_FLAGS, (byte)0); } public static AttributeSupplier.Builder createAttributes() { return Wolf.createAttributes() .add(Attributes.MAX_HEALTH, 20.0) .add(Attributes.MOVEMENT_SPEED, 0.3); } @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack itemstack = player.getItemInHand(hand); if (itemstack.getItem() == Items.SADDLE && !this.hasSaddle()) { if (!player.isCreative()) { itemstack.shrink(1); } this.setSaddle(true); return InteractionResult.SUCCESS; } else if (!level.isClientSide && this.hasSaddle()) { player.startRiding(this); MountSyncPacket packet = new MountSyncPacket(true); // 'true' means the player is mounted NetworkHandler.CHANNEL.sendToServer(packet); // Ensure the server handles the packet return InteractionResult.SUCCESS; } return InteractionResult.PASS; } @Override public void travel(Vec3 travelVector) { if (this.isVehicle() && this.getControllingPassenger() instanceof Player) { System.out.println("The wolf has a passenger."); System.out.println("The passenger is a player."); Player player = (Player) this.getControllingPassenger(); // Ensure the player is the controller this.setYRot(player.getYRot()); this.yRotO = this.getYRot(); this.setXRot(player.getXRot() * 0.5F); this.setRot(this.getYRot(), this.getXRot()); this.yBodyRot = this.getYRot(); this.yHeadRot = this.yBodyRot; float forward = player.zza; float strafe = player.xxa; if (forward <= 0.0F) { forward *= 0.25F; } this.flyingSpeed = this.getSpeed() * 0.1F; this.setSpeed((float) this.getAttributeValue(Attributes.MOVEMENT_SPEED) * 1.5F); this.setDeltaMovement(new Vec3(strafe, travelVector.y, forward).scale(this.getSpeed())); this.calculateEntityAnimation(this, false); } else { // The wolf does not have a passenger or the passenger is not a player System.out.println("No player is mounted, or the passenger is not a player."); super.travel(travelVector); } } public boolean hasSaddle() { return this.hasSaddle; } public void setSaddle(boolean hasSaddle) { this.hasSaddle = hasSaddle; } @Override protected void dropEquipment() { super.dropEquipment(); if (this.hasSaddle()) { this.spawnAtLocation(Items.SADDLE); this.setSaddle(false); } } @SubscribeEvent public static void onServerTick(TickEvent.ServerTickEvent event) { if (event.phase == TickEvent.Phase.START) { MinecraftServer server = net.minecraftforge.server.ServerLifecycleHooks.getCurrentServer(); if (server != null) { for (ServerPlayer player : server.getPlayerList().getPlayers()) { if (player.isPassenger() && player.getVehicle() instanceof MountableWolfEntity) { MountableWolfEntity wolf = (MountableWolfEntity) player.getVehicle(); System.out.println("Tick: " + player.getName().getString() + " is correctly mounted on " + wolf); } } } } } private boolean lastMountedState = false; @Override public void tick() { super.tick(); if (!this.level.isClientSide) { // Only on the server boolean isMounted = this.isVehicle() && this.getControllingPassenger() instanceof Player; // Only print if the state changed if (isMounted != lastMountedState) { if (isMounted) { Player player = (Player) this.getControllingPassenger(); // Verify the passenger is a player System.out.println("Server: Player " + player.getName().getString() + " is now mounted."); } else { System.out.println("Server: The wolf no longer has a passenger."); } lastMountedState = isMounted; } } } @Override public void addPassenger(Entity passenger) { super.addPassenger(passenger); if (passenger instanceof Player) { Player player = (Player) passenger; if (!this.level.isClientSide && player instanceof ServerPlayer) { // Send the packet to the server to indicate the player is mounted NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MountSyncPacket(true)); } } } @Override public void removePassenger(Entity passenger) { super.removePassenger(passenger); if (passenger instanceof Player) { Player player = (Player) passenger; if (!this.level.isClientSide && player instanceof ServerPlayer) { // Send the packet to the server to indicate the player is no longer mounted NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> (ServerPlayer) player), new MountSyncPacket(false)); } } } @Override public boolean isControlledByLocalInstance() { Entity entity = this.getControllingPassenger(); return entity instanceof Player; } @Override public void positionRider(Entity passenger) { if (this.hasPassenger(passenger)) { double xOffset = Math.cos(Math.toRadians(this.getYRot() + 90)) * 0.4; double zOffset = Math.sin(Math.toRadians(this.getYRot() + 90)) * 0.4; passenger.setPos(this.getX() + xOffset, this.getY() + this.getPassengersRidingOffset() + passenger.getMyRidingOffset(), this.getZ() + zOffset); } } } MountSyncPacket package com.vals.valscraft.network; import com.vals.valscraft.entity.MountableWolfEntity; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; public class MountSyncPacket { private final boolean isMounted; public MountSyncPacket(boolean isMounted) { this.isMounted = isMounted; } public void encode(FriendlyByteBuf buffer) { buffer.writeBoolean(isMounted); } public static MountSyncPacket decode(FriendlyByteBuf buffer) { return new MountSyncPacket(buffer.readBoolean()); } public void handle(NetworkEvent.Context context) { context.enqueueWork(() -> { ServerPlayer player = context.getSender(); // Get the player from the context if (player != null) { // Verifies if the player has dismounted if (!isMounted) { Entity vehicle = player.getVehicle(); if (vehicle instanceof MountableWolfEntity wolf) { // Logic to remove the player as a passenger wolf.removePassenger(player); System.out.println("Server: Player " + player.getName().getString() + " is no longer mounted."); } } } }); context.setPacketHandled(true); // Marks the packet as handled } } networkHandler package com.vals.valscraft.network; import com.vals.valscraft.valscraft; import net.minecraft.resources.ResourceLocation; import net.minecraftforge.network.NetworkRegistry; import net.minecraftforge.network.simple.SimpleChannel; import net.minecraftforge.network.NetworkEvent; import java.util.function.Supplier; public class NetworkHandler { private static final String PROTOCOL_VERSION = "1"; public static final SimpleChannel CHANNEL = NetworkRegistry.newSimpleChannel( new ResourceLocation(valscraft.MODID, "main"), () -> PROTOCOL_VERSION, PROTOCOL_VERSION::equals, PROTOCOL_VERSION::equals ); public static void init() { int packetId = 0; // Register the mount synchronization packet CHANNEL.registerMessage( packetId++, MountSyncPacket.class, MountSyncPacket::encode, MountSyncPacket::decode, (msg, context) -> msg.handle(context.get()) // Get the context with context.get() ); } }  
    • Do you use features of inventory profiles next (ipnext) or is there a change without it?
    • Remove rubidium - you are already using embeddium, which is a fork of rubidium
  • Topics

×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.