Skip to content

Commit 508c3c5

Browse files
Show required energy in Quantum controller when out of power (#2707)
Co-authored-by: M-W-K <[email protected]>
1 parent abc910b commit 508c3c5

File tree

4 files changed

+138
-7
lines changed

4 files changed

+138
-7
lines changed

src/main/java/gregtech/integration/hwyla/HWYLAModule.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,23 @@
44
import gregtech.api.modules.GregTechModule;
55
import gregtech.api.util.Mods;
66
import gregtech.integration.IntegrationSubmodule;
7-
import gregtech.integration.hwyla.provider.*;
7+
import gregtech.integration.hwyla.provider.ActiveTransformerDataProvider;
8+
import gregtech.integration.hwyla.provider.BatteryBufferDataProvider;
9+
import gregtech.integration.hwyla.provider.BlockOreDataProvider;
10+
import gregtech.integration.hwyla.provider.ControllableDataProvider;
11+
import gregtech.integration.hwyla.provider.ConverterDataProvider;
12+
import gregtech.integration.hwyla.provider.DiodeDataProvider;
13+
import gregtech.integration.hwyla.provider.ElectricContainerDataProvider;
14+
import gregtech.integration.hwyla.provider.LampDataProvider;
15+
import gregtech.integration.hwyla.provider.MaintenanceDataProvider;
16+
import gregtech.integration.hwyla.provider.MultiRecipeMapDataProvider;
17+
import gregtech.integration.hwyla.provider.MultiblockDataProvider;
18+
import gregtech.integration.hwyla.provider.PrimitivePumpDataProvider;
19+
import gregtech.integration.hwyla.provider.QuantumStorageProvider;
20+
import gregtech.integration.hwyla.provider.RecipeLogicDataProvider;
21+
import gregtech.integration.hwyla.provider.SteamBoilerDataProvider;
22+
import gregtech.integration.hwyla.provider.TransformerDataProvider;
23+
import gregtech.integration.hwyla.provider.WorkableDataProvider;
824
import gregtech.modules.GregTechModules;
925

1026
import net.minecraft.item.ItemStack;
@@ -42,6 +58,7 @@ public void register(IWailaRegistrar registrar) {
4258
LampDataProvider.INSTANCE.register(registrar);
4359
ActiveTransformerDataProvider.INSTANCE.register(registrar);
4460
BatteryBufferDataProvider.INSTANCE.register(registrar);
61+
QuantumStorageProvider.INSTANCE.register(registrar);
4562
}
4663

4764
/** Render an ItemStack. */
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package gregtech.integration.hwyla.provider;
2+
3+
import gregtech.api.GTValues;
4+
import gregtech.api.capability.IQuantumController;
5+
import gregtech.api.capability.IQuantumStorage;
6+
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity;
7+
import gregtech.api.util.GTUtility;
8+
9+
import net.minecraft.client.resources.I18n;
10+
import net.minecraft.entity.player.EntityPlayerMP;
11+
import net.minecraft.item.ItemStack;
12+
import net.minecraft.nbt.NBTTagCompound;
13+
import net.minecraft.tileentity.TileEntity;
14+
import net.minecraft.util.math.BlockPos;
15+
import net.minecraft.util.text.TextFormatting;
16+
import net.minecraft.world.World;
17+
18+
import mcp.mobius.waila.api.IWailaConfigHandler;
19+
import mcp.mobius.waila.api.IWailaDataAccessor;
20+
import mcp.mobius.waila.api.IWailaDataProvider;
21+
import mcp.mobius.waila.api.IWailaRegistrar;
22+
import org.jetbrains.annotations.NotNull;
23+
24+
import java.util.List;
25+
26+
public class QuantumStorageProvider implements IWailaDataProvider {
27+
28+
public static final QuantumStorageProvider INSTANCE = new QuantumStorageProvider();
29+
30+
public void register(@NotNull IWailaRegistrar registrar) {
31+
registrar.registerBodyProvider(this, IGregTechTileEntity.class);
32+
registrar.registerNBTProvider(this, IGregTechTileEntity.class);
33+
registrar.addConfig(GTValues.MOD_NAME, "gregtech.quantum_storage");
34+
}
35+
36+
@NotNull
37+
@Override
38+
public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world,
39+
BlockPos pos) {
40+
if (te instanceof IGregTechTileEntity gtte) {
41+
if (gtte.getMetaTileEntity() instanceof IQuantumStorage<?>storage &&
42+
(storage.getType() == IQuantumStorage.Type.ITEM ||
43+
storage.getType() == IQuantumStorage.Type.FLUID)) {
44+
var controller = storage.getQuantumController();
45+
int status = 0;
46+
47+
if (controller != null) {
48+
if (controller.isPowered()) {
49+
status = 1;
50+
} else {
51+
status = 2;
52+
}
53+
}
54+
55+
NBTTagCompound subTag = new NBTTagCompound();
56+
subTag.setInteger("Connection", status);
57+
tag.setTag("gregtech.IQuantumStorageController", subTag);
58+
}
59+
}
60+
61+
return tag;
62+
}
63+
64+
@NotNull
65+
@Override
66+
public List<String> getWailaBody(ItemStack itemStack, List<String> tooltip, IWailaDataAccessor accessor,
67+
IWailaConfigHandler config) {
68+
if (!config.getConfig("gregtech.quantum_storage") ||
69+
!(accessor.getTileEntity() instanceof IGregTechTileEntity gtte)) {
70+
return tooltip;
71+
}
72+
73+
if (gtte.getMetaTileEntity() instanceof IQuantumController controller) {
74+
String eutText = configureEnergyUsage(controller.getEnergyUsage() / 10);
75+
if (controller.getCount(IQuantumStorage.Type.ENERGY) == 0) {
76+
tooltip.add(I18n.format("gregtech.top.quantum_controller.no_hatches"));
77+
tooltip.add(I18n.format("gregtech.top.energy_required") + eutText);
78+
} else if (!controller.isPowered()) {
79+
tooltip.add(I18n.format("gregtech.top.quantum_controller.no_power"));
80+
tooltip.add(I18n.format("gregtech.top.energy_required") + eutText);
81+
} else {
82+
tooltip.add(I18n.format("gregtech.top.energy_consumption") + eutText);
83+
}
84+
} else if (gtte.getMetaTileEntity() instanceof IQuantumStorage<?>storage &&
85+
(storage.getType() == IQuantumStorage.Type.ITEM ||
86+
storage.getType() == IQuantumStorage.Type.FLUID)) {
87+
if (accessor.getNBTData().hasKey("gregtech.IQuantumStorageController")) {
88+
NBTTagCompound tag = accessor.getNBTData()
89+
.getCompoundTag("gregtech.IQuantumStorageController");
90+
int connection = tag.getInteger("Connection");
91+
String status;
92+
93+
switch (connection) {
94+
case 1 -> status = I18n.format("gregtech.top.quantum_status.powered");
95+
case 2 -> status = I18n.format("gregtech.top.quantum_status.connected");
96+
default -> status = I18n.format("gregtech.top.quantum_status.disconnected");
97+
}
98+
99+
status = I18n.format("gregtech.top.quantum_status.label") +
100+
status;
101+
102+
tooltip.add(status);
103+
}
104+
}
105+
106+
return tooltip;
107+
}
108+
109+
public String configureEnergyUsage(long EUs) {
110+
return TextFormatting.RED.toString() + EUs + " EU/t" + TextFormatting.GREEN +
111+
" (" + GTValues.VNF[GTUtility.getTierByVoltage(EUs)] + TextFormatting.GREEN + ")";
112+
}
113+
}

