Краш при проверки айтемстаков на идентичность

Версия Minecraft
1.7.10
6
0
Простите за мою тупость и говнокод, но я не понимаю где здесь ошибка. Краш лог ругается на строку 81
Java:
public class TileEntityClonator extends TileEntity implements ISidedInventory, IEnergyProvider, IEnergyStorage, IEnergyReceiver {
    private int capacity = 150000;
    private EnergyStorage stored = new EnergyStorage(capacity);
    private final ItemStack[] inventory = new ItemStack[13];
    private static final int[]
            topSlots = new int[] {4},
            sideSlots = new int[] {9};
    private ClonatorRecipes.Recipe recipe = null;
    private String custom_name;
    public int time = 0, time_max = 0, energy = 0, max_energy = 0;
  
    public TileEntityClonator() {
      
    }
    @Override
    public void updateEntity() {
        if (worldObj.isRemote) return;
        energy = stored.getEnergyStored();
        max_energy = stored.getMaxEnergyStored();
        ItemStack DNK = getStackInSlot(3);
        ItemStack[] output = new ItemStack[9];
        for(int i = 0; i < 9; i++)
        {
            output[i] = getStackInSlot(4 + i);
        }
      
        if(stored.getEnergyStored() > 0)
        {
        if (time == 0) {

            if (recipe != null) {
                for(int i = 0; i < 8; i++)
                {
                if (output[i] == null) {
                    setInventorySlotContents(4 + i, recipe.Output.copy());
                    recipe = null;
                    time_max = 0;
                    break;
                } else if (output[i].isItemEqual(recipe.Output) && ItemStack.areItemStackTagsEqual(output[i], recipe.Output) && recipe.Output.stackSize + output[i].stackSize <= 64) {
                    output[i].stackSize += recipe.Output.stackSize;
                    setInventorySlotContents(4 + i, output[i]);
                    recipe = null;
                    time_max = 0;
                    break;
                }
                }
                for(int i = 0; i < 8; i++)
                {
                if (output[i] == null) {
                    setInventorySlotContents(4 + i, recipe.Output2.copy());
                    recipe = null;
                    time_max = 0;
                    break;
                }
                else if (output[i].isItemEqual(recipe.Output2) && ItemStack.areItemStackTagsEqual(output[i], recipe.Output2) && recipe.Output2.stackSize + output[i].stackSize <= 64) {
                    output[i].stackSize += recipe.Output2.stackSize;
                    setInventorySlotContents(4 + i, output[i]);
                    recipe = null;
                    time_max = 0;
                    break;
                }
                }
            } else {
                recipe = ClonatorRecipes.getRecipe(DNK);

                if (recipe != null) {
                    time_max = time = recipe.time;
                    if (DNK != null && DNK.getItem().hasContainerItem(DNK)) {
                        setInventorySlotContents(3, DNK.getItem().getContainerItem(DNK));
                    } else {
                        DNK.stackSize -= recipe.DNK.stackSize;
                        if (DNK.stackSize <= 0)
                            setInventorySlotContents(3, null);
                        else
                            setInventorySlotContents(3, DNK);
                    }
                }
            }

        } else {
            stored.modifyEnergyStored(-recipe.EnergyInput);
            --time;
        }
        }
    }

  

    @Override
    public void writeToNBT(NBTTagCompound nbt) {
        super.writeToNBT(nbt);
        NBTTagList list = new NBTTagList();
        for (int i = 0; i < getSizeInventory(); ++i) {
            if (getStackInSlot(i) == null) continue;
            NBTTagCompound slot_nbt = new NBTTagCompound();
            getStackInSlot(i).writeToNBT(slot_nbt);
            slot_nbt.setByte("Slot", (byte)i);
            list.appendTag(slot_nbt);
        }
        nbt.setTag("Inventory", list);
        if (hasCustomInventoryName()) nbt.setString("CustomName", getInventoryName());
        nbt.setInteger("Energy", stored.getEnergyStored());
    }

    @Override
    public void readFromNBT(NBTTagCompound nbt) {
        super.readFromNBT(nbt);
        if (nbt.hasKey("Inventory", NBT.TAG_LIST)) {
            NBTTagList list = nbt.getTagList("Inventory", NBT.TAG_COMPOUND);
            for (int i = 0; i < list.tagCount(); ++i) {
                NBTTagCompound slot_nbt = list.getCompoundTagAt(i);
                setInventorySlotContents((slot_nbt.getByte("Slot") & 255), ItemStack.loadItemStackFromNBT(slot_nbt));
            }
        }
        if (nbt.hasKey("CustomName", NBT.TAG_STRING)) setInventoryName(nbt.getString("CustomName"));
        stored.setEnergyStored(nbt.getInteger("Energy"));
    }

