Не получается открыть GUI

Версия Minecraft
1.7.10
2,932
44
598
Доброго времени суток Земляне и Чужие!
Сегодня я столкнулся с такой проблемой: У меня есть многоблочная структура которая состоит из одного блока, и по нажатию ПКМ на многоблочную структуру должен открываться мой GUI. Но почему-то этого не происходит(
В консоль игры пишет вот такую вещь:
A TileEntity type gte.Vmani.ContainerMod.tile.TileEntityMultiBlockContainer has throw an exception trying to write state. It will not persist. Report this to the mod author java.lang.RuntimeException: class gte.Vmani.ContainerMod.tile.TileEntityMultiBlockContainer is missing a mapping! This is a bug!
~~~ Translate/Перевод
Тип TileEntity gte.Vmani.ContainerMod.tile.TileEntityMultiBlockContainer генерирует исключение, пытающееся записать состояние. B это не будет сохраняться.
Сообщите об этом автору java.lang.RuntimeException: класс gte.Vmani.ContainerMod.tile.TileEntityMultiBlockContainer отсутствует сопоставление! Это ошибка!
[13:00:52] [Server thread/ERROR] [FML]: A TileEntity type gte.Vmani.ContainerMod.tile.TileEntityMultiBlockContainer has throw an exception trying to write state. It will not persist. Report this to the mod author
java.lang.RuntimeException: class gte.Vmani.ContainerMod.tile.TileEntityMultiBlockContainer is missing a mapping! This is a bug!
at net.minecraft.tileentity.TileEntity.writeToNBT(TileEntity.java:96) ~[TileEntity.class:?]
at gte.Vmani.ContainerMod.tile.TileEntityMultiBlock.writeToNBT(TileEntityMultiBlock.java:85) ~[TileEntityMultiBlock.class:?]
at gte.Vmani.ContainerMod.tile.TileEntityMultiBlockContainer.writeToNBT(TileEntityMultiBlockContainer.java:131) ~[TileEntityMultiBlockContainer.class:?]
at net.minecraft.world.chunk.storage.AnvilChunkLoader.writeChunkToNBT(AnvilChunkLoader.java:395) [AnvilChunkLoader.class:?]
at net.minecraft.world.chunk.storage.AnvilChunkLoader.saveChunk(AnvilChunkLoader.java:204) [AnvilChunkLoader.class:?]
at net.minecraft.world.gen.ChunkProviderServer.safeSaveChunk(ChunkProviderServer.java:287) [ChunkProviderServer.class:?]
at net.minecraft.world.gen.ChunkProviderServer.saveChunks(ChunkProviderServer.java:340) [ChunkProviderServer.class:?]
at net.minecraft.world.WorldServer.saveAllChunks(WorldServer.java:863) [WorldServer.class:?]
at net.minecraft.server.MinecraftServer.saveAllWorlds(MinecraftServer.java:370) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer.tick(MinecraftServer.java:636) [MinecraftServer.class:?]
at net.minecraft.server.integrated.IntegratedServer.tick(IntegratedServer.java:118) [IntegratedServer.class:?]
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:485) [MinecraftServer.class:?]
at net.minecraft.server.MinecraftServer$2.run(MinecraftServer.java:752) [MinecraftServer$2.class:?]
Проблема возникает из за этого кода:
Java:
 @Override
    public void writeToNBT(NBTTagCompound data) {
        
        super.writeToNBT(data); //Строка номер 85 (На неё ругаеться среда)
        
        data.setInteger("masterX", masterX);
        data.setInteger("masterY", masterY);
        data.setInteger("masterZ", masterZ);
        data.setBoolean("hasMaster", hasMaster);
        data.setBoolean("isMaster", isMaster);
        
        if (hasMaster() && isMaster())
            masterWriteToNBT(data);
        
    }
Java:
@Override
    public void writeToNBT(NBTTagCompound nbt) {
        
        super.writeToNBT(nbt); //Строка 131 (На неё ругаеться среда)
        
        NBTTagList list = new NBTTagList();

        for (int i = 0; i < items.length; ++i)
            
            {
            
            if (items[i] != null)
                
            {
                
                NBTTagCompound comp = new NBTTagCompound();
                comp.setByte("Slot", (byte)i);
                items[i].writeToNBT(comp);
                list.appendTag(comp);
                
            }
        }

        nbt.setTag("Items", list);
        
    }
Полные классы:
Java:
package gte.Vmani.ContainerMod.tile;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;