src/main/java/gregtech/integration/theoneprobe/provider/QuantumStorageProvider.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,15 @@ public void addProbeInfo(ProbeMode mode, IProbeInfo probeInfo, EntityPlayer play
3131
if (blockState.getBlock().hasTileEntity(blockState) &&
3232
world.getTileEntity(data.getPos()) instanceof IGregTechTileEntity gtte) {
3333
if (gtte.getMetaTileEntity() instanceof IQuantumController controller) {
34+
String eutText = configureEnergyUsage(controller.getEnergyUsage() / 10);
3435
if (controller.getCount(IQuantumStorage.Type.ENERGY) == 0) {
3536
probeInfo.text("{*gregtech.top.quantum_controller.no_hatches*}");
37+
probeInfo.text(TextStyleClass.INFO + "{*gregtech.top.energy_required*} " + eutText);
3638
} else if (!controller.isPowered()) {
3739
probeInfo.text("{*gregtech.top.quantum_controller.no_power*}");
40+
probeInfo.text(TextStyleClass.INFO + "{*gregtech.top.energy_required*} " + eutText);
3841
} else {
39-
long usage = controller.getEnergyUsage();
40-
configureEnergyUsage(usage / 10, probeInfo);
42+
probeInfo.text(TextStyleClass.INFO + "{*gregtech.top.energy_consumption*} " + eutText);
4143
}
4244
} else if (gtte.getMetaTileEntity() instanceof IQuantumStorage<?>storage &&
4345
(storage.getType() == IQuantumStorage.Type.ITEM ||
@@ -59,10 +61,8 @@ public void addProbeInfo(ProbeMode mode, IProbeInfo probeInfo, EntityPlayer play
5961
"{*" + status + "*}";
6062
}
6163

62-
public void configureEnergyUsage(long EUs, IProbeInfo probeInfo) {
63-
if (EUs == 0) return;
64-
String text = TextFormatting.RED.toString() + EUs + TextStyleClass.INFO + " EU/t" + TextFormatting.GREEN +
64+
public String configureEnergyUsage(long EUs) {
65+
return TextFormatting.RED.toString() + EUs + TextStyleClass.INFO + " EU/t" + TextFormatting.GREEN +
6566
" (" + GTValues.VNF[GTUtility.getTierByVoltage(EUs)] + TextFormatting.GREEN + ")";
66-
probeInfo.text(TextStyleClass.INFO + "{*gregtech.top.energy_consumption*} " + text);
6767
}
6868
}

src/main/resources/assets/gregtech/lang/en_us.lang

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ gregtech.top.working_disabled=Working Disabled
6868

6969
gregtech.top.energy_consumption=Using
7070
gregtech.top.energy_production=Producing
71+
gregtech.top.energy_required=Requires
7172

7273
gregtech.top.transform_up=Step Up
7374
gregtech.top.transform_down=Step Down

0 commit comments

Comments
 (0)