    @Override
    public int getSizeInventory() {
        return inventory.length;
    }

    @Override
    public ItemStack getStackInSlot(int slotID) {
        return inventory[slotID];
    }

    @Override
    public ItemStack decrStackSize(int slotID, int stackSize) {
        if (inventory[slotID] != null) {
            ItemStack itemstack;

            if (inventory[slotID].stackSize <= stackSize) {
                itemstack = inventory[slotID];
                inventory[slotID] = null;
                return itemstack;
            } else {
                itemstack = inventory[slotID].splitStack(stackSize);

                if (inventory[slotID].stackSize == 0)
                    inventory[slotID] = null;

                return itemstack;
            }
        } else return null;
    }

    @Override
    public ItemStack getStackInSlotOnClosing(int slotID) {
        if (inventory[slotID] != null) {
            ItemStack itemstack = inventory[slotID];
            inventory[slotID] = null;
            return itemstack;
        } else return null;
    }

    @Override
    public void setInventorySlotContents(int slotID, ItemStack itemStack) {
        inventory[slotID] = itemStack;
    }

    public void setInventoryName(String name) {
        custom_name = name;
    }

    @Override
    public String getInventoryName() {
        return hasCustomInventoryName() ? custom_name : "Clonator";
    }

    @Override
    public boolean hasCustomInventoryName() {
        return custom_name != null && custom_name.length() > 0;
    }

    @Override
    public int getInventoryStackLimit() {
        return 64;
    }

    @Override
    public boolean isUseableByPlayer(EntityPlayer player) {
        return this.worldObj.getTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : player.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D;
    }

    @Override
    public void openInventory() {}

    @Override
    public void closeInventory() {}

    @Override
    public boolean isItemValidForSlot(int slotID, ItemStack itemStack) {
        if (ClonatorRecipes.getRecipe(itemStack) == null)
            return false;
        return true;
    }

    @Override
    public int[] getAccessibleSlotsFromSide(int side) {
        return side == 0 ? topSlots : sideSlots;
    }

    @Override
    public boolean canInsertItem(int slotID, ItemStack itemStack, int side) {
        return side != 0 && isItemValidForSlot(slotID, itemStack);
    }

    @Override
    public boolean canExtractItem(int slotID, ItemStack itemStack, int side) {
        return side == 0;
    }
    @Override
    public boolean canConnectEnergy(ForgeDirection from) {
        // TODO Auto-generated method stub
        return stored.getMaxEnergyStored() > 0;
    }
    @Override
    public int receiveEnergy(int maxReceive, boolean simulate) {
        // TODO Auto-generated method stub
        return stored.getMaxReceive();
    }
    @Override
    public int extractEnergy(int maxExtract, boolean simulate) {
        // TODO Auto-generated method stub
        return stored.extractEnergy(maxExtract, simulate);
    }
    @Override
    public int getEnergyStored() {
        // TODO Auto-generated method stub
        return stored.getEnergyStored();
    }
    @Override
    public int getMaxEnergyStored() {
        // TODO Auto-generated method stub
        return stored.getMaxEnergyStored();
    }
    @Override
    public int extractEnergy(ForgeDirection from, int maxExtract, boolean simulate) {
        // TODO Auto-generated method stub
        return stored.extractEnergy(maxExtract, simulate);
    }
    @Override
    public int getEnergyStored(ForgeDirection from) {
        // TODO Auto-generated method stub
        return stored.getEnergyStored();
    }
    @Override
    public int getMaxEnergyStored(ForgeDirection from) {
        // TODO Auto-generated method stub
        return stored.getMaxEnergyStored();
    }
    @Override
    public int receiveEnergy(ForgeDirection from, int maxReceive, boolean simulate) {
        // TODO Auto-generated method stub
        return stored.receiveEnergy(maxReceive, simulate);
    }
 
Краш-лог
---- Minecraft Crash Report ----
// Who set us up the TNT?

Time: 30.07.20 15:30
Description: Ticking block entity

java.lang.NullPointerException: Ticking block entity
at ru.UralInc.BestUpdate.Clonator.TileEntityClonator.updateEntity(TileEntityClonator.java:81)
at net.minecraft.world.World.updateEntities(World.java:2160)
at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:515)
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:703)
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)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Stacktrace:
at ru.UralInc.BestUpdate.Clonator.TileEntityClonator.updateEntity(TileEntityClonator.java:81)

