Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

[1.7.10]Saving Tile Entity Data


grand_mind1
 Share

Recommended Posts

Hey, I'm trying to get my tile entity to save its data so it doesn't reset when the world is reloaded. I'm having a lot of trouble understand NBT, so it isn't going too well. I thought this read and write code would work, however it doesn't seem to do anything at all. If someone could explain this to me, it would be greatly appreciated.

My tile entity class:

 

public class TileEntityCoffeeMaker extends TileEntityInventory implements IFluidHandler
{

    public TileEntityCoffeeMaker()
    {
        super();
        this.size = 4;
        this.invName = Names.COFFEE_MAKER;
    }

    public static String getName()
    {
        return Names.TILE_COFFEE_MAKER;
    }

    @Override
    public void updateEntity()
    {
        if (getStackInSlot(0) != null)
        {
            if (getStackInSlot(0).isItemEqual(new ItemStack(Items.water_bucket)))
            {
                decrStackSize(0, 1);
                setInventorySlotContents(0, new ItemStack(Items.bucket));
                fill(ForgeDirection.EAST, new FluidStack(FluidRegistry.WATER, 1000), true);
            }
        }
        if (getStackInSlot(3) != null)
        {
            if (getStackInSlot(3).isItemEqual(new ItemStack(ModItems.ItemCoffeeMug)))
            {
                if (getCoffeeTank().getFluidAmount() >= 1000)
                {
                    decrStackSize(3, 1);
                    setInventorySlotContents(3, new ItemStack(ModItems.BeverageBlackCoffee));
                    drain(ForgeDirection.EAST, new FluidStack(ModFluids.LiquidCoffee, 1000), true);
                }
            }
        }
    }

    public FluidTank waterTank = new FluidTank(12000);
    public FluidTank coffeeTank = new FluidTank(12000);

    public FluidTank getWaterTank()
    {
        return waterTank;
    }

    public FluidTank getCoffeeTank()
    {
        return coffeeTank;
    }

    @Override
    public void readFromNBT(NBTTagCompound tag)
    {
        super.readFromNBT(tag);
        if (tag.hasKey("WaterTank"))
            waterTank = waterTank.readFromNBT(tag.getCompoundTag("WaterTank"));
        if (tag.hasKey("CoffeeTank"))
            coffeeTank = coffeeTank.readFromNBT(tag.getCompoundTag("CoffeeTank"));
    }

    @Override
    public void writeToNBT(NBTTagCompound tag)
    {
        super.writeToNBT(tag);
        NBTTagCompound waterTankNBT = new NBTTagCompound();
        waterTank.writeToNBT(waterTankNBT);
        NBTTagCompound coffeeTankNBT = new NBTTagCompound();
        coffeeTank.writeToNBT(coffeeTankNBT);
        tag.setTag("WaterTank", waterTankNBT);
        tag.setTag("CoffeeTank", coffeeTankNBT);
        tag.setString("A_Warning", "Don't let looks fool you, that panda eating bamboo over there is crazy");
    }

    @Override
    public int fill(ForgeDirection from, FluidStack resource, boolean doFill)
    {
        if (resource.isFluidEqual(new FluidStack(FluidRegistry.WATER, 1)))
        {
            return waterTank.fill(resource, doFill);
        } else if (resource.isFluidEqual(new FluidStack(ModFluids.LiquidCoffee, 1)))
        {
            return coffeeTank.fill(resource, doFill);
        }
        return 0;
    }

    @Override
    public FluidStack drain(ForgeDirection from, FluidStack resource, boolean doDrain)
    {
        if (resource == null || !resource.isFluidEqual(waterTank.getFluid()) || !resource.isFluidEqual(coffeeTank.getFluid()))
        {
            return null;
        } else if (resource.isFluidEqual(waterTank.getFluid()))
        {
            return waterTank.drain(resource.amount, doDrain);
        } else if (resource.isFluidEqual(coffeeTank.getFluid()))
        {
            return coffeeTank.drain(resource.amount, doDrain);
        }
        return null;
    }

    @Override
    public FluidStack drain(ForgeDirection from, int maxDrain, boolean doDrain)
    {
        if (from.equals(ForgeDirection.EAST))
        {
            return waterTank.drain(maxDrain, doDrain);
        }
        return coffeeTank.drain(maxDrain, doDrain);
    }

    @Override
    public boolean canFill(ForgeDirection from, Fluid fluid)
    {
        if (fluid == FluidRegistry.WATER || fluid == ModFluids.LiquidCoffee)
        {
            return true;
        }
        return false;
    }

    @Override
    public boolean canDrain(ForgeDirection from, Fluid fluid)
    {
        return true;
    }

    @Override
    public FluidTankInfo[] getTankInfo(ForgeDirection from)
    {
        return new FluidTankInfo[]{waterTank.getInfo(), coffeeTank.getInfo()};
    }
}

 

I'm pretty sure you only need the read and write from NBT methods, but I've included the whole class just in case. If you need anything else, please tell me.

Thanks! :D

Link to comment
Share on other sites

Ah, interesting point. Yes, I am going completely off the GUI. Would you say that the problem is related to the GUI and not the actual tile entity?

This is the GUI class:

 

public class GuiCoffeeMaker extends GuiContainer
{
    private int x, y, z;
    private EntityPlayer entityPlayer;
    private World world;
    private int xSize, ySize;
    private TileEntityCoffeeMaker instance;
    private ResourceLocation backgroundImage = new ResourceLocation(Reference.MOD_ID.toLowerCase() + ":textures/gui/GuiCoffeeMaker.png");

    public GuiCoffeeMaker(EntityPlayer entityPlayer, World world, int x, int y, int z)
    {
        super(new ContainerCofffeeMaker(entityPlayer, (IInventory) world.getTileEntity(x, y, z), 176, 170));
        this.x = x;
        this.y = y;
        this.z = z;
        this.entityPlayer = entityPlayer;
        this.world = world;
        this.instance = (TileEntityCoffeeMaker)world.getTileEntity(x, y, z);
        xSize = 176;
        ySize = 170;

    }

