diff --git a/src/main/java/tobinio/realarrowtip/RealArrowTip.java b/src/main/java/tobinio/realarrowtip/RealArrowTip.java index 4f5a561..b134112 100644 --- a/src/main/java/tobinio/realarrowtip/RealArrowTip.java +++ b/src/main/java/tobinio/realarrowtip/RealArrowTip.java @@ -33,7 +33,6 @@ public class RealArrowTip implements ModInitializer { Item item = entity.getProjectileType(stack).getItem(); if (item == Items.TIPPED_ARROW) return 0.1f; - if (item == Items.SPECTRAL_ARROW) return 0.2f; return 0; diff --git a/src/main/java/tobinio/realarrowtip/mixin/BowItemMixin.java b/src/main/java/tobinio/realarrowtip/mixin/BowItemMixin.java new file mode 100644 index 0000000..38624bb --- /dev/null +++ b/src/main/java/tobinio/realarrowtip/mixin/BowItemMixin.java @@ -0,0 +1,23 @@ +package tobinio.realarrowtip.mixin; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +/** + * Created: 05/10/2023 + * + * @author Tobias Frischmann + */ +@Mixin (net.minecraft.item.BowItem.class) +public abstract class BowItemMixin extends ItemMixin { + + @Override + protected void useOnEntity(World world, LivingEntity user, ItemStack stack, int remainingUseTicks, + CallbackInfo ci) { + + stack.setHolder(user); + } +} diff --git a/src/main/java/tobinio/realarrowtip/mixin/ItemColorsMixin.java b/src/main/java/tobinio/realarrowtip/mixin/ItemColorsMixin.java index 4efa68f..0a221b1 100644 --- a/src/main/java/tobinio/realarrowtip/mixin/ItemColorsMixin.java +++ b/src/main/java/tobinio/realarrowtip/mixin/ItemColorsMixin.java @@ -5,17 +5,21 @@ import net.minecraft.client.MinecraftClient; import net.minecraft.client.color.block.BlockColors; import net.minecraft.client.color.item.ItemColors; import net.minecraft.client.network.ClientPlayerEntity; +import net.minecraft.entity.Entity; +import net.minecraft.entity.LivingEntity; import net.minecraft.item.*; import net.minecraft.potion.PotionUtil; 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; +import tobinio.realarrowtip.RealArrowTip; import java.util.Optional; /** * Created: 03/10/2023 + * * @author Tobias Frischmann */ @@ -26,21 +30,24 @@ public abstract class ItemColorsMixin { @Local ItemColors itemColors) { itemColors.register((stack, tintIndex) -> { - ClientPlayerEntity player = MinecraftClient.getInstance().player; + if (tintIndex != 1) return -1; - if (player == null || tintIndex != 1) return -1; + Entity holder = stack.getHolder(); - ItemStack projectileType = player.getProjectileType(stack); + if (holder instanceof LivingEntity livingEntity) { - if (!(projectileType.getItem() instanceof TippedArrowItem)) return -1; + ItemStack projectileType = livingEntity.getProjectileType(stack); - return PotionUtil.getColor(projectileType); + if (projectileType.isOf(Items.TIPPED_ARROW)) { + return PotionUtil.getColor(projectileType); + } + } + + return -1; }, Items.BOW); itemColors.register((stack, tintIndex) -> { - ClientPlayerEntity player = MinecraftClient.getInstance().player; - - if (player == null || tintIndex != 1) return -1; + if (tintIndex != 1) return -1; Optional tippedArrow = CrossbowItemInvoker.invokerGetProjectiles(stack) .stream() diff --git a/src/main/java/tobinio/realarrowtip/mixin/ItemMixin.java b/src/main/java/tobinio/realarrowtip/mixin/ItemMixin.java new file mode 100644 index 0000000..87c2d29 --- /dev/null +++ b/src/main/java/tobinio/realarrowtip/mixin/ItemMixin.java @@ -0,0 +1,30 @@ +package tobinio.realarrowtip.mixin; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.util.ActionResult; +import net.minecraft.util.Hand; +import net.minecraft.world.World; +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.CallbackInfo; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +/** + * Created: 05/10/2023 + * + * @author Tobias Frischmann + */ + +@Mixin (Item.class) +public class ItemMixin { + + @Inject (method = "usageTick", at = @At (value = "HEAD")) + protected void useOnEntity(World world, LivingEntity user, ItemStack stack, int remainingUseTicks, + CallbackInfo ci) { + + } +} diff --git a/src/main/resources/assets/real_arrow_tip/textures/item/bow_pulling_2_head_tipped.png b/src/main/resources/assets/real_arrow_tip/textures/item/bow_pulling_2_head_tipped.png index df76d6b2c45e5144b28baafaec7ab2bf8863c4e2..05b54bd8ed4e1bc7e8e04f8a9ff0d55822b452c8 100644 GIT binary patch delta 20 ccmbQpIFWIJC)Ys+2EK!gJ0@noofvEf07Z)jTmS$7 delta 20 bcmbQpIFWIJC)Xhc2EId#q8eTe6NBvlJY5CE diff --git a/src/main/resources/real-arrow-tip.mixins.json b/src/main/resources/real-arrow-tip.mixins.json index 4d072d0..77f889d 100644 --- a/src/main/resources/real-arrow-tip.mixins.json +++ b/src/main/resources/real-arrow-tip.mixins.json @@ -4,7 +4,9 @@ "package": "tobinio.realarrowtip.mixin", "compatibilityLevel": "JAVA_17", "mixins": [ - "CrossbowItemInvoker" + "BowItemMixin", + "CrossbowItemInvoker", + "ItemMixin" ], "client": [ "ArrowEntityRendererMixin",