Skip to content

Commit 2829beb

Browse files
committed
Improve item pickup logging
1 parent cbd0a0a commit 2829beb

File tree

2 files changed

+34
-14
lines changed

2 files changed

+34
-14
lines changed

libs.versions.toml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
[versions]
2-
minecraft = "1.21.10-rc1"
3-
yarn-mappings = "1.21.10-rc1+build.1"
2+
minecraft = "1.21.10"
3+
yarn-mappings = "1.21.10+build.2"
44
fabric-loader = "0.17.2"
55

6-
fabric-api = "0.134.1+1.21.10"
6+
fabric-api = "0.135.0+1.21.10"
77

88
# Kotlin
99
kotlin = "2.2.0"
1010
# Also modrinth version in gradle.properties
1111
fabric-kotlin = "1.13.4+kotlin.2.2.0"
1212

13-
fabric-permissions = "0.4.1"
13+
fabric-permissions = "0.5.0"
1414
translations = "2.5.2+1.21.9-pre3"
1515

1616
exposed = "1.0.0-rc-2"
Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,47 @@
11
package com.github.quiltservertools.ledger.mixin.entities;
22

33
import com.github.quiltservertools.ledger.callbacks.ItemPickUpCallback;
4+
import com.llamalad7.mixinextras.sugar.Local;
5+
import com.llamalad7.mixinextras.sugar.Share;
6+
import com.llamalad7.mixinextras.sugar.ref.LocalRef;
7+
import net.minecraft.entity.Entity;
8+
import net.minecraft.entity.EntityType;
49
import net.minecraft.entity.ItemEntity;
510
import net.minecraft.entity.player.PlayerEntity;
11+
import net.minecraft.item.ItemStack;
12+
import net.minecraft.world.World;
613
import org.spongepowered.asm.mixin.Mixin;
7-
import org.spongepowered.asm.mixin.Unique;
14+
import org.spongepowered.asm.mixin.Shadow;
815
import org.spongepowered.asm.mixin.injection.At;
916
import org.spongepowered.asm.mixin.injection.Inject;
1017
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
1118

1219
@Mixin(ItemEntity.class)
13-
public abstract class ItemEntityMixin {
14-
@Unique
15-
private ItemEntity itemEntity;
20+
public abstract class ItemEntityMixin extends Entity {
21+
22+
@Shadow
23+
public abstract ItemStack getStack();
24+
25+
public ItemEntityMixin(EntityType<?> type, World world) {
26+
super(type, world);
27+
}
1628

1729
@Inject(method = "onPlayerCollision", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerInventory;insertStack(Lnet/minecraft/item/ItemStack;)Z"))
18-
private void storeEntity(PlayerEntity player, CallbackInfo ci) {
19-
itemEntity = (ItemEntity) (Object) this;
20-
itemEntity.copyFrom(itemEntity);
30+
public void storeItemStack(PlayerEntity player, CallbackInfo ci, @Local ItemStack itemStack, @Share("originalItemStack") LocalRef<ItemStack> originalItemStackRef) {
31+
originalItemStackRef.set(itemStack.copy());
2132
}
2233

23-
@Inject(method = "onPlayerCollision", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;sendPickup(Lnet/minecraft/entity/Entity;I)V"))
24-
private void logPlayerItemPickUp(PlayerEntity player, CallbackInfo ci) {
25-
ItemPickUpCallback.EVENT.invoker().pickUp(itemEntity, player);
34+
// insertStack modifies the ItemStack instance of the ItemEntity
35+
// The player may not be able to pick up all items from the stack
36+
@Inject(method = "onPlayerCollision", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerInventory;insertStack(Lnet/minecraft/item/ItemStack;)Z", shift = At.Shift.AFTER))
37+
private void logPlayerItemPickUp(PlayerEntity player, CallbackInfo ci, @Local ItemStack modifiedItemStack, @Share("originalItemStack") LocalRef<ItemStack> originalItemStackRef) {
38+
var originalItemStack = originalItemStackRef.get();
39+
40+
int modifiedCount = modifiedItemStack.getCount();
41+
int originalCount = originalItemStack.getCount();
42+
if (modifiedCount < originalCount) {
43+
ItemEntity itemEntityCopy = new ItemEntity(this.getEntityWorld(), this.getX(), this.getY(), this.getZ(), originalItemStackRef.get().copyWithCount(originalCount - modifiedCount));
44+
ItemPickUpCallback.EVENT.invoker().pickUp(itemEntityCopy, player);
45+
}
2646
}
2747
}

0 commit comments

Comments
 (0)