From e62c3eec6186e487847dc6ba195fade2c3342171 Mon Sep 17 00:00:00 2001 From: Fff Date: Thu, 12 Nov 2026 11:37:24 -0800 Subject: [PATCH] =?UTF-8?q?fix(network):=20=E7=A6=81=E6=AD=A2=E6=97=81?= =?UTF-8?q?=E8=A7=82=E8=80=85=E4=BF=AE=E6=94=B9=E6=96=B9=E5=9D=97=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在服务端拒绝旁观者修改机器朝向、过滤、加工和红石配置 - 保护控制阀、激光、发电机、交易站和结构扫描器等配置写入入口 - 保留客户端状态同步和旁观者读取蓝图文件列表 --- .../anvilcraft/network/AdvancedComparatorUpdatePacket.java | 3 +++ .../anvilcraft/network/AutoEnchantingTableFluidPacket.java | 3 +++ .../anvilcraft/network/AutoEnchantingTableLevelPacket.java | 3 +++ .../anvilcraft/network/AutoEnchantingTableSyncPacket.java | 3 +++ .../dubhe/anvilcraft/network/BatchCrafterSelectPacket.java | 3 +++ .../dubhe/anvilcraft/network/BatchCutterSelectPacket.java | 3 +++ .../anvilcraft/network/ControlValveFilterItemPacket.java | 3 +++ .../dubhe/anvilcraft/network/ControlValveFilterPacket.java | 3 +++ .../dubhe/anvilcraft/network/ControlValveUpdatePacket.java | 3 +++ .../dubhe/anvilcraft/network/CreativeLaserUpdatePacket.java | 3 +++ .../dubhe/anvilcraft/network/CyclingValueSyncPacket.java | 3 +++ .../dubhe/anvilcraft/network/ExpCollectorSyncPacket.java | 3 +++ .../network/HammerChangeFlexibleMultiPartBlockPacket.java | 3 +++ .../anvilcraft/network/ItemDetectorChangeRangePacket.java | 3 +++ .../anvilcraft/network/MachineCycleFilterModePacket.java | 3 +++ .../dubhe/anvilcraft/network/MachineEnableFilterPacket.java | 3 +++ .../anvilcraft/network/MachineOutputDirectionPacket.java | 3 +++ .../anvilcraft/network/PulseGeneratorUpdatePacket.java | 3 +++ .../dubhe/anvilcraft/network/SilencerAddMutedPacket.java | 3 +++ .../dubhe/anvilcraft/network/SilencerRemoveMutedPacket.java | 3 +++ .../dev/dubhe/anvilcraft/network/SilencerSyncPacket.java | 3 +++ .../dev/dubhe/anvilcraft/network/SliderUpdatePacket.java | 3 +++ .../dubhe/anvilcraft/network/SlotDisableChangePacket.java | 3 +++ .../dubhe/anvilcraft/network/SlotFilterChangePacket.java | 3 +++ .../network/SlotFilterMaxStackSizeChangePacket.java | 3 +++ .../anvilcraft/network/SmartBlockPlacerActionPacket.java | 3 +++ .../network/SpacetimeSupercomputerExecuteCommandPacket.java | 3 +++ .../dubhe/anvilcraft/network/StoragePortUnmarkPacket.java | 3 +++ .../anvilcraft/network/StructureScannerActionPacket.java | 3 +++ .../anvilcraft/network/StructureScannerFilePacket.java | 3 +++ .../anvilcraft/network/StructureScannerSavePacket.java | 3 +++ .../dev/dubhe/anvilcraft/network/TeslaAddFilterPacket.java | 3 +++ .../dubhe/anvilcraft/network/TeslaRemoveFilterPacket.java | 3 +++ .../anvilcraft/network/multiple/TradingStationPackets.java | 6 ++++++ 34 files changed, 105 insertions(+) diff --git a/src/main/java/dev/dubhe/anvilcraft/network/AdvancedComparatorUpdatePacket.java b/src/main/java/dev/dubhe/anvilcraft/network/AdvancedComparatorUpdatePacket.java index e8a13ce3fd..5a8177871e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/AdvancedComparatorUpdatePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/AdvancedComparatorUpdatePacket.java @@ -42,6 +42,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!player.hasContainerOpen()) return; if (!(player.containerMenu instanceof AdvancedComparatorMenu menu)) return; AdvancedComparatorBlockEntity repeater = menu.getBlockEntity(); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/AutoEnchantingTableFluidPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/AutoEnchantingTableFluidPacket.java index cc9d01ecd0..a2fac838ce 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/AutoEnchantingTableFluidPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/AutoEnchantingTableFluidPacket.java @@ -35,6 +35,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } Level level = player.level(); AbstractContainerMenu containerMenu = player.containerMenu; BlockEntity blockEntity = level.getBlockEntity(this.pos); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/AutoEnchantingTableLevelPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/AutoEnchantingTableLevelPacket.java index d022505f38..756d4a9a85 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/AutoEnchantingTableLevelPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/AutoEnchantingTableLevelPacket.java @@ -24,6 +24,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!player.hasContainerOpen()) return; if (!(player.containerMenu instanceof AutoEnchantingTableMenu menu)) return; menu.setLiquidLevel(this.level); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/AutoEnchantingTableSyncPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/AutoEnchantingTableSyncPacket.java index e2600bd57f..294d7c1a29 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/AutoEnchantingTableSyncPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/AutoEnchantingTableSyncPacket.java @@ -26,6 +26,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!player.hasContainerOpen()) return; if (!(player.containerMenu instanceof AutoEnchantingTableMenu menu)) return; if (this.select) { diff --git a/src/main/java/dev/dubhe/anvilcraft/network/BatchCrafterSelectPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/BatchCrafterSelectPacket.java index 647cf4359b..83c7ccbf77 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/BatchCrafterSelectPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/BatchCrafterSelectPacket.java @@ -32,6 +32,9 @@ public Type type() { @Override public void handleOnBothSide(Player player) { + if (!player.level().isClientSide && player.isSpectator()) { + return; + } Level level = player.level(); if (!level.isLoaded(this.pos)) return; diff --git a/src/main/java/dev/dubhe/anvilcraft/network/BatchCutterSelectPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/BatchCutterSelectPacket.java index f209f3b83f..2a589ee7fc 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/BatchCutterSelectPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/BatchCutterSelectPacket.java @@ -31,6 +31,9 @@ public Type type() { @Override public void handleOnBothSide(Player player) { + if (!player.level().isClientSide && player.isSpectator()) { + return; + } Level level = player.level(); if (!level.isLoaded(this.pos)) { return; diff --git a/src/main/java/dev/dubhe/anvilcraft/network/ControlValveFilterItemPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/ControlValveFilterItemPacket.java index 3729d92236..ab4f4c224c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/ControlValveFilterItemPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/ControlValveFilterItemPacket.java @@ -47,6 +47,9 @@ public void handleOnClient(Player player) { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof ControlValveMenu menu) || menu.getBlockEntity() == null) { return; } diff --git a/src/main/java/dev/dubhe/anvilcraft/network/ControlValveFilterPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/ControlValveFilterPacket.java index 1adbe108c7..024f258078 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/ControlValveFilterPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/ControlValveFilterPacket.java @@ -44,6 +44,9 @@ public void handleOnClient(Player player) { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof ControlValveMenu menu) || menu.getBlockEntity() == null) { return; } diff --git a/src/main/java/dev/dubhe/anvilcraft/network/ControlValveUpdatePacket.java b/src/main/java/dev/dubhe/anvilcraft/network/ControlValveUpdatePacket.java index 7aa781685e..3365990da2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/ControlValveUpdatePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/ControlValveUpdatePacket.java @@ -28,6 +28,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof ControlValveMenu menu)) { return; } diff --git a/src/main/java/dev/dubhe/anvilcraft/network/CreativeLaserUpdatePacket.java b/src/main/java/dev/dubhe/anvilcraft/network/CreativeLaserUpdatePacket.java index 0784a25b5e..7c039c42c5 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/CreativeLaserUpdatePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/CreativeLaserUpdatePacket.java @@ -33,6 +33,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof CreativeLaserMenu menu)) return; CreativeLaserBlockEntity blockEntity = menu.getBlockEntity(); if (blockEntity == null) return; diff --git a/src/main/java/dev/dubhe/anvilcraft/network/CyclingValueSyncPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/CyclingValueSyncPacket.java index 6d993d80cd..ee8fc5e9e2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/CyclingValueSyncPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/CyclingValueSyncPacket.java @@ -26,6 +26,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (player.containerMenu instanceof CyclingValueHandler handler) { handler.notify(this.index, this.name); } diff --git a/src/main/java/dev/dubhe/anvilcraft/network/ExpCollectorSyncPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/ExpCollectorSyncPacket.java index f304c364df..34e8ad3d9d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/ExpCollectorSyncPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/ExpCollectorSyncPacket.java @@ -36,6 +36,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } Level level = player.level(); AbstractContainerMenu containerMenu = player.containerMenu; BlockEntity blockEntity = level.getBlockEntity(this.pos); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/HammerChangeFlexibleMultiPartBlockPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/HammerChangeFlexibleMultiPartBlockPacket.java index 83a7f57394..6ae5719c4c 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/HammerChangeFlexibleMultiPartBlockPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/HammerChangeFlexibleMultiPartBlockPacket.java @@ -37,6 +37,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } Level level = player.level(); if (!level.isLoaded(this.pos)) { return; diff --git a/src/main/java/dev/dubhe/anvilcraft/network/ItemDetectorChangeRangePacket.java b/src/main/java/dev/dubhe/anvilcraft/network/ItemDetectorChangeRangePacket.java index a509acbe29..7411f76b0b 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/ItemDetectorChangeRangePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/ItemDetectorChangeRangePacket.java @@ -24,6 +24,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof ItemDetectorMenu menu)) return; menu.setRange(this.range); } diff --git a/src/main/java/dev/dubhe/anvilcraft/network/MachineCycleFilterModePacket.java b/src/main/java/dev/dubhe/anvilcraft/network/MachineCycleFilterModePacket.java index 87aa5ebb8f..fad8f27244 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/MachineCycleFilterModePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/MachineCycleFilterModePacket.java @@ -26,6 +26,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof ItemDetectorMenu menu)) return; menu.setFilterMode(this.filterMode); menu.flush(); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/MachineEnableFilterPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/MachineEnableFilterPacket.java index b59a2fc336..7ce5f6e9f9 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/MachineEnableFilterPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/MachineEnableFilterPacket.java @@ -37,6 +37,9 @@ public void handleOnClient(Player player) { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!player.hasContainerOpen()) return; if (!(player.containerMenu instanceof IFilterMenu menu)) return; menu.setFilterEnabled(this.filterEnabled()); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/MachineOutputDirectionPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/MachineOutputDirectionPacket.java index 7ee77bffe3..28c17763fc 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/MachineOutputDirectionPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/MachineOutputDirectionPacket.java @@ -35,6 +35,9 @@ public void handleOnClient(Player player) { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof BaseMachineMenu menu)) return; Direction direction = this.direction(); menu.setDirection(direction); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/PulseGeneratorUpdatePacket.java b/src/main/java/dev/dubhe/anvilcraft/network/PulseGeneratorUpdatePacket.java index 0a57b66c1b..50f93ef69b 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/PulseGeneratorUpdatePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/PulseGeneratorUpdatePacket.java @@ -45,6 +45,9 @@ public void encode(RegistryFriendlyByteBuf buf) { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof PulseGeneratorMenu menu)) return; PulseGeneratorBlockEntity repeater = menu.getBlockEntity(); repeater.setWaitingTime(this.waitingTime); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/SilencerAddMutedPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/SilencerAddMutedPacket.java index 3ea4cce92a..b183e472b9 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/SilencerAddMutedPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/SilencerAddMutedPacket.java @@ -24,6 +24,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (player.containerMenu instanceof ActiveSilencerMenu menu) { menu.addSound(this.soundId); } diff --git a/src/main/java/dev/dubhe/anvilcraft/network/SilencerRemoveMutedPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/SilencerRemoveMutedPacket.java index a5a9f51e6a..d1b16954ed 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/SilencerRemoveMutedPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/SilencerRemoveMutedPacket.java @@ -24,6 +24,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (player.containerMenu instanceof ActiveSilencerMenu menu) { menu.removeSound(this.soundId); } diff --git a/src/main/java/dev/dubhe/anvilcraft/network/SilencerSyncPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/SilencerSyncPacket.java index f310494425..1326e9b3f6 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/SilencerSyncPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/SilencerSyncPacket.java @@ -32,6 +32,9 @@ public Type type() { @Override public void handleOnBothSide(Player player) { + if (!player.level().isClientSide && player.isSpectator()) { + return; + } if (!player.level().isLoaded(this.pos)) { return; } diff --git a/src/main/java/dev/dubhe/anvilcraft/network/SliderUpdatePacket.java b/src/main/java/dev/dubhe/anvilcraft/network/SliderUpdatePacket.java index 55652df22e..38ceb0a690 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/SliderUpdatePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/SliderUpdatePacket.java @@ -25,6 +25,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof SliderMenu menu)) return; Callback callback = menu.getCallback(); if (callback == null) return; diff --git a/src/main/java/dev/dubhe/anvilcraft/network/SlotDisableChangePacket.java b/src/main/java/dev/dubhe/anvilcraft/network/SlotDisableChangePacket.java index c99ac98a5b..221c6626df 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/SlotDisableChangePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/SlotDisableChangePacket.java @@ -36,6 +36,9 @@ public void handleOnClient(Player player) { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof IFilterMenu menu)) return; menu.setSlotDisabled(this.index, this.state); menu.flush(); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/SlotFilterChangePacket.java b/src/main/java/dev/dubhe/anvilcraft/network/SlotFilterChangePacket.java index 7b9825cf48..ffd5a13026 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/SlotFilterChangePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/SlotFilterChangePacket.java @@ -47,6 +47,9 @@ public void handleOnClient(Player player) { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof IFilterMenu menu)) return; menu.setFilter(this.index, this.filter); menu.flush(); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/SlotFilterMaxStackSizeChangePacket.java b/src/main/java/dev/dubhe/anvilcraft/network/SlotFilterMaxStackSizeChangePacket.java index 58e5488fba..5aec8bfe40 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/SlotFilterMaxStackSizeChangePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/SlotFilterMaxStackSizeChangePacket.java @@ -39,6 +39,9 @@ public void handleOnClient(Player player) { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!player.hasContainerOpen()) return; if (!(player.containerMenu instanceof IFilterMenu menu)) return; IFilterBlockEntity filter = menu.getFilterBlockEntity(); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/SmartBlockPlacerActionPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/SmartBlockPlacerActionPacket.java index 380bb75b15..2742c0db1f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/SmartBlockPlacerActionPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/SmartBlockPlacerActionPacket.java @@ -45,6 +45,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof SmartBlockPlacerMenu menu)) { return; } diff --git a/src/main/java/dev/dubhe/anvilcraft/network/SpacetimeSupercomputerExecuteCommandPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/SpacetimeSupercomputerExecuteCommandPacket.java index d06ac7338e..afa7ca7e94 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/SpacetimeSupercomputerExecuteCommandPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/SpacetimeSupercomputerExecuteCommandPacket.java @@ -33,6 +33,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } Level level = player.level(); BlockEntity blockEntity = level.getBlockEntity(this.pos); if (blockEntity instanceof SpacetimeSupercomputerBlockEntity spacetimeSupercomputerBlockEntity) { diff --git a/src/main/java/dev/dubhe/anvilcraft/network/StoragePortUnmarkPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/StoragePortUnmarkPacket.java index dc44b51100..4ad069e734 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/StoragePortUnmarkPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/StoragePortUnmarkPacket.java @@ -31,6 +31,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.getMainHandItem().getItem() instanceof AnvilHammerItem)) { return; } diff --git a/src/main/java/dev/dubhe/anvilcraft/network/StructureScannerActionPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/StructureScannerActionPacket.java index 487a4aa955..7b11bea138 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/StructureScannerActionPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/StructureScannerActionPacket.java @@ -50,6 +50,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof StructureScannerMenu menu) || !menu.stillValid(player)) { return; } diff --git a/src/main/java/dev/dubhe/anvilcraft/network/StructureScannerFilePacket.java b/src/main/java/dev/dubhe/anvilcraft/network/StructureScannerFilePacket.java index b8306481ab..f975b54cb7 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/StructureScannerFilePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/StructureScannerFilePacket.java @@ -45,6 +45,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator() && this.action != Action.LIST) { + return; + } if (!(player instanceof ServerPlayer serverPlayer) || !(player.containerMenu instanceof StructureScannerMenu menu) || menu.containerId != this.containerId || !menu.stillValid(player)) return; StructureScannerFiles.handle(serverPlayer, menu, this); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/StructureScannerSavePacket.java b/src/main/java/dev/dubhe/anvilcraft/network/StructureScannerSavePacket.java index b828b3fa69..d82311180d 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/StructureScannerSavePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/StructureScannerSavePacket.java @@ -37,6 +37,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof StructureScannerMenu menu) || menu.containerId != this.containerId || !menu.stillValid(player)) return; var scanner = menu.getBlockEntity(); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/TeslaAddFilterPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/TeslaAddFilterPacket.java index 84f7e5b91e..a909f4ed78 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/TeslaAddFilterPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/TeslaAddFilterPacket.java @@ -26,6 +26,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (player.containerMenu instanceof TeslaTowerMenu menu) { menu.addFilter(this.id, this.arg); } diff --git a/src/main/java/dev/dubhe/anvilcraft/network/TeslaRemoveFilterPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/TeslaRemoveFilterPacket.java index 681ac63ea2..5fba5b03cd 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/TeslaRemoveFilterPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/TeslaRemoveFilterPacket.java @@ -26,6 +26,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (player.containerMenu instanceof TeslaTowerMenu menu) { menu.removeFilter(this.id, this.arg); } diff --git a/src/main/java/dev/dubhe/anvilcraft/network/multiple/TradingStationPackets.java b/src/main/java/dev/dubhe/anvilcraft/network/multiple/TradingStationPackets.java index 203ef6e62f..c01018f302 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/multiple/TradingStationPackets.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/multiple/TradingStationPackets.java @@ -40,6 +40,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } Level level = player.level(); Optional beOp = level.getBlockEntity(this.pos, ModBlockEntities.TRADING_STATION.get()); if (beOp.isEmpty()) return; @@ -79,6 +82,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } Level level = player.level(); Optional beOp = level.getBlockEntity(this.pos, ModBlockEntities.TRADING_STATION.get()); if (beOp.isEmpty()) return;