Skip to content

Commit 4eb2920

Browse files
zetrock1YoungOnionMCjurrejelle
authored
[MUI2] Primitive Blast Furnace (#4362)
Co-authored-by: YoungOnion <39562198+YoungOnionMC@users.noreply.github.com> Co-authored-by: jurrejelle <jurre@jilles.com>
1 parent 6c3ef94 commit 4eb2920

File tree

3 files changed

+89
-37
lines changed

3 files changed

+89
-37
lines changed

src/main/java/com/gregtechceu/gtceu/common/data/machines/GTMultiMachines.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import com.gregtechceu.gtceu.common.machine.multiblock.primitive.PrimitiveBlastFurnaceMachine;
3030
import com.gregtechceu.gtceu.common.machine.multiblock.primitive.PrimitivePumpMachine;
3131
import com.gregtechceu.gtceu.common.machine.multiblock.steam.SteamParallelMultiblockMachine;
32+
import com.gregtechceu.gtceu.common.mui.GTGuiTheme;
3233
import com.gregtechceu.gtceu.config.ConfigHolder;
3334
import com.gregtechceu.gtceu.utils.FormattingUtil;
3435
import com.gregtechceu.gtceu.utils.GTUtil;
@@ -129,6 +130,7 @@ public class GTMultiMachines {
129130
.or(Predicates.custom(bws -> GTUtil.isBlockSnow(bws.getBlockState()), null)))
130131
.where('Y', Predicates.controller(blocks(definition.getBlock())))
131132
.build())
133+
.themeId((i) -> GTGuiTheme.PRIMITIVE.getId())
132134
.register();
133135

134136
public static final MultiblockMachineDefinition ELECTRIC_BLAST_FURNACE = REGISTRATE

src/main/java/com/gregtechceu/gtceu/common/machine/multiblock/primitive/PrimitiveBlastFurnaceMachine.java

Lines changed: 77 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -4,33 +4,39 @@
44
import com.gregtechceu.gtceu.api.blockentity.BlockEntityCreationInfo;
55
import com.gregtechceu.gtceu.api.capability.recipe.IO;
66
import com.gregtechceu.gtceu.api.capability.recipe.ItemRecipeCapability;
7-
import com.gregtechceu.gtceu.api.gui.GuiTextures;
8-
import com.gregtechceu.gtceu.api.gui.UITemplate;
9-
import com.gregtechceu.gtceu.api.gui.widget.SlotWidget;
107
import com.gregtechceu.gtceu.api.machine.TickableSubscription;
11-
import com.gregtechceu.gtceu.api.machine.feature.IUIMachine;
8+
import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine;
129
import com.gregtechceu.gtceu.api.machine.feature.multiblock.IFluidRenderMulti;
1310
import com.gregtechceu.gtceu.api.machine.trait.NotifiableItemStackHandler;
1411
import com.gregtechceu.gtceu.api.machine.trait.RecipeLogic;
12+
import com.gregtechceu.gtceu.api.mui.base.ITheme;
13+
import com.gregtechceu.gtceu.api.mui.drawable.UITexture;
14+
import com.gregtechceu.gtceu.api.mui.factory.PosGuiData;
15+
import com.gregtechceu.gtceu.api.mui.theme.ThemeAPI;
16+
import com.gregtechceu.gtceu.api.mui.value.sync.ItemSlotSyncHandler;
17+
import com.gregtechceu.gtceu.api.mui.value.sync.PanelSyncManager;
18+
import com.gregtechceu.gtceu.api.mui.widgets.ProgressWidget;
19+
import com.gregtechceu.gtceu.api.mui.widgets.SlotGroupWidget;
20+
import com.gregtechceu.gtceu.api.mui.widgets.slot.ItemSlot;
21+
import com.gregtechceu.gtceu.api.mui.widgets.slot.ModularSlot;
22+
import com.gregtechceu.gtceu.api.mui.widgets.slot.SlotGroup;
1523
import com.gregtechceu.gtceu.api.pattern.util.RelativeDirection;
1624
import com.gregtechceu.gtceu.api.sync_system.annotations.RerenderOnChanged;
1725
import com.gregtechceu.gtceu.api.sync_system.annotations.SyncToClient;
26+
import com.gregtechceu.gtceu.client.mui.screen.ModularPanel;
27+
import com.gregtechceu.gtceu.client.mui.screen.UISettings;
28+
import com.gregtechceu.gtceu.common.data.mui.GTMuiWidgets;
29+
import com.gregtechceu.gtceu.common.mui.GTGuiTextures;
1830
import com.gregtechceu.gtceu.config.ConfigHolder;
1931
import com.gregtechceu.gtceu.utils.GTUtil;
2032

