Skip to content

Commit 384136e

Browse files
committed
fix #366
1 parent c967cb8 commit 384136e

File tree

7 files changed

+22
-17
lines changed

7 files changed

+22
-17
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,3 @@
11
- Update zh_cn localisation (#363)
22
- PT_BR localisation (#364)
3+
- fix dupe bug with restock when items turn into different items on use (#366)

build.gradle.kts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,6 +145,7 @@ neoForge {
145145
}
146146
create("server") {
147147
server()
148+
programArguments.add("nogui")
148149
}
149150

150151
create("guide") {

src/main/java/de/mari_023/ae2wtlib/AE2wtlibEvents.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,10 +31,11 @@ public class AE2wtlibEvents {
3131
*
3232
* @param player The ServerPlayer
3333
* @param item The ItemStack that should be restocked
34-
* @param count Current count of the item
34+
* @param now The ItemStack that is now there
3535
* @param setStack A callback for setting the final modified item stack
3636
*/
37-
public static void restock(ServerPlayer player, ItemStack item, int count, Consumer<ItemStack> setStack) {
37+
public static void restock(ServerPlayer player, ItemStack item, ItemStack now, Consumer<ItemStack> setStack) {
38+
int count = now.getCount();
3839
if (player.isCreative())
3940
return;
4041
if (item.isEmpty())
@@ -57,6 +58,8 @@ public static void restock(ServerPlayer player, ItemStack item, int count, Consu
5758
int toAdd = item.getMaxStackSize() - count;
5859
if (toAdd == 0)
5960
return;
61+
if (!now.isEmpty() && !ItemStack.isSameItemSameComponents(item, now))
62+
return;
6063

6164
long changed;
6265
if (toAdd > 0)
@@ -76,7 +79,7 @@ public static void restock(ServerPlayer player, ItemStack item, int count, Consu
7679
if (player.getInventory().offhand.contains(item))
7780
slot = Inventory.INVENTORY_SIZE;
7881
}
79-
PacketDistributor.sendToPlayer(player, new UpdateRestockPacket(slot, item.getCount()));
82+
PacketDistributor.sendToPlayer(player, new UpdateRestockPacket(slot, item));
8083
}
8184

8285
/**

src/main/java/de/mari_023/ae2wtlib/AE2wtlibForge.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ public static void handle(LivingEntityUseItemEvent.Finish event) {
8686
if (!(event.getEntity() instanceof ServerPlayer player))
8787
return;
8888

89-
AE2wtlibEvents.restock(player, event.getItem(), event.getResultStack().getCount(), event::setResultStack);
89+
AE2wtlibEvents.restock(player, event.getItem(), event.getResultStack(), event::setResultStack);
9090
}
9191

9292
@SubscribeEvent(priority = EventPriority.LOWEST)
@@ -95,7 +95,7 @@ public static void handle(PlayerInteractEvent.RightClickBlock event) {
9595
return;
9696
var item = event.getItemStack();
9797

98-
AE2wtlibEvents.restock(player, item, item.getCount(), (stack -> player.setItemInHand(event.getHand(), stack)));
98+
AE2wtlibEvents.restock(player, item, item, (stack -> player.setItemInHand(event.getHand(), stack)));
9999
}
100100

101101
@SubscribeEvent(priority = EventPriority.LOWEST)
@@ -104,7 +104,7 @@ public static void handle(PlayerInteractEvent.EntityInteractSpecific event) {
104104
return;
105105
var item = event.getItemStack();
106106

107-
AE2wtlibEvents.restock(player, item, item.getCount(), (stack -> player.setItemInHand(event.getHand(), stack)));
107+
AE2wtlibEvents.restock(player, item, item, (stack -> player.setItemInHand(event.getHand(), stack)));
108108
}
109109

110110
@SubscribeEvent(priority = EventPriority.LOWEST)
@@ -130,7 +130,7 @@ public static void handle(ArrowNockEvent event) {
130130
if (!(event.getEntity() instanceof ServerPlayer player))
131131
return;
132132
ItemStack projectile = player.getProjectile(event.getBow());
133-
AE2wtlibEvents.restock(player, projectile, projectile.getCount(), (itemStack) -> {
133+
AE2wtlibEvents.restock(player, projectile, projectile, (itemStack) -> {
134134
});
135135
}
136136

@@ -141,7 +141,7 @@ public static void handle(ArrowLooseEvent event) {
141141
if (!(event.getEntity() instanceof ServerPlayer player))
142142
return;
143143
ItemStack projectile = player.getProjectile(event.getBow());
144-
AE2wtlibEvents.restock(player, projectile, projectile.getCount(), (itemStack) -> {
144+
AE2wtlibEvents.restock(player, projectile, projectile, (itemStack) -> {
145145
});
146146
}
147147

src/main/java/de/mari_023/ae2wtlib/mixin/ServerPlayerGameModeMixin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class ServerPlayerGameModeMixin {
2020
@Inject(method = "useItemOn", at = @At(value = "RETURN"))
2121
private static void handle(ServerPlayer player, Level level, ItemStack original, InteractionHand hand,
2222
BlockHitResult hitResult, CallbackInfoReturnable<InteractionResult> cir) {
23-
AE2wtlibEvents.restock(player, original.copy(), player.getItemInHand(hand).getCount(),
23+
AE2wtlibEvents.restock(player, original.copy(), player.getItemInHand(hand),
2424
(stack -> player.setItemInHand(hand, stack)));
2525
}
2626
}

src/main/java/de/mari_023/ae2wtlib/mixin/ServerPlayerMixin.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public void restockDrop(boolean pDropStack, CallbackInfoReturnable<Boolean> cir,
2828
if (!cir.getReturnValue() || item.isEmpty())
2929
return;
3030

31-
AE2wtlibEvents.restock((ServerPlayer) (Object) this, item, item.getCount(),
31+
AE2wtlibEvents.restock((ServerPlayer) (Object) this, item, item,
3232
(itemStack) -> getInventory().setItem(getInventory().selected, itemStack));
3333
}
3434
}

src/main/java/de/mari_023/ae2wtlib/networking/UpdateRestockPacket.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,29 @@
11
package de.mari_023.ae2wtlib.networking;
22

3-
import io.netty.buffer.ByteBuf;
4-
3+
import net.minecraft.network.RegistryFriendlyByteBuf;
54
import net.minecraft.network.codec.ByteBufCodecs;
65
import net.minecraft.network.codec.StreamCodec;
76
import net.minecraft.network.protocol.common.custom.CustomPacketPayload;
87
import net.minecraft.world.entity.player.Inventory;
98
import net.minecraft.world.entity.player.Player;
9+
import net.minecraft.world.item.ItemStack;
1010

1111
import de.mari_023.ae2wtlib.api.AE2wtlibAPI;
1212

13-
public record UpdateRestockPacket(int slot, int amount) implements AE2wtlibPacket {
13+
public record UpdateRestockPacket(int slot, ItemStack itemStack) implements AE2wtlibPacket {
1414
public static final Type<UpdateRestockPacket> ID = new Type<>(AE2wtlibAPI.id("update_restock"));
15-
public static final StreamCodec<ByteBuf, UpdateRestockPacket> STREAM_CODEC = StreamCodec.composite(
15+
public static final StreamCodec<RegistryFriendlyByteBuf, UpdateRestockPacket> STREAM_CODEC = StreamCodec.composite(
1616
ByteBufCodecs.INT, UpdateRestockPacket::slot,
17-
ByteBufCodecs.INT, UpdateRestockPacket::amount,
17+
ItemStack.STREAM_CODEC, UpdateRestockPacket::itemStack,
1818
UpdateRestockPacket::new);
1919

2020
@Override
2121
public void processPacketData(Player player) {
2222
switch (slot()) {
23-
case Inventory.INVENTORY_SIZE -> player.getInventory().offhand.getFirst().setCount(amount());
23+
case Inventory.INVENTORY_SIZE -> player.getInventory().offhand.set(0, itemStack());
2424
case -1 -> {
2525
}
26-
default -> player.getInventory().getItem(slot()).setCount(amount());
26+
default -> player.getInventory().setItem(slot(), itemStack());
2727
}
2828
}
2929

0 commit comments

Comments
 (0)