aboutsummaryrefslogtreecommitdiff
path: root/src/main/java
diff options
context:
space:
mode:
authorquerns <33518699+querns@users.noreply.github.com>2023-10-03 03:57:44 -0500
committerGitHub <noreply@github.com>2023-10-03 10:57:44 +0200
commit75ebf863f50773841a06076444911acd6b1f82e8 (patch)
tree0d136a62a32e3efa0f7dda81c2806ac483b4b9b5 /src/main/java
parentf2815aa338fd8a220f49de6b60486d51ab7e75b8 (diff)
downloadGT5-Unofficial-75ebf863f50773841a06076444911acd6b1f82e8.tar.gz
GT5-Unofficial-75ebf863f50773841a06076444911acd6b1f82e8.tar.bz2
GT5-Unofficial-75ebf863f50773841a06076444911acd6b1f82e8.zip
Adds proper client/server sync for metrics cover, improves oil drill metrics output (#2319)
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/gregtech/common/items/GT_AdvancedSensorCard_Item.java142
-rw-r--r--src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java30
2 files changed, 94 insertions, 78 deletions
diff --git a/src/main/java/gregtech/common/items/GT_AdvancedSensorCard_Item.java b/src/main/java/gregtech/common/items/GT_AdvancedSensorCard_Item.java
index 820fe59952..ae64bea432 100644
--- a/src/main/java/gregtech/common/items/GT_AdvancedSensorCard_Item.java
+++ b/src/main/java/gregtech/common/items/GT_AdvancedSensorCard_Item.java
@@ -11,7 +11,6 @@ import java.util.List;
import java.util.Optional;
import java.util.UUID;
import java.util.function.Predicate;
-import java.util.stream.Collectors;
import java.util.stream.IntStream;
import net.minecraft.client.renderer.texture.IIconRegister;
@@ -48,15 +47,18 @@ public class GT_AdvancedSensorCard_Item extends Item implements IPanelDataSource
public static final UUID CARD_TYPE_ID = UUID.fromString("ff952e84-7608-4c4a-85af-dd6e1aa27fc7");
// This has obfuscated formatting, so no need to localize it.
- private static final ImmutableList<PanelString> SELF_DESTRUCTED_OUTPUT = ImmutableList
- .of(prebakePanelString(EnumChatFormatting.OBFUSCATED + "critical error" + EnumChatFormatting.RESET, true));
+ private static final String SELF_DESTRUCTED_OUTPUT = EnumChatFormatting.OBFUSCATED + "critical error"
+ + EnumChatFormatting.RESET;
- private static final ImmutableList<PanelString> DECONSTRUCTED_OUTPUT = ImmutableList.of(
- prebakePanelString(StatCollector.translateToLocal("gt.item.adv_sensor_card.error.deconstructed.1"), true),
- prebakePanelString(StatCollector.translateToLocal("gt.item.adv_sensor_card.error.deconstructed.2"), true));
+ private static final ImmutableList<String> DECONSTRUCTED_OUTPUT = ImmutableList.of(
+ StatCollector.translateToLocal("gt.item.adv_sensor_card.error.deconstructed.1"),
+ StatCollector.translateToLocal("gt.item.adv_sensor_card.error.deconstructed.2"));
- private static final ImmutableList<PanelString> NO_DATA_FOUND = ImmutableList
- .of(prebakePanelString(StatCollector.translateToLocal("gt.item.adv_sensor_card.error.no_data"), true));
+ private static final String NO_DATA_FOUND = StatCollector.translateToLocal("gt.item.adv_sensor_card.error.no_data");
+
+ private static final String MACHINE_NAME_KEY = "client_machine_name";
+ private static final String OUTPUT_ENTRY_KEY = "client_entry_%d";
+ private static final String OUTPUT_ENTRY_LENGTH_KEY = "client_entry_length";
private int payloadSize = 0;
@@ -136,71 +138,73 @@ public class GT_AdvancedSensorCard_Item extends Item implements IPanelDataSource
@Override
public CardState update(World world, ICardWrapper card, int maxRange) {
- getDataFromDatabase(card).ifPresent(data -> {
- reconcileSelfDestructedCard(card.getItemStack(), data.getState());
- card.setInt(
- CARD_STATE_KEY,
- data.getState()
- .getType());
- payloadSize = switch (data.getState()) {
- case SELF_DESTRUCTED -> SELF_DESTRUCTED_OUTPUT.size();
- case HOST_DECONSTRUCTED -> DECONSTRUCTED_OUTPUT.size() + getMachineName(card.getItemStack()).map(x -> 1)
- .orElse(0);
- case OPERATIONAL -> data.getPayload()
- .map(List::size)
- .orElse(0)
- + getMachineName(card.getItemStack()).map(x -> 1)
- .orElse(0)
- + data.getCoordinates()
- .map(x -> 2)
- .orElse(0);
- };
+ final Optional<GlobalMetricsCoverDatabase.Data> optionalData = getDataFromDatabase(card);
+
+ optionalData.ifPresent(data -> {
+ final State machineState = data.getState();
+ reconcileSelfDestructedCard(card.getItemStack(), machineState);
+ card.setInt(CARD_STATE_KEY, machineState.getType());
+
+ getMachineName(card.getItemStack())
+ .ifPresent(name -> card.setString(MACHINE_NAME_KEY, machineState == State.SELF_DESTRUCTED ? "" : name));
+
+ final ImmutableList.Builder<String> builder = ImmutableList.builder();
+ switch (machineState) {
+ case SELF_DESTRUCTED -> builder.add(SELF_DESTRUCTED_OUTPUT);
+ case HOST_DECONSTRUCTED -> builder.addAll(DECONSTRUCTED_OUTPUT);
+ case OPERATIONAL -> {
+ data.getCoordinates()
+ .ifPresent(
+ coordinates -> builder.add(
+ StatCollector.translateToLocalFormatted(
+ "gt.item.adv_sensor_card.dimension",
+ coordinates.getDimension()),
+ StatCollector.translateToLocalFormatted(
+ "gt.item.adv_sensor_card.coords",
+ coordinates.getLocalizedCoordinates())));
+
+ data.getPayload()
+ .ifPresent(builder::addAll);
+ }
+ default -> builder.add(NO_DATA_FOUND);
+ }
+
+ final List<String> payload = builder.build();
+ card.setInt(OUTPUT_ENTRY_LENGTH_KEY, payload.size());
+ for (int i = 0; i < payload.size(); i++) {
+ card.setString(String.format(OUTPUT_ENTRY_KEY, i), payload.get(i));
+ }
});
+
return CardState.OK;
}
@Override
public List<PanelString> getStringData(final int displaySettings, final ICardWrapper card,
final boolean showLabels) {
- // This method needs to return a mutable list, since the calling routine in NuclearCraft appends an item to the
- // head of the list. Hence, all the array copying.
-
- return getCardState(card).map(state -> switch (state) {
- case SELF_DESTRUCTED -> new ArrayList<>(SELF_DESTRUCTED_OUTPUT);
- case HOST_DECONSTRUCTED -> {
- final ArrayList<PanelString> list = new ArrayList<>();
- getMachineName(card.getItemStack()).ifPresent(name -> list.add(prebakePanelString(name, true)));
- list.addAll(DECONSTRUCTED_OUTPUT);
- yield list;
- }
- case OPERATIONAL -> getDataFromDatabase(card).map(data -> {
- final ImmutableList.Builder<String> builder = ImmutableList.builder();
-
- getMachineName(card.getItemStack()).ifPresent(builder::add);
- data.getCoordinates()
- .ifPresent(
- coordinates -> builder.add(
- StatCollector.translateToLocalFormatted(
- "gt.item.adv_sensor_card.dimension",
- coordinates.getDimension()),
- StatCollector.translateToLocalFormatted(
- "gt.item.adv_sensor_card.coords",
- coordinates.getLocalizedCoordinates())));
-
- data.getPayload()
- .ifPresent(builder::addAll);
-
- return builder.build();
- })
- .filter(payload -> !payload.isEmpty())
- .map(
- payload -> IntStream.range(0, payload.size())
- .filter(i -> (displaySettings & (1 << i)) != 0)
- .mapToObj(i -> prebakePanelString(payload.get(i), i == 0))
- .collect(Collectors.toCollection(ArrayList::new)))
- .orElse(null);
- })
- .orElse(new ArrayList<>(NO_DATA_FOUND));
+ final List<PanelString> returned = new ArrayList<>();
+ final String machineName = card.getString(MACHINE_NAME_KEY);
+ final int bitmaskOffset;
+
+ payloadSize = card.getInt(OUTPUT_ENTRY_LENGTH_KEY);
+
+ if (!machineName.isEmpty() && (displaySettings & 1) != 0) {
+ returned.add(panelString(machineName, true));
+ payloadSize += 1;
+ bitmaskOffset = 1;
+ } else {
+ bitmaskOffset = 0;
+ }
+
+ // Not reusing payloadSize here because it can be conditionally mutated.
+ IntStream.range(0, card.getInt(OUTPUT_ENTRY_LENGTH_KEY))
+ .forEach(i -> {
+ if ((displaySettings & 1 << (i + bitmaskOffset)) != 0) {
+ returned.add(panelString(card.getString(String.format(OUTPUT_ENTRY_KEY, i))));
+ }
+ });
+
+ return returned;
}
@Override
@@ -305,12 +309,12 @@ public class GT_AdvancedSensorCard_Item extends Item implements IPanelDataSource
}
@NotNull
- private static PanelString prebakePanelString(String info) {
- return prebakePanelString(info, false);
+ private static PanelString panelString(String info) {
+ return panelString(info, false);
}
@NotNull
- private static PanelString prebakePanelString(String info, boolean center) {
+ private static PanelString panelString(String info, boolean center) {
final PanelString panelString = new PanelString();
if (center) {
panelString.textCenter = info;
diff --git a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java
index 0a47bdb268..d1d56f0254 100644
--- a/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java
+++ b/src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java
@@ -388,27 +388,39 @@ public abstract class GT_MetaTileEntity_OilDrillBase extends GT_MetaTileEntity_D
@Override
public @NotNull List<String> reportMetrics() {
- if (getBaseMetaTileEntity().isActive()) {
- return switch (workState) {
- case STATE_AT_BOTTOM -> ImmutableList.of(
- StatCollector.translateToLocalFormatted("GT5U.gui.text.pump_fluid_type", getFluidName()),
+ final boolean machineIsActive = getBaseMetaTileEntity().isActive();
+ final String failureReason = getFailureReason()
+ .map(reason -> StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_offline_reason", reason))
+ .orElseGet(() -> StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_offline_generic"));
+
+ if (workState == STATE_AT_BOTTOM) {
+ final ImmutableList.Builder<String> builder = ImmutableList.builder();
+ builder.add(StatCollector.translateToLocalFormatted("GT5U.gui.text.pump_fluid_type", getFluidName()));
+
+ if (machineIsActive) {
+ builder.add(
StatCollector.translateToLocalFormatted(
"GT5U.gui.text.pump_rate.1",
EnumChatFormatting.AQUA + getFlowRatePerTick())
+ StatCollector.translateToLocal("GT5U.gui.text.pump_rate.2"),
getReservoirContents() + StatCollector.translateToLocal("GT5U.gui.text.pump_recovery.2"));
+ } else {
+ builder.add(failureReason);
+ }
+
+ return builder.build();
+ }
+
+ if (machineIsActive) {
+ return switch (workState) {
case STATE_DOWNWARD -> ImmutableList.of(StatCollector.translateToLocal("GT5U.gui.text.deploying_pipe"));
case STATE_UPWARD, STATE_ABORT -> ImmutableList
.of(StatCollector.translateToLocal("GT5U.gui.text.retracting_pipe"));
-
default -> ImmutableList.of();
};
}
- return ImmutableList.of(
- getFailureReason()
- .map(reason -> StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_offline_reason", reason))
- .orElseGet(() -> StatCollector.translateToLocalFormatted("GT5U.gui.text.drill_offline_generic")));
+ return ImmutableList.of(failureReason);
}
@NotNull