public abstract class TileEntityMultiBlock extends TileEntity {
    
    private boolean hasMaster, isMaster;
    private int masterX, masterY, masterZ;

    @Override
    public void updateEntity() {
        
        super.updateEntity();
        
        if (!worldObj.isRemote) {
            
            if (hasMaster()) {
                
                if (isMaster() && checkMultiBlockForm()) {
                    
                    doMultiBlockStuff();
                    
                }
            }
            
            else
                
            {
            
                if (checkMultiBlockForm())
                    setupStructure();
                
            }
        }
    }
    
    public abstract void doMultiBlockStuff();

    public abstract boolean checkMultiBlockForm();

    public abstract void setupStructure();

    public void reset() {
        
        masterX = 0;
        masterY = 0;
        masterZ = 0;
        
        hasMaster = false;
        isMaster = false;
        
    }

    public boolean checkForMaster() {
        
        TileEntity tile = worldObj.getTileEntity(masterX, masterY, masterZ);
        return (tile != null && (tile instanceof TileEntityMultiBlock));
        
    }

    public abstract void resetStructure();

    public abstract void masterWriteToNBT(NBTTagCompound tag);

    public abstract void masterReadFromNBT(NBTTagCompound tag);

    @Override
    public void writeToNBT(NBTTagCompound data) {
        
        super.writeToNBT(data);
        
        data.setInteger("masterX", masterX);
        data.setInteger("masterY", masterY);
        data.setInteger("masterZ", masterZ);
        data.setBoolean("hasMaster", hasMaster);
        data.setBoolean("isMaster", isMaster);
        
        if (hasMaster() && isMaster())
            masterWriteToNBT(data);
        
    }

    @Override
    public void readFromNBT(NBTTagCompound data) {
        
        super.readFromNBT(data);
        
        masterX = data.getInteger("masterX");
        masterY = data.getInteger("masterY");
        masterZ = data.getInteger("masterZ");
        hasMaster = data.getBoolean("hasMaster");
        isMaster = data.getBoolean("isMaster");
        
        if (hasMaster() && isMaster())
            masterReadFromNBT(data);
        
    }

    public boolean hasMaster() {
        
        return hasMaster;
        
    }

    public boolean isMaster() {
        
        return isMaster;
        
    }

    public int getMasterX() {
        
        return masterX;
        
    }

    public int getMasterY() {
        
        return masterY;
        
    }

    public int getMasterZ() {
        
        return masterZ;
        
    }

    public void setHasMaster(boolean bool) {
        
        hasMaster = bool;
        
    }

    public void setIsMaster(boolean bool) {
        
        isMaster = bool;
        
    }

    public void setMasterCoords(int x, int y, int z) {
        
        masterX = x;
        masterY = y;
        masterZ = z;
        
    }

    public boolean doMultiBlockStuff(World world, int x, int y, int z, EntityPlayer player, int side, float lx, float ly,
            float lz) {
        
                return hasMaster;
        
    }
}
Java:
package gte.Vmani.ContainerMod.tile;

import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagList;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.util.Constants;

public class TileEntityMultiBlockContainer extends TileEntityMultiBlock implements IInventory {
    
    public TileEntityMultiBlockContainer() {};

    private ItemStack[] items = new ItemStack[15];

    public int getSizeInventory() {
        
        return items.length;
    }

    public ItemStack getStackInSlot(int slot) {
        
        return items[slot];
        
    }

    public ItemStack decrStackSize(int slot, int amount) {
        
        if (items[slot] != null)
            
        {
            
            ItemStack itemstack;

            if (items[slot].stackSize == amount)
                
            {
                
                itemstack = items[slot];
                items[slot] = null;
                
                markDirty();
                
                return itemstack;
                
            }
            
            else
                
            {
                
                itemstack = items[slot].splitStack(amount);
                if (items[slot].stackSize == 0) items[slot] = null;
                
                markDirty();
                
                return itemstack;
                
            }
        }
        
        else
            
        {
            
            return null;
            
        }
    }

    public ItemStack getStackInSlotOnClosing(int slot) {
        
        if (items[slot] != null)
            
        {
            
            ItemStack itemstack = items[slot];
            items[slot] = null;
            
            return itemstack;
            
        }
        
        else
            
        {
            
            return null;
            
        }
    }

