Posted June 7, 20187 yr Hi. I'm trying to create a mod includes a block has tile entity like a minecraft:chest. However, when I opened a gui of the block, it returns custom name only when I am spectator. In other gamemode, tile entity returns default name such as "container.crate" as it doesn't have custom name.I tryed vanilla source from TileEntityChest, but it didn't work. Custom name is saved correctly to NBT. Even if I change custom name by using command, it is displayed only spectator mode. package doph.gpubg.tileentity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ItemStackHelper; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.NonNullList; import net.minecraft.util.text.ITextComponent; import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentTranslation; public class TileEntityCrate extends TileEntity implements IInventory { private NonNullList<ItemStack> inventory = NonNullList.<ItemStack>withSize(getSizeInventory(), ItemStack.EMPTY); private String customName; public void setName(String name) { this.customName = name; } public NonNullList<ItemStack> getInventory(){ return inventory; } public void setItems(EntityPlayer player) { NonNullList<ItemStack> inv = player.inventory.mainInventory; for(int i = 0; i < 36; i++) { this.inventory.set(i, inv.get(i)); } inv = player.inventory.armorInventory; for(int i = 0; i < 4; i++) { this.inventory.set(i + 36, inv.get(i)); } inv = player.inventory.offHandInventory; this.inventory.set(40, inv.get(0)); } @Override public void readFromNBT(NBTTagCompound compound) { super.readFromNBT(compound); this.inventory = NonNullList.<ItemStack>withSize(this.getSizeInventory(), ItemStack.EMPTY); ItemStackHelper.loadAllItems(compound, this.inventory); if (compound.hasKey("CustomName", 8)) { this.customName = compound.getString("CustomName"); } } @Override public ITextComponent getDisplayName() { return (ITextComponent) (this.hasCustomName() ? new TextComponentString(this.getName()) : new TextComponentTranslation(this.getName())); } @Override public NBTTagCompound writeToNBT(NBTTagCompound compound) { super.writeToNBT(compound); ItemStackHelper.saveAllItems(compound, this.inventory); if (this.hasCustomName()) { compound.setString("CustomName", this.customName); } return compound; } @Override public int getSizeInventory() { return 45; } @Override public boolean isEmpty() { for (ItemStack itemstack : this.inventory) { if (!itemstack.isEmpty()) { return false; } } return true; } @Override public ItemStack getStackInSlot(int index) { if (index >= 0 && index < getSizeInventory()) { return this.inventory.get(index); } return ItemStack.EMPTY; } @Override public ItemStack decrStackSize(int index, int count) { return ItemStackHelper.getAndSplit(this.inventory, index, count); } @Override public ItemStack removeStackFromSlot(int index) { return ItemStackHelper.getAndRemove(inventory, index); } @Override public void setInventorySlotContents(int index, ItemStack stack) { ItemStack itemstack = getStackInSlot(index); boolean flag = !stack.isEmpty() && stack.isItemEqual(itemstack) && ItemStack.areItemStacksEqual(stack, itemstack); this.inventory.set(index, stack); if (stack.getCount() > this.getInventoryStackLimit()) { stack.setCount(this.getInventoryStackLimit()); } if (!flag) { this.markDirty(); } } @Override public int getInventoryStackLimit() { return 64; } @Override public String getName() { return this.hasCustomName() ? this.customName : "container.crate"; } @Override public boolean isUsableByPlayer(EntityPlayer player) { if (this.world.getTileEntity(this.pos) != this) { return false; } else { return player.getDistanceSq(this.pos.getX() + 0.5D, this.pos.getY() + 0.5D, this.pos.getZ() + 0.5D) <= 64.0D; } } @Override public void openInventory(EntityPlayer player) { } @Override public void closeInventory(EntityPlayer player) { } @Override public boolean isItemValidForSlot(int index, ItemStack stack) { return false; } @Override public int getField(int id) { return 0; } @Override public void setField(int id, int value) { } @Override public int getFieldCount() { return 0; } @Override public void clear() { this.inventory.clear(); } @Override public boolean hasCustomName() { return this.customName != null && !this.customName.isEmpty(); } } Does anyone have a good idea? Edited June 8, 20187 yr by K10
June 8, 20187 yr Author Sorry, I have not updated and get tile entity packet anytime. So now Tile Entity returns custom name!!
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.