aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-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
-rw-r--r--src/main/java/gregtech/common/GT_Client.java16
-rw-r--r--src/main/java/gregtech/common/GT_Network.java45
-rw-r--r--src/main/java/gregtech/common/GT_Proxy.java29
-rw-r--r--src/main/java/gregtech/common/blocks/GT_Block_Machines.java30
-rw-r--r--src/main/java/gregtech/common/covers/CoverInfo.java235
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java6
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java10
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java24
-rw-r--r--src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterExternal.java6
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Output_ME.java8
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_IndustrialApiary.java160
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Cleanroom.java36
-rw-r--r--src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java33
-rw-r--r--src/main/resources/assets/gregtech/textures/gui/picture/fluid_in.pngbin0 -> 1692 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/gui/picture/fluid_out.pngbin0 -> 1699 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/gui/picture/item_in.pngbin0 -> 1700 bytes
-rw-r--r--src/main/resources/assets/gregtech/textures/gui/picture/item_out.pngbin0 -> 1696 bytes
61 files changed, 2218 insertions, 1364 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) {
diff --git a/src/main/java/gregtech/common/GT_Client.java b/src/main/java/gregtech/common/GT_Client.java
index 2a93e541b5..0ce1e284ca 100644
--- a/src/main/java/gregtech/common/GT_Client.java
+++ b/src/main/java/gregtech/common/GT_Client.java
@@ -5,6 +5,7 @@
package gregtech.common;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
import static gregtech.api.enums.GT_Values.calculateMaxPlasmaTurbineEfficiency;
import static org.lwjgl.opengl.GL11.GL_LINE_LOOP;
@@ -328,16 +329,17 @@ public class GT_Client extends GT_Proxy implements Runnable {
byte tConnections = 0;
if (tTile instanceof ICoverable) {
if (showCoverConnections) {
- for (byte i = 0; i < 6; i++) {
- if (((ICoverable) tTile).getCoverIDAtSide(i) > 0) tConnections = (byte) (tConnections + (1 << i));
+ for (byte tSide : ALL_VALID_SIDES) {
+ if (((ICoverable) tTile).getCoverIDAtSide(tSide) > 0)
+ tConnections = (byte) (tConnections + (1 << tSide));
}
} else if (tTile instanceof BaseMetaPipeEntity) tConnections = ((BaseMetaPipeEntity) tTile).mConnections;
}
if (tConnections > 0) {
- for (byte i = 0; i < 6; i++) {
- if ((tConnections & (1 << i)) != 0) {
- switch (GRID_SWITCH_TABLE[aEvent.target.sideHit][i]) {
+ for (byte tSide : ALL_VALID_SIDES) {
+ if ((tConnections & (1 << tSide)) != 0) {
+ switch (GRID_SWITCH_TABLE[aEvent.target.sideHit][tSide]) {
case 0:
GL11.glVertex3d(+.25D, .0D, +.25D);
GL11.glVertex3d(-.25D, .0D, -.25D);
@@ -787,8 +789,8 @@ public class GT_Client extends GT_Proxy implements Runnable {
|| GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sCrowbarList)
|| GT_Utility.isStackInList(aEvent.currentItem, GregTech_API.sScrewdriverList)) {
if (((ICoverable) aTileEntity).getCoverIDAtSide((byte) aEvent.target.sideHit) == 0)
- for (byte i = 0; i < 6; i++)
- if (((ICoverable) aTileEntity).getCoverIDAtSide(i) > 0) {
+ for (byte tSide : ALL_VALID_SIDES)
+ if (((ICoverable) aTileEntity).getCoverIDAtSide(tSide) > 0) {
drawGrid(aEvent, true, false, true);
return;
}
diff --git a/src/main/java/gregtech/common/GT_Network.java b/src/main/java/gregtech/common/GT_Network.java
index 39f50a9e04..4e1a58b4db 100644
--- a/src/main/java/gregtech/common/GT_Network.java
+++ b/src/main/java/gregtech/common/GT_Network.java
@@ -36,24 +36,26 @@ public class GT_Network extends MessageToMessageCodec<FMLProxyPacket, GT_Packet>
public GT_Network() {
this(
"GregTech",
- new GT_Packet_TileEntity(),
- new GT_Packet_Sound(),
- new GT_Packet_Block_Event(),
- new GT_Packet_Ores(),
- new GT_Packet_Pollution(),
- new MessageSetFlaskCapacity(),
- new GT_Packet_TileEntityCover(),
- new GT_Packet_TileEntityCoverGUI(),
- new MessageUpdateFluidDisplayItem(),
- new GT_Packet_ClientPreference(),
- new GT_Packet_WirelessRedstoneCover(),
- new GT_Packet_TileEntityCoverNew(),
- new GT_Packet_SetConfigurationCircuit(),
- new GT_Packet_UpdateItem(),
- new GT_Packet_SetLockedFluid(),
- new GT_Packet_GtTileEntityGuiRequest(),
- new GT_Packet_SendCoverData(),
- new GT_Packet_RequestCoverData());
+ new GT_Packet_TileEntity(), // 0
+ new GT_Packet_Sound(), // 1
+ new GT_Packet_Block_Event(), // 2
+ new GT_Packet_Ores(), // 3
+ new GT_Packet_Pollution(), // 4
+ new MessageSetFlaskCapacity(), // 5
+ new GT_Packet_TileEntityCover(), // 6
+ new GT_Packet_TileEntityCoverGUI(), // 7
+ new MessageUpdateFluidDisplayItem(), // 8
+ new GT_Packet_ClientPreference(), // 9
+ new GT_Packet_WirelessRedstoneCover(), // 10
+ new GT_Packet_TileEntityCoverNew(), // 11
+ new GT_Packet_SetConfigurationCircuit(), // 12
+ new GT_Packet_UpdateItem(), // 13
+ new GT_Packet_SetLockedFluid(), // 14
+ new GT_Packet_GtTileEntityGuiRequest(), // 15
+ new GT_Packet_SendCoverData(), // 16
+ new GT_Packet_RequestCoverData(), // 17
+ new GT_Packet_MultiTileEntity() // 18
+ );
}
public GT_Network(String channelName, GT_Packet... packetTypes) {
@@ -68,7 +70,7 @@ public class GT_Network extends MessageToMessageCodec<FMLProxyPacket, GT_Packet>
@Override
protected void encode(ChannelHandlerContext aContext, GT_Packet aPacket, List<Object> aOutput) throws Exception {
- ByteBuf tBuf = Unpooled.buffer().writeByte(aPacket.getPacketID());
+ final ByteBuf tBuf = Unpooled.buffer().writeByte(aPacket.getPacketID());
aPacket.encode(tBuf);
aOutput.add(new FMLProxyPacket(
tBuf, aContext.channel().attr(NetworkRegistry.FML_CHANNEL).get()));
@@ -77,8 +79,9 @@ public class GT_Network extends MessageToMessageCodec<FMLProxyPacket, GT_Packet>
@Override
protected void decode(ChannelHandlerContext aContext, FMLProxyPacket aPacket, List<Object> aOutput)
throws Exception {
- ByteArrayDataInput aData = ByteStreams.newDataInput(aPacket.payload().array());
- GT_Packet tPacket = this.mSubChannels[aData.readByte()].decode(aData);
+ final ByteArrayDataInput aData =
+ ByteStreams.newDataInput(aPacket.payload().array());
+ final GT_Packet tPacket = this.mSubChannels[aData.readByte()].decode(aData);
tPacket.setINetHandler(aPacket.handler());
aOutput.add(tPacket);
}
diff --git a/src/main/java/gregtech/common/GT_Proxy.java b/src/main/java/gregtech/common/GT_Proxy.java
index 92cfd04655..62bc9f7654 100644
--- a/src/main/java/gregtech/common/GT_Proxy.java
+++ b/src/main/java/gregtech/common/GT_Proxy.java
@@ -2191,16 +2191,16 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
GT_MetaGenerated_Tool_01.AXE, 1, Materials.Flint, Materials.Wood, null)));
}
}
- boolean tHungerEffect = (this.mHungerEffect) && (aEvent.player.ticksExisted % 2400 == 1200);
+ final boolean tHungerEffect = (this.mHungerEffect) && (aEvent.player.ticksExisted % 2400 == 1200);
if (aEvent.player.ticksExisted % 120 == 0) {
int tCount = 64;
for (int i = 0; i < 36; i++) {
- ItemStack tStack;
+ final ItemStack tStack;
if ((tStack = aEvent.player.inventory.getStackInSlot(i)) != null) {
if (!aEvent.player.capabilities.isCreativeMode) {
GT_Utility.applyRadioactivity(
aEvent.player, GT_Utility.getRadioactivityLevel(tStack), tStack.stackSize);
- float tHeat = GT_Utility.getHeatDamageFromItem(tStack);
+ final float tHeat = GT_Utility.getHeatDamageFromItem(tStack);
if (tHeat != 0.0F) {
if (tHeat > 0.0F) {
GT_Utility.applyHeatDamageFromItem(aEvent.player, tHeat, tStack);
@@ -2218,12 +2218,12 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
}
}
for (int i = 0; i < 4; i++) {
- ItemStack tStack;
+ final ItemStack tStack;
if ((tStack = aEvent.player.inventory.armorInventory[i]) != null) {
if (!aEvent.player.capabilities.isCreativeMode) {
GT_Utility.applyRadioactivity(
aEvent.player, GT_Utility.getRadioactivityLevel(tStack), tStack.stackSize);
- float tHeat = GT_Utility.getHeatDamageFromItem(tStack);
+ final float tHeat = GT_Utility.getHeatDamageFromItem(tStack);
if (tHeat != 0.0F) {
if (tHeat > 0.0F) {
GT_Utility.applyHeatDamageFromItem(aEvent.player, tHeat, tStack);
@@ -2257,12 +2257,12 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
if (aID >= 1000) {
return null;
}
- TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
if ((tTileEntity instanceof IGregTechTileEntity)) {
if (GUI_ID_COVER_SIDE_BASE <= aID && aID < GUI_ID_COVER_SIDE_BASE + 6) {
return null;
}
- IMetaTileEntity tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity();
+ final IMetaTileEntity tMetaTileEntity = ((IGregTechTileEntity) tTileEntity).getMetaTileEntity();
if (tMetaTileEntity != null && !tMetaTileEntity.useModularUI()) {
return tMetaTileEntity.getServerGUI(aID, aPlayer.inventory, (IGregTechTileEntity) tTileEntity);
}
@@ -2275,12 +2275,12 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
if (aID >= 1000) {
return null;
}
- TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
+ final TileEntity tTileEntity = aWorld.getTileEntity(aX, aY, aZ);
if ((tTileEntity instanceof IGregTechTileEntity)) {
- IGregTechTileEntity tile = (IGregTechTileEntity) tTileEntity;
+ final IGregTechTileEntity tile = (IGregTechTileEntity) tTileEntity;
if (GUI_ID_COVER_SIDE_BASE <= aID && aID < GUI_ID_COVER_SIDE_BASE + 6) {
- byte side = (byte) (aID - GT_Proxy.GUI_ID_COVER_SIDE_BASE);
+ final byte side = (byte) (aID - GT_Proxy.GUI_ID_COVER_SIDE_BASE);
GT_CoverBehaviorBase<?> cover = tile.getCoverBehaviorAtSideNew(side);
if (cover.hasCoverGUI() && !cover.useModularUI()) {
@@ -2294,7 +2294,7 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
}
return null;
}
- IMetaTileEntity tMetaTileEntity = tile.getMetaTileEntity();
+ final IMetaTileEntity tMetaTileEntity = tile.getMetaTileEntity();
if (tMetaTileEntity != null && !tMetaTileEntity.useModularUI()) {
return tMetaTileEntity.getClientGUI(aID, aPlayer.inventory, tile);
}
@@ -2315,15 +2315,16 @@ public abstract class GT_Proxy implements IGT_Mod, IGuiHandler, IFuelHandler, IG
}
int rFuelValue = 0;
if ((aFuel.getItem() instanceof GT_MetaGenerated_Item)) {
- Short tFuelValue = ((GT_MetaGenerated_Item) aFuel.getItem()).mBurnValues.get((short) aFuel.getItemDamage());
+ final Short tFuelValue =
+ ((GT_MetaGenerated_Item) aFuel.getItem()).mBurnValues.get((short) aFuel.getItemDamage());
if (tFuelValue != null) {
rFuelValue = Math.max(rFuelValue, tFuelValue);
}
}
- NBTTagCompound tNBT = aFuel.getTagCompound();
+ final NBTTagCompound tNBT = aFuel.getTagCompound();
if (tNBT != null) {
// See if we have something defined by NBT
- short tValue = tNBT.getShort("GT.ItemFuelValue");
+ final short tValue = tNBT.getShort("GT.ItemFuelValue");
rFuelValue = Math.max(rFuelValue, tValue);
} else {
// If not check the ore dict
diff --git a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java
index d176fd26a3..25db7f32dd 100644
--- a/src/main/java/gregtech/common/blocks/GT_Block_Machines.java
+++ b/src/main/java/gregtech/common/blocks/GT_Block_Machines.java
@@ -1,6 +1,7 @@
package gregtech.common.blocks;
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.SIDE_UP;
import static gregtech.api.objects.XSTR.XSTR_INSTANCE;
@@ -23,6 +24,7 @@ import gregtech.api.metatileentity.CoverableTileEntity;
import gregtech.api.util.GT_BaseCrop;
import gregtech.api.util.GT_Log;
import gregtech.api.util.GT_Utility;
+import gregtech.common.covers.CoverInfo;
import gregtech.common.render.GT_Renderer_Block;
import gregtech.common.tileentities.storage.GT_MetaTileEntity_QuantumChest;
import java.util.ArrayList;
@@ -658,16 +660,13 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo
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;
}
@@ -684,22 +683,17 @@ public class GT_Block_Machines extends GT_Generic_Block implements IDebugableBlo
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();
}
}
}
diff --git a/src/main/java/gregtech/common/covers/CoverInfo.java b/src/main/java/gregtech/common/covers/CoverInfo.java
new file mode 100644
index 0000000000..58b1afe5ba
--- /dev/null
+++ b/src/main/java/gregtech/common/covers/CoverInfo.java
@@ -0,0 +1,235 @@
+package gregtech.common.covers;
+
+import static gregtech.api.enums.GT_Values.SIDE_UNKNOWN;
+
+import com.gtnewhorizons.modularui.api.screen.ModularWindow;
+import gregtech.api.GregTech_API;
+import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
+import gregtech.api.interfaces.ITexture;
+import gregtech.api.interfaces.tileentity.ICoverable;
+import gregtech.api.util.GT_CoverBehaviorBase;
+import gregtech.api.util.ISerializableObject;
+import java.lang.ref.WeakReference;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.fluids.Fluid;
+
+public final class CoverInfo {
+ private static final String NBT_SIDE = "s", NBT_ID = "id", NBT_DATA = "d";
+
+ public static final CoverInfo EMPTY_INFO = new CoverInfo(SIDE_UNKNOWN, null);
+ private byte coverSide;
+ private int coverID = 0;
+ private GT_CoverBehaviorBase<?> coverBehavior = null;
+ private ISerializableObject coverData = null;
+ private final WeakReference<ICoverable> coveredTile;
+ private boolean needsUpdate = false;
+
+ public CoverInfo(byte aSide, ICoverable aTile) {
+ coverSide = aSide;
+ coveredTile = new WeakReference<>(aTile);
+ }
+
+ public CoverInfo(byte aSide, int aID, ICoverable aTile, ISerializableObject aCoverData) {
+ coverSide = aSide;
+ coverID = aID;
+ coverBehavior = GregTech_API.getCoverBehaviorNew(aID);
+ coverData = aCoverData == null ? coverBehavior.createDataObject() : aCoverData;
+ coveredTile = new WeakReference<>(aTile);
+ }
+
+ public CoverInfo(ICoverable aTile, NBTTagCompound aNBT) {
+ coverSide = aNBT.getByte(NBT_SIDE);
+ coverID = aNBT.getInteger(NBT_ID);
+ coverBehavior = GregTech_API.getCoverBehaviorNew(coverID);
+ coverData = aNBT.hasKey(NBT_DATA)
+ ? coverBehavior.createDataObject(aNBT.getTag(NBT_DATA))
+ : coverBehavior.createDataObject();
+ coveredTile = new WeakReference<>(aTile);
+ }
+
+ public boolean isValid() {
+ return coverID != 0 && coverSide != SIDE_UNKNOWN;
+ }
+
+ public NBTTagCompound writeToNBT(NBTTagCompound aNBT) {
+ aNBT.setByte(NBT_SIDE, coverSide);
+ aNBT.setInteger(NBT_ID, coverID);
+ if (coverData != null) aNBT.setTag(NBT_DATA, coverData.saveDataToNBT());
+
+ return aNBT;
+ }
+
+ public int getCoverID() {
+ return coverID;
+ }
+
+ public boolean needsUpdate() {
+ return needsUpdate;
+ }
+
+ public void setNeedsUpdate(boolean aUpdate) {
+ needsUpdate = aUpdate;
+ }
+
+ public GT_CoverBehaviorBase<?> getCoverBehavior() {
+ if (coverBehavior != null) return coverBehavior;
+ return GregTech_API.sNoBehavior;
+ }
+
+ public ISerializableObject getCoverData() {
+ if (coverData != null) return coverData;
+ return GregTech_API.sNoBehavior.createDataObject();
+ }
+
+ public boolean onCoverRemoval(boolean aForced) {
+ return getCoverBehavior().onCoverRemoval(coverSide, coverID, coverData, coveredTile.get(), aForced);
+ }
+
+ public ItemStack getDrop() {
+ return getCoverBehavior().getDrop(coverSide, coverID, coverData, coveredTile.get());
+ }
+
+ public ItemStack getDisplayStack() {
+ return getCoverBehavior().getDisplayStack(coverID, coverData);
+ }
+
+ public boolean isDataNeededOnClient() {
+ return getCoverBehavior().isDataNeededOnClient(coverSide, coverID, coverData, coveredTile.get());
+ }
+
+ public void onDropped() {
+ getCoverBehavior().onDropped(coverSide, coverID, coverData, coveredTile.get());
+ }
+
+ public void setCoverData(ISerializableObject aData) {
+ coverData = aData;
+ }
+
+ public ITexture getSpecialCoverFGTexture() {
+ return getCoverBehavior().getSpecialCoverFGTexture(coverSide, coverID, coverData, coveredTile.get());
+ }
+
+ public ITexture getSpecialCoverTexture() {
+ return getCoverBehavior().getSpecialCoverTexture(coverSide, coverID, coverData, coveredTile.get());
+ }
+
+ public int getTickRate() {
+ return getCoverBehavior().getTickRate(coverSide, coverID, coverData, coveredTile.get());
+ }
+
+ public byte getSide() {
+ return coverSide;
+ }
+
+ public ICoverable getTile() {
+ return coveredTile.get();
+ }
+
+ public boolean isRedstoneSensitive(long aTickTimer) {
+ return getCoverBehavior().isRedstoneSensitive(coverSide, coverID, coverData, coveredTile.get(), aTickTimer);
+ }
+
+ public ISerializableObject doCoverThings(long aTickTimer, byte aRedstone) {
+ return getCoverBehavior()
+ .doCoverThings(coverSide, aRedstone, coverID, coverData, coveredTile.get(), aTickTimer);
+ }
+
+ public void onBaseTEDestroyed() {
+ getCoverBehavior().onBaseTEDestroyed(coverSide, coverID, coverData, coveredTile.get());
+ }
+
+ public void updateCoverBehavior() {
+ coverBehavior = GregTech_API.getCoverBehaviorNew(coverID);
+ }
+
+ public void preDataChanged(int aCoverID, ISerializableObject aCoverData) {
+ getCoverBehavior().preDataChanged(coverSide, coverID, aCoverID, coverData, aCoverData, coveredTile.get());
+ }
+
+ public void onDataChanged() {
+ getCoverBehavior().onDataChanged(coverSide, coverID, coverData, coveredTile.get());
+ }
+
+ public String getBehaviorDescription() {
+ return getCoverBehavior().getDescription(coverSide, coverID, coverData, null);
+ }
+
+ public ModularWindow createWindow(EntityPlayer player) {
+ final GT_CoverUIBuildContext buildContext =
+ new GT_CoverUIBuildContext(player, coverID, coverSide, coveredTile.get(), true);
+ return getCoverBehavior().createWindow(buildContext);
+ }
+
+ public boolean isGUIClickable() {
+ return getCoverBehavior().isGUIClickable(coverSide, coverID, coverData, coveredTile.get());
+ }
+
+ public boolean hasCoverGUI() {
+ return getCoverBehavior().hasCoverGUI();
+ }
+
+ public boolean useModularUI() {
+ return getCoverBehavior().useModularUI();
+ }
+
+ public boolean letsItemsIn(int aSlot) {
+ return getCoverBehavior().letsItemsIn(coverSide, coverID, coverData, aSlot, coveredTile.get());
+ }
+
+ public boolean letsItemsOut(int aSlot) {
+ return getCoverBehavior().letsItemsOut(coverSide, coverID, coverData, aSlot, coveredTile.get());
+ }
+
+ public boolean letsFluidIn(Fluid aFluid) {
+ return letsFluidIn(aFluid, coveredTile.get());
+ }
+
+ public boolean letsFluidOut(Fluid aFluid) {
+ return letsFluidOut(aFluid, coveredTile.get());
+ }
+
+ public boolean letsFluidIn(Fluid aFluid, ICoverable tile) {
+ return getCoverBehavior().letsFluidIn(coverSide, coverID, coverData, aFluid, tile);
+ }
+
+ public boolean letsFluidOut(Fluid aFluid, ICoverable tile) {
+ return getCoverBehavior().letsFluidOut(coverSide, coverID, coverData, aFluid, tile);
+ }
+
+ public boolean letsEnergyIn() {
+ return getCoverBehavior().letsEnergyIn(coverSide, coverID, coverData, coveredTile.get());
+ }
+
+ public boolean letsEnergyOut() {
+ return getCoverBehavior().letsEnergyOut(coverSide, coverID, coverData, coveredTile.get());
+ }
+
+ public boolean alwaysLookConnected() {
+ return getCoverBehavior().alwaysLookConnected(coverSide, coverID, coverData, coveredTile.get());
+ }
+
+ public boolean onCoverRightClick(EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ return getCoverBehavior()
+ .onCoverRightClick(coverSide, coverID, coverData, coveredTile.get(), aPlayer, aX, aY, aZ);
+ }
+
+ public boolean onCoverShiftRightClick(EntityPlayer aPlayer) {
+ return getCoverBehavior().onCoverShiftRightClick(coverSide, coverID, coverData, coveredTile.get(), aPlayer);
+ }
+
+ public ISerializableObject onCoverScrewdriverClick(EntityPlayer aPlayer, float aX, float aY, float aZ) {
+ return getCoverBehavior()
+ .onCoverScrewdriverClick(coverSide, coverID, coverData, coveredTile.get(), aPlayer, aX, aY, aZ);
+ }
+
+ public Block getFacadeBlock() {
+ return getCoverBehavior().getFacadeBlock(coverSide, coverID, coverData, coveredTile.get());
+ }
+
+ public int getFacadeMeta() {
+ return getCoverBehavior().getFacadeMeta(coverSide, coverID, coverData, coveredTile.get());
+ }
+}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java b/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java
index 270a221a08..f45ffbf2e8 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_ControlsWork.java
@@ -1,5 +1,7 @@
package gregtech.common.covers;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
+
import com.gtnewhorizons.modularui.api.screen.ModularWindow;
import com.gtnewhorizons.modularui.common.widget.TextWidget;
import gregtech.api.gui.modularui.GT_CoverUIBuildContext;
@@ -168,8 +170,8 @@ public class GT_Cover_ControlsWork extends GT_CoverBehavior implements IControls
@Override
public boolean isCoverPlaceable(byte aSide, ItemStack aStack, ICoverable aTileEntity) {
if (!super.isCoverPlaceable(aSide, aStack, aTileEntity)) return false;
- for (byte i = 0; i < 6; i++) {
- if (aTileEntity.getCoverBehaviorAtSideNew(i) instanceof IControlsWorkCover) {
+ for (byte tSide : ALL_VALID_SIDES) {
+ if (aTileEntity.getCoverBehaviorAtSideNew(tSide) instanceof IControlsWorkCover) {
return false;
}
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java b/src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java
index dc3bcc4f7b..54e9e50d8b 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_Conveyor.java
@@ -58,11 +58,11 @@ public class GT_Cover_Conveyor extends GT_CoverBehavior {
return aCoverVariable;
}
}
- TileEntity tTileEntity = aTileEntity.getTileEntityAtSide(aSide);
- Object fromEntity = aCoverVariable % 2 == 0 ? aTileEntity : tTileEntity,
- toEntity = aCoverVariable % 2 != 0 ? aTileEntity : tTileEntity;
- byte fromSide = aCoverVariable % 2 != 0 ? GT_Utility.getOppositeSide(aSide) : aSide,
- toSide = aCoverVariable % 2 == 0 ? GT_Utility.getOppositeSide(aSide) : aSide;
+ final TileEntity tTileEntity = aTileEntity.getTileEntityAtSide(aSide);
+ final Object fromEntity = aCoverVariable % 2 == 0 ? aTileEntity : tTileEntity;
+ final Object toEntity = aCoverVariable % 2 != 0 ? aTileEntity : tTileEntity;
+ final byte fromSide = aCoverVariable % 2 != 0 ? GT_Utility.getOppositeSide(aSide) : aSide;
+ final byte toSide = aCoverVariable % 2 == 0 ? GT_Utility.getOppositeSide(aSide) : aSide;
moveMultipleItemStacks(
fromEntity,
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java b/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java
index a2707043ef..7c55a9dce8 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_FacadeBase.java
@@ -1,5 +1,7 @@
package gregtech.common.covers;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
+
import com.google.common.io.ByteArrayDataInput;
import com.gtnewhorizons.modularui.api.drawable.ItemDrawable;
import com.gtnewhorizons.modularui.api.screen.ModularWindow;
@@ -120,6 +122,7 @@ public abstract class GT_Cover_FacadeBase extends GT_CoverBehaviorBase<GT_Cover_
public void placeCover(byte aSide, ItemStack aCover, ICoverable aTileEntity) {
aTileEntity.setCoverIdAndDataAtSide(
aSide, GT_Utility.stackToInt(aCover), new FacadeData(GT_Utility.copyAmount(1, aCover), 0));
+
if (aTileEntity.isClientSide())
GT_RenderingWorld.getInstance()
.register(
@@ -193,7 +196,7 @@ public abstract class GT_Cover_FacadeBase extends GT_CoverBehaviorBase<GT_Cover_
@Override
protected void onDroppedImpl(byte aSide, int aCoverID, FacadeData aCoverVariable, ICoverable aTileEntity) {
if (aTileEntity.isClientSide()) {
- for (byte i = 0; i < 6; i++) {
+ for (byte i : ALL_VALID_SIDES) {
if (i == aSide) continue;
// since we do not allow multiple type of facade per block, this check would be enough.
if (aTileEntity.getCoverBehaviorAtSideNew(i) instanceof GT_Cover_FacadeBase) return;
@@ -231,23 +234,20 @@ public abstract class GT_Cover_FacadeBase extends GT_CoverBehaviorBase<GT_Cover_
// to render it correctly require changing GT_Block_Machine to render in both pass, which is not really a good
// idea...
if (!super.isCoverPlaceable(aSide, aStack, aTileEntity)) return false;
- Block targetBlock = getTargetBlock(aStack);
+ final Block targetBlock = getTargetBlock(aStack);
if (targetBlock == null) return false;
// we allow one single type of facade on the same block for now
// otherwise it's not clear which block this block should impersonate
// this restriction can be lifted later by specifying a certain facade as dominate one as an extension to this
// class
- for (byte i = 0; i < 6; i++) {
+ for (byte i : ALL_VALID_SIDES) {
if (i == aSide) continue;
- GT_CoverBehaviorBase<?> behavior = aTileEntity.getCoverBehaviorAtSideNew(i);
- if (behavior == null) continue;
- Block facadeBlock = behavior.getFacadeBlock(
- i, aTileEntity.getCoverIDAtSide(i), aTileEntity.getComplexCoverDataAtSide(i), aTileEntity);
+ final CoverInfo coverInfo = aTileEntity.getCoverInfoAtSide(i);
+ if (!coverInfo.isValid()) continue;
+ final Block facadeBlock = coverInfo.getFacadeBlock();
if (facadeBlock == null) continue;
if (facadeBlock != targetBlock) return false;
- if (behavior.getFacadeMeta(
- i, aTileEntity.getCoverIDAtSide(i), aTileEntity.getComplexCoverDataAtSide(i), aTileEntity)
- != getTargetMeta(aStack)) return false;
+ if (coverInfo.getFacadeMeta() != getTargetMeta(aStack)) return false;
}
return true;
}
@@ -272,7 +272,7 @@ public abstract class GT_Cover_FacadeBase extends GT_CoverBehaviorBase<GT_Cover_
@Nonnull
@Override
public NBTBase saveDataToNBT() {
- NBTTagCompound tag = new NBTTagCompound();
+ final NBTTagCompound tag = new NBTTagCompound();
if (mStack != null) tag.setTag("mStack", mStack.writeToNBT(new NBTTagCompound()));
tag.setByte("mFlags", (byte) mFlags);
return tag;
@@ -286,7 +286,7 @@ public abstract class GT_Cover_FacadeBase extends GT_CoverBehaviorBase<GT_Cover_
@Override
public void loadDataFromNBT(NBTBase aNBT) {
- NBTTagCompound tag = (NBTTagCompound) aNBT;
+ final NBTTagCompound tag = (NBTTagCompound) aNBT;
mStack = ItemStack.loadItemStackFromNBT(tag.getCompoundTag("mStack"));
mFlags = tag.getByte("mFlags");
}
diff --git a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterExternal.java b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterExternal.java
index 92445fa038..984e817665 100644
--- a/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterExternal.java
+++ b/src/main/java/gregtech/common/covers/GT_Cover_RedstoneTransmitterExternal.java
@@ -1,5 +1,7 @@
package gregtech.common.covers;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
+
import gregtech.api.GregTech_API;
import gregtech.api.interfaces.ITexture;
import gregtech.api.interfaces.covers.IControlsWorkCover;
@@ -53,8 +55,8 @@ public class GT_Cover_RedstoneTransmitterExternal extends GT_Cover_RedstoneWirel
@Override
public boolean isCoverPlaceable(byte aSide, ItemStack aStack, ICoverable aTileEntity) {
if (!super.isCoverPlaceable(aSide, aStack, aTileEntity)) return false;
- for (byte i = 0; i < 6; i++) {
- if (aTileEntity.getCoverBehaviorAtSideNew(i) instanceof IControlsWorkCover) {
+ for (byte tSide : ALL_VALID_SIDES) {
+ if (aTileEntity.getCoverBehaviorAtSideNew(tSide) instanceof IControlsWorkCover) {
return false;
}
}
diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java
index ed0ca51231..2014138b71 100644
--- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java
+++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_OutputBus_ME.java
@@ -129,13 +129,7 @@ public class GT_MetaTileEntity_Hatch_OutputBus_ME extends GT_MetaTileEntity_Hatc
@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;
infiniteCache = !infiniteCache;
GT_Utility.sendChatToPlayer(
aPlayer, StatCollector.translateToLocal("GT5U.hatch.infiniteCache." + infiniteCache));
diff --git a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Output_ME.java b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Output_ME.java
index 940497ede3..bdb1ebbbb4 100644
--- a/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Output_ME.java
+++ b/src/main/java/gregtech/common/tileentities/machines/GT_MetaTileEntity_Hatch_Output_ME.java
@@ -151,13 +151,7 @@ public class GT_MetaTileEntity_Hatch_Output_ME extends GT_MetaTileEntity_Hatch_O
@Override
public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
// Don't allow to lock fluid in me fluid hatch
- if (!getBaseMetaTileEntity()
- .getCoverBehaviorAtSideNew(aSide)
- .isGUIClickable(
- aSide,
- getBaseMetaTileEntity().getCoverIDAtSide(aSide),
- getBaseMetaTileEntity().getComplexCoverDataAtSide(aSide),
- getBaseMetaTileEntity())) return;
+ if (!getBaseMetaTileEntity().getCoverInfoAtSide(aSide).isGUIClickable()) return;
infiniteCache = !infiniteCache;
GT_Utility.sendChatToPlayer(
aPlayer, StatCollector.translateToLocal("GT5U.hatch.infiniteCacheFluid." + infiniteCache));
diff --git a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_IndustrialApiary.java b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_IndustrialApiary.java
index 557b01fbb0..516d2dda66 100644
--- a/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_IndustrialApiary.java
+++ b/src/main/java/gregtech/common/tileentities/machines/basic/GT_MetaTileEntity_IndustrialApiary.java
@@ -1,5 +1,6 @@
package gregtech.common.tileentities.machines.basic;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
import static gregtech.api.enums.GT_Values.AuthorKuba;
import static gregtech.api.enums.GT_Values.V;
import static gregtech.api.enums.Textures.BlockIcons.*;
@@ -179,8 +180,8 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
openGUI(aBaseMetaTileEntity, aPlayer);
return true;
}
- for (byte i = 0; i < 6; i++) {
- if (aBaseMetaTileEntity.getAirAtSide(i)) {
+ for (byte tSide : ALL_VALID_SIDES) {
+ if (aBaseMetaTileEntity.getAirAtSide(tSide)) {
openGUI(aBaseMetaTileEntity, aPlayer);
return true;
}
@@ -230,38 +231,38 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
updateModifiers();
if (canWork()) {
- ItemStack queen = getQueen();
+ final ItemStack queen = getQueen();
usedQueen = queen.copy();
if (beeRoot.getType(queen) == EnumBeeType.QUEEN) {
- IBee bee = beeRoot.getMember(queen);
+ final IBee bee = beeRoot.getMember(queen);
usedQueenBee = bee;
// LIFE CYCLES
float mod = this.getLifespanModifier(null, null, 1.f);
- IBeekeepingMode mode = beeRoot.getBeekeepingMode(this.getWorld());
- IBeeModifier beemodifier = mode.getBeeModifier();
+ final IBeekeepingMode mode = beeRoot.getBeekeepingMode(this.getWorld());
+ final IBeeModifier beemodifier = mode.getBeeModifier();
mod *= beemodifier.getLifespanModifier(null, null, 1.f);
- int h = bee.getHealth();
+ final int h = bee.getHealth();
mod = 1.f / mod;
- float cycles = h / mod;
+ final float cycles = h / mod;
// PRODUCTS
- HashMap<GT_Utility.ItemId, ItemStack> pollen = new HashMap<>();
+ final HashMap<GT_Utility.ItemId, ItemStack> pollen = new HashMap<>();
if (isRetrievingPollen && floweringMod > 0f) {
- int icycles =
+ final int icycles =
(int) cycles + (getWorld().rand.nextFloat() < (cycles - (float) ((int) cycles)) ? 1 : 0);
for (int z = 0; z < icycles; z++) {
- IIndividual p = bee.retrievePollen(this);
+ final IIndividual p = bee.retrievePollen(this);
if (p != null) {
- ItemStack s =
+ final ItemStack s =
p.getGenome().getSpeciesRoot().getMemberStack(p, EnumGermlingType.POLLEN.ordinal());
if (s != null) {
- GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(s);
+ final GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(s);
pollen.computeIfAbsent(id, k -> {
- ItemStack ns = s.copy();
+ final ItemStack ns = s.copy();
ns.stackSize = 0;
return ns;
});
@@ -274,19 +275,19 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
retrievedpollen = null;
retrievingPollenInThisOperation = isRetrievingPollen;
- IBeeGenome genome = bee.getGenome();
- IAlleleBeeSpecies primary = genome.getPrimary();
- IAlleleBeeSpecies secondary = genome.getSecondary();
+ final IBeeGenome genome = bee.getGenome();
+ final IAlleleBeeSpecies primary = genome.getPrimary();
+ final IAlleleBeeSpecies secondary = genome.getSecondary();
- float speed = genome.getSpeed();
- float prodMod = getProductionModifier(null, 1f) * beemodifier.getProductionModifier(null, 1.f);
+ final float speed = genome.getSpeed();
+ final float prodMod = getProductionModifier(null, 1f) * beemodifier.getProductionModifier(null, 1.f);
- HashMap<GT_Utility.ItemId, Float> drops = new HashMap<>();
- HashMap<GT_Utility.ItemId, ItemStack> dropstacks = new HashMap<>();
+ final HashMap<GT_Utility.ItemId, Float> drops = new HashMap<>();
+ final HashMap<GT_Utility.ItemId, ItemStack> dropstacks = new HashMap<>();
for (Map.Entry<ItemStack, Float> entry :
primary.getProductChances().entrySet()) {
- GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(entry.getKey());
+ final GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(entry.getKey());
drops.merge(
id,
Bee.getFinalChance(entry.getValue(), speed, prodMod, 8f)
@@ -297,7 +298,7 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
}
for (Map.Entry<ItemStack, Float> entry :
secondary.getProductChances().entrySet()) {
- GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(entry.getKey());
+ final GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(entry.getKey());
drops.merge(
id,
Bee.getFinalChance(entry.getValue() / 2f, speed, prodMod, 8f)
@@ -309,7 +310,7 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
if (primary.isJubilant(genome, this) && secondary.isJubilant(genome, this))
for (Map.Entry<ItemStack, Float> entry :
primary.getSpecialtyChances().entrySet()) {
- GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(entry.getKey());
+ final GT_Utility.ItemId id = GT_Utility.ItemId.createNoCopy(entry.getKey());
drops.merge(
id,
Bee.getFinalChance(entry.getValue(), speed, prodMod, 8f)
@@ -320,30 +321,30 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
}
int i = 0;
- int imax = mOutputItems.length;
+ final int imax = mOutputItems.length;
- IApiaristTracker breedingTracker = beeRoot.getBreedingTracker(getWorld(), getOwner());
+ final IApiaristTracker breedingTracker = beeRoot.getBreedingTracker(getWorld(), getOwner());
if (!bee.canSpawn()) {
- ItemStack convert = new ItemStack(PluginApiculture.items.beePrincessGE);
- NBTTagCompound nbttagcompound = new NBTTagCompound();
+ final ItemStack convert = new ItemStack(PluginApiculture.items.beePrincessGE);
+ final NBTTagCompound nbttagcompound = new NBTTagCompound();
queen.writeToNBT(nbttagcompound);
convert.setTagCompound(nbttagcompound);
this.mOutputItems[i++] = convert;
} else {
- IBee b = bee.spawnPrincess(this);
+ final IBee b = bee.spawnPrincess(this);
if (b != null) {
- ItemStack princess = beeRoot.getMemberStack(b, EnumBeeType.PRINCESS.ordinal());
+ final ItemStack princess = beeRoot.getMemberStack(b, EnumBeeType.PRINCESS.ordinal());
breedingTracker.registerPrincess(b);
this.mOutputItems[i++] = princess;
}
- IBee[] d = bee.spawnDrones(this);
+ final IBee[] d = bee.spawnDrones(this);
if (d != null && d.length > 0) {
- HashMap<GT_Utility.ItemId, ItemStack> drones = new HashMap<>(d.length);
+ final HashMap<GT_Utility.ItemId, ItemStack> drones = new HashMap<>(d.length);
for (IBee dr : d) {
- ItemStack drone = beeRoot.getMemberStack(dr, EnumBeeType.DRONE.ordinal());
+ final ItemStack drone = beeRoot.getMemberStack(dr, EnumBeeType.DRONE.ordinal());
breedingTracker.registerDrone(dr);
- GT_Utility.ItemId drid = GT_Utility.ItemId.createNoCopy(drone);
+ final GT_Utility.ItemId drid = GT_Utility.ItemId.createNoCopy(drone);
if (drones.containsKey(drid)) drones.get(drid).stackSize += drone.stackSize;
else {
this.mOutputItems[i++] = drone;
@@ -353,12 +354,12 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
}
}
- int imin = i;
+ final int imin = i;
setQueen(null);
for (Map.Entry<GT_Utility.ItemId, Float> entry : drops.entrySet()) {
- ItemStack s = dropstacks.get(entry.getKey()).copy();
+ final ItemStack s = dropstacks.get(entry.getKey()).copy();
s.stackSize = entry.getValue().intValue()
+ (getWorld().rand.nextFloat()
< (entry.getValue()
@@ -383,8 +384,8 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
usedBeeLife = cycles * (float) beeCycleLength;
this.mMaxProgresstime = (int) usedBeeLife;
- int timemaxdivider = this.mMaxProgresstime / 100;
- int useddivider = 1 << this.mSpeed;
+ final int timemaxdivider = this.mMaxProgresstime / 100;
+ final int useddivider = 1 << this.mSpeed;
int actualdivider = useddivider;
this.mMaxProgresstime /= Math.min(actualdivider, timemaxdivider);
actualdivider /= Math.min(actualdivider, timemaxdivider);
@@ -403,17 +404,17 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
this.mMaxProgresstime = 100;
this.mProgresstime = 0;
- int useddivider = Math.min(100, 1 << this.mSpeed);
+ final int useddivider = Math.min(100, 1 << this.mSpeed);
this.mMaxProgresstime /= useddivider;
this.mEUt = (int) ((float) baseEUtUsage * this.energyMod * useddivider);
if (useddivider == 2) this.mEUt += 32;
else if (useddivider > 2) this.mEUt += (32 * (useddivider << (this.mSpeed - 2)));
- IBee princess = beeRoot.getMember(getQueen());
+ final IBee princess = beeRoot.getMember(getQueen());
usedQueenBee = princess;
- IBee drone = beeRoot.getMember(getDrone());
+ final IBee drone = beeRoot.getMember(getDrone());
princess.mate(drone);
- NBTTagCompound nbttagcompound = new NBTTagCompound();
+ final NBTTagCompound nbttagcompound = new NBTTagCompound();
princess.writeToNBT(nbttagcompound);
this.mOutputItems[0] = new ItemStack(PluginApiculture.items.beeQueenGE);
this.mOutputItems[0].setTagCompound(nbttagcompound);
@@ -446,8 +447,8 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
}
private void doEffect() {
- IBeeGenome genome = usedQueenBee.getGenome();
- IAlleleBeeEffect effect = genome.getEffect();
+ final IBeeGenome genome = usedQueenBee.getGenome();
+ final IAlleleBeeEffect effect = genome.getEffect();
if (!(effect instanceof IAlleleBeeAcceleratableEffect)) {
effectData[0] = effect.validateStorage(effectData[0]);
effect.doEffect(genome, effectData[0], this);
@@ -455,7 +456,7 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
if (!effect.isCombinable()) return;
- IAlleleBeeEffect secondary = (IAlleleBeeEffect) genome.getInactiveAllele(EnumBeeChromosome.EFFECT);
+ final IAlleleBeeEffect secondary = (IAlleleBeeEffect) genome.getInactiveAllele(EnumBeeChromosome.EFFECT);
if (!secondary.isCombinable()) return;
if (!(secondary instanceof IAlleleBeeAcceleratableEffect)) {
@@ -465,8 +466,8 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
}
private void doAcceleratedEffects() {
- IBeeGenome genome = usedQueenBee.getGenome();
- IAlleleBeeEffect effect = genome.getEffect();
+ final IBeeGenome genome = usedQueenBee.getGenome();
+ final IAlleleBeeEffect effect = genome.getEffect();
try {
if (AlleleBeeEffectThrottledField == null) {
AlleleBeeEffectThrottledField = AlleleEffectThrottled.class.getDeclaredField("throttle");
@@ -487,7 +488,7 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
if (!effect.isCombinable()) return;
- IAlleleBeeEffect secondary = (IAlleleBeeEffect) genome.getInactiveAllele(EnumBeeChromosome.EFFECT);
+ final IAlleleBeeEffect secondary = (IAlleleBeeEffect) genome.getInactiveAllele(EnumBeeChromosome.EFFECT);
if (!secondary.isCombinable()) return;
if (secondary instanceof IAlleleBeeAcceleratableEffect) {
@@ -521,7 +522,7 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
if (usedQueen != null) {
if (aTick % 2 == 0) {
// FX on client, effect on server
- IBee bee = beeRoot.getMember(usedQueen);
+ final IBee bee = beeRoot.getMember(usedQueen);
effectData = bee.doFX(effectData, this);
}
}
@@ -540,7 +541,7 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
|| aTick % 600 == 0
|| aBaseMetaTileEntity.hasWorkJustBeenEnabled())
&& hasEnoughEnergyToCheckRecipe()) {
- int check = checkRecipe();
+ final int check = checkRecipe();
if (check == FOUND_AND_SUCCESSFULLY_USED_RECIPE) {
aBaseMetaTileEntity.setActive(true);
}
@@ -615,9 +616,9 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
aBaseMetaTileEntity.setActive(false);
if (doesAutoOutput() && !isOutputEmpty() && aBaseMetaTileEntity.getFrontFacing() != mMainFacing) {
- TileEntity tTileEntity2 =
+ final TileEntity tTileEntity2 =
aBaseMetaTileEntity.getTileEntityAtSide(aBaseMetaTileEntity.getFrontFacing());
- long tStoredEnergy = aBaseMetaTileEntity.getUniversalEnergyStored();
+ final long tStoredEnergy = aBaseMetaTileEntity.getUniversalEnergyStored();
int tMaxStacks = (int) (tStoredEnergy / 64L);
if (tMaxStacks > mOutputItems.length) tMaxStacks = mOutputItems.length;
@@ -670,7 +671,7 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
if (!GT_ApiaryUpgrade.isUpgrade(aStack)) return false;
for (int i = drone + 1; i < drone + 1 + 4; i++) {
if (aIndex == i) continue;
- ItemStack s = getStackInSlot(i);
+ final ItemStack s = getStackInSlot(i);
if (s == null) continue;
if (GT_Utility.areStacksEqual(getStackInSlot(i), aStack)) return false;
if (GT_ApiaryUpgrade.isUpgrade(aStack)) {
@@ -860,7 +861,7 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
private int flowerBlockMeta;
private boolean checkFlower(IBee bee) {
- String flowerType = bee.getGenome().getFlowerProvider().getFlowerType();
+ final String flowerType = bee.getGenome().getFlowerProvider().getFlowerType();
if (!this.flowerType.equals(flowerType)) flowercoords = null;
if (flowercoords != null) {
if (getWorld().getBlock(flowercoords.posX, flowercoords.posY, flowercoords.posZ) != flowerBlock
@@ -890,7 +891,7 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
clearErrors();
if (queen == null) return true; // Reloaded the chunk ?
if (beeRoot.isMember(queen, EnumBeeType.PRINCESS.ordinal())) return true;
- IBee bee = beeRoot.getMember(queen);
+ final IBee bee = beeRoot.getMember(queen);
for (IErrorState err : bee.getCanWork(this)) setCondition(true, err);
setCondition(!checkFlower(bee), EnumErrorCode.NO_FLOWER);
return !hasErrors();
@@ -898,13 +899,13 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
private boolean canWork() {
clearErrors();
- EnumBeeType beeType = beeRoot.getType(getQueen());
+ final EnumBeeType beeType = beeRoot.getType(getQueen());
if (beeType == EnumBeeType.PRINCESS) {
setCondition(!beeRoot.isDrone(getDrone()), EnumErrorCode.NO_DRONE);
return !hasErrors();
}
if (beeType == EnumBeeType.QUEEN) {
- IBee bee = beeRoot.getMember(getQueen());
+ final IBee bee = beeRoot.getMember(getQueen());
for (IErrorState err : bee.getCanWork(this)) setCondition(true, err);
setCondition(!checkFlower(bee), EnumErrorCode.NO_FLOWER);
return !hasErrors();
@@ -936,12 +937,12 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
private int maxspeed = 0;
public void updateModifiers() {
- GT_ApiaryModifier mods = new GT_ApiaryModifier();
+ final GT_ApiaryModifier mods = new GT_ApiaryModifier();
for (int i = 2; i < 2 + 4; i++) {
- ItemStack s = getInputAt(i);
+ final ItemStack s = getInputAt(i);
if (s == null) continue;
if (GT_ApiaryUpgrade.isUpgrade(s)) {
- GT_ApiaryUpgrade upgrade = GT_ApiaryUpgrade.getUpgrade(s);
+ final GT_ApiaryUpgrade upgrade = GT_ApiaryUpgrade.getUpgrade(s);
upgrade.applyModifiers(mods, s);
}
}
@@ -1124,25 +1125,26 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
.widget(new DrawableWidget()
.setDrawable(GT_UITextures.PICTURE_INFORMATION)
.setGTTooltip(() -> {
- String energyreq = GT_Utility.formatNumbers(
+ final String energyreq = GT_Utility.formatNumbers(
(int) ((float) GT_MetaTileEntity_IndustrialApiary.baseEUtUsage
* getEnergyModifier()
* getAcceleration())
+ getAdditionalEnergyUsage());
- String Temp = StatCollector.translateToLocal(
+ final String Temp = StatCollector.translateToLocal(
getTemperature().getName());
- String Hum =
+ final String Hum =
StatCollector.translateToLocal(getHumidity().getName());
if (getUsedQueen() != null
&& BeeManager.beeRoot.isMember(getUsedQueen(), EnumBeeType.QUEEN.ordinal())) {
- IBee bee = BeeManager.beeRoot.getMember(getUsedQueen());
+ final IBee bee = BeeManager.beeRoot.getMember(getUsedQueen());
if (bee.isAnalyzed()) {
- IBeeGenome genome = bee.getGenome();
- IBeeModifier mod = BeeManager.beeRoot
+ final IBeeGenome genome = bee.getGenome();
+ final IBeeModifier mod = BeeManager.beeRoot
.getBeekeepingMode(getWorld())
.getBeeModifier();
- float tmod = getTerritoryModifier(null, 1f) * mod.getTerritoryModifier(null, 1f);
- int[] t = Arrays.stream(genome.getTerritory())
+ final float tmod =
+ getTerritoryModifier(null, 1f) * mod.getTerritoryModifier(null, 1f);
+ final int[] t = Arrays.stream(genome.getTerritory())
.map(i -> (int) ((float) i * tmod))
.toArray();
return mTooltipCache.getUncachedTooltipData(
@@ -1279,7 +1281,7 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
}
private int getAdditionalEnergyUsage() {
- int accelerated = getAcceleration();
+ final int accelerated = getAcceleration();
int energyusage = 0;
if (accelerated == 2) energyusage = 32;
else if (accelerated > 2) energyusage = 32 * accelerated << (mSpeed - 2);
@@ -1322,10 +1324,10 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
if (aShifthold == 5) return null;
if (aShifthold != 0) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
if (aMouseclick > 1) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
- ItemStack s = aPlayer.inventory.getItemStack();
+ final ItemStack s = aPlayer.inventory.getItemStack();
if (s == null) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
- Slot slot = getSlot(aSlotNumber);
- ItemStack slotStack = slot.getStack();
+ final Slot slot = getSlot(aSlotNumber);
+ final ItemStack slotStack = slot.getStack();
if (slotStack != null && !GT_Utility.areStacksEqual(slotStack, s)) return null; // super would replace item
if (slotStack == null && !slot.isItemValid(s))
return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
@@ -1336,23 +1338,23 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
if (max == 0) return null;
if (aMouseclick == 1) max = 1;
if (max == s.stackSize) return super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
- ItemStack newStack = s.splitStack(s.stackSize - max);
- ItemStack result = super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
+ final ItemStack newStack = s.splitStack(s.stackSize - max);
+ final ItemStack result = super.slotClick(aSlotNumber, aMouseclick, aShifthold, aPlayer);
aPlayer.inventory.setItemStack(newStack);
return result;
}
@Override
public ItemStack transferStackInSlot(EntityPlayer aPlayer, int aSlotIndex) {
- Slot s = getSlot(aSlotIndex);
+ final Slot s = getSlot(aSlotIndex);
if (s == null) return super.transferStackInSlot(aPlayer, aSlotIndex);
if (aSlotIndex >= playerInventorySlot) return super.transferStackInSlot(aPlayer, aSlotIndex);
- ItemStack aStack = s.getStack();
+ final ItemStack aStack = s.getStack();
if (aStack == null) return super.transferStackInSlot(aPlayer, aSlotIndex);
if (!GT_ApiaryUpgrade.isUpgrade(aStack)) return super.transferStackInSlot(aPlayer, aSlotIndex);
for (int i = playerInventorySlot + 2; i < playerInventorySlot + 2 + 4; i++) {
- Slot iSlot = getSlot(i);
- ItemStack iStack = iSlot.getStack();
+ final Slot iSlot = getSlot(i);
+ final ItemStack iStack = iSlot.getStack();
if (iStack == null) {
if (!iSlot.isItemValid(aStack)) continue;
} else {
@@ -1361,7 +1363,7 @@ public class GT_MetaTileEntity_IndustrialApiary extends GT_MetaTileEntity_BasicM
int max = GT_ApiaryUpgrade.getUpgrade(aStack).getMaxNumber();
if (iStack == null) {
max = Math.min(max, aStack.stackSize);
- ItemStack newstack = aStack.splitStack(max);
+ final ItemStack newstack = aStack.splitStack(max);
iSlot.putStack(newstack);
} else {
max = Math.max(0, max - iStack.stackSize);
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Cleanroom.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Cleanroom.java
index 0006c8b7d5..5e6651cdad 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Cleanroom.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_Cleanroom.java
@@ -1,5 +1,6 @@
package gregtech.common.tileentities.machines.multi;
+import static gregtech.api.enums.GT_Values.ALL_VALID_SIDES;
import static gregtech.api.enums.GT_Values.debugCleanroom;
import static gregtech.api.enums.Textures.BlockIcons.*;
@@ -45,6 +46,7 @@ public class GT_MetaTileEntity_Cleanroom extends GT_MetaTileEntity_TooltipMultiB
return new GT_MetaTileEntity_Cleanroom(mName);
}
+ @Override
protected GT_Multiblock_Tooltip_Builder createTooltip() {
final GT_Multiblock_Tooltip_Builder tt = new GT_Multiblock_Tooltip_Builder();
tt.addMachineType("Cleanroom")
@@ -104,7 +106,7 @@ public class GT_MetaTileEntity_Cleanroom extends GT_MetaTileEntity_TooltipMultiB
int mDoorCount = 0;
int mHullCount = 0;
int mPlascreteCount = 0;
- HashMap<String, Integer> otherBlocks = new HashMap<>();
+ final HashMap<String, Integer> otherBlocks = new HashMap<>();
boolean doorState = false;
this.mUpdate = 100;
@@ -112,8 +114,8 @@ public class GT_MetaTileEntity_Cleanroom extends GT_MetaTileEntity_TooltipMultiB
GT_Log.out.println("Cleanroom: Checking machine");
}
for (int i = 1; i < 8; i++) {
- Block tBlock = aBaseMetaTileEntity.getBlockOffset(i, 0, 0);
- int tMeta = aBaseMetaTileEntity.getMetaIDOffset(i, 0, 0);
+ final Block tBlock = aBaseMetaTileEntity.getBlockOffset(i, 0, 0);
+ final int tMeta = aBaseMetaTileEntity.getMetaIDOffset(i, 0, 0);
if (tBlock != GregTech_API.sBlockCasings3 || tMeta != 11) {
if (tBlock == GregTech_API.sBlockReinforced || tMeta == 2) {
x = i;
@@ -127,8 +129,8 @@ public class GT_MetaTileEntity_Cleanroom extends GT_MetaTileEntity_TooltipMultiB
}
}
for (int i = 1; i < 8; i++) {
- Block tBlock = aBaseMetaTileEntity.getBlockOffset(0, 0, i);
- int tMeta = aBaseMetaTileEntity.getMetaIDOffset(0, 0, i);
+ final Block tBlock = aBaseMetaTileEntity.getBlockOffset(0, 0, i);
+ final int tMeta = aBaseMetaTileEntity.getMetaIDOffset(0, 0, i);
if (tBlock != GregTech_API.sBlockCasings3 || tMeta != 11) {
if (tBlock == GregTech_API.sBlockReinforced || tMeta == 2) {
z = i;
@@ -145,8 +147,8 @@ public class GT_MetaTileEntity_Cleanroom extends GT_MetaTileEntity_TooltipMultiB
for (int i = -x + 1; i < x; i++) {
for (int j = -z + 1; j < z; j++) {
if (i == 0 && j == 0) continue;
- Block tBlock = aBaseMetaTileEntity.getBlockOffset(j, 0, i);
- int tMeta = aBaseMetaTileEntity.getMetaIDOffset(j, 0, i);
+ final Block tBlock = aBaseMetaTileEntity.getBlockOffset(j, 0, i);
+ final int tMeta = aBaseMetaTileEntity.getMetaIDOffset(j, 0, i);
if (tBlock != GregTech_API.sBlockCasings3 && tMeta != 11) {
return false;
}
@@ -154,8 +156,8 @@ public class GT_MetaTileEntity_Cleanroom extends GT_MetaTileEntity_TooltipMultiB
}
for (int i = -1; i > -16; i--) {
- Block tBlock = aBaseMetaTileEntity.getBlockOffset(x, i, z);
- int tMeta = aBaseMetaTileEntity.getMetaIDOffset(x, i, z);
+ final Block tBlock = aBaseMetaTileEntity.getBlockOffset(x, i, z);
+ final int tMeta = aBaseMetaTileEntity.getMetaIDOffset(x, i, z);
if (tBlock != GregTech_API.sBlockReinforced || tMeta != 2) {
y = i + 1;
break;
@@ -193,7 +195,7 @@ public class GT_MetaTileEntity_Cleanroom extends GT_MetaTileEntity_TooltipMultiB
} else if (tBlock == GregTech_API.sBlockReinforced && tMeta == 2) {
mPlascreteCount++;
} else {
- IGregTechTileEntity tTileEntity =
+ final IGregTechTileEntity tTileEntity =
aBaseMetaTileEntity.getIGregTechTileEntityOffset(dX, dY, dZ);
if ((!this.addMaintenanceToMachineList(tTileEntity, 210))
&& (!this.addEnergyInputToMachineList(tTileEntity, 210))) {
@@ -209,7 +211,7 @@ public class GT_MetaTileEntity_Cleanroom extends GT_MetaTileEntity_TooltipMultiB
mDoorCount++;
} else {
if (tTileEntity != null) {
- IMetaTileEntity aMetaTileEntity = tTileEntity.getMetaTileEntity();
+ final IMetaTileEntity aMetaTileEntity = tTileEntity.getMetaTileEntity();
if (aMetaTileEntity == null) {
if (debugCleanroom) {
GT_Log.out.println("Cleanroom: Missing block? Not a aMetaTileEntity");
@@ -255,9 +257,9 @@ public class GT_MetaTileEntity_Cleanroom extends GT_MetaTileEntity_TooltipMultiB
return false;
}
if (mPlascreteCount < 20) return false;
- float ratio = (((float) mPlascreteCount) / 100f);
+ final float ratio = (((float) mPlascreteCount) / 100f);
for (Map.Entry<String, Integer> e : otherBlocks.entrySet()) {
- ConfigEntry ce = config.get(e.getKey());
+ final ConfigEntry ce = config.get(e.getKey());
if (ce.allowedCount > 0) { // count has priority
if (e.getValue() > ce.allowedCount) return false;
} else if (e.getValue() > ratio * ce.percentage) return false;
@@ -268,9 +270,9 @@ public class GT_MetaTileEntity_Cleanroom extends GT_MetaTileEntity_TooltipMultiB
if (doorState) {
this.mEfficiency = Math.max(0, this.mEfficiency - 200);
}
- for (byte i = 0; i < 6; i++) {
- byte t = (byte) Math.max(1, (byte) (15 / (10000f / this.mEfficiency)));
- aBaseMetaTileEntity.setInternalOutputRedstoneSignal(i, t);
+ for (byte tSide : ALL_VALID_SIDES) {
+ final byte t = (byte) Math.max(1, (byte) (15 / (10000f / this.mEfficiency)));
+ aBaseMetaTileEntity.setInternalOutputRedstoneSignal(tSide, t);
}
this.mHeight = -y;
return true;
@@ -430,7 +432,7 @@ public class GT_MetaTileEntity_Cleanroom extends GT_MetaTileEntity_TooltipMultiB
public static void loadConfig(Configuration cfg) {
if (!cfg.hasCategory(category)) setDefaultConfigValues(cfg);
for (ConfigCategory cc : cfg.getCategory(category).getChildren()) {
- String name = cc.get("Name").getString();
+ final String name = cc.get("Name").getString();
if (cc.containsKey("Count")) {
if (cc.containsKey("Meta"))
config.put(
diff --git a/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java b/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java
index 4ca61fab5f..f7c6181d19 100644
--- a/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java
+++ b/src/main/java/gregtech/loaders/preload/GT_Loader_MultiTileEntities.java
@@ -16,22 +16,23 @@ public class GT_Loader_MultiTileEntities implements Runnable {
"GregTech", "machine", Material.iron, Block.soundTypeMetal, "wrench", 0, 0, 15, true, true);
// Disable for now
- // aRegistry.create(1000, MultiBlock_Macerator.class)
- // .name("Large Macerator")
- // .category("Multiblock Controller")
- // .setBlock(aMachine)
- // .material(Materials.Iron)
- // .texture("metalwall")
- // .tankCapacity(128000L)
- // .register();
+ // aRegistry
+ // .create(1000, MultiBlock_Macerator.class)
+ // .name("Large Macerator")
+ // .category("Multiblock Controller")
+ // .setBlock(aMachine)
+ // .material(Materials.Iron)
+ // .texture("metalwall")
+ // .tankCapacity(128000L)
+ // .register();
//
- // aRegistry.create(18000, MultiBlockPart.class)
- // .name("Test Casing")
- // .category("Multiblock Casing")
- // .setBlock(aMachine)
- // .material(Materials.Cobalt)
- // .texture("metalwall")
- // .register();
-
+ // aRegistry
+ // .create(18000, MultiBlockPart.class)
+ // .name("Test Casing")
+ // .category("Multiblock Casing")
+ // .setBlock(aMachine)
+ // .material(Materials.Cobalt)
+ // .texture("metalwall")
+ // .register();
}
}
diff --git a/src/main/resources/assets/gregtech/textures/gui/picture/fluid_in.png b/src/main/resources/assets/gregtech/textures/gui/picture/fluid_in.png
new file mode 100644
index 0000000000..a78a13db69
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/gui/picture/fluid_in.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/gui/picture/fluid_out.png b/src/main/resources/assets/gregtech/textures/gui/picture/fluid_out.png
new file mode 100644
index 0000000000..60aa2fe90a
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/gui/picture/fluid_out.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/gui/picture/item_in.png b/src/main/resources/assets/gregtech/textures/gui/picture/item_in.png
new file mode 100644
index 0000000000..10dd12f753
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/gui/picture/item_in.png
Binary files differ
diff --git a/src/main/resources/assets/gregtech/textures/gui/picture/item_out.png b/src/main/resources/assets/gregtech/textures/gui/picture/item_out.png
new file mode 100644
index 0000000000..831650cb28
--- /dev/null
+++ b/src/main/resources/assets/gregtech/textures/gui/picture/item_out.png
Binary files differ