From 52da17dfd5fd627fd97d1e1ac5163a82025c8d1d Mon Sep 17 00:00:00 2001 From: modmuss50 Date: Thu, 25 Jul 2019 13:14:46 +0100 Subject: [PATCH] Start on REI support, very basic right now, but it will help a lot when adding recipes. --- build.gradle | 5 ++ .../techreborn/blocks/cable/BlockCable.java | 2 +- .../techreborn/rei/MachineRecipeCategory.java | 71 +++++++++++++++++++ .../techreborn/rei/MachineRecipeDisplay.java | 49 +++++++++++++ src/main/java/techreborn/rei/ReiPlugin.java | 53 ++++++++++++++ src/main/resources/fabric.mod.json | 3 + 6 files changed, 182 insertions(+), 1 deletion(-) create mode 100644 src/main/java/techreborn/rei/MachineRecipeCategory.java create mode 100644 src/main/java/techreborn/rei/MachineRecipeDisplay.java create mode 100644 src/main/java/techreborn/rei/ReiPlugin.java diff --git a/build.gradle b/build.gradle index ee18a8dbf..5a7cbb023 100644 --- a/build.gradle +++ b/build.gradle @@ -53,6 +53,10 @@ repositories { name = 'sponge' url = 'https://repo.spongepowered.org/maven' } + maven { + name = 'curseforge' + url = 'https://minecraft.curseforge.com/api/maven' + } } version = "3.0.0" @@ -86,6 +90,7 @@ dependencies { modCompile "io.github.prospector.modmenu:ModMenu:1.5.4-85" modCompile "io.github.prospector.silk:SilkAPI:1.2.4-43" + modCompile "me.shedaniel:RoughlyEnoughItems:2.9.7+build.143" // modCompile ('RebornCore:RebornCore-1.14:4.0.0.14') { // transitive = false diff --git a/src/main/java/techreborn/blocks/cable/BlockCable.java b/src/main/java/techreborn/blocks/cable/BlockCable.java index 090b14e6f..b0d82a2d4 100644 --- a/src/main/java/techreborn/blocks/cable/BlockCable.java +++ b/src/main/java/techreborn/blocks/cable/BlockCable.java @@ -124,7 +124,7 @@ public class BlockCable extends BlockWithEntity { private Boolean canConnectTo(IWorld world, BlockPos pos, Direction facing) { BlockEntity blockEntity = world.getBlockEntity(pos); - if (blockEntity != null && (blockEntity instanceof EnergyBlockEntity)) { + if (blockEntity != null && (blockEntity instanceof EnergyBlockEntity || blockEntity instanceof CableBlockEntity)) { return Boolean.TRUE; } return Boolean.FALSE; diff --git a/src/main/java/techreborn/rei/MachineRecipeCategory.java b/src/main/java/techreborn/rei/MachineRecipeCategory.java new file mode 100644 index 000000000..a47404c0f --- /dev/null +++ b/src/main/java/techreborn/rei/MachineRecipeCategory.java @@ -0,0 +1,71 @@ +package techreborn.rei; + +import me.shedaniel.rei.api.RecipeCategory; +import me.shedaniel.rei.api.Renderable; +import me.shedaniel.rei.api.Renderer; +import me.shedaniel.rei.gui.renderables.RecipeRenderer; +import me.shedaniel.rei.gui.widget.RecipeBaseWidget; +import me.shedaniel.rei.gui.widget.SlotWidget; +import me.shedaniel.rei.gui.widget.Widget; +import net.minecraft.item.ItemStack; +import net.minecraft.item.Items; +import net.minecraft.util.Identifier; +import reborncore.common.crafting.RebornRecipe; +import reborncore.common.crafting.RebornRecipeType; + +import java.awt.*; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; +import java.util.function.Supplier; + +public class MachineRecipeCategory implements RecipeCategory> { + + private final RebornRecipeType rebornRecipeType; + + public MachineRecipeCategory(RebornRecipeType rebornRecipeType) { + this.rebornRecipeType = rebornRecipeType; + } + + @Override + public Identifier getIdentifier() { + return rebornRecipeType.getName(); + } + + @Override + public String getCategoryName() { + return rebornRecipeType.getName().toString(); + } + + @Override + public Renderer getIcon() { + return Renderable.fromItemStack(new ItemStack(ReiPlugin.iconMap.getOrDefault(rebornRecipeType, () -> Items.DIAMOND_SHOVEL).asItem())); + } + + @Override + public RecipeRenderer getSimpleRenderer(MachineRecipeDisplay recipe) { + return Renderable.fromRecipe(() -> Collections.singletonList(recipe.getInput().get(0)), recipe::getOutput); + } + + @Override + public List setupDisplay(Supplier> recipeDisplaySupplier, Rectangle bounds) { + + MachineRecipeDisplay machineRecipe = recipeDisplaySupplier.get(); + + Point startPoint = new Point((int) bounds.getCenterX() - 41, (int) bounds.getCenterY() - 27); + List widgets = new LinkedList<>(); + widgets.add(new RecipeBaseWidget(bounds)); + + int i = 0; + for (List inputs : machineRecipe.getInput()){ + widgets.add(new SlotWidget(startPoint.x + 1, startPoint.y + 1 + (i++ * 20), inputs, true, true, true)); + } + + i = 0; + for (ItemStack outputs : machineRecipe.getOutput()){ + widgets.add(new SlotWidget(startPoint.x + 61, startPoint.y + 1 + (i++ * 20), Collections.singletonList(outputs), true, true, true)); + } + + return widgets; + } +} diff --git a/src/main/java/techreborn/rei/MachineRecipeDisplay.java b/src/main/java/techreborn/rei/MachineRecipeDisplay.java new file mode 100644 index 000000000..4d34884bb --- /dev/null +++ b/src/main/java/techreborn/rei/MachineRecipeDisplay.java @@ -0,0 +1,49 @@ +package techreborn.rei; + +import me.shedaniel.rei.api.RecipeDisplay; +import net.minecraft.item.ItemStack; +import net.minecraft.util.Identifier; +import reborncore.common.crafting.RebornIngredient; +import reborncore.common.crafting.RebornRecipe; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +public class MachineRecipeDisplay implements RecipeDisplay { + + private final R recipe; + private List> inputs; + private List outputs; + + public MachineRecipeDisplay(R recipe) { + this.recipe = recipe; + this.inputs = recipe.getRebornIngredients().stream().map(RebornIngredient::getStacks).collect(Collectors.toList()); + this.outputs = recipe.getOutputs(); + } + + @Override + public Optional getRecipe() { + return Optional.ofNullable(recipe); + } + + @Override + public List> getInput() { + return inputs; + } + + @Override + public List> getRequiredItems() { + return inputs; + } + + @Override + public List getOutput() { + return outputs; + } + + @Override + public Identifier getRecipeCategory() { + return recipe.getRebornRecipeType().getName(); + } +} diff --git a/src/main/java/techreborn/rei/ReiPlugin.java b/src/main/java/techreborn/rei/ReiPlugin.java new file mode 100644 index 000000000..7f294d9a4 --- /dev/null +++ b/src/main/java/techreborn/rei/ReiPlugin.java @@ -0,0 +1,53 @@ +package techreborn.rei; + +import me.shedaniel.rei.api.REIPluginEntry; +import me.shedaniel.rei.api.RecipeHelper; +import net.minecraft.item.ItemConvertible; +import net.minecraft.recipe.Recipe; +import net.minecraft.util.Identifier; +import reborncore.common.crafting.RebornRecipe; +import reborncore.common.crafting.RebornRecipeType; +import reborncore.common.crafting.RecipeManager; +import techreborn.init.ModRecipes; +import techreborn.init.TRContent; + +import java.util.HashMap; +import java.util.Map; +import java.util.function.Predicate; + +public class ReiPlugin implements REIPluginEntry { + + public static final Identifier PLUGIN = new Identifier("techreborn", "techreborn_plugin"); + + public static final Map, ItemConvertible> iconMap = new HashMap<>(); + + public ReiPlugin() { + iconMap.put(ModRecipes.ALLOY_SMELTER, TRContent.Machine.ALLOY_SMELTER); + iconMap.put(ModRecipes.GRINDER, TRContent.Machine.GRINDER); + //TODO add the others here + } + + @Override + public Identifier getPluginIdentifier() { + return PLUGIN; + } + + @Override + public void registerPluginCategories(RecipeHelper recipeHelper) { + RecipeManager.getRecipeTypes("techreborn").forEach(rebornRecipeType -> recipeHelper.registerCategory(new MachineRecipeCategory(rebornRecipeType))); + } + + @Override + public void registerRecipeDisplays(RecipeHelper recipeHelper) { + RecipeManager.getRecipeTypes("techreborn").forEach(rebornRecipeType -> registerMachineRecipe(recipeHelper, rebornRecipeType)); + } + + private void registerMachineRecipe(RecipeHelper recipeHelper, RebornRecipeType recipeType){ + recipeHelper.registerRecipes(recipeType.getName(), (Predicate) recipe -> { + if (recipe instanceof RebornRecipe) { + return ((RebornRecipe) recipe).getRebornRecipeType() == recipeType; + } + return false; + }, recipe -> new MachineRecipeDisplay((RebornRecipe) recipe)); + } +} diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index f2df5bd88..32bc2dc73 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -11,6 +11,9 @@ ], "client": [ "techreborn.TechRebornClient" + ], + "rei_plugins": [ + "techreborn.rei.ReiPlugin" ] }, "requires": {