正确渲染盔甲
This commit is contained in:
parent
b9cff51b28
commit
de26447164
7 changed files with 85 additions and 182 deletions
|
@ -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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -2,31 +2,72 @@ package com.atsuishio.superbwarfare.item.armor;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.Mod;
|
import com.atsuishio.superbwarfare.Mod;
|
||||||
import com.atsuishio.superbwarfare.init.ModAttributes;
|
import com.atsuishio.superbwarfare.init.ModAttributes;
|
||||||
|
import net.minecraft.client.model.HumanoidModel;
|
||||||
import net.minecraft.core.Holder;
|
import net.minecraft.core.Holder;
|
||||||
|
import net.minecraft.world.entity.EquipmentSlot;
|
||||||
import net.minecraft.world.entity.EquipmentSlotGroup;
|
import net.minecraft.world.entity.EquipmentSlotGroup;
|
||||||
|
import net.minecraft.world.entity.LivingEntity;
|
||||||
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
|
import net.minecraft.world.entity.ai.attributes.AttributeModifier;
|
||||||
import net.minecraft.world.item.ArmorItem;
|
import net.minecraft.world.item.ArmorItem;
|
||||||
import net.minecraft.world.item.ArmorMaterial;
|
import net.minecraft.world.item.ArmorMaterial;
|
||||||
|
import net.minecraft.world.item.Item;
|
||||||
import net.minecraft.world.item.ItemStack;
|
import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.component.ItemAttributeModifiers;
|
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.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<GeoArmorRenderer<? extends Item>> renderer;
|
||||||
|
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
|
||||||
|
|
||||||
public BulletResistantArmor(Holder<ArmorMaterial> material, Type type, Properties properties) {
|
@Override
|
||||||
super(material, type, properties);
|
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
||||||
}
|
return this.cache;
|
||||||
|
|
||||||
public BulletResistantArmor(Holder<ArmorMaterial> material, Type type, Properties properties, float bulletResistance) {
|
|
||||||
super(material, type, properties);
|
|
||||||
this.bulletResistance = bulletResistance;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ItemAttributeModifiers getDefaultAttributeModifiers(ItemStack stack) {
|
public void createGeoRenderer(Consumer<GeoRenderProvider> consumer) {
|
||||||
|
consumer.accept(new GeoRenderProvider() {
|
||||||
|
private GeoArmorRenderer<? extends Item> renderer;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public <T extends LivingEntity> HumanoidModel<?> getGeoArmorRenderer(T livingEntity, ItemStack itemStack, EquipmentSlot equipmentSlot, HumanoidModel<T> 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<ArmorMaterial> material, Type type, Properties properties, Supplier<GeoArmorRenderer<? extends Item>> renderer) {
|
||||||
|
super(material, type, properties);
|
||||||
|
this.renderer = renderer;
|
||||||
|
}
|
||||||
|
|
||||||
|
public BulletResistantArmor(Holder<ArmorMaterial> material, Type type, Properties properties, float bulletResistance, Supplier<GeoArmorRenderer<? extends Item>> 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 modifiers = super.getDefaultAttributeModifiers(stack);
|
||||||
var list = new ArrayList<>(modifiers.modifiers());
|
var list = new ArrayList<>(modifiers.modifiers());
|
||||||
list.add(new ItemAttributeModifiers.Entry(ModAttributes.BULLET_RESISTANCE, new AttributeModifier(Mod.ATTRIBUTE_MODIFIER,
|
list.add(new ItemAttributeModifiers.Entry(ModAttributes.BULLET_RESISTANCE, new AttributeModifier(Mod.ATTRIBUTE_MODIFIER,
|
||||||
|
|
|
@ -2,33 +2,13 @@ package com.atsuishio.superbwarfare.item.armor;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.client.renderer.armor.GeHelmetM35ArmorRenderer;
|
import com.atsuishio.superbwarfare.client.renderer.armor.GeHelmetM35ArmorRenderer;
|
||||||
import com.atsuishio.superbwarfare.init.ModArmorMaterials;
|
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() {
|
public GeHelmetM35() {
|
||||||
super(ModArmorMaterials.STEEL, Type.HELMET, new Properties().durability(Type.HELMET.getDurability(35)));
|
super(ModArmorMaterials.STEEL,
|
||||||
}
|
Type.HELMET,
|
||||||
|
new Properties().durability(Type.HELMET.getDurability(35)),
|
||||||
@Override
|
GeHelmetM35ArmorRenderer::new
|
||||||
public GeoArmorRenderer<? extends Item> getRenderer() {
|
);
|
||||||
return new GeHelmetM35ArmorRenderer();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
|
||||||
return this.cache;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,33 +2,14 @@ package com.atsuishio.superbwarfare.item.armor;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.client.renderer.armor.RuChest6b43ArmorRenderer;
|
import com.atsuishio.superbwarfare.client.renderer.armor.RuChest6b43ArmorRenderer;
|
||||||
import com.atsuishio.superbwarfare.init.ModArmorMaterials;
|
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() {
|
public RuChest6b43() {
|
||||||
super(ModArmorMaterials.CEMENTED_CARBIDE, Type.CHESTPLATE, new Properties().durability(Type.CHESTPLATE.getDurability(50)), 0.5f);
|
super(ModArmorMaterials.CEMENTED_CARBIDE,
|
||||||
}
|
Type.CHESTPLATE,
|
||||||
|
new Properties().durability(Type.CHESTPLATE.getDurability(50)),
|
||||||
@Override
|
0.5f,
|
||||||
public GeoArmorRenderer<? extends Item> getRenderer() {
|
RuChest6b43ArmorRenderer::new
|
||||||
return new RuChest6b43ArmorRenderer();
|
);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
|
||||||
return this.cache;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,33 +2,14 @@ package com.atsuishio.superbwarfare.item.armor;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.client.renderer.armor.RuHelmet6b47ArmorRenderer;
|
import com.atsuishio.superbwarfare.client.renderer.armor.RuHelmet6b47ArmorRenderer;
|
||||||
import com.atsuishio.superbwarfare.init.ModArmorMaterials;
|
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() {
|
public RuHelmet6b47() {
|
||||||
super(ModArmorMaterials.CEMENTED_CARBIDE, Type.HELMET, new Properties().durability(Type.HELMET.getDurability(50)), 0.2f);
|
super(ModArmorMaterials.CEMENTED_CARBIDE,
|
||||||
}
|
Type.HELMET,
|
||||||
|
new Properties().durability(Type.HELMET.getDurability(50)),
|
||||||
@Override
|
0.2f,
|
||||||
public GeoArmorRenderer<? extends Item> getRenderer() {
|
RuHelmet6b47ArmorRenderer::new
|
||||||
return new RuHelmet6b47ArmorRenderer();
|
);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
|
||||||
return this.cache;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,33 +2,14 @@ package com.atsuishio.superbwarfare.item.armor;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.client.renderer.armor.UsChestIotvArmorRenderer;
|
import com.atsuishio.superbwarfare.client.renderer.armor.UsChestIotvArmorRenderer;
|
||||||
import com.atsuishio.superbwarfare.init.ModArmorMaterials;
|
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() {
|
public UsChestIotv() {
|
||||||
super(ModArmorMaterials.CEMENTED_CARBIDE, Type.CHESTPLATE, new Properties().durability(Type.CHESTPLATE.getDurability(50)), 0.5f);
|
super(ModArmorMaterials.CEMENTED_CARBIDE,
|
||||||
}
|
Type.CHESTPLATE,
|
||||||
|
new Properties().durability(Type.CHESTPLATE.getDurability(50)),
|
||||||
@Override
|
0.5f,
|
||||||
public GeoArmorRenderer<? extends Item> getRenderer() {
|
UsChestIotvArmorRenderer::new
|
||||||
return new UsChestIotvArmorRenderer();
|
);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
|
||||||
return this.cache;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,33 +2,14 @@ package com.atsuishio.superbwarfare.item.armor;
|
||||||
|
|
||||||
import com.atsuishio.superbwarfare.client.renderer.armor.UsHelmetPastgArmorRenderer;
|
import com.atsuishio.superbwarfare.client.renderer.armor.UsHelmetPastgArmorRenderer;
|
||||||
import com.atsuishio.superbwarfare.init.ModArmorMaterials;
|
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() {
|
public UsHelmetPastg() {
|
||||||
super(ModArmorMaterials.CEMENTED_CARBIDE, Type.HELMET, new Properties().durability(Type.HELMET.getDurability(50)), 0.2f);
|
super(ModArmorMaterials.CEMENTED_CARBIDE,
|
||||||
}
|
Type.HELMET,
|
||||||
|
new Properties().durability(Type.HELMET.getDurability(50)),
|
||||||
@Override
|
0.2f,
|
||||||
public GeoArmorRenderer<? extends Item> getRenderer() {
|
UsHelmetPastgArmorRenderer::new
|
||||||
return new UsHelmetPastgArmorRenderer();
|
);
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void registerControllers(AnimatableManager.ControllerRegistrar data) {
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public AnimatableInstanceCache getAnimatableInstanceCache() {
|
|
||||||
return this.cache;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue