From 10ae93363632af230a342525cdb86d1e8f85a26a Mon Sep 17 00:00:00 2001 From: TCDev <102576942+TCDev10@users.noreply.github.com> Date: Mon, 2 Nov 2026 14:39:46 +0100 Subject: [PATCH] Fix Star of David summon message missing player name --- .../item/cultural/StarOfDavidItem.java | 2 +- .../DataAndResourceValidationTest.java | 25 +++++++++++++++++++ test.md | 5 ++++ 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/israelsimulator/item/cultural/StarOfDavidItem.java b/src/main/java/com/israelsimulator/item/cultural/StarOfDavidItem.java index 3bc1b58..6b8e629 100644 --- a/src/main/java/com/israelsimulator/item/cultural/StarOfDavidItem.java +++ b/src/main/java/com/israelsimulator/item/cultural/StarOfDavidItem.java @@ -60,7 +60,7 @@ public InteractionResult use(Level level, Player player, InteractionHand hand) { 40, 0.8, 1.2, 0.8, 0.2); // Broadcast summoning message to all nearby players - Component summonMsg = Component.translatable("message.israel_simulator.bibi_summoned_by_star") + Component summonMsg = Component.translatable("message.israel_simulator.bibi_summoned_by_star", player.getDisplayName()) .withStyle(ChatFormatting.GOLD, ChatFormatting.BOLD); AABB broadcastArea = player.getBoundingBox().inflate(96.0); for (Player p : serverLevel.getEntitiesOfClass(Player.class, broadcastArea)) { diff --git a/src/test/java/com/israelsimulator/validation/DataAndResourceValidationTest.java b/src/test/java/com/israelsimulator/validation/DataAndResourceValidationTest.java index 76d6871..84b203a 100644 --- a/src/test/java/com/israelsimulator/validation/DataAndResourceValidationTest.java +++ b/src/test/java/com/israelsimulator/validation/DataAndResourceValidationTest.java @@ -490,4 +490,29 @@ void testAllModMobEffectsHaveTextures() { } } } + + @Test + @DisplayName("Translatable messages with %s placeholders receive arguments") + void testTranslatablePlaceholdersHaveArguments() throws IOException { + JsonObject lang; + try (FileReader reader = new FileReader(RESOURCES_PATH.resolve(Paths.get( + "assets", IsraelSimulator.MOD_ID, "lang", "en_us.json")).toFile())) { + lang = GSON.fromJson(reader, JsonObject.class); + } + Pattern noArgs = Pattern.compile("translatable\\(\\s*\"([^\"]+)\"\\s*\\)"); + List problems = new ArrayList<>(); + try (Stream files = Files.walk(Path.of("src/main/java"))) { + for (Path file : files.filter(p -> p.toString().endsWith(".java")).toList()) { + Matcher m = noArgs.matcher(Files.readString(file)); + while (m.find()) { + JsonElement value = lang.get(m.group(1)); + if (value != null && value.getAsString().contains("%")) { + problems.add(file.getFileName() + ": " + m.group(1)); + } + } + } + } + assertTrue(problems.isEmpty(), "Placeholders without arguments: " + problems); + } + } diff --git a/test.md b/test.md index 1e6601a..7f394b8 100644 --- a/test.md +++ b/test.md @@ -948,3 +948,8 @@ Non provato dall'utente in gioco. - Musica stereo: `music/klezmer` (59 s, bulgar originale in modo freygish) e `music/shabbat_shalom` (56 s, brano calmo in re maggiore). - Il nuovo test `testCustomSoundFilesExist` fallisce se un suono custom di `sounds.json` non ha il suo file Ogg o se il file è vuoto. - Da sapere: `kirk_boss_theme.ogg` è identico byte per byte a `bibi_boss_theme.ogg`, cioè i due boss hanno la stessa musica. + +## Messaggio della Stella di Davide con "%s" al posto del nome +- Problema riscontrato: quando si evoca Bibi con la Stella di Davide la chat mostra "%s used the Star of David. Bibi is here!". Il nome del giocatore non c'è. +- Funzionamento atteso: "Dev used the Star of David. Bibi is here!" (in italiano "Dev ha usato la Stella di Davide..."). +- Soluzione: `StarOfDavidItem` passa a `Component.translatable` il nome del giocatore come argomento. Il nuovo test `testTranslatablePlaceholdersHaveArguments` cerca nel codice i messaggi tradotti che contengono `%s` ma vengono creati senza argomenti.