-- Block entity being ticked --
Details:
Name: TileEntityClonator // ru.UralInc.BestUpdate.Clonator.TileEntityClonator
Block type: ID #210 (tile.Clonator // ru.UralInc.BestUpdate.Clonator.Clonator)
Block data value: 0 / 0x0 / 0b0000
Block location: World: (344,80,414), Chunk: (at 8,5,14 in 21,25; contains blocks 336,0,400 to 351,255,415), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
Actual block type: ID #210 (tile.Clonator // ru.UralInc.BestUpdate.Clonator.Clonator)
Actual block data value: 0 / 0x0 / 0b0000
Stacktrace:
at net.minecraft.world.World.updateEntities(World.java:2160)
at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:515)

-- Affected level --
Details:
Level name: Новый мир
All players: 1 total; [EntityPlayerMP['Player558'/206, l='Новый мир', x=343,21, y=80,00, z=413,18]]
Chunk stats: ServerChunkCache: 732 Drop: 0
Level seed: -7237060092149170328
Level generator: ID 00 - default, ver 1. Features enabled: true
Level generator options:
Level spawn location: World: (204,64,256), Chunk: (at 12,4,0 in 12,16; contains blocks 192,0,256 to 207,255,271), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
Level time: 282016 game time, 282016 day time
Level dimension: 0
Level storage version: 0x04ABD - Anvil
Level weather: Rain time: 125451 (now: false), thunder time: 75783 (now: false)
Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: true
Stacktrace:
at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:703)
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)

-- System Details --
Details:
Minecraft Version: 1.7.10
Operating System: Windows 10 (amd64) version 10.0
Java Version: 1.8.0_261, Oracle Corporation
Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
Memory: 592166296 bytes (564 MB) / 1026293760 bytes (978 MB) up to 1026293760 bytes (978 MB)
JVM Flags: 3 total; -Xincgc -Xmx1012M -Xms1012M
AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
IntCache: cache: 0, tcache: 0, allocated: 12, tallocated: 94
FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1558 10 mods loaded, 10 mods active
States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
UCHIJAAAA mcp{9.05} [Minecraft Coder Pack] (minecraft.jar)
UCHIJAAAA FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1558-1.7.10.jar)
UCHIJAAAA Forge{10.13.4.1558} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1558-1.7.10.jar)
UCHIJAAAA CodeChickenCore{1.0.7.47} [CodeChicken Core] (minecraft.jar)
UCHIJAAAA <CoFH ASM>{000} [CoFH ASM] (minecraft.jar)
UCHIJAAAA CoFHCore{1.7.10R3.1.4} [CoFH Core] (CoFHCore-[1.7.10]3.1.4-329.jar)
UCHIJAAAA bestupdate{0.0.0.4} [Best Update] (bin)
UCHIJAAAA ThermalFoundation{1.7.10R1.2.6} [Thermal Foundation] (ThermalFoundation-[1.7.10]1.2.6-118.jar)
UCHIJAAAA ThermalDynamics{1.7.10R1.2.1} [Thermal Dynamics] (ThermalDynamics-[1.7.10]1.2.1-172.jar)
UCHIJAAAA ThermalExpansion{1.7.10R4.1.5} [Thermal Expansion] (ThermalExpansion-[1.7.10]4.1.5-248.jar)
GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
CoFHCore: -[1.7.10]3.1.4-329
ThermalFoundation: -[1.7.10]1.2.6-118
ThermalDynamics: -[1.7.10]1.2.1-172
ThermalExpansion: -[1.7.10]4.1.5-248
Profiler Position: N/A (disabled)
Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
Player Count: 1 / 8; [EntityPlayerMP['Player558'/206, l='Новый мир', x=343,21, y=80,00, z=413,18]]
Type: Integrated Server (map_client.txt)
Is Modded: Definitely; Client brand changed to 'fml,forge'
Краш-лог:
---- Minecraft Crash Report ----
// Who set us up the TNT?

Time: 30.07.20 15:30
Description: Ticking block entity

java.lang.NullPointerException: Ticking block entity
	at ru.UralInc.BestUpdate.Clonator.TileEntityClonator.updateEntity(TileEntityClonator.java:81)
	at net.minecraft.world.World.updateEntities(World.java:2160)
	at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:515)
	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:703)
	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)


A detailed walkthrough of the error, its code path and all known details is as follows:
---------------------------------------------------------------------------------------

-- Head --
Stacktrace:
	at ru.UralInc.BestUpdate.Clonator.TileEntityClonator.updateEntity(TileEntityClonator.java:81)

-- Block entity being ticked --
Details:
	Name: TileEntityClonator // ru.UralInc.BestUpdate.Clonator.TileEntityClonator
	Block type: ID #210 (tile.Clonator // ru.UralInc.BestUpdate.Clonator.Clonator)
	Block data value: 0 / 0x0 / 0b0000
	Block location: World: (344,80,414), Chunk: (at 8,5,14 in 21,25; contains blocks 336,0,400 to 351,255,415), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
	Actual block type: ID #210 (tile.Clonator // ru.UralInc.BestUpdate.Clonator.Clonator)
	Actual block data value: 0 / 0x0 / 0b0000
