Гайд Создание своего клиента и ответы на вопросы. Глава 1

  • Автор темы Автор темы mewiz
  • Дата начала Дата начала
Начинающий
Начинающий
Статус
Онлайн
Регистрация
29 Июл 2025
Сообщения
153
Реакции
2

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

Приветствую всех кто посетил данный топик! :D

Сегодня я раз и навсегда (надеюсь) закрою вопросы по типу "Что нужно для создания своего клиента?" "Что учить?" и так далее.

Начнем с теории:
1. "Что нужно для создания своего клиента?" - терпение, стальные яички и хорошо выученная Java, ведь она является основным языком на котором написан наш любимый кубомир, желательно ещё почитать документацию Fabric API и Mixin (SpongePowered), именно с помощью них вы сможете создать свой клиент в виде мода под Fabric. (Для Forge собственно рекомендую прочитать документацию по Forge).

2. "Какую версию мне выбрать?" / "Fabric / MCP?" - тут уже всё на ваш вкус, MCP - декомпилированный майнкрафт с полностью открытым кодом игры, вы можете свободно зайти и редактировать классы в директории net.minecraft, Fabric - как библиотека, он связывает мод с игрой, условно ваш клиент будет присасываться к чистому майнкрафту, внеся изменения через миксины. Лично моя рекомендация - 1.21.4 Fabric (Актуальная версия, поддержка модификаций - собственно можно заходить на сервера со сборкой модов и одновременно с клиента)

3. "Как делать обходы или так называемые байпасы? (Bypass)" - обходы под сервера делаются на основе дыр в античите, для начала стоит изучить работу античита вашего сервера, что бы найти лазейки в античите или использовать ту реализацию на которой нет так называемой проверки со стороны античита.

Вот такая небольшая теория у нас вышла, давайте все таки перейдем к практике!)

1. Создания нового темплейта (шаблона, базы, называйте как хотите) для нашего клиента, к примеру, мы выберем 1.21.5 Fabric.
Начнем с установки плагина для IntelliJ Idea - Minecraft Developement
photo_2025-08-08_16-11-50.jpg

Single Hotswap необязателен, но рекомендую установить, полезная штука, позволяет вносить изменения без перезапуска исходника (на миксинах, добавлениях новых классов, методов оно к сожалению не работает)

2. Приступаем к созданию и настройки шаблона.
Открываем IntelliJ Idea, кликаем на 4 полоски сверху слева, выбираем вкладку New -> Project.
В окне выбираем последний пункт - Minecraft.
После чего настраиваем наш шаблон
photo_2025-08-08_16-16-09.jpg

На скрине уже настроенный шаблон, можете юзать.

2. Чистим сурс от лишнего дерьма.
Изначально у вас будет 2 директории в папке src
Нам нужно удалить client, т.к для создания клиента он нам не понадобиться
Но это не всё, нужно будет внести изменения в build.gradle что бы не было никаких проблем.


build.gradle:
Expand Collapse Copy
plugins {
    id 'fabric-loom' version '1.11-SNAPSHOT'
    id 'maven-publish'
}

version = project.mod_version
group = project.maven_group

base {
    archivesName = project.archives_base_name
}

loom {
    splitEnvironmentSourceSets() - ЭТО УДАЛЯЕМ

    mods {
        "myclient" {
            sourceSet sourceSets.main
            sourceSet sourceSets.client - И ЭТО УДАЛЯЕМ
        }
    }
}

fabricApi {
    configureDataGeneration {
        client = true
    }
}

repositories {
    // Add repositories to retrieve artifacts from in here.
    // You should only use this when depending on other mods because
    // Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
    // See https://docs.gradle.org/current/userguide/declaring_repositories.html
    // for more information about repositories.
}

dependencies {
    // To change the versions see the gradle.properties file
    minecraft "com.mojang:minecraft:${project.minecraft_version}"
    mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
    modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"

    modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
}

processResources {
    inputs.property "version", project.version
    inputs.property "minecraft_version", project.minecraft_version
    inputs.property "loader_version", project.loader_version
    filteringCharset "UTF-8"

    filesMatching("fabric.mod.json") {
        expand "version": project.version,
                "minecraft_version": project.minecraft_version,
                "loader_version": project.loader_version
    }
}

def targetJavaVersion = 21
tasks.withType(JavaCompile).configureEach {
    // ensure that the encoding is set to UTF-8, no matter what the system default is
    // this fixes some edge cases with special characters not displaying correctly
    // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
    // If Javadoc is generated, this must be specified in that task too.
    it.options.encoding = "UTF-8"
    if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) {
        it.options.release.set(targetJavaVersion)
    }
}

java {
    def javaVersion = JavaVersion.toVersion(targetJavaVersion)
    if (JavaVersion.current() < javaVersion) {
        toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion)
    }
    // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
    // if it is present.
    // If you remove this line, sources will not be generated.
    withSourcesJar()
}

jar {
    from("LICENSE") {
        rename { "${it}_${project.archivesBaseName}" }
    }
}

// configure the maven publication
publishing {
    publications {
        create("mavenJava", MavenPublication) {
            artifactId = project.archives_base_name
            from components.java
        }
    }

    // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
    repositories {
        // Add repositories to publish to here.
        // Notice: This block does NOT have the same function as the block in the top level.
        // The repositories here will be used for publishing your artifact, not for
        // retrieving dependencies.
    }
}

2. Настройка шаблона и т.д
После удаления папки client нам прийдется зафиксить после себя :D
В папке resource создаем assets, там мы будем хранить фрагментные/glsl шейдера для рендера, шрифты, текстуры, звуки и т.д

Дальше, переходим в src -> main -> java -> ru.myclient и создаем уникальную папку для наших миксинов (учтите, название папки должно быть mixin и никак иначе, если вы хотите изменить название, вам надо будет изменить название директории миксинов в json файле)

myclient.mixins.json:
Expand Collapse Copy
{
  "required": true,
  "minVersion": "0.8",
  "package": "ru.myclient.mixin", - уникальная папка где будут хранятся миксины, если хотите к примеру сделать название папки inject - тут тоже меняете на inject, ну думаю вы поняли
  "compatibilityLevel": "JAVA_21",
  "mixins": [
  ],
  "injectors": {
    "defaultRequire": 1
  },
  "overwrites": {
    "requireAnnotations": true
  }
}

Далее чистим fabric.mod.json

fabric.mod.json:
Expand Collapse Copy
{
  "schemaVersion": 1,
  "id": "myclient",
  "version": "${version}",
  "name": "clientformine",
  "description": "",
  "authors": [],
  "contact": {},
  "license": "All-Rights-Reserved",
  "icon": "assets/myclient/icon.png", - можете удалить либо изменить директорию, как вам угодно
  "environment": "client",
  "entrypoints": {
  ```  "fabric-datagen": [
      "ru.myclient.client.MyclientDataGenerator"
    ],
    "client": [
      "ru.myclient.client.MyclientClient"
    ], ```
то что обделено "```" удаляем, оно нам не нада
    "main": [
      "ru.myclient.Myclient"
    ]
  },
  "mixins": [
    "myclient.mixins.json",
   ``` {
      "config": "myclient.client.mixins.json",
      "environment": "client"
    } ``` это тоже удаляем
  ],
  "depends": {
    "fabricloader": ">=${loader_version}",
    "fabric": "*",
    "minecraft": "${minecraft_version}"
  }
}

Готово! наш шаблон полностью готов к эсплуатации, если кому понравиться и захочет увидеть продолжение, пишите! :summyrose:
 
Ну бля честно срань какая то, больше чем уверен что проект создаст каждый пастер, поясни типам как рендер работает, че да как, менеджеры и такая хуйня, а не эта постная хуета
 
