注册所有护甲

This commit is contained in:
Light_Quanta 2025-03-27 17:36:00 +08:00
parent c8f1d2271a
commit b2804b6a23
No known key found for this signature in database
GPG key ID: 11A39A1B8C890959
23 changed files with 685 additions and 10 deletions

View file

@ -52,6 +52,7 @@ public class ModUtils {
ModMenuTypes.REGISTRY.register(bus); ModMenuTypes.REGISTRY.register(bus);
ModVillagers.register(bus); ModVillagers.register(bus);
ModRecipes.RECIPE_SERIALIZERS.register(bus); ModRecipes.RECIPE_SERIALIZERS.register(bus);
ModArmorMaterials.MATERIALS.register(bus);
// bus.addListener(this::onCommonSetup); // bus.addListener(this::onCommonSetup);
// bus.addListener(this::onClientSetup); // bus.addListener(this::onClientSetup);

View file

@ -0,0 +1,24 @@
package com.atsuishio.superbwarfare.client.model.armor;
import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.item.armor.GeHelmetM35;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.model.GeoModel;
public class GeHelmetM35Model extends GeoModel<GeHelmetM35> {
@Override
public ResourceLocation getAnimationResource(GeHelmetM35 object) {
return null;
}
@Override
public ResourceLocation getModelResource(GeHelmetM35 object) {
return ModUtils.loc("geo/ge_helmet_m_35.geo.json");
}
@Override
public ResourceLocation getTextureResource(GeHelmetM35 object) {
return ModUtils.loc("textures/armor/ge_helmet_m_35.png");
}
}

View file

@ -0,0 +1,24 @@
package com.atsuishio.superbwarfare.client.model.armor;
import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.item.armor.RuChest6b43;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.model.GeoModel;
public class RuChest6b43Model extends GeoModel<RuChest6b43> {
@Override
public ResourceLocation getAnimationResource(RuChest6b43 object) {
return null;
}
@Override
public ResourceLocation getModelResource(RuChest6b43 object) {
return ModUtils.loc("geo/ru_chest_6b43.geo.json");
}
@Override
public ResourceLocation getTextureResource(RuChest6b43 object) {
return ModUtils.loc("textures/armor/ru_chest_6b43.png");
}
}

View file

@ -0,0 +1,24 @@
package com.atsuishio.superbwarfare.client.model.armor;
import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.item.armor.RuHelmet6b47;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.model.GeoModel;
public class RuHelmet6b47Model extends GeoModel<RuHelmet6b47> {
@Override
public ResourceLocation getAnimationResource(RuHelmet6b47 object) {
return null;
}
@Override
public ResourceLocation getModelResource(RuHelmet6b47 object) {
return ModUtils.loc("geo/ru_helmet_6b47.geo.json");
}
@Override
public ResourceLocation getTextureResource(RuHelmet6b47 object) {
return ModUtils.loc("textures/armor/ru_helmet_6b47.png");
}
}

View file

@ -0,0 +1,24 @@
package com.atsuishio.superbwarfare.client.model.armor;
import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.item.armor.UsChestIotv;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.model.GeoModel;
public class UsChestIotvModel extends GeoModel<UsChestIotv> {
@Override
public ResourceLocation getAnimationResource(UsChestIotv object) {
return null;
}
@Override
public ResourceLocation getModelResource(UsChestIotv object) {
return ModUtils.loc("geo/us_chest_iotv.geo.json");
}
@Override
public ResourceLocation getTextureResource(UsChestIotv object) {
return ModUtils.loc("textures/armor/us_chest_iotv.png");
}
}

View file

@ -0,0 +1,24 @@
package com.atsuishio.superbwarfare.client.model.armor;
import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.item.armor.UsHelmetPastg;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.model.GeoModel;
public class UsHelmetPastgModel extends GeoModel<UsHelmetPastg> {
@Override
public ResourceLocation getAnimationResource(UsHelmetPastg object) {
return null;
}
@Override
public ResourceLocation getModelResource(UsHelmetPastg object) {
return ModUtils.loc("geo/us_helmet_pastg.geo.json");
}
@Override
public ResourceLocation getTextureResource(UsHelmetPastg object) {
return ModUtils.loc("textures/armor/us_helmet_pastg.png");
}
}

View file

@ -0,0 +1,21 @@
package com.atsuishio.superbwarfare.client.renderer.armor;
import com.atsuishio.superbwarfare.client.model.armor.GeHelmetM35Model;
import com.atsuishio.superbwarfare.item.armor.GeHelmetM35;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.renderer.GeoArmorRenderer;
public class GeHelmetM35ArmorRenderer extends GeoArmorRenderer<GeHelmetM35> {
public GeHelmetM35ArmorRenderer() {
super(new GeHelmetM35Model());
this.head = new GeoBone(null, "", false, (double) 0, false, false);
}
@Override
public RenderType getRenderType(GeHelmetM35 animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
return RenderType.entityTranslucent(getTextureLocation(animatable));
}
}

View file

@ -0,0 +1,23 @@
package com.atsuishio.superbwarfare.client.renderer.armor;
import com.atsuishio.superbwarfare.client.model.armor.RuChest6b43Model;
import com.atsuishio.superbwarfare.item.armor.RuChest6b43;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.renderer.GeoArmorRenderer;
public class RuChest6b43ArmorRenderer extends GeoArmorRenderer<RuChest6b43> {
public RuChest6b43ArmorRenderer() {
super(new RuChest6b43Model());
this.body = new GeoBone(null, "armorBody", false, (double) 0, false, false);
this.rightArm = new GeoBone(null, "armorRightArm", false, (double) 0, false, false);
this.leftArm = new GeoBone(null, "armorLeftArm", false, (double) 0, false, false);
}
@Override
public RenderType getRenderType(RuChest6b43 animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
return RenderType.entityTranslucent(getTextureLocation(animatable));
}
}

View file

@ -0,0 +1,21 @@
package com.atsuishio.superbwarfare.client.renderer.armor;
import com.atsuishio.superbwarfare.client.model.armor.RuHelmet6b47Model;
import com.atsuishio.superbwarfare.item.armor.RuHelmet6b47;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.renderer.GeoArmorRenderer;
public class RuHelmet6b47ArmorRenderer extends GeoArmorRenderer<RuHelmet6b47> {
public RuHelmet6b47ArmorRenderer() {
super(new RuHelmet6b47Model());
this.head = new GeoBone(null, "", false, (double) 0, false, false);
}
@Override
public RenderType getRenderType(RuHelmet6b47 animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
return RenderType.entityTranslucent(getTextureLocation(animatable));
}
}

View file

@ -0,0 +1,23 @@
package com.atsuishio.superbwarfare.client.renderer.armor;
import com.atsuishio.superbwarfare.client.model.armor.UsChestIotvModel;
import com.atsuishio.superbwarfare.item.armor.UsChestIotv;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.renderer.GeoArmorRenderer;
public class UsChestIotvArmorRenderer extends GeoArmorRenderer<UsChestIotv> {
public UsChestIotvArmorRenderer() {
super(new UsChestIotvModel());
this.body = new GeoBone(null, "armorBody", false, (double) 0, false, false);
this.rightArm = new GeoBone(null, "armorRightArm", false, (double) 0, false, false);
this.leftArm = new GeoBone(null, "armorLeftArm", false, (double) 0, false, false);
}
@Override
public RenderType getRenderType(UsChestIotv animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
return RenderType.entityTranslucent(getTextureLocation(animatable));
}
}

View file

@ -0,0 +1,21 @@
package com.atsuishio.superbwarfare.client.renderer.armor;
import com.atsuishio.superbwarfare.client.model.armor.UsHelmetPastgModel;
import com.atsuishio.superbwarfare.item.armor.UsHelmetPastg;
import net.minecraft.client.renderer.MultiBufferSource;
import net.minecraft.client.renderer.RenderType;
import net.minecraft.resources.ResourceLocation;
import software.bernie.geckolib.cache.object.GeoBone;
import software.bernie.geckolib.renderer.GeoArmorRenderer;
public class UsHelmetPastgArmorRenderer extends GeoArmorRenderer<UsHelmetPastg> {
public UsHelmetPastgArmorRenderer() {
super(new UsHelmetPastgModel());
this.head = new GeoBone(null, "", false, (double) 0, false, false);
}
@Override
public RenderType getRenderType(UsHelmetPastg animatable, ResourceLocation texture, MultiBufferSource bufferSource, float partialTick) {
return RenderType.entityTranslucent(getTextureLocation(animatable));
}
}

View file

@ -0,0 +1,47 @@
package com.atsuishio.superbwarfare.init;
import com.atsuishio.superbwarfare.ModUtils;
import net.minecraft.Util;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.item.ArmorItem;
import net.minecraft.world.item.ArmorMaterial;
import net.minecraft.world.item.crafting.Ingredient;
import net.neoforged.neoforge.registries.DeferredHolder;
import net.neoforged.neoforge.registries.DeferredRegister;
import java.util.EnumMap;
import java.util.List;
public class ModArmorMaterials {
public static final DeferredRegister<ArmorMaterial> MATERIALS = DeferredRegister.create(BuiltInRegistries.ARMOR_MATERIAL, ModUtils.MODID);
public static final DeferredHolder<ArmorMaterial, ArmorMaterial> CEMENTED_CARBIDE = MATERIALS.register("cemented_carbide", () -> new ArmorMaterial(
Util.make(new EnumMap<>(ArmorItem.Type.class), p -> {
p.put(ArmorItem.Type.BOOTS, 3);
p.put(ArmorItem.Type.LEGGINGS, 6);
p.put(ArmorItem.Type.CHESTPLATE, 8);
p.put(ArmorItem.Type.HELMET, 3);
}),
10,
SoundEvents.ARMOR_EQUIP_IRON,
() -> Ingredient.of(ModItems.CEMENTED_CARBIDE_INGOT.value()),
List.of(),
4F, 0.05F)
);
public static final DeferredHolder<ArmorMaterial, ArmorMaterial> STEEL = MATERIALS.register("steel", () -> new ArmorMaterial(
Util.make(new EnumMap<>(ArmorItem.Type.class), p -> {
p.put(ArmorItem.Type.BOOTS, 2);
p.put(ArmorItem.Type.LEGGINGS, 5);
p.put(ArmorItem.Type.CHESTPLATE, 7);
p.put(ArmorItem.Type.HELMET, 2);
}),
9,
SoundEvents.ARMOR_EQUIP_IRON,
() -> Ingredient.of(ModItems.STEEL_INGOT.value()),
List.of(),
1F, 0)
);
}

View file

@ -2,6 +2,7 @@ package com.atsuishio.superbwarfare.init;
import com.atsuishio.superbwarfare.ModUtils; import com.atsuishio.superbwarfare.ModUtils;
import com.atsuishio.superbwarfare.item.*; import com.atsuishio.superbwarfare.item.*;
import com.atsuishio.superbwarfare.item.armor.*;
import com.atsuishio.superbwarfare.item.common.BlueprintItem; import com.atsuishio.superbwarfare.item.common.BlueprintItem;
import com.atsuishio.superbwarfare.item.common.CannonShellItem; import com.atsuishio.superbwarfare.item.common.CannonShellItem;
import com.atsuishio.superbwarfare.item.common.MaterialPack; import com.atsuishio.superbwarfare.item.common.MaterialPack;
@ -138,13 +139,13 @@ public class ModItems {
// public static final DeferredHolder<Item, Item> HAMMER = ITEMS.register("hammer", Hammer::new); // public static final DeferredHolder<Item, Item> HAMMER = ITEMS.register("hammer", Hammer::new);
public static final DeferredHolder<Item, Item> CROWBAR = ITEMS.register("crowbar", Crowbar::new); public static final DeferredHolder<Item, Item> CROWBAR = ITEMS.register("crowbar", Crowbar::new);
// public static final DeferredHolder<Item, Item> DEFUSER = ITEMS.register("defuser", Defuser::new); // public static final DeferredHolder<Item, Item> DEFUSER = ITEMS.register("defuser", Defuser::new);
// public static final DeferredHolder<Item, Item> ARMOR_PLATE = ITEMS.register("armor_plate", ArmorPlate::new); public static final DeferredHolder<Item, Item> ARMOR_PLATE = ITEMS.register("armor_plate", ArmorPlate::new);
// //
// public static final DeferredHolder<Item, Item> RU_HELMET_6B47 = ITEMS.register("ru_helmet_6b47", RuHelmet6b47::new); public static final DeferredHolder<Item, Item> RU_HELMET_6B47 = ITEMS.register("ru_helmet_6b47", RuHelmet6b47::new);
// public static final DeferredHolder<Item, Item> RU_CHEST_6B43 = ITEMS.register("ru_chest_6b43", RuChest6b43::new); public static final DeferredHolder<Item, Item> RU_CHEST_6B43 = ITEMS.register("ru_chest_6b43", RuChest6b43::new);
// public static final DeferredHolder<Item, Item> US_HELMET_PASTG = ITEMS.register("us_helmet_pastg", UsHelmetPastg::new); public static final DeferredHolder<Item, Item> US_HELMET_PASTG = ITEMS.register("us_helmet_pastg", UsHelmetPastg::new);
// public static final DeferredHolder<Item, Item> US_CHEST_IOTV = ITEMS.register("us_chest_iotv", UsChestIotv::new); public static final DeferredHolder<Item, Item> US_CHEST_IOTV = ITEMS.register("us_chest_iotv", UsChestIotv::new);
// public static final DeferredHolder<Item, Item> GE_HELMET_M_35 = ITEMS.register("ge_helmet_m_35", GeHelmetM35::new); public static final DeferredHolder<Item, Item> GE_HELMET_M_35 = ITEMS.register("ge_helmet_m_35", GeHelmetM35::new);
// public static final DeferredHolder<Item, Item> MORTAR_DEPLOYER = ITEMS.register("mortar_deployer", MortarDeployer::new); // public static final DeferredHolder<Item, Item> MORTAR_DEPLOYER = ITEMS.register("mortar_deployer", MortarDeployer::new);
public static final DeferredHolder<Item, Item> MORTAR_BARREL = ITEMS.register("mortar_barrel", () -> new Item(new Item.Properties())); public static final DeferredHolder<Item, Item> MORTAR_BARREL = ITEMS.register("mortar_barrel", () -> new Item(new Item.Properties()));
public static final DeferredHolder<Item, Item> MORTAR_BASE_PLATE = ITEMS.register("mortar_base_plate", () -> new Item(new Item.Properties())); public static final DeferredHolder<Item, Item> MORTAR_BASE_PLATE = ITEMS.register("mortar_base_plate", () -> new Item(new Item.Properties()));

View file

@ -0,0 +1,107 @@
package com.atsuishio.superbwarfare.item;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.tools.NBTTool;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.sounds.SoundSource;
import net.minecraft.util.Mth;
import net.minecraft.world.InteractionHand;
import net.minecraft.world.InteractionResultHolder;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.entity.LivingEntity;
import net.minecraft.world.entity.player.Player;
import net.minecraft.world.item.Item;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.TooltipFlag;
import net.minecraft.world.item.UseAnim;
import net.minecraft.world.level.Level;
import org.jetbrains.annotations.NotNull;
import javax.annotation.ParametersAreNonnullByDefault;
import java.util.List;
public class ArmorPlate extends Item {
public ArmorPlate() {
super(new Properties());
}
@Override
@ParametersAreNonnullByDefault
public void appendHoverText(ItemStack stack, TooltipContext context, List<Component> tooltipComponents, TooltipFlag tooltipFlag) {
if (NBTTool.getOrCreateTag(stack).getBoolean("Infinite")) {
tooltipComponents.add(Component.translatable("des.superbwarfare.armor_plate.infinite").withStyle(ChatFormatting.GRAY));
}
}
@Override
@ParametersAreNonnullByDefault
public @NotNull InteractionResultHolder<ItemStack> use(Level worldIn, Player playerIn, InteractionHand handIn) {
ItemStack stack = playerIn.getItemInHand(handIn);
ItemStack armor = playerIn.getItemBySlot(EquipmentSlot.CHEST);
if (armor == ItemStack.EMPTY) return InteractionResultHolder.fail(stack);
int armorLevel = 1;
if (armor.is(ModTags.Items.MILITARY_ARMOR)) {
armorLevel = 2;
} else if (armor.is(ModTags.Items.MILITARY_ARMOR_HEAVY)) {
armorLevel = 3;
}
// TODO 解决数据双端同步问题
if (NBTTool.getOrCreateTag(armor).getDouble("ArmorPlate") < armorLevel * 15) {
playerIn.startUsingItem(handIn);
}
return InteractionResultHolder.fail(stack);
}
@Override
public @NotNull UseAnim getUseAnimation(@NotNull ItemStack stack) {
return UseAnim.BOW;
}
@Override
@ParametersAreNonnullByDefault
public @NotNull ItemStack finishUsingItem(ItemStack pStack, Level pLevel, LivingEntity pLivingEntity) {
if (!pLevel.isClientSide) {
ItemStack armor = pLivingEntity.getItemBySlot(EquipmentSlot.CHEST);
int armorLevel = 1;
if (armor.is(ModTags.Items.MILITARY_ARMOR)) {
armorLevel = 2;
} else if (armor.is(ModTags.Items.MILITARY_ARMOR_HEAVY)) {
armorLevel = 3;
}
NBTTool.getOrCreateTag(armor).putDouble("ArmorPlate", Mth.clamp(NBTTool.getOrCreateTag(armor).getDouble("ArmorPlate") + 15, 0, armorLevel * 15));
if (pLivingEntity instanceof ServerPlayer serverPlayer) {
serverPlayer.level().playSound((Entity) null, serverPlayer.getOnPos(), SoundEvents.ARMOR_EQUIP_IRON.value(), SoundSource.PLAYERS, 0.5f, 1);
}
if (pLivingEntity instanceof Player player && !player.isCreative() && !NBTTool.getOrCreateTag(pStack).getBoolean("Infinite")) {
pStack.shrink(1);
}
}
return super.finishUsingItem(pStack, pLevel, pLivingEntity);
}
@Override
@ParametersAreNonnullByDefault
public int getUseDuration(ItemStack stack, LivingEntity entity) {
return 20;
}
public static ItemStack getInfiniteInstance() {
ItemStack stack = new ItemStack(ModItems.ARMOR_PLATE.get());
NBTTool.getOrCreateTag(stack).putBoolean("Infinite", true);
return stack;
}
}

View file

@ -0,0 +1,8 @@
package com.atsuishio.superbwarfare.item;
import net.minecraft.world.item.Item;
import software.bernie.geckolib.renderer.GeoArmorRenderer;
public interface CustomRendererArmor {
GeoArmorRenderer<? extends Item> getRenderer();
}

View file

@ -0,0 +1,8 @@
package com.atsuishio.superbwarfare.item;
import net.minecraft.world.item.Item;
import software.bernie.geckolib.renderer.GeoItemRenderer;
public interface CustomRendererItem {
GeoItemRenderer<? extends Item> getRenderer();
}

View file

@ -0,0 +1,41 @@
package com.atsuishio.superbwarfare.item.armor;
import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.item.CustomRendererArmor;
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();
// TODO other params?
this.renderer.prepForRender(livingEntity, itemStack, equipmentSlot, original);
return this.renderer;
}
}, item);
}
}
}

