- Версия(и) Minecraft
- 1.16.5
Шалом, сегодня мы научимся выводить в конфиг скорость полёта брони(а так же создавать её).
И так, начнём.
С начала нужно сделать сам конфиг, он делается следующим образом:
регистрируем наш конфиг в главном классе(а именно в
После создания Enum'a нашего Тира, создаём класс, таким образом:
регистрируем по стандарту(ForgeRegistry):
И так, начнём.
С начала нужно сделать сам конфиг, он делается следующим образом:
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";
}
}
}
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)));