Версия Minecraft
1.16.5
API
Forge
57
2
1
привет всем

Это снова рецепты(те самые где древорез и JEI)

А проблема в том что в JEI рецепты есть, а в самом древорезе их нет

В прошлый раз не чего у меня не вышло(прошлый раз)


Screen(до этого он тоже был, но я его переделал)
Java:
 private static final ResourceLocation BACKGROUND_TEXTURE = new ResourceLocation(ue.MODID, "textures/gui/container/woodcutter.png");

    private float sliderProgress;
    private boolean clickedOnSсroll;
    private int recipeIndexOffset;
    private boolean hasItemsInInputSlot;

    public WoodcutterScreen(WoodcutterContainer containerIn, PlayerInventory playerInv, ITextComponent titleIn) {
        super(containerIn, playerInv, titleIn);
        containerIn.setInventoryUpdateListener(this::onInventoryUpdate);
        --this.titleY;
    }
    @Override
    public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) {
        super.render(matrixStack, mouseX, mouseY, partialTicks);
        this.renderHoveredTooltip(matrixStack, mouseX, mouseY);
    }
    @Deprecated
    protected void drawGuiContainerBackgroundLayer(MatrixStack matrixStack, float partialTicks, int x, int y) {
        this.renderBackground(matrixStack);
        RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F);
        Objects.requireNonNull(this.minecraft).getTextureManager().bindTexture(BACKGROUND_TEXTURE);
        int i = this.guiLeft;
        int j = this.guiTop;
        this.blit(matrixStack, i, j, 0, 0, this.xSize, this.ySize);
        int k = (int)(41.0F * this.sliderProgress);
        this.blit(matrixStack, i + 119, j + 15 + k, 176 + (this.canScroll() ? 0 : 12), 0, 12, 15);
        int l = this.guiLeft + 52;
        int i1 = this.guiTop + 14;
        int j1 = this.recipeIndexOffset + 12;
        this.func_238853_b_(matrixStack, x, y, l, i1, j1);
        this.drawRecipesItems(l, i1, j1);
    }

    protected void renderHoveredTooltip(MatrixStack matrixStack, int x, int y) {
        super.renderHoveredTooltip(matrixStack, x, y);
        if (this.hasItemsInInputSlot) {
            int i = this.guiLeft + 52;
            int j = this.guiTop + 14;
            int k = this.recipeIndexOffset + 12;
            List<WoodcuttingRecipe> list = this.container.getRecipeList();

            for(int l = this.recipeIndexOffset; l < k && l < this.container.getRecipeListSize(); ++l) {
                int i1 = l - this.recipeIndexOffset;
                int j1 = i + i1 % 4 * 16;
                int k1 = j + i1 / 4 * 18 + 2;
                if (x >= j1 && x < j1 + 16 && y >= k1 && y < k1 + 18) {
                    this.renderTooltip(matrixStack, list.get(l).getRecipeOutput(), x, y);
                }
            }
        }

    }

    private void func_238853_b_(MatrixStack matrixStack, int x, int y, int p_238853_4_, int p_238853_5_, int p_238853_6_) {
        for(int i = this.recipeIndexOffset; i < p_238853_6_ && i < this.container.getRecipeListSize(); ++i) {
            int j = i - this.recipeIndexOffset;
            int k = p_238853_4_ + j % 4 * 16;
            int l = j / 4;
            int i1 = p_238853_5_ + l * 18 + 2;
            int j1 = this.ySize;
            if (i == this.container.getSelectedRecipe()) {
                j1 += 18;
            } else if (x >= k && y >= i1 && x < k + 16 && y < i1 + 18) {
                j1 += 36;
            }

            this.blit(matrixStack, k, i1 - 1, 0, j1, 16, 18);
        }

    }

    private void drawRecipesItems(int left, int top, int recipeIndexOffsetMax) {
        List<WoodcuttingRecipe> list = this.container.getRecipeList();

        for(int i = this.recipeIndexOffset; i < recipeIndexOffsetMax && i < this.container.getRecipeListSize(); ++i) {
            int j = i - this.recipeIndexOffset;
            int k = left + j % 4 * 16;
            int l = j / 4;
            int i1 = top + l * 18 + 2;
            Objects.requireNonNull(this.minecraft).getItemRenderer().renderItemAndEffectIntoGUI(list.get(i).getRecipeOutput(), k, i1);
        }

    }

    public boolean mouseClicked(double mouseX, double mouseY, int button) {
        this.clickedOnSсroll = false;
        if (this.hasItemsInInputSlot) {
            int i = this.guiLeft + 52;
            int j = this.guiTop + 14;
            int k = this.recipeIndexOffset + 12;

            for(int l = this.recipeIndexOffset; l < k; ++l) {
                int i1 = l - this.recipeIndexOffset;
                double d0 = mouseX - (double)(i + i1 % 4 * 16);
                double d1 = mouseY - (double)(j + i1 / 4 * 18);
                if (d0 >= 0.0D && d1 >= 0.0D && d0 < 16.0D && d1 < 18.0D && this.container.enchantItem(Objects.requireNonNull(Objects.requireNonNull(this.minecraft).player), l)) {
                    Minecraft.getInstance().getSoundHandler().play(SimpleSound.master(SoundEvents.UI_STONECUTTER_SELECT_RECIPE, 1.0F));
                    Objects.requireNonNull(this.minecraft.playerController).sendEnchantPacket((this.container).windowId, l);
                    return true;
                }
            }

            i = this.guiLeft + 119;
            j = this.guiTop + 9;
            if (mouseX >= (double)i && mouseX < (double)(i + 12) && mouseY >= (double)j && mouseY < (double)(j + 54)) {
                this.clickedOnSсroll = true;
            }
        }

        return super.mouseClicked(mouseX, mouseY, button);
    }

    public boolean mouseDragged(double mouseX, double mouseY, int button, double dragX, double dragY) {
        if (this.clickedOnSсroll && this.canScroll()) {
            int i = this.guiTop + 14;
            int j = i + 54;
            this.sliderProgress = ((float)mouseY - (float)i - 7.5F) / ((float)(j - i) - 15.0F);
            this.sliderProgress = MathHelper.clamp(this.sliderProgress, 0.0F, 1.0F);
            this.recipeIndexOffset = (int)((double)(this.sliderProgress * (float)this.getHiddenRows()) + 0.5D) * 4;
            return true;
        } else {
            return super.mouseDragged(mouseX, mouseY, button, dragX, dragY);
        }
    }

    public boolean mouseScrolled(double mouseX, double mouseY, double delta) {
        if (this.canScroll()) {
            int i = this.getHiddenRows();
            this.sliderProgress = (float)((double)this.sliderProgress - delta / (double)i);
            this.sliderProgress = MathHelper.clamp(this.sliderProgress, 0.0F, 1.0F);
            this.recipeIndexOffset = (int)((double)(this.sliderProgress * (float)i) + 0.5D) * 4;
        }

        return true;
    }

    private boolean canScroll() {
        return this.hasItemsInInputSlot && this.container.getRecipeListSize() > 12;
    }

    protected int getHiddenRows() {
        return (this.container.getRecipeListSize() + 4 - 1) / 4 - 3;
    }

    private void onInventoryUpdate() {
        this.hasItemsInInputSlot = this.container.hasItemsinInputSlot();
        if (!this.hasItemsInInputSlot) {
            this.sliderProgress = 0.0F;
            this.recipeIndexOffset = 0;
        }

    }