    @Override
    protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_)
    {
        GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
        this.mc.getTextureManager().bindTexture(backgroundImage);
        int x = (this.width - xSize) / 2;
        int y = (this.height - ySize) / 2;
        drawTexturedModalRect(x, y, 0, 0, xSize, ySize);
        drawFluidTank(instance.getWaterTank(), x + 35, y + 17);
        drawFluidTank(instance.getCoffeeTank(), x + 126, y + 17);
        fontRendererObj.drawString(StatCollector.translateToLocal("acoj.inv.coffeeMaker"), x + 56, y + 4, 0x313131);
        fontRendererObj.drawString(StatCollector.translateToLocal("acoj.inv.Inventory"), x + 9, y + 79, 0x313131);
    }

    @Override
    public boolean doesGuiPauseGame()
    {
        return false;
    }

    public void drawFluidTank(IFluidTank tank, int x, int y)
    {
        FluidStack fluid = tank.getFluid();
        TextureManager manager = Minecraft.getMinecraft().renderEngine;
        if (fluid != null)
        {
            manager.bindTexture(manager.getResourceLocation(0));
            float amount = fluid.amount;
            float capacity = tank.getCapacity();
            float scale = amount / capacity;
            int fluidTankHeight = 60;
            int fluidAmount = (int) (scale * fluidTankHeight);
            drawFluid(x, y + fluidTankHeight - fluidAmount, fluid.getFluid().getIcon(fluid), 16, fluidAmount);
        }
    }

    private void drawFluid(int x, int y, IIcon icon, int width, int height)
    {
        int i = 0;
        int j = 0;

        int drawHeight = 0;
        int drawWidth = 0;

        for (i = 0; i < width; i += 16)
        {
            for (j = 0; j < height; j += 16)
            {
                drawWidth = Math.min(width - i, 16);
                drawHeight = Math.min(height - j, 16);
                drawRectangleFromIcon(x + i, y + j, icon, drawWidth, drawHeight);
            }
        }
    }

    private void drawRectangleFromIcon(int x, int y, IIcon icon, int width, int height)
    {
        if (icon == null)
        {
            LogHelper.info("Null");
            return;
        }
        double minU = icon.getMinU();
        double maxU = icon.getMaxU();
        double minV = icon.getMinV();
        double maxV = icon.getMaxV();

        Tessellator tessellator = Tessellator.instance;
        tessellator.startDrawingQuads();
        tessellator.addVertexWithUV(x, y + height, 0, minU, minV + (maxV - minV) * height / 16.0D);
        tessellator.addVertexWithUV(x + width, y + height, 0, minU + (maxU - minU) * width / 16.0D, minV + (maxV - minV) * height / 16.0D);
        tessellator.addVertexWithUV(x + width, y, 0, minU + (maxU - minU) * width / 16.0D, minV);
        tessellator.addVertexWithUV(x, y, 0, minU, minV);
        tessellator.draw();
    }
}

 

Link to comment
Share on other sites

Any TileEntity data needs to be synchronized if it is needed on the Client. In this case use detectAndSendChanges / addCraftingToCrafters in your Container. addCraftingToCrafters is called once when the Gui is opened, send all the data to the player in there (use an instanceof check to see if the ICrafting is a player). detectAndSendChanges is called every tick. Check if the data has changed since the last tick (you'll need "lastTick****" fields in your Container for that) and if so, update it.

Both of those go via packets.

Link to comment
Share on other sites

Hey, thanks for the solution. After doing a bit of research on your suggestion, I found that I could properly sync my tank data by using getDescriptionPacket() and onDataPacket(). However, I believe I still need your solution for the actual container. I have a couple questions, if you don't mind. While looking at the code for detectAndSendChanges() and addCraftingToCrafters(), I saw that the default methods in the Container class already should do what I want them to. That is, of course, if I understand the methods fully. Is there a reason why these don't seem to be working?

Link to comment
Share on other sites

a) Don't use the description packet for this, it causes too much network load if the values change often and also causes strain on the client (it will re-render the chunk usually when the packet is received).

 

b) No, the default detectAndSendChanges / addCraftingToCrafters only synchronizes the Items in the inventory, nothing else.

Link to comment
Share on other sites

Yeah, that's what I thought. Would you mind taking a look at my container class?

 

 

public class ContainerCofffeeMaker extends Container

{

    private EntityPlayer entityPlayer;

    private IInventory inv;

 

    private final int bucketSlotX = 10;

    private final int bucketSlotY = 59;

 

    private final int coffeeSlotX = 80;

    private final int coffeeSlotY = 12;

 

    private final int filterSlotX = 80;

    private final int filterSlotY = 52;

 

    private final int mugSlotX = 151;

    private final int mugSlotY = 59;

 

    public ContainerCofffeeMaker(EntityPlayer entityPlayer, IInventory inv, int xSize, int ySize)

    {

        this.entityPlayer = entityPlayer;

        this.inv = inv;

        inv.openInventory();

        layout(xSize, ySize);

    }

 

    protected void layout(int xSize, int ySize)

    {

        addSlotToContainer(new Slot(inv, 0, bucketSlotX, bucketSlotY));

        addSlotToContainer(new Slot(inv, 1, coffeeSlotX, coffeeSlotY));

        addSlotToContainer(new Slot(inv, 2, filterSlotX, filterSlotY));

        addSlotToContainer(new Slot(inv, 3, mugSlotX, mugSlotY));

 

        int leftCol = (xSize - 162) / 2 + 1;

        for (int playerInvRow = 0; playerInvRow < 3; playerInvRow++)

        {

            for (int playerInvCol = 0; playerInvCol < 9; playerInvCol++)

            {

                addSlotToContainer(new Slot(entityPlayer.inventory, playerInvCol + playerInvRow * 9 + 9, leftCol + playerInvCol * 18, ySize - (4 - playerInvRow) * 18 - 11));

            }

        }

        for (int hotbarSlot = 0; hotbarSlot < 9; hotbarSlot++)

        {

            addSlotToContainer(new Slot(entityPlayer.inventory, hotbarSlot, leftCol + hotbarSlot * 18, ySize - 25));

        }

    }

 

    @Override

    public ItemStack transferStackInSlot(EntityPlayer entityPlayer, int slot)

    {

        ItemStack var2 = null;

        Slot var3 = (Slot) this.inventorySlots.get(slot);

 

        if (var3 != null && var3.getHasStack())

        {

            ItemStack var4 = var3.getStack();

            var2 = var4.copy();

 

            if (slot < 4)

            {

                if (!this.mergeItemStack(var4, 1, this.inventorySlots.size(), true))

                {

                    return null;

                }

            } else if (!this.mergeItemStack(var4, 0, 1, false)) return null;

 

            if (var4.stackSize == 0) var3.putStack((ItemStack) null);

            else var3.onSlotChanged();

        }

 

        return var2;

    }

 

    @Override

    public boolean canInteractWith(EntityPlayer entityPlayer)

    {

        return inv.isUseableByPlayer(entityPlayer);

    }

}

 

 

Link to comment
Share on other sites

Again, I'm going off the of the GUI so I assumed it was a problem with syncing again. If I understand you correctly, I open it just by right-clicking. This is the block class where I do that:

 

public class BlockCoffeeMaker extends BlockContainer implements ITileEntityProvider
{
    TileEntityCoffeeMaker instance;

    public BlockCoffeeMaker()
    {
        super(Material.rock);
        this.setCreativeTab(CreativeTabACOJ.ACOJ_TAB);
        this.setBlockName(Names.COFFEE_MAKER);
    }

