mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
105 lines
3.1 KiB
Java
105 lines
3.1 KiB
Java
package com.hbm.tileentity.network;
|
|
|
|
import com.hbm.tileentity.TileEntityMachineBase;
|
|
import net.minecraft.nbt.NBTTagCompound;
|
|
import net.minecraft.network.NetworkManager;
|
|
import net.minecraft.network.Packet;
|
|
import net.minecraft.network.play.server.S35PacketUpdateTileEntity;
|
|
import net.minecraftforge.common.util.Constants;
|
|
import net.minecraftforge.common.util.ForgeDirection;
|
|
|
|
public abstract class TileEntityCraneBase extends TileEntityMachineBase {
|
|
|
|
public TileEntityCraneBase(int scount) {
|
|
super(scount);
|
|
}
|
|
|
|
// extension to the meta system
|
|
// for compatibility purposes, normal meta values are still used by default
|
|
private ForgeDirection outputOverride = ForgeDirection.UNKNOWN;
|
|
|
|
// for extra stability in case the screwdriver action doesn't get synced to
|
|
// other clients
|
|
private ForgeDirection cachedOutputOverride = ForgeDirection.UNKNOWN;
|
|
|
|
@Override
|
|
public void updateEntity() {
|
|
if(hasWorldObj() && worldObj.isRemote) {
|
|
if(cachedOutputOverride != outputOverride) {
|
|
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
|
|
cachedOutputOverride = outputOverride;
|
|
}
|
|
}
|
|
}
|
|
|
|
public ForgeDirection getInputSide() {
|
|
return ForgeDirection.getOrientation(getBlockMetadata());
|
|
}
|
|
|
|
public ForgeDirection getOutputSide() {
|
|
ForgeDirection override = getOutputOverride();
|
|
return override != ForgeDirection.UNKNOWN ? override : ForgeDirection.getOrientation(getBlockMetadata()).getOpposite();
|
|
}
|
|
|
|
public ForgeDirection getOutputOverride() {
|
|
return outputOverride;
|
|
}
|
|
|
|
public void setOutputOverride(ForgeDirection direction) {
|
|
ForgeDirection oldSide = getOutputSide();
|
|
if(oldSide == direction) direction = direction.getOpposite();
|
|
|
|
outputOverride = direction;
|
|
|
|
if(direction == getInputSide())
|
|
setInput(oldSide);
|
|
else
|
|
onBlockChanged();
|
|
}
|
|
|
|
public void setInput(ForgeDirection direction) {
|
|
outputOverride = getOutputSide(); // save the current output, if it isn't saved yet
|
|
|
|
ForgeDirection oldSide = getInputSide();
|
|
if(oldSide == direction) direction = direction.getOpposite();
|
|
|
|
boolean needSwapOutput = direction == getOutputSide();
|
|
worldObj.setBlockMetadataWithNotify(xCoord, yCoord, zCoord, direction.ordinal(), needSwapOutput ? 4 : 3);
|
|
|
|
if(needSwapOutput)
|
|
setOutputOverride(oldSide);
|
|
}
|
|
|
|
protected void onBlockChanged() {
|
|
if(!hasWorldObj()) return;
|
|
worldObj.markBlockForUpdate(xCoord, yCoord, zCoord);
|
|
worldObj.notifyBlockChange(xCoord, yCoord, zCoord, getBlockType());
|
|
markDirty();
|
|
}
|
|
|
|
@Override
|
|
public Packet getDescriptionPacket() {
|
|
NBTTagCompound nbt = new NBTTagCompound();
|
|
writeToNBT(nbt);
|
|
return new S35PacketUpdateTileEntity(xCoord, yCoord, zCoord, 0, nbt);
|
|
}
|
|
|
|
@Override
|
|
public void onDataPacket(NetworkManager net, S35PacketUpdateTileEntity pkt) {
|
|
readFromNBT(pkt.func_148857_g());
|
|
}
|
|
|
|
@Override
|
|
public void readFromNBT(NBTTagCompound nbt) {
|
|
super.readFromNBT(nbt);
|
|
if(nbt.hasKey("CraneOutputOverride", Constants.NBT.TAG_BYTE))
|
|
outputOverride = ForgeDirection.getOrientation(nbt.getByte("CraneOutputOverride"));
|
|
}
|
|
|
|
@Override
|
|
public void writeToNBT(NBTTagCompound nbt) {
|
|
super.writeToNBT(nbt);
|
|
nbt.setByte("CraneOutputOverride", (byte) outputOverride.ordinal());
|
|
}
|
|
}
|