Ну бля честно срань какая то, больше чем уверен что проект создаст каждый пастер, поясни типам как рендер работает, че да как, менеджеры и такая хуйня, а не эта постная хуета
ну я планировал разбить на несколько тем, т.к выйдет слишком огромный топик, но видимо никому не интересно
 

Пожалуйста, зарегистрируйтесь или авторизуйтесь, чтобы увидеть содержимое.


Лучше делай темы типо пишешь код функции и там уже обьяснения че и как потому что ну это полный калл и на этом форуме на это всем всервно
 
Приветствую всех кто посетил данный топик! :D

Сегодня я раз и навсегда (надеюсь) закрою вопросы по типу "Что нужно для создания своего клиента?" "Что учить?" и так далее.

Начнем с теории:
1. "Что нужно для создания своего клиента?" - терпение, стальные яички и хорошо выученная Java, ведь она является основным языком на котором написан наш любимый кубомир, желательно ещё почитать документацию Fabric API и Mixin (SpongePowered), именно с помощью них вы сможете создать свой клиент в виде мода под Fabric. (Для Forge собственно рекомендую прочитать документацию по Forge).

2. "Какую версию мне выбрать?" / "Fabric / MCP?" - тут уже всё на ваш вкус, MCP - декомпилированный майнкрафт с полностью открытым кодом игры, вы можете свободно зайти и редактировать классы в директории net.minecraft, Fabric - как библиотека, он связывает мод с игрой, условно ваш клиент будет присасываться к чистому майнкрафту, внеся изменения через миксины. Лично моя рекомендация - 1.21.4 Fabric (Актуальная версия, поддержка модификаций - собственно можно заходить на сервера со сборкой модов и одновременно с клиента)

3. "Как делать обходы или так называемые байпасы? (Bypass)" - обходы под сервера делаются на основе дыр в античите, для начала стоит изучить работу античита вашего сервера, что бы найти лазейки в античите или использовать ту реализацию на которой нет так называемой проверки со стороны античита.

Вот такая небольшая теория у нас вышла, давайте все таки перейдем к практике!)

1. Создания нового темплейта (шаблона, базы, называйте как хотите) для нашего клиента, к примеру, мы выберем 1.21.5 Fabric.
Начнем с установки плагина для IntelliJ Idea - Minecraft Developement
Посмотреть вложение 312755
Single Hotswap необязателен, но рекомендую установить, полезная штука, позволяет вносить изменения без перезапуска исходника (на миксинах, добавлениях новых классов, методов оно к сожалению не работает)

2. Приступаем к созданию и настройки шаблона.
Открываем IntelliJ Idea, кликаем на 4 полоски сверху слева, выбираем вкладку New -> Project.
В окне выбираем последний пункт - Minecraft.
После чего настраиваем наш шаблон
Посмотреть вложение 312756
На скрине уже настроенный шаблон, можете юзать.

2. Чистим сурс от лишнего дерьма.
Изначально у вас будет 2 директории в папке src
Нам нужно удалить client, т.к для создания клиента он нам не понадобиться
Но это не всё, нужно будет внести изменения в build.gradle что бы не было никаких проблем.


build.gradle:
Expand Collapse Copy
plugins {
    id 'fabric-loom' version '1.11-SNAPSHOT'
    id 'maven-publish'
}

version = project.mod_version
group = project.maven_group

base {
    archivesName = project.archives_base_name
}

loom {
    splitEnvironmentSourceSets() - ЭТО УДАЛЯЕМ

    mods {
        "myclient" {
            sourceSet sourceSets.main
            sourceSet sourceSets.client - И ЭТО УДАЛЯЕМ
        }
    }
}

fabricApi {
    configureDataGeneration {
        client = true
    }
}

repositories {
    // Add repositories to retrieve artifacts from in here.
    // You should only use this when depending on other mods because
    // Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
    // See https://docs.gradle.org/current/userguide/declaring_repositories.html
    // for more information about repositories.
}

