package net.radsteve.islanders.mixin; import com.llamalad7.mixinextras.sugar.Local; import net.minecraft.entity.ItemEntity; import net.minecraft.entity.LivingEntity; import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; import net.radsteve.islanders.SpecialItem; import net.radsteve.islanders.event.ItemDropCallback; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(LivingEntity.class) public abstract class LivingEntityMixin { @Inject(method = "dropItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;spawnEntity(Lnet/minecraft/entity/Entity;)Z")) private void islanders$dropItem(ItemStack stack, boolean dropAtSelf, boolean retainOwnership, CallbackInfoReturnable cir, @Local ItemEntity entity) { if (!(LivingEntity.class.cast(this) instanceof final ServerPlayerEntity player)) { return; } final SpecialItem item = SpecialItem.Companion.find(stack); if (item != null) { entity.setGlowing(true); entity.setNeverDespawn(); entity.getWorld().getScoreboard().addScoreHolderToTeam(entity.getNameForScoreboard(), item.getTeam()); } ItemDropCallback.Companion.getEVENT().invoker().onDrop(stack, entity, player); } }