Skip to content

Commit 8f46d1b

Browse files
authored
fix: Improve message formatting (#45)
1 parent a7672cc commit 8f46d1b

23 files changed

+214
-261
lines changed

src/main/java/com/github/zly2006/enclosure/config/Converter.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package com.github.zly2006.enclosure.config;
22

33
import com.github.zly2006.enclosure.*;
4+
import com.github.zly2006.enclosure.utils.TrT;
45
import com.mojang.authlib.GameProfile;
56
import net.minecraft.nbt.NbtCompound;
67
import net.minecraft.nbt.NbtDouble;
78
import net.minecraft.nbt.NbtList;
89
import net.minecraft.registry.RegistryKey;
910
import net.minecraft.server.world.ServerWorld;
1011
import net.minecraft.text.MutableText;
11-
import net.minecraft.text.Text;
1212
import net.minecraft.world.World;
1313
import org.yaml.snakeyaml.Yaml;
1414

@@ -189,18 +189,18 @@ private static void convertToList(Map<String, Object> data, EnclosureList enclos
189189
MutableText status = null;
190190
for (EnclosureArea area : enclosureList.getAreas()) {
191191
if (enclosure.equals(area)) {
192-
status = Text.literal(ServerMain.INSTANCE.getTranslation().get("enclosure.message.existed").getAsString());
192+
status = TrT.of("enclosure.message.existed");
193193
} else if (enclosure.intersect(area)) {
194-
status = Text.literal(ServerMain.INSTANCE.getTranslation().get("enclosure.message.intersected").getAsString()).append(area.getFullName());
194+
status = TrT.of("enclosure.message.intersected", area.getFullName());
195195
} else if (enclosure.getName().equals(area.getName())) {
196-
status = Text.literal(ServerMain.INSTANCE.getTranslation().get("enclosure.message.name_in_use").getAsString());
196+
status = TrT.of("enclosure.message.name_in_use");
197197
}
198198
}
199199
if (status == null) {
200200
enclosureList.addArea(enclosure);
201201
} else {
202-
LOGGER.error("There was a error land which named \"" + enclosure.getFullName() + "\" while converting.");
203-
LOGGER.error("Error type:" + status);
202+
LOGGER.error("There was a error land which named \"{}\" while converting.", enclosure.getFullName());
203+
LOGGER.error("Error type: {}", status);
204204
}
205205
}
206206
});

src/main/java/com/github/zly2006/enclosure/gui/EnclosureScreen.java

+11-30
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22

