diff --git a/README.md b/README.md index ae94d8f9..edade003 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,6 @@ reibungsloser und angenehmer gestalten. - Sollte ein Command mit einem Großbuchstaben eingegeben werden (z. B. `/Afk` statt `/afk`) wird dieser Command automatisch zu einem gültigen Command umgewandelt -- Die Tabliste wird nach Teammitgliedern und Fraktionen (FBI, Polizei, Rettungsdienst, News) sortiert - Als Business-Besitzer wird in der Business-Info ein Button angezeigt, um die Einnahmen direkt abzubuchen - Wirft man eine Glasflasche in der Nähe eines Shops weg, wird diese als Pfand abgegeben - Es wird angezeigt wie lang der Cooldown für Bandagen, Schmerzpillen und Absorption ist @@ -31,7 +30,7 @@ reibungsloser und angenehmer gestalten. ### Fraktionen -- Hinter dem Spielernamen befindet sich ein Symbol, um die dazugehörige Fraktion zu erkennen (auch für bewusstlose Personen) +- Für bewusstlose Spieler wird hinter dem Spielernamen ein Symbol angezeigt, um die dazugehörige Fraktion zu erkennen - Sollte ein Spieler Contract, auf der Blacklist stehen, Hausverbot oder Wanted-Punkte haben, wird der Name dementsprechend eingefärbt und in der Spielerliste angezeigt - Das Design der Reinforcements ist so überarbeitet, dass diese besser auffallen @@ -92,10 +91,10 @@ reibungsloser und angenehmer gestalten. **Geld** -| Befehl | Beschreibung | -|------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| `/einzahlen ()` | Zahlt das gesamte Bargeld in den ATM in der Nähe ein | -| `/adropmoney` | Bucht für den Geldtransport-Job 16000\$ vom Konto ab, sodass das Geld vom Geldtransport-Job in den ATM eingezahlt werden kann und bucht die 16000$ anschließend zurück auf das Konto | +| Befehl | Beschreibung | +|------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| `/einzahlen ()` | Zahlt das gesamte Bargeld in den ATM in der Nähe ein | +| `/adropmoney` | Bucht für den Geldtransport-Job so viel Geld vom Konto ab, sodass das Geld vom Geldtransport-Job in den ATM eingezahlt werden kann und bucht das Geld anschließend zurück auf das Konto | **Handy** diff --git a/gradle.properties b/gradle.properties index eb84137e..f0357eeb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,7 +13,7 @@ loader_version=0.19.2 loom_version=1.16.1 # Mod Properties -mod_version=2.6.0 +mod_version=2.6.1 maven_group=de.rettichlp # Dependencies diff --git a/src/main/java/de/rettichlp/ucutils/command/faction/BlackMarketCommand.java b/src/main/java/de/rettichlp/ucutils/command/faction/BlackMarketCommand.java index 82c8444e..5e2d19d9 100644 --- a/src/main/java/de/rettichlp/ucutils/command/faction/BlackMarketCommand.java +++ b/src/main/java/de/rettichlp/ucutils/command/faction/BlackMarketCommand.java @@ -6,6 +6,7 @@ import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import org.jetbrains.annotations.NotNull; +import static de.rettichlp.ucutils.UCUtils.commandService; import static de.rettichlp.ucutils.UCUtils.messageService; import static de.rettichlp.ucutils.UCUtils.player; import static de.rettichlp.ucutils.UCUtils.storage; @@ -18,7 +19,7 @@ public class BlackMarketCommand extends CommandBase { @Override public LiteralArgumentBuilder execute(@NotNull LiteralArgumentBuilder node) { return node - .requires(fabricClientCommandSource -> storage.getFaction(player.getStringifiedName()).isBadFaction()) + .requires(fabricClientCommandSource -> storage.getFaction(player.getStringifiedName()).isBadFaction() || commandService.isSuperUser()) .executes(context -> { player.sendMessage(empty(), false); diff --git a/src/main/java/de/rettichlp/ucutils/command/faction/DealerCommand.java b/src/main/java/de/rettichlp/ucutils/command/faction/DealerCommand.java index eeaa0879..bb351d9e 100644 --- a/src/main/java/de/rettichlp/ucutils/command/faction/DealerCommand.java +++ b/src/main/java/de/rettichlp/ucutils/command/faction/DealerCommand.java @@ -6,6 +6,7 @@ import net.fabricmc.fabric.api.client.command.v2.FabricClientCommandSource; import org.jetbrains.annotations.NotNull; +import static de.rettichlp.ucutils.UCUtils.commandService; import static de.rettichlp.ucutils.UCUtils.messageService; import static de.rettichlp.ucutils.UCUtils.player; import static de.rettichlp.ucutils.UCUtils.storage; @@ -18,7 +19,7 @@ public class DealerCommand extends CommandBase { @Override public LiteralArgumentBuilder execute(@NotNull LiteralArgumentBuilder node) { return node - .requires(fabricClientCommandSource -> storage.getFaction(player.getStringifiedName()).isBadFaction()) + .requires(fabricClientCommandSource -> storage.getFaction(player.getStringifiedName()).isBadFaction() || commandService.isSuperUser()) .executes(context -> { player.sendMessage(empty(), false); diff --git a/src/main/java/de/rettichlp/ucutils/common/Storage.java b/src/main/java/de/rettichlp/ucutils/common/Storage.java index ee541175..83818564 100644 --- a/src/main/java/de/rettichlp/ucutils/common/Storage.java +++ b/src/main/java/de/rettichlp/ucutils/common/Storage.java @@ -102,6 +102,10 @@ public class Storage { @Nullable private Job currentJob; + @Getter + @Setter + private boolean dead = false; + @Getter @Setter private int lastReceivedSmsNumber = -1; @@ -173,6 +177,8 @@ public void print() { LOGGER.info("carLocked: {}", this.carLocked); // currentJob LOGGER.info("currentJob: {}", this.currentJob); + // dead + LOGGER.info("dead: {}", this.dead); // hydration LOGGER.info("hydration: {}", this.hydration); // lastReceivedSmsNumber 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 94f2d81a..c99e62bd 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 @@ -1,25 +1,17 @@ package de.rettichlp.ucutils.common.configuration.options; -import de.rettichlp.ucutils.common.models.Color; -import de.rettichlp.ucutils.common.models.Faction; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; -import java.util.HashMap; -import java.util.Map; - @Getter @Setter @Accessors(fluent = true) public class NameTagOptions { - private boolean factionInformation = true; - private Map highlightFactions = new HashMap<>(); - private boolean additionalBlacklist = true; - private boolean additionalContract = true; - private boolean additionalHouseban = true; - private boolean additionalWanted = true; - private boolean additionalAfk = true; - private boolean additionalMedicalInformation = true; + private boolean aDuty = true; + private boolean afk = true; + private boolean houseBan = true; + private boolean outlaw = true; + private boolean medicalInformation = true; } diff --git a/src/main/java/de/rettichlp/ucutils/common/gui/screens/components/WeekSelectionWidget.java b/src/main/java/de/rettichlp/ucutils/common/gui/screens/components/WeekSelectionWidget.java deleted file mode 100644 index f859726e..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/gui/screens/components/WeekSelectionWidget.java +++ /dev/null @@ -1,60 +0,0 @@ -package de.rettichlp.ucutils.common.gui.screens.components; - -import net.minecraft.client.gui.Click; -import net.minecraft.client.gui.DrawContext; -import net.minecraft.client.gui.screen.narration.NarrationMessageBuilder; -import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.ClickableWidget; -import net.minecraft.client.gui.widget.DirectionalLayoutWidget; -import org.jetbrains.annotations.NotNull; - -import java.time.LocalDate; -import java.time.chrono.ChronoLocalDateTime; - -import static de.rettichlp.ucutils.UCUtils.messageService; -import static de.rettichlp.ucutils.UCUtils.renderService; -import static net.minecraft.client.gui.widget.DirectionalLayoutWidget.horizontal; -import static net.minecraft.text.Text.empty; -import static net.minecraft.text.Text.of; - -public class WeekSelectionWidget extends ClickableWidget { - - private final DirectionalLayoutWidget internalLayout = horizontal().spacing(8); - - public WeekSelectionWidget(ChronoLocalDateTime from, - ChronoLocalDateTime to, - ButtonWidget.PressAction onPressPrevious, - ButtonWidget.PressAction onPressNext) { - super(0, 0, 456, 20, empty()); - - renderService.addButton(this.internalLayout, of("←"), onPressPrevious, 20); - - renderService.addButton(this.internalLayout, empty() - .append(of(messageService.dateTimeToFriendlyString(from))) - .append(" - ") - .append(of(messageService.dateTimeToFriendlyString(to))), button -> {}, 400); - - renderService.addButton(this.internalLayout, of("→"), onPressNext, 20); - } - - @Override - protected void renderWidget(@NotNull DrawContext context, int mouseX, int mouseY, float delta) { - this.internalLayout.setX(getX()); - this.internalLayout.setY(getY()); - - this.internalLayout.refreshPositions(); - - this.internalLayout.forEachChild(clickableWidget -> clickableWidget.render(context, mouseX, mouseY, delta)); - } - - @Override - public boolean mouseClicked(Click click, boolean doubled) { - this.internalLayout.forEachChild(clickableWidget -> clickableWidget.mouseClicked(click, doubled)); - return super.mouseClicked(click, doubled); - } - - @Override - protected void appendClickableNarrations(NarrationMessageBuilder builder) { - - } -} 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 28643d6c..a504cbc7 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 @@ -1,47 +1,29 @@ package de.rettichlp.ucutils.common.gui.screens.options; +import de.rettichlp.ucutils.common.configuration.options.NameTagOptions; import de.rettichlp.ucutils.common.gui.screens.OptionsScreen; -import de.rettichlp.ucutils.common.models.Color; -import de.rettichlp.ucutils.common.models.Faction; +import de.rettichlp.ucutils.common.gui.screens.components.ToggleButtonWidget; import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.CyclingButtonWidget; -import net.minecraft.client.gui.widget.DirectionalLayoutWidget; +import net.minecraft.client.gui.tooltip.Tooltip; import net.minecraft.client.gui.widget.GridWidget; -import net.minecraft.client.gui.widget.Positioner; -import net.minecraft.client.gui.widget.TextWidget; import net.minecraft.text.Text; -import org.jetbrains.annotations.NotNull; import static de.rettichlp.ucutils.UCUtils.configuration; -import static de.rettichlp.ucutils.UCUtils.renderService; -import static de.rettichlp.ucutils.common.models.Color.WHITE; -import static de.rettichlp.ucutils.common.models.Faction.NULL; -import static java.util.Arrays.stream; -import static net.minecraft.client.gui.widget.DirectionalLayoutWidget.horizontal; -import static net.minecraft.client.gui.widget.DirectionalLayoutWidget.vertical; -import static net.minecraft.text.Text.of; import static net.minecraft.text.Text.translatable; public class NameTagOptionsScreen extends OptionsScreen { private static final Text TEXT_NAMETAG = translatable("ucutils.options.text.nametag"); - private static final Text TEXT_FACTION = translatable("ucutils.options.text.faction"); - private static final Text TEXT_COLOR = translatable("ucutils.options.text.color"); - private static final Text TEXT_ADDITIONAL = translatable("ucutils.options.text.additional"); - private static final Text NAMETAG_FACTION_INFORMATION_NAME = translatable("ucutils.options.nametag.faction.information.name"); - private static final Text NAMETAG_FACTION_INFORMATION_TOOLTIP = translatable("ucutils.options.nametag.faction.information.tooltip"); - private static final Text NAMETAG_ADDITIONAL_BLACKLIST_NAME = translatable("ucutils.options.nametag.additional.blacklist.name"); - private static final Text NAMETAG_ADDITIONAL_BLACKLIST_TOOLTIP = translatable("ucutils.options.nametag.additional.blacklist.tooltip"); - private static final Text NAMETAG_ADDITIONAL_CONTRACT_NAME = translatable("ucutils.options.nametag.additional.contract.name"); - private static final Text NAMETAG_ADDITIONAL_CONTRACT_TOOLTIP = translatable("ucutils.options.nametag.additional.contract.tooltip"); - private static final Text NAMETAG_ADDITIONAL_HOUSEBAN_NAME = translatable("ucutils.options.nametag.additional.houseban.name"); - private static final Text NAMETAG_ADDITIONAL_HOUSEBAN_TOOLTIP = translatable("ucutils.options.nametag.additional.houseban.tooltip"); - private static final Text NAMETAG_ADDITIONAL_WANTED_NAME = translatable("ucutils.options.nametag.additional.wanted.name"); - private static final Text NAMETAG_ADDITIONAL_WANTED_TOOLTIP = translatable("ucutils.options.nametag.additional.wanted.tooltip"); - private static final Text NAMETAG_ADDITIONAL_AFK_NAME = translatable("ucutils.options.nametag.additional.afk.name"); - private static final Text NAMETAG_ADDITIONAL_AFK_TOOLTIP = translatable("ucutils.options.nametag.additional.afk.tooltip"); - private static final Text NAMETAG_ADDITIONAL_MEDICAL_INFORMATION_NAME = translatable("ucutils.options.nametag.additional.medical_information.name"); - private static final Text NAMETAG_ADDITIONAL_MEDICAL_INFORMATION_TOOLTIP = translatable("ucutils.options.nametag.additional.medical_information.tooltip"); + 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_HOUSE_BAN_NAME = translatable("ucutils.options.nametag.house_ban.name"); + private static final Text NAMETAG_HOUSE_BAN_TOOLTIP = translatable("ucutils.options.nametag.house_ban.tooltip"); + private static final Text NAMETAG_OUTLAW_NAME = translatable("ucutils.options.nametag.outlaw.name"); + private static final Text NAMETAG_OUTLAW_TOOLTIP = translatable("ucutils.options.nametag.outlaw.tooltip"); + private static final Text NAMETAG_MEDICAL_INFORMATION_NAME = translatable("ucutils.options.nametag.medical_information.name"); + private static final Text NAMETAG_MEDICAL_INFORMATION_TOOLTIP = translatable("ucutils.options.nametag.medical_information.tooltip"); public NameTagOptionsScreen(Screen parent) { super(parent, TEXT_NAMETAG); @@ -49,45 +31,38 @@ public NameTagOptionsScreen(Screen parent) { @Override public void initBody() { - DirectionalLayoutWidget directionalLayoutWidget = this.layout.addBody(vertical().spacing(4)); - - directionalLayoutWidget.add(new TextWidget(TEXT_FACTION, this.textRenderer), Positioner::alignHorizontalCenter); - - renderService.addToggleButton(directionalLayoutWidget, NAMETAG_FACTION_INFORMATION_NAME, NAMETAG_FACTION_INFORMATION_TOOLTIP, (options, value) -> options.nameTag().factionInformation(value), options -> options.nameTag().factionInformation(), 308); - - directionalLayoutWidget.add(new TextWidget(TEXT_COLOR, this.textRenderer), positioner -> positioner.alignHorizontalCenter().marginTop(16)); - directionalLayoutWidget.add(getFactionColorOptions()); - - directionalLayoutWidget.add(new TextWidget(TEXT_ADDITIONAL, this.textRenderer), positioner -> positioner.alignHorizontalCenter().marginTop(16)); - - DirectionalLayoutWidget directionalLayoutWidget3 = directionalLayoutWidget.add(horizontal().spacing(8)); - renderService.addToggleButton(directionalLayoutWidget3, NAMETAG_ADDITIONAL_BLACKLIST_NAME, NAMETAG_ADDITIONAL_BLACKLIST_TOOLTIP, (options, value) -> options.nameTag().additionalBlacklist(value), options -> options.nameTag().additionalBlacklist(), 150); - renderService.addToggleButton(directionalLayoutWidget3, NAMETAG_ADDITIONAL_CONTRACT_NAME, NAMETAG_ADDITIONAL_CONTRACT_TOOLTIP, (options, value) -> options.nameTag().additionalContract(value), options -> options.nameTag().additionalContract(), 150); - - DirectionalLayoutWidget directionalLayoutWidget4 = directionalLayoutWidget.add(horizontal().spacing(8)); - renderService.addToggleButton(directionalLayoutWidget4, NAMETAG_ADDITIONAL_HOUSEBAN_NAME, NAMETAG_ADDITIONAL_HOUSEBAN_TOOLTIP, (options, value) -> options.nameTag().additionalHouseban(value), options -> options.nameTag().additionalHouseban(), 150); - renderService.addToggleButton(directionalLayoutWidget4, NAMETAG_ADDITIONAL_WANTED_NAME, NAMETAG_ADDITIONAL_WANTED_TOOLTIP, (options, value) -> options.nameTag().additionalWanted(value), options -> options.nameTag().additionalWanted(), 150); - - DirectionalLayoutWidget directionalLayoutWidget5 = directionalLayoutWidget.add(horizontal().spacing(8)); - renderService.addToggleButton(directionalLayoutWidget5, NAMETAG_ADDITIONAL_AFK_NAME, NAMETAG_ADDITIONAL_AFK_TOOLTIP, (options, value) -> options.nameTag().additionalAfk(value), options -> options.nameTag().additionalAfk(), 150); - renderService.addToggleButton(directionalLayoutWidget5, NAMETAG_ADDITIONAL_MEDICAL_INFORMATION_NAME, NAMETAG_ADDITIONAL_MEDICAL_INFORMATION_TOOLTIP, (options, value) -> options.nameTag().additionalMedicalInformation(value), options -> options.nameTag().additionalMedicalInformation(), 150); - - directionalLayoutWidget.forEachChild(this::addDrawableChild); - } - - private @NotNull GridWidget getFactionColorOptions() { - GridWidget gridWidget = new GridWidget(); - gridWidget.getMainPositioner().marginX(4).marginBottom(4).alignHorizontalCenter(); - GridWidget.Adder adder = gridWidget.createAdder(2); - - stream(Faction.values()) - .filter(faction -> faction != NULL) - .map(faction -> new CyclingButtonWidget.Builder<>(Color::getDisplayName) - .values(Color.values()) - .initially(configuration.getOptions().nameTag().highlightFactions().getOrDefault(faction, WHITE)) - .build(of(faction.getDisplayName()), (button, value) -> configuration.getOptions().nameTag().highlightFactions().put(faction, value))) - .forEach(adder::add); - - return gridWidget; + GridWidget gridWidget = this.layout.addBody(new GridWidget()); + gridWidget.setColumnSpacing(8).setRowSpacing(4); + GridWidget.Adder gridWidgetAdder = gridWidget.createAdder(2); + + NameTagOptions nameTagOptions = configuration.getOptions().nameTag(); + + ToggleButtonWidget toggleButton1 = new ToggleButtonWidget(NAMETAG_A_DUTY_NAME, nameTagOptions::aDuty, nameTagOptions.aDuty()); + toggleButton1.setWidth(150); + toggleButton1.setTooltip(Tooltip.of(NAMETAG_A_DUTY_TOOLTIP)); + gridWidgetAdder.add(toggleButton1); + + ToggleButtonWidget toggleButton2 = new ToggleButtonWidget(NAMETAG_AFK_NAME, nameTagOptions::afk, nameTagOptions.afk()); + toggleButton2.setWidth(150); + toggleButton2.setTooltip(Tooltip.of(NAMETAG_AFK_TOOLTIP)); + gridWidgetAdder.add(toggleButton2); + + ToggleButtonWidget toggleButton3 = new ToggleButtonWidget(NAMETAG_HOUSE_BAN_NAME, nameTagOptions::houseBan, nameTagOptions.houseBan()); + toggleButton3.setWidth(150); + toggleButton3.setTooltip(Tooltip.of(NAMETAG_HOUSE_BAN_TOOLTIP)); + gridWidgetAdder.add(toggleButton3); + + ToggleButtonWidget toggleButton4 = new ToggleButtonWidget(NAMETAG_OUTLAW_NAME, nameTagOptions::outlaw, nameTagOptions.outlaw()); + toggleButton4.setWidth(150); + toggleButton4.setTooltip(Tooltip.of(NAMETAG_OUTLAW_TOOLTIP)); + gridWidgetAdder.add(toggleButton4); + + ToggleButtonWidget toggleButton5 = new ToggleButtonWidget(NAMETAG_MEDICAL_INFORMATION_NAME, nameTagOptions::medicalInformation, nameTagOptions.medicalInformation()); + toggleButton5.setWidth(150); + toggleButton5.setTooltip(Tooltip.of(NAMETAG_MEDICAL_INFORMATION_TOOLTIP)); + gridWidgetAdder.add(toggleButton5); + + gridWidget.refreshPositions(); + gridWidget.forEachChild(this::addDrawableChild); } } diff --git a/src/main/java/de/rettichlp/ucutils/common/models/EquipEntry.java b/src/main/java/de/rettichlp/ucutils/common/models/EquipEntry.java deleted file mode 100644 index 07529bc4..00000000 --- a/src/main/java/de/rettichlp/ucutils/common/models/EquipEntry.java +++ /dev/null @@ -1,39 +0,0 @@ -package de.rettichlp.ucutils.common.models; - -import lombok.AllArgsConstructor; -import lombok.Getter; -import org.jetbrains.annotations.NotNull; - -import java.time.Instant; -import java.util.Optional; - -import static java.util.Arrays.stream; - -public record EquipEntry(String id, Instant timeStamp, Type type) { - - @Getter - @AllArgsConstructor - public enum Type { - - DONUT("Donut"), - CUFFS("Handschellen"), - PEPPER_SPRAY("Pfefferspray"), - KEVLAR_LIGHT("Kevlar (Leicht)"), - MASK("Maske"), - P_69("P-69"), - SCATTER_3("Scatter-3"), - TASER("Taser"); - - private final String displayName; - - public @NotNull String getSuccessMessage() { - return "Equip '" + this.displayName + "' wurde getrackt!"; - } - - public static @NotNull Optional fromDisplayName(String displayName) { - return stream(values()) - .filter(type -> displayName.equals(type.getDisplayName())) - .findFirst(); - } - } -} diff --git a/src/main/java/de/rettichlp/ucutils/common/models/Faction.java b/src/main/java/de/rettichlp/ucutils/common/models/Faction.java index bcf8ebea..ef8b3d53 100644 --- a/src/main/java/de/rettichlp/ucutils/common/models/Faction.java +++ b/src/main/java/de/rettichlp/ucutils/common/models/Faction.java @@ -6,11 +6,8 @@ import net.minecraft.util.Formatting; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.List; import java.util.Optional; -import static de.rettichlp.ucutils.UCUtils.storage; import static java.util.Arrays.stream; import static net.minecraft.text.Text.empty; import static net.minecraft.text.Text.literal; @@ -61,14 +58,6 @@ public Text getNameTagSuffix() { : empty(); } - public List getMembers() { - return storage.getFactionEntries().stream() - .filter(factionEntry -> factionEntry.faction() == this) - .findFirst() - .map(FactionEntry::members) - .orElse(new ArrayList<>()); - } - public static @NotNull Optional fromDisplayName(String displayName) { return stream(values()) .filter(faction -> faction.getDisplayName().equals(displayName)) diff --git a/src/main/java/de/rettichlp/ucutils/common/models/InventoryItem.java b/src/main/java/de/rettichlp/ucutils/common/models/InventoryItem.java index 2a6669be..406fbf2e 100644 --- a/src/main/java/de/rettichlp/ucutils/common/models/InventoryItem.java +++ b/src/main/java/de/rettichlp/ucutils/common/models/InventoryItem.java @@ -2,11 +2,6 @@ import lombok.AllArgsConstructor; import lombok.Getter; -import org.jetbrains.annotations.NotNull; - -import java.util.Optional; - -import static java.util.Arrays.stream; @Getter @AllArgsConstructor @@ -30,10 +25,4 @@ public enum InventoryItem { private final String displayName; private final boolean drugBankItem; - - public static @NotNull Optional fromDisplayName(String displayName) { - return stream(values()) - .filter(inventoryItem -> inventoryItem.getDisplayName().equals(displayName)) - .findFirst(); - } } diff --git a/src/main/java/de/rettichlp/ucutils/common/services/CommandService.java b/src/main/java/de/rettichlp/ucutils/common/services/CommandService.java index b4f356bc..04899368 100644 --- a/src/main/java/de/rettichlp/ucutils/common/services/CommandService.java +++ b/src/main/java/de/rettichlp/ucutils/common/services/CommandService.java @@ -24,7 +24,7 @@ public class CommandService { - public static long COMMAND_COOLDOWN_MILLIS = 500; + public static final long COMMAND_COOLDOWN_MILLIS = 500; private static final String UUID_RETTICHLP = "25855f4d-3874-4a7f-a6ad-e9e4f3042e19"; @@ -36,15 +36,14 @@ public void sendCommand(String command) { networkHandler.sendChatCommand(command); } - public boolean sendCommandWithAfkCheck(String command) { + public void sendCommandWithAfkCheck(String command) { boolean isAfk = nameTagService.isAfk(player.getStringifiedName()); - LOGGER.info("UCUtils executing command with AFK check (is AFK: {}): {}", isAfk, command); + boolean isDead = storage.isDead(); + LOGGER.info("UCUtils executing command with AFK check (is AFK: {}, is dead: {}): {}", isAfk, isDead, command); - if (!isAfk) { + if (!isAfk && !isDead) { networkHandler.sendChatCommand(command); } - - return !isAfk; } public void sendCommands(List commandStrings) { diff --git a/src/main/java/de/rettichlp/ucutils/common/services/NameTagService.java b/src/main/java/de/rettichlp/ucutils/common/services/NameTagService.java index 108cf680..b29936f4 100644 --- a/src/main/java/de/rettichlp/ucutils/common/services/NameTagService.java +++ b/src/main/java/de/rettichlp/ucutils/common/services/NameTagService.java @@ -1,13 +1,5 @@ package de.rettichlp.ucutils.common.services; -import com.mojang.brigadier.Message; -import de.rettichlp.ucutils.common.configuration.options.NameTagOptions; -import de.rettichlp.ucutils.common.models.BlacklistEntry; -import de.rettichlp.ucutils.common.models.ContractEntry; -import de.rettichlp.ucutils.common.models.Faction; -import de.rettichlp.ucutils.common.models.HousebanEntry; -import de.rettichlp.ucutils.common.models.WantedEntry; -import lombok.NonNull; import net.minecraft.scoreboard.Team; import net.minecraft.text.MutableText; import net.minecraft.text.Text; @@ -16,17 +8,16 @@ import java.time.Duration; import java.time.LocalDateTime; -import java.util.Optional; -import static de.rettichlp.ucutils.UCUtils.configuration; import static de.rettichlp.ucutils.UCUtils.networkHandler; import static de.rettichlp.ucutils.UCUtils.storage; -import static de.rettichlp.ucutils.common.models.Color.WHITE; import static java.time.Duration.between; import static java.time.LocalDateTime.now; +import static net.minecraft.scoreboard.AbstractTeam.CollisionRule.NEVER; import static net.minecraft.text.Text.empty; import static net.minecraft.text.Text.literal; -import static net.minecraft.text.Text.of; +import static net.minecraft.util.Formatting.BLUE; +import static net.minecraft.util.Formatting.BOLD; import static net.minecraft.util.Formatting.DARK_GRAY; import static net.minecraft.util.Formatting.DARK_GREEN; import static net.minecraft.util.Formatting.DARK_RED; @@ -38,86 +29,25 @@ public class NameTagService { - public MutableText getEnrichedDisplayName(String targetName) { - NameTagOptions nameTagOptions = configuration.getOptions().nameTag(); - Faction targetFaction = storage.getCachedFaction(targetName); - - Text newTargetDisplayNamePrefix = empty(); - Text newTargetDisplayName = literal(targetName); - Text newTargetDisplayNameSuffix = nameTagOptions.factionInformation() ? targetFaction.getNameTagSuffix() : empty(); - Formatting newTargetDisplayNameColor; - - // highlight factions - newTargetDisplayNameColor = nameTagOptions.highlightFactions().getOrDefault(targetFaction, WHITE).getFormatting(); - - // blacklist - Optional optionalTargetBlacklistEntry = storage.getBlacklistEntries().stream() - .filter(blacklistEntry -> blacklistEntry.getPlayerName().equals(targetName)) - .findAny(); - - if (optionalTargetBlacklistEntry.isPresent() && nameTagOptions.additionalBlacklist()) { - newTargetDisplayNameColor = RED; - newTargetDisplayNamePrefix = optionalTargetBlacklistEntry.get().isOutlaw() - ? empty() - .append(of("[").copy().formatted(DARK_GRAY)) - .append(of("V").copy().formatted(DARK_RED)) - .append(of("]").copy().formatted(DARK_GRAY)) - : empty(); - } - - // contract - Optional optionalTargetContractEntry = storage.getContractEntries().stream() - .filter(contractEntry -> contractEntry.getPlayerName().equals(targetName)) - .findAny(); - - if (optionalTargetContractEntry.isPresent() && nameTagOptions.additionalContract()) { - newTargetDisplayNameColor = RED; - } - - // houseban - Optional optionalTargetHousebanEntry = storage.getHousebanEntries().stream() - .filter(housebanEntry -> housebanEntry.getPlayerName().equals(targetName)) - .filter(housebanEntry -> housebanEntry.getUnbanDateTime().isAfter(now())) - .findAny(); - - if (optionalTargetHousebanEntry.isPresent() && nameTagOptions.additionalHouseban()) { - newTargetDisplayNamePrefix = empty() - .append(of("[").copy().formatted(DARK_GRAY)) - .append(of("HV").copy().formatted(DARK_RED)) - .append(of("]").copy().formatted(DARK_GRAY)); - } + public static final MutableText A_DUTY_TAG = empty() + .append(literal("ᴀ").formatted(BLUE, BOLD)) + .append(literal("ᴅᴜᴛʏ").formatted(RED, BOLD)); - // wanted - Optional optionalTargetWantedEntry = storage.getWantedEntries().stream() - .filter(wantedEntry -> wantedEntry.getPlayerName().equals(targetName)) - .findAny(); + public static final MutableText AFK_TAG = literal("ᴀꜰᴋ").formatted(GOLD, BOLD); - if (optionalTargetWantedEntry.isPresent() && nameTagOptions.additionalWanted()) { - newTargetDisplayNameColor = getWantedPointColor(optionalTargetWantedEntry.get().getWantedPointAmount()); - } - - return empty() - .append(newTargetDisplayNamePrefix) - .append(" ") - .append(newTargetDisplayName.copy().formatted(newTargetDisplayNameColor)) - .append(" ") - .append(newTargetDisplayNameSuffix); - } + public static final MutableText HOUSE_BAN_TAG = literal("Hᴀᴜѕᴠᴇʀʙᴏᴛ").formatted(RED, BOLD); - public String revertEnrichment(@NonNull Message text) { - String string = text.getString(); - String[] strings = string.split(" "); - - // if name contains faction information, the last index is faction information - return string.contains("⌜") ? strings[strings.length - 2] : strings[strings.length - 1]; - } + private static final MutableText A_DUTY_PREFIX = empty() + .append(literal("[").formatted(DARK_GRAY)) + .append(literal("UC").formatted(BLUE)) + .append(literal("]").formatted(DARK_GRAY)); public boolean isAfk(String targetName) { return networkHandler.getPlayerList().stream() .filter(entry -> entry.getProfile().name().equals(targetName)) .anyMatch(entry -> { Team team = entry.getScoreboardTeam(); - return team != null && team.getName().endsWith("_afk"); + return team != null && !isADuty(targetName) && team.getCollisionRule() == NEVER; }); } @@ -125,8 +55,8 @@ public boolean isADuty(String targetName) { return networkHandler.getPlayerList().stream() .filter(entry -> entry.getProfile().name().equals(targetName)) .anyMatch(entry -> { - Team team = entry.getScoreboardTeam(); - return team != null && team.getName().endsWith("_uc_aduty"); + Text displayName = entry.getDisplayName(); + return displayName != null && displayName.contains(A_DUTY_PREFIX); }); } diff --git a/src/main/java/de/rettichlp/ucutils/common/services/RenderService.java b/src/main/java/de/rettichlp/ucutils/common/services/RenderService.java index 969aae7a..06c25dd1 100644 --- a/src/main/java/de/rettichlp/ucutils/common/services/RenderService.java +++ b/src/main/java/de/rettichlp/ucutils/common/services/RenderService.java @@ -2,7 +2,6 @@ import de.rettichlp.ucutils.common.configuration.options.Options; import de.rettichlp.ucutils.common.gui.screens.components.CyclingButtonEntry; -import de.rettichlp.ucutils.common.gui.screens.components.ItemButtonWidget; import de.rettichlp.ucutils.common.gui.screens.components.ToggleButtonWidget; import de.rettichlp.ucutils.common.gui.widgets.base.AbstractUCUtilsWidget; import de.rettichlp.ucutils.common.gui.widgets.base.UCUtilsWidget; @@ -14,17 +13,11 @@ import net.minecraft.client.gui.widget.CyclingButtonWidget; import net.minecraft.client.gui.widget.DirectionalLayoutWidget; import net.minecraft.client.render.Camera; -import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.entity.Entity; -import net.minecraft.item.Item; import net.minecraft.text.Text; -import net.minecraft.util.math.Box; -import net.minecraft.util.math.Direction; -import net.minecraft.world.entity.EntityLike; import org.jetbrains.annotations.NotNull; -import org.joml.Matrix4f; import java.awt.Color; import java.util.LinkedHashSet; @@ -37,10 +30,6 @@ import static java.util.stream.Collectors.toCollection; import static java.util.stream.StreamSupport.stream; import static net.minecraft.client.font.TextRenderer.TextLayerType.SEE_THROUGH; -import static net.minecraft.client.gui.widget.DirectionalLayoutWidget.horizontal; -import static net.minecraft.client.render.RenderLayer.getDebugQuads; -import static net.minecraft.client.render.RenderLayer.getLines; -import static net.minecraft.item.Items.COMPARATOR; import static net.minecraft.util.math.RotationAxis.POSITIVE_Y; import static org.atteo.classindex.ClassIndex.getAnnotated; @@ -51,151 +40,6 @@ public class RenderService { @Getter private LinkedHashSet> widgets = new LinkedHashSet<>(); - public boolean isDebugEnabled() { - return false; - } - - public void drawOutline(@NotNull MatrixStack matrices, - @NotNull VertexConsumerProvider vertexConsumers, - @NotNull EntityLike entity, - double expandBoundingBox) { - Box box = entity.getBoundingBox().expand(expandBoundingBox); - drawOutline(matrices, vertexConsumers, box.minX, box.minY, box.minZ, box.maxX, box.maxY, box.maxZ, new Color(255, 255, 0, 150)); - } - - public void drawOutline(@NotNull MatrixStack matrices, - @NotNull VertexConsumerProvider vertexConsumers, - double x1, - double y1, - double z1, - double x2, - double y2, - double z2, - Color color) { - Camera camera = MinecraftClient.getInstance().gameRenderer.getCamera(); - double camX = camera.getPos().x; - double camY = camera.getPos().y; - double camZ = camera.getPos().z; - - float minX = (float) (x1 - camX); - float minY = (float) (y1 - camY); - float minZ = (float) (z1 - camZ); - float maxX = (float) (x2 - camX); - float maxY = (float) (y2 - camY); - float maxZ = (float) (z2 - camZ); - - VertexConsumer consumer = vertexConsumers.getBuffer(getLines()); - Matrix4f matrix = matrices.peek().getPositionMatrix(); - - drawLine(consumer, matrix, minX, minY, minZ, maxX, minY, minZ, color); - drawLine(consumer, matrix, maxX, minY, minZ, maxX, minY, maxZ, color); - drawLine(consumer, matrix, maxX, minY, maxZ, minX, minY, maxZ, color); - drawLine(consumer, matrix, minX, minY, maxZ, minX, minY, minZ, color); - - drawLine(consumer, matrix, minX, maxY, minZ, maxX, maxY, minZ, color); - drawLine(consumer, matrix, maxX, maxY, minZ, maxX, maxY, maxZ, color); - drawLine(consumer, matrix, maxX, maxY, maxZ, minX, maxY, maxZ, color); - drawLine(consumer, matrix, minX, maxY, maxZ, minX, maxY, minZ, color); - - drawLine(consumer, matrix, minX, minY, minZ, minX, maxY, minZ, color); - drawLine(consumer, matrix, maxX, minY, minZ, maxX, maxY, minZ, color); - drawLine(consumer, matrix, maxX, minY, maxZ, maxX, maxY, maxZ, color); - drawLine(consumer, matrix, minX, minY, maxZ, minX, maxY, maxZ, color); - } - - public void drawArea(@NotNull MatrixStack matrices, - @NotNull VertexConsumerProvider vertexConsumers, - @NotNull Direction direction, - float x, - float y, - float z, - @NotNull Color color) { - Camera camera = MinecraftClient.getInstance().gameRenderer.getCamera(); - double camX = camera.getPos().x; - double camY = camera.getPos().y; - double camZ = camera.getPos().z; - - float modifiedX = (float) (x - camX); - float modifiedY = (float) (y - camY); - float modifiedZ = (float) (z - camZ); - - VertexConsumer consumer = vertexConsumers.getBuffer(getDebugQuads()); - Matrix4f matrix = matrices.peek().getPositionMatrix(); - - Color alphaColor = new Color(color.getRed(), color.getGreen(), color.getBlue(), 50); - - switch (direction) { - case UP -> { - consumer.vertex(matrix, modifiedX, modifiedY + 1, modifiedZ).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX + 1, modifiedY + 1, modifiedZ).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX + 1, modifiedY + 1, modifiedZ + 1).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX, modifiedY + 1, modifiedZ + 1).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - } - case DOWN -> { - consumer.vertex(matrix, modifiedX, modifiedY, modifiedZ).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX + 1, modifiedY, modifiedZ).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX + 1, modifiedY, modifiedZ + 1).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX, modifiedY, modifiedZ + 1).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - } - case NORTH -> { - consumer.vertex(matrix, modifiedX, modifiedY, modifiedZ).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX + 1, modifiedY, modifiedZ).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX + 1, modifiedY + 1, modifiedZ).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX, modifiedY + 1, modifiedZ).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - } - case EAST -> { - consumer.vertex(matrix, modifiedX + 1, modifiedY, modifiedZ).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX + 1, modifiedY + 1, modifiedZ).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX + 1, modifiedY + 1, modifiedZ + 1).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX + 1, modifiedY, modifiedZ + 1).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - } - case SOUTH -> { - consumer.vertex(matrix, modifiedX, modifiedY, modifiedZ + 1).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX + 1, modifiedY, modifiedZ + 1).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX + 1, modifiedY + 1, modifiedZ + 1).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX, modifiedY + 1, modifiedZ + 1).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - } - case WEST -> { - consumer.vertex(matrix, modifiedX, modifiedY, modifiedZ).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX, modifiedY + 1, modifiedZ).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX, modifiedY + 1, modifiedZ + 1).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, modifiedX, modifiedY, modifiedZ + 1).color(alphaColor.getRed(), alphaColor.getGreen(), alphaColor.getBlue(), alphaColor.getAlpha()).normal(0, 1, 0); - } - } - } - - public void drawLine(@NotNull VertexConsumer consumer, - Matrix4f matrix, - float x1, - float y1, - float z1, - float x2, - float y2, - float z2) { - Color color = new Color(255, 255, 0, 150); - drawLine(consumer, matrix, x1, y1, z1, x2, y2, z2, color); - } - - public void drawLine(@NotNull VertexConsumer consumer, - Matrix4f matrix, - float x1, - float y1, - float z1, - float x2, - float y2, - float z2, - @NotNull Color color) { - consumer.vertex(matrix, x1, y1, z1).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).normal(0, 1, 0); - consumer.vertex(matrix, x2, y2, z2).color(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()).normal(0, 1, 0); - } - - public void renderTextAboveEntity(@NotNull MatrixStack matrices, - VertexConsumerProvider vertexConsumers, - @NotNull Entity entity, - Text text) { - renderTextAboveEntity(matrices, vertexConsumers, entity, text, 0.025F); - } - public void renderTextAboveEntity(@NotNull MatrixStack matrices, VertexConsumerProvider vertexConsumers, @NotNull Entity entity, @@ -302,21 +146,4 @@ public void addToggleButton(@NotNull DirectionalLayoutWidget widget, widget.add(toggleButton); } - - public void addToggleButtonWithSettings(@NotNull DirectionalLayoutWidget widget, - Text name, - Text tooltip, - BiConsumer onPress, - ButtonWidget.PressAction onPressSettings, - @NotNull Function currentValue, - int width) { - DirectionalLayoutWidget directionalLayoutWidget = widget.add(horizontal()); - addToggleButton(directionalLayoutWidget, name, tooltip, onPress, currentValue, width - 20); - addItemButton(directionalLayoutWidget, "ucutils.options.text.options", COMPARATOR, onPressSettings); - } - - public void addItemButton(@NotNull DirectionalLayoutWidget widget, String key, Item item, ButtonWidget.PressAction onPress) { - ItemButtonWidget button = new ItemButtonWidget(key, item, onPress); - widget.add(button); - } } diff --git a/src/main/java/de/rettichlp/ucutils/listener/impl/EconomyListener.java b/src/main/java/de/rettichlp/ucutils/listener/impl/EconomyListener.java index 9475cfc5..1d984295 100644 --- a/src/main/java/de/rettichlp/ucutils/listener/impl/EconomyListener.java +++ b/src/main/java/de/rettichlp/ucutils/listener/impl/EconomyListener.java @@ -306,6 +306,8 @@ public boolean onMessageReceive(Text text, String message) { if (timeSingeLastMedicReviveAction > 6000 && timeSingeLastMedicReviveAction < 10000) { configuration.setMoneyBankAmount(max(0, configuration.getMoneyBankAmount() - 50)); } + + storage.setDead(false); } return true; diff --git a/src/main/java/de/rettichlp/ucutils/listener/impl/PlayerListener.java b/src/main/java/de/rettichlp/ucutils/listener/impl/PlayerListener.java index c487a24b..ed3f57b1 100644 --- a/src/main/java/de/rettichlp/ucutils/listener/impl/PlayerListener.java +++ b/src/main/java/de/rettichlp/ucutils/listener/impl/PlayerListener.java @@ -73,8 +73,7 @@ public boolean onMessageReceive(Text text, String message) { Matcher deadMatcher = DEAD_PATTERN.matcher(message); if (deadMatcher.find()) { - int minutes = parseInt(deadMatcher.group("minutes")); - storage.getCountdowns().add(new Countdown("Friedhof", ofMinutes(minutes))); + storage.setDead(true); return true; } diff --git a/src/main/java/de/rettichlp/ucutils/listener/impl/faction/WantedListener.java b/src/main/java/de/rettichlp/ucutils/listener/impl/faction/WantedListener.java index f673a60c..c2391bc5 100644 --- a/src/main/java/de/rettichlp/ucutils/listener/impl/faction/WantedListener.java +++ b/src/main/java/de/rettichlp/ucutils/listener/impl/faction/WantedListener.java @@ -54,8 +54,6 @@ public class WantedListener implements IMessageReceiveListener { @Override public boolean onMessageReceive(Text text, String message) { - String clientPlayerName = player.getGameProfile().name(); - Matcher wantedGivenPointsMatcher = WANTED_GIVEN_POINTS_PATTERN.matcher(message); if (wantedGivenPointsMatcher.find()) { String playerName = wantedGivenPointsMatcher.group(1); diff --git a/src/main/java/de/rettichlp/ucutils/mixin/EntityMixin.java b/src/main/java/de/rettichlp/ucutils/mixin/EntityMixin.java index 5a878bb6..8bc08543 100644 --- a/src/main/java/de/rettichlp/ucutils/mixin/EntityMixin.java +++ b/src/main/java/de/rettichlp/ucutils/mixin/EntityMixin.java @@ -1,5 +1,11 @@ package de.rettichlp.ucutils.mixin; +import de.rettichlp.ucutils.common.configuration.options.NameTagOptions; +import de.rettichlp.ucutils.common.models.BlacklistEntry; +import de.rettichlp.ucutils.common.models.ContractEntry; +import de.rettichlp.ucutils.common.models.Faction; +import de.rettichlp.ucutils.common.models.HousebanEntry; +import de.rettichlp.ucutils.common.models.WantedEntry; import de.rettichlp.ucutils.listener.callback.PlayerEnterVehicleCallback; import net.minecraft.client.network.ClientPlayerEntity; import net.minecraft.entity.Entity; @@ -8,22 +14,33 @@ import net.minecraft.item.ItemStack; import net.minecraft.text.MutableText; import net.minecraft.text.Text; +import net.minecraft.util.Formatting; import net.minecraft.world.entity.UniquelyIdentifiable; import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import java.util.Optional; + +import static de.rettichlp.ucutils.UCUtils.configuration; import static de.rettichlp.ucutils.UCUtils.nameTagService; import static de.rettichlp.ucutils.UCUtils.player; import static de.rettichlp.ucutils.UCUtils.storage; +import static de.rettichlp.ucutils.common.models.Color.WHITE; +import static java.time.LocalDateTime.now; import static net.minecraft.item.Items.SKELETON_SKULL; import static net.minecraft.item.Items.WITHER_SKELETON_SKULL; import static net.minecraft.text.Text.empty; import static net.minecraft.text.Text.literal; +import static net.minecraft.text.Text.of; +import static net.minecraft.util.Formatting.DARK_GRAY; +import static net.minecraft.util.Formatting.DARK_RED; import static net.minecraft.util.Formatting.GRAY; +import static net.minecraft.util.Formatting.RED; @Mixin(Entity.class) public abstract class EntityMixin { @@ -83,10 +100,77 @@ public abstract class EntityMixin { String playerName = displayNameString.substring(1); // enrich player name with faction information (RettichLP -> RettichLP ⌜✚⌟) - MutableText enrichedDisplayName = nameTagService.getEnrichedDisplayName(playerName); + MutableText enrichedDisplayName = getEnrichedDisplayName(playerName); cir.setReturnValue(empty() .append(literal("✟").copy().formatted(GRAY)) .append(enrichedDisplayName)); } + + @Unique + private MutableText getEnrichedDisplayName(String targetName) { + NameTagOptions nameTagOptions = configuration.getOptions().nameTag(); + Faction targetFaction = storage.getCachedFaction(targetName); + + Text newTargetDisplayNamePrefix = empty(); + Text newTargetDisplayName = literal(targetName); + Text newTargetDisplayNameSuffix = targetFaction.getNameTagSuffix(); + Formatting newTargetDisplayNameColor; + + // highlight factions + newTargetDisplayNameColor = WHITE.getFormatting(); + + // blacklist + Optional optionalTargetBlacklistEntry = storage.getBlacklistEntries().stream() + .filter(blacklistEntry -> blacklistEntry.getPlayerName().equals(targetName)) + .findAny(); + + if (optionalTargetBlacklistEntry.isPresent() && nameTagOptions.outlaw()) { + newTargetDisplayNameColor = RED; + newTargetDisplayNamePrefix = optionalTargetBlacklistEntry.get().isOutlaw() + ? empty() + .append(of("[").copy().formatted(DARK_GRAY)) + .append(of("V").copy().formatted(DARK_RED)) + .append(of("]").copy().formatted(DARK_GRAY)) + : empty(); + } + + // contract + Optional optionalTargetContractEntry = storage.getContractEntries().stream() + .filter(contractEntry -> contractEntry.getPlayerName().equals(targetName)) + .findAny(); + + if (optionalTargetContractEntry.isPresent()) { + newTargetDisplayNameColor = RED; + } + + // houseban + Optional optionalTargetHousebanEntry = storage.getHousebanEntries().stream() + .filter(housebanEntry -> housebanEntry.getPlayerName().equals(targetName)) + .filter(housebanEntry -> housebanEntry.getUnbanDateTime().isAfter(now())) + .findAny(); + + if (optionalTargetHousebanEntry.isPresent() && nameTagOptions.houseBan()) { + newTargetDisplayNamePrefix = empty() + .append(of("[").copy().formatted(DARK_GRAY)) + .append(of("HV").copy().formatted(DARK_RED)) + .append(of("]").copy().formatted(DARK_GRAY)); + } + + // wanted + Optional optionalTargetWantedEntry = storage.getWantedEntries().stream() + .filter(wantedEntry -> wantedEntry.getPlayerName().equals(targetName)) + .findAny(); + + if (optionalTargetWantedEntry.isPresent()) { + newTargetDisplayNameColor = nameTagService.getWantedPointColor(optionalTargetWantedEntry.get().getWantedPointAmount()); + } + + return empty() + .append(newTargetDisplayNamePrefix) + .append(" ") + .append(newTargetDisplayName.copy().formatted(newTargetDisplayNameColor)) + .append(" ") + .append(newTargetDisplayNameSuffix); + } } diff --git a/src/main/java/de/rettichlp/ucutils/mixin/GameMenuScreenMixin.java b/src/main/java/de/rettichlp/ucutils/mixin/GameMenuScreenMixin.java index 57d78730..4981304f 100644 --- a/src/main/java/de/rettichlp/ucutils/mixin/GameMenuScreenMixin.java +++ b/src/main/java/de/rettichlp/ucutils/mixin/GameMenuScreenMixin.java @@ -27,9 +27,7 @@ protected GameMenuScreenMixin(Text title) { at = @At( value = "INVOKE", target = "Lnet/minecraft/client/gui/widget/GridWidget$Adder;add(Lnet/minecraft/client/gui/widget/Widget;ILnet/minecraft/client/gui/widget/Positioner;)Lnet/minecraft/client/gui/widget/Widget;", - ordinal = 0 - ) - ) + ordinal = 0)) private void ucutils$initWidgetsInvoke(CallbackInfo ci, @Local @NotNull GridWidget gridWidget, @Local GridWidget.@NotNull Adder adder) { diff --git a/src/main/java/de/rettichlp/ucutils/mixin/MinecraftClientMixin.java b/src/main/java/de/rettichlp/ucutils/mixin/MinecraftClientMixin.java index 429924f1..fa1bb70a 100644 --- a/src/main/java/de/rettichlp/ucutils/mixin/MinecraftClientMixin.java +++ b/src/main/java/de/rettichlp/ucutils/mixin/MinecraftClientMixin.java @@ -1,5 +1,7 @@ package de.rettichlp.ucutils.mixin; +import com.mojang.brigadier.Message; +import lombok.NonNull; import net.minecraft.client.MinecraftClient; import net.minecraft.entity.ItemEntity; import net.minecraft.text.Text; @@ -13,7 +15,6 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import static de.rettichlp.ucutils.UCUtils.commandService; -import static de.rettichlp.ucutils.UCUtils.nameTagService; import static de.rettichlp.ucutils.UCUtils.player; import static de.rettichlp.ucutils.UCUtils.storage; import static de.rettichlp.ucutils.common.models.Faction.RETTUNGSDIENST; @@ -53,7 +54,7 @@ public abstract class MinecraftClientMixin { Text customName = itemEntity.getCustomName(); assert customName != null; - String playerName = nameTagService.revertEnrichment(customName); + String playerName = revertEnrichment(customName); if (player.isSneaking()) { commandService.sendCommand("erstehilfe " + playerName); @@ -62,4 +63,13 @@ public abstract class MinecraftClientMixin { } } } + + @Unique + private String revertEnrichment(@NonNull Message text) { + String string = text.getString(); + String[] strings = string.split(" "); + + // if name contains faction information, the last index is faction information + return string.contains("⌜") ? strings[strings.length - 2] : strings[strings.length - 1]; + } } diff --git a/src/main/java/de/rettichlp/ucutils/mixin/PlayerEntityMixin.java b/src/main/java/de/rettichlp/ucutils/mixin/PlayerEntityMixin.java deleted file mode 100644 index 7f4ce8a2..00000000 --- a/src/main/java/de/rettichlp/ucutils/mixin/PlayerEntityMixin.java +++ /dev/null @@ -1,27 +0,0 @@ -package de.rettichlp.ucutils.mixin; - -import com.mojang.authlib.GameProfile; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.text.Text; -import org.jetbrains.annotations.NotNull; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; - -import static de.rettichlp.ucutils.UCUtils.nameTagService; -import static de.rettichlp.ucutils.UCUtils.storage; - -@Mixin(PlayerEntity.class) -public class PlayerEntityMixin { - - @Inject(method = "getDisplayName", at = @At("RETURN"), cancellable = true) - private void ucutils$getDisplayNameReturn(@NotNull CallbackInfoReturnable cir) { - if (!storage.isUnicaCity()) { - return; - } - - GameProfile gameProfile = ((PlayerEntity) (Object) this).getGameProfile(); - cir.setReturnValue(nameTagService.getEnrichedDisplayName(gameProfile.name())); - } -} diff --git a/src/main/java/de/rettichlp/ucutils/mixin/PlayerEntityRendererMixin.java b/src/main/java/de/rettichlp/ucutils/mixin/PlayerEntityRendererMixin.java index c34c87ae..3567c55d 100644 --- a/src/main/java/de/rettichlp/ucutils/mixin/PlayerEntityRendererMixin.java +++ b/src/main/java/de/rettichlp/ucutils/mixin/PlayerEntityRendererMixin.java @@ -7,6 +7,7 @@ import net.minecraft.client.render.state.CameraRenderState; import net.minecraft.client.util.math.MatrixStack; import net.minecraft.text.MutableText; +import net.minecraft.text.Text; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; @@ -15,13 +16,9 @@ import static de.rettichlp.ucutils.UCUtils.configuration; import static de.rettichlp.ucutils.UCUtils.nameTagService; import static de.rettichlp.ucutils.UCUtils.storage; -import static java.util.Optional.ofNullable; -import static net.minecraft.text.Text.empty; -import static net.minecraft.text.Text.literal; -import static net.minecraft.util.Formatting.BLUE; -import static net.minecraft.util.Formatting.BOLD; -import static net.minecraft.util.Formatting.GOLD; -import static net.minecraft.util.Formatting.RED; +import static de.rettichlp.ucutils.common.services.NameTagService.AFK_TAG; +import static de.rettichlp.ucutils.common.services.NameTagService.A_DUTY_TAG; +import static de.rettichlp.ucutils.common.services.NameTagService.HOUSE_BAN_TAG; @Mixin(PlayerEntityRenderer.class) public abstract class PlayerEntityRendererMixin { @@ -38,30 +35,44 @@ public abstract class PlayerEntityRendererMixin { return; } - ofNullable(playerEntityRenderState.displayName) // something like "[HV] RettichLP ⌜✚⌟" - .map(nameTagService::revertEnrichment) // something like "RettichLP" - .ifPresent(playerName -> { - matrixStack.scale(0.5F, 0.5F, 0.5F); + // extract player name + // empty[style={color=red,clickEvent=class_10610[command=/tell Maagma46 ],hoverEvent=class_10611[entity=net.minecraft.class_2568$class_5248@a9702189],insertion=Maagma46}, siblings=[literal{[}[style={color=dark_gray}, siblings=[literal{UC}[style={color=blue}], literal{]}[style={color=dark_gray}]]], literal{Maagma46}, empty]] + Text displayName = playerEntityRenderState.displayName; + if (displayName == null) { + return; + } + + String playerName = displayName.getStyle().getInsertion(); - // handle medical information (bandages + pills) - MutableText medicInformation = nameTagService.getMedicInformation(playerName); - boolean medicInformationPresent = !medicInformation.getSiblings().isEmpty() && configuration.getOptions().nameTag().additionalMedicalInformation(); - if (medicInformationPresent) { - matrixStack.translate(0.0F, 1.8F, 0.0F); - orderedRenderCommandQueue.submitLabel(matrixStack, playerEntityRenderState.nameLabelPos, 0, medicInformation, !playerEntityRenderState.sneaking, playerEntityRenderState.light, playerEntityRenderState.squaredDistanceToCamera, cameraRenderState); - } + matrixStack.scale(0.5F, 0.5F, 0.5F); - if (nameTagService.isAfk(playerName)) { - matrixStack.translate(0.0F, medicInformationPresent ? 0.8F : 2.6, 0.0F); - orderedRenderCommandQueue.submitLabel(matrixStack, playerEntityRenderState.nameLabelPos, 0, literal("ᴀꜰᴋ").formatted(GOLD, BOLD), !playerEntityRenderState.sneaking, playerEntityRenderState.light, playerEntityRenderState.squaredDistanceToCamera, cameraRenderState); - } else if (nameTagService.isADuty(playerName)) { - MutableText text = empty() - .append(literal("ᴀ").formatted(BLUE, BOLD)) - .append(literal("ᴅᴜᴛʏ").formatted(RED, BOLD)); + // handle medical information (bandages + pills) + MutableText medicInformation = nameTagService.getMedicInformation(playerName); + boolean medicInformationPresent = !medicInformation.getSiblings().isEmpty(); + if (configuration.getOptions().nameTag().medicalInformation() && medicInformationPresent) { + matrixStack.translate(0.0F, 1.8F, 0.0F); + orderedRenderCommandQueue.submitLabel(matrixStack, playerEntityRenderState.nameLabelPos, 0, medicInformation, !playerEntityRenderState.sneaking, playerEntityRenderState.light, playerEntityRenderState.squaredDistanceToCamera, cameraRenderState); + } - matrixStack.translate(0.0F, medicInformationPresent ? 0.8F : 2.6, 0.0F); - orderedRenderCommandQueue.submitLabel(matrixStack, playerEntityRenderState.nameLabelPos, 0, text, !playerEntityRenderState.sneaking, playerEntityRenderState.light, playerEntityRenderState.squaredDistanceToCamera, cameraRenderState); - } - }); + // handle admin duty tag + if (configuration.getOptions().nameTag().aDuty() && nameTagService.isADuty(playerName)) { + matrixStack.translate(0.0F, medicInformationPresent ? 0.8F : 2.6, 0.0F); + orderedRenderCommandQueue.submitLabel(matrixStack, playerEntityRenderState.nameLabelPos, 0, A_DUTY_TAG, !playerEntityRenderState.sneaking, playerEntityRenderState.light, playerEntityRenderState.squaredDistanceToCamera, cameraRenderState); + return; + } + + // handle afk tag + if (configuration.getOptions().nameTag().afk() && nameTagService.isAfk(playerName)) { + matrixStack.translate(0.0F, medicInformationPresent ? 0.8F : 2.6, 0.0F); + orderedRenderCommandQueue.submitLabel(matrixStack, playerEntityRenderState.nameLabelPos, 0, AFK_TAG, !playerEntityRenderState.sneaking, playerEntityRenderState.light, playerEntityRenderState.squaredDistanceToCamera, cameraRenderState); + return; + } + + // handle houseban tag + boolean hasHouseBan = storage.getHousebanEntries().stream().anyMatch(housebanEntry -> housebanEntry.getPlayerName().equals(playerName)); + if (configuration.getOptions().nameTag().houseBan() && hasHouseBan) { + matrixStack.translate(0.0F, medicInformationPresent ? 0.8F : 2.6, 0.0F); + orderedRenderCommandQueue.submitLabel(matrixStack, playerEntityRenderState.nameLabelPos, 0, HOUSE_BAN_TAG, !playerEntityRenderState.sneaking, playerEntityRenderState.light, playerEntityRenderState.squaredDistanceToCamera, cameraRenderState); + } } } diff --git a/src/main/java/de/rettichlp/ucutils/mixin/PlayerListHudMixin.java b/src/main/java/de/rettichlp/ucutils/mixin/PlayerListHudMixin.java index b23ce9f8..348b091f 100644 --- a/src/main/java/de/rettichlp/ucutils/mixin/PlayerListHudMixin.java +++ b/src/main/java/de/rettichlp/ucutils/mixin/PlayerListHudMixin.java @@ -5,87 +5,23 @@ import net.minecraft.client.network.PlayerListEntry; import net.minecraft.text.MutableText; import net.minecraft.text.Text; -import net.minecraft.text.TextColor; import org.jetbrains.annotations.NotNull; import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; -import java.util.Collection; -import java.util.Comparator; -import java.util.List; import java.util.Optional; -import static de.rettichlp.ucutils.UCUtils.networkHandler; import static de.rettichlp.ucutils.UCUtils.storage; -import static java.util.Comparator.comparing; import static net.minecraft.text.Text.literal; -import static net.minecraft.text.TextColor.fromFormatting; -import static net.minecraft.util.Formatting.BLUE; import static net.minecraft.util.Formatting.BOLD; -import static net.minecraft.util.Formatting.DARK_BLUE; -import static net.minecraft.util.Formatting.DARK_GRAY; -import static net.minecraft.util.Formatting.DARK_RED; -import static net.minecraft.util.Formatting.GOLD; import static net.minecraft.util.Formatting.RED; import static net.minecraft.util.Formatting.WHITE; @Mixin(PlayerListHud.class) public abstract class PlayerListHudMixin { - @Unique - private static final Comparator UCUTILS_ENTRY_ORDERING = comparing((PlayerListEntry playerListEntry) -> { - String playerName = playerListEntry.getProfile().name(); - Text displayName = playerListEntry.getDisplayName(); - - if (displayName == null) { - return 6; // OTHER - } - - List siblings = displayName.getSiblings(); - - if (siblings.isEmpty()) { - return 6; // OTHER - } - - TextColor firstSiblingStyleColor = siblings.getFirst().getStyle().getColor(); - - if (firstSiblingStyleColor == null) { - return 6; // OTHER - } - - if (firstSiblingStyleColor.equals(fromFormatting(DARK_GRAY))) { - TextColor secondSiblingStyleColor = siblings.get(1).getStyle().getColor(); - if (secondSiblingStyleColor != null && secondSiblingStyleColor.equals(fromFormatting(BLUE))) { - return 0; // ADMIN - } - - if (secondSiblingStyleColor != null && secondSiblingStyleColor.equals(fromFormatting(GOLD))) { - return 5; // REPORT - } - - return 9; - } else if (firstSiblingStyleColor.equals(fromFormatting(DARK_BLUE))) { - return 1; // FBI - } else if (firstSiblingStyleColor.equals(fromFormatting(BLUE))) { - return 2; // POLICE - } else if (firstSiblingStyleColor.equals(fromFormatting(DARK_RED))) { - return 3; // MEDIC - } else if (firstSiblingStyleColor.equals(fromFormatting(GOLD))) { - return 4; // NEWS - } else if (storage.getWantedEntries().stream().anyMatch(wantedEntry -> wantedEntry.getPlayerName().equals(playerName))) { - return 6; // WANTED - } else if (storage.getBlacklistEntries().stream().anyMatch(blacklistEntry -> blacklistEntry.getPlayerName().equals(playerName))) { - return 7; // BLACKLIST - } else if (storage.getContractEntries().stream().anyMatch(contractEntry -> contractEntry.getPlayerName().equals(playerName))) { - return 8; // CONTRACT - } else { - return 9; // OTHER - } - }).thenComparing(playerListEntry -> playerListEntry.getProfile().name()); - @Inject(method = "getPlayerName", at = @At("RETURN"), cancellable = true) private void ucutils$getPlayerNameReturn(PlayerListEntry playerListEntry, @NotNull CallbackInfoReturnable cir) { if (!storage.isUnicaCity()) { @@ -114,24 +50,4 @@ public abstract class PlayerListHudMixin { cir.setReturnValue(originText.copy().append(" ").append(text)); } } - - @Inject(method = "collectPlayerEntries", at = @At("RETURN"), cancellable = true) - private void ucutils$collectPlayerEntriesReturn(@NotNull CallbackInfoReturnable> cir) { - if (!storage.isUnicaCity()) { - return; - } - - // get current player list entries - Collection playerListEntries = networkHandler.getListedPlayerListEntries(); - - // order player list entries - List orderedPlayerListEntries = playerListEntries - .stream() - .sorted(UCUTILS_ENTRY_ORDERING) - .limit(80L) - .toList(); - - // set ordered player list entries before the original finally returns them - cir.setReturnValue(orderedPlayerListEntries); - } } diff --git a/src/main/resources/assets/ucutils/lang/de_de.json b/src/main/resources/assets/ucutils/lang/de_de.json index f0b10fd0..0efcc691 100644 --- a/src/main/resources/assets/ucutils/lang/de_de.json +++ b/src/main/resources/assets/ucutils/lang/de_de.json @@ -30,12 +30,10 @@ "ucutils.notification.toggled_chat.d": "Dauerhafter D-Chat aktiviert", "ucutils.notification.toggled_chat.w": "Dauerhaftes Flüstern aktiviert", - "ucutils.options.text.additional": "Erweitert", "ucutils.options.text.amount": "Menge", "ucutils.options.text.automation": "Automatisierung", "ucutils.options.text.chat": "Chat", "ucutils.options.text.car": "Auto", - "ucutils.options.text.color": "Farbe", "ucutils.options.text.faction": "Fraktion", "ucutils.options.text.general": "Allgemein", "ucutils.options.text.nametag": "Nametag", @@ -55,20 +53,16 @@ "ucutils.options.car.automation.lock.tooltip": "Schließt das Auto automatisch ab, wenn du den Motor startest", "ucutils.options.car.automation.start.name": "Automatisches Starten", "ucutils.options.car.automation.start.tooltip": "Startet das Auto automatisch, wenn du einsteigst", - "ucutils.options.nametag.faction.information.name": "Fraktionsinformation", - "ucutils.options.nametag.faction.information.tooltip": "Zeigt Fraktionsinformationen im Nametag an", - "ucutils.options.nametag.additional.blacklist.name": "Schwarze Liste", - "ucutils.options.nametag.additional.blacklist.tooltip": "Zeigt Spieler auf deiner schwarzen Liste an", - "ucutils.options.nametag.additional.contract.name": "Kopfgeld", - "ucutils.options.nametag.additional.contract.tooltip": "Zeigt Spieler mit Kopfgeld an", - "ucutils.options.nametag.additional.houseban.name": "Hausverbot", - "ucutils.options.nametag.additional.houseban.tooltip": "Zeigt Spieler mit Hausverbot an", - "ucutils.options.nametag.additional.wanted.name": "Gesucht", - "ucutils.options.nametag.additional.wanted.tooltip": "Zeigt gesuchte Spieler an", - "ucutils.options.nametag.additional.afk.name": "AFK", - "ucutils.options.nametag.additional.afk.tooltip": "Zeigt AFK Spieler an", - "ucutils.options.nametag.additional.medical_information.name": "Information für Ärzte", - "ucutils.options.nametag.additional.medical_information.tooltip": "Zeigt die restliche Wirkungsdauer von Bandagen und Schmerzpillen unter dem Spielernamen an", + "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.house_ban.name": "Hausverbot", + "ucutils.options.nametag.house_ban.tooltip": "Zeigt eine Information über dem Namen von Spielern an, die ein Hausverbot haben", + "ucutils.options.nametag.outlaw.name": "Vogelfrei", + "ucutils.options.nametag.outlaw.tooltip": "Zeigt eine Information über dem Namen von Spielern an, die Vogelfrei sind", + "ucutils.options.nametag.medical_information.name": "Information für Ärzte", + "ucutils.options.nametag.medical_information.tooltip": "Zeigt die restliche Wirkungsdauer von Bandagen und Schmerzpillen unter dem Spielernamen an", "ucutils.options.reinforcement_style.name": "Reinforcement Stil", "ucutils.options.atm_information.name": "ATM Information", "ucutils.options.atm_information.value.none.name": "Keine", diff --git a/src/main/resources/assets/ucutils/lang/en_gb.json b/src/main/resources/assets/ucutils/lang/en_gb.json index 82b278cd..37c69435 100644 --- a/src/main/resources/assets/ucutils/lang/en_gb.json +++ b/src/main/resources/assets/ucutils/lang/en_gb.json @@ -30,12 +30,10 @@ "ucutils.notification.toggled_chat.d": "Persistent D-Chat enabled", "ucutils.notification.toggled_chat.w": "Persistent whispering enabled", - "ucutils.options.text.additional": "Additional", "ucutils.options.text.amount": "Amount", "ucutils.options.text.automation": "Automation", "ucutils.options.text.chat": "Chat", "ucutils.options.text.car": "Car", - "ucutils.options.text.color": "Color", "ucutils.options.text.faction": "Faction", "ucutils.options.text.general": "General", "ucutils.options.text.nametag": "Nametag", @@ -55,20 +53,16 @@ "ucutils.options.car.automation.lock.tooltip": "Locks the car automatically when you start the engine", "ucutils.options.car.automation.start.name": "Automated starting", "ucutils.options.car.automation.start.tooltip": "Starts the car automatically when you enter it", - "ucutils.options.nametag.faction.information.name": "Faction information", - "ucutils.options.nametag.faction.information.tooltip": "Shows faction information in the nametag", - "ucutils.options.nametag.additional.blacklist.name": "Blacklist", - "ucutils.options.nametag.additional.blacklist.tooltip": "Highlights players on your blacklist", - "ucutils.options.nametag.additional.contract.name": "Contract", - "ucutils.options.nametag.additional.contract.tooltip": "Highlights players with a contract", - "ucutils.options.nametag.additional.houseban.name": "Houseban", - "ucutils.options.nametag.additional.houseban.tooltip": "Highlights players with a houseban", - "ucutils.options.nametag.additional.wanted.name": "Wanted", - "ucutils.options.nametag.additional.wanted.tooltip": "Highlights wanted players", - "ucutils.options.nametag.additional.afk.name": "AFK", - "ucutils.options.nametag.additional.afk.tooltip": "Highlights afk players", - "ucutils.options.nametag.additional.medical_information.name": "Medical information", - "ucutils.options.nametag.additional.medical_information.tooltip": "Shows the cooldown of bandages and pills below the players name", + "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.house_ban.name": "House ban", + "ucutils.options.nametag.house_ban.tooltip": "Shows an information above the players name of players with a house ban", + "ucutils.options.nametag.outlaw.name": "Outlaw", + "ucutils.options.nametag.outlaw.tooltip": "Shows an information above the players name of outlaw players", + "ucutils.options.nametag.medical_information.name": "Medical information", + "ucutils.options.nametag.medical_information.tooltip": "Shows the cooldown of bandages and pills below the players name", "ucutils.options.reinforcement_style.name": "Reinforcement style", "ucutils.options.atm_information.name": "ATM information", "ucutils.options.atm_information.value.none.name": "None", diff --git a/src/main/resources/assets/ucutils/lang/en_us.json b/src/main/resources/assets/ucutils/lang/en_us.json index 82b278cd..37c69435 100644 --- a/src/main/resources/assets/ucutils/lang/en_us.json +++ b/src/main/resources/assets/ucutils/lang/en_us.json @@ -30,12 +30,10 @@ "ucutils.notification.toggled_chat.d": "Persistent D-Chat enabled", "ucutils.notification.toggled_chat.w": "Persistent whispering enabled", - "ucutils.options.text.additional": "Additional", "ucutils.options.text.amount": "Amount", "ucutils.options.text.automation": "Automation", "ucutils.options.text.chat": "Chat", "ucutils.options.text.car": "Car", - "ucutils.options.text.color": "Color", "ucutils.options.text.faction": "Faction", "ucutils.options.text.general": "General", "ucutils.options.text.nametag": "Nametag", @@ -55,20 +53,16 @@ "ucutils.options.car.automation.lock.tooltip": "Locks the car automatically when you start the engine", "ucutils.options.car.automation.start.name": "Automated starting", "ucutils.options.car.automation.start.tooltip": "Starts the car automatically when you enter it", - "ucutils.options.nametag.faction.information.name": "Faction information", - "ucutils.options.nametag.faction.information.tooltip": "Shows faction information in the nametag", - "ucutils.options.nametag.additional.blacklist.name": "Blacklist", - "ucutils.options.nametag.additional.blacklist.tooltip": "Highlights players on your blacklist", - "ucutils.options.nametag.additional.contract.name": "Contract", - "ucutils.options.nametag.additional.contract.tooltip": "Highlights players with a contract", - "ucutils.options.nametag.additional.houseban.name": "Houseban", - "ucutils.options.nametag.additional.houseban.tooltip": "Highlights players with a houseban", - "ucutils.options.nametag.additional.wanted.name": "Wanted", - "ucutils.options.nametag.additional.wanted.tooltip": "Highlights wanted players", - "ucutils.options.nametag.additional.afk.name": "AFK", - "ucutils.options.nametag.additional.afk.tooltip": "Highlights afk players", - "ucutils.options.nametag.additional.medical_information.name": "Medical information", - "ucutils.options.nametag.additional.medical_information.tooltip": "Shows the cooldown of bandages and pills below the players name", + "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.house_ban.name": "House ban", + "ucutils.options.nametag.house_ban.tooltip": "Shows an information above the players name of players with a house ban", + "ucutils.options.nametag.outlaw.name": "Outlaw", + "ucutils.options.nametag.outlaw.tooltip": "Shows an information above the players name of outlaw players", + "ucutils.options.nametag.medical_information.name": "Medical information", + "ucutils.options.nametag.medical_information.tooltip": "Shows the cooldown of bandages and pills below the players name", "ucutils.options.reinforcement_style.name": "Reinforcement style", "ucutils.options.atm_information.name": "ATM information", "ucutils.options.atm_information.value.none.name": "None", diff --git a/src/main/resources/ucutils.mixins.json b/src/main/resources/ucutils.mixins.json index 1a2b89f0..fad616ec 100644 --- a/src/main/resources/ucutils.mixins.json +++ b/src/main/resources/ucutils.mixins.json @@ -5,8 +5,7 @@ "mixins": [ "EntityMixin", "ItemStackMixin", - "MinecartEntityMixin", - "PlayerEntityMixin" + "MinecartEntityMixin" ], "injectors": { "defaultRequire": 1