diff --git a/src/main/java/net/mcreator/superbwarfare/enchantment/HealClip.java b/src/main/java/net/mcreator/superbwarfare/enchantment/HealClip.java new file mode 100644 index 000000000..38c506f0b --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/enchantment/HealClip.java @@ -0,0 +1,28 @@ +package net.mcreator.superbwarfare.enchantment; + +import net.mcreator.superbwarfare.tools.EnchantmentCategoryTool; +import net.minecraft.world.entity.EquipmentSlot; +import net.minecraft.world.item.enchantment.Enchantment; + +public class HealClip extends Enchantment { + + public HealClip() { + super(Rarity.RARE, EnchantmentCategoryTool.GUN, new EquipmentSlot[]{EquipmentSlot.MAINHAND}); + } + + @Override + public int getMaxLevel() { + return 2; + } + + @Override + public int getMinCost(int pLevel) { + return 15 + 6 * pLevel; + } + + @Override + public int getMaxCost(int pLevel) { + return getMinCost(pLevel) + 10; + } + +} diff --git a/src/main/java/net/mcreator/superbwarfare/enchantment/KillClip.java b/src/main/java/net/mcreator/superbwarfare/enchantment/KillClip.java new file mode 100644 index 000000000..8b1b5e8ee --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/enchantment/KillClip.java @@ -0,0 +1,4 @@ +package net.mcreator.superbwarfare.enchantment; + +public class KillClip { +} diff --git a/src/main/java/net/mcreator/superbwarfare/enchantment/LongerWireEnchantment.java b/src/main/java/net/mcreator/superbwarfare/enchantment/LongerWire.java similarity index 87% rename from src/main/java/net/mcreator/superbwarfare/enchantment/LongerWireEnchantment.java rename to src/main/java/net/mcreator/superbwarfare/enchantment/LongerWire.java index ba66391d5..601cc8b76 100644 --- a/src/main/java/net/mcreator/superbwarfare/enchantment/LongerWireEnchantment.java +++ b/src/main/java/net/mcreator/superbwarfare/enchantment/LongerWire.java @@ -1,4 +1,3 @@ - package net.mcreator.superbwarfare.enchantment; import net.mcreator.superbwarfare.init.ModItems; @@ -8,8 +7,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.enchantment.Enchantment; -public class LongerWireEnchantment extends Enchantment { - public LongerWireEnchantment(EquipmentSlot... slots) { +public class LongerWire extends Enchantment { + public LongerWire(EquipmentSlot... slots) { super(Rarity.UNCOMMON, EnchantmentCategoryTool.TASER, slots); } diff --git a/src/main/java/net/mcreator/superbwarfare/enchantment/MonsterHunterEnchantment.java b/src/main/java/net/mcreator/superbwarfare/enchantment/MonsterHunter.java similarity index 81% rename from src/main/java/net/mcreator/superbwarfare/enchantment/MonsterHunterEnchantment.java rename to src/main/java/net/mcreator/superbwarfare/enchantment/MonsterHunter.java index 9d742b4f8..cd7be00a4 100644 --- a/src/main/java/net/mcreator/superbwarfare/enchantment/MonsterHunterEnchantment.java +++ b/src/main/java/net/mcreator/superbwarfare/enchantment/MonsterHunter.java @@ -1,12 +1,11 @@ - package net.mcreator.superbwarfare.enchantment; import net.mcreator.superbwarfare.tools.EnchantmentCategoryTool; import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.item.enchantment.Enchantment; -public class MonsterHunterEnchantment extends Enchantment { - public MonsterHunterEnchantment(EquipmentSlot... slots) { +public class MonsterHunter extends Enchantment { + public MonsterHunter(EquipmentSlot... slots) { super(Rarity.UNCOMMON, EnchantmentCategoryTool.GUN, slots); } diff --git a/src/main/java/net/mcreator/superbwarfare/enchantment/SuperRechargeEnchantment.java b/src/main/java/net/mcreator/superbwarfare/enchantment/SuperRecharge.java similarity index 87% rename from src/main/java/net/mcreator/superbwarfare/enchantment/SuperRechargeEnchantment.java rename to src/main/java/net/mcreator/superbwarfare/enchantment/SuperRecharge.java index b81ad8348..605373629 100644 --- a/src/main/java/net/mcreator/superbwarfare/enchantment/SuperRechargeEnchantment.java +++ b/src/main/java/net/mcreator/superbwarfare/enchantment/SuperRecharge.java @@ -1,4 +1,3 @@ - package net.mcreator.superbwarfare.enchantment; import net.mcreator.superbwarfare.init.ModItems; @@ -8,8 +7,8 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.item.enchantment.Enchantment; -public class SuperRechargeEnchantment extends Enchantment { - public SuperRechargeEnchantment(EquipmentSlot... slots) { +public class SuperRecharge extends Enchantment { + public SuperRecharge(EquipmentSlot... slots) { super(Rarity.UNCOMMON, EnchantmentCategoryTool.TASER, slots); } diff --git a/src/main/java/net/mcreator/superbwarfare/enchantment/VoltOverload.java b/src/main/java/net/mcreator/superbwarfare/enchantment/VoltOverload.java new file mode 100644 index 000000000..308a0e420 --- /dev/null +++ b/src/main/java/net/mcreator/superbwarfare/enchantment/VoltOverload.java @@ -0,0 +1,35 @@ +package net.mcreator.superbwarfare.enchantment; + +import net.mcreator.superbwarfare.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.superbwarfare.init.ModItems; + +public class VoltOverload extends Enchantment { + public VoltOverload(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(ModItems.TASER.get())).test(itemstack); + } +} diff --git a/src/main/java/net/mcreator/superbwarfare/enchantment/VoltOverloadEnchantment.java b/src/main/java/net/mcreator/superbwarfare/enchantment/VoltOverloadEnchantment.java deleted file mode 100644 index 4ee025a85..000000000 --- a/src/main/java/net/mcreator/superbwarfare/enchantment/VoltOverloadEnchantment.java +++ /dev/null @@ -1,36 +0,0 @@ - -package net.mcreator.superbwarfare.enchantment; - -import net.mcreator.superbwarfare.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.superbwarfare.init.ModItems; - -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(ModItems.TASER.get())).test(itemstack); - } -} diff --git a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java index f5f0dc1f2..26714f612 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/GunEventHandler.java @@ -28,6 +28,7 @@ import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.registries.ForgeRegistries; +import java.util.List; import java.util.concurrent.atomic.AtomicBoolean; @Mod.EventBusSubscriber @@ -63,6 +64,7 @@ public class GunEventHandler { return; } + handleHealClip(player, stack); } /** @@ -813,4 +815,16 @@ public class GunEventHandler { tag.putBoolean("sentinel_is_charging", false); } } + + private static void handleHealClip(Player player, ItemStack stack) { + int time = stack.getOrCreateTag().getInt("HealClipTime"); + if (time > 0) { + player.heal(player.getMaxHealth() * .6f); + List players = player.level().getEntitiesOfClass(Player.class, player.getBoundingBox().inflate(5)) + .stream().filter(p -> p.isAlliedTo(player)).toList(); + players.forEach(p -> p.heal(p.getMaxHealth() * .3f)); + + stack.getOrCreateTag().putInt("HealClipTime", 0); + } + } } diff --git a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java index fd69bed33..358d32613 100644 --- a/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java +++ b/src/main/java/net/mcreator/superbwarfare/event/LivingEventHandler.java @@ -2,10 +2,7 @@ package net.mcreator.superbwarfare.event; import net.mcreator.superbwarfare.ModUtils; import net.mcreator.superbwarfare.entity.Target1Entity; -import net.mcreator.superbwarfare.init.ModDamageTypes; -import net.mcreator.superbwarfare.init.ModItems; -import net.mcreator.superbwarfare.init.ModSounds; -import net.mcreator.superbwarfare.init.ModTags; +import net.mcreator.superbwarfare.init.*; import net.mcreator.superbwarfare.item.gun.GunItem; import net.mcreator.superbwarfare.network.ModVariables; import net.mcreator.superbwarfare.network.message.ClientIndicatorMessage; @@ -25,6 +22,7 @@ import net.minecraft.world.entity.LivingEntity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.entity.projectile.Projectile; import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.enchantment.EnchantmentHelper; import net.minecraftforge.event.entity.living.LivingDeathEvent; import net.minecraftforge.event.entity.living.LivingEquipmentChangeEvent; import net.minecraftforge.event.entity.living.LivingHurtEvent; @@ -52,6 +50,7 @@ public class LivingEventHandler { killIndication(event.getSource().getEntity()); handlePlayerKillEntity(event); + handleHealClip(event); } private static void reduceBulletDamage(LivingHurtEvent event, DamageSource damagesource, LivingEntity entity, Entity sourceentity, double amount) { @@ -167,7 +166,7 @@ public class LivingEventHandler { oldTags.putBoolean("force_stop", false); oldTags.putBoolean("stop", false); - oldTags.putInt("reload_stage",0); + oldTags.putInt("reload_stage", 0); oldTags.putBoolean("reloading", false); oldTags.putDouble("prepare", 0); oldTags.putDouble("prepare_load", 0); @@ -189,7 +188,7 @@ public class LivingEventHandler { newStack.getOrCreateTag().putBoolean("force_stop", false); newStack.getOrCreateTag().putBoolean("stop", false); - newStack.getOrCreateTag().putInt("reload_stage",0); + newStack.getOrCreateTag().putInt("reload_stage", 0); newStack.getOrCreateTag().putBoolean("reloading", false); newStack.getOrCreateTag().putDouble("prepare", 0); newStack.getOrCreateTag().putDouble("prepare_load", 0); @@ -248,4 +247,32 @@ public class LivingEventHandler { } } } + + private static void handleHealClip(LivingDeathEvent event) { + DamageSource source = event.getSource(); + + Player attacker = null; + if (source.getEntity() instanceof Player player) { + attacker = player; + } + if (source.getDirectEntity() instanceof Projectile projectile && projectile.getOwner() instanceof Player player) { + attacker = player; + } + + if (attacker == null) { + return; + } + + if (source.is(ModDamageTypes.GUN_FIRE) || source.is(ModDamageTypes.GUN_FIRE_HEADSHOT)) { + ItemStack stack = attacker.getMainHandItem(); + if (!stack.is(ModTags.Items.GUN)) { + return; + } + + int level = EnchantmentHelper.getTagEnchantmentLevel(ModEnchantments.HEAL_CLIP.get(), stack); + if (level != 0) { + stack.getOrCreateTag().putInt("HealClipTime", 80 + level * 20); + } + } + } } diff --git a/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java b/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java index a8adcc677..d4ed41494 100644 --- a/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java +++ b/src/main/java/net/mcreator/superbwarfare/init/ModEnchantments.java @@ -2,21 +2,19 @@ package net.mcreator.superbwarfare.init; import net.mcreator.superbwarfare.ModUtils; -import net.mcreator.superbwarfare.enchantment.LongerWireEnchantment; -import net.mcreator.superbwarfare.enchantment.MonsterHunterEnchantment; +import net.mcreator.superbwarfare.enchantment.*; 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.superbwarfare.enchantment.VoltOverloadEnchantment; -import net.mcreator.superbwarfare.enchantment.SuperRechargeEnchantment; - public class ModEnchantments { public static final DeferredRegister REGISTRY = DeferredRegister.create(ForgeRegistries.ENCHANTMENTS, ModUtils.MODID); - public static final RegistryObject VOLT_OVERLOAD = REGISTRY.register("volt_overload", () -> new VoltOverloadEnchantment()); - public static final RegistryObject SUPER_RECHARGE = REGISTRY.register("super_recharge", () -> new SuperRechargeEnchantment()); - public static final RegistryObject LONGER_WIRE = REGISTRY.register("longer_wire", () -> new LongerWireEnchantment()); - public static final RegistryObject MONSTER_HUNTER = REGISTRY.register("monster_hunter", () -> new MonsterHunterEnchantment()); + + public static final RegistryObject VOLT_OVERLOAD = REGISTRY.register("volt_overload", VoltOverload::new); + public static final RegistryObject SUPER_RECHARGE = REGISTRY.register("super_recharge", SuperRecharge::new); + public static final RegistryObject LONGER_WIRE = REGISTRY.register("longer_wire", LongerWire::new); + public static final RegistryObject MONSTER_HUNTER = REGISTRY.register("monster_hunter", MonsterHunter::new); + public static final RegistryObject HEAL_CLIP = REGISTRY.register("heal_clip", HealClip::new); } diff --git a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java index 65f740d6a..06cea3b21 100644 --- a/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java +++ b/src/main/java/net/mcreator/superbwarfare/item/gun/GunItem.java @@ -78,18 +78,24 @@ public abstract class GunItem extends Item { itemstack.getOrCreateTag().putInt("draw_time", (itemstack.getOrCreateTag().getInt("draw_time") + 1)); } } + if (itemstack.getOrCreateTag().getInt("fire_animation") > 0) { itemstack.getOrCreateTag().putInt("fire_animation", (itemstack.getOrCreateTag().getInt("fire_animation") - 1)); } + if (itemstack.getOrCreateTag().getDouble("flash_time") > 0) { itemstack.getOrCreateTag().putDouble("flash_time", (itemstack.getOrCreateTag().getDouble("flash_time") - 1)); } + + if (itemstack.getOrCreateTag().contains("HealClipTime")) { + itemstack.getOrCreateTag().putInt("HealClipTime", Math.max(0, itemstack.getOrCreateTag().getInt("HealClipTime") - 1)); + } } } @Override public boolean onEntitySwing(ItemStack stack, LivingEntity entity) { - return false; + return super.onEntitySwing(stack, entity); } @Override diff --git a/src/main/resources/assets/superbwarfare/lang/en_us.json b/src/main/resources/assets/superbwarfare/lang/en_us.json index 9c8a2b01b..2507a0b8e 100644 --- a/src/main/resources/assets/superbwarfare/lang/en_us.json +++ b/src/main/resources/assets/superbwarfare/lang/en_us.json @@ -239,6 +239,8 @@ "enchantment.superbwarfare.longer_wire.desc": "Increases the range of TaserGun", "enchantment.superbwarfare.monster_hunter": "Monster Hunter", "enchantment.superbwarfare.monster_hunter.desc": "Increases bullet damage against monsters", + "enchantment.superbwarfare.heal_clip": "Heal Clip", + "enchantment.superbwarfare.heal_clip.desc": "Reloading after dealing a final blow will heal you and your nearby allies", "des.superbwarfare.sensitivity": "Current Sensitivity of This Gun: %1$s", "des.superbwarfare.need_bolt_action": "[ Need Bolt Action ]", diff --git a/src/main/resources/assets/superbwarfare/lang/zh_cn.json b/src/main/resources/assets/superbwarfare/lang/zh_cn.json index 998e0a555..63e6f9a0c 100644 --- a/src/main/resources/assets/superbwarfare/lang/zh_cn.json +++ b/src/main/resources/assets/superbwarfare/lang/zh_cn.json @@ -239,6 +239,8 @@ "enchantment.superbwarfare.longer_wire.desc": "增加泰瑟枪的射程", "enchantment.superbwarfare.monster_hunter": "怪物猎人", "enchantment.superbwarfare.monster_hunter.desc": "增加对怪物的子弹伤害", + "enchantment.superbwarfare.heal_clip": "治疗弹匣", + "enchantment.superbwarfare.heal_clip.desc": "最后一击后短时间内填装,可治疗自身和附近队友", "des.superbwarfare.sensitivity": "当前枪械的灵敏度为:%1$s", "des.superbwarfare.need_bolt_action": "【需要拉栓】",