Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ public class GTMultiMachines {
.build())
.workableCasingModel(GTCEu.id("block/casings/solid/machine_coke_bricks"),
GTCEu.id("block/multiblock/coke_oven"))
.themeId((i) -> GTGuiTheme.PRIMITIVE.getId())
.register();

public static final MultiblockMachineDefinition PRIMITIVE_BLAST_FURNACE = REGISTRATE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow;
import com.gregtechceu.gtceu.api.mui.widgets.layout.Grid;
import com.gregtechceu.gtceu.api.mui.widgets.layout.Row;
import com.gregtechceu.gtceu.api.mui.widgets.slot.FluidSlot;
import com.gregtechceu.gtceu.api.mui.widgets.slot.ItemSlot;
import com.gregtechceu.gtceu.api.mui.widgets.slot.ModularSlot;
import com.gregtechceu.gtceu.api.recipe.gui.GTRecipeTypeUILayout;
Expand Down Expand Up @@ -124,6 +125,10 @@ public static ProgressWidget createProgressBar(IRecipeLogicMachine workableMachi
.progress(() -> workableMachine.getProgress() / (double) workableMachine.getMaxProgress());
}

public static FluidSlot createTankWidget() {
return new FluidSlot().size(20, 58).alwaysShowFull(false);
}

