Posted May 1, 201510 yr So I've got a tile entity (an egg), that has a countdown until it hatches. Saving it seems to work well enough; writeToNBT gets called, and the values are written down as far as I know. But when I load the world, readFromNBT isn't called at all. Code to follow. package com.nosrick.minersgotchi.tileentities; import java.util.ArrayList; import com.nosrick.minersgotchi.entities.BabyGotchiEntity; import com.nosrick.minersgotchi.needs.GotchiNeed; import com.nosrick.minersgotchi.needs.GotchiNeedsManager; import net.minecraft.entity.Entity; import net.minecraft.entity.passive.EntitySheep; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.NetworkManager; import net.minecraft.network.Packet; import net.minecraft.network.play.server.S35PacketUpdateTileEntity; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.IExtendedEntityProperties; public class GotchiEggTileEntity extends TileEntity { public static final String publicName = "TileEntityGotchiEgg"; private String name = "TileEntityGotchiEgg"; private GotchiNeedsManager needsManager; private int hatchTimer; public GotchiEggTileEntity() { ArrayList<GotchiNeed> eggNeeds = new ArrayList<GotchiNeed>(); //20 ticks per second, need decreases every 5 seconds eggNeeds.add(new GotchiNeed("Heat", 0, 20)); needsManager = new GotchiNeedsManager(eggNeeds); hatchTimer = 100; } public String GetName() { return name; } @Override public void updateEntity() { if(!worldObj.isRemote) { needsManager.Update(); System.out.println(hatchTimer); if(hatchTimer > 0) { hatchTimer -= 1; } float totalLight = 0; float nonZeroSources = 0; float light = worldObj.getBlockLightValue(xCoord - 1, yCoord, zCoord); if(light > 0.0F) { totalLight += light; nonZeroSources += 1; } light = worldObj.getBlockLightValue(xCoord + 1, yCoord, zCoord); if(light > 0.0F) { totalLight += light; nonZeroSources += 1; } light = worldObj.getBlockLightValue(xCoord, yCoord, zCoord - 1); if(light > 0.0F) { totalLight += light; nonZeroSources += 1; } light = worldObj.getBlockLightValue(xCoord, yCoord, zCoord + 1); if(light > 0.0F) { totalLight += light; nonZeroSources += 1; } if((totalLight / nonZeroSources) >= 14.0F && worldObj.getBlock(xCoord, yCoord - 1, zCoord) == Blocks.hay_block) { needsManager.SatisfyNeed("Heat", 1); System.out.println("Receiving heat, " + (totalLight / nonZeroSources)); } if(hatchTimer == 0 && needsManager.GetAverageSatisfaction("Heat") > 40) { //Hatch! System.out.println("Hatching!"); //Move onto spawning a creature BabyGotchiEntity baby = new BabyGotchiEntity(worldObj); baby.setPosition(xCoord, yCoord, zCoord); worldObj.spawnEntityInWorld(baby); worldObj.setBlockToAir(xCoord, yCoord, zCoord); } } } @Override public void readFromNBT(NBTTagCompound compound) { System.out.println("Loading NBT Data"); super.writeToNBT(compound); this.hatchTimer = compound.getInteger("hatchTimer"); } @Override public void writeToNBT(NBTTagCompound compound) { System.out.println("Saving NBT Data"); super.readFromNBT(compound); compound.setInteger("hatchTimer", hatchTimer); } } What am I doing wrong?
May 1, 201510 yr Author Hahaha, holy crap, I totally did not realise that. I'll fix it and see what happens. EDIT: It totally works now. I am so ashamed. Thanks, diesieben07.
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.