UERecipes(RecipeType и Serializer)

Java:
public class UERecipes {

    public static class UESerializers {


        public static  DeferredRegister<IRecipeSerializer<?>> RECIPE_SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, ue.MODID);

        public static final RegistryObject<IRecipeSerializer<WoodcuttingRecipe>> WOODCUTTING = RECIPE_SERIALIZERS.register("woodcutting", () -> new WoodcuttingRecipe.Serializer(WoodcuttingRecipe::new){


                });

        public static void register(IEventBus eventBus) {RECIPE_SERIALIZERS.register(eventBus);}

    }


    public static class UERecipeType {

        public static final IRecipeType<WoodcuttingRecipe> WOODCUTTING = IRecipeType.register(ue.MODID + ":woodcutting");
    }


}


если нужна крафтилка или класс рецепта можете обратится в предыдущую тему
 
779
37
106
public static final IRecipeType<WoodcuttingRecipe> WOODCUTTING = IRecipeType.register(ue.MODID + ":woodcutting");
Ты не туда регаешь. Регать надо в net.minecraft.util.registry.Registry.
Я попробовал сделать регу как и у тебя, у меня рецепты перестали работать. При регистрации через Registry всё работает.

Регистрация типа рецепта (вызывается в конструкторе мода):
public static IRecipeType<EnchantingRecipe> ENCHANTING_RECIPE_TYPE = new EnchantingRecipe.EnchantingRecipeType();
    public static void reg(IEventBus bus) {
        RECIPE_SERIALIZERS.register(bus);
        Registry.register(Registry.RECIPE_TYPE, EnchantingRecipe.ID, ENCHANTING_RECIPE_TYPE);
    }

