diff --git a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java index 5c58bcd5..d502e812 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilCategory.java @@ -2,7 +2,10 @@ package ru.betterend.integration.rei; import java.util.Collections; import java.util.List; +import java.util.stream.Collectors; +import net.minecraft.block.Block; +import net.minecraft.item.BlockItem; import org.jetbrains.annotations.NotNull; import com.google.common.collect.Lists; @@ -21,6 +24,7 @@ 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.blocks.basis.EndAnvilBlock; import ru.betterend.util.LangUtil; public class REIAnvilCategory implements TransferRecipeCategory { @@ -37,7 +41,7 @@ public class REIAnvilCategory implements TransferRecipeCategory @Override public @NotNull EntryStack getLogo() { - return REIPlugin.ANVIL; + return REIPlugin.ANVILS.get(0); } @Override @@ -47,16 +51,26 @@ public class REIAnvilCategory implements TransferRecipeCategory widgets.add(Widgets.createRecipeBase(bounds)); int x = startPoint.x + 10; int y = startPoint.y; - widgets.add(Widgets.createResultSlotBackground(new Point(x + 61, y + 4))); + widgets.add(Widgets.createResultSlotBackground(new Point(x + 61, y + 5))); List> inputEntries = display.getInputEntries(); List materials = inputEntries.get(1); + int anvilLevel = display.getAnvilLevel(); + List anvils = REIPlugin.ANVILS.stream().filter(anvil -> { + Block block = ((BlockItem) anvil.getItem()).getBlock(); + if (block instanceof EndAnvilBlock) { + return ((EndAnvilBlock) block).getCraftingLevel() >= anvilLevel; + } + return anvilLevel == 1; + }).collect(Collectors.toList()); materials.forEach(entryStack -> entryStack.setAmount(display.getInputCount())); - 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), + widgets.add(Widgets.createArrow(new Point(x + 24, y + 4))); + widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 7, bounds.y + bounds.height - 15), 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(materials).markInput()); - widgets.add(Widgets.createSlot(new Point(x + 1, y + 3)).entries(inputEntries.get(0)).markInput()); - widgets.add(Widgets.createSlot(new Point(x + 61, y + 4)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput()); + widgets.add(Widgets.createSlot(new Point(x - 20, y + 4)).entries(materials).markInput()); + widgets.add(Widgets.createSlot(new Point(x + 1, y + 4)).entries(inputEntries.get(0)).markInput()); + widgets.add(Widgets.createSlot(new Point(x + 61, y + 5)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput()); + widgets.add(Widgets.createSlot(new Point(x - 9, y + 25)).entries(anvils)); + return widgets; } @@ -80,7 +94,7 @@ public class REIAnvilCategory implements TransferRecipeCategory @Override public int getDisplayHeight() { - return 49; + return 60; } } diff --git a/src/main/java/ru/betterend/integration/rei/REIAnvilDisplay.java b/src/main/java/ru/betterend/integration/rei/REIAnvilDisplay.java index 518bfcfe..3381f2fb 100644 --- a/src/main/java/ru/betterend/integration/rei/REIAnvilDisplay.java +++ b/src/main/java/ru/betterend/integration/rei/REIAnvilDisplay.java @@ -27,11 +27,15 @@ public class REIAnvilDisplay implements TransferRecipeDisplay { } public int getDamage() { - return this.recipe.getDamage(); + return recipe.getDamage(); } public int getInputCount() { - return this.recipe.getInputCount(); + return recipe.getInputCount(); + } + + public int getAnvilLevel() { + return recipe.getAnvilLevel(); } @Override @@ -56,7 +60,7 @@ public class REIAnvilDisplay implements TransferRecipeDisplay { @Override public @NotNull List> getRequiredEntries() { - return this.input; + return input; } @Override @@ -72,6 +76,6 @@ public class REIAnvilDisplay implements TransferRecipeDisplay { @Override public List> getOrganisedInputEntries(ContainerInfo containerInfo, ScreenHandler container) { - return this.input; + return input; } } diff --git a/src/main/java/ru/betterend/integration/rei/REIPlugin.java b/src/main/java/ru/betterend/integration/rei/REIPlugin.java index ad41e411..2c6f12f1 100644 --- a/src/main/java/ru/betterend/integration/rei/REIPlugin.java +++ b/src/main/java/ru/betterend/integration/rei/REIPlugin.java @@ -1,18 +1,29 @@ package ru.betterend.integration.rei; +import com.google.common.collect.Lists; 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.Block; import net.minecraft.block.Blocks; +import net.minecraft.item.BlockItem; +import net.minecraft.item.ItemConvertible; import net.minecraft.recipe.BlastingRecipe; +import net.minecraft.recipe.Ingredient; +import net.minecraft.tag.BlockTags; import net.minecraft.util.Identifier; import ru.betterend.BetterEnd; +import ru.betterend.blocks.basis.EndAnvilBlock; import ru.betterend.recipe.builders.AlloyingRecipe; import ru.betterend.recipe.builders.AnvilRecipe; import ru.betterend.recipe.builders.InfusionRecipe; import ru.betterend.registry.EndBlocks; +import ru.betterend.registry.EndItems; + +import java.util.List; +import java.util.stream.Collectors; @Environment(EnvType.CLIENT) public class REIPlugin implements REIPluginV0 { @@ -24,7 +35,7 @@ public class REIPlugin implements REIPluginV0 { 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); + public final static List ANVILS; @Override public Identifier getPluginIdentifier() { @@ -43,7 +54,7 @@ public class REIPlugin implements REIPluginV0 { public void registerOthers(RecipeHelper recipeHelper) { recipeHelper.registerWorkingStations(ALLOYING, END_STONE_SMELTER); recipeHelper.registerWorkingStations(INFUSION, INFUSION_RITUAL); - recipeHelper.registerWorkingStations(SMITHING, ANVIL); + recipeHelper.registerWorkingStations(SMITHING, ANVILS.toArray(new EntryStack[]{})); recipeHelper.removeAutoCraftButton(SMITHING); } @@ -53,4 +64,10 @@ public class REIPlugin implements REIPluginV0 { new REIInfusionCategory(), new REIAnvilCategory()); } + + static { + ANVILS = Lists.newArrayList(EntryStack.ofItems(EndItems.getModBlocks().stream() + .filter(item -> ((BlockItem) item).getBlock() instanceof EndAnvilBlock).collect(Collectors.toList()))); + ANVILS.add(0, EntryStack.create(Blocks.ANVIL)); + } } diff --git a/src/main/java/ru/betterend/recipe/AlloyingRecipes.java b/src/main/java/ru/betterend/recipe/AlloyingRecipes.java index 10d63003..aade6259 100644 --- a/src/main/java/ru/betterend/recipe/AlloyingRecipes.java +++ b/src/main/java/ru/betterend/recipe/AlloyingRecipes.java @@ -22,7 +22,7 @@ public class AlloyingRecipes { .setInput(Blocks.ANCIENT_DEBRIS, Blocks.ANCIENT_DEBRIS) .setOutput(Items.NETHERITE_SCRAP, 3) .setExpiriense(6F) - .setSmeltTime(500) + .setSmeltTime(1000) .build(); AlloyingRecipe.Builder.create("terminite_ingot") .setInput(Items.IRON_INGOT, EndItems.ENDER_DUST) @@ -34,7 +34,7 @@ public class AlloyingRecipes { .setInput(EndBlocks.TERMINITE.ingot, Items.NETHERITE_INGOT) .setOutput(EndItems.AETERNIUM_INGOT, 1) .setExpiriense(4.5F) - .setSmeltTime(600) + .setSmeltTime(850) .build(); AlloyingRecipe.Builder.create("terminite_ingot_thallasium") .setInput(EndBlocks.THALLASIUM.ingot, EndItems.ENDER_DUST)