mod for the islanders smp
1package net.radsteve.islanders.mixin;
2
3import com.llamalad7.mixinextras.sugar.Local;
4import net.minecraft.entity.ItemEntity;
5import net.minecraft.entity.LivingEntity;
6import net.minecraft.item.ItemStack;
7import net.minecraft.server.network.ServerPlayerEntity;
8import net.radsteve.islanders.SpecialItem;
9import net.radsteve.islanders.event.ItemDropCallback;
10import org.spongepowered.asm.mixin.Mixin;
11import org.spongepowered.asm.mixin.injection.At;
12import org.spongepowered.asm.mixin.injection.Inject;
13import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
14
15@Mixin(LivingEntity.class)
16public abstract class LivingEntityMixin {
17 @Inject(method = "dropItem", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/World;spawnEntity(Lnet/minecraft/entity/Entity;)Z"))
18 private void islanders$dropItem(ItemStack stack, boolean dropAtSelf, boolean retainOwnership, CallbackInfoReturnable<ItemEntity> cir, @Local ItemEntity entity) {
19 if (!(LivingEntity.class.cast(this) instanceof final ServerPlayerEntity player)) {
20 return;
21 }
22
23 final SpecialItem item = SpecialItem.Companion.find(stack);
24
25 if (item != null) {
26 entity.setGlowing(true);
27 entity.setNeverDespawn();
28 entity.getWorld().getScoreboard().addScoreHolderToTeam(entity.getNameForScoreboard(), item.getTeam());
29 }
30
31 ItemDropCallback.Companion.getEVENT().invoker().onDrop(stack, entity, player);
32 }
33}