XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

MyDimension-Lord

【我的世界】我的维度附属模组:维度之主

公开
关注 0 Fork 0 Star 0
UTF-8
package com.xfestudio.mydimensionlord.platform;

import com.xfestudio.mydimensionlord.MyDimension;
import com.xfestudio.mydimensionlord.equipment.GearSet;
import com.xfestudio.mydimensionlord.equipment.EquipmentRules;
import com.xfestudio.mydimensionlord.item.DimensionBladeItem;
import com.xfestudio.mydimensionlord.item.DimensionPickaxeItem;
import com.xfestudio.mydimensionlord.item.LordArmorItem;
import com.xfestudio.mydimensionlord.equipment.PickaxePowers;
import com.xfestudio.mydimensionlord.registry.EquipmentItems;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.sounds.SoundEvent;
import net.minecraft.sounds.SoundEvents;
import net.minecraft.world.entity.EquipmentSlot;
import net.minecraft.world.item.*;
import net.minecraft.world.item.crafting.Ingredient;
import java.util.List;

/** Vanilla armor and sword classes retain enchanting, anvil and smithing behavior. */
public final class EquipmentFactory {
    private EquipmentFactory() {}
    public static Item material(String id) { return new Item(new Item.Properties().fireResistant().rarity(Rarity.UNCOMMON)); }
    public static Item armor(GearSet set, EquipmentSlot slot) {
        ArmorItem.Type type = ArmorItem.Type.valueOf(EquipmentItems.slotName(slot).toUpperCase(java.util.Locale.ROOT));
        return new LordArmorItem(new MindArmorMaterial(set), type, new Item.Properties().fireResistant().rarity(Rarity.EPIC));
    }
    public static Item blade() { return new DimensionBladeItem(BLADE_TIER, new Item.Properties().fireResistant().rarity(Rarity.EPIC)); }
    public static Item pickaxe() { return new DimensionPickaxeItem(PICKAXE_TIER, new Item.Properties().fireResistant().rarity(Rarity.EPIC)); }
    public static Item template() {
        return new SmithingTemplateItem(Component.translatable("smithing.mydimension_lord.applies_to"),
                Component.translatable("smithing.mydimension_lord.ingredients"),
                Component.translatable("smithing.mydimension_lord.title"),
                Component.translatable("smithing.mydimension_lord.base_slot"),
                Component.translatable("smithing.mydimension_lord.addition_slot"),
                List.of(icon("helmet"), icon("chestplate"), icon("leggings"), icon("boots"), icon("sword"), icon("pickaxe")), List.of(icon("ingot"), icon("amethyst_shard")));
    }
    private static ResourceLocation icon(String name) { return new ResourceLocation("minecraft", "item/empty_slot_" + name); }
    private record MindArmorMaterial(GearSet set) implements ArmorMaterial {
        public int getDurabilityForType(ArmorItem.Type type) { return set.durability(EquipmentItems.slotIndex(type.getSlot())); }
        public int getDefenseForType(ArmorItem.Type type) { return set.protection(EquipmentItems.slotIndex(type.getSlot())); }
        public int getEnchantmentValue() { return 25; }
        public SoundEvent getEquipSound() { return SoundEvents.ARMOR_EQUIP_NETHERITE; }
        public Ingredient getRepairIngredient() { return Ingredient.of(EquipmentItems.repairMaterial(set)); }
        public String getName() { return MyDimension.MOD_ID + ":" + set.id(); }
        public float getToughness() { return set.toughness(); }
        public float getKnockbackResistance() { return set.knockbackResistance(); }
    }
    public static final Tier BLADE_TIER = new Tier() {
        public int getUses() { return EquipmentRules.BLADE_DURABILITY; }
        public float getSpeed() { return 9.0F; }
        public float getAttackDamageBonus() { return 4.0F; }
        public int getLevel() { return 4; }
        public int getEnchantmentValue() { return 25; }
        public Ingredient getRepairIngredient() { return Ingredient.of(EquipmentItems.LORD_CORE.get()); }
    };
    public static final Tier PICKAXE_TIER = new Tier() {
        public int getUses() { return PickaxePowers.DURABILITY; }
        public float getSpeed() { return 100.0F; }
        public float getAttackDamageBonus() { return 4.0F; }
        public int getLevel() { return 4; }
        public int getEnchantmentValue() { return 25; }
        public Ingredient getRepairIngredient() { return Ingredient.of(EquipmentItems.LORD_CORE.get()); }
    };
}