From efeaf269cd0b6e2c7999b492d8e8a154e403b5bc Mon Sep 17 00:00:00 2001 From: ferriarnus <61201275+ferriarnus@users.noreply.github.com> Date: Tue, 25 Jun 2024 01:17:41 +0200 Subject: [PATCH 1/2] fix: conduit type in menu not updating --- .../conduits/common/menu/ConduitMenu.java | 7 ++- .../common/network/ConduitNetwork.java | 1 + .../network/ConduitSelectionPacket.java | 51 +++++++++++++++++++ 3 files changed, 57 insertions(+), 2 deletions(-) create mode 100644 src/conduits/java/com/enderio/conduits/common/network/ConduitSelectionPacket.java diff --git a/src/conduits/java/com/enderio/conduits/common/menu/ConduitMenu.java b/src/conduits/java/com/enderio/conduits/common/menu/ConduitMenu.java index c6b9c278de..df41288a2e 100644 --- a/src/conduits/java/com/enderio/conduits/common/menu/ConduitMenu.java +++ b/src/conduits/java/com/enderio/conduits/common/menu/ConduitMenu.java @@ -1,13 +1,15 @@ package com.enderio.conduits.common.menu; import com.enderio.api.conduit.ConduitType; -import com.enderio.conduits.common.conduit.block.ConduitBlockEntity; -import com.enderio.conduits.common.conduit.ConduitBundle; import com.enderio.api.conduit.SlotType; +import com.enderio.conduits.common.conduit.ConduitBundle; import com.enderio.conduits.common.conduit.block.ConduitBlock; +import com.enderio.conduits.common.conduit.block.ConduitBlockEntity; import com.enderio.conduits.common.init.ConduitMenus; import com.enderio.conduits.common.init.EIOConduitTypes; +import com.enderio.conduits.common.network.ConduitSelectionPacket; import com.enderio.core.common.menu.SyncedMenu; +import com.enderio.core.common.network.CoreNetwork; import net.minecraft.core.Direction; import net.minecraft.network.FriendlyByteBuf; import net.minecraft.server.level.ServerPlayer; @@ -114,6 +116,7 @@ public ConduitType getConduitType() { public void setConduitType(ConduitType type) { this.type = type; + CoreNetwork.sendToServer(new ConduitSelectionPacket(EIOConduitTypes.getConduitId(type))); } public Direction getDirection() { diff --git a/src/conduits/java/com/enderio/conduits/common/network/ConduitNetwork.java b/src/conduits/java/com/enderio/conduits/common/network/ConduitNetwork.java index 7216b39d44..de6dd5e872 100644 --- a/src/conduits/java/com/enderio/conduits/common/network/ConduitNetwork.java +++ b/src/conduits/java/com/enderio/conduits/common/network/ConduitNetwork.java @@ -9,6 +9,7 @@ public static void register() { CoreNetwork.registerPacket(new CountFilterPacket.Handler(), CountFilterPacket.class); CoreNetwork.registerPacket(new DoubleChannelPacket.Handler(), DoubleChannelPacket.class); CoreNetwork.registerPacket(new TimerFilterPacket.Handler(), TimerFilterPacket.class); + CoreNetwork.registerPacket(new ConduitSelectionPacket.Handler(), ConduitSelectionPacket.class); } } diff --git a/src/conduits/java/com/enderio/conduits/common/network/ConduitSelectionPacket.java b/src/conduits/java/com/enderio/conduits/common/network/ConduitSelectionPacket.java new file mode 100644 index 0000000000..d64f6a9ea5 --- /dev/null +++ b/src/conduits/java/com/enderio/conduits/common/network/ConduitSelectionPacket.java @@ -0,0 +1,51 @@ +package com.enderio.conduits.common.network; + +import com.enderio.conduits.common.init.EIOConduitTypes; +import com.enderio.conduits.common.menu.ConduitMenu; +import com.enderio.core.common.network.Packet; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraftforge.network.NetworkDirection; +import net.minecraftforge.network.NetworkEvent; + +import java.util.Optional; + +public record ConduitSelectionPacket(int type) implements Packet { + + public ConduitSelectionPacket(FriendlyByteBuf buf) { + this(buf.readInt()); + } + + @Override + public boolean isValid(NetworkEvent.Context context) { + return context.getSender() != null; + } + + @Override + public void handle(NetworkEvent.Context context) { + if (context.getSender().containerMenu instanceof ConduitMenu menu) { + menu.setConduitType(EIOConduitTypes.getById(this.type)); + } + } + + protected void write(FriendlyByteBuf writeInto) { + writeInto.writeInt(this.type); + } + + public static class Handler extends Packet.PacketHandler { + + @Override + public ConduitSelectionPacket fromNetwork(FriendlyByteBuf buf) { + return new ConduitSelectionPacket(buf); + } + + @Override + public void toNetwork(ConduitSelectionPacket packet, FriendlyByteBuf buf) { + packet.write(buf); + } + + @Override + public Optional getDirection() { + return Optional.of(NetworkDirection.PLAY_TO_SERVER); + } + } +} From 27da04fede9af068ac7f8522416c565c22b2715c Mon Sep 17 00:00:00 2001 From: ferriarnus <61201275+ferriarnus@users.noreply.github.com> Date: Tue, 25 Jun 2024 01:18:09 +0200 Subject: [PATCH 2/2] fix: make conduit upgrades only stack 1 --- .../conduits/common/conduit/block/ConduitBlockEntity.java | 2 +- .../java/com/enderio/conduits/common/menu/ConduitSlot.java | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/src/conduits/java/com/enderio/conduits/common/conduit/block/ConduitBlockEntity.java b/src/conduits/java/com/enderio/conduits/common/conduit/block/ConduitBlockEntity.java index 2b489c8280..3dd7d2d04c 100644 --- a/src/conduits/java/com/enderio/conduits/common/conduit/block/ConduitBlockEntity.java +++ b/src/conduits/java/com/enderio/conduits/common/conduit/block/ConduitBlockEntity.java @@ -650,7 +650,7 @@ public ItemStack extractItem(int slot, int amount, boolean simulate) { @Override public int getSlotLimit(int slot) { - return slot % 3 == 2 ? 64 : 1; + return 1; } @Override diff --git a/src/conduits/java/com/enderio/conduits/common/menu/ConduitSlot.java b/src/conduits/java/com/enderio/conduits/common/menu/ConduitSlot.java index d97fa853ad..2596ee3f7e 100644 --- a/src/conduits/java/com/enderio/conduits/common/menu/ConduitSlot.java +++ b/src/conduits/java/com/enderio/conduits/common/menu/ConduitSlot.java @@ -58,6 +58,11 @@ public void updateVisibilityPosition() { } } + @Override + public int getMaxStackSize(@NotNull ItemStack stack) { + return getMaxStackSize(); + } + private boolean isVisible() { return visibleDirection.get() == visibleForDirection && visibleType.get() == visibleForType