Skip to content

Commit 58457f2

Browse files
authored
Jade battery provider (#4317)
1 parent dc67cd7 commit 58457f2

File tree

7 files changed

+166
-0
lines changed

7 files changed

+166
-0
lines changed

src/generated/resources/assets/gtceu/lang/en_ud.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1919,6 +1919,7 @@
19191919
"config.gtceu.option.yOffset": "ʇǝsɟɟOʎ",
19201920
"config.gtceu.option.zombieSpawnWithSabers": "sɹǝqɐSɥʇıMuʍɐdSǝıqɯoz",
19211921
"config.jade.plugin_gtceu.auto_output_info": "oɟuI ʇndʇnO oʇnⱯ ]nƎƆ⟘⅁[",
1922+
"config.jade.plugin_gtceu.battery_info": "oɟuı ʎɹǝʇʇɐᗺ ]nƎƆ⟘⅁[",
19221923
"config.jade.plugin_gtceu.cable_info": "oɟuI ǝןqɐƆ ]nƎƆ⟘⅁[",
19231924
"config.jade.plugin_gtceu.controllable_provider": "ǝןqɐןןoɹʇuoƆ ]nƎƆ⟘⅁[",
19241925
"config.jade.plugin_gtceu.data_bank": "oɟuI ʞuɐᗺ ɐʇɐᗡ ]nƎƆ⟘⅁[",
@@ -2504,12 +2505,20 @@
25042505
"gtceu.item_pipe.priority": "%dɟ§ :ʎʇıɹoıɹԀ6§",
25052506
"gtceu.jade.amperage_use": "Ɐ %s",
25062507
"gtceu.jade.at": " @ ",
2508+
"gtceu.jade.changes_eu_sec": "s/∩Ǝ %s",
25072509
"gtceu.jade.cleaned_this_second": "s/%s :pɹɐzɐɥ pǝuɐǝןƆ",
2510+
"gtceu.jade.days": "sʎɐp %s",
25082511
"gtceu.jade.energy_stored": "∩Ǝ %d / %d",
25092512
"gtceu.jade.fluid_use": "ʇ/ᗺɯ %s",
2513+
"gtceu.jade.hours": "sɹnoɥ %s",
2514+
"gtceu.jade.minutes": "sǝʇnuıɯ %s",
25102515
"gtceu.jade.progress_computation": "∩MƆ %s / %s",
25112516
"gtceu.jade.progress_sec": "s %s / %s",
25122517
"gtceu.jade.progress_tick": "ʇ %s / %s",
2518+
"gtceu.jade.remaining_charge_time": "%s :pǝbɹɐɥɔ ןıʇu∩",
2519+
"gtceu.jade.remaining_discharge_time": "%s :ʎʇdɯǝ ןıʇu∩",
2520+
"gtceu.jade.seconds": "spuoɔǝs %s",
2521+
"gtceu.jade.years": "sɹɐǝʎ %s",
25132522
"gtceu.jei.bedrock_fluid.heavy_oil_deposit": "ʇısodǝᗡ ןıO ʎʌɐǝH",
25142523
"gtceu.jei.bedrock_fluid.lava_deposit": "ʇısodǝᗡ ɐʌɐꞀ",
25152524
"gtceu.jei.bedrock_fluid.light_oil_deposit": "ʇısodǝᗡ ןıO ʇɥbıꞀ",

src/generated/resources/assets/gtceu/lang/en_us.json

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1919,6 +1919,7 @@
19191919
"config.gtceu.option.yOffset": "yOffset",
19201920
"config.gtceu.option.zombieSpawnWithSabers": "zombieSpawnWithSabers",
19211921
"config.jade.plugin_gtceu.auto_output_info": "[GTCEu] Auto Output Info",
1922+
"config.jade.plugin_gtceu.battery_info": "[GTCEu] Battery info",
19221923
"config.jade.plugin_gtceu.cable_info": "[GTCEu] Cable Info",
19231924
"config.jade.plugin_gtceu.controllable_provider": "[GTCEu] Controllable",
19241925
"config.jade.plugin_gtceu.data_bank": "[GTCEu] Data Bank Info",
@@ -2504,12 +2505,20 @@
25042505
"gtceu.item_pipe.priority": "§9Priority: §f%d",
25052506
"gtceu.jade.amperage_use": "%s A",
25062507
"gtceu.jade.at": " @ ",
2508+
"gtceu.jade.changes_eu_sec": "%s EU/s",
25072509
"gtceu.jade.cleaned_this_second": "Cleaned hazard: %s/s",
2510+
"gtceu.jade.days": "%s days",
25082511
"gtceu.jade.energy_stored": "%d / %d EU",
25092512
"gtceu.jade.fluid_use": "%s mB/t",
2513+
"gtceu.jade.hours": "%s hours",
2514+
"gtceu.jade.minutes": "%s minutes",
25102515
"gtceu.jade.progress_computation": "%s / %s CWU",
25112516
"gtceu.jade.progress_sec": "%s / %s s",
25122517
"gtceu.jade.progress_tick": "%s / %s t",
2518+
"gtceu.jade.remaining_charge_time": "Until charged: %s",
2519+
"gtceu.jade.remaining_discharge_time": "Until empty: %s",
2520+
"gtceu.jade.seconds": "%s seconds",
2521+
"gtceu.jade.years": "%s years",
25132522
"gtceu.jei.bedrock_fluid.heavy_oil_deposit": "Heavy Oil Deposit",
25142523
"gtceu.jei.bedrock_fluid.lava_deposit": "Lava Deposit",
25152524
"gtceu.jei.bedrock_fluid.light_oil_deposit": "Light Oil Deposit",

src/main/java/com/gregtechceu/gtceu/data/lang/IntegrationLang.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,14 @@ private static void initWailaLikeLang(RegistrateLangProvider provider) {
100100
provider.add("gtceu.jade.fluid_use", "%s mB/t");
101101
provider.add("gtceu.jade.amperage_use", "%s A");
102102
provider.add("gtceu.jade.at", " @ ");
103+
provider.add("gtceu.jade.remaining_charge_time", "Until charged: %s");
104+
provider.add("gtceu.jade.remaining_discharge_time", "Until empty: %s");
105+
provider.add("gtceu.jade.changes_eu_sec", "%s EU/s");
106+
provider.add("gtceu.jade.seconds", "%s seconds");
107+
provider.add("gtceu.jade.minutes", "%s minutes");
108+
provider.add("gtceu.jade.hours", "%s hours");
109+
provider.add("gtceu.jade.days", "%s days");
110+
provider.add("gtceu.jade.years", "%s years");
103111

104112
provider.add("gtceu.top.energy_stored", " / %d EU");
105113
provider.add("gtceu.top.progress_computation", " / %s CWU");

src/main/java/com/gregtechceu/gtceu/data/lang/LangHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1235,6 +1235,7 @@ public static void init(RegistrateLangProvider provider) {
12351235
"GregTech has modified the debug info! For Developers: enable the misc:debug config option in the GregTech config file to see more");
12361236
provider.add("config.jade.plugin_gtceu.controllable_provider", "[GTCEu] Controllable");
12371237
provider.add("config.jade.plugin_gtceu.workable_provider", "[GTCEu] Workable");
1238+
provider.add("config.jade.plugin_gtceu.battery_info", "[GTCEu] Battery info");
12381239
provider.add("config.jade.plugin_gtceu.electric_container_provider", "[GTCEu] Electric Container");
12391240
provider.add("config.jade.plugin_gtceu.recipe_logic_provider", "[GTCEu] Recipe Logic");
12401241
provider.add("config.jade.plugin_gtceu.hazard_cleaner_provider", "[GTCEu] Hazard Cleaner");

src/main/java/com/gregtechceu/gtceu/integration/jade/GTJadePlugin.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public void register(IWailaCommonRegistration registration) {
4444
registration.registerBlockDataProvider(new PrimitivePumpBlockProvider(), BlockEntity.class);
4545
registration.registerBlockDataProvider(new DataBankBlockProvider(), BlockEntity.class);
4646
registration.registerBlockDataProvider(new EnergyConverterModeProvider(), BlockEntity.class);
47+
registration.registerBlockDataProvider(new BatteryStorageInfoProvider(), BlockEntity.class);
4748
registration.registerBlockDataProvider(new LDPEndpointProvider(), BlockEntity.class);
4849
if (GTCEu.Mods.isAE2Loaded()) {
4950
registration.registerBlockDataProvider(new MEPatternBufferProvider(), BlockEntity.class);
@@ -77,6 +78,7 @@ public void registerClient(IWailaClientRegistration registration) {
7778
registration.registerBlockComponent(new DataBankBlockProvider(), Block.class);
7879
registration.registerBlockComponent(new LDPEndpointProvider(), Block.class);
7980
registration.registerBlockComponent(new EnergyConverterModeProvider(), Block.class);
81+
registration.registerBlockComponent(new BatteryStorageInfoProvider(), Block.class);
8082
if (GTCEu.Mods.isAE2Loaded()) {
8183
registration.registerBlockComponent(new MEPatternBufferProvider(), Block.class);
8284
registration.registerBlockComponent(new MEPatternBufferProxyProvider(), Block.class);
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package com.gregtechceu.gtceu.integration.jade.provider;
2+
3+
import com.gregtechceu.gtceu.GTCEu;
4+
import com.gregtechceu.gtceu.api.GTValues;
5+
import com.gregtechceu.gtceu.api.capability.GTCapabilityHelper;
6+
import com.gregtechceu.gtceu.api.capability.IElectricItem;
7+
import com.gregtechceu.gtceu.api.capability.IEnergyContainer;
8+
import com.gregtechceu.gtceu.api.machine.IMachineBlockEntity;
9+
import com.gregtechceu.gtceu.api.transfer.item.CustomItemStackHandler;
10+
import com.gregtechceu.gtceu.common.machine.electric.BatteryBufferMachine;
11+
import com.gregtechceu.gtceu.common.machine.electric.ChargerMachine;
12+
13+
import net.minecraft.client.Minecraft;
14+
import net.minecraft.nbt.CompoundTag;
15+
import net.minecraft.network.chat.Component;
16+
import net.minecraft.resources.ResourceLocation;
17+
import net.minecraft.world.item.ItemStack;
18+
19+
import snownee.jade.api.BlockAccessor;
20+
import snownee.jade.api.IBlockComponentProvider;
21+
import snownee.jade.api.IServerDataProvider;
22+
import snownee.jade.api.ITooltip;
23+
import snownee.jade.api.config.IPluginConfig;
24+
import snownee.jade.api.ui.IElementHelper;
25+
26+
import static com.gregtechceu.gtceu.utils.GTUtil.formatLongNumber;
27+
import static com.gregtechceu.gtceu.utils.GTUtil.getStringRemainTime;
28+
29+
public class BatteryStorageInfoProvider implements IBlockComponentProvider, IServerDataProvider<BlockAccessor> {
30+
31+
@Override
32+
public void appendTooltip(ITooltip iTooltip, BlockAccessor blockAccessor, IPluginConfig iPluginConfig) {
33+
if (blockAccessor.getBlockEntity() instanceof IMachineBlockEntity blockEntity) {
34+
if (blockEntity.getMetaMachine() instanceof ChargerMachine ||
35+
blockEntity.getMetaMachine() instanceof BatteryBufferMachine) {
36+
CompoundTag serverData = blockAccessor.getServerData();
37+
if (serverData.contains("batteries")) {
38+
CompoundTag tag = serverData.getCompound("batteries");
39+
CompoundTag container = tag.getCompound("energy");
40+
long changed = container.getLong("changed"), stored = container.getLong("stored"),
41+
capacity = container.getLong("capacity");
42+
iTooltip.add(Component.translatable("gtceu.jade.changes_eu_sec", formatLongNumber(changed)));
43+
if (changed > 0L) {
44+
iTooltip.add(Component
45+
.translatable("gtceu.jade.remaining_charge_time",
46+
getStringRemainTime((capacity - stored) / changed)));
47+
} else if (changed < 0L) {
48+
iTooltip.add(Component.translatable("gtceu.jade.remaining_discharge_time",
49+
getStringRemainTime((stored) / -changed)));
50+
}
51+
if (Minecraft.getInstance().player.isShiftKeyDown()) {
52+
CustomItemStackHandler handler = new CustomItemStackHandler();
53+
handler.deserializeNBT(tag.getCompound("storage"));
54+
IElementHelper helper = iTooltip.getElementHelper();
55+
for (int i = 0; i < handler.getSlots(); i++) {
56+
if (handler.getStackInSlot(i).getCount() != 0) {
57+
ItemStack stack = handler.getStackInSlot(i);
58+
iTooltip.add(helper.smallItem(stack));
59+
IElectricItem item = GTCapabilityHelper.getElectricItem(stack);
60+
if (item == null) continue;
61+
iTooltip.append(Component.literal(
62+
GTValues.VNF[item.getTier()] + "§r " + formatLongNumber(item.getCharge()) +
63+
" / " + formatLongNumber(item.getMaxCharge()) + " EU"));
64+
}
65+
}
66+
}
67+
}
68+
}
69+
}
70+
}
71+
72+
private CompoundTag getEnergyData(IEnergyContainer container) {
73+
CompoundTag tag = new CompoundTag();
74+
tag.putLong("changed", container.getInputPerSec() - container.getOutputPerSec());
75+
tag.putLong("capacity", container.getEnergyCapacity());
76+
tag.putLong("stored", container.getEnergyStored());
77+
return tag;
78+
}
79+
80+
@Override
81+
public void appendServerData(CompoundTag compoundTag, BlockAccessor blockAccessor) {
82+
if (blockAccessor.getBlockEntity() instanceof IMachineBlockEntity blockEntity) {
83+
if (blockEntity.getMetaMachine() instanceof ChargerMachine machine) {
84+
CompoundTag tag = new CompoundTag();
85+
tag.put("energy", getEnergyData(machine.energyContainer));
86+
tag.put("storage", machine.getChargerInventory().serializeNBT());
87+
compoundTag.put("batteries", tag);
88+
} else if (blockEntity.getMetaMachine() instanceof BatteryBufferMachine machine) {
89+
CompoundTag tag = new CompoundTag();
90+
IEnergyContainer container = machine.energyContainer;
91+
tag.put("energy", getEnergyData(machine.energyContainer));
92+
tag.put("storage", machine.getBatteryInventory().serializeNBT());
93+
compoundTag.put("batteries", tag);
94+
}
95+
}
96+
}
97+
98+
@Override
99+
public ResourceLocation getUid() {
100+
return GTCEu.id("battery_info");
101+
}
102+
}

src/main/java/com/gregtechceu/gtceu/utils/GTUtil.java

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@
6262
import java.util.function.Function;
6363

6464
import static com.gregtechceu.gtceu.api.data.chemical.material.properties.PropertyKey.HAZARD;
65+
import static com.gregtechceu.gtceu.utils.FormattingUtil.DECIMAL_FORMAT_SIC_2F;
6566

6667
public class GTUtil {
6768

@@ -360,6 +361,40 @@ public static boolean isAltDown() {
360361
return false;
361362
}
362363

364+
public static String formatLongNumber(long number, long threshold) {
365+
return (number > threshold) ? DECIMAL_FORMAT_SIC_2F.format(number) : String.valueOf(number);
366+
}
367+
368+
public static String formatLongNumber(long number) {
369+
return formatLongNumber(number, 10000);
370+
}
371+
372+
public static String getStringRemainTime(long time, long threshold) {
373+
String s = Component.translatable("gtceu.jade.seconds", time % 60).getString();
374+
time /= 60;
375+
if (time > 0) {
376+
s = Component.translatable("gtceu.jade.minutes", time % 60).getString() + " " + s;
377+
time /= 60;
378+
if (time > 0) {
379+
s = Component.translatable("gtceu.jade.hours", time % 60).getString() + " " + s;
380+
time /= 60;
381+
if (time > 0) {
382+
s = Component.translatable("gtceu.jade.days", time % 24).getString() + " " + s;
383+
time /= 24;
384+
if (time > 0) {
385+
s = Component.translatable("gtceu.jade.years", formatLongNumber(time, threshold)).getString() +
386+
" " + s;
387+
}
388+
}
389+
}
390+
}
391+
return s;
392+
}
393+
394+
public static String getStringRemainTime(long time) {
395+
return getStringRemainTime(time, 10000);
396+
}
397+
363398
public static boolean isFluidStackAmountDivisible(FluidStack fluidStack, int divisor) {
364399
return fluidStack.getAmount() % divisor == 0 && fluidStack.getAmount() % divisor != fluidStack.getAmount() &&
365400
fluidStack.getAmount() / divisor != 0;

0 commit comments

Comments
 (0)