Парсинг Json рецептов ТОЛЬКО для своей крафтовой машины

Версия Minecraft
1.12+
917
22
332
Доброго времени суток:)
Собсно вопрос в заголовке. Задача состоит в том, чтобы создать набор рецептов, невидимый для обычного верстака, но видимый для моего. Написать свой CraftingManager, со всеми вытекающими последствиями проблемы не составляет. Однако, случайно наткнулся на такой пост: КЛИК, и похоже, что можно использовать json систему, без риска "отправить" ванильному верстаку свои рецепты (CraftingHelper.findFiles). Но нормальных примеров нет, а всё усложняется тем, что автор суслик сделал верстак, который содержит 12 слотов (из них 3 содержат определённые предметы, 3-ий работает с метадатой предмета). Если кто-то работал с CraftingHelper#findFiles помогите...
Заранее спасибо!
 
917
22
332
Примечание: CraftingManager логичным решением для меня быть не сможет, т. к. использование json парсинга, сократит количество кода до 70%, и, ВЕРОЯТНО, добавит возможно изменять мои рецепты с помощью ресурспаков.
 
917
22
332
Такс... нашёл этот метод и даже его винильный юз.
Java:
public static boolean findFiles(ModContainer mod, String base, Function<Path, Boolean> preprocessor, BiFunction<Path, Path, Boolean> processor, boolean defaultUnfoundRoot, boolean visitAllFiles)
Java:
    private static boolean loadRecipes(ModContainer mod)
    {
        JsonContext ctx = new JsonContext(mod.getModId());

        return findFiles(mod, "assets/" + mod.getModId() + "/recipes",
            root ->
            {
                Path fPath = root.resolve("_constants.json");
                if (fPath != null && Files.exists(fPath))
                {
                    BufferedReader reader = null;
                    try
                    {
                        reader = Files.newBufferedReader(fPath);
                        JsonObject[] json = JsonUtils.fromJson(GSON, reader, JsonObject[].class);
                        ctx.loadConstants(json);
                    }
                    catch (IOException e)
                    {
                        FMLLog.log.error("Error loading _constants.json: ", e);
                        return false;
                    }
                    finally
                    {
                        IOUtils.closeQuietly(reader);
                    }
                }
                return true;
            },
            (root, file) ->
            {
                Loader.instance().setActiveModContainer(mod);

                String relative = root.relativize(file).toString();
                if (!"json".equals(FilenameUtils.getExtension(file.toString())) || relative.startsWith("_"))
                    return true;

                String name = FilenameUtils.removeExtension(relative).replaceAll("\\\\", "/");
                ResourceLocation key = new ResourceLocation(ctx.getModId(), name);

                BufferedReader reader = null;
                try
                {
                    reader = Files.newBufferedReader(file);
                    JsonObject json = JsonUtils.fromJson(GSON, reader, JsonObject.class);
                    if (json.has("conditions") && !CraftingHelper.processConditions(JsonUtils.getJsonArray(json, "conditions"), ctx))
                        return true;
                    IRecipe recipe = CraftingHelper.getRecipe(json, ctx);
                    ForgeRegistries.RECIPES.register(recipe.setRegistryName(key));
                }
                catch (JsonParseException e)
                {
                    FMLLog.log.error("Parsing error loading recipe {}", key, e);
                    return false;
                }
                catch (IOException e)
                {
                    FMLLog.log.error("Couldn't read recipe {} from {}", key, file, e);
                    return false;
                }
                finally
                {
                    IOUtils.closeQuietly(reader);
                }
                return true;
            },
            true, true
        );
    }
Насколько я понял, мне просто нужно создать где-то в CommonProxy IForgeRegistry<IRecipe>... Но кажется, это не отменяет создание CraftingManager.
Или нужно вносить в стандартный ForgeRegistries.RECIPES.register(recipe.setRegistryName(key));
Правда, это наверно сделает такие рецепты доступными стандартному верстаку..
 
1,057
50
234
Тебе просто надо парсер JSON, который будет заносить в List твои крафты. А Tile будет обрабатывать этот лист.
 
3,005
192
592
@Крокодил Заменяем "тайл" на контейнер.
В ванили есть метод, который берет лист рецептов для 3х3, делаешь свой метод, но который работает с листом из твоего мода.
 
Сверху