Skip to content

Commit

Permalink
Fix #72 in Brass Depositors
Browse files Browse the repository at this point in the history
  • Loading branch information
IThundxr committed May 26, 2024
1 parent 7ed81fe commit 77d95dd
Show file tree
Hide file tree
Showing 8 changed files with 38 additions and 25 deletions.
3 changes: 1 addition & 2 deletions changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,7 @@
Numismatics 1.0.7
------------------------------------------------------
Fixes
- example

- Fix coins stacked above 127 visually disappearing on the client in Brass Depositors
------------------------------------------------------
Numismatics 1.0.6
------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
package dev.ithundxr.createnumismatics.content.vendor;
package dev.ithundxr.createnumismatics.content.backend;

import dev.ithundxr.createnumismatics.registry.NumismaticsPackets;
import dev.ithundxr.createnumismatics.registry.packets.VendorContainerSetContentPacket;
import dev.ithundxr.createnumismatics.registry.packets.VendorContainerSetSlotPacket;
import dev.ithundxr.createnumismatics.registry.packets.BigStackSizeContainerSetContentPacket;
import dev.ithundxr.createnumismatics.registry.packets.BigStackSizeContainerSetSlotPacket;
import net.minecraft.core.NonNullList;
import net.minecraft.network.protocol.game.ClientboundContainerSetDataPacket;
import net.minecraft.network.protocol.game.ClientboundContainerSetSlotPacket;
Expand All @@ -12,16 +12,16 @@
import net.minecraft.world.item.ItemStack;
import org.jetbrains.annotations.NotNull;

public class VendorContainerSynchronizer implements ContainerSynchronizer {
public class BigStackSizeContainerSynchronizer implements ContainerSynchronizer {
private final ServerPlayer serverPlayer;

public VendorContainerSynchronizer(ServerPlayer serverPlayer) {
public BigStackSizeContainerSynchronizer(ServerPlayer serverPlayer) {
this.serverPlayer = serverPlayer;
}

@Override
public void sendInitialData(AbstractContainerMenu container, @NotNull NonNullList<ItemStack> items, @NotNull ItemStack carriedItem, int[] initialData) {
NumismaticsPackets.PACKETS.sendTo(serverPlayer, new VendorContainerSetContentPacket(container.containerId, container.incrementStateId(), items, carriedItem));
NumismaticsPackets.PACKETS.sendTo(serverPlayer, new BigStackSizeContainerSetContentPacket(container.containerId, container.incrementStateId(), items, carriedItem));

for (int i = 0; i < initialData.length; ++i) {
sendDataChange(container, i, initialData[i]);
Expand All @@ -30,7 +30,7 @@ public void sendInitialData(AbstractContainerMenu container, @NotNull NonNullLis

@Override
public void sendSlotChange(AbstractContainerMenu container, int slot, ItemStack itemStack) {
NumismaticsPackets.PACKETS.sendTo(serverPlayer, new VendorContainerSetSlotPacket(container.containerId, container.incrementStateId(), slot, itemStack));
NumismaticsPackets.PACKETS.sendTo(serverPlayer, new BigStackSizeContainerSetSlotPacket(container.containerId, container.incrementStateId(), slot, itemStack));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package dev.ithundxr.createnumismatics.content.depositor;

import com.simibubi.create.foundation.gui.menu.MenuBase;
import dev.ithundxr.createnumismatics.content.backend.BigStackSizeContainerSynchronizer;
import dev.ithundxr.createnumismatics.content.backend.Coin;
import dev.ithundxr.createnumismatics.content.bank.CardSlot;
import dev.ithundxr.createnumismatics.content.coins.CoinDisplaySlot;
Expand All @@ -10,9 +11,11 @@
import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientLevel;
import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.entity.player.Inventory;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.inventory.ClickType;
import net.minecraft.world.inventory.ContainerSynchronizer;
import net.minecraft.world.inventory.MenuType;
import net.minecraft.world.inventory.Slot;
import net.minecraft.world.item.ItemStack;
Expand Down Expand Up @@ -130,4 +133,14 @@ public void clicked(int slotId, int button, @NotNull ClickType clickType, @NotNu
}
return ItemStack.EMPTY;
}

@Override
public void setSynchronizer(@NotNull ContainerSynchronizer synchronizer) {
if (player instanceof ServerPlayer serverPlayer) {
super.setSynchronizer(new BigStackSizeContainerSynchronizer(serverPlayer));
return;
}

super.setSynchronizer(synchronizer);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import com.simibubi.create.foundation.gui.menu.MenuBase;
import dev.ithundxr.createnumismatics.content.backend.Coin;
import dev.ithundxr.createnumismatics.content.backend.BigStackSizeContainerSynchronizer;
import dev.ithundxr.createnumismatics.content.bank.CardSlot;
import dev.ithundxr.createnumismatics.content.coins.CoinDisplaySlot;
import dev.ithundxr.createnumismatics.content.coins.CoinItem;
Expand Down Expand Up @@ -164,7 +165,7 @@ public void clicked(int slotId, int button, @NotNull ClickType clickType, @NotNu
@Override
public void setSynchronizer(@NotNull ContainerSynchronizer synchronizer) {
if (player instanceof ServerPlayer serverPlayer) {
super.setSynchronizer(new VendorContainerSynchronizer(serverPlayer));
super.setSynchronizer(new BigStackSizeContainerSynchronizer(serverPlayer));
return;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import dev.ithundxr.createnumismatics.registry.packets.*;

public class NumismaticsPackets {
public static final PacketSet PACKETS = PacketSet.builder(Numismatics.MOD_ID, 2) // increment version on changes
public static final PacketSet PACKETS = PacketSet.builder(Numismatics.MOD_ID, 3) // increment version on changes

.c2s(SliderStylePriceConfigurationPacket.class, SliderStylePriceConfigurationPacket::new)
.c2s(BlazeBankerEditPacket.class, BlazeBankerEditPacket::new)
Expand All @@ -18,8 +18,8 @@ public class NumismaticsPackets {
.s2c(BankAccountLabelPacket.class, BankAccountLabelPacket::new)
.s2c(VarIntContainerSetDataPacket.class, VarIntContainerSetDataPacket::new)

.s2c(VendorContainerSetSlotPacket.class, VendorContainerSetSlotPacket::new)
.s2c(VendorContainerSetContentPacket.class, VendorContainerSetContentPacket::new)
.s2c(BigStackSizeContainerSetSlotPacket.class, BigStackSizeContainerSetSlotPacket::new)
.s2c(BigStackSizeContainerSetContentPacket.class, BigStackSizeContainerSetContentPacket::new)

.build();
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@

import java.util.List;

public class VendorContainerSetContentPacket implements S2CPacket {
public class BigStackSizeContainerSetContentPacket implements S2CPacket {
private final int containerId;
private final int stateId;
private final List<ItemStack> items;
private final ItemStack carriedItem;

public VendorContainerSetContentPacket(int containerId, int stateId, List<ItemStack> items, ItemStack carriedItem) {
public BigStackSizeContainerSetContentPacket(int containerId, int stateId, List<ItemStack> items, ItemStack carriedItem) {
this.containerId = containerId;
this.stateId = stateId;
this.items = NonNullList.withSize(items.size(), ItemStack.EMPTY);
Expand All @@ -31,18 +31,18 @@ public VendorContainerSetContentPacket(int containerId, int stateId, List<ItemSt
this.carriedItem = carriedItem;
}

public VendorContainerSetContentPacket(FriendlyByteBuf buffer) {
public BigStackSizeContainerSetContentPacket(FriendlyByteBuf buffer) {
containerId = buffer.readUnsignedByte();
stateId = buffer.readVarInt();
items = buffer.readCollection(NonNullList::createWithCapacity, PacketUtils::readHighCountItem);
items = buffer.readCollection(NonNullList::createWithCapacity, PacketUtils::readBigStackSizeItem);
carriedItem = buffer.readItem();
}

@Override
public void write(FriendlyByteBuf buffer) {
buffer.writeByte(containerId);
buffer.writeVarInt(stateId);
buffer.writeCollection(items, PacketUtils::writeHighCountItem);
buffer.writeCollection(items, PacketUtils::writeBigStackSizeItem);
buffer.writeItem(carriedItem);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,32 +10,32 @@
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.ItemStack;

public class VendorContainerSetSlotPacket implements S2CPacket {
public class BigStackSizeContainerSetSlotPacket implements S2CPacket {
private final int containerId;
private final int stateId;
private final int slot;
private final ItemStack itemStack;

public VendorContainerSetSlotPacket(int containerId, int stateId, int slot, ItemStack itemStack) {
public BigStackSizeContainerSetSlotPacket(int containerId, int stateId, int slot, ItemStack itemStack) {
this.containerId = containerId;
this.stateId = stateId;
this.slot = slot;
this.itemStack = itemStack;
}

public VendorContainerSetSlotPacket(FriendlyByteBuf buffer) {
public BigStackSizeContainerSetSlotPacket(FriendlyByteBuf buffer) {
containerId = buffer.readUnsignedByte();
stateId = buffer.readVarInt();
slot = buffer.readShort();
itemStack = PacketUtils.readHighCountItem(buffer);
itemStack = PacketUtils.readBigStackSizeItem(buffer);
}

@Override
public void write(FriendlyByteBuf buffer) {
buffer.writeByte(containerId);
buffer.writeVarInt(stateId);
buffer.writeShort(slot);
PacketUtils.writeHighCountItem(buffer, itemStack);
PacketUtils.writeBigStackSizeItem(buffer, itemStack);
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ public class PacketUtils {
/**
* Reads an item without the 127 count limit
*/
public static ItemStack readHighCountItem(FriendlyByteBuf buffer) {
public static ItemStack readBigStackSizeItem(FriendlyByteBuf buffer) {
if (!buffer.readBoolean()) {
return ItemStack.EMPTY;
} else {
Expand All @@ -26,7 +26,7 @@ public static ItemStack readHighCountItem(FriendlyByteBuf buffer) {
/**
* Writes an item without the 127 count limit
*/
public static void writeHighCountItem(FriendlyByteBuf buffer, ItemStack itemStack) {
public static void writeBigStackSizeItem(FriendlyByteBuf buffer, ItemStack itemStack) {
if (itemStack.isEmpty()) {
buffer.writeBoolean(false);
} else {
Expand Down

0 comments on commit 77d95dd

Please sign in to comment.