package joshie.harvest.core.base.tile;
import joshie.harvest.api.HFApi;
import joshie.harvest.api.ticking.DailyTickableBlock;
import joshie.harvest.core.helpers.MCServerHelper;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.play.server.SPacketUpdateTileEntity;
import net.minecraft.tileentity.TileEntity;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public abstract class TileHarvest extends TileEntity {
private boolean hasChanged = false;
@Nullable
protected DailyTickableBlock getTickableForTile() {
return null;
}
@Override
public SPacketUpdateTileEntity getUpdatePacket() {
return new SPacketUpdateTileEntity(getPos(), 1, getUpdateTag());
}
@Override
public void onDataPacket(NetworkManager net, SPacketUpdateTileEntity packet) {
readFromNBT(packet.getNbtCompound());
}
@Override
@Nonnull
public NBTTagCompound getUpdateTag() {
return writeToNBT(new NBTTagCompound());
}
@Override
public void validate() {
super.validate();
DailyTickableBlock tickable = getTickableForTile();
if (tickable != null) {
HFApi.tickable.addTickable(worldObj, pos, tickable);
}
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
if (nbt.hasKey("HasChanged")) {
worldObj.markBlockRangeForRenderUpdate(getPos(), getPos());
}
}
@Override
@Nonnull
public NBTTagCompound writeToNBT(NBTTagCompound nbt) {
if (hasChanged) {
nbt.setBoolean("HasChanged", true);
hasChanged = false;
}
return super.writeToNBT(nbt);
}
public void saveAndRefresh() {
MCServerHelper.markForUpdate(worldObj, pos, 3);
if (!worldObj.isRemote) {
MCServerHelper.markTileForUpdate(this);
}
markDirty();
}
}