View file

@ -0,0 +1,47 @@
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;
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 {
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public GeHelmetM35() {
super(ModArmorMaterials.STEEL, Type.HELMET, new Properties());
}
@Override
public GeoArmorRenderer<? extends Item> getRenderer() {
return new GeHelmetM35ArmorRenderer();
}
// TODO attribute modifier
// @Override
// public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack) {
// Multimap<Attribute, AttributeModifier> 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) {
}
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return this.cache;
}
}

View file

@ -0,0 +1,47 @@
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;
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 {
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public RuChest6b43() {
super(ModArmorMaterials.CEMENTED_CARBIDE, Type.CHESTPLATE, new Properties());
}
@Override
public GeoArmorRenderer<? extends Item> getRenderer() {
return new RuChest6b43ArmorRenderer();
}
// TODO attribute
// @Override
// public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack) {
// Multimap<Attribute, AttributeModifier> 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) {
}
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return this.cache;
}
}

View file

@ -0,0 +1,47 @@
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;
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 {
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public RuHelmet6b47() {
super(ModArmorMaterials.CEMENTED_CARBIDE, Type.HELMET, new Properties());
}
@Override
public GeoArmorRenderer<? extends Item> getRenderer() {
return new RuHelmet6b47ArmorRenderer();
}
// todo attribute
// @Override
// public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack) {
// Multimap<Attribute, AttributeModifier> 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) {
}
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return this.cache;
}
}