dependencies {
    // To change the versions see the gradle.properties file
    minecraft "com.mojang:minecraft:${project.minecraft_version}"
    mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
    modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"

    modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
}

processResources {
    inputs.property "version", project.version
    inputs.property "minecraft_version", project.minecraft_version
    inputs.property "loader_version", project.loader_version
    filteringCharset "UTF-8"

    filesMatching("fabric.mod.json") {
        expand "version": project.version,
                "minecraft_version": project.minecraft_version,
                "loader_version": project.loader_version
    }
}

def targetJavaVersion = 21
tasks.withType(JavaCompile).configureEach {
    // ensure that the encoding is set to UTF-8, no matter what the system default is
    // this fixes some edge cases with special characters not displaying correctly
    // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
    // If Javadoc is generated, this must be specified in that task too.
    it.options.encoding = "UTF-8"
    if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) {
        it.options.release.set(targetJavaVersion)
    }
}

java {
    def javaVersion = JavaVersion.toVersion(targetJavaVersion)
    if (JavaVersion.current() < javaVersion) {
        toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion)
    }
    // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
    // if it is present.
    // If you remove this line, sources will not be generated.
    withSourcesJar()
}

jar {
    from("LICENSE") {
        rename { "${it}_${project.archivesBaseName}" }
    }
}

// configure the maven publication
publishing {
    publications {
        create("mavenJava", MavenPublication) {
            artifactId = project.archives_base_name
            from components.java
        }
    }

    // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
    repositories {
        // Add repositories to publish to here.
        // Notice: This block does NOT have the same function as the block in the top level.
        // The repositories here will be used for publishing your artifact, not for
        // retrieving dependencies.
    }
}

2. Настройка шаблона и т.д
После удаления папки client нам прийдется зафиксить после себя :D
В папке resource создаем assets, там мы будем хранить фрагментные/glsl шейдера для рендера, шрифты, текстуры, звуки и т.д

Дальше, переходим в src -> main -> java -> ru.myclient и создаем уникальную папку для наших миксинов (учтите, название папки должно быть mixin и никак иначе, если вы хотите изменить название, вам надо будет изменить название директории миксинов в json файле)

myclient.mixins.json:
Expand Collapse Copy
{
  "required": true,
  "minVersion": "0.8",
  "package": "ru.myclient.mixin", - уникальная папка где будут хранятся миксины, если хотите к примеру сделать название папки inject - тут тоже меняете на inject, ну думаю вы поняли
  "compatibilityLevel": "JAVA_21",
  "mixins": [
  ],
  "injectors": {
    "defaultRequire": 1
  },
  "overwrites": {
    "requireAnnotations": true
  }
}

Далее чистим fabric.mod.json

fabric.mod.json:
Expand Collapse Copy
{
  "schemaVersion": 1,
  "id": "myclient",
  "version": "${version}",
  "name": "clientformine",
  "description": "",
  "authors": [],
  "contact": {},
  "license": "All-Rights-Reserved",
  "icon": "assets/myclient/icon.png", - можете удалить либо изменить директорию, как вам угодно
  "environment": "client",
  "entrypoints": {
  ```  "fabric-datagen": [
      "ru.myclient.client.MyclientDataGenerator"
    ],
    "client": [
      "ru.myclient.client.MyclientClient"
    ], ```
то что обделено "```" удаляем, оно нам не нада
    "main": [
      "ru.myclient.Myclient"
    ]
  },
  "mixins": [
    "myclient.mixins.json",
   ``` {
      "config": "myclient.client.mixins.json",
      "environment": "client"
    } ``` это тоже удаляем
  ],
  "depends": {
    "fabricloader": ">=${loader_version}",
    "fabric": "*",
    "minecraft": "${minecraft_version}"
  }
}