    @Override
    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer entityPlayer, int meta, float hitX, float hitY, float hitZ)
    {
        if (!world.isRemote && world.getTileEntity(x, y, z) instanceof TileEntityCoffeeMaker)
        {
            entityPlayer.openGui(ACOJ.instance, GUIs.COFFEE_MAKER.ordinal(), world, x, y, z);
        }
        return true;
    }

    @Override
    public ArrayList<ItemStack> getDrops(World world, int x, int y, int z, int metadata, int fortune)
    {
        ArrayList<ItemStack> itemStacks = Lists.newArrayList();
        ItemStack itemStack = new ItemStack(ModBlocks.BlockCoffeeMaker, 1, metadata);
        itemStacks.add(itemStack);
        TileEntityCoffeeMaker coffeeMaker = getInstance();
        if (coffeeMaker.getStackInSlot(0) != null) itemStacks.add(coffeeMaker.getStackInSlot(0));
        if (coffeeMaker.getStackInSlot(1) != null) itemStacks.add(coffeeMaker.getStackInSlot(1));
        if (coffeeMaker.getStackInSlot(2) != null) itemStacks.add(coffeeMaker.getStackInSlot(2));
        if (coffeeMaker.getStackInSlot(3) != null) itemStacks.add(coffeeMaker.getStackInSlot(3));
        return itemStacks;
    }

    @Override
    public TileEntity createNewTileEntity(World world, int meta)
    {
        instance = new TileEntityCoffeeMaker();
        return instance;
    }

    @Override
    public boolean hasTileEntity()
    {
        return true;
    }
    public TileEntityCoffeeMaker getInstance()
    {
        return instance;
    }

    @Override
    public String getUnlocalizedName()
    {
        return String.format("tile.%s%s", Reference.MOD_ID.toLowerCase() + ":", getUnwrappedUnlocalizedName(super.getUnlocalizedName()));
    }

    protected String getUnwrappedUnlocalizedName(String unlocalizedName)
    {
        return unlocalizedName.substring(unlocalizedName.indexOf(".") + 1);
    }
}

 

It has pahimar's name code that I know you love :P Haven't gotten around to fixing that yet.

Link to comment
Share on other sites

But I want my $200! D: I thought I could get around that problem by returning a new instance of the tile entity in createNewTileEntity(). Suppose not.

So now I have two questions:

 

1) So without the instance, how can I get the current instance of the tile entity for getDrops()?

2) Removing the instance, did not allow for the tile entity to sync properly. The items still do not appear to save in the container. Is there something else I must do?

Link to comment
Share on other sites

Ah ok, sorry. Man do I feel dumb, saw the mistake in my writeToNBT method right away :/

Thanks for the help with that. So now back to the original question...

 

In order to sync my fluid amounts, I should override detectAndSendChanges() and addCraftingToCrafters() in my Container class. Would you mind explaining how to use these a bit more? I didn't really understand what you meant with the lastTick field. I've also not done anything with packets whatsoever. Do you know of a good tutorial I could read to gain an understanding of how to use them? Thanks!

Link to comment
Share on other sites

In order to sync my fluid amounts, I should override detectAndSendChanges() and addCraftingToCrafters() in my Container class. Would you mind explaining how to use these a bit more? I didn't really understand what you meant with the lastTick field.
So, in addCraftingToCrafters you basically send all the data. The method is called when the Gui is opened. Then in detectAndSendChanges you do something like this:

 

int someValueLastTick;

void detectAndSendChanges() {
    if (myTile.someValue != someValueLastTick) {
        // value has changed, so re-send the packet
        // the player is somewhere in this.crafters, use instanceof to find it

        // now update the value
        someValueLastTick = myTile.someValue;
    }
}

 

With tanks (which are basically FluidStacks) it's a bit more complicated. You will have to copy the FluidStack (it has a method for it) before storing it in the last tick field, otherwise you won't detect any changes at all. For sending FluidStacks in packets send the fluidId, the amount and the NBT data.

 

I've also not done anything with packets whatsoever. Do you know of a good tutorial I could read to gain an understanding of how to use them? Thanks!

I actually do.
Link to comment
Share on other sites

Thanks so much! I'm a bit confused on how to get the old fluidstack and copy it. I tried this:

 

private FluidStack oldWater = coffeeMaker.getWaterTank().getFluid().copy();

but it crashed with this error:

Ticking memory connection

java.lang.NullPointerException: Ticking memory connection
at com.darichey.ACOJ.tileentity.containers.ContainerCofffeeMaker.<init>(ContainerCofffeeMaker.java:105)
at com.darichey.ACOJ.handler.GuiHandler.getServerGuiElement(GuiHandler.java:18)
at cpw.mods.fml.common.network.NetworkRegistry.getRemoteGuiContainer(NetworkRegistry.java:241)
at cpw.mods.fml.common.network.internal.FMLNetworkHandler.openGui(FMLNetworkHandler.java:75)
at net.minecraft.entity.player.EntityPlayer.openGui(EntityPlayer.java:2501)
at com.darichey.ACOJ.block.BlockCoffeeMaker.onBlockActivated(BlockCoffeeMaker.java:45)
at net.minecraft.server.management.ItemInWorldManager.activateBlockOrUseItem(ItemInWorldManager.java:409)
at net.minecraft.network.NetHandlerPlayServer.processPlayerBlockPlacement(NetHandlerPlayServer.java:593)
at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:74)
at net.minecraft.network.play.client.C08PacketPlayerBlockPlacement.processPacket(C08PacketPlayerBlockPlacement.java:122)
at net.minecraft.network.NetworkManager.processReceivedPackets(NetworkManager.java:241)
at net.minecraft.network.NetworkSystem.networkTick(NetworkSystem.java:182)
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:726)
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:614)
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485)
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752)

 

I'm sure I just misunderstood something.

