From cd88d69cf3232bb46f24ed19066c280e7dbb37ba Mon Sep 17 00:00:00 2001 From: Aleksey Date: Tue, 10 Nov 2020 23:12:46 +0300 Subject: [PATCH] Infusion REI display --- .../compat/{ => rei}/REIAlloyingCategory.java | 182 +++++++------- .../compat/{ => rei}/REIAlloyingDisplay.java | 222 +++++++++--------- .../compat/{ => rei}/REIAnvilCategory.java | 168 ++++++------- .../compat/{ => rei}/REIAnvilDisplay.java | 146 ++++++------ .../compat/{ => rei}/REIContainer.java | 28 +-- .../compat/rei/REIInfusionCategory.java | 82 +++++++ .../compat/rei/REIInfusionDisplay.java | 81 +++++++ .../betterend/compat/{ => rei}/REIPlugin.java | 106 +++++---- .../ru/betterend/recipe/InfusionRecipes.java | 10 +- .../recipe/builders/InfusionRecipe.java | 11 + .../ru/betterend/rituals/InfusionRitual.java | 15 +- .../assets/betterend/lang/en_us.json | 5 +- .../assets/betterend/lang/ru_ru.json | 5 +- src/main/resources/fabric.mod.json | 4 +- 14 files changed, 626 insertions(+), 439 deletions(-) rename src/main/java/ru/betterend/compat/{ => rei}/REIAlloyingCategory.java (93%) rename src/main/java/ru/betterend/compat/{ => rei}/REIAlloyingDisplay.java (95%) rename src/main/java/ru/betterend/compat/{ => rei}/REIAnvilCategory.java (96%) rename src/main/java/ru/betterend/compat/{ => rei}/REIAnvilDisplay.java (94%) rename src/main/java/ru/betterend/compat/{ => rei}/REIContainer.java (91%) create mode 100644 src/main/java/ru/betterend/compat/rei/REIInfusionCategory.java create mode 100644 src/main/java/ru/betterend/compat/rei/REIInfusionDisplay.java rename src/main/java/ru/betterend/compat/{ => rei}/REIPlugin.java (80%) diff --git a/src/main/java/ru/betterend/compat/REIAlloyingCategory.java b/src/main/java/ru/betterend/compat/rei/REIAlloyingCategory.java similarity index 93% rename from src/main/java/ru/betterend/compat/REIAlloyingCategory.java rename to src/main/java/ru/betterend/compat/rei/REIAlloyingCategory.java index 03c23bad..a752c266 100644 --- a/src/main/java/ru/betterend/compat/REIAlloyingCategory.java +++ b/src/main/java/ru/betterend/compat/rei/REIAlloyingCategory.java @@ -1,90 +1,92 @@ -package ru.betterend.compat; - -import java.text.DecimalFormat; -import java.util.Collections; -import java.util.List; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.Lists; - -import it.unimi.dsi.fastutil.ints.IntList; -import me.shedaniel.math.Point; -import me.shedaniel.math.Rectangle; -import me.shedaniel.rei.api.EntryStack; -import me.shedaniel.rei.api.TransferRecipeCategory; -import me.shedaniel.rei.api.widgets.Widgets; -import me.shedaniel.rei.gui.entries.RecipeEntry; -import me.shedaniel.rei.gui.entries.SimpleRecipeEntry; -import me.shedaniel.rei.gui.widget.Widget; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.text.TranslatableText; -import net.minecraft.util.Identifier; -import ru.betterend.recipe.builders.AlloyingRecipe; -import ru.betterend.registry.EndBlocks; -import ru.betterend.util.LangUtil; - -public class REIAlloyingCategory implements TransferRecipeCategory { - - @Override - public @NotNull Identifier getIdentifier() { - return AlloyingRecipe.ID; - } - - @Override - public @NotNull String getCategoryName() { - return LangUtil.translate(EndBlocks.END_STONE_SMELTER.getTranslationKey()); - } - - @Override - public @NotNull EntryStack getLogo() { - return REIPlugin.END_STONE_SMELTER; - } - - @Override - public @NotNull List setupDisplay(REIAlloyingDisplay display, Rectangle bounds) { - Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10); - double smeltTime = display.getSmeltTime(); - DecimalFormat df = new DecimalFormat("###.##"); - List widgets = Lists.newArrayList(); - widgets.add(Widgets.createRecipeBase(bounds)); - widgets.add(Widgets.createResultSlotBackground(new Point(startPoint.x + 61, startPoint.y + 9))); - widgets.add(Widgets.createBurningFire(new Point(startPoint.x - 9, startPoint.y + 20)).animationDurationMS(10000)); - widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 5, bounds.y + 5), - new TranslatableText("category.rei.cooking.time&xp", df.format(display.getXp()), df.format(smeltTime / 20D))).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); - widgets.add(Widgets.createArrow(new Point(startPoint.x + 24, startPoint.y + 8)).animationDurationTicks(smeltTime)); - List> inputEntries = display.getInputEntries(); - widgets.add(Widgets.createSlot(new Point(startPoint.x - 20, startPoint.y + 1)).entries(inputEntries.get(0)).markInput()); - if (inputEntries.size() > 1) { - widgets.add(Widgets.createSlot(new Point(startPoint.x + 1, startPoint.y + 1)).entries(inputEntries.get(1)).markInput()); - } else { - widgets.add(Widgets.createSlot(new Point(startPoint.x + 1, startPoint.y + 1)).entries(Lists.newArrayList()).markInput()); - } - widgets.add(Widgets.createSlot(new Point(startPoint.x + 61, startPoint.y + 9)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput()); - return widgets; - } - - @Override - public void renderRedSlots(MatrixStack matrices, List widgets, Rectangle bounds, REIAlloyingDisplay display, - IntList redSlots) { - Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27); - matrices.push(); - matrices.translate(0, 0, 400); - if (redSlots.contains(0)) { - DrawableHelper.fill(matrices, startPoint.x - 20, startPoint.y + 1, startPoint.x - 20 + 16, startPoint.y + 1 + 16, 1090453504); - DrawableHelper.fill(matrices, startPoint.x + 1, startPoint.y + 1, startPoint.x + 1 + 16, startPoint.y + 1 + 16, 1090453504); - } - matrices.pop(); - } - - @Override - public @NotNull RecipeEntry getSimpleRenderer(REIAlloyingDisplay recipe) { - return SimpleRecipeEntry.from(Collections.singletonList(recipe.getInputEntries().get(0)), recipe.getResultingEntries()); - } - - @Override - public int getDisplayHeight() { - return 49; - } -} +package ru.betterend.compat.rei; + +import java.text.DecimalFormat; +import java.util.List; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.Lists; + +import it.unimi.dsi.fastutil.ints.IntList; + +import me.shedaniel.math.Point; +import me.shedaniel.math.Rectangle; +import me.shedaniel.rei.api.EntryStack; +import me.shedaniel.rei.api.TransferRecipeCategory; +import me.shedaniel.rei.api.widgets.Widgets; +import me.shedaniel.rei.gui.entries.RecipeEntry; +import me.shedaniel.rei.gui.entries.SimpleRecipeEntry; +import me.shedaniel.rei.gui.widget.Widget; + +import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.TranslatableText; +import net.minecraft.util.Identifier; + +import ru.betterend.recipe.builders.AlloyingRecipe; +import ru.betterend.registry.EndBlocks; +import ru.betterend.util.LangUtil; + +public class REIAlloyingCategory implements TransferRecipeCategory { + + @Override + public @NotNull Identifier getIdentifier() { + return AlloyingRecipe.ID; + } + + @Override + public @NotNull String getCategoryName() { + return LangUtil.translate(EndBlocks.END_STONE_SMELTER.getTranslationKey()); + } + + @Override + public @NotNull EntryStack getLogo() { + return REIPlugin.END_STONE_SMELTER; + } + + @Override + public @NotNull List setupDisplay(REIAlloyingDisplay display, Rectangle bounds) { + Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10); + double smeltTime = display.getSmeltTime(); + DecimalFormat df = new DecimalFormat("###.##"); + List widgets = Lists.newArrayList(); + widgets.add(Widgets.createRecipeBase(bounds)); + widgets.add(Widgets.createResultSlotBackground(new Point(startPoint.x + 61, startPoint.y + 9))); + widgets.add(Widgets.createBurningFire(new Point(startPoint.x - 9, startPoint.y + 20)).animationDurationMS(10000)); + widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 5, bounds.y + 5), + new TranslatableText("category.rei.cooking.time&xp", df.format(display.getXp()), df.format(smeltTime / 20D))).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); + widgets.add(Widgets.createArrow(new Point(startPoint.x + 24, startPoint.y + 8)).animationDurationTicks(smeltTime)); + List> inputEntries = display.getInputEntries(); + widgets.add(Widgets.createSlot(new Point(startPoint.x - 20, startPoint.y + 1)).entries(inputEntries.get(0)).markInput()); + if (inputEntries.size() > 1) { + widgets.add(Widgets.createSlot(new Point(startPoint.x + 1, startPoint.y + 1)).entries(inputEntries.get(1)).markInput()); + } else { + widgets.add(Widgets.createSlot(new Point(startPoint.x + 1, startPoint.y + 1)).entries(Lists.newArrayList()).markInput()); + } + widgets.add(Widgets.createSlot(new Point(startPoint.x + 61, startPoint.y + 9)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput()); + return widgets; + } + + @Override + public void renderRedSlots(MatrixStack matrices, List widgets, Rectangle bounds, REIAlloyingDisplay display, + IntList redSlots) { + Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27); + matrices.push(); + matrices.translate(0, 0, 400); + if (redSlots.contains(0)) { + DrawableHelper.fill(matrices, startPoint.x - 20, startPoint.y + 1, startPoint.x - 20 + 16, startPoint.y + 1 + 16, 1090453504); + DrawableHelper.fill(matrices, startPoint.x + 1, startPoint.y + 1, startPoint.x + 1 + 16, startPoint.y + 1 + 16, 1090453504); + } + matrices.pop(); + } + + @Override + public @NotNull RecipeEntry getSimpleRenderer(REIAlloyingDisplay recipe) { + return SimpleRecipeEntry.from(recipe.getInputEntries(), recipe.getResultingEntries()); + } + + @Override + public int getDisplayHeight() { + return 49; + } +} diff --git a/src/main/java/ru/betterend/compat/REIAlloyingDisplay.java b/src/main/java/ru/betterend/compat/rei/REIAlloyingDisplay.java similarity index 95% rename from src/main/java/ru/betterend/compat/REIAlloyingDisplay.java rename to src/main/java/ru/betterend/compat/rei/REIAlloyingDisplay.java index 09ebbb5f..b5a91a95 100644 --- a/src/main/java/ru/betterend/compat/REIAlloyingDisplay.java +++ b/src/main/java/ru/betterend/compat/rei/REIAlloyingDisplay.java @@ -1,111 +1,111 @@ -package ru.betterend.compat; - -import java.util.Collections; -import java.util.List; -import java.util.Optional; -import java.util.stream.Collectors; - -import org.jetbrains.annotations.NotNull; - -import me.shedaniel.rei.api.EntryStack; -import me.shedaniel.rei.api.TransferRecipeDisplay; -import me.shedaniel.rei.server.ContainerInfo; -import net.minecraft.item.Item; -import net.minecraft.recipe.BlastingRecipe; -import net.minecraft.recipe.Recipe; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.text.TranslatableText; -import net.minecraft.util.Formatting; -import net.minecraft.util.Identifier; -import ru.betterend.blocks.entities.EndStoneSmelterBlockEntity; -import ru.betterend.recipe.builders.AlloyingRecipe; - -public class REIAlloyingDisplay implements TransferRecipeDisplay { - - private static List fuel; - - private Recipe recipe; - private List> input; - private List output; - private float xp; - private double smeltTime; - - public REIAlloyingDisplay(AlloyingRecipe recipe) { - this.recipe = recipe; - this.input = EntryStack.ofIngredients(recipe.getPreviewInputs()); - this.output = Collections.singletonList(EntryStack.create(recipe.getOutput())); - this.xp = recipe.getExperience(); - this.smeltTime = recipe.getSmeltTime(); - } - - public REIAlloyingDisplay(BlastingRecipe recipe) { - this.recipe = recipe; - this.input = EntryStack.ofIngredients(recipe.getPreviewInputs()); - this.output = Collections.singletonList(EntryStack.create(recipe.getOutput())); - this.xp = recipe.getExperience(); - this.smeltTime = recipe.getCookTime(); - } - - public static List getFuel() { - return fuel; - } - - @Override - public @NotNull Optional getRecipeLocation() { - return Optional.ofNullable(recipe).map(Recipe::getId); - } - - @Override - public @NotNull List> getInputEntries() { - return this.input; - } - - @Override - public @NotNull List> getResultingEntries() { - return Collections.singletonList(output); - } - - @Override - public @NotNull Identifier getRecipeCategory() { - return AlloyingRecipe.ID; - } - - @Override - public @NotNull List> getRequiredEntries() { - return this.input; - } - - public float getXp() { - return this.xp; - } - - public double getSmeltTime() { - return this.smeltTime; - } - - public Optional> getOptionalRecipe() { - return Optional.ofNullable(recipe); - } - - @Override - public int getWidth() { - return 2; - } - - @Override - public int getHeight() { - return 1; - } - - @Override - public List> getOrganisedInputEntries(ContainerInfo containerInfo, ScreenHandler container) { - return this.input; - } - - static { - fuel = EndStoneSmelterBlockEntity.availableFuels().keySet().stream() - .map(Item::getDefaultStack).map(EntryStack::create) - .map(e -> e.setting(EntryStack.Settings.TOOLTIP_APPEND_EXTRA, stack -> Collections.singletonList(new TranslatableText("category.rei.smelting.fuel") - .formatted(Formatting.YELLOW)))).collect(Collectors.toList()); - } -} +package ru.betterend.compat.rei; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import org.jetbrains.annotations.NotNull; + +import me.shedaniel.rei.api.EntryStack; +import me.shedaniel.rei.api.TransferRecipeDisplay; +import me.shedaniel.rei.server.ContainerInfo; +import net.minecraft.item.Item; +import net.minecraft.recipe.BlastingRecipe; +import net.minecraft.recipe.Recipe; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.text.TranslatableText; +import net.minecraft.util.Formatting; +import net.minecraft.util.Identifier; +import ru.betterend.blocks.entities.EndStoneSmelterBlockEntity; +import ru.betterend.recipe.builders.AlloyingRecipe; + +public class REIAlloyingDisplay implements TransferRecipeDisplay { + + private static List fuel; + + private Recipe recipe; + private List> input; + private List output; + private float xp; + private double smeltTime; + + public REIAlloyingDisplay(AlloyingRecipe recipe) { + this.recipe = recipe; + this.input = EntryStack.ofIngredients(recipe.getPreviewInputs()); + this.output = Collections.singletonList(EntryStack.create(recipe.getOutput())); + this.xp = recipe.getExperience(); + this.smeltTime = recipe.getSmeltTime(); + } + + public REIAlloyingDisplay(BlastingRecipe recipe) { + this.recipe = recipe; + this.input = EntryStack.ofIngredients(recipe.getPreviewInputs()); + this.output = Collections.singletonList(EntryStack.create(recipe.getOutput())); + this.xp = recipe.getExperience(); + this.smeltTime = recipe.getCookTime(); + } + + public static List getFuel() { + return fuel; + } + + @Override + public @NotNull Optional getRecipeLocation() { + return Optional.ofNullable(recipe).map(Recipe::getId); + } + + @Override + public @NotNull List> getInputEntries() { + return this.input; + } + + @Override + public @NotNull List> getResultingEntries() { + return Collections.singletonList(output); + } + + @Override + public @NotNull Identifier getRecipeCategory() { + return AlloyingRecipe.ID; + } + + @Override + public @NotNull List> getRequiredEntries() { + return this.input; + } + + public float getXp() { + return this.xp; + } + + public double getSmeltTime() { + return this.smeltTime; + } + + public Optional> getOptionalRecipe() { + return Optional.ofNullable(recipe); + } + + @Override + public int getWidth() { + return 2; + } + + @Override + public int getHeight() { + return 1; + } + + @Override + public List> getOrganisedInputEntries(ContainerInfo containerInfo, ScreenHandler container) { + return this.input; + } + + static { + fuel = EndStoneSmelterBlockEntity.availableFuels().keySet().stream() + .map(Item::getDefaultStack).map(EntryStack::create) + .map(e -> e.setting(EntryStack.Settings.TOOLTIP_APPEND_EXTRA, stack -> Collections.singletonList(new TranslatableText("category.rei.smelting.fuel") + .formatted(Formatting.YELLOW)))).collect(Collectors.toList()); + } +} diff --git a/src/main/java/ru/betterend/compat/REIAnvilCategory.java b/src/main/java/ru/betterend/compat/rei/REIAnvilCategory.java similarity index 96% rename from src/main/java/ru/betterend/compat/REIAnvilCategory.java rename to src/main/java/ru/betterend/compat/rei/REIAnvilCategory.java index 87f12de9..82172fc7 100644 --- a/src/main/java/ru/betterend/compat/REIAnvilCategory.java +++ b/src/main/java/ru/betterend/compat/rei/REIAnvilCategory.java @@ -1,84 +1,84 @@ -package ru.betterend.compat; - -import java.util.Collections; -import java.util.List; - -import org.jetbrains.annotations.NotNull; - -import com.google.common.collect.Lists; - -import it.unimi.dsi.fastutil.ints.IntList; -import me.shedaniel.math.Point; -import me.shedaniel.math.Rectangle; -import me.shedaniel.rei.api.EntryStack; -import me.shedaniel.rei.api.TransferRecipeCategory; -import me.shedaniel.rei.api.widgets.Widgets; -import me.shedaniel.rei.gui.entries.RecipeEntry; -import me.shedaniel.rei.gui.entries.SimpleRecipeEntry; -import me.shedaniel.rei.gui.widget.Widget; -import net.minecraft.block.Blocks; -import net.minecraft.client.gui.DrawableHelper; -import net.minecraft.client.util.math.MatrixStack; -import net.minecraft.text.TranslatableText; -import net.minecraft.util.Identifier; -import ru.betterend.util.LangUtil; - -public class REIAnvilCategory implements TransferRecipeCategory { - - @Override - public @NotNull Identifier getIdentifier() { - return REIPlugin.SMITHING; - } - - @Override - public @NotNull String getCategoryName() { - return LangUtil.translate(Blocks.ANVIL.getTranslationKey()); - } - - @Override - public @NotNull EntryStack getLogo() { - return REIPlugin.ANVIL; - } - - @Override - public @NotNull List setupDisplay(REIAnvilDisplay display, Rectangle bounds) { - Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10); - List widgets = Lists.newArrayList(); - widgets.add(Widgets.createRecipeBase(bounds)); - int x = startPoint.x + 10; - int y = startPoint.y; - widgets.add(Widgets.createResultSlotBackground(new Point(x + 61, y + 4))); - List> inputEntries = display.getInputEntries(); - widgets.add(Widgets.createArrow(new Point(x + 24, y + 3))); - widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 5, bounds.y + bounds.height - 12), - new TranslatableText("category.rei.damage.amount&dmg", display.getDamage())).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); - widgets.add(Widgets.createSlot(new Point(x - 20, y + 3)).entries(inputEntries.get(0)).markInput()); - widgets.add(Widgets.createSlot(new Point(x + 1, y + 3)).entries(inputEntries.get(1)).markInput()); - widgets.add(Widgets.createSlot(new Point(x + 61, y + 4)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput()); - return widgets; - } - - @Override - public void renderRedSlots(MatrixStack matrices, List widgets, Rectangle bounds, REIAnvilDisplay display, - IntList redSlots) { - Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27); - matrices.push(); - matrices.translate(0, 0, 400); - if (redSlots.contains(0)) { - DrawableHelper.fill(matrices, startPoint.x - 20, startPoint.y + 3, startPoint.x - 20 + 16, startPoint.y + 3 + 16, 1090453504); - DrawableHelper.fill(matrices, startPoint.x + 1, startPoint.y + 3, startPoint.x + 1 + 16, startPoint.y + 3 + 16, 1090453504); - } - matrices.pop(); - } - - @Override - public @NotNull RecipeEntry getSimpleRenderer(REIAnvilDisplay recipe) { - return SimpleRecipeEntry.from(Collections.singletonList(recipe.getInputEntries().get(0)), recipe.getResultingEntries()); - } - - @Override - public int getDisplayHeight() { - return 49; - } - -} +package ru.betterend.compat.rei; + +import java.util.Collections; +import java.util.List; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.Lists; + +import it.unimi.dsi.fastutil.ints.IntList; +import me.shedaniel.math.Point; +import me.shedaniel.math.Rectangle; +import me.shedaniel.rei.api.EntryStack; +import me.shedaniel.rei.api.TransferRecipeCategory; +import me.shedaniel.rei.api.widgets.Widgets; +import me.shedaniel.rei.gui.entries.RecipeEntry; +import me.shedaniel.rei.gui.entries.SimpleRecipeEntry; +import me.shedaniel.rei.gui.widget.Widget; +import net.minecraft.block.Blocks; +import net.minecraft.client.gui.DrawableHelper; +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.TranslatableText; +import net.minecraft.util.Identifier; +import ru.betterend.util.LangUtil; + +public class REIAnvilCategory implements TransferRecipeCategory { + + @Override + public @NotNull Identifier getIdentifier() { + return REIPlugin.SMITHING; + } + + @Override + public @NotNull String getCategoryName() { + return LangUtil.translate(Blocks.ANVIL.getTranslationKey()); + } + + @Override + public @NotNull EntryStack getLogo() { + return REIPlugin.ANVIL; + } + + @Override + public @NotNull List setupDisplay(REIAnvilDisplay display, Rectangle bounds) { + Point startPoint = new Point(bounds.getCenterX() - 41, bounds.y + 10); + List widgets = Lists.newArrayList(); + widgets.add(Widgets.createRecipeBase(bounds)); + int x = startPoint.x + 10; + int y = startPoint.y; + widgets.add(Widgets.createResultSlotBackground(new Point(x + 61, y + 4))); + List> inputEntries = display.getInputEntries(); + widgets.add(Widgets.createArrow(new Point(x + 24, y + 3))); + widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 5, bounds.y + bounds.height - 12), + new TranslatableText("category.rei.damage.amount&dmg", display.getDamage())).noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); + widgets.add(Widgets.createSlot(new Point(x - 20, y + 3)).entries(inputEntries.get(0)).markInput()); + widgets.add(Widgets.createSlot(new Point(x + 1, y + 3)).entries(inputEntries.get(1)).markInput()); + widgets.add(Widgets.createSlot(new Point(x + 61, y + 4)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput()); + return widgets; + } + + @Override + public void renderRedSlots(MatrixStack matrices, List widgets, Rectangle bounds, REIAnvilDisplay display, + IntList redSlots) { + Point startPoint = new Point(bounds.getCenterX() - 41, bounds.getCenterY() - 27); + matrices.push(); + matrices.translate(0, 0, 400); + if (redSlots.contains(0)) { + DrawableHelper.fill(matrices, startPoint.x - 20, startPoint.y + 3, startPoint.x - 20 + 16, startPoint.y + 3 + 16, 1090453504); + DrawableHelper.fill(matrices, startPoint.x + 1, startPoint.y + 3, startPoint.x + 1 + 16, startPoint.y + 3 + 16, 1090453504); + } + matrices.pop(); + } + + @Override + public @NotNull RecipeEntry getSimpleRenderer(REIAnvilDisplay recipe) { + return SimpleRecipeEntry.from(Collections.singletonList(recipe.getInputEntries().get(0)), recipe.getResultingEntries()); + } + + @Override + public int getDisplayHeight() { + return 49; + } + +} diff --git a/src/main/java/ru/betterend/compat/REIAnvilDisplay.java b/src/main/java/ru/betterend/compat/rei/REIAnvilDisplay.java similarity index 94% rename from src/main/java/ru/betterend/compat/REIAnvilDisplay.java rename to src/main/java/ru/betterend/compat/rei/REIAnvilDisplay.java index ddca40b1..2de2d777 100644 --- a/src/main/java/ru/betterend/compat/REIAnvilDisplay.java +++ b/src/main/java/ru/betterend/compat/rei/REIAnvilDisplay.java @@ -1,73 +1,73 @@ -package ru.betterend.compat; - -import java.util.Collections; -import java.util.List; -import java.util.Optional; - -import org.jetbrains.annotations.NotNull; - -import me.shedaniel.rei.api.EntryStack; -import me.shedaniel.rei.api.TransferRecipeDisplay; -import me.shedaniel.rei.server.ContainerInfo; -import net.minecraft.recipe.Recipe; -import net.minecraft.screen.ScreenHandler; -import net.minecraft.util.Identifier; -import ru.betterend.recipe.builders.AnvilSmithingRecipe; - -public class REIAnvilDisplay implements TransferRecipeDisplay { - - private AnvilSmithingRecipe recipe; - private List> input; - private List output; - - public REIAnvilDisplay(AnvilSmithingRecipe recipe) { - this.recipe = recipe; - this.input = EntryStack.ofIngredients(recipe.getPreviewInputs()); - this.output = Collections.singletonList(EntryStack.create(recipe.getOutput())); - } - - public int getDamage() { - return this.recipe.getDamage(); - } - - @Override - public @NotNull Optional getRecipeLocation() { - return Optional.ofNullable(recipe).map(Recipe::getId); - } - - @Override - public @NotNull List> getInputEntries() { - return this.input; - } - - @Override - public @NotNull List> getResultingEntries() { - return Collections.singletonList(output); - } - - @Override - public @NotNull Identifier getRecipeCategory() { - return REIPlugin.SMITHING; - } - - @Override - public @NotNull List> getRequiredEntries() { - return this.input; - } - - @Override - public int getWidth() { - return 2; - } - - @Override - public int getHeight() { - return 1; - } - - @Override - public List> getOrganisedInputEntries(ContainerInfo containerInfo, - ScreenHandler container) { - return this.input; - } -} +package ru.betterend.compat.rei; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import org.jetbrains.annotations.NotNull; + +import me.shedaniel.rei.api.EntryStack; +import me.shedaniel.rei.api.TransferRecipeDisplay; +import me.shedaniel.rei.server.ContainerInfo; +import net.minecraft.recipe.Recipe; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.util.Identifier; +import ru.betterend.recipe.builders.AnvilSmithingRecipe; + +public class REIAnvilDisplay implements TransferRecipeDisplay { + + private AnvilSmithingRecipe recipe; + private List> input; + private List output; + + public REIAnvilDisplay(AnvilSmithingRecipe recipe) { + this.recipe = recipe; + this.input = EntryStack.ofIngredients(recipe.getPreviewInputs()); + this.output = Collections.singletonList(EntryStack.create(recipe.getOutput())); + } + + public int getDamage() { + return this.recipe.getDamage(); + } + + @Override + public @NotNull Optional getRecipeLocation() { + return Optional.ofNullable(recipe).map(Recipe::getId); + } + + @Override + public @NotNull List> getInputEntries() { + return this.input; + } + + @Override + public @NotNull List> getResultingEntries() { + return Collections.singletonList(output); + } + + @Override + public @NotNull Identifier getRecipeCategory() { + return REIPlugin.SMITHING; + } + + @Override + public @NotNull List> getRequiredEntries() { + return this.input; + } + + @Override + public int getWidth() { + return 2; + } + + @Override + public int getHeight() { + return 1; + } + + @Override + public List> getOrganisedInputEntries(ContainerInfo containerInfo, + ScreenHandler container) { + return this.input; + } +} diff --git a/src/main/java/ru/betterend/compat/REIContainer.java b/src/main/java/ru/betterend/compat/rei/REIContainer.java similarity index 91% rename from src/main/java/ru/betterend/compat/REIContainer.java rename to src/main/java/ru/betterend/compat/rei/REIContainer.java index 9c6f242e..dae79d5f 100644 --- a/src/main/java/ru/betterend/compat/REIContainer.java +++ b/src/main/java/ru/betterend/compat/rei/REIContainer.java @@ -1,14 +1,14 @@ -package ru.betterend.compat; - -import me.shedaniel.rei.plugin.containers.CraftingContainerInfoWrapper; -import me.shedaniel.rei.server.ContainerInfoHandler; -import ru.betterend.client.gui.EndStoneSmelterScreenHandler; -import ru.betterend.recipe.builders.AlloyingRecipe; - -public class REIContainer implements Runnable { - - @Override - public void run() { - ContainerInfoHandler.registerContainerInfo(AlloyingRecipe.ID, CraftingContainerInfoWrapper.create(EndStoneSmelterScreenHandler.class)); - } -} +package ru.betterend.compat.rei; + +import me.shedaniel.rei.plugin.containers.CraftingContainerInfoWrapper; +import me.shedaniel.rei.server.ContainerInfoHandler; +import ru.betterend.client.gui.EndStoneSmelterScreenHandler; +import ru.betterend.recipe.builders.AlloyingRecipe; + +public class REIContainer implements Runnable { + + @Override + public void run() { + ContainerInfoHandler.registerContainerInfo(AlloyingRecipe.ID, CraftingContainerInfoWrapper.create(EndStoneSmelterScreenHandler.class)); + } +} diff --git a/src/main/java/ru/betterend/compat/rei/REIInfusionCategory.java b/src/main/java/ru/betterend/compat/rei/REIInfusionCategory.java new file mode 100644 index 00000000..f3ee122a --- /dev/null +++ b/src/main/java/ru/betterend/compat/rei/REIInfusionCategory.java @@ -0,0 +1,82 @@ +package ru.betterend.compat.rei; + +import java.util.List; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.Lists; + +import it.unimi.dsi.fastutil.ints.IntList; + +import me.shedaniel.math.Point; +import me.shedaniel.math.Rectangle; +import me.shedaniel.rei.api.EntryStack; +import me.shedaniel.rei.api.TransferRecipeCategory; +import me.shedaniel.rei.api.widgets.Widgets; +import me.shedaniel.rei.gui.entries.RecipeEntry; +import me.shedaniel.rei.gui.entries.SimpleRecipeEntry; +import me.shedaniel.rei.gui.widget.Widget; + +import net.minecraft.client.util.math.MatrixStack; +import net.minecraft.text.TranslatableText; +import net.minecraft.util.Identifier; + +import ru.betterend.recipe.builders.InfusionRecipe; +import ru.betterend.registry.EndBlocks; +import ru.betterend.util.LangUtil; + +public class REIInfusionCategory implements TransferRecipeCategory { + + @Override + public @NotNull Identifier getIdentifier() { + return InfusionRecipe.ID; + } + + @Override + public @NotNull String getCategoryName() { + return LangUtil.translate(EndBlocks.INFUSION_PEDESTAL.getTranslationKey()); + } + + @Override + public @NotNull EntryStack getLogo() { + return REIPlugin.INFUSION_RITUAL; + } + + @Override + public @NotNull RecipeEntry getSimpleRenderer(REIInfusionDisplay recipe) { + return SimpleRecipeEntry.from(recipe.getInputEntries(), recipe.getResultingEntries()); + } + + @Override + public @NotNull List setupDisplay(REIInfusionDisplay display, Rectangle bounds) { + Point centerPoint = new Point(bounds.getCenterX() - 36, bounds.getCenterY() - 4); + List widgets = Lists.newArrayList(); + widgets.add(Widgets.createRecipeBase(bounds)); + List> inputEntries = display.getInputEntries(); + List> outputEntries = display.getResultingEntries(); + widgets.add(Widgets.createSlot(centerPoint).entries(inputEntries.get(0)).markInput()); + widgets.add(Widgets.createSlot(new Point(centerPoint.x, centerPoint.y - 28)).entries(inputEntries.get(1)).markInput()); + widgets.add(Widgets.createSlot(new Point(centerPoint.x + 28, centerPoint.y)).entries(inputEntries.get(3)).markInput()); + widgets.add(Widgets.createSlot(new Point(centerPoint.x, centerPoint.y + 28)).entries(inputEntries.get(5)).markInput()); + widgets.add(Widgets.createSlot(new Point(centerPoint.x - 28, centerPoint.y)).entries(inputEntries.get(7)).markInput()); + widgets.add(Widgets.createSlot(new Point(centerPoint.x + 24, centerPoint.y - 24)).entries(inputEntries.get(2)).markInput()); + widgets.add(Widgets.createSlot(new Point(centerPoint.x + 24, centerPoint.y + 24)).entries(inputEntries.get(4)).markInput()); + widgets.add(Widgets.createSlot(new Point(centerPoint.x - 24, centerPoint.y + 24)).entries(inputEntries.get(6)).markInput()); + widgets.add(Widgets.createSlot(new Point(centerPoint.x - 24, centerPoint.y - 24)).entries(inputEntries.get(8)).markInput()); + widgets.add(Widgets.createArrow(new Point(centerPoint.x + 48, centerPoint.y))); + widgets.add(Widgets.createResultSlotBackground(new Point(centerPoint.x + 80, centerPoint.y))); + widgets.add(Widgets.createSlot(new Point(centerPoint.x + 80, centerPoint.y)).entries(outputEntries.get(0)).disableBackground().markOutput()); + widgets.add(Widgets.createLabel(new Point(bounds.getMaxX() - 5, bounds.y + 6), new TranslatableText("category.rei.infusion.time&val", display.getInfusionTime())) + .noShadow().rightAligned().color(0xFF404040, 0xFFBBBBBB)); + return widgets; + } + + @Override + public void renderRedSlots(MatrixStack matrices, List widgets, Rectangle bounds, + REIInfusionDisplay display, IntList redSlots) {} + + @Override + public int getDisplayHeight() { + return 104; + } +} diff --git a/src/main/java/ru/betterend/compat/rei/REIInfusionDisplay.java b/src/main/java/ru/betterend/compat/rei/REIInfusionDisplay.java new file mode 100644 index 00000000..644b0d3c --- /dev/null +++ b/src/main/java/ru/betterend/compat/rei/REIInfusionDisplay.java @@ -0,0 +1,81 @@ +package ru.betterend.compat.rei; + +import java.util.Collections; +import java.util.List; +import java.util.Optional; + +import org.jetbrains.annotations.NotNull; + +import com.google.common.collect.Lists; + +import me.shedaniel.rei.api.EntryStack; +import me.shedaniel.rei.api.TransferRecipeDisplay; +import me.shedaniel.rei.server.ContainerInfo; +import net.minecraft.recipe.Recipe; +import net.minecraft.screen.ScreenHandler; +import net.minecraft.util.Identifier; +import ru.betterend.recipe.builders.AlloyingRecipe; +import ru.betterend.recipe.builders.InfusionRecipe; + +public class REIInfusionDisplay implements TransferRecipeDisplay { + + private final InfusionRecipe recipe; + private final List> input; + private final List output; + private final int time; + + public REIInfusionDisplay(InfusionRecipe recipe) { + this.recipe = recipe; + this.input = Lists.newArrayList(); + this.output = Collections.singletonList(EntryStack.create(recipe.getOutput())); + this.time = recipe.getInfusionTime(); + + recipe.getPreviewInputs().forEach(ingredient -> { + input.add(EntryStack.ofIngredient(ingredient)); + }); + } + + public int getInfusionTime() { + return this.time; + } + + @Override + public @NotNull Optional getRecipeLocation() { + return Optional.ofNullable(recipe).map(Recipe::getId); + } + + @Override + public @NotNull List> getInputEntries() { + return this.input; + } + + @Override + public @NotNull List> getResultingEntries() { + return Collections.singletonList(output); + } + + @Override + public @NotNull Identifier getRecipeCategory() { + return AlloyingRecipe.ID; + } + + @Override + public @NotNull List> getRequiredEntries() { + return this.input; + } + + @Override + public int getWidth() { + return 0; + } + + @Override + public int getHeight() { + return 0; + } + + @Override + public List> getOrganisedInputEntries(ContainerInfo containerInfo, ScreenHandler container) { + return this.input; + } +} diff --git a/src/main/java/ru/betterend/compat/REIPlugin.java b/src/main/java/ru/betterend/compat/rei/REIPlugin.java similarity index 80% rename from src/main/java/ru/betterend/compat/REIPlugin.java rename to src/main/java/ru/betterend/compat/rei/REIPlugin.java index 84c755ad..d4b2365d 100644 --- a/src/main/java/ru/betterend/compat/REIPlugin.java +++ b/src/main/java/ru/betterend/compat/rei/REIPlugin.java @@ -1,50 +1,56 @@ -package ru.betterend.compat; - -import me.shedaniel.rei.api.EntryStack; -import me.shedaniel.rei.api.RecipeHelper; -import me.shedaniel.rei.api.plugins.REIPluginV0; -import net.fabricmc.api.EnvType; -import net.fabricmc.api.Environment; -import net.minecraft.block.Blocks; -import net.minecraft.recipe.BlastingRecipe; -import net.minecraft.util.Identifier; -import ru.betterend.BetterEnd; -import ru.betterend.recipe.builders.AlloyingRecipe; -import ru.betterend.recipe.builders.AnvilSmithingRecipe; -import ru.betterend.registry.EndBlocks; - -@Environment(EnvType.CLIENT) -public class REIPlugin implements REIPluginV0 { - - public final static Identifier PLUGIN_ID = BetterEnd.makeID("rei_plugin"); - public final static Identifier ALLOYING = AlloyingRecipe.ID; - public final static Identifier SMITHING = AnvilSmithingRecipe.ID; - - public final static EntryStack END_STONE_SMELTER = EntryStack.create(EndBlocks.END_STONE_SMELTER); - public final static EntryStack ANVIL = EntryStack.create(Blocks.ANVIL); - - @Override - public Identifier getPluginIdentifier() { - return PLUGIN_ID; - } - - @Override - public void registerRecipeDisplays(RecipeHelper recipeHelper) { - recipeHelper.registerRecipes(ALLOYING, AlloyingRecipe.class, REIAlloyingDisplay::new); - recipeHelper.registerRecipes(ALLOYING, BlastingRecipe.class, REIAlloyingDisplay::new); - recipeHelper.registerRecipes(SMITHING, AnvilSmithingRecipe.class, REIAnvilDisplay::new); - } - - @Override - public void registerOthers(RecipeHelper recipeHelper) { - recipeHelper.registerWorkingStations(ALLOYING, END_STONE_SMELTER); - recipeHelper.registerWorkingStations(SMITHING, ANVIL); - recipeHelper.removeAutoCraftButton(SMITHING); - } - - @Override - public void registerPluginCategories(RecipeHelper recipeHelper) { - recipeHelper.registerCategories(new REIAlloyingCategory(), - new REIAnvilCategory()); - } -} +package ru.betterend.compat.rei; + +import me.shedaniel.rei.api.EntryStack; +import me.shedaniel.rei.api.RecipeHelper; +import me.shedaniel.rei.api.plugins.REIPluginV0; +import net.fabricmc.api.EnvType; +import net.fabricmc.api.Environment; +import net.minecraft.block.Blocks; +import net.minecraft.recipe.BlastingRecipe; +import net.minecraft.util.Identifier; +import ru.betterend.BetterEnd; +import ru.betterend.recipe.builders.AlloyingRecipe; +import ru.betterend.recipe.builders.AnvilSmithingRecipe; +import ru.betterend.recipe.builders.InfusionRecipe; +import ru.betterend.registry.EndBlocks; + +@Environment(EnvType.CLIENT) +public class REIPlugin implements REIPluginV0 { + + public final static Identifier PLUGIN_ID = BetterEnd.makeID("rei_plugin"); + public final static Identifier ALLOYING = AlloyingRecipe.ID; + public final static Identifier SMITHING = AnvilSmithingRecipe.ID; + public final static Identifier INFUSION = InfusionRecipe.ID; + + public final static EntryStack END_STONE_SMELTER = EntryStack.create(EndBlocks.END_STONE_SMELTER); + public final static EntryStack INFUSION_RITUAL = EntryStack.create(EndBlocks.INFUSION_PEDESTAL); + public final static EntryStack ANVIL = EntryStack.create(Blocks.ANVIL); + + @Override + public Identifier getPluginIdentifier() { + return PLUGIN_ID; + } + + @Override + public void registerRecipeDisplays(RecipeHelper recipeHelper) { + recipeHelper.registerRecipes(ALLOYING, AlloyingRecipe.class, REIAlloyingDisplay::new); + recipeHelper.registerRecipes(ALLOYING, BlastingRecipe.class, REIAlloyingDisplay::new); + recipeHelper.registerRecipes(SMITHING, AnvilSmithingRecipe.class, REIAnvilDisplay::new); + recipeHelper.registerRecipes(INFUSION, InfusionRecipe.class, REIInfusionDisplay::new); + } + + @Override + public void registerOthers(RecipeHelper recipeHelper) { + recipeHelper.registerWorkingStations(ALLOYING, END_STONE_SMELTER); + recipeHelper.registerWorkingStations(INFUSION, INFUSION_RITUAL); + recipeHelper.registerWorkingStations(SMITHING, ANVIL); + recipeHelper.removeAutoCraftButton(SMITHING); + } + + @Override + public void registerPluginCategories(RecipeHelper recipeHelper) { + recipeHelper.registerCategories(new REIAlloyingCategory(), + new REIInfusionCategory(), + new REIAnvilCategory()); + } +} diff --git a/src/main/java/ru/betterend/recipe/InfusionRecipes.java b/src/main/java/ru/betterend/recipe/InfusionRecipes.java index 8d96f579..7f49b41e 100644 --- a/src/main/java/ru/betterend/recipe/InfusionRecipes.java +++ b/src/main/java/ru/betterend/recipe/InfusionRecipes.java @@ -18,12 +18,12 @@ public class InfusionRecipes { .build(); InfusionRecipe.Builder.create("eternal_crystal") - .setInput(EndItems.CRYSTAL_SHARDS) + .setInput(Items.END_CRYSTAL) .setOutput(EndItems.ETERNAL_CRYSTAL) - .addCatalyst(0, Items.END_CRYSTAL) - .addCatalyst(2, Items.END_CRYSTAL) - .addCatalyst(4, Items.END_CRYSTAL) - .addCatalyst(6, Items.END_CRYSTAL) + .addCatalyst(0, EndItems.CRYSTAL_SHARDS) + .addCatalyst(2, EndItems.CRYSTAL_SHARDS) + .addCatalyst(4, EndItems.CRYSTAL_SHARDS) + .addCatalyst(6, EndItems.CRYSTAL_SHARDS) .addCatalyst(1, EndItems.ENDER_DUST) .addCatalyst(3, EndItems.ENDER_DUST) .addCatalyst(5, EndItems.ENDER_DUST) diff --git a/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java b/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java index 4b65056a..763800a6 100644 --- a/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java +++ b/src/main/java/ru/betterend/recipe/builders/InfusionRecipe.java @@ -14,6 +14,7 @@ import net.minecraft.recipe.RecipeSerializer; import net.minecraft.recipe.RecipeType; import net.minecraft.util.Identifier; import net.minecraft.util.JsonHelper; +import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.registry.Registry; import net.minecraft.world.World; @@ -68,6 +69,16 @@ public class InfusionRecipe implements Recipe { public boolean fits(int width, int height) { return true; } + + @Override + public DefaultedList getPreviewInputs() { + DefaultedList defaultedList = DefaultedList.of(); + defaultedList.add(input); + for (Ingredient catalyst : catalysts) { + defaultedList.add(catalyst); + } + return defaultedList; + } @Override public ItemStack getOutput() { diff --git a/src/main/java/ru/betterend/rituals/InfusionRitual.java b/src/main/java/ru/betterend/rituals/InfusionRitual.java index 50cf0b54..938754c5 100644 --- a/src/main/java/ru/betterend/rituals/InfusionRitual.java +++ b/src/main/java/ru/betterend/rituals/InfusionRitual.java @@ -120,12 +120,15 @@ public class InfusionRitual implements Inventory { double ty = target.getY() + 1.75; double tz = target.getZ() + 0.5; for (PedestalBlockEntity catalyst : catalysts) { - BlockPos start = catalyst.getPos().up(); - double sx = start.getX() + 0.5; - double sy = start.getY() + 0.25; - double sz = start.getZ() + 0.5; - ItemStackParticleEffect catalystParticle = new ItemStackParticleEffect(ParticleTypes.ITEM, catalyst.getStack(0)); - world.spawnParticles(catalystParticle, sx, sy, sz, 0, tx - sx, ty - sy, tz - sz, 0.125); + ItemStack stack = catalyst.getStack(0); + if (!stack.isEmpty()) { + BlockPos start = catalyst.getPos(); + double sx = start.getX() + 0.5; + double sy = start.getY() + 1.25; + double sz = start.getZ() + 0.5; + ItemStackParticleEffect catalystParticle = new ItemStackParticleEffect(ParticleTypes.ITEM, stack); + world.spawnParticles(catalystParticle, sx, sy, sz, 0, tx - sx, ty - sy, tz - sz, 0.125); + } } } diff --git a/src/main/resources/assets/betterend/lang/en_us.json b/src/main/resources/assets/betterend/lang/en_us.json index 8d2109ae..e627479a 100644 --- a/src/main/resources/assets/betterend/lang/en_us.json +++ b/src/main/resources/assets/betterend/lang/en_us.json @@ -1,6 +1,9 @@ { "itemGroup.betterend.items": "Better End", + "category.rei.damage.amount&dmg": "Tool damage: %s", + "category.rei.infusion.time&val": "Infusion Time: %s", + "biome.betterend.foggy_mushroomland": "Foggy Mushroomland", "biome.betterend.dust_wastelands": "Dust Wastelands", "biome.betterend.chorus_forest": "Chorus Forest", @@ -102,8 +105,6 @@ "block.betterend.aurora_crystal": "Aurora Crystal", "item.betterend.crystal_shards": "Crystal Shards", - "category.rei.damage.amount&dmg": "Tool damage: %s", - "block.betterend.pythadendron_sapling": "Pythadendron Sapling", "block.betterend.pythadendron_bark": "Pythadendron Bark", "block.betterend.pythadendron_barrel": "Pythadendron Barrel", diff --git a/src/main/resources/assets/betterend/lang/ru_ru.json b/src/main/resources/assets/betterend/lang/ru_ru.json index 2642ac97..61210aad 100644 --- a/src/main/resources/assets/betterend/lang/ru_ru.json +++ b/src/main/resources/assets/betterend/lang/ru_ru.json @@ -1,6 +1,9 @@ { "itemGroup.betterend.items": "Улучшенный Край", + "category.rei.damage.amount&dmg": "Износ инструмента: %s", + "category.rei.infusion.time&val": "Время наполнения: %s", + "biome.betterend.foggy_mushroomland": "Туманное гриболесье", "biome.betterend.dust_wastelands": "Пыльные пустоши", "biome.betterend.chorus_forest": "Хорусовый лес", @@ -102,8 +105,6 @@ "block.betterend.aurora_crystal": "Кристалл авроры", "item.betterend.crystal_shards": "Осколки кристаллов", - "category.rei.damage.amount&dmg": "Износ инструмента: %s", - "block.betterend.pythadendron_sapling": "Саженец пифадендрона", "block.betterend.pythadendron_bark": "Кора пифадендрона", "block.betterend.pythadendron_barrel": "Бочка из пифадендрона", diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 245f81c0..388a7e9c 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -26,10 +26,10 @@ "ru.betterend.client.BetterEndClient" ], "rei_plugins": [ - "ru.betterend.compat.REIPlugin" + "ru.betterend.compat.rei.REIPlugin" ], "rei_containers": [ - "ru.betterend.compat.REIContainer" + "ru.betterend.compat.rei.REIContainer" ] }, "mixins": [