EmperorZelos Posted August 21, 2014 Posted August 21, 2014 I am trying to store the orientation of a certain object, I have gotten it being able to store individual orientations and have them point in various directions but when I try to save it for next time it never happens, this is the code that I have used which works in other blocks I have (it currently does nothing), why does it not work? package aerosteam.tileentitty; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import net.minecraft.tileentity.TileEntity; public class TileEntitySteamPipe extends TileEntity { public int orientation; public TileEntitySteamPipe(){ } public void readFromNBT(NBTTagCompound nbt){ super.readFromNBT(nbt); this.orientation=(int)nbt.getShort("Orientation"); int q=1/0; } public void writeToNBT(NBTTagCompound nbt){ super.writeToNBT(nbt); int q=1/0; nbt.setShort("Orientation",(short)this.orientation); } } Quote
Ewe Loon Posted August 21, 2014 Posted August 21, 2014 ? int q=1/0; that should error every time (is it) I also recommend putting @Override on the line before the overridden methods I also believe you need to do one of these extends BlockContainer implements ITileEntityProvider in your block class Quote
EmperorZelos Posted August 21, 2014 Author Posted August 21, 2014 int q=1/0; that should error every time (is it) No, that is the issue, I place it there to see IF there is an error...it never happens. I also recommend putting @Override on the line before the overridden methods Where exacly? Here is my code for the block class itself with the stuff, I still get nothing, even with the division by zero it never crashes telling me it doesn't even REACH those parts. package aerosteam.devices; import cpw.mods.fml.common.network.internal.FMLNetworkHandler; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import aerosteam.AeroSteam; import aerosteam.tileentitty.TileEntityBoiler; import aerosteam.tileentitty.TileEntitySteamPipe; import net.minecraft.block.Block; import net.minecraft.block.BlockContainer; import net.minecraft.block.ITileEntityProvider; import net.minecraft.block.material.Material; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.ChatComponentText; import net.minecraft.util.IChatComponent; import net.minecraft.util.MathHelper; import net.minecraft.world.World; public class DeviceSteamPipe extends BlockContainer implements ITileEntityProvider{ public DeviceSteamPipe(int connection) { super(Material.iron); this.setHardness(2.0F); this.setResistance(5.0F); this.setCreativeTab(AeroSteam.aeroTab); } public void onBlockAdded(World world, int x, int y, int z) { super.onBlockAdded(world, x, y, z); this.setDefaultOrientation(world, x, y, z); } public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase entityplayer,ItemStack itemstack){ int l = MathHelper.floor_double((double)(entityplayer.rotationYaw * 4.0F/360.F)+0.5D) & 3 ; int t = MathHelper.floor_double((double)(entityplayer.rotationPitch * 4.0F/360.F)+0.5D) & 3; // TileEntitySteamPipe tile = (TileEntitySteamPipe) world.getTileEntity(x, y, z); if (t==0){ if (l==1 || l==3){ tile.orientation=1; }else if(l==0 || l==2){ tile.orientation=3; } }else{ tile.orientation=2; } } private void setDefaultOrientation(World world, int x, int y, int z){ if(!world.isRemote){ }; } public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ){ if (!world.isRemote){ TileEntitySteamPipe tile = (TileEntitySteamPipe) world.getTileEntity(x, y, z); player.addChatMessage(new ChatComponentText("Metadata:" + tile.orientation)); } return true; } public int getRenderType(){ return -1; } public boolean isOpaqueCube(){ return false; } public boolean renderAsNormalBlock(){ return false; } @Override public TileEntity createNewTileEntity(World p_149915_1_, int p_149915_2_) { return new TileEntitySteamPipe(); } @SideOnly(Side.CLIENT) public void registerBlockIcons(IIconRegister iconregister){ this.blockIcon = iconregister.registerIcon(AeroSteam.MODID + ":" + "SteamPipeStraight"); } } Quote
TheGreyGhost Posted August 21, 2014 Posted August 21, 2014 Hi There are probably a couple of problems. For example, you need to override onDataPacket and getDescriptionPacket for the TileEntity. This example code for 1.6.4 shows you a working example. https://github.com/mnn/jaffas/blob/59b59f01a1f2f6b21b0dc87e5a15e6761a3f3f19/src/minecraft/monnef/jaffas/food/block/TileEntityPie.java#L117 Should still work in 1.7 with some tweaking (i.e. Packet name change) The @Override question - something like this @Override public void readFromNBT(NBTTagCompound tag) { (Google @Override to see why it's important) A better way to track your program flow, instead of q = 1/0, is to use eg System.out.println("readFromNBT"); I'm not sure why your q=1/0 appears to show that this code isn't reached. Perhaps your compiler is optimising it out, and that code actually is executed. Try the System.out method instead and see if that's really the problem. -TGG Quote
EmperorZelos Posted August 21, 2014 Author Posted August 21, 2014 I am not too familiar with what to replace to make it 1.7 compatible, what needs to be replaced exacly? Quote
EmperorZelos Posted August 21, 2014 Author Posted August 21, 2014 Alright I got it working, thank you! Quote
Recommended Posts
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.