aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/gregtech/api')
-rw-r--r--src/main/java/gregtech/api/enums/GT_Values.java96
-rw-r--r--src/main/java/gregtech/api/enums/ItemList.java1
-rw-r--r--src/main/java/gregtech/api/enums/Textures.java17
-rw-r--r--src/main/java/gregtech/api/interfaces/IIconContainer.java15
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IBasicEnergyContainer.java6
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java3
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IDebugableTileEntity.java20
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IEnergyConnected.java12
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IGTEnet.java20
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IGregTechTileEntity.java2
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IHasWorldObjectAndCoords.java5
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IIC2Enet.java17
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IMachineProgress.java4
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/IRedstoneEmitter.java7
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/ITurnable.java15
-rw-r--r--src/main/java/gregtech/api/items/GT_MetaGenerated_Item.java8
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java198
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java354
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseTileEntity.java114
-rw-r--r--src/main/java/gregtech/api/metatileentity/CommonMetaTileEntity.java162
-rw-r--r--src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java (renamed from src/main/java/gregtech/api/metatileentity/CoverableGregTechTileEntity.java)322
-rw-r--r--src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java (renamed from src/main/java/gregtech/api/metatileentity/MetaTileClientEvents.java)2
-rw-r--r--src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java6
-rw-r--r--src/main/java/gregtech/api/metatileentity/MetaTileEntity.java6
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java2
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java3
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_EnhancedMultiBlockBase.java11
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java7
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java8
-rw-r--r--src/main/java/gregtech/api/objects/GT_CopiedBlockTexture.java1
-rw-r--r--src/main/java/gregtech/api/objects/GT_HashSet.java12
-rw-r--r--src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java4
-rw-r--r--src/main/java/gregtech/api/util/GT_LanguageManager.java25
-rw-r--r--src/main/java/gregtech/api/util/GT_Utility.java125
34 files changed, 884 insertions, 726 deletions
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.
* <p/>
* 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 {
* <p/>
* 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<String> 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.
* <p/>
- * Also delivers most of the Informations about my TileEntities.
+ * Also delivers most of the Information about my TileEntities.
* <p/>
* 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<Short, IFoodStat> mFoodStats = new ConcurrentHashMap<Short, IFoodStat>();
- public final ConcurrentHashMap<Short, Long[]> mElectricStats = new ConcurrentHashMap<Short, Long[]>();
- public final ConcurrentHashMap<Short, Long[]> mFluidContainerStats = new ConcurrentHashMap<Short, Long[]>();
- public final ConcurrentHashMap<Short, Short> mBurnValues = new ConcurrentHashMap<Short, Short>();
+ public final ConcurrentHashMap<Short, IFoodStat> mFoodStats = new ConcurrentHashMap<>();
+ public final ConcurrentHashMap<Short, Long[]> mElectricStats = new ConcurrentHashMap<>();
+ public final ConcurrentHashMap<Short, Long[]> mFluidContainerStats = new ConcurrentHashMap<>();
+ public final ConcurrentHashMap<Short, Short> 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
* <p/>
* 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<String> getDebugInfo(EntityPlayer aPlayer, int aLogLevel) {
- ArrayList<String> tList = new ArrayList<String>();
+ final ArrayList<String> 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 : " "));
}
@@ -395,52 +384,11 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I
}
@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() {
@@ -676,23 +624,6 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I
}
@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;
}
/**
@@ -1013,36 +930,6 @@ public class BaseMetaPipeEntity 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 (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;
}
@@ -1062,13 +949,8 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I
}
@Override
- public boolean hasInventoryBeenModified() {
- return mInventoryChanged;
- }
-
- @Override
public void setGenericRedstoneOutput(boolean aOnOff) {
- //
+ // Do nothing
}
@Override
@@ -1132,17 +1014,6 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I
}
@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()) {
mInventoryChanged = true;
@@ -1244,11 +1115,6 @@ public class BaseMetaPipeEntity extends CoverableGregTechTileEntity implements I
}
@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;
@@ -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<String> getDebugInfo(EntityPlayer aPlayer, int aLogLevel) {
- ArrayList<String> tList = new ArrayList<String>();
+ final ArrayList<String> 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 : " "));
}
@@ -712,54 +674,12 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I
}
@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) {
@@ -1065,18 +997,6 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I
}
@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<ItemStack> 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<ItemStack>(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() {
@@ -1617,21 +1502,11 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I
}
@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)
)
)
)
@@ -1969,15 +1836,10 @@ public class BaseMetaTileEntity extends CoverableGregTechTileEntity implements I
}
@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;
@@ -2030,12 +1892,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.
* <p/>
* 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
* <p/>
@@ -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
@@ -82,6 +107,14 @@ public abstract class BaseTileEntity extends TileEntity implements IHasWorldObje
}
@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/CoverableTileEntity.java
index b6249542a3..fdac12c621 100644
--- a/src/main/java/gregtech/api/metatileentity/CoverableGregTechTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java
@@ -2,16 +2,15 @@ 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.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.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;
@@ -21,21 +20,28 @@ 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.Objects;
+import java.util.stream.IntStream;
import java.util.List;
-import static gregtech.GT_Mod.GT_FML_LOGGER;
+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 CoverableGregTechTileEntity extends BaseTileEntity implements IGregTechTileEntity {
+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];
@@ -43,72 +49,37 @@ public abstract class CoverableGregTechTileEntity extends BaseTileEntity impleme
protected short mID = 0;
public long mTickTimer = 0;
- protected void saveCoverNBT(NBTTagCompound aNBT) {
+ 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)
+ if (mCoverSides[i] != 0 && mCoverData[i] != null) {
aNBT.setTag(COVER_DATA_NBT_KEYS[i], mCoverData[i].saveDataToNBT());
+ hasCover = true;
+ }
}
- 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);
+ if (mStrongRedstone > 0) aNBT.setByte("mStrongRedstone", mStrongRedstone);
+ if (hasCover) aNBT.setIntArray("mCoverSides", mCoverSides);
- 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);
+ if(!isDrop) {
+ aNBT.setByteArray("mRedstoneSided", mSidedRedstone);
+ aNBT.setBoolean("mRedstone", mRedstone);
}
+
}
- 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 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");
- 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");
+ 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);
@@ -122,8 +93,7 @@ public abstract class CoverableGregTechTileEntity extends BaseTileEntity impleme
} else {
// no old data
for (byte i = 0; i<6; i++) {
- if (mCoverBehaviors[i] == null)
- continue;
+ 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
@@ -132,84 +102,108 @@ public abstract class CoverableGregTechTileEntity extends BaseTileEntity impleme
issueCoverUpdate(i);
}
}
+
}
+ public abstract boolean isStillValid();
protected boolean doCoverThings() {
- for (byte i = 0; i < 6; i++)
+ for (byte i : ALL_VALID_SIDES) {
if (getCoverIDAtSide(i) != 0) {
- GT_CoverBehaviorBase<?> tCover = getCoverBehaviorAtSideNew(i);
- int tCoverTickRate = tCover.getTickRate(i, getCoverIDAtSide(i), mCoverData[i], this);
+ final GT_CoverBehaviorBase<?> tCover = getCoverBehaviorAtSideNew(i);
+ final 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;
+ 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 (!hasValidMetaTileEntity()) return false;
+ if (!isStillValid()) return false;
}
}
+ }
return true;
}
+ public abstract boolean allowCoverOnSide(byte aSide, GT_ItemStack aCoverID);
+
protected void checkDropCover() {
- for (byte i = 0; i < 6; i++)
+ for (byte i : ALL_VALID_SIDES)
if (getCoverIDAtSide(i) != 0)
- if (!getMetaTileEntity().allowCoverOnSide(i, new GT_ItemStack(getCoverIDAtSide(i))))
+ if (!allowCoverOnSide(i, new GT_ItemStack(getCoverIDAtSide(i))))
dropCover(i, i, true);
}
protected void updateCoverBehavior() {
- for (byte i = 0; i < 6; i++)
+ for (byte i : ALL_VALID_SIDES)
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))
+ // 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 ITexture getCoverTexture(byte aSide) {
+ 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
}
- ITexture coverTexture = getCoverBehaviorAtSideNew(aSide).getSpecialCoverTexture(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this);
+ 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() {
- for (byte i = 0; i < 6; i++) {
+ 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));
}
}
- 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;
+ @Override
+ public void setCoverIdAndDataAtSide(byte aSide, int aId, ISerializableObject aData) {
+ if(setCoverIDAtSideNoUpdate(aSide, aId)) {
+ setCoverDataAtSide(aSide, aData);
+ issueCoverUpdate(aSide);
+ issueBlockUpdate();
}
- return false;
}
@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();
- issueCoverUpdate(aSide);
- issueBlockUpdate();
+ 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) {
@@ -253,19 +247,6 @@ public abstract class CoverableGregTechTileEntity extends BaseTileEntity impleme
}
@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];
@@ -282,10 +263,10 @@ public abstract class CoverableGregTechTileEntity extends BaseTileEntity impleme
@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);
+ final 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);
+ 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;
@@ -298,34 +279,99 @@ public abstract class CoverableGregTechTileEntity extends BaseTileEntity impleme
}
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 coverSide, int coverID, int coverData) {
- if ((coverSide >= 0 && coverSide < 6) && (mCoverSides[coverSide] == coverID))
- setCoverDataAtSide(coverSide, coverData);
+ 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) && (mCoverSides[aCoverSide] == aCoverID)) {
+ if ((aCoverSide >= 0 && aCoverSide < 6)) {
+ setCoverIDAtSideNoUpdate(aCoverSide, aCoverID);
setCoverDataAtSide(aCoverSide, aCoverData);
- if (isClientSide())
+ if (isClientSide()) {
getCoverBehaviorAtSideNew(aCoverSide).onDataChanged(aCoverSide, aCoverID, aCoverData, this);
+ }
}
}
protected void sendCoverDataIfNeeded() {
- int mCoverNeedUpdateLength = mCoverNeedUpdate.length;
+ 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),
+ new GT_Packet_SendCoverData(i, getCoverIDAtSide(i), getComplexCoverDataAtSide(i), this),
xCoord, zCoord
);
mCoverNeedUpdate[i] = false;
@@ -336,13 +382,24 @@ public abstract class CoverableGregTechTileEntity extends BaseTileEntity impleme
@Override
public void getWailaBody(ItemStack itemStack, List<String> 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));
+ 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);
}
@@ -351,11 +408,34 @@ public abstract class CoverableGregTechTileEntity extends BaseTileEntity impleme
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));
+
+ // 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<String> 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/MetaTileClientEvents.java b/src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java
index 6b70783470..c3c22415cb 100644
--- a/src/main/java/gregtech/api/metatileentity/MetaTileClientEvents.java
+++ b/src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java
@@ -1,6 +1,6 @@
package gregtech.api.metatileentity;
-public class MetaTileClientEvents {
+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;
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/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}
* <p>
@@ -48,14 +50,13 @@ public abstract class GT_MetaTileEntity_EnhancedMultiBlockBase<T extends GT_Meta
if(mMachine)
stopMachine();
mExtendedFacing = newExtendedFacing;
- IGregTechTileEntity base = getBaseMetaTileEntity();
+ final IGregTechTileEntity base = getBaseMetaTileEntity();
mMachine = false;
mUpdated = false;
mUpdate = 100;
if (getBaseMetaTileEntity().isServerSide()) {
StructureLibAPI.sendAlignment((IAlignmentProvider) base,
- new NetworkRegistry.TargetPoint(base.getWorld().provider.dimensionId,
- base.getXCoord(), base.getYCoord(), base.getZCoord(), 512));
+ new NetworkRegistry.TargetPoint(base.getWorld().provider.dimensionId, base.getXCoord(), base.getYCoord(), base.getZCoord(), 512));
} else {
base.issueTextureUpdate();
}
@@ -145,12 +146,12 @@ public abstract class GT_MetaTileEntity_EnhancedMultiBlockBase<T extends GT_Meta
* All these offsets can be negative.
*/
protected final boolean checkPiece(String piece, int horizontalOffset, int verticalOffset, int depthOffset) {
- IGregTechTileEntity tTile = getBaseMetaTileEntity();
+ final IGregTechTileEntity tTile = getBaseMetaTileEntity();
return getCastedStructureDefinition().check(this, piece, tTile.getWorld(), getExtendedFacing(), tTile.getXCoord(), tTile.getYCoord(), tTile.getZCoord(), horizontalOffset, verticalOffset, depthOffset, !mMachine);
}
protected final boolean buildPiece(String piece, ItemStack trigger, boolean hintOnly, int horizontalOffset, int verticalOffset, int depthOffset) {
- IGregTechTileEntity tTile = getBaseMetaTileEntity();
+ final IGregTechTileEntity tTile = getBaseMetaTileEntity();
return getCastedStructureDefinition().buildOrHints(this, trigger, piece, tTile.getWorld(), getExtendedFacing(), tTile.getXCoord(), tTile.getYCoord(), tTile.getZCoord(), horizontalOffset, verticalOffset, depthOffset, hintOnly);
}
diff --git a/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java b/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java
index 93bc5eba72..cdb744ee32 100644
--- a/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java
+++ b/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java
@@ -4,6 +4,7 @@ import com.google.common.io.ByteArrayDataInput;
import gregtech.api.GregTech_API;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.CoverableTileEntity;
import gregtech.api.util.ISerializableObject;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
@@ -90,9 +91,9 @@ public class GT_Packet_RequestCoverData extends GT_Packet_New {
return;
World world = DimensionManager.getWorld(mPlayer.dimension);
if (world != null) {
- TileEntity tile = world.getTileEntity(mX, mY, mZ);
- if (tile instanceof IGregTechTileEntity) {
- IGregTechTileEntity te = (IGregTechTileEntity) tile;
+ final TileEntity tile = world.getTileEntity(mX, mY, mZ);
+ if (tile instanceof CoverableTileEntity) {
+ final CoverableTileEntity te = (CoverableTileEntity) tile;
if (!te.isDead() && te.getCoverIDAtSide(side) == coverID) {
te.issueCoverUpdate(side);
}
diff --git a/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java b/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java
index 3e1abac4e7..820f4e18d5 100644
--- a/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java
+++ b/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java
@@ -3,13 +3,11 @@ package gregtech.api.net;
import com.google.common.io.ByteArrayDataInput;
import gregtech.api.GregTech_API;
import gregtech.api.interfaces.tileentity.ICoverable;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.CoverableTileEntity;
import gregtech.api.util.ISerializableObject;
import io.netty.buffer.ByteBuf;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
-import net.minecraft.world.World;
-import net.minecraftforge.common.DimensionManager;
/**
* Server -> 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<E extends GT_ItemStack> extends AbstractSet<E> {
private static final Object OBJECT = new Object();
- private transient HashMap<GT_ItemStack, Object> map;
+ private final transient HashMap<GT_ItemStack, Object> map;
public GT_HashSet() {
- map = new HashMap<GT_ItemStack, Object>();
+ map = new HashMap<>();
GregTech_API.sItemStackMappings.add(map);
}
public GT_HashSet(Collection<? extends E> c) {
- map = new HashMap<GT_ItemStack, Object>(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<GT_ItemStack, Object>(initialCapacity, loadFactor);
+ map = new HashMap<>(initialCapacity, loadFactor);
GregTech_API.sItemStackMappings.add(map);
}
public GT_HashSet(int initialCapacity) {
- map = new HashMap<GT_ItemStack, Object>(initialCapacity);
+ map = new HashMap<>(initialCapacity);
GregTech_API.sItemStackMappings.add(map);
}
GT_HashSet(int initialCapacity, float loadFactor, boolean dummy) {
- map = new LinkedHashMap<GT_ItemStack, Object>(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<T extends ISerializableObject> {
}
/**
- * 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);
@@ -2237,32 +2228,6 @@ public class GT_Utility {
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;
tList.add(GT_Utility.trans("175","Conduction Loss: ") + EnumChatFormatting.YELLOW + ((ic2.api.energy.tile.IEnergyConductor) tTileEntity).getConductionLoss() + EnumChatFormatting.RESET);
@@ -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<String> temp = ((IDebugableBlock) tBlock).getDebugInfo(aPlayer, aX, aY, aZ, 3);
+ final ArrayList<String> 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<GT_Recipe> 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<String>) o));
-// toPrint += " List<String>";
-// } 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<Object, Integer> recipeAsMap = new HashMap<>();
Map<Character, Object> ingridients = new HashMap<>();
Map<Character, Integer> 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;