REI anvil recipes display improvement

This commit is contained in:
Aleksey 2021-02-13 13:52:49 +03:00
parent 4480d72344
commit 775e2f6a8e
4 changed files with 51 additions and 16 deletions

View file

@ -2,7 +2,10 @@ package ru.betterend.integration.rei;
import java.util.Collections; import java.util.Collections;
import java.util.List; 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 org.jetbrains.annotations.NotNull;
import com.google.common.collect.Lists; 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.client.util.math.MatrixStack;
import net.minecraft.text.TranslatableText; import net.minecraft.text.TranslatableText;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import ru.betterend.blocks.basis.EndAnvilBlock;
import ru.betterend.util.LangUtil; import ru.betterend.util.LangUtil;
public class REIAnvilCategory implements TransferRecipeCategory<REIAnvilDisplay> { public class REIAnvilCategory implements TransferRecipeCategory<REIAnvilDisplay> {
@ -37,7 +41,7 @@ public class REIAnvilCategory implements TransferRecipeCategory<REIAnvilDisplay>
@Override @Override
public @NotNull EntryStack getLogo() { public @NotNull EntryStack getLogo() {
return REIPlugin.ANVIL; return REIPlugin.ANVILS.get(0);
} }
@Override @Override
@ -47,16 +51,26 @@ public class REIAnvilCategory implements TransferRecipeCategory<REIAnvilDisplay>
widgets.add(Widgets.createRecipeBase(bounds)); widgets.add(Widgets.createRecipeBase(bounds));
int x = startPoint.x + 10; int x = startPoint.x + 10;
int y = startPoint.y; 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<List<EntryStack>> inputEntries = display.getInputEntries(); List<List<EntryStack>> inputEntries = display.getInputEntries();
List<EntryStack> materials = inputEntries.get(1); List<EntryStack> materials = inputEntries.get(1);
int anvilLevel = display.getAnvilLevel();
List<EntryStack> 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())); materials.forEach(entryStack -> entryStack.setAmount(display.getInputCount()));
widgets.add(Widgets.createArrow(new Point(x + 24, y + 3))); widgets.add(Widgets.createArrow(new Point(x + 24, y + 4)));
widgets.add(Widgets.createLabel(new Point(bounds.x + bounds.width - 5, bounds.y + bounds.height - 12), 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)); 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 - 20, y + 4)).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 + 1, y + 4)).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 + 61, y + 5)).entries(display.getResultingEntries().get(0)).disableBackground().markOutput());
widgets.add(Widgets.createSlot(new Point(x - 9, y + 25)).entries(anvils));
return widgets; return widgets;
} }
@ -80,7 +94,7 @@ public class REIAnvilCategory implements TransferRecipeCategory<REIAnvilDisplay>
@Override @Override
public int getDisplayHeight() { public int getDisplayHeight() {
return 49; return 60;
} }
} }

View file

@ -27,11 +27,15 @@ public class REIAnvilDisplay implements TransferRecipeDisplay {
} }
public int getDamage() { public int getDamage() {
return this.recipe.getDamage(); return recipe.getDamage();
} }
public int getInputCount() { public int getInputCount() {
return this.recipe.getInputCount(); return recipe.getInputCount();
}
public int getAnvilLevel() {
return recipe.getAnvilLevel();
} }
@Override @Override
@ -56,7 +60,7 @@ public class REIAnvilDisplay implements TransferRecipeDisplay {
@Override @Override
public @NotNull List<List<EntryStack>> getRequiredEntries() { public @NotNull List<List<EntryStack>> getRequiredEntries() {
return this.input; return input;
} }
@Override @Override
@ -72,6 +76,6 @@ public class REIAnvilDisplay implements TransferRecipeDisplay {
@Override @Override
public List<List<EntryStack>> getOrganisedInputEntries(ContainerInfo<ScreenHandler> containerInfo, public List<List<EntryStack>> getOrganisedInputEntries(ContainerInfo<ScreenHandler> containerInfo,
ScreenHandler container) { ScreenHandler container) {
return this.input; return input;
} }
} }

View file

