Иконка ресурса

{GUIDE} Выводим скорость полёта брони в конфиг

Версия(и) Minecraft
1.16.5
Шалом, сегодня мы научимся выводить в конфиг скорость полёта брони(а так же создавать её).

И так, начнём.

С начала нужно сделать сам конфиг, он делается следующим образом:
Config.java:
import net.minecraftforge.common.ForgeConfigSpec;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig;

@Mod.EventBusSubscriber
public class Config {

    public static final String CATEGORY_GENERAL = "general";

    public static ForgeConfigSpec COMMON_CONFIG;

    //Создаём DoubleValue брони
    public static ForgeConfigSpec.DoubleValue Example_Config;


    static {

        ForgeConfigSpec.Builder COMMON_BUILDER = new ForgeConfigSpec.Builder();

        COMMON_BUILDER.comment("General settings").push(CATEGORY_GENERAL);
        COMMON_BUILDER.pop();

        Example_Config = COMMON_BUILDER.comment(/[I]коментарий, который под #[/I]/"FLY SPEED").defineInRange(/[I]название конфига[/I]/"flySpeed",/[I]стандарное число, которое генерируется в конфиге[/I]/0.05, /[I]минимальное число[/I]/0.05, /[I]максимальное число[/I]/5);
        //собираем COMMON конфиг
        COMMON_CONFIG = COMMON_BUILDER.build();
    }

    @SubscribeEvent
    public static void onLoad(final ModConfig.Loading configEvent) {

    }

    @SubscribeEvent
    public static void onReload(final ModConfig.Reloading configEvent) {

    }


}

регистрируем наш конфиг в главном классе(а именно в public ModName(){})


Java:
public ModName() {
        ModLoadingContext.get().registerConfig(ModConfig.Type.COMMON, /*Config - название нашего класса,его можно назвать как угодно, НО НЕ НАЗВАЙТЕ КЛАСС ИМЕНЕМ ModConfig, ИБО ЭТО КЛАСС FORGE*/Config.COMMON_CONFIG);

        MinecraftForge.EVENT_BUS.register(this);
    }

После создания Enum'a нашего Тира, создаём класс, таким образом:

ExampleArmor.java:
public class ExampleArmor extends ArmorItem {
    public ExampleArmor(EquipmentSlotType slot, Properties builderIn) {
        super(ExampleArmorTier.ExampleArmorTier, slot, builderIn);
    }
    @Override
    public void onArmorTick(ItemStack stack, World world, PlayerEntity player) {
        super.onArmorTick(stack, world, player);
        if(!player.getPersistentData().contains("wearingWearingExampleArmorArmor"))player.getPersistentData()
                .putBoolean("wearingFullExampleArmorArmor", false);

        ItemStack head = player.getItemStackFromSlot(EquipmentSlotType.HEAD);
        ItemStack chest = player.getItemStackFromSlot(EquipmentSlotType.CHEST);
        ItemStack legs = player.getItemStackFromSlot(EquipmentSlotType.LEGS);
        ItemStack feet = player.getItemStackFromSlot(EquipmentSlotType.FEET);

        boolean isWearingFullExampleArmorArmor =
                head != null && head.getItem() == ExampleArmor_HELMET.get() &&
                chest != null && chest.getItem() == ExampleArmor_CHESTPLATE.get() &&
                legs != null && legs.getItem() == ExampleArmor_LEGS.get() &&
                feet != null && feet.getItem() == ExampleArmor_BOOTS.get();
        boolean wasWearingLXsArmorLastTick = player.getPersistentData()
                .getBoolean("wearingFullExampleArmor");
        // если не полная броня, отключаем полёт
        if(!isWearingFullExampleArmor && wasWearingLXsArmorLastTick && !player.isCreative())
        {
            player.abilities.allowFlying = false;
            player.abilities.isFlying = false;
            player.abilities.setFlySpeed(0.05F)
            //если броня полная, включаем полёт
        } else if((isWearingFullLXsArmor) && (world.getDimensionKey()
                .equals(World.OVERWORLD) || world.getDimensionKey().equals(World.THE_NETHER)
                || world.getDimensionKey().equals(World.THE_END)))
        {
            player.abilities.allowFlying = true;

            player.abilities.setFlySpeed(LXs_ARMOR_FLYING_SPEED.get()/[I]обязательно добавляем floatValue, т.е. трансформируем DoubleValue в floatValue, иначе выдаст ошибку[/I]/.floatValue());
        }
        player.getPersistentData().putBoolean("isWearingFullExampleArmor", isWearingFullExampleArmor);
    }
    @Override
    public String getArmorTexture(ItemStack itemstack, Entity entity, EquipmentSlotType slot, String layer)
    {
        if (slot == EquipmentSlotType.LEGS)
        {
            return ModId + ":textures/armor/examplearmor/examplearmor_2.png";
        }
        else
        {
            return ModId + ":textures/armor/examplearmor/examplearmor_1.png";
        }
    }
}
регистрируем по стандарту(ForgeRegistry):


Java:
private static final DeferredRegister<Item> ITEMS = DeferredRegister.create(ForgeRegistries.ITEMS, ModId);

    public static void init(){
        ITEMS.register(FMLJavaModLoadingContext.get().getModEventBus());
    }
    public static final RegistryObject<Item> EXAMPLE_HELMET = ITEMS.register("example_helmet",
        () -> new ExampleArmor(EquipmentSlotType.HEAD, new Item.Properties().group(ExampleMod.ExampleGroup)));
    public static final RegistryObject<Item> EXAMPLE_CHESTPLATE = ITEMS.register("example_chestplate",
            () -> new ExampleArmor(EquipmentSlotType.CHEST, new Item.Properties().group(ExampleMod.ExampleGroup)));
    public static final RegistryObject<Item> EXAMPLE_LEGS = ITEMS.register("example_leggings",
            () -> new ExampleArmor(EquipmentSlotType.LEGS, new Item.Properties().group(ExampleMod.ExampleGroup)));
    public static final RegistryObject<Item> EXAMPLE_BOOTS = ITEMS.register("example_boots",
            () -> new ExampleArmor(EquipmentSlotType.FEET, new Item.Properties().group(ExampleMod.ExampleGroup)));
Автор
AlgorithmLX
Просмотры
626
Первый выпуск
Обновление
Оценка
0.00 звёзд 0 оценок
Сверху