21-
import com.lowdragmc.lowdraglib.gui.modular.ModularUI;
22-
import com.lowdragmc.lowdraglib.gui.texture.GuiTextureGroup;
23-
import com.lowdragmc.lowdraglib.gui.widget.LabelWidget;
24-
import com.lowdragmc.lowdraglib.gui.widget.ProgressWidget;
25-
2633
import net.minecraft.MethodsReturnNonnullByDefault;
2734
import net.minecraft.core.BlockPos;
2835
import net.minecraft.core.Direction;
2936
import net.minecraft.core.particles.ParticleTypes;
3037
import net.minecraft.sounds.SoundEvents;
3138
import net.minecraft.sounds.SoundSource;
3239
import net.minecraft.util.RandomSource;
33-
import net.minecraft.world.entity.player.Player;
3440
import net.minecraft.world.level.block.state.BlockState;
3541
import net.minecraft.world.phys.AABB;
3642
import net.minecraftforge.api.distmarker.Dist;
@@ -39,6 +45,7 @@
3945
import lombok.Getter;
4046
import org.jetbrains.annotations.NotNull;
4147

48+
import java.util.Arrays;
4249
import java.util.Collections;
4350
import java.util.HashSet;
4451
import java.util.Set;
@@ -47,7 +54,7 @@
4754

