diff options
author | querns <33518699+querns@users.noreply.github.com> | 2023-10-03 03:57:44 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-03 10:57:44 +0200 |
commit | 75ebf863f50773841a06076444911acd6b1f82e8 (patch) | |
tree | 0d136a62a32e3efa0f7dda81c2806ac483b4b9b5 /src/main/java | |
parent | f2815aa338fd8a220f49de6b60486d51ab7e75b8 (diff) | |
download | GT5-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.java | 142 | ||||
-rw-r--r-- | src/main/java/gregtech/common/tileentities/machines/multi/GT_MetaTileEntity_OilDrillBase.java | 30 |
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 |