From 524d13b116e1acd7e1f1a5f8547c29214d0915db Mon Sep 17 00:00:00 2001 From: Fff Date: Thu, 12 Nov 2026 11:40:01 -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 b3a53270df..0fd59e0e38 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 72bc00ca47..d90165983f 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 467a18d8d8..0d6447973a 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 02a687aca6..c94c100962 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/ControlValveFilterItemPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/ControlValveFilterItemPacket.java @@ -35,6 +35,9 @@ public void handleOnClient(Player player) { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player instanceof ServerPlayer serverPlayer) || !(player.containerMenu instanceof ControlValveMenu menu) || menu.getBlockEntity() == null || !menu.stillValid(player)) return; FilterContent content = this.filterItem.get(ModComponents.FILTER_CONTENT); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/ControlValveFilterPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/ControlValveFilterPacket.java index 68ebe1931f..146118da47 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/ControlValveFilterPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/ControlValveFilterPacket.java @@ -38,6 +38,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; menu.getBlockEntity().setFilter(this.index, this.fluid); menu.getBlockEntity().sendUpdate(); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/ControlValveUpdatePacket.java b/src/main/java/dev/dubhe/anvilcraft/network/ControlValveUpdatePacket.java index e4c32b68a7..46a0e6806f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/ControlValveUpdatePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/ControlValveUpdatePacket.java @@ -25,6 +25,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof ControlValveMenu menu)) return; ControlValveBlockEntity be = menu.getBlockEntity(); if (be == null) 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 6e816f3ac3..99a94c4ab9 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 7edce469d4..2577187332 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/ExpCollectorSyncPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/ExpCollectorSyncPacket.java @@ -33,6 +33,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof ExpCollectorMenu menu)) return; ExpCollectorBlockEntity collector = menu.getBlockEntity(); if (!collector.getBlockPos().equals(this.pos)) return; diff --git a/src/main/java/dev/dubhe/anvilcraft/network/HammerChangeFlexibleMultiPartBlockPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/HammerChangeFlexibleMultiPartBlockPacket.java index bc9767fda5..c3cdec7085 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 3a45587136..9b433f6cca 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 5ba239da2a..bd73391227 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/MachineCycleFilterModePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/MachineCycleFilterModePacket.java @@ -25,6 +25,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 078f76667b..b6f5e30d47 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 a8e79237fd..805896b278 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 3497a394ac..32ab3c6670 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/PulseGeneratorUpdatePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/PulseGeneratorUpdatePacket.java @@ -37,6 +37,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (!(player.containerMenu instanceof PulseGeneratorMenu menu)) return; PulseGeneratorBlockEntity repeater = menu.getBlockEntity(); repeater.setStartMode(this.startMode); diff --git a/src/main/java/dev/dubhe/anvilcraft/network/SilencerAddMutedPacket.java b/src/main/java/dev/dubhe/anvilcraft/network/SilencerAddMutedPacket.java index aa3a41c255..7b9a15013b 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 dae64f416c..f4c10f5589 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 f3031f2f47..2bb4bfda68 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 72f833d96e..184c71c669 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 469984e399..a38d8f32a3 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 79d2772848..f7bbcc7b3b 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/SlotFilterChangePacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/SlotFilterChangePacket.java @@ -45,6 +45,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 0f78a85a90..273e88f8dd 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 b84c384f71..076055364d 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 49e61b7324..c554ad1e21 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 7eadbee672..3f1160b2dd 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 88e99d5b1a..dba04a7351 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/StructureScannerActionPacket.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/StructureScannerActionPacket.java @@ -79,6 +79,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 a4c71d8f2b..aed2ea3eec 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 e7d687c992..154a44c082 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 88a2aaec0e..25e2a97207 100644 --- a/src/main/java/dev/dubhe/anvilcraft/network/multiple/TradingStationPackets.java +++ b/src/main/java/dev/dubhe/anvilcraft/network/multiple/TradingStationPackets.java @@ -52,6 +52,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } if (this.slot < 0 || this.slot >= 3) return; Level level = player.level(); Optional beOp = TradingStationPackets.getOpenStation(player, this.pos); @@ -92,6 +95,9 @@ public Type type() { @Override public void handleOnServer(Player player) { + if (player.isSpectator()) { + return; + } Optional beOp = TradingStationPackets.getOpenStation(player, this.pos); if (beOp.isEmpty()) return; TradingStationBlockEntity be = beOp.get();