Stacktrace:
	at net.minecraft.world.World.updateEntities(World.java:2160)
	at net.minecraft.world.WorldServer.updateEntities(WorldServer.java:515)

-- Affected level --
Details:
	Level name: Новый мир
	All players: 1 total; [EntityPlayerMP['Player558'/206, l='Новый мир', x=343,21, y=80,00, z=413,18]]
	Chunk stats: ServerChunkCache: 732 Drop: 0
	Level seed: -7237060092149170328
	Level generator: ID 00 - default, ver 1. Features enabled: true
	Level generator options: 
	Level spawn location: World: (204,64,256), Chunk: (at 12,4,0 in 12,16; contains blocks 192,0,256 to 207,255,271), Region: (0,0; contains chunks 0,0 to 31,31, blocks 0,0,0 to 511,255,511)
	Level time: 282016 game time, 282016 day time
	Level dimension: 0
	Level storage version: 0x04ABD - Anvil
	Level weather: Rain time: 125451 (now: false), thunder time: 75783 (now: false)
	Level game mode: Game mode: creative (ID 1). Hardcore: false. Cheats: true
Stacktrace:
	at net.minecraft.server.MinecraftServer.updateTimeLightAndEntities(MinecraftServer.java:703)
	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)

-- System Details --
Details:
	Minecraft Version: 1.7.10
	Operating System: Windows 10 (amd64) version 10.0
	Java Version: 1.8.0_261, Oracle Corporation
	Java VM Version: Java HotSpot(TM) 64-Bit Server VM (mixed mode), Oracle Corporation
	Memory: 592166296 bytes (564 MB) / 1026293760 bytes (978 MB) up to 1026293760 bytes (978 MB)
	JVM Flags: 3 total; -Xincgc -Xmx1012M -Xms1012M
	AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
	IntCache: cache: 0, tcache: 0, allocated: 12, tallocated: 94
	FML: MCP v9.05 FML v7.10.99.99 Minecraft Forge 10.13.4.1558 10 mods loaded, 10 mods active
	States: 'U' = Unloaded 'L' = Loaded 'C' = Constructed 'H' = Pre-initialized 'I' = Initialized 'J' = Post-initialized 'A' = Available 'D' = Disabled 'E' = Errored
	UCHIJAAAA	mcp{9.05} [Minecraft Coder Pack] (minecraft.jar) 
	UCHIJAAAA	FML{7.10.99.99} [Forge Mod Loader] (forgeSrc-1.7.10-10.13.4.1558-1.7.10.jar) 
	UCHIJAAAA	Forge{10.13.4.1558} [Minecraft Forge] (forgeSrc-1.7.10-10.13.4.1558-1.7.10.jar) 
	UCHIJAAAA	CodeChickenCore{1.0.7.47} [CodeChicken Core] (minecraft.jar) 
	UCHIJAAAA	<CoFH ASM>{000} [CoFH ASM] (minecraft.jar) 
	UCHIJAAAA	CoFHCore{1.7.10R3.1.4} [CoFH Core] (CoFHCore-[1.7.10]3.1.4-329.jar) 
	UCHIJAAAA	bestupdate{0.0.0.4} [Best Update] (bin) 
	UCHIJAAAA	ThermalFoundation{1.7.10R1.2.6} [Thermal Foundation] (ThermalFoundation-[1.7.10]1.2.6-118.jar) 
	UCHIJAAAA	ThermalDynamics{1.7.10R1.2.1} [Thermal Dynamics] (ThermalDynamics-[1.7.10]1.2.1-172.jar) 
	UCHIJAAAA	ThermalExpansion{1.7.10R4.1.5} [Thermal Expansion] (ThermalExpansion-[1.7.10]4.1.5-248.jar) 
	GL info: ~~ERROR~~ RuntimeException: No OpenGL context found in the current thread.
	CoFHCore: -[1.7.10]3.1.4-329
	ThermalFoundation: -[1.7.10]1.2.6-118
	ThermalDynamics: -[1.7.10]1.2.1-172
	ThermalExpansion: -[1.7.10]4.1.5-248
	Profiler Position: N/A (disabled)
	Vec3 Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used
	Player Count: 1 / 8; [EntityPlayerMP['Player558'/206, l='Новый мир', x=343,21, y=80,00, z=413,18]]
	Type: Integrated Server (map_client.txt)
	Is Modded: Definitely; Client brand changed to 'fml,forge'
Последнее редактирование:
Сверху