diff --git a/src/main/java/techreborn/client/gui/GuiImplosionCompressor.java b/src/main/java/techreborn/client/gui/GuiImplosionCompressor.java index b2c6dca03..7104e9607 100644 --- a/src/main/java/techreborn/client/gui/GuiImplosionCompressor.java +++ b/src/main/java/techreborn/client/gui/GuiImplosionCompressor.java @@ -10,7 +10,7 @@ import techreborn.tiles.TileImplosionCompressor; public class GuiImplosionCompressor extends GuiContainer { - private static final ResourceLocation texture = new ResourceLocation("techreborn", "textures/gui/implosion_compressor.png"); + public static final ResourceLocation texture = new ResourceLocation("techreborn", "textures/gui/implosion_compressor.png"); TileImplosionCompressor compresser; ContainerImplosionCompressor containerImplosionCompressor; diff --git a/src/main/java/techreborn/compat/jei/RecipeCategoryUids.java b/src/main/java/techreborn/compat/jei/RecipeCategoryUids.java index c9aeefdf7..50516ecd7 100644 --- a/src/main/java/techreborn/compat/jei/RecipeCategoryUids.java +++ b/src/main/java/techreborn/compat/jei/RecipeCategoryUids.java @@ -11,4 +11,5 @@ public class RecipeCategoryUids { public static final String CHEMICAL_REACTOR = "TechReborn.ChemicalReactor"; public static final String FUSION_REACTOR = "TechReborn.FusionReactor"; public static final String GRINDER = "TechReborn.Grinder"; + public static final String IMPLOSION_COMPRESSOR = "TechReborn.ImplosionCompressor"; } diff --git a/src/main/java/techreborn/compat/jei/TechRebornJeiPlugin.java b/src/main/java/techreborn/compat/jei/TechRebornJeiPlugin.java index c39c0178f..1c1ae4f3e 100644 --- a/src/main/java/techreborn/compat/jei/TechRebornJeiPlugin.java +++ b/src/main/java/techreborn/compat/jei/TechRebornJeiPlugin.java @@ -17,6 +17,7 @@ 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.api.recipe.machines.ImplosionCompressorRecipe; import techreborn.client.container.ContainerAlloyFurnace; import techreborn.client.container.ContainerAlloySmelter; import techreborn.client.container.ContainerAssemblingMachine; @@ -25,6 +26,7 @@ import techreborn.client.container.ContainerCentrifuge; import techreborn.client.container.ContainerChemicalReactor; import techreborn.client.container.ContainerFusionReactor; import techreborn.client.container.ContainerGrinder; +import techreborn.client.container.ContainerImplosionCompressor; import techreborn.compat.jei.alloySmelter.AlloySmelterRecipeCategory; import techreborn.compat.jei.alloySmelter.AlloySmelterRecipeHandler; import techreborn.compat.jei.assemblingMachine.AssemblingMachineRecipeCategory; @@ -39,6 +41,8 @@ import techreborn.compat.jei.fusionReactor.FusionReactorRecipeCategory; import techreborn.compat.jei.fusionReactor.FusionReactorRecipeHandler; import techreborn.compat.jei.grinder.GrinderRecipeCategory; import techreborn.compat.jei.grinder.GrinderRecipeHandler; +import techreborn.compat.jei.implosionCompressor.ImplosionCompressorRecipeCategory; +import techreborn.compat.jei.implosionCompressor.ImplosionCompressorRecipeHandler; @mezz.jei.api.JEIPlugin public class TechRebornJeiPlugin implements IModPlugin { @@ -70,7 +74,8 @@ public class TechRebornJeiPlugin implements IModPlugin { new CentrifugeRecipeCategory(guiHelper), new ChemicalReactorRecipeCategory(guiHelper), new FusionReactorRecipeCategory(guiHelper), - new GrinderRecipeCategory(guiHelper) + new GrinderRecipeCategory(guiHelper), + new ImplosionCompressorRecipeCategory(guiHelper) ); registry.addRecipeHandlers( @@ -80,7 +85,8 @@ public class TechRebornJeiPlugin implements IModPlugin { new CentrifugeRecipeHandler(), new ChemicalReactorRecipeHandler(), new FusionReactorRecipeHandler(), - new GrinderRecipeHandler() + new GrinderRecipeHandler(), + new ImplosionCompressorRecipeHandler() ); registry.addRecipes(RecipeHandler.recipeList); @@ -100,6 +106,7 @@ public class TechRebornJeiPlugin implements IModPlugin { recipeTransferRegistry.addRecipeTransferHandler(ContainerChemicalReactor.class, RecipeCategoryUids.CHEMICAL_REACTOR, 0, 2, 8, 36); recipeTransferRegistry.addRecipeTransferHandler(ContainerFusionReactor.class, RecipeCategoryUids.FUSION_REACTOR, 0, 2, 3, 36); recipeTransferRegistry.addRecipeTransferHandler(ContainerGrinder.class, RecipeCategoryUids.GRINDER, 0, 2, 6, 36); + recipeTransferRegistry.addRecipeTransferHandler(ContainerImplosionCompressor.class, RecipeCategoryUids.IMPLOSION_COMPRESSOR, 0, 2, 4, 36); } @Override @@ -116,6 +123,11 @@ public class TechRebornJeiPlugin implements IModPlugin { AssemblingMachineRecipe assemblingMachineRecipe = new AssemblingMachineRecipe(diamondBlock, diamondBlock, dirtBlock, time, 120); debugRecipes.add(assemblingMachineRecipe); } + for (int i = 0; i < 10; i++) { + int time = (int) Math.round(200 + Math.random() * 100); + ImplosionCompressorRecipe recipe = new ImplosionCompressorRecipe(diamondBlock, diamondBlock, dirtBlock, dirtBlock, time, 120); + debugRecipes.add(recipe); + } registry.addRecipes(debugRecipes); } } diff --git a/src/main/java/techreborn/compat/jei/implosionCompressor/ImplosionCompressorRecipeCategory.java b/src/main/java/techreborn/compat/jei/implosionCompressor/ImplosionCompressorRecipeCategory.java new file mode 100644 index 000000000..90b0e9de7 --- /dev/null +++ b/src/main/java/techreborn/compat/jei/implosionCompressor/ImplosionCompressorRecipeCategory.java @@ -0,0 +1,90 @@ +package techreborn.compat.jei.implosionCompressor; + +import javax.annotation.Nonnull; +import java.util.List; + +import net.minecraft.client.Minecraft; +import net.minecraft.item.ItemStack; +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.GuiImplosionCompressor; +import techreborn.compat.jei.RecipeCategoryUids; + +public class ImplosionCompressorRecipeCategory implements IRecipeCategory { + private static final int INPUT_SLOT_0 = 0; + private static final int INPUT_SLOT_1 = 1; + private static final int OUTPUT_SLOT_0 = 2; + private static final int OUTPUT_SLOT_1 = 3; + + private final IDrawable background; + private final IDrawable electricity; + private final String title; + + public ImplosionCompressorRecipeCategory(IGuiHelper guiHelper) { + background = guiHelper.createDrawable(GuiImplosionCompressor.texture, 16, 25, 116, 36); + IDrawableStatic electricityDrawable = guiHelper.createDrawable(GuiImplosionCompressor.texture, 176, 0, 14, 14); + electricity = guiHelper.createAnimatedDrawable(electricityDrawable, 300, IDrawableAnimated.StartDirection.TOP, true); + title = StatCollector.translateToLocal("tile.techreborn.implosioncompressor.name"); + } + + @Nonnull + @Override + public String getUid() { + return RecipeCategoryUids.IMPLOSION_COMPRESSOR; + } + + @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, 0, 12); + } + + @Override + public void setRecipe(@Nonnull IRecipeLayout recipeLayout, @Nonnull IRecipeWrapper recipeWrapper) { + IGuiItemStackGroup guiItemStacks = recipeLayout.getItemStacks(); + guiItemStacks.init(INPUT_SLOT_0, true, 20, 0); + guiItemStacks.init(INPUT_SLOT_1, true, 20, 18); + guiItemStacks.init(OUTPUT_SLOT_0, false, 76, 9); + guiItemStacks.init(OUTPUT_SLOT_1, false, 94, 9); + + if (recipeWrapper instanceof ImplosionCompressorRecipeWrapper) { + ImplosionCompressorRecipeWrapper recipe = (ImplosionCompressorRecipeWrapper) recipeWrapper; + + List inputs = recipe.getInputs(); + guiItemStacks.set(INPUT_SLOT_0, inputs.get(0)); + if (inputs.size() > 1) { + guiItemStacks.set(INPUT_SLOT_1, inputs.get(1)); + } + + List outputs = recipe.getOutputs(); + guiItemStacks.set(OUTPUT_SLOT_0, outputs.get(0)); + if (outputs.size() > 1) { + guiItemStacks.set(OUTPUT_SLOT_1, outputs.get(1)); + } + } + } +} diff --git a/src/main/java/techreborn/compat/jei/implosionCompressor/ImplosionCompressorRecipeHandler.java b/src/main/java/techreborn/compat/jei/implosionCompressor/ImplosionCompressorRecipeHandler.java new file mode 100644 index 000000000..e08fd7333 --- /dev/null +++ b/src/main/java/techreborn/compat/jei/implosionCompressor/ImplosionCompressorRecipeHandler.java @@ -0,0 +1,33 @@ +package techreborn.compat.jei.implosionCompressor; + +import javax.annotation.Nonnull; + +import mezz.jei.api.recipe.IRecipeHandler; +import mezz.jei.api.recipe.IRecipeWrapper; +import techreborn.api.recipe.machines.ImplosionCompressorRecipe; +import techreborn.compat.jei.RecipeCategoryUids; + +public class ImplosionCompressorRecipeHandler implements IRecipeHandler { + @Nonnull + @Override + public Class getRecipeClass() { + return ImplosionCompressorRecipe.class; + } + + @Nonnull + @Override + public String getRecipeCategoryUid() { + return RecipeCategoryUids.IMPLOSION_COMPRESSOR; + } + + @Nonnull + @Override + public IRecipeWrapper getRecipeWrapper(@Nonnull ImplosionCompressorRecipe recipe) { + return new ImplosionCompressorRecipeWrapper(recipe); + } + + @Override + public boolean isRecipeValid(@Nonnull ImplosionCompressorRecipe recipe) { + return true; + } +} diff --git a/src/main/java/techreborn/compat/jei/implosionCompressor/ImplosionCompressorRecipeWrapper.java b/src/main/java/techreborn/compat/jei/implosionCompressor/ImplosionCompressorRecipeWrapper.java new file mode 100644 index 000000000..62629ade9 --- /dev/null +++ b/src/main/java/techreborn/compat/jei/implosionCompressor/ImplosionCompressorRecipeWrapper.java @@ -0,0 +1,30 @@ +package techreborn.compat.jei.implosionCompressor; + +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.ImplosionCompressorRecipe; +import techreborn.client.gui.GuiImplosionCompressor; +import techreborn.compat.jei.BaseRecipeWrapper; +import techreborn.compat.jei.TechRebornJeiPlugin; + +public class ImplosionCompressorRecipeWrapper extends BaseRecipeWrapper { + private final IDrawableAnimated progress; + + public ImplosionCompressorRecipeWrapper(ImplosionCompressorRecipe baseRecipe) { + super(baseRecipe); + IGuiHelper guiHelper = TechRebornJeiPlugin.jeiHelpers.getGuiHelper(); + IDrawableStatic progressStatic = guiHelper.createDrawable(GuiImplosionCompressor.texture, 176, 14, 21, 11); + 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, 44, 13); + } +}