Skip to content

Commit 8b9b689

Browse files
committed
update flag message templates; update lang keys; update changelog
1 parent 74cab12 commit 8b9b689

File tree

12 files changed

+560
-526
lines changed

12 files changed

+560
-526
lines changed

changelog.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,14 @@
1-
# [0.6.1-beta1] - 2025-07-18
1+
# [0.6.1-beta1] - 2025-10-26
22

33
## Changed
44

5-
- Backport codec based region data serialization from 0.5.3-beta1 to 1.20.1, 1.21.1 and 1.21.4. Note: This is a breaking change for those versions and will result in region data loss.
5+
- Backport region saving changes from 0.5.3-beta1 to 1.20.1, 1.21.1 and 1.21.4. Note: This is a breaking change for those versions and will result in region data loss.
6+
- Placeholders for FlagMessages have changed to use position arguments: `%1$s` instead of `{flag}`. Refer to the wiki for more information.
67

78
## Fixed
89

910
- Fix broken default values for region display data.
11+
- Fix serialization issue causing region data loss
1012

1113
# [0.6.0-beta1] - 2025-07-16
1214

changelogs/0.6.1-beta1.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1-
# [0.6.1-beta1] - 2025-07-18
1+
# [0.6.1-beta1] - 2025-10-26
22

33
## Changed
44

55
- Backport region saving changes from 0.5.3-beta1 to 1.20.1, 1.21.1 and 1.21.4. Note: This is a breaking change for those versions and will result in region data loss.
6+
- Placeholders for FlagMessages have changed to use position arguments: `%1$s` instead of `{flag}`. Refer to the wiki for more information.
67

78
## Fixed
89

9-
- Fix broken default values for region display data.
10+
- Fix broken default values for region display data.
11+
- Fix serialization issue causing region data loss

common/src/main/java/de/z0rdak/yawp/core/flag/FlagMessage.java

Lines changed: 48 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.mojang.serialization.Codec;
44
import com.mojang.serialization.codecs.RecordCodecBuilder;
55
import de.z0rdak.yawp.api.events.region.FlagCheckResult;
6+
import de.z0rdak.yawp.constants.Constants;
67
import de.z0rdak.yawp.core.region.IProtectedRegion;
78
import net.minecraft.core.BlockPos;
89
import net.minecraft.network.chat.Component;
@@ -11,10 +12,10 @@
1112
import org.jetbrains.annotations.Nullable;
1213

1314
import java.util.*;
15+
import java.util.Map.Entry;
1416

1517
import static de.z0rdak.yawp.core.flag.FlagTag.PLAYER;
16-
import static de.z0rdak.yawp.util.ChatComponentBuilder.shortBlockPosBracketed;
17-
import static de.z0rdak.yawp.util.ChatComponentBuilder.tinyBlockPos;
18+
import static de.z0rdak.yawp.util.ChatComponentBuilder.*;
1819

