From de264471641fad575ed5992c9c5b0ceead7a65d6 Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Fri, 4 Apr 2025 05:31:39 +0800 Subject: [PATCH] =?UTF-8?q?=E6=AD=A3=E7=A1=AE=E6=B8=B2=E6=9F=93=E7=9B=94?= =?UTF-8?q?=E7=94=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../item/armor/ArmorRendererRegister.java | 42 ------------- .../item/armor/BulletResistantArmor.java | 61 ++++++++++++++++--- .../superbwarfare/item/armor/GeHelmetM35.java | 32 ++-------- .../superbwarfare/item/armor/RuChest6b43.java | 33 +++------- .../item/armor/RuHelmet6b47.java | 33 +++------- .../superbwarfare/item/armor/UsChestIotv.java | 33 +++------- .../item/armor/UsHelmetPastg.java | 33 +++------- 7 files changed, 85 insertions(+), 182 deletions(-) delete mode 100644 src/main/java/com/atsuishio/superbwarfare/item/armor/ArmorRendererRegister.java diff --git a/src/main/java/com/atsuishio/superbwarfare/item/armor/ArmorRendererRegister.java b/src/main/java/com/atsuishio/superbwarfare/item/armor/ArmorRendererRegister.java deleted file mode 100644 index a54b7d081..000000000 --- a/src/main/java/com/atsuishio/superbwarfare/item/armor/ArmorRendererRegister.java +++ /dev/null @@ -1,42 +0,0 @@ -package com.atsuishio.superbwarfare.item.armor; - -import com.atsuishio.superbwarfare.init.ModItems; -import com.atsuishio.superbwarfare.item.CustomRendererArmor; -import net.minecraft.client.Minecraft; -import net.minecraft.client.model.HumanoidModel; -import net.minecraft.world.entity.EquipmentSlot; -import net.minecraft.world.entity.LivingEntity; -import net.minecraft.world.item.ItemStack; -import net.neoforged.bus.api.SubscribeEvent; -import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; -import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent; -import org.jetbrains.annotations.NotNull; -import software.bernie.geckolib.renderer.GeoArmorRenderer; - -import javax.annotation.ParametersAreNonnullByDefault; - -public class ArmorRendererRegister { - @SubscribeEvent - private static void registerArmorExtensions(RegisterClientExtensionsEvent event) { - - for (var item : ModItems.ITEMS.getEntries()) { - if (!(item instanceof CustomRendererArmor armor)) continue; - event.registerItem(new IClientItemExtensions() { - - private GeoArmorRenderer renderer; - - @Override - @ParametersAreNonnullByDefault - public @NotNull HumanoidModel getHumanoidArmorModel(LivingEntity livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel original) { - if (this.renderer == null) - this.renderer = armor.getRenderer(); - - var mc = Minecraft.getInstance(); - this.renderer.prepForRender(livingEntity, itemStack, equipmentSlot, original, mc.levelRenderer.renderBuffers.bufferSource(), mc.getTimer().getGameTimeDeltaPartialTick(true), 0, 0, 0, 0); - return this.renderer; - } - - }, item); - } - } -} diff --git a/src/main/java/com/atsuishio/superbwarfare/item/armor/BulletResistantArmor.java b/src/main/java/com/atsuishio/superbwarfare/item/armor/BulletResistantArmor.java index 6dcd77878..669d49e72 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/armor/BulletResistantArmor.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/armor/BulletResistantArmor.java @@ -2,31 +2,72 @@ package com.atsuishio.superbwarfare.item.armor; import com.atsuishio.superbwarfare.Mod; import com.atsuishio.superbwarfare.init.ModAttributes; +import net.minecraft.client.model.HumanoidModel; import net.minecraft.core.Holder; +import net.minecraft.world.entity.EquipmentSlot; import net.minecraft.world.entity.EquipmentSlotGroup; +import net.minecraft.world.entity.LivingEntity; 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.Item; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.component.ItemAttributeModifiers; +import org.jetbrains.annotations.NotNull; +import software.bernie.geckolib.animatable.GeoItem; +import software.bernie.geckolib.animatable.client.GeoRenderProvider; +import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; +import software.bernie.geckolib.animation.AnimatableManager; +import software.bernie.geckolib.renderer.GeoArmorRenderer; +import software.bernie.geckolib.util.GeckoLibUtil; import java.util.ArrayList; +import java.util.function.Consumer; +import java.util.function.Supplier; -public abstract class BulletResistantArmor extends ArmorItem { +public abstract class BulletResistantArmor extends ArmorItem implements GeoItem { - private float bulletResistance = 0.1f; + private final Supplier> renderer; + private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); - 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 AnimatableInstanceCache getAnimatableInstanceCache() { + return this.cache; } @Override - public ItemAttributeModifiers getDefaultAttributeModifiers(ItemStack stack) { + public void createGeoRenderer(Consumer consumer) { + consumer.accept(new GeoRenderProvider() { + private GeoArmorRenderer renderer; + + @Override + public HumanoidModel getGeoArmorRenderer(T livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel original) { + if (this.renderer == null) + this.renderer = BulletResistantArmor.this.renderer.get(); + return this.renderer; + } + }); + } + + @Override + public void registerControllers(AnimatableManager.ControllerRegistrar data) { + } + + private float bulletResistance = 0.1f; + + public BulletResistantArmor(Holder material, Type type, Properties properties, Supplier> renderer) { + super(material, type, properties); + this.renderer = renderer; + } + + public BulletResistantArmor(Holder material, Type type, Properties properties, float bulletResistance, Supplier> renderer) { + super(material, type, properties); + this.bulletResistance = bulletResistance; + this.renderer = renderer; + } + + @Override + public @NotNull ItemAttributeModifiers getDefaultAttributeModifiers(@NotNull 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, 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 f9cad8ffc..a9b03d964 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/armor/GeHelmetM35.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/armor/GeHelmetM35.java @@ -2,33 +2,13 @@ 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.Item; -import software.bernie.geckolib.animatable.GeoItem; -import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.animation.AnimatableManager; -import software.bernie.geckolib.renderer.GeoArmorRenderer; -import software.bernie.geckolib.util.GeckoLibUtil; - -public class GeHelmetM35 extends BulletResistantArmor implements GeoItem, CustomRendererArmor { - - private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); +public class GeHelmetM35 extends BulletResistantArmor { public GeHelmetM35() { - super(ModArmorMaterials.STEEL, Type.HELMET, new Properties().durability(Type.HELMET.getDurability(35))); - } - - @Override - public GeoArmorRenderer getRenderer() { - return new GeHelmetM35ArmorRenderer(); - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar data) { - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return this.cache; + super(ModArmorMaterials.STEEL, + Type.HELMET, + new Properties().durability(Type.HELMET.getDurability(35)), + GeHelmetM35ArmorRenderer::new + ); } } 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 41c9e8022..4d3f45587 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/armor/RuChest6b43.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/armor/RuChest6b43.java @@ -2,33 +2,14 @@ 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.Item; -import software.bernie.geckolib.animatable.GeoItem; -import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.animation.AnimatableManager; -import software.bernie.geckolib.renderer.GeoArmorRenderer; -import software.bernie.geckolib.util.GeckoLibUtil; - -public class RuChest6b43 extends BulletResistantArmor implements GeoItem, CustomRendererArmor { - - private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); +public class RuChest6b43 extends BulletResistantArmor { public RuChest6b43() { - super(ModArmorMaterials.CEMENTED_CARBIDE, Type.CHESTPLATE, new Properties().durability(Type.CHESTPLATE.getDurability(50)), 0.5f); - } - - @Override - public GeoArmorRenderer getRenderer() { - return new RuChest6b43ArmorRenderer(); - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar data) { - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return this.cache; + super(ModArmorMaterials.CEMENTED_CARBIDE, + Type.CHESTPLATE, + new Properties().durability(Type.CHESTPLATE.getDurability(50)), + 0.5f, + RuChest6b43ArmorRenderer::new + ); } } 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 76625139c..59088d695 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/armor/RuHelmet6b47.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/armor/RuHelmet6b47.java @@ -2,33 +2,14 @@ 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.Item; -import software.bernie.geckolib.animatable.GeoItem; -import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.animation.AnimatableManager; -import software.bernie.geckolib.renderer.GeoArmorRenderer; -import software.bernie.geckolib.util.GeckoLibUtil; - -public class RuHelmet6b47 extends BulletResistantArmor implements GeoItem, CustomRendererArmor { - - private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); +public class RuHelmet6b47 extends BulletResistantArmor { public RuHelmet6b47() { - super(ModArmorMaterials.CEMENTED_CARBIDE, Type.HELMET, new Properties().durability(Type.HELMET.getDurability(50)), 0.2f); - } - - @Override - public GeoArmorRenderer getRenderer() { - return new RuHelmet6b47ArmorRenderer(); - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar data) { - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return this.cache; + super(ModArmorMaterials.CEMENTED_CARBIDE, + Type.HELMET, + new Properties().durability(Type.HELMET.getDurability(50)), + 0.2f, + RuHelmet6b47ArmorRenderer::new + ); } } 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 9ea7210b2..e1bb0b2a4 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/armor/UsChestIotv.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/armor/UsChestIotv.java @@ -2,33 +2,14 @@ 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.Item; -import software.bernie.geckolib.animatable.GeoItem; -import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.animation.AnimatableManager; -import software.bernie.geckolib.renderer.GeoArmorRenderer; -import software.bernie.geckolib.util.GeckoLibUtil; - -public class UsChestIotv extends BulletResistantArmor implements GeoItem, CustomRendererArmor { - - private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); +public class UsChestIotv extends BulletResistantArmor { public UsChestIotv() { - super(ModArmorMaterials.CEMENTED_CARBIDE, Type.CHESTPLATE, new Properties().durability(Type.CHESTPLATE.getDurability(50)), 0.5f); - } - - @Override - public GeoArmorRenderer getRenderer() { - return new UsChestIotvArmorRenderer(); - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar data) { - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return this.cache; + super(ModArmorMaterials.CEMENTED_CARBIDE, + Type.CHESTPLATE, + new Properties().durability(Type.CHESTPLATE.getDurability(50)), + 0.5f, + UsChestIotvArmorRenderer::new + ); } } 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 40573eabe..cc6d2b08c 100644 --- a/src/main/java/com/atsuishio/superbwarfare/item/armor/UsHelmetPastg.java +++ b/src/main/java/com/atsuishio/superbwarfare/item/armor/UsHelmetPastg.java @@ -2,33 +2,14 @@ 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.Item; -import software.bernie.geckolib.animatable.GeoItem; -import software.bernie.geckolib.animatable.instance.AnimatableInstanceCache; -import software.bernie.geckolib.animation.AnimatableManager; -import software.bernie.geckolib.renderer.GeoArmorRenderer; -import software.bernie.geckolib.util.GeckoLibUtil; - -public class UsHelmetPastg extends BulletResistantArmor implements GeoItem, CustomRendererArmor { - - private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this); +public class UsHelmetPastg extends BulletResistantArmor { public UsHelmetPastg() { - super(ModArmorMaterials.CEMENTED_CARBIDE, Type.HELMET, new Properties().durability(Type.HELMET.getDurability(50)), 0.2f); - } - - @Override - public GeoArmorRenderer getRenderer() { - return new UsHelmetPastgArmorRenderer(); - } - - @Override - public void registerControllers(AnimatableManager.ControllerRegistrar data) { - } - - @Override - public AnimatableInstanceCache getAnimatableInstanceCache() { - return this.cache; + super(ModArmorMaterials.CEMENTED_CARBIDE, + Type.HELMET, + new Properties().durability(Type.HELMET.getDurability(50)), + 0.2f, + UsHelmetPastgArmorRenderer::new + ); } }