@ -1,18 +1,29 @@
package ru.betterend.integration.rei; package ru.betterend.integration.rei;
import com.google.common.collect.Lists;
import me.shedaniel.rei.api.EntryStack; import me.shedaniel.rei.api.EntryStack;
import me.shedaniel.rei.api.RecipeHelper; import me.shedaniel.rei.api.RecipeHelper;
import me.shedaniel.rei.api.plugins.REIPluginV0; import me.shedaniel.rei.api.plugins.REIPluginV0;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.item.BlockItem;
import net.minecraft.item.ItemConvertible;
import net.minecraft.recipe.BlastingRecipe; import net.minecraft.recipe.BlastingRecipe;
import net.minecraft.recipe.Ingredient;
import net.minecraft.tag.BlockTags;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import ru.betterend.BetterEnd; import ru.betterend.BetterEnd;
import ru.betterend.blocks.basis.EndAnvilBlock;
import ru.betterend.recipe.builders.AlloyingRecipe; import ru.betterend.recipe.builders.AlloyingRecipe;
import ru.betterend.recipe.builders.AnvilRecipe; import ru.betterend.recipe.builders.AnvilRecipe;
import ru.betterend.recipe.builders.InfusionRecipe; import ru.betterend.recipe.builders.InfusionRecipe;
import ru.betterend.registry.EndBlocks; import ru.betterend.registry.EndBlocks;
import ru.betterend.registry.EndItems;
import java.util.List;
import java.util.stream.Collectors;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class REIPlugin implements REIPluginV0 { 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 END_STONE_SMELTER = EntryStack.create(EndBlocks.END_STONE_SMELTER);
public final static EntryStack INFUSION_RITUAL = EntryStack.create(EndBlocks.INFUSION_PEDESTAL); public final static EntryStack INFUSION_RITUAL = EntryStack.create(EndBlocks.INFUSION_PEDESTAL);
public final static EntryStack ANVIL = EntryStack.create(Blocks.ANVIL); public final static List<EntryStack> ANVILS;
@Override @Override
public Identifier getPluginIdentifier() { public Identifier getPluginIdentifier() {
@ -43,7 +54,7 @@ public class REIPlugin implements REIPluginV0 {
public void registerOthers(RecipeHelper recipeHelper) { public void registerOthers(RecipeHelper recipeHelper) {
recipeHelper.registerWorkingStations(ALLOYING, END_STONE_SMELTER); recipeHelper.registerWorkingStations(ALLOYING, END_STONE_SMELTER);
recipeHelper.registerWorkingStations(INFUSION, INFUSION_RITUAL); recipeHelper.registerWorkingStations(INFUSION, INFUSION_RITUAL);
recipeHelper.registerWorkingStations(SMITHING, ANVIL); recipeHelper.registerWorkingStations(SMITHING, ANVILS.toArray(new EntryStack[]{}));
recipeHelper.removeAutoCraftButton(SMITHING); recipeHelper.removeAutoCraftButton(SMITHING);
} }
@ -53,4 +64,10 @@ public class REIPlugin implements REIPluginV0 {
new REIInfusionCategory(), new REIInfusionCategory(),
new REIAnvilCategory()); 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));
}
} }

View file

@ -22,7 +22,7 @@ public class AlloyingRecipes {
.setInput(Blocks.ANCIENT_DEBRIS, Blocks.ANCIENT_DEBRIS) .setInput(Blocks.ANCIENT_DEBRIS, Blocks.ANCIENT_DEBRIS)
.setOutput(Items.NETHERITE_SCRAP, 3) .setOutput(Items.NETHERITE_SCRAP, 3)
.setExpiriense(6F) .setExpiriense(6F)
.setSmeltTime(500) .setSmeltTime(1000)
.build(); .build();
AlloyingRecipe.Builder.create("terminite_ingot") AlloyingRecipe.Builder.create("terminite_ingot")
.setInput(Items.IRON_INGOT, EndItems.ENDER_DUST) .setInput(Items.IRON_INGOT, EndItems.ENDER_DUST)
@ -34,7 +34,7 @@ public class AlloyingRecipes {
.setInput(EndBlocks.TERMINITE.ingot, Items.NETHERITE_INGOT) .setInput(EndBlocks.TERMINITE.ingot, Items.NETHERITE_INGOT)
.setOutput(EndItems.AETERNIUM_INGOT, 1) .setOutput(EndItems.AETERNIUM_INGOT, 1)
.setExpiriense(4.5F) .setExpiriense(4.5F)
.setSmeltTime(600) .setSmeltTime(850)
.build(); .build();
AlloyingRecipe.Builder.create("terminite_ingot_thallasium") AlloyingRecipe.Builder.create("terminite_ingot_thallasium")
.setInput(EndBlocks.THALLASIUM.ingot, EndItems.ENDER_DUST) .setInput(EndBlocks.THALLASIUM.ingot, EndItems.ENDER_DUST)