1920
public class FlagMessage {
2021

@@ -23,33 +24,56 @@ public class FlagMessage {
2324
public static final String REGION_TEMPLATE = "{region}";
2425
public static final String DIM_TEMPLATE = "{dim}";
2526
public static final String PLAYER_TEMPLATE = "{player}";
27+
public static final String TEAM_TEMPLATE = "{team}";
28+
public static final String GROUP_TEMPLATE = "{group}";
29+
public static final String ENTITY_TEMPLATE = "{entity}";
30+
public static final String BLOCK_ENTITY = "{block}";
2631

2732
public static final String CONFIG_MSG = "config";
2833
public static final Set<String> MSG_TOKEN;
2934
public static FlagMessage DEFAULT_FLAG_MSG = new FlagMessage(CONFIG_MSG);
3035

3136
static {
3237
MSG_TOKEN = new HashSet<>();
33-
MSG_TOKEN.add("{flag}");
34-
MSG_TOKEN.add("{region}");
35-
MSG_TOKEN.add("{dimension}");
36-
MSG_TOKEN.add("{pos}");
37-
MSG_TOKEN.add("{player}");
38-
MSG_TOKEN.add("{team}");
39-
MSG_TOKEN.add("{group}");
40-
MSG_TOKEN.add("{entity}");
41-
MSG_TOKEN.add("{block}");
38+
MSG_TOKEN.add(FLAG_TEMPLATE);
39+
MSG_TOKEN.add(REGION_TEMPLATE);
40+
MSG_TOKEN.add(DIM_TEMPLATE);
41+
MSG_TOKEN.add(POS_TEMPLATE);
42+
MSG_TOKEN.add(PLAYER_TEMPLATE);
43+
MSG_TOKEN.add(TEAM_TEMPLATE);
44+
MSG_TOKEN.add(GROUP_TEMPLATE);
45+
MSG_TOKEN.add(ENTITY_TEMPLATE);
46+
MSG_TOKEN.add(BLOCK_ENTITY);
47+
}
48+
49+
private static final Map<String, Integer> TOKEN_INDEX;
50+
static {
51+
52+
TOKEN_INDEX = Map.of(
53+
FLAG_TEMPLATE, 1, // %1$s
54+
REGION_TEMPLATE, 2, // %2$s
55+
DIM_TEMPLATE, 3, // %3$s
56+
POS_TEMPLATE, 4, // %4$s
57+
PLAYER_TEMPLATE, 5, // %5$s
58+
TEAM_TEMPLATE, 6, // %6$s
59+
GROUP_TEMPLATE, 7, // %7$s
60+
ENTITY_TEMPLATE, 8, // %8$s
61+
BLOCK_ENTITY, 9); // %9$s
4262
}
4363

64+
4465
public static Codec<FlagMessage> CODEC = RecordCodecBuilder.create(
4566
instance -> instance.group(
4667
Codec.STRING.fieldOf("msg")
68+
.orElse(FlagMessage.CONFIG_MSG)
4769
.forGetter(FlagMessage::msg),
4870
Codec.BOOL.fieldOf("muted")
71+
.orElse(false)
4972
.forGetter(FlagMessage::isMuted),
5073
Codec.BOOL.fieldOf("default")
74+
.orElse(true)
5175
.forGetter(FlagMessage::isDefault)
52-
).apply(instance, FlagMessage::new));
76+
).apply(instance, FlagMessage::new));
5377

5478
private String msg;
5579
private boolean muted;
@@ -122,13 +146,19 @@ public static Map<String, String> defaultSubstitutesFor(FlagCheckResult result)
122146
* @return the flag message for the given flag check result and substitutes
123147
*/
124148
public static MutableComponent buildFrom(FlagCheckResult result, Map<String, String> substitutes) {
125-
String flagMsgTemplate = result.getFlag().getFlagMsg().isDefault()
126-
? getI18nFlagMsgTemplate(result)
127-
: result.getFlag().getFlagMsg().msg();
128-
String flagMsg = replaceMatches(flagMsgTemplate, substitutes);
129-
return Component.literal(flagMsg);
149+
String key = "flag.msg.deny." + result.getFlag().getName();
150+
Object[] args = new Object[9]; // always 9 slots
151+
for (var entry : TOKEN_INDEX.entrySet()) {
152+
String token = entry.getKey();
153+
int idx = entry.getValue() - 1; // zero-based for array
154+
args[idx] = substitutes.getOrDefault(token, "");
155+
}
156+
157+
return Component.translatable(key, args);
130158
}
131159

