mod for the islanders smp
at master 53 lines 2.2 kB view raw
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}