4855
@ParametersAreNonnullByDefault
4956
@MethodsReturnNonnullByDefault
50-
public class PrimitiveBlastFurnaceMachine extends PrimitiveWorkableMachine implements IUIMachine, IFluidRenderMulti {
57+
public class PrimitiveBlastFurnaceMachine extends PrimitiveWorkableMachine implements IMuiMachine, IFluidRenderMulti {
5158

5259
private TickableSubscription hurtSubscription;
5360

@@ -146,32 +153,65 @@ public void clientTick() {
146153
}
147154

148155
@Override
149-
public ModularUI createUI(Player entityPlayer) {
150-
return new ModularUI(176, 166, this, entityPlayer)
151-
.background(GuiTextures.PRIMITIVE_BACKGROUND)
152-
.widget(new LabelWidget(5, 5, getBlockState().getBlock().getDescriptionId()))
153-
.widget(new SlotWidget(importItems.storage, 0, 52, 20, true, true)
154-
.setBackgroundTexture(
155-
new GuiTextureGroup(GuiTextures.PRIMITIVE_SLOT, GuiTextures.PRIMITIVE_INGOT_OVERLAY)))
156-
.widget(new SlotWidget(importItems.storage, 1, 52, 38, true, true)
157-
.setBackgroundTexture(
158-
new GuiTextureGroup(GuiTextures.PRIMITIVE_SLOT, GuiTextures.PRIMITIVE_DUST_OVERLAY)))
159-
.widget(new SlotWidget(importItems.storage, 2, 52, 56, true, true)
160-
.setBackgroundTexture(
161-
new GuiTextureGroup(GuiTextures.PRIMITIVE_SLOT, GuiTextures.PRIMITIVE_FURNACE_OVERLAY)))
162-
.widget(new ProgressWidget(recipeLogic::getProgressPercent, 77, 39, 20, 15,
163-
GuiTextures.PRIMITIVE_BLAST_FURNACE_PROGRESS_BAR))
164-
.widget(new SlotWidget(exportItems.storage, 0, 104, 38, true, false)
165-
.setBackgroundTexture(
166-
new GuiTextureGroup(GuiTextures.PRIMITIVE_SLOT, GuiTextures.PRIMITIVE_INGOT_OVERLAY)))
167-
.widget(new SlotWidget(exportItems.storage, 1, 122, 38, true, false)
168-
.setBackgroundTexture(
169-
new GuiTextureGroup(GuiTextures.PRIMITIVE_SLOT, GuiTextures.PRIMITIVE_DUST_OVERLAY)))
170-
.widget(new SlotWidget(exportItems.storage, 2, 140, 38, true, false)
171-
.setBackgroundTexture(
172-
new GuiTextureGroup(GuiTextures.PRIMITIVE_SLOT, GuiTextures.PRIMITIVE_DUST_OVERLAY)))
173-
.widget(UITemplate.bindPlayerInventory(entityPlayer.getInventory(),
174-
GuiTextures.PRIMITIVE_SLOT, 7, 84, true));
156+
public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) {
157+
ITheme theme = ThemeAPI.INSTANCE.getTheme(getDefinition().getThemeId());
158+
return new ModularPanel(this.getDefinition().getName())
159+
.size(176, 166)
160+
// Top half of the screen
161+
.child(createImportItemSlot(syncManager, theme).margin(52, 16))
162+
.child(new ProgressWidget().progress(recipeLogic::getProgressPercent).size(20, 15)
163+
.texture(GTGuiTextures.PRIMITIVE_BLAST_FURNACE_PROGRESS_BAR, 0).margin(77, 35))
164+
.child(createExportItemSlot(syncManager, theme).margin(104, 0, 34, 0))
165+
166+
.child(GTMuiWidgets.createTitleBar(getDefinition(), 176, (UITexture) theme.getPanelTheme().getTheme()
167+
.getBackground()))
168+
.child(SlotGroupWidget
169+
.playerInventory(false).left(7)
170+
.bottom(7));
171+
}
172+
173+
private SlotGroupWidget createImportItemSlot(PanelSyncManager syncManager, ITheme theme) {
174+
int size = importItems.storage.getSlots();
175+
SlotGroup slotGroup = new SlotGroup("import", size);
176+
String[] matrix = new String[size];
177+
char key = 'I';
178+
Arrays.fill(matrix, String.valueOf(key));
179+
return SlotGroupWidget.builder()
180+
.matrix(matrix)
181+
.key(key, i -> {
182+
ModularSlot slot = new ModularSlot(importItems.storage, i);
183+
ItemSlotSyncHandler syncHandler = new ItemSlotSyncHandler(slot.slotGroup(slotGroup));
184+
syncManager.syncValue("import", i, syncHandler);
185+
return new ItemSlot()
186+
.syncHandler("import", i)
187+
.background(theme.getItemSlotTheme().getTheme().getBackground(),
188+
(i == 0) ? GTGuiTextures.PRIMITIVE_INGOT_OVERLAY : (i == 1) ?
189+
GTGuiTextures.PRIMITIVE_DUST_OVERLAY :
190+
GTGuiTextures.PRIMITIVE_FURNACE_OVERLAY);
191+
})
192+
.build();
193+
}
194+
195+
private SlotGroupWidget createExportItemSlot(PanelSyncManager syncManager, ITheme theme) {
196+
int size = exportItems.storage.getSlots();
197+
SlotGroup slotGroup = new SlotGroup("export", size);
198+
String[] matrix = new String[1];
199+
char key = 'I';
200+
matrix[0] = String.valueOf(key).repeat(size);
201+
return SlotGroupWidget.builder()
202+
.matrix(matrix)
203+
.key(key, i -> {
204+
ModularSlot slot = new ModularSlot(exportItems.storage, i);
205+
slot.accessibility(false, true);
206+
ItemSlotSyncHandler syncHandler = new ItemSlotSyncHandler(slot.slotGroup(slotGroup));
207+
syncManager.syncValue("export", i, syncHandler);
208+
return new ItemSlot()
209+
.syncHandler("export", i)
210+
.background(theme.getItemSlotTheme().getTheme().getBackground(),
211+
(i == 0) ? GTGuiTextures.PRIMITIVE_INGOT_OVERLAY :
212+
GTGuiTextures.PRIMITIVE_DUST_OVERLAY);
213+
})
214+
.build();
175215
}
176216

177217
@Override

src/main/java/com/gregtechceu/gtceu/common/mui/GTGuiTextures.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,8 @@ public static class IDs {
289289
public static final UITexture DUST_OVERLAY = fullImage("textures/gui/overlay/dust_overlay.png", ColorType.DEFAULT);
290290
public static final UITexture DUST_OVERLAY_BRONZE = fullImage("textures/gui/overlay/dust_overlay_bronze.png");
291291
public static final UITexture DUST_OVERLAY_STEEL = fullImage("textures/gui/overlay/dust_overlay_steel.png");
292+
public static final UITexture PRIMITIVE_DUST_OVERLAY = fullImage(
293+
"textures/gui/primitive/overlay_primitive_dust.png", ColorType.DEFAULT);
292294
public static final UITexture EXTRACTOR_OVERLAY = fullImage("textures/gui/overlay/extractor_overlay.png",
293295
ColorType.DEFAULT);
294296
public static final UITexture EXTRACTOR_OVERLAY_BRONZE = fullImage(
@@ -306,6 +308,9 @@ public static class IDs {
306308
ColorType.DEFAULT);
307309
public static final UITexture FURNACE_OVERLAY_BRONZE = fullImage("textures/gui/overlay/furnace_overlay_bronze.png");
308310
public static final UITexture FURNACE_OVERLAY_STEEL = fullImage("textures/gui/overlay/furnace_overlay_steel.png");
311+
public static final UITexture PRIMITIVE_FURNACE_OVERLAY = fullImage(
312+
"textures/gui/primitive/overlay_primitive_furnace.png",
313+
ColorType.DEFAULT);
309314
public static final UITexture HAMMER_OVERLAY = fullImage("textures/gui/overlay/hammer_overlay.png",
310315
ColorType.DEFAULT);
311316
public static final UITexture HAMMER_OVERLAY_BRONZE = fullImage("textures/gui/overlay/hammer_overlay_bronze.png");
@@ -324,6 +329,9 @@ public static class IDs {
324329
public static final UITexture IN_SLOT_OVERLAY_STEEL = fullImage("textures/gui/overlay/in_slot_overlay_steel.png");
325330
public static final UITexture INGOT_OVERLAY = fullImage("textures/gui/overlay/ingot_overlay.png",
326331
ColorType.DEFAULT);
332+
public static final UITexture PRIMITIVE_INGOT_OVERLAY = fullImage(
333+
"textures/gui/primitive/overlay_primitive_ingot.png",
334+
ColorType.DEFAULT);
327335
public static final UITexture INT_CIRCUIT_OVERLAY = fullImage("textures/gui/overlay/int_circuit_overlay.png",
328336
ColorType.DEFAULT);
329337
public static final UITexture LENS_OVERLAY = fullImage("textures/gui/overlay/lens_overlay.png", ColorType.DEFAULT);
@@ -435,6 +443,8 @@ public static class IDs {
435443
// PROGRESS BARS
436444
public static final UITexture PROGRESS_BAR_ARC_FURNACE = progressBar(
437445
"textures/gui/progress_bar/progress_bar_arc_furnace.png", ColorType.DEFAULT);
446+
public static final UITexture PRIMITIVE_BLAST_FURNACE_PROGRESS_BAR = progressBar(
447+
"textures/gui/primitive/progress_bar_primitive_blast_furnace.png", ColorType.DEFAULT);
438448
public static final UITexture PROGRESS_BAR_ARROW = progressBar("textures/gui/progress_bar/progress_bar_arrow.png",
439449
ColorType.DEFAULT);
440450
public static final UITexture PROGRESS_BAR_ARROW_BRONZE = progressBar(

0 commit comments

Comments
 (0)