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.java12
-rw-r--r--src/main/java/gregtech/api/graphs/GenerateNodeMap.java73
-rw-r--r--src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java35
-rw-r--r--src/main/java/gregtech/api/gui/modularui/GT_UITextures.java4
-rw-r--r--src/main/java/gregtech/api/gui/widgets/GT_GuiCoverTabLine.java10
-rw-r--r--src/main/java/gregtech/api/interfaces/covers/IControlsWorkCover.java8
-rw-r--r--src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java61
-rw-r--r--src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java5
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java170
-rw-r--r--src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java127
-rw-r--r--src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java453
-rw-r--r--src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java2
-rw-r--r--src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java71
-rw-r--r--src/main/java/gregtech/api/metatileentity/MetaTileEntity.java47
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java68
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Fluid.java79
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Item.java60
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java5
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java8
-rw-r--r--src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java24
-rw-r--r--src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java93
-rw-r--r--src/main/java/gregtech/api/multitileentity/base/BaseMultiTileEntity.java157
-rw-r--r--src/main/java/gregtech/api/multitileentity/base/BaseNontickableMultiTileEntity.java11
-rw-r--r--src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockController.java4
-rw-r--r--src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockFluidHandler.java3
-rw-r--r--src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockInventory.java6
-rw-r--r--src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockPart.java11
-rw-r--r--src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileEntity.java10
-rw-r--r--src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java112
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockController.java452
-rw-r--r--src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java274
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_Block_Event.java2
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_GtTileEntityGuiRequest.java33
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_MultiTileEntity.java200
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_New.java4
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java17
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java16
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_TileEntity.java22
-rw-r--r--src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java25
-rw-r--r--src/main/java/gregtech/api/threads/GT_Runnable_Cable_Update.java8
-rw-r--r--src/main/java/gregtech/api/util/GT_CircuitryBehavior.java100
-rw-r--r--src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java2
-rw-r--r--src/main/java/gregtech/api/util/GT_Utility.java52
43 files changed, 1779 insertions, 1157 deletions
diff --git a/src/main/java/gregtech/api/enums/GT_Values.java b/src/main/java/gregtech/api/enums/GT_Values.java
index 4911801025..2ee24b8b5a 100644
--- a/src/main/java/gregtech/api/enums/GT_Values.java
+++ b/src/main/java/gregtech/api/enums/GT_Values.java
@@ -257,8 +257,9 @@ public class GT_Values {
/**
* NBT String Keys
*/
- public static class NBT {
+ public static final class NBT {
public static final String COLOR = "gt.color", // Integer
+ COVERS = "gt.covers", // String
CUSTOM_NAME = "name", // String
DISPAY = "gt.display", // String
FACING = "gt.facing", // Byte
@@ -274,14 +275,15 @@ public class GT_Values {
// Machines
ACTIVE = "gt.active", // Boolean
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
+ INV_INPUT_SIZE = "gt.invsize.in", // Number
+ INV_OUTPUT_SIZE = "gt.invsize.out", // Number
+ INV_INPUT_LIST = "gt.invlist.in", // NBT List
+ INV_OUTPUT_LIST = "gt.invlist.out", // NBT List
// MultiBlock
STRUCTURE_OK = "gt.structure.ok",
@@ -291,6 +293,8 @@ public class GT_Values {
TARGET_X = "gt.target.x", // Number
TARGET_Y = "gt.target.y", // Number
TARGET_Z = "gt.target.z", // Number
+ LOCKED_INVENTORY = "gt.locked.inventory", // String
+ LOCKED_INVENTORY_INDEX = "gt.locked.inventory.index", // Number
empty_ = "";
}
diff --git a/src/main/java/gregtech/api/graphs/GenerateNodeMap.java b/src/main/java/gregtech/api/graphs/GenerateNodeMap.java
index c0ee8b9490..8085421576 100644
--- a/src/main/java/gregtech/api/graphs/GenerateNodeMap.java
+++ b/src/main/java/gregtech/api/graphs/GenerateNodeMap.java
@@ -1,5 +1,6 @@
package gregtech.api.graphs;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
import static gregtech.api.util.GT_Utility.getOppositeSide;
import gregtech.api.graphs.consumers.ConsumerNode;
@@ -15,7 +16,7 @@ public abstract class GenerateNodeMap {
// clearing the node map to make sure it is gone on reset
public static void clearNodeMap(Node aNode, int aReturnNodeValue) {
if (aNode.mTileEntity instanceof BaseMetaPipeEntity) {
- BaseMetaPipeEntity tPipe = (BaseMetaPipeEntity) aNode.mTileEntity;
+ final BaseMetaPipeEntity tPipe = (BaseMetaPipeEntity) aNode.mTileEntity;
tPipe.setNode(null);
tPipe.setNodePath(null);
if (aNode.mSelfPath != null) {
@@ -23,24 +24,24 @@ public abstract class GenerateNodeMap {
aNode.mSelfPath = null;
}
}
- for (int i = 0; i < 6; i++) {
- NodePath tPath = aNode.mNodePaths[i];
+ for (byte side : ALL_VALID_SIDES) {
+ final NodePath tPath = aNode.mNodePaths[side];
if (tPath != null) {
tPath.clearPath();
- aNode.mNodePaths[i] = null;
+ aNode.mNodePaths[side] = null;
}
- Node tNextNode = aNode.mNeighbourNodes[i];
+ final Node tNextNode = aNode.mNeighbourNodes[side];
if (tNextNode == null) continue;
if (tNextNode.mNodeValue != aReturnNodeValue) clearNodeMap(tNextNode, aNode.mNodeValue);
- aNode.mNeighbourNodes[i] = null;
+ aNode.mNeighbourNodes[side] = null;
}
}
// get how many connections the pipe have
private static int getNumberOfConnections(MetaPipeEntity aPipe) {
int tCons = 0;
- for (int i = 0; i < 6; i++) {
- if (aPipe.isConnectedAtSide(i)) tCons++;
+ for (byte side : ALL_VALID_SIDES) {
+ if (aPipe.isConnectedAtSide(side)) tCons++;
}
return tCons;
}
@@ -53,17 +54,17 @@ public abstract class GenerateNodeMap {
int aNextNodeValue,
ArrayList<ConsumerNode> tConsumers,
HashSet<Node> tNodeMap) {
- MetaPipeEntity tMetaPipe = (MetaPipeEntity) aPipe.getMetaTileEntity();
- for (byte i = 0; i < 6; i++) {
- if (i == aInvalidSide) {
+ final MetaPipeEntity tMetaPipe = (MetaPipeEntity) aPipe.getMetaTileEntity();
+ for (byte side : ALL_VALID_SIDES) {
+ if (side == aInvalidSide) {
continue;
}
- TileEntity tNextTileEntity = aPipe.getTileEntityAtSide(i);
- if (tNextTileEntity == null || (tMetaPipe != null && !tMetaPipe.isConnectedAtSide(i))) continue;
- ArrayList<MetaPipeEntity> tNewPipes = new ArrayList<>();
- Pair nextTileEntity = getNextValidTileEntity(tNextTileEntity, tNewPipes, i, tNodeMap);
+ final TileEntity tNextTileEntity = aPipe.getTileEntityAtSide(side);
+ if (tNextTileEntity == null || (tMetaPipe != null && !tMetaPipe.isConnectedAtSide(side))) continue;
+ final ArrayList<MetaPipeEntity> tNewPipes = new ArrayList<>();
+ final Pair nextTileEntity = getNextValidTileEntity(tNextTileEntity, tNewPipes, side, tNodeMap);
if (nextTileEntity != null) {
- Node tNextNode = generateNode(
+ final Node tNextNode = generateNode(
nextTileEntity.mTileEntity,
aPipeNode,
aNextNodeValue + 1,
@@ -74,10 +75,10 @@ public abstract class GenerateNodeMap {
if (tNextNode != null) {
aNextNodeValue = tNextNode.mHighestNodeValue;
aPipeNode.mHighestNodeValue = tNextNode.mHighestNodeValue;
- aPipeNode.mNeighbourNodes[i] = tNextNode;
- aPipeNode.mNodePaths[i] = aPipeNode.returnValues.mReturnPath;
- aPipeNode.locks[i] = aPipeNode.returnValues.returnLock;
- aPipeNode.mNodePaths[i].reloadLocks();
+ aPipeNode.mNeighbourNodes[side] = tNextNode;
+ aPipeNode.mNodePaths[side] = aPipeNode.returnValues.mReturnPath;
+ aPipeNode.locks[side] = aPipeNode.returnValues.returnLock;
+ aPipeNode.mNodePaths[side].reloadLocks();
}
}
}
@@ -94,14 +95,14 @@ public abstract class GenerateNodeMap {
ArrayList<ConsumerNode> aConsumers,
HashSet<Node> aNodeMap) {
if (aTileEntity.isInvalid()) return null;
- byte tSideOp = getOppositeSide(aSide);
- byte tInvalidSide = aPreviousNode == null ? -1 : tSideOp;
+ final byte tSideOp = getOppositeSide(aSide);
+ final byte tInvalidSide = aPreviousNode == null ? -1 : tSideOp;
Node tThisNode = null;
if (isPipe(aTileEntity)) {
- BaseMetaPipeEntity tPipe = (BaseMetaPipeEntity) aTileEntity;
- MetaPipeEntity tMetaPipe = (MetaPipeEntity) tPipe.getMetaTileEntity();
- int tConnections = getNumberOfConnections(tMetaPipe);
- Node tPipeNode;
+ final BaseMetaPipeEntity tPipe = (BaseMetaPipeEntity) aTileEntity;
+ final MetaPipeEntity tMetaPipe = (MetaPipeEntity) tPipe.getMetaTileEntity();
+ final int tConnections = getNumberOfConnections(tMetaPipe);
+ final Node tPipeNode;
if (tConnections == 1) {
tPipeNode = getEmptyNode(aNextNodeValue, tSideOp, aTileEntity, aConsumers);
if (tPipeNode == null) return null;
@@ -115,7 +116,7 @@ public abstract class GenerateNodeMap {
if (tInvalidSide > -1) {
tPipeNode.mNeighbourNodes[tInvalidSide] = aPreviousNode;
tPipeNode.mNodePaths[tInvalidSide] = getNewPath(aPipes.toArray(new MetaPipeEntity[0]));
- Lock lock = new Lock();
+ final Lock lock = new Lock();
tPipeNode.mNodePaths[tSideOp].lock = lock;
tPipeNode.locks[tInvalidSide] = lock;
aPreviousNode.returnValues.mReturnPath = tPipeNode.mNodePaths[tInvalidSide];
@@ -124,10 +125,10 @@ public abstract class GenerateNodeMap {
if (tConnections > 1)
generateNextNode(tPipe, tPipeNode, tInvalidSide, aNextNodeValue, aConsumers, aNodeMap);
} else if (addConsumer(aTileEntity, tSideOp, aNextNodeValue, aConsumers)) {
- ConsumerNode tConsumeNode = aConsumers.get(aConsumers.size() - 1);
+ final ConsumerNode tConsumeNode = aConsumers.get(aConsumers.size() - 1);
tConsumeNode.mNeighbourNodes[tSideOp] = aPreviousNode;
tConsumeNode.mNodePaths[tSideOp] = getNewPath(aPipes.toArray(new MetaPipeEntity[0]));
- Lock lock = new Lock();
+ final Lock lock = new Lock();
tConsumeNode.mNodePaths[tSideOp].lock = lock;
aPreviousNode.returnValues.mReturnPath = tConsumeNode.mNodePaths[tSideOp];
aPreviousNode.returnValues.returnLock = lock;
@@ -140,18 +141,18 @@ public abstract class GenerateNodeMap {
protected Pair getNextValidTileEntity(
TileEntity aTileEntity, ArrayList<MetaPipeEntity> aPipes, byte aSide, HashSet<Node> aNodeMap) {
if (isPipe(aTileEntity)) {
- BaseMetaPipeEntity tPipe = (BaseMetaPipeEntity) aTileEntity;
- MetaPipeEntity tMetaPipe = (MetaPipeEntity) tPipe.getMetaTileEntity();
- Node tNode = tPipe.getNode();
+ final BaseMetaPipeEntity tPipe = (BaseMetaPipeEntity) aTileEntity;
+ final MetaPipeEntity tMetaPipe = (MetaPipeEntity) tPipe.getMetaTileEntity();
+ final Node tNode = tPipe.getNode();
if (tNode != null) {
if (aNodeMap.contains(tNode)) return null;
}
- int tConnections = getNumberOfConnections(tMetaPipe);
+ final int tConnections = getNumberOfConnections(tMetaPipe);
if (tConnections == 2) {
- byte tSideOp = getOppositeSide(aSide);
- for (byte i = 0; i < 6; i++) {
+ final byte tSideOp = getOppositeSide(aSide);
+ for (byte i : ALL_VALID_SIDES) {
if (i == tSideOp || !(tMetaPipe.isConnectedAtSide(i))) continue;
- TileEntity tNewTileEntity = tPipe.getTileEntityAtSide(i);
+ final TileEntity tNewTileEntity = tPipe.getTileEntityAtSide(i);
if (tNewTileEntity == null) continue;
if (isPipe(tNewTileEntity)) {
aPipes.add(tMetaPipe);
diff --git a/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java b/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java
index 2d776ce71e..d1e699bb40 100644
--- a/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java
+++ b/src/main/java/gregtech/api/gui/modularui/GT_UIInfos.java
@@ -70,9 +70,9 @@ public class GT_UIInfos {
side,
UIBuilder.of()
.container((player, world, x, y, z) -> {
- TileEntity te = world.getTileEntity(x, y, z);
+ final TileEntity te = world.getTileEntity(x, y, z);
if (!(te instanceof ICoverable)) return null;
- ICoverable gtTileEntity = (ICoverable) te;
+ final ICoverable gtTileEntity = (ICoverable) te;
GT_CoverBehaviorBase<?> cover = gtTileEntity.getCoverBehaviorAtSideNew(side);
return createCoverContainer(
player,
@@ -84,10 +84,10 @@ public class GT_UIInfos {
})
.gui((player, world, x, y, z) -> {
if (!world.isRemote) return null;
- TileEntity te = world.getTileEntity(x, y, z);
+ final TileEntity te = world.getTileEntity(x, y, z);
if (!(te instanceof ICoverable)) return null;
- ICoverable gtTileEntity = (ICoverable) te;
- GT_CoverBehaviorBase<?> cover = gtTileEntity.getCoverBehaviorAtSideNew(side);
+ final ICoverable gtTileEntity = (ICoverable) te;
+ final GT_CoverBehaviorBase<?> cover = gtTileEntity.getCoverBehaviorAtSideNew(side);
return createCoverGuiContainer(
player,
cover::createWindow,
@@ -148,11 +148,9 @@ public class GT_UIInfos {
Function<UIBuildContext, ModularWindow> windowCreator,
Runnable onWidgetUpdate,
ContainerConstructor containerCreator) {
- UIBuildContext buildContext = new UIBuildContext(player);
- ModularWindow window = windowCreator.apply(buildContext);
- if (window == null) {
- return null;
- }
+ final UIBuildContext buildContext = new UIBuildContext(player);
+ final ModularWindow window = windowCreator.apply(buildContext);
+ if (window == null) return null;
return containerCreator.of(new ModularUIContext(buildContext, onWidgetUpdate), window);
}
@@ -161,10 +159,9 @@ public class GT_UIInfos {
EntityPlayer player,
Function<UIBuildContext, ModularWindow> windowCreator,
ContainerConstructor containerConstructor) {
- ModularUIContainer container = createTileEntityContainer(player, windowCreator, null, containerConstructor);
- if (container == null) {
- return null;
- }
+ final ModularUIContainer container =
+ createTileEntityContainer(player, windowCreator, null, containerConstructor);
+ if (container == null) return null;
return new ModularGui(container);
}
@@ -175,11 +172,9 @@ public class GT_UIInfos {
int coverID,
byte side,
ICoverable tile) {
- GT_CoverUIBuildContext buildContext = new GT_CoverUIBuildContext(player, coverID, side, tile, false);
- ModularWindow window = windowCreator.apply(buildContext);
- if (window == null) {
- return null;
- }
+ final GT_CoverUIBuildContext buildContext = new GT_CoverUIBuildContext(player, coverID, side, tile, false);
+ final ModularWindow window = windowCreator.apply(buildContext);
+ if (window == null) return null;
return new ModularUIContainer(new ModularUIContext(buildContext, onWidgetUpdate), window);
}
@@ -190,7 +185,7 @@ public class GT_UIInfos {
int coverID,
byte side,
ICoverable tile) {
- ModularUIContainer container = createCoverContainer(player, windowCreator, null, coverID, side, tile);
+ final ModularUIContainer container = createCoverContainer(player, windowCreator, null, coverID, side, tile);
if (container == null) {
return null;
}
diff --git a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
index a92ff64df6..3ca1e6d45e 100644
--- a/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
+++ b/src/main/java/gregtech/api/gui/modularui/GT_UITextures.java
@@ -347,4 +347,8 @@ public class GT_UITextures {
public static final UITexture PICTURE_SQUARE_LIGHT_GRAY =
UITexture.fullImage(MODID, "gui/picture/square_light_gray");
public static final UITexture PICTURE_GAUGE = UITexture.fullImage(MODID, "gui/picture/gauge");
+ public static final UITexture PICTURE_ITEM_IN = UITexture.fullImage(MODID, "gui/picture/item_in");
+ public static final UITexture PICTURE_ITEM_OUT = UITexture.fullImage(MODID, "gui/picture/item_out");
+ public static final UITexture PICTURE_FLUID_IN = UITexture.fullImage(MODID, "gui/picture/fluid_in");
+ public static final UITexture PICTURE_FLUID_OUT = UITexture.fullImage(MODID, "gui/picture/fluid_out");
}
diff --git a/src/main/java/gregtech/api/gui/widgets/GT_GuiCoverTabLine.java b/src/main/java/gregtech/api/gui/widgets/GT_GuiCoverTabLine.java
index 525618589b..d5e383ed50 100644
--- a/src/main/java/gregtech/api/gui/widgets/GT_GuiCoverTabLine.java
+++ b/src/main/java/gregtech/api/gui/widgets/GT_GuiCoverTabLine.java
@@ -79,7 +79,7 @@ public class GT_GuiCoverTabLine extends GT_GuiTabLine {
*/
private void setupTabs() {
for (byte tSide = 0; tSide < 6; tSide++) {
- ItemStack cover = tile.getCoverItemAtSide(tSide);
+ final ItemStack cover = tile.getCoverItemAtSide(tSide);
if (cover != null) {
addCoverToTabs(tSide, cover);
}
@@ -114,7 +114,7 @@ public class GT_GuiCoverTabLine extends GT_GuiTabLine {
* @param cover
*/
private void addCoverToTabs(byte side, ItemStack cover) {
- boolean enabled = this.tile.getCoverBehaviorAtSideNew(side).hasCoverGUI();
+ final boolean enabled = this.tile.getCoverBehaviorAtSideNew(side).hasCoverGUI();
this.setTab(side, cover, null, getTooltipForCoverTab(side, cover, enabled));
this.setTabEnabled(side, enabled);
}
@@ -127,7 +127,7 @@ public class GT_GuiCoverTabLine extends GT_GuiTabLine {
* @return This cover tab's tooltip
*/
private String[] getTooltipForCoverTab(byte side, ItemStack cover, boolean enabled) {
- List<String> tooltip = cover.getTooltip(Minecraft.getMinecraft().thePlayer, true);
+ final List<String> tooltip = cover.getTooltip(Minecraft.getMinecraft().thePlayer, true);
tooltip.set(
0,
(enabled ? EnumChatFormatting.UNDERLINE : EnumChatFormatting.DARK_GRAY)
@@ -158,9 +158,9 @@ public class GT_GuiCoverTabLine extends GT_GuiTabLine {
static class CoverTabLineNEIHandler extends INEIGuiAdapter {
@Override
public boolean hideItemPanelSlot(GuiContainer gui, int x, int y, int w, int h) {
- Rectangle neiSlotArea = new Rectangle(x, y, w, h);
+ final Rectangle neiSlotArea = new Rectangle(x, y, w, h);
if (gui instanceof GT_GUIContainerMetaTile_Machine) {
- GT_GuiTabLine tabLine = ((GT_GUIContainerMetaTile_Machine) gui).coverTabs;
+ final GT_GuiTabLine tabLine = ((GT_GUIContainerMetaTile_Machine) gui).coverTabs;
if (!tabLine.visible) {
return false;
}
diff --git a/src/main/java/gregtech/api/interfaces/covers/IControlsWorkCover.java b/src/main/java/gregtech/api/interfaces/covers/IControlsWorkCover.java
index 7c2361af83..47edc7af93 100644
--- a/src/main/java/gregtech/api/interfaces/covers/IControlsWorkCover.java
+++ b/src/main/java/gregtech/api/interfaces/covers/IControlsWorkCover.java
@@ -1,5 +1,7 @@
package gregtech.api.interfaces.covers;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
+
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IMachineProgress;
@@ -15,9 +17,9 @@ public interface IControlsWorkCover {
* @return true if the cover is the first (side) one
**/
static boolean makeSureOnlyOne(byte aMySide, ICoverable aTileEntity) {
- for (byte i = 0; i < 6; i++) {
- if (aTileEntity.getCoverBehaviorAtSideNew(i) instanceof IControlsWorkCover && i < aMySide) {
- aTileEntity.dropCover(i, i, true);
+ for (byte tSide : ALL_VALID_SIDES) {
+ if (aTileEntity.getCoverBehaviorAtSideNew(tSide) instanceof IControlsWorkCover && tSide < aMySide) {
+ aTileEntity.dropCover(tSide, tSide, true);
aTileEntity.markDirty();
return false;
}
diff --git a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java
index 1b1ce36871..5375ea85ee 100644
--- a/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java
+++ b/src/main/java/gregtech/api/interfaces/metatileentity/IMetaTileEntityItemPipe.java
@@ -1,5 +1,7 @@
package gregtech.api.interfaces.metatileentity;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
+
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.metatileentity.BaseMetaPipeEntity;
import gregtech.api.util.GT_Utility;
@@ -56,39 +58,29 @@ public interface IMetaTileEntityItemPipe extends IMetaTileEntity {
aStep += aMetaTileEntity.getStepSize();
if (aIgnoreCapacity || aMetaTileEntity.pipeCapacityCheck())
if (aMap.get(aMetaTileEntity) == null || aMap.get(aMetaTileEntity) > aStep) {
- IGregTechTileEntity aBaseMetaTileEntity = aMetaTileEntity.getBaseMetaTileEntity();
+ final IGregTechTileEntity aBaseMetaTileEntity = aMetaTileEntity.getBaseMetaTileEntity();
aMap.put(aMetaTileEntity, aStep);
- for (byte i = 0, j = 0; i < 6; i++) {
+ byte oppositeSide;
+ for (byte side : ALL_VALID_SIDES) {
if (aMetaTileEntity instanceof IConnectable
- && !((IConnectable) aMetaTileEntity).isConnectedAtSide(i)) continue;
- j = GT_Utility.getOppositeSide(i);
+ && !((IConnectable) aMetaTileEntity).isConnectedAtSide(side)) continue;
+ oppositeSide = GT_Utility.getOppositeSide(side);
if (aSuckItems) {
- if (aBaseMetaTileEntity
- .getCoverBehaviorAtSideNew(i)
- .letsItemsIn(
- i,
- aBaseMetaTileEntity.getCoverIDAtSide(i),
- aBaseMetaTileEntity.getComplexCoverDataAtSide(i),
- -2,
- aBaseMetaTileEntity)) {
- IGregTechTileEntity tItemPipe = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(i);
+ if (aBaseMetaTileEntity.getCoverInfoAtSide(side).letsItemsIn(-2)) {
+ final IGregTechTileEntity tItemPipe =
+ aBaseMetaTileEntity.getIGregTechTileEntityAtSide(side);
if (aBaseMetaTileEntity.getColorization() >= 0) {
- byte tColor = tItemPipe.getColorization();
+ final byte tColor = tItemPipe.getColorization();
if (tColor >= 0 && tColor != aBaseMetaTileEntity.getColorization()) {
continue;
}
}
if (tItemPipe instanceof BaseMetaPipeEntity) {
- IMetaTileEntity tMetaTileEntity = tItemPipe.getMetaTileEntity();
+ final IMetaTileEntity tMetaTileEntity = tItemPipe.getMetaTileEntity();
if (tMetaTileEntity instanceof IMetaTileEntityItemPipe
&& tItemPipe
- .getCoverBehaviorAtSideNew(j)
- .letsItemsOut(
- j,
- tItemPipe.getCoverIDAtSide(j),
- tItemPipe.getComplexCoverDataAtSide(j),
- -2,
- tItemPipe)) {
+ .getCoverInfoAtSide(oppositeSide)
+ .letsItemsOut(-2)) {
scanPipes(
(IMetaTileEntityItemPipe) tMetaTileEntity,
aMap,
@@ -99,33 +91,22 @@ public interface IMetaTileEntityItemPipe extends IMetaTileEntity {
}
}
} else {
- if (aBaseMetaTileEntity
- .getCoverBehaviorAtSideNew(i)
- .letsItemsOut(
- i,
- aBaseMetaTileEntity.getCoverIDAtSide(i),
- aBaseMetaTileEntity.getComplexCoverDataAtSide(i),
- -2,
- aBaseMetaTileEntity)) {
- IGregTechTileEntity tItemPipe = aBaseMetaTileEntity.getIGregTechTileEntityAtSide(i);
+ if (aBaseMetaTileEntity.getCoverInfoAtSide(side).letsItemsOut(-2)) {
+ final IGregTechTileEntity tItemPipe =
+ aBaseMetaTileEntity.getIGregTechTileEntityAtSide(side);
if (tItemPipe != null) {
if (aBaseMetaTileEntity.getColorization() >= 0) {
- byte tColor = tItemPipe.getColorization();
+ final byte tColor = tItemPipe.getColorization();
if (tColor >= 0 && tColor != aBaseMetaTileEntity.getColorization()) {
continue;
}
}
if (tItemPipe instanceof BaseMetaPipeEntity) {
- IMetaTileEntity tMetaTileEntity = tItemPipe.getMetaTileEntity();
+ final IMetaTileEntity tMetaTileEntity = tItemPipe.getMetaTileEntity();
if (tMetaTileEntity instanceof IMetaTileEntityItemPipe
&& tItemPipe
- .getCoverBehaviorAtSideNew(j)
- .letsItemsIn(
- j,
- tItemPipe.getCoverIDAtSide(j),
- tItemPipe.getComplexCoverDataAtSide(j),
- -2,
- tItemPipe)) {
+ .getCoverInfoAtSide(oppositeSide)
+ .letsItemsIn(-2)) {
scanPipes(
(IMetaTileEntityItemPipe) tMetaTileEntity,
aMap,
diff --git a/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java b/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java
index 6beb34a305..df131c84c2 100644
--- a/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java
+++ b/src/main/java/gregtech/api/interfaces/tileentity/ICoverable.java
@@ -3,6 +3,7 @@ package gregtech.api.interfaces.tileentity;
import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.covers.CoverInfo;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
@@ -32,6 +33,10 @@ public interface ICoverable extends IRedstoneTileEntity, IHasInventory, IBasicEn
@Deprecated
int getCoverDataAtSide(byte aSide);
+ default CoverInfo getCoverInfoAtSide(byte aSide) {
+ return null;
+ }
+
default ISerializableObject getComplexCoverDataAtSide(byte aSide) {
return new ISerializableObject.LegacyCoverData(getCoverDataAtSide(aSide));
}
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
index 09b62c0657..31a341040e 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaPipeEntity.java
@@ -22,6 +22,7 @@ import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_OreDictUnificator;
import gregtech.api.util.GT_Utility;
+import gregtech.common.covers.CoverInfo;
import java.util.*;
import net.minecraft.block.Block;
import net.minecraft.entity.Entity;
@@ -79,7 +80,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
public void addToLock(TileEntity tileEntity, int side) {
if (node != null) {
- Lock lock = node.locks[side];
+ final Lock lock = node.locks[side];
if (lock != null) {
lock.addTileEntity(tileEntity);
}
@@ -90,7 +91,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
public void removeFromLock(TileEntity tileEntity, int side) {
if (node != null) {
- Lock lock = node.locks[side];
+ final Lock lock = node.locks[side];
if (lock != null) {
lock.removeTileEntity(tileEntity);
}
@@ -100,7 +101,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
}
public void reloadLocks() {
- IMetaTileEntity meta = getMetaTileEntity();
+ final IMetaTileEntity meta = getMetaTileEntity();
if (meta instanceof MetaPipeEntity) {
((MetaPipeEntity) meta).reloadLocks();
}
@@ -283,12 +284,12 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
(short) yCoord,
zCoord,
mID,
- mCoverSides[0],
- mCoverSides[1],
- mCoverSides[2],
- mCoverSides[3],
- mCoverSides[4],
- mCoverSides[5],
+ getCoverInfoAtSide((byte) 0).getCoverID(),
+ getCoverInfoAtSide((byte) 1).getCoverID(),
+ getCoverInfoAtSide((byte) 2).getCoverID(),
+ getCoverInfoAtSide((byte) 3).getCoverID(),
+ getCoverInfoAtSide((byte) 4).getCoverID(),
+ getCoverInfoAtSide((byte) 5).getCoverID(),
oTextureData = mConnections,
oUpdateData = hasValidMetaTileEntity() ? mMetaTileEntity.getUpdateData() : 0,
oRedstoneData = (byte) (((mSidedRedstone[0] > 0) ? 1 : 0)
@@ -705,16 +706,16 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
@Override
public ITexture[] getTexture(Block aBlock, byte aSide) {
- ITexture rIcon = getCoverTexture(aSide);
+ final ITexture rIcon = getCoverTexture(aSide);
if (rIcon != null) return new ITexture[] {rIcon};
return getTextureUncovered(aSide);
}
@Override
public ITexture[] getTextureCovered(byte aSide) {
- ITexture coverTexture = getCoverTexture(aSide);
- ITexture[] textureUncovered = getTextureUncovered(aSide);
- ITexture[] textureCovered;
+ final ITexture coverTexture = getCoverTexture(aSide);
+ final ITexture[] textureUncovered = getTextureUncovered(aSide);
+ final ITexture[] textureCovered;
if (coverTexture != null) {
textureCovered = Arrays.copyOf(textureUncovered, textureUncovered.length + 1);
textureCovered[textureUncovered.length] = coverTexture;
@@ -762,18 +763,11 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
@Override
public ArrayList<ItemStack> getDrops() {
- ItemStack rStack = new ItemStack(GregTech_API.sBlockMachines, 1, mID);
- NBTTagCompound tNBT = new NBTTagCompound();
- 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);
+ final ItemStack rStack = new ItemStack(GregTech_API.sBlockMachines, 1, mID);
+ final NBTTagCompound tNBT = new NBTTagCompound();
+
+ writeCoverNBT(tNBT, true);
+
if (hasValidMetaTileEntity()) mMetaTileEntity.setItemNBT(tNBT);
if (!tNBT.hasNoTags()) rStack.setTagCompound(tNBT);
@@ -791,15 +785,15 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
if (isClientSide()) {
// Configure Cover, sneak can also be: screwdriver, wrench, side cutter, soldering iron
if (aPlayer.isSneaking()) {
- byte tSide =
+ final byte tSide =
(getCoverIDAtSide(aSide) == 0) ? GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ) : aSide;
- return (getCoverBehaviorAtSideNew(tSide).hasCoverGUI());
+ return (getCoverInfoAtSide(tSide).hasCoverGUI());
} else if (getCoverBehaviorAtSideNew(aSide).onCoverRightclickClient(aSide, this, aPlayer, aX, aY, aZ)) {
return true;
}
}
if (isServerSide()) {
- 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)) {
@@ -808,7 +802,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
setColorization((byte) -1);
return true;
}
- byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ);
+ final byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ);
if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sWrenchList)) {
if (mMetaTileEntity.onWrenchRightClick(aSide, tSide, aPlayer, aX, aY, aZ)) {
mMetaTileEntity.markDirty();
@@ -823,16 +817,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 200, aPlayer)) {
setCoverDataAtSide(
tSide,
- getCoverBehaviorAtSideNew(tSide)
- .onCoverScrewdriverClick(
- tSide,
- getCoverIDAtSide(tSide),
- getComplexCoverDataAtSide(tSide),
- this,
- aPlayer,
- 0.5F,
- 0.5F,
- 0.5F));
+ getCoverInfoAtSide(tSide).onCoverScrewdriverClick(aPlayer, 0.5F, 0.5F, 0.5F));
mMetaTileEntity.onScrewdriverRightClick(tSide, aPlayer, aX, aY, aZ);
mMetaTileEntity.markDirty();
GT_Utility.sendSoundToPlayers(
@@ -841,17 +826,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
} else {
if (GT_ModHandler.damageOrDechargeItem(tCurrentItem, 1, 1000, aPlayer)) {
setCoverDataAtSide(
- aSide,
- getCoverBehaviorAtSideNew(aSide)
- .onCoverScrewdriverClick(
- aSide,
- getCoverIDAtSide(aSide),
- getComplexCoverDataAtSide(aSide),
- this,
- aPlayer,
- aX,
- aY,
- aZ));
+ aSide, getCoverInfoAtSide(aSide).onCoverScrewdriverClick(aPlayer, aX, aY, aZ));
mMetaTileEntity.onScrewdriverRightClick(aSide, aPlayer, aX, aY, aZ);
mMetaTileEntity.markDirty();
GT_Utility.sendSoundToPlayers(
@@ -925,7 +900,9 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
byte coverSide = aSide;
if (getCoverIDAtSide(aSide) == 0) coverSide = tSide;
- if (getCoverIDAtSide(coverSide) == 0) {
+ final CoverInfo coverInfo = getCoverInfoAtSide(coverSide);
+
+ if (coverInfo.getCoverID() == 0) {
if (GT_Utility.isStackInList(tCurrentItem, GregTech_API.sCovers.keySet())) {
if (GregTech_API.getCoverBehaviorNew(tCurrentItem)
.isCoverPlaceable(coverSide, tCurrentItem, this)
@@ -951,34 +928,18 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
}
} else if (aPlayer.isSneaking()) { // Sneak click, no tool -> open cover config or turn back.
aSide = (getCoverIDAtSide(aSide) == 0) ? GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ) : aSide;
- return getCoverIDAtSide(aSide) > 0
- && getCoverBehaviorAtSideNew(aSide)
- .onCoverShiftRightClick(
- aSide,
- getCoverIDAtSide(aSide),
- getComplexCoverDataAtSide(aSide),
- this,
- aPlayer);
+ final CoverInfo coverInfo = getCoverInfoAtSide(aSide);
+ return coverInfo.isValid() && coverInfo.onCoverShiftRightClick(aPlayer);
}
- if (getCoverBehaviorAtSideNew(aSide)
- .onCoverRightClick(
- aSide,
- getCoverIDAtSide(aSide),
- getComplexCoverDataAtSide(aSide),
- this,
- aPlayer,
- aX,
- aY,
- aZ)) return true;
+ if (getCoverInfoAtSide(aSide).onCoverRightClick(aPlayer, aX, aY, aZ)) return true;
}
- if (!getCoverBehaviorAtSideNew(aSide)
- .isGUIClickable(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this)) return false;
+ if (!getCoverInfoAtSide(aSide).isGUIClickable()) return false;
try {
if (!aPlayer.isSneaking() && hasValidMetaTileEntity()) {
- boolean handled = mMetaTileEntity.onRightclick(this, aPlayer, aSide, aX, aY, aZ);
+ final boolean handled = mMetaTileEntity.onRightclick(this, aPlayer, aSide, aX, aY, aZ);
if (handled) {
mMetaTileEntity.markDirty();
}
@@ -1034,21 +995,9 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
*/
@Override
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);
+ final CoverInfo coverInfo = getCoverInfoAtSide((byte) aSide);
+ if (canAccessData() && (coverInfo.letsItemsOut(-1) || coverInfo.letsItemsIn(-1)))
+ return mMetaTileEntity.getAccessibleSlotsFromSide(aSide);
return GT_Values.emptyIntArray;
}
@@ -1058,13 +1007,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
@Override
public boolean canInsertItem(int aIndex, ItemStack aStack, int aSide) {
return canAccessData()
- && getCoverBehaviorAtSideNew((byte) aSide)
- .letsItemsIn(
- (byte) aSide,
- getCoverIDAtSide((byte) aSide),
- getComplexCoverDataAtSide((byte) aSide),
- aIndex,
- this)
+ && getCoverInfoAtSide((byte) aSide).letsItemsIn(aIndex)
&& mMetaTileEntity.canInsertItem(aIndex, aStack, aSide);
}
@@ -1206,30 +1149,18 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
private boolean canMoveFluidOnSide(ForgeDirection aSide, Fluid aFluid, boolean isFill) {
if (aSide == ForgeDirection.UNKNOWN) return true;
- IFluidHandler tTileEntity = getITankContainerAtSide((byte) aSide.ordinal());
+ final IFluidHandler tTileEntity = getITankContainerAtSide((byte) aSide.ordinal());
// Only require a connection if there's something to connect to - Allows fluid cells & buckets to interact with
// the pipe
if (tTileEntity != null && !mMetaTileEntity.isConnectedAtSide((byte) aSide.ordinal())) return false;
if (isFill
&& mMetaTileEntity.isLiquidInput((byte) aSide.ordinal())
- && getCoverBehaviorAtSideNew((byte) aSide.ordinal())
- .letsFluidIn(
- (byte) aSide.ordinal(),
- getCoverIDAtSide((byte) aSide.ordinal()),
- getComplexCoverDataAtSide((byte) aSide.ordinal()),
- aFluid,
- this)) return true;
+ && getCoverInfoAtSide((byte) aSide.ordinal()).letsFluidIn(aFluid)) return true;
if (!isFill
&& mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal())
- && getCoverBehaviorAtSideNew((byte) aSide.ordinal())
- .letsFluidOut(
- (byte) aSide.ordinal(),
- getCoverIDAtSide((byte) aSide.ordinal()),
- getComplexCoverDataAtSide((byte) aSide.ordinal()),
- aFluid,
- this)) return true;
+ && getCoverInfoAtSide((byte) aSide.ordinal()).letsFluidOut(aFluid)) return true;
return false;
}
@@ -1281,24 +1212,11 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
@Override
public FluidTankInfo[] getTankInfo(ForgeDirection aSide) {
+ final CoverInfo coverInfo = getCoverInfoAtSide((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((byte) aSide.ordinal()) && coverInfo.letsFluidIn(null))
+ || (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal()) && coverInfo.letsFluidOut(null))
// Doesn't need to be connected to get Tank Info -- otherwise things can't connect
)) return mMetaTileEntity.getTankInfo(aSide);
return new FluidTankInfo[] {};
@@ -1308,7 +1226,7 @@ public class BaseMetaPipeEntity extends CommonMetaTileEntity
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;
diff --git a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
index 821cfcd8a7..1e8ffa0994 100644
--- a/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/BaseMetaTileEntity.java
@@ -1,6 +1,7 @@
package gregtech.api.metatileentity;
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.NW;
import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.objects.XSTR.XSTR_INSTANCE;
@@ -40,6 +41,7 @@ import gregtech.api.net.GT_Packet_TileEntity;
import gregtech.api.objects.GT_ItemStack;
import gregtech.api.util.*;
import gregtech.common.GT_Pollution;
+import gregtech.common.covers.CoverInfo;
import ic2.api.Direction;
import java.lang.reflect.Field;
import java.util.*;
@@ -215,8 +217,6 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
loadMetaTileNBT(aNBT);
}
- if (mCoverData == null || mCoverData.length != 6) mCoverData = new ISerializableObject[6];
- if (mCoverSides.length != 6) mCoverSides = new int[] {0, 0, 0, 0, 0, 0};
if (mSidedRedstone.length != 6)
if (hasValidMetaTileEntity() && mMetaTileEntity.hasSidedRedstoneOutputBehavior())
mSidedRedstone = new byte[] {0, 0, 0, 0, 0, 0};
@@ -400,7 +400,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
}
if (mMetaTileEntity.isEnetOutput() || mMetaTileEntity.isEnetInput()) {
- for (byte i = 0; i < 6; i++) {
+ for (byte i : ALL_VALID_SIDES) {
boolean temp = isEnergyInputSide(i);
if (temp != mActiveEUInputs[i]) {
mActiveEUInputs[i] = temp;
@@ -656,12 +656,12 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
(short) yCoord,
zCoord,
mID,
- mCoverSides[0],
- mCoverSides[1],
- mCoverSides[2],
- mCoverSides[3],
- mCoverSides[4],
- mCoverSides[5],
+ getCoverInfoAtSide((byte) 0).getCoverID(),
+ getCoverInfoAtSide((byte) 1).getCoverID(),
+ getCoverInfoAtSide((byte) 2).getCoverID(),
+ getCoverInfoAtSide((byte) 3).getCoverID(),
+ getCoverInfoAtSide((byte) 4).getCoverID(),
+ getCoverInfoAtSide((byte) 5).getCoverID(),
oTextureData = (byte) ((mFacing & 7)
| (mActive ? 8 : 0)
| (mRedstone ? 16 : 0)
@@ -1147,7 +1147,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
public void generatePowerNodes() {
if (isServerSide() && (isEnetInput() || isEnetOutput())) {
final int time = MinecraftServer.getServer().getTickCounter();
- for (byte i = 0; i < 6; i++) {
+ for (byte i : ALL_VALID_SIDES) {
if (outputsEnergyTo(i, false) || inputEnergyFrom(i, false)) {
final IGregTechTileEntity TE = getIGregTechTileEntityAtSide(i);
if (TE instanceof BaseMetaPipeEntity) {
@@ -1252,8 +1252,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
private boolean isEnergyInputSide(byte aSide) {
if (aSide >= 0 && aSide < 6) {
- if (!getCoverBehaviorAtSideNew(aSide)
- .letsEnergyIn(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this)) return false;
+ if (!getCoverInfoAtSide(aSide).letsEnergyIn()) return false;
if (isInvalid() || mReleaseEnergy) return false;
if (canAccessData() && mMetaTileEntity.isElectric() && mMetaTileEntity.isEnetInput())
return mMetaTileEntity.isInputFacing(aSide);
@@ -1263,9 +1262,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
private boolean isEnergyOutputSide(byte aSide) {
if (aSide >= 0 && aSide < 6) {
- if (!getCoverBehaviorAtSideNew(aSide)
- .letsEnergyOut(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this))
- return false;
+ if (!getCoverInfoAtSide(aSide).letsEnergyOut()) return false;
if (isInvalid() || mReleaseEnergy) return mReleaseEnergy;
if (canAccessData() && mMetaTileEntity.isElectric() && mMetaTileEntity.isEnetOutput())
return mMetaTileEntity.isOutputFacing(aSide);
@@ -1460,10 +1457,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
return true;
}
- if (!getCoverBehaviorAtSideNew(aSide)
- .isGUIClickable(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this))
- return false;
+ if (!getCoverInfoAtSide(aSide).isGUIClickable()) return false;
}
+
if (isServerSide()) {
if (!privateAccess() || aPlayer.getDisplayName().equalsIgnoreCase(getOwnerName())) {
final ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem();
@@ -1622,6 +1618,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
return true;
}
}
+ // End item != null
} else if (aPlayer.isSneaking()) { // Sneak click, no tool -> open cover config if possible.
aSide = (getCoverIDAtSide(aSide) == 0)
? GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ)
@@ -1647,9 +1644,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
aY,
aZ)) return true;
- if (!getCoverBehaviorAtSideNew(aSide)
- .isGUIClickable(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this))
- return false;
+ if (!getCoverInfoAtSide(aSide).isGUIClickable()) return false;
if (isUpgradable() && tCurrentItem != null) {
if (ItemList.Upgrade_Muffler.isStackEqual(aPlayer.inventory.getCurrentItem())) {
@@ -1736,21 +1731,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
*/
@Override
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);
+ final CoverInfo coverInfo = getCoverInfoAtSide((byte) aSide);
+ if (canAccessData() && (coverInfo.letsItemsOut(-1) || coverInfo.letsItemsIn(-1)))
+ return mMetaTileEntity.getAccessibleSlotsFromSide(aSide);
return GT_Values.emptyIntArray;
}
@@ -1761,13 +1744,7 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
public boolean canInsertItem(int aIndex, ItemStack aStack, int aSide) {
return canAccessData()
&& (mRunningThroughTick || !mInputDisabled)
- && getCoverBehaviorAtSideNew((byte) aSide)
- .letsItemsIn(
- (byte) aSide,
- getCoverIDAtSide((byte) aSide),
- getComplexCoverDataAtSide((byte) aSide),
- aIndex,
- this)
+ && getCoverInfoAtSide((byte) aSide).letsItemsIn(aIndex)
&& mMetaTileEntity.canInsertItem(aIndex, aStack, aSide);
}
@@ -1998,13 +1975,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
&& (mRunningThroughTick || !mInputDisabled)
&& (aSide == ForgeDirection.UNKNOWN
|| (mMetaTileEntity.isLiquidInput((byte) aSide.ordinal())
- && getCoverBehaviorAtSideNew((byte) aSide.ordinal())
- .letsFluidIn(
- (byte) aSide.ordinal(),
- getCoverIDAtSide((byte) aSide.ordinal()),
- getComplexCoverDataAtSide((byte) aSide.ordinal()),
- aFluid == null ? null : aFluid.getFluid(),
- this)))) return mMetaTileEntity.fill(aSide, aFluid, doFill);
+ && getCoverInfoAtSide((byte) aSide.ordinal())
+ .letsFluidIn(aFluid == null ? null : aFluid.getFluid()))))
+ return mMetaTileEntity.fill(aSide, aFluid, doFill);
return 0;
}
@@ -2015,17 +1988,14 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
&& (mRunningThroughTick || !mOutputDisabled)
&& (aSide == ForgeDirection.UNKNOWN
|| (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal())
- && getCoverBehaviorAtSideNew((byte) aSide.ordinal())
+ && getCoverInfoAtSide((byte) aSide.ordinal())
.letsFluidOut(
- (byte) aSide.ordinal(),
- getCoverIDAtSide((byte) aSide.ordinal()),
- getComplexCoverDataAtSide((byte) aSide.ordinal()),
mMetaTileEntity.getFluid() == null
? null
: mMetaTileEntity
.getFluid()
- .getFluid(),
- this)))) return mMetaTileEntity.drain(aSide, maxDrain, doDrain);
+ .getFluid()))))
+ return mMetaTileEntity.drain(aSide, maxDrain, doDrain);
return null;
}
@@ -2036,13 +2006,9 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
&& (mRunningThroughTick || !mOutputDisabled)
&& (aSide == ForgeDirection.UNKNOWN
|| (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal())
- && getCoverBehaviorAtSideNew((byte) aSide.ordinal())
- .letsFluidOut(
- (byte) aSide.ordinal(),
- getCoverIDAtSide((byte) aSide.ordinal()),
- getComplexCoverDataAtSide((byte) aSide.ordinal()),
- aFluid == null ? null : aFluid.getFluid(),
- this)))) return mMetaTileEntity.drain(aSide, aFluid, doDrain);
+ && getCoverInfoAtSide((byte) aSide.ordinal())
+ .letsFluidOut(aFluid == null ? null : aFluid.getFluid()))))
+ return mMetaTileEntity.drain(aSide, aFluid, doDrain);
return null;
}
@@ -2053,13 +2019,8 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
&& (mRunningThroughTick || !mInputDisabled)
&& (aSide == ForgeDirection.UNKNOWN
|| (mMetaTileEntity.isLiquidInput((byte) aSide.ordinal())
- && getCoverBehaviorAtSideNew((byte) aSide.ordinal())
- .letsFluidIn(
- (byte) aSide.ordinal(),
- getCoverIDAtSide((byte) aSide.ordinal()),
- getComplexCoverDataAtSide((byte) aSide.ordinal()),
- aFluid,
- this)))) return mMetaTileEntity.canFill(aSide, aFluid);
+ && getCoverInfoAtSide((byte) aSide.ordinal()).letsFluidIn(aFluid))))
+ return mMetaTileEntity.canFill(aSide, aFluid);
return false;
}
@@ -2070,13 +2031,8 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
&& (mRunningThroughTick || !mOutputDisabled)
&& (aSide == ForgeDirection.UNKNOWN
|| (mMetaTileEntity.isLiquidOutput((byte) aSide.ordinal())
- && getCoverBehaviorAtSideNew((byte) aSide.ordinal())
- .letsFluidOut(
- (byte) aSide.ordinal(),
- getCoverIDAtSide((byte) aSide.ordinal()),
- getComplexCoverDataAtSide((byte) aSide.ordinal()),
- aFluid,
- this)))) return mMetaTileEntity.canDrain(aSide, aFluid);
+ && getCoverInfoAtSide((byte) aSide.ordinal()).letsFluidOut(aFluid))))
+ return mMetaTileEntity.canDrain(aSide, aFluid);
return false;
}
@@ -2087,21 +2043,10 @@ public class BaseMetaTileEntity extends CommonMetaTileEntity
if (canAccessData()
&& (aSide == ForgeDirection.UNKNOWN
|| (mMetaTileEntity.isLiquidInput(tSide)
- && getCoverBehaviorAtSideNew(tSide)
- .letsFluidIn(
- tSide,
- getCoverIDAtSide(tSide),
- getComplexCoverDataAtSide(tSide),
- null,
- this))
+ && getCoverInfoAtSide(tSide).letsFluidIn(null))
|| (mMetaTileEntity.isLiquidOutput(tSide)
- && getCoverBehaviorAtSideNew(tSide)
- .letsFluidOut(
- tSide,
- getCoverIDAtSide(tSide),
- getComplexCoverDataAtSide(tSide),
- null,
- this)))) return mMetaTileEntity.getTankInfo(aSide);
+ && getCoverInfoAtSide(tSide).letsFluidOut(null))))
+ return mMetaTileEntity.getTankInfo(aSide);
return new FluidTankInfo[] {};
}
diff --git a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java
index 2d29c7b70d..cbd39d3d15 100644
--- a/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/CoverableTileEntity.java
@@ -21,7 +21,6 @@ import gregtech.GT_Mod;
import gregtech.api.GregTech_API;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Textures;
-import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
import gregtech.api.gui.modularui.GUITextureSet;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.ICoverable;
@@ -34,6 +33,7 @@ import gregtech.api.util.GT_CoverBehavior;
import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.ISerializableObject;
import gregtech.common.GT_Client;
+import gregtech.common.covers.CoverInfo;
import gregtech.common.covers.GT_Cover_Fluidfilter;
import java.util.ArrayList;
import java.util.Arrays;
@@ -49,6 +49,7 @@ import net.minecraft.entity.player.EntityPlayer;
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.util.EnumChatFormatting;
import net.minecraft.util.StatCollector;
@@ -61,6 +62,16 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
.mapToInt(Enum::ordinal)
.mapToObj(i -> "mCoverData" + i)
.toArray(String[]::new);
+
+ // New Cover Information
+ protected final CoverInfo[] coverInfos = new CoverInfo[] {null, null, null, null, null, null};
+
+ protected byte[] mSidedRedstone = new byte[] {15, 15, 15, 15, 15, 15};
+ protected boolean mRedstone = false;
+ protected byte mStrongRedstone = 0;
+
+ /* Deprecated Cover Variables */
+ @Deprecated
protected final GT_CoverBehaviorBase<?>[] mCoverBehaviors = new GT_CoverBehaviorBase<?>[] {
GregTech_API.sNoBehavior,
GregTech_API.sNoBehavior,
@@ -69,26 +80,39 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
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;
+ @Deprecated
protected int[] mCoverSides = new int[] {0, 0, 0, 0, 0, 0};
+
+ @Deprecated
protected ISerializableObject[] mCoverData = new ISerializableObject[6];
+
+ @Deprecated
protected final boolean[] mCoverNeedUpdate = new boolean[] {false, false, false, false, false, false};
+ /* End Deprecated Cover Variables */
+
protected short mID = 0;
public long mTickTimer = 0;
protected void writeCoverNBT(NBTTagCompound aNBT, boolean isDrop) {
- boolean hasCover = false;
- for (int i = 0; i < mCoverData.length; i++) {
- if (mCoverSides[i] != 0 && mCoverData[i] != null) {
- aNBT.setTag(COVER_DATA_NBT_KEYS[i], mCoverData[i].saveDataToNBT());
- hasCover = true;
- }
+ final NBTTagList tList = new NBTTagList();
+ final int[] coverSides = new int[] {0, 0, 0, 0, 0, 0};
+
+ for (byte i = 0; i < coverInfos.length; i++) {
+ final CoverInfo coverInfo = getCoverInfoAtSide(i);
+ if (!coverInfo.isValid()) continue;
+
+ // Backwards compat, in case of a revert... for now
+ tList.appendTag(coverInfo.writeToNBT(new NBTTagCompound()));
+ aNBT.setTag(COVER_DATA_NBT_KEYS[i], coverInfo.getCoverData().saveDataToNBT());
+ }
+ if (tList.tagCount() > 0) {
+ aNBT.setTag(GT_Values.NBT.COVERS, tList);
+ // Backwards compat, in case of a revert... for now
+ aNBT.setIntArray("mCoverSides", coverSides);
}
+
if (mStrongRedstone > 0) aNBT.setByte("mStrongRedstone", mStrongRedstone);
- if (hasCover) aNBT.setIntArray("mCoverSides", mCoverSides);
if (!isDrop) {
aNBT.setByteArray("mRedstoneSided", mSidedRedstone);
@@ -97,40 +121,63 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
}
protected void readCoverNBT(NBTTagCompound aNBT) {
- mCoverSides = aNBT.hasKey("mCoverSides") ? aNBT.getIntArray("mCoverSides") : new int[] {0, 0, 0, 0, 0, 0};
mRedstone = aNBT.getBoolean("mRedstone");
mSidedRedstone = aNBT.hasKey("mRedstoneSided")
? aNBT.getByteArray("mRedstoneSided")
: new byte[] {15, 15, 15, 15, 15, 15};
mStrongRedstone = aNBT.getByte("mStrongRedstone");
- for (byte i = 0; i < 6; i++) mCoverBehaviors[i] = GregTech_API.getCoverBehaviorNew(mCoverSides[i]);
+ if (aNBT.hasKey(GT_Values.NBT.COVERS)) {
+ readCoverInfoNBT(aNBT);
+ } else if (aNBT.hasKey("mCoverSides")) {
+ readLegacyCoverInfoNBT(aNBT);
+ }
+ }
- // check old form of data
- mCoverData = new ISerializableObject[6];
- if (aNBT.hasKey("mCoverData", 11) && aNBT.getIntArray("mCoverData").length == 6) {
- final int[] tOldData = aNBT.getIntArray("mCoverData");
- for (int i = 0; i < tOldData.length; i++) {
- if (mCoverBehaviors[i] instanceof GT_Cover_Fluidfilter) {
+ public void readCoverInfoNBT(NBTTagCompound aNBT) {
+ final NBTTagList tList = aNBT.getTagList(GT_Values.NBT.COVERS, 10);
+ for (byte i = 0; i < tList.tagCount(); i++) {
+ final NBTTagCompound tNBT = tList.getCompoundTagAt(i);
+ final CoverInfo coverInfo = new CoverInfo(this, tNBT);
+ this.setCoverInfoAtSide(coverInfo.getSide(), coverInfo);
+ if (coverInfo.isDataNeededOnClient()) issueCoverUpdate(i);
+ }
+ }
+
+ public void readLegacyCoverInfoNBT(NBTTagCompound aNBT) {
+ final int[] coverIDs =
+ aNBT.hasKey("mCoverSides") ? aNBT.getIntArray("mCoverSides") : new int[] {0, 0, 0, 0, 0, 0};
+ final boolean hasOldCoverData = (aNBT.hasKey("mCoverData", 11) && aNBT.getIntArray("mCoverData").length == 6);
+ final int[] tOldData = hasOldCoverData ? aNBT.getIntArray("mCoverData") : new int[] {};
+
+ for (byte i : ALL_VALID_SIDES) {
+ if (coverIDs[i] == 0) continue;
+
+ final CoverInfo coverInfo = new CoverInfo(i, coverIDs[i], this, null);
+ final GT_CoverBehaviorBase<?> coverBehavior = coverInfo.getCoverBehavior();
+ if (coverBehavior == GregTech_API.sNoBehavior) continue;
+
+ ISerializableObject coverData = null;
+ if (hasOldCoverData) {
+ if (coverBehavior instanceof GT_Cover_Fluidfilter) {
final String filterKey = String.format("fluidFilter%d", i);
if (aNBT.hasKey(filterKey)) {
- mCoverData[i] = mCoverBehaviors[i].createDataObject(
- (tOldData[i] & 7) | (FluidRegistry.getFluidID(aNBT.getString(filterKey)) << 3));
+ coverData = coverInfo
+ .getCoverBehavior()
+ .createDataObject(
+ (tOldData[i] & 7) | (FluidRegistry.getFluidID(aNBT.getString(filterKey)) << 3));
}
- } else if (mCoverBehaviors[i] != null && mCoverBehaviors[i] != GregTech_API.sNoBehavior) {
- mCoverData[i] = mCoverBehaviors[i].createDataObject(tOldData[i]);
+ } else {
+ coverData = coverBehavior.createDataObject(tOldData[i]);
}
- }
- } else {
- // no old data
- for (byte i = 0; i < 6; i++) {
- if (mCoverBehaviors[i] == null) continue;
+ } else {
if (aNBT.hasKey(COVER_DATA_NBT_KEYS[i]))
- mCoverData[i] = mCoverBehaviors[i].createDataObject(aNBT.getTag(COVER_DATA_NBT_KEYS[i]));
- else mCoverData[i] = mCoverBehaviors[i].createDataObject();
- if (mCoverBehaviors[i].isDataNeededOnClient(i, mCoverSides[i], mCoverData[i], this))
- issueCoverUpdate(i);
+ coverData = coverBehavior.createDataObject(aNBT.getTag(COVER_DATA_NBT_KEYS[i]));
}
+
+ if (coverData != null) coverInfo.setCoverData(coverData);
+ setCoverInfoAtSide(i, coverInfo);
+ if (coverInfo.isDataNeededOnClient()) issueCoverUpdate(i);
}
}
@@ -138,33 +185,45 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
protected boolean doCoverThings() {
for (byte i : ALL_VALID_SIDES) {
- if (getCoverIDAtSide(i) != 0) {
- final GT_CoverBehaviorBase<?> tCover = getCoverBehaviorAtSideNew(i);
- final int tCoverTickRate = tCover.getTickRate(i, getCoverIDAtSide(i), mCoverData[i], this);
- if (tCoverTickRate > 0 && mTickTimer % tCoverTickRate == 0) {
- final byte tRedstone =
- tCover.isRedstoneSensitive(i, getCoverIDAtSide(i), mCoverData[i], this, mTickTimer)
- ? getInputRedstoneSignal(i)
- : 0;
- mCoverData[i] =
- tCover.doCoverThings(i, tRedstone, getCoverIDAtSide(i), mCoverData[i], this, mTickTimer);
- if (!isStillValid()) return false;
- }
- }
+ if (!tickCoverAtSide(i)) return false;
}
return true;
}
+ public boolean tickCoverAtSide(byte aSide) {
+ return tickCoverAtSide(aSide, mTickTimer);
+ }
+
+ /**
+ * Returns false if the tile is no longer valid after ticking the cover
+ */
+ public boolean tickCoverAtSide(byte aSide, long aTickTimer) {
+ final CoverInfo coverInfo = getCoverInfoAtSide(aSide);
+ if (!coverInfo.isValid()) return true;
+ final int tCoverTickRate = coverInfo.getTickRate();
+ if (tCoverTickRate > 0 && aTickTimer % tCoverTickRate == 0) {
+ final byte tRedstone = coverInfo.isRedstoneSensitive(aTickTimer) ? getInputRedstoneSignal(aSide) : 0;
+ coverInfo.setCoverData(coverInfo.doCoverThings(aTickTimer, tRedstone));
+ return isStillValid();
+ }
+
+ return true;
+ }
+
public abstract boolean allowCoverOnSide(byte aSide, GT_ItemStack aCoverID);
protected void checkDropCover() {
- for (byte i : ALL_VALID_SIDES)
- if (getCoverIDAtSide(i) != 0)
- if (!allowCoverOnSide(i, new GT_ItemStack(getCoverIDAtSide(i)))) dropCover(i, i, true);
+ for (byte i : ALL_VALID_SIDES) {
+ final int coverId = getCoverIDAtSide(i);
+ if (coverId != 0) if (!allowCoverOnSide(i, new GT_ItemStack(coverId))) dropCover(i, i, true);
+ }
}
protected void updateCoverBehavior() {
- for (byte i : ALL_VALID_SIDES) mCoverBehaviors[i] = GregTech_API.getCoverBehaviorNew(mCoverSides[i]);
+ for (byte i : ALL_VALID_SIDES) {
+ final CoverInfo coverInfo = getCoverInfoAtSide(i);
+ if (coverInfo.isValid()) coverInfo.updateCoverBehavior();
+ }
}
@Override
@@ -172,32 +231,20 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
// 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;
+ final CoverInfo coverInfo = getCoverInfoAtSide(aSide);
+ if (worldObj == null || (isServerSide() && coverInfo.isDataNeededOnClient())) coverInfo.setNeedsUpdate(true);
}
public final ITexture getCoverTexture(byte aSide) {
- if (getCoverIDAtSide(aSide) == 0) return null;
+ final CoverInfo coverInfo = getCoverInfoAtSide(aSide);
+ if (!coverInfo.isValid()) return null;
if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x1) != 0) {
return Textures.BlockIcons.HIDDEN_TEXTURE[0]; // See through
}
- GT_CoverBehaviorBase<?> coverBehavior = getCoverBehaviorAtSideNew(aSide);
- final ITexture coverTexture;
- if (coverBehavior != null) {
- if (!(this instanceof BaseMetaPipeEntity)) {
- coverTexture = coverBehavior.getSpecialCoverFGTexture(
- aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this);
- } else {
- coverTexture = coverBehavior.getSpecialCoverTexture(
- aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this);
- }
- } else {
- coverTexture = null;
- }
+ final ITexture coverTexture = (!(this instanceof BaseMetaPipeEntity))
+ ? coverInfo.getSpecialCoverFGTexture()
+ : coverInfo.getSpecialCoverTexture();
+
return coverTexture != null
? coverTexture
: GregTech_API.sCovers.get(new GT_ItemStack(getCoverIDAtSide(aSide)));
@@ -206,16 +253,14 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
protected void requestCoverDataIfNeeded() {
if (worldObj == null || !worldObj.isRemote) return;
for (byte i : ALL_VALID_SIDES) {
- if (getCoverBehaviorAtSideNew(i)
- .isDataNeededOnClient(i, getCoverIDAtSide(i), getComplexCoverDataAtSide(i), this))
- NW.sendToServer(new GT_Packet_RequestCoverData(i, getCoverIDAtSide(i), this));
+ final CoverInfo coverInfo = getCoverInfoAtSide(i);
+ if (coverInfo.isDataNeededOnClient()) NW.sendToServer(new GT_Packet_RequestCoverData(coverInfo, this));
}
}
@Override
public void setCoverIdAndDataAtSide(byte aSide, int aId, ISerializableObject aData) {
- if (setCoverIDAtSideNoUpdate(aSide, aId)) {
- setCoverDataAtSide(aSide, aData);
+ if (setCoverIDAtSideNoUpdate(aSide, aId, aData)) {
issueCoverUpdate(aSide);
issueBlockUpdate();
}
@@ -223,20 +268,19 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
@Override
public void setCoverIDAtSide(byte aSide, int aID) {
- if (setCoverIDAtSideNoUpdate(aSide, aID)) {
- issueCoverUpdate(aSide);
- issueBlockUpdate();
- }
+ setCoverIdAndDataAtSide(aSide, aID, null);
}
@Override
public boolean setCoverIDAtSideNoUpdate(byte aSide, int aID) {
- if (aSide >= 0 && aSide < 6 && mCoverSides[aSide] != aID) {
- if (aID == 0 && isClientSide())
- mCoverBehaviors[aSide].onDropped(aSide, mCoverSides[aSide], mCoverData[aSide], this);
- mCoverSides[aSide] = aID;
- mCoverBehaviors[aSide] = GregTech_API.getCoverBehaviorNew(aID);
- mCoverData[aSide] = mCoverBehaviors[aSide].createDataObject();
+ return setCoverIDAtSideNoUpdate(aSide, aID, null);
+ }
+
+ public boolean setCoverIDAtSideNoUpdate(byte aSide, int aID, ISerializableObject aData) {
+ final CoverInfo oldCoverInfo = getCoverInfoAtSide(aSide);
+ if (aSide >= 0 && aSide < 6 && oldCoverInfo.getCoverID() != aID) {
+ if (aID == 0 && isClientSide()) oldCoverInfo.onDropped();
+ setCoverInfoAtSide(aSide, new CoverInfo(aSide, aID, this, aData));
return true;
}
return false;
@@ -245,23 +289,22 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
@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);
+ final CoverInfo coverInfo = getCoverInfoAtSide(aSide);
+ if (coverInfo.isValid() && coverInfo.getCoverData() instanceof ISerializableObject.LegacyCoverData)
+ coverInfo.setCoverData(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;
+ final CoverInfo coverInfo = getCoverInfoAtSide(aSide);
+ if (coverInfo.isValid() && coverInfo.getCoverBehavior().cast(aData) != null) coverInfo.setCoverData(aData);
}
@Override
@Deprecated
public GT_CoverBehavior getCoverBehaviorAtSide(byte aSide) {
- if (aSide >= 0 && aSide < mCoverBehaviors.length && mCoverBehaviors[aSide] instanceof GT_CoverBehavior)
- return (GT_CoverBehavior) mCoverBehaviors[aSide];
+ final GT_CoverBehaviorBase<?> behavior = getCoverInfoAtSide(aSide).getCoverBehavior();
+ if (behavior instanceof GT_CoverBehavior) return (GT_CoverBehavior) behavior;
return GregTech_API.sNoBehavior;
}
@@ -272,14 +315,12 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
@Override
public int getCoverIDAtSide(byte aSide) {
- if (aSide >= 0 && aSide < 6) return mCoverSides[aSide];
- return 0;
+ return getCoverInfoAtSide(aSide).getCoverID();
}
@Override
public ItemStack getCoverItemAtSide(byte aSide) {
- return getCoverBehaviorAtSideNew(aSide)
- .getDisplayStack(getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide));
+ return getCoverInfoAtSide(aSide).getDisplayStack();
}
@Override
@@ -295,57 +336,71 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
@Override
@Deprecated
public int getCoverDataAtSide(byte aSide) {
- if (aSide >= 0 && aSide < 6 && mCoverData[aSide] instanceof ISerializableObject.LegacyCoverData)
- return ((ISerializableObject.LegacyCoverData) mCoverData[aSide]).get();
+ final ISerializableObject coverData = getCoverInfoAtSide(aSide).getCoverData();
+ if (coverData instanceof ISerializableObject.LegacyCoverData) {
+ return ((ISerializableObject.LegacyCoverData) coverData).get();
+ }
return 0;
}
@Override
public ISerializableObject getComplexCoverDataAtSide(byte aSide) {
- if (aSide >= 0 && aSide < 6 && getCoverBehaviorAtSideNew(aSide) != null) return mCoverData[aSide];
- return GregTech_API.sNoBehavior.createDataObject();
+ return getCoverInfoAtSide(aSide).getCoverData();
}
@Override
public GT_CoverBehaviorBase<?> getCoverBehaviorAtSideNew(byte aSide) {
- if (aSide >= 0 && aSide < 6) return mCoverBehaviors[aSide];
- return GregTech_API.sNoBehavior;
+ return getCoverInfoAtSide(aSide).getCoverBehavior();
+ }
+
+ public void setCoverInfoAtSide(byte aSide, CoverInfo coverInfo) {
+ if (aSide >= 0 && aSide < 6) coverInfos[aSide] = coverInfo;
}
@Override
- public boolean dropCover(byte aSide, byte aDroppedSide, boolean aForced) {
- if (getCoverBehaviorAtSideNew(aSide)
- .onCoverRemoval(aSide, getCoverIDAtSide(aSide), mCoverData[aSide], this, aForced)
- || aForced) {
- final ItemStack tStack = getCoverBehaviorAtSideNew(aSide)
- .getDrop(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this);
- if (tStack != null) {
- getCoverBehaviorAtSideNew(aSide)
- .onDropped(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this);
- final EntityItem tEntity = new EntityItem(
- worldObj,
- getOffsetX(aDroppedSide, 1) + 0.5,
- getOffsetY(aDroppedSide, 1) + 0.5,
- getOffsetZ(aDroppedSide, 1) + 0.5,
- tStack);
- tEntity.motionX = 0;
- tEntity.motionY = 0;
- tEntity.motionZ = 0;
- worldObj.spawnEntityInWorld(tEntity);
- }
+ public CoverInfo getCoverInfoAtSide(byte aSide) {
+ if (aSide >= 0 && aSide < 6) {
+ if (coverInfos[aSide] == null) coverInfos[aSide] = new CoverInfo(aSide, this);
+ return coverInfos[aSide];
+ }
+ return CoverInfo.EMPTY_INFO;
+ }
+
+ public void clearCoverInfoAtSide(byte aSide) {
+ if (aSide >= 0 && aSide < 6) {
setCoverIDAtSide(aSide, 0);
- updateOutputRedstoneSignal(aSide);
+ }
+ }
- return true;
+ @Override
+ public boolean dropCover(byte aSide, byte aDroppedSide, boolean aForced) {
+ final CoverInfo coverInfo = getCoverInfoAtSide(aSide);
+ if (!coverInfo.isValid()) return false;
+ if (!coverInfo.onCoverRemoval(aForced) && !aForced) return false;
+ final ItemStack tStack = coverInfo.getDrop();
+ if (tStack != null) {
+ coverInfo.onDropped();
+ final EntityItem tEntity = new EntityItem(
+ worldObj,
+ getOffsetX(aDroppedSide, 1) + 0.5,
+ getOffsetY(aDroppedSide, 1) + 0.5,
+ getOffsetZ(aDroppedSide, 1) + 0.5,
+ tStack);
+ tEntity.motionX = 0;
+ tEntity.motionY = 0;
+ tEntity.motionZ = 0;
+ worldObj.spawnEntityInWorld(tEntity);
}
- return false;
+ clearCoverInfoAtSide(aSide);
+ updateOutputRedstoneSignal(aSide);
+
+ return true;
}
protected void onBaseTEDestroyed() {
- for (byte side = 0; side < 6; ++side) {
- GT_CoverBehaviorBase<?> behavior = getCoverBehaviorAtSideNew(side);
- if (behavior != GregTech_API.sNoBehavior)
- behavior.onBaseTEDestroyed(side, getCoverIDAtSide(side), mCoverData[side], this);
+ for (byte side : ALL_VALID_SIDES) {
+ final CoverInfo coverInfo = getCoverInfoAtSide(side);
+ if (coverInfo.isValid()) coverInfo.onBaseTEDestroyed();
}
}
@@ -435,49 +490,38 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
@Override
public void receiveCoverData(byte aCoverSide, int aCoverID, int aCoverData) {
- if ((aCoverSide >= 0 && aCoverSide < 6)) {
- GT_CoverBehaviorBase<?> behaviorBase = getCoverBehaviorAtSideNew(aCoverSide);
- if (behaviorBase == GregTech_API.sNoBehavior) return;
+ if (aCoverSide < 0 || aCoverSide >= 6) return;
+ final CoverInfo oldCoverInfo = getCoverInfoAtSide(aCoverSide);
+ if (!oldCoverInfo.isValid()) return;
- setCoverIDAtSideNoUpdate(aCoverSide, aCoverID);
- setCoverDataAtSide(aCoverSide, aCoverData);
- }
+ setCoverIDAtSideNoUpdate(aCoverSide, aCoverID);
+ setCoverDataAtSide(aCoverSide, aCoverData);
}
@Override
public void receiveCoverData(
byte aCoverSide, int aCoverID, ISerializableObject aCoverData, EntityPlayerMP aPlayer) {
- if ((aCoverSide >= 0 && aCoverSide < 6)) {
- GT_CoverBehaviorBase<?> behaviorBase = getCoverBehaviorAtSideNew(aCoverSide);
- if (behaviorBase == GregTech_API.sNoBehavior) return;
-
- behaviorBase.preDataChanged(
- aCoverSide,
- getCoverIDAtSide(aCoverSide),
- aCoverID,
- getComplexCoverDataAtSide(aCoverSide),
- aCoverData,
- this);
-
- setCoverIDAtSideNoUpdate(aCoverSide, aCoverID);
- setCoverDataAtSide(aCoverSide, aCoverData);
- if (isClientSide()) {
- behaviorBase.onDataChanged(aCoverSide, aCoverID, aCoverData, this);
- }
+ if (aCoverSide < 0 || aCoverSide >= 6) return;
+
+ final CoverInfo oldCoverInfo = getCoverInfoAtSide(aCoverSide);
+
+ if (!oldCoverInfo.isValid()) return;
+ oldCoverInfo.preDataChanged(aCoverID, aCoverData);
+ setCoverIDAtSideNoUpdate(aCoverSide, aCoverID, aCoverData);
+
+ if (isClientSide()) {
+ getCoverInfoAtSide(aCoverSide).onDataChanged();
}
}
protected void sendCoverDataIfNeeded() {
if (worldObj == null || worldObj.isRemote) return;
- final int mCoverNeedUpdateLength = mCoverNeedUpdate.length;
- for (byte i = 0; i < mCoverNeedUpdateLength; i++) {
- if (mCoverNeedUpdate[i]) {
+ for (byte i : ALL_VALID_SIDES) {
+ final CoverInfo coverInfo = getCoverInfoAtSide(i);
+ if (coverInfo.needsUpdate()) {
NW.sendPacketToAllPlayersInRange(
- worldObj,
- new GT_Packet_SendCoverData(i, getCoverIDAtSide(i), getComplexCoverDataAtSide(i), this),
- xCoord,
- zCoord);
- mCoverNeedUpdate[i] = false;
+ worldObj, new GT_Packet_SendCoverData(coverInfo, this), xCoord, zCoord);
+ coverInfo.setNeedsUpdate(false);
}
}
}
@@ -488,31 +532,25 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
final NBTTagCompound tag = accessor.getNBTData();
final byte currentFacing = (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) {
- for (ForgeDirection direction : ForgeDirection.VALID_DIRECTIONS) {
- final byte side = (byte) direction.ordinal();
- final int coverId = coverSides[side];
- final GT_CoverBehaviorBase<?> behavior = GregTech_API.getCoverBehaviorNew(coverId);
-
- if (coverId != 0 && 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(StatCollector.translateToLocalFormatted(
- "GT5U.waila.cover",
- currentFacing == side
- ? StatCollector.translateToLocal("GT5U.waila.cover.current_facing")
- : StatCollector.translateToLocal("GT5U.interface.coverTabs."
- + direction.toString().toLowerCase()),
- coverStack.getDisplayName()));
- final String behaviorDesc = behavior.getDescription(side, coverId, dataObject, null);
- if (!Objects.equals(behaviorDesc, E)) currenttip.add(behaviorDesc);
- }
- }
+ final NBTTagList tList = tag.getTagList(GT_Values.NBT.COVERS, 10);
+ for (byte i = 0; i < tList.tagCount(); i++) {
+ final NBTTagCompound tNBT = tList.getCompoundTagAt(i);
+ final CoverInfo coverInfo = new CoverInfo(this, tNBT);
+ if (!coverInfo.isValid() || coverInfo.getCoverBehavior() == GregTech_API.sNoBehavior) continue;
+
+ final ItemStack coverStack = coverInfo.getDisplayStack();
+ if (coverStack != null) {
+ currenttip.add(StatCollector.translateToLocalFormatted(
+ "GT5U.waila.cover",
+ currentFacing == coverInfo.getSide()
+ ? StatCollector.translateToLocal("GT5U.waila.cover.current_facing")
+ : StatCollector.translateToLocal("GT5U.interface.coverTabs."
+ + ForgeDirection.getOrientation(coverInfo.getSide())
+ .toString()
+ .toLowerCase()),
+ coverStack.getDisplayName()));
+ final String behaviorDesc = coverInfo.getBehaviorDescription();
+ if (!Objects.equals(behaviorDesc, E)) currenttip.add(behaviorDesc);
}
}
@@ -527,8 +565,7 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
// super.getWailaNBTData(player, tile, tag, world, x, y, z);
// While we have some cover data on the client (enough to render it); we don't have all the information we want,
- // such as
- // details on the fluid filter, so send it all here.
+ // such as details on the fluid filter, so send it all here.
writeCoverNBT(tag, false);
}
@@ -538,6 +575,20 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
* @param aList - List to add the information to
*/
public static void addInstalledCoversInformation(NBTTagCompound aNBT, List<String> aList) {
+ final NBTTagList tList = aNBT.getTagList(GT_Values.NBT.COVERS, 10);
+ for (byte i = 0; i < tList.tagCount(); i++) {
+ final NBTTagCompound tNBT = tList.getCompoundTagAt(i);
+ final CoverInfo coverInfo = new CoverInfo(null, tNBT);
+ if (!coverInfo.isValid() || coverInfo.getCoverBehavior() == GregTech_API.sNoBehavior) continue;
+
+ final ItemStack coverStack = coverInfo.getDisplayStack();
+ if (coverStack != null) {
+ aList.add(String.format(
+ "Cover on %s side: %s",
+ getTranslation(FACES[coverInfo.getSide()]), coverStack.getDisplayName()));
+ }
+ }
+
if (aNBT.hasKey("mCoverSides")) {
final int[] mCoverSides = aNBT.getIntArray("mCoverSides");
if (mCoverSides != null && mCoverSides.length == 6) {
@@ -560,10 +611,7 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
}
protected ModularWindow createCoverWindow(EntityPlayer player, byte side) {
- final GT_CoverBehaviorBase<?> coverBehavior = getCoverBehaviorAtSideNew(side);
- final GT_CoverUIBuildContext buildContext =
- new GT_CoverUIBuildContext(player, getCoverIDAtSide(side), side, this, true);
- return coverBehavior.createWindow(buildContext);
+ return getCoverInfoAtSide(side).createWindow(player);
}
protected static final int COVER_WINDOW_ID_START = 1;
@@ -630,9 +678,7 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
.setPos(
(COVER_TAB_WIDTH - ICON_SIZE) / 2 + (flipHorizontally ? -1 : 1),
(COVER_TAB_HEIGHT - ICON_SIZE) / 2))
- .setEnabled(widget -> {
- return getCoverItemAtSide(side) != null;
- }));
+ .setEnabled(widget -> getCoverItemAtSide(side) != null));
}
}
@@ -646,12 +692,13 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
"GT5U.interface.coverTabs.west",
"GT5U.interface.coverTabs.east"
};
- final ItemStack coverItem = getCoverItemAtSide(side);
+ final CoverInfo coverInfo = getCoverInfoAtSide(side);
+ final ItemStack coverItem = coverInfo.getDisplayStack();
if (coverItem == null) return Collections.emptyList();
- boolean coverHasGUI = getCoverBehaviorAtSideNew(side).hasCoverGUI();
+ final boolean coverHasGUI = coverInfo.hasCoverGUI();
//noinspection unchecked
- List<String> tooltip = coverItem.getTooltip(Minecraft.getMinecraft().thePlayer, true);
+ final List<String> tooltip = coverItem.getTooltip(Minecraft.getMinecraft().thePlayer, true);
for (int i = 0; i < tooltip.size(); i++) {
if (i == 0) {
tooltip.set(
@@ -669,18 +716,12 @@ public abstract class CoverableTileEntity extends BaseTileEntity implements ICov
protected void onTabClicked(Widget.ClickData clickData, Widget widget, byte side) {
if (isClientSide()) return;
-
- final GT_CoverBehaviorBase<?> coverBehavior = getCoverBehaviorAtSideNew(side);
- if (coverBehavior.useModularUI()) {
+ final CoverInfo coverInfo = getCoverInfoAtSide(side);
+ if (coverInfo.useModularUI()) {
widget.getContext().openSyncedWindow(side + COVER_WINDOW_ID_START);
} else {
final GT_Packet_TileEntityCoverGUI packet = new GT_Packet_TileEntityCoverGUI(
- getXCoord(),
- getYCoord(),
- getZCoord(),
- side,
- getCoverIDAtSide(side),
- getComplexCoverDataAtSide(side),
+ coverInfo,
getWorld().provider.dimensionId,
widget.getContext().getPlayer().getEntityId(),
0);
diff --git a/src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java b/src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java
index c3c22415cb..d8e8017060 100644
--- a/src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java
+++ b/src/main/java/gregtech/api/metatileentity/GregTechTileClientEvents.java
@@ -1,6 +1,6 @@
package gregtech.api.metatileentity;
-public class GregTechTileClientEvents {
+public final 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 ff9ac7517d..b433e48b6e 100644
--- a/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/MetaPipeEntity.java
@@ -17,6 +17,7 @@ import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.objects.GT_ItemStack;
import gregtech.api.util.*;
import gregtech.common.GT_Client;
+import gregtech.common.covers.CoverInfo;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@@ -581,43 +582,15 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable {
@Override
public int[] getAccessibleSlotsFromSide(int aSide) {
- TIntList tList = new TIntArrayList();
- IGregTechTileEntity tTileEntity = getBaseMetaTileEntity();
- boolean tSkip = tTileEntity
- .getCoverBehaviorAtSideNew((byte) aSide)
- .letsItemsIn(
- (byte) aSide,
- tTileEntity.getCoverIDAtSide((byte) aSide),
- tTileEntity.getComplexCoverDataAtSide((byte) aSide),
- -2,
- tTileEntity)
- || tTileEntity
- .getCoverBehaviorAtSideNew((byte) aSide)
- .letsItemsOut(
- (byte) aSide,
- tTileEntity.getCoverIDAtSide((byte) aSide),
- tTileEntity.getComplexCoverDataAtSide((byte) aSide),
- -2,
- tTileEntity);
- for (int i = 0; i < getSizeInventory(); i++)
- if (isValidSlot(i)
- && (tSkip
- || tTileEntity
- .getCoverBehaviorAtSideNew((byte) aSide)
- .letsItemsOut(
- (byte) aSide,
- tTileEntity.getCoverIDAtSide((byte) aSide),
- tTileEntity.getComplexCoverDataAtSide((byte) aSide),
- i,
- tTileEntity)
- || tTileEntity
- .getCoverBehaviorAtSideNew((byte) aSide)
- .letsItemsIn(
- (byte) aSide,
- tTileEntity.getCoverIDAtSide((byte) aSide),
- tTileEntity.getComplexCoverDataAtSide((byte) aSide),
- i,
- tTileEntity))) tList.add(i);
+ final TIntList tList = new TIntArrayList();
+ final IGregTechTileEntity tTileEntity = getBaseMetaTileEntity();
+ final CoverInfo tileCoverInfo = tTileEntity.getCoverInfoAtSide((byte) aSide);
+ final boolean tSkip = tileCoverInfo.letsItemsIn(-2) || tileCoverInfo.letsItemsOut(-2);
+ for (int i = 0; i < getSizeInventory(); i++) {
+ if (isValidSlot(i) && (tSkip || tileCoverInfo.letsItemsOut(i) || tileCoverInfo.letsItemsIn(i))) {
+ tList.add(i);
+ }
+ }
return tList.toArray();
}
@@ -910,7 +883,7 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable {
// If both are colored they must be the same color to connect.
if (tTileEntity instanceof IColoredTileEntity) {
if (getBaseMetaTileEntity().getColorization() >= 0) {
- byte tColor = ((IColoredTileEntity) tTileEntity).getColorization();
+ final byte tColor = ((IColoredTileEntity) tTileEntity).getColorization();
if (tColor >= 0 && tColor != getBaseMetaTileEntity().getColorization()) return false;
}
}
@@ -926,21 +899,19 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable {
final IGregTechTileEntity baseMetaTile = getBaseMetaTileEntity();
if (baseMetaTile == null || !baseMetaTile.isServerSide()) return 0;
- final GT_CoverBehaviorBase<?> coverBehavior = baseMetaTile.getCoverBehaviorAtSideNew(aSide);
- final int coverId = baseMetaTile.getCoverIDAtSide(aSide);
- ISerializableObject coverData = baseMetaTile.getComplexCoverDataAtSide(aSide);
+ final CoverInfo coverInfo = baseMetaTile.getCoverInfoAtSide(aSide);
- boolean alwaysLookConnected = coverBehavior.alwaysLookConnected(aSide, coverId, coverData, baseMetaTile);
- boolean letsIn = letsIn(coverBehavior, aSide, coverId, coverData, baseMetaTile);
- boolean letsOut = letsOut(coverBehavior, aSide, coverId, coverData, baseMetaTile);
+ final boolean alwaysLookConnected = coverInfo.alwaysLookConnected();
+ final boolean letsIn = letsIn(coverInfo);
+ final boolean letsOut = letsOut(coverInfo);
// Careful - tTileEntity might be null, and that's ok -- so handle it
- TileEntity tTileEntity = baseMetaTile.getTileEntityAtSide(aSide);
+ final TileEntity tTileEntity = baseMetaTile.getTileEntityAtSide(aSide);
if (!connectableColor(tTileEntity)) return 0;
if ((alwaysLookConnected || letsIn || letsOut)) {
// Are we trying to connect to a pipe? let's do it!
- IMetaTileEntity tPipe = tTileEntity instanceof IGregTechTileEntity
+ final IMetaTileEntity tPipe = tTileEntity instanceof IGregTechTileEntity
? ((IGregTechTileEntity) tTileEntity).getMetaTileEntity()
: null;
if (getClass().isInstance(tPipe)
@@ -1006,11 +977,19 @@ public abstract class MetaPipeEntity implements IMetaTileEntity, IConnectable {
return false;
}
+ public boolean letsIn(CoverInfo coverInfo) {
+ return false;
+ }
+
public boolean letsOut(
GT_CoverBehavior coverBehavior, byte aSide, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
return false;
}
+ public boolean letsOut(CoverInfo coverInfo) {
+ return false;
+ }
+
public boolean letsIn(
GT_CoverBehaviorBase<?> coverBehavior,
byte aSide,
diff --git a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java
index 8f1c3f2e48..de2b118c71 100644
--- a/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java
+++ b/src/main/java/gregtech/api/metatileentity/MetaTileEntity.java
@@ -32,6 +32,7 @@ import gregtech.api.util.GT_TooltipDataCache;
import gregtech.api.util.GT_Util;
import gregtech.api.util.GT_Utility;
import gregtech.common.GT_Client;
+import gregtech.common.covers.CoverInfo;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
@@ -871,43 +872,15 @@ public abstract class MetaTileEntity implements IMetaTileEntity, IMachineCallbac
@Override
public int[] getAccessibleSlotsFromSide(int aSide) {
- TIntList tList = new TIntArrayList();
- IGregTechTileEntity tTileEntity = getBaseMetaTileEntity();
- boolean tSkip = tTileEntity
- .getCoverBehaviorAtSideNew((byte) aSide)
- .letsItemsIn(
- (byte) aSide,
- tTileEntity.getCoverIDAtSide((byte) aSide),
- tTileEntity.getComplexCoverDataAtSide((byte) aSide),
- -2,
- tTileEntity)
- || tTileEntity
- .getCoverBehaviorAtSideNew((byte) aSide)
- .letsItemsOut(
- (byte) aSide,
- tTileEntity.getCoverIDAtSide((byte) aSide),
- tTileEntity.getComplexCoverDataAtSide((byte) aSide),
- -2,
- tTileEntity);
- for (int i = 0; i < getSizeInventory(); i++)
- if (isValidSlot(i)
- && (tSkip
- || tTileEntity
- .getCoverBehaviorAtSideNew((byte) aSide)
- .letsItemsOut(
- (byte) aSide,
- tTileEntity.getCoverIDAtSide((byte) aSide),
- tTileEntity.getComplexCoverDataAtSide((byte) aSide),
- i,
- tTileEntity)
- || tTileEntity
- .getCoverBehaviorAtSideNew((byte) aSide)
- .letsItemsIn(
- (byte) aSide,
- tTileEntity.getCoverIDAtSide((byte) aSide),
- tTileEntity.getComplexCoverDataAtSide((byte) aSide),
- i,
- tTileEntity))) tList.add(i);
+ final TIntList tList = new TIntArrayList();
+ final IGregTechTileEntity tTileEntity = getBaseMetaTileEntity();
+ final CoverInfo tileCoverInfo = tTileEntity.getCoverInfoAtSide((byte) aSide);
+ final boolean tSkip = tileCoverInfo.letsItemsIn(-2) || tileCoverInfo.letsItemsOut(-2);
+ for (int i = 0; i < getSizeInventory(); i++) {
+ if (isValidSlot(i) && (tSkip || tileCoverInfo.letsItemsOut(i) || tileCoverInfo.letsItemsIn(i))) {
+ tList.add(i);
+ }
+ }
return tList.toArray();
}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java
index 965e920e82..47915e64cb 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaPipeEntity_Cable.java
@@ -1,5 +1,7 @@
package gregtech.api.metatileentity.implementations;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
+
import cofh.api.energy.IEnergyReceiver;
import cpw.mods.fml.common.Loader;
import gregtech.GT_Mod;
@@ -26,6 +28,7 @@ import gregtech.api.objects.GT_Cover_None;
import gregtech.api.render.TextureFactory;
import gregtech.api.util.*;
import gregtech.common.GT_Client;
+import gregtech.common.covers.CoverInfo;
import gregtech.common.covers.GT_Cover_SolarPanel;
import ic2.api.energy.EnergyNet;
import ic2.api.energy.tile.IEnergyEmitter;
@@ -231,14 +234,8 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
@Override
public long injectEnergyUnits(byte aSide, long aVoltage, long aAmperage) {
if (!isConnectedAtSide(aSide) && aSide != 6) return 0;
- if (!getBaseMetaTileEntity()
- .getCoverBehaviorAtSideNew(aSide)
- .letsEnergyIn(
- aSide,
- getBaseMetaTileEntity().getCoverIDAtSide(aSide),
- getBaseMetaTileEntity().getComplexCoverDataAtSide(aSide),
- getBaseMetaTileEntity())) return 0;
- HashSet<TileEntity> nul = null;
+ if (!getBaseMetaTileEntity().getCoverInfoAtSide(aSide).letsEnergyIn()) return 0;
+ final HashSet<TileEntity> nul = null;
return transferElectricity(aSide, aVoltage, aAmperage, nul);
}
@@ -252,12 +249,12 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
@Override
public long transferElectricity(byte aSide, long aVoltage, long aAmperage, HashSet<TileEntity> aAlreadyPassedSet) {
if (!getBaseMetaTileEntity().isServerSide() || !isConnectedAtSide(aSide) && aSide != 6) return 0;
- BaseMetaPipeEntity tBase = (BaseMetaPipeEntity) getBaseMetaTileEntity();
+ final BaseMetaPipeEntity tBase = (BaseMetaPipeEntity) getBaseMetaTileEntity();
if (!(tBase.getNode() instanceof PowerNode)) return 0;
- PowerNode tNode = (PowerNode) tBase.getNode();
+ final PowerNode tNode = (PowerNode) tBase.getNode();
if (tNode != null) {
int tPlace = 0;
- Node[] tToPower = new Node[tNode.mConsumers.size()];
+ final Node[] tToPower = new Node[tNode.mConsumers.size()];
if (tNode.mHadVoltage) {
for (ConsumerNode consumer : tNode.mConsumers) {
if (consumer.needsEnergy()) tToPower[tPlace++] = consumer;
@@ -359,6 +356,16 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
}
@Override
+ public boolean letsIn(CoverInfo coverInfo) {
+ return coverInfo.letsEnergyIn();
+ }
+
+ @Override
+ public boolean letsOut(CoverInfo coverInfo) {
+ return coverInfo.letsEnergyOut();
+ }
+
+ @Override
public boolean canConnect(byte aSide, TileEntity tTileEntity) {
final IGregTechTileEntity baseMetaTile = getBaseMetaTileEntity();
final GT_CoverBehaviorBase<?> coverBehavior = baseMetaTile.getCoverBehaviorAtSideNew(aSide);
@@ -472,8 +479,8 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
@Override
public String[] getInfoData() {
- BaseMetaPipeEntity base = (BaseMetaPipeEntity) getBaseMetaTileEntity();
- PowerNodePath path = (PowerNodePath) base.getNodePath();
+ final BaseMetaPipeEntity base = (BaseMetaPipeEntity) getBaseMetaTileEntity();
+ final PowerNodePath path = (PowerNodePath) base.getNodePath();
long amps = 0;
long volts = 0;
if (path != null) {
@@ -562,7 +569,7 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
Entity collider) {
super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider);
if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x2) != 0) {
- AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ);
+ final AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ);
if (inputAABB.intersectsWith(aabb)) outputAABB.add(aabb);
}
}
@@ -593,32 +600,27 @@ public class GT_MetaPipeEntity_Cable extends MetaPipeEntity implements IMetaTile
@Override
public void reloadLocks() {
- BaseMetaPipeEntity pipe = (BaseMetaPipeEntity) getBaseMetaTileEntity();
+ final BaseMetaPipeEntity pipe = (BaseMetaPipeEntity) getBaseMetaTileEntity();
if (pipe.getNode() != null) {
- for (byte i = 0; i < 6; i++) {
- if (isConnectedAtSide(i)) {
- final GT_CoverBehaviorBase<?> coverBehavior = pipe.getCoverBehaviorAtSideNew(i);
- if (coverBehavior instanceof GT_Cover_None) continue;
- final int coverId = pipe.getCoverIDAtSide(i);
- ISerializableObject coverData = pipe.getComplexCoverDataAtSide(i);
- if (!letsIn(coverBehavior, i, coverId, coverData, pipe)
- || !letsOut(coverBehavior, i, coverId, coverData, pipe)) {
- pipe.addToLock(pipe, i);
+ for (byte tSide : ALL_VALID_SIDES) {
+ if (isConnectedAtSide(tSide)) {
+ final CoverInfo coverInfo = pipe.getCoverInfoAtSide(tSide);
+ if (coverInfo.getCoverBehavior() instanceof GT_Cover_None) continue;
+ if (!letsIn(coverInfo) || !letsOut(coverInfo)) {
+ pipe.addToLock(pipe, tSide);
} else {
- pipe.removeFromLock(pipe, i);
+ pipe.removeFromLock(pipe, tSide);
}
}
}
} else {
boolean dontAllow = false;
- for (byte i = 0; i < 6; i++) {
- if (isConnectedAtSide(i)) {
- final GT_CoverBehaviorBase<?> coverBehavior = pipe.getCoverBehaviorAtSideNew(i);
- if (coverBehavior instanceof GT_Cover_None) continue;
- final int coverId = pipe.getCoverIDAtSide(i);
- ISerializableObject coverData = pipe.getComplexCoverDataAtSide(i);
- if (!letsIn(coverBehavior, i, coverId, coverData, pipe)
- || !letsOut(coverBehavior, i, coverId, coverData, pipe)) {
+ for (byte tSide : ALL_VALID_SIDES) {
+ if (isConnectedAtSide(tSide)) {
+ final CoverInfo coverInfo = pipe.getCoverInfoAtSide(tSide);
+ if (coverInfo.getCoverBehavior() instanceof GT_Cover_None) continue;
+
+ if (!letsIn(coverInfo) || !letsOut(coverInfo)) {
dontAllow = true;
}
}
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 d25f92b58b..61d55bfd9b 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
@@ -18,6 +18,7 @@ import gregtech.api.render.TextureFactory;
import gregtech.api.util.*;
import gregtech.api.util.WorldSpawnedEventBuilder.ParticleEventBuilder;
import gregtech.common.GT_Client;
+import gregtech.common.covers.CoverInfo;
import gregtech.common.covers.GT_Cover_Drain;
import gregtech.common.covers.GT_Cover_FluidRegulator;
import java.util.ArrayList;
@@ -130,7 +131,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
byte aColorIndex,
boolean aConnected,
boolean aRedstone) {
- float tThickNess = getThickNess();
+ final float tThickNess = getThickNess();
if (mDisableInput == 0)
return new ITexture[] {
aConnected
@@ -140,7 +141,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
Dyes.getModulation(aColorIndex, mMaterial.mRGBa))
};
byte tMask = 0;
- byte[][] sRestrictionArray = {
+ final byte[][] sRestrictionArray = {
{2, 3, 5, 4},
{2, 3, 4, 5},
{1, 0, 4, 5},
@@ -303,7 +304,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
&& aEntity instanceof EntityLivingBase) {
for (FluidStack tFluid : mFluids) {
if (tFluid != null) {
- int tTemperature = tFluid.getFluid().getTemperature(tFluid);
+ final int tTemperature = tFluid.getFluid().getTemperature(tFluid);
if (tTemperature > 320
&& !isCoverOnSide(
(BaseMetaPipeEntity) getBaseMetaTileEntity(), (EntityLivingBase) aEntity)) {
@@ -331,9 +332,9 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
if (!GT_Mod.gregtechproxy.gt6Pipe || mCheckConnections) checkConnections();
- boolean shouldDistribute = (oLastReceivedFrom == mLastReceivedFrom);
+ final boolean shouldDistribute = (oLastReceivedFrom == mLastReceivedFrom);
for (int i = 0, j = aBaseMetaTileEntity.getRandomNumber(mPipeAmount); i < mPipeAmount; i++) {
- int index = (i + j) % mPipeAmount;
+ final int index = (i + j) % mPipeAmount;
if (mFluids[index] != null && mFluids[index].amount <= 0) mFluids[index] = null;
if (mFluids[index] == null) continue;
@@ -354,7 +355,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
final FluidStack tFluid = mFluids[index];
if (tFluid != null && tFluid.amount > 0) {
- int tTemperature = tFluid.getFluid().getTemperature(tFluid);
+ final int tTemperature = tFluid.getFluid().getTemperature(tFluid);
if (tTemperature > mHeatResistance) {
if (aBaseMetaTileEntity.getRandomNumber(100) == 0) {
// Poof
@@ -423,8 +424,8 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
if (tFluid == null) return;
// Tank, From, Amount to receive
- List<MutableTriple<IFluidHandler, ForgeDirection, Integer>> tTanks = new ArrayList<>();
- int amount = tFluid.amount;
+ final List<MutableTriple<IFluidHandler, ForgeDirection, Integer>> tTanks = new ArrayList<>();
+ final int amount = tFluid.amount;
for (byte aSide, i = 0, j = (byte) aBaseMetaTileEntity.getRandomNumber(6); i < 6; i++) {
// Get a list of tanks accepting fluids, and what side they're on
@@ -436,22 +437,8 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
if (isConnectedAtSide(aSide)
&& tTank != null
&& (mLastReceivedFrom & (1 << aSide)) == 0
- && getBaseMetaTileEntity()
- .getCoverBehaviorAtSideNew(aSide)
- .letsFluidOut(
- aSide,
- getBaseMetaTileEntity().getCoverIDAtSide(aSide),
- getBaseMetaTileEntity().getComplexCoverDataAtSide(aSide),
- tFluid.getFluid(),
- getBaseMetaTileEntity())
- && (gTank == null
- || gTank.getCoverBehaviorAtSideNew(tSide)
- .letsFluidIn(
- tSide,
- gTank.getCoverIDAtSide(tSide),
- gTank.getComplexCoverDataAtSide(tSide),
- tFluid.getFluid(),
- gTank))) {
+ && getBaseMetaTileEntity().getCoverInfoAtSide(aSide).letsFluidOut(tFluid.getFluid())
+ && (gTank == null || gTank.getCoverInfoAtSide(tSide).letsFluidIn(tFluid.getFluid()))) {
if (tTank.fill(ForgeDirection.getOrientation(tSide), tFluid, false) > 0) {
tTanks.add(new MutableTriple<>(tTank, ForgeDirection.getOrientation(tSide), 0));
}
@@ -460,8 +447,9 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
}
// How much of this fluid is available for distribution?
- double tAmount = Math.max(1, Math.min(mCapacity * 10, tFluid.amount)), tNumTanks = tTanks.size();
- FluidStack maxFluid = tFluid.copy();
+ final double tAmount = Math.max(1, Math.min(mCapacity * 10, tFluid.amount));
+ final double tNumTanks = tTanks.size();
+ final FluidStack maxFluid = tFluid.copy();
maxFluid.amount = Integer.MAX_VALUE;
double availableCapacity = 0;
@@ -473,16 +461,17 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
// Now distribute
for (MutableTriple<IFluidHandler, ForgeDirection, Integer> tEntry : tTanks) {
+ // Distribue fluids based on percentage available space at destination
if (availableCapacity > tAmount)
- tEntry.right = (int) Math.floor(tEntry.right
- * tAmount
- / availableCapacity); // Distribue fluids based on percentage available space at destination
- if (tEntry.right == 0)
- tEntry.right =
- (int) Math.min(1, tAmount); // If the percent is not enough to give at least 1L, try to give 1L
+ tEntry.right = (int) Math.floor(tEntry.right * tAmount / availableCapacity);
+
+ // If the percent is not enough to give at least 1L, try to give 1L
+ if (tEntry.right == 0) tEntry.right = (int) Math.min(1, tAmount);
+
if (tEntry.right <= 0) continue;
- int tFilledAmount = tEntry.left.fill(tEntry.middle, drainFromIndex(tEntry.right, false, index), false);
+ final int tFilledAmount =
+ tEntry.left.fill(tEntry.middle, drainFromIndex(tEntry.right, false, index), false);
if (tFilledAmount > 0) tEntry.left.fill(tEntry.middle, drainFromIndex(tFilledAmount, true, index), true);
@@ -494,8 +483,8 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
public boolean onWrenchRightClick(
byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
if (GT_Mod.gregtechproxy.gt6Pipe) {
- byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ);
- byte tMask = (byte) (1 << tSide);
+ final byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ);
+ final byte tMask = (byte) (1 << tSide);
if (aPlayer.isSneaking()) {
if (isInputDisabledAtSide(tSide)) {
mDisableInput &= ~tMask;
@@ -551,6 +540,16 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
}
@Override
+ public boolean letsIn(CoverInfo coverInfo) {
+ return coverInfo.letsFluidIn(null);
+ }
+
+ @Override
+ public boolean letsOut(CoverInfo coverInfo) {
+ return coverInfo.letsFluidOut(null);
+ }
+
+ @Override
public boolean canConnect(byte aSide, TileEntity tTileEntity) {
if (tTileEntity == null) return false;
@@ -706,7 +705,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
if (!mFluids[index].isFluidEqual(aFluid)) return 0;
- int space = getCapacity() / mPipeAmount - mFluids[index].amount;
+ final int space = getCapacity() / mPipeAmount - mFluids[index].amount;
if (aFluid.amount <= space) {
if (doFill) {
mFluids[index].amount += aFluid.amount;
@@ -745,7 +744,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
mFluids[index].amount -= used;
}
- FluidStack drained = mFluids[index].copy();
+ final FluidStack drained = mFluids[index].copy();
drained.amount = used;
if (mFluids[index].amount <= 0) {
@@ -808,7 +807,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
}
private AxisAlignedBB getActualCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) {
- float tSpace = (1f - mThickNess) / 2;
+ final float tSpace = (1f - mThickNess) / 2;
float tSide0 = tSpace;
float tSide1 = 1f - tSpace;
float tSide2 = tSpace;
@@ -841,7 +840,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
tSide1 = tSide3 = tSide5 = 1;
}
- byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections;
+ final byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections;
if ((tConn & (1 << ForgeDirection.DOWN.ordinal())) != 0) tSide0 = 0f;
if ((tConn & (1 << ForgeDirection.UP.ordinal())) != 0) tSide1 = 1f;
if ((tConn & (1 << ForgeDirection.NORTH.ordinal())) != 0) tSide2 = 0f;
@@ -864,7 +863,7 @@ public class GT_MetaPipeEntity_Fluid extends MetaPipeEntity {
Entity collider) {
super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider);
if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x2) != 0) {
- AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ);
+ final AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ);
if (inputAABB.intersectsWith(aabb)) outputAABB.add(aabb);
}
}
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 c919187927..5ae9150a58 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
@@ -1,5 +1,6 @@
package gregtech.api.metatileentity.implementations;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
import static gregtech.api.enums.Textures.BlockIcons.PIPE_RESTRICTOR;
import gregtech.GT_Mod;
@@ -20,6 +21,7 @@ import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.GT_Utility;
import gregtech.api.util.ISerializableObject;
import gregtech.common.GT_Client;
+import gregtech.common.covers.CoverInfo;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -264,7 +266,7 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE
if (oLastReceivedFrom == mLastReceivedFrom) {
doTickProfilingInThisTick = false;
- ArrayList<IMetaTileEntityItemPipe> tPipeList = new ArrayList<IMetaTileEntityItemPipe>();
+ final ArrayList<IMetaTileEntityItemPipe> tPipeList = new ArrayList<>();
for (boolean temp = true; temp && !isInventoryEmpty() && pipeCapacityCheck(); ) {
temp = false;
@@ -290,7 +292,7 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE
public boolean onWrenchRightClick(
byte aSide, byte aWrenchingSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
if (GT_Mod.gregtechproxy.gt6Pipe) {
- byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ);
+ final byte tSide = GT_Utility.determineWrenchingSide(aSide, aX, aY, aZ);
if (isConnectedAtSide(tSide)) {
disconnect(tSide);
GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("215", "Disconnected"));
@@ -335,6 +337,16 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE
}
@Override
+ public boolean letsIn(CoverInfo coverInfo) {
+ return coverInfo.letsItemsOut(-1);
+ }
+
+ @Override
+ public boolean letsOut(CoverInfo coverInfo) {
+ return coverInfo.letsItemsOut(-1);
+ }
+
+ @Override
public boolean canConnect(byte aSide, TileEntity tTileEntity) {
if (tTileEntity == null) return false;
@@ -354,7 +366,7 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE
connectable = true;
}
if (tTileEntity instanceof ISidedInventory) {
- int[] tSlots = ((ISidedInventory) tTileEntity).getAccessibleSlotsFromSide(tSide);
+ final int[] tSlots = ((ISidedInventory) tTileEntity).getAccessibleSlotsFromSide(tSide);
if (tSlots == null || tSlots.length <= 0) return false;
connectable = true;
}
@@ -377,8 +389,9 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE
@Override
public boolean sendItemStack(Object aSender) {
if (pipeCapacityCheck()) {
- byte tOffset = (byte) getBaseMetaTileEntity().getRandomNumber(6), tSide = 0;
- for (byte i = 0; i < 6; i++) {
+ final byte tOffset = (byte) getBaseMetaTileEntity().getRandomNumber(6);
+ byte tSide = 0;
+ for (byte i : ALL_VALID_SIDES) {
tSide = (byte) ((i + tOffset) % 6);
if (isConnectedAtSide(tSide)
&& (isInventoryEmpty() || (tSide != mLastReceivedFrom || aSender != getBaseMetaTileEntity()))) {
@@ -391,15 +404,8 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE
@Override
public boolean insertItemStackIntoTileEntity(Object aSender, byte aSide) {
- if (getBaseMetaTileEntity()
- .getCoverBehaviorAtSideNew(aSide)
- .letsItemsOut(
- aSide,
- getBaseMetaTileEntity().getCoverIDAtSide(aSide),
- getBaseMetaTileEntity().getComplexCoverDataAtSide(aSide),
- -1,
- getBaseMetaTileEntity())) {
- TileEntity tInventory = getBaseMetaTileEntity().getTileEntityAtSide(aSide);
+ if (getBaseMetaTileEntity().getCoverInfoAtSide(aSide).letsItemsOut(-1)) {
+ final TileEntity tInventory = getBaseMetaTileEntity().getTileEntityAtSide(aSide);
if (tInventory != null && !(tInventory instanceof BaseMetaPipeEntity)) {
if ((!(tInventory instanceof TileEntityHopper) && !(tInventory instanceof TileEntityDispenser))
|| getBaseMetaTileEntity().getMetaIDAtSide(aSide) != GT_Utility.getOppositeSide(aSide)) {
@@ -459,23 +465,9 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE
@Override
public int[] getAccessibleSlotsFromSide(int aSide) {
- IGregTechTileEntity tTileEntity = getBaseMetaTileEntity();
- boolean tAllow = tTileEntity
- .getCoverBehaviorAtSideNew((byte) aSide)
- .letsItemsIn(
- (byte) aSide,
- tTileEntity.getCoverIDAtSide((byte) aSide),
- tTileEntity.getComplexCoverDataAtSide((byte) aSide),
- -2,
- tTileEntity)
- || tTileEntity
- .getCoverBehaviorAtSideNew((byte) aSide)
- .letsItemsOut(
- (byte) aSide,
- tTileEntity.getCoverIDAtSide((byte) aSide),
- tTileEntity.getComplexCoverDataAtSide((byte) aSide),
- -2,
- tTileEntity);
+ final IGregTechTileEntity tTileEntity = getBaseMetaTileEntity();
+ final CoverInfo coverInfo = tTileEntity.getCoverInfoAtSide((byte) aSide);
+ final boolean tAllow = coverInfo.letsItemsIn(-2) || coverInfo.letsItemsOut(-2);
if (tAllow) {
if (cacheSides == null) cacheSides = super.getAccessibleSlotsFromSide(aSide);
return cacheSides;
@@ -534,7 +526,7 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE
}
private AxisAlignedBB getActualCollisionBoundingBoxFromPool(World aWorld, int aX, int aY, int aZ) {
- float tSpace = (1f - mThickNess) / 2;
+ final float tSpace = (1f - mThickNess) / 2;
float tSide0 = tSpace;
float tSide1 = 1f - tSpace;
float tSide2 = tSpace;
@@ -567,7 +559,7 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE
tSide1 = tSide3 = tSide5 = 1;
}
- byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections;
+ final byte tConn = ((BaseMetaPipeEntity) getBaseMetaTileEntity()).mConnections;
if ((tConn & (1 << ForgeDirection.DOWN.ordinal())) != 0) tSide0 = 0f;
if ((tConn & (1 << ForgeDirection.UP.ordinal())) != 0) tSide1 = 1f;
if ((tConn & (1 << ForgeDirection.NORTH.ordinal())) != 0) tSide2 = 0f;
@@ -590,7 +582,7 @@ public class GT_MetaPipeEntity_Item extends MetaPipeEntity implements IMetaTileE
Entity collider) {
super.addCollisionBoxesToList(aWorld, aX, aY, aZ, inputAABB, outputAABB, collider);
if (GT_Mod.instance.isClientSide() && (GT_Client.hideValue & 0x2) != 0) {
- AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ);
+ final AxisAlignedBB aabb = getActualCollisionBoundingBoxFromPool(aWorld, aX, aY, aZ);
if (inputAABB.intersectsWith(aabb)) outputAABB.add(aabb);
}
}
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java
index 5de80c5cb6..632b8cca8b 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_BasicMachine.java
@@ -1,5 +1,6 @@
package gregtech.api.metatileentity.implementations;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.enums.GT_Values.debugCleanroom;
import static gregtech.api.enums.Textures.BlockIcons.MACHINE_CASINGS;
@@ -527,8 +528,8 @@ public abstract class GT_MetaTileEntity_BasicMachine extends GT_MetaTileEntity_B
}
return true;
}
- for (byte i = 0; i < 6; i++) {
- if (aBaseMetaTileEntity.getAirAtSide(i)) {
+ for (byte tSide : ALL_VALID_SIDES) {
+ if (aBaseMetaTileEntity.getAirAtSide(tSide)) {
if (useModularUI()) {
GT_UIInfos.openGTTileEntityUI(aBaseMetaTileEntity, aPlayer);
} else {
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java
index b6ace5a630..fdedbad86a 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_InputBus.java
@@ -197,13 +197,7 @@ public class GT_MetaTileEntity_Hatch_InputBus extends GT_MetaTileEntity_Hatch
@Override
public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
- if (!getBaseMetaTileEntity()
- .getCoverBehaviorAtSideNew(aSide)
- .isGUIClickable(
- aSide,
- getBaseMetaTileEntity().getCoverIDAtSide(aSide),
- getBaseMetaTileEntity().getComplexCoverDataAtSide(aSide),
- getBaseMetaTileEntity())) return;
+ if (!getBaseMetaTileEntity().getCoverInfoAtSide(aSide).isGUIClickable()) return;
if (aPlayer.isSneaking()) {
if (disableSort) {
disableSort = false;
diff --git a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java
index 11ffa6e802..2809ab3815 100644
--- a/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java
+++ b/src/main/java/gregtech/api/metatileentity/implementations/GT_MetaTileEntity_Hatch_Output.java
@@ -230,19 +230,13 @@ public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch impl
@Override
public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
- if (!getBaseMetaTileEntity()
- .getCoverBehaviorAtSideNew(aSide)
- .isGUIClickable(
- aSide,
- getBaseMetaTileEntity().getCoverIDAtSide(aSide),
- getBaseMetaTileEntity().getComplexCoverDataAtSide(aSide),
- getBaseMetaTileEntity())) return;
+ if (!getBaseMetaTileEntity().getCoverInfoAtSide(aSide).isGUIClickable()) return;
if (aPlayer.isSneaking()) {
mMode = (byte) ((mMode + 9) % 10);
} else {
mMode = (byte) ((mMode + 1) % 10);
}
- String inBrackets;
+ final String inBrackets;
switch (mMode) {
case 0:
GT_Utility.sendChatToPlayer(aPlayer, GT_Utility.trans("108", "Outputs misc. Fluids, Steam and Items"));
@@ -312,15 +306,9 @@ public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch impl
}
private boolean tryToLockHatch(EntityPlayer aPlayer, byte aSide) {
- if (!getBaseMetaTileEntity()
- .getCoverBehaviorAtSideNew(aSide)
- .isGUIClickable(
- aSide,
- getBaseMetaTileEntity().getCoverIDAtSide(aSide),
- getBaseMetaTileEntity().getComplexCoverDataAtSide(aSide),
- getBaseMetaTileEntity())) return false;
+ if (!getBaseMetaTileEntity().getCoverInfoAtSide(aSide).isGUIClickable()) return false;
if (!isFluidLocked()) return false;
- ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem();
+ final ItemStack tCurrentItem = aPlayer.inventory.getCurrentItem();
if (tCurrentItem == null) return false;
FluidStack tFluid = FluidContainerRegistry.getFluidForFilledItem(tCurrentItem);
if (tFluid == null && tCurrentItem.getItem() instanceof IFluidContainerItem)
@@ -432,7 +420,7 @@ public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch impl
protected void onEmptyingContainerWhenEmpty() {
if (this.lockedFluidName == null && this.mFluid != null && isFluidLocked()) {
this.setLockedFluidName(this.mFluid.getFluid().getName());
- EntityPlayer player;
+ final EntityPlayer player;
if (playerThatLockedfluid == null || (player = playerThatLockedfluid.get()) == null) return;
GT_Utility.sendChatToPlayer(
player,
@@ -496,7 +484,7 @@ public class GT_MetaTileEntity_Hatch_Output extends GT_MetaTileEntity_Hatch impl
.setDefaultColor(COLOR_TEXT_WHITE.get())
.setPos(101, 20))
.widget(TextWidget.dynamicString(() -> {
- ItemStack lockedDisplayStack = mInventory[getLockedDisplaySlot()];
+ final ItemStack lockedDisplayStack = mInventory[getLockedDisplaySlot()];
return lockedDisplayStack == null ? "None" : lockedDisplayStack.getDisplayName();
})
.setSynced(false)
diff --git a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java b/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java
index 876fa50f0b..dc9a9fd529 100644
--- a/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java
+++ b/src/main/java/gregtech/api/multitileentity/MultiTileEntityBlock.java
@@ -1,5 +1,6 @@
package gregtech.api.multitileentity;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
import static gregtech.api.enums.GT_Values.OFFX;
import static gregtech.api.enums.GT_Values.OFFY;
import static gregtech.api.enums.GT_Values.OFFZ;
@@ -20,7 +21,6 @@ import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IDebugableTileEntity;
import gregtech.api.metatileentity.BaseTileEntity;
import gregtech.api.metatileentity.CoverableTileEntity;
-import gregtech.api.metatileentity.GregTechTileClientEvents;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity.IMTE_BreakBlock;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity.IMTE_GetBlockHardness;
@@ -35,6 +35,7 @@ import gregtech.api.objects.XSTR;
import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_Util;
import gregtech.api.util.GT_Utility;
+import gregtech.common.covers.CoverInfo;
import gregtech.common.render.GT_Renderer_Block;
import gregtech.common.render.IRenderedBlock;
import java.util.ArrayList;
@@ -451,16 +452,13 @@ public class MultiTileEntityBlock extends Block
final byte aSide = (byte) side;
final CoverableTileEntity tile = (CoverableTileEntity) tTileEntity;
if (side != -1) {
- final Block facadeBlock = tile.getCoverBehaviorAtSideNew(aSide)
- .getFacadeBlock(
- aSide, tile.getCoverIDAtSide(aSide), tile.getComplexCoverDataAtSide(aSide), tile);
+ final Block facadeBlock = tile.getCoverInfoAtSide(aSide).getFacadeBlock();
if (facadeBlock != null) return facadeBlock;
} else {
// we do not allow more than one type of facade per block, so no need to check every side
// see comment in gregtech.common.covers.GT_Cover_FacadeBase.isCoverPlaceable
- for (byte i = 0; i < 6; i++) {
- final Block facadeBlock = tile.getCoverBehaviorAtSideNew(i)
- .getFacadeBlock(i, tile.getCoverIDAtSide(i), tile.getComplexCoverDataAtSide(i), tile);
+ for (byte tSide : ALL_VALID_SIDES) {
+ final Block facadeBlock = tile.getCoverInfoAtSide(tSide).getFacadeBlock();
if (facadeBlock != null) {
return facadeBlock;
}
@@ -477,22 +475,17 @@ public class MultiTileEntityBlock extends Block
final byte aSide = (byte) side;
final CoverableTileEntity tile = (CoverableTileEntity) tTileEntity;
if (side != -1) {
- final Block facadeBlock = tile.getCoverBehaviorAtSideNew(aSide)
- .getFacadeBlock(
- aSide, tile.getCoverIDAtSide(aSide), tile.getComplexCoverDataAtSide(aSide), tile);
- if (facadeBlock != null)
- return tile.getCoverBehaviorAtSideNew(aSide)
- .getFacadeMeta(
- aSide, tile.getCoverIDAtSide(aSide), tile.getComplexCoverDataAtSide(aSide), tile);
+ final CoverInfo coverInfo = tile.getCoverInfoAtSide(aSide);
+ final Block facadeBlock = coverInfo.getFacadeBlock();
+ if (facadeBlock != null) return coverInfo.getFacadeMeta();
} else {
// we do not allow more than one type of facade per block, so no need to check every side
// see comment in gregtech.common.covers.GT_Cover_FacadeBase.isCoverPlaceable
- for (byte i = 0; i < 6; i++) {
- final Block facadeBlock = tile.getCoverBehaviorAtSideNew(i)
- .getFacadeBlock(i, tile.getCoverIDAtSide(i), tile.getComplexCoverDataAtSide(i), tile);
+ for (byte tSide : ALL_VALID_SIDES) {
+ final CoverInfo coverInfo = tile.getCoverInfoAtSide(tSide);
+ final Block facadeBlock = coverInfo.getFacadeBlock();
if (facadeBlock != null) {
- return tile.getCoverBehaviorAtSideNew(i)
- .getFacadeMeta(i, tile.getCoverIDAtSide(i), tile.getComplexCoverDataAtSide(i), tile);
+ return coverInfo.getFacadeMeta();
}
}
}
@@ -671,59 +664,47 @@ public class MultiTileEntityBlock extends Block
return aTileEntity instanceof IMultiTileEntity ? ((IMultiTileEntity) aTileEntity).getPickBlock(aTarget) : null;
}
- public final void receiveMultiTileEntityData(
- IBlockAccess aWorld,
- int aX,
- short aY,
- int aZ,
- short aRID,
- short aID,
- int aCover0,
- int aCover1,
- int aCover2,
- int aCover3,
- int aCover4,
- int aCover5,
- byte aTextureData,
- byte aTexturePage,
- byte aUpdateData,
- byte aRedstoneData,
- byte aColorData) {
- if (!(aWorld instanceof World)) return;
- final IMultiTileEntity te;
-
+ public final IMultiTileEntity receiveMultiTileEntityData(
+ IBlockAccess aWorld, int aX, short aY, int aZ, short aRID, short aID) {
+ if (!(aWorld instanceof World)) return null;
TileEntity aTileEntity = aWorld.getTileEntity(aX, aY, aZ);
if (!(aTileEntity instanceof IMultiTileEntity)
|| ((IMultiTileEntity) aTileEntity).getMultiTileEntityRegistryID() != aRID
|| ((IMultiTileEntity) aTileEntity).getMultiTileEntityID() != aID) {
final MultiTileEntityRegistry tRegistry = MultiTileEntityRegistry.getRegistry(aRID);
- if (tRegistry == null) return;
+ if (tRegistry == null) return null;
aTileEntity = tRegistry.getNewTileEntity((World) aWorld, aX, aY, aZ, aID);
- if (!(aTileEntity instanceof IMultiTileEntity)) return;
+ if (!(aTileEntity instanceof IMultiTileEntity)) return null;
+
setTileEntity((World) aWorld, aX, aY, aZ, aTileEntity, false);
}
- te = (IMultiTileEntity) aTileEntity;
+ return ((IMultiTileEntity) aTileEntity);
+ }
+ public void receiveCoverData(
+ IMultiTileEntity mte, int aCover0, int aCover1, int aCover2, int aCover3, int aCover4, int aCover5) {
boolean updated;
- updated = te.setCoverIDAtSideNoUpdate((byte) 0, aCover0);
- updated |= te.setCoverIDAtSideNoUpdate((byte) 1, aCover1);
- updated |= te.setCoverIDAtSideNoUpdate((byte) 2, aCover2);
- updated |= te.setCoverIDAtSideNoUpdate((byte) 3, aCover3);
- updated |= te.setCoverIDAtSideNoUpdate((byte) 4, aCover4);
- updated |= te.setCoverIDAtSideNoUpdate((byte) 5, aCover5);
+ updated = mte.setCoverIDAtSideNoUpdate((byte) 0, aCover0);
+ updated |= mte.setCoverIDAtSideNoUpdate((byte) 1, aCover1);
+ updated |= mte.setCoverIDAtSideNoUpdate((byte) 2, aCover2);
+ updated |= mte.setCoverIDAtSideNoUpdate((byte) 3, aCover3);
+ updated |= mte.setCoverIDAtSideNoUpdate((byte) 4, aCover4);
+ updated |= mte.setCoverIDAtSideNoUpdate((byte) 5, aCover5);
if (updated) {
- te.issueBlockUpdate();
+ mte.issueBlockUpdate();
}
-
- te.receiveClientEvent(GregTechTileClientEvents.CHANGE_COMMON_DATA, aTextureData);
- te.receiveClientEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, aUpdateData & 0x7F);
- te.receiveClientEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, aTexturePage | 0x80);
- te.receiveClientEvent(GregTechTileClientEvents.CHANGE_COLOR, aColorData);
- te.receiveClientEvent(GregTechTileClientEvents.CHANGE_REDSTONE_OUTPUT, aRedstoneData);
}
+ //
+ // te.receiveClientEvent(GregTechTileClientEvents.CHANGE_COMMON_DATA, aTextureData);
+ //
+ // te.receiveClientEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, aUpdateData & 0x7F);
+ // te.receiveClientEvent(GregTechTileClientEvents.CHANGE_CUSTOM_DATA, aTexturePage | 0x80);
+ //
+ // te.receiveClientEvent(GregTechTileClientEvents.CHANGE_COLOR, aColorData);
+ // te.receiveClientEvent(GregTechTileClientEvents.CHANGE_REDSTONE_OUTPUT, aRedstoneData);
@Override
public final TileEntity createTileEntity(World aWorld, int aMeta) {
diff --git a/src/main/java/gregtech/api/multitileentity/base/BaseMultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/base/BaseMultiTileEntity.java
index 8161680b1e..2ab1f8c7d6 100644
--- a/src/main/java/gregtech/api/multitileentity/base/BaseMultiTileEntity.java
+++ b/src/main/java/gregtech/api/multitileentity/base/BaseMultiTileEntity.java
@@ -15,6 +15,7 @@ import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Materials;
import gregtech.api.enums.SoundResource;
import gregtech.api.enums.Textures;
+import gregtech.api.gui.modularui.GT_UIInfos;
import gregtech.api.interfaces.IIconContainer;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.tileentity.IGregtechWailaProvider;
@@ -24,9 +25,10 @@ import gregtech.api.metatileentity.GregTechTileClientEvents;
import gregtech.api.multitileentity.MultiTileEntityBlockInternal;
import gregtech.api.multitileentity.MultiTileEntityClassContainer;
import gregtech.api.multitileentity.MultiTileEntityRegistry;
+import gregtech.api.multitileentity.interfaces.IMultiBlockPart;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity;
+import gregtech.api.net.GT_Packet_MultiTileEntity;
import gregtech.api.net.GT_Packet_New;
-import gregtech.api.net.GT_Packet_TileEntity;
import gregtech.api.objects.GT_ItemStack;
import gregtech.api.objects.XSTR;
import gregtech.api.render.TextureFactory;
@@ -34,7 +36,6 @@ import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_ModHandler;
import gregtech.api.util.GT_Util;
import gregtech.api.util.GT_Utility;
-import gregtech.api.util.ISerializableObject;
import gregtech.common.render.GT_MultiTexture;
import gregtech.common.render.IRenderedBlock;
import java.util.ArrayList;
@@ -55,6 +56,7 @@ import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.Packet;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
+import net.minecraft.util.ChunkCoordinates;
import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.Explosion;
@@ -78,9 +80,10 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
public Materials mMaterial = Materials._NULL;
protected final boolean mIsTicking; // If this TileEntity is ticking at all
- protected boolean mShouldRefresh =
- true; // This Variable checks if this TileEntity should refresh when the Block is being set. That way you
+ // This Variable checks if this TileEntity should refresh when the Block is being set. That way you
// can turn this check off any time you need it.
+ protected boolean mShouldRefresh = true;
+
protected boolean mDoesBlockUpdate = false; // This Variable is for a buffered Block Update.
protected boolean mForceFullSelectionBoxes = false; // This Variable is for forcing the Selection Box to be full.
protected boolean mNeedsUpdate = false;
@@ -192,8 +195,6 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
copyTextures();
}
- if (mCoverData == null || mCoverData.length != 6) mCoverData = new ISerializableObject[6];
- if (mCoverSides.length != 6) mCoverSides = new int[] {0, 0, 0, 0, 0, 0};
if (mSidedRedstone.length != 6) mSidedRedstone = new byte[] {15, 15, 15, 15, 15, 15};
updateCoverBehavior();
@@ -252,7 +253,7 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
@Override
public boolean useModularUI() {
- return true;
+ return false;
}
@Override
@@ -730,6 +731,7 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
try {
return allowRightclick(aPlayer) && onRightClick(aPlayer, aSide, aX, aY, aZ);
} catch (Throwable e) {
+ GT_FML_LOGGER.error("onBlockActivated Failed", e);
e.printStackTrace(GT_Log.err);
return true;
}
@@ -747,9 +749,7 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
return true;
}
- if (!getCoverBehaviorAtSideNew(aSide)
- .isGUIClickable(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this))
- return false;
+ if (!getCoverInfoAtSide(aSide).isGUIClickable()) return false;
}
if (isServerSide()) {
if (!privateAccess() || aPlayer.getDisplayName().equalsIgnoreCase(getOwnerName())) {
@@ -826,14 +826,29 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
aY,
aZ)) return true;
- if (!getCoverBehaviorAtSideNew(aSide)
- .isGUIClickable(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this))
- return false;
+ if (!getCoverInfoAtSide(aSide).isGUIClickable()) return false;
+
+ return openModularUi(aPlayer, aSide);
}
}
return false;
}
+ public boolean hasGui(byte aSide) {
+ return false;
+ }
+
+ boolean openModularUi(EntityPlayer aPlayer, byte aSide) {
+ if (!hasGui(aSide) || !isServerSide()) {
+ System.out.println("No GUI or Not Serverside");
+ return false;
+ }
+
+ GT_UIInfos.openGTTileEntityUI(this, aPlayer);
+ System.out.println("Trying to open a UI");
+ return true;
+ }
+
public boolean onWrenchRightClick(
EntityPlayer aPlayer, ItemStack tCurrentItem, byte wrenchSide, float aX, float aY, float aZ) {
if (setMainFacing(wrenchSide)) {
@@ -955,56 +970,49 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
return mLockUpgrade;
}
- public byte getTextureData() {
- return 0;
- }
-
/**
* @return a Packet containing all Data which has to be synchronised to the Client - Override as needed
*/
public GT_Packet_New getClientDataPacket() {
- return new GT_Packet_TileEntity(
+
+ final GT_Packet_MultiTileEntity packet = new GT_Packet_MultiTileEntity(
+ 0,
xCoord,
(short) yCoord,
zCoord,
getMultiTileEntityRegistryID(),
getMultiTileEntityID(),
- mCoverSides[0],
- mCoverSides[1],
- mCoverSides[2],
- mCoverSides[3],
- mCoverSides[4],
- mCoverSides[5],
(byte) ((mFacing & 7) | (mRedstone ? 16 : 0)),
- (byte) getTextureData(), /*getTexturePage()*/
- (byte) 0, /*getUpdateData()*/
- (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)),
mColor);
- }
-
- @Override
- public Packet getDescriptionPacket() {
- issueClientUpdate();
- return null;
- }
- @Override
- public void getWailaBody(
- ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) {
- super.getWailaBody(itemStack, currenttip, accessor, config);
- currenttip.add(String.format(
- "Facing: %s", ForgeDirection.getOrientation(getFrontFacing()).name()));
- }
+ packet.setCoverData(
+ getCoverInfoAtSide((byte) 0).getCoverID(),
+ getCoverInfoAtSide((byte) 1).getCoverID(),
+ getCoverInfoAtSide((byte) 2).getCoverID(),
+ getCoverInfoAtSide((byte) 3).getCoverID(),
+ getCoverInfoAtSide((byte) 4).getCoverID(),
+ getCoverInfoAtSide((byte) 5).getCoverID());
+
+ packet.setRedstoneData((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 (this instanceof IMTE_HasModes) {
+ final IMTE_HasModes mteModes = (IMTE_HasModes) this;
+ packet.setModes(mteModes.getMode(), mteModes.getAllowedModes());
+ }
+ if (this instanceof IMultiBlockPart) {
+ final IMultiBlockPart mtePart = (IMultiBlockPart) this;
+ if (mtePart.getTargetPos() != null) {
+ final ChunkCoordinates aTarget = mtePart.getTargetPos();
+ packet.setTargetPos(aTarget.posX, (short) aTarget.posY, aTarget.posZ);
+ }
+ }
- @Override
- public void getWailaNBTData(
- EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, int z) {
- super.getWailaNBTData(player, tile, tag, world, x, y, z);
+ return packet;
}
@Override
@@ -1019,10 +1027,6 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
sendCoverDataIfNeeded();
}
- public void setTextureData(byte aValue) {
- /*Do nothing*/
- }
-
@Override
public boolean receiveClientEvent(int aEventID, int aValue) {
super.receiveClientEvent(aEventID, aValue);
@@ -1037,10 +1041,7 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
// mWorks = ((aValue & 64) != 0);
break;
case GregTechTileClientEvents.CHANGE_CUSTOM_DATA:
- if ((aValue & 0x80) != 0) // Is texture index
- setTextureData((byte) (aValue & 0x7F));
- // else if (mMetaTileEntity instanceof GT_MetaTileEntity_Hatch)//is texture page and hatch
- // ((GT_MetaTileEntity_Hatch) mMetaTileEntity).onTexturePageUpdate((byte) (aValue & 0x7F));
+ // Nothing here, currently
break;
case GregTechTileClientEvents.CHANGE_COLOR:
if (aValue > 16 || aValue < 0) aValue = 0;
@@ -1075,6 +1076,26 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
}
@Override
+ public Packet getDescriptionPacket() {
+ issueClientUpdate();
+ return null;
+ }
+
+ @Override
+ public void getWailaBody(
+ ItemStack itemStack, List<String> currenttip, IWailaDataAccessor accessor, IWailaConfigHandler config) {
+ super.getWailaBody(itemStack, currenttip, accessor, config);
+ currenttip.add(String.format(
+ "Facing: %s", ForgeDirection.getOrientation(getFrontFacing()).name()));
+ }
+
+ @Override
+ public void getWailaNBTData(
+ EntityPlayerMP player, TileEntity tile, NBTTagCompound tag, World world, int x, int y, int z) {
+ super.getWailaNBTData(player, tile, tag, world, x, y, z);
+ }
+
+ @Override
public boolean hasCustomInventoryName() {
return false;
}
@@ -1262,11 +1283,13 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
*/
@Override
public void openInventory() {
+ System.out.println("Open Inventory");
/* Do nothing */
}
@Override
public void closeInventory() {
+ System.out.println("Close Inventory");
/* Do nothing */
}
@@ -1350,33 +1373,27 @@ public abstract class BaseMultiTileEntity extends CoverableTileEntity
*/
public boolean coverLetsFluidIn(byte aSide, Fluid aFluid) {
- return getCoverBehaviorAtSideNew(aSide)
- .letsFluidIn(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), aFluid, this);
+ return getCoverInfoAtSide(aSide).letsFluidIn(aFluid);
}
public boolean coverLetsFluidOut(byte aSide, Fluid aFluid) {
- return getCoverBehaviorAtSideNew(aSide)
- .letsFluidOut(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), aFluid, this);
+ return getCoverInfoAtSide(aSide).letsFluidOut(aFluid);
}
public boolean coverLetsEnergyIn(byte aSide) {
- return getCoverBehaviorAtSideNew(aSide)
- .letsEnergyIn(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this);
+ return getCoverInfoAtSide(aSide).letsEnergyIn();
}
public boolean coverLetsEnergyOut(byte aSide) {
- return getCoverBehaviorAtSideNew(aSide)
- .letsEnergyOut(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this);
+ return getCoverInfoAtSide(aSide).letsEnergyOut();
}
public boolean coverLetsItemsIn(byte aSide, int aSlot) {
- return getCoverBehaviorAtSideNew(aSide)
- .letsItemsIn(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), aSlot, this);
+ return getCoverInfoAtSide(aSide).letsItemsIn(aSlot);
}
public boolean coverLetsItemsOut(byte aSide, int aSlot) {
- return getCoverBehaviorAtSideNew(aSide)
- .letsItemsOut(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), aSlot, this);
+ return getCoverInfoAtSide(aSide).letsItemsOut(aSlot);
}
@Override
diff --git a/src/main/java/gregtech/api/multitileentity/base/BaseNontickableMultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/base/BaseNontickableMultiTileEntity.java
index bc6f2439ea..9b3deb9d69 100644
--- a/src/main/java/gregtech/api/multitileentity/base/BaseNontickableMultiTileEntity.java
+++ b/src/main/java/gregtech/api/multitileentity/base/BaseNontickableMultiTileEntity.java
@@ -4,6 +4,7 @@ import static gregtech.api.enums.GT_Values.NW;
import gregtech.api.net.GT_Packet_SendCoverData;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.covers.CoverInfo;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.network.Packet;
@@ -37,13 +38,11 @@ public abstract class BaseNontickableMultiTileEntity extends BaseMultiTileEntity
super.issueCoverUpdate(aSide);
} else {
// Otherwise, send the data right away
- NW.sendPacketToAllPlayersInRange(
- worldObj,
- new GT_Packet_SendCoverData(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this),
- xCoord,
- zCoord);
+ final CoverInfo coverInfo = getCoverInfoAtSide(aSide);
+ NW.sendPacketToAllPlayersInRange(worldObj, new GT_Packet_SendCoverData(coverInfo, this), xCoord, zCoord);
+
// Just in case
- mCoverNeedUpdate[aSide] = false;
+ coverInfo.setNeedsUpdate(false);
}
}
diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockController.java b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockController.java
index 74d1252eeb..414ba24948 100644
--- a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockController.java
+++ b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockController.java
@@ -18,4 +18,8 @@ public interface IMultiBlockController
boolean isLiquidInput(byte aSide);
boolean isLiquidOutput(byte aSide);
+
+ void registerCoveredPartOnSide(final int aSide, IMultiBlockPart part);
+
+ void unregisterCoveredPartOnSide(final int aSide, IMultiBlockPart part);
}
diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockFluidHandler.java b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockFluidHandler.java
index e5d2e4f691..528c153e05 100644
--- a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockFluidHandler.java
+++ b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockFluidHandler.java
@@ -5,6 +5,7 @@ import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
+import net.minecraftforge.fluids.IFluidTank;
public interface IMultiBlockFluidHandler {
int fill(MultiBlockPart aPart, ForgeDirection aDirection, FluidStack aFluid, boolean aDoFill);
@@ -18,4 +19,6 @@ public interface IMultiBlockFluidHandler {
boolean canDrain(MultiBlockPart aPart, ForgeDirection aDirection, Fluid aFluid);
FluidTankInfo[] getTankInfo(MultiBlockPart aPart, ForgeDirection aDirection);
+
+ IFluidTank[] getFluidTanksForGUI(MultiBlockPart aPart);
}
diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockInventory.java b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockInventory.java
index 7e3777fe90..c50addbe67 100644
--- a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockInventory.java
+++ b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockInventory.java
@@ -1,6 +1,8 @@
package gregtech.api.multitileentity.interfaces;
+import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable;
import gregtech.api.multitileentity.multiblock.base.MultiBlockPart;
+import java.util.List;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
@@ -44,4 +46,8 @@ public interface IMultiBlockInventory {
void closeInventory(MultiBlockPart aPart);
boolean isItemValidForSlot(MultiBlockPart aPart, int aSlot, ItemStack aStack);
+
+ IItemHandlerModifiable getInventoryForGUI(MultiBlockPart aPart);
+
+ List<String> getInventoryNames(MultiBlockPart aPart);
}
diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockPart.java b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockPart.java
new file mode 100644
index 0000000000..027b49ca17
--- /dev/null
+++ b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiBlockPart.java
@@ -0,0 +1,11 @@
+package gregtech.api.multitileentity.interfaces;
+
+import net.minecraft.util.ChunkCoordinates;
+
+public interface IMultiBlockPart extends IMultiTileEntity {
+ ChunkCoordinates getTargetPos();
+
+ void setTargetPos(ChunkCoordinates aTargetPos);
+
+ boolean tickCoverAtSide(byte aSide, long aTickTimer);
+}
diff --git a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileEntity.java b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileEntity.java
index f5278d47b4..8b900ad61c 100644
--- a/src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileEntity.java
+++ b/src/main/java/gregtech/api/multitileentity/interfaces/IMultiTileEntity.java
@@ -287,4 +287,14 @@ public interface IMultiTileEntity
/** Adds ToolTips to the Item. */
void addToolTips(List<String> aList, ItemStack aStack, boolean aF3_H);
}
+
+ interface IMTE_HasModes extends IMultiTileEntity {
+ byte getMode();
+
+ void setMode(byte aMode);
+
+ int getAllowedModes();
+
+ void setAllowedModes(int aAllowedModes);
+ }
}
diff --git a/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java b/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java
index 767026b286..17bf44c386 100644
--- a/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java
+++ b/src/main/java/gregtech/api/multitileentity/machine/MultiTileBasicMachine.java
@@ -3,6 +3,8 @@ package gregtech.api.multitileentity.machine;
import static com.google.common.primitives.Ints.saturatedCast;
import static gregtech.api.enums.GT_Values.emptyIconContainerArray;
+import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable;
+import com.gtnewhorizons.modularui.api.forge.ItemStackHandler;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.GT_Values.NBT;
import gregtech.api.enums.Textures;
@@ -32,10 +34,11 @@ public class MultiTileBasicMachine extends BaseTickableMultiTileEntity {
protected boolean mActive = false;
protected long mStoredEnergy = 0;
protected FluidTankGT[] mTanksInput = GT_Values.emptyFluidTankGT, mTanksOutput = GT_Values.emptyFluidTankGT;
- protected ItemStack[] mOutputItems = GT_Values.emptyItemStackArray;
protected FluidStack[] mOutputFluids = GT_Values.emptyFluidStack;
- protected ItemStack[] mInventory = GT_Values.emptyItemStackArray;
+ protected final IItemHandlerModifiable mInputInventory = new ItemStackHandler(17);
+ protected final IItemHandlerModifiable mOutputInventory = new ItemStackHandler(15);
+ protected boolean mOutputInventoryChanged = false;
@Override
public String getTileEntityName() {
@@ -47,6 +50,43 @@ public class MultiTileBasicMachine extends BaseTickableMultiTileEntity {
super.writeMultiTileNBT(aNBT);
if (mParallel > 0) aNBT.setInteger(NBT.PARALLEL, mParallel);
if (mActive) aNBT.setBoolean(NBT.ACTIVE, mActive);
+ if (mInputInventory != null && mInputInventory.getSlots() > 0)
+ writeInventory(aNBT, mInputInventory, NBT.INV_INPUT_LIST);
+ if (mOutputInventory != null && mOutputInventory.getSlots() > 0)
+ writeInventory(aNBT, mOutputInventory, NBT.INV_OUTPUT_LIST);
+ for (int i = 0; i < mTanksInput.length; i++) mTanksInput[i].writeToNBT(aNBT, NBT.TANK_IN + i);
+ for (int i = 0; i < mTanksOutput.length; i++) mTanksOutput[i].writeToNBT(aNBT, NBT.TANK_OUT + i);
+ if (mOutputFluids != null && mOutputFluids.length > 0) writeFluids(aNBT, mOutputFluids, NBT.FLUID_OUT);
+ }
+
+ protected void writeFluids(NBTTagCompound aNBT, FluidStack[] fluids, String fluidListTag) {
+ if (fluids != null && fluids.length > 0) {
+ final NBTTagList tList = new NBTTagList();
+ for (final FluidStack tFluid : fluids) {
+ if (tFluid != null) {
+ final NBTTagCompound tag = new NBTTagCompound();
+ tFluid.writeToNBT(tag);
+ tList.appendTag(tag);
+ }
+ }
+ aNBT.setTag(fluidListTag, tList);
+ }
+ }
+
+ protected void writeInventory(NBTTagCompound aNBT, IItemHandlerModifiable inv, String invListTag) {
+ if (inv != null && inv.getSlots() > 0) {
+ final NBTTagList tList = new NBTTagList();
+ for (int tSlot = 0; tSlot < inv.getSlots(); tSlot++) {
+ final ItemStack tStack = inv.getStackInSlot(tSlot);
+ if (tStack != null) {
+ final NBTTagCompound tag = new NBTTagCompound();
+ tag.setByte("s", (byte) tSlot);
+ tStack.writeToNBT(tag);
+ tList.appendTag(tag);
+ }
+ }
+ aNBT.setTag(invListTag, tList);
+ }
}
@Override
@@ -55,15 +95,10 @@ public class MultiTileBasicMachine extends BaseTickableMultiTileEntity {
if (aNBT.hasKey(NBT.PARALLEL)) mParallel = Math.max(1, aNBT.getInteger(NBT.PARALLEL));
if (aNBT.hasKey(NBT.ACTIVE)) mActive = aNBT.getBoolean(NBT.ACTIVE);
- mInventory = getDefaultInventory(aNBT);
- if (mInventory != null) {
- final NBTTagList tList = aNBT.getTagList(NBT.INV_LIST, 10);
- for (int i = 0; i < tList.tagCount(); i++) {
- final NBTTagCompound tNBT = tList.getCompoundTagAt(i);
- final int tSlot = tNBT.getShort("s");
- if (tSlot >= 0 && tSlot < mInventory.length) mInventory[tSlot] = GT_Utility.loadItem(tNBT);
- }
- }
+ /* Inventories */
+ loadInventory(aNBT, NBT.INV_INPUT_SIZE, NBT.INV_INPUT_LIST);
+ loadInventory(aNBT, NBT.INV_OUTPUT_SIZE, NBT.INV_OUTPUT_LIST);
+
/* Tanks */
long tCapacity = 1000;
if (aNBT.hasKey(NBT.TANK_CAPACITY)) tCapacity = saturatedCast(aNBT.getLong(NBT.TANK_CAPACITY));
@@ -71,7 +106,6 @@ public class MultiTileBasicMachine extends BaseTickableMultiTileEntity {
mTanksInput = new FluidTankGT[getFluidInputCount()];
mTanksOutput = new FluidTankGT[getFluidOutputCount()];
mOutputFluids = new FluidStack[getFluidOutputCount()];
- mOutputItems = new ItemStack[getItemOutputCount()];
// TODO: See if we need the adjustable map here `.setCapacity(mRecipes, mParallel * 2L)` in place of the
// `setCapacityMultiplier`
@@ -83,8 +117,18 @@ public class MultiTileBasicMachine extends BaseTickableMultiTileEntity {
mTanksOutput[i] = new FluidTankGT().readFromNBT(aNBT, NBT.TANK_OUT + i);
for (int i = 0; i < mOutputFluids.length; i++)
mOutputFluids[i] = FluidStack.loadFluidStackFromNBT(aNBT.getCompoundTag(NBT.FLUID_OUT + "." + i));
- for (int i = 0; i < mOutputItems.length; i++)
- mOutputItems[i] = ItemStack.loadItemStackFromNBT(aNBT.getCompoundTag(NBT.INV_OUT + "." + i));
+ }
+
+ protected void loadInventory(NBTTagCompound aNBT, String sizeTag, String invListTag) {
+ final IItemHandlerModifiable inv = mInputInventory;
+ if (inv != null) {
+ final NBTTagList tList = aNBT.getTagList(invListTag, 10);
+ for (int i = 0; i < tList.tagCount(); i++) {
+ final NBTTagCompound tNBT = tList.getCompoundTagAt(i);
+ final int tSlot = tNBT.getShort("s");
+ if (tSlot >= 0 && tSlot < inv.getSlots()) inv.setStackInSlot(tSlot, GT_Utility.loadItem(tNBT));
+ }
+ }
}
@Override
@@ -148,19 +192,14 @@ public class MultiTileBasicMachine extends BaseTickableMultiTileEntity {
* The number of fluid (input) slots available for this machine
*/
public int getFluidInputCount() {
- return 2;
+ return 7;
}
/**
* The number of fluid (output) slots available for this machine
*/
public int getFluidOutputCount() {
- return 2;
- }
-
- public ItemStack[] getDefaultInventory(NBTTagCompound aNBT) {
- final int tSize = Math.max(0, aNBT.getShort(NBT.INV_SIZE));
- return tSize > 0 ? new ItemStack[tSize] : GT_Values.emptyItemStackArray;
+ return 3;
}
@Override
@@ -292,8 +331,7 @@ public class MultiTileBasicMachine extends BaseTickableMultiTileEntity {
if (aSide == GT_Values.SIDE_UNKNOWN) return true;
if (aSide >= 0 && aSide < 6) {
if (isInvalid()) return false;
- if (!getCoverBehaviorAtSideNew(aSide)
- .letsEnergyIn(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this)) return false;
+ if (!getCoverInfoAtSide(aSide).letsEnergyIn()) return false;
if (isEnetInput()) return isEnergyInputSide(aSide);
}
return false;
@@ -304,9 +342,7 @@ public class MultiTileBasicMachine extends BaseTickableMultiTileEntity {
if (aSide == GT_Values.SIDE_UNKNOWN) return true;
if (aSide >= 0 && aSide < 6) {
if (isInvalid()) return false;
- if (!getCoverBehaviorAtSideNew(aSide)
- .letsEnergyOut(aSide, getCoverIDAtSide(aSide), getComplexCoverDataAtSide(aSide), this))
- return false;
+ if (!getCoverInfoAtSide(aSide).letsEnergyOut()) return false;
if (isEnetOutput()) return isEnergyOutputSide(aSide);
}
return false;
@@ -318,9 +354,19 @@ public class MultiTileBasicMachine extends BaseTickableMultiTileEntity {
@Override
public boolean hasInventoryBeenModified() {
+ // True if the input inventory has changed
return mInventoryChanged;
}
+ public void markOutputInventoryBeenModified() {
+ mOutputInventoryChanged = true;
+ }
+
+ public boolean hasOutputInventoryBeenModified() {
+ // True if the output inventory has changed
+ return mOutputInventoryChanged;
+ }
+
@Override
public boolean isItemValidForSlot(int aSlot, ItemStack aStack) {
return false;
@@ -330,18 +376,4 @@ public class MultiTileBasicMachine extends BaseTickableMultiTileEntity {
public int getInventoryStackLimit() {
return 64;
}
-
- /**
- * The number of item (input) slots available for this machine
- */
- public int getItemInputCount() {
- return 2;
- }
-
- /**
- * The number of item (output) slots available for this machine
- */
- public int getItemOutputCount() {
- return 2;
- }
}
diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockController.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockController.java
index bb01f0b4fa..49f2adcd40 100644
--- a/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockController.java
+++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockController.java
@@ -1,6 +1,7 @@
package gregtech.api.multitileentity.multiblock.base;
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.NBT;
import com.gtnewhorizon.structurelib.StructureLibAPI;
@@ -13,12 +14,26 @@ import com.gtnewhorizon.structurelib.alignment.enumerable.Rotation;
import com.gtnewhorizon.structurelib.structure.IStructureDefinition;
import com.gtnewhorizon.structurelib.structure.IStructureElement;
import com.gtnewhorizon.structurelib.util.Vec3Impl;
+import com.gtnewhorizons.modularui.api.ModularUITextures;
+import com.gtnewhorizons.modularui.api.drawable.ItemDrawable;
+import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable;
+import com.gtnewhorizons.modularui.api.forge.ListItemHandler;
+import com.gtnewhorizons.modularui.api.screen.*;
+import com.gtnewhorizons.modularui.api.widget.Widget;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget;
+import com.gtnewhorizons.modularui.common.widget.MultiChildWidget;
+import com.gtnewhorizons.modularui.common.widget.Scrollable;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
+import com.gtnewhorizons.modularui.common.widget.TabButton;
+import com.gtnewhorizons.modularui.common.widget.TabContainer;
import cpw.mods.fml.common.network.NetworkRegistry;
import gnu.trove.list.TIntList;
import gnu.trove.list.array.TIntArrayList;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.OrePrefixes;
import gregtech.api.enums.TextureSet;
+import gregtech.api.gui.modularui.GT_UITextures;
import gregtech.api.interfaces.IDescribable;
import gregtech.api.interfaces.tileentity.IMachineProgress;
import gregtech.api.multitileentity.MultiTileEntityContainer;
@@ -26,14 +41,19 @@ import gregtech.api.multitileentity.MultiTileEntityRegistry;
import gregtech.api.multitileentity.interfaces.IMultiBlockController;
import gregtech.api.multitileentity.interfaces.IMultiBlockFluidHandler;
import gregtech.api.multitileentity.interfaces.IMultiBlockInventory;
+import gregtech.api.multitileentity.interfaces.IMultiBlockPart;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity.IMTE_AddToolTips;
import gregtech.api.multitileentity.machine.MultiTileBasicMachine;
import gregtech.api.objects.GT_ItemStack;
import gregtech.api.util.GT_Multiblock_Tooltip_Builder;
import gregtech.api.util.GT_Utility;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
@@ -65,9 +85,8 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
protected BuildState buildState = new BuildState();
- // The 0th slot is the default inventory of the MultiBlock; any other has been added by an Inventory Extender of
- // sorts
- protected List<ItemStack[]> multiBlockInventory = new ArrayList<>();
+ protected Map<String, IItemHandlerModifiable> multiBlockInputInventory = new LinkedHashMap<>();
+ protected Map<String, IItemHandlerModifiable> multiBlockOutputInventory = new LinkedHashMap<>();
private int mMaxProgresstime = 0, mProgresstime = 0;
private boolean mStructureOkay = false, mStructureChanged = false;
@@ -75,6 +94,16 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
private ExtendedFacing mExtendedFacing = ExtendedFacing.DEFAULT;
private IAlignmentLimits mLimits = getInitialAlignmentLimits();
+ // A list of sides
+ // Each side has a list of parts that have a cover that need to be ticked
+ protected List<LinkedList<WeakReference<IMultiBlockPart>>> registeredCoveredParts = Arrays.asList(
+ new LinkedList<>(),
+ new LinkedList<>(),
+ new LinkedList<>(),
+ new LinkedList<>(),
+ new LinkedList<>(),
+ new LinkedList<>());
+
/** Registry ID of the required casing */
public abstract short getCasingRegistryID();
/** Meta ID of the required casing */
@@ -125,7 +154,8 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
// Multiblock inventories are a collection of inventories. The first inventory is the default internal
// inventory,
// and the others are added by inventory extending blocks.
- if (mInventory != null) multiBlockInventory.add(mInventory);
+ if (mInputInventory != null) multiBlockInputInventory.put("controller", mInputInventory);
+ if (mOutputInventory != null) multiBlockOutputInventory.put("controller", mOutputInventory);
mStructureOkay = aNBT.getBoolean(NBT.STRUCTURE_OK);
mExtendedFacing = ExtendedFacing.of(
@@ -159,12 +189,6 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
protected GT_Multiblock_Tooltip_Builder getTooltip() {
return createTooltip();
- // final int tooltipId = getToolTipID();
- // final GT_Multiblock_Tooltip_Builder tt = tooltip.get(tooltipId);
- // if (tt == null) {
- // return tooltip.computeIfAbsent(tooltipId, k -> createTooltip());
- // }
- // return tt;
}
@Override
@@ -277,8 +301,8 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
return super.onWrenchRightClick(aPlayer, tCurrentItem, wrenchSide, aX, aY, aZ);
if (aPlayer.isSneaking()) {
// we won't be allowing horizontal flips, as it can be perfectly emulated by rotating twice and flipping
- // horizontally
- // allowing an extra round of flip make it hard to draw meaningful flip markers in GT_Proxy#drawGrid
+ // horizontally allowing an extra round of flip make it hard to draw meaningful flip markers in
+ // GT_Proxy#drawGrid
toolSetFlip(getFlip().isHorizontallyFlipped() ? Flip.NONE : Flip.HORIZONTAL);
} else {
toolSetRotation(null);
@@ -287,12 +311,59 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
}
@Override
+ public void registerCoveredPartOnSide(final int aSide, IMultiBlockPart part) {
+ if (aSide < 0 || aSide >= 6) return;
+
+ final LinkedList<WeakReference<IMultiBlockPart>> registeredCovers = registeredCoveredParts.get(aSide);
+ // TODO: Make sure that we're not already registered on this side
+ registeredCovers.add(new WeakReference<>(part));
+ }
+
+ @Override
+ public void unregisterCoveredPartOnSide(final int aSide, IMultiBlockPart aPart) {
+ if (aSide < 0 || aSide >= 6) return;
+
+ final LinkedList<WeakReference<IMultiBlockPart>> coveredParts = registeredCoveredParts.get(aSide);
+ final Iterator<WeakReference<IMultiBlockPart>> it = coveredParts.iterator();
+ while (it.hasNext()) {
+ final IMultiBlockPart part = (it.next()).get();
+ if (part == null || part == aPart) it.remove();
+ }
+ }
+
+ @Override
public void onFirstTick(boolean aIsServerSide) {
super.onFirstTick(aIsServerSide);
if (aIsServerSide) checkStructure(true);
else StructureLibAPI.queryAlignment(this);
}
+ private boolean tickCovers() {
+ for (byte side : ALL_VALID_SIDES) {
+ // TODO: Tick controller covers, if any
+ final LinkedList<WeakReference<IMultiBlockPart>> coveredParts = this.registeredCoveredParts.get(side);
+ final Iterator<WeakReference<IMultiBlockPart>> it = coveredParts.iterator();
+ while (it.hasNext()) {
+ final IMultiBlockPart part = (it.next()).get();
+ if (part == null) {
+ it.remove();
+ continue;
+ }
+ if (!part.tickCoverAtSide(side, mTickTimer)) it.remove();
+ }
+ }
+
+ return true;
+ }
+
+ @Override
+ public void onTick(long aTimer, boolean isServerSide) {
+ // Tick all covers!
+ if (!tickCovers()) {
+ return;
+ }
+ }
+
@Override
public void onPostTick(long aTick, boolean aIsServerSide) {
if (aIsServerSide) {
@@ -489,7 +560,7 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
mIcons = new IIcon[6];
Arrays.fill(mIcons, TextureSet.SET_NONE.mTextures[OrePrefixes.block.mTextureIndex].getIcon());
// Arrays.fill(mIcons, getTexture(aCasing);
- // for (int i = 0; i < 6; i++) {
+ // for (byte i : ALL_VALID_SIDES) {
// mIcons[i] = aCasing.getIcon(i, aMeta);
// }
}
@@ -598,6 +669,13 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
return rInfo;
}
+ @Override
+ public IFluidTank[] getFluidTanksForGUI(MultiBlockPart aPart) {
+ if (aPart.modeSelected(MultiBlockPart.FLUID_IN)) return mTanksInput;
+ if (aPart.modeSelected(MultiBlockPart.FLUID_OUT)) return mTanksOutput;
+ return GT_Values.emptyFluidTank;
+ }
+
/**
* Energy - MultiBlock related Energy behavior
*/
@@ -699,10 +777,18 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
/**
* Item - MultiBlock related Item behaviour.
*/
+ protected boolean registerInventory(String invName, IItemHandlerModifiable inventory) {
+ if (multiBlockInputInventory.containsKey(invName)) return false;
+ multiBlockInputInventory.put(invName, inventory);
+ return true;
+ }
+
@Override
public boolean hasInventoryBeenModified(MultiBlockPart aPart) {
- // TODO: MultiInventory - Figure this out based on locked & the part
- return hasInventoryBeenModified();
+ if (aPart.modeSelected(MultiBlockPart.ITEM_IN)) return hasInventoryBeenModified();
+ else if (aPart.modeSelected(MultiBlockPart.ITEM_OUT)) return hasOutputInventoryBeenModified();
+
+ return false;
}
@Override
@@ -711,6 +797,20 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
}
@Override
+ public IItemHandlerModifiable getInventoryForGUI(MultiBlockPart aPart) {
+ final Map<String, IItemHandlerModifiable> multiBlockInventory = getMultiBlockInventory(aPart);
+ if (multiBlockInventory == null) return null;
+
+ final String lockedInventory = aPart.getLockedInventory();
+ if (lockedInventory == null) {
+ return new ListItemHandler(multiBlockInventory.values());
+ } else {
+ final IItemHandlerModifiable inv = multiBlockInventory.get(lockedInventory);
+ return inv != null ? inv : null;
+ }
+ }
+
+ @Override
public boolean addStackToSlot(MultiBlockPart aPart, int aIndex, ItemStack aStack) {
return false;
}
@@ -720,15 +820,25 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
return false;
}
- protected Pair<ItemStack[], Integer> getInventory(int lockedInventory, int aSlot) {
- if (lockedInventory != -1) return new ImmutablePair<>(multiBlockInventory.get(lockedInventory), aSlot);
+ protected Map<String, IItemHandlerModifiable> getMultiBlockInventory(MultiBlockPart aPart) {
+ if (aPart.modeSelected(MultiBlockPart.ITEM_IN)) return multiBlockInputInventory;
+ else if (aPart.modeSelected(MultiBlockPart.ITEM_OUT)) return multiBlockOutputInventory;
+ return null;
+ }
+
+ protected Pair<IItemHandlerModifiable, Integer> getInventory(MultiBlockPart aPart, int aSlot) {
+ final Map<String, IItemHandlerModifiable> multiBlockInventory = getMultiBlockInventory(aPart);
+ if (multiBlockInventory == null) return null;
+
+ final String invName = aPart.getLockedInventory();
+ if (invName != null && !invName.isEmpty()) return new ImmutablePair<>(multiBlockInventory.get(invName), aSlot);
int start = 0;
- for (ItemStack[] inv : multiBlockInventory) {
- if (aSlot > start && aSlot < start + inv.length) {
+ for (IItemHandlerModifiable inv : multiBlockInventory.values()) {
+ if (aSlot >= start && aSlot < start + inv.getSlots()) {
return new ImmutablePair<>(inv, aSlot - start);
}
- start += inv.length;
+ start += inv.getSlots();
}
return null;
}
@@ -736,16 +846,22 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
@Override
public int[] getAccessibleSlotsFromSide(MultiBlockPart aPart, byte aSide) {
final TIntList tList = new TIntArrayList();
- final int lockedInventory = aPart.getLockedInventory();
+ final Map<String, IItemHandlerModifiable> multiBlockInventory = getMultiBlockInventory(aPart);
+ if (multiBlockInventory == null) return tList.toArray();
+
+ final String lockedInventory = aPart.getLockedInventory();
+ // Item in --> input inv
+ // Item out --> output inv
int start = 0;
- if (lockedInventory == -1) {
- for (ItemStack[] inv : multiBlockInventory) {
- for (int i = start; i < inv.length + start; i++) tList.add(i);
- start += inv.length;
+ if (lockedInventory == null) {
+ for (IItemHandlerModifiable inv : multiBlockInventory.values()) {
+ for (int i = start; i < inv.getSlots() + start; i++) tList.add(i);
+ start += inv.getSlots();
}
} else {
- final int len = multiBlockInventory.get(lockedInventory).length;
+ final IItemHandlerModifiable inv = multiBlockInventory.get(lockedInventory);
+ final int len = inv != null ? inv.getSlots() : 0;
for (int i = 0; i < len; i++) tList.add(i);
}
return tList.toArray();
@@ -753,64 +869,59 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
@Override
public boolean canInsertItem(MultiBlockPart aPart, int aSlot, ItemStack aStack, byte aSide) {
- final int lockedInventory = aPart.getLockedInventory(), tSlot;
- final ItemStack[] inv;
- if (lockedInventory == -1) {
- final Pair<ItemStack[], Integer> tInv = getInventory(lockedInventory, aSlot);
- if (tInv == null) return false;
- inv = tInv.getLeft();
- tSlot = tInv.getRight();
- } else {
- inv = multiBlockInventory.get(lockedInventory);
- tSlot = aSlot;
- }
- return inv[tSlot] == null
+ final Pair<IItemHandlerModifiable, Integer> tInv = getInventory(aPart, aSlot);
+ if (tInv == null) return false;
+
+ final int tSlot = tInv.getRight();
+ final IItemHandlerModifiable inv = tInv.getLeft();
+ ;
+
+ return inv.getStackInSlot(tSlot) == null
|| GT_Utility.areStacksEqual(
- aStack, inv[tSlot]); // && allowPutStack(getBaseMetaTileEntity(), aIndex, (byte) aSide, aStack)
+ aStack,
+ inv.getStackInSlot(
+ tSlot)); // && allowPutStack(getBaseMetaTileEntity(), aIndex, (byte) aSide, aStack)
}
@Override
public boolean canExtractItem(MultiBlockPart aPart, int aSlot, ItemStack aStack, byte aSide) {
- final int lockedInventory = aPart.getLockedInventory(), tSlot;
- final ItemStack[] inv;
- if (lockedInventory == -1) {
- final Pair<ItemStack[], Integer> tInv = getInventory(lockedInventory, aSlot);
- if (tInv == null) return false;
- inv = tInv.getLeft();
- tSlot = tInv.getRight();
- } else {
- inv = multiBlockInventory.get(lockedInventory);
- tSlot = aSlot;
- }
- return inv[tSlot] != null; // && allowPullStack(getBaseMetaTileEntity(), aIndex, (byte) aSide, aStack);
+ final Pair<IItemHandlerModifiable, Integer> tInv = getInventory(aPart, aSlot);
+ if (tInv == null) return false;
+
+ final int tSlot = tInv.getRight();
+ final IItemHandlerModifiable inv = tInv.getLeft();
+ ;
+
+ return inv.getStackInSlot(tSlot)
+ != null; // && allowPullStack(getBaseMetaTileEntity(), aIndex, (byte) aSide, aStack);
}
@Override
public int getSizeInventory(MultiBlockPart aPart) {
- final int lockedInventory = aPart.getLockedInventory();
- if (lockedInventory == -1) {
+ final Map<String, IItemHandlerModifiable> multiBlockInventory = getMultiBlockInventory(aPart);
+ if (multiBlockInventory == null) return 0;
+
+ final String lockedInventory = aPart.getLockedInventory();
+ if (lockedInventory == null) {
int len = 0;
- for (ItemStack[] inv : multiBlockInventory) len += inv.length;
+ for (IItemHandlerModifiable inv : multiBlockInventory.values()) len += inv.getSlots();
return len;
} else {
- return multiBlockInventory.get(lockedInventory).length;
+ final IItemHandlerModifiable inv = multiBlockInventory.get(lockedInventory);
+ return inv != null ? inv.getSlots() : 0;
}
}
@Override
public ItemStack getStackInSlot(MultiBlockPart aPart, int aSlot) {
- final int lockedInventory = aPart.getLockedInventory(), tSlot;
- final ItemStack[] inv;
- if (lockedInventory == -1) {
- final Pair<ItemStack[], Integer> tInv = getInventory(lockedInventory, aSlot);
- if (tInv == null) return null;
- inv = tInv.getLeft();
- tSlot = tInv.getRight();
- } else {
- inv = multiBlockInventory.get(lockedInventory);
- tSlot = aSlot;
- }
- return inv[tSlot];
+ final Pair<IItemHandlerModifiable, Integer> tInv = getInventory(aPart, aSlot);
+ if (tInv == null) return null;
+
+ final int tSlot = tInv.getRight();
+ final IItemHandlerModifiable inv = tInv.getLeft();
+ if (inv == null) return null;
+
+ return inv.getStackInSlot(tSlot);
}
@Override
@@ -819,10 +930,10 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
ItemStack rStack = GT_Utility.copyOrNull(tStack);
if (tStack != null) {
if (tStack.stackSize <= aDecrement) {
- setInventorySlotContents(aSlot, null);
+ setInventorySlotContents(aPart, aSlot, null);
} else {
rStack = tStack.splitStack(aDecrement);
- if (tStack.stackSize == 0) setInventorySlotContents(aSlot, null);
+ if (tStack.stackSize == 0) setInventorySlotContents(aPart, aSlot, null);
}
}
return rStack;
@@ -830,30 +941,52 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
@Override
public ItemStack getStackInSlotOnClosing(MultiBlockPart aPart, int aSlot) {
- final Pair<ItemStack[], Integer> tInv = getInventory(aPart.getLockedInventory(), aSlot);
+ final Pair<IItemHandlerModifiable, Integer> tInv = getInventory(aPart, aSlot);
if (tInv == null) return null;
- final ItemStack[] inv = tInv.getLeft();
+ final IItemHandlerModifiable inv = tInv.getLeft();
final int tSlot = tInv.getRight();
- final ItemStack rStack = inv[tSlot];
- inv[tSlot] = null;
+ final ItemStack rStack = inv.getStackInSlot(tSlot);
+ inv.setStackInSlot(tSlot, null);
return rStack;
}
@Override
public void setInventorySlotContents(MultiBlockPart aPart, int aSlot, ItemStack aStack) {
- final Pair<ItemStack[], Integer> tInv = getInventory(aPart.getLockedInventory(), aSlot);
+ final Pair<IItemHandlerModifiable, Integer> tInv = getInventory(aPart, aSlot);
if (tInv == null) return;
- final ItemStack[] inv = tInv.getLeft();
+ final IItemHandlerModifiable inv = tInv.getLeft();
final int tSlot = tInv.getRight();
- inv[tSlot] = aStack;
+ inv.setStackInSlot(tSlot, aStack);
+ }
+
+ @Override
+ public List<String> getInventoryNames(MultiBlockPart aPart) {
+ final List<String> inventoryNames = new ArrayList<>();
+ inventoryNames.add("all");
+ inventoryNames.addAll(getMultiBlockInventory(aPart).keySet());
+ return inventoryNames;
}
@Override
public String getInventoryName(MultiBlockPart aPart) {
- return getInventoryName(); // TODO: MultiInventory: Include part Name?
+ final StringBuilder str = new StringBuilder();
+ str.append(getInventoryName());
+ if (aPart.modeSelected(MultiBlockPart.ITEM_IN)) {
+ str.append(" Input");
+ } else if (aPart.modeSelected(MultiBlockPart.ITEM_OUT)) {
+ str.append(" Output");
+ } else {
+ str.append(" Unknown");
+ }
+ final String lockedInventory = aPart.getLockedInventory();
+ if (lockedInventory != null && !lockedInventory.equals("")) {
+ str.append(" [Locked: ").append(lockedInventory).append("]");
+ }
+
+ return str.toString();
}
@Override
@@ -868,9 +1001,9 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
@Override
public void markDirty(MultiBlockPart aPart) {
- // TODO: MultiInventory - Consider the part?
markDirty();
- markInventoryBeenModified();
+ if (aPart.modeSelected(MultiBlockPart.ITEM_OUT)) markOutputInventoryBeenModified();
+ else markInventoryBeenModified();
}
@Override
@@ -894,4 +1027,165 @@ public abstract class MultiBlockController<T extends MultiBlockController<T>> ex
public boolean isItemValidForSlot(MultiBlockPart aPart, int aSlot, ItemStack aStack) {
return isItemValidForSlot(aSlot, aStack);
}
+
+ /**
+ * GUI Work - Multiblock GUI related methods
+ */
+ @Override
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public ModularWindow createWindow(UIBuildContext buildContext) {
+ System.out.println("MultiBlockController::createWindow");
+ return super.createWindow(buildContext);
+ }
+
+ @Override
+ public boolean hasGui(byte aSide) {
+ return true;
+ }
+
+ @Override
+ protected void addTitleTextStyle(ModularWindow.Builder builder, String title) {
+ // leave empty
+ }
+
+ @Override
+ public void addGregTechLogo(ModularWindow.Builder builder) {
+ builder.widget(new DrawableWidget()
+ .setDrawable(getGUITextureSet().getGregTechLogo())
+ .setSize(17, 17)
+ .setPos(148, 60));
+ }
+
+ @Override
+ public void addUIWidgets(ModularWindow.Builder builder, UIBuildContext buildContext) {
+ builder.widget(new TabContainer()
+ .setButtonSize(20, 24)
+ .addTabButton(new TabButton(0)
+ .setBackground(
+ false, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0, 1f, 0.5f))
+ .setBackground(
+ true, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0.5f, 1f, 1f))
+ .addTooltip(getLocalName())
+ .setPos(0, -20))
+ .addTabButton(new TabButton(1)
+ .setBackground(
+ false, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0, 1f, 0.5f))
+ .setBackground(
+ true, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0.5f, 1f, 1f))
+ .setPos(20, -20))
+ .addTabButton(new TabButton(2)
+ .setBackground(
+ false, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0, 1f, 0.5f))
+ .setBackground(
+ true, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0.5f, 1f, 1f))
+ .setPos(40, -20))
+ .addTabButton(new TabButton(3)
+ .setBackground(
+ false, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0, 1f, 0.5f))
+ .setBackground(
+ true, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0.5f, 1f, 1f))
+ .setPos(60, -20))
+ .addTabButton(new TabButton(4)
+ .setBackground(
+ false, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0, 1f, 0.5f))
+ .setBackground(
+ true, ModularUITextures.VANILLA_TAB_TOP_START.getSubArea(0, 0.5f, 1f, 1f))
+ .setPos(80, -20))
+ .addPage(new MultiChildWidget()
+ .addChild(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_SCREEN_BLACK)
+ .setPos(7, 4)
+ .setSize(160, 75)))
+ .addPage(new MultiChildWidget().addChild(getItemInventoryInputGUI()))
+ .addPage(new MultiChildWidget().addChild(getItemInventoryOutputGUI()))
+ .addPage(new MultiChildWidget().addChild(getFluidInventoryInputGUI()))
+ .addPage(new MultiChildWidget().addChild(getFluidInventoryOutputGUI())))
+ .widget(new ItemDrawable(getStackForm(1))
+ .asWidget()
+ .setSize(16, 16)
+ .setPos(2, -16))
+ .widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_ITEM_IN)
+ .setSize(16, 16)
+ .setPos(22, -16))
+ .widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_ITEM_OUT)
+ .setSize(16, 16)
+ .setPos(42, -16))
+ .widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_FLUID_IN)
+ .setSize(16, 16)
+ .setPos(62, -16))
+ .widget(new DrawableWidget()
+ .setDrawable(GT_UITextures.PICTURE_FLUID_OUT)
+ .setSize(16, 16)
+ .setPos(82, -16));
+ }
+
+ protected Widget getItemInventoryInputGUI() {
+ final IItemHandlerModifiable inv = getInventoriesForInput();
+ final Scrollable scrollable = new Scrollable().setVerticalScroll();
+ for (int rows = 0; rows * 4 < Math.min(inv.getSlots(), 128); rows++) {
+ final int columnsToMake = Math.min(Math.min(inv.getSlots(), 128) - rows * 4, 4);
+ for (int column = 0; column < columnsToMake; column++) {
+ scrollable.widget(new SlotWidget(inv, rows * 4 + column)
+ .setPos(column * 18, rows * 18)
+ .setSize(18, 18));
+ }
+ }
+ return scrollable.setSize(18 * 4 + 4, 18 * 4).setPos(52, 7);
+ }
+
+ protected Widget getItemInventoryOutputGUI() {
+ final IItemHandlerModifiable inv = getInventoriesForOutput();
+ final Scrollable scrollable = new Scrollable().setVerticalScroll();
+ for (int rows = 0; rows * 4 < Math.min(inv.getSlots(), 128); rows++) {
+ final int columnsToMake = Math.min(Math.min(inv.getSlots(), 128) - rows * 4, 4);
+ for (int column = 0; column < columnsToMake; column++) {
+ scrollable.widget(new SlotWidget(inv, rows * 4 + column)
+ .setPos(column * 18, rows * 18)
+ .setSize(18, 18));
+ }
+ }
+ return scrollable.setSize(18 * 4 + 4, 18 * 4).setPos(52, 7);
+ }
+
+ protected IItemHandlerModifiable getInventoriesForInput() {
+ return new ListItemHandler(multiBlockInputInventory.values());
+ }
+
+ protected IItemHandlerModifiable getInventoriesForOutput() {
+ return new ListItemHandler(multiBlockOutputInventory.values());
+ }
+
+ protected Widget getFluidInventoryInputGUI() {
+ final IFluidTank[] tanks = mTanksInput;
+ final Scrollable scrollable = new Scrollable().setVerticalScroll();
+ for (int rows = 0; rows * 4 < tanks.length; rows++) {
+ final int columnsToMake = Math.min(tanks.length - rows * 4, 4);
+ for (int column = 0; column < columnsToMake; column++) {
+ final FluidSlotWidget fluidSlot = new FluidSlotWidget(tanks[rows * 4 + column]);
+ scrollable.widget(fluidSlot.setPos(column * 18, rows * 18).setSize(18, 18));
+ }
+ }
+ return scrollable.setSize(18 * 4 + 4, 18 * 4).setPos(52, 7);
+ }
+
+ protected Widget getFluidInventoryOutputGUI() {
+ final IFluidTank[] tanks = mTanksOutput;
+ final Scrollable scrollable = new Scrollable().setVerticalScroll();
+ for (int rows = 0; rows * 4 < tanks.length; rows++) {
+ final int columnsToMake = Math.min(tanks.length - rows * 4, 4);
+ for (int column = 0; column < columnsToMake; column++) {
+ final FluidSlotWidget fluidSlot = new FluidSlotWidget(tanks[rows * 4 + column]);
+ fluidSlot.setInteraction(true, false);
+ scrollable.widget(fluidSlot.setPos(column * 18, rows * 18).setSize(18, 18));
+ }
+ }
+ return scrollable.setSize(18 * 4 + 4, 18 * 4).setPos(52, 7);
+ }
}
diff --git a/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java b/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java
index 628992a931..36fbf35961 100644
--- a/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java
+++ b/src/main/java/gregtech/api/multitileentity/multiblock/base/MultiBlockPart.java
@@ -15,6 +15,15 @@ import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_IN;
import static gregtech.api.enums.Textures.BlockIcons.OVERLAY_PIPE_OUT;
import static org.apache.commons.lang3.ObjectUtils.firstNonNull;
+import com.gtnewhorizons.modularui.api.forge.IItemHandlerModifiable;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import com.gtnewhorizons.modularui.api.screen.ModularWindow.Builder;
+import com.gtnewhorizons.modularui.api.screen.UIBuildContext;
+import com.gtnewhorizons.modularui.common.widget.DrawableWidget;
+import com.gtnewhorizons.modularui.common.widget.DropDownWidget;
+import com.gtnewhorizons.modularui.common.widget.FluidSlotWidget;
+import com.gtnewhorizons.modularui.common.widget.Scrollable;
+import com.gtnewhorizons.modularui.common.widget.SlotWidget;
import gregtech.api.enums.GT_Values;
import gregtech.api.enums.Textures;
import gregtech.api.interfaces.IIconContainer;
@@ -22,11 +31,12 @@ import gregtech.api.interfaces.ITexture;
import gregtech.api.multitileentity.MultiTileEntityRegistry;
import gregtech.api.multitileentity.base.BaseNontickableMultiTileEntity;
import gregtech.api.multitileentity.interfaces.IMultiBlockController;
+import gregtech.api.multitileentity.interfaces.IMultiBlockPart;
import gregtech.api.multitileentity.interfaces.IMultiTileEntity.IMTE_BreakBlock;
+import gregtech.api.multitileentity.interfaces.IMultiTileEntity.IMTE_HasModes;
import gregtech.api.render.TextureFactory;
-import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.GT_Utility;
-import gregtech.api.util.ISerializableObject;
+import gregtech.common.covers.CoverInfo;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Arrays;
@@ -44,8 +54,10 @@ import net.minecraftforge.common.util.ForgeDirection;
import net.minecraftforge.fluids.Fluid;
import net.minecraftforge.fluids.FluidStack;
import net.minecraftforge.fluids.FluidTankInfo;
+import net.minecraftforge.fluids.IFluidTank;
-public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IMTE_BreakBlock {
+public class MultiBlockPart extends BaseNontickableMultiTileEntity
+ implements IMultiBlockPart, IMTE_BreakBlock, IMTE_HasModes {
public static final int NOTHING = 0,
ENERGY_IN = B[0],
ENERGY_OUT = B[1],
@@ -63,6 +75,9 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
protected int mAllowedModes = NOTHING; // BITMASK - Modes allowed for this part
protected byte mMode = 0; // Mode selected for this part
+ protected String mLockedInventory = GT_Values.E;
+ protected int mLockedInventoryIndex = 0;
+
/**
* What Part Tier is this part? All Basic Casings are Tier 1, and will allow:
* Energy, Item, Fluid input/output. Some of the more advanced modes can be set to require a higher tier part.
@@ -71,14 +86,15 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
return 1;
}
- public int getLockedInventory() {
- return -1;
+ public String getLockedInventory() {
+ return mLockedInventory.equals("") ? null : mLockedInventory;
}
public void setTarget(IMultiBlockController aTarget, int aAllowedModes) {
mTarget = aTarget;
mTargetPos = (mTarget == null ? null : mTarget.getCoords());
mAllowedModes = aAllowedModes;
+ if (mTarget != null) registerCovers(mTarget);
}
@Override
@@ -106,6 +122,8 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
final TileEntity te = worldObj.getTileEntity(mTargetPos.posX, mTargetPos.posY, mTargetPos.posZ);
if (te instanceof IMultiBlockController) {
mTarget = (IMultiBlockController) te;
+ // Register our covers with the controller
+ registerCovers(mTarget);
} else {
mTargetPos = null;
}
@@ -116,6 +134,46 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
} else return mTarget;
}
+ public void registerCovers(IMultiBlockController controller) {
+ for (byte i : ALL_VALID_SIDES) {
+ final CoverInfo coverInfo = getCoverInfoAtSide(i);
+ if (coverInfo.isValid() && coverInfo.getTickRate() > 0) {
+ controller.registerCoveredPartOnSide(i, this);
+ }
+ }
+ }
+
+ @Override
+ public void setCoverItemAtSide(byte aSide, ItemStack aCover) {
+ super.setCoverItemAtSide(aSide, aCover);
+ // TODO: Filter on tickable covers
+ final IMultiBlockController tTarget = getTarget(true);
+ if (tTarget != null) {
+ final CoverInfo coverInfo = getCoverInfoAtSide(aSide);
+ if (coverInfo.isValid() && coverInfo.getTickRate() > 0) {
+ tTarget.registerCoveredPartOnSide(aSide, this);
+ }
+ }
+ }
+
+ public void unregisterCovers(IMultiBlockController controller) {
+ for (byte i : ALL_VALID_SIDES) {
+ if (getCoverInfoAtSide(i).isValid()) {
+ controller.unregisterCoveredPartOnSide(i, this);
+ }
+ }
+ }
+
+ @Override
+ public boolean dropCover(byte aSide, byte aDroppedSide, boolean aForced) {
+ final boolean res = super.dropCover(aSide, aDroppedSide, aForced);
+ final IMultiBlockController tTarget = getTarget(true);
+ if (tTarget != null) {
+ tTarget.unregisterCoveredPartOnSide(aSide, this);
+ }
+ return res;
+ }
+
@Override
public void readMultiTileNBT(NBTTagCompound aNBT) {
if (aNBT.hasKey(NBT.ALLOWED_MODES)) mAllowedModes = aNBT.getInteger(NBT.ALLOWED_MODES);
@@ -124,6 +182,12 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
mTargetPos = new ChunkCoordinates(
aNBT.getInteger(NBT.TARGET_X), aNBT.getShort(NBT.TARGET_Y), aNBT.getInteger(NBT.TARGET_Z));
}
+ if (aNBT.hasKey(NBT.LOCKED_INVENTORY)) {
+ mLockedInventory = aNBT.getString(NBT.LOCKED_INVENTORY);
+ }
+ if (aNBT.hasKey(NBT.LOCKED_INVENTORY_INDEX)) {
+ mLockedInventoryIndex = aNBT.getInteger(NBT.LOCKED_INVENTORY_INDEX);
+ }
}
@Override
@@ -136,12 +200,49 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
aNBT.setShort(NBT.TARGET_Y, (short) mTargetPos.posY);
aNBT.setInteger(NBT.TARGET_Z, mTargetPos.posZ);
}
+ if (mLockedInventory != null) {
+ aNBT.setString(NBT.LOCKED_INVENTORY, mLockedInventory);
+ }
+ if (mLockedInventoryIndex != 0) {
+ aNBT.setInteger(NBT.LOCKED_INVENTORY_INDEX, mLockedInventoryIndex);
+ }
+ }
+
+ @Override
+ public void setTargetPos(ChunkCoordinates aTargetPos) {
+ mTargetPos = aTargetPos;
+ }
+
+ @Override
+ public ChunkCoordinates getTargetPos() {
+ return mTargetPos;
+ }
+
+ @Override
+ public void setMode(byte aMode) {
+ mMode = aMode;
+ }
+
+ @Override
+ public byte getMode() {
+ return mMode;
+ }
+
+ @Override
+ public int getAllowedModes() {
+ return mAllowedModes;
+ }
+
+ @Override
+ public void setAllowedModes(int aAllowedModes) {
+ mAllowedModes = aAllowedModes;
}
/**
* True if `aMode` is one of the allowed modes
*/
public boolean hasMode(int aMode) {
+ // This is not sent to the client
return (mAllowedModes & aMode) != 0;
}
@@ -158,7 +259,10 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
@Override
public boolean breakBlock() {
final IMultiBlockController tTarget = getTarget(false);
- if (tTarget != null) tTarget.onStructureChange();
+ if (tTarget != null) {
+ unregisterCovers(tTarget);
+ tTarget.onStructureChange();
+ }
return false;
}
@@ -176,16 +280,6 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
}
@Override
- public byte getTextureData() {
- return mMode;
- }
-
- @Override
- public void setTextureData(byte aData) {
- mMode = aData;
- }
-
- @Override
public void loadTextureNBT(NBTTagCompound aNBT) {
// Loading the registry
final String textureName = aNBT.getString(NBT.TEXTURE);
@@ -365,13 +459,10 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
final IMultiBlockController controller = getTarget(true);
if (controller == null) return GT_Values.emptyFluidTankInfo;
- final GT_CoverBehaviorBase<?> tCover = getCoverBehaviorAtSideNew(aSide);
- final int coverId = getCoverIDAtSide(aSide);
- final ISerializableObject complexCoverData = getComplexCoverDataAtSide(aSide);
+ final CoverInfo coverInfo = getCoverInfoAtSide(aSide);
- if ((controller.isLiquidInput(aSide) && tCover.letsFluidIn(aSide, coverId, complexCoverData, null, controller))
- || (controller.isLiquidOutput(aSide)
- && tCover.letsFluidOut(aSide, coverId, complexCoverData, null, controller)))
+ if ((controller.isLiquidInput(aSide) && coverInfo.letsFluidIn(null, controller))
+ || (controller.isLiquidOutput(aSide) && coverInfo.letsFluidOut(null, controller)))
return controller.getTankInfo(this, aDirection);
return GT_Values.emptyFluidTankInfo;
@@ -441,7 +532,7 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
@Override
public boolean decreaseStoredEnergyUnits(long aEnergy, boolean aIgnoreTooLittleEnergy) {
- if (!modeSelected(ENERGY_IN)) return false;
+ if (!modeSelected(ENERGY_OUT)) return false;
final IMultiBlockController controller = getTarget(true);
return controller != null
&& hasMode(ENERGY_OUT)
@@ -536,14 +627,14 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
@Override
public boolean addStackToSlot(int aIndex, ItemStack aStack) {
- if (!modeSelected(ITEM_IN)) return false;
+ if (!modeSelected(ITEM_IN, ITEM_OUT)) return false;
final IMultiBlockController controller = getTarget(true);
return (controller != null && controller.addStackToSlot(this, aIndex, aStack));
}
@Override
public boolean addStackToSlot(int aIndex, ItemStack aStack, int aAmount) {
- if (!modeSelected(ITEM_IN)) return false;
+ if (!modeSelected(ITEM_IN, ITEM_OUT)) return false;
final IMultiBlockController controller = getTarget(true);
return (controller != null && controller.addStackToSlot(this, aIndex, aStack, aAmount));
}
@@ -558,7 +649,7 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
@Override
public boolean canInsertItem(int aSlot, ItemStack aStack, int aSide) {
- if (!modeSelected(ITEM_IN)
+ if (!modeSelected(ITEM_IN, ITEM_OUT)
|| (mFacing != SIDE_UNKNOWN && (mFacing != aSide || !coverLetsItemsIn((byte) aSide, aSlot))))
return false;
final IMultiBlockController controller = getTarget(true);
@@ -567,7 +658,7 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
@Override
public boolean canExtractItem(int aSlot, ItemStack aStack, int aSide) {
- if (!modeSelected(ITEM_OUT)
+ if (!modeSelected(ITEM_IN, ITEM_OUT)
|| (mFacing != SIDE_UNKNOWN && (mFacing != aSide || !coverLetsItemsOut((byte) aSide, aSlot))))
return false;
final IMultiBlockController controller = getTarget(true);
@@ -590,7 +681,7 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
@Override
public ItemStack decrStackSize(int aSlot, int aDecrement) {
- if (!modeSelected(ITEM_OUT)) return null;
+ if (!modeSelected(ITEM_IN, ITEM_OUT)) return null;
final IMultiBlockController controller = getTarget(true);
return controller != null ? controller.decrStackSize(this, aSlot, aDecrement) : null;
}
@@ -628,4 +719,131 @@ public class MultiBlockPart extends BaseNontickableMultiTileEntity implements IM
// End Inventory
+ // === Modular UI ===
+ @Override
+ public boolean useModularUI() {
+ return true;
+ }
+
+ @Override
+ public String getLocalName() {
+ if (modeSelected(ITEM_IN)) return "Input Inventory";
+ if (modeSelected(ITEM_OUT)) return "Output Inventory";
+ if (modeSelected(FLUID_IN)) return "Fluid Input Hatch";
+ if (modeSelected(FLUID_OUT)) return "Fluid Output Hatch";
+
+ return "Unknown";
+ }
+
+ @Override
+ public boolean hasGui(byte aSide) {
+ // UIs only for specific mode(s)
+ if (modeSelected(ITEM_IN, ITEM_OUT, FLUID_IN, FLUID_OUT)) return true;
+
+ return false;
+ }
+
+ protected void addItemInventory(Builder builder, UIBuildContext buildContext) {
+ final IMultiBlockController controller = getTarget(false);
+ if (controller == null) {
+ return;
+ }
+ final IItemHandlerModifiable inv = controller.getInventoryForGUI(this);
+ final Scrollable scrollable = new Scrollable().setVerticalScroll();
+ for (int rows = 0; rows * 4 < Math.min(inv.getSlots(), 128); rows++) {
+ int columnsToMake = Math.min(Math.min(inv.getSlots(), 128) - rows * 4, 4);
+ for (int column = 0; column < columnsToMake; column++) {
+ scrollable.widget(new SlotWidget(inv, rows * 4 + column)
+ .setPos(column * 18, rows * 18)
+ .setSize(18, 18));
+ }
+ }
+ builder.widget(scrollable.setSize(18 * 4 + 4, 18 * 4).setPos(52, 18));
+ DropDownWidget dropDown = new DropDownWidget();
+ builder.widget(dropDown.addDropDownItemsSimple(
+ controller.getInventoryNames(this),
+ (buttonWidget, index, label, setSelected) -> buttonWidget.setOnClick((clickData, widget) -> {
+ if (getNameOfInventoryFromIndex(controller, index).equals("all")) {
+ mLockedInventory = GT_Values.E;
+ mLockedInventoryIndex = 0;
+ } else {
+ mLockedInventory = getNameOfInventoryFromIndex(controller, index);
+ mLockedInventoryIndex = index;
+ }
+ setSelected.run();
+ }),
+ true)
+ .setSelected(mLockedInventoryIndex)
+ .setExpandedMaxHeight(60)
+ .setDirection(DropDownWidget.Direction.DOWN)
+ .setPos(53, 5)
+ .setSize(70, 11));
+ }
+
+ protected String getNameOfInventoryFromIndex(final IMultiBlockController controller, int index) {
+ final List<String> invNames = controller.getInventoryNames(this);
+ if (index > invNames.size()) {
+ return invNames.get(0);
+ }
+ return invNames.get(index);
+ }
+
+ protected void addFluidInventory(Builder builder, UIBuildContext buildContext) {
+ final IMultiBlockController controller = getTarget(false);
+ if (controller == null) {
+ return;
+ }
+ final IFluidTank[] tanks = controller.getFluidTanksForGUI(this);
+ final Scrollable scrollable = new Scrollable().setVerticalScroll();
+ for (int rows = 0; rows * 4 < tanks.length; rows++) {
+ int columnsToMake = Math.min(tanks.length - rows * 4, 4);
+ for (int column = 0; column < columnsToMake; column++) {
+ FluidSlotWidget fluidSlot = new FluidSlotWidget(tanks[rows * 4 + column]);
+ if (modeSelected(FLUID_OUT)) {
+ fluidSlot.setInteraction(true, false);
+ }
+ scrollable.widget(fluidSlot.setPos(column * 18, rows * 18).setSize(18, 18));
+ }
+ }
+ builder.widget(scrollable.setSize(18 * 4 + 4, 18 * 4).setPos(52, 7));
+ }
+
+ @Override
+ public void addUIWidgets(Builder builder, UIBuildContext buildContext) {
+ if (modeSelected(ITEM_IN, ITEM_OUT)) {
+ addItemInventory(builder, buildContext);
+ }
+ if (modeSelected(FLUID_IN, FLUID_OUT)) {
+ addFluidInventory(builder, buildContext);
+ }
+ }
+
+ @Override
+ public ModularWindow createWindow(UIBuildContext buildContext) {
+ if (isServerSide()) {
+ issueClientUpdate();
+ }
+ System.out.println("MultiBlockPart::createWindow");
+ return super.createWindow(buildContext);
+ }
+
+ @Override
+ protected int getGUIHeight() {
+ if (modeSelected(ITEM_IN, ITEM_OUT)) {
+ return super.getGUIHeight() + 11;
+ }
+ return super.getGUIHeight();
+ }
+
+ @Override
+ public void addGregTechLogo(Builder builder) {
+ if (modeSelected(ITEM_IN, ITEM_OUT)) {
+ builder.widget(new DrawableWidget()
+ .setDrawable(getGUITextureSet().getGregTechLogo())
+ .setSize(17, 17)
+ .setPos(152, 74));
+ } else {
+ super.addGregTechLogo(builder);
+ }
+ }
}
diff --git a/src/main/java/gregtech/api/net/GT_Packet_Block_Event.java b/src/main/java/gregtech/api/net/GT_Packet_Block_Event.java
index dd7657e95d..ebc69cd540 100644
--- a/src/main/java/gregtech/api/net/GT_Packet_Block_Event.java
+++ b/src/main/java/gregtech/api/net/GT_Packet_Block_Event.java
@@ -44,7 +44,7 @@ public class GT_Packet_Block_Event extends GT_Packet_New {
@Override
public void process(IBlockAccess aWorld) {
if (aWorld != null) {
- TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ);
+ final TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ);
if (tTileEntity != null) tTileEntity.receiveClientEvent(mID, mValue);
}
}
diff --git a/src/main/java/gregtech/api/net/GT_Packet_GtTileEntityGuiRequest.java b/src/main/java/gregtech/api/net/GT_Packet_GtTileEntityGuiRequest.java
index 62ff6bd7e9..e2df15cb33 100644
--- a/src/main/java/gregtech/api/net/GT_Packet_GtTileEntityGuiRequest.java
+++ b/src/main/java/gregtech/api/net/GT_Packet_GtTileEntityGuiRequest.java
@@ -3,7 +3,8 @@ package gregtech.api.net;
import com.google.common.io.ByteArrayDataInput;
import gregtech.api.enums.GT_Values;
import gregtech.api.gui.modularui.GT_UIInfos;
-import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
+import gregtech.api.metatileentity.BaseTileEntity;
+import gregtech.api.metatileentity.CoverableTileEntity;
import gregtech.common.GT_Proxy;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
@@ -82,32 +83,36 @@ public class GT_Packet_GtTileEntityGuiRequest extends GT_Packet_New {
@Override
public void process(IBlockAccess aWorld) {
- World world = DimensionManager.getWorld(this.dimId);
+ final World world = DimensionManager.getWorld(this.dimId);
if (world == null) return;
- TileEntity tile = world.getTileEntity(this.mX, this.mY, this.mZ);
- if (!(tile instanceof IGregTechTileEntity) || ((IGregTechTileEntity) tile).isDead()) return;
+ final TileEntity tile = world.getTileEntity(this.mX, this.mY, this.mZ);
+ if (!(tile instanceof BaseTileEntity) || ((BaseTileEntity) tile).isDead()) return;
- IGregTechTileEntity gtTile = ((IGregTechTileEntity) tile);
- EntityPlayerMP player = (EntityPlayerMP) world.getEntityByID(playerId);
+ final BaseTileEntity baseTile = ((BaseTileEntity) tile);
+ final EntityPlayerMP player = (EntityPlayerMP) world.getEntityByID(playerId);
+ final CoverableTileEntity coverableTile =
+ (baseTile instanceof CoverableTileEntity) ? (CoverableTileEntity) baseTile : null;
// If the requested Gui ID corresponds to a cover, send the cover data to the client so they can open it.
- if (GT_Proxy.GUI_ID_COVER_SIDE_BASE <= guiId && guiId < GT_Proxy.GUI_ID_COVER_SIDE_BASE + 6) {
- byte coverSide = (byte) (guiId - GT_Proxy.GUI_ID_COVER_SIDE_BASE);
- GT_Packet_TileEntityCoverGUI packet = new GT_Packet_TileEntityCoverGUI(
+ if (GT_Proxy.GUI_ID_COVER_SIDE_BASE <= guiId
+ && guiId < GT_Proxy.GUI_ID_COVER_SIDE_BASE + 6
+ && coverableTile != null) {
+ final byte coverSide = (byte) (guiId - GT_Proxy.GUI_ID_COVER_SIDE_BASE);
+ final GT_Packet_TileEntityCoverGUI packet = new GT_Packet_TileEntityCoverGUI(
this.mX,
this.mY,
this.mZ,
coverSide,
- gtTile.getCoverIDAtSide(coverSide),
- gtTile.getComplexCoverDataAtSide(coverSide),
+ coverableTile.getCoverIDAtSide(coverSide),
+ coverableTile.getComplexCoverDataAtSide(coverSide),
this.dimId,
this.playerId,
parentGuiId);
GT_Values.NW.sendToPlayer(packet, player);
} else if (guiId == 0) {
- if (gtTile.getMetaTileEntity() != null && gtTile.getMetaTileEntity().useModularUI()) {
- GT_UIInfos.openGTTileEntityUI(gtTile, player);
+ if (baseTile.useModularUI()) {
+ GT_UIInfos.openGTTileEntityUI(baseTile, player);
} else {
- gtTile.openGUI(player);
+ baseTile.openGUI(player);
}
}
}
diff --git a/src/main/java/gregtech/api/net/GT_Packet_MultiTileEntity.java b/src/main/java/gregtech/api/net/GT_Packet_MultiTileEntity.java
new file mode 100644
index 0000000000..5263549264
--- /dev/null
+++ b/src/main/java/gregtech/api/net/GT_Packet_MultiTileEntity.java
@@ -0,0 +1,200 @@
+package gregtech.api.net;
+
+import static gregtech.api.enums.GT_Values.B;
+
+import com.google.common.io.ByteArrayDataInput;
+import gregtech.GT_Mod;
+import gregtech.api.metatileentity.GregTechTileClientEvents;
+import gregtech.api.multitileentity.MultiTileEntityBlock;
+import gregtech.api.multitileentity.interfaces.IMultiBlockPart;
+import gregtech.api.multitileentity.interfaces.IMultiTileEntity;
+import io.netty.buffer.ByteBuf;
+import net.minecraft.block.Block;
+import net.minecraft.tileentity.TileEntity;
+import net.minecraft.util.ChunkCoordinates;
+import net.minecraft.world.IBlockAccess;
+
+public class GT_Packet_MultiTileEntity extends GT_Packet_New {
+ public static final int COVERS = B[0], REDSTONE = B[1], MODES = B[2], CONTROLLER = B[3];
+
+ private int features = 0;
+
+ private int mX, mZ;
+ private int mC0 = 0, mC1 = 0, mC2 = 0, mC3 = 0, mC4 = 0, mC5 = 0;
+ private short mY, mID, mRID;
+ private byte mCommonData, mTexturePage, mUpdate, mRedstone, mColor;
+ private ChunkCoordinates mTargetPos = null;
+
+ // MultiBlockPart
+ private byte mMode;
+ private int mAllowedModes;
+
+ public GT_Packet_MultiTileEntity() {
+ super(true);
+ }
+
+ // For multi tiles
+ public GT_Packet_MultiTileEntity(
+ int aFeatures, int aX, short aY, int aZ, short aRID, short aID, byte aCommonData, byte aColor) {
+ super(false);
+ features = aFeatures;
+
+ mX = aX;
+ mY = aY;
+ mZ = aZ;
+ mRID = aRID;
+ mID = aID;
+ mCommonData = aCommonData;
+ mColor = aColor;
+ }
+
+ public void setCoverData(int aC0, int aC1, int aC2, int aC3, int aC4, int aC5) {
+ features |= COVERS;
+
+ mC0 = aC0;
+ mC1 = aC1;
+ mC2 = aC2;
+ mC3 = aC3;
+ mC4 = aC4;
+ mC5 = aC5;
+ }
+
+ public void setRedstoneData(byte aRedstoneData) {
+ features |= REDSTONE;
+
+ mRedstone = aRedstoneData;
+ }
+
+ public void setModes(byte aMode, int aAllowedModes) {
+ features |= MODES;
+ mMode = aMode;
+ mAllowedModes = aAllowedModes;
+ }
+
+ public void setTargetPos(int aX, short aY, int aZ) {
+ features |= CONTROLLER;
+ mTargetPos = new ChunkCoordinates(aX, aY, aZ);
+ }
+
+ @Override
+ public void encode(ByteBuf aOut) {
+ // Features
+ aOut.writeInt(features);
+
+ aOut.writeInt(mX);
+ aOut.writeShort(mY);
+ aOut.writeInt(mZ);
+
+ aOut.writeShort(mRID);
+ aOut.writeShort(mID);
+ aOut.writeByte(mCommonData);
+ aOut.writeByte(mColor);
+
+ if ((features & COVERS) == COVERS) {
+ aOut.writeInt(mC0);
+ aOut.writeInt(mC1);
+ aOut.writeInt(mC2);
+ aOut.writeInt(mC3);
+ aOut.writeInt(mC4);
+ aOut.writeInt(mC5);
+ }
+ if ((features & REDSTONE) == REDSTONE) {
+ aOut.writeByte(mRedstone);
+ }
+ if ((features & MODES) == MODES) {
+ aOut.writeByte(mMode);
+ aOut.writeInt(mAllowedModes);
+ }
+ if ((features & CONTROLLER) == CONTROLLER) {
+ aOut.writeInt(mTargetPos.posX);
+ aOut.writeShort(mTargetPos.posY);
+ aOut.writeInt(mTargetPos.posZ);
+ }
+
+ if (false) {
+ aOut.writeByte(mTexturePage);
+ aOut.writeByte(mUpdate);
+ aOut.writeByte(mColor);
+ }
+ }
+
+ @Override
+ public GT_Packet_New decode(ByteArrayDataInput aData) {
+ final int packetFeatures = aData.readInt();
+
+ final GT_Packet_MultiTileEntity packet = new GT_Packet_MultiTileEntity(
+ packetFeatures,
+ // Coords
+ aData.readInt(),
+ aData.readShort(),
+ aData.readInt(),
+ // Registry & ID
+ aData.readShort(),
+ aData.readShort(),
+ // Common Data
+ aData.readByte(),
+ aData.readByte());
+ if ((packetFeatures & COVERS) == COVERS) {
+ packet.setCoverData(
+ aData.readInt(),
+ aData.readInt(),
+ aData.readInt(),
+ aData.readInt(),
+ aData.readInt(),
+ aData.readInt());
+ }
+ if ((packetFeatures & REDSTONE) == REDSTONE) {
+ packet.setRedstoneData(aData.readByte());
+ }
+ if ((packetFeatures & MODES) == MODES) {
+ packet.setModes(aData.readByte(), aData.readInt());
+ }
+ if ((packetFeatures & CONTROLLER) == CONTROLLER) {
+ packet.setTargetPos(aData.readInt(), aData.readShort(), aData.readInt());
+ }
+
+ return packet;
+ }
+
+ @Override
+ public void process(IBlockAccess aWorld) {
+ if (aWorld == null) return;
+ final TileEntity tTileEntity = aWorld.getTileEntity(mX, mY, mZ);
+ try {
+ final Block tBlock = aWorld.getBlock(mX, mY, mZ);
+ if (tBlock instanceof MultiTileEntityBlock) {
+ final MultiTileEntityBlock mteBlock = (MultiTileEntityBlock) tBlock;
+ final IMultiTileEntity mte = mteBlock.receiveMultiTileEntityData(aWorld, mX, mY, mZ, mRID, mID);
+ if (mte == null) return;
+ mte.receiveClientEvent(GregTechTileClientEvents.CHANGE_COMMON_DATA, mCommonData);
+ mte.receiveClientEvent(GregTechTileClientEvents.CHANGE_COLOR, mColor);
+
+ if ((features & COVERS) == COVERS) {
+ mteBlock.receiveCoverData(mte, mC0, mC1, mC2, mC3, mC4, mC5);
+ }
+ if ((features & REDSTONE) == REDSTONE) {
+ mte.receiveClientEvent(GregTechTileClientEvents.CHANGE_REDSTONE_OUTPUT, mRedstone);
+ }
+
+ if ((features & MODES) == MODES && mte instanceof IMultiTileEntity.IMTE_HasModes) {
+ final IMultiTileEntity.IMTE_HasModes mteModes = (IMultiTileEntity.IMTE_HasModes) mte;
+ mteModes.setMode(mMode);
+ mteModes.setAllowedModes(mAllowedModes);
+ }
+
+ if ((features & CONTROLLER) == CONTROLLER && mte instanceof IMultiBlockPart) {
+ final IMultiBlockPart mtePart = (IMultiBlockPart) mte;
+ mtePart.setTargetPos(mTargetPos);
+ }
+ }
+ } catch (Exception e) {
+ GT_Mod.GT_FML_LOGGER.error(
+ "Exception setting tile entity data for tile entity {} at ({}, {}, {})", tTileEntity, mX, mY, mZ);
+ }
+ }
+
+ @Override
+ public byte getPacketID() {
+ return 18;
+ }
+}
diff --git a/src/main/java/gregtech/api/net/GT_Packet_New.java b/src/main/java/gregtech/api/net/GT_Packet_New.java
index f4e6f2a0e2..f987ebe24b 100644
--- a/src/main/java/gregtech/api/net/GT_Packet_New.java
+++ b/src/main/java/gregtech/api/net/GT_Packet_New.java
@@ -13,9 +13,9 @@ public abstract class GT_Packet_New extends GT_Packet {
@Override
@Deprecated
public final byte[] encode() {
- ByteBuf tOut = Unpooled.buffer();
+ final ByteBuf tOut = Unpooled.buffer();
encode(tOut);
- byte[] bytes = new byte[tOut.readableBytes()];
+ final byte[] bytes = new byte[tOut.readableBytes()];
tOut.readBytes(bytes);
return bytes;
}
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 8084a772bb..c330514144 100644
--- a/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java
+++ b/src/main/java/gregtech/api/net/GT_Packet_RequestCoverData.java
@@ -3,6 +3,7 @@ package gregtech.api.net;
import com.google.common.io.ByteArrayDataInput;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.metatileentity.CoverableTileEntity;
+import gregtech.common.covers.CoverInfo;
import io.netty.buffer.ByteBuf;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.network.INetHandler;
@@ -29,6 +30,16 @@ public class GT_Packet_RequestCoverData extends GT_Packet_New {
super(true);
}
+ public GT_Packet_RequestCoverData(CoverInfo info, ICoverable tile) {
+ super(false);
+ this.mX = tile.getXCoord();
+ this.mY = tile.getYCoord();
+ this.mZ = tile.getZCoord();
+
+ this.side = info.getSide();
+ this.coverID = info.getCoverID();
+ }
+
public GT_Packet_RequestCoverData(int mX, short mY, int mZ, byte coverSide, int coverID) {
super(false);
this.mX = mX;
@@ -79,9 +90,9 @@ public class GT_Packet_RequestCoverData extends GT_Packet_New {
@Override
public void process(IBlockAccess aWorld) {
- if (mPlayer == null) // impossible, but who knows
- return;
- World world = DimensionManager.getWorld(mPlayer.dimension);
+ // impossible, but who knows
+ if (mPlayer == null) return;
+ final World world = DimensionManager.getWorld(mPlayer.dimension);
if (world != null) {
final TileEntity tile = world.getTileEntity(mX, mY, mZ);
if (tile instanceof CoverableTileEntity) {
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 ab8b230077..86ecb8b468 100644
--- a/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java
+++ b/src/main/java/gregtech/api/net/GT_Packet_SendCoverData.java
@@ -5,6 +5,7 @@ import gregtech.api.GregTech_API;
import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.metatileentity.CoverableTileEntity;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.covers.CoverInfo;
import io.netty.buffer.ByteBuf;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.IBlockAccess;
@@ -37,6 +38,17 @@ public class GT_Packet_SendCoverData extends GT_Packet_New {
this.coverData = coverData;
}
+ public GT_Packet_SendCoverData(CoverInfo info, ICoverable tile) {
+ super(false);
+ this.mX = tile.getXCoord();
+ this.mY = tile.getYCoord();
+ this.mZ = tile.getZCoord();
+
+ this.side = info.getSide();
+ this.coverID = info.getCoverID();
+ this.coverData = info.getCoverData();
+ }
+
public GT_Packet_SendCoverData(byte coverSide, int coverID, ISerializableObject coverData, ICoverable tile) {
super(false);
this.mX = tile.getXCoord();
@@ -66,7 +78,7 @@ public class GT_Packet_SendCoverData extends GT_Packet_New {
@Override
public GT_Packet_New decode(ByteArrayDataInput aData) {
- int coverId;
+ final int coverId;
return new GT_Packet_SendCoverData(
aData.readInt(),
aData.readShort(),
@@ -79,7 +91,7 @@ public class GT_Packet_SendCoverData extends GT_Packet_New {
@Override
public void process(IBlockAccess aWorld) {
if (aWorld != null) {
- TileEntity tile = aWorld.getTileEntity(mX, mY, mZ);
+ final TileEntity tile = aWorld.getTileEntity(mX, mY, mZ);
if (tile instanceof CoverableTileEntity && !((CoverableTileEntity) tile).isDead()) {
((CoverableTileEntity) tile).receiveCoverData(side, coverID, coverData, null);
}
diff --git a/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java b/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java
index b7aa229530..3f1425272a 100644
--- a/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java
+++ b/src/main/java/gregtech/api/net/GT_Packet_TileEntity.java
@@ -4,7 +4,6 @@ import com.google.common.io.ByteArrayDataInput;
import gregtech.GT_Mod;
import gregtech.api.metatileentity.BaseMetaPipeEntity;
import gregtech.api.metatileentity.BaseMetaTileEntity;
-import gregtech.api.multitileentity.MultiTileEntityBlock;
import io.netty.buffer.ByteBuf;
import net.minecraft.block.Block;
import net.minecraft.tileentity.TileEntity;
@@ -173,27 +172,6 @@ public class GT_Packet_TileEntity extends GT_Packet_New {
((BaseMetaPipeEntity) tTileEntity)
.receiveMetaTileEntityData(
mID, mC0, mC1, mC2, mC3, mC4, mC5, mTexture, mUpdate, mRedstone, mColor);
- else if ((tBlock = aWorld.getBlock(mX, mY, mZ)) instanceof MultiTileEntityBlock) {
- ((MultiTileEntityBlock) tBlock)
- .receiveMultiTileEntityData(
- aWorld,
- mX,
- mY,
- mZ,
- mRID,
- mID,
- mC0,
- mC1,
- mC2,
- mC3,
- mC4,
- mC5,
- mTexture,
- mTexturePage,
- mUpdate,
- mRedstone,
- mColor);
- }
} catch (Exception e) {
GT_Mod.GT_FML_LOGGER.error(
"Exception setting tile entity data for tile entity {} at ({}, {}, {})", tTileEntity, mX, mY, mZ);
diff --git a/src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java b/src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java
index 65194a7390..6fbaf81b53 100644
--- a/src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java
+++ b/src/main/java/gregtech/api/net/GT_Packet_TileEntityCoverGUI.java
@@ -7,6 +7,7 @@ import gregtech.api.interfaces.tileentity.ICoverable;
import gregtech.api.interfaces.tileentity.IGregTechTileEntity;
import gregtech.api.util.GT_CoverBehaviorBase;
import gregtech.api.util.ISerializableObject;
+import gregtech.common.covers.CoverInfo;
import io.netty.buffer.ByteBuf;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiScreen;
@@ -72,6 +73,22 @@ public class GT_Packet_TileEntityCoverGUI extends GT_Packet_New {
this.parentGuiId = -1;
}
+ public GT_Packet_TileEntityCoverGUI(CoverInfo coverInfo, int dimID, int playerID, int parentGuiId) {
+ super(false);
+ final ICoverable tile = coverInfo.getTile();
+ this.mX = tile.getXCoord();
+ this.mY = tile.getYCoord();
+ this.mZ = tile.getZCoord();
+
+ this.side = coverInfo.getSide();
+ this.coverID = coverInfo.getCoverID();
+ this.coverData = coverInfo.getCoverData();
+
+ this.dimID = dimID;
+ this.playerID = playerID;
+ this.parentGuiId = parentGuiId;
+ }
+
public GT_Packet_TileEntityCoverGUI(
int mX,
short mY,
@@ -182,15 +199,15 @@ public class GT_Packet_TileEntityCoverGUI extends GT_Packet_New {
public void process(IBlockAccess aWorld) {
if (aWorld instanceof World) {
// Using EntityPlayer instead of EntityClientPlayerMP so both client and server can load this
- EntityPlayer thePlayer = ((EntityPlayer) ((World) aWorld).getEntityByID(playerID));
- TileEntity tile = aWorld.getTileEntity(mX, mY, mZ);
+ final EntityPlayer thePlayer = ((EntityPlayer) ((World) aWorld).getEntityByID(playerID));
+ final TileEntity tile = aWorld.getTileEntity(mX, mY, mZ);
if (tile instanceof IGregTechTileEntity && !((IGregTechTileEntity) tile).isDead()) {
- IGregTechTileEntity gtTile = ((IGregTechTileEntity) tile);
+ final IGregTechTileEntity gtTile = ((IGregTechTileEntity) tile);
gtTile.setCoverDataAtSide(side, coverData); // Set it client side to read later.
GT_CoverBehaviorBase<?> cover = gtTile.getCoverBehaviorAtSideNew(side);
if (cover.hasCoverGUI()) {
- GuiScreen gui = (GuiScreen) cover.getClientGUI(
+ final GuiScreen gui = (GuiScreen) cover.getClientGUI(
side,
gtTile.getCoverIDAtSide(side),
gtTile.getComplexCoverDataAtSide(side),
diff --git a/src/main/java/gregtech/api/threads/GT_Runnable_Cable_Update.java b/src/main/java/gregtech/api/threads/GT_Runnable_Cable_Update.java
index 9ae94d1c80..3a2406dfde 100644
--- a/src/main/java/gregtech/api/threads/GT_Runnable_Cable_Update.java
+++ b/src/main/java/gregtech/api/threads/GT_Runnable_Cable_Update.java
@@ -1,5 +1,7 @@
package gregtech.api.threads;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
+
import gregtech.GT_Mod;
import gregtech.api.interfaces.tileentity.IMachineBlockUpdateable;
import gregtech.api.metatileentity.BaseMetaPipeEntity;
@@ -50,10 +52,10 @@ public class GT_Runnable_Cable_Update extends GT_Runnable_MachineBlockUpdate {
if (tTileEntity instanceof BaseMetaPipeEntity
&& ((BaseMetaPipeEntity) tTileEntity).getMetaTileEntity() instanceof GT_MetaPipeEntity_Cable) {
ChunkCoordinates tCoords;
- for (byte i = 0; i < 6; i++) {
+ for (byte tSide : ALL_VALID_SIDES) {
if (((GT_MetaPipeEntity_Cable) ((BaseMetaPipeEntity) tTileEntity).getMetaTileEntity())
- .isConnectedAtSide(i)) {
- ForgeDirection offset = ForgeDirection.getOrientation(i);
+ .isConnectedAtSide(tSide)) {
+ final ForgeDirection offset = ForgeDirection.getOrientation(tSide);
if (visited.add(
tCoords = new ChunkCoordinates(
aCoords.posX + offset.offsetX,
diff --git a/src/main/java/gregtech/api/util/GT_CircuitryBehavior.java b/src/main/java/gregtech/api/util/GT_CircuitryBehavior.java
index b7ded54d64..2813df0973 100644
--- a/src/main/java/gregtech/api/util/GT_CircuitryBehavior.java
+++ b/src/main/java/gregtech/api/util/GT_CircuitryBehavior.java
@@ -1,5 +1,7 @@
package gregtech.api.util;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
+
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import gregtech.api.GregTech_API;
@@ -31,17 +33,17 @@ public abstract class GT_CircuitryBehavior {
/**
* returns if there is Redstone applied to any of the valid Inputs (OR)
*/
- public static final boolean getAnyRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
- for (byte i = 0; i < 6; i++) {
- if (i != aRedstoneCircuitBlock.getOutputFacing()
+ public static boolean getAnyRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
+ for (byte side : ALL_VALID_SIDES) {
+ if (side != aRedstoneCircuitBlock.getOutputFacing()
&& aRedstoneCircuitBlock
- .getCover(i)
+ .getCover(side)
.letsRedstoneGoIn(
- i,
- aRedstoneCircuitBlock.getCoverID(i),
- aRedstoneCircuitBlock.getCoverVariable(i),
+ side,
+ aRedstoneCircuitBlock.getCoverID(side),
+ aRedstoneCircuitBlock.getCoverVariable(side),
aRedstoneCircuitBlock.getOwnTileEntity())) {
- if (aRedstoneCircuitBlock.getInputRedstone(i) > 0) {
+ if (aRedstoneCircuitBlock.getInputRedstone(side) > 0) {
return true;
}
}
@@ -52,17 +54,17 @@ public abstract class GT_CircuitryBehavior {
/**
* returns if there is Redstone applied to all the valid Inputs (AND)
*/
- public static final boolean getAllRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
- for (byte i = 0; i < 6; i++) {
- if (i != aRedstoneCircuitBlock.getOutputFacing()
+ public static boolean getAllRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
+ for (byte side : ALL_VALID_SIDES) {
+ if (side != aRedstoneCircuitBlock.getOutputFacing()
&& aRedstoneCircuitBlock
- .getCover(i)
+ .getCover(side)
.letsRedstoneGoIn(
- i,
- aRedstoneCircuitBlock.getCoverID(i),
- aRedstoneCircuitBlock.getCoverVariable(i),
+ side,
+ aRedstoneCircuitBlock.getCoverID(side),
+ aRedstoneCircuitBlock.getCoverVariable(side),
aRedstoneCircuitBlock.getOwnTileEntity())) {
- if (aRedstoneCircuitBlock.getInputRedstone(i) == 0) {
+ if (aRedstoneCircuitBlock.getInputRedstone(side) == 0) {
return false;
}
}
@@ -73,18 +75,18 @@ public abstract class GT_CircuitryBehavior {
/**
* returns if there is Redstone applied to exactly one of the valid Inputs (XOR)
*/
- public static final boolean getOneRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
+ public static boolean getOneRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
int tRedstoneAmount = 0;
- for (byte i = 0; i < 6; i++) {
- if (i != aRedstoneCircuitBlock.getOutputFacing()
+ for (byte side : ALL_VALID_SIDES) {
+ if (side != aRedstoneCircuitBlock.getOutputFacing()
&& aRedstoneCircuitBlock
- .getCover(i)
+ .getCover(side)
.letsRedstoneGoIn(
- i,
- aRedstoneCircuitBlock.getCoverID(i),
- aRedstoneCircuitBlock.getCoverVariable(i),
+ side,
+ aRedstoneCircuitBlock.getCoverID(side),
+ aRedstoneCircuitBlock.getCoverVariable(side),
aRedstoneCircuitBlock.getOwnTileEntity())) {
- if (aRedstoneCircuitBlock.getInputRedstone(i) > 0) {
+ if (aRedstoneCircuitBlock.getInputRedstone(side) > 0) {
tRedstoneAmount++;
}
}
@@ -95,18 +97,18 @@ public abstract class GT_CircuitryBehavior {
/**
* returns the strongest incoming RS-Power
*/
- public static final byte getStrongestRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
+ public static byte getStrongestRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
byte tRedstoneAmount = 0;
- for (byte i = 0; i < 6; i++) {
- if (i != aRedstoneCircuitBlock.getOutputFacing()
+ for (byte side : ALL_VALID_SIDES) {
+ if (side != aRedstoneCircuitBlock.getOutputFacing()
&& aRedstoneCircuitBlock
- .getCover(i)
+ .getCover(side)
.letsRedstoneGoIn(
- i,
- aRedstoneCircuitBlock.getCoverID(i),
- aRedstoneCircuitBlock.getCoverVariable(i),
+ side,
+ aRedstoneCircuitBlock.getCoverID(side),
+ aRedstoneCircuitBlock.getCoverVariable(side),
aRedstoneCircuitBlock.getOwnTileEntity())) {
- tRedstoneAmount = (byte) Math.max(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(i));
+ tRedstoneAmount = (byte) Math.max(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(side));
}
}
return tRedstoneAmount;
@@ -119,20 +121,20 @@ public abstract class GT_CircuitryBehavior {
/**
* returns the weakest incoming non-zero RS-Power
*/
- public static final byte getWeakestNonZeroRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
+ public static byte getWeakestNonZeroRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
if (!getAnyRedstone(aRedstoneCircuitBlock)) return 0;
byte tRedstoneAmount = 15;
- for (byte i = 0; i < 6; i++) {
- if (i != aRedstoneCircuitBlock.getOutputFacing()
+ for (byte side : ALL_VALID_SIDES) {
+ if (side != aRedstoneCircuitBlock.getOutputFacing()
&& aRedstoneCircuitBlock
- .getCover(i)
+ .getCover(side)
.letsRedstoneGoIn(
- i,
- aRedstoneCircuitBlock.getCoverID(i),
- aRedstoneCircuitBlock.getCoverVariable(i),
+ side,
+ aRedstoneCircuitBlock.getCoverID(side),
+ aRedstoneCircuitBlock.getCoverVariable(side),
aRedstoneCircuitBlock.getOwnTileEntity())) {
- if (aRedstoneCircuitBlock.getInputRedstone(i) > 0)
- tRedstoneAmount = (byte) Math.min(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(i));
+ if (aRedstoneCircuitBlock.getInputRedstone(side) > 0)
+ tRedstoneAmount = (byte) Math.min(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(side));
}
}
return tRedstoneAmount;
@@ -141,19 +143,19 @@ public abstract class GT_CircuitryBehavior {
/**
* returns the weakest incoming RS-Power
*/
- public static final byte getWeakestRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
+ public static byte getWeakestRedstone(IRedstoneCircuitBlock aRedstoneCircuitBlock) {
if (!getAnyRedstone(aRedstoneCircuitBlock)) return 0;
byte tRedstoneAmount = 15;
- for (byte i = 0; i < 6; i++) {
- if (i != aRedstoneCircuitBlock.getOutputFacing()
+ for (byte side : ALL_VALID_SIDES) {
+ if (side != aRedstoneCircuitBlock.getOutputFacing()
&& aRedstoneCircuitBlock
- .getCover(i)
+ .getCover(side)
.letsRedstoneGoIn(
- i,
- aRedstoneCircuitBlock.getCoverID(i),
- aRedstoneCircuitBlock.getCoverVariable(i),
+ side,
+ aRedstoneCircuitBlock.getCoverID(side),
+ aRedstoneCircuitBlock.getCoverVariable(side),
aRedstoneCircuitBlock.getOwnTileEntity())) {
- tRedstoneAmount = (byte) Math.min(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(i));
+ tRedstoneAmount = (byte) Math.min(tRedstoneAmount, aRedstoneCircuitBlock.getInputRedstone(side));
}
}
return tRedstoneAmount;
diff --git a/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java b/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java
index 8991289a78..12505dff31 100644
--- a/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java
+++ b/src/main/java/gregtech/api/util/GT_CoverBehaviorBase.java
@@ -62,7 +62,7 @@ public abstract class GT_CoverBehaviorBase<T extends ISerializableObject> {
return createDataObject(((NBTTagInt) aNBT).func_150287_d());
}
- T ret = createDataObject();
+ final T ret = createDataObject();
ret.loadDataFromNBT(aNBT);
return ret;
}
diff --git a/src/main/java/gregtech/api/util/GT_Utility.java b/src/main/java/gregtech/api/util/GT_Utility.java
index cfa261c321..ee4a92b1a4 100644
--- a/src/main/java/gregtech/api/util/GT_Utility.java
+++ b/src/main/java/gregtech/api/util/GT_Utility.java
@@ -798,11 +798,11 @@ public class GT_Utility {
|| aMaxStackTransfer == 0) return 0;
// find where to take from
- int[] tGrabSlots = new int[aTileEntity1.getSizeInventory()];
+ final int[] tGrabSlots = new int[aTileEntity1.getSizeInventory()];
int tGrabSlotsSize = 0;
if (aTileEntity1 instanceof ISidedInventory) {
for (int i : ((ISidedInventory) aTileEntity1).getAccessibleSlotsFromSide(aGrabFrom)) {
- ItemStack s = aTileEntity1.getStackInSlot(i);
+ final ItemStack s = aTileEntity1.getStackInSlot(i);
if (s == null
|| !isAllowedToTakeFromSlot(aTileEntity1, i, aGrabFrom, s)
|| s.stackSize < aMinMoveAtOnce
@@ -839,15 +839,15 @@ public class GT_Utility {
// if target is an inventory, e.g. chest, machine, drawers...
if (aTileEntity2 instanceof IInventory) {
- IInventory tPutInventory = (IInventory) aTileEntity2;
+ final IInventory tPutInventory = (IInventory) aTileEntity2;
// partially filled slot spare space mapping.
// value is the sum of all spare space left not counting completely empty slot
- HashMap<ItemId, Integer> tPutItems = new HashMap<>(tPutInventory.getSizeInventory());
+ final HashMap<ItemId, Integer> tPutItems = new HashMap<>(tPutInventory.getSizeInventory());
// partially filled slot contents
- HashMap<ItemId, List<ItemStack>> tPutItemStacks = new HashMap<>(tPutInventory.getSizeInventory());
+ final HashMap<ItemId, List<ItemStack>> tPutItemStacks = new HashMap<>(tPutInventory.getSizeInventory());
// completely empty slots
- List<Integer> tPutFreeSlots = new ArrayList<>(tPutInventory.getSizeInventory());
+ final List<Integer> tPutFreeSlots = new ArrayList<>(tPutInventory.getSizeInventory());
// find possible target slots
int[] accessibleSlots = null;
@@ -895,28 +895,28 @@ public class GT_Utility {
// go over source stacks one by one
int tStacksMoved = 0, tTotalItemsMoved = 0;
for (int j = 0; j < tGrabSlotsSize; j++) {
- int grabSlot = tGrabSlots[j];
+ final int grabSlot = tGrabSlots[j];
int tMovedItems;
int tStackSize;
do {
tMovedItems = 0;
- ItemStack tGrabStack = aTileEntity1.getStackInSlot(grabSlot);
+ final ItemStack tGrabStack = aTileEntity1.getStackInSlot(grabSlot);
if (tGrabStack == null) break;
tStackSize = tGrabStack.stackSize;
- ItemId sID = ItemId.createNoCopy(tGrabStack);
+ final ItemId sID = ItemId.createNoCopy(tGrabStack);
if (tPutItems.containsKey(sID)) {
// there is a partially filled slot, try merging
- int canPut = Math.min(tPutItems.get(sID), aMaxMoveAtOnce);
+ final int canPut = Math.min(tPutItems.get(sID), aMaxMoveAtOnce);
if (canPut >= aMinMoveAtOnce) {
- List<ItemStack> putStack = tPutItemStacks.get(sID);
+ final List<ItemStack> putStack = tPutItemStacks.get(sID);
if (!putStack.isEmpty()) {
// can move, do merge
int toPut = Math.min(canPut, tStackSize);
tMovedItems = toPut;
for (int i = 0; i < putStack.size(); i++) {
- ItemStack s = putStack.get(i);
- int sToPut = Math.min(
+ final ItemStack s = putStack.get(i);
+ final int sToPut = Math.min(
Math.min(
Math.min(toPut, s.getMaxStackSize() - s.stackSize),
tPutInventory.getInventoryStackLimit() - s.stackSize),
@@ -953,10 +953,10 @@ public class GT_Utility {
// still stuff to move & have completely empty slots
if (tStackSize > 0 && !tPutFreeSlots.isEmpty()) {
for (int i = 0; i < tPutFreeSlots.size(); i++) {
- int tPutSlot = tPutFreeSlots.get(i);
+ final int tPutSlot = tPutFreeSlots.get(i);
if (isAllowedToPutIntoSlot(tPutInventory, tPutSlot, aPutTo, tGrabStack, (byte) 64)) {
// allowed, now do moving
- int tMoved = moveStackFromSlotAToSlotB(
+ final int tMoved = moveStackFromSlotAToSlotB(
aTileEntity1,
tPutInventory,
grabSlot,
@@ -966,15 +966,15 @@ public class GT_Utility {
(byte) (aMaxMoveAtOnce - tMovedItems),
aMinMoveAtOnce);
if (tMoved > 0) {
- ItemStack s = tPutInventory.getStackInSlot(tPutSlot);
+ final ItemStack s = tPutInventory.getStackInSlot(tPutSlot);
if (s != null) {
// s might be null if tPutInventory is very special, e.g. infinity chest
// if s is null, we will not mark this slot as target candidate for anything
- int spare =
+ final int spare =
Math.min(s.getMaxStackSize(), tPutInventory.getInventoryStackLimit())
- s.stackSize;
if (spare > 0) {
- ItemId ssID = ItemId.createNoCopy(s);
+ final ItemId ssID = ItemId.createNoCopy(s);
// add back to spare space count
tPutItems.merge(ssID, spare, Integer::sum);
// add to partially filled slot list
@@ -1007,7 +1007,7 @@ public class GT_Utility {
// check if source is a double chest, if yes, try move from the adjacent as well
if (aDoCheckChests && aTileEntity1 instanceof TileEntityChest) {
- int tAmount = moveFromAdjacentChests(
+ final int tAmount = moveFromAdjacentChests(
(TileEntityChest) aTileEntity1,
aTileEntity2,
aGrabFrom,
@@ -1024,7 +1024,7 @@ public class GT_Utility {
// check if target is a double chest, if yes, try move to the adjacent as well
if (aDoCheckChests && aTileEntity2 instanceof TileEntityChest) {
- int tAmount = moveToAdjacentChests(
+ final int tAmount = moveToAdjacentChests(
aTileEntity1,
(TileEntityChest) aTileEntity2,
aGrabFrom,
@@ -1044,9 +1044,9 @@ public class GT_Utility {
// there should be a function to transfer more than 1 stack in a pipe
// however I do not see any ways to improve it. too much work for what it is worth
int tTotalItemsMoved = 0;
- int tGrabInventorySize = tGrabSlots.length;
+ final int tGrabInventorySize = tGrabSlots.length;
for (int i = 0; i < tGrabInventorySize; i++) {
- int tMoved = moveStackIntoPipe(
+ final int tMoved = moveStackIntoPipe(
aTileEntity1,
aTileEntity2,
tGrabSlots,
@@ -3380,12 +3380,8 @@ public class GT_Utility {
if (tTileEntity instanceof ICoverable) {
rEUAmount += 300;
final String tString = ((ICoverable) tTileEntity)
- .getCoverBehaviorAtSideNew((byte) aSide)
- .getDescription(
- (byte) aSide,
- ((ICoverable) tTileEntity).getCoverIDAtSide((byte) aSide),
- ((ICoverable) tTileEntity).getComplexCoverDataAtSide((byte) aSide),
- (ICoverable) tTileEntity);
+ .getCoverInfoAtSide((byte) aSide)
+ .getBehaviorDescription();
if (tString != null && !tString.equals(E)) tList.add(tString);
}
} catch (Throwable e) {