From cbbc63fde6af3202b192392284cb40865eab9efe Mon Sep 17 00:00:00 2001 From: RettichLP Date: Sun, 7 Jun 2026 20:56:41 +0200 Subject: [PATCH 1/3] Remove F-Bank deposit reason handling and related GUI bypass functionality --- README.md | 1 - .../de/rettichlp/ucutils/common/Storage.java | 6 -- .../listener/impl/CommandListener.java | 11 ---- .../ucutils/mixin/DialogScreenMixin.java | 65 ------------------- src/main/resources/ucutils.mixins.json | 1 - 5 files changed, 84 deletions(-) delete mode 100644 src/main/java/de/rettichlp/ucutils/mixin/DialogScreenMixin.java diff --git a/README.md b/README.md index cd76b94b..f8c152d0 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,6 @@ Folgende Funktionen sind nur für Spieler ohne Premium-Rang verfügbar, da Spiel - Das Design der Reinforcements ist so überarbeitet, dass diese besser auffallen - Für den Rettungsdienst wird der Cooldown von Bandagen und Schmerzpillen unter dem Spielernamen angezeigt - Der Fraktionschat kann individuell eingefärbt werden -- Mit `/fbank einzahlen ` kann das Eingabe GUI des Servers übersprungen werden - Für den Rettungsdienst gibt es im Herstellungs-Inventar für Medikamente einen Button, um die benötigte Anzahl an Stoffen in den Fraktionschat zu senden - Für den Dealer und Schwarzmarkt wird (in der Übersicht) angezeigt, an welchem Ort der Händler gefunden wurde diff --git a/src/main/java/de/rettichlp/ucutils/common/Storage.java b/src/main/java/de/rettichlp/ucutils/common/Storage.java index 5d83faca..da6b4a60 100644 --- a/src/main/java/de/rettichlp/ucutils/common/Storage.java +++ b/src/main/java/de/rettichlp/ucutils/common/Storage.java @@ -88,10 +88,6 @@ public class Storage { @Nullable private Vec3d dealerPosition; - @Getter - @Setter - private String fBankDepositReason = ""; - @Getter @Setter private double hydration = -1.0; @@ -149,8 +145,6 @@ public void print() { LOGGER.info("currentJob: {}", this.currentJob); // dead LOGGER.info("dead: {}", this.dead); - // fBankDepositReason - LOGGER.info("fBankDepositReason: {}", this.fBankDepositReason); // hydration LOGGER.info("hydration: {}", this.hydration); // joinTimestamp diff --git a/src/main/java/de/rettichlp/ucutils/listener/impl/CommandListener.java b/src/main/java/de/rettichlp/ucutils/listener/impl/CommandListener.java index 4c7a2700..aaba2e06 100644 --- a/src/main/java/de/rettichlp/ucutils/listener/impl/CommandListener.java +++ b/src/main/java/de/rettichlp/ucutils/listener/impl/CommandListener.java @@ -9,7 +9,6 @@ import java.util.regex.Pattern; import static de.rettichlp.ucutils.UCUtils.commandService; -import static de.rettichlp.ucutils.UCUtils.storage; import static java.lang.Character.isUpperCase; import static java.util.regex.Pattern.compile; @@ -17,7 +16,6 @@ public class CommandListener implements ICommandSendListener { private static final Pattern COMMAND_NAVI_HOUSE_NUMBER_PATTERN = compile("^navi (?\\d+)$"); - private static final Pattern FACTION_BANK_DEPOSIT_WITH_REASON_PATTERN = compile("^fbank einzahlen (?\\d+) (?.+)$"); @Override public boolean onCommandSend(@NotNull String command) { @@ -45,15 +43,6 @@ public boolean onCommandSend(@NotNull String command) { return false; } - Matcher factionBankDepositWithReasonMatcher = FACTION_BANK_DEPOSIT_WITH_REASON_PATTERN.matcher(command); - if (factionBankDepositWithReasonMatcher.find()) { - String amount = factionBankDepositWithReasonMatcher.group("amount"); - String reason = factionBankDepositWithReasonMatcher.group("reason"); - storage.setFBankDepositReason(reason); - commandService.sendCommand("fbank einzahlen " + amount); - return false; - } - return true; } diff --git a/src/main/java/de/rettichlp/ucutils/mixin/DialogScreenMixin.java b/src/main/java/de/rettichlp/ucutils/mixin/DialogScreenMixin.java deleted file mode 100644 index 1d1a0f10..00000000 --- a/src/main/java/de/rettichlp/ucutils/mixin/DialogScreenMixin.java +++ /dev/null @@ -1,65 +0,0 @@ -package de.rettichlp.ucutils.mixin; - -import net.minecraft.client.MinecraftClient; -import net.minecraft.client.gui.screen.dialog.DialogScreen; -import net.minecraft.dialog.DialogActionButtonData; -import net.minecraft.dialog.action.DynamicCustomDialogAction; -import net.minecraft.dialog.type.Dialog; -import net.minecraft.dialog.type.MultiActionDialog; -import net.minecraft.nbt.NbtCompound; -import net.minecraft.nbt.NbtElement; -import net.minecraft.network.packet.c2s.common.CustomClickActionC2SPacket; -import net.minecraft.util.Identifier; -import org.spongepowered.asm.mixin.Final; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Shadow; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.List; -import java.util.Optional; - -import static de.rettichlp.ucutils.UCUtils.storage; - -@Mixin(DialogScreen.class) -public abstract class DialogScreenMixin { - - @Shadow - @Final - private T dialog; - - @Inject(method = "init", at = @At("TAIL")) - public void ucutils$initTail(CallbackInfo ci) { - String fBankDepositReason = storage.getFBankDepositReason(); - if (fBankDepositReason.isBlank()) { - return; - } - - DialogScreen self = (DialogScreen) (Object) this; - - if (!(this.dialog instanceof MultiActionDialog multiActionDialog) || !self.getTitle().getString().equals("F-Bank Einzahlung")) { - return; - } - - List actions = multiActionDialog.actions(); - if (actions.isEmpty()) { - return; - } - - DialogActionButtonData dialogActionButtonData = actions.getFirst(); - if (dialogActionButtonData.action().isEmpty() || !(dialogActionButtonData.action().get() instanceof DynamicCustomDialogAction( - Identifier id, Optional additions - ))) { - return; - } - - additions.ifPresent(nbtCompound -> nbtCompound.putString("grund", fBankDepositReason)); - CustomClickActionC2SPacket customClickActionC2SPacket = new CustomClickActionC2SPacket(id, additions.map(nbt -> (NbtElement) nbt)); - - MinecraftClient client = MinecraftClient.getInstance(); - client.getNetworkHandler().sendPacket(customClickActionC2SPacket); - storage.setFBankDepositReason(""); - client.setScreen(null); - } -} diff --git a/src/main/resources/ucutils.mixins.json b/src/main/resources/ucutils.mixins.json index 86151a0f..a5f82e73 100644 --- a/src/main/resources/ucutils.mixins.json +++ b/src/main/resources/ucutils.mixins.json @@ -17,7 +17,6 @@ "ChatScreenMixin", "ClientPlayerEntityMixin", "ClientPlayNetworkHandlerMixin", - "DialogScreenMixin", "GameMenuScreenMixin", "HandledScreenMixin", "InGameHudMixin", From c508e778f92a6bbe373f71ff38e2ebb5ed7a51ac Mon Sep 17 00:00:00 2001 From: RettichLP Date: Sun, 7 Jun 2026 21:06:50 +0200 Subject: [PATCH 2/3] Remove "Admin duty" name tag option and related translations --- .../configuration/options/NameTagOptions.java | 1 - .../gui/screens/options/NameTagOptionsScreen.java | 15 ++++----------- src/main/resources/assets/ucutils/lang/de_de.json | 2 -- src/main/resources/assets/ucutils/lang/en_gb.json | 2 -- src/main/resources/assets/ucutils/lang/en_us.json | 2 -- 5 files changed, 4 insertions(+), 18 deletions(-) diff --git a/src/main/java/de/rettichlp/ucutils/common/configuration/options/NameTagOptions.java b/src/main/java/de/rettichlp/ucutils/common/configuration/options/NameTagOptions.java index 266d28b6..08546141 100644 --- a/src/main/java/de/rettichlp/ucutils/common/configuration/options/NameTagOptions.java +++ b/src/main/java/de/rettichlp/ucutils/common/configuration/options/NameTagOptions.java @@ -9,7 +9,6 @@ @Accessors(fluent = true) public class NameTagOptions { - private boolean aDuty = true; private boolean afk = true; private boolean medicalInformation = true; } diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/NameTagOptionsScreen.java b/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/NameTagOptionsScreen.java index c29f14d4..bfcd5bff 100644 --- a/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/NameTagOptionsScreen.java +++ b/src/main/java/de/rettichlp/ucutils/common/gui/screens/options/NameTagOptionsScreen.java @@ -14,8 +14,6 @@ public class NameTagOptionsScreen extends OptionsScreen { private static final Text TEXT_NAMETAG = translatable("ucutils.options.text.nametag"); - private static final Text NAMETAG_A_DUTY_NAME = translatable("ucutils.options.nametag.a_duty.name"); - private static final Text NAMETAG_A_DUTY_TOOLTIP = translatable("ucutils.options.nametag.a_duty.tooltip"); private static final Text NAMETAG_AFK_NAME = translatable("ucutils.options.nametag.afk.name"); private static final Text NAMETAG_AFK_TOOLTIP = translatable("ucutils.options.nametag.afk.tooltip"); private static final Text NAMETAG_MEDICAL_INFORMATION_NAME = translatable("ucutils.options.nametag.medical_information.name"); @@ -33,21 +31,16 @@ public void initBody() { NameTagOptions nameTagOptions = configuration.getOptions().nameTag(); - ToggleButtonWidget toggleButton1 = new ToggleButtonWidget(NAMETAG_A_DUTY_NAME, nameTagOptions::aDuty, nameTagOptions.aDuty()); + ToggleButtonWidget toggleButton1 = new ToggleButtonWidget(NAMETAG_AFK_NAME, nameTagOptions::afk, nameTagOptions.afk()); toggleButton1.setWidth(150); - toggleButton1.setTooltip(Tooltip.of(NAMETAG_A_DUTY_TOOLTIP)); + toggleButton1.setTooltip(Tooltip.of(NAMETAG_AFK_TOOLTIP)); gridWidgetAdder.add(toggleButton1); - ToggleButtonWidget toggleButton2 = new ToggleButtonWidget(NAMETAG_AFK_NAME, nameTagOptions::afk, nameTagOptions.afk()); + ToggleButtonWidget toggleButton2 = new ToggleButtonWidget(NAMETAG_MEDICAL_INFORMATION_NAME, nameTagOptions::medicalInformation, nameTagOptions.medicalInformation()); toggleButton2.setWidth(150); - toggleButton2.setTooltip(Tooltip.of(NAMETAG_AFK_TOOLTIP)); + toggleButton2.setTooltip(Tooltip.of(NAMETAG_MEDICAL_INFORMATION_TOOLTIP)); gridWidgetAdder.add(toggleButton2); - ToggleButtonWidget toggleButton3 = new ToggleButtonWidget(NAMETAG_MEDICAL_INFORMATION_NAME, nameTagOptions::medicalInformation, nameTagOptions.medicalInformation()); - toggleButton3.setWidth(150); - toggleButton3.setTooltip(Tooltip.of(NAMETAG_MEDICAL_INFORMATION_TOOLTIP)); - gridWidgetAdder.add(toggleButton3); - gridWidget.refreshPositions(); gridWidget.forEachChild(this::addDrawableChild); } diff --git a/src/main/resources/assets/ucutils/lang/de_de.json b/src/main/resources/assets/ucutils/lang/de_de.json index bce2ae80..65796045 100644 --- a/src/main/resources/assets/ucutils/lang/de_de.json +++ b/src/main/resources/assets/ucutils/lang/de_de.json @@ -57,8 +57,6 @@ "ucutils.options.car.automation.start.tooltip": "Startet das Auto automatisch, wenn du einsteigst", "ucutils.options.car.automation.check_kfz.name": "Automatisches /checkkfz", "ucutils.options.car.automation.check_kfz.tooltip": "Führt /checkkfz aus wenn du ein Auto rechtsklickst während du schleichst", - "ucutils.options.nametag.a_duty.name": "Admin-Dienst", - "ucutils.options.nametag.a_duty.tooltip": "Zeigt eine Information an über dem Namen von Spielern, die im Admin-Dienst sind", "ucutils.options.nametag.afk.name": "AFK", "ucutils.options.nametag.afk.tooltip": "Zeigt eine Information an über dem Namen von Spielern, die AFK sind", "ucutils.options.nametag.medical_information.name": "Information für Ärzte", diff --git a/src/main/resources/assets/ucutils/lang/en_gb.json b/src/main/resources/assets/ucutils/lang/en_gb.json index 66110ad5..20a6dbe9 100644 --- a/src/main/resources/assets/ucutils/lang/en_gb.json +++ b/src/main/resources/assets/ucutils/lang/en_gb.json @@ -57,8 +57,6 @@ "ucutils.options.car.automation.start.tooltip": "Starts the car automatically when you enter it", "ucutils.options.car.automation.check_kfz.name": "Automated /checkkfz", "ucutils.options.car.automation.check_kfz.tooltip": "Automatically executes /checkkfz when you right click your car while sneaking", - "ucutils.options.nametag.a_duty.name": "Admin duty", - "ucutils.options.nametag.a_duty.tooltip": "Shows an information above the players name of players in admin duty", "ucutils.options.nametag.afk.name": "AFK", "ucutils.options.nametag.afk.tooltip": "Shows an information above the players name of afk players", "ucutils.options.nametag.medical_information.name": "Medical information", diff --git a/src/main/resources/assets/ucutils/lang/en_us.json b/src/main/resources/assets/ucutils/lang/en_us.json index 66110ad5..20a6dbe9 100644 --- a/src/main/resources/assets/ucutils/lang/en_us.json +++ b/src/main/resources/assets/ucutils/lang/en_us.json @@ -57,8 +57,6 @@ "ucutils.options.car.automation.start.tooltip": "Starts the car automatically when you enter it", "ucutils.options.car.automation.check_kfz.name": "Automated /checkkfz", "ucutils.options.car.automation.check_kfz.tooltip": "Automatically executes /checkkfz when you right click your car while sneaking", - "ucutils.options.nametag.a_duty.name": "Admin duty", - "ucutils.options.nametag.a_duty.tooltip": "Shows an information above the players name of players in admin duty", "ucutils.options.nametag.afk.name": "AFK", "ucutils.options.nametag.afk.tooltip": "Shows an information above the players name of afk players", "ucutils.options.nametag.medical_information.name": "Medical information", From 5c3eb353a9a02f957470f16a55801bd26dd4ecbf Mon Sep 17 00:00:00 2001 From: RettichLP Date: Sun, 7 Jun 2026 21:08:19 +0200 Subject: [PATCH 3/3] Refactor `messageMatchesColor` method in `FactionListener` to simplify sibling size check logic --- .../ucutils/listener/impl/faction/FactionListener.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/de/rettichlp/ucutils/listener/impl/faction/FactionListener.java b/src/main/java/de/rettichlp/ucutils/listener/impl/faction/FactionListener.java index 762d49bd..a80dd1ee 100644 --- a/src/main/java/de/rettichlp/ucutils/listener/impl/faction/FactionListener.java +++ b/src/main/java/de/rettichlp/ucutils/listener/impl/faction/FactionListener.java @@ -118,7 +118,7 @@ public boolean onMessageReceive(Text text, String message) { // check if color already matches formatting List siblings = text.getSiblings(); - if (siblings.size() != 3 || messageMatchesColor(siblings, primaryFormatting, secondaryFormatting)) { + if (messageMatchesColor(siblings, primaryFormatting, secondaryFormatting)) { return true; } @@ -161,6 +161,10 @@ public boolean onMessageSend(String message) { } private boolean messageMatchesColor(@NonNull List siblings, Formatting primaryFormatting, Formatting secondaryFormatting) { + if (siblings.size() != 3) { + return false; + } + TextColor primaryFormattingCurrent = siblings.get(0).getStyle().getColor(); TextColor secondaryFormattingCurrent = siblings.get(2).getStyle().getColor(); return primaryFormattingCurrent == null || secondaryFormattingCurrent == null || primaryFormattingCurrent.getRgb() == primaryFormatting.getColorValue() || secondaryFormattingCurrent.getRgb() == secondaryFormatting.getColorValue();