Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import com.gregtechceu.gtceu.common.machine.multiblock.primitive.PrimitiveBlastFurnaceMachine;
import com.gregtechceu.gtceu.common.machine.multiblock.primitive.PrimitivePumpMachine;
import com.gregtechceu.gtceu.common.machine.multiblock.steam.SteamParallelMultiblockMachine;
import com.gregtechceu.gtceu.common.mui.GTGuiTheme;
import com.gregtechceu.gtceu.config.ConfigHolder;
import com.gregtechceu.gtceu.utils.FormattingUtil;
import com.gregtechceu.gtceu.utils.GTUtil;
Expand Down Expand Up @@ -616,6 +617,7 @@ public class GTMultiMachines {
.build())
.workableCasingModel(GTCEu.id("block/casings/solid/machine_casing_bronze_plated_bricks"),
GTCEu.id("block/multiblock/steam_grinder"))
.themeId((i) -> GTGuiTheme.BRONZE.getId())
.register();

public static final MultiblockMachineDefinition STEAM_OVEN = REGISTRATE
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,49 +3,55 @@
import com.gregtechceu.gtceu.api.GTValues;
import com.gregtechceu.gtceu.api.capability.recipe.FluidRecipeCapability;
import com.gregtechceu.gtceu.api.capability.recipe.IO;
import com.gregtechceu.gtceu.api.gui.GuiTextures;
import com.gregtechceu.gtceu.api.gui.UITemplate;
import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity;
import com.gregtechceu.gtceu.api.machine.MetaMachine;
import com.gregtechceu.gtceu.api.machine.feature.multiblock.IDisplayUIMachine;
import com.gregtechceu.gtceu.api.machine.feature.IMuiMachine;
import com.gregtechceu.gtceu.api.machine.multiblock.PartAbility;
import com.gregtechceu.gtceu.api.machine.multiblock.WorkableMultiblockMachine;
import com.gregtechceu.gtceu.api.machine.steam.SteamEnergyRecipeHandler;
import com.gregtechceu.gtceu.api.machine.trait.NotifiableFluidTank;
import com.gregtechceu.gtceu.api.machine.trait.RecipeHandlerList;
import com.gregtechceu.gtceu.api.mui.base.ITheme;
import com.gregtechceu.gtceu.api.mui.base.drawable.IKey;
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.utils.Alignment;
import com.gregtechceu.gtceu.api.mui.value.LongValue;
import com.gregtechceu.gtceu.api.mui.value.sync.*;
import com.gregtechceu.gtceu.api.mui.widgets.TextWidget;
import com.gregtechceu.gtceu.api.mui.widgets.layout.Flow;
import com.gregtechceu.gtceu.api.recipe.GTRecipe;
import com.gregtechceu.gtceu.api.recipe.RecipeHelper;
import com.gregtechceu.gtceu.api.recipe.content.ContentModifier;
import com.gregtechceu.gtceu.api.recipe.modifier.ModifierFunction;
import com.gregtechceu.gtceu.api.recipe.modifier.ParallelLogic;
import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier;
import com.gregtechceu.gtceu.client.mui.screen.ModularPanel;
import com.gregtechceu.gtceu.client.mui.screen.UISettings;
import com.gregtechceu.gtceu.common.data.GTMaterials;
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.IGuiTexture;
import com.lowdragmc.lowdraglib.gui.widget.ComponentPanelWidget;
import com.lowdragmc.lowdraglib.gui.widget.DraggableScrollableWidgetGroup;
import com.lowdragmc.lowdraglib.gui.widget.LabelWidget;

import net.minecraft.ChatFormatting;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.Style;
import net.minecraft.world.entity.player.Player;

import lombok.Getter;
import lombok.Setter;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;

import java.util.ArrayList;
import java.util.List;

import javax.annotation.ParametersAreNonnullByDefault;

