In this article, we will look at how to find and edit JSON and CFG config files for Minecraft mods. JSON and CFG are the two most commonly used formats for modded configuration files.
Contents
- Finding Configuration Files
- Finding Configs Using Multicraft
- Finding Configs Using FTP
- Editing Configuration Files
- Editing with Multicraft
- Editing with FTP
- Modded Minecraft Config File Types
- CFG File Type Overview
- JSON File Type Overview
- Zenscript Overview
- File Type rules
- CFG Rules
- JSON Rules
- Further Reading & External Links
Finding Config Files With Multicraft
Multicraft is set to look for configuration files in the locations where they would normally be put and put them all in one spot for easy searching, you can find steps below on how to search all of the config files that Multicraft finds:
- Log into Multicraft
- In the
Filessection of the side menu on the left, selectConfig Files. - You can filter the files by using the search boxes above each column, if you want to find a configuration for a specific mod, you can search the mod name in the
Descriptioncolumn of the config file list.
Finding Config Files With FTP
This section is only for users who are familiar with how to use FTP to: Upload and Download Files with FTP
Config files for mods are most commonly located in the config folder of your server. When mods don’t use this location the config file can be hard to find, most mod authors will typically tell you where the config file is on the main page for the mod, check to see if it indicates there if you can’t find the config in this folder.
Editing Configuration Files
STICKY NOTE
Before you edit any configuration files, stop your server and take a backup of the world.
Editing Config Files with Multicraft
- Click the name of the file you would like to edit in the file list of the
Config Filesmenu in Multicraft. - Edit the config however you want
- At the bottom of the page hit
Savewhen you are done.
Editing Config Files with FTP
Editing files downloaded with FTP can be done in any editor, we highly recommend using Notepad++ which can be downloaded for free from:
Notepad++ Downloads
Editing configuration files can be confusing because the text will not be highlighted to help you know what means what and it is much easier to break something. For this reason we highly recommend editing configuration files through Multicraft.
Modded Minecraft Config File Types
CFG File Type Overview
A config properties file is a type of file that makes data easier for humans to read. This is the format that most mods will use for their configurations. Below you can find an example of what cfg data looks like.
# this is a comment, it can be used to give information to the human only
# this is a direct value assignment
option_1_name = option_1_value
# This is a list of values
> option_2_name
option_2_value_1
option_2_value_2
option_2_value_3
<
JSON File Type Overview
JSON is another type of data file that some mods will use, this format is often harder for humans to be able to read as it does not allow the use of comments in most cases. JSON also has very strict rules for how it is written, and violating those rules can cause the server or mod not to start, or even cause the mod/server to behave in an unexpected way. Below you can see an example of valid JSON:
{
"option_1_name": "option_1_value",
"option_2_name": [
"option_2_value_1",
"option_2_value_2",
"option_2_value_3",
42
],
"option_3_name": {
"option_3.1_name": "option_3.1_value",
"option_3.2_name": 9001,
"option_3.3_name": 3.141
}
}
As you can see, without comments that can get hard to read depending on how complicated the configuration is, we always recommend verifying to make sure that any JSON you write is correct using the validator below:
JSONLint
Zenscript Overview
Very rarely, a mod will use a Zenscript file for it’s configuration, this article won’t discuss Zenscript, due to it being almost a full on programming language. Only a very small subset of mods will use this configuration file type, for information on how to edit Zenscript you can use the official documentation: Zenscript Documentation
File Type Rules
CFG Rules
CFG files have a fairly simple way of being written, below are the rules on which CFG files are written. Most mod configurations will have all the tags that they look for already in the file, along with a brief description in a comment about what happens, these rules will help you to understand what is happening in these files so you aren’t confused while modifying them.
- To associate a single value to a tag name, you use
tag_name = value(replacingtag_namewith the name of the tag you’d like to use, andvaluewith the value of it). - Comments begin with a
#(hashtag) at the start of the line - If you want to associate multiple values to a single tag, you can do that by using:
> tag_name value_1 value_2 <Where the tag_name is usually set by the mod authors, if it is set, do not change it as the mod will be looking for that exact name. The values are slightly more forgiving, they may be changed to different values depending on the mod, the mod will often indicate what values are allowed in a comment before it or on a wiki.
JSON Rules
JSON is more strict in it’s writing than CFG, so you should be extra diligent while filling it in so as to make sure that no errors occur. Below are some of the more prominent rules in JSON, a full description can be found at the official JSON specification: JSON Specification
- Comments are not supported by default. You may see some keys with a name like
comment1to indicate that the value is a comment, not all configs will try to use comments and just use a website documentation or help document inside of the folder instead. - Keys must be enclosed in double quotes (
"), followed by a colon (:), then a value. Example:"key_name": "value"(note: not all values are enclosed in quotes, see the values list for more information) - Values can be one of the following types:
- String: A series of characters inside of double quotes. In order for double quotes to be able to be in the string they must be escaped by putting a backslash (
) in front of it (Ex:"). (Ex:"This is a string, it can have anything in it. Like: 90187491ht3iou32nr83. If I wanted to "quote something" inside of the string, I'd need to escape those double quotations with a backslash") - Number: A number that can be a whole number (Ex:
42), a decimal number (Ex:3.141), or a number represented in scientific notation (Ex:9.001e+3) - Object: An object is a sub list of keys and values enclosed by a pair of curly brackets (
{}). These objects will rarely need to be created by the user, this is usually something the mod creator will use just to group options better. - Array: An array is a list of values associated with that key enclosed by square brackets, the values that are within the array can be any of the value types in this list (including array). The values in an array are separated by a comma (
,). Example:["value_1", 42, 3.141, "value_4"] - Boolean: A boolean value indicates a true/false scenario, the only values that are considered boolean are
trueandfalse, and they must be spelt exactly like that, they cannot have uppercase letters, and are not enclosed in quotations. Example:"key_name": true - Null:
nullis a special value that denotes «nothing», some configs will use this as placeholder values until it is filled in.
Note: JSON does not allow comments within it, meaning that if you find a JSON configuration where will likely be no help inside of the file. If a mod uses a JSON config, then they will often supply help documents either in the folder with the config or on the mod’s website.
- String: A series of characters inside of double quotes. In order for double quotes to be able to be in the string they must be escaped by putting a backslash (
- Key/Value pairs must be enclosed in curly brackets (
{}) and separated with a comma (,). Example:{"key_1": "value_1", "key_2": "value_2"}
JSON does not care about any spacing, so you can have it all on one line, or split across multiple lines and it will behave exactly the same way unless you broke a string by splitting across lines.
StickyPiston Support
If you have questions about this guide or any part of our Minecraft services, please open a support ticket and our dedicated team will be in touch.
Open Support Ticket
Обновлено: 09.02.2023
В этой части мы поговорим о: аргументах запуска сервера, настройке server.properties, конфигурации Bukkit.
Начнем с самого главного — server.properties. Он включает себя настройки самого сервера и некоторые геймплейные фичи.
Мы не рассматриваем все фичи, а только лишь которые стоят по-умолчанию. Подробнее здесь.
Этот конфиг вы уже можете поставить к себе на сервер и настроить под себя.
Теперь о аргументах запуска. Они не особо важны, если у вас все прописано в конфиге, однако мы рассмотрим самые важные.
Все аргументы пишутся без скобок.
Следующее — конфиг Bukkit. Помните, что конфиг использует язык YAML, а значит из-за лишнего пробела может не заработать.
Я настоятельно рекомендую не копировать к себе конфиг с комментариями, иначе могут быть ошибки.
Итак, на сегодня все. В следующей части мы поговорим об конфигурации Spigot и самых важных плагинах. Да, знаю, немного скучновато, может и не понятно. Но я писал гайд, расчитывая на пользователей, которые настроены серьезно и обладают хотя-бы базовыми знаниями игры.
о конфигурационном файле minecraft
Ядерная (атомная) бомба — самый мощный тип взрывчатки в Industrial Craft2. Поражает огромную площадь, при этом уничтожая 75% выпавших блоков. Аналогичным эффектом обладает взрыв ядерного реактора при перегреве, однако реактор бьёт больше вглубь, чем на радиус. Активируется только сигналом красного камня или любым переключателем. Время до детонации чуть дольше, чем у обычного ТНТ. На слабых компьютерах взрыв ядерной бомбы может понизить количество кадров. Даже на мощных компьютерах большое количество взрываемых ядерных бомб вызовет лаги.
Параметр 35.0 является стандартной мощностью взрыва бомбы. Можно выставить значение на свой вкус, но с увеличением мощности усиливаются лаги на сервере, вплоть до его падения. Оптимальным является параметр 80.0-100.0.
Начиная с версии 1.106, взрыв ядерной бомбы оставляет после себя заражённую радиацией область. К любому игроку или мобу, зашедшему в неё, будут применены эффекты отравления и голода.
Внутриигровое изменение конфига
Предыстория
Я захотел создать свой конфиг, чтобы игроки могли изменять характеристики у предметов, механизмов и т.д.. Всё получилось, но вот проблема, изменять конфиг можно было только в самом файле конфига, а в игре, кнопка Config была неактивна. (как много слова конфиг)
На форуме я не нашёл туториала по этой теме, поэтому после того как я разобрался в этой теме я и решил написать данный тутор, для будущих поколений так сказать.
Сам тутор
Начнём с прочтения Перевод — Аннотации конфигурации
После создаём класс Configs (название на ваш выбор)
[Гайд] Как установить сборку на Minecraft? Установка модпаков
Сборка, или клиент майнкрафт с модами это набор модов, файлы их настройка + могут быть текстуры, карты, шейдеры которые идут в комплекте.
Иногда, достаточно просто взять все моды и закинуть в папку mods, установить Minecraft Forge и все будет работать.
Качественные сборки содержат не только моды, а еще и их настройки, измененные крафты, квесты, параметры которые позволяют «совместить или сбалансировать» некоторые моды. Обычно, все настройки модов хранятся в папке .minecraftconfig.
Разные лаунчеры имеют разный функционал, многие умеют устанавливать версии с Minecraft Forge или Optifine, некоторые умеют запускать игру из любой указанной вами папки.
В данном гайде речь пойдет о установке в стандартную папку .minecraft
ВАЖНАЯ РЕКОМЕНДАЦИЯ:
Если вы хотите рабочую сборку, то следуйте нескольким правилам:
1) Удалите уберите все свои моды перед установкой.
2) Удалите уберите все файлы из папки .minecraftconfig
3) Внимательно читайте инструкцию по установке для каждой сборки, там могут быть дополнительные шаги.
4) Используйте либо рекомендуемую автором версию ForgeFabricдругой загрузчик, либо если версия не указана — самую последнюю.
Для начала вам необходимо установить Minecraft необходимой версии, запустить, проверить, что все работает и все окей, вы знаете где находится папка .minecraft, что такое лаунчер, что такое Forge итд.
Если автор указал на какой версии Forge его сборка проверялась, то установите именно ее, либо можете установить более новую версию.
- Установите Minecraft нужной версии + Forge (или другой загрузчик) указанной версии, либо последней.
- Проверьте, что версия игры с необходимой версий Forge (или другой загрузчик) запускается без модов.
- Скопируйте папки из сборки (mods, config итд) в .minecraft (объедините папки).
- Запускайте версию игры с Forge которую вы установили.
- assets
- config
- libraries
- mods
- resourcepacks
- scripts
- shaderpacks
- versions
- и другие
- Удалитеуберите все содержимое папки .minecraft (папку saves с мирами можно оставить).
- Скопируйте все содержимое сборки (все папки и файлы) внутри своей папки .minecraft
- Проверьте лаунчер, там могла появиться новая версия игры (если в клиенте есть папка versions)
- Попробуйте запустить эту версию игры.
- Если версия не запускается, либо ее нет вообще, установите Forge (или другой загрузчик) указанной или последней версии и запустите.
Внутри архива .exe файл, или сама сборка скачивается в виде .exe.
Значит автор создал установщик для данной сборки.
Установка данной сборки
Необходимо запустить скачанный файл, он установится подобно обычной программе или игры, предложит вам «установить или распаковать» игру в какую-то папку, в этой папке вы найдете все те же папки вроде mods, config, assets. Что с ними делать читайте выше.
[GUIDE] Настройка конфигов — Forge
Эта новость специально для Mollner On. Эта новость поможет ему делать уже более хорошие сборки. Пример: JEI. Прошу не кидаться тапочками, помидорами, бананами и подобному.
1. Заходим в Minecraft и нажимаем «Модификации» (в 1.9 и ниже — «Mods»)
2. После, видим странное меню, но всё просто. Нам нужна кнопочка «Config».
3. Тут по труднее, мы видим несколько кнопок. Начнём разбираться.
3.1 Красный — сама настройка.
3.2 Зелёный — поднастройка, т. е. подраздел. При переходи туда, вы можете настроить больше.
3.3 Жёлтый — применяет это ко ВСЕМУ моду.
3.4 Фиолетовый — отменить действие.
3.5 Голубой — Установить по умолчанию.
4. Если текст наклонён, то это значит что вы этот конфиг уже изменили.
Вот и всё, думаю гайд вам показался полезным. Спасибо за просмотр данной статьи!
Решение проблем, если что-то не запускается и не работает:
-
Сборка не запускается, после нажатия на играть ничего не происходит или вылетает лаунчер.
Причины: — данная версия игры (например 1.15.2 с Minecraft Forge 1.15.2-31.1.46 ) создана в другом лаунчере, часто они не умеют запускать версии друг друга.
Установите такую-же версию вручную используя установщик Forge
2) Вы пытаетесь запустить сборку на не подходящей версии Forge, слишком старой или новой.
Часто лаунчеры устанавливаются Forge или Optifine слишком старых версий, установите самые новые версии.
3) У вас не хватает оперативной памяти для всех модов, многие сборки требуют 2, 4, и даже 6 гб оперативной памяти. В настройках лаунчера должно быть выставлено достаточное количество оперативной памяти, попробуйте увеличить.
4) Вы установили версию Forge+optifine и пытаетесь запустить сборку у которой Optifine уже находится в папке mods
Читайте также:
- Fallout new vegas как узнать id квеста
- Как убивать сирен в ведьмаке
- Система vac cs go что это
- Что делать с обломками в astroneer
- Vampire life мясо монстра где взять
- Версия(и) Minecraft
-
1.12.x
Предыстория
Я захотел создать свой конфиг, чтобы игроки могли изменять характеристики у предметов, механизмов и т.д.. Всё получилось, но вот проблема, изменять конфиг можно было только в самом файле конфига, а в игре, кнопка Config была неактивна. (как много слова конфиг)
На форуме я не нашёл туториала по этой теме, поэтому после того как я разобрался в этой теме я и решил написать данный тутор, для будущих поколений так сказать.
Сам тутор
Начнём с прочтения Перевод — Аннотации конфигурации
После создаём класс Configs(название на ваш выбор)
package com.example.examplemod;
import net.minecraftforge.common.config.Config;
import net.minecraftforge.fml.common.Mod;
@Config(modid = ExampleMod.MODID) // Данная аннотация отвечает за создание гуи конфига
@Mod.EventBusSubscriber(modid = ExampleMod.MODID)
public class Configs {
// Данное событие нужно для того, чтобы все значения которые были изменены в игре, перезаписывались в самом конфиг файле
@SubscribeEvent
public static void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event) {
if (event.getModID().equals(ExampleMod.MODID)) {
ConfigManager.sync(ExampleMod.MODID, Config.Type.INSTANCE);
}
}
}
@Config(modid = ExampleMod.MODID) — здесь мы объявляем что данный конфиг именно для нашего мода
P.s. Вы так же можете указать name для файла конфигурации @Config(modid = ExampleMod.MODID, name = "exampleCFG"), если name не указан, файл получит название такое же, как modid который вы указали.
@Mod.EventBusSubscriber(modid = ExampleMod.MODID) — облегчаем себе жизнь
Дальше тутор можно разделить на две части:
Добавим пункт, например int значения
package com.example.examplemod;
import net.minecraftforge.common.config.Config;
import net.minecraftforge.common.config.ConfigManager;
import net.minecraftforge.fml.client.event.ConfigChangedEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@Config(modid = ExampleMod.MODID)
@Mod.EventBusSubscriber(modid = ExampleMod.MODID)
public class Configs {
@Config.LangKey(ExampleMod.MODID + ".cfg.item1_maxstack") // Локализированное имя пункта (Если не будет указано, пункт будет именть название переменной)
@Config.Comment("How many maximum items will be in the stack") // Описание которое выводится при наведении на пункт
@Config.RangeInt(min = 1, max = 64) // Ограничиваем игрока в значениях
@Config.RequiresMcRestart // Говорим, чтобы изменения вступили в силу, нужно перезапустить майнкрафт
public static int item1_maxstack = 64;
// Данное событие нужно для того, чтобы все значения которые были изменены в игре, перезаписывались в самом конфиг файле
@SubscribeEvent
public static void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event) {
if (event.getModID().equals(ExampleMod.MODID)) {
ConfigManager.sync(ExampleMod.MODID, Config.Type.INSTANCE);
}
}
}
Заходим в игру и видим заветную кнопку Config
В Config видим наш локализованный пункт
и всё, что мы указывали в аннотациях
Допустим у нас есть такой конструктор предмета (Взято с учебника)
package com.example.examplemod.item;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
public class ItemList extends Item {
public ItemList(String name, int setMaxStack, CreativeTabs setTab) { // второй аргумент отвечает за максимальный стак
this.setRegistryName(name);
this.setUnlocalizedName(name);
this.setCreativeTab(setTab);
this.setMaxStackSize(setMaxStack);
}
}
Перейдём в регистрацию (Взято с учебника)
package com.example.examplemod.misc.registr;
import com.example.examplemod.Configs;
import com.example.examplemod.ExampleMod;
import com.example.examplemod.item.ItemList;
import com.example.examplemod.misc.tabs.TabsList;
import net.minecraft.client.renderer.block.model.ModelBakery;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.item.Item;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.event.ModelRegistryEvent;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.registry.GameRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@GameRegistry.ObjectHolder(ExampleMod.MODID)
@Mod.EventBusSubscriber
public class ItemsRegistry {
@GameRegistry.ObjectHolder("key")
public static final Item KEY = null;
@SubscribeEvent
public static void onRegistryItem(RegistryEvent.Register<Item> e) {
e.getRegistry().register(new ItemList("key", Configs.item1_maxstack, TabsList.EXtabs)); // Во втором аргументе мы используем значение которое берём из конфига
}
@SubscribeEvent
@SideOnly(Side.CLIENT)
public static void onRegistryModel(ModelRegistryEvent e) {
registryModel(KEY);
}
@SideOnly(Side.CLIENT)
private static void registryModel(Item item) {
final ResourceLocation regName = item.getRegistryName();
final ModelResourceLocation mrl = new ModelResourceLocation(regName, "inventory");
ModelBakery.registerItemVariants(item, mrl);
ModelLoader.setCustomModelResourceLocation(item, 0, mrl);
}
}
Конфиг с категориями немного отличается в реализации и в использовании.
В категории можно добавлять ещё и ещё категорий.
@Config.LangKey(ExampleMod.MODID + ".cfg.sub.other") // Локализированное имя категории (Если не будет указано, пункт будет именть название переменной)
@Config.Comment("Here you can change item description") // Описание которое выводится при наведении на категорию
public static OtherSettings OtherSettings = new OtherSettings(); // Создаём категорию
public static class OtherSettings {
@Config.LangKey(ExampleMod.MODID + ".cfg.sub.other.item1_description") // Локализированное имя пункта (Если не будет указано, пункт будет именть название переменной)
public String item1_description = "Default description";
@Config.LangKey(ExampleMod.MODID + ".cfg.sub.other.item1_description2_status")
public boolean item1_statusdecription2 = false;
@Config.LangKey(ExampleMod.MODID + ".cfg.sub.other.item1_description2") // Локализированное имя пункта (Если не будет указано, пункт будет именть название переменной)
public String item1_description2 = "Secret description";
}
Позволим игроку самому менять описание предмета
package com.example.examplemod.item;
import com.example.examplemod.Configs;
import net.minecraft.client.util.ITooltipFlag;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import javax.annotation.Nullable;
import java.util.List;
public class ItemList extends Item {
public ItemList(String name, int setMaxStack, CreativeTabs setTab) {
this.setRegistryName(name);
this.setUnlocalizedName(name);
this.setCreativeTab(setTab);
this.setMaxStackSize(setMaxStack);
}
@Override
public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn) {
tooltip.add(Configs.OtherSettings.item1_description);
if(Configs.OtherSettings.item1_statusdecription2)
tooltip.add(Configs.OtherSettings.item1_description2);
}
}
Конец
Надеюсь мой туториал поможет хоть кому-то)
package com.example.examplemod;
import net.minecraftforge.common.config.Config;
import net.minecraftforge.common.config.ConfigManager;
import net.minecraftforge.fml.client.event.ConfigChangedEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@Config(modid = ExampleMod.MODID)
@Mod.EventBusSubscriber(modid = ExampleMod.MODID)
public class Configs {
@Config.LangKey(ExampleMod.MODID + ".cfg.sub.other") // Локализированное имя категории (Если не будет указано, пункт будет именть название переменной)
@Config.Comment("Here you can change item description") // Описание которое выводится при наведении на категорию
public static OtherSettings OtherSettings = new OtherSettings(); // Создаём категорию
public static class OtherSettings {
@Config.LangKey(ExampleMod.MODID + ".cfg.sub.other.item1_description") // Локализированное имя пункта (Если не будет указано, пункт будет именть название переменной)
public String item1_description = "Default description";
@Config.LangKey(ExampleMod.MODID + ".cfg.sub.other.item1_description2_status")
public boolean item1_statusdecription2 = false;
@Config.LangKey(ExampleMod.MODID + ".cfg.sub.other.item1_description2") // Локализированное имя пункта (Если не будет указано, пункт будет именть название переменной)
public String item1_description2 = "Secret description";
}
@Config.LangKey(ExampleMod.MODID + ".cfg.item1_maxstack") // Локализированное имя пункта (Если не будет указано, пункт будет именть название переменной)
@Config.Comment("How many maximum items will be in the stack") // Описание которое выводится при наведении на пункт
@Config.RangeInt(min = 1, max = 64) // Ограничиваем игрока в значениях
@Config.RequiresMcRestart // Говорим, чтобы изменения вступили в силу, нужно перезапустить майнкрафт
public static int item1_maxstack = 64;
// Данное событие нужно для того, чтобы все значения которые были изменены в игре, перезаписывались в самом конфиг файле
@SubscribeEvent
public static void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent event) {
if (event.getModID().equals(ExampleMod.MODID)) {
ConfigManager.sync(ExampleMod.MODID, Config.Type.INSTANCE);
}
}
}
-
1616235152806.png
7.5 KB · Просмотры: 173
# Конфигурации OpenComputers. Этот файл использует типизированный синтаксис HOCON.
# Вы можете включить подсветку кода Ruby, для простоты чтения конфигураций.
# Обратите внимание, что этот файл перезаписывается когда вы запускаете игру!
# Изменения комментариев могут исчезнуть.
# Примечание: "KB" или "килобайт" означает 1024 байта.
opencomputers {
# Настройки клиента. Отображение, производительность и т.д.
client {
# Это масштаб символов на экране. По умолчанию установлен на небольшое
# увеличение, во избежание
fontCharScale=1.01
# Максимальная дистанция, на которой рендерится текст на мониторах.
# Рендеринг текста может отразиться на производительности, особенно,
# если у вас много мониторов. Обратите внимание, что эта настройка
# относится только к производительности на стороне клиента.
maxScreenTextRenderDistance=20
# Отображает названия роботов в виде меток сверху, когда вы рядом
robotLabels=true
# Расстояние, на котором текст на экранах начинает темнеть. Это
# декоративный эффект, сделанный, чтобы текст не исчезал с мониторов
# внезапно. Не оказывает особенного эффекта на производительность.
# Внимание: для отображения эффекта необходим OpenGL 1.4.
screenTextFadeStartDistance=15
# Громкость звуков модификации. (Например — жужжание компьютера.)
# Установка параметра в 0 — отключает звуки.
soundVolume=1
# Если вы предпочитаете не сглаженный текст на мониторах
# (без анти-алиасинга) отключите этот параметр
textAntiAlias=true
# Применяется ли линейная фильтрация для текста на мониторах, когда
# изменяется разрешение монитора, или игрок смотрит на текст издалека.
# Функция сгладит текстуру, но символы могут плохо соединяться вместе.
# (Например при отображении псевдографики)
textLinearFiltering=false
}
# Параметры компьютеров, производительность серверов и безопасность.
computer {
# Активно ли используется сборщик мусора Lua каждый раз, перед запуском
# Lua на компьютере. Это имеет два преимущества: во-первых, освобождается
# оперативная память, и программы меньше рискуют ее переполнить. Во-вторых
# программы могут точнее определять объем доступной памяти через
# os.freeMemory() (в противном случае это значение может немного "скакать").
# Недостатки: на это тратится немного больше ресурсов процессора.
# Тем не менее, в условиях небольших объемов оперативной памяти по умолчанию,
# этот параметр очень важен.
activeGC=true
# Позволяет ли загружать прекомпилированный байт-код через Lua 'load',
# или аналогичные функции (`loadfile`, `dofile`). Включайте это, только
# если вы абсолютно уверены во всех пользователях вашего сервера и загружаемом
# Lua-коде. Это может оказаться БОЛЬШОЙ УЯЗВИМОСТЬЮ, т.к. прекомпилированный
# код легко может содержать эксплойты и запускать произвольный код на реальном
# сервере!
# Итак: используйте это, только если вы знаете на что идете!
allowBytecode=false
# Это определяет, используются ли компьютеры только зарегистрированными
# пользователями. По умолчанию, новый компьютер не имеет пользователей.
# Т.е. он доступен для любого игрока. Аккаунтами можно управлять через
# Lua API (computer.addUser, computer.removeUser, computer.users).
# Для пользователей доступно:
# — ввод с клавиатуры и тач-скрин
# — доступ к инвентарю
# — удаление блоков компьютера
# Если параметр установлен в false, все компьютеры всегда будут доступны
# всем игрокам, вне зависимости от списка зарегистрированных пользователей.
# См. также: `maxUsers` и `maxUsernameLength`.
canComputersBeOwned=true
# Количество компонентов, которые поддерживают ЦПУ разных уровней
# Список должен содержать ровно три числа.
cpuComponentCount=[
8,
12,
16
]
# Удаляется ли содержимое папки /tmp при "мягкой" перезагрузке
# (при помощи computer.shutdown(true)). При выключении компьютера
# или системном крахе, папка /tmp очищается в любом случае.
eraseTmpOnReboot=false
# Эта настройка используется для отслеживания ошибок, которые возникают
# при вызове функций Lua. По умолчанию, сообщения об ошибках возвращаются
# обратно в Lua. Если вы получили странную ошибку, или разрабатываете дополнение,
# вы захотите получить подробный список ошибок. Включение этого параметра
# позволяет вести подробный лог ошибок в игровом логе. По умолчанию, параметр
# отключен, чтобы не спамить в лог сообщениями о незначительных
# событиях вроде IllegalArgumentException.
logCallbackErrors=false
# Профилактическое ограничение на длину никнейма для пользователей компьютеров.
# См. также: `canComputersBeOwned`.
maxUsernameLength=32
# Максимальное количество пользователей, которых можно зарегистрировать
# на одном компьютере. Параметр введен для того, чтобы компьютер не
# выделял тратил неограниченное количество памяти на регистрацию
# бесконечного количества пользователей.
# См. также: `canComputersBeOwned`.
maxUsers=16
# Этот параметр позволяет вам произвести точную настройку размеров RAM
# на 64 битных машинах. (Когда сервер Minecraft запущен в 64 битной VM).
# Для чего это нужно? Объекты занимают больше памяти в 64 битном окружении,
# по сравнению с 32 битным, т.к. указатели и возможно некоторые числовые типы
# имеют вдвое больший размер. Невозможно свести все к точному параметру,
# поэтому его необходимо подобрать. Если вы заметите, что значение параметра
# не соответствует необходимому, поменяйте его и сообщите мне свои наблюдения!
# Примечание: значения отображаемые computer.totalMemory и computer.freeMemory
# всегда соответствуют заданным объемам установленных планок памяти. К примеру,
# на компьютере с 64KB RAM, даже если они модифицированы этим параметром
# до 96KB, computer.totalMemory вернет 64KB, а если там свободно 45KB,
# computer.freeMemory вернет 32KB.
ramScaleFor64Bit=1.8
# Объемы планок памяти разных уровней, в килобайтах. Список должен
# содержать шесть значений, или будет проигнорирован.
ramSizes=[
64,
96,
128,
256,
512,
1024
]
# Время в секундах, которое компьютер ждет после загрузки локации, прежде
# чем заработать. Сделано во избежание непрогрузки некоторых частей сети,
# и прочих странных глюков.
startupDelay=0.25
# Общее количество потоков в компьютерах. Какое бы действие не произошло,
# например — получен сигнал, или истекло время таймера, оно попадает в
# очередь рабочего потока. Большее число потоков уменьшит вероятность
# блокирования события, но повысит нагрузку на систему.
threads=4
# Время в секундах, которое программа может работать вхолостую, пока ее не
# прервут принудительно.
# Используется для того, чтобы избежать глупых или злоумышленных программ,
# которые блокируют другие компьютеры, закрывая стартовый поток.
# Этот параметр не влияет на уже запущенные компьютеры и будет применен
# к ним только после перезагрузки.
timeout=5
}
# Параметры файловой системы, производительность и баланс.
filesystem {
# Сохраняются ли данные постоянных файловых систем (таких как дисководы)
# в буфер, который записывается на винчестер, только при сохранении
# игрового мира. Этот параметр влияет на все жесткие диски. Плюсы:
# данные никогда не "рассинхронизируются" в случае краха игры.
# Минусы: большее потребление оперативной памяти, т.к. все загруженные
# файлы игра будет держать в памяти.
bufferChanges=true
# Базовый "вес" одного файла или папки в ограниченной файловой системе,
# такой как жесткие диски. Когда вычисляется занятое пространство, это
# значение добавляется к реальному весу файла (папки). Это сделано для того
# чтобы пользователь не мог "спамить" в файловую систему бесконечным числом
# папок или файлов. При этом значение, возвращаемое функциями API всегда
# отображает настоящий "вес" файла.
fileCost=512
# Размер дискет, в килобайтах.
floppySize=512
# Размеры трех поколений жестких дисков, в килобайтах. Список должен
# содержать ровно три значения, иначе будет проигнорирован.
hddSizes=[
1024,
2048,
4096
]
# Максимальное число файлов, которые каждый компьютер может держать открытыми
# одновременно, на одну файловую систему. Поскольку файловые системы виртуальны,
# этот параметр не сильно влияет на производительность.
maxHandles=16
# Максимальный размер блока, который может быть прочтен за один вызов
# "read". Сделано для ограничения объемов памяти, которые Lua выделяет для
# чтения файлов. Также влияет на производительность работы с файловой
# системой.
maxReadBuffer=2048
# Размер временной файловой системы /tmp, которую предоставляет каждый
# компьютер. Если установить отрицательное число, временная файловая система
# не будет создана.
tmpSize=64
}
# Настройки интернета, безопасность.
internet {
# Черный список доменов. Если имя домена в HTTP запросе совпадет с одним из
# этих шаблонов, запрос будет блокирован. Все шаблоны в списке — регулярные
# выражения, которые применяются только к имени хоста (домену) заданного URL.
blacklist=[
"^127\.0\.0\.1$",
"^10\.\d+\.\d+\.\d+$",
"^192\.\d+\.\d+\.\d+$",
"^localhost$"
]
# Разрешены ли HTTP запросы интернет платами. Если разрешены,
# метод 'request' интернет-компонента будет доступен.
enableHttp=true
# Разрешены ли TCP соединения через интернет плату. Если разрешены,
# метод 'connect' интернет-компонента будет доступен.
enableTcp=true
# Максимальное число одновременных TCP подключений на одну интернет плату.
maxTcpConnections=4
# Число потоков, которые используются для обработки HTTP запросов
# в фоне. Чем оно выше, тем больше подключений может обрабатывать компьютер
# одновременно, и меньше время ожидания.
requestThreads=4
# Время в секундах, ожидания ответа на запрос, прежде чем произойдет
# таймаут и будет возвращено сообщение об ошибке. Если это 0 (по умолчанию),
# запрос будет обрабатываться вечно.
requestTimeout=0
# Белый список доменов. Запросы могут быть посланы только на домены,
# которые совпадают с шаблонами в списке. Если список пуст, разрешены все
# домены, которые не содержатся в черном списке. Черный список используется
# всегда, так что, если домен содержится в обоих списках, черный побеждает.
# Все шаблоны в списке — регулярные выражения, которые применяются только
# к имени хоста (домену) заданного URL. Примеры:
# "^gist\.github\.com$", "^(:?www\.)?pastebin\.com$"
whitelist=[]
}
# Другие полезные параметры.
misc {
# На некоторых платформах нативные библиотеки могут вызывать падение игры, поэтому
# здесь встроена проверка загрузки таких библиотек. Это касается
# Windows XP и Windows Server 2003. Если вы считаете, что-то может заработать
# неправильно, установите параметр 'true'. Используйте его на
# свой страх и риск. Если игра вылетела после установки флага 'true',
# НЕ СООБЩАЙТЕ МНЕ ОБ ЭТОМ.
alwaysTryNative=false
# Передавать ли имя пользователя, который вызвал сигнал ввода данных
# (клавиатура или мышь). Отключите, если это мешает погружению в игру.
inputUsername=true
# Возможность (или скорее, взвешенный шанс), что диск с программой
# появится в сундуке с сокровищами. Для справки, железные слитки имеют
# шанс 10, золотые слитки — 5, а алмазы — 3. Какой именно диск это будет,
# определяет генератор случайных чисел.
lootProbability=5
# Максимальная длина строки, которую можно вставить. Ограничивает размер данных,
# которые посылаются на сервер, когда пользователь пытается вставить
# строку из буфера обмена (Shift+Ins на мониторе с клавиатурой).
maxClipboard=1024
# Максимальный размер сетевых пакетов, которые могут быть посланы
# через сетевую плату. Это не имеет отношения к реальному сетевому трафику.
# Ограничение установлено для того, чтобы избежать потери данных при
# пересылке пакетов большого размера компьютером с небольшим количеством
# оперативной памяти. Не имеет отношения к HTTP трафику.
maxNetworkPacketSize=8192
# Максимальная высота мультиблочного экрана, в блоках. Ограничено, чтобы
# избежать затратных вычислений при объединении мониторов. Если вам
# требуется монитор большего размера, попробуйте увеличивать параметр
# постепенно (по одному блоку), пока не появятся проблемы.
maxScreenHeight=6
# Максимальная ширина мультиблочных мониторов, в блоках.
# См. также: `maxScreenHeight`.
maxScreenWidth=8
# Максимальное расстояние, на которое может быть послан беспроводной сигнал.
# Другими словами, это максимальная сила сигнала, который может послать
# беспроводная сетевая плата. Ограничивает радиус, в котором производится
# поиск модемов, чтобы избежать смешных ситуаций, когда например, радиус
# обнаружения больше, чем радиус загружаемых чанков.
# См. также: `wirelessStrength`.
maxWirelessRange=400
# Количество беспроводных терминалов, которое поддерживает сервер каждого
# уровня.
terminalsPerTier=[
2,
4,
8
]
# Проверять и информировать ли о наличии новых версий (соединяется с Guthub
# один раз, когда первый игрок входит на сервер или запускается первая
# локальная игра).
updateCheck=true
}
# Настройки энергии, размеры буферов и расход.
power {
# Размеры буферов по умолчанию. Например, сколько энергии могут хранить
# те или иные блоки.
buffer {
# Количество энергии, которое может хранить один аккумулятор.
capacitor=1600
# Количество дополнительной энергии, которую может накопить аккумулятор,
# когда присоединен вплотную к другому аккумулятору. Бонус делится
# между несколькими "соседями". Так, три аккумулятора в ряд могут
# накопить 8.8к энергии по умолчанию:
# (1.6 + 0.8 + 0.4)k + (0.8 + 1.6 + 0.8)k + (0.4 + 0.8 + 1.6)k
capacitorAdjacencyBonus=800
# Количество энергии, которую может хранить компьютер.
computer=500
# Количество энергии, которое может хранить конвертер.
converter=1000
# Количество энергии, которое может хранить каждая сторона распределителя.
# Если параметр равен 0, два соединенных вместе распределителя не смогут
# передавать энергию.
distributor=500
# Количество энергии, которое может хранить робот.
robot=50000
}
# Количество энергии, которое зарядное устройство передает каждому
# соседнему роботу за один "такт" при максимальном сигнале редстоуна.
chargerChargeRate=100
# Расход энергии по умолчанию на разные операции.
cost {
# Затраты на один пакет посланный устройству StargateTech 2.
abstractBusPacket=1
# Количество энергии, потребляемой компьютером за один "такт".
computer=0.5
# Энергия, которую тратит монитор на заливку экрана "пробелами".
gpuClear=0.1
# Энергия, которую тратит монитор на копирование половины
# базового экрана командой 'copy'.
gpuCopy=0.25
# Энергия, которую тратит монитор на заливку базового экрана
# командой 'fill'.
gpuFill=1
# Энергия, которую монитор тратит на то, чтобы поменять каждый
# пиксель командой 'set' на базовом экране.
gpuSet=2
# Энергия, которую занимает чтение одного килобайта из файловой
# системы. При этом, не операции ввода/вывода, такие как 'list'
# или 'getFreeSpace' не тратят энергию. Этот параметр также
# определяет, сколько энергии должно быть в сети, для того, чтобы
# запустить компьютер и загрузить все библиотеки (на момент
# написания — около 60KB).
hddRead=0.1
# Энергия, которую тратит запись одного килобайта в файловую
# систему.
hddWrite=0.25
# Энергия, которую тратит голографический проектор за один "такт".
# Это стоимость каждой "колонны" которая высвечена. Если не
# активен ни один воксель, проектор не потребляет энергию.
hologram=0.2
# Количество энергии, потребляемой роботом за одни "такт". Это значение
# по умолчанию меньше, чем для компьютера. (Что же... робот лучше
# оптимизирован).
robot=0.25
# Коэффициент энергетических затрат при использовании предметов.
# Ноль означает, что на это не тратится энергии. Один — что энергия
# расходуется один к одному (к "усталости"). Например — усталость
# при добыче блока — 0.025, атака существа — 0.3, и т.д.
robotExhaustion=10
# Энергия, которую робот тратит при перемещении на один блок.
robotMove=15
# Энергия, которую робот тратит при повороте на 90 градусов.
robotTurn=2.5
# Количество энергии, потребляемой монитором на один "такт". За каждый
# освещенный пиксель (каждый символ, отличный от пробела) затраты
# возрастают линейно: это число означает затраты базового монитора
# полностью заполненного символами за один "такт". Мониторы больших
# уровней могут тратить больше энергии, т.к. имеют большее разрешение.
# Недостаточное количество энергии приведет к отключению монитора.
# При этом он не "забудет" свое изображение, и после восстановления
# питания покажет все снова (вместе с изменениями, которые произошли
# за время отключения).
# Примечание: в мультиблочных мониторах, каждый составной монитор
# тратит энергию.
screen=0.05
# Затраты на работу для роботов и компьютеров домножаются на это
# значение, при работе в "спящем" режиме. Они могут включить такой
# режим командой 'os.sleep()' или ожидая сигналов.
# Примечание: этот параметр не распространяется на "такт" в который
# происходит пробуждение, т.е. фейковый "сон" командой 'os.sleep(0)'
# не подействует.
sleepFactor=0.1
# Энергия на отправку беспроводного сообщения мощность один (т.е. на
# один блок расстоянием). Это значение линейно увеличивается, например,
# на отправку сигнала на 400 блоков, будет задействовано
# wirelessStrength * 400 энергии.
wirelessStrength=0.05
}
# Эффективность апгрейда-генератора. 1.0 означает, что он будет
# вырабатывать столько же, сколько паровой двигатель (Stirling
# Engine) из BuildCraft (1MJ за один "такт"). По умолчанию,
# это значение немного снижено.
generatorEfficiency=0.8
# Игнорировать ли все требования энергии. Когда устройство требует энергию
# для работы, оно ищет ее в сети, к которой подключено. Этот параметр
# будет всегда возвращать положительный ответ. При этом вся сеть будет
# функционировать в обычном режиме (кроме конвертера, который перестанет
# принимать энергию других модификаций).
ignorePower=false
# Эффективность апгрейда-солнечной панели. 1.0 означает, что она будет
# вырабатывать столько же, сколько паровой двигатель (Stirling
# Engine) из BuildCraft. По умолчанию это значение сильно снижено.
solarGeneratorEfficiency=0.2
# Этот параметр определяет, колебания спадов энергии какой частоты
# заставят устройство искать ее в сети. Это касается роботов,
# компьютеров и мониторов. Кроме того, этот параметр регулирует, с
# какой частотой распределители обновляют свое глобальное состояние,
# и как часто конвертер забирает энергию с ее источников (теперь:
# только BuildCraft). Значение 1 — каждый такт. Значение по умолчанию —
# каждые 20 тактов, т.е. — раз в секунду.
# Значение больше означает более точное обновление данных по энергии
# в сети, при этом чуть больше вычислений каждый такт (не должно
# сильно влиять на производительность).
# Примечание: этот параметр не влияет на энергопотребление отдельных
# устройств. Затраты вычисляются по формуле `tickFrequency * cost`.
tickFrequency=10
}
# Настройки роботов, что они могут делать, и общий баланс.
robot {
# Может ли робот активировать блоки в мире. Например, нажимать кнопки
# или поворачивать рычаги. Отключите этот параметр, если он вызывает
# конфликты в каких-либо модификациях (дайте мне знать о этом!) или если
# вы считаете, что это слишком круто для роботов.
allowActivateBlocks=true
# Определяет, могут ли роботы использовать предметы с определенной
# продолжительностью. Например — натягивать луки.
allowUseItemsWithDuration=true
# Могут ли роботы наносить урон игрокам, если те оказываются на пути робота.
# Это касается всех существ 'player', которые могут быть не только
# реальными игроками в игре.
canAttackPlayers=false
# Тонкая настройка скорости выполнения роботом разных действий.
delays {
# Время в секундах, на задержку после успешной выгрузки одного
# предмета из инвентаря робота.
drop=0.5
# Задержка при сборе блоков по отношению ко времени, которое тратит
# на это игрок. Учтите, что роботы не могут ломать блоки, которые
# они не могут собрать. Таким образом, время на добычу одного блока
# вычисляется как: breakTime * harvestRatio.
# Добыча одного блока всегда тратит хотя бы один такт (0.05 секунд).
harvestRatio=1
# Задержка в секундах после успешного движения на один блок.
# Этот параметр влияет на скорость робота, определяя длительность
# анимации движения.
move=0.4
# Задержка в секундах после успешного размещения блока в игровом
# мире.
place=0.4
# Задержка в секундах, после успешного поглощения блока роботом,
# при выполнении команды 'suck'.
suck=0.5
# Задержка в секундах после успешного "взмаха" инструментом.
# (Или "манипулятором" если у робота нет инструмента). "Успешный"
# означает, что робот что-то ударил, например, атаковал врага, или
# потушил огонь.
# При добыче блоков время домножается на 'harvestRatio' (см. ниже).
swing=0.4
# Задержка в секундах, после поворота робота влево или вправо.
# Определяет скорость вращения робота, и длительность анимации
# поворота.
turn=0.4
# Задержка в секундах, после успешного применения предмета.
# Например — активации кнопки, или метания зелья.
use=0.4
}
# Степень разрушения предметов при использовании их роботами. Значение
# 1 означает, что они ломаются с той же скоростью, что и при использовании
# игроком. 0 означает, что инструменты не ломаются вообще.
# Этот параметр влияет только на те инструменты, которые можно сломать.
itemDamageRate=0.1
# Формат имен для роботов. Подстрока '$player$' заменяется именем
# игрока, которому принадлежит робот. Таким образом, для робота,
# только что размещенного в игровом мире, это будет тот игрок,
# которые его поставил. Это значение передается, если один робот
# ставит другого. Подстрока '$random$' будет заменена случайным числом
# в интервале [1, 0xFFFFFF].
# Если робот поставлен не игроком (или другим роботом), то имя по
# умолчанию будет 'OpenComputers'.
nameFormat="$player$.robot"
# Определяет "крутизну" роботов. Обычно паутина — проклятие для любого,
# у кого нет меча или ножниц. Чтобы избежать головной боли, в виде
# застрявших в паутине роботов с кирками, этот параметр позволяет роботам
# рвать паутину, вне зависимости от экипированного инструмента.
# P.S. Такая прочность паутины имеет лишь одно рациональное объяснение —
# Стив боится пауков!
notAfraidOfSpiders=true
# Радиус, в пределах которого роботы могут использовать инструменты
# (левый клик). Это значение определяет расстояние от центра робота,
# до той стороны блока, по направлению к которой был произведен "взмах".
# Т.е. при определения столкновений через трассировку луча, это
# конечная точка луча. Формула:
# `block_center + unit_vector_towards_side * swingRange`
# Значение параметра по умолчанию — чуть меньше 0.5.
swingRange=0.49
# Радиус, в пределах которого роботы могут использовать предметы
# (правый клик) или ставить блоки. См. `robot.swingRange`.
# По умолчанию, установлено значение достаточное для того, чтобы
# робот мог достать до вскопанной земли (чтобы посадить семена,
# например).
useAndPlaceRange=0.65
# Определяет скорость получения роботами "опыта", и как этот опыт влияет на
# его параметры.
xp {
# Этот параметр определяет, на сколько более продвинутым робот становится
# при каждом успешном действии. "Действия" — это: "взмахи" инструментами
# и убийство живых существ, или разрушение блоков или установка новых.
actionXp=0.05
# Количество опыта в каждом уровне вычисляется по формуле:
# xp(level) = baseValue + (level * constantGrowth) ^ exponentialGrowth
baseValue=50
# Количество дополнительного места в аккумуляторах робота, которое он
# получает за каждый уровень. При значениях по умолчанию, и максимальном
# уровне (30), робот будет иметь энергозапас в 200 000.
bufferPerLevel=5000
# Количество опыта в каждом уровне вычисляется по формуле:
# xp(level) = baseValue + (level * constantGrowth) ^ exponentialGrowth
constantGrowth=8
# Параметр определяет влияние "усталости" робота на опыт.
# Это значение добавляется в опыту. Например, добыча блока даст
# по умолчанию 0.05 + 0.025 [усталость] * 1.0 = 0.075 XP.
exhaustionXpRate=1
# Количество опыта в каждом уровне вычисляется по формуле:
# xp(level) = baseValue + (level * constantGrowth) ^ exponentialGrowth
exponentialGrowth=2
# Повышение скорости добычи блоков за уровень. Новое время вычисляется
# по формуле actualTime * (1 — bonus). Например, при уровне 20, с
# бонусом 0.4 вместо 0.3 секунд на добычу блока камня алмазной
# киркой будет потрачено всего 0.12.
harvestSpeedBoostPerLevel=0.02
# Определяет, сколько опыта робот получает за каждую сферу опыта, которую
# он собрал при добыче руды. Например, уголь стоит 2 игровых очка опыта,
# а редстоун — 5.
oreXpRate=4
# Дополнительная "эффективность" при использовании инструментов
# за каждый уровень. Повышает шанс на то, что инструмент не будет
# поврежден при использовании. Например, робот уровня 15, получает
# бонус 0.15 и урон 0.1 * (1 — 0.15) = 0.085.
toolEfficiencyPerLevel=0.01
}
}
}



![[Гайд] Как установить сборку на Minecraft? Установка модпаков](https://ru-minecraft.ru/uploads/posts/2020-04/medium/1587743642_ustanovka-sborok-maynkraft.jpg)
![[GUIDE] Настройка конфигов - Forge](https://ru-minecraft.ru/uploads/posts/2016-11/medium/1478226558_2016-11-04_10.14.39.jpg)
![[GUIDE] Настройка конфигов - Forge](https://ru-minecraft.ru/uploads/posts/2016-11/medium/1478226566_2016-11-04_10.14.46.jpg)
![[GUIDE] Настройка конфигов - Forge](https://ru-minecraft.ru/uploads/posts/2016-11/medium/1478226540_2016-11-04_10.14.48.jpg)
![[GUIDE] Настройка конфигов - Forge](https://ru-minecraft.ru/uploads/posts/2016-11/medium/1478226563_2016-11-04_10.15.12.jpg)






