Posted January 8, 201312 yr Hi, i have a block, with tile entity, when a player places my block, it saves their name to nbt, and when somewone try to activate it , it compares the nbt name with the entity name, its all ok, but when i relog, all its done, it fails to compare the name, but the name still on nbt here is my code Block (its a test block) package WorkerChests; import static net.minecraftforge.common.ForgeDirection.DOWN; import java.util.Iterator; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.material.Material; import net.minecraft.creativetab.CreativeTabs; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.passive.EntityOcelot; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryLargeChest; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.MathHelper; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; public class BlockOwnerChest extends BlockContainer { private Random random = new Random(); private Class class2; public BlockOwnerChest(int par1, Class class22) { super(par1, Material.wood); class2 = class22; this.blockIndexInTexture = 26; this.setCreativeTab(CreativeTabs.tabDecorations); this.setBlockBounds(0.0625F, 0.0F, 0.0625F, 0.9375F, 0.875F, 0.9375F); } /** * Called when the block is placed in the world. */ public void onBlockPlacedBy(World par1World, int par2, int par3, int par4, EntityLiving par5EntityLiving) { OwnerChest chest = (OwnerChest)par1World.getBlockTileEntity(par2, par3, par4); if(par5EntityLiving instanceof EntityPlayer){ EntityPlayer pl = (EntityPlayer)par5EntityLiving; chest.onPlaced(pl); if(par1World.isRemote){ pl.addChatMessage("Nice " + pl.getEntityName() + " Your Locked Chest Is Ready"); } par1World.notifyBlockChange(par2, par3, par4, this.blockID); } } /** * Turns the adjacent chests to a double chest. */ @Override public boolean hasTileEntity(int metadata) { return true; } /** * Called upon block activation (right click on the block.) */ public boolean onBlockActivated(World par1World, int par2, int par3, int par4, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) { Object var10 = (OwnerChest)par1World.getBlockTileEntity(par2, par3, par4); OwnerChest chest= (OwnerChest)par1World.getBlockTileEntity(par2, par3, par4); System.out.println(chest.ownersNamesIndex); byte[] bite = par5EntityPlayer.getEntityName().getBytes(); if(chest.ownersNamesIndex.getBytes().equals(bite)){ return true; } if(chest.ownersNamesIndex.equalsIgnoreCase(par5EntityPlayer.getEntityName())){ return true; } if(!par5EntityPlayer.getEntityName().equalsIgnoreCase(chest.ownersNamesIndex)){ System.out.println(chest.ownersNamesIndex); par5EntityPlayer.addChatMessage("Somewone tried to open the chest"); return false; } if(par5EntityPlayer instanceof EntityPlayerMP){ EntityPlayerMP p = (EntityPlayerMP)par5EntityPlayer; if(p.username.equalsIgnoreCase(chest.ownersNamesIndex)){ return true; } else{ return false; } } else{ return true; } } /** * Returns a new instance of a block's tile entity class. Called on placing the block. */ public TileEntity createNewTileEntity(World par1World) { try { return (TileEntity)this.class2.newInstance(); } catch (Exception var3) { throw new RuntimeException(var3); } } TileEntity package WorkerChests; import java.util.Iterator; import java.util.List; import java.util.Random; import net.minecraft.block.Block; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ContainerChest; import net.minecraft.inventory.IInventory; import net.minecraft.inventory.InventoryLargeChest; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; public class OwnerChest extends TileEntity implements IInventory { public int numUsingPlayers; public String ownersNamesIndex = ""; public int[] bbint = new int[]{1,0}; /** Server sync counter (once per 20 ticks) */ private int ticksSinceSync; public int OwnerChests = 0; public String ownerName; private boolean aberto = false; public void onPlaced(EntityPlayer player){ ownersNamesIndex = player.getEntityName(); } public String getInvName() { return "container.protectedChest"; } /** * Reads a tile entity from NBT. */ @Override public void readFromNBT(NBTTagCompound par1NBTTagCompound) { super.readFromNBT(par1NBTTagCompound); NBTTagList var2 = par1NBTTagCompound.getTagList("Items"); this.chestContents = new ItemStack[this.getSizeInventory()]; this.aberto = par1NBTTagCompound.getBoolean("aberto"); for (int var3 = 0; var3 < var2.tagCount(); ++var3) { NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); int var5 = var4.getByte("Slot") & 255; if (var5 >= 0 && var5 < this.chestContents.length) { this.chestContents[var5] = ItemStack.loadItemStackFromNBT(var4); } } NBTTagList ownerList = par1NBTTagCompound.getTagList("ownersNameTag"); NBTTagCompound mymodnbt = par1NBTTagCompound.getCompoundTag("listofmods"); if(mymodnbt.hasKey("ownersNametry")){ this.ownersNamesIndex = mymodnbt.getString("ownersNametry"); } } /** * Writes a tile entity to NBT. */ @Override public void writeToNBT(NBTTagCompound par1NBTTagCompound) { super.writeToNBT(par1NBTTagCompound); NBTTagList var2 = new NBTTagList(); for (int var3 = 0; var3 < this.chestContents.length; ++var3) { if (this.chestContents[var3] != null) { NBTTagCompound var4 = new NBTTagCompound(); var4.setByte("Slot", (byte)var3); this.chestContents[var3].writeToNBT(var4); var2.appendTag(var4); } } par1NBTTagCompound.setTag("Items", var2); //mod NBTTagList ownerList = new NBTTagList(); NBTTagCompound tag = new NBTTagCompound(); Random ran = new Random(); tag.setString("ownersNametry", ownersNamesIndex); par1NBTTagCompound.setTag("listofmods", tag); } } also yes a registred the tile entitiy, also in the console its printing the right name, but fails to compare.if u dont understand what im saying i have a video http://www.youtube.com/watch?v=9PMYHtjQb5g&feature=youtu.be
January 9, 201312 yr in the tile entity instead of writing to a list just do nbt.setString("UsernameNBT", this.username) and also use this.username=nbt.getString("UsernameNBT") The Korecraft Mod
January 9, 201312 yr Author i tried too, but same error, also i tried with the ee3 method, still dont working.
January 9, 201312 yr Author i mean the same bug, i get the right name printed in the console, but still dont works
January 9, 201312 yr I know you probably did this but did you register a gui handler? The Korecraft Mod
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.