Skip to content
Open
Show file tree
Hide file tree
Changes from 5 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
1 change: 1 addition & 0 deletions src/generated/resources/assets/gtceu/lang/en_ud.json
Original file line number Diff line number Diff line change
Expand Up @@ -3552,6 +3552,7 @@
"gtceu.multiblock.turbine.energy_per_tick_maxed": "ʇ/∩Ǝ %s :ʇndʇnO ʎbɹǝuƎ",
"gtceu.multiblock.turbine.fuel_amount": ")%s( Ꞁ%s :ʇunoɯⱯ ןǝnℲ",
"gtceu.multiblock.turbine.fuel_needed": "sʞɔıʇ %s ɹǝd %s sǝɯnsuoƆ",
"gtceu.multiblock.turbine.no_rotor": "ɹoʇoᴚ buıssıW",
"gtceu.multiblock.turbine.obstructed": "pǝʇɔnɹʇsqO ǝɔɐℲ ǝuıqɹn⟘",
"gtceu.multiblock.turbine.rotor_durability": "%s%% :ʎʇıןıqɐɹnᗡ ɹoʇoᴚ",
"gtceu.multiblock.turbine.rotor_speed": "WԀᴚ %s/%s :pǝǝdS ɹoʇoᴚ",
Expand Down
1 change: 1 addition & 0 deletions src/generated/resources/assets/gtceu/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -3552,6 +3552,7 @@
"gtceu.multiblock.turbine.energy_per_tick_maxed": "Energy Output: %s EU/t",
"gtceu.multiblock.turbine.fuel_amount": "Fuel Amount: %sL (%s)",
"gtceu.multiblock.turbine.fuel_needed": "Consumes %s per %s ticks",
"gtceu.multiblock.turbine.no_rotor": "Missing Rotor",
"gtceu.multiblock.turbine.obstructed": "Turbine Face Obstructed",
"gtceu.multiblock.turbine.rotor_durability": "Rotor Durability: %s%%",
"gtceu.multiblock.turbine.rotor_speed": "Rotor Speed: %s/%s RPM",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,26 @@
import com.gregtechceu.gtceu.api.recipe.modifier.ParallelLogic;
import com.gregtechceu.gtceu.api.recipe.modifier.RecipeModifier;
import com.gregtechceu.gtceu.common.machine.multiblock.part.RotorHolderPartMachine;
import com.gregtechceu.gtceu.common.mui.GTMultiblockTextUtil;
import com.gregtechceu.gtceu.utils.FormattingUtil;

import net.minecraft.ChatFormatting;
import net.minecraft.MethodsReturnNonnullByDefault;
import net.minecraft.network.chat.Component;
import net.minecraft.network.chat.Style;

import brachy.modularui.api.drawable.Text;
import brachy.modularui.api.widget.IWidget;
import brachy.modularui.value.sync.BooleanSyncValue;
import brachy.modularui.value.sync.IntSyncValue;
import brachy.modularui.value.sync.LongSyncValue;
import brachy.modularui.value.sync.PanelSyncManager;
import lombok.Getter;
import org.jetbrains.annotations.Nullable;

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

import javax.annotation.ParametersAreNonnullByDefault;

