Крафт OCTechnics. Часть 3 - назад в 1.7.10
Портирование мода с 1.14 на 1.7.10 версию оказалось настоящим эпическим сражением, продлившимся целый день. Сейчас я опишу, как мне удалось в нём победить.
Половину дня я пытался понять, почему один мой Gradle (для Minecraft 1.7.10) не может определить версию Java по строке «12.0.1», а другой (для 1.14) заявляет, что надо указать версию плагина «forge». Ключом к решению оказалось использование OpenJDK 10 и обновление Gradle до 4.1 версии.
На этом проблемы не закончились. Gradle стал скачивать нужные файлы, но не смог скачать их все. Некоторые файлы (такие, как twitch-5.16.jar) отсутствуют на двух сайтах-источниках (minecraftforge.net и ещё один), а с официального сайта Minecraft Java скачать файлы не может, так как там есть проблема с сертификатом. Добавление корневого сертификата с minecraft.net в доверенные (тут как раз пригодилось то, что я скачал дополнительную Java) ничего не дало.
Я скачал все недостающие файлы через браузер, и тут у меня возникла проблема: а в какую папку их надо положить? Не считать ведь хеш-суммы каждого файла и не раскидывать по отдельным папкам руками?
Решение оказалось очень простым: если Gradle стучится и проверяет, нет ли файла на files.minecraftforge.net, то этот запрос можно перехватить и направить на локальный сервер, где файл уже есть. Как это можно сделать? Правильно, с помощью файла hosts. Тогда я прописал перенаправление с files.minecraftforge.net на 127.0.0.1, поднял локальный сервер и положил туда все нужные файлы. Запустил Gradle - ура, все файлы скачались! Сервер можно выключать.
Дальше осталось совсем немного: посмотреть в исходники каких-нибудь модов под 1.7.10 и разобраться, как они работают. Поменять в своём коде пришлось (почти) только основной класс. Также изменился файл локализации.
В каком виде мод работает (OCTechnics.java):
package org.octechnics.octechnics;
import cpw.mods.fml.common.Mod;
import cpw.mods.fml.common.Mod.EventHandler;
import cpw.mods.fml.common.event.FMLPreInitializationEvent;
import cpw.mods.fml.common.registry.GameRegistry;
import net.minecraft.block.Block;
import net.minecraft.item.Item;
import net.minecraft.item.ItemBlock;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@Mod( modid = "octechnics", version = "1.0" )
public class OCTechnics {
public static final Block BASE_FACT = new BasicFactoryBlock("octechnics:basic_factory_block");
private static Logger logger;
public OCTechnics() {
logger = LogManager.getLogger();
logger.info("octechnics - register on EVENT_BUS");
}
@EventHandler
public void preInit(FMLPreInitializationEvent evt) {
logger.info("octechnics - got FMLPreInitializationEvent");
GameRegistry.registerBlock(BASE_FACT, "basic_factory_block");
}
}
Файл ./common/blocks/BasicFactoryBlock.java:
package org.octechnics.octechnics;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.world.World;
public class BasicFactoryBlock extends Block {
public BasicFactoryBlock(String name) {
super(Material.rock);
this.setBlockName(name);
this.setCreativeTab(CreativeTabs.tabBlock);
this.setBlockTextureName("octechnics:factory_base");
}
}
assets/octechnics/lang/en_us.lang:
tile.octechnics:basic_factory_block.name=Factory Base
Текстуры немного переехали: из папки block попали в папку blocks.
Наконец, я запустил мод и он заработал: в первой вкладке творческого инвентаря появился блок с моей текстурой, правильно названный и нормально ставящийся в мир. Этого я и хотел! Дальнейшие приключения (расширение ассортимента и добавление к блокам блок-сущностей) будут в следующей статье.
- 3
0 комментариев
Рекомендуемые комментарии
Нет комментариев для отображения