From 9575a250e71d5ac3fd61b2cee14b6f78afdf62f9 Mon Sep 17 00:00:00 2001 From: Patbox <39821509+Patbox@users.noreply.github.com> Date: Sat, 1 Jan 2022 17:37:41 +0100 Subject: [PATCH] Small update - Added logo to the jar - Emoticons work with /tellform - Changed some default config values - Some bugfixes and improvements in config error handling --- gradle.properties | 10 +++++----- .../eu/pb4/styledchat/StyledChatUtils.java | 14 ++++++++++++++ .../eu/pb4/styledchat/command/Commands.java | 17 +++++++++-------- .../eu/pb4/styledchat/config/ChatStyle.java | 4 +++- .../pb4/styledchat/config/ConfigManager.java | 17 +++++++++-------- .../styledchat/config/data/ChatStyleData.java | 5 +++-- .../styledchat/config/data/ConfigData.java | 18 ++++++++++-------- .../pb4/styledchat/mixin/MeCommandMixin.java | 8 +------- src/main/resources/assets/icon.png | Bin 0 -> 8091 bytes src/main/resources/fabric.mod.json | 9 ++++++++- 10 files changed, 62 insertions(+), 40 deletions(-) create mode 100644 src/main/resources/assets/icon.png diff --git a/gradle.properties b/gradle.properties index 290df9e..06a7b25 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,15 +3,15 @@ org.gradle.jvmargs=-Xmx1G # Fabric Properties # check these on https://fabricmc.net/use - minecraft_version=1.18 - yarn_mappings=1.18+build.1 - loader_version=0.12.6 + minecraft_version=1.18.1 + yarn_mappings=1.18.1+build.1 + loader_version=0.12.12 #Fabric api - fabric_version=0.43.1+1.18 + fabric_version=0.45.0+1.18 # Mod Properties - mod_version = 1.2.2+1.18 + mod_version = 1.2.3+1.18 maven_group = eu.pb4 archives_base_name = styled-chat diff --git a/src/main/java/eu/pb4/styledchat/StyledChatUtils.java b/src/main/java/eu/pb4/styledchat/StyledChatUtils.java index 20dfad3..802093c 100644 --- a/src/main/java/eu/pb4/styledchat/StyledChatUtils.java +++ b/src/main/java/eu/pb4/styledchat/StyledChatUtils.java @@ -112,6 +112,20 @@ public static Map getEmotes(MinecraftServer server) { return new FakeMapServer(server, ConfigManager.getConfig().getEmotes(server.getCommandSource())); } + public static Text formatFor(ServerPlayerEntity player, String input) { + return PlaceholderAPI.parsePredefinedText( + TextParser.parse(StyledChatUtils.formatMessage(input, getHandlers(player))), + EMOTE_PATTERN, getEmotes(player) + ); + } + + public static Text formatFor(MinecraftServer server, String input) { + return PlaceholderAPI.parsePredefinedText( + TextParser.parse(StyledChatUtils.formatMessage(input, TextParser.getRegisteredTags())), + EMOTE_PATTERN, getEmotes(server) + ); + } + public static String formatMessage(String input, Map handlers) { var config = ConfigManager.getConfig(); if (handlers.containsKey(StyledChatUtils.LINK_TAG)) { diff --git a/src/main/java/eu/pb4/styledchat/command/Commands.java b/src/main/java/eu/pb4/styledchat/command/Commands.java index 26f91b7..95abd6e 100644 --- a/src/main/java/eu/pb4/styledchat/command/Commands.java +++ b/src/main/java/eu/pb4/styledchat/command/Commands.java @@ -3,23 +3,18 @@ import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.context.CommandContext; -import eu.pb4.placeholders.TextParser; import eu.pb4.styledchat.StyledChatMod; import eu.pb4.styledchat.StyledChatUtils; import eu.pb4.styledchat.config.ConfigManager; import me.lucko.fabric.api.permissions.v0.Permissions; import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback; import net.minecraft.command.argument.EntityArgumentType; -import net.minecraft.command.argument.TextArgumentType; import net.minecraft.server.command.ServerCommandSource; -import net.minecraft.server.network.ServerPlayerEntity; import net.minecraft.text.LiteralText; -import net.minecraft.text.Texts; +import net.minecraft.text.Text; import net.minecraft.util.Formatting; import net.minecraft.util.Util; -import java.util.Iterator; - import static net.minecraft.server.command.CommandManager.argument; import static net.minecraft.server.command.CommandManager.literal; @@ -45,7 +40,13 @@ public static void register() { .then(argument("message", StringArgumentType.greedyString()) .executes((context) -> { int i = 0; - var parsed = TextParser.parse(StyledChatUtils.formatMessage(context.getArgument("message", String.class), TextParser.getRegisteredTags())); + Text parsed; + try { + parsed = StyledChatUtils.formatFor(context.getSource().getPlayer(), context.getArgument("message", String.class)); + } catch (Exception e) { + parsed = StyledChatUtils.formatFor(context.getSource().getServer(), context.getArgument("message", String.class)); + + } for (var player : EntityArgumentType.getPlayers(context, "targets")) { player.sendSystemMessage(parsed, Util.NIL_UUID); @@ -64,7 +65,7 @@ private static int reloadConfig(CommandContext context) { if (ConfigManager.loadConfig()) { context.getSource().sendFeedback(new LiteralText("Reloaded config!"), false); } else { - context.getSource().sendError(new LiteralText("Error accrued while reloading config!").formatted(Formatting.RED)); + context.getSource().sendError(new LiteralText("Error occurred while reloading config! Check console for more information!").formatted(Formatting.RED)); } return 1; diff --git a/src/main/java/eu/pb4/styledchat/config/ChatStyle.java b/src/main/java/eu/pb4/styledchat/config/ChatStyle.java index 2c6876c..521099a 100644 --- a/src/main/java/eu/pb4/styledchat/config/ChatStyle.java +++ b/src/main/java/eu/pb4/styledchat/config/ChatStyle.java @@ -73,7 +73,7 @@ public ChatStyle(ChatStyleData data) { public Text getDisplayName(ServerPlayerEntity player, Text vanillaDisplayName) { if (this.displayName == null) { return null; - } else if (this.advancementGoal == StyledChatUtils.IGNORED_TEXT) { + } else if (this.displayName == StyledChatUtils.IGNORED_TEXT) { return vanillaDisplayName; } @@ -81,6 +81,8 @@ public Text getDisplayName(ServerPlayerEntity player, Text vanillaDisplayName) { PlaceholderAPI.parseText(this.displayName, player), PlaceholderAPI.PREDEFINED_PLACEHOLDER_PATTERN, Map.of("vanillaDisplayName", vanillaDisplayName, + "player", vanillaDisplayName, + "default", vanillaDisplayName, "name", player.getName()) ); } diff --git a/src/main/java/eu/pb4/styledchat/config/ConfigManager.java b/src/main/java/eu/pb4/styledchat/config/ConfigManager.java index 572a8ae..a9ed71f 100644 --- a/src/main/java/eu/pb4/styledchat/config/ConfigManager.java +++ b/src/main/java/eu/pb4/styledchat/config/ConfigManager.java @@ -10,26 +10,26 @@ import org.apache.commons.io.IOUtils; import java.io.*; +import java.nio.charset.StandardCharsets; public class ConfigManager { public static final int VERSION = 2; private static final Gson GSON = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().setLenient().create(); - private static Config CONFIG; + private static Config CONFIG = null; public static Config getConfig() { return CONFIG; } public static boolean loadConfig() { - CONFIG = null; try { ConfigData config; File configFile = new File(FabricLoader.getInstance().getConfigDir().toFile(), "styled-chat.json"); if (configFile.exists()) { - String json = IOUtils.toString(new InputStreamReader(new FileInputStream(configFile), "UTF-8")); + String json = IOUtils.toString(new InputStreamReader(new FileInputStream(configFile), StandardCharsets.UTF_8)); VersionConfigData versionConfigData = GSON.fromJson(json, VersionConfigData.class); config = ConfigData.transform(switch (versionConfigData.CONFIG_VERSION_DONT_TOUCH_THIS) { @@ -42,18 +42,19 @@ public static boolean loadConfig() { config = new ConfigData(); } - BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(configFile), "UTF-8")); + BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(configFile), StandardCharsets.UTF_8)); writer.write(GSON.toJson(config)); writer.close(); CONFIG = new Config(config); return true; - } - catch(IOException exception) { - StyledChatMod.LOGGER.error("Something went wrong while reading config!"); + } catch(Exception exception) { + StyledChatMod.LOGGER.error("Something went wrong while reading config! Make sure format is correct!"); exception.printStackTrace(); - CONFIG = new Config(new ConfigData()); + if (CONFIG == null) { + CONFIG = new Config(new ConfigData()); + } return false; } } diff --git a/src/main/java/eu/pb4/styledchat/config/data/ChatStyleData.java b/src/main/java/eu/pb4/styledchat/config/data/ChatStyleData.java index abbd06f..1a297b7 100644 --- a/src/main/java/eu/pb4/styledchat/config/data/ChatStyleData.java +++ b/src/main/java/eu/pb4/styledchat/config/data/ChatStyleData.java @@ -26,14 +26,14 @@ public class ChatStyleData { private static ChatStyleData getDefault() { ChatStyleData data = new ChatStyleData(); - data.displayName = "${vanillaDisplayName}"; + data.displayName = "${default}"; data.chat = "<${player}> ${message}"; data.join = ""; data.joinRenamed = ""; data.joinFirstTime = ""; data.left = ""; data.death = "${default_message}"; - data.advancementTask = "<>"; + data.advancementTask = ""; data.advancementGoal = ""; data.advancementChallenge = ""; data.teamChatSent = "\\'>${team}':'${displayName}':'${message}'>"; @@ -51,6 +51,7 @@ public void fillMissing() { this.chat = Objects.requireNonNullElse(this.chat, DEFAULT.chat); this.join = Objects.requireNonNullElse(this.join, DEFAULT.join); this.joinRenamed = Objects.requireNonNullElse(this.joinRenamed, DEFAULT.joinRenamed); + this.joinFirstTime = Objects.requireNonNullElse(this.joinFirstTime, DEFAULT.joinFirstTime); this.left = Objects.requireNonNullElse(this.left, DEFAULT.left); this.death = Objects.requireNonNullElse(this.death, DEFAULT.death); this.advancementTask = Objects.requireNonNullElse(this.advancementTask, DEFAULT.advancementTask); diff --git a/src/main/java/eu/pb4/styledchat/config/data/ConfigData.java b/src/main/java/eu/pb4/styledchat/config/data/ConfigData.java index 7e0146a..6aa1687 100644 --- a/src/main/java/eu/pb4/styledchat/config/data/ConfigData.java +++ b/src/main/java/eu/pb4/styledchat/config/data/ConfigData.java @@ -1,13 +1,9 @@ package eu.pb4.styledchat.config.data; -import com.mojang.serialization.RecordBuilder; import eu.pb4.placeholders.TextParser; -import eu.pb4.placeholders.util.GeneralUtils; import eu.pb4.styledchat.StyledChatUtils; import eu.pb4.styledchat.config.ConfigManager; -import me.lucko.fabric.api.permissions.v0.Permissions; -import net.minecraft.text.MutableText; -import net.minecraft.util.Hand; +import net.minecraft.util.Formatting; import java.util.*; @@ -22,18 +18,17 @@ public class ConfigData { public List permissionEmoticons = new ArrayList<>(); - public boolean legacyChatFormatting = false; + public boolean legacyChatFormatting = true; public boolean parseLinksInChat = true; public boolean enableMarkdown = true; public boolean formattingInPrivateMessages = true; public boolean formattingInTeamMessages = true; - public String linkStyle = "${link}"; + public String linkStyle = "${link}"; public String spoilerStyle = "${spoiler}"; public String spoilerSymbol = "▌"; public HashMap defaultEnabledFormatting = getDefaultFormatting(); - private static HashMap getDefaultFormatting() { HashMap map = new HashMap<>(); for (String string : TextParser.getRegisteredSafeTags().keySet()) { @@ -49,6 +44,13 @@ private static HashMap getDefaultFormatting() { map.put("strikethrough", true); map.put("st", true); map.put("underline", true); + + for (var formatting : Formatting.values()) { + if (formatting.isColor()) { + map.put(formatting.getName(), true); + } + } + return map; } diff --git a/src/main/java/eu/pb4/styledchat/mixin/MeCommandMixin.java b/src/main/java/eu/pb4/styledchat/mixin/MeCommandMixin.java index 9af8e1f..e7fba5f 100644 --- a/src/main/java/eu/pb4/styledchat/mixin/MeCommandMixin.java +++ b/src/main/java/eu/pb4/styledchat/mixin/MeCommandMixin.java @@ -49,13 +49,7 @@ private static void styledChat_formatText(CommandContext co } if (emotes.size() != 0) { - message = PlaceholderAPI.parsePredefinedText(message, StyledChatUtils.EMOTE_PATTERN, new AbstractMap() { - @NotNull - @Override - public Set> entrySet() { - return null; - } - }); + message = PlaceholderAPI.parsePredefinedText(message, StyledChatUtils.EMOTE_PATTERN, emotes); } diff --git a/src/main/resources/assets/icon.png b/src/main/resources/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f13ec8f93d652ed9dab82d4ffbe3d1bc19b898dc GIT binary patch literal 8091 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index 57462a5..98a59ab 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -14,7 +14,7 @@ }, "license": "LGPLv3", - + "icon": "./assets/icon.png", "environment": "*", "entrypoints": { "main": [ @@ -27,5 +27,12 @@ "depends": { "minecraft": ">=1.18-rc.1" + }, + "custom": { + "modmenu": { + "links": { + "modmenu.discord": "https://pb4.eu/discord" + } + } } }