Код моего рецепта:
public class EnchantingRecipe implements IRecipe<IInventory> {
   
    public static ResourceLocation ID = new ResourceLocation(EnhancedEnchanting.MODID, "enchanting");
    //...
    @Override
    public IRecipeType<?> getType() {
        return Registry.RECIPE_TYPE.getOptional(ID).get();
    }
   
    public static class EnchantingRecipeType implements IRecipeType<EnchantingRecipe> {
        @Override
        public String toString() {
            return ID.toString();
        }
    }
   
    public static class Serializer extends ForgeRegistryEntry<IRecipeSerializer<?>> implements IRecipeSerializer<EnchantingRecipe> {
        //...
    }
}
 
779
37
106
Покажи полный код рецепта и регистрации рецептов (обязательно полный).
Также задам один, меня лично, тревожащий вопрос: а так ли нужен этот интерфейс? Не проще ли сделать взаимодействие в мире (т.е. без посредника в виде интерфейса).
Кстати, мне кажется, что наследовать GUI'шку от гуишки стоункаттера и переделать вызовы определения рецептов будет не только проще, но и надёжней.
 
57
2
1
Java:
public class WoodcuttingRecipe implements IStandardRecipe {

    public static ResourceLocation ID = new ResourceLocation(ue.MODID, "woodcutting");

    protected final Ingredient ingredient;
    protected final ItemStack result;
    protected final ResourceLocation id;

    public WoodcuttingRecipe(ResourceLocation id,  Ingredient ingredient, ItemStack result) {
        this.ingredient = ingredient;
        this.result = result;
        this.id = id;
    }


    @Override
    public ResourceLocation getId() {
        return this.id;
    }

    @Override
    public IRecipeSerializer<?> getSerializer() {
        return UERecipes.WOODCUTTING_SERIALIZER.get();
    }

    @Override
    public IRecipeType<?> getType() {
        return Registry.RECIPE_TYPE.getOptional(ID).get();
    }

    @Override
    public ItemStack getRecipeOutput() {
        return this.result;
    }

    @Override
    public NonNullList<Ingredient> getIngredients() {
        NonNullList<Ingredient> non_null_list = NonNullList.create();
        non_null_list.add(this.ingredient);
        return non_null_list;
    }

    @Override
    public boolean canFit(int width, int height) {
        return true;
    }

    @Override
    public boolean matches(IInventory inv, World worldIn) {
        return false;
    }

    @Override
    public ItemStack getCraftingResult(IInventory inv) {
        return this.result.copy();
    }

    public static class Serializer extends ForgeRegistryEntry<IRecipeSerializer<?>> implements IRecipeSerializer<WoodcuttingRecipe> {
        final WoodcuttingRecipe.Serializer.IRecipeFactory<WoodcuttingRecipe> factory;

        protected Serializer(WoodcuttingRecipe.Serializer.IRecipeFactory<WoodcuttingRecipe> factory) {
            this.factory = factory;
        }
        @Deprecated
        public WoodcuttingRecipe read(ResourceLocation recipeId, JsonObject json) {

            Ingredient ingredient = Ingredient.deserialize(JSONUtils.getJsonObject(json, "ingredient"));
            String result = JSONUtils.getString(json, "result");
            int count = JSONUtils.getInt(json, "count");
            ItemStack itemstack = new ItemStack(Registry.ITEM.getOrDefault(new ResourceLocation(result)), count);
            return this.factory.create(recipeId, ingredient, itemstack);
        }
        @Override
        public WoodcuttingRecipe read(ResourceLocation recipeId, PacketBuffer buffer) {
            Ingredient ingredient = Ingredient.read(buffer);
            ItemStack itemstack = buffer.readItemStack();
            return this.factory.create(recipeId, ingredient, itemstack);
        }
        @Override
        public void write(PacketBuffer buffer, WoodcuttingRecipe recipe) {
            recipe.ingredient.write(buffer);
            buffer.writeItemStack(recipe.result);
        }

        interface IRecipeFactory<T extends WoodcuttingRecipe> {
            T create(ResourceLocation resourceLocation, Ingredient ingredient, ItemStack stack);
        }
    }

    public static class WoodCuttingRecipeType implements IRecipeType<WoodcuttingRecipe> {

        @Override
        public String toString(){
            return ID.toString();
        }

    }


Java:
public class UERecipes {

        public static  DeferredRegister<IRecipeSerializer<?>> RECIPE_SERIALIZERS = DeferredRegister.create(ForgeRegistries.RECIPE_SERIALIZERS, ue.MODID);

