aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/tectech/thing
diff options
context:
space:
mode:
authorRecursivePineapple <recursive_pineapple@proton.me>2024-10-17 06:24:12 -0400
committerGitHub <noreply@github.com>2024-10-17 10:24:12 +0000
commit7ad32098ac5d941f32fff792fc9a11af1097b310 (patch)
tree203faa4fb671f0d072d7a62e57de3ce5f6ed4e5a /src/main/java/tectech/thing
parent55a4816242fc945ae367360bb4002cbb4294816d (diff)
downloadGT5-Unofficial-7ad32098ac5d941f32fff792fc9a11af1097b310.tar.gz
GT5-Unofficial-7ad32098ac5d941f32fff792fc9a11af1097b310.tar.bz2
GT5-Unofficial-7ad32098ac5d941f32fff792fc9a11af1097b310.zip
Fix several issues with ender tank covers (#3377)
Co-authored-by: Martin Robertz <dream-master@gmx.net> Co-authored-by: Ethryan <3237986+Ethryan@users.noreply.github.com>
Diffstat (limited to 'src/main/java/tectech/thing')
-rw-r--r--src/main/java/tectech/thing/cover/CoverEnderFluidLink.java85
1 files changed, 63 insertions, 22 deletions
diff --git a/src/main/java/tectech/thing/cover/CoverEnderFluidLink.java b/src/main/java/tectech/thing/cover/CoverEnderFluidLink.java
index bae4e26b6c..9e63c85221 100644
--- a/src/main/java/tectech/thing/cover/CoverEnderFluidLink.java
+++ b/src/main/java/tectech/thing/cover/CoverEnderFluidLink.java
@@ -1,5 +1,6 @@
package tectech.thing.cover;
+import java.util.Objects;
import java.util.UUID;
import net.minecraft.entity.player.EntityPlayer;
@@ -45,31 +46,50 @@ public class CoverEnderFluidLink extends CoverBehavior {
}
}
- private boolean testBit(int aCoverVariable, int bitMask) {
+ private static boolean testBit(int aCoverVariable, int bitMask) {
return (aCoverVariable & bitMask) != 0;
}
- private int toggleBit(int aCoverVariable, int bitMask) {
+ private static int toggleBit(int aCoverVariable, int bitMask) {
return (aCoverVariable ^ bitMask);
}
@Override
public int doCoverThings(ForgeDirection side, byte aInputRedstone, int aCoverID, int aCoverVariable,
ICoverable aTileEntity, long aTimer) {
- if ((aTileEntity instanceof IFluidHandler fluidHandlerSelf)) {
- IFluidHandler fluidHandlerEnder = EnderWorldSavedData
- .getEnderFluidContainer(EnderWorldSavedData.getEnderLinkTag((IFluidHandler) aTileEntity));
-
- if (testBit(aCoverVariable, IMPORT_EXPORT_MASK)) {
- transferFluid(fluidHandlerEnder, ForgeDirection.UNKNOWN, fluidHandlerSelf, side, L_PER_TICK);
- } else {
- transferFluid(fluidHandlerSelf, side, fluidHandlerEnder, ForgeDirection.UNKNOWN, L_PER_TICK);
+ if ((aTileEntity instanceof IFluidHandler teTank)) {
+ EnderLinkTag tag = EnderWorldSavedData.getEnderLinkTag((IFluidHandler) aTileEntity);
+
+ if (tag != null) {
+ IFluidHandler enderTank = EnderWorldSavedData.getEnderFluidContainer(tag);
+
+ if (testBit(aCoverVariable, IMPORT_EXPORT_MASK)) {
+ transferFluid(enderTank, ForgeDirection.UNKNOWN, teTank, side, L_PER_TICK);
+ } else {
+ transferFluid(teTank, side, enderTank, ForgeDirection.UNKNOWN, L_PER_TICK);
+ }
}
}
return aCoverVariable;
}
@Override
+ public void onBaseTEDestroyed(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
+ if (aTileEntity instanceof IFluidHandler fluidHandlerSelf) {
+ EnderWorldSavedData.unbindTank(fluidHandlerSelf);
+ }
+ }
+
+ @Override
+ public boolean onCoverRemoval(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity,
+ boolean aForced) {
+ if (aTileEntity instanceof IFluidHandler fluidHandlerSelf) {
+ EnderWorldSavedData.unbindTank(fluidHandlerSelf);
+ }
+ return true;
+ }
+
+ @Override
public String getDescription(ForgeDirection side, int aCoverID, int aCoverVariable, ICoverable aTileEntity) {
return "";
}
@@ -143,23 +163,23 @@ public class CoverEnderFluidLink extends CoverBehavior {
builder.widget(frequencyField.setGetter(() -> {
ICoverable te = getUIBuildContext().getTile();
if (!frequencyField.isClient() && te instanceof IFluidHandler) {
- return EnderWorldSavedData.getEnderLinkTag((IFluidHandler) te)
- .getFrequency();
+ EnderLinkTag tag = EnderWorldSavedData.getEnderLinkTag((IFluidHandler) te);
+
+ return tag == null ? "" : tag.getFrequency();
}
return "";
})
.setSetter(val -> {
- ICoverable te = getUIBuildContext().getTile();
- if (!frequencyField.isClient() && te instanceof IFluidHandler) {
- UUID uuid;
+ if (!frequencyField.isClient() && getUIBuildContext().getTile() instanceof IFluidHandler tank) {
+ UUID uuid = null;
+
if (testBit(convert(getCoverData()), PUBLIC_PRIVATE_MASK)) {
uuid = getUUID();
- if (!(te instanceof IGregTechTileEntity)) return;
- if (!uuid.equals(((IGregTechTileEntity) te).getOwnerUuid())) return;
- } else {
- uuid = null;
+ if (!(tank instanceof IGregTechTileEntity gte)) return;
+ if (!uuid.equals(gte.getOwnerUuid())) return;
}
- EnderWorldSavedData.bindEnderLinkTag((IFluidHandler) te, new EnderLinkTag(val, uuid));
+
+ EnderWorldSavedData.bindEnderLinkTag(tank, new EnderLinkTag(val, uuid));
}
})
.setTextColor(Color.WHITE.dark(1))
@@ -213,9 +233,30 @@ public class CoverEnderFluidLink extends CoverBehavior {
private int getNewCoverVariable(int id, int coverVariable) {
switch (id) {
- case PUBLIC_BUTTON_ID:
- case PRIVATE_BUTTON_ID:
+ case PUBLIC_BUTTON_ID: {
+ if (getUIBuildContext().getTile() instanceof IGregTechTileEntity gte) {
+ EnderLinkTag tag = EnderWorldSavedData.getEnderLinkTag(gte);
+
+ if (tag != null) {
+ EnderWorldSavedData.bindEnderLinkTag(gte, new EnderLinkTag(tag.getFrequency(), null));
+ }
+ }
+
+ return toggleBit(coverVariable, PUBLIC_PRIVATE_MASK);
+ }
+ case PRIVATE_BUTTON_ID: {
+ if (getUIBuildContext().getTile() instanceof IGregTechTileEntity gte) {
+ EnderLinkTag tag = EnderWorldSavedData.getEnderLinkTag(gte);
+
+ UUID player = getUUID();
+
+ if ((gte.getOwnerUuid() == null || Objects.equals(player, gte.getOwnerUuid())) && tag != null) {
+ EnderWorldSavedData.bindEnderLinkTag(gte, new EnderLinkTag(tag.getFrequency(), player));
+ }
+ }
+
return toggleBit(coverVariable, PUBLIC_PRIVATE_MASK);
+ }
case IMPORT_BUTTON_ID:
case EXPORT_BUTTON_ID:
return toggleBit(coverVariable, IMPORT_EXPORT_MASK);