Skip to content
This repository has been archived by the owner on May 11, 2023. It is now read-only.

Commit

Permalink
Suprachronal assembler UI
Browse files Browse the repository at this point in the history
  • Loading branch information
Zalgo239 committed Sep 10, 2022
1 parent fcbfa85 commit adbcc53
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -100,12 +101,7 @@ public class GCYSRecipeMaps {
.setSlotOverlay(true, false, true, GuiTextures.DUST_OVERLAY)
.setSound(GTSounds.MACERATOR);

public static final RecipeMap<SimpleRecipeBuilder> 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<SimpleRecipeBuilder> SUPRACHRONAL_ASSEMBLER_RECIPES = (RecipeMapSuprachronalAssembler<SimpleRecipeBuilder>) 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);

Expand Down
Original file line number Diff line number Diff line change
@@ -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<R extends RecipeBuilder<R>> extends RecipeMap<R> {

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
}
}
}

0 comments on commit adbcc53

Please sign in to comment.