- 88
- 4
- 6
Bonjour господа(и нет), сегодня мы разберём улучшенную регистрацию для Minecraft 1.12.2
, которая за нас будет рисовать модели в коде.
Ну что-ж, не будем тянуть кота за хвост, поехали
Первым делом, сделаем наш интерфейс с ыаы(registryModel)методом:
Хорошо первый самый сложный этап выполнили, давайте перейдем к лёгкому, а именно к самой ловле регистрации.
Что такое RegistryArray? RegistryArray - это наш класс, который мы сейчас создадим, в нем может храниться наша регистрация блоков, предметов и т.п. ну если короче, класс с листами для регистрации.
А теперь вопрос, КАК РЕГИСТРИРОВАТЬ ВСЯКОЕ С ПОМОЩЬЮ ЭТОГО?! Все просто(нет), придется создавать классы-базы, которые как раз нужны для регистрации. К сожалению это надо делать обязательно, иначе у нас нечего не получится(эх). Вот вам два примера этих классов и сама регистрация
Предмет:
Блок:
А вот и подъехала регистрация:
Теперь нам по сути нечего не надо делать, этот код сделает все за нас
пробовал на 1.18 без автомодели, не работает
Ну что-ж, не будем тянуть кота за хвост, поехали
Первым делом, сделаем наш интерфейс с ыаы(registryModel)методом:
Model.java:
public interface Model {
void registryModel();
}
Хорошо первый самый сложный этап выполнили, давайте перейдем к лёгкому, а именно к самой ловле регистрации.
RegistryHandler.java:
@Mod.EventBusSubscriber
public class RegisterHandler {
@SubscribeEvent
public static void itemRegister(RegistryEvent.Register<Item> register) {
Item[] itemArray = RegistryArray.ITEMS.toArray(new Item[0]);
register.getRegistry().registerAll(itemArray);
}
@SubscribeEvent
public static void blockRegister(RegistryEvent.Register<Block> register) {
Block[] blockArray = RegistryArray.BLOCKS.toArray(new Block[0]);
register.getRegistry().registerAll(blockArray);
}
@SubscribeEvent
public static void modelRegister(ModelRegistryEvent event) {
for (Item item : RegistryArray.ITEMS) {
if (item instanceof Model) {
((Model)item).registerModels();
}
}
for (Block block : RegistryArray.BLOCKS) {
if (block instanceof Model) {
((Model) block).registerModels();
}
}
}
}
Что такое RegistryArray? RegistryArray - это наш класс, который мы сейчас создадим, в нем может храниться наша регистрация блоков, предметов и т.п. ну если короче, класс с листами для регистрации.
RegistryArray.java:
public class RegistryArray {
public static final List<Block> BLOCKS = new ArrayList<>();
public static final List<Item> ITEMS = new ArrayList<>();
}
А теперь вопрос, КАК РЕГИСТРИРОВАТЬ ВСЯКОЕ С ПОМОЩЬЮ ЭТОГО?! Все просто(нет), придется создавать классы-базы, которые как раз нужны для регистрации. К сожалению это надо делать обязательно, иначе у нас нечего не получится(эх). Вот вам два примера этих классов и сама регистрация
Предмет:
ItemBase.java:
public class ItemBase extends Item implements Model {
public ItemBase(String id) {
this.setRegistryName(id);
this.setUnlocalizedName(ExampleMod.MOD_ID + "." + id);
RegistryArray.ITEMS.add(this);
}
@Override
public void registerModels() {
ExampleMod.proxy.getRender(this, 0, "inventory");
}
}
Блок:
BlockBase.java:
public class BlockBase extends Block implements Model {
public BlockBase(String id, Material material) {
super(material);
this.setRegistryName(id);
this.setUnlocalizedName(ExampleMod.MOD_ID + "." + id);
RegistryArray.BLOCKS.add(this);
RegistryArray.ITEMS.add(new ItemBlock(this).setRegistryName(this.getRegistryName()));
}
@Override
public void registerModels() {
ExampleMod.proxy.getRender(Item.getItemFromBlock(this), 0, "inventory");
}
}
А вот и подъехала регистрация:
Registration.java:
public class Registration {
public static final Item
E_Item = new ItemBase("e_item");
public static final BlockBase E_Block = new BlockBase("e_block", Material.ROCK);
}
Теперь нам по сути нечего не надо делать, этот код сделает все за нас
Последнее редактирование: