final.ckpt Posted March 29 Posted March 29 Hello, I'm trying to modify the effects of native enchantments for bows and arrows in Minecraft. After using a decompilation tool, I found that the specific implementations of native bow and arrow enchantments (including `ArrowDamageEnchantment`, `ArrowKnockbackEnchantment`, `ArrowFireEnchantment`, `ArrowInfiniteEnchantment`, `ArrowPiercingEnchantment`) do not contain any information about the enchantment effects (such as the `getDamageProtection` function for `ProtectionEnchantment`, `getDamageBonus` function for `DamageEnchantment`, etc.). Upon searching for the base class of arrows, `AbstractArrow`, I found a function named setEnchantmentEffectsFromEntity`, which seems to be used to retrieve the enchantment levels of the tool held by a `LivingEntity` and calculate the specific values of the enchantment effects. However, after testing with the following code, I found that this function is not being called: @Mixin(AbstractArrow.class) public class ModifyArrowEnchantmentEffects { private static final Logger LOGGER = LogUtils.getLogger(); @Inject( method = "setEnchantmentEffectsFromEntity", at = @At("HEAD") ) private void logArrowEnchantmentEffectsFromEntity(CallbackInfo ci) { LOGGER.info("Arrow enchantment effects from entity"); } } Upon further investigation, I found that within the onHitEntity method, there are several lines of code: if (!this.level().isClientSide && entity1 instanceof LivingEntity) { EnchantmentHelper.doPostHurtEffects(livingentity, entity1); EnchantmentHelper.doPostDamageEffects((LivingEntity)entity1, livingentity); } These lines of code actually call the doPostHurt and doPostAttack methods of each enchantment in the enchantment list. However, this leads back to the issue because native bow and arrow enchantments do not implement these functions. Although their base class defines the functions, they are empty. At this point, I'm completely stumped and seeking assistance. Thank you. Quote
perromercenary00 Posted April 1 Posted April 1 sound like thing for arrow loose event @SubscribeEvent public static void ArrowLoose(ArrowLooseEvent event) { System.out.println("\n\n\n### ArrowLoose "); Player shooter = event.getEntity(); String sshooter = (shooter != null)? shooter.getDisplayName().getString() : "null"; ItemStack bow = event.getBow(); if( bow != null ){ bow.enchant( Enchantments.FLAMING_ARROWS, 3 ); System.out.println("### by " + sshooter ); System.out.println("### whit " + bow.getDisplayName().getString() ); } } this ones fires up before the arrow is released and for some reason dont works whit mi custom bows Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.