160+
161+
132162
/**
133163
* Returns the flag message template for the given flag from the I18n keys. <br>
134164
* If the flag has a custom message defined, that message is returned instead. <br>
@@ -153,7 +183,7 @@ private static String getI18nFlagMsgTemplate(FlagCheckResult result) {
153183
*/
154184
private static String replaceMatches(String flagMsgTemplate, Map<String, String> substitutes) {
155185
String flagMsg = flagMsgTemplate;
156-
for (Map.Entry<String, String> entry : substitutes.entrySet()) {
186+
for (Entry<String, String> entry : substitutes.entrySet()) {
157187
flagMsg = flagMsg.replace(entry.getKey(), entry.getValue());
158188
}
159189
return flagMsg;

common/src/main/resources/assets/yawp/lang/de_de.json

Lines changed: 56 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -25,15 +25,15 @@
2525
"cli.flag.msg.mute.set.value": "Alarm-Schalter für Flag %s in %s gesetzt: %s",
2626
"cli.flag.msg.mute.success.text": "Alarm für %s auf '%s' gesetzt",
2727
"cli.flag.msg.text": "Nachricht",
28-
"cli.flag.msg.text.example.0": "PVP ist in der Region {region} deaktiviert!",
28+
"cli.flag.msg.text.example.0": "PVP ist in der Region %2$s deaktiviert!",
2929
"cli.flag.msg.text.example.1": "<Deine Flag-Nachricht hier>",
30-
"cli.flag.msg.text.example.2": "You can't place blocks here in the region {region}, {player}!",
31-
"cli.flag.msg.text.example.3": "Sorry, you are not allowed to break blocks here, {player}!",
32-
"cli.flag.msg.text.example.4": "Team '{team}' is not allowed to place blocks here!",
33-
"cli.flag.msg.text.example.5": "You are not allowed to use this block ('{block}' @ '{pos}')!",
34-
"cli.flag.msg.text.example.6": "Only players and teams which are '{group}' are allowed to participate in PVP here!",
35-
"cli.flag.msg.text.example.7": "This action is denied here because of the '{flag}' flag!",
36-
"cli.flag.msg.text.example.8": "Entity {entity} at {pos} can't be tamed because of the active flag '{flag}' in the region '{region}'!",
30+
"cli.flag.msg.text.example.2": "You can't place blocks here in the region %2$s, %5$s!",
31+
"cli.flag.msg.text.example.3": "Sorry, you are not allowed to break blocks here, %5$s!",
32+
"cli.flag.msg.text.example.4": "Team '%6$s' is not allowed to place blocks here!",
33+
"cli.flag.msg.text.example.5": "You are not allowed to use this block ('%9$s' @ '%4$s')!",
34+
"cli.flag.msg.text.example.6": "Only players and teams which are '%7$s' are allowed to participate in PVP here!",
35+
"cli.flag.msg.text.example.7": "This action is denied here because of the '%1$s' flag!",
36+
"cli.flag.msg.text.example.8": "Entity %8$s at %4$s can't be tamed because of the active flag '%1$s' in the region '%2$s'!",
3737
"cli.flag.msg.text.example.9": "You shall not pass!!!",
3838
"cli.flag.msg.text.link.hover.false": "Flag override is inactive. This flag will be overridden by the same flag in child regions",
3939
"cli.flag.msg.text.link.hover.true": "Flag override is active. This flag overrides the flag state of child regions for the same flag",
@@ -333,54 +333,54 @@
333333
"data.nbt.dimensions.save": "Save for RegionDataManager called. Attempting to save region data...",
334334
"data.nbt.dimensions.save.amount": "Speichere %s Region(en) für Dimension '%s'",
335335
"data.nbt.dimensions.save.dim.amount": "%s Region(en) für Dimension '%s' gespeichert!",
336-
"flag.msg.deny.access-container": "Das Flag '{flag}' verbietet diese Aktion hier!",
337-
"flag.msg.deny.access-enderchest": "Das Flag '{flag}' verbietet diese Aktion hier!",
338-
"flag.msg.deny.animal-breeding": "Das Flag '{flag}' verbietet diese Aktion hier!",
339-
"flag.msg.deny.animal-mounting": "Das Flag '{flag}' verbietet diese Aktion hier!",
340-
"flag.msg.deny.animal-taming": "Das Flag '{flag}' verbietet diese Aktion hier!",
341-
"flag.msg.deny.animal-unmounting": "Das Flag '{flag}' verbietet diese Aktion hier!",
342-
"flag.msg.deny.break-blocks": "Das Flag '{flag}' verbietet diese Aktion hier!",
343-
"flag.msg.deny.enderpearl-from": "Das Flag '{flag}' verbietet diese Aktion hier!",
344-
"flag.msg.deny.enderpearl-to": "Das Flag '{flag}' verbietet diese Aktion hier!",
345-
"flag.msg.deny.enter-dim": "Das Flag '{flag}' verbietet diese Aktion hier!",
346-
"flag.msg.deny.exec-command": "Das Flag '{flag}' verbietet diese Aktion hier!",
347-
"flag.msg.deny.ignite-explosives": "Das Flag '{flag}' verbietet diese Aktion hier!",
348-
"flag.msg.deny.item-drop": "Das Flag '{flag}' verbietet diese Aktion hier!",
349-
"flag.msg.deny.item-pickup": "Das Flag '{flag}' verbietet diese Aktion hier!",
350-
"flag.msg.deny.knockback-players": "Das Flag '{flag}' verbietet diese Aktion hier!",
351-
"flag.msg.deny.level-freeze": "Das Flag '{flag}' verbietet diese Aktion hier!",
352-
"flag.msg.deny.melee-animals": "Das Flag '{flag}' verbietet diese Aktion hier!",
353-
"flag.msg.deny.melee-monsters": "Das Flag '{flag}' verbietet diese Aktion hier!",
354-
"flag.msg.deny.melee-players": "Das Flag '{flag}' verbietet diese Aktion hier!",
355-
"flag.msg.deny.melee-villagers": "Das Flag '{flag}' verbietet diese Aktion hier!",
356-
"flag.msg.deny.melee-wtrader": "Das Flag '{flag}' verbietet diese Aktion hier!",
357-
"flag.msg.deny.no-flight": "Das Flag '{flag}' verbietet diese Aktion hier!",
358-
"flag.msg.deny.no-pvp": "Das Flag '{flag}' verbietet diese Aktion hier!",
359-
"flag.msg.deny.no-sign-edit": "THe §9{flag}§r flag denies this action here!",
360-
"flag.msg.deny.place-blocks": "Das Flag '{flag}' verbietet diese Aktion hier!",
361-
"flag.msg.deny.place-fluids": "Das Flag '{flag}' verbietet diese Aktion hier!",
362-
"flag.msg.deny.scoop-fluids": "Das Flag '{flag}' verbietet diese Aktion hier!",
363-
"flag.msg.deny.send-chat": "Das Flag '{flag}' verbietet diese Aktion hier!",
364-
"flag.msg.deny.set-spawn": "Das Flag '{flag}' verbietet diese Aktion hier!",
365-
"flag.msg.deny.shovel-path": "Das Flag '{flag}' verbietet diese Aktion hier!",
366-
"flag.msg.deny.sleep": "Das Flag '{flag}' verbietet diese Aktion hier!",
367-
"flag.msg.deny.spawn-portal": "Das Flag '{flag}' verbietet diese Aktion hier!",
368-
"flag.msg.deny.strip-wood": "Das Flag '{flag}' verbietet diese Aktion hier!",
369-
"flag.msg.deny.till-farmland": "Das Flag '{flag}' verbietet diese Aktion hier!",
370-
"flag.msg.deny.tools-secondary": "Das Flag '{flag}' verbietet diese Aktion hier!",
371-
"flag.msg.deny.trample-farmland-player": "Das Flag '{flag}' verbietet diese Aktion hier!",
372-
"flag.msg.deny.use-blocks": "Das Flag '{flag}' verbietet diese Aktion hier!",
373-
"flag.msg.deny.use-bonemeal": "Das Flag '{flag}' verbietet diese Aktion hier!",
374-
"flag.msg.deny.use-elytra": "Das Flag '{flag}' verbietet diese Aktion hier!",
375-
"flag.msg.deny.use-entities": "Das Flag '{flag}' verbietet diese Aktion hier!",
376-
"flag.msg.deny.use-items": "Das Flag '{flag}' verbietet diese Aktion hier!",
377-
"flag.msg.deny.use-portal-players": "Das Flag '{flag}' verbietet diese Aktion hier!",
378-
"flag.msg.deny.walker-freeze": "Das Flag '{flag}' verbietet diese Aktion hier!",
379-
"flag.msg.deny.xp-freeze": "Das Flag '{flag}' verbietet diese Aktion hier!",
380-
"flag.msg.deny.xp-pickup": "Das Flag '{flag}' verbietet diese Aktion hier!",
381-
"flag.msg.push.deny.dim.default": "This action is denied dimension wide by the '{flag}' flag!",
382-
"flag.msg.push.deny.global.default": "This action is globally denied by the '{flag}' flag!",
383-
"flag.msg.push.deny.local.default": "[{region}]: Das Flag '{flag}' verbietet diese Aktion hier!",
336+
"flag.msg.deny.access-container": "Das Flag '%1$s' verbietet diese Aktion hier!",
337+
"flag.msg.deny.access-enderchest": "Das Flag '%1$s' verbietet diese Aktion hier!",
338+
"flag.msg.deny.animal-breeding": "Das Flag '%1$s' verbietet diese Aktion hier!",
339+
"flag.msg.deny.animal-mounting": "Das Flag '%1$s' verbietet diese Aktion hier!",
340+
"flag.msg.deny.animal-taming": "Das Flag '%1$s' verbietet diese Aktion hier!",
341+
"flag.msg.deny.animal-unmounting": "Das Flag '%1$s' verbietet diese Aktion hier!",
342+
"flag.msg.deny.break-blocks": "Das Flag '%1$s' verbietet diese Aktion hier!",
343+
"flag.msg.deny.enderpearl-from": "Das Flag '%1$s' verbietet diese Aktion hier!",
344+
"flag.msg.deny.enderpearl-to": "Das Flag '%1$s' verbietet diese Aktion hier!",
345+
"flag.msg.deny.enter-dim": "Das Flag '%1$s' verbietet diese Aktion hier!",
346+
"flag.msg.deny.exec-command": "Das Flag '%1$s' verbietet diese Aktion hier!",
347+
"flag.msg.deny.ignite-explosives": "Das Flag '%1$s' verbietet diese Aktion hier!",
348+
"flag.msg.deny.item-drop": "Das Flag '%1$s' verbietet diese Aktion hier!",
349+
"flag.msg.deny.item-pickup": "Das Flag '%1$s' verbietet diese Aktion hier!",
350+
"flag.msg.deny.knockback-players": "Das Flag '%1$s' verbietet diese Aktion hier!",
351+
"flag.msg.deny.level-freeze": "Das Flag '%1$s' verbietet diese Aktion hier!",
352+
"flag.msg.deny.melee-animals": "Das Flag '%1$s' verbietet diese Aktion hier!",
353+
"flag.msg.deny.melee-monsters": "Das Flag '%1$s' verbietet diese Aktion hier!",
354+
"flag.msg.deny.melee-players": "Das Flag '%1$s' verbietet diese Aktion hier!",
355+
"flag.msg.deny.melee-villagers": "Das Flag '%1$s' verbietet diese Aktion hier!",
356+
"flag.msg.deny.melee-wtrader": "Das Flag '%1$s' verbietet diese Aktion hier!",
357+
"flag.msg.deny.no-flight": "Das Flag '%1$s' verbietet diese Aktion hier!",
358+
"flag.msg.deny.no-pvp": "Das Flag '%1$s' verbietet diese Aktion hier!",
359+
"flag.msg.deny.no-sign-edit": "THe §9%1$s§r flag denies this action here!",
360+
"flag.msg.deny.place-blocks": "Das Flag '%1$s' verbietet diese Aktion hier!",
361+
"flag.msg.deny.place-fluids": "Das Flag '%1$s' verbietet diese Aktion hier!",
362+
"flag.msg.deny.scoop-fluids": "Das Flag '%1$s' verbietet diese Aktion hier!",
363+
"flag.msg.deny.send-chat": "Das Flag '%1$s' verbietet diese Aktion hier!",
364+
"flag.msg.deny.set-spawn": "Das Flag '%1$s' verbietet diese Aktion hier!",
365+
"flag.msg.deny.shovel-path": "Das Flag '%1$s' verbietet diese Aktion hier!",
366+
"flag.msg.deny.sleep": "Das Flag '%1$s' verbietet diese Aktion hier!",
367+
"flag.msg.deny.spawn-portal": "Das Flag '%1$s' verbietet diese Aktion hier!",
368+
"flag.msg.deny.strip-wood": "Das Flag '%1$s' verbietet diese Aktion hier!",
369+
"flag.msg.deny.till-farmland": "Das Flag '%1$s' verbietet diese Aktion hier!",
370+
"flag.msg.deny.tools-secondary": "Das Flag '%1$s' verbietet diese Aktion hier!",
371+
"flag.msg.deny.trample-farmland-player": "Das Flag '%1$s' verbietet diese Aktion hier!",
372+
"flag.msg.deny.use-blocks": "Das Flag '%1$s' verbietet diese Aktion hier!",
373+
"flag.msg.deny.use-bonemeal": "Das Flag '%1$s' verbietet diese Aktion hier!",
374+
"flag.msg.deny.use-elytra": "Das Flag '%1$s' verbietet diese Aktion hier!",
375+
"flag.msg.deny.use-entities": "Das Flag '%1$s' verbietet diese Aktion hier!",
376+
"flag.msg.deny.use-items": "Das Flag '%1$s' verbietet diese Aktion hier!",
377+
"flag.msg.deny.use-portal-players": "Das Flag '%1$s' verbietet diese Aktion hier!",
378+
"flag.msg.deny.walker-freeze": "Das Flag '%1$s' verbietet diese Aktion hier!",
379+
"flag.msg.deny.xp-freeze": "Das Flag '%1$s' verbietet diese Aktion hier!",
380+
"flag.msg.deny.xp-pickup": "Das Flag '%1$s' verbietet diese Aktion hier!",
381+
"flag.msg.push.deny.dim.default": "This action is denied dimension wide by the '%1$s' flag!",
382+
"flag.msg.push.deny.global.default": "This action is globally denied by the '%1$s' flag!",
383+
"flag.msg.push.deny.local.default": "[%2$s]: Das Flag '%1$s' verbietet diese Aktion hier!",
384384
"help.header": "== Yet Another World Protector - Hilfe ==",
385385
"help.hint.link.hover": "Benutze '/%s global info' als ein Startpunkt um die globale Region zu verwalten.",
386386
"help.hint.link.text": "Starte hier",

0 commit comments

Comments
 (0)