DataGenerator, некорректная работа

Версия Minecraft
1.16.5
API
Forge
5,149
49
899
Короче говоря, сел разбиратся с датагенами, туда сюда, бабку за репку, дедку за кепку, более-менее заработало. Генерируются предметы, рецепты, блоки, стейты. Казалось бы все в порядке, но тут обнаружилось, что обычные методы вроде simpleBlock не умеют создавать папки и фигарят прямо в корень. Я люблю порядок и поэтому люблю рассортировывать все по папочкам. Поэтому в данном случае для concrete_orange у меня имя concrete/concrete_orange, чтобы файл блокстейта лежал в папке. Конкретно блокстейты генератор кладет правильно. А вот модели блока, он кладет просто в корень с одной единственной папкой. Как это исправить, я не нашел. Думалось, что нужно какой то свой getVariantBuilder конструировать, но я не знаю, в какую сторону там как работает, по итогу сделал что то такое и оно не работает - вылезает ошибка что по этому адресу нет никакой текстуры
BlockStateProvider:
package ru.tesmio.data.providers;


import net.minecraft.data.DataGenerator;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.generators.BlockModelBuilder;
import net.minecraftforge.client.model.generators.BlockStateProvider;
import net.minecraftforge.client.model.generators.ConfiguredModel;
import net.minecraftforge.client.model.generators.ModelBuilder;
import net.minecraftforge.common.data.ExistingFileHelper;
import ru.tesmio.Core;
import ru.tesmio.reg.RegBlocks;

public class SovietBlockStateProvider extends BlockStateProvider {

    public SovietBlockStateProvider(DataGenerator gen, ExistingFileHelper exFileHelper) {
        super(gen, Core.MODID, exFileHelper);

    }

    @Override
    protected void registerStatesAndModels() {
      //  getVariantBuilder(RegBlocks.CONCRETE_ORANGE.get()).forAllStates(state -> ConfiguredModel.builder().modelFile(singleTex("concrete_orange", modLoc("textures/block/concrete/concrete_orange"))).build());
       getVariantBuilder(RegBlocks.CONCRETE_ORANGE.get()).partialState().setModels(ConfiguredModel.builder().modelFile(builder("concrete_orange", modLoc("textures/block/concrete/concrete_orange.png"))).build());
      //   simpleBlock(RegBlocks.CONCRETE_ORANGE.get());
        //  simpleBlock(RegBlocks.CONCRETE_ORANGE_BR.get());

    }
    public ModelBuilder<BlockModelBuilder> builder(String name, ResourceLocation rs) {
        return models().cubeAll(name, rs);
    }

}
Снимок.PNG
Если юзать просто simpleBlock(то что сейчас закомменчено), то модели он мне кладет напрямую в папку models/concrete/concrete_orange. А мне надо чтобы клал в models/block/concrete/concrete_orange. Как это чинить?
 
Решение
Проблему решил. Необходимо было собрать билдером все модели вручную
SovietBlockStateProvider:
public class SovietBlockStateProvider extends BlockStateProvider {
    public SovietBlockStateProvider(DataGenerator gen, ExistingFileHelper exFileHelper) {
        super(gen, Core.MODID, exFileHelper);
    }

    @Override
    protected void registerStatesAndModels() {
        getVariantBuilder(RegBlocks.CONCRETE_ORANGE.get()).forAllStates(state -> ConfiguredModel.builder().modelFile(builder("block/concrete/concrete_orange", modLoc("block/concrete/concrete_orange"))).build());
//        simpleBlock(RegBlocks.CONCRETE_ORANGE.get(),
        getVariantBuilder(RegBlocks.CONCRETE_ORANGE_BR.get()).forAllStates(state ->...
Проблему решил. Необходимо было собрать билдером все модели вручную
SovietBlockStateProvider:
public class SovietBlockStateProvider extends BlockStateProvider {
    public SovietBlockStateProvider(DataGenerator gen, ExistingFileHelper exFileHelper) {
        super(gen, Core.MODID, exFileHelper);
    }

    @Override
    protected void registerStatesAndModels() {
        getVariantBuilder(RegBlocks.CONCRETE_ORANGE.get()).forAllStates(state -> ConfiguredModel.builder().modelFile(builder("block/concrete/concrete_orange", modLoc("block/concrete/concrete_orange"))).build());
//        simpleBlock(RegBlocks.CONCRETE_ORANGE.get(),
        getVariantBuilder(RegBlocks.CONCRETE_ORANGE_BR.get()).forAllStates(state -> ConfiguredModel.builder().modelFile(builder("block/concrete/concrete_orange_br", modLoc("block/concrete/concrete_orange_br"))).build());

    }
    public ModelBuilder<BlockModelBuilder> builder(String name, ResourceLocation rs) {
      //  return models().singleTexture(name, mcLoc(BLOCK_FOLDER + "/concrete"), "concrete_orange", rs);
        return models().cubeAll(name, rs);
    }
}
 
Назад
Сверху