Готово! наш шаблон полностью готов к эсплуатации, если кому понравиться и захочет увидеть продолжение, пишите! :summyrose:
привет можем в дс списаться?
 
имба +реп
 
продолжай пж тему
 
"удаляем client" - серверный чит делаем, уникальная идея хули
 
Приветствую всех кто посетил данный топик! :D

Сегодня я раз и навсегда (надеюсь) закрою вопросы по типу "Что нужно для создания своего клиента?" "Что учить?" и так далее.

Начнем с теории:
1. "Что нужно для создания своего клиента?" - терпение, стальные яички и хорошо выученная Java, ведь она является основным языком на котором написан наш любимый кубомир, желательно ещё почитать документацию Fabric API и Mixin (SpongePowered), именно с помощью них вы сможете создать свой клиент в виде мода под Fabric. (Для Forge собственно рекомендую прочитать документацию по Forge).

2. "Какую версию мне выбрать?" / "Fabric / MCP?" - тут уже всё на ваш вкус, MCP - декомпилированный майнкрафт с полностью открытым кодом игры, вы можете свободно зайти и редактировать классы в директории net.minecraft, Fabric - как библиотека, он связывает мод с игрой, условно ваш клиент будет присасываться к чистому майнкрафту, внеся изменения через миксины. Лично моя рекомендация - 1.21.4 Fabric (Актуальная версия, поддержка модификаций - собственно можно заходить на сервера со сборкой модов и одновременно с клиента)

3. "Как делать обходы или так называемые байпасы? (Bypass)" - обходы под сервера делаются на основе дыр в античите, для начала стоит изучить работу античита вашего сервера, что бы найти лазейки в античите или использовать ту реализацию на которой нет так называемой проверки со стороны античита.

Вот такая небольшая теория у нас вышла, давайте все таки перейдем к практике!)

1. Создания нового темплейта (шаблона, базы, называйте как хотите) для нашего клиента, к примеру, мы выберем 1.21.5 Fabric.
Начнем с установки плагина для IntelliJ Idea - Minecraft Developement
Посмотреть вложение 312755
Single Hotswap необязателен, но рекомендую установить, полезная штука, позволяет вносить изменения без перезапуска исходника (на миксинах, добавлениях новых классов, методов оно к сожалению не работает)

2. Приступаем к созданию и настройки шаблона.
Открываем IntelliJ Idea, кликаем на 4 полоски сверху слева, выбираем вкладку New -> Project.
В окне выбираем последний пункт - Minecraft.
После чего настраиваем наш шаблон
Посмотреть вложение 312756
На скрине уже настроенный шаблон, можете юзать.

2. Чистим сурс от лишнего дерьма.
Изначально у вас будет 2 директории в папке src
Нам нужно удалить client, т.к для создания клиента он нам не понадобиться
Но это не всё, нужно будет внести изменения в build.gradle что бы не было никаких проблем.


build.gradle:
Expand Collapse Copy
plugins {
    id 'fabric-loom' version '1.11-SNAPSHOT'
    id 'maven-publish'
}

version = project.mod_version
group = project.maven_group

base {
    archivesName = project.archives_base_name
}

loom {
    splitEnvironmentSourceSets() - ЭТО УДАЛЯЕМ

    mods {
        "myclient" {
            sourceSet sourceSets.main
            sourceSet sourceSets.client - И ЭТО УДАЛЯЕМ
        }
    }
}

fabricApi {
    configureDataGeneration {
        client = true
    }
}

repositories {
    // Add repositories to retrieve artifacts from in here.
    // You should only use this when depending on other mods because
    // Loom adds the essential maven repositories to download Minecraft and libraries from automatically.
    // See https://docs.gradle.org/current/userguide/declaring_repositories.html
    // for more information about repositories.
}

dependencies {
    // To change the versions see the gradle.properties file
    minecraft "com.mojang:minecraft:${project.minecraft_version}"
    mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
    modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"

    modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
}

