From 20108f07dff7a5e518680ab718697eb42a5be1e5 Mon Sep 17 00:00:00 2001 From: Fff Date: Thu, 12 Nov 2026 11:32:29 -0800 Subject: [PATCH] =?UTF-8?q?fix(menu):=20=E4=BF=AE=E5=A4=8D=E6=97=81?= =?UTF-8?q?=E8=A7=82=E8=80=85=E8=8F=9C=E5=8D=95=E9=A2=84=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 允许旁观者查看溜槽、批量加工等方块菜单 - 补齐机器菜单的位置、配置数据和多方块入口 - 通过菜单初始化同步创造发电机功率与特斯拉塔过滤配置 --- .../block/entity/ActiveSilencerBlockEntity.java | 7 ++++++- .../block/entity/AdvancedComparatorBlockEntity.java | 8 +++++++- .../block/entity/BaseMachineBlockEntity.java | 7 +++++++ .../entity/CelestialForgingAnvilBlockEntity.java | 6 ++++++ .../anvilcraft/block/entity/ChuteBlockEntity.java | 1 - .../block/entity/CreativeGeneratorBlockEntity.java | 9 +++++++-- .../block/entity/ExpCollectorBlockEntity.java | 1 - .../block/entity/ItemCollectorBlockEntity.java | 7 ++++++- .../block/entity/ItemDetectorBlockEntity.java | 7 ++++++- .../block/entity/MagneticChuteBlockEntity.java | 1 - .../block/entity/PulseGeneratorBlockEntity.java | 8 +++++++- .../block/entity/StructureScannerBlockEntity.java | 1 - .../block/entity/TeslaTowerBlockEntity.java | 12 +++++++++++- .../block/entity/batch/BatchCrafterBlockEntity.java | 1 - .../block/entity/batch/BatchCutterBlockEntity.java | 1 - .../block/power/consumer/TeslaTowerBlock.java | 8 +++++++- .../power/generator/CreativeGeneratorBlock.java | 2 +- .../utility/redstone/AdvancedComparatorBlock.java | 6 ++++++ .../block/utility/redstone/PulseGeneratorBlock.java | 6 ++++++ .../anvilcraft/client/gui/screen/SliderScreen.java | 3 ++- .../client/gui/screen/TeslaTowerScreen.java | 1 + .../java/dev/dubhe/anvilcraft/init/ModMenuTypes.java | 2 +- .../dev/dubhe/anvilcraft/inventory/SliderMenu.java | 9 +++++++-- .../dubhe/anvilcraft/inventory/TeslaTowerMenu.java | 4 ++++ 24 files changed, 98 insertions(+), 20 deletions(-) diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ActiveSilencerBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/ActiveSilencerBlockEntity.java index cf03c9a718..ef848fb326 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ActiveSilencerBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/ActiveSilencerBlockEntity.java @@ -18,6 +18,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.ListTag; import net.minecraft.nbt.StringTag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -118,7 +119,6 @@ public Component getDisplayName() { @Nullable @Override public AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) { - if (player.isSpectator()) return null; return new ActiveSilencerMenu(ModMenuTypes.ACTIVE_SILENCER.get(), i, inventory, this); } @@ -177,4 +177,9 @@ public void applyDiskData(ValueInput input) { public AABB shape() { return this.range; } + + @Override + public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { + buffer.writeBlockPos(this.getBlockPos()); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/AdvancedComparatorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/AdvancedComparatorBlockEntity.java index b640def716..7be01bcc1f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/AdvancedComparatorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/AdvancedComparatorBlockEntity.java @@ -12,6 +12,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -151,7 +152,6 @@ public Component getDisplayName() { @Override public @Nullable AbstractContainerMenu createMenu(int containerId, Inventory inventory, Player player) { - if (player.isSpectator()) return null; if (player.level().getBlockEntity(this.getBlockPos()) instanceof AdvancedComparatorBlockEntity blockEntity) { return new AdvancedComparatorMenu(ModMenuTypes.ADVANCED_COMPARATOR.get(), containerId, inventory, blockEntity); } @@ -182,4 +182,10 @@ public String getSerializedName() { return this.name().toLowerCase(); } } + + @Override + public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { + buffer.writeBlockPos(this.getBlockPos()); + buffer.writeNbt(this.constructDataNbt()); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseMachineBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseMachineBlockEntity.java index 446ed21a68..93af80068e 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseMachineBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/BaseMachineBlockEntity.java @@ -4,7 +4,9 @@ import lombok.Getter; import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.world.MenuProvider; +import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.BlockEntityType; import net.minecraft.world.level.block.state.BlockState; @@ -21,4 +23,9 @@ protected BaseMachineBlockEntity(BlockEntityType type, Bl public abstract Direction getDirection(); public abstract void setDirection(Direction direction); + + @Override + public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { + buffer.writeBlockPos(this.getBlockPos()); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilBlockEntity.java index 78947048cf..ad58b81df6 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/CelestialForgingAnvilBlockEntity.java @@ -38,6 +38,7 @@ import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtOps; import net.minecraft.network.Connection; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -1419,4 +1420,9 @@ public void removePortal(Cube323PartHalf side) { WormholeStabilizerHandler wh = this.megastructureManager.getWormholeHandler(); wh.removePortal(side, this); } + + @Override + public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { + buffer.writeBlockPos(this.getBlockPos()); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ChuteBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/ChuteBlockEntity.java index c9bdfaf754..d8e6843a15 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ChuteBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/ChuteBlockEntity.java @@ -71,7 +71,6 @@ public Component getDisplayName() { @Nullable @Override public AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) { - if (player.isSpectator()) return null; return new ChuteMenu(ModMenuTypes.CHUTE.get(), i, inventory, this); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/CreativeGeneratorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/CreativeGeneratorBlockEntity.java index 107b694269..b57b0795d8 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/CreativeGeneratorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/CreativeGeneratorBlockEntity.java @@ -10,6 +10,7 @@ import dev.dubhe.anvilcraft.inventory.SliderMenu; import lombok.Getter; import net.minecraft.core.BlockPos; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerLevel; import net.minecraft.world.MenuProvider; @@ -104,8 +105,7 @@ public Component getDisplayName() { @Nullable @Override public AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) { - if (player.isSpectator()) return null; - return new SliderMenu(i, this::setPower); + return new SliderMenu(i, this.getPower(), this::setPower); } public void setPower(int power) { @@ -138,4 +138,9 @@ public Level getCurrentLevel() { public int getRange() { return 2; } + + @Override + public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { + buffer.writeVarInt(this.getPower()); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ExpCollectorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/ExpCollectorBlockEntity.java index f84fe7530a..13dc219832 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ExpCollectorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/ExpCollectorBlockEntity.java @@ -330,7 +330,6 @@ public Component getDisplayName() { @Override public @Nullable AbstractContainerMenu createMenu(int containerId, Inventory inventory, Player player) { - if (player.isSpectator()) return null; return new ExpCollectorMenu(ModMenuTypes.EXP_COLLECTOR.get(), containerId, inventory, this); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemCollectorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemCollectorBlockEntity.java index b4055cef20..cc914e947f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemCollectorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemCollectorBlockEntity.java @@ -18,6 +18,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -188,7 +189,6 @@ public void saveAdditional(ValueOutput output) { @Nullable @Override public AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) { - if (player.isSpectator()) return null; return new ItemCollectorMenu(ModMenuTypes.ITEM_COLLECTOR.get(), i, inventory, this); } @@ -411,4 +411,9 @@ public static void poachItemEntity(ItemEntity itemEntity) { } } + + @Override + public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { + buffer.writeBlockPos(this.getBlockPos()); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemDetectorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemDetectorBlockEntity.java index 35f1254091..5859989bed 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemDetectorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/ItemDetectorBlockEntity.java @@ -19,6 +19,7 @@ import net.minecraft.core.HolderLookup; import net.minecraft.core.NonNullList; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -345,7 +346,6 @@ public Component getDisplayName() { @Override public @Nullable AbstractContainerMenu createMenu(int id, Inventory inventory, Player player) { - if (player.isSpectator()) return null; return new ItemDetectorMenu(ModMenuTypes.ITEM_DETECTOR.get(), id, inventory, this); } @@ -473,4 +473,9 @@ public Mode cycle() { return this == Mode.ANY ? Mode.ALL : Mode.ANY; } } + + @Override + public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { + buffer.writeBlockPos(this.getBlockPos()); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/MagneticChuteBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/MagneticChuteBlockEntity.java index 1938c3ef34..e112a61499 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/MagneticChuteBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/MagneticChuteBlockEntity.java @@ -74,7 +74,6 @@ public static Vec3 getOutputSpeed(Direction direction) { @Nullable @Override public AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) { - if (player.isSpectator()) return null; return new MagneticChuteMenu(ModMenuTypes.MAGNETIC_CHUTE.get(), i, inventory, this); } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/PulseGeneratorBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/PulseGeneratorBlockEntity.java index e04cb4b3f5..bc2ccb6af8 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/PulseGeneratorBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/PulseGeneratorBlockEntity.java @@ -12,6 +12,7 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.HolderLookup; import net.minecraft.nbt.CompoundTag; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -285,7 +286,6 @@ public Component getDisplayName() { @Override public @Nullable AbstractContainerMenu createMenu(int containerId, Inventory inventory, Player player) { - if (player.isSpectator()) return null; if (player.level().getBlockEntity(this.getBlockPos()) instanceof PulseGeneratorBlockEntity blockEntity) { return new PulseGeneratorMenu(ModMenuTypes.PULSE_GENERATOR.get(), containerId, inventory, blockEntity); } @@ -343,4 +343,10 @@ public static Mode fromIndex(int index) { return Mode.values()[index]; } } + + @Override + public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { + buffer.writeBlockPos(this.getBlockPos()); + buffer.writeNbt(this.constructDataNbt()); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/StructureScannerBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/StructureScannerBlockEntity.java index 095a7437ba..097b1095e5 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/StructureScannerBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/StructureScannerBlockEntity.java @@ -642,7 +642,6 @@ public Component getDisplayName() { @Override public @Nullable AbstractContainerMenu createMenu(int containerId, Inventory inventory, Player player) { - if (player.isSpectator()) return null; return new StructureScannerMenu(ModMenuTypes.STRUCTURE_SCANNER.get(), containerId, inventory, this); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/TeslaTowerBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/TeslaTowerBlockEntity.java index 7753a88679..bb5ba96666 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/TeslaTowerBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/TeslaTowerBlockEntity.java @@ -24,6 +24,7 @@ import dev.dubhe.anvilcraft.init.block.ModBlockTags; import dev.dubhe.anvilcraft.init.block.ModBlocks; import dev.dubhe.anvilcraft.inventory.TeslaTowerMenu; +import dev.dubhe.anvilcraft.network.TeslaFilterSyncPacket; import dev.dubhe.anvilcraft.util.DistanceComparator; import it.unimi.dsi.fastutil.Pair; import lombok.Getter; @@ -34,6 +35,7 @@ import net.minecraft.core.UUIDUtil; import net.minecraft.nbt.CompoundTag; import net.minecraft.network.Connection; +import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.network.chat.Component; import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.game.ClientGamePacketListener; @@ -420,7 +422,9 @@ public Component getDisplayName() { @Override public @Nullable AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) { - if (this.level == null || player.isSpectator()) return null; + if (this.level == null) { + return null; + } BlockState blockState = this.level.getBlockState(this.getBlockPos()); int offsetY = blockState.getValue(TeslaTowerBlock.HALF).getOffsetY(); if (this.level.getBlockEntity(this.getBlockPos().above(-offsetY)) instanceof TeslaTowerBlockEntity teslaTowerBlockEntity) { @@ -461,4 +465,10 @@ public void applyDiskData(ValueInput input) { }); this.handleSync(filters); } + + @Override + public void writeClientSideData(AbstractContainerMenu menu, RegistryFriendlyByteBuf buffer) { + buffer.writeBlockPos(this.getBlockPos()); + TeslaFilterSyncPacket.STREAM_CODEC.encode(buffer, TeslaFilterSyncPacket.create(this.getAllowList())); + } } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCrafterBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCrafterBlockEntity.java index 02d0be66c3..4d600f0bec 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCrafterBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCrafterBlockEntity.java @@ -166,7 +166,6 @@ public void preRemoveSideEffects(BlockPos pos, BlockState state) { @Nullable @Override public AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) { - if (player.isSpectator()) return null; return new BatchCrafterMenu(ModMenuTypes.BATCH_CRAFTER.get(), i, inventory, this); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCutterBlockEntity.java b/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCutterBlockEntity.java index ed9dcd38a0..ed52189b97 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCutterBlockEntity.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/entity/batch/BatchCutterBlockEntity.java @@ -183,7 +183,6 @@ public SingleRecipeInput createDummyInput() { @Nullable @Override public AbstractContainerMenu createMenu(int i, Inventory inventory, Player player) { - if (player.isSpectator()) return null; return new BatchCutterMenu(ModMenuTypes.BATCH_CUTTER.get(), i, inventory, this); } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/TeslaTowerBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/TeslaTowerBlock.java index dc6a1c4b97..55e807eaa1 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/TeslaTowerBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/consumer/TeslaTowerBlock.java @@ -16,6 +16,7 @@ import net.minecraft.server.level.ServerPlayer; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.MenuProvider; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -181,6 +182,11 @@ public void onRemove(Level level, BlockPos pos, BlockState state) { public void onPlace(Level level, BlockPos pos, BlockState state) { } + @Override + protected @Nullable MenuProvider getMenuProvider(BlockState state, Level level, BlockPos pos) { + return level.getBlockEntity(this.getMainPartPos(pos, state)) instanceof TeslaTowerBlockEntity blockEntity ? blockEntity : null; + } + @Override protected InteractionResult useWithoutItem( BlockState state, @@ -197,7 +203,7 @@ protected InteractionResult useWithoutItem( BlockEntity blockEntity = level.getBlockEntity(mainPartPos); if (blockEntity instanceof TeslaTowerBlockEntity teslaTowerBlockEntity && player instanceof ServerPlayer sp) { if (sp.gameMode.getGameModeForPlayer() == GameType.SPECTATOR) return InteractionResult.PASS; - ModMenuTypes.open(sp, teslaTowerBlockEntity, mainPartPos); + ModMenuTypes.open(sp, teslaTowerBlockEntity); PacketDistributor.sendToPlayer(sp, TeslaFilterSyncPacket.create(teslaTowerBlockEntity.getAllowList())); return InteractionResult.SUCCESS; } diff --git a/src/main/java/dev/dubhe/anvilcraft/block/power/generator/CreativeGeneratorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/power/generator/CreativeGeneratorBlock.java index d3bc18e79c..c8556cd1ba 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/power/generator/CreativeGeneratorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/power/generator/CreativeGeneratorBlock.java @@ -54,7 +54,7 @@ public InteractionResult use( } if (level.getBlockEntity(pos) instanceof CreativeGeneratorBlockEntity entity && player instanceof ServerPlayer serverPlayer) { - ModMenuTypes.open(serverPlayer, entity, pos); + ModMenuTypes.open(serverPlayer, entity); PacketDistributor.sendToPlayer(serverPlayer, new SliderInitPacket(entity.getPower())); } return InteractionResult.SUCCESS; diff --git a/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/AdvancedComparatorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/AdvancedComparatorBlock.java index 7f3e90341c..51c024a1a5 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/AdvancedComparatorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/AdvancedComparatorBlock.java @@ -17,6 +17,7 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.MenuProvider; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.decoration.ItemFrame; import net.minecraft.world.entity.player.Player; @@ -277,6 +278,11 @@ public static int getDelay() { return 1; } + @Override + protected @Nullable MenuProvider getMenuProvider(BlockState state, Level level, BlockPos pos) { + return level.getBlockEntity(pos) instanceof AdvancedComparatorBlockEntity blockEntity ? blockEntity : null; + } + @Override protected InteractionResult useWithoutItem( BlockState state, diff --git a/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/PulseGeneratorBlock.java b/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/PulseGeneratorBlock.java index 39399eab8f..5d10ffc6a3 100644 --- a/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/PulseGeneratorBlock.java +++ b/src/main/java/dev/dubhe/anvilcraft/block/utility/redstone/PulseGeneratorBlock.java @@ -17,6 +17,7 @@ import net.minecraft.util.RandomSource; import net.minecraft.world.InteractionHand; import net.minecraft.world.InteractionResult; +import net.minecraft.world.MenuProvider; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -310,6 +311,11 @@ public static int getInputSignal(Level level, BlockPos pos, BlockState state) { } } + @Override + protected @Nullable MenuProvider getMenuProvider(BlockState state, Level level, BlockPos pos) { + return level.getBlockEntity(pos) instanceof PulseGeneratorBlockEntity blockEntity ? blockEntity : null; + } + @Override protected InteractionResult useWithoutItem( BlockState state, diff --git a/src/main/java/dev/dubhe/anvilcraft/client/gui/screen/SliderScreen.java b/src/main/java/dev/dubhe/anvilcraft/client/gui/screen/SliderScreen.java index 5ffadd12f4..56f1e7dddd 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/gui/screen/SliderScreen.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/gui/screen/SliderScreen.java @@ -47,8 +47,9 @@ protected void init() { this.value.setTextColorUneditable(-1); this.value.setBordered(false); this.value.setMaxLength(50); + this.sliderWidget.setValue(this.menu.getInitialValue()); + this.value.setValue(Integer.toString(this.menu.getInitialValue())); this.value.setResponder(this::onValueInput); - this.value.setValue(""); TexturedButton max = new TexturedButton( 152 + offsetX, 43 + offsetY, diff --git a/src/main/java/dev/dubhe/anvilcraft/client/gui/screen/TeslaTowerScreen.java b/src/main/java/dev/dubhe/anvilcraft/client/gui/screen/TeslaTowerScreen.java index 9795274d50..11f53042d7 100644 --- a/src/main/java/dev/dubhe/anvilcraft/client/gui/screen/TeslaTowerScreen.java +++ b/src/main/java/dev/dubhe/anvilcraft/client/gui/screen/TeslaTowerScreen.java @@ -254,6 +254,7 @@ protected void init() { .toList() ); this.filteredFilters.addAll(this.allFilter); + this.handleSync(List.copyOf(this.menu.getBlockEntity().getAllowList())); } private boolean mouseInLeft(double mouseX, double mouseY, int leftPos, int topPos) { diff --git a/src/main/java/dev/dubhe/anvilcraft/init/ModMenuTypes.java b/src/main/java/dev/dubhe/anvilcraft/init/ModMenuTypes.java index d17704b54b..be53f2a1c2 100644 --- a/src/main/java/dev/dubhe/anvilcraft/init/ModMenuTypes.java +++ b/src/main/java/dev/dubhe/anvilcraft/init/ModMenuTypes.java @@ -127,7 +127,7 @@ public class ModMenuTypes { public static final MenuEntry SLIDER = REGISTRUM .menu( "slider", - (menuType, containerId, inventory) -> new SliderMenu(menuType, containerId), + (menuType, containerId, inventory, extraData) -> new SliderMenu(menuType, containerId, inventory, extraData), () -> SliderScreen::new) .register(); public static final MenuEntry ITEM_COLLECTOR = REGISTRUM diff --git a/src/main/java/dev/dubhe/anvilcraft/inventory/SliderMenu.java b/src/main/java/dev/dubhe/anvilcraft/inventory/SliderMenu.java index 3980981e34..89b7894f72 100644 --- a/src/main/java/dev/dubhe/anvilcraft/inventory/SliderMenu.java +++ b/src/main/java/dev/dubhe/anvilcraft/inventory/SliderMenu.java @@ -3,6 +3,8 @@ import dev.dubhe.anvilcraft.init.ModMenuTypes; import dev.dubhe.anvilcraft.util.Callback; import lombok.Getter; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.entity.player.Inventory; import net.minecraft.world.entity.player.Player; import net.minecraft.world.inventory.AbstractContainerMenu; import net.minecraft.world.inventory.MenuType; @@ -12,16 +14,19 @@ @Getter public class SliderMenu extends AbstractContainerMenu { + private final int initialValue; private final @Nullable Callback callback; - public SliderMenu(@Nullable MenuType menuType, int containerId) { + public SliderMenu(@Nullable MenuType menuType, int containerId, Inventory inventory, FriendlyByteBuf extraData) { super(menuType, containerId); this.callback = null; + this.initialValue = extraData.readVarInt(); } - public SliderMenu(int containerId, Callback callback) { + public SliderMenu(int containerId, int initialValue, Callback callback) { super(ModMenuTypes.SLIDER.get(), containerId); this.callback = callback; + this.initialValue = initialValue; } @Override diff --git a/src/main/java/dev/dubhe/anvilcraft/inventory/TeslaTowerMenu.java b/src/main/java/dev/dubhe/anvilcraft/inventory/TeslaTowerMenu.java index 6eb7e0b2e5..09acc7226f 100644 --- a/src/main/java/dev/dubhe/anvilcraft/inventory/TeslaTowerMenu.java +++ b/src/main/java/dev/dubhe/anvilcraft/inventory/TeslaTowerMenu.java @@ -3,6 +3,7 @@ import dev.dubhe.anvilcraft.api.teslatower.TeslaFilter; import dev.dubhe.anvilcraft.block.entity.TeslaTowerBlockEntity; import dev.dubhe.anvilcraft.init.block.ModBlocks; +import dev.dubhe.anvilcraft.network.TeslaFilterSyncPacket; import it.unimi.dsi.fastutil.Pair; import lombok.Getter; import net.minecraft.network.FriendlyByteBuf; @@ -36,6 +37,9 @@ public TeslaTowerMenu( public TeslaTowerMenu( @Nullable MenuType menuType, int containerId, Inventory inventory, FriendlyByteBuf extraData) { this(menuType, containerId, inventory, Objects.requireNonNull(inventory.player.level().getBlockEntity(extraData.readBlockPos()))); + this.handleSync(TeslaFilterSyncPacket.STREAM_CODEC.decode(extraData).filters().stream() + .map(data -> Pair.of(data.filter(), data.extra())) + .toList()); } @Override