diff --git a/src/main/java/gregicality/science/api/recipes/GCYSRecipeMaps.java b/src/main/java/gregicality/science/api/recipes/GCYSRecipeMaps.java index 2e3ede04..0804e08b 100644 --- a/src/main/java/gregicality/science/api/recipes/GCYSRecipeMaps.java +++ b/src/main/java/gregicality/science/api/recipes/GCYSRecipeMaps.java @@ -3,6 +3,7 @@ import crafttweaker.annotations.ZenRegister; import gregicality.science.api.recipes.builders.NoCoilTemperatureRecipeBuilder; import gregicality.science.api.recipes.builders.TemperaturePressureRecipeBuilder; +import gregicality.science.api.recipes.machines.RecipeMapSuprachronalAssembler; import gregicality.science.client.render.GCYSGuiTextures; import gregtech.api.GTValues; import gregtech.api.gui.GuiTextures; @@ -100,12 +101,7 @@ public class GCYSRecipeMaps { .setSlotOverlay(true, false, true, GuiTextures.DUST_OVERLAY) .setSound(GTSounds.MACERATOR); - public static final RecipeMap SUPRACHRONAL_ASSEMBLER_RECIPES = new RecipeMap<>("suprachronal_assembler_recipes", 1, 16, 0, 1, 0, 4, 0, 0, new SimpleRecipeBuilder(), false) - .setSlotOverlay(false, false, false, GuiTextures.BOX_OVERLAY) - .setSlotOverlay(false, false, true, GuiTextures.BOX_OVERLAY) - .setSlotOverlay(false, true, false, GuiTextures.MOLECULAR_OVERLAY_3) - .setSlotOverlay(false, true, true, GuiTextures.MOLECULAR_OVERLAY_4) - .setSlotOverlay(true, false, GuiTextures.BOX_OVERLAY) + public static final RecipeMapSuprachronalAssembler SUPRACHRONAL_ASSEMBLER_RECIPES = (RecipeMapSuprachronalAssembler) new RecipeMapSuprachronalAssembler<>("suprachronal_assembler_recipes", 1, 16, 0, 1, 0, 4, 0, 0, new SimpleRecipeBuilder(), false) .setProgressBar(GuiTextures.PROGRESS_BAR_ASSEMBLY_LINE, ProgressWidget.MoveType.HORIZONTAL) .setSound(GTSounds.REPLICATOR); diff --git a/src/main/java/gregicality/science/api/recipes/machines/RecipeMapSuprachronalAssembler.java b/src/main/java/gregicality/science/api/recipes/machines/RecipeMapSuprachronalAssembler.java new file mode 100644 index 00000000..211bc335 --- /dev/null +++ b/src/main/java/gregicality/science/api/recipes/machines/RecipeMapSuprachronalAssembler.java @@ -0,0 +1,68 @@ +package gregicality.science.api.recipes.machines; + +import gregtech.api.capability.impl.FluidTankList; +import gregtech.api.gui.GuiTextures; +import gregtech.api.gui.ModularUI; +import gregtech.api.gui.widgets.ProgressWidget; +import gregtech.api.recipes.RecipeBuilder; +import gregtech.api.recipes.RecipeMap; +import net.minecraftforge.items.IItemHandlerModifiable; + +import javax.annotation.Nonnull; + +public class RecipeMapSuprachronalAssembler> extends RecipeMap { + + public RecipeMapSuprachronalAssembler(String unlocalizedName, + int minInputs, int maxInputs, int minOutputs, int maxOutputs, + int minFluidInputs, int maxFluidInputs, int minFluidOutputs, int maxFluidOutputs, + R defaultRecipe, boolean isHidden) { + super(unlocalizedName, minInputs, maxInputs, minOutputs, maxOutputs, minFluidInputs, maxFluidInputs, minFluidOutputs, maxFluidOutputs, defaultRecipe, isHidden); + } + + @Override + @Nonnull + public ModularUI.Builder createJeiUITemplate(IItemHandlerModifiable importItems, IItemHandlerModifiable exportItems, FluidTankList importFluids, FluidTankList exportFluids, int yOffset) { + ModularUI.Builder builder = ModularUI.builder(GuiTextures.BACKGROUND, 176, 176) + .widget(new ProgressWidget(200, 80, 1, 54, 72, GuiTextures.PROGRESS_BAR_ASSEMBLY_LINE, ProgressWidget.MoveType.HORIZONTAL)); + this.addInventorySlotGroup(builder, importItems, importFluids, false, yOffset); + this.addInventorySlotGroup(builder, exportItems, exportFluids, true, yOffset); + return builder; + } + + @Override + protected void addInventorySlotGroup(ModularUI.Builder builder, @Nonnull IItemHandlerModifiable itemHandler, @Nonnull FluidTankList fluidHandler, boolean isOutputs, int yOffset) { + int itemInputsCount = itemHandler.getSlots(); + int fluidInputsCount = fluidHandler.getTanks(); + boolean invertFluids = false; + if (itemInputsCount == 0) { + int tmp = itemInputsCount; + itemInputsCount = fluidInputsCount; + fluidInputsCount = tmp; + invertFluids = true; + } + int[] inputSlotGrid = determineSlotsGrid(itemInputsCount); + int itemSlotsToLeft = inputSlotGrid[0]; + int itemSlotsToDown = inputSlotGrid[1]; + int startInputsX = 80 - itemSlotsToLeft * 18; + int startInputsY = 37 - (int) (itemSlotsToDown / 2.0 * 18); + + if (!isOutputs) { + for (int i = 0; i < itemSlotsToDown; i++) { + for (int j = 0; j < itemSlotsToLeft; j++) { + int slotIndex = i * itemSlotsToLeft + j/* + 1*/; // needed for data slot + addSlot(builder, startInputsX + 18 * j, startInputsY + 18 * i, slotIndex, itemHandler, fluidHandler, invertFluids, false); + } + } + if (fluidInputsCount > 0 || invertFluids) { + if (itemSlotsToDown >= fluidInputsCount) { + int startSpecX = startInputsX + 18 * 5; + for (int i = 0; i < fluidInputsCount; i++) { + addSlot(builder, startSpecX, startInputsY + 18 * i, i, itemHandler, fluidHandler, true, false); + } + } + } + } else { + addSlot(builder, startInputsX + 18 * 4, 1, 0/*18*/, itemHandler, fluidHandler, invertFluids, true); // Output Slot - 18 for data slot + } + } +}