Skip to content

Commit

Permalink
Fixed how we display information with the charge item
Browse files Browse the repository at this point in the history
  • Loading branch information
Edivad99 committed Mar 14, 2024
1 parent 9720dbc commit 3d8a393
Show file tree
Hide file tree
Showing 7 changed files with 108 additions and 41 deletions.
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
// 1.20.1 2024-03-14T10:02:21.002961 Languages: en_us
fafdc29c1651188bf7e6cd558f854b196852895b assets/railcraft/lang/en_us.json
// 1.20.1 2024-03-14T16:35:30.213199 Languages: en_us
910cc1acd8c0dd39065b0cc7f71c0710179e7faa assets/railcraft/lang/en_us.json
16 changes: 12 additions & 4 deletions src/generated/resources/assets/railcraft/lang/en_us.json
Original file line number Diff line number Diff line change
Expand Up @@ -406,10 +406,16 @@
"block.railcraft.zinc_ore": "Zinc Ore",
"block.railcraft.zinc_silver_battery": "Zinc-Silver Battery",
"block.railcraft.zinc_silver_battery_empty": "Zinc-Silver Empty Battery",
"charge_meter.railcraft.cart": "Cart -> Charge: %s FE | Draw: %s FE/t | Loss: %s FE/t",
"charge_meter.railcraft.network": "Network -> Size: %s | Charge: %s FE | Draw: %s FE/t | MaxDraw: %s FE/t | Loss: %s FE/t | Eff: %s%%",
"charge_meter.railcraft.node": "Node -> Draw: %s FE/t | Loss: %s FE/t",
"charge_meter.railcraft.producer": "Supply -> Charge: %s FE | Production: %s FE/t | MaxDraw: %s FE/t | Loss: %s FE/t | Eff: %s%%",
"charge_meter.railcraft.cart": "Cart:",
"charge_meter.railcraft.charge": "Charge:",
"charge_meter.railcraft.draw": "Draw:",
"charge_meter.railcraft.efficiency": "Efficiency:",
"charge_meter.railcraft.loss": "Loss:",
"charge_meter.railcraft.max_draw": "MaxDraw:",
"charge_meter.railcraft.network": "Network:",
"charge_meter.railcraft.node": "Node:",
"charge_meter.railcraft.producer": "Producer:",
"charge_meter.railcraft.size": "Size:",
"charge_meter.railcraft.start": "Recording data over %s seconds...",
"config.jade.plugin_railcraft.locomotive": "Locomotive",
"config.jade.plugin_railcraft.signals": "Signals",
Expand Down Expand Up @@ -879,6 +885,7 @@
"tips.railcraft.efficiency": "Efficiency: %s%%",
"tips.railcraft.embarking_track": "Loads entities into carts",
"tips.railcraft.empty": "Empty",
"tips.railcraft.energy": "Energy:",
"tips.railcraft.explosion_resistant": "Explosion resistant",
"tips.railcraft.feed_station": "Feeds animals",
"tips.railcraft.firestone.charged": "Filled with energy, you only need to exert your will onto it to release it's blistering heat...",
Expand Down Expand Up @@ -956,6 +963,7 @@
"tips.railcraft.one_way_track": "Carts can only pass in the direction of the arrow",
"tips.railcraft.overalls": "Protection against the dangers of track-working",
"tips.railcraft.pair_with_control_track": "- Pair with Control track -",
"tips.railcraft.percentage": "Percentage:",
"tips.railcraft.place_above_track": "- Place 1-2 blocks above track -",
"tips.railcraft.place_over_track": "- Place over track -",
"tips.railcraft.place_under_track": "- Place under track -",
Expand Down
3 changes: 1 addition & 2 deletions src/main/java/mods/railcraft/Railcraft.java
Original file line number Diff line number Diff line change
Expand Up @@ -302,8 +302,7 @@ public void handleEntityInteract(PlayerInteractEvent.EntityInteract event) {
.filter(ChargeCartStorageImpl.class::isInstance)
.map(ChargeCartStorageImpl.class::cast)
.ifPresent(battery -> {
ChargeMeterItem.sendChat(player, Translations.ChargeMeter.CART,
battery.getEnergyStored(), battery.getDraw(), battery.getLosses());
ChargeMeterItem.sendCartStat(player, cart.getDisplayName(), battery);
event.setCanceled(true);
event.setCancellationResult(InteractionResult.SUCCESS);
});
Expand Down
8 changes: 8 additions & 0 deletions src/main/java/mods/railcraft/Translations.java
Original file line number Diff line number Diff line change
Expand Up @@ -337,6 +337,8 @@ public static class Tips {
public static final String TYPE_RECHARGEABLE = makeKey("tips", "type_rechargeable");
public static final String TYPE_DISPOSABLE = makeKey("tips", "type_disposable");
public static final String EMPTY = makeKey("tips", "empty");
public static final String ENERGY = makeKey("tips", "energy");
public static final String PERCENTAGE = makeKey("tips", "percentage");
}

public static class Container {
Expand Down Expand Up @@ -583,7 +585,13 @@ public static class RoutingTable {
public static class ChargeMeter {
public static final String START = makeKey("charge_meter", "start");
public static final String CART = makeKey("charge_meter", "cart");
public static final String CHARGE = makeKey("charge_meter", "charge");
public static final String DRAW = makeKey("charge_meter", "draw");
public static final String LOSS = makeKey("charge_meter", "loss");
public static final String NETWORK = makeKey("charge_meter", "network");
public static final String SIZE = makeKey("charge_meter", "size");
public static final String MAX_DRAW = makeKey("charge_meter", "max_draw");
public static final String EFFICIENCY = makeKey("charge_meter", "efficiency");
public static final String NODE = makeKey("charge_meter", "node");
public static final String PRODUCER = makeKey("charge_meter", "producer");
}
Expand Down
21 changes: 12 additions & 9 deletions src/main/java/mods/railcraft/data/RailcraftLanguageProvider.java
Original file line number Diff line number Diff line change
Expand Up @@ -613,6 +613,8 @@ private void tipsTranslations() {
this.add(Translations.Tips.TOKEN_SIGNAL, "Detects carts entering/leaving Token Area");
this.add(Translations.Tips.TOKEN_AREA, "%sx Token Area");
this.add(Translations.Tips.EMPTY, "Empty");
this.add(Translations.Tips.ENERGY, "Energy:");
this.add(Translations.Tips.PERCENTAGE, "Percentage:");
}

private void screenTranslations() {
Expand Down Expand Up @@ -1282,15 +1284,16 @@ private void routingTableTranslations() {

private void chargeMeterTranslations() {
this.add(Translations.ChargeMeter.START, "Recording data over %s seconds...");
this.add(Translations.ChargeMeter.CART, """
Cart -> Charge: %s FE | Draw: %s FE/t | Loss: %s FE/t""");
this.add(Translations.ChargeMeter.NETWORK, """
Network -> Size: %s | Charge: %s FE | Draw: %s FE/t | MaxDraw: %s FE/t | Loss: %s FE/t | \
Eff: %s%%""");
this.add(Translations.ChargeMeter.NODE, "Node -> Draw: %s FE/t | Loss: %s FE/t");
this.add(Translations.ChargeMeter.PRODUCER, """
Supply -> Charge: %s FE | Production: %s FE/t | MaxDraw: %s FE/t | Loss: %s FE/t | \
Eff: %s%%""");
this.add(Translations.ChargeMeter.CART, "Cart:");
this.add(Translations.ChargeMeter.CHARGE, "Charge:");
this.add(Translations.ChargeMeter.DRAW, "Draw:");
this.add(Translations.ChargeMeter.LOSS, "Loss:");
this.add(Translations.ChargeMeter.NETWORK, "Network:");
this.add(Translations.ChargeMeter.SIZE, "Size:");
this.add(Translations.ChargeMeter.MAX_DRAW, "MaxDraw:");
this.add(Translations.ChargeMeter.EFFICIENCY, "Efficiency:");
this.add(Translations.ChargeMeter.NODE, "Node:");
this.add(Translations.ChargeMeter.PRODUCER, "Producer:");
}

private void keyBindingTranslations() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,9 @@

import java.util.ArrayList;
import java.util.List;
import mods.railcraft.Translations;
import mods.railcraft.util.HumanReadableNumberFormatter;
import net.minecraft.ChatFormatting;
import net.minecraft.network.chat.Component;
import net.minecraftforge.energy.IEnergyStorage;

Expand All @@ -23,10 +25,18 @@ public void refresh() {
float chargeLevel = charge * 100.0F;
float energyStorage = charge * capacity;
this.tooltip.clear();
this.tooltip.add(Component.literal(String.format("%.0f%%", chargeLevel)));
this.tooltip.add(Component.literal(String.format("%sFE / %sFE",
this.tooltip.add(Component.translatable(Translations.Tips.PERCENTAGE)
.withStyle(ChatFormatting.GREEN)
.append(" ")
.append(Component.literal(String.format("%.0f%%", chargeLevel))
.withStyle(ChatFormatting.WHITE)));
this.tooltip.add(Component.translatable(Translations.Tips.ENERGY)
.withStyle(ChatFormatting.GREEN)
.append(" ")
.append(Component.literal(String.format("%sFE / %sFE",
HumanReadableNumberFormatter.format(energyStorage),
HumanReadableNumberFormatter.format(capacity))));
HumanReadableNumberFormatter.format(capacity)))
.withStyle(ChatFormatting.WHITE)));
}

@Override
Expand Down
81 changes: 60 additions & 21 deletions src/main/java/mods/railcraft/world/item/ChargeMeterItem.java
Original file line number Diff line number Diff line change
@@ -1,13 +1,18 @@
package mods.railcraft.world.item;

import org.apache.commons.lang3.StringUtils;
import mods.railcraft.RailcraftConfig;
import mods.railcraft.Translations;
import mods.railcraft.api.charge.Charge;
import mods.railcraft.api.charge.ChargeBlock;
import mods.railcraft.api.charge.ChargeStorage;
import mods.railcraft.charge.ChargeCartStorageImpl;
import mods.railcraft.charge.ChargeNetworkImpl;
import mods.railcraft.charge.ChargeStorageBlockImpl;
import mods.railcraft.util.HumanReadableNumberFormatter;
import net.minecraft.ChatFormatting;
import net.minecraft.SharedConstants;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.network.chat.Component;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.InteractionResult;
Expand Down Expand Up @@ -37,25 +42,15 @@ public InteractionResult useOn(UseOnContext context) {
var node = (ChargeNetworkImpl.ChargeNode) chargeBlock.getMeterAccess(Charge.distribution,
state, (ServerLevel) level, pos);
if (node != null && node.isValid() && !node.isGridNull()) {
sendChat(player, Translations.ChargeMeter.START, SECONDS_TO_RECORD);
player.displayClientMessage(
Component.translatable(Translations.ChargeMeter.START, SECONDS_TO_RECORD), false);
node.startUsageRecording(SECONDS_TO_RECORD * SharedConstants.TICKS_PER_SECOND, avg -> {
var grid = node.getGrid();
sendChat(player, Translations.ChargeMeter.NETWORK, grid.size(),
grid.isInfinite() ? "INF" : grid.getCharge(), grid.getAverageUsagePerTick(),
grid.getMaxDraw(), grid.getLosses(), grid.getEfficiency() * 100.0);


sendNetworkStat(player, node.getGrid());
var battery = node.storage().orElse(null);
if (battery == null) {
sendChat(player, Translations.ChargeMeter.NODE, avg, node.getChargeSpec().losses());
sendNodeStat(player, avg, node);
} else {
var infiniteBattery = battery.getState() == ChargeStorage.State.INFINITE;
sendChat(player, Translations.ChargeMeter.PRODUCER,
infiniteBattery ? "INF" : battery.getAvailableCharge(),
infiniteBattery ? "INF" : "NA",
battery.getMaxDraw(),
node.getChargeSpec().losses() * RailcraftConfig.SERVER.lossMultiplier.get(),
battery.getEfficiency() * 100.0);
sendProducerStat(player, battery, node);
}
});
returnValue = InteractionResult.SUCCESS;
Expand All @@ -64,11 +59,55 @@ public InteractionResult useOn(UseOnContext context) {
return returnValue;
}

public static void sendChat(Player player, String translation, Object... args) {
for (int i = 0; i < args.length; i++) {
if (args[i] instanceof Double doubleArg)
args[i] = HumanReadableNumberFormatter.format(doubleArg);
}
player.displayClientMessage(Component.translatable(translation, args), false);
public static void sendCartStat(Player player, Component displayName,
ChargeCartStorageImpl cartStorage) {
player.displayClientMessage(CommonComponents.joinLines(
displayName.copy().withStyle(ChatFormatting.BLUE),
lineFormatter(Translations.ChargeMeter.CHARGE, cartStorage.getEnergyStored(), "FE"),
lineFormatter(Translations.ChargeMeter.DRAW, cartStorage.getDraw(), "FE/t"),
lineFormatter(Translations.ChargeMeter.LOSS, cartStorage.getLosses(), "FE/t")
), false);
}

private static void sendNetworkStat(Player player, ChargeNetworkImpl.ChargeGrid grid) {
player.displayClientMessage(CommonComponents.joinLines(
Component.translatable(Translations.ChargeMeter.NETWORK).withStyle(ChatFormatting.BLUE),
lineFormatter(Translations.ChargeMeter.SIZE, grid.size(), ""),
lineFormatter(Translations.ChargeMeter.CHARGE, grid.isInfinite() ? "INF" : grid.getCharge(), "FE"),
lineFormatter(Translations.ChargeMeter.DRAW, grid.getAverageUsagePerTick(), "FE/t"),
lineFormatter(Translations.ChargeMeter.MAX_DRAW, grid.getMaxDraw(), "FE/t"),
lineFormatter(Translations.ChargeMeter.LOSS, grid.getLosses(), "FE/t"),
lineFormatter(Translations.ChargeMeter.EFFICIENCY, grid.getEfficiency() * 100.0, "%")
), false);
}

private static void sendNodeStat(Player player, double avg, ChargeNetworkImpl.ChargeNode node) {
player.displayClientMessage(CommonComponents.joinLines(
Component.translatable(Translations.ChargeMeter.NODE).withStyle(ChatFormatting.BLUE),
lineFormatter(Translations.ChargeMeter.DRAW, avg, "FE"),
lineFormatter(Translations.ChargeMeter.LOSS, node.getChargeSpec().losses(), "FE/t")
), false);
}

private static void sendProducerStat(Player player, ChargeStorageBlockImpl battery,
ChargeNetworkImpl.ChargeNode node) {
var infiniteBattery = battery.getState() == ChargeStorage.State.INFINITE;
var loss = node.getChargeSpec().losses() * RailcraftConfig.SERVER.lossMultiplier.get();
player.displayClientMessage(CommonComponents.joinLines(
Component.translatable(Translations.ChargeMeter.PRODUCER).withStyle(ChatFormatting.BLUE),
lineFormatter(Translations.ChargeMeter.CHARGE, infiniteBattery ? "INF" : battery.getAvailableCharge(), "FE"),
lineFormatter(Translations.ChargeMeter.MAX_DRAW, battery.getMaxDraw(), "FE/t"),
lineFormatter(Translations.ChargeMeter.LOSS, loss, "FE/t"),
lineFormatter(Translations.ChargeMeter.EFFICIENCY, battery.getEfficiency() * 100.0, "%")
), false);
}

private static Component lineFormatter(String translation, Object data, String unit) {
if (data instanceof Double doubleArg)
data = HumanReadableNumberFormatter.format(doubleArg);
return Component.translatable(translation)
.withStyle(ChatFormatting.GREEN)
.append(Component.literal(" " + data + (StringUtils.isEmpty(unit) ? "" : " ") + unit)
.withStyle(ChatFormatting.WHITE));
}
}

0 comments on commit 3d8a393

Please sign in to comment.