@ParametersAreNonnullByDefault
Expand Down Expand Up @@ -117,38 +131,89 @@ public int getRotorDurabilityPercent() {
// ******* GUI ********//
//////////////////////////////////////

// @Override
// public void addDisplayText(List<Component> textList) {
// super.addDisplayText(textList);
// if (isFormed()) {
// var rotorHolder = getRotorHolder();
//
// if (rotorHolder != null && rotorHolder.getRotorEfficiency() > 0) {Expand commentComment on line L185
// textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_speed",
// FormattingUtil.formatNumbers(rotorHolder.getRotorSpeed()),
// FormattingUtil.formatNumbers(rotorHolder.getMaxRotorHolderSpeed())));
// textList.add(Component.translatable("gtceu.multiblock.turbine.efficiency",
// rotorHolder.getTotalEfficiency()));
//
// long maxProduction = getOverclockVoltage();
// long currentProduction = getCurrentProduction();
//
// if (isActive()) {
// textList.add(3, Component.translatable("gtceu.multiblock.turbine.energy_per_tick",
// FormattingUtil.formatNumbers(currentProduction),
// FormattingUtil.formatNumbers(maxProduction)));
// }
//
// int rotorDurability = rotorHolder.getRotorDurabilityPercent();
// if (rotorDurability > MIN_DURABILITY_TO_WARN) {
// textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_durability", rotorDurability));
// } else {
// textList.add(Component.translatable("gtceu.multiblock.turbine.rotor_durability", rotorDurability)
// .setStyle(Style.EMPTY.withColor(ChatFormatting.RED)));
// }
// }
// }
// }
@Override
public List<IWidget> getWidgetsForDisplay(PanelSyncManager syncManager) {
List<IWidget> widgets = new ArrayList<>();

widgets.add(GTMultiblockTextUtil.addEnergyTierLine(this, syncManager));
widgets.add(GTMultiblockTextUtil.addUnformedWarning(this, syncManager));
if (!isFormed())
Comment thread
DilithiumThoride marked this conversation as resolved.
Outdated
return widgets;

var rotorHolder = getRotorHolder();
if (!(rotorHolder != null && rotorHolder.hasRotor())) {
widgets.add(
Text.dynamic(() -> (Component.translatable("gtceu.multiblock.turbine.no_rotor"))
.setStyle(Style.EMPTY.withColor(ChatFormatting.RED)))
.asWidget()
.setEnabledIf(w -> true));
return widgets;
}

BooleanSyncValue isActive = syncManager.getOrCreateSyncHandler("isActive",
BooleanSyncValue.class,
() -> new BooleanSyncValue(this::isActive));
IntSyncValue rotorSpeed = syncManager.getOrCreateSyncHandler("rotorSpeed",
IntSyncValue.class,
() -> new IntSyncValue(rotorHolder::getRotorSpeed));
IntSyncValue maxRotorSpeed = syncManager.getOrCreateSyncHandler("maxRotorSpeed",
IntSyncValue.class,
() -> new IntSyncValue(rotorHolder::getMaxRotorHolderSpeed));
IntSyncValue totalEfficiency = syncManager.getOrCreateSyncHandler("totalEfficiency",
IntSyncValue.class,
() -> new IntSyncValue(rotorHolder::getTotalEfficiency));
LongSyncValue currentOutput = syncManager.getOrCreateSyncHandler("currentOutput",
LongSyncValue.class,
() -> new LongSyncValue(this::getCurrentProduction));
LongSyncValue maxOutput = syncManager.getOrCreateSyncHandler("maxOutput",
LongSyncValue.class,
() -> new LongSyncValue(this::getOverclockVoltage));
IntSyncValue rotorDurability = syncManager.getOrCreateSyncHandler("rotorDurability",
IntSyncValue.class,
() -> new IntSyncValue(rotorHolder::getRotorDurabilityPercent));

var rotorSpeedDisplay = Text.dynamic(() -> Component.translatable("gtceu.multiblock.turbine.rotor_speed",
FormattingUtil.formatNumbers(rotorSpeed.getIntValue()),
FormattingUtil.formatNumbers(maxRotorSpeed.getIntValue()))
.setStyle(Style.EMPTY.withColor(ChatFormatting.WHITE)))
.asWidget()
.setEnabledIf(w -> true);
var turbineEfficiencyDisplay = Text.dynamic(() -> Component.translatable("gtceu.multiblock.turbine.efficiency",
totalEfficiency.getIntValue())
.setStyle(Style.EMPTY.withColor(ChatFormatting.WHITE)))
.asWidget()
.setEnabledIf(w -> true);
var turbinePowerDisplay = Text.dynamic(() -> Component.translatable("gtceu.multiblock.turbine.energy_per_tick",
FormattingUtil.formatNumbers(currentOutput.getIntValue()),
FormattingUtil.formatNumbers(maxOutput.getIntValue()))
.setStyle(Style.EMPTY.withColor(ChatFormatting.WHITE)))
.asWidget()
.setEnabledIf(w -> isActive.getBoolValue());
var rotorDurabilityDisplay = Text
.dynamic(() -> Component.translatable("gtceu.multiblock.turbine.rotor_durability",
rotorDurability.getIntValue())
.setStyle(rotorDurability.getIntValue() > MIN_DURABILITY_TO_WARN ?
Style.EMPTY.withColor(ChatFormatting.WHITE) :
Style.EMPTY.withColor(ChatFormatting.RED)))
.asWidget()
.setEnabledIf(w -> true);

widgets.add(GTMultiblockTextUtil.addProgressLine(this, syncManager));
widgets.add(GTMultiblockTextUtil.addWorkingStatusLine(this, syncManager));
widgets.add(GTMultiblockTextUtil.addRecipeTypeField(this, syncManager));

widgets.add(rotorSpeedDisplay);
widgets.add(turbineEfficiencyDisplay);
widgets.add(turbinePowerDisplay);
widgets.add(rotorDurabilityDisplay);

widgets.addAll(getDefinition().getAdditionalDisplay().apply(this, syncManager));
widgets.add(GTMultiblockTextUtil.addTotalRunsLine(this, syncManager));
widgets.add(GTMultiblockTextUtil.addOutputLines(this, syncManager));
widgets.addAll(GTMultiblockTextUtil.addRecipeFailReasonLines(this, syncManager));

return widgets;
}

//////////////////////////////////////
// ****** Recipe Logic *******//
Expand All @@ -170,13 +235,15 @@ public static ModifierFunction recipeModifier(MetaMachine machine, GTRecipe reci
}

var rotorHolder = turbineMachine.getRotorHolder();
if (rotorHolder == null) return ModifierFunction.NULL;
if (rotorHolder == null)
return ModifierFunction.cancel(Component.translatable("gtceu.multiblock.turbine.no_rotor"));

EnergyStack EUt = recipe.getOutputEUt();
long turbineMaxVoltage = turbineMachine.getOverclockVoltage();
double holderEfficiency = rotorHolder.getTotalEfficiency() / 100.0;

if (EUt.isEmpty() || turbineMaxVoltage <= EUt.voltage() || holderEfficiency <= 0) return ModifierFunction.NULL;
if (EUt.isEmpty() || turbineMaxVoltage <= EUt.voltage() || holderEfficiency <= 0)
return ModifierFunction.cancel(Component.translatable("gtceu.multiblock.turbine.no_rotor"));

// get the amount of parallel required to match the desired output voltage
// Max Parallel is Ceilinged not Floored to ensure the output voltage is actually met,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public class RotorHolderPartMachine extends TieredPartMachine implements IMuiMac
public static final int SPEED_INCREMENT = 1;
public static final int SPEED_DECREMENT = 3;
@SaveField
@SyncToClient
public final NotifiableItemStackHandler inventory;
@Getter
public final int maxRotorHolderSpeed;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -891,6 +891,7 @@ protected static void init(RegistrateLangProvider provider) {
provider.add("gtceu.multiblock.turbine.efficiency", "Turbine Efficiency: %s%%");
provider.add("gtceu.multiblock.turbine.energy_per_tick", "Energy Output: %s/%s EU/t");
provider.add("gtceu.multiblock.turbine.energy_per_tick_maxed", "Energy Output: %s EU/t");
provider.add("gtceu.multiblock.turbine.no_rotor", "Missing Rotor");
provider.add("gtceu.multiblock.turbine.obstructed", "Turbine Face Obstructed");
provider.add("gtceu.multiblock.turbine.efficiency_tooltip",
"Each Rotor Holder above %s§7 adds §f10%% efficiency and multiplies EU/t by 2§7.");
Expand Down
Loading