View file

@ -0,0 +1,47 @@
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;
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 {
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public UsChestIotv() {
super(ModArmorMaterials.CEMENTED_CARBIDE, Type.CHESTPLATE, new Properties());
}
@Override
public GeoArmorRenderer<? extends Item> getRenderer() {
return new UsChestIotvArmorRenderer();
}
// todo attribute
// @Override
// public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack) {
// Multimap<Attribute, AttributeModifier> 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) {
}
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return this.cache;
}
}

View file

@ -0,0 +1,47 @@
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;
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 {
private final AnimatableInstanceCache cache = GeckoLibUtil.createInstanceCache(this);
public UsHelmetPastg() {
super(ModArmorMaterials.CEMENTED_CARBIDE, Type.HELMET, new Properties());
}
@Override
public GeoArmorRenderer<? extends Item> getRenderer() {
return new UsHelmetPastgArmorRenderer();
}
// todo attribute
// @Override
// public Multimap<Attribute, AttributeModifier> getAttributeModifiers(EquipmentSlot slot, ItemStack stack) {
// Multimap<Attribute, AttributeModifier> 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) {
}
@Override
public AnimatableInstanceCache getAnimatableInstanceCache() {
return this.cache;
}
}

View file

@ -6,6 +6,7 @@ import com.atsuishio.superbwarfare.client.PoseTool;
import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent; import com.atsuishio.superbwarfare.client.tooltip.component.GunImageComponent;
import com.atsuishio.superbwarfare.init.ModItems; import com.atsuishio.superbwarfare.init.ModItems;
import com.atsuishio.superbwarfare.init.ModTags; import com.atsuishio.superbwarfare.init.ModTags;
import com.atsuishio.superbwarfare.item.CustomRendererItem;
import com.atsuishio.superbwarfare.perk.Perk; import com.atsuishio.superbwarfare.perk.Perk;
import com.atsuishio.superbwarfare.tools.AmmoType; import com.atsuishio.superbwarfare.tools.AmmoType;
import com.atsuishio.superbwarfare.tools.GunsTool; import com.atsuishio.superbwarfare.tools.GunsTool;
@ -32,14 +33,13 @@ import net.neoforged.fml.common.EventBusSubscriber;
import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions; import net.neoforged.neoforge.client.extensions.common.IClientItemExtensions;
import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent; import net.neoforged.neoforge.client.extensions.common.RegisterClientExtensionsEvent;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import software.bernie.geckolib.renderer.GeoItemRenderer;
import javax.annotation.ParametersAreNonnullByDefault; import javax.annotation.ParametersAreNonnullByDefault;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
@EventBusSubscriber(modid = ModUtils.MODID, bus = EventBusSubscriber.Bus.MOD) @EventBusSubscriber(modid = ModUtils.MODID, bus = EventBusSubscriber.Bus.MOD)
public abstract class GunItem extends Item { public abstract class GunItem extends Item implements CustomRendererItem {
public GunItem(Properties properties) { public GunItem(Properties properties) {
super(properties); super(properties);
@ -414,8 +414,6 @@ public abstract class GunItem extends Item {
} }
} }
public abstract GeoItemRenderer<? extends GunItem> getRenderer();
@SubscribeEvent @SubscribeEvent
private static void registerGunExtensions(RegisterClientExtensionsEvent event) { private static void registerGunExtensions(RegisterClientExtensionsEvent event) {
for (var item : ModItems.GUNS.getEntries()) { for (var item : ModItems.GUNS.getEntries()) {