33
import com.github.zly2006.enclosure.EnclosureView;
44
import com.github.zly2006.enclosure.network.config.UUIDCacheS2CPacket;
5+
import com.github.zly2006.enclosure.utils.UtilsKt;
56
import net.minecraft.client.MinecraftClient;
67
import net.minecraft.client.gui.DrawContext;
78
import net.minecraft.client.gui.Element;
89
import net.minecraft.client.gui.screen.ingame.HandledScreen;
910
import net.minecraft.client.gui.widget.ButtonWidget;
1011
import net.minecraft.entity.player.PlayerInventory;
12+
import net.minecraft.text.MutableText;
1113
import net.minecraft.text.Text;
1214
import net.minecraft.util.Formatting;
1315
import org.jetbrains.annotations.Nullable;
@@ -54,7 +56,7 @@ protected void init() {
5456
.size(100, 20)
5557
.position(5, 35)
5658
.build());
57-
playerWidget = addDrawableChild(ButtonWidget.builder(Text.translatable("enclosure.widget.player"), button -> {
59+
playerWidget = addDrawableChild(ButtonWidget.builder(Text.translatable("enclosure.widget.showplayer"), button -> {
5860
assert client != null;
5961
button.active = false;
6062
unlistedWidget.active = true;
@@ -98,37 +100,16 @@ protected void init() {
98100
}, 5, 5, width - 10));
99101
}
100102
textWidgets.add(new ClickableTextWidget(client, this, Text.empty()
101-
.append(Text.literal(area.getFullName()).styled(style -> style.withColor(Formatting.GOLD)))
102-
.append(" ")
103-
.append(Text.translatable("enclosure.info.created_by"))
104-
.append(" ")
105-
.append(owner == null ?
106-
Text.translatable("enclosure.message.unknown_user").styled(style -> style.withColor(Formatting.RED)) :
107-
Text.literal(owner).styled(style -> style.withColor(Formatting.GOLD)))
108-
.append(", ")
109-
.append(Text.translatable("enclosure.info.created_on"))
110-
.append(Text.literal(new SimpleDateFormat().format(area.getCreatedOn())).styled(style -> style.withColor(Formatting.GOLD))),
103+
.append(Text.translatable("enclosure.info.created",
104+
Text.literal(area.getFullName()).styled(style -> style.withColor(Formatting.GOLD)),
105+
(owner == null ?
106+
Text.translatable("enclosure.message.unknown_user").styled(style -> style.withColor(Formatting.RED)) : Text.literal(owner).styled(style -> style.withColor(Formatting.GOLD))),
107+
Text.literal(new SimpleDateFormat().format(area.getCreatedOn())).styled(style -> style.withColor(Formatting.GOLD))
108+
)),
111109
null, null,
112110
5, 5, width - 10));
113-
textWidgets.add(new ClickableTextWidget(client, this, Text.translatable("enclosure.message.select.from")
114-
.append(Text.literal("[").styled(style -> style.withColor(Formatting.DARK_GREEN)))
115-
.append(Text.literal(String.valueOf(area.getMinX())).styled(style -> style.withColor(Formatting.GREEN)))
116-
.append(Text.literal(", ").styled(style -> style.withColor(Formatting.DARK_GREEN)))
117-
.append(Text.literal(String.valueOf(area.getMinY())).styled(style -> style.withColor(Formatting.GREEN)))
118-
.append(Text.literal(", ").styled(style -> style.withColor(Formatting.DARK_GREEN)))
119-
.append(Text.literal(String.valueOf(area.getMinZ())).styled(style -> style.withColor(Formatting.GREEN)))
120-
.append(Text.literal("]").styled(style -> style.withColor(Formatting.DARK_GREEN)))
121-
.append(Text.translatable("enclosure.message.select.to"))
122-
.append(Text.literal("[").styled(style -> style.withColor(Formatting.DARK_GREEN)))
123-
.append(Text.literal(String.valueOf(area.getMaxX())).styled(style -> style.withColor(Formatting.GREEN)))
124-
.append(Text.literal(", ").styled(style -> style.withColor(Formatting.DARK_GREEN)))
125-
.append(Text.literal(String.valueOf(area.getMaxY())).styled(style -> style.withColor(Formatting.GREEN)))
126-
.append(Text.literal(", ").styled(style -> style.withColor(Formatting.DARK_GREEN)))
127-
.append(Text.literal(String.valueOf(area.getMaxZ())).styled(style -> style.withColor(Formatting.GREEN)))
128-
.append(Text.literal("]").styled(style -> style.withColor(Formatting.DARK_GREEN)))
129-
.append(Text.translatable("enclosure.message.select.world"))
130-
.append(Text.literal(handler.worldId.toString()).styled(style -> style.withColor(Formatting.GOLD))),
131-
Text.translatable("enclosure.widget.selection_render.hover"),
111+
MutableText selectionText = UtilsKt.formatSelection(handler.worldId, area.getMinX(), area.getMinY(), area.getMinZ(), area.getMaxX(), area.getMaxY(), area.getMaxZ());
112+
textWidgets.add(new ClickableTextWidget(client, this, selectionText, Text.translatable("enclosure.widget.selection_render.hover"),
132113
button -> {
133114
assert client.player != null;
134115
client.player.networkHandler.sendChatCommand("enclosure select land " + handler.fullName);

src/main/java/com/github/zly2006/enclosure/gui/PermissionScreen.java

+5-13
Original file line numberDiff line numberDiff line change
@@ -64,19 +64,11 @@ public void close() {
6464
public void render(DrawContext context, int mouseX, int mouseY, float delta) {
6565
renderInGameBackground(context);
6666
super.render(context, mouseX, mouseY, delta);
67-
MutableText title = Text.translatable("enclosure.widget.set_permission").append(" ");
68-
if (CONSOLE.equals(uuid)) {
69-
title.append(Text.translatable("enclosure.widget.global"));
70-
}
71-
else {
72-
title.append(Text.translatable("enclosure.widget.player"))
73-
.append(" ")
74-
.append(UUIDCacheS2CPacket.getName(uuid));
75-
}
76-
title.append(" ")
77-
.append(Text.translatable("enclosure.widget.in_enclosure"))
78-
.append(" ")
79-
.append(fullName);
67+
68+
MutableText title = Text.translatable("enclosure.widget.set_permission",
69+
(CONSOLE.equals(uuid) ? Text.translatable("enclosure.widget.global") : Text.translatable("enclosure.widget.player", UUIDCacheS2CPacket.getName(uuid))),
70+
fullName
71+
);
8072
context.drawText(textRenderer, title, 10, 10, 0xffffff, false);
8173
}
8274

src/main/java/com/github/zly2006/enclosure/mixin/MixinLanguage.java

+3-6
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,17 @@
22

33
import com.github.zly2006.enclosure.ServerMain;
44
import com.google.common.collect.ImmutableMap;
5+
import com.llamalad7.mixinextras.sugar.Local;
56
import net.minecraft.util.Language;
67
import org.spongepowered.asm.mixin.Mixin;
78
import org.spongepowered.asm.mixin.injection.At;
89
import org.spongepowered.asm.mixin.injection.Inject;
910
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
10-
import org.spongepowered.asm.mixin.injection.callback.LocalCapture;
11-
12-
import java.util.function.BiConsumer;
1311

1412
@Mixin(Language.class)
1513
public class MixinLanguage {
16-
@SuppressWarnings({"rawtypes", "unchecked"})
17-
@Inject(method = "create", locals = LocalCapture.CAPTURE_FAILHARD, at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Language;load(Ljava/util/function/BiConsumer;Ljava/lang/String;)V"))
18-
private static void create(CallbackInfoReturnable<Language> cir, ImmutableMap.Builder builder, BiConsumer biConsumer) {
14+
@Inject(method = "create", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Language;load(Ljava/util/function/BiConsumer;Ljava/lang/String;)V"))
15+
private static void create(CallbackInfoReturnable<Language> cir, @Local ImmutableMap.Builder<String, String> builder) {
1916
if (ServerMain.INSTANCE.getCommonConfig().injectServerLanguage) {
2017
ServerMain.INSTANCE.getTranslation().entrySet().forEach(entry ->
2118
builder.put(entry.getKey(), entry.getValue().getAsString()));

src/main/kotlin/com/github/zly2006/enclosure/Enclosure.kt

+5-7
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,12 @@ import com.github.zly2006.enclosure.command.Session
44
import com.github.zly2006.enclosure.utils.Serializable2Text.SerializationSettings
55
import com.github.zly2006.enclosure.utils.TrT
66
import com.github.zly2006.enclosure.utils.clickRun
7-
import com.github.zly2006.enclosure.utils.hoverText
87
import net.minecraft.nbt.NbtCompound
98
import net.minecraft.registry.RegistryWrapper.WrapperLookup
109
import net.minecraft.server.network.ServerPlayerEntity
1110
import net.minecraft.server.world.ServerWorld
1211
import net.minecraft.text.MutableText
12+
import net.minecraft.text.Text
1313
import net.minecraft.util.Formatting
1414
import net.minecraft.util.math.BlockPos
1515

@@ -59,15 +59,13 @@ class Enclosure : EnclosureArea {
5959
val text = super.serialize(settings, player)
6060
if (subEnclosures.areas.isNotEmpty()) {
6161
text.append("\n")
62-
text.append(TrT.of("enclosure.message.sub_lands"))
63-
for (area in subEnclosures.areas) {
64-
text.append(area.serialize(SerializationSettings.Name, player).styled {
62+
val subLandsText = subEnclosures.areas.fold(Text.empty()) { acc, area ->
63+
acc.append(area.serialize(SerializationSettings.NameHover, player).styled {
6564
it.withColor(Formatting.GOLD)
66-
.hoverText(area.serialize(SerializationSettings.Hover, player))
6765
.clickRun("/enclosure info ${area.fullName}")
68-
})
69-
text.append(" ")
66+
}).append(" ")
7067
}
68+
text.append(TrT.of("enclosure.message.sub_lands", subLandsText))
7169
}
7270
return text
7371
} else {

src/main/kotlin/com/github/zly2006/enclosure/EnclosureArea.kt

+1-3
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,9 @@ import net.minecraft.nbt.NbtList
1818
import net.minecraft.registry.RegistryWrapper
1919
import net.minecraft.server.command.ServerCommandSource
2020
import net.minecraft.server.network.ServerPlayerEntity
21-
import net.minecraft.server.world.ChunkTicketType
2221
import net.minecraft.server.world.ServerWorld
2322
import net.minecraft.text.ClickEvent
2423
import net.minecraft.text.MutableText
25-
import net.minecraft.text.Style
2624
import net.minecraft.text.Text
2725
import net.minecraft.util.Formatting
2826
import net.minecraft.util.Identifier
@@ -403,7 +401,7 @@ open class EnclosureArea : PersistentState, EnclosureView {
403401

404402
SerializationSettings.BarredFull -> {
405403
val bar = Text.literal("------------------------------")
406-
.styled { style: Style -> style.withColor(Formatting.YELLOW).withBold(true) }
404+
.styled { it.withColor(Formatting.YELLOW).withBold(true) }
407405
Text.empty()
408406
.append(bar)
409407
.append("\n")

src/main/kotlin/com/github/zly2006/enclosure/PermissionHolder.kt

+11-5
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ interface PermissionHolder : Serializable2Text {
5656
fun hasPubPerm(perm: Permission): Boolean {
5757
if (!perm.target.fitEnclosure()) {
5858
throw PermissionTargetException(
59-
TrT.of("enclosure.message.permission_target_error")+(Text.literal(perm.target.name))
59+
TrT.of("enclosure.message.permission_target_error",
60+
Text.literal(perm.target.name)
61+
)
6062
)
6163
}
6264
return hasPerm(CONSOLE, perm)
@@ -69,11 +71,15 @@ interface PermissionHolder : Serializable2Text {
6971
}
7072
if (uuid == CONSOLE && !perm.target.fitEnclosure()) {
7173
throw PermissionTargetException(
72-
TrT.of("enclosure.message.permission_target_error").append(perm.target.name)
74+
TrT.of("enclosure.message.permission_target_error",
75+
perm.target.name
76+
)
7377
)
7478
} else if (uuid != CONSOLE && !perm.target.fitPlayer()) {
7579
throw PermissionTargetException(
76-
TrT.of("enclosure.message.permission_target_error").append(perm.target.name)
80+
TrT.of("enclosure.message.permission_target_error",
81+
perm.target.name
82+
)
7783
)
7884
}
7985
perm.setValue(permissionsMap[uuid]!!, value)
@@ -89,9 +95,9 @@ interface PermissionHolder : Serializable2Text {
8995
val text = Text.literal("")
9096
map.forEach { (key: String?, value: Boolean) ->
9197
if (value) {
92-
text.append(Text.literal(key).setStyle(Style.EMPTY.withColor(Formatting.GREEN)))
98+
text.append(Text.literal(key).green())
9399
} else {
94-
text.append(Text.literal(key).setStyle(Style.EMPTY.withColor(Formatting.RED)))
100+
text.append(Text.literal(key).red())
95101
}
96102
text.append(" ")
97103
}

src/main/kotlin/com/github/zly2006/enclosure/ServerMain.kt

+1-19
Original file line numberDiff line numberDiff line change
@@ -56,9 +56,7 @@ import net.minecraft.server.command.CommandManager
5656
import net.minecraft.server.network.ServerPlayNetworkHandler
5757
import net.minecraft.server.network.ServerPlayerEntity
5858
import net.minecraft.server.world.ServerWorld
59-
import net.minecraft.text.Style
6059
import net.minecraft.text.Text
61-
import net.minecraft.text.TextColor
6260
import net.minecraft.util.*
6361
import net.minecraft.util.hit.BlockHitResult
6462
import net.minecraft.util.hit.HitResult
@@ -108,23 +106,7 @@ object ServerMain: ModInitializer {
108106
val item: Item,
109107
val entity: Entity?
110108
)
111-
val HEADER: Text = Text.empty()
112-
.append(Text.literal("[").styled { style: Style ->
113-
style.withColor(
114-
TextColor.fromRgb(0x00FF00)
115-
)
116-
})
117-
.append(Text.literal("Enclosure").styled { style: Style ->
118-
style.withColor(
119-
TextColor.fromRgb(0x00FFFF)
120-
)
121-
})
122-
.append(Text.literal("]").styled { style: Style ->
123-
style.withColor(
124-
TextColor.fromRgb(0x00FF00)
125-
)
126-
})
127-
.append(Text.literal(" ").formatted(Formatting.RESET))
109+
128110
internal val enclosures: MutableMap<RegistryKey<World>, EnclosureList> = HashMap()
129111
var operationItem: Item? = null
130112
var playerSessions: MutableMap<UUID, Session> = HashMap()

src/main/kotlin/com/github/zly2006/enclosure/command/AboutSubcommand.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,11 @@ fun BuilderScope<*>.registerAbout() {
2020
})
2121
source.sendMessage(TrT.of("enclosure.about.team_page"))
2222
source.sendMessage(
23-
TrT.of("enclosure.about.version.server").append(MOD_VERSION.friendlyString)
23+
TrT.of("enclosure.about.version.server", MOD_VERSION.friendlyString)
2424
)
2525
if (player != null && EnclosureInstalledC2SPacket.isInstalled(player)) {
2626
val version = EnclosureInstalledC2SPacket.clientVersion(player)
27-
source.sendMessage(TrT.of("enclosure.about.version.client").append(version!!.friendlyString))
27+
source.sendMessage(TrT.of("enclosure.about.version.client", version!!.friendlyString))
2828
}
2929
source.sendMessage(TrT.of("enclosure.about.copyright"))
3030
}

src/main/kotlin/com/github/zly2006/enclosure/command/BuilderScope.kt

+12-10
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import com.github.zly2006.enclosure.exceptions.PermissionTargetException
77
import com.github.zly2006.enclosure.minecraftServer
88
import com.github.zly2006.enclosure.utils.TrT
99
import com.github.zly2006.enclosure.utils.checkPermission
10+
import com.github.zly2006.enclosure.utils.clickRun
1011
import com.github.zly2006.enclosure.utils.hoverText
1112
import com.mojang.brigadier.Command
1213
import com.mojang.brigadier.arguments.ArgumentType
@@ -16,7 +17,9 @@ import com.mojang.brigadier.context.CommandContext
1617
import com.mojang.brigadier.exceptions.CommandSyntaxException
1718
import net.minecraft.server.command.CommandManager
1819
import net.minecraft.server.command.ServerCommandSource
19-
import net.minecraft.text.*
20+
import net.minecraft.text.MutableText
21+
import net.minecraft.text.Style
22+
import net.minecraft.text.Text
2023
import net.minecraft.util.Formatting
2124
import net.minecraft.util.math.BlockPos
2225

@@ -48,7 +51,7 @@ class BuilderScope<T: argT>(var parent: T) {
4851
throw e
4952
} catch (e: Throwable) {
5053
LOGGER.error("Error while executing command: " + it.input, e)
51-
error(TrT.of("enclosure.message.error").append("${e.javaClass.simpleName}: ${e.message}"), it)
54+
error(TrT.of("enclosure.message.error","${e.javaClass.simpleName}: ${e.message}"), it)
5255
}
5356
}
5457
}
@@ -66,11 +69,10 @@ class BuilderScope<T: argT>(var parent: T) {
6669
val firstPage = page == 1
6770
val lastPage = page >= totalPage
6871

69-
val ret: MutableText = TrT.of("enclosure.menu.page.0")
70-
.append(page.toString())
71-
.append(TrT.of("enclosure.menu.page.1"))
72-
.append(totalPage.toString())
73-
.append("\n")
72+
val ret: MutableText = TrT.of("enclosure.menu.page",
73+
page.toString(),
74+
totalPage.toString()
75+
).append("\n")
7476

7577
var i: Int = size * (page - 1)
7678
while (i < size * page && i < list.size) {
@@ -85,16 +87,16 @@ class BuilderScope<T: argT>(var parent: T) {
8587
if (firstPage) Style.EMPTY.withColor(Formatting.GRAY)
8688
else Style.EMPTY.withColor(Formatting.DARK_GREEN)
8789
.hoverText(Text.of("Page ${page - 1}"))
88-
.withClickEvent(ClickEvent(ClickEvent.Action.RUN_COMMAND, "$command ${page - 1}"))
90+
.clickRun("$command ${page - 1}")
8991
)
9092
)
9193
ret.append(" ")
9294
ret.append(
9395
TrT.of("enclosure.menu.next").setStyle(
9496
if (lastPage) Style.EMPTY.withColor(Formatting.GRAY)
9597
else Style.EMPTY.withColor(Formatting.DARK_GREEN)
96-
.withHoverEvent(HoverEvent(HoverEvent.Action.SHOW_TEXT, Text.of("Page ${page + 1}")))
97-
.withClickEvent(ClickEvent(ClickEvent.Action.RUN_COMMAND, "$command ${page + 1}"))
98+
.hoverText(Text.of("Page ${page + 1}"))
99+
.clickRun("$command ${page + 1}")
98100
)
99101
)
100102
}

0 commit comments

Comments
 (0)