Conditions в рецептах

Версия Minecraft
1.16.5
API
Forge
1,357
110
235
Мне нужно, чтобы рецепт работал по конфигу.
Сам Condition:
public class UsingConfigCondition implements ICondition {
    public static final ResourceLocation ID = new ResourceLocation(EnhancedEnchanting.MODID, "using_config");
    public UsingConfigCondition INSTANCE = new UsingConfigCondition();
    @Override public ResourceLocation getID() { return ID; }
    @Override public boolean test() { return !EnhancedEnchantingConfig.DISABLE_VANILLA.get(); }
    public static class Serializer implements IConditionSerializer<UsingConfigCondition> {
        public static Serializer INSTANCE = new Serializer();
        @Override public void write(JsonObject json, UsingConfigCondition value) {}
        @Override public UsingConfigCondition read(JsonObject json) {
            return new UsingConfigCondition().INSTANCE;
        }
        @Override public ResourceLocation getID() { return ID; }
    }
}

Регистрация condition (В EventHandler под Forge):
@SubscribeEvent
public static void registerRecipeSerializers(RegistryEvent.Register<IRecipeSerializer<?>> e) {
        CraftingHelper.register(UsingConfigCondition.Serializer.INSTANCE);
    }

Сам рецепт:
{
  "conditions": [
    {
      "type": "enhancedenchanting:using_config"
    }
  ],
  "type": "minecraft:crafting_shaped",
  "pattern": [
    " B ",
    "D#D",
    "###"
  ],
  "key": {
    "B": {
      "item": "minecraft:book"
    },
    "#": {
      "item": "minecraft:obsidian"
    },
    "D": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "minecraft:air",
    "count": 0
  }
}

Условие не выполняется (в конфиге стоит true, в условии он меняется на false, а значит рецепт не должен работать - так я думаю).
 
Решение
Проблема была в процессе сортировки модов. Мой мод ставился перед forge, из-за чего тот перезаписывал рецепт.
Для исправления этого достаточно в зависимостях мода (в mods.toml) прописать для forge ORDERING: "AFTER".
1,357
110
235
сериализация немного другая
Она отличается только в том случае, если у тебя есть какие-то значения внутри твоего Condition. У меня их нет, потому я ничего не передаю.

Проверил, ошибка, похоже, в json, ибо даже forge:false/forge:not не работает. Возможно должна быть какая-то иная структура, но я не знаю какая.
 
1,357
110
235
ConditionalRecipes есть в 1.16, упоминания о conditionals в рецептах датируются ещё с версии 1.12, а то и старше. Так что conditionals в рецептах есть.
А вот насчёт положения тоже неуверен, возможно это где-то в другом месте должно находиться.
 
1,200
37
237
Ну рецепт вроде как составлен правильно, посмотрел на примере иммерсива. У тебя в логах ничего нет? Попробуй что-то выводить в test() методе, чтобы убедиться, что он хотя бы вызывается.
 
1,200
37
237
EbX05c2XsAIe2eo.jpg:small
 
1,357
110
235
Разобрался, conditions работает.
Как оказалось, замена рецепта ваниллы не работает, хотя до всей этой истории всё работало исправно.
1666442409229.png
Код рецепта:
{
  "type": "minecraft:crafting_shaped",
  "pattern": [
    " B ",
    "D#D",
    "###"
  ],
  "key": {
    "B": {
      "item": "minecraft:book"
    },
    "#": {
      "item": "minecraft:obsidian"
    },
    "D": {
      "item": "minecraft:diamond"
    }
  },
  "result": {
    "item": "minecraft:air",
    "count": 0
  }
}
 
1,357
110
235
Проблема была в процессе сортировки модов. Мой мод ставился перед forge, из-за чего тот перезаписывал рецепт.
Для исправления этого достаточно в зависимостях мода (в mods.toml) прописать для forge ORDERING: "AFTER".
 
Сверху