public static ItemSlot createBatterySlot(SimpleTieredMachine tieredMachine, PanelSyncManager syncManager) {
ItemSlotSyncHandler battery = new ItemSlotSyncHandler(new ModularSlot(tieredMachine.getChargerInventory(), 0));
syncManager.syncValue("battery", battery);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,23 @@

import com.gregtechceu.gtceu.api.GTValues;
import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo;
import com.gregtechceu.gtceu.api.gui.GuiTextures;
import com.gregtechceu.gtceu.api.gui.UITemplate;
import com.gregtechceu.gtceu.api.gui.widget.SlotWidget;
import com.gregtechceu.gtceu.api.gui.widget.TankWidget;
import com.gregtechceu.gtceu.api.machine.feature.IUIMachine;
import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine;
import com.gregtechceu.gtceu.api.mui.base.ITheme;
import com.gregtechceu.gtceu.api.mui.drawable.UITexture;
import com.gregtechceu.gtceu.api.mui.factory.PosGuiData;
import com.gregtechceu.gtceu.api.mui.theme.ThemeAPI;
import com.gregtechceu.gtceu.api.mui.value.sync.FluidSlotSyncHandler;
import com.gregtechceu.gtceu.api.mui.value.sync.ItemSlotSyncHandler;
import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager;
import com.gregtechceu.gtceu.api.mui.widgets.ProgressWidget;
import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget;
import com.gregtechceu.gtceu.api.mui.widgets.slot.*;
import com.gregtechceu.gtceu.client.mui.screen.ModularPanel;
import com.gregtechceu.gtceu.client.mui.screen.UISettings;
import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets;
import com.gregtechceu.gtceu.common.mui.GTGuiTextures;
import com.gregtechceu.gtceu.config.ConfigHolder;

import com.lowdragmc.lowdraglib.gui.modular.ModularUI;
import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup;
import com.lowdragmc.lowdraglib.gui.texture.ProgressTexture;
import com.lowdragmc.lowdraglib.gui.widget.LabelWidget;
import com.lowdragmc.lowdraglib.gui.widget.ProgressWidget;

import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction;
Expand All @@ -32,34 +36,48 @@

import javax.annotation.ParametersAreNonnullByDefault;

import static com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets.createTankWidget;

@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class CokeOvenMachine extends PrimitiveWorkableMachine implements IUIMachine {
public class CokeOvenMachine extends PrimitiveWorkableMachine implements IMuiMachine {

public CokeOvenMachine(BlockEntityCreationInfo info) {
super(info);
}

@Override
public ModularUI createUI(Player entityPlayer) {
return new ModularUI(176, 166, this, entityPlayer)
.background(GuiTextures.PRIMITIVE_BACKGROUND)
.widget(new LabelWidget(5, 5, getBlockState().getBlock().getDescriptionId()))
.widget(new SlotWidget(importItems.storage, 0, 52, 30, true, true)
.setBackgroundTexture(
new GuiTextureGroup(GuiTextures.PRIMITIVE_SLOT, GuiTextures.PRIMITIVE_FURNACE_OVERLAY)))
.widget(new ProgressWidget(recipeLogic::getProgressPercent, 76, 32, 20, 15,
GuiTextures.PRIMITIVE_BLAST_FURNACE_PROGRESS_BAR))
.widget(new SlotWidget(exportItems.storage, 0, 103, 30, true, false)
.setBackgroundTexture(
new GuiTextureGroup(GuiTextures.PRIMITIVE_SLOT, GuiTextures.PRIMITIVE_FURNACE_OVERLAY)))
.widget(new TankWidget(exportFluids.getStorages()[0], 134, 13, 20, 58, true, false)
.setBackground(GuiTextures.PRIMITIVE_LARGE_FLUID_TANK)
.setFillDirection(ProgressTexture.FillDirection.DOWN_TO_UP)
.setShowAmountOverlay(false)
.setOverlay(GuiTextures.PRIMITIVE_LARGE_FLUID_TANK_OVERLAY))
.widget(UITemplate.bindPlayerInventory(entityPlayer.getInventory(), GuiTextures.PRIMITIVE_SLOT, 7, 84,
true));
public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) {
ITheme uiTheme = ThemeAPI.INSTANCE.getTheme(getDefinition().getThemeId());
return new ModularPanel(this.getDefinition().getName())
.size(176, 166)
// Top half of the screen
.child(new ItemSlot().syncHandler(new ItemSlotSyncHandler(
new ModularSlot(importItems.storage, 0)
.slotGroup(new SlotGroup("import_items", 1))))
.background(uiTheme.getItemSlotTheme().getTheme().getBackground(),
GTGuiTextures.PRIMITIVE_FURNACE_OVERLAY)
.margin(52, 0, 30, 0))

.child(new ItemSlot().syncHandler(new ItemSlotSyncHandler(
new ModularSlot(exportItems.storage, 0)
.slotGroup(new SlotGroup("export_items", 1))
.accessibility(false, true)))
.background(uiTheme.getItemSlotTheme().getTheme().getBackground(),
GTGuiTextures.PRIMITIVE_FURNACE_OVERLAY)
.margin(103, 0, 30, 0))
.child(new ProgressWidget().progress(recipeLogic::getProgressPercent).size(20, 15)
.texture(GTGuiTextures.PRIMITIVE_BLAST_FURNACE_PROGRESS_BAR, 18).margin(76, 32))

.child(createTankWidget()
.overlayTexture(GTGuiTextures.PRIMITIVE_LARGE_FLUID_TANK_OVERLAY)
.background(GTGuiTextures.PRIMITIVE_LARGE_FLUID_TANK)
.syncHandler(new FluidSlotSyncHandler(
exportFluids.getStorages()[0])
.canFillSlot(false))
.margin(134, 0, 13, 0))
.child(GTMuiWidgets.createTitleBar(getDefinition(), 176, (UITexture) uiTheme.getPanelTheme().getTheme()
.getBackground()))
.child(SlotGroupWidget.playerInventory(false).left(7).bottom(7));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,12 @@ public static class IDs {
public static final UITexture PRIMITIVE_FURNACE_OVERLAY = fullImage(
"textures/gui/primitive/overlay_primitive_furnace.png",
ColorType.DEFAULT);
public static final UITexture PRIMITIVE_LARGE_FLUID_TANK = fullImage(
"textures/gui/primitive/primitive_large_fluid_tank.png",
ColorType.DEFAULT);
public static final UITexture PRIMITIVE_LARGE_FLUID_TANK_OVERLAY = fullImage(
"textures/gui/primitive/primitive_large_fluid_tank_overlay.png",
ColorType.DEFAULT);
public static final UITexture HAMMER_OVERLAY = fullImage("textures/gui/overlay/hammer_overlay.png",
ColorType.DEFAULT);
public static final UITexture HAMMER_OVERLAY_BRONZE = fullImage("textures/gui/overlay/hammer_overlay_bronze.png");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@ public class GTGuiTheme {
public static final GTGuiTheme PRIMITIVE = templateBuilder("gregtech_primitive")
.panel(GTGuiTextures.IDs.PRIMITIVE_BACKGROUND)
.itemSlot(GTGuiTextures.IDs.PRIMITIVE_SLOT)
.fluidSlot(GTGuiTextures.IDs.PRIMITIVE_SLOT)
.build();

private final String themeId;
Expand Down