Skip to content

Commit

Permalink
Show required energy in Quantum controller when out of power (#2707)
Browse files Browse the repository at this point in the history
Co-authored-by: M-W-K <[email protected]>
  • Loading branch information
ALongStringOfNumbers and M-W-K authored Jan 30, 2025
1 parent abc910b commit 508c3c5
Show file tree
Hide file tree
Showing 4 changed files with 138 additions and 7 deletions.
19 changes: 18 additions & 1 deletion src/main/java/gregtech/integration/hwyla/HWYLAModule.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,23 @@
import gregtech.api.modules.GregTechModule;
import gregtech.api.util.Mods;
import gregtech.integration.IntegrationSubmodule;
import gregtech.integration.hwyla.provider.*;
import gregtech.integration.hwyla.provider.ActiveTransformerDataProvider;
import gregtech.integration.hwyla.provider.BatteryBufferDataProvider;
import gregtech.integration.hwyla.provider.BlockOreDataProvider;
import gregtech.integration.hwyla.provider.ControllableDataProvider;
import gregtech.integration.hwyla.provider.ConverterDataProvider;
import gregtech.integration.hwyla.provider.DiodeDataProvider;
import gregtech.integration.hwyla.provider.ElectricContainerDataProvider;
import gregtech.integration.hwyla.provider.LampDataProvider;
import gregtech.integration.hwyla.provider.MaintenanceDataProvider;
import gregtech.integration.hwyla.provider.MultiRecipeMapDataProvider;
import gregtech.integration.hwyla.provider.MultiblockDataProvider;
import gregtech.integration.hwyla.provider.PrimitivePumpDataProvider;
import gregtech.integration.hwyla.provider.QuantumStorageProvider;
import gregtech.integration.hwyla.provider.RecipeLogicDataProvider;
import gregtech.integration.hwyla.provider.SteamBoilerDataProvider;
import gregtech.integration.hwyla.provider.TransformerDataProvider;
import gregtech.integration.hwyla.provider.WorkableDataProvider;
import gregtech.modules.GregTechModules;

import net.minecraft.item.ItemStack;
Expand Down Expand Up @@ -42,6 +58,7 @@ public void register(IWailaRegistrar registrar) {
LampDataProvider.INSTANCE.register(registrar);
ActiveTransformerDataProvider.INSTANCE.register(registrar);
BatteryBufferDataProvider.INSTANCE.register(registrar);
QuantumStorageProvider.INSTANCE.register(registrar);
}

/** Render an ItemStack. */
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
package gregtech.integration.hwyla.provider;

import gregtech.api.GTValues;
import gregtech.api.capability.IQuantumController;
import gregtech.api.capability.IQuantumStorage;
import gregtech.api.metatileentity.interfaces.IGregTechTileEntity;
import gregtech.api.util.GTUtility;

import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayerMP;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.text.TextFormatting;
import net.minecraft.world.World;

import mcp.mobius.waila.api.IWailaConfigHandler;
import mcp.mobius.waila.api.IWailaDataAccessor;
import mcp.mobius.waila.api.IWailaDataProvider;
import mcp.mobius.waila.api.IWailaRegistrar;
import org.jetbrains.annotations.NotNull;

import java.util.List;

public class QuantumStorageProvider implements IWailaDataProvider {

public static final QuantumStorageProvider INSTANCE = new QuantumStorageProvider();

public void register(@NotNull IWailaRegistrar registrar) {
registrar.registerBodyProvider(this, IGregTechTileEntity.class);
registrar.registerNBTProvider(this, IGregTechTileEntity.class);
registrar.addConfig(GTValues.MOD_NAME, "gregtech.quantum_storage");
}

@NotNull
@Override
public NBTTagCompound getNBTData(EntityPlayerMP player, TileEntity te, NBTTagCompound tag, World world,
BlockPos pos) {
if (te instanceof IGregTechTileEntity gtte) {
if (gtte.getMetaTileEntity() instanceof IQuantumStorage<?>storage &&
(storage.getType() == IQuantumStorage.Type.ITEM ||
storage.getType() == IQuantumStorage.Type.FLUID)) {
var controller = storage.getQuantumController();
int status = 0;

if (controller != null) {
if (controller.isPowered()) {
status = 1;
} else {
status = 2;
}
}

NBTTagCompound subTag = new NBTTagCompound();
subTag.setInteger("Connection", status);
tag.setTag("gregtech.IQuantumStorageController", subTag);
}
}

return tag;
}

@NotNull
@Override
public List<String> getWailaBody(ItemStack itemStack, List<String> tooltip, IWailaDataAccessor accessor,
IWailaConfigHandler config) {
if (!config.getConfig("gregtech.quantum_storage") ||
!(accessor.getTileEntity() instanceof IGregTechTileEntity gtte)) {
return tooltip;
}

if (gtte.getMetaTileEntity() instanceof IQuantumController controller) {
String eutText = configureEnergyUsage(controller.getEnergyUsage() / 10);
if (controller.getCount(IQuantumStorage.Type.ENERGY) == 0) {
tooltip.add(I18n.format("gregtech.top.quantum_controller.no_hatches"));
tooltip.add(I18n.format("gregtech.top.energy_required") + eutText);
} else if (!controller.isPowered()) {
tooltip.add(I18n.format("gregtech.top.quantum_controller.no_power"));
tooltip.add(I18n.format("gregtech.top.energy_required") + eutText);
} else {
tooltip.add(I18n.format("gregtech.top.energy_consumption") + eutText);
}
} else if (gtte.getMetaTileEntity() instanceof IQuantumStorage<?>storage &&
(storage.getType() == IQuantumStorage.Type.ITEM ||
storage.getType() == IQuantumStorage.Type.FLUID)) {
if (accessor.getNBTData().hasKey("gregtech.IQuantumStorageController")) {
NBTTagCompound tag = accessor.getNBTData()
.getCompoundTag("gregtech.IQuantumStorageController");
int connection = tag.getInteger("Connection");
String status;

switch (connection) {
case 1 -> status = I18n.format("gregtech.top.quantum_status.powered");
case 2 -> status = I18n.format("gregtech.top.quantum_status.connected");
default -> status = I18n.format("gregtech.top.quantum_status.disconnected");
}

status = I18n.format("gregtech.top.quantum_status.label") +
status;

tooltip.add(status);
}
}

return tooltip;
}

public String configureEnergyUsage(long EUs) {
return TextFormatting.RED.toString() + EUs + " EU/t" + TextFormatting.GREEN +
" (" + GTValues.VNF[GTUtility.getTierByVoltage(EUs)] + TextFormatting.GREEN + ")";
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,15 @@ public void addProbeInfo(ProbeMode mode, IProbeInfo probeInfo, EntityPlayer play
if (blockState.getBlock().hasTileEntity(blockState) &&
world.getTileEntity(data.getPos()) instanceof IGregTechTileEntity gtte) {
if (gtte.getMetaTileEntity() instanceof IQuantumController controller) {
String eutText = configureEnergyUsage(controller.getEnergyUsage() / 10);
if (controller.getCount(IQuantumStorage.Type.ENERGY) == 0) {
probeInfo.text("{*gregtech.top.quantum_controller.no_hatches*}");
probeInfo.text(TextStyleClass.INFO + "{*gregtech.top.energy_required*} " + eutText);
} else if (!controller.isPowered()) {
probeInfo.text("{*gregtech.top.quantum_controller.no_power*}");
probeInfo.text(TextStyleClass.INFO + "{*gregtech.top.energy_required*} " + eutText);
} else {
long usage = controller.getEnergyUsage();
configureEnergyUsage(usage / 10, probeInfo);
probeInfo.text(TextStyleClass.INFO + "{*gregtech.top.energy_consumption*} " + eutText);
}
} else if (gtte.getMetaTileEntity() instanceof IQuantumStorage<?>storage &&
(storage.getType() == IQuantumStorage.Type.ITEM ||
Expand All @@ -59,10 +61,8 @@ public void addProbeInfo(ProbeMode mode, IProbeInfo probeInfo, EntityPlayer play
"{*" + status + "*}";
}

public void configureEnergyUsage(long EUs, IProbeInfo probeInfo) {
if (EUs == 0) return;
String text = TextFormatting.RED.toString() + EUs + TextStyleClass.INFO + " EU/t" + TextFormatting.GREEN +
public String configureEnergyUsage(long EUs) {
return TextFormatting.RED.toString() + EUs + TextStyleClass.INFO + " EU/t" + TextFormatting.GREEN +
" (" + GTValues.VNF[GTUtility.getTierByVoltage(EUs)] + TextFormatting.GREEN + ")";
probeInfo.text(TextStyleClass.INFO + "{*gregtech.top.energy_consumption*} " + text);
}
}
1 change: 1 addition & 0 deletions src/main/resources/assets/gregtech/lang/en_us.lang
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ gregtech.top.working_disabled=Working Disabled

gregtech.top.energy_consumption=Using
gregtech.top.energy_production=Producing
gregtech.top.energy_required=Requires

gregtech.top.transform_up=Step Up
gregtech.top.transform_down=Step Down
Expand Down

0 comments on commit 508c3c5

Please sign in to comment.