        public static final RegistryObject<IRecipeSerializer<WoodcuttingRecipe>> WOODCUTTING_SERIALIZER = RECIPE_SERIALIZERS.register("woodcutting", () -> new WoodcuttingRecipe.Serializer(WoodcuttingRecipe::new){

            });




        public static IRecipeType<WoodcuttingRecipe> WOODCUTTING_RECIPE_TYPE = new WoodcuttingRecipe.WoodCuttingRecipeType();


    public static void register(IEventBus bus) {
        RECIPE_SERIALIZERS.register(bus);
        Registry.register(Registry.RECIPE_TYPE, WoodcuttingRecipe.ID, WOODCUTTING_RECIPE_TYPE);
    }

}
 
779
37
106
Я такого интерфейса даже найти не могу. Откуда ты его взял? имплементируй от IRecipe<IInventory>
@Override public NonNullList<Ingredient> getIngredients() { NonNullList<Ingredient> non_null_list = NonNullList.create(); non_null_list.add(this.ingredient); return non_null_list; }
Замени лучше эти три строчки на return NonNullList.withSize(1, ingredient); Сделает то же самое, но короче.
 
779
37
106
Тогда либо убери его, либо покажи что он делает. По сути, в классе реализовано всё нужное для Recipe<IInventory>.
Если оно всё равно не заработает, разбирайся что там с контейнером. Скорее всего какой-то метод ты не Override'нул.
 
57
2
1
с помощью точек нашел это (UERecipes, WoodcuttingRecipe. В контейнере(Крафтилке) всё ок)

Java:
<init>:110, WoodcuttingRecipe$WoodCuttingRecipeType
this = {[email protected]} @Object is being initialized

Java:
<clinit>:23, UERecipes
this = "this" is not available

также в логах нашел это(не думаю что оно связано с рецептом)
Java:
[09:16:24] [Render thread/ERROR] [minecraft/Minecraft]: Failed to verify authentication
com.mojang.authlib.exceptions.AuthenticationUnavailableException: null
    at com.mojang.authlib.yggdrasil.YggdrasilSocialInteractionsService.checkPrivileges(YggdrasilSocialInteractionsService.java:97) ~[authlib-2.1.28.jar:?] {}
    at com.mojang.authlib.yggdrasil.YggdrasilSocialInteractionsService.<init>(YggdrasilSocialInteractionsService.java:40) ~[authlib-2.1.28.jar:?] {}
    at com.mojang.authlib.yggdrasil.YggdrasilAuthenticationService.createSocialInteractionsService(YggdrasilAuthenticationService.java:152) ~[authlib-2.1.28.jar:?] {re:classloading}
    at net.minecraft.client.Minecraft.func_244735_a(Minecraft.java:556) ~[forge-1.16.5-36.2.0_mapped_snapshot_20210309-1.16.5-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at net.minecraft.client.Minecraft.<init>(Minecraft.java:388) ~[forge-1.16.5-36.2.0_mapped_snapshot_20210309-1.16.5-recomp.jar:?] {re:classloading,pl:accesstransformer:B,pl:runtimedistcleaner:A}
    at net.minecraft.client.main.Main.main(Main.java:149) ~[forge-1.16.5-36.2.0_mapped_snapshot_20210309-1.16.5-recomp.jar:?] {re:classloading,pl:runtimedistcleaner:A}
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:?] {}
    at jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78) ~[?:?] {}
    at jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:?] {}
    at java.lang.reflect.Method.invoke(Method.java:567) ~[?:?] {}
    at net.minecraftforge.userdev.FMLUserdevClientLaunchProvider.lambda$launchService$0(FMLUserdevClientLaunchProvider.java:52) ~[forge-1.16.5-36.2.0_mapped_snapshot_20210309-1.16.5-recomp.jar:?] {}
    at cpw.mods.modlauncher.LaunchServiceHandlerDecorator.launch(LaunchServiceHandlerDecorator.java:37) [modlauncher-8.0.9.jar:?] {}
    at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:54) [modlauncher-8.0.9.jar:?] {}
    at cpw.mods.modlauncher.LaunchServiceHandler.launch(LaunchServiceHandler.java:72) [modlauncher-8.0.9.jar:?] {}
    at cpw.mods.modlauncher.Launcher.run(Launcher.java:82) [modlauncher-8.0.9.jar:?] {}
    at cpw.mods.modlauncher.Launcher.main(Launcher.java:66) [modlauncher-8.0.9.jar:?] {}
    at net.minecraftforge.userdev.LaunchTesting.main(LaunchTesting.java:108) [forge-1.16.5-36.2.0_mapped_snapshot_20210309-1.16.5-recomp.jar:?] {}

