aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gregtech/api/metatileentity
diff options
context:
space:
mode:
authorJason Mitchell <mitchej@gmail.com>2023-01-20 00:30:50 -0800
committerGitHub <noreply@github.com>2023-01-20 09:30:50 +0100
commit7ed516e30ba224b4b8e3fad9c836c22ca00bfcdb (patch)
treebea33f6637b929427e9abbe733e19606f8bf9032 /src/main/java/gregtech/api/metatileentity
parent750a4070af4756e3708e2b2555b9874864bf3cfb (diff)
downloadGT5-Unofficial-7ed516e30ba224b4b8e3fad9c836c22ca00bfcdb.tar.gz
GT5-Unofficial-7ed516e30ba224b4b8e3fad9c836c22ca00bfcdb.tar.bz2
GT5-Unofficial-7ed516e30ba224b4b8e3fad9c836c22ca00bfcdb.zip
MTE Inventory updates (#1496)
* MTE Inventory updates * Separate Input/Output inventory * Use a LinkedHashMap to ensure inventory orders are deterministic * Input/Output work on either Input/Output inventories * MTE Inventory * Add GT_Packet_MultiTileEntity * More dyanmic packet with packetFeatures * Add IMTE_HasModes for MultiBlockPart * Help with MTE Inventory (#1613) * convert inventory to use ItemStackHandler * Update MUI * inventories * move Iteminventory to its own method Co-authored-by: miozune <miozune@gmail.com> * Update MUI * Update MUI * Add IMultiBlockPart * Mte fluid inventory (#1639) * first work on fluid inventory * make gui work with numbers not dividable by 4 * use math.min * add outputfluids saving * actually working * Update MUI Co-authored-by: miozune <miozune@gmail.com> * Ticking Covers! * Parts now register covers with the controller * Controllers now tick covers on parts * Break cover ticking out into `tickCoverAtSide` Fix some inventory methods on MultiBlockController * Filter on tickable covers * Improve GUIs for MTEs (#1650) * working controller GUI * locked inventory selection work * input and output locking of inventories Co-authored-by: miozune <miozune@gmail.com> * spotless * CoverInfo refactor (#1654) * Add `CoverInfo` and deprecate the old fields to hold cover information * Disable MTE registration * Fix NPE - Return EMPTY_INFO for SIDE_UNKNOWN Temporarily add back old NBT saving in case of a revert so covers aren't lost. * Actually save the old NBT data, instead of empty Co-authored-by: BlueWeabo <76872108+BlueWeabo@users.noreply.github.com> Co-authored-by: miozune <miozune@gmail.com>
Diffstat (limited to 'src/main/java/gregtech/api/metatileentity')
-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
12 files changed, 473 insertions, 641 deletions
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)