package net.radsteve.islanders.mixin; import net.minecraft.entity.Entity; import net.minecraft.entity.damage.DamageSource; import net.minecraft.entity.decoration.ItemFrameEntity; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.item.ItemStack; import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.server.world.ServerWorld; import net.minecraft.util.ActionResult; import net.minecraft.util.Hand; import net.radsteve.islanders.SpecialItem; import org.spongepowered.asm.mixin.Debug; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Shadow; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; @Mixin(ItemFrameEntity.class) @Debug(export = true) public abstract class ItemFrameEntityMixin { @Shadow public abstract ItemStack getHeldItemStack(); @Inject(method = "interact", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/decoration/ItemFrameEntity;setHeldItemStack(Lnet/minecraft/item/ItemStack;)V")) private void islanders$interact$glowingEnable(PlayerEntity player, Hand hand, CallbackInfoReturnable cir) { final ItemStack stack = player.getStackInHand(hand); final SpecialItem item = SpecialItem.Companion.find(stack); if (item == null) { return; } item.dropped((ServerPlayerEntity) player, true); final Entity entity = Entity.class.cast(this); entity.setGlowing(true); entity.getWorld().getScoreboard().addScoreHolderToTeam(entity.getNameForScoreboard(), item.getTeam()); } @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")) private void islanders$interact$glowingDisable(ServerWorld world, DamageSource source, float amount, CallbackInfoReturnable cir) { final Entity entity = Entity.class.cast(this); final ItemStack stack = getHeldItemStack(); final SpecialItem item = SpecialItem.Companion.find(stack); if (item == null) { return; } entity.setGlowing(false); } }