From 36d94a17aa903f451d90cbf45bd2f912dfa80b0c Mon Sep 17 00:00:00 2001 From: PrototypeTrousers Date: Tue, 14 Feb 2023 19:10:42 -0300 Subject: [PATCH] close wireless terminals if they run out of power instead of not working --- .../ContainerMEPortableCell.java | 9 ++++- .../ContainerWirelessPatternTerminal.java | 9 ++++- .../core/sync/packets/PacketTerminalUse.java | 36 +++++++++++++++++-- .../ContainerMEPortableFluidCell.java | 11 ++++-- 4 files changed, 58 insertions(+), 7 deletions(-) diff --git a/src/main/java/appeng/container/implementations/ContainerMEPortableCell.java b/src/main/java/appeng/container/implementations/ContainerMEPortableCell.java index 836881a8a..5ddda724f 100644 --- a/src/main/java/appeng/container/implementations/ContainerMEPortableCell.java +++ b/src/main/java/appeng/container/implementations/ContainerMEPortableCell.java @@ -95,7 +95,14 @@ public class ContainerMEPortableCell extends ContainerMEMonitorable implements I // drain 1 ae t this.ticks++; if (this.ticks > 10) { - this.wirelessTerminalGUIObject.extractAEPower(this.getPowerMultiplier() * this.ticks, Actionable.MODULATE, PowerMultiplier.CONFIG); + double ext = this.wirelessTerminalGUIObject.extractAEPower(this.getPowerMultiplier() * this.ticks, Actionable.MODULATE, PowerMultiplier.CONFIG); + if (ext < this.getPowerMultiplier() * this.ticks) { + if (Platform.isServer() && this.isValidContainer()) { + this.getPlayerInv().player.sendMessage(PlayerMessages.DeviceNotPowered.get()); + } + + this.setValidContainer(false); + } this.ticks = 0; } diff --git a/src/main/java/appeng/container/implementations/ContainerWirelessPatternTerminal.java b/src/main/java/appeng/container/implementations/ContainerWirelessPatternTerminal.java index e363f3ec8..bf1e75629 100644 --- a/src/main/java/appeng/container/implementations/ContainerWirelessPatternTerminal.java +++ b/src/main/java/appeng/container/implementations/ContainerWirelessPatternTerminal.java @@ -144,7 +144,14 @@ public class ContainerWirelessPatternTerminal extends ContainerPatternEncoder im // drain 1 ae t this.ticks++; if (this.ticks > 10) { - this.wirelessTerminalGUIObject.extractAEPower(this.getPowerMultiplier() * this.ticks, Actionable.MODULATE, PowerMultiplier.CONFIG); + double ext = this.wirelessTerminalGUIObject.extractAEPower(this.getPowerMultiplier() * this.ticks, Actionable.MODULATE, PowerMultiplier.CONFIG); + if (ext < this.getPowerMultiplier() * this.ticks) { + if (Platform.isServer() && this.isValidContainer()) { + this.getPlayerInv().player.sendMessage(PlayerMessages.DeviceNotPowered.get()); + } + + this.setValidContainer(false); + } this.ticks = 0; } diff --git a/src/main/java/appeng/core/sync/packets/PacketTerminalUse.java b/src/main/java/appeng/core/sync/packets/PacketTerminalUse.java index 0e813bed1..752e5ed9f 100644 --- a/src/main/java/appeng/core/sync/packets/PacketTerminalUse.java +++ b/src/main/java/appeng/core/sync/packets/PacketTerminalUse.java @@ -1,6 +1,9 @@ package appeng.core.sync.packets; -import appeng.api.util.AEPartLocation; +import appeng.api.AEApi; +import appeng.api.features.ILocatable; +import appeng.api.features.IWirelessTermHandler; +import appeng.core.localization.PlayerMessages; import appeng.core.sync.AppEngPacket; import appeng.core.sync.network.INetworkInfo; import appeng.items.tools.powered.Terminal; @@ -35,16 +38,43 @@ public class PacketTerminalUse extends AppEngPacket { for (int i = 0; i < mainInventory.size(); i++) { ItemStack is = mainInventory.get(i); if (terminal.getItemDefinition().isSameAs(is)) { - Platform.openGUI(player, i, terminal.getBridge(), false); + openGui(is, i, player, false); return; + } } for (int i = 0; i < BaublesApi.getBaublesHandler(player).getSlots(); i++) { ItemStack is = BaublesApi.getBaublesHandler(player).getStackInSlot(i); if (terminal.getItemDefinition().isSameAs(is)) { - Platform.openGUI(player, i, terminal.getBridge(), true); + openGui(is, i, player, true); break; } } } + + void openGui(ItemStack itemStack, int slotIdx, EntityPlayer player, boolean isBauble) { + final IWirelessTermHandler handler = AEApi.instance().registries().wireless().getWirelessTerminalHandler(itemStack); + if (handler == null) { + return; + } + + final String unparsedKey = handler.getEncryptionKey(itemStack); + if (unparsedKey.isEmpty()) { + player.sendMessage(PlayerMessages.DeviceNotLinked.get()); + return; + } + + final long parsedKey = Long.parseLong(unparsedKey); + final ILocatable securityStation = AEApi.instance().registries().locatable().getLocatableBy(parsedKey); + if (securityStation == null) { + player.sendMessage(PlayerMessages.StationCanNotBeLocated.get()); + return; + } + + if (handler.hasPower(player, 0.5, itemStack)) { + Platform.openGUI(player, slotIdx, terminal.getBridge(), isBauble); + } else { + player.sendMessage(PlayerMessages.DeviceNotPowered.get()); + } + } } diff --git a/src/main/java/appeng/fluids/container/ContainerMEPortableFluidCell.java b/src/main/java/appeng/fluids/container/ContainerMEPortableFluidCell.java index 3f55c4804..71e180d30 100644 --- a/src/main/java/appeng/fluids/container/ContainerMEPortableFluidCell.java +++ b/src/main/java/appeng/fluids/container/ContainerMEPortableFluidCell.java @@ -171,9 +171,16 @@ public class ContainerMEPortableFluidCell extends AEBaseContainer implements IAE // drain 1 ae t this.ticks++; if (this.ticks > 10) { - double power = this.wirelessTerminalGUIObject.extractAEPower(this.getPowerMultiplier() * this.ticks, Actionable.MODULATE, PowerMultiplier.CONFIG); + double ext = this.wirelessTerminalGUIObject.extractAEPower(this.getPowerMultiplier() * this.ticks, Actionable.MODULATE, PowerMultiplier.CONFIG); + if (ext < this.getPowerMultiplier() * this.ticks) { + if (Platform.isServer() && this.isValidContainer()) { + this.getPlayerInv().player.sendMessage(PlayerMessages.DeviceNotPowered.get()); + } + + this.setValidContainer(false); + } this.ticks = 0; - this.hasPower = power > 0.001; + this.hasPower = ext > 0.001; } if (!this.wirelessTerminalGUIObject.rangeCheck()) {