From 05d8a5c787c8e013942a5388232cbdb0e72fa1fb Mon Sep 17 00:00:00 2001 From: mezz Date: Wed, 30 Dec 2015 21:40:21 -0800 Subject: [PATCH] Add assembling machine recipes --- .../client/gui/GuiAssemblingMachine.java | 2 +- .../compat/jei/RecipeCategoryUids.java | 1 + .../compat/jei/TechRebornJeiPlugin.java | 29 +++++++ .../AlloySmelterRecipeCategory.java | 4 +- .../AssemblingMachineRecipeCategory.java | 77 +++++++++++++++++++ .../AssemblingMachineRecipeHandler.java | 33 ++++++++ .../AssemblingMachineRecipeWrapper.java | 30 ++++++++ 7 files changed, 173 insertions(+), 3 deletions(-) create mode 100644 src/main/java/techreborn/compat/jei/assemblingMachine/AssemblingMachineRecipeCategory.java create mode 100644 src/main/java/techreborn/compat/jei/assemblingMachine/AssemblingMachineRecipeHandler.java create mode 100644 src/main/java/techreborn/compat/jei/assemblingMachine/AssemblingMachineRecipeWrapper.java diff --git a/src/main/java/techreborn/client/gui/GuiAssemblingMachine.java b/src/main/java/techreborn/client/gui/GuiAssemblingMachine.java index 6efb89f8d..20f6bae24 100644 --- a/src/main/java/techreborn/client/gui/GuiAssemblingMachine.java +++ b/src/main/java/techreborn/client/gui/GuiAssemblingMachine.java @@ -10,7 +10,7 @@ import techreborn.tiles.TileAssemblingMachine; public class GuiAssemblingMachine extends GuiContainer { - private static final ResourceLocation texture = new ResourceLocation("techreborn", "textures/gui/assembling_machine.png"); + public static final ResourceLocation texture = new ResourceLocation("techreborn", "textures/gui/assembling_machine.png"); TileAssemblingMachine assemblingmachine; ContainerAssemblingMachine containerAssemblingMachine; diff --git a/src/main/java/techreborn/compat/jei/RecipeCategoryUids.java b/src/main/java/techreborn/compat/jei/RecipeCategoryUids.java index adceaeb5b..e10b02521 100644 --- a/src/main/java/techreborn/compat/jei/RecipeCategoryUids.java +++ b/src/main/java/techreborn/compat/jei/RecipeCategoryUids.java @@ -5,5 +5,6 @@ public class RecipeCategoryUids { } public static final String ALLOY_SMELTER = "AlloySmelter"; + public static final String ASSEMBLING_MACHINE = "AssemblingMachine"; public static final String FUSION_REACTOR = "FusionReactor"; } diff --git a/src/main/java/techreborn/compat/jei/TechRebornJeiPlugin.java b/src/main/java/techreborn/compat/jei/TechRebornJeiPlugin.java index dea52f7e3..46a917933 100644 --- a/src/main/java/techreborn/compat/jei/TechRebornJeiPlugin.java +++ b/src/main/java/techreborn/compat/jei/TechRebornJeiPlugin.java @@ -1,5 +1,11 @@ package techreborn.compat.jei; +import java.util.ArrayList; +import java.util.List; + +import net.minecraft.init.Blocks; +import net.minecraft.item.ItemStack; + import mezz.jei.api.IGuiHelper; import mezz.jei.api.IItemRegistry; import mezz.jei.api.IJeiHelpers; @@ -10,11 +16,15 @@ import mezz.jei.api.recipe.VanillaRecipeCategoryUid; import mezz.jei.api.recipe.transfer.IRecipeTransferRegistry; import techreborn.api.reactor.FusionReactorRecipeHelper; import techreborn.api.recipe.RecipeHandler; +import techreborn.api.recipe.machines.AssemblingMachineRecipe; import techreborn.client.container.ContainerAlloyFurnace; import techreborn.client.container.ContainerAlloySmelter; +import techreborn.client.container.ContainerAssemblingMachine; import techreborn.client.container.ContainerFusionReactor; import techreborn.compat.jei.alloySmelter.AlloySmelterRecipeCategory; import techreborn.compat.jei.alloySmelter.AlloySmelterRecipeHandler; +import techreborn.compat.jei.assemblingMachine.AssemblingMachineRecipeCategory; +import techreborn.compat.jei.assemblingMachine.AssemblingMachineRecipeHandler; import techreborn.compat.jei.fusionReactor.FusionReactorRecipeCategory; import techreborn.compat.jei.fusionReactor.FusionReactorRecipeHandler; @@ -43,21 +53,28 @@ public class TechRebornJeiPlugin implements IModPlugin { registry.addRecipeCategories( new AlloySmelterRecipeCategory(guiHelper), + new AssemblingMachineRecipeCategory(guiHelper), new FusionReactorRecipeCategory(guiHelper) ); registry.addRecipeHandlers( new AlloySmelterRecipeHandler(), + new AssemblingMachineRecipeHandler(), new FusionReactorRecipeHandler() ); registry.addRecipes(RecipeHandler.recipeList); registry.addRecipes(FusionReactorRecipeHelper.reactorRecipes); + if (mezz.jei.config.Config.isDebugModeEnabled()) { + addDebugRecipes(registry); + } + IRecipeTransferRegistry recipeTransferRegistry = registry.getRecipeTransferRegistry(); recipeTransferRegistry.addRecipeTransferHandler(ContainerAlloyFurnace.class, RecipeCategoryUids.ALLOY_SMELTER, 0, 2, 4, 36); recipeTransferRegistry.addRecipeTransferHandler(ContainerAlloySmelter.class, RecipeCategoryUids.ALLOY_SMELTER, 0, 2, 8, 36); recipeTransferRegistry.addRecipeTransferHandler(ContainerAlloyFurnace.class, VanillaRecipeCategoryUid.FUEL, 3, 1, 4, 36); + recipeTransferRegistry.addRecipeTransferHandler(ContainerAssemblingMachine.class, RecipeCategoryUids.ASSEMBLING_MACHINE, 0, 2, 8, 36); recipeTransferRegistry.addRecipeTransferHandler(ContainerFusionReactor.class, RecipeCategoryUids.FUSION_REACTOR, 0, 2, 3, 36); } @@ -65,4 +82,16 @@ public class TechRebornJeiPlugin implements IModPlugin { public void onRecipeRegistryAvailable(IRecipeRegistry recipeRegistry) { } + + private static void addDebugRecipes(IModRegistry registry) { + ItemStack diamondBlock = new ItemStack(Blocks.diamond_block); + ItemStack dirtBlock = new ItemStack(Blocks.dirt); + List debugRecipes = new ArrayList<>(); + for (int i = 0; i < 10; i++) { + int time = (int) Math.round(200 + Math.random() * 100); + AssemblingMachineRecipe assemblingMachineRecipe = new AssemblingMachineRecipe(diamondBlock, diamondBlock, dirtBlock, time, 120); + debugRecipes.add(assemblingMachineRecipe); + } + registry.addRecipes(debugRecipes); + } } diff --git a/src/main/java/techreborn/compat/jei/alloySmelter/AlloySmelterRecipeCategory.java b/src/main/java/techreborn/compat/jei/alloySmelter/AlloySmelterRecipeCategory.java index 6de02c43d..b1c3551d5 100644 --- a/src/main/java/techreborn/compat/jei/alloySmelter/AlloySmelterRecipeCategory.java +++ b/src/main/java/techreborn/compat/jei/alloySmelter/AlloySmelterRecipeCategory.java @@ -27,8 +27,8 @@ public class AlloySmelterRecipeCategory implements IRecipeCategory { public AlloySmelterRecipeCategory(IGuiHelper guiHelper) { background = guiHelper.createDrawable(GuiAlloySmelter.texture, 46, 16, 91, 54); - IDrawableStatic flameDrawable = guiHelper.createDrawable(GuiAlloySmelter.texture, 176, 0, 14, 14); - electricity = guiHelper.createAnimatedDrawable(flameDrawable, 300, IDrawableAnimated.StartDirection.TOP, true); + IDrawableStatic electricityDrawable = guiHelper.createDrawable(GuiAlloySmelter.texture, 176, 0, 14, 14); + electricity = guiHelper.createAnimatedDrawable(electricityDrawable, 300, IDrawableAnimated.StartDirection.TOP, true); title = StatCollector.translateToLocal("techreborn.jei.category.alloy.furnace"); } diff --git a/src/main/java/techreborn/compat/jei/assemblingMachine/AssemblingMachineRecipeCategory.java b/src/main/java/techreborn/compat/jei/assemblingMachine/AssemblingMachineRecipeCategory.java new file mode 100644 index 000000000..5d701d9d9 --- /dev/null +++ b/src/main/java/techreborn/compat/jei/assemblingMachine/AssemblingMachineRecipeCategory.java @@ -0,0 +1,77 @@ +package techreborn.compat.jei.assemblingMachine; + +import javax.annotation.Nonnull; + +import net.minecraft.client.Minecraft; +import net.minecraft.util.StatCollector; + +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawable; +import mezz.jei.api.gui.IDrawableAnimated; +import mezz.jei.api.gui.IDrawableStatic; +import mezz.jei.api.gui.IGuiItemStackGroup; +import mezz.jei.api.gui.IRecipeLayout; +import mezz.jei.api.recipe.IRecipeCategory; +import mezz.jei.api.recipe.IRecipeWrapper; +import techreborn.client.gui.GuiAssemblingMachine; +import techreborn.compat.jei.RecipeCategoryUids; + +public class AssemblingMachineRecipeCategory implements IRecipeCategory { + private static final int INPUT_SLOT_0 = 0; + private static final int INPUT_SLOT_1 = 1; + private static final int OUTPUT_SLOT = 2; + + private final IDrawable background; + private final IDrawableAnimated electricity; + private final String title; + + public AssemblingMachineRecipeCategory(IGuiHelper guiHelper) { + background = guiHelper.createDrawable(GuiAssemblingMachine.texture, 46, 16, 91, 54); + IDrawableStatic electricityDrawable = guiHelper.createDrawable(GuiAssemblingMachine.texture, 176, 0, 14, 14); + electricity = guiHelper.createAnimatedDrawable(electricityDrawable, 300, IDrawableAnimated.StartDirection.TOP, true); + title = StatCollector.translateToLocal("tile.techreborn.assemblingmachine.name"); + } + + @Nonnull + @Override + public String getUid() { + return RecipeCategoryUids.ASSEMBLING_MACHINE; + } + + @Nonnull + @Override + public String getTitle() { + return title; + } + + @Nonnull + @Override + public IDrawable getBackground() { + return background; + } + + @Override + public void drawExtras(Minecraft minecraft) { + + } + + @Override + public void drawAnimations(Minecraft minecraft) { + electricity.draw(minecraft, 10, 20); + } + + @Override + public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper) { + IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); + guiItemStacks.init(INPUT_SLOT_0, true, 0, 0); + guiItemStacks.init(INPUT_SLOT_1, true, 18, 0); + guiItemStacks.init(OUTPUT_SLOT, false, 69, 18); + + if (recipeWrapper instanceof AssemblingMachineRecipeWrapper) { + AssemblingMachineRecipeWrapper recipe = (AssemblingMachineRecipeWrapper) recipeWrapper; + guiItemStacks.set(INPUT_SLOT_0, recipe.getInputs().get(0)); + guiItemStacks.set(INPUT_SLOT_1, recipe.getInputs().get(1)); + guiItemStacks.set(OUTPUT_SLOT, recipe.getOutputs()); + } + } +} diff --git a/src/main/java/techreborn/compat/jei/assemblingMachine/AssemblingMachineRecipeHandler.java b/src/main/java/techreborn/compat/jei/assemblingMachine/AssemblingMachineRecipeHandler.java new file mode 100644 index 000000000..7ea9db62d --- /dev/null +++ b/src/main/java/techreborn/compat/jei/assemblingMachine/AssemblingMachineRecipeHandler.java @@ -0,0 +1,33 @@ +package techreborn.compat.jei.assemblingMachine; + +import javax.annotation.Nonnull; + +import mezz.jei.api.recipe.IRecipeHandler; +import mezz.jei.api.recipe.IRecipeWrapper; +import techreborn.api.recipe.machines.AssemblingMachineRecipe; +import techreborn.compat.jei.RecipeCategoryUids; + +public class AssemblingMachineRecipeHandler implements IRecipeHandler { + @Nonnull + @Override + public Class getRecipeClass() { + return AssemblingMachineRecipe.class; + } + + @Nonnull + @Override + public String getRecipeCategoryUid() { + return RecipeCategoryUids.ASSEMBLING_MACHINE; + } + + @Nonnull + @Override + public IRecipeWrapper getRecipeWrapper(@Nonnull AssemblingMachineRecipe recipe) { + return new AssemblingMachineRecipeWrapper(recipe); + } + + @Override + public boolean isRecipeValid(@Nonnull AssemblingMachineRecipe recipe) { + return true; + } +} diff --git a/src/main/java/techreborn/compat/jei/assemblingMachine/AssemblingMachineRecipeWrapper.java b/src/main/java/techreborn/compat/jei/assemblingMachine/AssemblingMachineRecipeWrapper.java new file mode 100644 index 000000000..e9a832eb8 --- /dev/null +++ b/src/main/java/techreborn/compat/jei/assemblingMachine/AssemblingMachineRecipeWrapper.java @@ -0,0 +1,30 @@ +package techreborn.compat.jei.assemblingMachine; + +import javax.annotation.Nonnull; + +import net.minecraft.client.Minecraft; + +import mezz.jei.api.IGuiHelper; +import mezz.jei.api.gui.IDrawableAnimated; +import mezz.jei.api.gui.IDrawableStatic; +import techreborn.api.recipe.machines.AssemblingMachineRecipe; +import techreborn.client.gui.GuiAssemblingMachine; +import techreborn.compat.jei.BaseRecipeWrapper; +import techreborn.compat.jei.TechRebornJeiPlugin; + +public class AssemblingMachineRecipeWrapper extends BaseRecipeWrapper { + private final IDrawableAnimated progress; + + public AssemblingMachineRecipeWrapper(AssemblingMachineRecipe baseRecipe) { + super(baseRecipe); + IGuiHelper guiHelper = TechRebornJeiPlugin.jeiHelpers.getGuiHelper(); + IDrawableStatic progressStatic = guiHelper.createDrawable(GuiAssemblingMachine.texture, 176, 14, 20, 18); + this.progress = guiHelper.createAnimatedDrawable(progressStatic, baseRecipe.tickTime(), IDrawableAnimated.StartDirection.LEFT, false); + } + + @Override + public void drawAnimations(@Nonnull Minecraft minecraft, int recipeWidth, int recipeHeight) { + super.drawAnimations(minecraft, recipeWidth, recipeHeight); + progress.draw(minecraft, 40, 18); + } +}