From 86c00b9d6d3af7c87691b2a9cb7750af979bdccd Mon Sep 17 00:00:00 2001 From: Integer Limit <103940576+IntegerLimit@users.noreply.github.com> Date: Thu, 6 Feb 2025 18:01:00 +1100 Subject: [PATCH] Make Phantomface HUD Valid Check Server-Side Fixes issues with capabilities not being detected for specific blocks. So far the only block found with this issue is ME Storage Exposers from NAE2. --- .../AccessibleTileEntityPhantomface.java | 6 +++ .../BlockPhantomClientMixin.java | 5 +- .../TileEntityPhantomfaceMixin.java | 48 +++++++++++++++++++ .../mixins.nomilabs.actuallyadditions.json | 1 + 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/nomiceu/nomilabs/integration/actuallyadditions/AccessibleTileEntityPhantomface.java create mode 100644 src/main/java/com/nomiceu/nomilabs/mixin/actuallyadditions/TileEntityPhantomfaceMixin.java diff --git a/src/main/java/com/nomiceu/nomilabs/integration/actuallyadditions/AccessibleTileEntityPhantomface.java b/src/main/java/com/nomiceu/nomilabs/integration/actuallyadditions/AccessibleTileEntityPhantomface.java new file mode 100644 index 0000000..2733fd2 --- /dev/null +++ b/src/main/java/com/nomiceu/nomilabs/integration/actuallyadditions/AccessibleTileEntityPhantomface.java @@ -0,0 +1,6 @@ +package com.nomiceu.nomilabs.integration.actuallyadditions; + +public interface AccessibleTileEntityPhantomface { + + boolean labs$boundValid(); +} diff --git a/src/main/java/com/nomiceu/nomilabs/mixin/actuallyadditions/BlockPhantomClientMixin.java b/src/main/java/com/nomiceu/nomilabs/mixin/actuallyadditions/BlockPhantomClientMixin.java index d414748..6b0b133 100644 --- a/src/main/java/com/nomiceu/nomilabs/mixin/actuallyadditions/BlockPhantomClientMixin.java +++ b/src/main/java/com/nomiceu/nomilabs/mixin/actuallyadditions/BlockPhantomClientMixin.java @@ -22,6 +22,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; +import com.nomiceu.nomilabs.integration.actuallyadditions.AccessibleTileEntityPhantomface; + import de.ellpeck.actuallyadditions.api.tile.IPhantomTile; import de.ellpeck.actuallyadditions.mod.blocks.BlockPhantom; import gregtech.api.metatileentity.MetaTileEntity; @@ -57,7 +59,8 @@ private void betterHudDisplaying(Minecraft mc, EntityPlayer player, ItemStack st return; } - if (phantom.isBoundThingInRange()) { + if (((phantom instanceof AccessibleTileEntityPhantomface access) && access.labs$boundValid()) || + phantom.isBoundThingInRange()) { y = labs$draw(font, increaseBy, x, y, "aa.gui.hover.phantom.connected"); } else { y = labs$draw(font, increaseBy, x, y, "aa.gui.hover.phantom.connected_failed"); diff --git a/src/main/java/com/nomiceu/nomilabs/mixin/actuallyadditions/TileEntityPhantomfaceMixin.java b/src/main/java/com/nomiceu/nomilabs/mixin/actuallyadditions/TileEntityPhantomfaceMixin.java new file mode 100644 index 0000000..a512b0b --- /dev/null +++ b/src/main/java/com/nomiceu/nomilabs/mixin/actuallyadditions/TileEntityPhantomfaceMixin.java @@ -0,0 +1,48 @@ +package com.nomiceu.nomilabs.mixin.actuallyadditions; + +import net.minecraft.nbt.NBTTagCompound; + +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import com.nomiceu.nomilabs.integration.actuallyadditions.AccessibleTileEntityPhantomface; + +import de.ellpeck.actuallyadditions.mod.tile.TileEntityBase; +import de.ellpeck.actuallyadditions.mod.tile.TileEntityPhantomface; + +/** + * Checks whether bound target is valid server-side, so that tile entities with custom capabilities + * (e.g. NAE2's Storage Exposer) shows correctly in HUD. + */ +@Mixin(value = TileEntityPhantomface.class, remap = false) +public abstract class TileEntityPhantomfaceMixin implements AccessibleTileEntityPhantomface { + + @Shadow + public abstract boolean isBoundThingInRange(); + + @Unique + private boolean labs$boundValid = false; + + @Unique + @Override + public boolean labs$boundValid() { + return labs$boundValid; + } + + @Inject(method = "writeSyncableNBT", at = @At("TAIL")) + private void writeBoundValid(NBTTagCompound compound, TileEntityBase.NBTType type, CallbackInfo ci) { + labs$boundValid = isBoundThingInRange(); + if (type != TileEntityBase.NBTType.SAVE_BLOCK) + compound.setBoolean("labs$boundValid", labs$boundValid); + } + + @Inject(method = "readSyncableNBT", at = @At("TAIL")) + private void readBoundValid(NBTTagCompound compound, TileEntityBase.NBTType type, CallbackInfo ci) { + if (type != TileEntityBase.NBTType.SAVE_BLOCK) + labs$boundValid = compound.getBoolean("labs$boundValid"); + } +} diff --git a/src/main/resources/mixins.nomilabs.actuallyadditions.json b/src/main/resources/mixins.nomilabs.actuallyadditions.json index 4fdb7fb..14d47c5 100644 --- a/src/main/resources/mixins.nomilabs.actuallyadditions.json +++ b/src/main/resources/mixins.nomilabs.actuallyadditions.json @@ -7,6 +7,7 @@ "mixins": [ "BlockLaserRelayMixin", "ItemPhantomConnectorMixin", + "TileEntityPhantomfaceMixin", "TileEntityXPSolidifierMixin" ], "client": [