package gregtech.api.multitileentity.base;
import cpw.mods.fml.common.registry.GameRegistry;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.GregTech_API;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Materials;
import gregtech.api.enums.SoundResource;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregtechWailaProvider;
import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords;
import gregtech.api.metatileentity.CoverableTileEntity;
import gregtech.api.metatileentity.GregTechTileClientEvents;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity;
import gregtech.api.multitileentity.MultiTileEntityBlockInternal;
import gregtech.api.multitileentity.MultiTileEntityClassContainer;
import gregtech.api.multitileentity.MultiTileEntityRegistry;
import gregtech.api.net.GT_Packet_New;
import gregtech.api.net.GT_Packet_TileEntity;
import gregtech.api.objects.GT_ItemStack;
import gregtech.api.objects.XSTR;
import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Util;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
import gregtech.common.render.IRenderedBlock;
import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.Packet;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.Explosion;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
import net.minecraftforge.fluids.IFluidTank;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.UUID;
import static gregtech.GT_Mod.GT_FML_LOGGER;
import static gregtech.api.enums.GT_Values.NBT;
import static gregtech.api.enums.GT_Values.OPOS;
import static gregtech.api.enums.GT_Values.SIDE_WEST;
import static gregtech.api.enums.GT_Values.VALID_SIDES;
public abstract class BaseMultiTileEntity extends CoverableTileEntity implements IMultiTileEntity, IHasWorldObjectAndCoords, IRenderedBlock, IGregtechWailaProvider {
// Makes a Bounding Box without having to constantly specify the Offset Coordinates.
protected static final float[] PX_BOX = {0, 0, 0, 1, 1, 1};
public Materials mMaterial = Materials._NULL;
protected final boolean mIsTicking; // If this TileEntity is ticking at all
protected boolean mShouldRefresh = true; // This Variable checks if this TileEntity should refresh when the Block is being set. That way you can turn this check off any time you need it.
protected boolean mDoesBlockUpdate = false; // This Variable is for a buffered Block Update.
protected boolean mForceFullSelectionBoxes = false; // This Variable is for forcing the Selection Box to be full.
protected boolean mNeedsUpdate = false;
protected boolean mInventoryChanged = false;
protected boolean mIsPainted = false;
protected byte mFacing = SIDE_WEST; // Default to WEST, so it renders facing Left in the inventory
protected byte mColor;
private short mMTEID = GT_Values.W, mMTERegistry = GT_Values.W;
private String mCustomName = null;
private String mOwnerName = "";
private UUID mOwnerUuid = GT_Utility.defaultUuid;
private boolean mLockUpgrade = false;
public BaseMultiTileEntity(boolean mIsTicking) {
this.mIsTicking = mIsTicking;
}
@Override
public short getMultiTileEntityID() {
return mMTEID;
}
@Override
public short getMultiTileEntityRegistryID() {
return mMTERegistry;
}
@Override
public void onRegistrationFirst(MultiTileEntityRegistry aRegistry, short aID) {
GameRegistry.registerTileEntity(getClass(), getTileEntityName());
}
@Override
public void initFromNBT(NBTTagCompound aNBT, short aMTEID, short aMTERegistry) {
// Set ID and Registry ID.
mMTEID = aMTEID;
mMTERegistry = aMTERegistry;
// Read the Default Parameters from NBT.
if (aNBT != null) readFromNBT(aNBT);
}
@Override
public void readFromNBT(NBTTagCompound aNBT) {
// Check if this is a World/Chunk Loading Process calling readFromNBT.
if