Java:
java.io.IOException: Cannot run program "infocmp": CreateProcess error=2, Не удается найти указанный файл
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1142)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1073)
    at org.jline.utils.InfoCmp.getInfoCmp(InfoCmp.java:547)
    at org.jline.terminal.impl.AbstractTerminal.parseInfoCmp(AbstractTerminal.java:187)
    at org.jline.terminal.impl.DumbTerminal.<init>(DumbTerminal.java:88)
    at org.jline.terminal.TerminalBuilder.doBuild(TerminalBuilder.java:401)
    at org.jline.terminal.TerminalBuilder.build(TerminalBuilder.java:259)
    at net.minecrell.terminalconsole.TerminalConsoleAppender.initializeTerminal(TerminalConsoleAppender.java:231)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at net.minecraftforge.fml.loading.log4j.ForgeHighlight.newInstance(ForgeHighlight.java:61)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.apache.logging.log4j.core.pattern.PatternParser.createConverter(PatternParser.java:583)
    at org.apache.logging.log4j.core.pattern.PatternParser.finalizeConverter(PatternParser.java:639)
    at org.apache.logging.log4j.core.pattern.PatternParser.parse(PatternParser.java:415)
    at org.apache.logging.log4j.core.pattern.PatternParser.parse(PatternParser.java:177)
    at net.minecrell.terminalconsole.util.LoggerNamePatternSelector.<init>(LoggerNamePatternSelector.java:111)
    at net.minecrell.terminalconsole.util.LoggerNamePatternSelector.createSelector(LoggerNamePatternSelector.java:159)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:567)
    at org.apache.logging.log4j.core.config.plugins.util.PluginBuilder.build(PluginBuilder.java:136)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createPluginObject(AbstractConfiguration.java:964)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:904)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:896)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:896)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.createConfiguration(AbstractConfiguration.java:896)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.doConfigure(AbstractConfiguration.java:514)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.initialize(AbstractConfiguration.java:238)
    at org.apache.logging.log4j.core.config.AbstractConfiguration.start(AbstractConfiguration.java:250)
    at org.apache.logging.log4j.core.LoggerContext.setConfiguration(LoggerContext.java:548)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:620)
    at org.apache.logging.log4j.core.LoggerContext.reconfigure(LoggerContext.java:637)
    at org.apache.logging.log4j.core.LoggerContext.start(LoggerContext.java:231)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:153)
    at org.apache.logging.log4j.core.impl.Log4jContextFactory.getContext(Log4jContextFactory.java:45)
    at org.apache.logging.log4j.LogManager.getContext(LogManager.java:194)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:581)
    at org.apache.logging.log4j.LogManager.getLogger(LogManager.java:567)
    at net.minecraftforge.userdev.ArgumentList.<clinit>(ArgumentList.java:37)
    at net.minecraftforge.userdev.LaunchTesting.main(LaunchTesting.java:50)
Caused by: java.io.IOException: CreateProcess error=2, Не удается найти указанный файл
    at java.base/java.lang.ProcessImpl.create(Native Method)
    at java.base/java.lang.ProcessImpl.<init>(ProcessImpl.java:492)
    at java.base/java.lang.ProcessImpl.start(ProcessImpl.java:158)
    at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1109)
    ... 46 more

Я хоть то сделал? Первый раз дебажу
 
Последнее редактирование:
779
37
106
Первый кусок лога связан с авторизацией mojang, на него можно смело забить. Второй, вроде, связан с системой, но ничего критичного, насколько я знаю.

Касательно дебаггинга: ты кинул просто часть действий во время брейкпоинта. Тебе нужно пролистать всё, связанное с брейкпоинтом, а потом сделать выводы что там не так.
Ещё я бы кинул брейкпоинт на List с рецептами внутри твоего контейнера, там и отслеживал бы как он меняется.
 
57
2
1
Сравнил действия своего блока с камнерезом

у меня recipes = size = 0

у камнереза recipes = size = 7 и внутри 6 рецептов

остальное всё вроде одинаковое
значит что то не так с JSON?


Рецепт:
{
  "type": "ue:woodcutting",
  "ingredient": {
    "item": "minecraft:oak_log"
  },
  "result": "ue:oak_log_slab",
  "count": 2
}
 
Последнее редактирование:
779
37
106
Нет, с рецептом всё норм, ведь его JEI подтягивает.
Скорее всего проблема где-то в заполнении списка. Он заполняется, судя по коду, когда меняешь стак во входном слоте. Ставь там брейкпоинт и пробуй смотреть что не так.
 
Сверху