From b6dee625761d249e0435eb85be3a7229f7d47ecc Mon Sep 17 00:00:00 2001 From: Atsuihsio <842960157@qq.com> Date: Mon, 10 Jun 2024 00:10:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E7=94=B5=E5=8E=8B=E8=BF=87?= =?UTF-8?q?=E8=BD=BD=E9=99=84=E9=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/net/mcreator/target/TargetMod.java | 3 +- .../enchantment/VoltOverloadEnchantment.java | 36 +++++++++++++++++++ .../entity/TaserBulletProjectileEntity.java | 18 ++++++++-- .../target/init/TargetModEnchantments.java | 16 +++++++++ .../net/mcreator/target/item/gun/Taser.java | 19 ++++++++++ .../target/mobeffect/ShockMobEffect.java | 4 +-- .../target/procedures/TaserfireProcedure.java | 7 +++- .../target/tools/EnchantmentCategoryTool.java | 9 +++++ .../resources/assets/target/lang/en_us.json | 3 ++ .../resources/assets/target/lang/zh_cn.json | 3 ++ 10 files changed, 110 insertions(+), 8 deletions(-) create mode 100644 src/main/java/net/mcreator/target/enchantment/VoltOverloadEnchantment.java create mode 100644 src/main/java/net/mcreator/target/init/TargetModEnchantments.java create mode 100644 src/main/java/net/mcreator/target/tools/EnchantmentCategoryTool.java diff --git a/src/main/java/net/mcreator/target/TargetMod.java b/src/main/java/net/mcreator/target/TargetMod.java index a3b1311f4..1786b0b31 100644 --- a/src/main/java/net/mcreator/target/TargetMod.java +++ b/src/main/java/net/mcreator/target/TargetMod.java @@ -9,8 +9,6 @@ import net.minecraft.world.item.Items; import net.minecraft.world.item.alchemy.PotionUtils; import net.minecraft.world.item.alchemy.Potions; import net.minecraft.world.item.crafting.Ingredient; -import net.minecraft.world.level.block.Blocks; -import net.minecraft.world.level.block.FlowerPotBlock; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.common.brewing.BrewingRecipeRegistry; import net.minecraftforge.event.TickEvent; @@ -51,6 +49,7 @@ public class TargetMod { TargetModParticleTypes.REGISTRY.register(bus); TargetModPotion.POTIONS.register(bus); TargetModMenus.REGISTRY.register(bus); + TargetModEnchantments.REGISTRY.register(bus); bus.addListener(this::onCommonSetup); diff --git a/src/main/java/net/mcreator/target/enchantment/VoltOverloadEnchantment.java b/src/main/java/net/mcreator/target/enchantment/VoltOverloadEnchantment.java new file mode 100644 index 000000000..232b14209 --- /dev/null +++ b/src/main/java/net/mcreator/target/enchantment/VoltOverloadEnchantment.java @@ -0,0 +1,36 @@ + +package net.mcreator.target.enchantment; + +import net.mcreator.target.tools.EnchantmentCategoryTool; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.crafting.Ingredient; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.entity.EquipmentSlot; + +import net.mcreator.target.init.TargetModItems; + +public class VoltOverloadEnchantment extends Enchantment { + public VoltOverloadEnchantment(EquipmentSlot... slots) { + super(Enchantment.Rarity.UNCOMMON, EnchantmentCategoryTool.TASER, slots); + } + + @Override + public int getMinCost(int pLevel) { + return 8 + 6 * pLevel; + } + + @Override + public int getMaxCost(int pLevel) { + return super.getMaxCost(pLevel) + 20; + } + + @Override + public int getMaxLevel() { + return 5; + } + + @Override + public boolean canApplyAtEnchantingTable(ItemStack itemstack) { + return Ingredient.of(new ItemStack(TargetModItems.TASER.get())).test(itemstack); + } +} diff --git a/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java b/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java index a7066d6c8..aa8367c5f 100644 --- a/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java +++ b/src/main/java/net/mcreator/target/entity/TaserBulletProjectileEntity.java @@ -28,7 +28,18 @@ import net.minecraftforge.network.PlayMessages; import java.util.Optional; public class TaserBulletProjectileEntity extends ThrowableItemProjectile { - private float damage = 5f; + private float damage = 1f; + private int volt = 0; + + public TaserBulletProjectileEntity damage(float damage) { + this.damage = damage; + return this; + } + + public TaserBulletProjectileEntity volt(int volt) { + this.volt = volt; + return this; + } public TaserBulletProjectileEntity(EntityType type, Level world) { super(type, world); @@ -38,9 +49,10 @@ public class TaserBulletProjectileEntity extends ThrowableItemProjectile { super(type, entity, world); } - public TaserBulletProjectileEntity(LivingEntity entity, Level level, float damage) { + public TaserBulletProjectileEntity(LivingEntity entity, Level level, float damage, int volt) { super(TargetModEntities.TASER_BULLET_PROJECTILE.get(), entity, level); this.damage = damage; + this.volt = volt; } public TaserBulletProjectileEntity(PlayMessages.SpawnEntity packet, Level level) { @@ -106,7 +118,7 @@ public class TaserBulletProjectileEntity extends ThrowableItemProjectile { return; } if (!living.level().isClientSide()) { - living.addEffect(new MobEffectInstance(TargetModMobEffects.SHOCK.get(), 100, 0), this.getOwner()); + living.addEffect(new MobEffectInstance(TargetModMobEffects.SHOCK.get(), 100, volt), this.getOwner()); } } diff --git a/src/main/java/net/mcreator/target/init/TargetModEnchantments.java b/src/main/java/net/mcreator/target/init/TargetModEnchantments.java new file mode 100644 index 000000000..e77bf8ae3 --- /dev/null +++ b/src/main/java/net/mcreator/target/init/TargetModEnchantments.java @@ -0,0 +1,16 @@ + +package net.mcreator.target.init; + +import net.minecraftforge.registries.RegistryObject; +import net.minecraftforge.registries.ForgeRegistries; +import net.minecraftforge.registries.DeferredRegister; + +import net.minecraft.world.item.enchantment.Enchantment; + +import net.mcreator.target.enchantment.VoltOverloadEnchantment; +import net.mcreator.target.TargetMod; + +public class TargetModEnchantments { + public static final DeferredRegister REGISTRY = DeferredRegister.create(ForgeRegistries.ENCHANTMENTS, TargetMod.MODID); + public static final RegistryObject VOLT_OVERLOAD = REGISTRY.register("volt_overload", () -> new VoltOverloadEnchantment()); +} diff --git a/src/main/java/net/mcreator/target/item/gun/Taser.java b/src/main/java/net/mcreator/target/item/gun/Taser.java index e3a8d284f..2325c0e25 100644 --- a/src/main/java/net/mcreator/target/item/gun/Taser.java +++ b/src/main/java/net/mcreator/target/item/gun/Taser.java @@ -7,6 +7,7 @@ import net.mcreator.target.client.renderer.item.TaserItemRenderer; import net.mcreator.target.init.TargetModItems; import net.mcreator.target.init.TargetModSounds; import net.mcreator.target.item.AnimatedItem; +import net.mcreator.target.tools.EnchantmentCategoryTool; import net.mcreator.target.tools.GunsTool; import net.mcreator.target.tools.SoundTool; import net.mcreator.target.tools.TooltipTool; @@ -26,6 +27,8 @@ import net.minecraft.world.entity.ai.attributes.AttributeModifier; import net.minecraft.world.entity.ai.attributes.Attributes; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.*; +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.item.enchantment.EnchantmentCategory; import net.minecraft.world.level.Level; import net.minecraftforge.client.extensions.common.IClientItemExtensions; import software.bernie.geckolib.animatable.GeoItem; @@ -241,4 +244,20 @@ public class Taser extends GunItem implements GeoItem, AnimatedItem { public String getGunDisplayName() { return "TASER"; } + + @Override + public int getEnchantmentValue() { + return 15; + } + + @Override + public boolean isEnchantable(ItemStack stack) + { + return true; + } + + @Override + public boolean canApplyAtEnchantingTable(ItemStack stack, Enchantment enchantment) { + return enchantment.category == EnchantmentCategoryTool.TASER; + } } diff --git a/src/main/java/net/mcreator/target/mobeffect/ShockMobEffect.java b/src/main/java/net/mcreator/target/mobeffect/ShockMobEffect.java index 9f1d09571..a54318b41 100644 --- a/src/main/java/net/mcreator/target/mobeffect/ShockMobEffect.java +++ b/src/main/java/net/mcreator/target/mobeffect/ShockMobEffect.java @@ -40,7 +40,7 @@ public class ShockMobEffect extends MobEffect { attacker = entity.level().getEntity(entity.getPersistentData().getInt("TargetShockAttacker")); } - entity.hurt(TargetModDamageTypes.causeShockDamage(entity.level().registryAccess(), attacker), 2 * (amplifier + 1)); + entity.hurt(TargetModDamageTypes.causeShockDamage(entity.level().registryAccess(), attacker), 2 + (1.25f * amplifier)); entity.level().playSound(null, entity.getOnPos(), TargetModSounds.ELECTRIC.get(), SoundSource.PLAYERS, 1, 1); if (attacker instanceof ServerPlayer player) { @@ -72,7 +72,7 @@ public class ShockMobEffect extends MobEffect { } living.hurt(TargetModDamageTypes.causeShockDamage(living.level().registryAccess(), - event.getEffectSource()), 2 * (instance.getAmplifier() + 1)); + event.getEffectSource()), 2 + (1.25f * instance.getAmplifier())); if (event.getEffectSource() instanceof LivingEntity source) { living.getPersistentData().putInt("TargetShockAttacker", source.getId()); diff --git a/src/main/java/net/mcreator/target/procedures/TaserfireProcedure.java b/src/main/java/net/mcreator/target/procedures/TaserfireProcedure.java index d59d82f97..32155f2ef 100644 --- a/src/main/java/net/mcreator/target/procedures/TaserfireProcedure.java +++ b/src/main/java/net/mcreator/target/procedures/TaserfireProcedure.java @@ -2,6 +2,7 @@ package net.mcreator.target.procedures; import net.mcreator.target.entity.TaserBulletProjectileEntity; 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; @@ -12,6 +13,8 @@ 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.item.enchantment.Enchantments; import net.minecraft.world.level.Level; // TODO 内联这个类 @@ -37,9 +40,11 @@ public class TaserfireProcedure { serverPlayer.level().playSound(null, serverPlayer.getOnPos(), TargetModSounds.TASER_FIRE_3P.get(), SoundSource.PLAYERS, 1, 1); } + int volt = EnchantmentHelper.getItemEnchantmentLevel(TargetModEnchantments.VOLT_OVERLOAD.get(), stack); + Level level = entity.level(); if (!level.isClientSide()) { - TaserBulletProjectileEntity taserBulletProjectile = new TaserBulletProjectileEntity(player, level, (float) stack.getOrCreateTag().getDouble("damage")); + TaserBulletProjectileEntity taserBulletProjectile = new TaserBulletProjectileEntity(player, level, (float) stack.getOrCreateTag().getDouble("damage"), volt); taserBulletProjectile.setPos(entity.getX(), entity.getEyeY() - 0.1, entity.getZ()); taserBulletProjectile.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 new file mode 100644 index 000000000..c1e48dcd0 --- /dev/null +++ b/src/main/java/net/mcreator/target/tools/EnchantmentCategoryTool.java @@ -0,0 +1,9 @@ +package net.mcreator.target.tools; + +import net.mcreator.target.item.gun.Taser; +import net.minecraft.world.item.enchantment.EnchantmentCategory; + +public class EnchantmentCategoryTool { + public static final EnchantmentCategory TASER = EnchantmentCategory.create("target:taser", item -> item instanceof Taser); + +} diff --git a/src/main/resources/assets/target/lang/en_us.json b/src/main/resources/assets/target/lang/en_us.json index 7f49b62b2..ec535767d 100644 --- a/src/main/resources/assets/target/lang/en_us.json +++ b/src/main/resources/assets/target/lang/en_us.json @@ -203,6 +203,9 @@ "item.minecraft.splash_potion.effect.target_long_shock": "Splash Potion of Shock", "item.minecraft.lingering_potion.effect.target_long_shock": "Lingering Potion of Shock", + "enchantment.target.volt_overload": "Volt Overload ", + "enchantment.target.volt_overload.desc": "Increases the shock damage of TaserGun", + "des.target.sensitivity": "Current Sensitivity of This Gun: %1$s", "commands.ammo.get": "Current %s ammo: %s", diff --git a/src/main/resources/assets/target/lang/zh_cn.json b/src/main/resources/assets/target/lang/zh_cn.json index c5fa19999..446fb5b0e 100644 --- a/src/main/resources/assets/target/lang/zh_cn.json +++ b/src/main/resources/assets/target/lang/zh_cn.json @@ -203,6 +203,9 @@ "item.minecraft.splash_potion.effect.target_long_shock": "喷溅型电击药水", "item.minecraft.lingering_potion.effect.target_long_shock": "滞留型电击药水", + "enchantment.target.volt_overload": "电压过载", + "enchantment.target.volt_overload.desc": "增加泰瑟枪电击的伤害", + "des.target.sensitivity": "当前枪械的灵敏度为:%1$s", "commands.ammo.get": "当前%s弹药数量: %s",