    public void setInventorySlotContents(int slot, ItemStack stack) {
        
        items[slot] = stack;
        if (stack != null && stack.stackSize > getInventoryStackLimit())
            
        {
            
            stack.stackSize = getInventoryStackLimit();
            
        }

        markDirty();
        
    }

    @Override
    public void readFromNBT(NBTTagCompound nbt) {
        
        super.readFromNBT(nbt);
        
        NBTTagList list = nbt.getTagList("Items", Constants.NBT.TAG_COMPOUND);
        
        items = new ItemStack[getSizeInventory()];

        for (int i = 0; i < list.tagCount(); ++i) { NBTTagCompound comp = list.getCompoundTagAt(i); int j = comp.getByte("Slot") & 255; if (j >= 0 && j < items.length)
            
            {
            
                items[j] = ItemStack.loadItemStackFromNBT(comp);
                
            }
        }
    }

    @Override
    public void writeToNBT(NBTTagCompound nbt) {
        
        super.writeToNBT(nbt);
        
        NBTTagList list = new NBTTagList();

        for (int i = 0; i < items.length; ++i)
            
            {
            
            if (items[i] != null)
                
            {
                
                NBTTagCompound comp = new NBTTagCompound();
                comp.setByte("Slot", (byte)i);
                items[i].writeToNBT(comp);
                list.appendTag(comp);
                
            }
        }

        nbt.setTag("Items", list);
        
    }

    public String getInventoryName() {
        
        return "container.storage";
        
    }

    public boolean hasCustomInventoryName() {
        
        return false;
        
    }
    
    public int getInventoryStackLimit() {
        
        return 64;
        
    }

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

    @Override
    public void masterReadFromNBT(NBTTagCompound tag) {}
    
    public void openInventory() {}

    public void closeInventory() {}

    public boolean isItemValidForSlot(int slot, ItemStack stack) {
        
        return true;
        
    }

    @Override
    public boolean checkMultiBlockForm() {
        int i = 0;
        
        for (int x = xCoord - 1; x < xCoord + 2; x++)
            for (int y = yCoord; y < yCoord + 3; y++)
                for (int z = zCoord - 1; z < zCoord + 2; z++) {
                    TileEntity tile = worldObj.getTileEntity(x, y, z);
                    
                    if (tile != null && (tile instanceof TileEntityMultiBlockContainer)) {
                        if (this.isMaster()) {
                            if (((TileEntityMultiBlockContainer)tile).hasMaster())
                                i++;
                        } else if (!((TileEntityMultiBlockContainer)tile).hasMaster())
                            i++;
                    }
                }
        
        return i > 25 && worldObj.isAirBlock(xCoord, yCoord + 1, zCoord);
        
    }

    @Override
    public void setupStructure() {
        for (int x = xCoord - 1; x < xCoord + 2; x++)
            for (int y = yCoord; y < yCoord + 3; y++)
                for (int z = zCoord - 1; z < zCoord + 2; z++) {
                    
                    TileEntity tile = worldObj.getTileEntity(x, y, z);
                    
                    boolean master = (x == xCoord && y == yCoord && z == zCoord);
                    
                    if (tile != null && (tile instanceof TileEntityMultiBlockContainer)) {
                        
                        ((TileEntityMultiBlockContainer) tile).setMasterCoords(xCoord, yCoord, zCoord);
                        ((TileEntityMultiBlockContainer) tile).setHasMaster(true);
                        ((TileEntityMultiBlockContainer) tile).setIsMaster(master);
                        
                    }
                }
    }

    @Override
    public void resetStructure() {
        for (int x = xCoord - 1; x < xCoord + 2; x++)
            for (int y = yCoord; y < yCoord + 3; y++)
                for (int z = zCoord - 1; z < zCoord + 2; z++) {
                    TileEntity tile = worldObj.getTileEntity(x, y, z);
                    if (tile != null && (tile instanceof TileEntityMultiBlock))
                        ((TileEntityMultiBlock) tile).reset();
                }
    }
}

Что мне делать с этими суперклассами?
 
Решение
Окей. Знакомая тема. Попробуй поставить брейк поинт в Minecraft#displayGuiScreen. Если туда попадет твой GuiContainer, значит проблема в твоем методе isUseableByPlayer. Попробуй просто возвращать true.
2,932
44
598
2,932
44
598
Исключение связано не только с тайлом
Да! От ошибки в консоли я избавился! Но GUI снова не хочет открываться. (В консоське ни-че-го не пишут)

Может ли не открываться ГУИшка из за того что у тебя нет текстуры?)
 
Сверху