From 44a1027dfa51af1864364c391e67686590ce347f Mon Sep 17 00:00:00 2001 From: Jason Mitchell Date: Mon, 18 Apr 2022 11:16:31 -0700 Subject: Multitileentity precursor (#963) * Refactors * Refactor CoverableTileEntity a bit more, pull out a CommonMetaTileEntity * Add an IDebugableTileEntity interface instead of checking various subclasses * Move more redstone related things to CoverableTileEntity * Add IGTENet * Final and dead code removal * Address a few comments, fix a few comments, remove some more dead code, and add some more finals. * fix bad rebase --- src/main/java/gregtech/api/enums/GT_Values.java | 96 ++++- src/main/java/gregtech/api/enums/ItemList.java | 1 + src/main/java/gregtech/api/enums/Textures.java | 17 +- .../gregtech/api/interfaces/IIconContainer.java | 15 + .../tileentity/IBasicEnergyContainer.java | 6 +- .../api/interfaces/tileentity/ICoverable.java | 3 +- .../tileentity/IDebugableTileEntity.java | 20 + .../interfaces/tileentity/IEnergyConnected.java | 12 +- .../api/interfaces/tileentity/IGTEnet.java | 20 + .../interfaces/tileentity/IGregTechTileEntity.java | 2 +- .../tileentity/IHasWorldObjectAndCoords.java | 5 + .../api/interfaces/tileentity/IIC2Enet.java | 17 + .../interfaces/tileentity/IMachineProgress.java | 4 +- .../interfaces/tileentity/IRedstoneEmitter.java | 7 + .../api/interfaces/tileentity/ITurnable.java | 15 +- .../gregtech/api/items/GT_MetaGenerated_Item.java | 8 +- .../api/metatileentity/BaseMetaPipeEntity.java | 198 ++------- .../api/metatileentity/BaseMetaTileEntity.java | 354 +++++------------ .../api/metatileentity/BaseTileEntity.java | 114 ++++-- .../api/metatileentity/CommonMetaTileEntity.java | 162 ++++++++ .../CoverableGregTechTileEntity.java | 361 ----------------- .../api/metatileentity/CoverableTileEntity.java | 441 +++++++++++++++++++++ .../metatileentity/GregTechTileClientEvents.java | 12 + .../api/metatileentity/MetaPipeEntity.java | 6 +- .../api/metatileentity/MetaTileClientEvents.java | 12 - .../api/metatileentity/MetaTileEntity.java | 6 +- .../implementations/GT_MetaPipeEntity_Fluid.java | 2 +- .../implementations/GT_MetaPipeEntity_Item.java | 3 +- .../GT_MetaTileEntity_EnhancedMultiBlockBase.java | 11 +- .../api/net/GT_Packet_RequestCoverData.java | 7 +- .../gregtech/api/net/GT_Packet_SendCoverData.java | 8 +- .../api/objects/GT_CopiedBlockTexture.java | 1 + src/main/java/gregtech/api/objects/GT_HashSet.java | 12 +- .../gregtech/api/util/GT_CoverBehaviorBase.java | 4 +- .../java/gregtech/api/util/GT_LanguageManager.java | 25 +- src/main/java/gregtech/api/util/GT_Utility.java | 125 ++---- src/main/java/gregtech/common/GT_Client.java | 86 ++-- src/main/java/gregtech/common/GT_Proxy.java | 1 + .../gregtech/common/blocks/GT_Block_Machines.java | 159 +++----- .../gregtech/common/blocks/GT_Item_Machines.java | 127 +++--- .../gregtech/common/covers/GT_Cover_FacadeAE.java | 6 +- .../common/covers/GT_Cover_FacadeBase.java | 8 +- .../common/covers/GT_Cover_Fluidfilter.java | 2 +- .../common/render/GT_CopiedBlockTexture.java | 14 +- .../common/render/GT_CopiedCTMBlockTexture.java | 16 +- .../gregtech/common/render/GT_RenderedTexture.java | 44 +- ...T_MetaTileEntity_LongDistancePipelineFluid.java | 14 +- ...GT_MetaTileEntity_LongDistancePipelineItem.java | 9 +- .../loaders/postload/GT_MachineRecipeLoader.java | 29 +- 49 files changed, 1359 insertions(+), 1268 deletions(-) create mode 100644 src/main/java/gregtech/api/interfaces/tileentity/IDebugableTileEntity.java create mode 100644 src/main/java/gregtech/api/interfaces/tileentity/IGTEnet.java create mode 100644 src/main/java/gregtech/api/interfaces/tileentity/IIC2Enet.java create mode 100644 src/main/java/gregtech/api/metatileentity/CommonMetaTileEntity.java delete mode 100644 src/main/java/gregtech/api/metatileentity/CoverableGregTechTileEntity.java create mode 100644 src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java create mode 100644 src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java delete mode 100644 src/main/java/gregtech/api/metatileentity/MetaTileClientEvents.java (limited to 'src/main/java') diff --git a/src/main/java/gregtech/api/enums/GT_Values.java b/src/main/java/gregtech/api/enums/GT_Values.java index e41eafab78..6dca327429 100644 --- a/src/main/java/gregtech/api/enums/GT_Values.java +++ b/src/main/java/gregtech/api/enums/GT_Values.java @@ -55,7 +55,7 @@ public class GT_Values { * This is worth exactly one normal Item. * This Constant can be divided by many commonly used Numbers such as * 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 24, ... 64 or 81 - * without loosing precision and is for that reason used as Unit of Amount. + * without losing precision and is for that reason used as Unit of Amount. * But it is also small enough to be multiplied with larger Numbers. *

* This is used to determine the amount of Material contained inside a prefixed Ore. @@ -195,6 +195,98 @@ public class GT_Values { RES_PATH_ASPECTS = MOD_ID + ":" + TEX_DIR_ASPECTS, RES_PATH_IC2 = MOD_ID_IC2.toLowerCase(Locale.ENGLISH) + ":", RES_PATH_MODEL = MOD_ID + ":" + TEX_DIR + "models/"; + + /** + * NBT String Keys + */ + public static class NBT { + public static final String + COLOR = "gt.color", // Integer + CUSTOM_NAME = "name", // String + DISPAY = "gt.display", // String + FACING = "gt.facing", // Byte + HIDDEN = "gt.hidden", // Boolean + LOCK_UPGRADE = "gt.locked", // Boolean + MATERIAL = "gt.material", // String containing the Material Name. + MODE = "gt.mode", // Number + ALLOWED_MODES = "gt.amode", // Number + MTE_ID = "gt.mte.id", // Containing the MTE ID + MTE_REG = "gt.mte.reg", // Containing the MTE Registry ID + OWNER = "gt.owner", // String + OWNER_UUID = "gt.ownerUuid", // UUID (String) + + // Machines + FLUID_OUT = "gt.fluidout", // Output Fluid + INV_OUT = "gt.invout", // ItemStack + PARALLEL = "gt.parallel", // Number + TANK_CAPACITY = "gt.tankcap", // Number + TANK_IN = "gt.tank.in.", // FluidStack + TANK_OUT = "gt.tank.out.", // FluidStack + TEXTURE = "gt.texture", // String + INV_SIZE = "gt.invsize", // Number + INV_LIST = "gt.invlist", // NBT List + + // MultiBlock + STRUCTURE_OK = "gt.structure.ok", + ROTATION = "gt.eRotation", + FLIP = "gt.eFlip", + TARGET = "gt.target", // Boolean + TARGET_X = "gt.target.x", // Number + TARGET_Y = "gt.target.y", // Number + TARGET_Z = "gt.target.z", // Number + + empty_ = ""; + } + + + public static final int UNCOLORED = 0x00ffffff; + + /** + * Sides + */ + public static final byte + SIDE_BOTTOM = 0, SIDE_DOWN = 0, + SIDE_TOP = 1, SIDE_UP = 1, + SIDE_NORTH = 2, // Also a Side with a stupidly mirrored Texture + SIDE_SOUTH = 3, + SIDE_WEST = 4, + SIDE_EAST = 5, // Also a Side with a stupidly mirrored Texture + SIDE_ANY = 6, SIDE_UNKNOWN = 6, SIDE_INVALID = 6, SIDE_INSIDE = 6, SIDE_UNDEFINED = 6; + + /** Compass alike Array for the proper ordering of North, East, South and West. */ + public static final byte[] COMPASS_DIRECTIONS = {SIDE_NORTH, SIDE_EAST, SIDE_SOUTH, SIDE_WEST}; + + + /** + * An Array containing all Sides which follow the Condition, in order to iterate over them for example. + */ + public static final byte[] + ALL_SIDES = {0,1,2,3,4,5,6}, + ALL_VALID_SIDES = {0,1,2,3,4,5 }; + + /** + * For Facing Checks. + */ + + public static final boolean[] + INVALID_SIDES = { false, false, false, false, false, false, true }, + VALID_SIDES = { true, true, true, true, true, true, false }; + + + /** + * Side->Offset Mappings. + */ + public static final byte[] + OFFX = { 0, 0, 0, 0,-1,+1, 0}, + OFFY = {-1,+1, 0, 0, 0, 0, 0}, + OFFZ = { 0, 0,-1,+1, 0, 0, 0}; + + /** + * Side->Opposite Mappings. + **/ + public static final byte[] + OPOS = { 1, 0, 3, 2, 5, 4, 6}; + /** * The Mod Object itself. That is the GT_Mod-Object. It's needed to open GUI's and similar. */ @@ -316,4 +408,6 @@ public class GT_Values { public static boolean disableDigitalChestsExternalAccess = false; public static boolean lateConfigSave = true; public static boolean worldTickHappened = false; + + public static final int[] emptyIntArray = new int[0]; } diff --git a/src/main/java/gregtech/api/enums/ItemList.java b/src/main/java/gregtech/api/enums/ItemList.java index b874f1df2e..a14691f4b3 100644 --- a/src/main/java/gregtech/api/enums/ItemList.java +++ b/src/main/java/gregtech/api/enums/ItemList.java @@ -63,6 +63,7 @@ public enum ItemList implements IItemContainer { RC_Bed_Wood, RC_Bed_Stone, RC_Rebar, + TC_Thaumometer, IC2_Item_Casing_Tin, IC2_Item_Casing_Copper, IC2_Item_Casing_Iron, diff --git a/src/main/java/gregtech/api/enums/Textures.java b/src/main/java/gregtech/api/enums/Textures.java index e7fb1e9af8..5730be05e9 100644 --- a/src/main/java/gregtech/api/enums/Textures.java +++ b/src/main/java/gregtech/api/enums/Textures.java @@ -1681,14 +1681,13 @@ public class Textures { BLOCK_BLAZE, BLOCK_CRYOLITE }; - public static ITexture[] HIDDEN_TEXTURE = { + public static final ITexture[] HIDDEN_TEXTURE = { TextureFactory.builder().addIcon(HIDDEN_FACE).stdOrient().build() }; - public static ITexture[] - ERROR_RENDERING = { + public static final ITexture[] ERROR_RENDERING = { TextureFactory.of(RENDERING_ERROR) }; - public static ITexture[] OVERLAYS_ENERGY_IN = { + public static final ITexture[] OVERLAYS_ENERGY_IN = { TextureFactory.of(OVERLAY_ENERGY_IN, new short[]{180, 180, 180, 0}), TextureFactory.of(OVERLAY_ENERGY_IN, new short[]{220, 220, 220, 0}), TextureFactory.of(OVERLAY_ENERGY_IN, new short[]{255, 100, 0, 0}), @@ -1724,7 +1723,7 @@ public class Textures { TextureFactory.of(OVERLAY_ENERGY_OUT, new short[]{60, 60, 245, 0}), TextureFactory.of(OVERLAY_ENERGY_OUT, new short[]{40, 40, 245, 0}), }; - public static ITexture[] OVERLAYS_ENERGY_IN_MULTI = { + public static final ITexture[] OVERLAYS_ENERGY_IN_MULTI = { TextureFactory.of(OVERLAY_ENERGY_IN_MULTI, new short[]{180, 180, 180, 0}), TextureFactory.of(OVERLAY_ENERGY_IN_MULTI, new short[]{220, 220, 220, 0}), TextureFactory.of(OVERLAY_ENERGY_IN_MULTI, new short[]{255, 100, 0, 0}), @@ -1742,7 +1741,7 @@ public class Textures { TextureFactory.of(OVERLAY_ENERGY_IN_MULTI, new short[]{60, 60, 245, 0}), TextureFactory.of(OVERLAY_ENERGY_IN_MULTI, new short[]{40, 40, 245, 0}), }; - public static ITexture[] OVERLAYS_ENERGY_OUT_MULTI = { + public static final ITexture[] OVERLAYS_ENERGY_OUT_MULTI = { TextureFactory.of(OVERLAY_ENERGY_OUT_MULTI, new short[]{180, 180, 180, 0}), TextureFactory.of(OVERLAY_ENERGY_OUT_MULTI, new short[]{220, 220, 220, 0}), TextureFactory.of(OVERLAY_ENERGY_OUT_MULTI, new short[]{255, 100, 0, 0}), @@ -1760,7 +1759,7 @@ public class Textures { TextureFactory.of(OVERLAY_ENERGY_OUT_MULTI, new short[]{60, 60, 245, 0}), TextureFactory.of(OVERLAY_ENERGY_OUT_MULTI, new short[]{40, 40, 245, 0}), }; - public static ITexture[] OVERLAYS_ENERGY_IN_POWER = { + public static final ITexture[] OVERLAYS_ENERGY_IN_POWER = { TextureFactory.of(OVERLAY_ENERGY_IN_POWER, new short[]{180, 180, 180, 0}), TextureFactory.of(OVERLAY_ENERGY_IN_POWER, new short[]{220, 220, 220, 0}), TextureFactory.of(OVERLAY_ENERGY_IN_POWER, new short[]{255, 100, 0, 0}), @@ -1778,7 +1777,7 @@ public class Textures { TextureFactory.of(OVERLAY_ENERGY_IN_POWER, new short[]{60, 60, 245, 0}), TextureFactory.of(OVERLAY_ENERGY_IN_POWER, new short[]{40, 40, 245, 0}), }; - public static ITexture[] OVERLAYS_ENERGY_OUT_POWER = { + public static final ITexture[] OVERLAYS_ENERGY_OUT_POWER = { TextureFactory.of(OVERLAY_ENERGY_OUT_POWER, new short[]{180, 180, 180, 0}), TextureFactory.of(OVERLAY_ENERGY_OUT_POWER, new short[]{220, 220, 220, 0}), TextureFactory.of(OVERLAY_ENERGY_OUT_POWER, new short[]{255, 100, 0, 0}), @@ -1796,7 +1795,7 @@ public class Textures { TextureFactory.of(OVERLAY_ENERGY_OUT_POWER, new short[]{60, 60, 245, 0}), TextureFactory.of(OVERLAY_ENERGY_OUT_POWER, new short[]{40, 40, 245, 0}), }; - public static ITexture[] LOCKERS = { + public static final ITexture[] LOCKERS = { TextureFactory.of(OVERLAY_LOCKER_000), TextureFactory.of(OVERLAY_LOCKER_001), TextureFactory.of(OVERLAY_LOCKER_002), diff --git a/src/main/java/gregtech/api/interfaces/IIconContainer.java b/src/main/java/gregtech/api/interfaces/IIconContainer.java index 0b185b387a..780edf18d6 100644 --- a/src/main/java/gregtech/api/interfaces/IIconContainer.java +++ b/src/main/java/gregtech/api/interfaces/IIconContainer.java @@ -1,5 +1,7 @@ package gregtech.api.interfaces; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.util.IIcon; import net.minecraft.util.ResourceLocation; @@ -7,15 +9,28 @@ public interface IIconContainer { /** * @return A regular Icon. */ + @SideOnly(Side.CLIENT) IIcon getIcon(); /** * @return Icon of the Overlay (or null if there is no Icon) */ + @SideOnly(Side.CLIENT) IIcon getOverlayIcon(); + /** + * @return the Amount of Render Passes for this Icon. + */ + @SideOnly(Side.CLIENT) + default int getIconPasses() { + return 1; + }; + /** * @return the Default Texture File for this Icon. */ + @SideOnly(Side.CLIENT) ResourceLocation getTextureFile(); + + } diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IBasicEnergyContainer.java b/src/main/java/gregtech/api/interfaces/tileentity/IBasicEnergyContainer.java index 6998556fd0..ca3db3354e 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IBasicEnergyContainer.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IBasicEnergyContainer.java @@ -80,12 +80,12 @@ public interface IBasicEnergyContainer extends IEnergyConnected { /** * returns the amount of Steam contained in this Block, in EU units! */ - long getStoredSteam(); + default long getStoredSteam() { return 0; } /** * returns the amount of Steam containable in this Block, in EU units! */ - long getSteamCapacity(); + default long getSteamCapacity() { return 0; } /** * Increases stored Energy. Energy Base Value is in EU, even though it's Steam! @@ -96,5 +96,5 @@ public interface IBasicEnergyContainer extends IEnergyConnected { *

* And yes, you can't directly decrease the Steam of a Machine. That is done by decreaseStoredEnergyUnits */ - boolean increaseStoredSteam(long aEnergy, boolean aIgnoreTooMuchEnergy); + default boolean increaseStoredSteam(long aEnergy, boolean aIgnoreTooMuchEnergy) { return false; } } diff --git a/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java b/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java index ebfae9d90e..e496479bed 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java @@ -21,8 +21,9 @@ public interface ICoverable extends IRedstoneTileEntity, IHasInventory, IBasicEn setCoverDataAtSide(aSide, ((ISerializableObject.LegacyCoverData) aData).get()); } + void setCoverIdAndDataAtSide(byte aSide, int aId, ISerializableObject aData); void setCoverIDAtSide(byte aSide, int aID); - + boolean setCoverIDAtSideNoUpdate(byte aSide, int aID); void setCoverItemAtSide(byte aSide, ItemStack aCover); @Deprecated diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IDebugableTileEntity.java b/src/main/java/gregtech/api/interfaces/tileentity/IDebugableTileEntity.java new file mode 100644 index 0000000000..0063eb57c6 --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/tileentity/IDebugableTileEntity.java @@ -0,0 +1,20 @@ +package gregtech.api.interfaces.tileentity; + +import net.minecraft.entity.player.EntityPlayer; + +import java.util.ArrayList; + +public interface IDebugableTileEntity { + /** + * Returns a Debug Message, for a generic DebugItem + * + * @param aPlayer the Player, who rightclicked with his Debug Item + * @param aLogLevel the Log Level of the Debug Item. + * 0 = Obvious + * 1 = Visible for the regular Scanner + * 2 = Only visible to more advanced Scanners + * 3 = Debug ONLY + * @return a String-Array containing the DebugInfo, every Index is a separate line (0 = first Line) + */ + ArrayList getDebugInfo(EntityPlayer aPlayer, int aLogLevel); +} diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java index 2b67e680a4..702f19a89d 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java @@ -46,21 +46,21 @@ public interface IEnergyConnected extends IColoredTileEntity, IHasWorldObjectAnd /** * Utility for the Network */ - class Util { + final class Util { /** * Emits Energy to the E-net. Also compatible with adjacent IC2 TileEntities. * * @return the used Amperage. */ - public static final long emitEnergyToNetwork(long aVoltage, long aAmperage, IEnergyConnected aEmitter) { + public static long emitEnergyToNetwork(long aVoltage, long aAmperage, IEnergyConnected aEmitter) { long rUsedAmperes = 0; for (byte i = 0, j = 0; i < 6 && aAmperage > rUsedAmperes; i++) { if (aEmitter.outputsEnergyTo(i)) { j = GT_Utility.getOppositeSide(i); - TileEntity tTileEntity = aEmitter.getTileEntityAtSide(i); + final TileEntity tTileEntity = aEmitter.getTileEntityAtSide(i); if (tTileEntity instanceof IEnergyConnected) { if (aEmitter.getColorization() >= 0) { - byte tColor = ((IEnergyConnected) tTileEntity).getColorization(); + final byte tColor = ((IEnergyConnected) tTileEntity).getColorization(); if (tColor >= 0 && tColor != aEmitter.getColorization()) continue; } rUsedAmperes += ((IEnergyConnected) tTileEntity).injectEnergyUnits(j, aVoltage, aAmperage - rUsedAmperes); @@ -71,8 +71,8 @@ public interface IEnergyConnected extends IColoredTileEntity, IHasWorldObjectAnd rUsedAmperes++; } } else if (GregTech_API.mOutputRF && tTileEntity instanceof IEnergyReceiver) { - ForgeDirection tDirection = ForgeDirection.getOrientation(i).getOpposite(); - int rfOut = GT_Utility.safeInt(aVoltage * GregTech_API.mEUtoRF / 100); + final ForgeDirection tDirection = ForgeDirection.getOrientation(i).getOpposite(); + final int rfOut = GT_Utility.safeInt(aVoltage * GregTech_API.mEUtoRF / 100); if (((IEnergyReceiver) tTileEntity).receiveEnergy(tDirection, rfOut, true) == rfOut) { ((IEnergyReceiver) tTileEntity).receiveEnergy(tDirection, rfOut, false); rUsedAmperes++; diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IGTEnet.java b/src/main/java/gregtech/api/interfaces/tileentity/IGTEnet.java new file mode 100644 index 0000000000..cd4810eba6 --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/tileentity/IGTEnet.java @@ -0,0 +1,20 @@ +package gregtech.api.interfaces.tileentity; + +public interface IGTEnet { + + /** + * @return true if this Device consumes Energy at all + */ + default boolean isEnetInput() { + return false; + } + + /** + * + * @return true if this Device emits Energy at all + */ + default boolean isEnetOutput() { + return false; + } + +} diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IGregTechTileEntity.java b/src/main/java/gregtech/api/interfaces/tileentity/IGregTechTileEntity.java index 7b3e3fee6c..8c6da608fd 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IGregTechTileEntity.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IGregTechTileEntity.java @@ -17,7 +17,7 @@ import java.util.UUID; /** * A simple compound Interface for all my TileEntities. *

- * Also delivers most of the Informations about my TileEntities. + * Also delivers most of the Information about my TileEntities. *

* It can cause Problems to include this Interface! */ diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IHasWorldObjectAndCoords.java b/src/main/java/gregtech/api/interfaces/tileentity/IHasWorldObjectAndCoords.java index f367b7c073..2464816045 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IHasWorldObjectAndCoords.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IHasWorldObjectAndCoords.java @@ -5,6 +5,7 @@ import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.IInventory; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChunkCoordinates; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; import net.minecraftforge.fluids.IFluidHandler; @@ -25,6 +26,10 @@ public interface IHasWorldObjectAndCoords { int getZCoord(); + default ChunkCoordinates getCoords() { + return new ChunkCoordinates(getXCoord(), getYCoord(), getZCoord()); + } + boolean isServerSide(); boolean isClientSide(); diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IIC2Enet.java b/src/main/java/gregtech/api/interfaces/tileentity/IIC2Enet.java new file mode 100644 index 0000000000..ee3516dfac --- /dev/null +++ b/src/main/java/gregtech/api/interfaces/tileentity/IIC2Enet.java @@ -0,0 +1,17 @@ +package gregtech.api.interfaces.tileentity; + +/** + * IC2 Energy Compat + */ +public interface IIC2Enet { + /** + * Should this tile/block join the ic2 enet + */ + boolean shouldJoinIc2Enet(); + + /** + * Update the ic2 enet + */ + void doEnetUpdate(); + +} diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IMachineProgress.java b/src/main/java/gregtech/api/interfaces/tileentity/IMachineProgress.java index f5eeaf9318..0c342b8cfc 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IMachineProgress.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IMachineProgress.java @@ -49,13 +49,13 @@ public interface IMachineProgress extends IHasWorldObjectAndCoords { * used to control Machines via Redstone Signal Strength by special Covers * In case of 0 the Machine is very likely doing nothing, or is just not being controlled at all. */ - byte getWorkDataValue(); + default byte getWorkDataValue() { return 0; } /** * used to control Machines via Redstone Signal Strength by special Covers * only Values between 0 and 15! */ - void setWorkDataValue(byte aValue); + default void setWorkDataValue(byte aValue) {} /** * gives you the Active Status of the Machine diff --git a/src/main/java/gregtech/api/interfaces/tileentity/IRedstoneEmitter.java b/src/main/java/gregtech/api/interfaces/tileentity/IRedstoneEmitter.java index f9fff116f4..fc5aa460bf 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/IRedstoneEmitter.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/IRedstoneEmitter.java @@ -34,4 +34,11 @@ public interface IRedstoneEmitter extends IHasWorldObjectAndCoords { * Gets the Output for the comparator on the given Side */ byte getComparatorValue(byte aSide); + + /** + * Get the redstone output signal strength for a given side + */ + default byte getGeneralRS(byte aSide) { + return 0; + } } diff --git a/src/main/java/gregtech/api/interfaces/tileentity/ITurnable.java b/src/main/java/gregtech/api/interfaces/tileentity/ITurnable.java index 94888cdfb8..8c8ce443b0 100644 --- a/src/main/java/gregtech/api/interfaces/tileentity/ITurnable.java +++ b/src/main/java/gregtech/api/interfaces/tileentity/ITurnable.java @@ -1,6 +1,8 @@ package gregtech.api.interfaces.tileentity; +import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES; + /** * Implemented by all my Machines. However without any security checks, if the Players are even allowed to rotate it. */ @@ -15,7 +17,7 @@ public interface ITurnable { /** * Set the block's facing * - * @param facing facing to set the block to + * @param aSide facing to set the block to */ void setFrontFacing(byte aSide); @@ -30,4 +32,15 @@ public interface ITurnable { * Determine if the wrench can be used to set the block's facing. */ boolean isValidFacing(byte aSide); + + /** + * Get the list of valid facings + */ + default boolean[] getValidFacings() { + final boolean[] validFacings = new boolean[6]; + for(byte facing : ALL_VALID_SIDES) { + validFacings[facing] = isValidFacing(facing); + } + return validFacings; + } } diff --git a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java index 0a223a04f6..38b065f2aa 100644 --- a/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java +++ b/src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java @@ -67,10 +67,10 @@ public abstract class GT_MetaGenerated_Item extends GT_MetaBase_Item implements public final BitSet mVisibleItems; public final IIcon[][] mIconList; - public final ConcurrentHashMap mFoodStats = new ConcurrentHashMap(); - public final ConcurrentHashMap mElectricStats = new ConcurrentHashMap(); - public final ConcurrentHashMap mFluidContainerStats = new ConcurrentHashMap(); - public final ConcurrentHashMap mBurnValues = new ConcurrentHashMap(); + public final ConcurrentHashMap mFoodStats = new ConcurrentHashMap<>(); + public final ConcurrentHashMap mElectricStats = new ConcurrentHashMap<>(); + public final ConcurrentHashMap mFluidContainerStats = new ConcurrentHashMap<>(); + public final ConcurrentHashMap mBurnValues = new ConcurrentHashMap<>(); /** * Creates the Item using these Parameters. diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java index f10066edf8..fc67ec1b55 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java @@ -11,6 +11,7 @@ import java.util.UUID; import gregtech.GT_Mod; import gregtech.api.GregTech_API; +import gregtech.api.enums.GT_Values; import gregtech.api.enums.Textures; import gregtech.api.enums.Textures.BlockIcons; import gregtech.api.graphs.Lock; @@ -19,6 +20,7 @@ import gregtech.api.graphs.paths.NodePath; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IConnectable; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IDebugableTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.IPipeRenderedTileEntity; import gregtech.api.net.GT_Packet_TileEntity; @@ -54,14 +56,13 @@ import static gregtech.api.metatileentity.BaseMetaTileEntity.COVER_DATA_NBT_KEYS *

* This is the main TileEntity for EVERYTHING. */ -public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements IGregTechTileEntity, IPipeRenderedTileEntity { +public class BaseMetaPipeEntity extends CommonMetaTileEntity implements IGregTechTileEntity, IPipeRenderedTileEntity, IDebugableTileEntity { public byte mConnections = IConnectable.NO_CONNECTION; protected MetaPipeEntity mMetaTileEntity; - private byte[] mSidedRedstone = new byte[]{0, 0, 0, 0, 0, 0}; private int[] mTimeStatistics = new int[GregTech_API.TICKS_FOR_LAG_AVERAGING]; - private boolean mInventoryChanged = false, mWorkUpdate = false, mWorks = true, mNeedsUpdate = true, mNeedsBlockUpdate = true, mSendClientData = false; + private boolean mWorkUpdate = false, mWorks = true; private final boolean mCheckConnections = false; - private byte mColor = 0, oColor = 0, mStrongRedstone = 0, oStrongRedstone = 0, oRedstoneData = 63, oTextureData = 0, oUpdateData = 0, mLagWarningCount = 0; + private byte mColor = 0, oColor = 0, oStrongRedstone = 0, oRedstoneData = 63, oTextureData = 0, oUpdateData = 0, mLagWarningCount = 0; private int oX = 0, oY = 0, oZ = 0, mTimeStatisticsIndex = 0; protected Node node; protected NodePath nodePath; @@ -119,20 +120,16 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I try { super.writeToNBT(aNBT); } catch (Throwable e) { - GT_Log.err.println("Encountered CRITICAL ERROR while saving MetaTileEntity, the Chunk whould've been corrupted by now, but I prevented that. Please report immediately to GregTech Intergalactical!!!"); - e.printStackTrace(GT_Log.err); + GT_FML_LOGGER.error("Encountered CRITICAL ERROR while saving MetaTileEntity", e); } try { aNBT.setInteger("mID", mID); - saveCoverNBT(aNBT); - aNBT.setByteArray("mRedstoneSided", mSidedRedstone); + writeCoverNBT(aNBT, false); aNBT.setByte("mConnections", mConnections); aNBT.setByte("mColor", mColor); - aNBT.setByte("mStrongRedstone", mStrongRedstone); aNBT.setBoolean("mWorks", !mWorks); } catch (Throwable e) { - GT_Log.err.println("Encountered CRITICAL ERROR while saving MetaTileEntity, the Chunk would've been corrupted by now, but I prevented that. Please report immediately to GregTech Intergalactical!!!"); - e.printStackTrace(GT_Log.err); + GT_FML_LOGGER.error("Encountered CRITICAL ERROR while saving MetaTileEntity", e); } saveMetaTileNBT(aNBT); } @@ -152,15 +149,13 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I } else { if (aID <= 0) mID = (short) aNBT.getInteger("mID"); else mID = aID; - mSidedRedstone = aNBT.getByteArray("mRedstoneSided"); mConnections = aNBT.getByte("mConnections"); mColor = aNBT.getByte("mColor"); - mStrongRedstone = aNBT.getByte("mStrongRedstone"); mWorks = !aNBT.getBoolean("mWorks"); if (mSidedRedstone.length != 6) mSidedRedstone = new byte[]{0, 0, 0, 0, 0, 0}; - loadCoverNBT(aNBT); + readCoverNBT(aNBT); loadMetaTileNBT(aNBT); } } @@ -206,7 +201,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I if (!doCoverThings()) return; - byte oldConnections = mConnections; + final byte oldConnections = mConnections; // Mask-out connection direction bits to keep only Foam related connections mConnections = (byte) (mMetaTileEntity.mConnections | (mConnections & ~IConnectable.CONNECTED_ALL)); // If foam not hardened, tries roll chance to harden @@ -266,7 +261,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I tTime = System.nanoTime() - tTime; if (mTimeStatistics.length > 0) mTimeStatistics[mTimeStatisticsIndex = (mTimeStatisticsIndex + 1) % mTimeStatistics.length] = (int) tTime; - if (tTime > 0 && tTime > (GregTech_API.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING*1000000) && mTickTimer > 1000 && getMetaTileEntity().doTickProfilingMessageDuringThisTick() && mLagWarningCount++ < 10) + if (tTime > 0 && tTime > (GregTech_API.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING* 1000000L) && mTickTimer > 1000 && getMetaTileEntity().doTickProfilingMessageDuringThisTick() && mLagWarningCount++ < 10) GT_FML_LOGGER.warn("WARNING: Possible Lag Source at ["+xCoord+","+yCoord+","+zCoord+"] in Dimension "+worldObj.provider.dimensionId+" with "+tTime+" ns caused by an instance of "+getMetaTileEntity().getClass()); } @@ -289,12 +284,6 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I sendCoverDataIfNeeded(); } - @Override - public Packet getDescriptionPacket() { - issueClientUpdate(); - return null; - } - public final void receiveMetaTileEntityData(short aID, int aCover0, int aCover1, int aCover2, int aCover3, int aCover4, int aCover5, byte aTextureData, byte aUpdateData, byte aRedstoneData, byte aColorData) { issueTextureUpdate(); if (aID > 0 && mID != aID) { @@ -309,10 +298,10 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I setCoverIDAtSide((byte) 4, aCover4); setCoverIDAtSide((byte) 5, aCover5); - receiveClientEvent(MetaTileClientEvents.CHANGE_COMMON_DATA, aTextureData); - receiveClientEvent(MetaTileClientEvents.CHANGE_CUSTOM_DATA, aUpdateData); - receiveClientEvent(MetaTileClientEvents.CHANGE_COLOR, aColorData); - receiveClientEvent(MetaTileClientEvents.CHANGE_REDSTONE_OUTPUT, aRedstoneData); + receiveClientEvent(GregTechTileClientEvents.CHANGE_COMMON_DATA, aTextureData); + receiveClientEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, aUpdateData); + receiveClientEvent(GregTechTileClientEvents.CHANGE_COLOR, aColorData); + receiveClientEvent(GregTechTileClientEvents.CHANGE_REDSTONE_OUTPUT, aRedstoneData); } @Override @@ -323,25 +312,24 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I try { mMetaTileEntity.receiveClientEvent((byte) aEventID, (byte) aValue); } catch (Throwable e) { - GT_Log.err.println("Encountered Exception while receiving Data from the Server, the Client should've been crashed by now, but I prevented that. Please report immediately to GregTech Intergalactical!!!"); - e.printStackTrace(GT_Log.err); + GT_FML_LOGGER.error("Encountered Exception while receiving Data from the Server", e); } } if (isClientSide()) { issueTextureUpdate(); switch (aEventID) { - case MetaTileClientEvents.CHANGE_COMMON_DATA: + case GregTechTileClientEvents.CHANGE_COMMON_DATA: mConnections = (byte) aValue; break; - case MetaTileClientEvents.CHANGE_CUSTOM_DATA: + case GregTechTileClientEvents.CHANGE_CUSTOM_DATA: if (hasValidMetaTileEntity()) mMetaTileEntity.onValueUpdate((byte) aValue); break; - case MetaTileClientEvents.CHANGE_COLOR: + case GregTechTileClientEvents.CHANGE_COLOR: if (aValue > 16 || aValue < 0) aValue = 0; mColor = (byte) aValue; break; - case MetaTileClientEvents.CHANGE_REDSTONE_OUTPUT: + case GregTechTileClientEvents.CHANGE_REDSTONE_OUTPUT: mSidedRedstone[0] = (byte) ((aValue & 1) == 1 ? 15 : 0); mSidedRedstone[1] = (byte) ((aValue & 2) == 2 ? 15 : 0); mSidedRedstone[2] = (byte) ((aValue & 4) == 4 ? 15 : 0); @@ -349,15 +337,15 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I mSidedRedstone[4] = (byte) ((aValue & 16) == 16 ? 15 : 0); mSidedRedstone[5] = (byte) ((aValue & 32) == 32 ? 15 : 0); break; - case MetaTileClientEvents.DO_SOUND: + case GregTechTileClientEvents.DO_SOUND: if (hasValidMetaTileEntity() && mTickTimer > 20) mMetaTileEntity.doSound((byte) aValue, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); break; - case MetaTileClientEvents.START_SOUND_LOOP: + case GregTechTileClientEvents.START_SOUND_LOOP: if (hasValidMetaTileEntity() && mTickTimer > 20) mMetaTileEntity.startSoundLoop((byte) aValue, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); break; - case MetaTileClientEvents.STOP_SOUND_LOOP: + case GregTechTileClientEvents.STOP_SOUND_LOOP: if (hasValidMetaTileEntity() && mTickTimer > 20) mMetaTileEntity.stopSoundLoop((byte) aValue, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); break; @@ -366,8 +354,9 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I return true; } + @Override public ArrayList getDebugInfo(EntityPlayer aPlayer, int aLogLevel) { - ArrayList tList = new ArrayList(); + final ArrayList tList = new ArrayList<>(); if (aLogLevel > 2) { tList.add("Meta-ID: " + EnumChatFormatting.BLUE+ mID +EnumChatFormatting.RESET + (hasValidMetaTileEntity() ? EnumChatFormatting.GREEN+" valid"+EnumChatFormatting.RESET : EnumChatFormatting.RED+" invalid"+EnumChatFormatting.RESET) + (mMetaTileEntity == null ? EnumChatFormatting.RED+" MetaTileEntity == null!"+EnumChatFormatting.RESET : " ")); } @@ -394,53 +383,12 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I return mMetaTileEntity.getSpecialDebugInfo(this, aPlayer, aLogLevel, tList); } - @Override - public void issueTextureUpdate() { - mNeedsUpdate = true; - } - - @Override - public void issueBlockUpdate() { - mNeedsBlockUpdate = true; - } - - @Override - public void issueClientUpdate() { - mSendClientData = true; - } - - @Override - public void issueCoverUpdate(byte aSide) { - super.issueCoverUpdate(aSide); - issueClientUpdate(); - } - - @Override - public byte getStrongestRedstone() { - return (byte) Math.max(getInternalInputRedstoneSignal((byte) 0), Math.max(getInternalInputRedstoneSignal((byte) 1), Math.max(getInternalInputRedstoneSignal((byte) 2), Math.max(getInternalInputRedstoneSignal((byte) 3), Math.max(getInternalInputRedstoneSignal((byte) 4), getInternalInputRedstoneSignal((byte) 5)))))); - } - - @Override - public boolean getRedstone() { - return getRedstone((byte) 0) || getRedstone((byte) 1) || getRedstone((byte) 2) || getRedstone((byte) 3) || getRedstone((byte) 4) || getRedstone((byte) 5); - } - - @Override - public boolean getRedstone(byte aSide) { - return getInternalInputRedstoneSignal(aSide) > 0; - } - @Override public boolean isGivingInformation() { if (canAccessData()) return mMetaTileEntity.isGivingInformation(); return false; } - @Override - public boolean isValidFacing(byte aSide) { - if (canAccessData()) return mMetaTileEntity.isFacingValid(aSide); - return false; - } @Override public byte getBackFacing() { @@ -675,23 +623,6 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I return 0; } - @Override - public boolean increaseStoredSteam(long aEnergy, boolean aIgnoreTooMuchEnergy) { - return false; - } - - @Override - public String[] getDescription() { - if (canAccessData()) return mMetaTileEntity.getDescription(); - return new String[0]; - } - - @Override - public boolean isValidSlot(int aIndex) { - if (canAccessData()) return mMetaTileEntity.isValidSlot(aIndex); - return false; - } - @Override public long getUniversalEnergyStored() { return Math.max(getStoredEU(), getStoredSteam()); @@ -712,15 +643,6 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I return 0; } - @Override - public long getStoredSteam() { - return 0; - } - - @Override - public long getSteamCapacity() { - return 0; - } @Override public ITexture[] getTexture(Block aBlock, byte aSide) { @@ -764,9 +686,6 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I return mMetaTileEntity != null && mMetaTileEntity.getBaseMetaTileEntity() == this; } - protected boolean canAccessData() { - return hasValidMetaTileEntity() && !isDead; - } @Override public void doExplosion(long aAmount) { @@ -935,8 +854,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I return handled; } } catch (Throwable e) { - GT_Log.err.println("Encountered Exception while rightclicking TileEntity, the Game should've crashed now, but I prevented that. Please report immediately to GregTech Intergalactical!!!"); - e.printStackTrace(GT_Log.err); + GT_FML_LOGGER.error("Encountered Exception while right clicking TileEntity", e); } return false; @@ -947,8 +865,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I try { if (aPlayer != null && hasValidMetaTileEntity()) mMetaTileEntity.onLeftclick(this, aPlayer); } catch (Throwable e) { - GT_Log.err.println("Encountered Exception while leftclicking TileEntity, the Game should've crashed now, but I prevented that. Please report immediately to GregTech Intergalactical!!!"); - e.printStackTrace(GT_Log.err); + GT_FML_LOGGER.error("Encountered Exception while left clicking TileEntity", e); } } @@ -988,7 +905,7 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I public int[] getAccessibleSlotsFromSide(int aSide) { if (canAccessData() && (getCoverBehaviorAtSideNew((byte) aSide).letsItemsOut((byte) aSide, getCoverIDAtSide((byte) aSide), getComplexCoverDataAtSide((byte) aSide), -1, this) || getCoverBehaviorAtSideNew((byte) aSide).letsItemsIn((byte) aSide, getCoverIDAtSide((byte) aSide), getComplexCoverDataAtSide((byte) aSide), -1, this))) return mMetaTileEntity.getAccessibleSlotsFromSide(aSide); - return new int[0]; + return GT_Values.emptyIntArray; } /** @@ -1012,36 +929,6 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I return false; } - @Override - public byte getInternalInputRedstoneSignal(byte aSide) { - return (byte) (getCoverBehaviorAtSideNew(aSide).getRedstoneInput(aSide, getInputRedstoneSignal(aSide), getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this) & 15); - } - - @Override - public byte getInputRedstoneSignal(byte aSide) { - return (byte) (worldObj.getIndirectPowerLevelTo(getOffsetX(aSide, 1), getOffsetY(aSide, 1), getOffsetZ(aSide, 1), aSide) & 15); - } - - @Override - public byte getOutputRedstoneSignal(byte aSide) { - return (byte) (getCoverBehaviorAtSideNew(aSide).manipulatesSidedRedstoneOutput(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this) || (getCoverBehaviorAtSideNew(aSide).letsRedstoneGoOut(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this)) ? mSidedRedstone[aSide] & 15 : 0); - } - - @Override - public void setInternalOutputRedstoneSignal(byte aSide, byte aStrength) { - if (!getCoverBehaviorAtSideNew(aSide).manipulatesSidedRedstoneOutput(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this)) - setOutputRedstoneSignal(aSide, aStrength); - } - - @Override - public void setOutputRedstoneSignal(byte aSide, byte aStrength) { - aStrength = (byte) Math.min(Math.max(0, aStrength), 15); - if (aSide >= 0 && aSide < 6 && mSidedRedstone[aSide] != aStrength) { - mSidedRedstone[aSide] = aStrength; - issueBlockUpdate(); - } - } - @Override public boolean isSteamEngineUpgradable() { return isUpgradable() && !hasSteamEngineUpgrade() && getSteamCapacity() > 0; @@ -1061,14 +948,9 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I return false; } - @Override - public boolean hasInventoryBeenModified() { - return mInventoryChanged; - } - @Override public void setGenericRedstoneOutput(boolean aOnOff) { - // + // Do nothing } @Override @@ -1131,17 +1013,6 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I return canAccessData() ? mMetaTileEntity.getComparatorValue(aSide) : 0; } - @Override - public byte getStrongOutputRedstoneSignal(byte aSide) { - return aSide >= 0 && aSide < 6 && (mStrongRedstone & (1 << aSide)) != 0 ? (byte) (mSidedRedstone[aSide] & 15) : 0; - } - - @Override - public void setStrongOutputRedstoneSignal(byte aSide, byte aStrength) { - mStrongRedstone |= (1 << aSide); - setOutputRedstoneSignal(aSide, aStrength); - } - @Override public ItemStack decrStackSize(int aIndex, int aAmount) { if (canAccessData()) { @@ -1243,11 +1114,6 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I return new FluidTankInfo[]{}; } - @Override - public boolean isInvalidTileEntity() { - return isInvalid(); - } - @Override public boolean addStackToSlot(int aIndex, ItemStack aStack) { if (GT_Utility.isStackInvalid(aStack)) return true; @@ -1333,12 +1199,6 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I return mConnections; } - @Override - public void markDirty() { - super.markDirty(); - mInventoryChanged = true; - } - public void onNeighborBlockChange(int aX, int aY, int aZ) { if (canAccessData()) { final IMetaTileEntity meta = getMetaTileEntity(); diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java index 78d73d6a51..5d62a112aa 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java @@ -15,8 +15,10 @@ import com.gtnewhorizon.structurelib.alignment.constructable.IConstructable; import com.gtnewhorizon.structurelib.alignment.constructable.IConstructableProvider; import com.gtnewhorizon.structurelib.alignment.enumerable.ExtendedFacing; import cpw.mods.fml.common.Optional; +import cpw.mods.fml.relauncher.ReflectionHelper; import gregtech.GT_Mod; import gregtech.api.GregTech_API; +import gregtech.api.enums.GT_Values; import gregtech.api.enums.ItemList; import gregtech.api.enums.Textures; import gregtech.api.graphs.GenerateNodeMap; @@ -24,17 +26,16 @@ import gregtech.api.graphs.GenerateNodeMapPower; import gregtech.api.graphs.Node; import gregtech.api.interfaces.ITexture; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IDebugableTileEntity; import gregtech.api.interfaces.tileentity.IEnergyConnected; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.IGregtechWailaProvider; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_BasicMachine; import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Hatch; -import gregtech.api.metatileentity.implementations.GT_MetaTileEntity_Transformer; import gregtech.api.net.GT_Packet_TileEntity; import gregtech.api.objects.GT_ItemStack; import gregtech.api.util.*; import gregtech.common.GT_Pollution; -import gregtech.crossmod.GregtechWailaDataProvider; import ic2.api.Direction; import mcp.mobius.waila.api.IWailaConfigHandler; import mcp.mobius.waila.api.IWailaDataAccessor; @@ -47,7 +48,6 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.init.Items; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.network.Packet; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.AxisAlignedBB; @@ -63,6 +63,7 @@ import javax.annotation.Nullable; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.UUID; @@ -79,7 +80,7 @@ import static gregtech.api.objects.XSTR.XSTR_INSTANCE; @Optional.InterfaceList(value = { @Optional.Interface(iface = "appeng.api.networking.security.IActionHost", modid = "appliedenergistics2", striprefs = true), @Optional.Interface(iface = "appeng.me.helpers.IGridProxyable", modid = "appliedenergistics2", striprefs = true)}) -public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements IGregTechTileEntity, IActionHost, IGridProxyable, IAlignmentProvider, IConstructableProvider, IGregtechWailaProvider { +public class BaseMetaTileEntity extends CommonMetaTileEntity implements IGregTechTileEntity, IActionHost, IGridProxyable, IAlignmentProvider, IConstructableProvider, IDebugableTileEntity, IGregtechWailaProvider { protected MetaTileEntity mMetaTileEntity; protected long mStoredEnergy = 0, mStoredSteam = 0; protected int mAverageEUInputIndex = 0, mAverageEUOutputIndex = 0; @@ -87,12 +88,11 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I protected long[] mAverageEUInput = new long[]{0, 0, 0, 0, 0}, mAverageEUOutput = new long[]{0, 0, 0, 0, 0}; private final boolean[] mActiveEUInputs = new boolean[]{false, false, false, false, false, false}; private final boolean[] mActiveEUOutputs = new boolean[]{false, false, false, false, false, false}; - private byte[] mSidedRedstone = new byte[]{15, 15, 15, 15, 15, 15}; private final int[] mTimeStatistics = new int[GregTech_API.TICKS_FOR_LAG_AVERAGING]; private boolean mHasEnoughEnergy = true, mRunningThroughTick = false, mInputDisabled = false, mOutputDisabled = false, mMuffler = false, mLockUpgrade = false; - private boolean mActive = false, mRedstone = false, mWorkUpdate = false, mSteamConverter = false, mInventoryChanged = false, mWorks = true, mNeedsUpdate = true; - private boolean mNeedsBlockUpdate = true, mSendClientData = false, oRedstone = false; - private byte mColor = 0, oColor = 0, oStrongRedstone = 0, mStrongRedstone = 0, oRedstoneData = 63, oTextureData = 0, oUpdateData = 0, oTexturePage=0; + private boolean mActive = false, mWorkUpdate = false, mSteamConverter = false, mWorks = true; + private boolean oRedstone = false; + private byte mColor = 0, oColor = 0, oStrongRedstone = 0, oRedstoneData = 63, oTextureData = 0, oUpdateData = 0, oTexturePage=0; private byte oLightValueClient = -1, oLightValue = -1, mLightValue = 0, mOtherUpgrades = 0, mFacing = 0, oFacing = 0, mWorkData = 0; private int mDisplayErrorCode = 0, oX = 0, oY = 0, oZ = 0, mTimeStatisticsIndex = 0, mLagWarningCount = 0; private long oOutput = 0, mAcceptedAmperes = Long.MAX_VALUE; @@ -105,25 +105,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I public boolean mWasShutdown = false; - private static final Field ENTITY_ITEM_HEALTH_FIELD; - static - { - Field f = null; - - try { - f = EntityItem.class.getDeclaredField("field_70291_e"); - f.setAccessible(true); - } catch (Exception e1) { - try { - f = EntityItem.class.getDeclaredField("health"); - f.setAccessible(true); - } catch (Exception e2) { - e1.printStackTrace(); - e2.printStackTrace(); - } - } - ENTITY_ITEM_HEALTH_FIELD = f; - } + private static final Field ENTITY_ITEM_HEALTH_FIELD = ReflectionHelper.findField(EntityItem.class, "health", "field_70291_e"); public BaseMetaTileEntity() { } @@ -133,20 +115,17 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I try { super.writeToNBT(aNBT); } catch (Throwable e) { - GT_Log.err.println("Encountered CRITICAL ERROR while saving MetaTileEntity."); - e.printStackTrace(GT_Log.err); + GT_FML_LOGGER.error("Encountered CRITICAL ERROR while saving MetaTileEntity.", e); } try { aNBT.setInteger("mID", mID); aNBT.setLong("mStoredSteam", mStoredSteam); aNBT.setLong("mStoredEnergy", mStoredEnergy); - saveCoverNBT(aNBT); - aNBT.setByteArray("mRedstoneSided", mSidedRedstone); + writeCoverNBT(aNBT, false); aNBT.setByte("mColor", mColor); aNBT.setByte("mLightValue", mLightValue); aNBT.setByte("mOtherUpgrades", mOtherUpgrades); aNBT.setByte("mWorkData", mWorkData); - aNBT.setByte("mStrongRedstone", mStrongRedstone); aNBT.setShort("mFacing", mFacing); aNBT.setString("mOwnerName", mOwnerName); aNBT.setString("mOwnerUuid", mOwnerUuid == null ? "" : mOwnerUuid.toString()); @@ -154,15 +133,13 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I aNBT.setBoolean("mMuffler", mMuffler); aNBT.setBoolean("mSteamConverter", mSteamConverter); aNBT.setBoolean("mActive", mActive); - aNBT.setBoolean("mRedstone", mRedstone); aNBT.setBoolean("mWorks", !mWorks); aNBT.setBoolean("mInputDisabled", mInputDisabled); aNBT.setBoolean("mOutputDisabled", mOutputDisabled); aNBT.setTag("GT.CraftingComponents", mRecipeStuff); aNBT.setInteger("nbtVersion", GT_Mod.TOTAL_VERSION); } catch (Throwable e) { - GT_Log.err.println("Encountered CRITICAL ERROR while saving MetaTileEntity."); - e.printStackTrace(GT_Log.err); + GT_FML_LOGGER.error("Encountered CRITICAL ERROR while saving MetaTileEntity.", e); } saveMetaTileNBT(aNBT); } @@ -188,7 +165,6 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I mColor = aNBT.getByte("mColor"); mLightValue = aNBT.getByte("mLightValue"); mWorkData = aNBT.getByte("mWorkData"); - mStrongRedstone = aNBT.getByte("mStrongRedstone"); mFacing = oFacing = (byte) aNBT.getShort("mFacing"); mOwnerName = aNBT.getString("mOwnerName"); try { @@ -200,23 +176,14 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I mMuffler = aNBT.getBoolean("mMuffler"); mSteamConverter = aNBT.getBoolean("mSteamConverter"); mActive = aNBT.getBoolean("mActive"); - mRedstone = aNBT.getBoolean("mRedstone"); mWorks = !aNBT.getBoolean("mWorks"); mInputDisabled = aNBT.getBoolean("mInputDisabled"); mOutputDisabled = aNBT.getBoolean("mOutputDisabled"); mOtherUpgrades = (byte) (aNBT.getByte("mOtherUpgrades") + aNBT.getByte("mBatteries") + aNBT.getByte("mLiBatteries")); - mSidedRedstone = aNBT.getByteArray("mRedstoneSided"); - mRecipeStuff = aNBT.getCompoundTag("GT.CraftingComponents"); - int nbtVersion = aNBT.getInteger("nbtVersion"); - - if (mSidedRedstone.length != 6) { - if (hasValidMetaTileEntity() && mMetaTileEntity.hasSidedRedstoneOutputBehavior()) { - mSidedRedstone = new byte[]{0, 0, 0, 0, 0, 0}; - } - else mSidedRedstone = new byte[]{15, 15, 15, 15, 15, 15}; - } - loadCoverNBT(aNBT); + mRecipeStuff = aNBT.getCompoundTag("GT.CraftingComponents"); + final int nbtVersion = aNBT.getInteger("nbtVersion"); + readCoverNBT(aNBT); loadMetaTileNBT(aNBT); } @@ -263,8 +230,8 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I mRunningThroughTick = true; long tTime = System.nanoTime(); - boolean aSideServer = isServerSide(); - boolean aSideClient = isClientSide(); + final boolean aSideServer = isServerSide(); + final boolean aSideClient = isClientSide(); try { if (hasValidMetaTileEntity()) { @@ -373,17 +340,17 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I if (mMetaTileEntity.isEnetOutput() && oOutput > 0) { - long tOutputVoltage = Math.max(oOutput, oOutput + (1L << Math.max(0, GT_Utility.getTier(oOutput) - 1))), - tUsableAmperage = Math.min(getOutputAmperage(), (getStoredEU() - mMetaTileEntity.getMinimumStoredEU()) / tOutputVoltage); + final long tOutputVoltage = Math.max(oOutput, oOutput + (1L << Math.max(0, GT_Utility.getTier(oOutput) - 1))); + final long tUsableAmperage = Math.min(getOutputAmperage(), (getStoredEU() - mMetaTileEntity.getMinimumStoredEU()) / tOutputVoltage); if (tUsableAmperage > 0) { - long tEU = tOutputVoltage * Util.emitEnergyToNetwork(oOutput, tUsableAmperage, this); + final long tEU = tOutputVoltage * Util.emitEnergyToNetwork(oOutput, tUsableAmperage, this); mAverageEUOutput[mAverageEUOutputIndex] += tEU; decreaseStoredEU(tEU, true); } } if (getEUCapacity() > 0) { if (GregTech_API.sMachineFireExplosions && getRandomNumber(1000) == 0) { - Block tBlock = getBlockAtSide((byte) getRandomNumber(6)); + final Block tBlock = getBlockAtSide((byte) getRandomNumber(6)); if (tBlock instanceof BlockFire) doEnergyExplosion(); } @@ -393,10 +360,10 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I } if (getRandomNumber(1000) == 0) { - int precipitationHeightAtSide2 = worldObj.getPrecipitationHeight(xCoord, zCoord - 1); - int precipitationHeightAtSide3 = worldObj.getPrecipitationHeight(xCoord, zCoord + 1); - int precipitationHeightAtSide4 = worldObj.getPrecipitationHeight(xCoord - 1, zCoord); - int precipitationHeightAtSide5 = worldObj.getPrecipitationHeight(xCoord + 1, zCoord); + final int precipitationHeightAtSide2 = worldObj.getPrecipitationHeight(xCoord, zCoord - 1); + final int precipitationHeightAtSide3 = worldObj.getPrecipitationHeight(xCoord, zCoord + 1); + final int precipitationHeightAtSide4 = worldObj.getPrecipitationHeight(xCoord - 1, zCoord); + final int precipitationHeightAtSide5 = worldObj.getPrecipitationHeight(xCoord + 1, zCoord); if ((getCoverIDAtSide((byte) 1) == 0 && worldObj.getPrecipitationHeight(xCoord, zCoord) - 2 < yCoord) || (getCoverIDAtSide((byte) 2) == 0 && precipitationHeightAtSide2 - 1 < yCoord && precipitationHeightAtSide2 > -1) @@ -406,7 +373,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I if (GregTech_API.sMachineRainExplosions && worldObj.isRaining() && getBiome().rainfall > 0) { if (getRandomNumber(10) == 0) { try { - GT_Mod.instance.achievements.issueAchievement(this.getWorldObj().getPlayerEntityByName(mOwnerName), "badweather"); + GT_Mod.achievements.issueAchievement(this.getWorldObj().getPlayerEntityByName(mOwnerName), "badweather"); } catch (Exception ignored) {} GT_Log.exp.println("Machine at: " + this.getXCoord() + " | " + this.getYCoord() + " | " + this.getZCoord() + " DIMID: " + this.worldObj.provider.dimensionId + " explosion due to rain!"); doEnergyExplosion(); @@ -422,7 +389,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I if (GregTech_API.sMachineThunderExplosions && worldObj.isThundering() && getBiome().rainfall > 0 && getRandomNumber( 3) == 0) { try { - GT_Mod.instance.achievements.issueAchievement(this.getWorldObj().getPlayerEntityByName(mOwnerName), "badweather"); + GT_Mod.achievements.issueAchievement(this.getWorldObj().getPlayerEntityByName(mOwnerName), "badweather"); } catch (Exception ignored) {} GT_Log.exp.println("Machine at: " + this.getXCoord() + " | " + this.getYCoord() + " | " + this.getZCoord() + " DIMID: " + this.worldObj.provider.dimensionId + " explosion due to Thunderstorm!"); doEnergyExplosion(); @@ -492,20 +459,20 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I if (mTickTimer > 10) { byte tData = (byte) ((mFacing & 7) | (mActive ? 8 : 0) | (mRedstone ? 16 : 0) | (mLockUpgrade ? 32 : 0) | (mWorks ? 64 : 0)); if (tData != oTextureData) - sendBlockEvent(MetaTileClientEvents.CHANGE_COMMON_DATA, oTextureData = tData); + sendBlockEvent(GregTechTileClientEvents.CHANGE_COMMON_DATA, oTextureData = tData); tData = mMetaTileEntity.getUpdateData(); if (tData != oUpdateData) - sendBlockEvent(MetaTileClientEvents.CHANGE_CUSTOM_DATA, oUpdateData = tData); + sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, oUpdateData = tData); if (mMetaTileEntity instanceof GT_MetaTileEntity_Hatch) { tData = ((GT_MetaTileEntity_Hatch) mMetaTileEntity).getTexturePage(); if (tData != oTexturePage) - sendBlockEvent(MetaTileClientEvents.CHANGE_CUSTOM_DATA, (byte) ((oTexturePage = tData) | 0x80));//set last bit as a flag for page + sendBlockEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, (byte) ((oTexturePage = tData) | 0x80));//set last bit as a flag for page } - if (mColor != oColor) sendBlockEvent(MetaTileClientEvents.CHANGE_COLOR, oColor = mColor); + if (mColor != oColor) sendBlockEvent(GregTechTileClientEvents.CHANGE_COLOR, oColor = mColor); tData = (byte) (((mSidedRedstone[0] > 0) ? 1 : 0) | ((mSidedRedstone[1] > 0) ? 2 : 0) | ((mSidedRedstone[2] > 0) ? 4 : 0) | ((mSidedRedstone[3] > 0) ? 8 : 0) | ((mSidedRedstone[4] > 0) ? 16 : 0) | ((mSidedRedstone[5] > 0) ? 32 : 0)); if (tData != oRedstoneData) - sendBlockEvent(MetaTileClientEvents.CHANGE_REDSTONE_OUTPUT, oRedstoneData = tData); + sendBlockEvent(GregTechTileClientEvents.CHANGE_REDSTONE_OUTPUT, oRedstoneData = tData); if (mLightValue != oLightValue) { worldObj.setLightValue(EnumSkyBlock.Block, xCoord, yCoord, zCoord, mLightValue); worldObj.updateLightByType(EnumSkyBlock.Block, xCoord, yCoord, zCoord); @@ -516,7 +483,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I worldObj.updateLightByType(EnumSkyBlock.Block, xCoord, yCoord, zCoord + 1); worldObj.updateLightByType(EnumSkyBlock.Block, xCoord, yCoord, zCoord - 1); issueTextureUpdate(); - sendBlockEvent(MetaTileClientEvents.CHANGE_LIGHT, oLightValue = mLightValue); + sendBlockEvent(GregTechTileClientEvents.CHANGE_LIGHT, oLightValue = mLightValue); } } @@ -535,7 +502,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I tTime = System.nanoTime() - tTime; if (mTimeStatistics.length > 0) mTimeStatistics[mTimeStatisticsIndex = (mTimeStatisticsIndex + 1) % mTimeStatistics.length] = (int) tTime; - if (tTime > 0 && tTime > (GregTech_API.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING*1000000) && mTickTimer > 1000 && getMetaTileEntity().doTickProfilingMessageDuringThisTick() && mLagWarningCount++ < 10) + if (tTime > 0 && tTime > (GregTech_API.MILLISECOND_THRESHOLD_UNTIL_LAG_WARNING* 1000000L) && mTickTimer > 1000 && getMetaTileEntity().doTickProfilingMessageDuringThisTick() && mLagWarningCount++ < 10) GT_FML_LOGGER.warn("WARNING: Possible Lag Source at [" + xCoord + ", " + yCoord + ", " + zCoord + "] in Dimension " + worldObj.provider.dimensionId + " with " + tTime + "ns caused by an instance of " + getMetaTileEntity().getClass()); } @@ -576,12 +543,6 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I sendCoverDataIfNeeded(); } - @Override - public Packet getDescriptionPacket() { - issueClientUpdate(); - return null; - } - public final void receiveMetaTileEntityData(short aID, int aCover0, int aCover1, int aCover2, int aCover3, int aCover4, int aCover5, byte aTextureData, byte aTexturePage, byte aUpdateData, byte aRedstoneData, byte aColorData) { issueTextureUpdate(); if (mID != aID && aID > 0) { @@ -596,11 +557,11 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I setCoverIDAtSide((byte) 4, aCover4); setCoverIDAtSide((byte) 5, aCover5); - receiveClientEvent(MetaTileClientEvents.CHANGE_COMMON_DATA, aTextureData); - receiveClientEvent(MetaTileClientEvents.CHANGE_CUSTOM_DATA, aUpdateData & 0x7F); - receiveClientEvent(MetaTileClientEvents.CHANGE_CUSTOM_DATA, aTexturePage | 0x80); - receiveClientEvent(MetaTileClientEvents.CHANGE_COLOR, aColorData); - receiveClientEvent(MetaTileClientEvents.CHANGE_REDSTONE_OUTPUT, aRedstoneData); + receiveClientEvent(GregTechTileClientEvents.CHANGE_COMMON_DATA, aTextureData); + receiveClientEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, aUpdateData & 0x7F); + receiveClientEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, aTexturePage | 0x80); + receiveClientEvent(GregTechTileClientEvents.CHANGE_COLOR, aColorData); + receiveClientEvent(GregTechTileClientEvents.CHANGE_REDSTONE_OUTPUT, aRedstoneData); } @Deprecated @@ -625,14 +586,14 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I if (isClientSide()) { issueTextureUpdate(); switch (aEventID) { - case MetaTileClientEvents.CHANGE_COMMON_DATA: + case GregTechTileClientEvents.CHANGE_COMMON_DATA: mFacing = (byte) (aValue & 7); mActive = ((aValue & 8) != 0); mRedstone = ((aValue & 16) != 0); //mLockUpgrade = ((aValue&32) != 0); mWorks = ((aValue & 64) != 0); break; - case MetaTileClientEvents.CHANGE_CUSTOM_DATA: + case GregTechTileClientEvents.CHANGE_CUSTOM_DATA: if (hasValidMetaTileEntity()) { if ((aValue & 0x80) == 0) //Is texture index mMetaTileEntity.onValueUpdate((byte) (aValue & 0x7F)); @@ -640,11 +601,11 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I ((GT_MetaTileEntity_Hatch) mMetaTileEntity).onTexturePageUpdate((byte) (aValue & 0x7F)); } break; - case MetaTileClientEvents.CHANGE_COLOR: + case GregTechTileClientEvents.CHANGE_COLOR: if (aValue > 16 || aValue < 0) aValue = 0; mColor = (byte) aValue; break; - case MetaTileClientEvents.CHANGE_REDSTONE_OUTPUT: + case GregTechTileClientEvents.CHANGE_REDSTONE_OUTPUT: mSidedRedstone[0] = (byte) ((aValue & 1) == 1 ? 15 : 0); mSidedRedstone[1] = (byte) ((aValue & 2) == 2 ? 15 : 0); mSidedRedstone[2] = (byte) ((aValue & 4) == 4 ? 15 : 0); @@ -652,19 +613,19 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I mSidedRedstone[4] = (byte) ((aValue & 16) == 16 ? 15 : 0); mSidedRedstone[5] = (byte) ((aValue & 32) == 32 ? 15 : 0); break; - case MetaTileClientEvents.DO_SOUND: + case GregTechTileClientEvents.DO_SOUND: if (hasValidMetaTileEntity() && mTickTimer > 20) mMetaTileEntity.doSound((byte) aValue, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); break; - case MetaTileClientEvents.START_SOUND_LOOP: + case GregTechTileClientEvents.START_SOUND_LOOP: if (hasValidMetaTileEntity() && mTickTimer > 20) mMetaTileEntity.startSoundLoop((byte) aValue, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); break; - case MetaTileClientEvents.STOP_SOUND_LOOP: + case GregTechTileClientEvents.STOP_SOUND_LOOP: if (hasValidMetaTileEntity() && mTickTimer > 20) mMetaTileEntity.stopSoundLoop((byte) aValue, xCoord + 0.5, yCoord + 0.5, zCoord + 0.5); break; - case MetaTileClientEvents.CHANGE_LIGHT: + case GregTechTileClientEvents.CHANGE_LIGHT: mLightValue = (byte) aValue; break; } @@ -672,8 +633,9 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I return true; } + @Override public ArrayList getDebugInfo(EntityPlayer aPlayer, int aLogLevel) { - ArrayList tList = new ArrayList(); + final ArrayList tList = new ArrayList<>(); if (aLogLevel > 2) { tList.add("Meta-ID: " +EnumChatFormatting.BLUE+ mID +EnumChatFormatting.RESET + (canAccessData() ? EnumChatFormatting.GREEN+" valid"+EnumChatFormatting.RESET : EnumChatFormatting.RED+" invalid"+EnumChatFormatting.RESET) + (mMetaTileEntity == null ? EnumChatFormatting.RED+" MetaTileEntity == null!"+EnumChatFormatting.RESET : " ")); } @@ -711,54 +673,12 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I return mMetaTileEntity.getSpecialDebugInfo(this, aPlayer, aLogLevel, tList); } - @Override - public void issueTextureUpdate() { - mNeedsUpdate = true; - } - - @Override - public void issueBlockUpdate() { - mNeedsBlockUpdate = true; - } - - @Override - public void issueClientUpdate() { - mSendClientData = true; - } - - @Override - public void issueCoverUpdate(byte aSide) { - super.issueCoverUpdate(aSide); - issueClientUpdate(); - } - - @Override - public byte getStrongestRedstone() { - return (byte) Math.max(getInternalInputRedstoneSignal((byte) 0), Math.max(getInternalInputRedstoneSignal((byte) 1), Math.max(getInternalInputRedstoneSignal((byte) 2), Math.max(getInternalInputRedstoneSignal((byte) 3), Math.max(getInternalInputRedstoneSignal((byte) 4), getInternalInputRedstoneSignal((byte) 5)))))); - } - - @Override - public boolean getRedstone() { - return getRedstone((byte) 0) || getRedstone((byte) 1) || getRedstone((byte) 2) || getRedstone((byte) 3) || getRedstone((byte) 4) || getRedstone((byte) 5); - } - - @Override - public boolean getRedstone(byte aSide) { - return getInternalInputRedstoneSignal(aSide) > 0; - } - @Override public boolean isGivingInformation() { if (canAccessData()) return mMetaTileEntity.isGivingInformation(); return false; } - @Override - public boolean isValidFacing(byte aSide) { - if (canAccessData()) return mMetaTileEntity.isFacingValid(aSide); - return false; - } - @Override public byte getBackFacing() { return GT_Utility.getOppositeSide(mFacing); @@ -834,7 +754,9 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I @Override public boolean isUseableByPlayer(EntityPlayer aPlayer) { - return canAccessData() && playerOwnsThis(aPlayer, false) && mTickTimer > 40 && getTileEntityOffset(0, 0, 0) == this && aPlayer.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64 && mMetaTileEntity.isAccessAllowed(aPlayer); + return canAccessData() && playerOwnsThis(aPlayer, false) && mTickTimer > 40 && + getTileEntityOffset(0, 0, 0) == this && + aPlayer.getDistanceSq(xCoord + 0.5, yCoord + 0.5, zCoord + 0.5) < 64 && mMetaTileEntity.isAccessAllowed(aPlayer); } @Override @@ -870,7 +792,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I @Override public ItemStack getStackInSlotOnClosing(int slot) { - ItemStack stack = getStackInSlot(slot); + final ItemStack stack = getStackInSlot(slot); if (stack != null) setInventorySlotContents(slot, null); return stack; } @@ -904,7 +826,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I @Override public boolean increaseProgress(int aProgressAmountInTicks) { - return canAccessData() ? mMetaTileEntity.increaseProgress(aProgressAmountInTicks) != aProgressAmountInTicks : false; + return canAccessData() && mMetaTileEntity.increaseProgress(aProgressAmountInTicks) != aProgressAmountInTicks; } @Override @@ -1009,14 +931,24 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I return isEnergyOutputSide(aSide); } + @Override + public boolean isEnetOutput() { + return mMetaTileEntity != null && mMetaTileEntity.isEnetOutput(); + } + + @Override + public boolean isEnetInput() { + return mMetaTileEntity != null && mMetaTileEntity.isEnetInput(); + } + public void generatePowerNodes() { - if (isServerSide() && mMetaTileEntity != null && (mMetaTileEntity.isEnetInput() || mMetaTileEntity.isEnetOutput())) { - int time = MinecraftServer.getServer().getTickCounter(); + if (isServerSide() && (isEnetInput() || isEnetOutput())) { + final int time = MinecraftServer.getServer().getTickCounter(); for (byte i = 0;i<6;i++) { if (outputsEnergyTo(i,false) || inputEnergyFrom(i,false)) { - IGregTechTileEntity TE = getIGregTechTileEntityAtSide(i); + final IGregTechTileEntity TE = getIGregTechTileEntityAtSide(i); if (TE instanceof BaseMetaPipeEntity) { - Node node = ((BaseMetaPipeEntity) TE).getNode(); + final Node node = ((BaseMetaPipeEntity) TE).getNode(); if (node == null) { new GenerateNodeMapPower((BaseMetaPipeEntity) TE); } else if (node.mCreationTime != time) { @@ -1064,18 +996,6 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I return false; } - @Override - public String[] getDescription() { - if (canAccessData()) return mMetaTileEntity.getDescription(); - return new String[0]; - } - - @Override - public boolean isValidSlot(int aIndex) { - if (canAccessData()) return mMetaTileEntity.isValidSlot(aIndex); - return false; - } - @Override public long getUniversalEnergyStored() { return Math.max(getStoredEU(), getStoredSteam()); @@ -1112,11 +1032,11 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I @Override public ITexture[] getTexture(Block aBlock, byte aSide) { - ITexture coverTexture = getCoverTexture(aSide); - ITexture[] textureUncovered = hasValidMetaTileEntity() ? - mMetaTileEntity.getTexture(this, aSide, mFacing, (byte) (mColor - 1), mActive, getOutputRedstoneSignal(aSide) > 0) : - Textures.BlockIcons.ERROR_RENDERING; - ITexture[] textureCovered; + final ITexture coverTexture = getCoverTexture(aSide); + final ITexture[] textureUncovered = hasValidMetaTileEntity() ? + mMetaTileEntity.getTexture(this, aSide, mFacing, (byte) (mColor - 1), mActive, getOutputRedstoneSignal(aSide) > 0) : + Textures.BlockIcons.ERROR_RENDERING; + final ITexture[] textureCovered; if (coverTexture != null) { textureCovered = Arrays.copyOf(textureUncovered, textureUncovered.length + 1); textureCovered[textureUncovered.length] = coverTexture; @@ -1153,6 +1073,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I return mMetaTileEntity != null && mMetaTileEntity.getBaseMetaTileEntity() == this; } + @Override protected boolean canAccessData() { return !isDead && hasValidMetaTileEntity(); } @@ -1232,14 +1153,14 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I try { mReleaseEnergy = true; IEnergyConnected.Util.emitEnergyToNetwork(V[5], Math.max(1, getStoredEU() / V[5]), this); - } catch (Exception e) {/* Fun Fact: all these "do nothing" Comments you see in my Code, are just there to let Eclipse shut up about the intended empty Brackets, but I need eclipse to yell at me in some of the regular Cases where I forget to add Code */} + } catch (Exception ignored) {} } mReleaseEnergy = false; // Normal Explosion Code mMetaTileEntity.onExplosion(); if(GT_Mod.gregtechproxy.mExplosionItemDrop){ for (int i = 0; i < this.getSizeInventory(); i++) { - ItemStack tItem = this.getStackInSlot(i); + final ItemStack tItem = this.getStackInSlot(i); if ((tItem != null) && (tItem.stackSize > 0) && (this.isValidSlot(i))) { dropItems(tItem); this.setInventorySlotContents(i, null); } @@ -1260,7 +1181,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I public void dropItems(ItemStack tItem){ if(tItem==null)return; - EntityItem tItemEntity = new EntityItem(this.worldObj, this.xCoord + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, this.yCoord + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, this.zCoord + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, new ItemStack(tItem.getItem(), tItem.stackSize, tItem.getItemDamage())); + final EntityItem tItemEntity = new EntityItem(this.worldObj, this.xCoord + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, this.yCoord + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, this.zCoord + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, new ItemStack(tItem.getItem(), tItem.stackSize, tItem.getItemDamage())); if (tItem.hasTagCompound()) { tItemEntity.getEntityItem().setTagCompound((NBTTagCompound) tItem.getTagCompound().copy()); } @@ -1279,28 +1200,20 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I @Override public ArrayList getDrops() { - ItemStack rStack = new ItemStack(GregTech_API.sBlockMachines, 1, mID); - NBTTagCompound tNBT = new NBTTagCompound(); + final ItemStack rStack = new ItemStack(GregTech_API.sBlockMachines, 1, mID); + final NBTTagCompound tNBT = new NBTTagCompound(); if (mRecipeStuff != null && !mRecipeStuff.hasNoTags()) tNBT.setTag("GT.CraftingComponents", mRecipeStuff); if (mMuffler) tNBT.setBoolean("mMuffler", mMuffler); if (mLockUpgrade) tNBT.setBoolean("mLockUpgrade", mLockUpgrade); if (mSteamConverter) tNBT.setBoolean("mSteamConverter", mSteamConverter); if (mColor > 0) tNBT.setByte("mColor", mColor); if (mOtherUpgrades > 0) tNBT.setByte("mOtherUpgrades", mOtherUpgrades); - if (mStrongRedstone > 0) tNBT.setByte("mStrongRedstone", mStrongRedstone); - boolean hasCover = false; - for (byte i = 0; i < mCoverSides.length; i++) { - if (mCoverSides[i] != 0) { - if (mCoverData[i] != null) // this really shouldn't be null if a cover is there already, but whatever - tNBT.setTag(COVER_DATA_NBT_KEYS[i], mCoverData[i].saveDataToNBT()); - hasCover = true; - } - } - if (hasCover) - tNBT.setIntArray("mCoverSides", mCoverSides); + + writeCoverNBT(tNBT, true); + if (hasValidMetaTileEntity()) mMetaTileEntity.setItemNBT(tNBT); if (!tNBT.hasNoTags()) rStack.setTagCompound(tNBT); - return new ArrayList(Arrays.asList(rStack)); + return new ArrayList<>(Collections.singletonList(rStack)); } public int getUpgradeCount() { @@ -1312,7 +1225,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I if (isClientSide()) { //Configure Cover, sneak can also be: screwdriver, wrench, side cutter, soldering iron if (aPlayer.isSneaking()) { - byte tSide = (getCoverIDAtSide(aSide) == 0) ? GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ) : aSide; + final byte tSide = (getCoverIDAtSide(aSide) == 0) ? GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ) : aSide; return (getCoverBehaviorAtSideNew(tSide).hasCoverGUI()); } else if (getCoverBehaviorAtSideNew(aSide).onCoverRightclickClient(aSide, this, aPlayer, aX, aY, aZ)) { return true; @@ -1323,7 +1236,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I } if (isServerSide()) { if (!privateAccess() || aPlayer.getDisplayName().equalsIgnoreCase(getOwnerName())) { - ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); + final ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); if (tCurrentItem != null) { if (getColorization() >= 0 && GT_Utility.areStacksEqual(new ItemStack(Items.water_bucket, 1), tCurrentItem)) { tCurrentItem.func_150996_a(Items.bucket); @@ -1378,7 +1291,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I } if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sSolderingToolList)) { - byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); + final byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); if (mMetaTileEntity.onSolderingToolRightClick(aSide, tSide, aPlayer, aX, aY, aZ)) { //logic handled internally GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(103), 1.0F, -1, xCoord, yCoord, zCoord); @@ -1394,7 +1307,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I } if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWireCutterList)) { - byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); + final byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ); if (mMetaTileEntity.onWireCutterRightClick(aSide, tSide, aPlayer, aX, aY, aZ)) { //logic handled internally GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(100), 1.0F, -1, xCoord, yCoord, zCoord); @@ -1520,7 +1433,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I public int[] getAccessibleSlotsFromSide(int aSide) { if (canAccessData() && (getCoverBehaviorAtSideNew((byte) aSide).letsItemsOut((byte) aSide, getCoverIDAtSide((byte) aSide), getComplexCoverDataAtSide((byte) aSide), -1, this) || getCoverBehaviorAtSideNew((byte) aSide).letsItemsIn((byte) aSide, getCoverIDAtSide((byte) aSide), getComplexCoverDataAtSide((byte) aSide), -1, this))) return mMetaTileEntity.getAccessibleSlotsFromSide(aSide); - return new int[0]; + return GT_Values.emptyIntArray; } /** @@ -1545,39 +1458,11 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I } @Override - public byte getInternalInputRedstoneSignal(byte aSide) { - return (byte) (getCoverBehaviorAtSideNew(aSide).getRedstoneInput(aSide, getInputRedstoneSignal(aSide), getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this) & 15); - } - - @Override - public byte getInputRedstoneSignal(byte aSide) { - return (byte) (worldObj.getIndirectPowerLevelTo(getOffsetX(aSide, 1), getOffsetY(aSide, 1), getOffsetZ(aSide, 1), aSide) & 15); - } - - @Override - public byte getOutputRedstoneSignal(byte aSide) { - return getCoverBehaviorAtSideNew(aSide).manipulatesSidedRedstoneOutput(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this) ? mSidedRedstone[aSide] : getGeneralRS(aSide); - } - public byte getGeneralRS(byte aSide){ - if(mMetaTileEntity==null)return 0; + if(mMetaTileEntity==null) return 0; return mMetaTileEntity.allowGeneralRedstoneOutput() ? mSidedRedstone[aSide] : 0; } - @Override - public void setInternalOutputRedstoneSignal(byte aSide, byte aStrength) { - if (!getCoverBehaviorAtSideNew(aSide).manipulatesSidedRedstoneOutput(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this)) - setOutputRedstoneSignal(aSide, aStrength); - } - - @Override - public void setOutputRedstoneSignal(byte aSide, byte aStrength) { - aStrength = (byte) Math.min(Math.max(0, aStrength), 15); - if (aSide >= 0 && aSide < 6 && mSidedRedstone[aSide] != aStrength) { - mSidedRedstone[aSide] = aStrength; - issueBlockUpdate(); - } - } @Override public boolean isSteamEngineUpgradable() { @@ -1616,21 +1501,11 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I return false; } - @Override - public boolean hasInventoryBeenModified() { - return mInventoryChanged; - } - @Override public void markInventoryBeenModified() { mInventoryChanged = true; } - @Override - public void setGenericRedstoneOutput(boolean aOnOff) { - mRedstone = aOnOff; - } - @Override public int getErrorDisplayID() { return mDisplayErrorCode; @@ -1715,16 +1590,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I return canAccessData() ? mMetaTileEntity.getComparatorValue(aSide) : 0; } - @Override - public byte getStrongOutputRedstoneSignal(byte aSide) { - return aSide >= 0 && aSide < 6 && (mStrongRedstone & (1 << aSide)) != 0 ? (byte) (mSidedRedstone[aSide] & 15) : 0; - } - @Override - public void setStrongOutputRedstoneSignal(byte aSide, byte aStrength) { - mStrongRedstone |= (1 << aSide); - setOutputRedstoneSignal(aSide, aStrength); - } @Override public ItemStack decrStackSize(int aIndex, int aAmount) { @@ -1857,13 +1723,14 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I @Override public FluidTankInfo[] getTankInfo(ForgeDirection aSide) { + final byte tSide = (byte) aSide.ordinal(); + if (canAccessData() && ( aSide == ForgeDirection.UNKNOWN || ( - mMetaTileEntity.isLiquidInput((byte) aSide.ordinal()) && - getCoverBehaviorAtSideNew((byte) aSide.ordinal()).letsFluidIn((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getComplexCoverDataAtSide((byte) aSide.ordinal()), null, this)) || (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) && - getCoverBehaviorAtSideNew((byte) aSide.ordinal()).letsFluidOut((byte) aSide.ordinal(), getCoverIDAtSide((byte) aSide.ordinal()), getComplexCoverDataAtSide((byte) aSide.ordinal()), null, this) + mMetaTileEntity.isLiquidInput(tSide) && getCoverBehaviorAtSideNew(tSide).letsFluidIn(tSide, getCoverIDAtSide(tSide), getComplexCoverDataAtSide(tSide), null, this)) || + (mMetaTileEntity.isLiquidOutput(tSide) && getCoverBehaviorAtSideNew(tSide).letsFluidOut(tSide, getCoverIDAtSide(tSide), getComplexCoverDataAtSide(tSide), null, this) ) ) ) @@ -1968,16 +1835,11 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I return outputsEnergyTo((byte) aDirection.toSideValue()); } - @Override - public boolean isInvalidTileEntity() { - return isInvalid(); - } - @Override public boolean addStackToSlot(int aIndex, ItemStack aStack) { if (GT_Utility.isStackInvalid(aStack)) return true; if (aIndex < 0 || aIndex >= getSizeInventory()) return false; - ItemStack tStack = getStackInSlot(aIndex); + final ItemStack tStack = getStackInSlot(aIndex); if (GT_Utility.isStackInvalid(tStack)) { setInventorySlotContents(aIndex, aStack); return true; @@ -2029,12 +1891,6 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I } } - @Override - public void markDirty() { - super.markDirty(); - mInventoryChanged = true; - } - @Override public int getLightOpacity() { return mMetaTileEntity == null ? getLightValue() > 0 ? 0 : 255 : mMetaTileEntity.getLightOpacity(); @@ -2064,9 +1920,12 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I * @return The corrected Inventory index */ private int migrateInventoryIndex(int slotIndex, int nbtVersion){ - int oldInputSize, newInputSize, oldOutputSize, newOutputSize; - int chemistryUpdateVersion = GT_Mod.calculateTotalGTVersion(509, 31); - int configCircuitAdditionVersion = GT_Mod.calculateTotalGTVersion(509, 40); + final int oldInputSize; + final int newInputSize; + final int oldOutputSize; + final int newOutputSize; + final int chemistryUpdateVersion = GT_Mod.calculateTotalGTVersion(509, 31); + final int configCircuitAdditionVersion = GT_Mod.calculateTotalGTVersion(509, 40); // 4 is old GT_MetaTileEntity_BasicMachine.OTHER_SLOT_COUNT if (nbtVersion < configCircuitAdditionVersion && getMetaTileEntity() instanceof GT_MetaTileEntity_BasicMachine && slotIndex >= 4) slotIndex += 1; @@ -2122,12 +1981,13 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I } return slotIndex + indexShift; } + @Override @Optional.Method(modid = "appliedenergistics2") public IGridNode getGridNode(ForgeDirection forgeDirection) { if (mFacing != forgeDirection.ordinal()) return null; - AENetworkProxy gp = getProxy(); + final AENetworkProxy gp = getProxy(); return gp != null ? gp.getNode() : null; } @@ -2144,7 +2004,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I @Override @Optional.Method(modid = "appliedenergistics2") public IGridNode getActionableNode() { - AENetworkProxy gp = getProxy(); + final AENetworkProxy gp = getProxy(); return gp != null ? gp.getNode() : null; } @@ -2169,7 +2029,7 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I @Optional.Method(modid = "appliedenergistics2") public void readFromNBT_AENetwork( final NBTTagCompound data ) { - AENetworkProxy gp = getProxy(); + final AENetworkProxy gp = getProxy(); if (gp != null) getProxy().readFromNBT( data ); } @@ -2178,21 +2038,21 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I @Optional.Method(modid = "appliedenergistics2") public void writeToNBT_AENetwork( final NBTTagCompound data ) { - AENetworkProxy gp = getProxy(); + final AENetworkProxy gp = getProxy(); if (gp != null) gp.writeToNBT( data ); } @Optional.Method(modid = "appliedenergistics2") void onChunkUnloadAE() { - AENetworkProxy gp = getProxy(); + final AENetworkProxy gp = getProxy(); if (gp != null) gp.onChunkUnload(); } @Optional.Method(modid = "appliedenergistics2") void invalidateAE() { - AENetworkProxy gp = getProxy(); + final AENetworkProxy gp = getProxy(); if (gp != null) gp.invalidate(); } diff --git a/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java index a23956f6e3..8e6206f612 100644 --- a/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/BaseTileEntity.java @@ -1,19 +1,23 @@ package gregtech.api.metatileentity; -import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGTEnet; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.interfaces.tileentity.IHasWorldObjectAndCoords; +import gregtech.api.interfaces.tileentity.IIC2Enet; import gregtech.api.net.GT_Packet_Block_Event; import gregtech.api.util.GT_LanguageManager; import gregtech.api.util.GT_Utility; import ic2.api.energy.event.EnergyTileLoadEvent; import ic2.api.energy.event.EnergyTileUnloadEvent; import net.minecraft.block.Block; +import net.minecraft.entity.Entity; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.inventory.IInventory; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.ChunkCoordinates; +import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraft.world.biome.BiomeGenBase; import net.minecraft.world.chunk.Chunk; @@ -21,17 +25,24 @@ import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.util.ForgeDirection; import net.minecraftforge.fluids.IFluidHandler; +import java.util.Arrays; import java.util.concurrent.ThreadLocalRandom; +import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES; +import static gregtech.api.enums.GT_Values.COMPASS_DIRECTIONS; import static gregtech.api.enums.GT_Values.GT; import static gregtech.api.enums.GT_Values.NW; +import static gregtech.api.enums.GT_Values.SIDE_DOWN; +import static gregtech.api.enums.GT_Values.SIDE_UP; /** * The Functions my old TileEntities and my BaseMetaTileEntities have in common. *

* Basically everything a TileEntity should have. */ -public abstract class BaseTileEntity extends TileEntity implements IHasWorldObjectAndCoords { +public abstract class BaseTileEntity extends TileEntity implements IHasWorldObjectAndCoords, IIC2Enet, IGTEnet { + protected boolean mInventoryChanged = false; + /** * Buffers adjacent TileEntities for faster access *

@@ -49,7 +60,21 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje */ public boolean isDead = false; - private final void clearNullMarkersFromTileEntityBuffer() { + private final ChunkCoordinates mReturnedCoordinates = new ChunkCoordinates(); + + public static byte getSideForPlayerPlacing(Entity aPlayer, byte aDefaultFacing, boolean[] aAllowedFacings) { + if(aPlayer != null) { + if (aPlayer.rotationPitch >= 65 && aAllowedFacings[SIDE_UP]) return SIDE_UP; + if (aPlayer.rotationPitch <= -65 && aAllowedFacings[SIDE_DOWN]) return SIDE_DOWN; + final byte rFacing = COMPASS_DIRECTIONS[MathHelper.floor_double(0.5D + 4.0F * aPlayer.rotationYaw / 360.0F) & 0x3]; + if (aAllowedFacings[rFacing]) return rFacing; + } + for (final byte tSide : ALL_VALID_SIDES) if (aAllowedFacings[tSide]) return tSide; + return aDefaultFacing; + } + + + private void clearNullMarkersFromTileEntityBuffer() { for (int i = 0; i < mBufferedTileEntities.length; i++) if (mBufferedTileEntities[i] == this) mBufferedTileEntities[i] = null; } @@ -58,7 +83,7 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje * Called automatically when the Coordinates of this TileEntity have been changed */ protected final void clearTileEntityBuffer() { - for (int i = 0; i < mBufferedTileEntities.length; i++) mBufferedTileEntities[i] = null; + Arrays.fill(mBufferedTileEntities, null); } @Override @@ -81,6 +106,14 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje return zCoord; } + @Override + public ChunkCoordinates getCoords() { + mReturnedCoordinates.posX = xCoord; + mReturnedCoordinates.posY = yCoord; + mReturnedCoordinates.posZ = zCoord; + return mReturnedCoordinates; + } + @Override public final int getOffsetX(byte aSide, int aMultiplier) { return xCoord + ForgeDirection.getOrientation(aSide).offsetX * aMultiplier; @@ -119,7 +152,12 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje } @Override - public final int getRandomNumber(int aRange) { + public boolean isInvalidTileEntity() { + return isInvalid(); + } + + @Override + public int getRandomNumber(int aRange) { return ThreadLocalRandom.current().nextInt(aRange); } @@ -236,84 +274,84 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje @Override public final IInventory getIInventory(int aX, int aY, int aZ) { - TileEntity tTileEntity = getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IInventory) return (IInventory) tTileEntity; return null; } @Override public final IInventory getIInventoryOffset(int aX, int aY, int aZ) { - TileEntity tTileEntity = getTileEntityOffset(aX, aY, aZ); + final TileEntity tTileEntity = getTileEntityOffset(aX, aY, aZ); if (tTileEntity instanceof IInventory) return (IInventory) tTileEntity; return null; } @Override public final IInventory getIInventoryAtSide(byte aSide) { - TileEntity tTileEntity = getTileEntityAtSide(aSide); + final TileEntity tTileEntity = getTileEntityAtSide(aSide); if (tTileEntity instanceof IInventory) return (IInventory) tTileEntity; return null; } @Override public final IInventory getIInventoryAtSideAndDistance(byte aSide, int aDistance) { - TileEntity tTileEntity = getTileEntityAtSideAndDistance(aSide, aDistance); + final TileEntity tTileEntity = getTileEntityAtSideAndDistance(aSide, aDistance); if (tTileEntity instanceof IInventory) return (IInventory) tTileEntity; return null; } @Override public final IFluidHandler getITankContainer(int aX, int aY, int aZ) { - TileEntity tTileEntity = getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IFluidHandler) return (IFluidHandler) tTileEntity; return null; } @Override public final IFluidHandler getITankContainerOffset(int aX, int aY, int aZ) { - TileEntity tTileEntity = getTileEntityOffset(aX, aY, aZ); + final TileEntity tTileEntity = getTileEntityOffset(aX, aY, aZ); if (tTileEntity instanceof IFluidHandler) return (IFluidHandler) tTileEntity; return null; } @Override public final IFluidHandler getITankContainerAtSide(byte aSide) { - TileEntity tTileEntity = getTileEntityAtSide(aSide); + final TileEntity tTileEntity = getTileEntityAtSide(aSide); if (tTileEntity instanceof IFluidHandler) return (IFluidHandler) tTileEntity; return null; } @Override public final IFluidHandler getITankContainerAtSideAndDistance(byte aSide, int aDistance) { - TileEntity tTileEntity = getTileEntityAtSideAndDistance(aSide, aDistance); + final TileEntity tTileEntity = getTileEntityAtSideAndDistance(aSide, aDistance); if (tTileEntity instanceof IFluidHandler) return (IFluidHandler) tTileEntity; return null; } @Override public final IGregTechTileEntity getIGregTechTileEntity(int aX, int aY, int aZ) { - TileEntity tTileEntity = getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity) return (IGregTechTileEntity) tTileEntity; return null; } @Override public final IGregTechTileEntity getIGregTechTileEntityOffset(int aX, int aY, int aZ) { - TileEntity tTileEntity = getTileEntityOffset(aX, aY, aZ); + final TileEntity tTileEntity = getTileEntityOffset(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity) return (IGregTechTileEntity) tTileEntity; return null; } @Override public final IGregTechTileEntity getIGregTechTileEntityAtSide(byte aSide) { - TileEntity tTileEntity = getTileEntityAtSide(aSide); + final TileEntity tTileEntity = getTileEntityAtSide(aSide); if (tTileEntity instanceof IGregTechTileEntity) return (IGregTechTileEntity) tTileEntity; return null; } @Override public final IGregTechTileEntity getIGregTechTileEntityAtSideAndDistance(byte aSide, int aDistance) { - TileEntity tTileEntity = getTileEntityAtSideAndDistance(aSide, aDistance); + final TileEntity tTileEntity = getTileEntityAtSideAndDistance(aSide, aDistance); if (tTileEntity instanceof IGregTechTileEntity) return (IGregTechTileEntity) tTileEntity; return null; } @@ -324,6 +362,12 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje return worldObj.getBlock(aX, aY, aZ); } + public Block getBlock(ChunkCoordinates aCoords) { + if (worldObj == null) return Blocks.air; + if (ignoreUnloadedChunks && crossedChunkBorder(aCoords) && !worldObj.blockExists(aCoords.posX, aCoords.posY, aCoords.posZ)) return Blocks.air; + return worldObj.getBlock(aCoords.posX, aCoords.posY, aCoords.posZ); + } + @Override public final byte getMetaID(int aX, int aY, int aZ) { if (ignoreUnloadedChunks && crossedChunkBorder(aX, aZ) && !worldObj.blockExists(aX, aY, aZ)) return 0; @@ -355,7 +399,7 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje } @Override - public final TileEntity getTileEntity(int aX, int aY, int aZ) { + public TileEntity getTileEntity(int aX, int aY, int aZ) { if (ignoreUnloadedChunks && crossedChunkBorder(aX, aZ) && !worldObj.blockExists(aX, aY, aZ)) return null; return worldObj.getTileEntity(aX, aY, aZ); } @@ -363,7 +407,9 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje @Override public final TileEntity getTileEntityAtSide(byte aSide) { if (aSide < 0 || aSide >= 6 || mBufferedTileEntities[aSide] == this) return null; - int tX = getOffsetX(aSide, 1), tY = getOffsetY(aSide, 1), tZ = getOffsetZ(aSide, 1); + final int tX = getOffsetX(aSide, 1); + final int tY = getOffsetY(aSide, 1); + final int tZ = getOffsetZ(aSide, 1); if (crossedChunkBorder(tX, tZ)) { mBufferedTileEntities[aSide] = null; if (ignoreUnloadedChunks && !worldObj.blockExists(tX, tY, tZ)) return null; @@ -389,7 +435,6 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje @Override public void writeToNBT(NBTTagCompound aNBT) { super.writeToNBT(aNBT); - //isDead = true; } @Override @@ -429,19 +474,19 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje } public void updateNeighbours(int mStrongRedstone, int oStrongRedstone) { - Block thisBlock = getBlockOffset(0, 0, 0); - for (ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { - int x1 = xCoord + dir.offsetX, y1 = yCoord + dir.offsetY, z1 = zCoord + dir.offsetZ; + final Block thisBlock = getBlockOffset(0, 0, 0); + for (final ForgeDirection dir : ForgeDirection.VALID_DIRECTIONS) { + final int x1 = xCoord + dir.offsetX, y1 = yCoord + dir.offsetY, z1 = zCoord + dir.offsetZ; if (worldObj.blockExists(x1, y1, z1)) { worldObj.notifyBlockOfNeighborChange(x1, y1, z1, thisBlock); - //update if it was / is strong powered. + // update if it was / is strong powered. if (((((mStrongRedstone | oStrongRedstone) >>> dir.ordinal()) & 1) != 0 ) && getBlock(x1, y1, z1).isNormalCube()) { - int skipUpdateSide = dir.getOpposite().ordinal(); //Don't update this block. Still updates diagonal blocks twice if conditions meet. + final int skipUpdateSide = dir.getOpposite().ordinal(); //Don't update this block. Still updates diagonal blocks twice if conditions meet. - for (ForgeDirection dir2 : ForgeDirection.VALID_DIRECTIONS) { - int x2 = x1 + dir2.offsetX, y2 = y1 + dir2.offsetY, z2 = z1 + dir2.offsetZ; + for (final ForgeDirection dir2 : ForgeDirection.VALID_DIRECTIONS) { + final int x2 = x1 + dir2.offsetX, y2 = y1 + dir2.offsetY, z2 = z1 + dir2.offsetZ; if (dir2.ordinal() != skipUpdateSide && worldObj.blockExists(x2, y2, z2)) worldObj.notifyBlockOfNeighborChange(x2, y2, z2, thisBlock); } @@ -455,10 +500,14 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje NW.sendPacketToAllPlayersInRange(worldObj, new GT_Packet_Block_Event(xCoord, (short) yCoord, zCoord, aID, aValue), xCoord, zCoord); } - private boolean crossedChunkBorder(int aX, int aZ) { + protected boolean crossedChunkBorder(int aX, int aZ) { return aX >> 4 != xCoord >> 4 || aZ >> 4 != zCoord >> 4; } + public final boolean crossedChunkBorder(ChunkCoordinates aCoords) { + return aCoords.posX >> 4 != xCoord >> 4 || aCoords.posZ >> 4 != zCoord >> 4; + } + public final void setOnFire() { GT_Utility.setCoordsOnFire(worldObj, xCoord, yCoord, zCoord, false); } @@ -470,7 +519,7 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje @Override public void markDirty() { // Avoid sending neighbor updates, just mark the chunk as dirty to make sure it gets saved - Chunk chunk = worldObj.getChunkFromBlockCoords(xCoord, zCoord); + final Chunk chunk = worldObj.getChunkFromBlockCoords(xCoord, zCoord); if(chunk != null) { chunk.setChunkModified(); } @@ -487,14 +536,13 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje protected TileIC2EnergySink ic2EnergySink = null; protected boolean joinedIc2Enet = false; - public IMetaTileEntity getMetaTileEntity() { return null; } - protected void createIc2Sink() { if(ic2EnergySink == null && isServerSide() && shouldJoinIc2Enet()) { ic2EnergySink = new TileIC2EnergySink((IGregTechTileEntity)this); } } + @Override public void doEnetUpdate() { leaveEnet(); joinEnet(); @@ -518,8 +566,4 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje } } - public boolean shouldJoinIc2Enet() { - final IMetaTileEntity meta = getMetaTileEntity(); - return meta != null && meta.shouldJoinIc2Enet(); - } } diff --git a/src/main/java/gregtech/api/metatileentity/CommonMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/CommonMetaTileEntity.java new file mode 100644 index 0000000000..766110d227 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/CommonMetaTileEntity.java @@ -0,0 +1,162 @@ +package gregtech.api.metatileentity; + +import gregtech.GT_Mod; +import gregtech.api.GregTech_API; +import gregtech.api.interfaces.metatileentity.IMetaTileEntity; +import gregtech.api.interfaces.tileentity.IGregTechTileEntity; +import gregtech.api.objects.GT_ItemStack; +import gregtech.api.util.GT_Log; +import gregtech.api.util.GT_Utility; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.network.Packet; + +import static gregtech.GT_Mod.GT_FML_LOGGER; +import static gregtech.api.enums.GT_Values.ALL_SIDES; + +public abstract class CommonMetaTileEntity extends CoverableTileEntity implements IGregTechTileEntity { + protected boolean mNeedsBlockUpdate = true, mNeedsUpdate = true, mSendClientData = false, mInventoryChanged = false; + + protected boolean createNewMetatileEntity(short aID) { + if (aID <= 0 || aID >= GregTech_API.METATILEENTITIES.length || GregTech_API.METATILEENTITIES[aID] == null) { + GT_Log.err.println("MetaID " + aID + " not loadable => locking TileEntity!"); + } else { + if (hasValidMetaTileEntity()) getMetaTileEntity().setBaseMetaTileEntity(null); + GregTech_API.METATILEENTITIES[aID].newMetaEntity(this).setBaseMetaTileEntity(this); + mTickTimer = 0; + mID = aID; + return true; + } + return false; + } + protected void saveMetaTileNBT(NBTTagCompound aNBT) { + try { + if (hasValidMetaTileEntity()) { + final NBTTagList tItemList = new NBTTagList(); + for (int i = 0; i < getMetaTileEntity().getRealInventory().length; i++) { + final ItemStack tStack = getMetaTileEntity().getRealInventory()[i]; + if (tStack != null) { + final NBTTagCompound tTag = new NBTTagCompound(); + tTag.setInteger("IntSlot", i); + tStack.writeToNBT(tTag); + tItemList.appendTag(tTag); + } + } + aNBT.setTag("Inventory", tItemList); + + try { + getMetaTileEntity().saveNBTData(aNBT); + } catch (Throwable e) { + GT_FML_LOGGER.error("Encountered CRITICAL ERROR while saving MetaTileEntity."); + GT_Mod.logStackTrace(e); + } + } + } catch (Throwable e) { + GT_FML_LOGGER.error("Encountered CRITICAL ERROR while saving MetaTileEntity."); + GT_Mod.logStackTrace(e); + } + } + + protected void loadMetaTileNBT(NBTTagCompound aNBT) { + if (mID != 0 && createNewMetatileEntity(mID)) { + final NBTTagList tItemList = aNBT.getTagList("Inventory", 10); + for (int i = 0; i < tItemList.tagCount(); i++) { + final NBTTagCompound tTag = tItemList.getCompoundTagAt(i); + final int tSlot = tTag.getInteger("IntSlot"); + if (tSlot >= 0 && tSlot < getMetaTileEntity().getRealInventory().length) { + getMetaTileEntity().getRealInventory()[tSlot] = GT_Utility.loadItem(tTag); + } + } + + try { + getMetaTileEntity().loadNBTData(aNBT); + } catch (Throwable e) { + GT_FML_LOGGER.error("Encountered Exception while loading MetaTileEntity."); + GT_Mod.logStackTrace(e); + } + } + } + + @Override + public void markDirty() { + super.markDirty(); + mInventoryChanged = true; + } + + @Override + public boolean hasInventoryBeenModified() { + return mInventoryChanged; + } + + @Override + public boolean isValidSlot(int aIndex) { + if (canAccessData()) return getMetaTileEntity().isValidSlot(aIndex); + return false; + } + + @Override + public Packet getDescriptionPacket() { + issueClientUpdate(); + return null; + } + + @Override + public void issueTextureUpdate() { + mNeedsUpdate = true; + } + + @Override + public void issueClientUpdate() { + mSendClientData = true; + } + + @Override + public void issueBlockUpdate() { + mNeedsBlockUpdate = true; + } + + @Override + public boolean isValidFacing(byte aSide) { + if (canAccessData()) return getMetaTileEntity().isFacingValid(aSide); + return false; + } + + protected boolean canAccessData() { + return !isDead && hasValidMetaTileEntity(); + } + + protected abstract boolean hasValidMetaTileEntity(); + + @Override + public String[] getDescription() { + if (canAccessData()) return getMetaTileEntity().getDescription(); + return new String[0]; + } + + @Override + public boolean isStillValid() { + return hasValidMetaTileEntity(); + } + + @Override + public boolean allowCoverOnSide(byte aSide, GT_ItemStack aCoverID) { + return hasValidMetaTileEntity() && getMetaTileEntity().allowCoverOnSide(aSide, aCoverID); + } + + @Override + public void issueCoverUpdate(byte aSide) { + super.issueCoverUpdate(aSide); + issueClientUpdate(); + } + + /* + * IC2 Energy Compat + */ + @Override + public boolean shouldJoinIc2Enet() { + final IMetaTileEntity meta = getMetaTileEntity(); + return meta != null && meta.shouldJoinIc2Enet(); + } + +} diff --git a/src/main/java/gregtech/api/metatileentity/CoverableGregTechTileEntity.java b/src/main/java/gregtech/api/metatileentity/CoverableGregTechTileEntity.java deleted file mode 100644 index b6249542a3..0000000000 --- a/src/main/java/gregtech/api/metatileentity/CoverableGregTechTileEntity.java +++ /dev/null @@ -1,361 +0,0 @@ -package gregtech.api.metatileentity; - -import gregtech.GT_Mod; -import gregtech.api.GregTech_API; -import gregtech.api.enums.Textures; -import gregtech.api.interfaces.ITexture; -import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.net.GT_Packet_RequestCoverData; -import gregtech.api.net.GT_Packet_SendCoverData; -import gregtech.api.objects.GT_ItemStack; -import gregtech.api.util.GT_CoverBehavior; -import gregtech.api.util.GT_CoverBehaviorBase; -import gregtech.api.util.GT_Log; -import gregtech.api.util.GT_Utility; -import gregtech.api.util.ISerializableObject; -import gregtech.common.GT_Client; -import gregtech.common.covers.GT_Cover_Fluidfilter; -import mcp.mobius.waila.api.IWailaConfigHandler; -import mcp.mobius.waila.api.IWailaDataAccessor; -import net.minecraft.entity.item.EntityItem; -import net.minecraft.entity.player.EntityPlayerMP; -import net.minecraft.item.ItemStack; -import net.minecraft.nbt.NBTTagCompound; -import net.minecraft.nbt.NBTTagList; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.world.World; -import net.minecraftforge.common.util.ForgeDirection; -import net.minecraftforge.fluids.FluidRegistry; - -import java.util.Arrays; -import java.util.List; - -import static gregtech.GT_Mod.GT_FML_LOGGER; -import static gregtech.api.enums.GT_Values.NW; - -public abstract class CoverableGregTechTileEntity extends BaseTileEntity implements IGregTechTileEntity { - public static final String[] COVER_DATA_NBT_KEYS = Arrays.stream(ForgeDirection.VALID_DIRECTIONS).mapToInt(Enum::ordinal).mapToObj(i -> "mCoverData" + i).toArray(String[]::new); - protected final GT_CoverBehaviorBase[] mCoverBehaviors = new GT_CoverBehaviorBase[]{GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior}; - - protected int[] mCoverSides = new int[]{0, 0, 0, 0, 0, 0}; - protected ISerializableObject[] mCoverData = new ISerializableObject[6]; - protected final boolean[] mCoverNeedUpdate = new boolean[]{false, false, false, false, false, false}; - protected short mID = 0; - public long mTickTimer = 0; - - protected void saveCoverNBT(NBTTagCompound aNBT) { - for (int i = 0; i < mCoverData.length; i++) { - if (mCoverSides[i] != 0 && mCoverData[i] != null) - aNBT.setTag(COVER_DATA_NBT_KEYS[i], mCoverData[i].saveDataToNBT()); - } - aNBT.setIntArray("mCoverSides", mCoverSides); - - } - - protected void saveMetaTileNBT(NBTTagCompound aNBT) { - try { - if (hasValidMetaTileEntity()) { - NBTTagList tItemList = new NBTTagList(); - for (int i = 0; i < getMetaTileEntity().getRealInventory().length; i++) { - ItemStack tStack = getMetaTileEntity().getRealInventory()[i]; - if (tStack != null) { - NBTTagCompound tTag = new NBTTagCompound(); - tTag.setInteger("IntSlot", i); - tStack.writeToNBT(tTag); - tItemList.appendTag(tTag); - } - } - aNBT.setTag("Inventory", tItemList); - - try { - getMetaTileEntity().saveNBTData(aNBT); - } catch (Throwable e) { - GT_FML_LOGGER.error("Encountered CRITICAL ERROR while saving MetaTileEntity."); - GT_Mod.logStackTrace(e); - } - } - } catch (Throwable e) { - GT_FML_LOGGER.error("Encountered CRITICAL ERROR while saving MetaTileEntity."); - GT_Mod.logStackTrace(e); - } - } - - protected void loadMetaTileNBT(NBTTagCompound aNBT) { - if (mID != 0 && createNewMetatileEntity(mID)) { - NBTTagList tItemList = aNBT.getTagList("Inventory", 10); - for (int i = 0; i < tItemList.tagCount(); i++) { - NBTTagCompound tTag = tItemList.getCompoundTagAt(i); - int tSlot = tTag.getInteger("IntSlot"); - if (tSlot >= 0 && tSlot < getMetaTileEntity().getRealInventory().length) { - getMetaTileEntity().getRealInventory()[tSlot] = GT_Utility.loadItem(tTag); - } - } - - try { - getMetaTileEntity().loadNBTData(aNBT); - } catch (Throwable e) { - GT_FML_LOGGER.error("Encountered Exception while loading MetaTileEntity."); - GT_Mod.logStackTrace(e); - } - } - } - - protected void loadCoverNBT(NBTTagCompound aNBT) { - mCoverSides = aNBT.getIntArray("mCoverSides"); - if (mCoverSides.length != 6) mCoverSides = new int[]{0, 0, 0, 0, 0, 0}; - for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehaviorNew(mCoverSides[i]); - - // check old form of data - mCoverData = new ISerializableObject[6]; - if (aNBT.hasKey("mCoverData", 11) && aNBT.getIntArray("mCoverData").length == 6) { - int[] tOldData = aNBT.getIntArray("mCoverData"); - for (int i = 0; i < tOldData.length; i++) { - if(mCoverBehaviors[i] instanceof GT_Cover_Fluidfilter) { - final String filterKey = String.format("fluidFilter%d", i); - if (aNBT.hasKey(filterKey)) { - mCoverData[i] = mCoverBehaviors[i].createDataObject((tOldData[i] & 7) | (FluidRegistry.getFluidID(aNBT.getString(filterKey)) << 3)); - } - } else if (mCoverBehaviors[i] != null && mCoverBehaviors[i] != GregTech_API.sNoBehavior) { - mCoverData[i] = mCoverBehaviors[i].createDataObject(tOldData[i]); - } - } - } else { - // no old data - for (byte i = 0; i<6; i++) { - if (mCoverBehaviors[i] == null) - continue; - if (aNBT.hasKey(COVER_DATA_NBT_KEYS[i])) - mCoverData[i] = mCoverBehaviors[i].createDataObject(aNBT.getTag(COVER_DATA_NBT_KEYS[i])); - else - mCoverData[i] = mCoverBehaviors[i].createDataObject(); - if (mCoverBehaviors[i].isDataNeededOnClient(i, mCoverSides[i], mCoverData[i], this)) - issueCoverUpdate(i); - } - } - } - - protected boolean doCoverThings() { - for (byte i = 0; i < 6; i++) - if (getCoverIDAtSide(i) != 0) { - GT_CoverBehaviorBase tCover = getCoverBehaviorAtSideNew(i); - int tCoverTickRate = tCover.getTickRate(i, getCoverIDAtSide(i), mCoverData[i], this); - if (tCoverTickRate > 0 && mTickTimer % tCoverTickRate == 0) { - byte tRedstone = tCover.isRedstoneSensitive(i, getCoverIDAtSide(i), mCoverData[i], this, mTickTimer) ? getInputRedstoneSignal(i) : 0; - mCoverData[i] = tCover.doCoverThings(i, tRedstone, getCoverIDAtSide(i), mCoverData[i], this, mTickTimer); - if (!hasValidMetaTileEntity()) return false; - } - } - return true; - } - - protected void checkDropCover() { - for (byte i = 0; i < 6; i++) - if (getCoverIDAtSide(i) != 0) - if (!getMetaTileEntity().allowCoverOnSide(i, new GT_ItemStack(getCoverIDAtSide(i)))) - dropCover(i, i, true); - } - - protected void updateCoverBehavior() { - for (byte i = 0; i < 6; i++) - mCoverBehaviors[i] = GregTech_API.getCoverBehaviorNew(mCoverSides[i]); - } - - @Override - public void issueCoverUpdate(byte aSide) { - if ((getWorld() == null || isServerSide()) && getCoverBehaviorAtSideNew(aSide).isDataNeededOnClient(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this)) - mCoverNeedUpdate[aSide] = true; - } - - public ITexture getCoverTexture(byte aSide) { - if (getCoverIDAtSide(aSide) == 0) return null; - if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x1) != 0) { - return Textures.BlockIcons.HIDDEN_TEXTURE[0]; // See through - } - ITexture coverTexture = getCoverBehaviorAtSideNew(aSide).getSpecialCoverTexture(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this); - return coverTexture != null ? coverTexture : GregTech_API.sCovers.get(new GT_ItemStack(getCoverIDAtSide(aSide))); - } - - protected void requestCoverDataIfNeeded() { - for (byte i = 0; i < 6; i++) { - if (getCoverBehaviorAtSideNew(i).isDataNeededOnClient(i, getCoverIDAtSide(i), getComplexCoverDataAtSide(i), this)) - NW.sendToServer(new GT_Packet_RequestCoverData(i, getCoverIDAtSide(i), this)); - } - } - - protected abstract boolean hasValidMetaTileEntity(); - - protected boolean createNewMetatileEntity(short aID) { - if (aID <= 0 || aID >= GregTech_API.METATILEENTITIES.length || GregTech_API.METATILEENTITIES[aID] == null) { - GT_Log.err.println("MetaID " + aID + " not loadable => locking TileEntity!"); - } else { - if (hasValidMetaTileEntity()) getMetaTileEntity().setBaseMetaTileEntity(null); - GregTech_API.METATILEENTITIES[aID].newMetaEntity(this).setBaseMetaTileEntity(this); - mTickTimer = 0; - mID = aID; - return true; - } - return false; - } - - @Override - public void setCoverIDAtSide(byte aSide, int aID) { - if (aSide >= 0 && aSide < 6 && mCoverSides[aSide] != aID) { - if (aID == 0 && isClientSide()) - mCoverBehaviors[aSide].onDropped(aSide, mCoverSides[aSide], mCoverData[aSide], this); - mCoverSides[aSide] = aID; - mCoverBehaviors[aSide] = GregTech_API.getCoverBehaviorNew(aID); - mCoverData[aSide] = mCoverBehaviors[aSide].createDataObject(); - issueCoverUpdate(aSide); - issueBlockUpdate(); - } - } - - @Override - @Deprecated - public GT_CoverBehavior getCoverBehaviorAtSide(byte aSide) { - if (aSide >= 0 && aSide < mCoverBehaviors.length && mCoverBehaviors[aSide] instanceof GT_CoverBehavior) - return (GT_CoverBehavior) mCoverBehaviors[aSide]; - return GregTech_API.sNoBehavior; - } - - @Override - public void setCoverItemAtSide(byte aSide, ItemStack aCover) { - GregTech_API.getCoverBehaviorNew(aCover).placeCover(aSide, aCover, this); - } - - @Override - public int getCoverIDAtSide(byte aSide) { - if (aSide >= 0 && aSide < 6) return mCoverSides[aSide]; - return 0; - } - - @Override - public ItemStack getCoverItemAtSide(byte aSide) { - return getCoverBehaviorAtSideNew(aSide).getDisplayStack(getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide)); - } - - @Override - public boolean canPlaceCoverIDAtSide(byte aSide, int aID) { - return getCoverIDAtSide(aSide) == 0; - } - - @Override - public boolean canPlaceCoverItemAtSide(byte aSide, ItemStack aCover) { - return getCoverIDAtSide(aSide) == 0; - } - - @Override - @Deprecated - public int getCoverDataAtSide(byte aSide) { - if (aSide >= 0 && aSide < 6 && mCoverData[aSide] instanceof ISerializableObject.LegacyCoverData) - return ((ISerializableObject.LegacyCoverData) mCoverData[aSide]).get(); - return 0; - } - - @Override - @Deprecated - public void setCoverDataAtSide(byte aSide, int aData) { - if (aSide >= 0 && aSide < 6 && mCoverData[aSide] instanceof ISerializableObject.LegacyCoverData) - mCoverData[aSide] = new ISerializableObject.LegacyCoverData(aData); - } - - @Override - public void setCoverDataAtSide(byte aSide, ISerializableObject aData) { - if (aSide >= 0 && aSide < 6 && getCoverBehaviorAtSideNew(aSide) != null && getCoverBehaviorAtSideNew(aSide).cast(aData) != null) - mCoverData[aSide] = aData; - } - - @Override - public ISerializableObject getComplexCoverDataAtSide(byte aSide) { - if (aSide >= 0 && aSide < 6 && getCoverBehaviorAtSideNew(aSide) != null) - return mCoverData[aSide]; - return GregTech_API.sNoBehavior.createDataObject(); - } - - @Override - public GT_CoverBehaviorBase getCoverBehaviorAtSideNew(byte aSide) { - if (aSide >= 0 && aSide < 6) - return mCoverBehaviors[aSide]; - return GregTech_API.sNoBehavior; - } - - @Override - public boolean dropCover(byte aSide, byte aDroppedSide, boolean aForced) { - if (getCoverBehaviorAtSideNew(aSide).onCoverRemoval(aSide, getCoverIDAtSide(aSide), mCoverData[aSide], this, aForced) || aForced) { - ItemStack tStack = getCoverBehaviorAtSideNew(aSide).getDrop(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this); - if (tStack != null) { - getCoverBehaviorAtSideNew(aSide).onDropped(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this); - EntityItem tEntity = new EntityItem(worldObj, getOffsetX(aDroppedSide, 1) + 0.5, getOffsetY(aDroppedSide, 1) + 0.5, getOffsetZ(aDroppedSide, 1) + 0.5, tStack); - tEntity.motionX = 0; - tEntity.motionY = 0; - tEntity.motionZ = 0; - worldObj.spawnEntityInWorld(tEntity); - } - setCoverIDAtSide(aSide, 0); - updateOutputRedstoneSignal(aSide); - - return true; - } - return false; - } - - protected void updateOutputRedstoneSignal(byte aSide) { - setOutputRedstoneSignal(aSide, (byte) 0); - } - - @Override - public void receiveCoverData(byte coverSide, int coverID, int coverData) { - if ((coverSide >= 0 && coverSide < 6) && (mCoverSides[coverSide] == coverID)) - setCoverDataAtSide(coverSide, coverData); - } - - @Override - public void receiveCoverData(byte aCoverSide, int aCoverID, ISerializableObject aCoverData, EntityPlayerMP aPlayer) { - if ((aCoverSide >= 0 && aCoverSide < 6) && (mCoverSides[aCoverSide] == aCoverID)) { - setCoverDataAtSide(aCoverSide, aCoverData); - if (isClientSide()) - getCoverBehaviorAtSideNew(aCoverSide).onDataChanged(aCoverSide, aCoverID, aCoverData, this); - } - } - - protected void sendCoverDataIfNeeded() { - int mCoverNeedUpdateLength = mCoverNeedUpdate.length; - for (byte i = 0; i < mCoverNeedUpdateLength; i++) { - if (mCoverNeedUpdate[i]) { - NW.sendPacketToAllPlayersInRange( - worldObj, - new GT_Packet_SendCoverData( - i, getCoverIDAtSide(i), getComplexCoverDataAtSide(i), this), - xCoord, zCoord - ); - mCoverNeedUpdate[i] = false; - } - } - } - - @Override - public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { - final NBTTagCompound tag = accessor.getNBTData(); - final int side = (byte)accessor.getSide().ordinal(); - final String filterKey = "filterInfo" + side; - - if (tag.hasKey(filterKey)) { - currenttip.add(tag.getString(filterKey)); - } - - // No super implementation - // super.getWailaBody(itemStack, currenttip, accessor, config); - } - - @Override - public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, int z) { - // No super implementation - // super.getWailaNBTData(player, tile, tag, world, x, y, z); - for(byte side=0 ; side < 6 ; side++) { - if(getCoverBehaviorAtSideNew(side) instanceof GT_Cover_Fluidfilter) { - tag.setString("filterInfo" + side, getCoverBehaviorAtSideNew(side).getDescription(side, getCoverIDAtSide(side), getComplexCoverDataAtSide(side), this)); - } - } - } - -} diff --git a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java new file mode 100644 index 0000000000..fdac12c621 --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java @@ -0,0 +1,441 @@ +package gregtech.api.metatileentity; + +import gregtech.GT_Mod; +import gregtech.api.GregTech_API; +import gregtech.api.interfaces.ITexture; +import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.enums.Textures; +import gregtech.api.interfaces.tileentity.IGregtechWailaProvider; +import gregtech.api.net.GT_Packet_RequestCoverData; +import gregtech.api.net.GT_Packet_SendCoverData; +import gregtech.api.objects.GT_ItemStack; +import gregtech.api.util.GT_CoverBehavior; +import gregtech.api.util.GT_CoverBehaviorBase; +import gregtech.api.util.ISerializableObject; +import gregtech.common.GT_Client; +import gregtech.common.covers.GT_Cover_Fluidfilter; +import mcp.mobius.waila.api.IWailaConfigHandler; +import mcp.mobius.waila.api.IWailaDataAccessor; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; +import net.minecraftforge.fluids.FluidRegistry; + +import java.util.Arrays; +import java.util.Objects; +import java.util.stream.IntStream; +import java.util.List; + +import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES; +import static gregtech.api.enums.GT_Values.E; +import static gregtech.api.enums.GT_Values.NW; +import static gregtech.api.util.GT_LanguageManager.FACES; +import static gregtech.api.util.GT_LanguageManager.getTranslation; + +public abstract class CoverableTileEntity extends BaseTileEntity implements ICoverable, IGregtechWailaProvider { + public static final String[] COVER_DATA_NBT_KEYS = Arrays.stream(ForgeDirection.VALID_DIRECTIONS).mapToInt(Enum::ordinal).mapToObj(i -> "mCoverData" + i).toArray(String[]::new); + protected final GT_CoverBehaviorBase[] mCoverBehaviors = new GT_CoverBehaviorBase[]{GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior, GregTech_API.sNoBehavior}; + protected byte[] mSidedRedstone = new byte[]{15, 15, 15, 15, 15, 15}; + protected boolean mRedstone = false; + protected byte mStrongRedstone = 0; + + protected int[] mCoverSides = new int[]{0, 0, 0, 0, 0, 0}; + protected ISerializableObject[] mCoverData = new ISerializableObject[6]; + protected final boolean[] mCoverNeedUpdate = new boolean[]{false, false, false, false, false, false}; + protected short mID = 0; + public long mTickTimer = 0; + + protected void writeCoverNBT(NBTTagCompound aNBT, boolean isDrop) { + boolean hasCover = false; + for (int i = 0; i < mCoverData.length; i++) { + if (mCoverSides[i] != 0 && mCoverData[i] != null) { + aNBT.setTag(COVER_DATA_NBT_KEYS[i], mCoverData[i].saveDataToNBT()); + hasCover = true; + } + } + if (mStrongRedstone > 0) aNBT.setByte("mStrongRedstone", mStrongRedstone); + if (hasCover) aNBT.setIntArray("mCoverSides", mCoverSides); + + if(!isDrop) { + aNBT.setByteArray("mRedstoneSided", mSidedRedstone); + aNBT.setBoolean("mRedstone", mRedstone); + } + + } + + + protected void readCoverNBT(NBTTagCompound aNBT) { + mCoverSides = aNBT.hasKey("mCoverSides") ? aNBT.getIntArray("mCoverSides") : new int[]{0, 0, 0, 0, 0, 0}; + mRedstone = aNBT.getBoolean("mRedstone"); + mSidedRedstone = aNBT.hasKey("mRedstoneSided") ? aNBT.getByteArray("mRedstoneSided") : new byte[]{15, 15, 15, 15, 15, 15}; + mStrongRedstone = aNBT.getByte("mStrongRedstone"); + + for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehaviorNew(mCoverSides[i]); + + // check old form of data + mCoverData = new ISerializableObject[6]; + if (aNBT.hasKey("mCoverData", 11) && aNBT.getIntArray("mCoverData").length == 6) { + final int[] tOldData = aNBT.getIntArray("mCoverData"); + for (int i = 0; i < tOldData.length; i++) { + if(mCoverBehaviors[i] instanceof GT_Cover_Fluidfilter) { + final String filterKey = String.format("fluidFilter%d", i); + if (aNBT.hasKey(filterKey)) { + mCoverData[i] = mCoverBehaviors[i].createDataObject((tOldData[i] & 7) | (FluidRegistry.getFluidID(aNBT.getString(filterKey)) << 3)); + } + } else if (mCoverBehaviors[i] != null && mCoverBehaviors[i] != GregTech_API.sNoBehavior) { + mCoverData[i] = mCoverBehaviors[i].createDataObject(tOldData[i]); + } + } + } else { + // no old data + for (byte i = 0; i<6; i++) { + if (mCoverBehaviors[i] == null) continue; + if (aNBT.hasKey(COVER_DATA_NBT_KEYS[i])) + mCoverData[i] = mCoverBehaviors[i].createDataObject(aNBT.getTag(COVER_DATA_NBT_KEYS[i])); + else + mCoverData[i] = mCoverBehaviors[i].createDataObject(); + if (mCoverBehaviors[i].isDataNeededOnClient(i, mCoverSides[i], mCoverData[i], this)) + issueCoverUpdate(i); + } + } + + } + public abstract boolean isStillValid(); + + protected boolean doCoverThings() { + for (byte i : ALL_VALID_SIDES) { + if (getCoverIDAtSide(i) != 0) { + final GT_CoverBehaviorBase tCover = getCoverBehaviorAtSideNew(i); + final int tCoverTickRate = tCover.getTickRate(i, getCoverIDAtSide(i), mCoverData[i], this); + if (tCoverTickRate > 0 && mTickTimer % tCoverTickRate == 0) { + final byte tRedstone = tCover.isRedstoneSensitive(i, getCoverIDAtSide(i), mCoverData[i], this, mTickTimer) ? getInputRedstoneSignal(i) : 0; + mCoverData[i] = tCover.doCoverThings(i, tRedstone, getCoverIDAtSide(i), mCoverData[i], this, mTickTimer); + if (!isStillValid()) return false; + } + } + } + return true; + } + + public abstract boolean allowCoverOnSide(byte aSide, GT_ItemStack aCoverID); + + protected void checkDropCover() { + for (byte i : ALL_VALID_SIDES) + if (getCoverIDAtSide(i) != 0) + if (!allowCoverOnSide(i, new GT_ItemStack(getCoverIDAtSide(i)))) + dropCover(i, i, true); + } + + protected void updateCoverBehavior() { + for (byte i : ALL_VALID_SIDES) + mCoverBehaviors[i] = GregTech_API.getCoverBehaviorNew(mCoverSides[i]); + } + + @Override + public void issueCoverUpdate(byte aSide) { + // If we've got a null worldObj we're getting called as a part of readingNBT from a non tickable MultiTileEntity on chunk load before the world is set + // so we'll want to send a cover update. + if (worldObj == null || (isServerSide() && getCoverBehaviorAtSideNew(aSide).isDataNeededOnClient(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this))) + mCoverNeedUpdate[aSide] = true; + } + + public final ITexture getCoverTexture(byte aSide) { + if (getCoverIDAtSide(aSide) == 0) return null; + if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x1) != 0) { + return Textures.BlockIcons.HIDDEN_TEXTURE[0]; // See through + } + final ITexture coverTexture = getCoverBehaviorAtSideNew(aSide).getSpecialCoverTexture(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this); + return coverTexture != null ? coverTexture : GregTech_API.sCovers.get(new GT_ItemStack(getCoverIDAtSide(aSide))); + } + + protected void requestCoverDataIfNeeded() { + if(worldObj == null || !worldObj.isRemote) return; + for (byte i : ALL_VALID_SIDES) { + if (getCoverBehaviorAtSideNew(i).isDataNeededOnClient(i, getCoverIDAtSide(i), getComplexCoverDataAtSide(i), this)) + NW.sendToServer(new GT_Packet_RequestCoverData(i, getCoverIDAtSide(i), this)); + } + } + + @Override + public void setCoverIdAndDataAtSide(byte aSide, int aId, ISerializableObject aData) { + if(setCoverIDAtSideNoUpdate(aSide, aId)) { + setCoverDataAtSide(aSide, aData); + issueCoverUpdate(aSide); + issueBlockUpdate(); + } + } + + @Override + public void setCoverIDAtSide(byte aSide, int aID) { + if (setCoverIDAtSideNoUpdate(aSide, aID)) { + issueCoverUpdate(aSide); + issueBlockUpdate(); + } + } + + @Override + public boolean setCoverIDAtSideNoUpdate(byte aSide, int aID) { + if (aSide >= 0 && aSide < 6 && mCoverSides[aSide] != aID) { + if (aID == 0 && isClientSide()) + mCoverBehaviors[aSide].onDropped(aSide, mCoverSides[aSide], mCoverData[aSide], this); + mCoverSides[aSide] = aID; + mCoverBehaviors[aSide] = GregTech_API.getCoverBehaviorNew(aID); + mCoverData[aSide] = mCoverBehaviors[aSide].createDataObject(); + return true; + } + return false; + } + + @Override + @Deprecated + public void setCoverDataAtSide(byte aSide, int aData) { + if (aSide >= 0 && aSide < 6 && mCoverData[aSide] instanceof ISerializableObject.LegacyCoverData) + mCoverData[aSide] = new ISerializableObject.LegacyCoverData(aData); + } + + @Override + public void setCoverDataAtSide(byte aSide, ISerializableObject aData) { + if (aSide >= 0 && aSide < 6 && getCoverBehaviorAtSideNew(aSide) != null && getCoverBehaviorAtSideNew(aSide).cast(aData) != null) + mCoverData[aSide] = aData; + } + + + @Override + @Deprecated + public GT_CoverBehavior getCoverBehaviorAtSide(byte aSide) { + if (aSide >= 0 && aSide < mCoverBehaviors.length && mCoverBehaviors[aSide] instanceof GT_CoverBehavior) + return (GT_CoverBehavior) mCoverBehaviors[aSide]; + return GregTech_API.sNoBehavior; + } + + @Override + public void setCoverItemAtSide(byte aSide, ItemStack aCover) { + GregTech_API.getCoverBehaviorNew(aCover).placeCover(aSide, aCover, this); + } + + @Override + public int getCoverIDAtSide(byte aSide) { + if (aSide >= 0 && aSide < 6) return mCoverSides[aSide]; + return 0; + } + + @Override + public ItemStack getCoverItemAtSide(byte aSide) { + return getCoverBehaviorAtSideNew(aSide).getDisplayStack(getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide)); + } + + @Override + public boolean canPlaceCoverIDAtSide(byte aSide, int aID) { + return getCoverIDAtSide(aSide) == 0; + } + + @Override + public boolean canPlaceCoverItemAtSide(byte aSide, ItemStack aCover) { + return getCoverIDAtSide(aSide) == 0; + } + + @Override + @Deprecated + public int getCoverDataAtSide(byte aSide) { + if (aSide >= 0 && aSide < 6 && mCoverData[aSide] instanceof ISerializableObject.LegacyCoverData) + return ((ISerializableObject.LegacyCoverData) mCoverData[aSide]).get(); + return 0; + } + + @Override + public ISerializableObject getComplexCoverDataAtSide(byte aSide) { + if (aSide >= 0 && aSide < 6 && getCoverBehaviorAtSideNew(aSide) != null) + return mCoverData[aSide]; + return GregTech_API.sNoBehavior.createDataObject(); + } + + @Override + public GT_CoverBehaviorBase getCoverBehaviorAtSideNew(byte aSide) { + if (aSide >= 0 && aSide < 6) + return mCoverBehaviors[aSide]; + return GregTech_API.sNoBehavior; + } + + @Override + public boolean dropCover(byte aSide, byte aDroppedSide, boolean aForced) { + if (getCoverBehaviorAtSideNew(aSide).onCoverRemoval(aSide, getCoverIDAtSide(aSide), mCoverData[aSide], this, aForced) || aForced) { + final ItemStack tStack = getCoverBehaviorAtSideNew(aSide).getDrop(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this); + if (tStack != null) { + getCoverBehaviorAtSideNew(aSide).onDropped(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this); + final EntityItem tEntity = new EntityItem(worldObj, getOffsetX(aDroppedSide, 1) + 0.5, getOffsetY(aDroppedSide, 1) + 0.5, getOffsetZ(aDroppedSide, 1) + 0.5, tStack); + tEntity.motionX = 0; + tEntity.motionY = 0; + tEntity.motionZ = 0; + worldObj.spawnEntityInWorld(tEntity); + } + setCoverIDAtSide(aSide, 0); + updateOutputRedstoneSignal(aSide); + + return true; + } + return false; + } + + @Override + public void setOutputRedstoneSignal(byte aSide, byte aStrength) { + aStrength = (byte) Math.min(Math.max(0, aStrength), 15); + if (aSide >= 0 && aSide < 6 && mSidedRedstone[aSide] != aStrength) { + mSidedRedstone[aSide] = aStrength; + issueBlockUpdate(); + } + } + + @Override + public void setStrongOutputRedstoneSignal(byte aSide, byte aStrength) { + mStrongRedstone |= (1 << aSide); + setOutputRedstoneSignal(aSide, aStrength); + } + + + @Override + public void setInternalOutputRedstoneSignal(byte aSide, byte aStrength) { + if (!getCoverBehaviorAtSideNew(aSide).manipulatesSidedRedstoneOutput(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this)) + setOutputRedstoneSignal(aSide, aStrength); + } + + @Override + public boolean getRedstone() { + return IntStream.range(1, 6).anyMatch(i -> getRedstone((byte) i)); + } + + @Override + public boolean getRedstone(byte aSide) { + return getInternalInputRedstoneSignal(aSide) > 0; + } + + @Override + public byte getStrongestRedstone() { + return (byte) IntStream.range(1, 6).map(i -> getInternalInputRedstoneSignal((byte) i)).max().orElse(0); + } + + @Override + public byte getStrongOutputRedstoneSignal(byte aSide) { + return aSide >= 0 && aSide < 6 && (mStrongRedstone & (1 << aSide)) != 0 ? (byte) (mSidedRedstone[aSide] & 15) : 0; + } + + @Override + public void setGenericRedstoneOutput(boolean aOnOff) { + mRedstone = aOnOff; + } + + @Override + public byte getInternalInputRedstoneSignal(byte aSide) { + return (byte) (getCoverBehaviorAtSideNew(aSide).getRedstoneInput(aSide, getInputRedstoneSignal(aSide), getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this) & 15); + } + + @Override + public byte getInputRedstoneSignal(byte aSide) { + return (byte) (worldObj.getIndirectPowerLevelTo(getOffsetX(aSide, 1), getOffsetY(aSide, 1), getOffsetZ(aSide, 1), aSide) & 15); + } + + @Override + public byte getOutputRedstoneSignal(byte aSide) { + return getCoverBehaviorAtSideNew(aSide).manipulatesSidedRedstoneOutput(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this) ? mSidedRedstone[aSide] : getGeneralRS(aSide); + } + + protected void updateOutputRedstoneSignal(byte aSide) { + setOutputRedstoneSignal(aSide, (byte) 0); + } + + @Override + public void receiveCoverData(byte aCoverSide, int aCoverID, int aCoverData) { + if ((aCoverSide >= 0 && aCoverSide < 6)) + setCoverIDAtSideNoUpdate(aCoverSide, aCoverID); + setCoverDataAtSide(aCoverSide, aCoverData); + } + + @Override + public void receiveCoverData(byte aCoverSide, int aCoverID, ISerializableObject aCoverData, EntityPlayerMP aPlayer) { + if ((aCoverSide >= 0 && aCoverSide < 6)) { + setCoverIDAtSideNoUpdate(aCoverSide, aCoverID); + setCoverDataAtSide(aCoverSide, aCoverData); + if (isClientSide()) { + getCoverBehaviorAtSideNew(aCoverSide).onDataChanged(aCoverSide, aCoverID, aCoverData, this); + } + } + } + + protected void sendCoverDataIfNeeded() { + if(worldObj == null || worldObj.isRemote) return; + final int mCoverNeedUpdateLength = mCoverNeedUpdate.length; + for (byte i = 0; i < mCoverNeedUpdateLength; i++) { + if (mCoverNeedUpdate[i]) { + NW.sendPacketToAllPlayersInRange( + worldObj, + new GT_Packet_SendCoverData(i, getCoverIDAtSide(i), getComplexCoverDataAtSide(i), this), + xCoord, zCoord + ); + mCoverNeedUpdate[i] = false; + } + } + } + + @Override + public void getWailaBody(ItemStack itemStack, List currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) { + final NBTTagCompound tag = accessor.getNBTData(); + final byte side = (byte)accessor.getSide().ordinal(); + + final int[] coverSides = tag.getIntArray("mCoverSides"); + // Not all data is available on the client, so get it from the NBT packet + if (coverSides != null && coverSides.length == 6 && coverSides[side] != 0) { + final int coverId = coverSides[side]; + final GT_CoverBehaviorBase behavior = GregTech_API.getCoverBehaviorNew(coverId); + if (behavior != null && behavior != GregTech_API.sNoBehavior) { + if (tag.hasKey(CoverableTileEntity.COVER_DATA_NBT_KEYS[side])) { + final ISerializableObject dataObject = behavior.createDataObject(tag.getTag(CoverableTileEntity.COVER_DATA_NBT_KEYS[side])); + final ItemStack coverStack = behavior.getDisplayStack(coverId, dataObject); + if (coverStack != null) currenttip.add(String.format("Cover: %s", coverStack.getDisplayName())); + final String behaviorDesc = behavior.getDescription(side, coverId, dataObject, null); + if (!Objects.equals(behaviorDesc, E)) currenttip.add(behaviorDesc); + } + } + } + + // No super implementation + // super.getWailaBody(itemStack, currenttip, accessor, config); + } + + @Override + public void getWailaNBTData(EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, int z) { + // No super implementation + // super.getWailaNBTData(player, tile, tag, world, x, y, z); + + // While we have some cover data on the client (enough to render it); we don't have all the information we want, such as + // details on the fluid filter, so send it all here. + writeCoverNBT(tag, false); + } + + /** + * Add installed cover information, generally called from ItemBlock + * @param aNBT - NBTTagCompound from the stack + * @param aList - List to add the information to + */ + public static void addInstalledCoversInformation(NBTTagCompound aNBT, List aList) { + if (aNBT.hasKey("mCoverSides")){ + final int[] mCoverSides = aNBT.getIntArray("mCoverSides"); + if (mCoverSides != null && mCoverSides.length == 6) { + for (byte tSide : ALL_VALID_SIDES) { + final int coverId = mCoverSides[tSide]; + if (coverId == 0) continue; + final GT_CoverBehaviorBase behavior = GregTech_API.getCoverBehaviorNew(coverId); + if (behavior == null || behavior == GregTech_API.sNoBehavior) continue; + if (!aNBT.hasKey(CoverableTileEntity.COVER_DATA_NBT_KEYS[tSide])) continue; + final ISerializableObject dataObject = behavior.createDataObject(aNBT.getTag(CoverableTileEntity.COVER_DATA_NBT_KEYS[tSide])); + final ItemStack coverStack = behavior.getDisplayStack(coverId, dataObject); + if (coverStack != null) { + aList.add(String.format("Cover on %s side: %s", getTranslation(FACES[tSide]), coverStack.getDisplayName())); + } + } + } + } + } +} diff --git a/src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java b/src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java new file mode 100644 index 0000000000..c3c22415cb --- /dev/null +++ b/src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java @@ -0,0 +1,12 @@ +package gregtech.api.metatileentity; + +public class GregTechTileClientEvents { + public static final byte CHANGE_COMMON_DATA = 0; + public static final byte CHANGE_CUSTOM_DATA = 1; + public static final byte CHANGE_COLOR = 2; + public static final byte CHANGE_REDSTONE_OUTPUT = 3; + public static final byte DO_SOUND = 4; + public static final byte START_SOUND_LOOP = 5; + public static final byte STOP_SOUND_LOOP = 6; + public static final byte CHANGE_LIGHT = 7; +} diff --git a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java index c8727131c8..9d07b1f9ba 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java @@ -304,19 +304,19 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable { @Override public final void sendSound(byte aIndex) { if (!getBaseMetaTileEntity().hasMufflerUpgrade()) - getBaseMetaTileEntity().sendBlockEvent(MetaTileClientEvents.DO_SOUND, aIndex); + getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.DO_SOUND, aIndex); } @Override public final void sendLoopStart(byte aIndex) { if (!getBaseMetaTileEntity().hasMufflerUpgrade()) - getBaseMetaTileEntity().sendBlockEvent(MetaTileClientEvents.START_SOUND_LOOP, aIndex); + getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.START_SOUND_LOOP, aIndex); } @Override public final void sendLoopEnd(byte aIndex) { if (!getBaseMetaTileEntity().hasMufflerUpgrade()) - getBaseMetaTileEntity().sendBlockEvent(MetaTileClientEvents.STOP_SOUND_LOOP, aIndex); + getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.STOP_SOUND_LOOP, aIndex); } @Override diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileClientEvents.java b/src/main/java/gregtech/api/metatileentity/MetaTileClientEvents.java deleted file mode 100644 index 6b70783470..0000000000 --- a/src/main/java/gregtech/api/metatileentity/MetaTileClientEvents.java +++ /dev/null @@ -1,12 +0,0 @@ -package gregtech.api.metatileentity; - -public class MetaTileClientEvents { - public static final byte CHANGE_COMMON_DATA = 0; - public static final byte CHANGE_CUSTOM_DATA = 1; - public static final byte CHANGE_COLOR = 2; - public static final byte CHANGE_REDSTONE_OUTPUT = 3; - public static final byte DO_SOUND = 4; - public static final byte START_SOUND_LOOP = 5; - public static final byte STOP_SOUND_LOOP = 6; - public static final byte CHANGE_LIGHT = 7; -} diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java index a065dcd50f..b70d616a58 100644 --- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java +++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java @@ -279,20 +279,20 @@ public abstract class MetaTileEntity implements IMetaTileEntity { @Override public final void sendSound(byte aIndex) { if (!getBaseMetaTileEntity().hasMufflerUpgrade()) - getBaseMetaTileEntity().sendBlockEvent(MetaTileClientEvents.DO_SOUND, aIndex); + getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.DO_SOUND, aIndex); } @Override public final void sendLoopStart(byte aIndex) { if (!getBaseMetaTileEntity().hasMufflerUpgrade()) - getBaseMetaTileEntity().sendBlockEvent(MetaTileClientEvents.START_SOUND_LOOP, aIndex); + getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.START_SOUND_LOOP, aIndex); mSoundRequests++; } @Override public final void sendLoopEnd(byte aIndex) { if (!getBaseMetaTileEntity().hasMufflerUpgrade()) - getBaseMetaTileEntity().sendBlockEvent(MetaTileClientEvents.STOP_SOUND_LOOP, aIndex); + getBaseMetaTileEntity().sendBlockEvent(GregTechTileClientEvents.STOP_SOUND_LOOP, aIndex); } /** diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java index bf87c03d79..12485806b3 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java @@ -452,7 +452,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity { final IFluidHandler fTileEntity = (tTileEntity instanceof IFluidHandler) ? (IFluidHandler) tTileEntity : null; if (fTileEntity != null) { - FluidTankInfo[] tInfo = fTileEntity.getTankInfo(ForgeDirection.getOrientation(tSide)); + final FluidTankInfo[] tInfo = fTileEntity.getTankInfo(ForgeDirection.getOrientation(tSide)); if (tInfo != null) { return tInfo.length > 0 || (GregTech_API.mTranslocator && isTranslocator(tTileEntity)) diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java index db4f5b7603..218e064f71 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java @@ -2,6 +2,7 @@ package gregtech.api.metatileentity.implementations; import gregtech.GT_Mod; import gregtech.api.enums.Dyes; +import gregtech.api.enums.GT_Values; import gregtech.api.enums.Materials; import gregtech.api.enums.OrePrefixes; import gregtech.api.interfaces.ITexture; @@ -338,7 +339,7 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE cacheSides = super.getAccessibleSlotsFromSide(aSide); return cacheSides; } else { - return new int[0]; + return GT_Values.emptyIntArray; } } diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java index 8a7c1c0e49..e5a48f706d 100644 --- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java +++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java @@ -10,6 +10,7 @@ import com.gtnewhorizon.structurelib.alignment.enumerable.Flip; import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation; import com.gtnewhorizon.structurelib.structure.IStructureDefinition; import cpw.mods.fml.common.network.NetworkRegistry; +import gregtech.api.interfaces.ISecondaryDescribable; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.util.GT_Multiblock_Tooltip_Builder; import net.minecraft.entity.player.EntityPlayer; @@ -17,6 +18,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraftforge.common.util.ForgeDirection; + /** * Enhanced multiblock base class, featuring following improvement over {@link GT_MetaTileEntity_MultiBlockBase} *

@@ -48,14 +50,13 @@ public abstract class GT_MetaTileEntity_EnhancedMultiBlockBase Client : Update cover data @@ -82,8 +80,8 @@ public class GT_Packet_SendCoverData extends GT_Packet_New { public void process(IBlockAccess aWorld) { if (aWorld != null) { TileEntity tile = aWorld.getTileEntity(mX, mY, mZ); - if (tile instanceof IGregTechTileEntity && !((IGregTechTileEntity) tile).isDead()) { - ((IGregTechTileEntity) tile).receiveCoverData(side, coverID, coverData, null); + if (tile instanceof CoverableTileEntity && !((CoverableTileEntity) tile).isDead()) { + ((CoverableTileEntity) tile).receiveCoverData(side, coverID, coverData, null); } } } diff --git a/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java b/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java index 8022b4f129..317cc04066 100644 --- a/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java +++ b/src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java @@ -26,6 +26,7 @@ public class GT_CopiedBlockTexture extends gregtech.common.render.GT_CopiedBlock this(aBlock, aSide, aMeta, Dyes._NULL.mRGBa); } + @Override public boolean isOldTexture() { return true; } diff --git a/src/main/java/gregtech/api/objects/GT_HashSet.java b/src/main/java/gregtech/api/objects/GT_HashSet.java index a8c0928d39..c0a8e3994d 100644 --- a/src/main/java/gregtech/api/objects/GT_HashSet.java +++ b/src/main/java/gregtech/api/objects/GT_HashSet.java @@ -8,31 +8,31 @@ import java.util.*; public class GT_HashSet extends AbstractSet { private static final Object OBJECT = new Object(); - private transient HashMap map; + private final transient HashMap map; public GT_HashSet() { - map = new HashMap(); + map = new HashMap<>(); GregTech_API.sItemStackMappings.add(map); } public GT_HashSet(Collection c) { - map = new HashMap(Math.max((int) (c.size() / .75f) + 1, 16)); + map = new HashMap<>(Math.max((int) (c.size() / .75f) + 1, 16)); addAll(c); GregTech_API.sItemStackMappings.add(map); } public GT_HashSet(int initialCapacity, float loadFactor) { - map = new HashMap(initialCapacity, loadFactor); + map = new HashMap<>(initialCapacity, loadFactor); GregTech_API.sItemStackMappings.add(map); } public GT_HashSet(int initialCapacity) { - map = new HashMap(initialCapacity); + map = new HashMap<>(initialCapacity); GregTech_API.sItemStackMappings.add(map); } GT_HashSet(int initialCapacity, float loadFactor, boolean dummy) { - map = new LinkedHashMap(initialCapacity, loadFactor); + map = new LinkedHashMap<>(initialCapacity, loadFactor); GregTech_API.sItemStackMappings.add(map); } diff --git a/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java b/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java index a5745749bb..1c72f9c9d9 100644 --- a/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java +++ b/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java @@ -241,14 +241,14 @@ public abstract class GT_CoverBehaviorBase { } /** - * If it lets Items into the Block, aSlot = -1 means if it is generally accepting Items (return false for no eraction at all), aSlot = -2 means if it would accept for all Slots Impl(return true to skip the Checks for each Slot). + * If it lets Items into the Block, aSlot = -1 means if it is generally accepting Items (return false for no reaction at all), aSlot = -2 means if it would accept for all Slots Impl(return true to skip the Checks for each Slot). */ public final boolean letsItemsIn(byte aSide, int aCoverID, ISerializableObject aCoverVariable, int aSlot, ICoverable aTileEntity) { return letsItemsInImpl(aSide, aCoverID, forceCast(aCoverVariable), aSlot, aTileEntity); } /** - * If it lets Items out of the Block, aSlot = -1 means if it is generally accepting Items (return false for no eraction at all), aSlot = -2 means if it would accept for all Slots Impl(return true to skip the Checks for each Slot). + * If it lets Items out of the Block, aSlot = -1 means if it is generally accepting Items (return false for no reaction at all), aSlot = -2 means if it would accept for all Slots Impl(return true to skip the Checks for each Slot). */ public final boolean letsItemsOut(byte aSide, int aCoverID, ISerializableObject aCoverVariable, int aSlot, ICoverable aTileEntity) { return letsItemsOutImpl(aSide, aCoverID, forceCast(aCoverVariable), aSlot, aTileEntity); diff --git a/src/main/java/gregtech/api/util/GT_LanguageManager.java b/src/main/java/gregtech/api/util/GT_LanguageManager.java index f6531f796b..2c2324aedd 100644 --- a/src/main/java/gregtech/api/util/GT_LanguageManager.java +++ b/src/main/java/gregtech/api/util/GT_LanguageManager.java @@ -24,8 +24,22 @@ public class GT_LanguageManager { public static String sLanguage = "en_US"; public static boolean sUseEnglishFile = false; public static boolean i18nPlaceholder = true; + + public static String + FACE_ANY = "gt.lang.face.any", + FACE_BOTTOM = "gt.lang.face.bottom", + FACE_TOP = "gt.lang.face.top", + FACE_LEFT = "gt.lang.face.left", + FACE_FRONT = "gt.lang.face.front", + FACE_RIGHT = "gt.lang.face.right", + FACE_BACK = "gt.lang.face.back", + FACE_NONE = "gt.lang.face.none"; + + public static String[] + FACES = {FACE_BOTTOM, FACE_TOP, FACE_LEFT, FACE_FRONT, FACE_RIGHT, FACE_BACK, FACE_NONE}; - public static String addStringLocalization(String aKey, String aEnglish) { + + public static String addStringLocalization(String aKey, String aEnglish) { return addStringLocalization(aKey, aEnglish, true); } @@ -370,6 +384,15 @@ public class GT_LanguageManager { addStringLocalization("Item_DESCRIPTION_Index_018", "State: %s"); addStringLocalization("Item_DESCRIPTION_Index_500", "Turbine Efficiency (Loose): %s"); addStringLocalization("Item_DESCRIPTION_Index_501", "Optimal Steam flow (Loose): %s L/t"); + + addStringLocalization(FACE_ANY, "Any Side"); + addStringLocalization(FACE_BOTTOM, "Bottom"); + addStringLocalization(FACE_TOP, "Top"); + addStringLocalization(FACE_LEFT, "Left"); + addStringLocalization(FACE_FRONT, "Front"); + addStringLocalization(FACE_RIGHT, "Right"); + addStringLocalization(FACE_BACK, "Back"); + addStringLocalization(FACE_NONE, "None"); } @SuppressWarnings("rawtypes, unchecked") diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java index b998bbbb38..65357e2f37 100644 --- a/src/main/java/gregtech/api/util/GT_Utility.java +++ b/src/main/java/gregtech/api/util/GT_Utility.java @@ -305,19 +305,28 @@ public class GT_Utility { } public static Object callConstructor(String aClass, int aConstructorIndex, Object aReplacementObject, boolean aLogErrors, Object... aParameters) { + try { + return callConstructor(Class.forName(aClass), aConstructorIndex, aReplacementObject, aLogErrors, aParameters); + } catch (Throwable e) { + if (aLogErrors) e.printStackTrace(GT_Log.err); + } + return aReplacementObject; + } + + public static Object callConstructor(Class aClass, int aConstructorIndex, Object aReplacementObject, boolean aLogErrors, Object... aParameters) { if (aConstructorIndex < 0) { try { - for (Constructor tConstructor : Class.forName(aClass).getConstructors()) { + for (Constructor tConstructor : aClass.getConstructors()) { try { return tConstructor.newInstance(aParameters); - } catch (Throwable e) {/*Do nothing*/} + } catch (Throwable ignored) {} } } catch (Throwable e) { if (aLogErrors) e.printStackTrace(GT_Log.err); } } else { try { - return Class.forName(aClass).getConstructors()[aConstructorIndex].newInstance(aParameters); + return aClass.getConstructors()[aConstructorIndex].newInstance(aParameters); } catch (Throwable e) { if (aLogErrors) e.printStackTrace(GT_Log.err); } @@ -1445,7 +1454,11 @@ public class GT_Utility { public static int stackToInt(ItemStack aStack) { if (isStackInvalid(aStack)) return 0; - return Item.getIdFromItem(aStack.getItem()) | (Items.feather.getDamage(aStack) << 16); + return itemToInt(aStack.getItem(), Items.feather.getDamage(aStack)); + } + + public static int itemToInt(Item aItem, int aMeta) { + return Item.getIdFromItem(aItem) | (aMeta << 16); } public static int stackToWildcard(ItemStack aStack) { @@ -1945,15 +1958,7 @@ public class GT_Utility { */ public static ItemStack loadItem(NBTTagCompound aNBT) { if (aNBT == null) return null; - ItemStack rStack = ItemStack.loadItemStackFromNBT(aNBT); - try { - if (rStack != null && (rStack.getItem().getClass().getName().startsWith("ic2.core.migration"))) { - rStack.getItem().onUpdate(rStack, DW, null, 0, false); - } - } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - return GT_OreDictUnificator.get(true, rStack); + return GT_OreDictUnificator.get(true, ItemStack.loadItemStackFromNBT(aNBT)); } /** @@ -2039,20 +2044,6 @@ public class GT_Utility { return !GregTech_API.sDimensionalList.contains(aDimensionID) && DimensionManager.isDimensionRegistered(aDimensionID); } - //public static boolean isRealDimension(int aDimensionID) { - // try { - // if (DimensionManager.getProvider(aDimensionID).getClass().getName().contains("com.xcompwiz.mystcraft")) - // return true; - // } catch (Throwable e) {/*Do nothing*/} - // try { - // if (DimensionManager.getProvider(aDimensionID).getClass().getName().contains("TwilightForest")) return true; - // } catch (Throwable e) {/*Do nothing*/} - // try { - // if (DimensionManager.getProvider(aDimensionID).getClass().getName().contains("galacticraft")) return true; - // } catch (Throwable e) {/*Do nothing*/} - // return GregTech_API.sDimensionalList.contains(aDimensionID); - //} - public static boolean moveEntityToDimensionAtCoords(Entity entity, int aDimension, double aX, double aY, double aZ) { //Credit goes to BrandonCore Author :!: @@ -2156,7 +2147,7 @@ public class GT_Utility { TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - Block tBlock = aWorld.getBlock(aX, aY, aZ); + final Block tBlock = aWorld.getBlock(aX, aY, aZ); tList.add( "----- X: " + EnumChatFormatting.AQUA + formatNumbers(aX) + EnumChatFormatting.RESET + @@ -2184,7 +2175,7 @@ public class GT_Utility { try { if (tTileEntity instanceof IFluidHandler) { rEUAmount += 500; - FluidTankInfo[] tTanks = ((IFluidHandler) tTileEntity).getTankInfo(ForgeDirection.getOrientation(aSide)); + final FluidTankInfo[] tTanks = ((IFluidHandler) tTileEntity).getTankInfo(ForgeDirection.getOrientation(aSide)); if (tTanks != null) for (byte i = 0; i < tTanks.length; i++) { tList.add( GT_Utility.trans("167","Tank ") + i + ": " + @@ -2218,7 +2209,7 @@ public class GT_Utility { } try { if (tTileEntity instanceof IAlignmentProvider) { - IAlignment tAlignment = ((IAlignmentProvider) tTileEntity).getAlignment(); + final IAlignment tAlignment = ((IAlignmentProvider) tTileEntity).getAlignment(); if (tAlignment != null) { rEUAmount += 100; tList.add(GT_Utility.trans("219", "Extended Facing: ") + EnumChatFormatting.GREEN + tAlignment.getExtendedFacing() + EnumChatFormatting.RESET); @@ -2236,32 +2227,6 @@ public class GT_Utility { } catch (Throwable e) { if (D1) e.printStackTrace(GT_Log.err); } - try { - if (tTileEntity instanceof ic2.api.energy.tile.IEnergyTile) { - rEUAmount += 200; - //aList.add(((ic2.api.energy.tile.IEnergyTile)tTileEntity).isAddedToEnergyNet()?"Added to E-net":"Not added to E-net! Bug?"); - } - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } - try { - if (tTileEntity instanceof ic2.api.energy.tile.IEnergySink) { - rEUAmount += 400; - //aList.add("Demanded Energy: " + ((ic2.api.energy.tile.IEnergySink)tTileEntity).demandsEnergy()); - //tList.add("Max Safe Input: " + getTier(((ic2.api.energy.tile.IEnergySink)tTileEntity).getSinkTier())); - //tList.add("Max Safe Input: " + ((ic2.api.energy.tile.IEnergySink)tTileEntity).getMaxSafeInput()); - } - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } - try { - if (tTileEntity instanceof ic2.api.energy.tile.IEnergySource) { - rEUAmount += 400; - //aList.add("Max Energy Output: " + ((ic2.api.energy.tile.IEnergySource)tTileEntity).getMaxEnergyOutput()); - } - } catch (Throwable e) { - if (D1) e.printStackTrace(GT_Log.err); - } try { if (tTileEntity instanceof ic2.api.energy.tile.IEnergyConductor) { rEUAmount += 200; @@ -2276,7 +2241,6 @@ public class GT_Utility { tList.add( GT_Utility.trans("176","Contained Energy: ") + EnumChatFormatting.YELLOW + formatNumbers(((ic2.api.tile.IEnergyStorage) tTileEntity).getStored()) + EnumChatFormatting.RESET + " EU / " + EnumChatFormatting.YELLOW + formatNumbers(((ic2.api.tile.IEnergyStorage) tTileEntity).getCapacity()) + EnumChatFormatting.RESET + " EU"); - //aList.add(((ic2.api.tile.IEnergyStorage)tTileEntity).isTeleporterCompatible(ic2.api.Direction.YP)?"Teleporter Compatible":"Not Teleporter Compatible"); } } catch (Throwable e) { if (D1) e.printStackTrace(GT_Log.err); @@ -2309,7 +2273,7 @@ public class GT_Utility { try { if (tTileEntity instanceof ICoverable) { rEUAmount += 300; - String tString = ((ICoverable) tTileEntity).getCoverBehaviorAtSideNew((byte) aSide).getDescription((byte) aSide, ((ICoverable) tTileEntity).getCoverIDAtSide((byte) aSide), ((ICoverable) tTileEntity).getComplexCoverDataAtSide((byte) aSide), (ICoverable) tTileEntity); + final String tString = ((ICoverable) tTileEntity).getCoverBehaviorAtSideNew((byte) aSide).getDescription((byte) aSide, ((ICoverable) tTileEntity).getCoverIDAtSide((byte) aSide), ((ICoverable) tTileEntity).getComplexCoverDataAtSide((byte) aSide), (ICoverable) tTileEntity); if (tString != null && !tString.equals(E)) tList.add(tString); } } catch (Throwable e) { @@ -2347,7 +2311,7 @@ public class GT_Utility { try { if (tTileEntity instanceof ic2.api.crops.ICropTile) { rEUAmount += 1000; - ic2.api.crops.ICropTile crop = (ic2.api.crops.ICropTile) tTileEntity; + final ic2.api.crops.ICropTile crop = (ic2.api.crops.ICropTile) tTileEntity; if (crop.getScanLevel() < 4) crop.setScanLevel((byte) 4); if (crop.getCrop() != null) { @@ -2367,11 +2331,11 @@ public class GT_Utility { + GT_Utility.trans("197"," Air-Quality: ") + crop.getAirQuality() ); if (crop.getCrop() != null) { - StringBuilder tStringB = new StringBuilder(); + final StringBuilder tStringB = new StringBuilder(); for (String tAttribute : crop.getCrop().attributes()) { tStringB.append(", ").append(tAttribute); } - String tString = tStringB.toString(); + final String tString = tStringB.toString(); tList.add(GT_Utility.trans("198","Attributes:") + tString.replaceFirst(",", E)); tList.add(GT_Utility.trans("199","Discovered by: ") + crop.getCrop().discoveredBy()); } @@ -2381,9 +2345,9 @@ public class GT_Utility { } } - Chunk currentChunk = aWorld.getChunkFromBlockCoords(aX, aZ); + final Chunk currentChunk = aWorld.getChunkFromBlockCoords(aX, aZ); if (aPlayer.capabilities.isCreativeMode) { - FluidStack tFluid = undergroundOilReadInformation(currentChunk);//-# to only read + final FluidStack tFluid = undergroundOilReadInformation(currentChunk);//-# to only read if (tFluid!=null) tList.add(EnumChatFormatting.GOLD + tFluid.getLocalizedName() + EnumChatFormatting.RESET + ": " + EnumChatFormatting.YELLOW + formatNumbers(tFluid.amount) + EnumChatFormatting.RESET + " L"); else @@ -2399,14 +2363,14 @@ public class GT_Utility { try { if (tBlock instanceof IDebugableBlock) { rEUAmount += 500; - ArrayList temp = ((IDebugableBlock) tBlock).getDebugInfo(aPlayer, aX, aY, aZ, 3); + final ArrayList temp = ((IDebugableBlock) tBlock).getDebugInfo(aPlayer, aX, aY, aZ, 3); if (temp != null) tList.addAll(temp); } } catch (Throwable e) { if (D1) e.printStackTrace(GT_Log.err); } - BlockScanningEvent tEvent = new BlockScanningEvent(aWorld, aPlayer, aX, aY, aZ, (byte) aSide, aScanLevel, tBlock, tTileEntity, tList, aClickX, aClickY, aClickZ); + final BlockScanningEvent tEvent = new BlockScanningEvent(aWorld, aPlayer, aX, aY, aZ, (byte) aSide, aScanLevel, tBlock, tTileEntity, tList, aClickX, aClickY, aClickZ); tEvent.mEUCost = rEUAmount; MinecraftForge.EVENT_BUS.post(tEvent); if (!tEvent.isCanceled()) aList.addAll(tList); @@ -3055,35 +3019,9 @@ public class GT_Utility { public static Optional reverseShapedRecipe(ItemStack output, Object... aRecipe) { if (output == null) { -// System.out.println("Null Recipe detected!"); return Optional.empty(); } -// System.out.println("Registering Reverse Recipe for: " + GT_LanguageManager.getTranslation(GT_LanguageManager.getTranslateableItemStackName(output) + "|" + output.getUnlocalizedName())); -// for (Object o : aRecipe) { -// String toPrint; -// if (o instanceof String) { -// toPrint = (String) o; -// toPrint += " String"; -// } else if (o instanceof ItemStack) { -// toPrint = GT_LanguageManager.getTranslation(GT_LanguageManager.getTranslateableItemStackName((ItemStack) o)); -// toPrint += " ItemStack"; -// } else if (o instanceof List) { -// toPrint = String.join(", ", ((List) o)); -// toPrint += " List"; -// } else if (o instanceof Item) { -// toPrint = GT_LanguageManager.getTranslation(GT_LanguageManager.getTranslateableItemStackName(new ItemStack((Item) o))); -// toPrint += " Item"; -// } else if (o instanceof Block) { -// toPrint = GT_LanguageManager.getTranslation(GT_LanguageManager.getTranslateableItemStackName(new ItemStack((Block) o))); -// toPrint += " Block"; -// } else if (o != null) { -// toPrint = o.toString(); -// toPrint += " Other"; -// } else { -// toPrint = "NULL"; -// } -// System.out.println(toPrint); -// } + Map recipeAsMap = new HashMap<>(); Map ingridients = new HashMap<>(); Map amounts = new HashMap<>(); @@ -3115,7 +3053,6 @@ public class GT_Utility { toAdd.stackSize = amount; inputs.add(toAdd); } else if (o.getKey() instanceof String) { -// System.out.println("Found OreDictEntry: "+o.getKey()); final String dictName = (String) o.getKey(); // Do not register tools dictName in inputs if (ToolDictNames.contains(dictName)) continue; @@ -3129,8 +3066,6 @@ public class GT_Utility { copy.stackSize = amount; inputs.add(copy); } -// else -// System.out.println("OreDict Entry "+o.getKey()+" couldn't be found!"); } else { ItemStack copy = stack.copy(); copy.stackSize = amount; diff --git a/src/main/java/gregtech/common/GT_Client.java b/src/main/java/gregtech/common/GT_Client.java index 9a9fb9c17e..92f4f2de59 100644 --- a/src/main/java/gregtech/common/GT_Client.java +++ b/src/main/java/gregtech/common/GT_Client.java @@ -1,6 +1,6 @@ // Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.kpdus.com/jad.html -// Decompiler options: packimports(3) +// Decompiler options: packimports(3) // Source File Name: GT_Client.java package gregtech.common; @@ -181,21 +181,14 @@ public class GT_Client extends GT_Proxy private static void drawGrid(DrawBlockHighlightEvent aEvent, boolean showCoverConnections, boolean aIsWrench, boolean aIsSneaking) { if (!checkedForChicken) { - try { - Class.forName("codechicken.lib.vec.Rotation"); - } catch (Throwable e) { - if (GT_Values.D1) { - e.printStackTrace(GT_Log.err); - } - return; - } + try {Class.forName("codechicken.lib.vec.Rotation");} catch (ClassNotFoundException e) {return;} checkedForChicken = true; } GL11.glPushMatrix(); GL11.glTranslated(-(aEvent.player.lastTickPosX + (aEvent.player.posX - aEvent.player.lastTickPosX) * (double) aEvent.partialTicks), -(aEvent.player.lastTickPosY + (aEvent.player.posY - aEvent.player.lastTickPosY) * (double) aEvent.partialTicks), -(aEvent.player.lastTickPosZ + (aEvent.player.posZ - aEvent.player.lastTickPosZ) * (double) aEvent.partialTicks)); GL11.glTranslated((float) aEvent.target.blockX + 0.5F, (float) aEvent.target.blockY + 0.5F, (float) aEvent.target.blockZ + 0.5F); - int tSideHit = aEvent.target.sideHit; + final int tSideHit = aEvent.target.sideHit; Rotation.sideRotations[tSideHit].glApply(); // draw grid GL11.glTranslated(0.0D, -0.501D, 0.0D); @@ -210,7 +203,7 @@ public class GT_Client extends GT_Proxy GL11.glVertex3d(+.25D, .0D, +.50D); GL11.glVertex3d(-.25D, .0D, -.50D); GL11.glVertex3d(-.25D, .0D, +.50D); - TileEntity tTile = aEvent.player.worldObj.getTileEntity(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); + final TileEntity tTile = aEvent.player.worldObj.getTileEntity(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); // draw connection indicators byte tConnections = 0; @@ -282,11 +275,10 @@ public class GT_Client extends GT_Proxy } GL11.glEnd(); // draw turning indicator - if (aIsWrench && tTile instanceof IGregTechTileEntity && - ((IGregTechTileEntity) tTile).getMetaTileEntity() instanceof IAlignmentProvider) { - IAlignment tAlignment = ((IAlignmentProvider) ((IGregTechTileEntity) tTile).getMetaTileEntity()).getAlignment(); + if (aIsWrench && tTile instanceof IAlignmentProvider) { + final IAlignment tAlignment = ((IAlignmentProvider)(tTile)).getAlignment(); if (tAlignment != null) { - ForgeDirection direction = tAlignment.getDirection(); + final ForgeDirection direction = tAlignment.getDirection(); if (direction.ordinal() == tSideHit) drawExtendedRotationMarker(ROTATION_MARKER_TRANSFORM_CENTER, aIsSneaking, false); else if (direction.getOpposite().ordinal() == tSideHit) { @@ -339,7 +331,7 @@ public class GT_Client extends GT_Proxy private static void drawFlipMarker(Transformation transform) { GL11.glPushMatrix(); transform.glApply(); - Tessellator t = Tessellator.instance; + final Tessellator t = Tessellator.instance; // right shape GL11.glLineStipple(4, (short) 0xAAAA); GL11.glEnable(GL11.GL_LINE_STIPPLE); @@ -405,7 +397,7 @@ public class GT_Client extends GT_Proxy @Override public void onPreLoad() { super.onPreLoad(); - String[] arr = { + final String[] arr = { "renadi", "hanakocz", "MysteryDump", "Flaver4", "x_Fame", "Peluche321", "Goshen_Ithilien", "manf", "Bimgo", "leagris", "IAmMinecrafter02", "Cerous", "Devilin_Pixy", "Bkarlsson87", "BadAlchemy", "CaballoCraft", "melanclock", "Resursator", "demanzke", "AndrewAmmerlaan", "Deathlycraft", "Jirajha", "Axlegear", "kei_kouma", "Dracion", "dungi", "Dorfschwein", "Zero Tw0", "mattiagraz85", "sebastiank30", @@ -445,7 +437,7 @@ public class GT_Client extends GT_Proxy @Override public void onPostLoad() { super.onPostLoad(); - + try { for (int i = 1; i < GregTech_API.METATILEENTITIES.length; i++) { try { @@ -472,7 +464,7 @@ public class GT_Client extends GT_Proxy @Override public void run() { GT_Log.out.println("GT_Mod: Downloading Cape List."); - try (Scanner tScanner = new Scanner(new URL(GT_CAPE_LIST_URL).openStream())) { + try (final Scanner tScanner = new Scanner(new URL(GT_CAPE_LIST_URL).openStream())) { while (tScanner.hasNextLine()) { this.mCapeList.add(tScanner.nextLine().toLowerCase()); } @@ -480,9 +472,9 @@ public class GT_Client extends GT_Proxy e.printStackTrace(GT_Log.err); } GT_Log.out.println("GT New Horizons: Downloading Cape List."); - try (Scanner tScanner = new Scanner(new URL(GTNH_CAPE_LIST_URL).openStream())) { + try (final Scanner tScanner = new Scanner(new URL(GTNH_CAPE_LIST_URL).openStream())) { while (tScanner.hasNextLine()) { - String tName = tScanner.nextLine().toLowerCase(); + final String tName = tScanner.nextLine().toLowerCase(); if (tName.contains(":")) { if (!this.mCapeList.contains(tName.substring(0, tName.indexOf(":")))) { this.mCapeList.add(tName); @@ -541,7 +533,7 @@ public class GT_Client extends GT_Proxy } if (!GregTech_API.mServerStarted) GregTech_API.mServerStarted = true; if (GT_Values.updateFluidDisplayItems) { - MovingObjectPosition trace = Minecraft.getMinecraft().objectMouseOver; + final MovingObjectPosition trace = Minecraft.getMinecraft().objectMouseOver; if (trace != null && trace.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK && (mLastUpdatedBlockX != trace.blockX && mLastUpdatedBlockY != trace.blockY && @@ -549,9 +541,9 @@ public class GT_Client extends GT_Proxy mLastUpdatedBlockX = trace.blockX; mLastUpdatedBlockY = trace.blockY; mLastUpdatedBlockZ = trace.blockZ; - TileEntity tileEntity = aEvent.player.worldObj.getTileEntity(trace.blockX, trace.blockY, trace.blockZ); + final TileEntity tileEntity = aEvent.player.worldObj.getTileEntity(trace.blockX, trace.blockY, trace.blockZ); if (tileEntity instanceof IGregTechTileEntity) { - IGregTechTileEntity gtTile = (IGregTechTileEntity) tileEntity; + final IGregTechTileEntity gtTile = (IGregTechTileEntity) tileEntity; if (gtTile.getMetaTileEntity() instanceof IHasFluidDisplayItem) { GT_Values.NW.sendToServer(new MessageUpdateFluidDisplayItem(trace.blockX, trace.blockY, trace.blockZ, gtTile.getWorld().provider.dimensionId)); } @@ -575,11 +567,10 @@ public class GT_Client extends GT_Proxy @SubscribeEvent public void onDrawBlockHighlight(DrawBlockHighlightEvent aEvent) { - Block aBlock = aEvent.player.worldObj.getBlock(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); - TileEntity aTileEntity = aEvent.player.worldObj.getTileEntity(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); + final Block aBlock = aEvent.player.worldObj.getBlock(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); + final TileEntity aTileEntity = aEvent.player.worldObj.getTileEntity(aEvent.target.blockX, aEvent.target.blockY, aEvent.target.blockZ); - if (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWrenchList)) - { + if (GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sWrenchList)) { if (aTileEntity instanceof ITurnable || ROTATABLE_VANILLA_BLOCKS.contains(aBlock) || aTileEntity instanceof IWrenchable) drawGrid(aEvent, false, true, aEvent.player.isSneaking()); return; @@ -629,7 +620,7 @@ public class GT_Client extends GT_Proxy public void onClientTickEvent(cpw.mods.fml.common.gameevent.TickEvent.ClientTickEvent aEvent) { if (aEvent.phase == cpw.mods.fml.common.gameevent.TickEvent.Phase.END) { if (changeDetected > 0) changeDetected--; - int newHideValue = shouldHeldItemHideThings(); + final int newHideValue = shouldHeldItemHideThings(); if (newHideValue != hideValue) { hideValue = newHideValue; changeDetected = 5; @@ -638,9 +629,8 @@ public class GT_Client extends GT_Proxy if (mAnimationTick % 50L == 0L) { mAnimationDirection = !mAnimationDirection; } - int tDirection = mAnimationDirection ? 1 : -1; - for (Object o : mPosR) { - Materials tMaterial = (Materials) o; + final int tDirection = mAnimationDirection ? 1 : -1; + for (Materials tMaterial : mPosR) { tMaterial.mRGBa[0] = getSafeRGBValue(tMaterial.mRGBa[0], tDirection); } @@ -738,55 +728,55 @@ public class GT_Client extends GT_Proxy if (tString.startsWith("streaming.")) switch (aStack.stackSize) { case 1: // '\001' - tString = (new StringBuilder()).append(tString).append("13").toString(); + tString = tString + "13"; break; case 2: // '\002' - tString = (new StringBuilder()).append(tString).append("cat").toString(); + tString = tString + "cat"; break; case 3: // '\003' - tString = (new StringBuilder()).append(tString).append("blocks").toString(); + tString = tString + "blocks"; break; case 4: // '\004' - tString = (new StringBuilder()).append(tString).append("chirp").toString(); + tString = tString + "chirp"; break; case 5: // '\005' - tString = (new StringBuilder()).append(tString).append("far").toString(); + tString = tString + "far"; break; case 6: // '\006' - tString = (new StringBuilder()).append(tString).append("mall").toString(); + tString = tString + "mall"; break; case 7: // '\007' - tString = (new StringBuilder()).append(tString).append("mellohi").toString(); + tString = tString + "mellohi"; break; case 8: // '\b' - tString = (new StringBuilder()).append(tString).append("stal").toString(); + tString = tString + "stal"; break; case 9: // '\t' - tString = (new StringBuilder()).append(tString).append("strad").toString(); + tString = tString + "strad"; break; case 10: // '\n' - tString = (new StringBuilder()).append(tString).append("ward").toString(); + tString = tString + "ward"; break; case 11: // '\013' - tString = (new StringBuilder()).append(tString).append("11").toString(); + tString = tString + "11"; break; case 12: // '\f' - tString = (new StringBuilder()).append(tString).append("wait").toString(); + tString = tString + "wait"; break; default: - tString = (new StringBuilder()).append(tString).append("wherearewenow").toString(); + tString = tString + "wherearewenow"; break; } if (tString.startsWith("streaming.")) { @@ -815,11 +805,11 @@ public class GT_Client extends GT_Proxy private static int shouldHeldItemHideThings() { try { - EntityPlayer player = Minecraft.getMinecraft().thePlayer; + final EntityPlayer player = Minecraft.getMinecraft().thePlayer; if (player == null) return 0; - ItemStack tCurrentItem = player.getCurrentEquippedItem(); + final ItemStack tCurrentItem = player.getCurrentEquippedItem(); if (tCurrentItem == null) return 0; - int[] ids = OreDictionary.getOreIDs(tCurrentItem); + final int[] ids = OreDictionary.getOreIDs(tCurrentItem); int hide = 0; for (int i : ids) { if (OreDictionary.getOreName(i).equals("craftingToolSolderingIron")) { diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java index 40b7381e48..34c1cc3a41 100644 --- a/src/main/java/gregtech/common/GT_Proxy.java +++ b/src/main/java/gregtech/common/GT_Proxy.java @@ -406,6 +406,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler { ItemList.RC_Bed_Wood.set(GT_ModHandler.getModItem(MOD_ID_RC, "part.railbed", 1L, 0)); ItemList.RC_Bed_Stone.set(GT_ModHandler.getModItem(MOD_ID_RC, "part.railbed", 1L, 1)); ItemList.RC_Rebar.set(GT_ModHandler.getModItem(MOD_ID_RC, "part.rebar", 1L)); + ItemList.TC_Thaumometer.set(GT_ModHandler.getModItem(MOD_ID_TC, "ItemThaumometer", 1L, 0)); ItemList.Tool_Sword_Steel.set(GT_ModHandler.getModItem(MOD_ID_RC, "tool.steel.sword", 1L)); ItemList.Tool_Pickaxe_Steel.set(GT_ModHandler.getModItem(MOD_ID_RC, "tool.steel.pickaxe", 1L)); ItemList.Tool_Shovel_Steel.set(GT_ModHandler.getModItem(MOD_ID_RC, "tool.steel.shovel", 1L)); diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java index ad97bb9572..851b84b5c3 100644 --- a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java +++ b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java @@ -9,11 +9,13 @@ import gregtech.api.enums.Textures; import gregtech.api.interfaces.IDebugableBlock; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.ICoverable; +import gregtech.api.interfaces.tileentity.IDebugableTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; import gregtech.api.items.GT_Generic_Block; import gregtech.api.metatileentity.BaseMetaPipeEntity; import gregtech.api.metatileentity.BaseMetaTileEntity; import gregtech.api.metatileentity.BaseTileEntity; +import gregtech.api.metatileentity.CoverableTileEntity; import gregtech.api.util.GT_BaseCrop; import gregtech.api.util.GT_Log; import gregtech.api.util.GT_Utility; @@ -48,6 +50,7 @@ import java.util.Collections; import java.util.List; import static gregtech.GT_Mod.GT_FML_LOGGER; +import static gregtech.api.enums.GT_Values.SIDE_UP; import static gregtech.api.objects.XSTR.XSTR_INSTANCE; @Optional.Interface(iface = "com.cricketcraft.chisel.api.IFacade", modid = "ChiselAPI") @@ -87,7 +90,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public void onNeighborChange(IBlockAccess aWorld, int aX, int aY, int aZ, int aTileX, int aTileY, int aTileZ) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if ((tTileEntity instanceof BaseTileEntity)) { ((BaseTileEntity) tTileEntity).onAdjacentBlockChange(aTileX, aTileY, aTileZ); } @@ -95,7 +98,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public void onNeighborBlockChange(World aWorld, int aX, int aY, int aZ, Block aBlock) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if ((tTileEntity instanceof BaseMetaPipeEntity)) { ((BaseMetaPipeEntity) tTileEntity).onNeighborBlockChange(aX, aY, aZ); } @@ -217,7 +220,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public boolean onBlockEventReceived(World aWorld, int aX, int aY, int aZ, int aData1, int aData2) { super.onBlockEventReceived(aWorld, aX, aY, aZ, aData1, aData2); - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); return tTileEntity != null && tTileEntity.receiveClientEvent(aData1, aData2); } @@ -225,7 +228,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public void addCollisionBoxesToList( World aWorld, int aX, int aY, int aZ, AxisAlignedBB inputAABB, List outputAABB, Entity collider) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null) { ((IGregTechTileEntity) tTileEntity) @@ -237,7 +240,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public AxisAlignedBB getCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null) { return ((IGregTechTileEntity) tTileEntity).getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); @@ -248,7 +251,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override @SideOnly(Side.CLIENT) public AxisAlignedBB getSelectedBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null) { return ((IGregTechTileEntity) tTileEntity).getCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ); @@ -258,12 +261,9 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override //THIS public void setBlockBoundsBasedOnState(IBlockAccess blockAccess, int aX, int aY, int aZ) { - TileEntity tTileEntity = blockAccess.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity && - (((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null)) { - AxisAlignedBB bbb = ((IGregTechTileEntity) tTileEntity) - .getCollisionBoundingBoxFromPool( - ((IGregTechTileEntity) tTileEntity).getWorld(), 0, 0, 0); + final TileEntity tTileEntity = blockAccess.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IGregTechTileEntity && (((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null)) { + final AxisAlignedBB bbb = ((IGregTechTileEntity) tTileEntity).getCollisionBoundingBoxFromPool(((IGregTechTileEntity) tTileEntity).getWorld(), 0, 0, 0); minX = bbb.minX; //This essentially sets block bounds minY = bbb.minY; minZ = bbb.minZ; @@ -282,7 +282,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public void onEntityCollidedWithBlock(World aWorld, int aX, int aY, int aZ, Entity collider) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity && ((IGregTechTileEntity) tTileEntity).getMetaTileEntity() != null) { ((IGregTechTileEntity) tTileEntity).onEntityCollidedWithBlock(aWorld, aX, aY, aZ, collider); @@ -331,7 +331,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public float getPlayerRelativeBlockHardness(EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); return tTileEntity instanceof BaseMetaTileEntity && ((BaseMetaTileEntity) tTileEntity).privateAccess() && !((BaseMetaTileEntity) tTileEntity).playerOwnsThis(aPlayer, true) ? @@ -339,14 +339,13 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo } @Override - public boolean onBlockActivated( - World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer, int aSide, float par1, float par2, float par3) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + public boolean onBlockActivated(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer, int aSide, float par1, float par2, float par3) { + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity == null) { return false; } if (aPlayer.isSneaking()) { - ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); + final ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem(); if ( tCurrentItem != null && !GT_Utility.isStackInList(tCurrentItem, GregTech_API.sScrewdriverList) && @@ -369,7 +368,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public void onBlockClicked(World aWorld, int aX, int aY, int aZ, EntityPlayer aPlayer) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity) { ((IGregTechTileEntity) tTileEntity).onLeftclick(aPlayer); } @@ -377,7 +376,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public int getDamageValue(World aWorld, int aX, int aY, int aZ) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity) { return ((IGregTechTileEntity) tTileEntity).getMetaTileID(); } @@ -386,10 +385,9 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public void onBlockExploded(World aWorld, int aX, int aY, int aZ, Explosion aExplosion) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof BaseMetaTileEntity) { - GT_Log.exp.printf("Explosion at : %d | %d | %d DIMID: %s due to near explosion!%n", - aX, aY, aZ, aWorld.provider.dimensionId); + GT_Log.exp.printf("Explosion at : %d | %d | %d DIMID: %s due to near explosion!%n", aX, aY, aZ, aWorld.provider.dimensionId); ((BaseMetaTileEntity) tTileEntity).doEnergyExplosion(); } super.onBlockExploded(aWorld, aX, aY, aZ, aExplosion); @@ -398,19 +396,20 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public void breakBlock(World aWorld, int aX, int aY, int aZ, Block par5, int par6) { GregTech_API.causeMachineUpdate(aWorld, aX, aY, aZ); - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity) { - IGregTechTileEntity tGregTechTileEntity = (IGregTechTileEntity) tTileEntity; + final IGregTechTileEntity tGregTechTileEntity = (IGregTechTileEntity) tTileEntity; mTemporaryTileEntity.set(tGregTechTileEntity); if (!(tGregTechTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_SuperChest || tGregTechTileEntity.getMetaTileEntity() instanceof GT_MetaTileEntity_QuantumChest)) { for (int i = 0; i < tGregTechTileEntity.getSizeInventory(); i++) { - ItemStack tItem = tGregTechTileEntity.getStackInSlot(i); + final ItemStack tItem = tGregTechTileEntity.getStackInSlot(i); if ((tItem != null) && (tItem.stackSize > 0) && (tGregTechTileEntity.isValidSlot(i))) { - EntityItem tItemEntity = new EntityItem(aWorld, - aX + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, - aY + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, - aZ + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, - new ItemStack(tItem.getItem(), tItem.stackSize, tItem.getItemDamage())); + final EntityItem tItemEntity = new EntityItem( + aWorld, + aX + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, + aY + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, + aZ + XSTR_INSTANCE.nextFloat() * 0.8F + 0.1F, + new ItemStack(tItem.getItem(), tItem.stackSize, tItem.getItemDamage())); if (tItem.hasTagCompound()) { tItemEntity.getEntityItem().setTagCompound((NBTTagCompound) tItem.getTagCompound().copy()); } @@ -430,12 +429,12 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public ArrayList getDrops(World aWorld, int aX, int aY, int aZ, int aMeta, int aFortune) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if ((tTileEntity instanceof IGregTechTileEntity)) { return ((IGregTechTileEntity) tTileEntity).getDrops(); } - IGregTechTileEntity tGregTechTileEntity = mTemporaryTileEntity.get(); - ArrayList tDrops; + final IGregTechTileEntity tGregTechTileEntity = mTemporaryTileEntity.get(); + final ArrayList tDrops; if (tGregTechTileEntity == null) { tDrops = (ArrayList) Collections.emptyList(); } else { @@ -459,7 +458,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public int getComparatorInputOverride(World aWorld, int aX, int aY, int aZ, int aSide) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity) { return ((IGregTechTileEntity) tTileEntity).getComparatorValue((byte) aSide); } @@ -471,7 +470,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo if (aSide < 0 || aSide > 5) { return 0; } - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity) { return ((IGregTechTileEntity) tTileEntity).getOutputRedstoneSignal(GT_Utility.getOppositeSide(aSide)); } @@ -483,7 +482,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo if (aSide < 0 || aSide > 5) { return 0; } - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity) { return ((IGregTechTileEntity) tTileEntity).getStrongOutputRedstoneSignal(GT_Utility.getOppositeSide(aSide)); } @@ -493,7 +492,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public void dropBlockAsItemWithChance(World aWorld, int aX, int aY, int aZ, int par5, float chance, int par7) { if (!aWorld.isRemote) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity != null && (chance < 1.0F)) { if (tTileEntity instanceof BaseMetaTileEntity && (GregTech_API.sMachineNonWrenchExplosions)) { GT_Log.exp.printf("Explosion at : %d | %d | %d DIMID: %s NonWrench picking/Rain!%n", @@ -511,7 +510,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo if (aWorld.getBlockMetadata(aX, aY, aZ) == 0) { return true; } - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity != null) { if (tTileEntity instanceof BaseMetaTileEntity) { return true; @@ -543,7 +542,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public int getLightOpacity(IBlockAccess aWorld, int aX, int aY, int aZ) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity) { return ((IGregTechTileEntity) tTileEntity).getLightOpacity(); } @@ -552,7 +551,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public int getLightValue(IBlockAccess aWorld, int aX, int aY, int aZ) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof BaseMetaTileEntity) { return ((BaseMetaTileEntity) tTileEntity).getLightValue(); } @@ -571,7 +570,7 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo public float getExplosionResistance( Entity par1Entity, World aWorld, int aX, int aY, int aZ, double explosionX, double explosionY, double explosionZ) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity) { return ((IGregTechTileEntity) tTileEntity).getBlastResistance((byte) 6); } @@ -591,58 +590,24 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public void onBlockPlacedBy(World aWorld, int aX, int aY, int aZ, EntityLivingBase aPlayer, ItemStack aStack) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (!(tTileEntity instanceof IGregTechTileEntity)) { - return; - } - IGregTechTileEntity iGregTechTileEntity = (IGregTechTileEntity) tTileEntity; - if (aPlayer == null) { - iGregTechTileEntity.setFrontFacing((byte) ForgeDirection.UP.ordinal()); - return; - } - int yawQuadrant = MathHelper.floor_double(aPlayer.rotationYaw * 4.0F / 360.0F + 0.5D) & 0x3; - int pitch = Math.round(aPlayer.rotationPitch); - if (pitch >= 65 && iGregTechTileEntity.isValidFacing((byte) ForgeDirection.UP.ordinal())) { - iGregTechTileEntity.setFrontFacing((byte) ForgeDirection.UP.ordinal()); - return; - } - if (pitch <= -65 && iGregTechTileEntity.isValidFacing((byte) ForgeDirection.DOWN.ordinal())) { - iGregTechTileEntity.setFrontFacing((byte) ForgeDirection.DOWN.ordinal()); - return; - } - switch (yawQuadrant) { - case 0: - iGregTechTileEntity.setFrontFacing((byte) ForgeDirection.NORTH.ordinal()); - break; - case 1: - iGregTechTileEntity.setFrontFacing((byte) ForgeDirection.EAST.ordinal()); - break; - case 2: - iGregTechTileEntity.setFrontFacing((byte) ForgeDirection.SOUTH.ordinal()); - break; - case 3: - iGregTechTileEntity.setFrontFacing((byte) ForgeDirection.WEST.ordinal()); - break; - default: - break; - } + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (!(tTileEntity instanceof IGregTechTileEntity)) return; + final IGregTechTileEntity iGregTechTileEntity = (IGregTechTileEntity) tTileEntity; + iGregTechTileEntity.setFrontFacing(BaseTileEntity.getSideForPlayerPlacing(aPlayer, SIDE_UP, iGregTechTileEntity.getValidFacings())); } @Override - public ArrayList getDebugInfo(EntityPlayer aPlayer, int aX, int aY, int aZ, int aLogLevel) { - TileEntity tTileEntity = aPlayer.worldObj.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof BaseMetaTileEntity) { - return ((BaseMetaTileEntity) tTileEntity).getDebugInfo(aPlayer, aLogLevel); - } - if (tTileEntity instanceof BaseMetaPipeEntity) { - return ((BaseMetaPipeEntity) tTileEntity).getDebugInfo(aPlayer, aLogLevel); + public ArrayList getDebugInfo(EntityPlayer aPlayer, int aX, int aY, int aZ, int aLogLevel) { + final TileEntity tTileEntity = aPlayer.worldObj.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof IDebugableTileEntity) { + return ((IDebugableTileEntity) tTileEntity).getDebugInfo(aPlayer, aLogLevel); } return (ArrayList) Collections.emptyList(); } @Override public boolean recolourBlock(World aWorld, int aX, int aY, int aZ, ForgeDirection aSide, int aColor) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity instanceof IGregTechTileEntity) { if (((IGregTechTileEntity) tTileEntity).getColorization() == (byte) ((~aColor) & 0xF)) { return false; @@ -655,18 +620,18 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public Block getFacade(IBlockAccess aWorld, int aX, int aY, int aZ, int side) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity) { - byte aSide = (byte) side; - IGregTechTileEntity tile = (IGregTechTileEntity) tTileEntity; + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof CoverableTileEntity) { + final byte aSide = (byte) side; + final CoverableTileEntity tile = (CoverableTileEntity) tTileEntity; if (side != -1) { - Block facadeBlock = tile.getCoverBehaviorAtSideNew(aSide).getFacadeBlock(aSide, tile.getCoverIDAtSide(aSide), tile.getComplexCoverDataAtSide(aSide), tile); + final Block facadeBlock = tile.getCoverBehaviorAtSideNew(aSide).getFacadeBlock(aSide, tile.getCoverIDAtSide(aSide), tile.getComplexCoverDataAtSide(aSide), tile); if (facadeBlock != null) return facadeBlock; } else { // we do not allow more than one type of facade per block, so no need to check every side // see comment in gregtech.common.covers.GT_Cover_FacadeBase.isCoverPlaceable for (byte i = 0; i < 6; i++) { - Block facadeBlock = tile.getCoverBehaviorAtSideNew(i).getFacadeBlock(i, tile.getCoverIDAtSide(i), tile.getComplexCoverDataAtSide(i), tile); + final Block facadeBlock = tile.getCoverBehaviorAtSideNew(i).getFacadeBlock(i, tile.getCoverIDAtSide(i), tile.getComplexCoverDataAtSide(i), tile); if (facadeBlock != null) { return facadeBlock; } @@ -678,19 +643,19 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo @Override public int getFacadeMetadata(IBlockAccess aWorld, int aX, int aY, int aZ, int side) { - TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); - if (tTileEntity instanceof IGregTechTileEntity) { - byte aSide = (byte) side; - IGregTechTileEntity tile = (IGregTechTileEntity) tTileEntity; + final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ); + if (tTileEntity instanceof CoverableTileEntity) { + final byte aSide = (byte) side; + final CoverableTileEntity tile = (CoverableTileEntity) tTileEntity; if (side != -1) { - Block facadeBlock = tile.getCoverBehaviorAtSideNew(aSide).getFacadeBlock(aSide, tile.getCoverIDAtSide(aSide), tile.getComplexCoverDataAtSide(aSide), tile); + final Block facadeBlock = tile.getCoverBehaviorAtSideNew(aSide).getFacadeBlock(aSide, tile.getCoverIDAtSide(aSide), tile.getComplexCoverDataAtSide(aSide), tile); if (facadeBlock != null) return tile.getCoverBehaviorAtSideNew(aSide).getFacadeMeta(aSide, tile.getCoverIDAtSide(aSide), tile.getComplexCoverDataAtSide(aSide), tile); } else { // we do not allow more than one type of facade per block, so no need to check every side // see comment in gregtech.common.covers.GT_Cover_FacadeBase.isCoverPlaceable for (byte i = 0; i < 6; i++) { - Block facadeBlock = tile.getCoverBehaviorAtSideNew(i).getFacadeBlock(i, tile.getCoverIDAtSide(i), tile.getComplexCoverDataAtSide(i), tile); + final Block facadeBlock = tile.getCoverBehaviorAtSideNew(i).getFacadeBlock(i, tile.getCoverIDAtSide(i), tile.getComplexCoverDataAtSide(i), tile); if (facadeBlock != null) { return tile.getCoverBehaviorAtSideNew(i).getFacadeMeta(i, tile.getCoverIDAtSide(i), tile.getComplexCoverDataAtSide(i), tile); } diff --git a/src/main/java/gregtech/common/blocks/GT_Item_Machines.java b/src/main/java/gregtech/common/blocks/GT_Item_Machines.java index cc49cefa2b..c98b37085e 100644 --- a/src/main/java/gregtech/common/blocks/GT_Item_Machines.java +++ b/src/main/java/gregtech/common/blocks/GT_Item_Machines.java @@ -7,7 +7,7 @@ import gregtech.api.interfaces.ISecondaryDescribable; import gregtech.api.interfaces.metatileentity.IConnectable; import gregtech.api.interfaces.metatileentity.IMetaTileEntity; import gregtech.api.interfaces.tileentity.IGregTechTileEntity; -import gregtech.api.metatileentity.CoverableGregTechTileEntity; +import gregtech.api.metatileentity.CoverableTileEntity; import gregtech.api.metatileentity.MetaTileEntity; import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Cable; import gregtech.api.metatileentity.implementations.GT_MetaPipeEntity_Fluid; @@ -36,10 +36,9 @@ import net.minecraftforge.fluids.IFluidContainerItem; import java.util.List; -public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { - - private static final String[] directionNames = {"Bottom", "Top", "North", "South", "West", "East"}; +import static gregtech.GT_Mod.GT_FML_LOGGER; +public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { public GT_Item_Machines(Block par1) { super(par1); setMaxDamage(0); @@ -58,15 +57,16 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { } @Override + @SuppressWarnings("unchecked") public void addInformation(ItemStack aStack, EntityPlayer aPlayer, List aList, boolean par4) { try { - int tDamage = getDamage(aStack); + final int tDamage = getDamage(aStack); if ((tDamage <= 0) || (tDamage >= GregTech_API.METATILEENTITIES.length)) { return; } if (GregTech_API.METATILEENTITIES[tDamage] != null) { - IGregTechTileEntity tTileEntity = GregTech_API.METATILEENTITIES[tDamage].getBaseMetaTileEntity(); + final IGregTechTileEntity tTileEntity = GregTech_API.METATILEENTITIES[tDamage].getBaseMetaTileEntity(); if (!GregTech_API.sPostloadFinished && tTileEntity.getMetaTileEntity() instanceof ISecondaryDescribable) { final String[] secondaryDescription = ((ISecondaryDescribable) tTileEntity.getMetaTileEntity()).getSecondaryDescription(); if (secondaryDescription != null) { @@ -93,32 +93,33 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { } if (tTileEntity.getDescription() != null) { int i = 0; - IMetaTileEntity metaTileEntity = tTileEntity.getMetaTileEntity(); - String suffix = (metaTileEntity instanceof ISecondaryDescribable && ((ISecondaryDescribable) metaTileEntity).isDisplaySecondaryDescription()) ? "_Secondary" : ""; + final IMetaTileEntity metaTileEntity = tTileEntity.getMetaTileEntity(); + final String suffix = (metaTileEntity instanceof ISecondaryDescribable && ((ISecondaryDescribable) metaTileEntity).isDisplaySecondaryDescription()) ? "_Secondary" : ""; for (String tDescription : tTileEntity.getDescription()) { if (GT_Utility.isStringValid(tDescription)) { if(tDescription.contains("%%%")){ - String[] tString = tDescription.split("%%%"); + final String[] tString = tDescription.split("%%%"); if(tString.length>=2){ - StringBuilder tBuffer = new StringBuilder(); - String[] tRep = new String[tString.length / 2]; + final StringBuilder tBuffer = new StringBuilder(); + final String[] tRep = new String[tString.length / 2]; for (int j = 0; j < tString.length; j++) if (j % 2 == 0) tBuffer.append(tString[j]); else {tBuffer.append(" %s"); tRep[j / 2] = tString[j];} aList.add(String.format(GT_LanguageManager.addStringLocalization("TileEntity_DESCRIPTION_" + tDamage + suffix + "_Index_" + i++, tBuffer.toString(), !GregTech_API.sPostloadFinished ), (Object[]) tRep)); } - }else{String tTranslated = GT_LanguageManager.addStringLocalization("TileEntity_DESCRIPTION_" + tDamage + suffix + "_Index_" + i++, tDescription, !GregTech_API.sPostloadFinished ); + }else{ + String tTranslated = GT_LanguageManager.addStringLocalization("TileEntity_DESCRIPTION_" + tDamage + suffix + "_Index_" + i++, tDescription, !GregTech_API.sPostloadFinished ); aList.add(tTranslated.equals("") ? tDescription : tTranslated);} }else i++; } } if (tTileEntity.getEUCapacity() > 0L) { if (tTileEntity.getInputVoltage() > 0L) { - int inputTier = GT_Utility.getTier(tTileEntity.getInputVoltage()); + final int inputTier = GT_Utility.getTier(tTileEntity.getInputVoltage()); aList.add(GT_LanguageManager.addStringLocalization("TileEntity_EUp_IN", "Voltage IN: ", !GregTech_API.sPostloadFinished ) + EnumChatFormatting.GREEN + GT_Utility.formatNumbers(tTileEntity.getInputVoltage()) + " (" + GT_Values.TIER_COLORS[inputTier] + GT_Values.VN[inputTier] + EnumChatFormatting.GREEN +")" + EnumChatFormatting.GRAY); } if (tTileEntity.getOutputVoltage() > 0L) { - int outputTier = GT_Utility.getTier(tTileEntity.getOutputVoltage()); + final int outputTier = GT_Utility.getTier(tTileEntity.getOutputVoltage()); aList.add(GT_LanguageManager.addStringLocalization("TileEntity_EUp_OUT", "Voltage OUT: ", !GregTech_API.sPostloadFinished ) + EnumChatFormatting.GREEN + GT_Utility.formatNumbers(tTileEntity.getOutputVoltage()) + " (" + GT_Values.TIER_COLORS[outputTier] + GT_Values.VN[outputTier] + EnumChatFormatting.GREEN + ")" + EnumChatFormatting.GRAY); } if (tTileEntity.getOutputAmperage() > 1L) { @@ -128,7 +129,7 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { } if (GregTech_API.METATILEENTITIES[tDamage] instanceof GT_MetaTileEntity_QuantumTank || GregTech_API.METATILEENTITIES[tDamage] instanceof GT_MetaTileEntity_SuperTank) { if (aStack.hasTagCompound() && aStack.stackTagCompound.hasKey("mFluid")) { - FluidStack tContents = FluidStack.loadFluidStackFromNBT(aStack.stackTagCompound.getCompoundTag("mFluid")); + final FluidStack tContents = FluidStack.loadFluidStackFromNBT(aStack.stackTagCompound.getCompoundTag("mFluid")); if (tContents != null && tContents.amount > 0) { aList.add(GT_LanguageManager.addStringLocalization("TileEntity_TANK_INFO", "Contains Fluid: ", !GregTech_API.sPostloadFinished ) + EnumChatFormatting.YELLOW + tContents.getLocalizedName() + EnumChatFormatting.GRAY); aList.add(GT_LanguageManager.addStringLocalization("TileEntity_TANK_AMOUNT", "Fluid Amount: ", !GregTech_API.sPostloadFinished ) + EnumChatFormatting.GREEN + GT_Utility.formatNumbers(tContents.amount) + " L" + EnumChatFormatting.GRAY); @@ -137,8 +138,8 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { } if (GregTech_API.METATILEENTITIES[tDamage] instanceof GT_MetaTileEntity_DigitalChestBase) { if (aStack.hasTagCompound() && aStack.stackTagCompound.hasKey("mItemStack")) { - ItemStack tContents = ItemStack.loadItemStackFromNBT(aStack.stackTagCompound.getCompoundTag("mItemStack")); - int tSize = aStack.stackTagCompound.getInteger("mItemCount"); + final ItemStack tContents = ItemStack.loadItemStackFromNBT(aStack.stackTagCompound.getCompoundTag("mItemStack")); + final int tSize = aStack.stackTagCompound.getInteger("mItemCount"); if (tContents != null && tSize > 0) { aList.add(GT_LanguageManager.addStringLocalization("TileEntity_CHEST_INFO", "Contains Item: ", !GregTech_API.sPostloadFinished ) + EnumChatFormatting.YELLOW + tContents.getDisplayName() + EnumChatFormatting.GRAY); aList.add(GT_LanguageManager.addStringLocalization("TileEntity_CHEST_AMOUNT", "Item Amount: ", !GregTech_API.sPostloadFinished ) + EnumChatFormatting.GREEN + GT_Utility.formatNumbers(tSize) + EnumChatFormatting.GRAY); @@ -146,7 +147,7 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { } } } - NBTTagCompound aNBT = aStack.getTagCompound(); + final NBTTagCompound aNBT = aStack.getTagCompound(); if (aNBT != null) { if (aNBT.getBoolean("mMuffler")) { aList.add(GT_LanguageManager.addStringLocalization("GT_TileEntity_MUFFLER", "has Muffler Upgrade", !GregTech_API.sPostloadFinished )); @@ -159,30 +160,10 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { aList.add(tAmount + " " + GT_LanguageManager.addStringLocalization("GT_TileEntity_STEAMTANKS", "Steam Tank Upgrades", !GregTech_API.sPostloadFinished )); } - addInstalledCoversInformation(aNBT, aList); + CoverableTileEntity.addInstalledCoversInformation(aNBT, aList); } } catch (Throwable e) { - e.printStackTrace(GT_Log.err); - } - } - - private void addInstalledCoversInformation(NBTTagCompound aNBT, List aList) { - if (aNBT.hasKey("mCoverSides")){ - int[] mCoverSides = aNBT.getIntArray("mCoverSides"); - if (mCoverSides != null && mCoverSides.length == 6) { - for (byte i = 0; i < 6; i++) { - int coverId = mCoverSides[i]; - if (coverId == 0) continue; - GT_CoverBehaviorBase behavior = GregTech_API.getCoverBehaviorNew(coverId); - if (behavior == null || behavior == GregTech_API.sNoBehavior) continue; - if (!aNBT.hasKey(CoverableGregTechTileEntity.COVER_DATA_NBT_KEYS[i])) continue; - ISerializableObject dataObject = behavior.createDataObject(aNBT.getTag(CoverableGregTechTileEntity.COVER_DATA_NBT_KEYS[i])); - ItemStack itemStack = behavior.getDisplayStack(coverId, dataObject); - if (itemStack != null) { - aList.add(String.format("Cover on %s side: %s", directionNames[i], itemStack.getDisplayName())); - } - } - } + GT_FML_LOGGER.error("addInformation", e); } } @@ -193,7 +174,7 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { @Override public String getUnlocalizedName(ItemStack aStack) { - short tDamage = (short) getDamage(aStack); + final short tDamage = (short) getDamage(aStack); if ((tDamage < 0) || (tDamage >= GregTech_API.METATILEENTITIES.length)) { return ""; } @@ -206,7 +187,7 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { @Override public String getItemStackDisplayName(ItemStack aStack) { String aName = super.getItemStackDisplayName(aStack); - short aDamage = (short) getDamage(aStack); + final short aDamage = (short) getDamage(aStack); if (aDamage >= 0 && aDamage < GregTech_API.METATILEENTITIES.length && GregTech_API.METATILEENTITIES[aDamage] != null) { Materials aMaterial = null; if (GregTech_API.METATILEENTITIES[aDamage] instanceof GT_MetaPipeEntity_Item) { @@ -228,7 +209,7 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { @Override public void onCreated(ItemStack aStack, World aWorld, EntityPlayer aPlayer) { super.onCreated(aStack, aWorld, aPlayer); - short tDamage = (short) getDamage(aStack); + final short tDamage = (short) getDamage(aStack); if ((tDamage < 0) || ((tDamage >= GregTech_API.METATILEENTITIES.length) && (GregTech_API.METATILEENTITIES[tDamage] != null))) { GregTech_API.METATILEENTITIES[tDamage].onCreated(aStack, aWorld, aPlayer); } @@ -236,12 +217,12 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { @Override public boolean placeBlockAt(ItemStack aStack, EntityPlayer aPlayer, World aWorld, int aX, int aY, int aZ, int side, float hitX, float hitY, float hitZ, int aMeta) { - short tDamage = (short) getDamage(aStack); + final short tDamage = (short) getDamage(aStack); if (tDamage > 0) { if (GregTech_API.METATILEENTITIES[tDamage] == null) { return false; } - int tMetaData = GregTech_API.METATILEENTITIES[tDamage].getTileEntityBaseType(); + final int tMetaData = GregTech_API.METATILEENTITIES[tDamage].getTileEntityBaseType(); if (!aWorld.setBlock(aX, aY, aZ, this.field_150939_a, tMetaData, 3)) { return false; } @@ -251,7 +232,7 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { if (aWorld.getBlockMetadata(aX, aY, aZ) != tMetaData) { throw new GT_ItsNotMyFaultException("Failed to set the MetaValue of the Block even though World.setBlock returned true. It COULD be MCPC/Bukkit causing that. In case you really have that installed, don't report this Bug to me, I don't know how to fix it."); } - IGregTechTileEntity tTileEntity = (IGregTechTileEntity) aWorld.getTileEntity(aX, aY, aZ); + final IGregTechTileEntity tTileEntity = (IGregTechTileEntity) aWorld.getTileEntity(aX, aY, aZ); if (tTileEntity != null) { tTileEntity.setInitialValuesAsNBT(tTileEntity.isServerSide() ? aStack.getTagCompound() : null, tDamage); if (aPlayer != null) { @@ -265,7 +246,7 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { ((IConnectable) tTileEntity.getMetaTileEntity()).connect(aSide); } else if (aPlayer != null && aPlayer.isSneaking()) { // If we're being placed against something that is connectable, try telling it to connect to us - IGregTechTileEntity aTileEntity = tTileEntity.getIGregTechTileEntityAtSide(aSide); + final IGregTechTileEntity aTileEntity = tTileEntity.getIGregTechTileEntityAtSide(aSide); if (aTileEntity != null && aTileEntity.getMetaTileEntity() instanceof IConnectable) { ((IConnectable) aTileEntity.getMetaTileEntity()).connect((byte)side); } @@ -284,13 +265,13 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { @Override public void onUpdate(ItemStack aStack, World aWorld, Entity aPlayer, int aTimer, boolean aIsInHand) { super.onUpdate(aStack, aWorld, aPlayer, aTimer, aIsInHand); - short tDamage = (short) getDamage(aStack); - EntityLivingBase tPlayer = (EntityPlayer) aPlayer; + final short tDamage = (short) getDamage(aStack); + final EntityLivingBase tPlayer = (EntityPlayer) aPlayer; if (GregTech_API.METATILEENTITIES[tDamage] instanceof GT_MetaTileEntity_SuperChest || GregTech_API.METATILEENTITIES[tDamage] instanceof GT_MetaTileEntity_QuantumChest || GregTech_API.METATILEENTITIES[tDamage] instanceof GT_MetaTileEntity_SuperTank || GregTech_API.METATILEENTITIES[tDamage] instanceof GT_MetaTileEntity_QuantumTank) { - NBTTagCompound tNBT = aStack.stackTagCompound; + final NBTTagCompound tNBT = aStack.stackTagCompound; if (tNBT == null) return; if (tNBT.hasNoTags()) { aStack.setTagCompound(null); @@ -298,14 +279,14 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { } if ((tNBT.hasKey("mItemCount") && tNBT.getInteger("mItemCount") > 0) || (tNBT.hasKey("mFluid") && FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("mFluid")).amount > 64000)) { - FluidStack tFluid = FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("mFluid")); + final FluidStack tFluid = FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("mFluid")); int tLasing = 1200; if (tFluid != null) { - double tFluidAmount = tFluid.amount; - double tMiddlePoint = 4096000; - double tSmoothingCoefficient = 2000000; - int tMaxLastingTime = 12000; - double tmp = (tFluidAmount - tMiddlePoint) / tSmoothingCoefficient; + final double tFluidAmount = tFluid.amount; + final double tMiddlePoint = 4096000; + final double tSmoothingCoefficient = 2000000; + final int tMaxLastingTime = 12000; + final double tmp = (tFluidAmount - tMiddlePoint) / tSmoothingCoefficient; tLasing = (int) (Math.exp(tmp) / (Math.exp(tmp) + Math.exp(-tmp)) * tMaxLastingTime); } tPlayer.addPotionEffect(new PotionEffect(Potion.hunger.id, tLasing, 1)); @@ -319,7 +300,7 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { @Override public FluidStack getFluid(ItemStack container) { if (container != null) { - NBTTagCompound tNBT = container.stackTagCompound; + final NBTTagCompound tNBT = container.stackTagCompound; if (tNBT != null && tNBT.hasKey("mFluid", 10)) { return FluidStack.loadFluidStackFromNBT(tNBT.getCompoundTag("mFluid")); } @@ -330,8 +311,8 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { @Override public int getCapacity(ItemStack container) { if (container != null) { - int tDamage = container.getItemDamage(); - IMetaTileEntity tMetaTile = GregTech_API.METATILEENTITIES[tDamage]; + final int tDamage = container.getItemDamage(); + final IMetaTileEntity tMetaTile = GregTech_API.METATILEENTITIES[tDamage]; if (tMetaTile != null) return tMetaTile.getCapacity(); } @@ -341,27 +322,27 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { @Override public int fill(ItemStack container, FluidStack resource, boolean doFill) { if (container != null && resource != null) { - int tDamage = container.getItemDamage(); - IMetaTileEntity tMetaTile = GregTech_API.METATILEENTITIES[tDamage]; + final int tDamage = container.getItemDamage(); + final IMetaTileEntity tMetaTile = GregTech_API.METATILEENTITIES[tDamage]; if (!(tMetaTile instanceof GT_MetaTileEntity_QuantumTank || tMetaTile instanceof GT_MetaTileEntity_SuperTank)) { return 0; } if (container.stackTagCompound == null) container.stackTagCompound = new NBTTagCompound(); - FluidStack tStoredFluid = getFluid(container); - int tCapacity = getCapacity(container); + final FluidStack tStoredFluid = getFluid(container); + final int tCapacity = getCapacity(container); if (tCapacity <= 0) return 0; if (tStoredFluid != null && tStoredFluid.isFluidEqual(resource)) { - int tAmount = Math.min(tCapacity - tStoredFluid.amount, resource.amount); + final int tAmount = Math.min(tCapacity - tStoredFluid.amount, resource.amount); if (doFill) { - FluidStack tNewFluid = new FluidStack(tStoredFluid, tAmount + tStoredFluid.amount); + final FluidStack tNewFluid = new FluidStack(tStoredFluid, tAmount + tStoredFluid.amount); container.stackTagCompound.setTag("mFluid", tNewFluid.writeToNBT(new NBTTagCompound())); } return tAmount; } if (tStoredFluid == null) { - int tAmount = Math.min(tCapacity, resource.amount); + final int tAmount = Math.min(tCapacity, resource.amount); if (doFill) { - FluidStack tNewFluid = new FluidStack(resource, tAmount); + final FluidStack tNewFluid = new FluidStack(resource, tAmount); container.stackTagCompound.setTag("mFluid", tNewFluid.writeToNBT(new NBTTagCompound())); } return tAmount; @@ -373,16 +354,16 @@ public class GT_Item_Machines extends ItemBlock implements IFluidContainerItem { @Override public FluidStack drain(ItemStack container, int maxDrain, boolean doDrain) { if (container != null && container.hasTagCompound()) { - int tDamage = container.getItemDamage(); - IMetaTileEntity tMetaTile = GregTech_API.METATILEENTITIES[tDamage]; + final int tDamage = container.getItemDamage(); + final IMetaTileEntity tMetaTile = GregTech_API.METATILEENTITIES[tDamage]; if (!(tMetaTile instanceof GT_MetaTileEntity_QuantumTank || tMetaTile instanceof GT_MetaTileEntity_SuperTank)) { return null; } - FluidStack tStoredFluid = getFluid(container); + final FluidStack tStoredFluid = getFluid(container); if (tStoredFluid != null) { - int tAmount = Math.min(maxDrain, tStoredFluid.amount); - FluidStack tNewFluid = new FluidStack(tStoredFluid, tStoredFluid.amount - tAmount); - FluidStack tOutputFluid = new FluidStack(tStoredFluid, tAmount); + final int tAmount = Math.min(maxDrain, tStoredFluid.amount); + final FluidStack tNewFluid = new FluidStack(tStoredFluid, tStoredFluid.amount - tAmount); + final FluidStack tOutputFluid = new FluidStack(tStoredFluid, tAmount); if (doDrain) { if (tNewFluid.amount <= 0) { container.stackTagCompound.removeTag("mFluid"); diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FacadeAE.java b/src/main/java/gregtech/common/covers/GT_Cover_FacadeAE.java index 592b6f322d..a227d3f530 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_FacadeAE.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_FacadeAE.java @@ -8,14 +8,16 @@ import net.minecraft.item.ItemStack; public class GT_Cover_FacadeAE extends GT_Cover_FacadeBase { @Override protected Block getTargetBlock(ItemStack aFacadeStack) { - Item item = aFacadeStack.getItem(); + if(aFacadeStack == null) return null; + final Item item = aFacadeStack.getItem(); if (!(item instanceof IFacadeItem)) return null; return ((IFacadeItem) item).getBlock(aFacadeStack); } @Override protected int getTargetMeta(ItemStack aFacadeStack) { - Item item = aFacadeStack.getItem(); + if(aFacadeStack == null) return 0; + final Item item = aFacadeStack.getItem(); if (!(item instanceof IFacadeItem)) return 0; return ((IFacadeItem) item).getMeta(aFacadeStack); } diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java b/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java index fa3c6624f8..17aafef79e 100644 --- a/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java +++ b/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java @@ -94,8 +94,7 @@ public abstract class GT_Cover_FacadeBase extends GT_CoverBehaviorBase
This Method can be used to create a Material called Steel, which is used in many non-Thaumaturgic applications."); GregTech_API.sThaumcraftCompat.addResearch(tKey, "Steel Transmutation", "Transforming iron to steel", new String[]{"TRANSIRON", "GT_WOOD_TO_CHARCOAL"}, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 1L), 3, 0, 13, 8, Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.METALLUM, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3L)), null, new Object[]{GT_MachineRecipeLoader.aTextTCGTPage + tKey, - GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.Iron), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1L)))}); + GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.nugget.get(Materials.Iron), GT_OreDictUnificator.get(OrePrefixes.nugget, Materials.Steel, 1L), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 1L)))}); tKey = "GT_TRANSBRONZE"; GT_LanguageManager.addStringLocalization(GT_MachineRecipeLoader.aTextTCGTPage + tKey, "You have discovered a way of creating Alloys using the already known transmutations of Copper and Tin.

This Method can be used to create a Bronze directly without having to go through an alloying process."); @@ -2520,12 +2519,12 @@ public class GT_MachineRecipeLoader implements Runnable { GT_LanguageManager.addStringLocalization(GT_MachineRecipeLoader.aTextTCGTPage + tKey, "Sometimes when processing your Crystal Shards they become a pile of Dust instead of the mostly required Shard.

You have finally found a way to reverse this Process by using Vitreus Essentia for recrystallising the Shards."); GregTech_API.sThaumcraftCompat.addResearch(tKey, "Shard Recrystallisation", "Fixing your precious crystals", new String[]{"ALCHEMICALMANUFACTURE"}, "ALCHEMY", GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedOrder, 1L), 3, 0, -11, -3, Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 5L), new TC_Aspects.TC_AspectStack(TC_Aspects.PERMUTATIO, 3L), new TC_Aspects.TC_AspectStack(TC_Aspects.ORDO, 3L)), null, new Object[]{GT_MachineRecipeLoader.aTextTCGTPage + tKey, GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.Amber), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.Amber, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedOrder), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedOrder, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedEntropy), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEntropy, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedAir), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedAir, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedEarth), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEarth, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedFire), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedFire, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), - GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedWater), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedWater, 1L), Arrays.asList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L)))}); + GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedOrder), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedOrder, 1L), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), + GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedEntropy), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEntropy, 1L), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), + GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedAir), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedAir, 1L), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), + GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedEarth), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedEarth, 1L), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), + GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedFire), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedFire, 1L), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L))), + GregTech_API.sThaumcraftCompat.addCrucibleRecipe(tKey, OrePrefixes.dust.get(Materials.InfusedWater), GT_OreDictUnificator.get(OrePrefixes.gem, Materials.InfusedWater, 1L), Collections.singletonList(new TC_Aspects.TC_AspectStack(TC_Aspects.VITREUS, 4L)))}); tKey = "GT_MAGICENERGY"; GT_LanguageManager.addStringLocalization(GT_MachineRecipeLoader.aTextTCGTPage + tKey, @@ -2835,7 +2834,6 @@ public class GT_MachineRecipeLoader implements Runnable { GT_Values.RA.addChemicalRecipe(Materials.Ethylene.getCells(1), GT_Utility.getIntegratedCircuit(19), Materials.Oxygen.getGas(2000), GT_Values.NF, Materials.AceticAcid.getCells(1), 100); GT_Values.RA.addChemicalRecipe(Materials.Oxygen.getCells(2), GT_Utility.getIntegratedCircuit(19), Materials.Ethylene.getGas(1000), GT_Values.NF, Materials.AceticAcid.getCells(1), Materials.Empty.getCells(1), 100); //This recipe collides with one for Vinyl Chloride - //GT_Values.RA.addChemicalRecipeForBasicMachineOnly(Materials.Oxygen.getCells(2), Materials.Ethylene.getCells(1), GT_Values.NF, Materials.AceticAcid.getFluid(1000), Materials.Empty.getCells(3), GT_Values.NI, 100, 30); GT_Values.RA.addMultiblockChemicalRecipe(new ItemStack[]{Materials.Carbon.getDust(2), GT_Utility.getIntegratedCircuit(24)}, new FluidStack[]{Materials.Hydrogen.getGas(4000), Materials.Oxygen.getGas(2000)}, new FluidStack[]{Materials.AceticAcid.getFluid(1000)}, null, 480, 30); GT_Values.RA.addMultiblockChemicalRecipe(new ItemStack[]{GT_Utility.getIntegratedCircuit(24)}, new FluidStack[]{Materials.CarbonMonoxide.getGas(2000), Materials.Hydrogen.getGas(4000)}, new FluidStack[]{Materials.AceticAcid.getFluid(1000)}, null, 320, 30); @@ -3501,7 +3499,6 @@ public class GT_MachineRecipeLoader implements Runnable { //Diaminobenzidin GT_Values.RA.addChemicalRecipe(Materials.Ammonia.getCells(2), Materials.Zinc.getDust(1), Materials.Dichlorobenzidine.getFluid(1000), Materials.HydrochloricAcid.getFluid(2000), Materials.Diaminobenzidin.getCells(1), ItemList.Cell_Empty.get(1L),100, 7680); - //GT_Values.RA.addChemicalRecipe(Materials.Dichlorobenzidine.getCells(1),Materials.Zinc.getDust(1), Materials.Ammonia.getGas(2000), Materials.Diaminobenzidin.getFluid(1000), Materials.HydrochloricAcid.getCells(2), 100, 7680); //Polybenzimidazole GT_Values.RA.addChemicalRecipe(Materials.Diphenylisophthalate.getCells(1), GT_Utility.getIntegratedCircuit(1), Materials.Diaminobenzidin.getFluid(1000), Materials.Polybenzimidazole.getMolten(1000), Materials.Phenol.getCells(1), 100, 7680); @@ -4123,12 +4120,10 @@ public class GT_MachineRecipeLoader implements Runnable { GT_Values.RA.addPyrolyseRecipe(GT_OreDictUnificator.get(OrePrefixes.block, Materials.Coal, 8), Materials.Nitrogen.getGas(1000), 2, EnumCube.COKE_BLOCK.getItem(8), Materials.Creosote.getFluid(32000), 1280, 96); GT_Values.RA.addMixerRecipe(EnumCube.COKE_BLOCK.getItem(), ItemList.SFMixture.get(2), GT_Values.NI, GT_Values.NI, GT_Values.NI, GT_Utility.getIntegratedCircuit(1), Materials.NitroFuel.getFluid(300), null, ItemList.Block_SSFUEL.get(1), 100, 250); - //GT_Values.RA.addMixerRecipe(EnumCube.COKE_BLOCK.getItem(), ItemList.SFMixture.get(1), null, null, Materials.LPG.getFluid(375), null, ItemList.Block_SSFUEL.get(1), 120, 96); GT_Values.RA.addCompressorRecipe(RailcraftToolItems.getCoalCoke(9), EnumCube.COKE_BLOCK.getItem(), 300, 2); if (Loader.isModLoaded(MOD_ID_TC)) { GT_Values.RA.addMixerRecipe(EnumCube.COKE_BLOCK.getItem(), ItemList.MSFMixture.get(2), GT_ModHandler.getModItem(MOD_ID_TC, "ItemResource", 4), GT_Values.NI, GT_Values.NI, GT_Utility.getIntegratedCircuit(1), Materials.NitroFuel.getFluid(300), null, ItemList.Block_MSSFUEL.get(1), 100, 600); - //GT_Values.RA.addMixerRecipe(EnumCube.COKE_BLOCK.getItem(), ItemList.MSFMixture.get(1), GT_ModHandler.getModItem(MOD_ID_TC, "ItemResource", 4), null, Materials.LPG.getFluid(375), null, ItemList.Block_MSSFUEL.get(1), 120, 96); } } } -- cgit