From d532057dc8df9c268e5f8b65193b3a673f6f3345 Mon Sep 17 00:00:00 2001 From: 17146 <1714673995@qq.com> Date: Wed, 2 Apr 2025 17:29:21 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E7=9B=94=E7=94=B2=E7=9A=84?= =?UTF-8?q?=E8=87=AA=E5=AE=9A=E4=B9=89=E5=B1=9E=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/atsuishio/superbwarfare/Mod.java | 2 +- .../item/armor/BulletResistantArmor.java | 37 +++++++++++++++++++ .../superbwarfare/item/armor/GeHelmetM35.java | 19 ++-------- .../superbwarfare/item/armor/RuChest6b43.java | 19 ++-------- .../item/armor/RuHelmet6b47.java | 19 ++-------- .../superbwarfare/item/armor/UsChestIotv.java | 19 ++-------- .../item/armor/UsHelmetPastg.java | 19 ++-------- 7 files changed, 53 insertions(+), 81 deletions(-) create mode 100644 src/main/java/com/atsuishio/superbwarfare/item/armor/BulletResistantArmor.java diff --git a/src/main/java/com/atsuishio/superbwarfare/Mod.java b/src/main/java/com/atsuishio/superbwarfare/Mod.java index 068b51e75..56851bda4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/Mod.java +++ b/src/main/java/com/atsuishio/superbwarfare/Mod.java @@ -29,7 +29,7 @@ import java.util.concurrent.ConcurrentLinkedQueue; public class Mod { public static final String MODID = "superbwarfare"; - public static final String ATTRIBUTE_MODIFIER = "superbwarfare_attribute_modifier"; + public static final ResourceLocation ATTRIBUTE_MODIFIER = loc("attribute_modifier"); public static final Logger LOGGER = LogManager.getLogger(Mod.class); diff --git a/src/main/java/com/atsuishio/superbwarfare/item/armor/BulletResistantArmor.java b/src/main/java/com/atsuishio/superbwarfare/item/armor/BulletResistantArmor.java new file mode 100644 index 000000000..6dcd77878 --- /dev/null +++ b/src/main/java/com/atsuishio/superbwarfare/item/armor/BulletResistantArmor.java @@ -0,0 +1,37 @@ +package com.atsuishio.superbwarfare.item.armor; + +import com.atsuishio.superbwarfare.Mod; +import com.atsuishio.superbwarfare.init.ModAttributes; +import net.minecraft.core.Holder; +import net.minecraft.world.entity.EquipmentSlotGroup; +import net.minecraft.world.entity.ai.attributes.AttributeModifier; +import net.minecraft.world.item.ArmorItem; +import net.minecraft.world.item.ArmorMaterial; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.component.ItemAttributeModifiers; + +import java.util.ArrayList; + +public abstract class BulletResistantArmor extends ArmorItem { + + private float bulletResistance = 0.1f; + + public BulletResistantArmor(Holder material, Type type, Properties properties) { + super(material, type, properties); + } + + public BulletResistantArmor(Holder material, Type type, Properties properties, float bulletResistance) { + super(material, type, properties); + this.bulletResistance = bulletResistance; + } + + @Override + public ItemAttributeModifiers getDefaultAttributeModifiers(ItemStack stack) { + var modifiers = super.getDefaultAttributeModifiers(stack); + var list = new ArrayList<>(modifiers.modifiers()); + list.add(new ItemAttributeModifiers.Entry(ModAttributes.BULLET_RESISTANCE, new AttributeModifier(Mod.ATTRIBUTE_MODIFIER, + this.bulletResistance * Math.max(0, 1 - (double) stack.getDamageValue() / stack.getMaxDamage()), AttributeModifier.Operation.ADD_VALUE), + EquipmentSlotGroup.bySlot(this.type.getSlot()))); + return new ItemAttributeModifiers(list, true); + } +} diff --git a/src/main/java/com/atsuishio/superbwarfare/item/armor/GeHelmetM35.java b/src/main/java/com/atsuishio/superbwarfare/item/armor/GeHelmetM35.java index 43436d6a1..f9cad8ffc 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/armor/GeHelmetM35.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/armor/GeHelmetM35.java @@ -3,7 +3,6 @@ package com.atsuishio.superbwarfare.item.armor; import com.atsuishio.superbwarfare.client.renderer.armor.GeHelmetM35ArmorRenderer; import com.atsuishio.superbwarfare.init.ModArmorMaterials; import com.atsuishio.superbwarfare.item.CustomRendererArmor; -import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.Item; import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; @@ -11,11 +10,12 @@ import software.bernie.geckolib.animation.AnimatableManager; import software.bernie.geckolib.renderer.GeoArmorRenderer; import software.bernie.geckolib.util.GeckoLibUtil; -public class GeHelmetM35 extends ArmorItem implements GeoItem, CustomRendererArmor { +public class GeHelmetM35 extends BulletResistantArmor implements GeoItem, CustomRendererArmor { + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); public GeHelmetM35() { - super(ModArmorMaterials.STEEL, Type.HELMET, new Properties()); + super(ModArmorMaterials.STEEL, Type.HELMET, new Properties().durability(Type.HELMET.getDurability(35))); } @Override @@ -23,19 +23,6 @@ public class GeHelmetM35 extends ArmorItem implements GeoItem, CustomRendererArm return new GeHelmetM35ArmorRenderer(); } - // TODO attribute modifier -// @Override -// public Multimap getAttributeModifiers(EquipmentSlot slot, ItemStack stack) { -// Multimap map = super.getDefaultAttributeModifiers(slot); -// UUID uuid = new UUID(slot.toString().hashCode(), 0); -// if (slot == EquipmentSlot.HEAD) { -// map = HashMultimap.create(map); -// map.put(ModAttributes.BULLET_RESISTANCE.get(), new AttributeModifier(uuid, ModUtils.ATTRIBUTE_MODIFIER, -// 0.1 * Math.max(0, 1 - (double) stack.getDamageValue() / stack.getMaxDamage()), AttributeModifier.Operation.ADDITION)); -// } -// return map; -// } - @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/armor/RuChest6b43.java b/src/main/java/com/atsuishio/superbwarfare/item/armor/RuChest6b43.java index 2c5762427..41c9e8022 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/armor/RuChest6b43.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/armor/RuChest6b43.java @@ -3,7 +3,6 @@ package com.atsuishio.superbwarfare.item.armor; import com.atsuishio.superbwarfare.client.renderer.armor.RuChest6b43ArmorRenderer; import com.atsuishio.superbwarfare.init.ModArmorMaterials; import com.atsuishio.superbwarfare.item.CustomRendererArmor; -import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.Item; import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; @@ -11,11 +10,12 @@ import software.bernie.geckolib.animation.AnimatableManager; import software.bernie.geckolib.renderer.GeoArmorRenderer; import software.bernie.geckolib.util.GeckoLibUtil; -public class RuChest6b43 extends ArmorItem implements GeoItem, CustomRendererArmor { +public class RuChest6b43 extends BulletResistantArmor implements GeoItem, CustomRendererArmor { + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); public RuChest6b43() { - super(ModArmorMaterials.CEMENTED_CARBIDE, Type.CHESTPLATE, new Properties()); + super(ModArmorMaterials.CEMENTED_CARBIDE, Type.CHESTPLATE, new Properties().durability(Type.CHESTPLATE.getDurability(50)), 0.5f); } @Override @@ -23,19 +23,6 @@ public class RuChest6b43 extends ArmorItem implements GeoItem, CustomRendererArm return new RuChest6b43ArmorRenderer(); } - // TODO attribute -// @Override -// public Multimap getAttributeModifiers(EquipmentSlot slot, ItemStack stack) { -// Multimap map = super.getDefaultAttributeModifiers(slot); -// UUID uuid = new UUID(slot.toString().hashCode(), 0); -// if (slot == EquipmentSlot.CHEST) { -// map = HashMultimap.create(map); -// map.put(ModAttributes.BULLET_RESISTANCE.get(), new AttributeModifier(uuid, ModUtils.ATTRIBUTE_MODIFIER, -// 0.5 * Math.max(0, 1 - (double) stack.getDamageValue() / stack.getMaxDamage()), AttributeModifier.Operation.ADDITION)); -// } -// return map; -// } - @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/armor/RuHelmet6b47.java b/src/main/java/com/atsuishio/superbwarfare/item/armor/RuHelmet6b47.java index 509cf54d0..76625139c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/armor/RuHelmet6b47.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/armor/RuHelmet6b47.java @@ -3,7 +3,6 @@ package com.atsuishio.superbwarfare.item.armor; import com.atsuishio.superbwarfare.client.renderer.armor.RuHelmet6b47ArmorRenderer; import com.atsuishio.superbwarfare.init.ModArmorMaterials; import com.atsuishio.superbwarfare.item.CustomRendererArmor; -import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.Item; import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; @@ -11,11 +10,12 @@ import software.bernie.geckolib.animation.AnimatableManager; import software.bernie.geckolib.renderer.GeoArmorRenderer; import software.bernie.geckolib.util.GeckoLibUtil; -public class RuHelmet6b47 extends ArmorItem implements GeoItem, CustomRendererArmor { +public class RuHelmet6b47 extends BulletResistantArmor implements GeoItem, CustomRendererArmor { + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); public RuHelmet6b47() { - super(ModArmorMaterials.CEMENTED_CARBIDE, Type.HELMET, new Properties()); + super(ModArmorMaterials.CEMENTED_CARBIDE, Type.HELMET, new Properties().durability(Type.HELMET.getDurability(50)), 0.2f); } @Override @@ -23,19 +23,6 @@ public class RuHelmet6b47 extends ArmorItem implements GeoItem, CustomRendererAr return new RuHelmet6b47ArmorRenderer(); } - // todo attribute -// @Override -// public Multimap getAttributeModifiers(EquipmentSlot slot, ItemStack stack) { -// Multimap map = super.getDefaultAttributeModifiers(slot); -// UUID uuid = new UUID(slot.toString().hashCode(), 0); -// if (slot == EquipmentSlot.HEAD) { -// map = HashMultimap.create(map); -// map.put(ModAttributes.BULLET_RESISTANCE.get(), new AttributeModifier(uuid, ModUtils.ATTRIBUTE_MODIFIER, -// 0.2 * Math.max(0, 1 - (double) stack.getDamageValue() / stack.getMaxDamage()), AttributeModifier.Operation.ADDITION)); -// } -// return map; -// } - @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/armor/UsChestIotv.java b/src/main/java/com/atsuishio/superbwarfare/item/armor/UsChestIotv.java index 824edee60..9ea7210b2 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/armor/UsChestIotv.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/armor/UsChestIotv.java @@ -3,7 +3,6 @@ package com.atsuishio.superbwarfare.item.armor; import com.atsuishio.superbwarfare.client.renderer.armor.UsChestIotvArmorRenderer; import com.atsuishio.superbwarfare.init.ModArmorMaterials; import com.atsuishio.superbwarfare.item.CustomRendererArmor; -import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.Item; import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; @@ -11,11 +10,12 @@ import software.bernie.geckolib.animation.AnimatableManager; import software.bernie.geckolib.renderer.GeoArmorRenderer; import software.bernie.geckolib.util.GeckoLibUtil; -public class UsChestIotv extends ArmorItem implements GeoItem, CustomRendererArmor { +public class UsChestIotv extends BulletResistantArmor implements GeoItem, CustomRendererArmor { + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); public UsChestIotv() { - super(ModArmorMaterials.CEMENTED_CARBIDE, Type.CHESTPLATE, new Properties()); + super(ModArmorMaterials.CEMENTED_CARBIDE, Type.CHESTPLATE, new Properties().durability(Type.CHESTPLATE.getDurability(50)), 0.5f); } @Override @@ -23,19 +23,6 @@ public class UsChestIotv extends ArmorItem implements GeoItem, CustomRendererArm return new UsChestIotvArmorRenderer(); } - // todo attribute -// @Override -// public Multimap getAttributeModifiers(EquipmentSlot slot, ItemStack stack) { -// Multimap map = super.getDefaultAttributeModifiers(slot); -// UUID uuid = new UUID(slot.toString().hashCode(), 0); -// if (slot == EquipmentSlot.CHEST) { -// map = HashMultimap.create(map); -// map.put(ModAttributes.BULLET_RESISTANCE.get(), new AttributeModifier(uuid, ModUtils.ATTRIBUTE_MODIFIER, -// 0.5 * Math.max(0, 1 - (double) stack.getDamageValue() / stack.getMaxDamage()), AttributeModifier.Operation.ADDITION)); -// } -// return map; -// } - @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { } diff --git a/src/main/java/com/atsuishio/superbwarfare/item/armor/UsHelmetPastg.java b/src/main/java/com/atsuishio/superbwarfare/item/armor/UsHelmetPastg.java index 5568f73c3..40573eabe 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/armor/UsHelmetPastg.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/armor/UsHelmetPastg.java @@ -3,7 +3,6 @@ package com.atsuishio.superbwarfare.item.armor; import com.atsuishio.superbwarfare.client.renderer.armor.UsHelmetPastgArmorRenderer; import com.atsuishio.superbwarfare.init.ModArmorMaterials; import com.atsuishio.superbwarfare.item.CustomRendererArmor; -import net.minecraft.world.item.ArmorItem; import net.minecraft.world.item.Item; import software.bernie.geckolib.animatable.GeoItem; import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; @@ -11,11 +10,12 @@ import software.bernie.geckolib.animation.AnimatableManager; import software.bernie.geckolib.renderer.GeoArmorRenderer; import software.bernie.geckolib.util.GeckoLibUtil; -public class UsHelmetPastg extends ArmorItem implements GeoItem, CustomRendererArmor { +public class UsHelmetPastg extends BulletResistantArmor implements GeoItem, CustomRendererArmor { + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); public UsHelmetPastg() { - super(ModArmorMaterials.CEMENTED_CARBIDE, Type.HELMET, new Properties()); + super(ModArmorMaterials.CEMENTED_CARBIDE, Type.HELMET, new Properties().durability(Type.HELMET.getDurability(50)), 0.2f); } @Override @@ -23,19 +23,6 @@ public class UsHelmetPastg extends ArmorItem implements GeoItem, CustomRendererA return new UsHelmetPastgArmorRenderer(); } - // todo attribute -// @Override -// public Multimap getAttributeModifiers(EquipmentSlot slot, ItemStack stack) { -// Multimap map = super.getDefaultAttributeModifiers(slot); -// UUID uuid = new UUID(slot.toString().hashCode(), 0); -// if (slot == EquipmentSlot.HEAD) { -// map = HashMultimap.create(map); -// map.put(ModAttributes.BULLET_RESISTANCE.get(), new AttributeModifier(uuid, ModUtils.ATTRIBUTE_MODIFIER, -// 0.2 * Math.max(0, 1 - (double) stack.getDamageValue() / stack.getMaxDamage()), AttributeModifier.Operation.ADDITION)); -// } -// return map; -// } - @Override public void registerControllers(AnimatableManager.ControllerRegistrar data) { }