mod for the islanders smp
1package net.radsteve.islanders.mixin;
2
3import net.minecraft.entity.Entity;
4import net.minecraft.entity.damage.DamageSource;
5import net.minecraft.entity.decoration.ItemFrameEntity;
6import net.minecraft.entity.player.PlayerEntity;
7import net.minecraft.item.ItemStack;
8import net.minecraft.server.network.ServerPlayerEntity;
9import net.minecraft.server.world.ServerWorld;
10import net.minecraft.util.ActionResult;
11import net.minecraft.util.Hand;
12import net.radsteve.islanders.SpecialItem;
13import org.spongepowered.asm.mixin.Debug;
14import org.spongepowered.asm.mixin.Mixin;
15import org.spongepowered.asm.mixin.Shadow;
16import org.spongepowered.asm.mixin.injection.At;
17import org.spongepowered.asm.mixin.injection.Inject;
18import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
19
20@Mixin(ItemFrameEntity.class)
21@Debug(export = true)
22public abstract class ItemFrameEntityMixin {
23 @Shadow
24 public abstract ItemStack getHeldItemStack();
25
26 @Inject(method = "interact", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/decoration/ItemFrameEntity;setHeldItemStack(Lnet/minecraft/item/ItemStack;)V"))
27 private void islanders$interact$glowingEnable(PlayerEntity player, Hand hand, CallbackInfoReturnable<ActionResult> cir) {
28 final ItemStack stack = player.getStackInHand(hand);
29 final SpecialItem item = SpecialItem.Companion.find(stack);
30 if (item == null) {
31 return;
32 }
33
34 item.dropped((ServerPlayerEntity) player, true);
35
36 final Entity entity = Entity.class.cast(this);
37 entity.setGlowing(true);
38 entity.getWorld().getScoreboard().addScoreHolderToTeam(entity.getNameForScoreboard(), item.getTeam());
39 }
40
41 @Inject(method = "damage", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/decoration/ItemFrameEntity;dropHeldStack(Lnet/minecraft/server/world/ServerWorld;Lnet/minecraft/entity/Entity;Z)V"))
42 private void islanders$interact$glowingDisable(ServerWorld world, DamageSource source, float amount, CallbackInfoReturnable<Boolean> cir) {
43 final Entity entity = Entity.class.cast(this);
44 final ItemStack stack = getHeldItemStack();
45
46 final SpecialItem item = SpecialItem.Companion.find(stack);
47 if (item == null) {
48 return;
49 }
50
51 entity.setGlowing(false);
52 }
53}