@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
public class SteamParallelMultiblockMachine extends WorkableMultiblockMachine implements IDisplayUIMachine {
public class SteamParallelMultiblockMachine extends WorkableMultiblockMachine implements IMuiMachine {

@Getter
@Setter
Expand Down Expand Up @@ -126,28 +132,36 @@ public static ModifierFunction recipeModifier(@NotNull MetaMachine machine, @Not
.build();
}

@Override
public void addDisplayText(List<Component> textList) {
IDisplayUIMachine.super.addDisplayText(textList);
private LongValue.Dynamic getStored(PanelSyncManager syncManager) {
LongSyncValue stored = new LongSyncValue(() -> steamEnergy.getStored(), ((ignored) -> {}));
syncManager.syncValue("stored", stored);
return new LongValue.Dynamic(stored::getLongValue, stored::setLongValue);
}

// @Override
public void addDisplayText(List<Component> textList, Long stored, Long capacity) {
// IDisplayUIMachine.super.addDisplayText(textList);
Style STYLE_WHITE = Style.EMPTY.withColor(ChatFormatting.WHITE);
if (isFormed()) {
if (steamEnergy != null && steamEnergy.getCapacity() > 0) {
long steamStored = steamEnergy.getStored();
textList.add(Component.translatable("gtceu.multiblock.steam.steam_stored", steamStored,
steamEnergy.getCapacity()));
if (stored != -1 && capacity > 0) {
textList.add(Component.translatable("gtceu.multiblock.steam.steam_stored", stored,
capacity).setStyle(STYLE_WHITE));
}

if (!isWorkingEnabled()) {
textList.add(Component.translatable("gtceu.multiblock.work_paused"));

} else if (isActive()) {
textList.add(Component.translatable("gtceu.multiblock.running"));
if (maxParallels > 1) textList.add(Component.translatable("gtceu.multiblock.parallel", maxParallels));
textList.add(Component.translatable("gtceu.multiblock.running")
.setStyle(STYLE_WHITE));
if (maxParallels > 1) textList
.add(Component.translatable("gtceu.multiblock.parallel", maxParallels).setStyle(STYLE_WHITE));
int currentProgress = (int) (recipeLogic.getProgressPercent() * 100);
double maxInSec = (float) recipeLogic.getDuration() / 20.0f;
double currentInSec = (float) recipeLogic.getProgress() / 20.0f;
textList.add(
Component.translatable("gtceu.multiblock.progress", String.format("%.2f", (float) currentInSec),
String.format("%.2f", (float) maxInSec), currentProgress));
String.format("%.2f", (float) maxInSec), currentProgress).setStyle(STYLE_WHITE));
} else {
textList.add(Component.translatable("gtceu.multiblock.idling"));
}
Expand All @@ -156,26 +170,60 @@ public void addDisplayText(List<Component> textList) {
textList.add(Component.translatable("gtceu.multiblock.steam.low_steam")
.setStyle(Style.EMPTY.withColor(ChatFormatting.RED)));
}
}
} else textList.add(Component.translatable("gtceu.multiblock.invalid_structure")
.setStyle(STYLE_WHITE));
}

@Override
public IGuiTexture getScreenTexture() {
return GuiTextures.DISPLAY_STEAM.get(ConfigHolder.INSTANCE.machines.steelSteamMultiblocks);
}

@Override
public ModularUI createUI(Player entityPlayer) {
var screen = new DraggableScrollableWidgetGroup(7, 4, 162, 121).setBackground(getScreenTexture());
screen.addWidget(new LabelWidget(4, 5, self().getBlockState().getBlock().getDescriptionId()));
screen.addWidget(new ComponentPanelWidget(4, 17, this::addDisplayText)
.setMaxWidthLimit(150)
.clickHandler(this::handleDisplayClick));
return new ModularUI(176, 216, this, entityPlayer)
.background(GuiTextures.BACKGROUND_STEAM.get(ConfigHolder.INSTANCE.machines.steelSteamMultiblocks))
.widget(screen)
.widget(UITemplate.bindPlayerInventory(entityPlayer.getInventory(),
GuiTextures.SLOT_STEAM.get(ConfigHolder.INSTANCE.machines.steelSteamMultiblocks), 7, 134,
true));
public ModularPanel buildUI(PosGuiData data, PanelSyncManager syncManager, UISettings settings) {
ITheme theme = ThemeAPI.INSTANCE.getTheme(getDefinition().getThemeId());
LongSyncValue stored = new LongSyncValue(() -> (steamEnergy == null) ? -1L : steamEnergy.getStored(),
(ignored) -> {});
LongSyncValue capacity = new LongSyncValue(() -> (steamEnergy == null) ? -1L : steamEnergy.getCapacity(),
(ignored) -> {});
syncManager.syncValue("stored", stored);
syncManager.syncValue("capacity", capacity);
return new ModularPanel(getDefinition().getName())
// size(200, 172)
.child(GTMuiWidgets.createTitleBar(getDefinition(), 176,
(UITexture) theme.getPanelTheme().getTheme().getBackground()))
.bindPlayerInventory()
.child(Flow.row()
.coverChildrenHeight()
.margin(5)
.childPadding(5)
.child(Flow.column()
.crossAxisAlignment(Alignment.CrossAxis.START)
.padding(5)
.background(GTGuiTextures.DISPLAY_BRONZE)
.height(80)
.child(new TextWidget<>(IKey.dynamic(() -> {
List<Component> text = new ArrayList<>();
addDisplayText(text, stored.getValue(), capacity.getValue());
return text.stream()
.map(Component::copy)
.reduce((a, b) -> a.append("\n").append(b))
.orElse(Component.empty());
})))));
}
/*
* @Override
* public IGuiTexture getScreenTexture() {
* return GuiTextures.DISPLAY_STEAM.get(ConfigHolder.INSTANCE.machines.steelSteamMultiblocks);
* }
*
* @Override
* public ModularUI createUI(Player entityPlayer) {
* var screen = new DraggableScrollableWidgetGroup(7, 4, 162, 121).setBackground(getScreenTexture());
* screen.addWidget(new LabelWidget(4, 5, self().getBlockState().getBlock().getDescriptionId()));
* screen.addWidget(new ComponentPanelWidget(4, 17, this::addDisplayText)
* .setMaxWidthLimit(150)
* .clickHandler(this::handleDisplayClick));
* return new ModularUI(176, 216, this, entityPlayer)
* .background(GuiTextures.BACKGROUND_STEAM.get(ConfigHolder.INSTANCE.machines.steelSteamMultiblocks))
* .widget(screen)
* .widget(UITemplate.bindPlayerInventory(entityPlayer.getInventory(),
* GuiTextures.SLOT_STEAM.get(ConfigHolder.INSTANCE.machines.steelSteamMultiblocks), 7, 134,
* true));
* }
*/
}