diff --git a/src/main/java/net/mcreator/target/entity/GunGrenadeEntity.java b/src/main/java/net/mcreator/target/entity/GunGrenadeEntity.java index 4a7fc2919..6f17c512d 100644 --- a/src/main/java/net/mcreator/target/entity/GunGrenadeEntity.java +++ b/src/main/java/net/mcreator/target/entity/GunGrenadeEntity.java @@ -19,6 +19,7 @@ import net.minecraft.sounds.SoundSource; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.LivingEntity; +import net.minecraft.world.entity.monster.Monster; import net.minecraft.world.entity.projectile.ThrowableItemProjectile; import net.minecraft.world.item.Item; import net.minecraft.world.level.Explosion; @@ -34,6 +35,8 @@ import net.minecraftforge.network.PlayMessages; import java.util.Optional; public class GunGrenadeEntity extends ThrowableItemProjectile { + + private int monster_multiple = 0; private float damage = 5f; public GunGrenadeEntity(EntityType type, Level world) { @@ -44,9 +47,10 @@ public class GunGrenadeEntity extends ThrowableItemProjectile { super(type, entity, world); } - public GunGrenadeEntity(LivingEntity entity, Level level, float damage) { + public GunGrenadeEntity(LivingEntity entity, Level level, float damage, int monster_multiple) { super(TargetModEntities.GUN_GRENADE.get(), entity, level); this.damage = damage; + this.monster_multiple = monster_multiple; } public GunGrenadeEntity(PlayMessages.SpawnEntity spawnEntity, Level level) { @@ -65,6 +69,7 @@ public class GunGrenadeEntity extends ThrowableItemProjectile { @Override protected void onHitEntity(EntityHitResult result) { + float m_multiple = (1 + 0.4f * this.monster_multiple); Entity entity = result.getEntity(); if (this.getOwner() instanceof LivingEntity living) { if (!living.level().isClientSide() && living instanceof ServerPlayer player) { @@ -122,9 +127,17 @@ public class GunGrenadeEntity extends ThrowableItemProjectile { } if (headshot) { - entity.hurt(TargetModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), this.damage * 2f); + if (entity instanceof Monster monster) { + monster.hurt(TargetModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), this.damage * 2f * m_multiple); + } else { + entity.hurt(TargetModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), this.damage * 2f); + } } else { - entity.hurt(TargetModDamageTypes.causeGunFireDamage(this.level().registryAccess(), this, this.getOwner()), this.damage); + if (entity instanceof Monster monster) { + monster.hurt(TargetModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), this.damage * m_multiple); + } else { + entity.hurt(TargetModDamageTypes.causeGunFireHeadshotDamage(this.level().registryAccess(), this, this.getOwner()), this.damage); + } } this.discard(); diff --git a/src/main/java/net/mcreator/target/network/message/FireMessage.java b/src/main/java/net/mcreator/target/network/message/FireMessage.java index bbe30192d..a35fcb981 100644 --- a/src/main/java/net/mcreator/target/network/message/FireMessage.java +++ b/src/main/java/net/mcreator/target/network/message/FireMessage.java @@ -2,6 +2,7 @@ package net.mcreator.target.network.message; import net.mcreator.target.entity.BocekArrowEntity; import net.mcreator.target.entity.ProjectileEntity; +import net.mcreator.target.init.TargetModEnchantments; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; import net.mcreator.target.network.TargetModVariables; @@ -15,6 +16,7 @@ import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.AbstractArrow; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; +import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.level.Level; import net.minecraftforge.network.NetworkEvent; @@ -146,6 +148,7 @@ public class FireMessage { double damage; float headshot = (float) tag.getDouble("headshot"); float velocity = 4 * (float) tag.getDouble("speed"); + int monster_multiple = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.MONSTER_HUNTER.get(), heldItem); var projectile = new ProjectileEntity(player.level()) .shooter(player) @@ -153,6 +156,9 @@ public class FireMessage { if (tag.getBoolean("beast")) { projectile.beast(); } + + projectile.monster_multiple(monster_multiple); + projectile.setPos(player.getX() - 0.1 * player.getLookAngle().x, player.getEyeY() - 0.1 - 0.1 * player.getLookAngle().y, player.getZ() + -0.1 * player.getLookAngle().z); damage = 0.008333333 * tag.getDouble("damage") * tag.getDouble("speed") * tag.getDouble("damageadd"); diff --git a/src/main/java/net/mcreator/target/procedures/M79fireProcedure.java b/src/main/java/net/mcreator/target/procedures/M79fireProcedure.java index e9542d410..47091f8bf 100644 --- a/src/main/java/net/mcreator/target/procedures/M79fireProcedure.java +++ b/src/main/java/net/mcreator/target/procedures/M79fireProcedure.java @@ -2,6 +2,7 @@ package net.mcreator.target.procedures; import net.mcreator.target.entity.GunGrenadeEntity; import net.mcreator.target.init.TargetModAttributes; +import net.mcreator.target.init.TargetModEnchantments; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; import net.mcreator.target.network.TargetModVariables; @@ -14,6 +15,7 @@ import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraft.world.level.Level; // TODO 内联这个类 @@ -33,7 +35,9 @@ public class M79fireProcedure { Level level = entity.level(); if (!level.isClientSide()) { - GunGrenadeEntity gunGrenadeEntity = new GunGrenadeEntity(player, level, (float) stack.getOrCreateTag().getDouble("damage")); + + int monster_multiple = EnchantmentHelper.getTagEnchantmentLevel(TargetModEnchantments.MONSTER_HUNTER.get(), stack); + GunGrenadeEntity gunGrenadeEntity = new GunGrenadeEntity(player, level, (float) stack.getOrCreateTag().getDouble("damage"), monster_multiple); gunGrenadeEntity.setPos(entity.getX(), entity.getEyeY() - 0.1, entity.getZ()); gunGrenadeEntity.shoot(entity.getLookAngle().x, entity.getLookAngle().y, entity.getLookAngle().z, (float) stack.getOrCreateTag().getDouble("velocity"), diff --git a/src/main/java/net/mcreator/target/tools/EnchantmentCategoryTool.java b/src/main/java/net/mcreator/target/tools/EnchantmentCategoryTool.java index e25fd8977..8bffdcccc 100644 --- a/src/main/java/net/mcreator/target/tools/EnchantmentCategoryTool.java +++ b/src/main/java/net/mcreator/target/tools/EnchantmentCategoryTool.java @@ -9,3 +9,4 @@ public class EnchantmentCategoryTool { public static final EnchantmentCategory GUN = EnchantmentCategory.create("target:gun", item -> item instanceof GunItem && !(item instanceof Taser)); } +