Link to comment
Share on other sites

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

 Share



  • Recently Browsing

    No registered users viewing this page.

  • Posts

    • Hello there, i have an issue. I want to add custom 3d model to armor(I want to create addon that replace armor with samurai armor in Gobber mod). Here is the code: package com.kwpugh.gobber2.items.armor; import java.util.List; import javax.annotation.Nullable; import com.kwpugh.gobber2.config.GobberConfigBuilder; import com.kwpugh.gobber2.init.ItemInit; import com.kwpugh.gobber2.items.armor.models.GobberSamurai; import com.kwpugh.gobber2.util.PlayerSpecialAbilities; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.ItemStack; import net.minecraft.world.effect.MobEffects; import net.minecraft.network.chat.Component; import net.minecraft.ChatFormatting; import net.minecraft.client.model.HumanoidModel; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.world.level.Level; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.client.IItemRenderProperties; import net.minecraft.world.item.Item.Properties; public class ItemCustomArmorNether extends ArmorItem { public ItemCustomArmorNether(ArmorMaterial materialIn, EquipmentSlot slots, Properties builder) { super(materialIn, slots, builder); } boolean enablePerks = GobberConfigBuilder.ENABLE_GOBBER_NETHER_ARMOR_HEALTH_PERKS.get(); int hunger = GobberConfigBuilder.GOBBER_NETHER_ARMOR_HUNGER.get(); double saturation = GobberConfigBuilder.GOBBER_NETHER_ARMOR_SATURATION.get(); @Override public void onArmorTick(final ItemStack stack, final Level world, final Player player) { if(!enablePerks) return; ItemStack head = player.getItemBySlot(EquipmentSlot.HEAD); ItemStack chest = player.getItemBySlot(EquipmentSlot.CHEST); ItemStack legs = player.getItemBySlot(EquipmentSlot.LEGS); ItemStack feet = player.getItemBySlot(EquipmentSlot.FEET); //Full Set if(head.getItem() == ItemInit.GOBBER2_HELMET_NETHER.get() && chest.getItem() == ItemInit.GOBBER2_CHESTPLATE_NETHER.get() && legs.getItem() == ItemInit.GOBBER2_LEGGINGS_NETHER.get() && feet.getItem() == ItemInit.GOBBER2_BOOTS_NETHER.get()) { if(player.getEffect(MobEffects.POISON) != null) { player.removeEffect(MobEffects.POISON); } if(player.getEffect(MobEffects.WITHER) != null) { player.removeEffect(MobEffects.WITHER); } } //Check ArmorUtil for additional perks applied to armor //Helmet if(head.getItem() == ItemInit.GOBBER2_HELMET_NETHER.get()) { PlayerSpecialAbilities.giveYellowHearts(world, player, stack, 4, 0.33F); PlayerSpecialAbilities.giveRegenEffect(world, player, stack, hunger, (float) saturation); } //Chestplate if(chest.getItem() == ItemInit.GOBBER2_CHESTPLATE_NETHER.get()) { // TBD } //Leggings if(legs.getItem() == ItemInit.GOBBER2_LEGGINGS_NETHER.get()) { } else { } //Boots if(feet.getItem() == ItemInit.GOBBER2_BOOTS_NETHER.get()) { } else { } } @Override public boolean isBookEnchantable(ItemStack stack, ItemStack book) { return true; } @Override public boolean isValidRepairItem(ItemStack toRepair, ItemStack repair) { return repair.getItem() == ItemInit.GOBBER2_INGOT_NETHER.get(); } @OnlyIn(Dist.CLIENT) public void appendHoverText(ItemStack stack, @Nullable Level worldIn, List<Component> tooltip, TooltipFlag flagIn) { super.appendHoverText(stack, worldIn, tooltip, flagIn); if(enablePerks) { tooltip.add((new TranslatableComponent("item.gobber2.gobber2_armor_nether.line2").withStyle(ChatFormatting.LIGHT_PURPLE))); tooltip.add((new TranslatableComponent("item.gobber2.gobber2_armor_nether.line3").withStyle(ChatFormatting.LIGHT_PURPLE))); tooltip.add((new TranslatableComponent("item.gobber2.gobber2_armor_nether.line4").withStyle(ChatFormatting.LIGHT_PURPLE))); tooltip.add((new TranslatableComponent("item.gobber2.gobber2_armor_nether.line5").withStyle(ChatFormatting.LIGHT_PURPLE))); tooltip.add((new TranslatableComponent("item.gobber2.gobber2_armor_nether.line6").withStyle(ChatFormatting.GOLD))); } } @Override public void initializeClient(java.util.function.Consumer<net.minecraftforge.client.IItemRenderProperties> consumer) { consumer.accept(new IItemRenderProperties() { @Override public <A extends HumanoidModel<?>> A getArmorModel(LivingEntity entityLiving, ItemStack itemStack, EquipmentSlot armorSlot, A _default) { if(armorSlot == EquipmentSlot.CHEST) { return (A) new GobberSamurai(); } return null; } }); } @Override public String getArmorTexture(ItemStack stack, Entity entity, EquipmentSlot slot, String type) { return "gobber2.models.armor.GobberSamurai" + (slot == EquipmentSlot.HEAD ? "2" : "1") + ".png"; } } The problem is in getArmorModel method and in return (A) new GobberSamurai(); It says "The constructor GobberSamurai() is undefined".  Here is my model class:   package com.kwpugh.gobber2.items.armor.models; import java.util.List; import javax.annotation.Nullable; import com.kwpugh.gobber2.config.GobberConfigBuilder; import com.kwpugh.gobber2.init.ItemInit; import com.kwpugh.gobber2.util.PlayerSpecialAbilities; import com.mojang.blaze3d.vertex.PoseStack; import com.mojang.blaze3d.vertex.VertexConsumer; import net.minecraft.world.item.TooltipFlag; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.ArmorMaterial; import net.minecraft.world.item.ItemStack; import net.minecraft.world.effect.MobEffects; import net.minecraft.network.chat.Component; import net.minecraft.ChatFormatting; import net.minecraft.network.chat.TranslatableComponent; import net.minecraft.resources.ResourceLocation; import net.minecraft.world.level.Level; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraft.client.model.EntityModel; import net.minecraft.client.model.geom.ModelLayerLocation; import net.minecraft.client.model.geom.ModelPart; import net.minecraft.client.model.geom.PartPose; import net.minecraft.client.model.geom.builders.CubeDeformation; import net.minecraft.client.model.geom.builders.CubeListBuilder; import net.minecraft.client.model.geom.builders.LayerDefinition; import net.minecraft.client.model.geom.builders.MeshDefinition; import net.minecraft.client.model.geom.builders.PartDefinition; import net.minecraft.world.item.Item.Properties; public class GobberSamurai<T extends Entity> extends EntityModel<T> { // This layer location should be baked with EntityRendererProvider.Context in the entity renderer and passed into this model's constructor public static final ModelLayerLocation LAYER_LOCATION = new ModelLayerLocation(new ResourceLocation("modid", "gobbersamurai"), "main"); private final ModelPart Head; private final ModelPart Body; private final ModelPart RightArm; private final ModelPart LeftArm; private final ModelPart RightLeg; private final ModelPart LeftLeg; public GobberSamurai(ModelPart root) { this.Head = root.getChild("Head"); this.Body = root.getChild("Body"); this.RightArm = root.getChild("RightArm"); this.LeftArm = root.getChild("LeftArm"); this.RightLeg = root.getChild("RightLeg"); this.LeftLeg = root.getChild("LeftLeg"); } public static LayerDefinition createBodyLayer() { MeshDefinition meshdefinition = new MeshDefinition(); PartDefinition partdefinition = meshdefinition.getRoot(); PartDefinition Head = partdefinition.addOrReplaceChild("Head", CubeListBuilder.create().texOffs(1, 34).addBox(-5.0F, -9.0F, -5.0F, 10.0F, 4.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); PartDefinition cube_r1 = Head.addOrReplaceChild("cube_r1", CubeListBuilder.create().texOffs(1, 34).addBox(-3.2F, -0.225F, -5.0F, 5.0F, 1.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(5.8435F, -2.8805F, 0.0F, 0.0F, 0.0F, 1.1345F)); PartDefinition cube_r2 = Head.addOrReplaceChild("cube_r2", CubeListBuilder.create().texOffs(1, 34).addBox(-3.225F, -6.625F, -5.0F, 5.0F, 1.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, -0.1594F, 0.0523F, -1.5708F, -0.4363F, 1.5708F)); PartDefinition cube_r3 = Head.addOrReplaceChild("cube_r3", CubeListBuilder.create().texOffs(1, 34).addBox(-6.0F, 5.0F, -5.0F, 1.0F, 2.0F, 10.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(0.0F, 0.0F, 0.0F, -1.5708F, 0.0F, 1.5708F)); PartDefinition cube_r4 = Head.addOrReplaceChild("cube_r4", CubeListBuilder.create().texOffs(42, 36).addBox(-1.2F, -0.5F, -1.5F, 3.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-6.3F, -4.3F, -5.6F, -2.313F, 0.0322F, 2.0649F)); PartDefinition cube_r5 = Head.addOrReplaceChild("cube_r5", CubeListBuilder.create().texOffs(1, 34).mirror().addBox(-1.8F, -0.225F, -5.0F, 5.0F, 1.0F, 10.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-5.8435F, -2.8805F, 0.0F, 0.0F, 0.0F, -1.1345F)); PartDefinition cube_r6 = Head.addOrReplaceChild("cube_r6", CubeListBuilder.create().texOffs(42, 36).mirror().addBox(-1.8F, -0.5F, -1.5F, 3.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(6.3F, -4.3F, -5.6F, -2.313F, -0.0322F, -2.0649F)); PartDefinition Body = partdefinition.addOrReplaceChild("Body", CubeListBuilder.create().texOffs(11, 35).addBox(4.0F, 3.0F, -3.0F, 1.0F, 3.0F, 6.0F, new CubeDeformation(0.0F)) .texOffs(11, 35).addBox(-5.0F, 8.0F, -3.0F, 1.0F, 3.0F, 6.0F, new CubeDeformation(0.0F)) .texOffs(11, 35).addBox(4.0F, 8.0F, -3.0F, 1.0F, 3.0F, 6.0F, new CubeDeformation(0.0F)) .texOffs(11, 35).addBox(-5.0F, 3.0F, -3.0F, 1.0F, 3.0F, 6.0F, new CubeDeformation(0.0F)) .texOffs(11, 35).addBox(-4.0F, 1.0F, -4.0F, 8.0F, 7.0F, 2.0F, new CubeDeformation(0.0F)) .texOffs(11, 35).addBox(-4.0F, 8.0F, -3.0F, 8.0F, 3.0F, 1.0F, new CubeDeformation(0.0F)) .texOffs(11, 35).addBox(-4.0F, 11.0F, -2.5F, 8.0F, 1.0F, 1.0F, new CubeDeformation(0.0F)) .texOffs(0, 32).addBox(-4.0F, 1.0F, 2.0F, 8.0F, 11.0F, 2.0F, new CubeDeformation(0.0F)), PartPose.offset(0.0F, 0.0F, 0.0F)); PartDefinition RightArm = partdefinition.addOrReplaceChild("RightArm", CubeListBuilder.create().texOffs(39, 2).addBox(-3.5F, -2.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.0F)) .texOffs(39, 2).mirror().addBox(-1.5F, 3.5F, -2.5F, 3.0F, 1.0F, 5.0F, new CubeDeformation(0.0F)).mirror(false) .texOffs(39, 2).mirror().addBox(-3.5F, 3.5F, -2.5F, 2.0F, 6.0F, 5.0F, new CubeDeformation(0.0F)).mirror(false) .texOffs(39, 2).mirror().addBox(-1.5F, 6.5F, -2.5F, 3.0F, 1.0F, 5.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offset(-5.0F, 2.0F, 0.0F)); PartDefinition cube_r7 = RightArm.addOrReplaceChild("cube_r7", CubeListBuilder.create().texOffs(10, 37).mirror().addBox(1.5F, -1.0F, -3.5F, 1.0F, 1.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false) .texOffs(10, 37).mirror().addBox(-2.5F, 0.0F, -3.5F, 5.0F, 1.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false) .texOffs(10, 37).mirror().addBox(-4.5F, 1.0F, -3.5F, 3.0F, 1.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false) .texOffs(10, 37).mirror().addBox(-6.5F, 1.5F, -3.5F, 3.0F, 1.0F, 7.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-4.0588F, -1.8378F, 0.0F, 0.0F, 0.0F, -1.1345F)); PartDefinition LeftArm = partdefinition.addOrReplaceChild("LeftArm", CubeListBuilder.create().texOffs(39, 2).addBox(-1.5F, -2.5F, -2.5F, 5.0F, 5.0F, 5.0F, new CubeDeformation(0.0F)) .texOffs(39, 2).addBox(1.5F, 3.5F, -2.5F, 2.0F, 6.0F, 5.0F, new CubeDeformation(0.0F)) .texOffs(39, 2).addBox(-1.5F, 3.5F, -2.5F, 3.0F, 1.0F, 5.0F, new CubeDeformation(0.0F)) .texOffs(39, 2).addBox(-1.5F, 6.5F, -2.5F, 3.0F, 1.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offset(5.0F, 2.0F, 0.0F)); PartDefinition cube_r8 = LeftArm.addOrReplaceChild("cube_r8", CubeListBuilder.create().texOffs(10, 37).addBox(3.5F, 1.5F, -3.5F, 3.0F, 1.0F, 7.0F, new CubeDeformation(0.0F)) .texOffs(10, 37).addBox(1.5F, 1.0F, -3.5F, 3.0F, 1.0F, 7.0F, new CubeDeformation(0.0F)) .texOffs(10, 37).addBox(-2.5F, -1.0F, -3.5F, 1.0F, 1.0F, 7.0F, new CubeDeformation(0.0F)) .texOffs(10, 37).addBox(-2.5F, 0.0F, -3.5F, 5.0F, 1.0F, 7.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(4.0588F, -1.8378F, 0.0F, 0.0F, 0.0F, 1.1345F)); PartDefinition RightLeg = partdefinition.addOrReplaceChild("RightLeg", CubeListBuilder.create(), PartPose.offset(-1.9F, 12.0F, 0.0F)); PartDefinition cube_r9 = RightLeg.addOrReplaceChild("cube_r9", CubeListBuilder.create().texOffs(10, 37).mirror().addBox(-4.9F, 10.65F, 9.5F, 5.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) .texOffs(10, 37).mirror().addBox(-4.9F, 11.65F, 11.5F, 5.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) .texOffs(10, 37).mirror().addBox(-4.9F, 9.65F, 7.5F, 5.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(1.9F, -11.8378F, 9.0588F, -1.1345F, 0.0F, 0.0F)); PartDefinition cube_r10 = RightLeg.addOrReplaceChild("cube_r10", CubeListBuilder.create().texOffs(10, 37).mirror().addBox(-4.9F, 10.65F, -12.3F, 2.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) .texOffs(10, 37).mirror().addBox(-4.9F, 11.65F, -14.3F, 2.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false) .texOffs(10, 37).mirror().addBox(-2.9F, 10.65F, -15.3F, 3.0F, 1.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false) .texOffs(10, 37).mirror().addBox(-2.9F, 11.65F, -17.3F, 3.0F, 1.0F, 6.0F, new CubeDeformation(0.0F)).mirror(false) .texOffs(10, 37).mirror().addBox(-2.9F, 9.65F, -12.3F, 3.0F, 1.0F, 5.0F, new CubeDeformation(0.0F)).mirror(false) .texOffs(10, 37).mirror().addBox(-4.9F, 9.65F, -10.3F, 2.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(1.9F, -11.8378F, -9.0588F, 1.1345F, 0.0F, 0.0F)); PartDefinition cube_r11 = RightLeg.addOrReplaceChild("cube_r11", CubeListBuilder.create().texOffs(10, 37).mirror().addBox(-16.0F, 11.0F, -2.5F, 3.0F, 1.0F, 5.0F, new CubeDeformation(0.0F)).mirror(false) .texOffs(10, 37).mirror().addBox(-14.0F, 10.0F, -2.5F, 3.0F, 1.0F, 5.0F, new CubeDeformation(0.0F)).mirror(false) .texOffs(10, 37).mirror().addBox(-12.0F, 9.0F, -2.5F, 4.0F, 1.0F, 5.0F, new CubeDeformation(0.0F)).mirror(false), PartPose.offsetAndRotation(-7.1588F, -11.8378F, 0.0F, 0.0F, 0.0F, -1.1345F)); PartDefinition LeftLeg = partdefinition.addOrReplaceChild("LeftLeg", CubeListBuilder.create(), PartPose.offset(1.9F, 12.0F, 0.0F)); PartDefinition cube_r12 = LeftLeg.addOrReplaceChild("cube_r12", CubeListBuilder.create().texOffs(10, 37).addBox(13.0F, 11.0F, -2.5F, 3.0F, 1.0F, 5.0F, new CubeDeformation(0.0F)) .texOffs(10, 37).addBox(11.0F, 10.0F, -2.5F, 3.0F, 1.0F, 5.0F, new CubeDeformation(0.0F)) .texOffs(10, 37).addBox(8.0F, 9.0F, -2.5F, 4.0F, 1.0F, 5.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(7.1588F, -11.8378F, 0.0F, 0.0F, 0.0F, 1.1345F)); PartDefinition cube_r13 = LeftLeg.addOrReplaceChild("cube_r13", CubeListBuilder.create().texOffs(10, 37).addBox(-0.1F, 9.65F, -12.3F, 3.0F, 1.0F, 5.0F, new CubeDeformation(0.0F)) .texOffs(10, 37).addBox(2.9F, 11.65F, -14.3F, 2.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)) .texOffs(10, 37).addBox(-0.1F, 11.65F, -17.3F, 3.0F, 1.0F, 6.0F, new CubeDeformation(0.0F)) .texOffs(10, 37).addBox(2.9F, 10.65F, -12.3F, 2.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)) .texOffs(10, 37).addBox(-0.1F, 10.65F, -15.3F, 3.0F, 1.0F, 6.0F, new CubeDeformation(0.0F)) .texOffs(10, 37).addBox(2.9F, 9.65F, -10.3F, 2.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.9F, -11.8378F, -9.0588F, 1.1345F, 0.0F, 0.0F)); PartDefinition cube_r14 = LeftLeg.addOrReplaceChild("cube_r14", CubeListBuilder.create().texOffs(10, 37).addBox(-0.1F, 9.65F, 7.5F, 5.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)) .texOffs(10, 37).addBox(-0.1F, 11.65F, 11.5F, 5.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)) .texOffs(10, 37).addBox(-0.1F, 10.65F, 9.5F, 5.0F, 1.0F, 3.0F, new CubeDeformation(0.0F)), PartPose.offsetAndRotation(-1.9F, -11.8378F, 9.0588F, -1.1345F, 0.0F, 0.0F)); return LayerDefinition.create(meshdefinition, 64, 64); } @Override public void setupAnim(T entity, float limbSwing, float limbSwingAmount, float ageInTicks, float netHeadYaw, float headPitch) { } @Override public void renderToBuffer(PoseStack poseStack, VertexConsumer buffer, int packedLight, int packedOverlay, float red, float green, float blue, float alpha) { Head.render(poseStack, buffer, packedLight, packedOverlay); Body.render(poseStack, buffer, packedLight, packedOverlay); RightArm.render(poseStack, buffer, packedLight, packedOverlay); LeftArm.render(poseStack, buffer, packedLight, packedOverlay); RightLeg.render(poseStack, buffer, packedLight, packedOverlay); LeftLeg.render(poseStack, buffer, packedLight, packedOverlay); } } I just don't know what to do now, I have searched everywhere but I have found nothing for 1.18.1 version.
    • I've been trying for the past hour to get one of these Modpacks to work, and after running the Serverrun.bat it gets all the way through the process on both Modpacks before it gives me the following Error Message. Error: Could not find or load main class @libraries.net.minecraftforge.forge.1.18.1-39.0.22.win_args.txt Any help would be great!  
    • The game crashed while playing. please help I don't know how to. ---- Minecraft Crash Report ---- // Shall we play a game? Time: 1/29/22, 1:08 AM Description: Exception in server tick loop java.lang.NoSuchMethodError: 'net.minecraft.nbt.CompoundTag net.minecraft.world.level.block.entity.BlockEntity.save(net.minecraft.nbt.CompoundTag)'     at ht.treechop.common.block.ChoppedLogBlock$Entity.save(ChoppedLogBlock.java:291) ~[TreeChop-Mod-1.18.1.jar%2367!/:0.15.3] {re:classloading}     at ht.treechop.common.block.ChoppedLogBlock$Entity.m_5995_(ChoppedLogBlock.java:335) ~[TreeChop-Mod-1.18.1.jar%2367!/:0.15.3] {re:classloading}     at net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket.m_195642_(ClientboundBlockEntityDataPacket.java:21) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:classloading}     at net.minecraft.network.protocol.game.ClientboundBlockEntityDataPacket.m_195640_(ClientboundBlockEntityDataPacket.java:25) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:classloading}     at ht.treechop.common.block.ChoppedLogBlock$Entity.getUpdatePacket(ChoppedLogBlock.java:328) ~[TreeChop-Mod-1.18.1.jar%2367!/:0.15.3] {re:classloading}     at ht.treechop.common.block.ChoppedLogBlock$Entity.m_183216_(ChoppedLogBlock.java:260) ~[TreeChop-Mod-1.18.1.jar%2367!/:0.15.3] {re:classloading}     at net.minecraftforge.common.ForgeHooks.onBlockBreakEvent(ForgeHooks.java:562) ~[forge-1.18.1-39.0.62-universal.jar%2374!/:?] {re:classloading}     at net.minecraft.server.level.ServerPlayerGameMode.m_9280_(ServerPlayerGameMode.java:227) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:computing_frames,re:classloading}     at net.minecraft.server.level.ServerPlayerGameMode.m_9286_(ServerPlayerGameMode.java:217) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:computing_frames,re:classloading}     at net.minecraft.server.level.ServerPlayerGameMode.m_7391_(ServerPlayerGameMode.java:187) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:computing_frames,re:classloading}     at net.minecraft.server.network.ServerGamePacketListenerImpl.m_7502_(ServerGamePacketListenerImpl.java:945) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:classloading}     at net.minecraft.network.protocol.game.ServerboundPlayerActionPacket.m_5797_(ServerboundPlayerActionPacket.java:34) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:classloading}     at net.minecraft.network.protocol.game.ServerboundPlayerActionPacket.m_5797_(ServerboundPlayerActionPacket.java:8) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:classloading}     at net.minecraft.network.protocol.PacketUtils.m_131356_(PacketUtils.java:21) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:classloading}     at net.minecraft.server.TickTask.run(TickTask.java:18) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:classloading}     at net.minecraft.util.thread.BlockableEventLoop.m_6367_(BlockableEventLoop.java:151) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}     at net.minecraft.util.thread.ReentrantBlockableEventLoop.m_6367_(ReentrantBlockableEventLoop.java:23) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:mixin,re:computing_frames,re:classloading}     at net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:765) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:byg.mixins.json:server.MixinMinecraftServer,pl:mixin:A}     at net.minecraft.server.MinecraftServer.m_6367_(MinecraftServer.java:161) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:byg.mixins.json:server.MixinMinecraftServer,pl:mixin:A}     at net.minecraft.util.thread.BlockableEventLoop.m_7245_(BlockableEventLoop.java:125) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}     at net.minecraft.server.MinecraftServer.m_129961_(MinecraftServer.java:748) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:byg.mixins.json:server.MixinMinecraftServer,pl:mixin:A}     at net.minecraft.server.MinecraftServer.m_7245_(MinecraftServer.java:742) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:byg.mixins.json:server.MixinMinecraftServer,pl:mixin:A}     at net.minecraft.util.thread.BlockableEventLoop.m_18699_(BlockableEventLoop.java:110) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:mixin,pl:accesstransformer:B,re:computing_frames,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B}     at net.minecraft.server.MinecraftServer.m_130012_(MinecraftServer.java:727) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:byg.mixins.json:server.MixinMinecraftServer,pl:mixin:A}     at net.minecraft.server.MinecraftServer.m_130011_(MinecraftServer.java:672) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:byg.mixins.json:server.MixinMinecraftServer,pl:mixin:A}     at net.minecraft.server.MinecraftServer.m_177918_(MinecraftServer.java:258) ~[client-1.18.1-20211210.034407-srg.jar%2370!/:?] {re:mixin,pl:accesstransformer:B,re:classloading,pl:accesstransformer:B,pl:mixin:APP:byg.mixins.json:server.MixinMinecraftServer,pl:mixin:A}     at java.lang.Thread.run(Thread.java:833) [?:?] {re:mixin} A detailed walkthrough of the error, its code path and all known details is as follows: --------------------------------------------------------------------------------------- -- System Details -- Details:     Minecraft Version: 1.18.1     Minecraft Version ID: 1.18.1     Operating System: Windows 10 (amd64) version 10.0     Java Version: 17.0.1, Microsoft     Java VM Version: OpenJDK 64-Bit Server VM (mixed mode), Microsoft     Memory: 2163132464 bytes (2062 MiB) / 6643777536 bytes (6336 MiB) up to 8589934592 bytes (8192 MiB)     CPUs: 8     Processor Vendor: GenuineIntel     Processor Name: Intel(R) Core(TM) i7-8565U CPU @ 1.80GHz     Identifier: Intel64 Family 6 Model 142 Stepping 11     Microarchitecture: whiskey Lake     Frequency (GHz): 1.99     Number of physical packages: 1     Number of physical CPUs: 4     Number of logical CPUs: 8     Graphics card #0 name: Intel(R) UHD Graphics 620     Graphics card #0 vendor: Intel Corporation (0x8086)     Graphics card #0 VRAM (MB): 1024.00     Graphics card #0 deviceId: 0x3ea0     Graphics card #0 versionInfo: DriverVersion=26.20.100.7926     Memory slot #0 capacity (MB): 8192.00     Memory slot #0 clockSpeed (GHz): 2.40     Memory slot #0 type: DDR4     Memory slot #1 capacity (MB): 8192.00     Memory slot #1 clockSpeed (GHz): 2.40     Memory slot #1 type: DDR4     Virtual memory max (MB): 20670.30     Virtual memory used (MB): 17701.50     Swap memory total (MB): 4496.57     Swap memory used (MB): 717.27     JVM Flags: 9 total; -XX:HeapDumpPath=MojangTricksIntelDriversForPerformance_javaw.exe_minecraft.exe.heapdump -Xss1M -Xmx8G -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC -XX:G1NewSizePercent=20 -XX:G1ReservePercent=20 -XX:MaxGCPauseMillis=50 -XX:G1HeapRegionSize=32M     Server Running: true     Player Count: 1 / 8; [ServerPlayer['rocio12barcenas'/187, l='ServerLevel[New World]', x=82.38, y=75.00, z=-249.35]]     Data Packs: vanilla, mod:forge, mod:sereneseasons (incompatible), mod:mna (incompatible), mod:treechop (incompatible), mod:terrablender, mod:apotheosis (incompatible), mod:cfm, mod:jei, mod:bumblecore, mod:byg (incompatible), mod:torohealth (incompatible), mod:curios, mod:xaerominimap, mod:geckolib3 (incompatible), mod:xaeroworldmap, mod:placebo (incompatible), mod:dramaticdoors, mod:travelersbackpack, mod:foodsicles     Type: Integrated Server (map_client.txt)     Is Modded: Definitely; Client brand changed to 'forge'; Server brand changed to 'forge'     ModLauncher: 9.1.0+9.1.0+main.6690ee51     ModLauncher launch target: forgeclient     ModLauncher naming: srg     ModLauncher services:           mixin PLUGINSERVICE           eventbus PLUGINSERVICE           object_holder_definalize PLUGINSERVICE           runtime_enum_extender PLUGINSERVICE           capability_token_subclass PLUGINSERVICE           accesstransformer PLUGINSERVICE           runtimedistcleaner PLUGINSERVICE           mixin TRANSFORMATIONSERVICE           fml TRANSFORMATIONSERVICE      FML Language Providers:          minecraft@1.0         javafml@null     Mod List:          client-1.18.1-20211210.034407-srg.jar             |Minecraft                     |minecraft                     |1.18.1              |DONE      |Manifest: a1:d4:5e:04:4f:d3:d6:e0:7b:37:97:cf:77:b0:de:ad:4a:47:ce:8c:96:49:5f:0a:cf:8c:ae:b2:6d:4b:8a:3f         Serene-Seasons-Mod-1.18.1.jar                     |Serene Seasons                |sereneseasons                 |1.18.1-6.0.0.11     |DONE      |Manifest: NOSIGNATURE         Mana-and-Artifice-Mod-1.18.1.jar                  |Mana and Artifice             |mna                           |1.7.0.2             |DONE      |Manifest: NOSIGNATURE         TreeChop-Mod-1.18.1.jar                           |HT's TreeChop                 |treechop                      |0.15.3              |DONE      |Manifest: NOSIGNATURE         TerraBlender-forge-1.18.1-1.1.0.73.jar            |TerraBlender                  |terrablender                  |1.18.1-1.1.0.73     |DONE      |Manifest: NOSIGNATURE         Apotheosis-Mod-1.18.1.jar                         |Apotheosis                    |apotheosis                    |5.2.0               |DONE      |Manifest: NOSIGNATURE         MrCrayfishs-Furniture-Mod-1.18.1.jar              |MrCrayfish's Furniture Mod    |cfm                           |7.0.0-pre28         |DONE      |Manifest: NOSIGNATURE         jei-1.18.1-9.2.3.82.jar                           |Just Enough Items             |jei                           |9.2.3.82            |DONE      |Manifest: NOSIGNATURE         bumblecore-1.18.1-1.0.4.jar                       |Bumblecore                    |bumblecore                    |1.18.1-1.0.4        |DONE      |Manifest: NOSIGNATURE         Oh+The+Biomes+You'll+Go-forge-1.18.1-1.3.5.8.jar  |Oh The Biomes You'll Go       |byg                           |1.3.5.8             |DONE      |Manifest: NOSIGNATURE         forge-1.18.1-39.0.62-universal.jar                |Forge                         |forge                         |39.0.62             |DONE      |Manifest: 84:ce:76:e8:45:35:e4:0e:63:86:df:47:59:80:0f:67:6c:c1:5f:6e:5f:4d:b3:54:47:1a:9f:7f:ed:5e:f2:90         torohealth-1.18-forge-2.jar                       |ToroHealth                    |torohealth                    |1.18-forge-2        |DONE      |Manifest: NOSIGNATURE         Curios-API-1.18.1.jar                             |Curios API                    |curios                        |1.18.1-5.0.6.0      |DONE      |Manifest: NOSIGNATURE         Xaeros_Minimap_22.1.0_Forge_1.18.jar              |Xaero's Minimap               |xaerominimap                  |22.1.0              |DONE      |Manifest: NOSIGNATURE         geckolib-1.18-forge-3.0.9.jar                     |GeckoLib                      |geckolib3                     |3.0.9               |DONE      |Manifest: NOSIGNATURE         XaerosWorldMap_1.20.0_Forge_1.18.jar              |Xaero's World Map             |xaeroworldmap                 |1.20.0              |DONE      |Manifest: NOSIGNATURE         Place2bo-1.18.1-6.0.5.jar                          |Placebo                       |placebo                       |6.0.5               |DONE      |Manifest: NOSIGNATURE         Dramatic-Doors-Mod-1.18.1.jar                     |Dramatic Doors                |dramaticdoors                 |1.18.1-1.5.0        |DONE      |Manifest: NOSIGNATURE         TravelersBackpack-1.18.1-7.0.1.jar                |Traveler's Backpack           |travelersbackpack             |7.0.1               |DONE      |Manifest: NOSIGNATURE         foodsicles-1.18.1-1.0.4.jar                       |Foodsicles                    |foodsicles                    |1.18.1-1.0.4        |DONE      |Manifest: NOSIGNATURE     Crash Report UUID: d060c158-744d-48bd-ba52-bf8d49f5f8d2     FML: 39.0     Forge: net.minecraftforge:39.0.6
    • Hi guys! I currently have a project that I've been developing in a 'vanilla' environment that I'm actually looking to transfer over to Forge, simply because of how much better the experience would be using Forge. Before starting on this Forge mod, I was planning ahead and was looking at options for proxies, of which I would greatly like to use Velocity. In their docs and by asking around their Discord, they don't support support versions of Forge of 1.13 or later because of changes in the "handshake protocol". But I also really don't want to use an unsupported version of Forge, such as 1.12.2, to be able to use a proxy. I was pointed in the direction of potentially making my own client-side mod to allow Forge to be compatible with an updated proxy, such as Velocity. When asking for a direction for achieving this, I was told to have a look at how the Forge server implements logins and that the discrepancy might be with how modified the handshake protocol is. This sounds like quite the challenge to me and I'm completely up for trying to accomplish it. So for the sake of planning ahead and having a rough idea of how I could accomplish that when the time comes to work on it, has anyone else had experience with trying to achieve this? I appreciate any help or direction offered! Thanks! 
    • Been trying to set up a server for myself and a few friends through BisectHosting. I ended up replicating the server on my own computer to see if the issue persisted (if it was on bisect's end) and it was still there. Every time a player tries to connect to the server they start connecting but after only around 2 seconds the player is disconnected with the error message Payload size exceeds 1048576 bytes.  Upon inspection of the server debug file, the player always disconnects while fmlhandshake ticking packet info is being sent, and I have repeatedly made sure the mods and their configs are identical. I tried to get RandomPatches to increase the max allowed byte size, as the default seems to be 32767, but either something is wrong with it or some other mod is limiting the packet size limit.     Server Debug: https://pastebin.com/xZLbtdQB (only includes portions from after the server launched as I couldn't upload the whole file) Server Log: https://pastebin.com/yrJ3tNaW (similarly only after server launched (hence the weird say commands) Client Log: https://pastebin.com/inSzZV96 (whole thing for once) Modlist: https://pastebin.com/Qvurg45j (All but Optifine and BetterFoliage are present on the server as they have caused issues during startup)   Honestly stumped on how to fix this, been working on it for 10 hours across two days to no avail.
  • Topics

  • Who's Online (See full list)

×
×
  • Create New...

Important Information

By using this site, you agree to our Privacy Policy.