- 2,932
- 44
- 598
Доброго времени суток Земляне и Чужие!
Сегодня я столкнулся с такой проблемой: У меня есть многоблочная структура которая состоит из одного блока, и по нажатию ПКМ на многоблочную структуру должен открываться мой GUI. Но почему-то этого не происходит(
В консоль игры пишет вот такую вещь:
Проблема возникает из за этого кода:
Полные классы:
Что мне делать с этими суперклассами?
Сегодня я столкнулся с такой проблемой: У меня есть многоблочная структура которая состоит из одного блока, и по нажатию ПКМ на многоблочную структуру должен открываться мой 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.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();
}
}
}
Что мне делать с этими суперклассами?