diff --git a/Fabric/src/main/java/chylex/customwindowtitle/fabric/CustomWindowTitle.java b/Fabric/src/main/java/chylex/customwindowtitle/fabric/CustomWindowTitle.java index cea415a..f9b8eef 100644 --- a/Fabric/src/main/java/chylex/customwindowtitle/fabric/CustomWindowTitle.java +++ b/Fabric/src/main/java/chylex/customwindowtitle/fabric/CustomWindowTitle.java @@ -1,8 +1,8 @@ package chylex.customwindowtitle.fabric; + import chylex.customwindowtitle.TitleConfig; import chylex.customwindowtitle.TitleParser; import chylex.customwindowtitle.data.CommonTokenData; -import com.mojang.blaze3d.platform.Window; import net.fabricmc.api.ClientModInitializer; import net.fabricmc.loader.api.FabricLoader; import net.minecraft.client.Minecraft; @@ -21,11 +21,6 @@ public class CustomWindowTitle implements ClientModInitializer { } private void updateTitle() { - final Window window = Minecraft.getInstance().getWindow(); - window.setTitle(TitleParser.parse(config.getTitle())); - - if (config.hasIcon()) { - window.setIcon(config.readIcon16(), config.readIcon32()); - } + Minecraft.getInstance().getWindow().setTitle(TitleParser.parse(config.getTitle())); } } diff --git a/Fabric/src/main/java/chylex/customwindowtitle/fabric/TokenProvider.java b/Fabric/src/main/java/chylex/customwindowtitle/fabric/TokenProvider.java index e19da6c..abf4073 100644 --- a/Fabric/src/main/java/chylex/customwindowtitle/fabric/TokenProvider.java +++ b/Fabric/src/main/java/chylex/customwindowtitle/fabric/TokenProvider.java @@ -1,4 +1,5 @@ package chylex.customwindowtitle.fabric; + import chylex.customwindowtitle.TokenException; import chylex.customwindowtitle.data.CommonTokenProvider; import net.fabricmc.loader.api.FabricLoader; diff --git a/Forge/src/main/java/chylex/customwindowtitle/forge/CustomWindowTitle.java b/Forge/src/main/java/chylex/customwindowtitle/forge/CustomWindowTitle.java index e993822..fdd7bd2 100644 --- a/Forge/src/main/java/chylex/customwindowtitle/forge/CustomWindowTitle.java +++ b/Forge/src/main/java/chylex/customwindowtitle/forge/CustomWindowTitle.java @@ -1,8 +1,8 @@ package chylex.customwindowtitle.forge; + import chylex.customwindowtitle.TitleConfig; import chylex.customwindowtitle.TitleParser; import chylex.customwindowtitle.data.CommonTokenData; -import com.mojang.blaze3d.platform.Window; import net.minecraft.client.Minecraft; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.IExtensionPoint.DisplayTest; @@ -29,11 +29,6 @@ public class CustomWindowTitle { } private void updateTitle() { - final Window window = Minecraft.getInstance().getWindow(); - window.setTitle(TitleParser.parse(config.getTitle())); - - if (config.hasIcon()) { - window.setIcon(config.readIcon16(), config.readIcon32()); - } + Minecraft.getInstance().getWindow().setTitle(TitleParser.parse(config.getTitle())); } } diff --git a/Forge/src/main/java/chylex/customwindowtitle/forge/TokenProvider.java b/Forge/src/main/java/chylex/customwindowtitle/forge/TokenProvider.java index 8fda298..20e958e 100644 --- a/Forge/src/main/java/chylex/customwindowtitle/forge/TokenProvider.java +++ b/Forge/src/main/java/chylex/customwindowtitle/forge/TokenProvider.java @@ -1,4 +1,5 @@ package chylex.customwindowtitle.forge; + import chylex.customwindowtitle.TokenException; import chylex.customwindowtitle.data.CommonTokenProvider; import net.minecraftforge.fml.ModList; diff --git a/src/main/java/chylex/customwindowtitle/TitleConfig.java b/src/main/java/chylex/customwindowtitle/TitleConfig.java index 3d4c6d9..62ec20e 100644 --- a/src/main/java/chylex/customwindowtitle/TitleConfig.java +++ b/src/main/java/chylex/customwindowtitle/TitleConfig.java @@ -1,28 +1,25 @@ package chylex.customwindowtitle; -import net.minecraft.server.packs.resources.IoSupplier; + +import com.google.common.collect.ImmutableMap; +import com.google.common.collect.ImmutableSet; import java.io.IOException; -import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; import java.util.stream.Collectors; public final class TitleConfig { - private static final Map<String, String> DEFAULTS; + private static final ImmutableMap<String, String> DEFAULTS = ImmutableMap.<String, String>builder() + .put("title", "Minecraft {mcversion}") + .build(); - static { - final Map<String, String> defaults = new LinkedHashMap<>(); - - defaults.put("title", "Minecraft {mcversion}"); - defaults.put("icon16", ""); - defaults.put("icon32", ""); - - DEFAULTS = Collections.unmodifiableMap(defaults); - } + private static final ImmutableSet<String> IGNORED_KEYS = ImmutableSet.of( + "icon16", + "icon32" + ); public static TitleConfig read(final String folder) { final Path configFile = Paths.get(folder, "customwindowtitle-client.toml"); @@ -46,7 +43,7 @@ public final class TitleConfig { if (config.containsKey(key)) { config.put(key, value); } - else { + else if (!IGNORED_KEYS.contains(key)) { throw new RuntimeException("CustomWindowTitle configuration has an invalid key: " + key); } }); @@ -55,25 +52,7 @@ public final class TitleConfig { throw new RuntimeException("CustomWindowTitle configuration error", e); } - final String icon16 = config.get("icon16"); - final String icon32 = config.get("icon32"); - - final Path pathIcon16 = icon16.isEmpty() ? null : Paths.get(folder, icon16); - final Path pathIcon32 = icon32.isEmpty() ? null : Paths.get(folder, icon32); - - if ((pathIcon16 == null) != (pathIcon32 == null)) { - throw new RuntimeException("CustomWindowTitle configuration specifies only one icon, both 'icon16' and 'icon32' must be set."); - } - - if (pathIcon16 != null && Files.notExists(pathIcon16)) { - throw new RuntimeException("CustomWindowTitle 16x16 icon not found: " + pathIcon16); - } - - if (pathIcon32 != null && Files.notExists(pathIcon32)) { - throw new RuntimeException("CustomWindowTitle 32x32 icon not found: " + pathIcon32); - } - - return new TitleConfig(config.get("title"), pathIcon16, pathIcon32); + return new TitleConfig(config.get("title")); } private static String parseTrimmedValue(String value) { @@ -96,28 +75,12 @@ public final class TitleConfig { } private final String title; - private final Path icon16; - private final Path icon32; - private TitleConfig(final String title, final Path icon16, final Path icon32) { + private TitleConfig(final String title) { this.title = title; - this.icon16 = icon16; - this.icon32 = icon32; } public String getTitle() { return title; } - - public boolean hasIcon() { - return icon16 != null && icon32 != null; - } - - public IoSupplier<InputStream> readIcon16() { - return IoSupplier.create(icon16); - } - - public IoSupplier<InputStream> readIcon32() { - return IoSupplier.create(icon32); - } } diff --git a/src/main/java/chylex/customwindowtitle/TitleParser.java b/src/main/java/chylex/customwindowtitle/TitleParser.java index 9c3c2d2..0cf87c0 100644 --- a/src/main/java/chylex/customwindowtitle/TitleParser.java +++ b/src/main/java/chylex/customwindowtitle/TitleParser.java @@ -1,4 +1,5 @@ package chylex.customwindowtitle; + import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; @@ -11,7 +12,7 @@ public final class TitleParser { private static final Logger logger = LogManager.getLogger("CustomWindowTitle"); public static String parse(final String input) { - final StringBuffer buffer = new StringBuffer(); + final StringBuilder buffer = new StringBuilder(); final Matcher matcher = tokenRegex.matcher(input); while (matcher.find()) { diff --git a/src/main/java/chylex/customwindowtitle/TitleTokens.java b/src/main/java/chylex/customwindowtitle/TitleTokens.java index d8c4536..97d30db 100644 --- a/src/main/java/chylex/customwindowtitle/TitleTokens.java +++ b/src/main/java/chylex/customwindowtitle/TitleTokens.java @@ -1,4 +1,5 @@ package chylex.customwindowtitle; + import java.util.HashMap; import java.util.Map; import java.util.function.Function; diff --git a/src/main/java/chylex/customwindowtitle/data/CommonTokenProvider.java b/src/main/java/chylex/customwindowtitle/data/CommonTokenProvider.java index 45f9a4f..16ce3ac 100644 --- a/src/main/java/chylex/customwindowtitle/data/CommonTokenProvider.java +++ b/src/main/java/chylex/customwindowtitle/data/CommonTokenProvider.java @@ -1,9 +1,10 @@ package chylex.customwindowtitle.data; -import net.minecraft.client.Minecraft; + +import net.minecraft.SharedConstants; public interface CommonTokenProvider { default String getMinecraftVersion() { - return Minecraft.getInstance().getGame().getVersion().getName(); + return SharedConstants.getCurrentVersion().getName(); } String getModVersion(final String modId); diff --git a/src/main/java/chylex/customwindowtitle/mixin/DisableVanillaTitle.java b/src/main/java/chylex/customwindowtitle/mixin/DisableVanillaTitle.java index 0e86cda..3d44230 100644 --- a/src/main/java/chylex/customwindowtitle/mixin/DisableVanillaTitle.java +++ b/src/main/java/chylex/customwindowtitle/mixin/DisableVanillaTitle.java @@ -1,4 +1,5 @@ package chylex.customwindowtitle.mixin; + import net.minecraft.client.Minecraft; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At;