processResources {
    inputs.property "version", project.version
    inputs.property "minecraft_version", project.minecraft_version
    inputs.property "loader_version", project.loader_version
    filteringCharset "UTF-8"

    filesMatching("fabric.mod.json") {
        expand "version": project.version,
                "minecraft_version": project.minecraft_version,
                "loader_version": project.loader_version
    }
}

def targetJavaVersion = 21
tasks.withType(JavaCompile).configureEach {
    // ensure that the encoding is set to UTF-8, no matter what the system default is
    // this fixes some edge cases with special characters not displaying correctly
    // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
    // If Javadoc is generated, this must be specified in that task too.
    it.options.encoding = "UTF-8"
    if (targetJavaVersion >= 10 || JavaVersion.current().isJava10Compatible()) {
        it.options.release.set(targetJavaVersion)
    }
}

java {
    def javaVersion = JavaVersion.toVersion(targetJavaVersion)
    if (JavaVersion.current() < javaVersion) {
        toolchain.languageVersion = JavaLanguageVersion.of(targetJavaVersion)
    }
    // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
    // if it is present.
    // If you remove this line, sources will not be generated.
    withSourcesJar()
}

jar {
    from("LICENSE") {
        rename { "${it}_${project.archivesBaseName}" }
    }
}

// configure the maven publication
publishing {
    publications {
        create("mavenJava", MavenPublication) {
            artifactId = project.archives_base_name
            from components.java
        }
    }

    // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
    repositories {
        // Add repositories to publish to here.
        // Notice: This block does NOT have the same function as the block in the top level.
        // The repositories here will be used for publishing your artifact, not for
        // retrieving dependencies.
    }
}

2. Настройка шаблона и т.д
После удаления папки client нам прийдется зафиксить после себя :D
В папке resource создаем assets, там мы будем хранить фрагментные/glsl шейдера для рендера, шрифты, текстуры, звуки и т.д

Дальше, переходим в src -> main -> java -> ru.myclient и создаем уникальную папку для наших миксинов (учтите, название папки должно быть mixin и никак иначе, если вы хотите изменить название, вам надо будет изменить название директории миксинов в json файле)

myclient.mixins.json:
Expand Collapse Copy
{
  "required": true,
  "minVersion": "0.8",
  "package": "ru.myclient.mixin", - уникальная папка где будут хранятся миксины, если хотите к примеру сделать название папки inject - тут тоже меняете на inject, ну думаю вы поняли
  "compatibilityLevel": "JAVA_21",
  "mixins": [
  ],
  "injectors": {
    "defaultRequire": 1
  },
  "overwrites": {
    "requireAnnotations": true
  }
}

Далее чистим fabric.mod.json

fabric.mod.json:
Expand Collapse Copy
{
  "schemaVersion": 1,
  "id": "myclient",
  "version": "${version}",
  "name": "clientformine",
  "description": "",
  "authors": [],
  "contact": {},
  "license": "All-Rights-Reserved",
  "icon": "assets/myclient/icon.png", - можете удалить либо изменить директорию, как вам угодно
  "environment": "client",
  "entrypoints": {
  ```  "fabric-datagen": [
      "ru.myclient.client.MyclientDataGenerator"
    ],
    "client": [
      "ru.myclient.client.MyclientClient"
    ], ```
то что обделено "```" удаляем, оно нам не нада
    "main": [
      "ru.myclient.Myclient"
    ]
  },
  "mixins": [
    "myclient.mixins.json",
   ``` {
      "config": "myclient.client.mixins.json",
      "environment": "client"
    } ``` это тоже удаляем
  ],
  "depends": {
    "fabricloader": ">=${loader_version}",
    "fabric": "*",
    "minecraft": "${minecraft_version}"
  }
}

Готово! наш шаблон полностью готов к эсплуатации, если кому понравиться и захочет увидеть продолжение, пишите! :summyrose:
кот лыба.jpg
 
Назад
Сверху Снизу