diff --git a/dependencies.gradle b/dependencies.gradle index ee18db0a..af1231e9 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,6 +1,7 @@ dependencies { - api("com.github.GTNewHorizons:GTNHLib:0.9.62:dev") + api("com.github.GTNewHorizons:GTNHLib:0.10.3:dev") + implementation("io.github.legacymoddingmc:unimixins:0.3.1:dev") shadowImplementation("org.yaml:snakeyaml:1.33") { transitive = false } shadowImplementation("io.methvin:directory-watcher:0.17.1") @@ -8,7 +9,6 @@ dependencies { shadowImplementation("org.apache.lucene:lucene-analyzers-common:8.11.4") shadowImplementation("org.apache.lucene:lucene-queryparser:8.11.4") shadowImplementation("org.apache.lucene:lucene-highlighter:8.11.4") - shadowImplementation("org.apache.commons:commons-lang3:3.3.2") { transitive = false } shadowImplementation("com.google.flatbuffers:flatbuffers-java:23.5.26") { transitive = false } shadowImplementation("org.scilab.forge:jlatexmath:1.0.7") { transitive = false } @@ -41,6 +41,8 @@ dependencies { compileOnlyApi("ganymedes01.etfuturum:Et-Futurum-Requiem:2.6.2.21-GTNH-daily") { transitive = false } compileOnlyApi("com.github.DarkShadow44:DistantHorizonsStandalone:9.9.9:dev") { transitive = false } + // jvmDowngrader + compileOnly("javax.xml.bind:jaxb-api:2.3.1") compileOnly("org.jetbrains:annotations:26.0.1") compileOnly("org.projectlombok:lombok:1.18.42") { transitive = false } annotationProcessor("org.projectlombok:lombok:1.18.42") diff --git a/gradle.properties b/gradle.properties index b7d651ea..f13fa22d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -44,7 +44,7 @@ developmentEnvironmentUserName = Huan_F # - jabel: Jabel syntax-only support, compiles to J8 bytecode # - jvmDowngrader: Full modern Java via JVM Downgrader (syntax + stdlib APIs) # - modern: Native modern Java bytecode, no downgrading -enableModernJavaSyntax = jabel +enableModernJavaSyntax = jvmDowngrader # If set, ignores the above setting and compiles with the given toolchain. This may cause unexpected issues, # and should *not* be used in most situations. -1 disables this. @@ -52,12 +52,12 @@ enableModernJavaSyntax = jabel # Target JVM version for JVM Downgrader bytecode downgrading. # Only used when enableModernJavaSyntax = jvmDowngrader -# downgradeTargetVersion = 8 +downgradeTargetVersion = 8 # Comma-separated list of Java versions for multi-release jar support (JVM Downgrader only). # Classes will be available in META-INF/versions/N/ for each version N in this list. # Default: "21,25" (J25+ gets native classes, J21-24 gets partial downgrade, J8-20 gets full downgrade). -# jvmDowngraderMultiReleaseVersions = 21,25 +jvmDowngraderMultiReleaseVersions = 17,21,25 # Specifies how JVM Downgrader API stubs are provided. Options: # - shade: Shade minimized stubs into the jar @@ -65,7 +65,7 @@ enableModernJavaSyntax = jabel # - external: Another dependency provides stubs (no constraint, no warning) # - (empty): Warning reminding you to configure stubs # Note: 'shade' option requires you to verify license compliance, see: https://github.com/unimined/JvmDowngrader/blob/main/LICENSE.md -# jvmDowngraderStubsProvider = +jvmDowngraderStubsProvider = gtnhlib # Enables injecting missing generics into the decompiled source code for a better coding experience. # Turns most publicly visible List, Map, etc. into proper List, Map types. @@ -101,7 +101,7 @@ apiPackage = # Specify the configuration file for Forge's access transformers here. It must be placed into /src/main/resources/META-INF/ # There can be multiple files in a space-separated list. # Example value: mymodid_at.cfg nei_at.cfg -accessTransformersFile = +accessTransformersFile = guidenh_at.cfg # Provides setup for Mixins if enabled. If you don't know what mixins are: Keep it disabled! usesMixins = true diff --git a/gradle/gradle-daemon-jvm.properties b/gradle/gradle-daemon-jvm.properties index b612cc98..117910c0 100644 --- a/gradle/gradle-daemon-jvm.properties +++ b/gradle/gradle-daemon-jvm.properties @@ -1,12 +1,12 @@ #This file is generated by updateDaemonJvm -toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c5ee947fbfb70bc347d8d531e3a578c4/redirect -toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/5ee463876563a46fff651cce1bc53a4c/redirect -toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c5ee947fbfb70bc347d8d531e3a578c4/redirect -toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/5ee463876563a46fff651cce1bc53a4c/redirect -toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/e1118b4c7c2858d28154d086dbff010e/redirect -toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/59a9771cad43219260d9aac9a8ec4d6a/redirect -toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c5ee947fbfb70bc347d8d531e3a578c4/redirect -toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/5ee463876563a46fff651cce1bc53a4c/redirect -toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/832229f0f6f0be60ed817c5a5e5848eb/redirect -toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/b96cb7670c095245220e7d01d5927b58/redirect -toolchainVersion=25 +toolchainUrl.FREE_BSD.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect +toolchainUrl.FREE_BSD.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect +toolchainUrl.LINUX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect +toolchainUrl.LINUX.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect +toolchainUrl.MAC_OS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/c2dd35c9d0aaf0ba6ad0791320f99dfc/redirect +toolchainUrl.MAC_OS.X86_64=https\://api.foojay.io/disco/v3.0/ids/e5810bd7fd1f8a586644409d395a7e55/redirect +toolchainUrl.UNIX.AARCH64=https\://api.foojay.io/disco/v3.0/ids/cf726b4a1c84b50457225f9bba6d7650/redirect +toolchainUrl.UNIX.X86_64=https\://api.foojay.io/disco/v3.0/ids/fa1e318c287360478e3c83a9a3ef1007/redirect +toolchainUrl.WINDOWS.AARCH64=https\://api.foojay.io/disco/v3.0/ids/7b3c4877c0749019e6805bb61e421497/redirect +toolchainUrl.WINDOWS.X86_64=https\://api.foojay.io/disco/v3.0/ids/d76df094a9cbbabd3b08251f9e61444a/redirect +toolchainVersion=25 \ No newline at end of file diff --git a/src/main/java/com/hfstudio/guidenh/bridge/GuideNhRuntimeBridgeServer.java b/src/main/java/com/hfstudio/guidenh/bridge/GuideNhRuntimeBridgeServer.java index 6f04379d..a123a2db 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/GuideNhRuntimeBridgeServer.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/GuideNhRuntimeBridgeServer.java @@ -14,6 +14,8 @@ import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicBoolean; +import org.jetbrains.annotations.NotNull; + import com.hfstudio.guidenh.GuideNH; import com.hfstudio.guidenh.bridge.preview.ItemPreviewCache; import com.hfstudio.guidenh.bridge.preview.ItemPreviewSearchService; @@ -158,7 +160,7 @@ public static class RuntimeBridgeThreadFactory implements ThreadFactory { private int nextThreadId; @Override - public Thread newThread(Runnable runnable) { + public Thread newThread(@NotNull Runnable runnable) { Thread thread = new Thread(runnable, "GuideNH-RuntimeBridge-" + nextThreadId++); thread.setDaemon(true); return thread; diff --git a/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewCache.java b/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewCache.java index 4c0f7939..954bb8ef 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewCache.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewCache.java @@ -10,7 +10,7 @@ public class ItemPreviewCache { public ItemPreviewCache(int maxEntries) { this.maxEntries = Math.max(1, maxEntries); - this.cache = new LinkedHashMap(16, 0.75f, true) { + this.cache = new LinkedHashMap<>(16, 0.75f, true) { @Override protected boolean removeEldestEntry(Map.Entry eldest) { diff --git a/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewCacheKey.java b/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewCacheKey.java index d812f1c0..9ebe5c9d 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewCacheKey.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewCacheKey.java @@ -62,10 +62,9 @@ public boolean equals(Object other) { if (this == other) { return true; } - if (!(other instanceof ItemPreviewCacheKey)) { + if (!(other instanceof ItemPreviewCacheKey that)) { return false; } - ItemPreviewCacheKey that = (ItemPreviewCacheKey) other; return meta == that.meta && count == that.count && Objects.equals(capability, that.capability) && Objects.equals(id, that.id) diff --git a/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewPayload.java b/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewPayload.java index c6d96594..759d1d72 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewPayload.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewPayload.java @@ -1,7 +1,5 @@ package com.hfstudio.guidenh.bridge.preview; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class ItemPreviewPayload { @@ -27,8 +25,7 @@ public ItemPreviewPayload(String previewKey, String id, String displayName, Stri this.meta = meta; this.count = count; this.nbt = nbt == null ? "" : nbt; - this.tooltipLines = tooltipLines == null ? Collections.emptyList() - : Collections.unmodifiableList(new ArrayList<>(tooltipLines)); + this.tooltipLines = tooltipLines == null ? List.of() : List.copyOf(tooltipLines); this.iconPngBase64 = iconPngBase64 == null ? "" : iconPngBase64; this.pixelWidth = pixelWidth; this.pixelHeight = pixelHeight; @@ -41,8 +38,8 @@ public PreviewResolveResult toResult(String capability) { id, displayName, detail, - Integer.valueOf(meta), - Integer.valueOf(count), + meta, + count, nbt, tooltipLines, iconPngBase64, diff --git a/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewSearchService.java b/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewSearchService.java index 89b71abe..14f99f89 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewSearchService.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/preview/ItemPreviewSearchService.java @@ -151,52 +151,32 @@ private int scoreEntry(String id, String label, String detail, String prefix) { } private boolean isShortPrefix(String prefix) { - return prefix.indexOf(':') < 0 && prefix.length() > 0 && prefix.length() <= 4; + return prefix.indexOf(':') < 0 && !prefix.isEmpty() && prefix.length() <= 4; } private String describeMatchKind(int score) { - switch (score) { - case 0: - return "label-exact"; - case 1: - return "id-exact"; - case 2: - return "namespace-prefix"; - case 3: - return "label-prefix"; - case 4: - return "label-token"; - case 5: - return "id-prefix"; - case 6: - return "path-prefix"; - case 7: - return "path-token"; - case 8: - return "detail-prefix"; - case 9: - return "path-structured"; - case 10: - return "path-acronym"; - case 11: - return "id-compact"; - case 12: - return "path-compact"; - case 13: - return "label-acronym"; - case 14: - return "label-compact"; - case 15: - return "detail-compact"; - case 16: - return "id-contains"; - case 17: - return "label-contains"; - case 18: - return "detail-contains"; - default: - return "runtime"; - } + return switch (score) { + case 0 -> "label-exact"; + case 1 -> "id-exact"; + case 2 -> "namespace-prefix"; + case 3 -> "label-prefix"; + case 4 -> "label-token"; + case 5 -> "id-prefix"; + case 6 -> "path-prefix"; + case 7 -> "path-token"; + case 8 -> "detail-prefix"; + case 9 -> "path-structured"; + case 10 -> "path-acronym"; + case 11 -> "id-compact"; + case 12 -> "path-compact"; + case 13 -> "label-acronym"; + case 14 -> "label-compact"; + case 15 -> "detail-compact"; + case 16 -> "id-contains"; + case 17 -> "label-contains"; + case 18 -> "detail-contains"; + default -> "runtime"; + }; } private String buildPreviewKey(String id) { @@ -268,7 +248,7 @@ private boolean matchesStructuredPathAbbreviation(String path, String compactPre if (nonEmptyTokens.size() < 2) { return false; } - String firstToken = nonEmptyTokens.get(0); + String firstToken = nonEmptyTokens.getFirst(); if (!compactPrefix.startsWith(firstToken) || compactPrefix.length() <= firstToken.length()) { return false; } @@ -371,7 +351,7 @@ private int computeStructuredMatchSpecificity(String path, String compactPrefix, if (nonEmptyTokens.size() < 2) { return 0; } - String firstToken = nonEmptyTokens.get(0); + String firstToken = nonEmptyTokens.getFirst(); if (!compactPrefix.startsWith(firstToken) || compactPrefix.length() <= firstToken.length()) { return 0; } @@ -397,14 +377,14 @@ private Map buildFamilySizes(List> semantic continue; } String familyKey = toFamilyKey(id); - familySizes.put(familyKey, familySizes.getOrDefault(familyKey, Integer.valueOf(0)) + 1); + familySizes.put(familyKey, familySizes.getOrDefault(familyKey, 0) + 1); } return familySizes; } private int resolveFamilySize(Map familySizes, String id) { Integer value = familySizes.get(toFamilyKey(id)); - return value == null ? 0 : value.intValue(); + return value == null ? 0 : value; } private String toFamilyKey(String id) { diff --git a/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewRequestSupport.java b/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewRequestSupport.java index 5371b7d5..e0a04c95 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewRequestSupport.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewRequestSupport.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.bridge.preview; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; @@ -50,9 +49,9 @@ public static Map readStringMap(JsonObject payload, String name) if (payload == null || !payload.has(name) || !payload.get(name) .isJsonObject()) { - return Collections.emptyMap(); + return Map.of(); } - Map values = new LinkedHashMap<>(); + var values = new LinkedHashMap(); JsonObject object = payload.getAsJsonObject(name); for (Map.Entry entry : object.entrySet()) { JsonElement value = entry.getValue(); @@ -60,6 +59,6 @@ public static Map readStringMap(JsonObject payload, String name) values.put(entry.getKey(), value.getAsString()); } } - return values; + return values.isEmpty() ? Map.of() : Map.copyOf(values); } } diff --git a/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewResolveQuery.java b/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewResolveQuery.java index 12ea1f8d..1ed4b381 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewResolveQuery.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewResolveQuery.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.bridge.preview; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; @@ -20,8 +19,7 @@ public PreviewResolveQuery(String capability, String id, int count, String nbt, this.count = count; this.nbt = nbt == null ? "" : nbt; this.renderVariant = renderVariant == null ? "default" : renderVariant; - this.filters = filters == null ? Collections.emptyMap() - : Collections.unmodifiableMap(new LinkedHashMap<>(filters)); + this.filters = filters == null || filters.isEmpty() ? Map.of() : Map.copyOf(new LinkedHashMap<>(filters)); } public String getCapability() { diff --git a/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewResolveResult.java b/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewResolveResult.java index 37bbc5c3..287fb092 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewResolveResult.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewResolveResult.java @@ -1,7 +1,5 @@ package com.hfstudio.guidenh.bridge.preview; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class PreviewResolveResult { @@ -30,8 +28,7 @@ public PreviewResolveResult(String capability, String previewKey, String id, Str this.meta = meta; this.count = count; this.nbt = nbt; - this.tooltipLines = tooltipLines == null ? Collections.emptyList() - : Collections.unmodifiableList(new ArrayList<>(tooltipLines)); + this.tooltipLines = tooltipLines == null ? List.of() : List.copyOf(tooltipLines); this.iconPngBase64 = iconPngBase64 == null ? "" : iconPngBase64; this.pixelWidth = pixelWidth; this.pixelHeight = pixelHeight; diff --git a/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewSearchQuery.java b/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewSearchQuery.java index ae2935ae..6510ec35 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewSearchQuery.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewSearchQuery.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.bridge.preview; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; @@ -17,8 +16,7 @@ public PreviewSearchQuery(String capability, String cursor, int limit, String pr this.cursor = cursor == null ? "" : cursor; this.limit = limit; this.prefix = prefix == null ? "" : prefix; - this.filters = filters == null ? Collections.emptyMap() - : Collections.unmodifiableMap(new LinkedHashMap<>(filters)); + this.filters = filters == null || filters.isEmpty() ? Map.of() : Map.copyOf(new LinkedHashMap<>(filters)); } public String getCapability() { diff --git a/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewSearchResult.java b/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewSearchResult.java index 6e47b4d7..7c71f3de 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewSearchResult.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/preview/PreviewSearchResult.java @@ -1,7 +1,5 @@ package com.hfstudio.guidenh.bridge.preview; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class PreviewSearchResult { @@ -14,14 +12,13 @@ public class PreviewSearchResult { public PreviewSearchResult(String capability, int version, List entries, String nextCursor) { this.capability = capability == null ? "" : capability; this.version = version; - this.entries = entries == null ? Collections.emptyList() - : Collections.unmodifiableList(new ArrayList<>(entries)); + this.entries = entries == null ? List.of() : List.copyOf(entries); this.nextCursor = nextCursor; } public static PreviewSearchResult page(String capability, List entries, String cursor, int limit) { - List safeEntries = entries == null ? Collections.emptyList() : entries; + List safeEntries = entries == null ? List.of() : entries; int start = parseCursor(cursor, safeEntries.size()); int safeLimit = limit > 0 ? limit : safeEntries.size(); int end = Math.min(safeEntries.size(), start + safeLimit); @@ -29,7 +26,7 @@ public static PreviewSearchResult page(String capability, List(safeEntries.subList(start, end)), + List.copyOf(safeEntries.subList(start, end)), nextCursor); } diff --git a/src/main/java/com/hfstudio/guidenh/bridge/semantic/SemanticQuery.java b/src/main/java/com/hfstudio/guidenh/bridge/semantic/SemanticQuery.java index ba35890f..bfd77f69 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/semantic/SemanticQuery.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/semantic/SemanticQuery.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.bridge.semantic; -import java.util.Collections; import java.util.Map; public class SemanticQuery { @@ -14,7 +13,7 @@ public SemanticQuery(String cursor, int limit, String prefix, Map readFilters(JsonObject payload) { if (payload == null || !payload.has("filters") || !payload.get("filters") .isJsonObject()) { - return Collections.emptyMap(); + return Map.of(); } - Map filters = new HashMap<>(); + var filters = new LinkedHashMap(); for (Map.Entry entry : payload.getAsJsonObject("filters") .entrySet()) { JsonElement value = entry.getValue(); @@ -45,7 +44,7 @@ private Map readFilters(JsonObject payload) { filters.put(entry.getKey(), value.getAsString()); } } - return filters; + return filters.isEmpty() ? Map.of() : Map.copyOf(filters); } private String readString(JsonObject payload, String name, String defaultValue) { diff --git a/src/main/java/com/hfstudio/guidenh/bridge/semantic/providers/AbstractCollectionSemanticProvider.java b/src/main/java/com/hfstudio/guidenh/bridge/semantic/providers/AbstractCollectionSemanticProvider.java index a2fea344..d194aa46 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/semantic/providers/AbstractCollectionSemanticProvider.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/semantic/providers/AbstractCollectionSemanticProvider.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.bridge.semantic.providers; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.List; @@ -146,6 +145,6 @@ private boolean startsWithIgnoreCase(String value, String normalizedPrefix) { } protected List> emptyEntries() { - return Collections.emptyList(); + return List.of(); } } diff --git a/src/main/java/com/hfstudio/guidenh/bridge/semantic/providers/RuntimeSemanticSupport.java b/src/main/java/com/hfstudio/guidenh/bridge/semantic/providers/RuntimeSemanticSupport.java index 40b03980..c1a4f917 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/semantic/providers/RuntimeSemanticSupport.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/semantic/providers/RuntimeSemanticSupport.java @@ -160,7 +160,7 @@ public static void addCategoryEntries(List> entries) { Map firstPageByCategory = new LinkedHashMap<>(); for (ParsedGuidePage page : getAllParsedPages()) { for (String category : readStringList(page, "categories")) { - counts.put(category, counts.getOrDefault(category, Integer.valueOf(0)) + 1); + counts.put(category, counts.getOrDefault(category, 0) + 1); firstPageByCategory.putIfAbsent( category, page.getId() @@ -355,7 +355,7 @@ public static List readStringList(ParsedGuidePage page, String key) { .additionalProperties() .get(key); if (!(value instanceof Listvalues)) { - return Collections.emptyList(); + return List.of(); } List strings = new ArrayList<>(); @@ -511,24 +511,26 @@ private static void collectSoundIdsFromValue(@Nullable Object value, Set return; } - if (value instanceof ResourceLocation resourceLocation) { - soundIds.add(resourceLocation.toString()); - return; - } - - if (value instanceof Mapmap) { - for (Map.Entry entry : map.entrySet()) { - collectSoundIdsFromValue(entry.getKey(), soundIds, depth - 1); - collectSoundIdsFromValue(entry.getValue(), soundIds, depth - 1); + switch (value) { + case ResourceLocation resourceLocation -> { + soundIds.add(resourceLocation.toString()); + return; } - return; - } - - if (value instanceof Iterableiterable) { - for (Object element : iterable) { - collectSoundIdsFromValue(element, soundIds, depth - 1); + case Map map -> { + for (Map.Entry entry : map.entrySet()) { + collectSoundIdsFromValue(entry.getKey(), soundIds, depth - 1); + collectSoundIdsFromValue(entry.getValue(), soundIds, depth - 1); + } + return; + } + case Iterable iterable -> { + for (Object element : iterable) { + collectSoundIdsFromValue(element, soundIds, depth - 1); + } + return; + } + default -> { } - return; } Class type = value.getClass(); @@ -659,15 +661,12 @@ private static void addFallbackServerCommandEntries(List> en "/" + commandName, resolveCommandEntryLabel(command, commandName, "Builtin server command"), "Builtin server command")); - List aliases = command.getCommandAliases(); + List aliases = command.getCommandAliases(); if (aliases == null) { continue; } - for (Object rawAlias : aliases) { - if (!(rawAlias instanceof String)) { - continue; - } - String alias = trimToNull((String) rawAlias); + for (String rawAlias : aliases) { + String alias = trimToNull(rawAlias); if (alias == null) { continue; } @@ -738,8 +737,7 @@ private static ICommandSender resolveCommandSender() { if (minecraft != null && minecraft.thePlayer != null) { return minecraft.thePlayer; } - MinecraftServer minecraftServer = MinecraftServer.getServer(); - return minecraftServer != null ? minecraftServer : null; + return MinecraftServer.getServer(); } private static String resolveCommandEntryLabel(ICommand command, String commandName, String sourceLabel) { diff --git a/src/main/java/com/hfstudio/guidenh/bridge/semantic/providers/StructureLibSemanticProvider.java b/src/main/java/com/hfstudio/guidenh/bridge/semantic/providers/StructureLibSemanticProvider.java index 119c7723..5a7c6533 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/semantic/providers/StructureLibSemanticProvider.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/semantic/providers/StructureLibSemanticProvider.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.bridge.semantic.providers; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; @@ -76,7 +75,7 @@ private List> loadControllerEntries() { private List> loadChannelEntries(Map filters) { String controller = normalizeValue(filters.get("controller")); if (controller == null) { - return Collections.emptyList(); + return List.of(); } try { StructureLibImportRequest request = new StructureLibImportRequest(controller, null, null, null, null, null); @@ -86,7 +85,7 @@ private List> loadChannelEntries(Map filters .analyzeControls(request, resolvedController); int maxTier = analysis.getMaxTotalTier(); if (maxTier <= 0) { - return Collections.emptyList(); + return List.of(); } List> entries = new ArrayList<>(); @@ -95,43 +94,39 @@ private List> loadChannelEntries(Map filters entries.add(createEntry(Integer.toString(value), "StructureLib preview tier", detail)); } return normalizeEntries(entries); - } catch (IllegalArgumentException ignored) { - return Collections.emptyList(); } catch (Throwable ignored) { - return Collections.emptyList(); + return List.of(); } } private List> loadPieceEntries(Map filters) { String controller = normalizeValue(filters.get("controller")); if (controller == null) { - return Collections.emptyList(); + return List.of(); } - return Collections.singletonList(createEntry("main", "Main structure", controller + " default constructable")); + return List.of(createEntry("main", "Main structure", controller + " default constructable")); } private List> loadOrientationEntries(Map filters, String attribute) { String controller = normalizeValue(filters.get("controller")); if (controller == null || attribute == null) { - return Collections.emptyList(); + return List.of(); } try { StructureLibControllerSpec controllerSpec = StructureLibControllerSpec.parse(controller); List allowedFacings = findAllowedFacings(controllerSpec); if (allowedFacings.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List> entries = switch (attribute) { case "facing" -> createFacingEntries(controllerSpec, allowedFacings, filters); case "rotation" -> createRotationEntries(controllerSpec, allowedFacings, filters); case "flip" -> createFlipEntries(controllerSpec, allowedFacings, filters); - default -> Collections.emptyList(); + default -> List.of(); }; return normalizeEntries(entries); - } catch (IllegalArgumentException ignored) { - return Collections.emptyList(); } catch (Throwable ignored) { - return Collections.emptyList(); + return List.of(); } } @@ -192,11 +187,11 @@ private List findAllowedFacings(StructureLibControllerSpec contr TileEntity tile = StructureLibRuntimeFacade .placeControllerDirectly(context.getLevel(), context.getWorld(), resolvedController, new ArrayList<>()); if (tile == null) { - return Collections.emptyList(); + return List.of(); } IAlignment alignment = StructureLibRuntimeFacade.resolveAlignment(tile); if (alignment == null) { - return Collections.emptyList(); + return List.of(); } for (ExtendedFacing facing : ExtendedFacing.VALUES) { if (alignment.getAlignmentLimits() != null ? alignment.getAlignmentLimits() @@ -206,7 +201,7 @@ private List findAllowedFacings(StructureLibControllerSpec contr } return allowedFacings; } catch (Throwable ignored) { - return Collections.emptyList(); + return List.of(); } finally { context.clear(); } diff --git a/src/main/java/com/hfstudio/guidenh/bridge/transport/WebSocketHandshake.java b/src/main/java/com/hfstudio/guidenh/bridge/transport/WebSocketHandshake.java index a3458298..58af2177 100644 --- a/src/main/java/com/hfstudio/guidenh/bridge/transport/WebSocketHandshake.java +++ b/src/main/java/com/hfstudio/guidenh/bridge/transport/WebSocketHandshake.java @@ -61,7 +61,7 @@ private String readHttpHeader(InputStream input) throws IOException { previousSecond = previous; previous = current; } - return new String(output.toByteArray(), StandardCharsets.UTF_8); + return output.toString(StandardCharsets.UTF_8); } private Map readHeaders(String[] lines) { @@ -87,8 +87,7 @@ private Map readHeaders(String[] lines) { private boolean isUpgrade(Map headers) { String upgrade = headers.get("upgrade"); String connection = headers.get("connection"); - return upgrade != null && "websocket".equalsIgnoreCase(upgrade) - && connection != null + return "websocket".equalsIgnoreCase(upgrade) && connection != null && connection.toLowerCase(Locale.ROOT) .contains("upgrade"); } diff --git a/src/main/java/com/hfstudio/guidenh/client/command/GuideNhClientBridgeController.java b/src/main/java/com/hfstudio/guidenh/client/command/GuideNhClientBridgeController.java index 6c1643e2..1c9b352c 100644 --- a/src/main/java/com/hfstudio/guidenh/client/command/GuideNhClientBridgeController.java +++ b/src/main/java/com/hfstudio/guidenh/client/command/GuideNhClientBridgeController.java @@ -73,8 +73,6 @@ public boolean isServerStructureCommandsAvailable() { } public Path exportStructureToFile(String prefix, String structureText) throws Exception { - var entry = GuideNhStructureRuntime.getClientMemoryStore() - .remember(prefix, structureText); return structureFileStore.saveExport(prefix, structureText); } @@ -314,7 +312,7 @@ private synchronized String accept(GuideNhRegionExportReplyMessage message) { } out.write(chunk, 0, chunk.length); } - return new String(out.toByteArray(), StandardCharsets.UTF_8); + return out.toString(StandardCharsets.UTF_8); } } } diff --git a/src/main/java/com/hfstudio/guidenh/client/command/GuideNhClientCommand.java b/src/main/java/com/hfstudio/guidenh/client/command/GuideNhClientCommand.java index a1ab90cc..3793380c 100644 --- a/src/main/java/com/hfstudio/guidenh/client/command/GuideNhClientCommand.java +++ b/src/main/java/com/hfstudio/guidenh/client/command/GuideNhClientCommand.java @@ -4,7 +4,6 @@ import java.nio.file.Paths; import java.time.LocalDateTime; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.command.CommandBase; @@ -113,7 +112,7 @@ public List addTabCompletionOptions(ICommandSender sender, String[] args if (args.length >= 2 && args[0].equalsIgnoreCase("exportstructure")) { return getListOfStringsMatchingLastWord(args, EXPORT_STRUCTURE_FLAGS); } - return Collections.emptyList(); + return List.of(); } @Override @@ -336,8 +335,7 @@ private String exportRegion(EntityPlayer player, int x, int y, int z, int sizeX, int maxY = y + sizeY - 1; int maxZ = z + sizeZ - 1; boolean includeEntities = mode.includeEntities(); - List entities = includeEntities ? collectEntities(player, x, y, z, maxX, maxY, maxZ) - : Collections.emptyList(); + List entities = includeEntities ? collectEntities(player, x, y, z, maxX, maxY, maxZ) : List.of(); if (mode == RegionWandExportMode.BLOCKS || mode == RegionWandExportMode.BLOCKS_ENTITIES) { return RegionWandItem.exportBlocks(player.worldObj, x, y, z, maxX, maxY, maxZ, entities) .text(); @@ -349,13 +347,12 @@ private String exportRegion(EntityPlayer player, int x, int y, int z, int sizeX, .text(); } - @SuppressWarnings("unchecked") private List collectEntities(EntityPlayer player, int minX, int minY, int minZ, int maxX, int maxY, int maxZ) { List all = player.worldObj.getEntitiesWithinAABBExcludingEntity( null, AxisAlignedBB.getBoundingBox(minX, minY, minZ, maxX + 1, maxY + 1, maxZ + 1)); - return all != null ? all : Collections.emptyList(); + return all != null ? all : List.of(); } private ExportStructureOptions parseExportStructureOptions(String[] args) { diff --git a/src/main/java/com/hfstudio/guidenh/client/hotkey/OpenGuideHotkey.java b/src/main/java/com/hfstudio/guidenh/client/hotkey/OpenGuideHotkey.java index 17264c5e..e2b3b3f7 100644 --- a/src/main/java/com/hfstudio/guidenh/client/hotkey/OpenGuideHotkey.java +++ b/src/main/java/com/hfstudio/guidenh/client/hotkey/OpenGuideHotkey.java @@ -180,10 +180,10 @@ public static String renderHint(float progress) { var sb = new StringBuilder(); sb.append(EnumChatFormatting.GRAY); - for (int i = 0; i < filled; i++) sb.append('|'); + sb.append("|".repeat(filled)); if (filled < totalChars) { sb.append(EnumChatFormatting.DARK_GRAY); - for (int i = 0; i < totalChars - filled; i++) sb.append('|'); + sb.append("|".repeat(totalChars - filled)); } return sb.toString(); } @@ -223,7 +223,6 @@ public static void update(ItemStack stack) { if (ticksKeyHeld < TICKS_TO_OPEN && ++ticksKeyHeld == TICKS_TO_OPEN) { if (!guidebookPages.isEmpty()) { var found = guidebookPages.get(0); - var mc = Minecraft.getMinecraft(); List allPages = found.guide.getIndex(ItemMultiIndex.class) .findAllByStack(stack); PageAnchor target = allPages.size() > 1 ? GuideItemLinksPage.anchorForStack(stack) : found.page; diff --git a/src/main/java/com/hfstudio/guidenh/config/GuideNHGuiFactory.java b/src/main/java/com/hfstudio/guidenh/config/GuideNHGuiFactory.java index c15e3051..f0378565 100644 --- a/src/main/java/com/hfstudio/guidenh/config/GuideNHGuiFactory.java +++ b/src/main/java/com/hfstudio/guidenh/config/GuideNHGuiFactory.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.config; -import java.util.Collections; import java.util.Set; import net.minecraft.client.Minecraft; @@ -20,7 +19,7 @@ public Class mainConfigGuiClass() { @Override public Set runtimeGuiCategories() { - return Collections.emptySet(); + return Set.of(); } @Override diff --git a/src/main/java/com/hfstudio/guidenh/guide/GuideItemSettings.java b/src/main/java/com/hfstudio/guidenh/guide/GuideItemSettings.java index 00d15d7a..bcacafb0 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/GuideItemSettings.java +++ b/src/main/java/com/hfstudio/guidenh/guide/GuideItemSettings.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Optional; @@ -15,10 +14,7 @@ public record GuideItemSettings(Optional displayName, List tooltipLines, Optional itemModel) { - public static GuideItemSettings DEFAULT = new GuideItemSettings( - Optional.empty(), - Collections.emptyList(), - Optional.empty()); + public static GuideItemSettings DEFAULT = new GuideItemSettings(Optional.empty(), List.of(), Optional.empty()); public static GuideItemSettings fromJson(JsonObject json) { Optional displayName = Optional.empty(); diff --git a/src/main/java/com/hfstudio/guidenh/guide/GuidePage.java b/src/main/java/com/hfstudio/guidenh/guide/GuidePage.java index 8943cbab..23cff46c 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/GuidePage.java +++ b/src/main/java/com/hfstudio/guidenh/guide/GuidePage.java @@ -14,7 +14,7 @@ import com.hfstudio.guidenh.guide.document.block.LytNode; import com.hfstudio.guidenh.guide.scene.LytGuidebookScene; -public final class GuidePage { +public class GuidePage { private final String sourcePack; private final ResourceLocation id; diff --git a/src/main/java/com/hfstudio/guidenh/guide/GuidePageIcon.java b/src/main/java/com/hfstudio/guidenh/guide/GuidePageIcon.java index 422cb248..140b0295 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/GuidePageIcon.java +++ b/src/main/java/com/hfstudio/guidenh/guide/GuidePageIcon.java @@ -1,7 +1,5 @@ package com.hfstudio.guidenh.guide; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.item.ItemStack; @@ -61,7 +59,7 @@ public static GuidePageIcon cycleTextures(List textureIds, Lis } private static List copy(List values) { - return Collections.unmodifiableList(new ArrayList<>(values)); + return List.copyOf(values); } public boolean isItemIcon() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/PageAnchor.java b/src/main/java/com/hfstudio/guidenh/guide/PageAnchor.java index e42ae458..84e2261d 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/PageAnchor.java +++ b/src/main/java/com/hfstudio/guidenh/guide/PageAnchor.java @@ -2,6 +2,7 @@ import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import com.github.bsideup.jabel.Desugar; @@ -33,7 +34,7 @@ public static PageAnchor parse(String anchor) { } @Override - public String toString() { + public @NotNull String toString() { if (anchor != null) { return pageId.toString() + "#" + anchor; } else { diff --git a/src/main/java/com/hfstudio/guidenh/guide/PageCollection.java b/src/main/java/com/hfstudio/guidenh/guide/PageCollection.java index 6972dd58..4253b26f 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/PageCollection.java +++ b/src/main/java/com/hfstudio/guidenh/guide/PageCollection.java @@ -26,8 +26,7 @@ default ResourceLocation getId() { @Nullable GuidePage getPage(ResourceLocation id); - @Nullable - byte[] loadAsset(ResourceLocation id); + byte @Nullable [] loadAsset(ResourceLocation id); NavigationTree getNavigationTree(); diff --git a/src/main/java/com/hfstudio/guidenh/guide/compiler/Frontmatter.java b/src/main/java/com/hfstudio/guidenh/guide/compiler/Frontmatter.java index c177842f..c6f27cee 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/compiler/Frontmatter.java +++ b/src/main/java/com/hfstudio/guidenh/guide/compiler/Frontmatter.java @@ -2,7 +2,6 @@ import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -191,7 +190,7 @@ public static Frontmatter parse(ResourceLocation pageId, String yamlText) { loadPriority); } - return new Frontmatter(navigation, Collections.unmodifiableMap(new HashMap<>(data))); + return new Frontmatter(navigation, Map.copyOf(new HashMap<>(data))); } @Nullable @@ -276,7 +275,7 @@ public FrontmatterPageMeta parseMeta() { if (z > 0f) zoom = z; } - return new FrontmatterPageMeta(Collections.unmodifiableList(authors), date, updated, zoom); + return new FrontmatterPageMeta(List.copyOf(authors), date, updated, zoom); } @Nullable @@ -336,13 +335,19 @@ private static NavigationIconEntry parseIconEntryString(String raw, ResourceLoca @Nullable private static String toDateString(@Nullable Object value) { - if (value == null) return null; - if (value instanceof String) { - String s = ((String) value).trim(); - return s.isEmpty() ? null : s; - } - if (value instanceof Date) { - return new SimpleDateFormat("yyyy-MM-dd", Locale.ROOT).format((Date) value); + switch (value) { + case null -> { + return null; + } + case String string -> { + String s = string.trim(); + return s.isEmpty() ? null : s; + } + case Date date -> { + return new SimpleDateFormat("yyyy-MM-dd", Locale.ROOT).format(date); + } + default -> { + } } return value.toString(); } diff --git a/src/main/java/com/hfstudio/guidenh/guide/compiler/GuideItemReferenceResolver.java b/src/main/java/com/hfstudio/guidenh/guide/compiler/GuideItemReferenceResolver.java index 5919e16b..de383c4b 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/compiler/GuideItemReferenceResolver.java +++ b/src/main/java/com/hfstudio/guidenh/guide/compiler/GuideItemReferenceResolver.java @@ -14,7 +14,7 @@ import com.github.bsideup.jabel.Desugar; import com.hfstudio.guidenh.integration.api.GuideNhIntegrationRegistry; -public final class GuideItemReferenceResolver { +public class GuideItemReferenceResolver { private GuideItemReferenceResolver() {} diff --git a/src/main/java/com/hfstudio/guidenh/guide/compiler/IdUtils.java b/src/main/java/com/hfstudio/guidenh/guide/compiler/IdUtils.java index 76167cfa..14f190f7 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/compiler/IdUtils.java +++ b/src/main/java/com/hfstudio/guidenh/guide/compiler/IdUtils.java @@ -28,7 +28,7 @@ public class IdUtils { // which would otherwise allow downstream mutation to corrupt the cached entry. private static final int PARSE_CACHE_MAX = 1024; private static final Map PARSE_CACHE = Collections - .synchronizedMap(new LinkedHashMap(256, 0.75f, true) { + .synchronizedMap(new LinkedHashMap<>(256, 0.75f, true) { @Override protected boolean removeEldestEntry(Map.Entry eldest) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/compiler/IndexingContext.java b/src/main/java/com/hfstudio/guidenh/guide/compiler/IndexingContext.java index 5db8ee4c..3507a794 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/compiler/IndexingContext.java +++ b/src/main/java/com/hfstudio/guidenh/guide/compiler/IndexingContext.java @@ -39,7 +39,7 @@ default void indexContent(List children, IndexingSink void indexContent(MdAstAnyContent content, IndexingSink sink); - default @Nullable byte[] loadAsset(ResourceLocation imageId) { + default byte @Nullable [] loadAsset(ResourceLocation imageId) { return getPageCollection().loadAsset(imageId); } diff --git a/src/main/java/com/hfstudio/guidenh/guide/compiler/LinkParser.java b/src/main/java/com/hfstudio/guidenh/guide/compiler/LinkParser.java index 60a07843..81819b36 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/compiler/LinkParser.java +++ b/src/main/java/com/hfstudio/guidenh/guide/compiler/LinkParser.java @@ -6,6 +6,7 @@ import com.hfstudio.guidenh.guide.GuideAnchor; import com.hfstudio.guidenh.guide.PageAnchor; +import com.hfstudio.guidenh.guide.mediawiki.MediaWikiPageIds; public class LinkParser { @@ -46,7 +47,7 @@ public static void parseLink(PageCompiler compiler, String href, Visitor visitor pageId = compiler.getPageId(); } else { try { - pageId = IdUtils.resolveLink(href, compiler.getPageId()); + pageId = resolveGuidePageLink(compiler, href); } catch (IllegalArgumentException ignored) { visitor.handleError("Invalid link"); return; @@ -73,6 +74,14 @@ public static ResourceLocation resolveGuideId(PageCompiler compiler, ResourceLoc return new ResourceLocation(pageId.getResourceDomain(), currentGuideId.getResourcePath()); } + private static ResourceLocation resolveGuidePageLink(PageCompiler compiler, String href) { + ResourceLocation syntheticPageId = MediaWikiPageIds.tryResolveSyntheticTitle( + compiler.getPageId() + .getResourceDomain(), + href); + return syntheticPageId != null ? syntheticPageId : IdUtils.resolveLink(href, compiler.getPageId()); + } + public interface Visitor { default void handlePage(GuideAnchor anchor) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/compiler/PageCompiler.java b/src/main/java/com/hfstudio/guidenh/guide/compiler/PageCompiler.java index 79a62b4e..38dc1811 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/compiler/PageCompiler.java +++ b/src/main/java/com/hfstudio/guidenh/guide/compiler/PageCompiler.java @@ -7,7 +7,6 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.IdentityHashMap; import java.util.List; @@ -86,6 +85,9 @@ import com.hfstudio.guidenh.guide.internal.mermaid.MermaidMindmapParser; import com.hfstudio.guidenh.guide.internal.util.GuideStringLines; import com.hfstudio.guidenh.guide.internal.util.LangUtil; +import com.hfstudio.guidenh.guide.mediawiki.MediaWikiListContext; +import com.hfstudio.guidenh.guide.mediawiki.MediaWikiListContextProvider; +import com.hfstudio.guidenh.guide.mediawiki.MediaWikiPageIds; import com.hfstudio.guidenh.guide.render.GuidePageTexture; import com.hfstudio.guidenh.guide.sound.GuideSoundParsers; import com.hfstudio.guidenh.guide.style.BorderStyle; @@ -152,7 +154,7 @@ public class PageCompiler { private static final State> SOURCE_SLICE_STACK = new State<>( "source_slice_stack", castClass(List.class), - Collections.emptyList()); + List.of()); private final PageCollection pages; private final ExtensionCollection extensions; @@ -432,13 +434,13 @@ public static Frontmatter parseFrontmatter(ResourceLocation pageId, MdAstRoot ro } } - return result != null ? result : new Frontmatter(null, Collections.emptyMap()); + return result != null ? result : new Frontmatter(null, Map.of()); } public static Frontmatter parseFrontmatterFromSource(ResourceLocation pageId, String pageContent) { var yamlText = extractFrontmatterText(pageContent); if (yamlText == null) { - return new Frontmatter(null, Collections.emptyMap()); + return new Frontmatter(null, Map.of()); } try { @@ -446,7 +448,7 @@ public static Frontmatter parseFrontmatterFromSource(ResourceLocation pageId, St } catch (Exception e) { FMLLog.getLogger() .error("[GuideNH] [PageCompiler] Failed to parse frontmatter for page {}", pageId, e); - return new Frontmatter(null, Collections.emptyMap()); + return new Frontmatter(null, Map.of()); } } @@ -601,10 +603,7 @@ public void compileBlockContext(List children, LytBlo paragraph.setMarginTop(DEFAULT_ELEMENT_SPACING); paragraph.setMarginBottom(DEFAULT_ELEMENT_SPACING); layoutChild = paragraph; - } else if (child instanceof MdAstYamlFrontmatter) { - // This is handled by compile directly - layoutChild = null; - } else if (child instanceof MdAstDefinition) { + } else if (child instanceof MdAstYamlFrontmatter || child instanceof MdAstDefinition) { layoutChild = null; } else if (child instanceof GfmTable astTable) { MarkdownTableMeta meta = extractMarkdownTableMeta(children, i + 1); @@ -625,15 +624,13 @@ public void compileBlockContext(List children, LytBlo compiler.compileBlockContext(this, layoutParent, el); } } else if (child instanceof MdAstPhrasingContent phrasingContent) { - // Wrap in a paragraph with no margins, but try appending to an existing paragraph before this if (previousLayoutChild instanceof LytParagraph paragraph) { compileFlowContent(paragraph, phrasingContent); continue; - } else { - var paragraph = new LytParagraph(); - compileFlowContent(paragraph, phrasingContent); - layoutChild = paragraph; } + var paragraph = new LytParagraph(); + compileFlowContent(paragraph, phrasingContent); + layoutChild = paragraph; } else { layoutChild = createErrorBlock("Unhandled Markdown node in block context", child); } @@ -751,7 +748,7 @@ private void compileListItem(MdAstListItem astListItem, LytListItem listItem, .size(); i++) { var child = astListItem.children() .get(i); - compileBlockContext(Collections.singletonList(child), listItem); + compileBlockContext(List.of(child), listItem); } } @@ -767,7 +764,7 @@ private void compileDirectiveBody(BlockquoteDirective directive, LytBlockContain compileParagraphBlock(firstParagraph, parent); } for (int i = 1; i < children.size(); i++) { - compileBlockContext(Collections.singletonList(children.get(i)), parent); + compileBlockContext(List.of(children.get(i)), parent); } return; } @@ -814,8 +811,7 @@ private MdAstParagraph cloneParagraphWithLeadingTextOverride(MdAstParagraph orig itemImage.setInline(true); itemImage.setTooltipSuppressed(true); itemImage.setInlineYOffsetOverride(-1); - var inlineBlock = LytFlowInlineBlock.of(itemImage); - return inlineBlock; + return LytFlowInlineBlock.of(itemImage); } if (icon.kind() == QuoteIconKind.PNG) { @@ -939,7 +935,7 @@ public static LytBlock wrapFloatAwareIfNeeded(LytBlock block) { private @Nullable String getTableRowText(GfmTableRow row) { StringBuilder sb = new StringBuilder(); for (var cell : row.children()) { - if (sb.length() > 0) { + if (!sb.isEmpty()) { sb.append(' '); } sb.append(cell.toText()); @@ -989,10 +985,10 @@ private void compileFlowContent(LytFlowParent layoutParent, MdAstAnyContent cont span.modifyStyle(style -> style.italic(true)); compileFlowContext(astEmphasis, span); layoutChild = span; - } else if (content instanceof MdAstDelete astEmphasis) { + } else if (content instanceof MdAstDelete astDelete) { var span = new LytFlowSpan(); span.modifyStyle(style -> style.strikethrough(true)); - compileFlowContext(astEmphasis, span); + compileFlowContext(astDelete, span); layoutChild = span; } else if (content instanceof MdAstUnderline astUnderline) { var span = new LytFlowSpan(); @@ -1273,11 +1269,11 @@ private LytBlock compileCsvCodeBlock(MdAstCode astCode) { private CsvFenceMeta parseCsvFenceMeta(@Nullable String meta) { if (meta == null || meta.trim() .isEmpty()) { - return new CsvFenceMeta(true, Collections.emptyList()); + return new CsvFenceMeta(true, List.of()); } boolean header = true; - List widthHints = Collections.emptyList(); + List widthHints = List.of(); for (String token : splitMetaTokens(meta)) { int equalsIndex = token.indexOf('='); if (equalsIndex <= 0 || equalsIndex == token.length() - 1) { @@ -1319,7 +1315,7 @@ private MarkdownTableMeta extractMarkdownTableMeta(List 0) { + if (!metaExpression.isEmpty()) { metaExpression.append(' '); } metaExpression.append(matcher.group(1)); @@ -1332,7 +1328,7 @@ private MarkdownTableMeta extractMarkdownTableMeta(List widthHints = parseWidthHintsFromMetaExpression(metaExpression.toString()); if (widthHints.isEmpty()) { - return new MarkdownTableMeta(Collections.emptyList(), consumed); + return new MarkdownTableMeta(List.of(), consumed); } return new MarkdownTableMeta(widthHints, consumed); @@ -1341,14 +1337,14 @@ private MarkdownTableMeta extractMarkdownTableMeta(List children, int startIndex) { if (startIndex <= 0 || startIndex > children.size()) { - return new MarkdownTableMeta(Collections.emptyList(), 0); + return new MarkdownTableMeta(List.of(), 0); } MdAstAnyContent tableChild = children.get(startIndex - 1); if (!(tableChild instanceof MdAstNode tableNode) || tableNode.position() == null || tableNode.position() .end() == null) { - return new MarkdownTableMeta(Collections.emptyList(), 0); + return new MarkdownTableMeta(List.of(), 0); } int endLine = tableNode.position() @@ -1356,7 +1352,7 @@ private MarkdownTableMeta extractMarkdownTableMetaFromSource(List parseWidthHintsFromMetaExpression(String metaExpression) { return CsvTableCompiler.parseWidthHints(value); } } - return Collections.emptyList(); + return List.of(); } private List splitMetaTokens(String meta) { @@ -1418,7 +1414,7 @@ private List splitMetaTokens(String meta) { continue; } if (Character.isWhitespace(ch) && !inQuotes) { - if (current.length() > 0) { + if (!current.isEmpty()) { tokens.add(current.toString()); current.setLength(0); } @@ -1426,7 +1422,7 @@ private List splitMetaTokens(String meta) { } current.append(ch); } - if (current.length() > 0) { + if (!current.isEmpty()) { tokens.add(current.toString()); } return tokens; @@ -1553,7 +1549,7 @@ private String dedentBlockTagBody(String body) { result.append(removeLeadingWhitespace(lines.get(i), minIndent)); } - while (result.length() > 0 && result.charAt(result.length() - 1) == '\n') { + while (!result.isEmpty() && result.charAt(result.length() - 1) == '\n') { result.setLength(result.length() - 1); } if (Objects.equals(body, normalized) && body.endsWith("\n")) { @@ -1771,10 +1767,19 @@ private static boolean defaultPageExistsForLink(PageCompiler compiler, ResourceL ResourceLocation pageId) { PageCollection pages = compiler.getPageCollection(); if (guideId.equals(pages.getId())) { - return pages.pageExists(pageId); + return pages.pageExists(pageId) || syntheticPageExists(pages, pageId); } var guide = GuideRegistry.getById(guideId); - return guide != null && guide.pageExists(pageId); + return guide != null && (guide.pageExists(pageId) || syntheticPageExists(guide, pageId)); + } + + private static boolean syntheticPageExists(Object pageContainer, ResourceLocation pageId) { + if (!MediaWikiPageIds.isSyntheticPage(pageId) + || !(pageContainer instanceof MediaWikiListContextProvider provider)) { + return false; + } + MediaWikiListContext context = provider.getMediaWikiListContext(); + return context != null && context.getParsedPage(pageId) != null; } public interface PageLinkResolver { @@ -1806,7 +1811,7 @@ public void clearCompilerState(State state) { public String getCurrentSourceText() { List sourceSlices = getCompilerState(SOURCE_SLICE_STACK); if (!sourceSlices.isEmpty()) { - return sourceSlices.get(sourceSlices.size() - 1) + return sourceSlices.getLast() .source(); } return pageContent; diff --git a/src/main/java/com/hfstudio/guidenh/guide/compiler/YamlNbtConverter.java b/src/main/java/com/hfstudio/guidenh/guide/compiler/YamlNbtConverter.java index 6535b859..1d5efe8f 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/compiler/YamlNbtConverter.java +++ b/src/main/java/com/hfstudio/guidenh/guide/compiler/YamlNbtConverter.java @@ -13,7 +13,7 @@ import net.minecraft.nbt.NBTTagShort; import net.minecraft.nbt.NBTTagString; -public final class YamlNbtConverter { +public class YamlNbtConverter { private YamlNbtConverter() {} @@ -56,27 +56,20 @@ private static NBTTagList toNbtList(List list) { NBTTagList nbtList = new NBTTagList(); for (Object item : list) { - if (item == null) continue; - - if (item instanceof Mapmap) { - nbtList.appendTag(toNbt(map)); - } else if (item instanceof Boolean bool) { - nbtList.appendTag(new NBTTagByte((byte) (bool ? 1 : 0))); - } else if (item instanceof Byte b) { - nbtList.appendTag(new NBTTagByte(b)); - } else if (item instanceof Short s) { - nbtList.appendTag(new NBTTagShort(s)); - } else if (item instanceof Integer i) { - nbtList.appendTag(new NBTTagInt(i)); - } else if (item instanceof Long l) { - nbtList.appendTag(new NBTTagLong(l)); - } else if (item instanceof Float f) { - nbtList.appendTag(new NBTTagFloat(f)); - } else if (item instanceof Double d) { - nbtList.appendTag(new NBTTagDouble(d)); - } else if (item instanceof String str) { - nbtList.appendTag(new NBTTagString(str)); + switch (item) { + case Map map -> nbtList.appendTag(toNbt(map)); + case Boolean bool -> nbtList.appendTag(new NBTTagByte((byte) (bool ? 1 : 0))); + case Byte b -> nbtList.appendTag(new NBTTagByte(b)); + case Short s -> nbtList.appendTag(new NBTTagShort(s)); + case Integer i -> nbtList.appendTag(new NBTTagInt(i)); + case Long l -> nbtList.appendTag(new NBTTagLong(l)); + case Float f -> nbtList.appendTag(new NBTTagFloat(f)); + case Double d -> nbtList.appendTag(new NBTTagDouble(d)); + case String str -> nbtList.appendTag(new NBTTagString(str)); + case null, default -> { + } } + } return nbtList; diff --git a/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/CommandLinkCompiler.java b/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/CommandLinkCompiler.java index 366ad20a..9283e94e 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/CommandLinkCompiler.java +++ b/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/CommandLinkCompiler.java @@ -35,8 +35,6 @@ protected void compile(PageCompiler compiler, LytFlowParent parent, MdxJsxElemen parent.appendError(compiler, "command must start with /", el); return; } - var sendCommand = command; - var closeGuide = MdxAttrs.getBoolean(compiler, parent, el, "close", false); var title = el.getAttributeString("title", ""); var link = new LytFlowLink(); link.setTooltip(buildTooltip(title, command)); @@ -47,9 +45,9 @@ protected void compile(PageCompiler compiler, LytFlowParent parent, MdxJsxElemen if (mc.thePlayer != null) { if (ModConfig.debug.enableDebugMode) { FMLLog.getLogger() - .info("[GuideNH] [CommandLinkCompiler] Sending command from page {}: {}", pageId, sendCommand); + .info("[GuideNH] [CommandLinkCompiler] Sending command from page {}: {}", pageId, command); } - mc.thePlayer.sendChatMessage(sendCommand); + mc.thePlayer.sendChatMessage(command); } }); diff --git a/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/CsvTableCompiler.java b/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/CsvTableCompiler.java index beb64826..49984d71 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/CsvTableCompiler.java +++ b/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/CsvTableCompiler.java @@ -2,7 +2,6 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Set; @@ -24,7 +23,7 @@ public class CsvTableCompiler extends BlockTagCompiler { @Override public Set getTagNames() { - return Collections.singleton("CsvTable"); + return Set.of("CsvTable"); } @Override @@ -126,7 +125,7 @@ public static LytTable buildTable(List> rows, boolean header, List< public static List parseWidthHints(String rawWidths) { if (rawWidths == null || rawWidths.trim() .isEmpty()) { - return Collections.emptyList(); + return List.of(); } List result = new ArrayList<>(); diff --git a/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/DetailsTagCompiler.java b/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/DetailsTagCompiler.java index 9b0a7ac0..bbb35e77 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/DetailsTagCompiler.java +++ b/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/DetailsTagCompiler.java @@ -31,7 +31,7 @@ protected void compile(PageCompiler compiler, LytBlockContainer parent, MdxJsxEl List children = detailsBodySource != null ? compiler.reparseBlockTagChildren(el) : el.children(); int bodyStart = 0; - if (!children.isEmpty() && children.get(0) instanceof MdxJsxFlowElement summaryElement + if (!children.isEmpty() && children.getFirst() instanceof MdxJsxFlowElement summaryElement && "summary".equals(summaryElement.name())) { details.getSummaryBox() .clearContent(); diff --git a/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/MdxAttrs.java b/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/MdxAttrs.java index bb081c47..45010c17 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/MdxAttrs.java +++ b/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/MdxAttrs.java @@ -384,8 +384,7 @@ public static Vector3f getVector3(PageCompiler compiler, LytErrorSink errorSink, return new Vector3f(parts[0], parts[1], parts[2]); } - @Nullable - public static float[] parseVector3Parts(String raw) { + public static float @Nullable [] parseVector3Parts(String raw) { float[] values = new float[3]; int length = raw.length(); int index = 0; diff --git a/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/MermaidCompiler.java b/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/MermaidCompiler.java index c354721e..7e24f0e6 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/MermaidCompiler.java +++ b/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/MermaidCompiler.java @@ -206,8 +206,8 @@ private Map indexNodesById(MermaidMindmapNode root) MermaidMindmapNode node = pending.removeFirst(); nodesById.putIfAbsent(node.getId(), node); List children = node.getChildren(); - for (int index = 0; index < children.size(); index++) { - pending.addLast(children.get(index)); + for (MermaidMindmapNode child : children) { + pending.addLast(child); } } return nodesById; diff --git a/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/RecipeCompiler.java b/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/RecipeCompiler.java index e9f251e0..0d818617 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/RecipeCompiler.java +++ b/src/main/java/com/hfstudio/guidenh/guide/compiler/tags/RecipeCompiler.java @@ -1,8 +1,6 @@ package com.hfstudio.guidenh.guide.compiler.tags; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.HashSet; import java.util.IdentityHashMap; import java.util.List; @@ -41,7 +39,7 @@ public class RecipeCompiler extends BlockTagCompiler { @Override public Set getTagNames() { - return new HashSet<>(Arrays.asList("Recipe", "RecipeFor", "RecipeUsage", "RecipesFor")); + return new HashSet<>(Set.of("Recipe", "RecipeFor", "RecipeUsage", "RecipesFor")); } @Override @@ -160,7 +158,7 @@ protected void compile(PageCompiler compiler, LytBlockContainer parent, MdxJsxEl Object handler = handlers.get(hi); int num = GuideNhIntegrationRegistry.global() .lookupRecipeHandlerRecipeCount(handler); - int recipeStart = exactRecipeIndex >= 0 ? exactRecipeIndex : 0; + int recipeStart = Math.max(exactRecipeIndex, 0); int recipeEnd = exactRecipeIndex >= 0 ? Math.min(num, exactRecipeIndex + 1) : num; for (int ri = recipeStart; ri < recipeEnd && boxes.size() < limit; ri++) { if (hasRecipeFilter && !recipeMatches(handler, ri, inputExpr, outputExpr)) continue; @@ -195,12 +193,12 @@ protected void compile(PageCompiler compiler, LytBlockContainer parent, MdxJsxEl } // Legacy fallback: raw slot data coming from NEI (no handler draw) or from vanilla crafting registry. - List recipeEntries = usageQuery ? Collections.emptyList() + List recipeEntries = usageQuery ? List.of() : GuideNhIntegrationRegistry.global() .findCraftingRecipeEntries(targetStack); if (!recipeEntries.isEmpty()) { List boxes = new ArrayList<>(); - int entryStart = exactRecipeIndex >= 0 ? exactRecipeIndex : 0; + int entryStart = Math.max(exactRecipeIndex, 0); int entryEnd = exactRecipeIndex >= 0 ? Math.min(recipeEntries.size(), exactRecipeIndex + 1) : recipeEntries.size(); for (int i = entryStart; i < entryEnd && boxes.size() < limit; i++) { @@ -235,8 +233,7 @@ protected void compile(PageCompiler compiler, LytBlockContainer parent, MdxJsxEl } } - List entries = usageQuery ? Collections.emptyList() - : RecipeLookup.findByOutput(item); + List entries = usageQuery ? List.of() : RecipeLookup.findByOutput(item); if (entries.isEmpty()) { if (fallbackText != null) { if (!fallbackText.isEmpty()) parent.append(LytParagraph.of(fallbackText)); @@ -250,7 +247,7 @@ protected void compile(PageCompiler compiler, LytBlockContainer parent, MdxJsxEl } List boxes = new ArrayList<>(); - int vanillaStart = exactRecipeIndex >= 0 ? exactRecipeIndex : 0; + int vanillaStart = Math.max(exactRecipeIndex, 0); int vanillaEnd = exactRecipeIndex >= 0 ? Math.min(entries.size(), exactRecipeIndex + 1) : entries.size(); for (int i = vanillaStart; i < vanillaEnd && boxes.size() < limit; i++) { var e = entries.get(i); @@ -375,7 +372,7 @@ private FilterTerm(IdUtils.ParsedItemRef ref, boolean negated) { */ public static class FilterExpr { - private static final FilterExpr EMPTY = new FilterExpr(Collections.>emptyList()); + private static final FilterExpr EMPTY = new FilterExpr(List.of()); private final List> orGroups; private FilterExpr(List> orGroups) { @@ -469,13 +466,7 @@ public List readIngredientSlots(Object handler, int recipeIndex) { public static FilterExpr parseFilterExpr(PageCompiler compiler, LytBlockContainer parent, MdxJsxElementFields el, String attr, String defaultNs) { String raw = trimToNull(MdxAttrs.getString(compiler, parent, el, attr, null)); - return parseFilterExpr(raw, attr, defaultNs, new Consumer() { - - @Override - public void accept(String message) { - parent.appendError(compiler, message, el); - } - }); + return parseFilterExpr(raw, attr, defaultNs, message -> parent.appendError(compiler, message, el)); } public static FilterExpr parseFilterExpr(@Nullable String raw, String defaultNs) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytAlignedBlock.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytAlignedBlock.java index c6ad3164..55719718 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytAlignedBlock.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytAlignedBlock.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.document.block; -import java.util.Collections; import java.util.List; import com.hfstudio.guidenh.guide.document.LytRect; @@ -51,7 +50,7 @@ public ContentAlign getAlign() { @Override public List getChildren() { - return Collections.singletonList(inner); + return List.of(inner); } @Override diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytCodeBlock.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytCodeBlock.java index cd301b70..921df903 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytCodeBlock.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytCodeBlock.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.document.block; import java.util.ArrayList; -import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -655,7 +654,7 @@ private static Map> buildKeywordMap() { } private static Set kwSet(String... words) { - return new HashSet<>(Arrays.asList(words)); + return new HashSet<>(List.of(words)); } private static String[] buildAsciiStrings() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytDocument.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytDocument.java index d7719cf6..446782fd 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytDocument.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytDocument.java @@ -149,7 +149,7 @@ public void render(RenderContext context) { } } - public HitTestResult getHoveredElement() { + public @Nullable HitTestResult getHoveredElement() { return hoveredElement; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytDocumentFloat.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytDocumentFloat.java index 57360a28..3f77bd2c 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytDocumentFloat.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytDocumentFloat.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.document.block; -import java.util.Collections; import java.util.List; import com.hfstudio.guidenh.guide.document.LytRect; @@ -63,7 +62,7 @@ public boolean isFloatRight() { @Override public List getChildren() { - return Collections.singletonList(inner); + return List.of(inner); } @Override diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytFloatAwareBlock.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytFloatAwareBlock.java index c77fcfd8..5a1035ff 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytFloatAwareBlock.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytFloatAwareBlock.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.document.block; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -33,7 +32,7 @@ public LytBlock getInner() { @Override public List getChildren() { - return Collections.singletonList(inner); + return List.of(inner); } @Override @@ -48,7 +47,7 @@ protected LytRect computeLayout(LayoutContext context, int x, int y, int availab } var nextFloatBottom = context.getNextFloatBottomEdge(laneY); - if (!nextFloatBottom.isPresent()) { + if (nextFloatBottom.isEmpty()) { return inner.layout(context, x, laneY, availableWidth); } diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytGuiSprite.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytGuiSprite.java index 25c45151..d6507c79 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytGuiSprite.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytGuiSprite.java @@ -25,7 +25,7 @@ public class LytGuiSprite extends LytBlock implements InteractiveElement { public LytGuiSprite() {} - public LytGuiSprite(GuiSprite sprite, LytSize size) { + public LytGuiSprite(@Nullable GuiSprite sprite, LytSize size) { this.sprite = sprite; this.size = size; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytItemImage.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytItemImage.java index 3c1b1468..2785ff5c 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytItemImage.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytItemImage.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.document.block; -import java.util.Collections; import java.util.List; import java.util.Optional; @@ -230,7 +229,7 @@ public Optional getTooltip(float x, float y) { } public List getStacks() { - return stack == null ? Collections.emptyList() : Collections.singletonList(stack); + return stack == null ? List.of() : List.of(stack); } /** Resolves the final label text based on the current stack and format pattern. */ diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytLatexBlock.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytLatexBlock.java index 413d657f..8c297202 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytLatexBlock.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytLatexBlock.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.document.block; -import java.util.Collections; import java.util.List; import java.util.Optional; @@ -132,7 +131,7 @@ protected LytVisitor.Result visitChildren(LytVisitor visitor, boolean includeOut @Override public List getChildren() { - return Collections.emptyList(); + return List.of(); } public String getFormula() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytLatexDisplayBlock.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytLatexDisplayBlock.java index 9aff23aa..c6866f36 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytLatexDisplayBlock.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytLatexDisplayBlock.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.document.block; -import java.util.Collections; import java.util.List; import java.util.Optional; @@ -112,7 +111,7 @@ protected LytVisitor.Result visitChildren(LytVisitor visitor, boolean includeOut @Override public List getChildren() { - return Collections.emptyList(); + return List.of(); } public String getFormula() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytListItem.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytListItem.java index e8635d6a..0077bfff 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytListItem.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytListItem.java @@ -59,7 +59,7 @@ public void render(RenderContext context) { private LytRect getMarkerLineBounds(RenderContext context) { if (!children.isEmpty()) { - LytBlock firstChild = children.get(0); + LytBlock firstChild = children.getFirst(); if (firstChild instanceof LytParagraph paragraph) { LytRect firstTextRun = paragraph.getFirstTextRunBounds(); if (firstTextRun != null) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytMermaidMindmap.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytMermaidMindmap.java index 55a2b603..5cd18924 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytMermaidMindmap.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytMermaidMindmap.java @@ -19,15 +19,13 @@ public class LytMermaidMindmap extends LytVBox implements InteractiveElement { private final LytMermaidMindmapCanvas canvas; public LytMermaidMindmap(MermaidMindmapDocument mindmap, String sourceText) { - this(mindmap, sourceText, Collections.emptyMap()); + this(mindmap, sourceText, Collections.emptyMap()); } public LytMermaidMindmap(MermaidMindmapDocument mindmap, String sourceText, Map nodeContent) { this.mindmap = mindmap; this.sourceText = sourceText != null ? sourceText : ""; - this.canvas = new LytMermaidMindmapCanvas( - mindmap, - nodeContent != null ? nodeContent : Collections.emptyMap()); + this.canvas = new LytMermaidMindmapCanvas(mindmap, nodeContent != null ? nodeContent : Collections.emptyMap()); setPadding(6); setGap(4); diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytMermaidMindmapCanvas.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytMermaidMindmapCanvas.java index be0ec277..60b36e95 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytMermaidMindmapCanvas.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytMermaidMindmapCanvas.java @@ -116,7 +116,7 @@ public class LytMermaidMindmapCanvas extends LytBlock implements DocumentDragTar public LytMermaidMindmapCanvas(MermaidMindmapDocument mindmap, Map nodeContentBlocks) { this.mindmap = mindmap; - this.nodeContentBlocks = nodeContentBlocks == null ? Collections.emptyMap() + this.nodeContentBlocks = nodeContentBlocks == null ? Collections.emptyMap() : new LinkedHashMap<>(nodeContentBlocks); for (LytBlock block : this.nodeContentBlocks.values()) { block.parent = this; @@ -369,7 +369,7 @@ private DiagramLayout buildDiagramLayout(NodeLayout root) { Math.max(1, contentBounds.width()), Math.max(1, contentBounds.height()), contentBounds, - collectContentNodes(root, new ArrayList())); + collectContentNodes(root, new ArrayList<>())); } private LytRect collectContentBounds(NodeLayout node) { @@ -844,7 +844,7 @@ private List wrapText(LayoutContext context, ResolvedTextStyle style, St StringBuilder line = new StringBuilder(); scanWords(paragraph, word -> appendWrappedWord(result, line, context, style, word, maxWidth)); - if (line.length() > 0) { + if (!line.isEmpty()) { result.add(line.toString()); } return true; @@ -854,7 +854,7 @@ private List wrapText(LayoutContext context, ResolvedTextStyle style, St private boolean appendWrappedWord(List result, StringBuilder line, LayoutContext context, ResolvedTextStyle style, String word, int maxWidth) { - if (line.length() == 0) { + if (line.isEmpty()) { if (measureText(context, style, word) <= maxWidth) { line.append(word); } else { @@ -903,14 +903,14 @@ private void appendBrokenWord(List result, StringBuilder line, LayoutCon for (int offset = 0; offset < word.length();) { int codePoint = word.codePointAt(offset); String next = fragment + new String(Character.toChars(codePoint)); - if (fragment.length() > 0 && measureText(context, style, next) > maxWidth) { + if (!fragment.isEmpty() && measureText(context, style, next) > maxWidth) { result.add(fragment.toString()); fragment.setLength(0); } fragment.appendCodePoint(codePoint); offset += Character.charCount(codePoint); } - if (fragment.length() > 0) { + if (!fragment.isEmpty()) { line.append(fragment); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytNode.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytNode.java index 8c25e91b..168c1cc9 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytNode.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytNode.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.document.block; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -28,7 +27,7 @@ public abstract class LytNode implements Styleable { public void removeChild(LytNode node) {} public List getChildren() { - return Collections.emptyList(); + return List.of(); } /** diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytPlaceholderBlock.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytPlaceholderBlock.java index dbf4fa00..2f11944e 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytPlaceholderBlock.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytPlaceholderBlock.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.document.block; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -23,8 +22,6 @@ public class LytPlaceholderBlock extends LytBlock { private final List currentChildren = new ArrayList<>(1); - private final List unmodifiableChildren = Collections.unmodifiableList(currentChildren); - public LytPlaceholderBlock(CompletableFuture future) { var loading = new LytParagraph(); loading.appendText("Loading..."); @@ -80,6 +77,6 @@ public void render(RenderContext context) { @Override public List getChildren() { - return unmodifiableChildren; + return List.copyOf(currentChildren); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytSlot.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytSlot.java index de5eb7f9..e6ec33ad 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytSlot.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytSlot.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.document.block; -import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.concurrent.TimeUnit; @@ -37,11 +36,11 @@ public class LytSlot extends LytBlock implements InteractiveElement { private int cachedStackIdx = 0; public LytSlot(ItemStack stack) { - this.stacks = stack == null ? Collections.emptyList() : Collections.singletonList(stack); + this.stacks = stack == null ? List.of() : List.of(stack); } public LytSlot(List stacks) { - this.stacks = stacks != null ? stacks : Collections.emptyList(); + this.stacks = stacks != null ? stacks : List.of(); } public boolean isLargeSlot() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytSlotGrid.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytSlotGrid.java index 4da6f978..d929fdd6 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/LytSlotGrid.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/LytSlotGrid.java @@ -25,14 +25,12 @@ public LytSlotGrid(int width, int height) { public static LytSlotGrid columnFromStacks(List items, boolean skipEmpty) { int count = 0; - for (int i = 0; i < items.size(); i++) { - ItemStack s = items.get(i); + for (ItemStack s : items) { if (!skipEmpty || (s != null && s.stackSize > 0)) count++; } var grid = new LytSlotGrid(1, count); int row = 0; - for (int i = 0; i < items.size(); i++) { - ItemStack s = items.get(i); + for (ItemStack s : items) { if (!skipEmpty || (s != null && s.stackSize > 0)) { grid.setItem(0, row++, s); } @@ -42,14 +40,12 @@ public static LytSlotGrid columnFromStacks(List items, boolean skipEm public static LytSlotGrid rowFromStacks(List items, boolean skipEmpty) { int count = 0; - for (int i = 0; i < items.size(); i++) { - ItemStack s = items.get(i); + for (ItemStack s : items) { if (!skipEmpty || (s != null && s.stackSize > 0)) count++; } var grid = new LytSlotGrid(count, 1); int col = 0; - for (int i = 0; i < items.size(); i++) { - ItemStack s = items.get(i); + for (ItemStack s : items) { if (!skipEmpty || (s != null && s.stackSize > 0)) { grid.setItem(col++, 0, s); } diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/CornerLegendRenderer.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/CornerLegendRenderer.java index a199ddde..83bb099c 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/CornerLegendRenderer.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/CornerLegendRenderer.java @@ -59,12 +59,12 @@ public static void render(RenderContext context, LytRect plotRect, List plotRect.x() + GAP; case TOP_RIGHT, BOTTOM_RIGHT -> plotRect.right() - width - GAP; - case NONE -> plotRect.right() - width - GAP; + default -> throw new IllegalStateException("Unexpected value: " + position); }; int y = switch (position) { case TOP_LEFT, TOP_RIGHT -> plotRect.y() + GAP; case BOTTOM_LEFT, BOTTOM_RIGHT -> plotRect.bottom() - height - GAP; - case NONE -> plotRect.y() + GAP; + default -> throw new IllegalStateException("Unexpected value: " + position); }; x = clamp(x, plotRect.x(), plotRect.right() - width); y = clamp(y, plotRect.y(), plotRect.bottom() - height); diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/LytBarChart.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/LytBarChart.java index fcc05b40..c39a527a 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/LytBarChart.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/LytBarChart.java @@ -182,14 +182,13 @@ protected void renderChart(RenderContext context, LytRect plotRect) { context.drawLine(inner.x(), inner.bottom(), inner.right(), inner.bottom(), 1f, xAxis.getAxisColor()); int seriesCount = series.size(); - float categoryHeightForCluster = categoryHeight; float baselineX = CartesianChartRenderer.mapX(0d, xRange, inner); ResolvedTextStyle valueStyle = textStyle(getLabelColor()); if (seriesCount > 0) { - float clusterHeight = categoryHeightForCluster * barWidthRatio; + float clusterHeight = categoryHeight * barWidthRatio; float barHeight = clusterHeight / seriesCount; for (int ci = 0; ci < categoryCount; ci++) { - float clusterCenter = inner.y() + categoryHeightForCluster * (ci + 0.5f); + float clusterCenter = inner.y() + categoryHeight * (ci + 0.5f); float clusterTop = clusterCenter - clusterHeight / 2f; for (int si = 0; si < seriesCount; si++) { ChartSeries s = series.get(si); @@ -232,7 +231,7 @@ protected void renderChart(RenderContext context, LytRect plotRect) { float[] py = new float[n]; for (int i = 0; i < n; i++) { px[i] = CartesianChartRenderer.mapX(s.getYs()[i], xRange, inner); - py[i] = inner.y() + categoryHeightForCluster * (i + 0.5f); + py[i] = inner.y() + categoryHeight * (i + 0.5f); } for (int i = 0; i + 1 < n; i++) { float thick = LINE_THICKNESS + 1f; @@ -266,18 +265,19 @@ private void drawValueLabel(RenderContext context, ResolvedTextStyle style, doub int lh = context.getLineHeight(style); int textX; int textY = bar.y() + (bar.height() - lh) / 2; + int textX1 = bar.x() + (bar.width() - tw) / 2; switch (getLabelPosition()) { case ABOVE: - textX = bar.x() + (bar.width() - tw) / 2; + textX = textX1; textY = bar.y() - lh - 1; break; case BELOW: - textX = bar.x() + (bar.width() - tw) / 2; + textX = textX1; textY = bar.bottom() + 1; break; case CENTER: case INSIDE: - textX = bar.x() + (bar.width() - tw) / 2; + textX = textX1; break; case OUTSIDE: textX = value >= 0 ? (int) endX + 3 : (int) endX - tw - 3; @@ -325,8 +325,7 @@ protected int hitTest(float x, float y) { float categoryHeight = (float) plotCache.height() / categoryCount; // Test line overlay points first so they take priority over bars beneath. if (!lineOverlays.isEmpty()) { - float threshold = (LINE_POINT_RADIUS + 3f) * (LINE_POINT_RADIUS + 3f); - float bestDist = threshold; + float bestDist = (LINE_POINT_RADIUS + 3f) * (LINE_POINT_RADIUS + 3f); int bestKey = -1; for (int li = 0; li < lineOverlays.size(); li++) { ChartSeries s = lineOverlays.get(li); diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/LytChartBase.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/LytChartBase.java index 6da5e116..5fba12c7 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/LytChartBase.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/LytChartBase.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.document.block.chart; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Optional; @@ -244,7 +243,7 @@ public final void render(RenderContext context) { protected abstract List collectLegendEntries(); protected List collectCornerLegendEntries() { - return Collections.emptyList(); + return List.of(); } @Override @@ -268,12 +267,12 @@ public final Optional getTooltip(float x, float y) { sb.append(text); } if (extra != null && !extra.isEmpty()) { - if (sb.length() > 0) { + if (!sb.isEmpty()) { sb.append('\n'); } sb.append(extra); } - if (sb.length() == 0) { + if (sb.isEmpty()) { return Optional.empty(); } return Optional.of(new TextTooltip(sb.toString())); diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/LytPieChart.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/LytPieChart.java index b30de9bf..62a5cb1d 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/LytPieChart.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/LytPieChart.java @@ -84,19 +84,10 @@ protected void renderChart(RenderContext context, LytRect plotRect) { // Label. ChartLabelPosition pos = getLabelPosition(); if (pos != ChartLabelPosition.NONE) { - String text; - switch (pos) { - case OUTSIDE: - case ABOVE: - case BELOW: - text = slice.getLabel() + " " + formatPercent(slice.getValue() / total); - break; - case INSIDE: - case CENTER: - default: - text = formatPercent(slice.getValue() / total); - break; - } + String text = switch (pos) { + case OUTSIDE, ABOVE, BELOW -> slice.getLabel() + " " + formatPercent(slice.getValue() / total); + default -> formatPercent(slice.getValue() / total); + }; int tw = context.getStringWidth(text, labelStyle); float labelR = pos == ChartLabelPosition.OUTSIDE || pos == ChartLabelPosition.ABOVE || pos == ChartLabelPosition.BELOW ? drawRadius + 4f : drawRadius * 0.6f; diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/PieInsetSpec.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/PieInsetSpec.java index e8259768..46649213 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/PieInsetSpec.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/chart/PieInsetSpec.java @@ -89,32 +89,14 @@ public void setTitleColor(int titleColor) { public static Position parsePosition(String raw, Position fallback) { if (raw == null) return fallback; - switch (raw.trim() + return switch (raw.trim() .toLowerCase(Locale.ROOT)) { - case "topright": - case "top-right": - case "tr": - return Position.TOP_RIGHT; - case "topleft": - case "top-left": - case "tl": - return Position.TOP_LEFT; - case "bottomright": - case "bottom-right": - case "br": - return Position.BOTTOM_RIGHT; - case "bottomleft": - case "bottom-left": - case "bl": - return Position.BOTTOM_LEFT; - case "right": - case "rightoutside": - case "right-outside": - case "outside": - case "side": - return Position.RIGHT_OUTSIDE; - default: - return fallback; - } + case "topright", "top-right", "tr" -> Position.TOP_RIGHT; + case "topleft", "top-left", "tl" -> Position.TOP_LEFT; + case "bottomright", "bottom-right", "br" -> Position.BOTTOM_RIGHT; + case "bottomleft", "bottom-left", "bl" -> Position.BOTTOM_LEFT; + case "right", "rightoutside", "right-outside", "outside", "side" -> Position.RIGHT_OUTSIDE; + default -> fallback; + }; } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/functiongraph/FunctionExpr.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/functiongraph/FunctionExpr.java index 7fa039e1..09931eba 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/functiongraph/FunctionExpr.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/functiongraph/FunctionExpr.java @@ -11,7 +11,7 @@ public interface FunctionExpr { double evaluate(double x, double y); /** Constant numeric literal. */ - final class Constant implements FunctionExpr { + class Constant implements FunctionExpr { private final double value; @@ -26,7 +26,7 @@ public double evaluate(double x, double y) { } /** Variable reference. {@code which} = 0 -> x, {@code which} = 1 -> y. */ - final class Variable implements FunctionExpr { + class Variable implements FunctionExpr { private final int which; @@ -41,7 +41,7 @@ public double evaluate(double x, double y) { } /** Unary negation. */ - final class Neg implements FunctionExpr { + class Neg implements FunctionExpr { private final FunctionExpr inner; @@ -56,7 +56,7 @@ public double evaluate(double x, double y) { } /** Absolute value, e.g. produced by {@code |expr|}. */ - final class Abs implements FunctionExpr { + class Abs implements FunctionExpr { private final FunctionExpr inner; @@ -71,7 +71,7 @@ public double evaluate(double x, double y) { } /** Postfix factorial; uses Lanczos gamma for non-integer / negative inputs (rejects negative integers). */ - final class Factorial implements FunctionExpr { + class Factorial implements FunctionExpr { private final FunctionExpr inner; @@ -86,7 +86,7 @@ public double evaluate(double x, double y) { } /** Binary arithmetic (+ - * / % ^). */ - final class Binary implements FunctionExpr { + class Binary implements FunctionExpr { public static final int ADD = 0; public static final int SUB = 1; @@ -122,7 +122,7 @@ public double evaluate(double x, double y) { } /** Named function call with one or two arguments. */ - final class Call implements FunctionExpr { + class Call implements FunctionExpr { private final String name; private final FunctionExpr[] args; diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/functiongraph/FunctionLibrary.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/functiongraph/FunctionLibrary.java index 4bbee5bd..485b8ad8 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/functiongraph/FunctionLibrary.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/functiongraph/FunctionLibrary.java @@ -15,140 +15,65 @@ public static boolean isKnown(String name) { /** Returns 1 for unary functions, 2 for binary, otherwise 0. */ public static int resolveArity(String name) { - switch (name) { - case "sin": - case "cos": - case "tan": - case "asin": - case "acos": - case "atan": - case "sinh": - case "cosh": - case "tanh": - case "ln": - case "log": - case "log2": - case "log10": - case "exp": - case "sqrt": - case "cbrt": - case "abs": - case "sign": - case "floor": - case "ceil": - case "round": - case "deg": - case "rad": - case "gamma": - return 1; - case "atan2": - case "min": - case "max": - case "pow": - case "hypot": - case "mod": - return 2; - default: - return 0; - } + return switch (name) { + case "sin", "cos", "tan", "asin", "acos", "atan", "sinh", "cosh", "tanh", "ln", "log", "log2", "log10", "exp", "sqrt", "cbrt", "abs", "sign", "floor", "ceil", "round", "deg", "rad", "gamma" -> 1; + case "atan2", "min", "max", "pow", "hypot", "mod" -> 2; + default -> 0; + }; } /** Recognised mathematical constants. Returns {@link Double#NaN} when the name is unknown. */ public static double constant(String name) { - switch (name) { - case "pi": - case "PI": - case "Pi": - return Math.PI; - case "e": - case "E": - return Math.E; - case "tau": - case "TAU": - case "Tau": - return Math.PI * 2d; - case "phi": - case "PHI": - return (1d + Math.sqrt(5d)) / 2d; - default: - return Double.NaN; - } + return switch (name) { + case "pi", "PI", "Pi" -> Math.PI; + case "e", "E" -> Math.E; + case "tau", "TAU", "Tau" -> Math.PI * 2d; + case "phi", "PHI" -> (1d + Math.sqrt(5d)) / 2d; + default -> Double.NaN; + }; } /** Evaluate a unary built-in. */ public static double call1(String name, double a) { - switch (name) { - case "sin": - return Math.sin(a); - case "cos": - return Math.cos(a); - case "tan": - return Math.tan(a); - case "asin": - return Math.asin(a); - case "acos": - return Math.acos(a); - case "atan": - return Math.atan(a); - case "sinh": - return Math.sinh(a); - case "cosh": - return Math.cosh(a); - case "tanh": - return Math.tanh(a); - case "ln": - return Math.log(a); - case "log": - return Math.log10(a); - case "log2": - return Math.log(a) / Math.log(2d); - case "log10": - return Math.log10(a); - case "exp": - return Math.exp(a); - case "sqrt": - return a < 0d ? Double.NaN : Math.sqrt(a); - case "cbrt": - return Math.cbrt(a); - case "abs": - return Math.abs(a); - case "sign": - return Math.signum(a); - case "floor": - return Math.floor(a); - case "ceil": - return Math.ceil(a); - case "round": - return Math.rint(a); - case "deg": - return Math.toDegrees(a); - case "rad": - return Math.toRadians(a); - case "gamma": - return gamma(a); - default: - return Double.NaN; - } + return switch (name) { + case "sin" -> Math.sin(a); + case "cos" -> Math.cos(a); + case "tan" -> Math.tan(a); + case "asin" -> Math.asin(a); + case "acos" -> Math.acos(a); + case "atan" -> Math.atan(a); + case "sinh" -> Math.sinh(a); + case "cosh" -> Math.cosh(a); + case "tanh" -> Math.tanh(a); + case "ln" -> Math.log(a); + case "log", "log10" -> Math.log10(a); + case "log2" -> Math.log(a) / Math.log(2d); + case "exp" -> Math.exp(a); + case "sqrt" -> a < 0d ? Double.NaN : Math.sqrt(a); + case "cbrt" -> Math.cbrt(a); + case "abs" -> Math.abs(a); + case "sign" -> Math.signum(a); + case "floor" -> Math.floor(a); + case "ceil" -> Math.ceil(a); + case "round" -> Math.rint(a); + case "deg" -> Math.toDegrees(a); + case "rad" -> Math.toRadians(a); + case "gamma" -> gamma(a); + default -> Double.NaN; + }; } /** Evaluate a binary built-in. */ public static double call2(String name, double a, double b) { - switch (name) { - case "atan2": - return Math.atan2(a, b); - case "min": - return Math.min(a, b); - case "max": - return Math.max(a, b); - case "pow": - return Math.pow(a, b); - case "hypot": - return Math.hypot(a, b); - case "mod": - return b == 0d ? Double.NaN : a % b; - default: - return Double.NaN; - } + return switch (name) { + case "atan2" -> Math.atan2(a, b); + case "min" -> Math.min(a, b); + case "max" -> Math.max(a, b); + case "pow" -> Math.pow(a, b); + case "hypot" -> Math.hypot(a, b); + case "mod" -> b == 0d ? Double.NaN : a % b; + default -> Double.NaN; + }; } /** diff --git a/src/main/java/com/hfstudio/guidenh/guide/document/block/table/LytTable.java b/src/main/java/com/hfstudio/guidenh/guide/document/block/table/LytTable.java index 3320090f..43211325 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/document/block/table/LytTable.java +++ b/src/main/java/com/hfstudio/guidenh/guide/document/block/table/LytTable.java @@ -121,7 +121,7 @@ private void layoutColumns(int x, int availableWidth) { } if (assignedWidth < innerWidth) { - var lastCol = columns.get(columns.size() - 1); + var lastCol = columns.getLast(); lastCol.width += innerWidth - assignedWidth; } return; @@ -134,7 +134,7 @@ private void layoutColumns(int x, int availableWidth) { colX += column.width + CELL_BORDER; } - var lastCol = columns.get(columns.size() - 1); + var lastCol = columns.getLast(); lastCol.width = (x + availableWidth) - lastCol.x - CELL_BORDER; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/extensions/ExtensionCollection.java b/src/main/java/com/hfstudio/guidenh/guide/extensions/ExtensionCollection.java index 0b2b1845..c792d360 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/extensions/ExtensionCollection.java +++ b/src/main/java/com/hfstudio/guidenh/guide/extensions/ExtensionCollection.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.extensions; import java.util.ArrayList; -import java.util.Collections; import java.util.IdentityHashMap; import java.util.List; import java.util.Map; @@ -11,7 +10,7 @@ */ public class ExtensionCollection { - public static final ExtensionCollection EMPTY = new ExtensionCollection(Collections.emptyMap()); + public static final ExtensionCollection EMPTY = new ExtensionCollection(Map.of()); private final List> extensionPoints; private final Map, List> extensions; @@ -24,11 +23,11 @@ public static ExtensionCollection empty() { } private ExtensionCollection(Map, List> extensions) { - extensionPoints = Collections.unmodifiableList(new ArrayList<>(extensions.keySet())); + extensionPoints = List.copyOf(new ArrayList<>(extensions.keySet())); var checkedCollection = new IdentityHashMap<>(extensions); for (var entry : checkedCollection.entrySet()) { var extensionPoint = entry.getKey(); - entry.setValue(Collections.unmodifiableList(new ArrayList<>(entry.getValue()))); + entry.setValue(List.copyOf(entry.getValue())); for (Object o : entry.getValue()) { if (!extensionPoint.extensionPointClass() .isInstance(o)) { @@ -47,7 +46,7 @@ private ExtensionCollection(Map, List> extensions) { public List get(ExtensionPoint extensionPoint) { var extensions = this.extensions.get(extensionPoint); if (extensions == null) { - return Collections.emptyList(); + return List.of(); } return (List) (Object) extensions; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/indices/CategoryIndex.java b/src/main/java/com/hfstudio/guidenh/guide/indices/CategoryIndex.java index fa38a13c..bb6dc23e 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/indices/CategoryIndex.java +++ b/src/main/java/com/hfstudio/guidenh/guide/indices/CategoryIndex.java @@ -2,7 +2,6 @@ import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; @@ -43,7 +42,7 @@ public String getName() { public List get(String categoryName) { List members = getMembers(categoryName); if (members.isEmpty()) { - return Collections.emptyList(); + return List.of(); } var anchors = new ArrayList(members.size()); @@ -55,7 +54,7 @@ public List get(String categoryName) { public List getMembers(String categoryName) { List members = categories.get(resolveCanonicalCategoryName(categoryName)); - return members != null ? new ArrayList<>(members) : Collections.emptyList(); + return members != null ? new ArrayList<>(members) : List.of(); } public List getCategoryNames() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/indices/ItemIndex.java b/src/main/java/com/hfstudio/guidenh/guide/indices/ItemIndex.java index 926a5d73..eeddb05d 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/indices/ItemIndex.java +++ b/src/main/java/com/hfstudio/guidenh/guide/indices/ItemIndex.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.indices; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.item.Item; @@ -70,14 +69,14 @@ public static List> getItemAnchors(ParsedGuidePage page .additionalProperties() .get("item_ids"); if (itemIdsNode == null) { - return Collections.emptyList(); + return List.of(); } List itemIdList = normalizeItemIdEntries(page, itemIdsNode); if (itemIdList == null) { FMLLog.getLogger() .warn("[GuideNH] [ItemIndex] Page {} contains malformed item_ids frontmatter", page.getId()); - return Collections.emptyList(); + return List.of(); } var itemAnchors = new ArrayList>(itemIdList.size()); @@ -139,9 +138,9 @@ private static List normalizeItemIdEntries(ParsedGuidePage page, Object itemI if (trimmed.isEmpty()) { FMLLog.getLogger() .warn("[GuideNH] [ItemIndex] Page {} contains an empty item_ids frontmatter entry", page.getId()); - return Collections.emptyList(); + return List.of(); } - return Collections.singletonList(trimmed); + return List.of(trimmed); } return null; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/indices/ItemMultiIndex.java b/src/main/java/com/hfstudio/guidenh/guide/indices/ItemMultiIndex.java index eb598a81..5ebb64f4 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/indices/ItemMultiIndex.java +++ b/src/main/java/com/hfstudio/guidenh/guide/indices/ItemMultiIndex.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.indices; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.item.Item; @@ -31,9 +30,9 @@ public ItemMultiIndex() { * wildcard-meta entries. Returns an empty list if the stack is null or has no item. */ public List findAllByStack(ItemStack stack) { - if (stack == null) return Collections.emptyList(); + if (stack == null) return List.of(); Item item = stack.getItem(); - if (item == null) return Collections.emptyList(); + if (item == null) return List.of(); return findAllByItem(item, stack.getItemDamage()); } @@ -42,7 +41,7 @@ public List findAllByStack(ItemStack stack) { * followed by wildcard-meta entries. */ public List findAllByItem(Item item, int meta) { - if (item == null) return Collections.emptyList(); + if (item == null) return List.of(); if (meta == OreDictionary.WILDCARD_VALUE) { return get(ItemId.createNoCopy(item, OreDictionary.WILDCARD_VALUE, null)); } diff --git a/src/main/java/com/hfstudio/guidenh/guide/indices/MultiValuedIndex.java b/src/main/java/com/hfstudio/guidenh/guide/indices/MultiValuedIndex.java index f58190fc..11517004 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/indices/MultiValuedIndex.java +++ b/src/main/java/com/hfstudio/guidenh/guide/indices/MultiValuedIndex.java @@ -2,7 +2,6 @@ import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -51,7 +50,7 @@ public List get(K key) { } return result; } - return Collections.emptyList(); + return List.of(); } @Override diff --git a/src/main/java/com/hfstudio/guidenh/guide/indices/OreIndex.java b/src/main/java/com/hfstudio/guidenh/guide/indices/OreIndex.java index 61005963..2de90593 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/indices/OreIndex.java +++ b/src/main/java/com/hfstudio/guidenh/guide/indices/OreIndex.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.indices; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -41,7 +40,7 @@ public class OreIndex extends UniqueIndex { * for stacks registered with wildcard meta, matching the two-step lookup used by * {@link ItemIndex#findByItem}. */ - private Map itemCache = Collections.emptyMap(); + private Map itemCache = Map.of(); public OreIndex() { super( @@ -113,13 +112,13 @@ public static List> getOreAnchors(ParsedGuidePage page) .additionalProperties() .get("ore_ids"); if (oreIdsNode == null) { - return Collections.emptyList(); + return List.of(); } if (!(oreIdsNode instanceof ListoreIdList)) { FMLLog.getLogger() .warn("[GuideNH] [OreIndex] Page {} contains malformed ore_ids frontmatter", page.getId()); - return Collections.emptyList(); + return List.of(); } var oreAnchors = new ArrayList>(oreIdList.size()); diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideBookmarkState.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideBookmarkState.java index 47edef4b..08903207 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideBookmarkState.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideBookmarkState.java @@ -1,6 +1,7 @@ package com.hfstudio.guidenh.guide.internal; -import java.util.Collections; +import java.util.AbstractSet; +import java.util.Iterator; import java.util.LinkedHashSet; import java.util.Set; @@ -19,7 +20,24 @@ public static GuideBookmarkState getSharedInstance() { private final GuideBookmarkStore store; private final Set bookmarks = new LinkedHashSet(); - private final Set bookmarkView = Collections.unmodifiableSet(bookmarks); + private final Set bookmarkView = new AbstractSet() { + + @Override + public Iterator iterator() { + return Set.copyOf(bookmarks) + .iterator(); + } + + @Override + public int size() { + return bookmarks.size(); + } + + @Override + public boolean contains(Object object) { + return bookmarks.contains(object); + } + }; private boolean loaded; private int version; @@ -34,7 +52,7 @@ public boolean isBookmarked(ResourceLocation pageId) { public Set getBookmarks() { ensureLoaded(); - return Collections.unmodifiableSet(new LinkedHashSet(bookmarks)); + return Set.copyOf(bookmarks); } public Set getBookmarksView() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideBookmarkStore.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideBookmarkStore.java index 5a1a635a..cc762165 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideBookmarkStore.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideBookmarkStore.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.LinkedHashSet; import java.util.Set; @@ -24,7 +23,7 @@ public void save(Set pageIds) { public Set parse(String raw) { if (raw == null || raw.trim() .isEmpty()) { - return Collections.emptySet(); + return Set.of(); } Set result = new LinkedHashSet(); String[] tokens = raw.split("\\|"); @@ -45,7 +44,7 @@ public String serialize(Set pageIds) { return ""; } var ordered = new ArrayList(pageIds); - Collections.sort(ordered, Comparator.comparing(ResourceLocation::toString)); + ordered.sort(Comparator.comparing(ResourceLocation::toString)); StringBuilder builder = new StringBuilder(); for (ResourceLocation pageId : ordered) { if (pageId == null) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideCommand.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideCommand.java index 09cfac4b..e3b6d25d 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideCommand.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideCommand.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.command.CommandBase; @@ -27,7 +26,7 @@ public String getCommandUsage(ICommandSender sender) { @Override public List getCommandAliases() { - return Collections.emptyList(); + return List.of(); } @Override @@ -117,7 +116,7 @@ public List addTabCompletionOptions(ICommandSender sender, String[] args } return getListOfStringsMatchingLastWord(args, ids.toArray(new String[0])); } - return Collections.emptyList(); + return List.of(); } @Override diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentResourcePack.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentResourcePack.java index 7c8810ad..a1694cab 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentResourcePack.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentResourcePack.java @@ -15,7 +15,7 @@ import org.jetbrains.annotations.Nullable; -public final class GuideDevelopmentResourcePack implements IResourcePack { +public class GuideDevelopmentResourcePack implements IResourcePack { private final Path root; private final Set resourceDomains; diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentResourcePackWatcher.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentResourcePackWatcher.java index 2bd50191..545fa20d 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentResourcePackWatcher.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentResourcePackWatcher.java @@ -21,7 +21,7 @@ import io.methvin.watcher.DirectoryChangeListener; import io.methvin.watcher.DirectoryWatcher; -public final class GuideDevelopmentResourcePackWatcher implements AutoCloseable { +public class GuideDevelopmentResourcePackWatcher implements AutoCloseable { private final List watchers = new ArrayList<>(); private final ExecutorService watchExecutor; diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentResourcePacks.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentResourcePacks.java index ecb5e4c1..9f59481c 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentResourcePacks.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentResourcePacks.java @@ -4,12 +4,11 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.util.ResourceLocation; -public final class GuideDevelopmentResourcePacks { +public class GuideDevelopmentResourcePacks { private static final List CONFIGURED_PACKS = loadConfiguredPacks(); @@ -44,7 +43,7 @@ private static List loadConfiguredPacks() { packs.add(new GuideDevelopmentResourcePack(root)); } } - return Collections.unmodifiableList(packs); + return List.copyOf(packs); } private static List parseConfiguredRoots() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentSourceArguments.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentSourceArguments.java index 15107f6c..e617f7be 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentSourceArguments.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideDevelopmentSourceArguments.java @@ -7,7 +7,7 @@ import java.util.LinkedHashSet; import java.util.List; -public final class GuideDevelopmentSourceArguments { +public class GuideDevelopmentSourceArguments { public static final String RESOURCE_PACK_SOURCES_PROPERTY = "guideme.resourcePacks.sources"; public static final String RESOURCE_PACK_SOURCE_PROPERTY = "guideme.resourcePack.sources"; diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideMEClientProxy.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideMEClientProxy.java index 1abce385..b5dc041d 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideMEClientProxy.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideMEClientProxy.java @@ -8,7 +8,7 @@ import com.hfstudio.guidenh.guide.PageAnchor; -class GuideMEClientProxy extends GuideMEServerProxy { +public class GuideMEClientProxy extends GuideMEServerProxy { @Override public boolean openGuide(EntityPlayer player, ResourceLocation guideId, @Nullable PageAnchor anchor) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideMEClientReloadDispatcher.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideMEClientReloadDispatcher.java index aebaef59..b1441e6c 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideMEClientReloadDispatcher.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideMEClientReloadDispatcher.java @@ -1,6 +1,6 @@ package com.hfstudio.guidenh.guide.internal; -final class GuideMEClientReloadDispatcher { +public class GuideMEClientReloadDispatcher { private GuideMEClientReloadDispatcher() {} diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideMEServerProxy.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideMEServerProxy.java index c6c5a8b4..69da86f1 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideMEServerProxy.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideMEServerProxy.java @@ -10,7 +10,7 @@ import com.hfstudio.guidenh.guide.PageAnchor; import com.hfstudio.guidenh.guide.compiler.ParsedGuidePage; -class GuideMEServerProxy implements GuideMEProxy { +public class GuideMEServerProxy implements GuideMEProxy { @Override public @Nullable String getGuideDisplayName(ResourceLocation guideId) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideNhBridgeCommand.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideNhBridgeCommand.java index 32d541db..8879bfda 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideNhBridgeCommand.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideNhBridgeCommand.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.internal; -import java.util.Collections; import java.util.List; import net.minecraft.command.CommandBase; @@ -50,7 +49,7 @@ public List addTabCompletionOptions(ICommandSender sender, String[] args if (args.length == 1) { return getListOfStringsMatchingLastWord(args, ROOT_SUB_COMMANDS); } - return Collections.emptyList(); + return List.of(); } @Override diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideRegistry.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideRegistry.java index f8c60723..bcab58f6 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideRegistry.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideRegistry.java @@ -2,9 +2,9 @@ import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; import java.util.Comparator; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -28,7 +28,7 @@ public class GuideRegistry { public static final Map dataDrivenGuides = new HashMap<>(); // Merged between data-driven and in-code guides - public static volatile Map mergedGuides = Collections.emptyMap(); + public static volatile Map mergedGuides = Map.of(); private static volatile NavigationTree mergedNavigationTree = new NavigationTree(); private static volatile long navigationRevision = 1L; private static volatile long cachedNavigationRevision = Long.MIN_VALUE; @@ -41,7 +41,7 @@ public static Collection getAll() { * Return guides registered through code. */ public static Collection getStaticGuides() { - return Collections.unmodifiableList(new ArrayList<>(guides.values())); + return List.copyOf(new ArrayList<>(guides.values())); } public static @Nullable MutableGuide getById(ResourceLocation id) { @@ -147,7 +147,7 @@ public static void rebuildGuides() { } if (!overridden.isEmpty()) { - Collections.sort(overridden, Comparator.comparing(ResourceLocation::toString)); + overridden.sort(Comparator.comparing(ResourceLocation::toString)); if (ModConfig.debug.enableDebugMode) { FMLLog.getLogger() .info( @@ -156,7 +156,7 @@ public static void rebuildGuides() { } } - GuideRegistry.mergedGuides = Collections.unmodifiableMap(merged); + GuideRegistry.mergedGuides = Map.copyOf(merged); invalidateMergedNavigationTree(); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideScopedView.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideScopedView.java index 3430116c..c8620c6c 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideScopedView.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideScopedView.java @@ -43,16 +43,17 @@ public GuideScopedView(Guide delegate, Map pa NavigationTree navigationTree, Map, PageIndex> indexOverrides, @Nullable MediaWikiListContext mediaWikiListContext) { this.delegate = delegate; - this.parsedPagesById = Collections.unmodifiableMap(new LinkedHashMap<>(parsedPagesById)); + this.parsedPagesById = Map.copyOf(new LinkedHashMap<>(parsedPagesById)); this.navigationTree = navigationTree != null ? navigationTree : new NavigationTree(); - this.indexOverrides = indexOverrides != null ? new LinkedHashMap<>(indexOverrides) : Collections.emptyMap(); + this.indexOverrides = indexOverrides != null ? Map.copyOf(new LinkedHashMap<>(indexOverrides)) : Map.of(); this.mediaWikiListContext = mediaWikiListContext; } public static GuideScopedView create(Guide delegate, Map parsedPagesById, Map, PageIndex> indexOverrides) { - Map, PageIndex> safeIndexOverrides = indexOverrides != null ? new LinkedHashMap<>(indexOverrides) - : Collections.emptyMap(); + Map, PageIndex> safeIndexOverrides = indexOverrides != null + ? Map.copyOf(new LinkedHashMap<>(indexOverrides)) + : Map.of(); NavigationTree navigationTree = NavigationTree.build(delegate, parsedPagesById.values()); return new GuideScopedView(delegate, parsedPagesById, navigationTree, safeIndexOverrides, null); } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideScreen.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideScreen.java index 039d3c2a..38112fc4 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideScreen.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideScreen.java @@ -11,6 +11,7 @@ import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.Deque; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -840,7 +841,7 @@ private int resolveNavigationOpenWidth() { int requestedWidth = Math .max(GuideNavBar.MIN_DYNAMIC_OPEN_WIDTH, this.width * GuideNavBar.OPEN_WIDTH_SCREEN_PERCENT / 100); int maxWidth = Math.max(GuideNavBar.WIDTH_CLOSED, panelW - PANEL_PADDING * 2 - 40); - return Math.max(GuideNavBar.WIDTH_CLOSED, Math.min(requestedWidth, maxWidth)); + return Math.min(requestedWidth, maxWidth); } private int getNavigationReservedWidth() { @@ -1051,12 +1052,10 @@ private MutableGuide resolveGuideEditorTargetGuide() { } List guides = new ArrayList<>(GuideRegistry.getAll()); guides.sort( - (left, right) -> left.getId() - .toString() - .compareTo( - right.getId() - .toString())); - return guides.isEmpty() ? null : guides.get(0); + Comparator.comparing( + left -> left.getId() + .toString())); + return guides.isEmpty() ? null : guides.getFirst(); } private void createGuideEditorPageAtPath(MutableGuide activeGuide, ParsedGuidePage currentParsedPage, @@ -1397,8 +1396,7 @@ private Guide buildGuideEditorPreviewGuide(ParsedGuidePage parsedDraft) { CategoryIndex categoryIndex = new CategoryIndex(); categoryIndex.rebuild(indexedPages); - Map, PageIndex> indexOverrides = Collections - ., PageIndex>singletonMap(CategoryIndex.class, categoryIndex); + Map, PageIndex> indexOverrides = Map.of(CategoryIndex.class, categoryIndex); return GuideScopedView.create(guide, scopedPages, indexOverrides); } @@ -2011,7 +2009,7 @@ private int getGuideEditorPreviewLayoutWidth() { private void rebuildToolbar() { this.buttonList.clear(); - int btnY = getToolbarButtonY(); + int btnY = panelY; int leftX = panelX + PANEL_PADDING; int leftSecondaryX = leftX + GuideIconButton.WIDTH + TOOLBAR_GAP; int rightToolbarLeft = getRightToolbarButtonsLeft(); @@ -2061,10 +2059,6 @@ private void rebuildToolbar() { updateToolbarButtonState(); } - private int getToolbarButtonY() { - return panelY + Math.max(0, (TOOLBAR_H - GuideIconButton.HEIGHT) / 2); - } - private GuideIconButton reuseToolbarButton(@Nullable GuideIconButton button, int id, int x, int y, GuideIconButton.Role role) { if (button == null) { @@ -3737,7 +3731,7 @@ private String buildBottomBarText(@Nullable FrontmatterPageMeta meta) { int maxW = (int) (this.width * 0.8); String sourceDisplay = getSourceDisplayName(currentPage.sourcePack()); - List authors = meta != null ? meta.authors() : Collections.emptyList(); + List authors = meta != null ? meta.authors() : List.of(); String dateVal = meta != null ? meta.date() : null; String updatedVal = meta != null ? meta.updated() : null; String authorsStr = buildAuthorsString(authors); @@ -3769,7 +3763,7 @@ private String buildBottomBarText(@Nullable FrontmatterPageMeta meta) { } if (!authors.isEmpty()) { - String firstAuthor = authors.get(0); + String firstAuthor = authors.getFirst(); int authorPrefixW = fr.getStringWidth(GuidebookText.PageMetaAuthor.text("")); int availableForAuthor = maxW - prefixW - ellipsisW @@ -4138,10 +4132,7 @@ private GuideTooltip resolveSceneBlockTooltip(LytGuidebookScene scene, int x, in return new ItemTooltip(stack); } - if (structureLibTooltip != null) { - return structureLibTooltip; - } - return new TextTooltip(name); + return Objects.requireNonNullElseGet(structureLibTooltip, () -> new TextTooltip(name)); } private void drawContentTooltip(ContentTooltip ct, int mouseX, int mouseY, @@ -4221,7 +4212,7 @@ private void drawDebugBlockCoordTooltip(int[] pos, int mouseX, int mouseY) { if (debugY + lineH > this.height) { debugY = this.height - lineH; } - drawHoveringText(Collections.singletonList("\u00a76" + coordText), mouseX, debugY, fr); + drawHoveringText(List.of("\u00a76" + coordText), mouseX, debugY, fr); } private void drawTooltipText(String text, int mouseX, int mouseY) { @@ -6174,7 +6165,7 @@ private void syncSpecialSearchFieldToCurrentRoute() { private int getSpecialSearchFieldWidth() { int preferredWidth = Math.max(140, Math.round(contentW * (SPECIAL_SEARCH_WIDTH_PERCENT / 100.0f))); int maxWidth = Math.max(140, contentW - PANEL_PADDING * 2 - SPECIAL_SEARCH_BACKGROUND_PADDING_X * 2); - return Math.max(140, Math.min(preferredWidth, maxWidth)); + return Math.min(preferredWidth, maxWidth); } private int getSearchButtonX() { @@ -6283,7 +6274,7 @@ private void openItemLinksPage(ItemStack stack) { return; } if (targets.size() == 1) { - var target = targets.get(0); + var target = targets.getFirst(); navigateTo(target.guideId(), target.page()); } else { navigateTo(GuideItemLinksPage.anchorForStack(stack)); @@ -6360,7 +6351,7 @@ private LytDocument buildItemLinksDocument(@Nullable ItemStack stack) { private List findItemLinkTargets(@Nullable ItemStack stack) { if (stack == null || stack.getItem() == null) { - return Collections.emptyList(); + return List.of(); } var uniqueTargets = new LinkedHashMap(); @@ -6440,12 +6431,12 @@ private String resolveSearchResultPath(ResourceLocation pageId) { .isEmpty()) { continue; } - if (breadcrumb.length() > 0) { + if (!breadcrumb.isEmpty()) { breadcrumb.append(" / "); } breadcrumb.append(node.title()); } - if (breadcrumb.length() > 0) { + if (!breadcrumb.isEmpty()) { return breadcrumb.toString(); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideScreenContextMenu.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideScreenContextMenu.java index 508519f1..49511700 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideScreenContextMenu.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideScreenContextMenu.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.client.Minecraft; @@ -68,8 +67,7 @@ public ContextMenuAction action() { private int hoveredIndex = -1; public GuideScreenContextMenu(List entries) { - this.entries = entries != null ? Collections.unmodifiableList(new ArrayList<>(entries)) - : Collections.emptyList(); + this.entries = entries != null ? List.copyOf(new ArrayList<>(entries)) : List.of(); } public boolean isOpen() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideSourceWatcher.java b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideSourceWatcher.java index d8e9ec06..f0eb6ec5 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/GuideSourceWatcher.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/GuideSourceWatcher.java @@ -8,7 +8,6 @@ import java.nio.file.Path; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashSet; @@ -385,7 +384,7 @@ public List takeChanges() { private synchronized Set takeReloadRequests() { if (reloadRequests.isEmpty()) { - return Collections.emptySet(); + return Set.of(); } Map mergedByNamespace = new HashMap<>(); for (PageReloadRequest request : reloadRequests) { @@ -424,7 +423,7 @@ private synchronized void queueReloadedPages(List pages) { private List takeQueuedChanges() { if (deletedPages.isEmpty() && changedPages.isEmpty()) { - return Collections.emptyList(); + return List.of(); } var changes = new ArrayList(); @@ -701,7 +700,7 @@ private void queueResolvedPageState(ResourceLocation pageId) { } private void clearQueuedPageState(ResourceLocation pageId) { - clearQueuedPageStates(Collections.singleton(pageId)); + clearQueuedPageStates(Set.of(pageId)); } private void clearQueuedPageStates(Set pageIds) { @@ -792,13 +791,13 @@ private Map> loadLocalizedSourceOverrides(String lan private Set resolveNamespacesForLocalizedSources(@Nullable String namespaceFilter) { if (namespaceFilter != null) { - return Collections.singleton(namespaceFilter); + return Set.of(namespaceFilter); } if (sourceLayout == GuideDevelopmentSourceLayout.RESOURCE_PACK_ROOT) { Path assetsPath = sourceFolder.resolve("assets"); if (!Files.isDirectory(assetsPath)) { - return Collections.emptySet(); + return Set.of(); } Set namespaces = new HashSet<>(); @@ -818,7 +817,7 @@ private Set resolveNamespacesForLocalizedSources(@Nullable String namesp return namespaces; } - return Collections.singleton(namespace); + return Set.of(namespace); } private int countSourceLanguages(Set pageKeys) { @@ -834,7 +833,7 @@ private int countSourceLanguages(Set pageKeys) { private Map loadLocalizedSourceOverridesForNamespace(String sourceNamespace, String language) { Path langFilePath = getLangFilePath(sourceNamespace, language); if (!Files.isRegularFile(langFilePath)) { - return Collections.emptyMap(); + return Map.of(); } try (InputStream input = Files.newInputStream(langFilePath)) { @@ -842,7 +841,7 @@ private Map loadLocalizedSourceOverridesForNamespace(String sour } catch (IOException e) { FMLLog.getLogger() .warn("[GuideNH] [GuideSourceWatcher] Failed to read localized page lang file {}", langFilePath, e); - return Collections.emptyMap(); + return Map.of(); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/MutableGuide.java b/src/main/java/com/hfstudio/guidenh/guide/internal/MutableGuide.java index e4301027..af1d063f 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/MutableGuide.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/MutableGuide.java @@ -79,7 +79,7 @@ public class MutableGuide * These are only loaded for the current language and optionally supplemented by language-neutral pages. */ private Map pages; - private Map syntheticPages = Collections.emptyMap(); + private Map syntheticPages = Map.of(); private final Map syntheticSourceCache = new HashMap<>(); @Nullable private MediaWikiListContext mediaWikiListContext; @@ -318,7 +318,7 @@ public Map getPageFailureViews() { entry.getKey(), new GuidePageFailureView(failure.headingText, failure.errorText, failure.parseFailure)); } - return Collections.unmodifiableMap(snapshot); + return Map.copyOf(snapshot); } /** @@ -388,7 +388,7 @@ public synchronized void close() { mediaWikiRefreshController.close(); developmentPages.clear(); pageFailures.clear(); - syntheticPages = Collections.emptyMap(); + syntheticPages = Map.of(); syntheticSourceCache.clear(); mediaWikiListContext = null; fallbackMediaWikiListContext = null; @@ -552,8 +552,8 @@ public void setPages(Map pages) { } public void setPages(Map pages, boolean invalidateMergedNavigationTree) { - this.pages = Collections.unmodifiableMap(new HashMap<>(pages)); - this.syntheticPages = Collections.emptyMap(); + this.pages = Map.copyOf(new HashMap<>(pages)); + this.syntheticPages = Map.of(); invalidateMediaWikiDerivedCaches(); synchronized (compiledPagesWeak) { compiledPagesWeak.clear(); @@ -1055,7 +1055,7 @@ private Map getSourceParsedPages() { private void rebuildSyntheticPages() { if (pages == null) { - syntheticPages = Collections.emptyMap(); + syntheticPages = Map.of(); syntheticSourceCache.clear(); invalidateMediaWikiDerivedCaches(); return; @@ -1070,7 +1070,7 @@ private void rebuildSyntheticPages() { categoryIndex, syntheticSourceCache, this::parseSyntheticPage); - syntheticPages = Collections.unmodifiableMap(rebuiltPages); + syntheticPages = Map.copyOf(rebuiltPages); previousSyntheticIds.addAll(syntheticPages.keySet()); for (ResourceLocation syntheticPageId : previousSyntheticIds) { removeCompiledPage(syntheticPageId); diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/csv/CsvTableParser.java b/src/main/java/com/hfstudio/guidenh/guide/internal/csv/CsvTableParser.java index 8fb91b96..27eb2890 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/csv/CsvTableParser.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/csv/CsvTableParser.java @@ -38,7 +38,7 @@ public static List> parse(String rawText) { } } - if (!row.isEmpty() || cell.length() > 0) { + if (!row.isEmpty() || !cell.isEmpty()) { flushRow(rows, row, cell); } @@ -75,7 +75,7 @@ private static boolean isBlankRow(List row) { if (row.size() != 1) { return false; } - return row.get(0) + return row.getFirst() .isEmpty(); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/datadriven/DataDrivenGuideLoader.java b/src/main/java/com/hfstudio/guidenh/guide/internal/datadriven/DataDrivenGuideLoader.java index 78af4fa6..bf630f1a 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/datadriven/DataDrivenGuideLoader.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/datadriven/DataDrivenGuideLoader.java @@ -239,8 +239,7 @@ public static void scanPagePathsForNamespace(File resourcePackRoot, String names } public static List getActiveResourcePacks() { - var resourcePacks = new LinkedHashSet(); - resourcePacks.addAll(GuideDevelopmentResourcePacks.getConfiguredPacks()); + var resourcePacks = new LinkedHashSet(GuideDevelopmentResourcePacks.getConfiguredPacks()); try { var accessor = (AccessorFMLClientHandler) FMLClientHandler.instance(); @@ -500,13 +499,12 @@ public static void collectMarkdownPaths(File directory, String relativePath, Set } for (var child : children) { + String childPath = relativePath.isEmpty() ? child.getName() : relativePath + "/" + child.getName(); if (child.isDirectory()) { - var childRelative = relativePath.isEmpty() ? child.getName() : relativePath + "/" + child.getName(); - collectMarkdownPaths(child, childRelative, pagePaths); + collectMarkdownPaths(child, childPath, pagePaths); } else if (child.isFile() && child.getName() .endsWith(".md")) { - var pagePath = relativePath.isEmpty() ? child.getName() : relativePath + "/" + child.getName(); - pagePaths.add(pagePath); + pagePaths.add(childPath); } } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/SceneEditorOpenService.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/SceneEditorOpenService.java index 2cdd90bd..321c30a3 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/SceneEditorOpenService.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/SceneEditorOpenService.java @@ -102,8 +102,7 @@ void applyImportedStructureDefaults(SceneEditorSession session, String structure .setCenterZ(structureCenter[2]); } - @Nullable - private float[] extractStructureCenter(String structureSnbt) { + private float @Nullable [] extractStructureCenter(String structureSnbt) { try { NBTBase parsed = JsonToNBT.func_150315_a(structureSnbt); if (!(parsed instanceof NBTTagCompound root)) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/SceneEditorScreen.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/SceneEditorScreen.java index 1868cc2b..ca0481db 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/SceneEditorScreen.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/SceneEditorScreen.java @@ -3,7 +3,6 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.Random; @@ -369,7 +368,7 @@ public SceneEditorScreen(SceneEditorSession session) { this.contextMenuElementId = null; this.contextMenuX = 0; this.contextMenuY = 0; - this.contextMenuActions = Collections.emptyList(); + this.contextMenuActions = List.of(); this.addElementMenuOpen = false; this.snapModeMenuOpen = false; this.screenshotScaleField = null; @@ -581,8 +580,6 @@ private void processPendingServerSelectionSync() { return; } applyServerSelectionSnbt(serverSnbt, baseSnbt); - } catch (CompletionException ignored) { - // Keep the client-first editor usable even if the optional server sync fails. } catch (Exception ignored) { // Keep the client-first editor usable even if the optional server sync fails. } @@ -774,26 +771,22 @@ public void drawScreen(int mouseX, int mouseY, float partialTicks) { GuideIconButton hoveredButton = hoveredButton(mouseX, mouseY); if (hoveredButton != null) { - this.drawHoveringText( - Collections.singletonList(hoveredButton.getTooltip()), - mouseX, - mouseY, - this.fontRendererObj); + this.drawHoveringText(List.of(hoveredButton.getTooltip()), mouseX, mouseY, this.fontRendererObj); } else if (isInsideMarkdownToggle(mouseX, mouseY)) { this.drawHoveringText( - Collections.singletonList(GuidebookText.SceneEditorMarkdownPanel.text()), + List.of(GuidebookText.SceneEditorMarkdownPanel.text()), mouseX, mouseY, this.fontRendererObj); } else if (isInsideRightPanelToggle(mouseX, mouseY)) { this.drawHoveringText( - Collections.singletonList(GuidebookText.SceneEditorSettingsPanel.text()), + List.of(GuidebookText.SceneEditorSettingsPanel.text()), mouseX, mouseY, this.fontRendererObj); } else if (isInsideMarkdownFooter(mouseX, mouseY)) { this.drawHoveringText( - Collections.singletonList(GuidebookText.SceneEditorMarkdownWrap.text()), + List.of(GuidebookText.SceneEditorMarkdownWrap.text()), mouseX, mouseY, this.fontRendererObj); @@ -1808,10 +1801,7 @@ private boolean commitPendingEditorsForClose() { && !expandedElementEditor.commitFocusedDraft(Integer.MIN_VALUE, Integer.MIN_VALUE)) { return false; } - if (!commitScreenshotScaleDraft()) { - return false; - } - return true; + return commitScreenshotScaleDraft(); } private void closeEditorNow() { @@ -3312,23 +3302,23 @@ private void syncExpandedElementEditorFromModel() { private void ensureElementPanelStateValid() { UUID selectedElementId = session.getSelectionState() .getSelectedElementId(); - if (selectedElementId != null && !session.getSceneModel() + if (selectedElementId != null && session.getSceneModel() .getElement(selectedElementId) - .isPresent()) { + .isEmpty()) { session.getSelectionState() .setSelectedElementId(null); } - if (expandedElementId != null && !session.getSceneModel() + if (expandedElementId != null && session.getSceneModel() .getElement(expandedElementId) - .isPresent()) { + .isEmpty()) { expandedElementId = null; } if (expandedElementId == null) { expandedElementEditor = null; } - if (contextMenuElementId != null && !session.getSceneModel() + if (contextMenuElementId != null && session.getSceneModel() .getElement(contextMenuElementId) - .isPresent()) { + .isEmpty()) { closeElementContextMenu(); } if (!elementReorderController.isDragging() && session.getSceneModel() @@ -3816,7 +3806,7 @@ private void openElementContextMenu(SceneEditorElementModel element, int mouseX, private void closeElementContextMenu() { contextMenuElementId = null; - contextMenuActions = Collections.emptyList(); + contextMenuActions = List.of(); } private boolean isContextMenuOpen() { @@ -4007,15 +3997,15 @@ private void drawElementReorderIndicator(List layouts) { } int lineY; if (insertionIndex <= 0) { - lineY = layouts.get(0).rowY; + lineY = layouts.getFirst().rowY; } else if (insertionIndex >= layouts.size()) { - ElementRowLayout last = layouts.get(layouts.size() - 1); + ElementRowLayout last = layouts.getLast(); lineY = last.rowY + last.totalHeight; } else { lineY = layouts.get(insertionIndex).rowY; } - int lineX = layouts.get(0).rowX; - int lineWidth = layouts.get(0).rowWidth; + int lineX = layouts.getFirst().rowX; + int lineWidth = layouts.getFirst().rowWidth; drawRect(lineX, lineY - 1, lineX + lineWidth, lineY + 1, 0xFF00CAF2); } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorElementContextMenuController.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorElementContextMenuController.java index c9b19660..8c39a1ea 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorElementContextMenuController.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorElementContextMenuController.java @@ -74,7 +74,7 @@ public boolean pasteAtTop() { SceneEditorElementModel pasted = clipboardElement.duplicate(); session.getSceneModel() .getElements() - .add(0, pasted); + .addFirst(pasted); session.getSelectionState() .setSelectedElementId(pasted.getId()); syncText(); diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorElementPropertyController.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorElementPropertyController.java index f9e38a8c..affb1700 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorElementPropertyController.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorElementPropertyController.java @@ -116,8 +116,8 @@ public boolean setLinePoints(UUID elementId, List points) { } } element.setLinePoints(points); - Vector3f first = points.get(0); - Vector3f last = points.get(points.size() - 1); + Vector3f first = points.getFirst(); + Vector3f last = points.getLast(); element.setPrimaryX(first.x); element.setPrimaryY(first.y); element.setPrimaryZ(first.z); diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorHorizontalScrollbar.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorHorizontalScrollbar.java index 85790d63..894a0c3b 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorHorizontalScrollbar.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorHorizontalScrollbar.java @@ -48,7 +48,7 @@ public static int clamp(int value, int minValue, int maxValue) { if (value < minValue) { return minValue; } - return value > maxValue ? maxValue : value; + return Math.min(value, maxValue); } @Desugar diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorMarkdownPanelState.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorMarkdownPanelState.java index f60aee44..0a0b08ce 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorMarkdownPanelState.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorMarkdownPanelState.java @@ -62,6 +62,6 @@ public static int clamp(int value, int minValue, int maxValue) { if (value < minValue) { return minValue; } - return value > maxValue ? maxValue : value; + return Math.min(value, maxValue); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorMultilineTextArea.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorMultilineTextArea.java index 5b65e321..ad8bfd61 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorMultilineTextArea.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorMultilineTextArea.java @@ -651,8 +651,7 @@ public void draw(boolean validationError) { List lines = layoutCache.getVisualLines(); int lineHeight = getLineHeight(); int drawY = y + PADDING - scrollState.getOffsetPixels(); - for (int i = 0; i < lines.size(); i++) { - SceneEditorMultilineTextLayoutCache.VisualLine line = lines.get(i); + for (SceneEditorMultilineTextLayoutCache.VisualLine line : lines) { if (drawY + lineHeight >= y && drawY < y + clipHeight) { drawExternalHighlightForLine(line, drawY); drawSelectionForLine(line, drawY); @@ -754,12 +753,11 @@ private void drawSelectionForLine(SceneEditorMultilineTextLayoutCache.VisualLine return; } + int max = Math.max(0, highlightStart - line.startIndex()); String beforeSelection = line.text() - .substring(0, Math.max(0, highlightStart - line.startIndex())); + .substring(0, max); String selectedText = line.text() - .substring( - Math.max(0, highlightStart - line.startIndex()), - Math.max(0, Math.min(highlightEnd, line.endIndex()) - line.startIndex())); + .substring(max, Math.max(0, highlightEnd - line.startIndex())); int selectionX = x + PADDING + fontRenderer.getStringWidth(beforeSelection) - horizontalOffsetPixels; int selectionWidth = fontRenderer.getStringWidth(selectedText); if (selectionWidth <= 0 && spansLineBreak) { @@ -787,12 +785,11 @@ private void drawExternalHighlightForLine(SceneEditorMultilineTextLayoutCache.Vi return; } + int max = Math.max(0, highlightStart - line.startIndex()); String beforeHighlight = line.text() - .substring(0, Math.max(0, highlightStart - line.startIndex())); + .substring(0, max); String highlightedText = line.text() - .substring( - Math.max(0, highlightStart - line.startIndex()), - Math.max(0, Math.min(highlightEnd, line.endIndex()) - line.startIndex())); + .substring(max, Math.max(0, highlightEnd - line.startIndex())); int highlightX = x + PADDING + fontRenderer.getStringWidth(beforeHighlight) - horizontalOffsetPixels; int highlightWidth = fontRenderer.getStringWidth(highlightedText); if (highlightWidth <= 0 && spansLineBreak) { @@ -820,12 +817,11 @@ private void drawSyntaxWarningForLine(SceneEditorMultilineTextLayoutCache.Visual return; } + int max = Math.max(0, highlightStart - line.startIndex()); String beforeWarning = line.text() - .substring(0, Math.max(0, highlightStart - line.startIndex())); + .substring(0, max); String warnedText = line.text() - .substring( - Math.max(0, highlightStart - line.startIndex()), - Math.max(0, Math.min(highlightEnd, line.endIndex()) - line.startIndex())); + .substring(max, Math.max(0, highlightEnd - line.startIndex())); int warningX = x + PADDING + fontRenderer.getStringWidth(beforeWarning) - horizontalOffsetPixels; int warningWidth = fontRenderer.getStringWidth(warnedText); if (warningWidth <= 0 && spansLineBreak) { @@ -1027,14 +1023,14 @@ private int clampHorizontalOffset(int requestedOffset) { if (requestedOffset < 0) { return 0; } - return requestedOffset > maxOffset ? maxOffset : requestedOffset; + return Math.min(requestedOffset, maxOffset); } private int clamp(int value, int min, int max) { if (value < min) { return min; } - return value > max ? max : value; + return Math.min(value, max); } private int getContentClipWidth() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorMultilineTextLayoutCache.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorMultilineTextLayoutCache.java index 42ff6213..c2e64cbb 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorMultilineTextLayoutCache.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorMultilineTextLayoutCache.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal.editor.gui; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.client.gui.FontRenderer; @@ -11,7 +10,7 @@ public class SceneEditorMultilineTextLayoutCache { private final List visualLines = new ArrayList<>(); - private List readonlyVisualLines = Collections.emptyList(); + private List readonlyVisualLines = List.of(); private int contentWidthPixels; private int contentHeightPixels; @@ -39,7 +38,7 @@ public void rebuild(String text, FontRenderer fontRenderer, int textWidth, boole visualLines.add(new VisualLine(0, 0, "", false)); } - readonlyVisualLines = Collections.unmodifiableList(new ArrayList<>(visualLines)); + readonlyVisualLines = List.copyOf(new ArrayList<>(visualLines)); contentHeightPixels = visualLines.size() * Math.max(0, lineHeight); } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorNumericFieldController.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorNumericFieldController.java index 0c60d20b..157316d5 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorNumericFieldController.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorNumericFieldController.java @@ -153,10 +153,7 @@ private float clamp(float nextValue) { if (nextValue < minValue) { return minValue; } - if (nextValue > maxValue) { - return maxValue; - } - return nextValue; + return Math.min(nextValue, maxValue); } private String formatValue(float nextValue) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorPopupLayout.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorPopupLayout.java index 9b38f544..58d54c5f 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorPopupLayout.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorPopupLayout.java @@ -29,6 +29,6 @@ public static int clamp(int value, int minValue, int maxValue) { if (value < minValue) { return minValue; } - return value > maxValue ? maxValue : value; + return Math.min(value, maxValue); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorPreviewFrameOverlayLayout.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorPreviewFrameOverlayLayout.java index 7482e1e0..dccb40ca 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorPreviewFrameOverlayLayout.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorPreviewFrameOverlayLayout.java @@ -3,7 +3,7 @@ import com.github.bsideup.jabel.Desugar; import com.hfstudio.guidenh.guide.document.LytRect; -public final class SceneEditorPreviewFrameOverlayLayout { +public class SceneEditorPreviewFrameOverlayLayout { public static final int LABEL_PADDING = 4; public static final int LABEL_ABOVE_OFFSET = 10; diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorScreenLayout.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorScreenLayout.java index 99a88383..5217ce8c 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorScreenLayout.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorScreenLayout.java @@ -58,22 +58,22 @@ public static Layout calculate(int screenWidth, int screenHeight, boolean markdo LytRect previewRender = new LytRect(0, 0, safeWidth, safeHeight); LytRect previewInteraction = new LytRect( leftPanel.right(), - Math.min(safeHeight, TOOLBAR_SAFE_BOTTOM), + TOOLBAR_SAFE_BOTTOM, Math.max(0, rightPanel.x() - leftPanel.right()), - Math.max(0, safeHeight - Math.min(safeHeight, TOOLBAR_SAFE_BOTTOM))); + Math.max(0, safeHeight - TOOLBAR_SAFE_BOTTOM)); int toggleY = Math.max(0, safeHeight / 2 - MARKDOWN_TOGGLE_HEIGHT / 2); LytRect markdownToggle = new LytRect( Math.max(0, leftPanel.right() - 1), toggleY, MARKDOWN_TOGGLE_WIDTH, - Math.min(MARKDOWN_TOGGLE_HEIGHT, safeHeight)); + MARKDOWN_TOGGLE_HEIGHT); LytRect rightToggle = new LytRect( Math.max(0, rightPanel.x() - MARKDOWN_TOGGLE_WIDTH + 1), toggleY, MARKDOWN_TOGGLE_WIDTH, - Math.min(MARKDOWN_TOGGLE_HEIGHT, safeHeight)); + MARKDOWN_TOGGLE_HEIGHT); LytRect markdownFooter = markdownExpanded ? new LytRect( @@ -94,9 +94,9 @@ public static Layout calculate(int screenWidth, int screenHeight, boolean markdo LytRect markdownResizeHandle = markdownExpanded ? new LytRect( Math.max(0, leftPanel.right() - MARKDOWN_RESIZE_HANDLE_WIDTH / 2), - Math.min(safeHeight, TOOLBAR_SAFE_BOTTOM), + TOOLBAR_SAFE_BOTTOM, MARKDOWN_RESIZE_HANDLE_WIDTH, - Math.max(0, safeHeight - Math.min(safeHeight, TOOLBAR_SAFE_BOTTOM))) + Math.max(0, safeHeight - TOOLBAR_SAFE_BOTTOM)) : LytRect.empty(); LytRect rightContent = new LytRect( @@ -122,7 +122,7 @@ public static int clamp(int value, int minValue, int maxValue) { if (value < minValue) { return minValue; } - return value > maxValue ? maxValue : value; + return Math.min(value, maxValue); } @Desugar diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorTextSelectionModel.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorTextSelectionModel.java index 7e307427..57f0e326 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorTextSelectionModel.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorTextSelectionModel.java @@ -171,9 +171,6 @@ private int clampIndex(int index) { if (index < 0) { return 0; } - if (index > text.length()) { - return text.length(); - } - return index; + return Math.min(index, text.length()); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorTextSyncController.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorTextSyncController.java index 40249113..2a983632 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorTextSyncController.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorTextSyncController.java @@ -65,25 +65,25 @@ public boolean commitDraftText() { public boolean commitDraftText(@Nullable String mergeKey, @Nullable SceneEditorUndoUiState uiState) { SceneEditorMarkdownParseResult result = codec.parse(session.getRawText()); - if (result instanceof SceneEditorMarkdownParseResult.Success success) { + if (result instanceof SceneEditorMarkdownParseResult.Success(SceneEditorSceneModel model)) { ensureHistoryInitialized(); - String synchronizedText = codec.serialize(success.model()); - applyParsedModel(success.model(), synchronizedText, true); + String synchronizedText = codec.serialize(model); + applyParsedModel(model, synchronizedText, true); recordAppliedSnapshot(mergeKey, uiState, false); rememberProcessedDraftState(); return true; } - if (result instanceof SceneEditorMarkdownParseResult.SyntaxError syntaxError) { + if (result instanceof SceneEditorMarkdownParseResult.SyntaxError(String message)) { validationKind = ValidationKind.SYNTAX; - validationMessage = syntaxError.message(); + validationMessage = message; rebuildRangeIndexes(); recordCurrentSnapshot(mergeKey, uiState, false); rememberProcessedDraftState(); return false; } - if (result instanceof SceneEditorMarkdownParseResult.Unsupported unsupported) { + if (result instanceof SceneEditorMarkdownParseResult.Unsupported(String message)) { validationKind = ValidationKind.UNSUPPORTED; - validationMessage = unsupported.message(); + validationMessage = message; rebuildRangeIndexes(); recordCurrentSnapshot(mergeKey, uiState, false); rememberProcessedDraftState(); @@ -107,8 +107,8 @@ public LiveApplyResult applyLiveDraftText() { } SceneEditorMarkdownParseResult result = codec.parse(draftText); - if (result instanceof SceneEditorMarkdownParseResult.Success success) { - String synchronizedText = codec.serialize(success.model()); + if (result instanceof SceneEditorMarkdownParseResult.Success(SceneEditorSceneModel model)) { + String synchronizedText = codec.serialize(model); if (synchronizedText.equals(session.getLastAppliedText())) { validationKind = ValidationKind.NONE; validationMessage = null; @@ -116,20 +116,20 @@ public LiveApplyResult applyLiveDraftText() { rememberProcessedDraftState(); return LiveApplyResult.NO_CHANGE; } - applyParsedModel(success.model(), synchronizedText, false); + applyParsedModel(model, synchronizedText, false); rememberProcessedDraftState(); return LiveApplyResult.APPLIED; } - if (result instanceof SceneEditorMarkdownParseResult.SyntaxError syntaxError) { + if (result instanceof SceneEditorMarkdownParseResult.SyntaxError(String message)) { validationKind = ValidationKind.SYNTAX; - validationMessage = syntaxError.message(); + validationMessage = message; rebuildRangeIndexes(); rememberProcessedDraftState(); return LiveApplyResult.INVALID; } - if (result instanceof SceneEditorMarkdownParseResult.Unsupported unsupported) { + if (result instanceof SceneEditorMarkdownParseResult.Unsupported(String message)) { validationKind = ValidationKind.UNSUPPORTED; - validationMessage = unsupported.message(); + validationMessage = message; rebuildRangeIndexes(); rememberProcessedDraftState(); return LiveApplyResult.INVALID; diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorUndoHistory.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorUndoHistory.java index 50081b8e..c9396d02 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorUndoHistory.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorUndoHistory.java @@ -94,13 +94,13 @@ public SceneEditorUndoSnapshot redo() { private void discardRedoEntries() { while (entries.size() > currentIndex + 1) { - entries.remove(entries.size() - 1); + entries.removeLast(); } } private void trimToMaxEntries() { while (entries.size() > maxEntries) { - entries.remove(0); + entries.removeFirst(); currentIndex--; } syncCurrentMergeState(); diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorUndoUiState.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorUndoUiState.java index fa10dad6..8a8ae4c2 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorUndoUiState.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/gui/SceneEditorUndoUiState.java @@ -1,13 +1,12 @@ package com.hfstudio.guidenh.guide.internal.editor.gui; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; import java.util.Optional; public class SceneEditorUndoUiState { - public static final SceneEditorUndoUiState EMPTY = new SceneEditorUndoUiState(Collections.emptyMap()); + public static final SceneEditorUndoUiState EMPTY = new SceneEditorUndoUiState(Map.of()); private final Map fieldStates; @@ -50,7 +49,7 @@ public SceneEditorUndoUiState build() { if (fieldStates.isEmpty()) { return empty(); } - return new SceneEditorUndoUiState(Collections.unmodifiableMap(new LinkedHashMap<>(fieldStates))); + return new SceneEditorUndoUiState(Map.copyOf(new LinkedHashMap<>(fieldStates))); } } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorAction.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorAction.java index 14c25e38..aa03c375 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorAction.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorAction.java @@ -131,236 +131,121 @@ public String getTooltip() { } public GuideIconButton.Role toRole() { - switch (this) { - case HEADING_1: - return GuideIconButton.Role.GUIDE_EDITOR_HEADING_1; - case HEADING_2: - return GuideIconButton.Role.GUIDE_EDITOR_HEADING_2; - case HEADING_3: - return GuideIconButton.Role.GUIDE_EDITOR_HEADING_3; - case HEADING_4: - return GuideIconButton.Role.GUIDE_EDITOR_HEADING_4; - case HEADING_5: - return GuideIconButton.Role.GUIDE_EDITOR_HEADING_5; - case HEADING_6: - return GuideIconButton.Role.GUIDE_EDITOR_HEADING_6; - case BOLD: - return GuideIconButton.Role.GUIDE_EDITOR_BOLD; - case ITALIC: - return GuideIconButton.Role.GUIDE_EDITOR_ITALIC; - case STRIKETHROUGH: - return GuideIconButton.Role.GUIDE_EDITOR_STRIKETHROUGH; - case UNDERLINE: - return GuideIconButton.Role.GUIDE_EDITOR_UNDERLINE; - case KBD: - return GuideIconButton.Role.GUIDE_EDITOR_KEYBOARD; - case SUBSCRIPT: - return GuideIconButton.Role.GUIDE_EDITOR_SUBSCRIPT; - case SUPERSCRIPT: - return GuideIconButton.Role.GUIDE_EDITOR_SUPERSCRIPT; - case FOOTNOTE: - return GuideIconButton.Role.GUIDE_EDITOR_FOOTNOTE; - case TOOLTIP: - return GuideIconButton.Role.GUIDE_EDITOR_TOOLTIP; - case ITEM_IMAGE: - return GuideIconButton.Role.GUIDE_EDITOR_ITEM_IMAGE; - case BLOCK_IMAGE: - return GuideIconButton.Role.GUIDE_EDITOR_BLOCK_IMAGE; - case ITEM_LINK: - return GuideIconButton.Role.GUIDE_EDITOR_ITEM_LINK; - case LATEX: - return GuideIconButton.Role.GUIDE_EDITOR_LATEX; - case CSV_TABLE: - return GuideIconButton.Role.GUIDE_EDITOR_CSV_TABLE; - case COMMAND_LINK: - return GuideIconButton.Role.GUIDE_EDITOR_COMMAND_LINK; - case RECIPE: - return GuideIconButton.Role.GUIDE_EDITOR_RECIPE; - case RECIPE_FOR: - return GuideIconButton.Role.GUIDE_EDITOR_RECIPE_FOR; - case RECIPES_FOR: - return GuideIconButton.Role.GUIDE_EDITOR_RECIPES_FOR; - case FLOATING_IMAGE: - return GuideIconButton.Role.GUIDE_EDITOR_FLOATING_IMAGE; - case MERMAID: - return GuideIconButton.Role.GUIDE_EDITOR_MERMAID; - case FILE_TREE: - return GuideIconButton.Role.GUIDE_EDITOR_FILE_TREE; - case SUB_PAGES: - return GuideIconButton.Role.GUIDE_EDITOR_SUB_PAGES; - case CATEGORY: - return GuideIconButton.Role.GUIDE_EDITOR_CATEGORY; - case FOOTNOTE_LIST: - return GuideIconButton.Role.GUIDE_EDITOR_FOOTNOTE_LIST; - case ROW: - return GuideIconButton.Role.GUIDE_EDITOR_ROW; - case COLUMN: - return GuideIconButton.Role.GUIDE_EDITOR_COLUMN; - case DIV: - return GuideIconButton.Role.GUIDE_EDITOR_DIV; - case ITEM_GRID: - return GuideIconButton.Role.GUIDE_EDITOR_ITEM_GRID; - case CSV_TABLE_IMPORT: - return GuideIconButton.Role.GUIDE_EDITOR_CSV_TABLE_IMPORT; - case ANCHOR: - return GuideIconButton.Role.GUIDE_EDITOR_ANCHOR; - case COLUMN_CHART: - return GuideIconButton.Role.GUIDE_EDITOR_COLUMN_CHART; - case BAR_CHART: - return GuideIconButton.Role.GUIDE_EDITOR_BAR_CHART; - case LINE_CHART: - return GuideIconButton.Role.GUIDE_EDITOR_LINE_CHART; - case PIE_CHART: - return GuideIconButton.Role.GUIDE_EDITOR_PIE_CHART; - case SCATTER_CHART: - return GuideIconButton.Role.GUIDE_EDITOR_SCATTER_CHART; - case CHART_SERIES: - return GuideIconButton.Role.GUIDE_EDITOR_CHART_SERIES; - case CHART_LINE_SERIES: - return GuideIconButton.Role.GUIDE_EDITOR_CHART_LINE_SERIES; - case CHART_SLICE: - return GuideIconButton.Role.GUIDE_EDITOR_CHART_SLICE; - case CHART_PIE_INSET: - return GuideIconButton.Role.GUIDE_EDITOR_CHART_PIE_INSET; - case FUNCTION_GRAPH: - return GuideIconButton.Role.GUIDE_EDITOR_FUNCTION_GRAPH; - case FUNCTION: - return GuideIconButton.Role.GUIDE_EDITOR_FUNCTION; - case FUNCTION_PLOT: - return GuideIconButton.Role.GUIDE_EDITOR_FUNCTION_PLOT; - case FUNCTION_POINT: - return GuideIconButton.Role.GUIDE_EDITOR_FUNCTION_POINT; - case FUNCTION_GRAPH_FENCE: - return GuideIconButton.Role.GUIDE_EDITOR_FUNCTION_GRAPH_FENCE; - case STRUCTURE: - return GuideIconButton.Role.GUIDE_EDITOR_STRUCTURE; - case GAME_SCENE: - return GuideIconButton.Role.GUIDE_EDITOR_GAME_SCENE; - case SCENE_BLOCK: - return GuideIconButton.Role.GUIDE_EDITOR_SCENE_BLOCK; - case SCENE_ENTITY: - return GuideIconButton.Role.GUIDE_EDITOR_SCENE_ENTITY; - case ISOMETRIC_CAMERA: - return GuideIconButton.Role.GUIDE_EDITOR_ISOMETRIC_CAMERA; - case BOX_ANNOTATION: - return GuideIconButton.Role.GUIDE_EDITOR_BOX_ANNOTATION; - case BLOCK_ANNOTATION: - return GuideIconButton.Role.GUIDE_EDITOR_BLOCK_ANNOTATION; - case LINE_ANNOTATION: - return GuideIconButton.Role.GUIDE_EDITOR_LINE_ANNOTATION; - case DIAMOND_ANNOTATION: - return GuideIconButton.Role.GUIDE_EDITOR_DIAMOND_ANNOTATION; - case TEXT_ANNOTATION: - return GuideIconButton.Role.GUIDE_EDITOR_TEXT_ANNOTATION; - case BLOCK_ANNOTATION_TEMPLATE: - return GuideIconButton.Role.GUIDE_EDITOR_BLOCK_ANNOTATION_TEMPLATE; - case IMPORT_STRUCTURE: - return GuideIconButton.Role.GUIDE_EDITOR_IMPORT_STRUCTURE; - case IMPORT_STRUCTURE_LIB: - return GuideIconButton.Role.GUIDE_EDITOR_IMPORT_STRUCTURE_LIB; - case IMPORT_PONDER: - return GuideIconButton.Role.GUIDE_EDITOR_IMPORT_PONDER; - case PLACE_BLOCK: - return GuideIconButton.Role.GUIDE_EDITOR_PLACE_BLOCK; - case REPLACE_BLOCK: - return GuideIconButton.Role.GUIDE_EDITOR_REPLACE_BLOCK; - case REMOVE_BLOCKS: - return GuideIconButton.Role.GUIDE_EDITOR_REMOVE_BLOCKS; - case QUEST_LINK: - return GuideIconButton.Role.GUIDE_EDITOR_QUEST_LINK; - case QUEST_CARD: - return GuideIconButton.Role.GUIDE_EDITOR_QUEST_CARD; - case QUEST_IDS: - return GuideIconButton.Role.GUIDE_EDITOR_QUEST_IDS; - case NAV_POSITION: - return GuideIconButton.Role.GUIDE_EDITOR_NAV_POSITION; - case NAV_ICON: - return GuideIconButton.Role.GUIDE_EDITOR_NAV_ICON; - case NAV_ICON_TEXTURE: - return GuideIconButton.Role.GUIDE_EDITOR_NAV_ICON_TEXTURE; - case NAV_ICONS: - return GuideIconButton.Role.GUIDE_EDITOR_NAV_ICONS; - case NAV_ICON_TEXTURES: - return GuideIconButton.Role.GUIDE_EDITOR_NAV_ICON_TEXTURES; - case NAV_REQUIRED_MODS: - return GuideIconButton.Role.GUIDE_EDITOR_NAV_REQUIRED_MODS; - case PAGE_CATEGORIES: - return GuideIconButton.Role.GUIDE_EDITOR_PAGE_CATEGORIES; - case PAGE_ITEM_IDS: - return GuideIconButton.Role.GUIDE_EDITOR_PAGE_ITEM_IDS; - case PAGE_ORE_IDS: - return GuideIconButton.Role.GUIDE_EDITOR_PAGE_ORE_IDS; - case PAGE_METADATA: - return GuideIconButton.Role.GUIDE_EDITOR_PAGE_METADATA; - case QUOTE_CALLOUT: - return GuideIconButton.Role.GUIDE_EDITOR_QUOTE_CALLOUT; - case QUOTE_ICON_TEXT: - return GuideIconButton.Role.GUIDE_EDITOR_QUOTE_ICON_TEXT; - case QUOTE_ICON_ITEM: - return GuideIconButton.Role.GUIDE_EDITOR_QUOTE_ICON_ITEM; - case QUOTE_ICON_PNG: - return GuideIconButton.Role.GUIDE_EDITOR_QUOTE_ICON_PNG; - case LATEX_SHORTHAND: - return GuideIconButton.Role.GUIDE_EDITOR_LATEX_SHORTHAND; - case LINK: - return GuideIconButton.Role.GUIDE_EDITOR_LINK; - case IMAGE: - return GuideIconButton.Role.GUIDE_EDITOR_IMAGE; - case INLINE_CODE: - return GuideIconButton.Role.GUIDE_EDITOR_INLINE_CODE; - case CODE_BLOCK: - return GuideIconButton.Role.GUIDE_EDITOR_CODE_BLOCK; - case BLOCKQUOTE: - return GuideIconButton.Role.GUIDE_EDITOR_QUOTE; - case UNORDERED_LIST: - return GuideIconButton.Role.GUIDE_EDITOR_BULLET_LIST; - case ORDERED_LIST: - return GuideIconButton.Role.GUIDE_EDITOR_NUMBERED_LIST; - case TASK_LIST: - return GuideIconButton.Role.GUIDE_EDITOR_TASK_LIST; - case TABLE: - return GuideIconButton.Role.GUIDE_EDITOR_TABLE; - case ALERT_NOTE: - return GuideIconButton.Role.GUIDE_EDITOR_ALERT_NOTE; - case ALERT_TIP: - return GuideIconButton.Role.GUIDE_EDITOR_ALERT_TIP; - case ALERT_IMPORTANT: - return GuideIconButton.Role.GUIDE_EDITOR_ALERT_IMPORTANT; - case ALERT_WARNING: - return GuideIconButton.Role.GUIDE_EDITOR_ALERT_WARNING; - case ALERT_CAUTION: - return GuideIconButton.Role.GUIDE_EDITOR_ALERT_CAUTION; - case DETAILS: - return GuideIconButton.Role.GUIDE_EDITOR_DETAILS; - case KEY_BIND: - return GuideIconButton.Role.GUIDE_EDITOR_KEY_BIND; - case PLAYER_NAME: - return GuideIconButton.Role.GUIDE_EDITOR_PLAYER_NAME; - case COLOR: - return GuideIconButton.Role.GUIDE_EDITOR_COLOR; - case BREAK: - return GuideIconButton.Role.GUIDE_EDITOR_BREAK; - case REFERENCE_LINK: - return GuideIconButton.Role.GUIDE_EDITOR_REFERENCE_LINK; - case REFERENCE_IMAGE: - return GuideIconButton.Role.GUIDE_EDITOR_REFERENCE_IMAGE; - case THEMATIC_BREAK: - return GuideIconButton.Role.GUIDE_EDITOR_RULE; - case UNDO: - return GuideIconButton.Role.GUIDE_EDITOR_UNDO; - case REDO: - return GuideIconButton.Role.GUIDE_EDITOR_REDO; - case CUT: - return GuideIconButton.Role.GUIDE_EDITOR_CUT; - case COPY: - return GuideIconButton.Role.GUIDE_EDITOR_COPY; - case PASTE: - return GuideIconButton.Role.GUIDE_EDITOR_PASTE; - case SELECT_ALL: - return GuideIconButton.Role.GUIDE_EDITOR_SELECT_ALL; - case TOGGLE_ADVANCED: - default: - return GuideIconButton.Role.GUIDE_EDITOR_ADVANCED_TOGGLE; - } + return switch (this) { + case HEADING_1 -> GuideIconButton.Role.GUIDE_EDITOR_HEADING_1; + case HEADING_2 -> GuideIconButton.Role.GUIDE_EDITOR_HEADING_2; + case HEADING_3 -> GuideIconButton.Role.GUIDE_EDITOR_HEADING_3; + case HEADING_4 -> GuideIconButton.Role.GUIDE_EDITOR_HEADING_4; + case HEADING_5 -> GuideIconButton.Role.GUIDE_EDITOR_HEADING_5; + case HEADING_6 -> GuideIconButton.Role.GUIDE_EDITOR_HEADING_6; + case BOLD -> GuideIconButton.Role.GUIDE_EDITOR_BOLD; + case ITALIC -> GuideIconButton.Role.GUIDE_EDITOR_ITALIC; + case STRIKETHROUGH -> GuideIconButton.Role.GUIDE_EDITOR_STRIKETHROUGH; + case UNDERLINE -> GuideIconButton.Role.GUIDE_EDITOR_UNDERLINE; + case KBD -> GuideIconButton.Role.GUIDE_EDITOR_KEYBOARD; + case SUBSCRIPT -> GuideIconButton.Role.GUIDE_EDITOR_SUBSCRIPT; + case SUPERSCRIPT -> GuideIconButton.Role.GUIDE_EDITOR_SUPERSCRIPT; + case FOOTNOTE -> GuideIconButton.Role.GUIDE_EDITOR_FOOTNOTE; + case TOOLTIP -> GuideIconButton.Role.GUIDE_EDITOR_TOOLTIP; + case ITEM_IMAGE -> GuideIconButton.Role.GUIDE_EDITOR_ITEM_IMAGE; + case BLOCK_IMAGE -> GuideIconButton.Role.GUIDE_EDITOR_BLOCK_IMAGE; + case ITEM_LINK -> GuideIconButton.Role.GUIDE_EDITOR_ITEM_LINK; + case LATEX -> GuideIconButton.Role.GUIDE_EDITOR_LATEX; + case CSV_TABLE -> GuideIconButton.Role.GUIDE_EDITOR_CSV_TABLE; + case COMMAND_LINK -> GuideIconButton.Role.GUIDE_EDITOR_COMMAND_LINK; + case RECIPE -> GuideIconButton.Role.GUIDE_EDITOR_RECIPE; + case RECIPE_FOR -> GuideIconButton.Role.GUIDE_EDITOR_RECIPE_FOR; + case RECIPES_FOR -> GuideIconButton.Role.GUIDE_EDITOR_RECIPES_FOR; + case FLOATING_IMAGE -> GuideIconButton.Role.GUIDE_EDITOR_FLOATING_IMAGE; + case MERMAID -> GuideIconButton.Role.GUIDE_EDITOR_MERMAID; + case FILE_TREE -> GuideIconButton.Role.GUIDE_EDITOR_FILE_TREE; + case SUB_PAGES -> GuideIconButton.Role.GUIDE_EDITOR_SUB_PAGES; + case CATEGORY -> GuideIconButton.Role.GUIDE_EDITOR_CATEGORY; + case FOOTNOTE_LIST -> GuideIconButton.Role.GUIDE_EDITOR_FOOTNOTE_LIST; + case ROW -> GuideIconButton.Role.GUIDE_EDITOR_ROW; + case COLUMN -> GuideIconButton.Role.GUIDE_EDITOR_COLUMN; + case DIV -> GuideIconButton.Role.GUIDE_EDITOR_DIV; + case ITEM_GRID -> GuideIconButton.Role.GUIDE_EDITOR_ITEM_GRID; + case CSV_TABLE_IMPORT -> GuideIconButton.Role.GUIDE_EDITOR_CSV_TABLE_IMPORT; + case ANCHOR -> GuideIconButton.Role.GUIDE_EDITOR_ANCHOR; + case COLUMN_CHART -> GuideIconButton.Role.GUIDE_EDITOR_COLUMN_CHART; + case BAR_CHART -> GuideIconButton.Role.GUIDE_EDITOR_BAR_CHART; + case LINE_CHART -> GuideIconButton.Role.GUIDE_EDITOR_LINE_CHART; + case PIE_CHART -> GuideIconButton.Role.GUIDE_EDITOR_PIE_CHART; + case SCATTER_CHART -> GuideIconButton.Role.GUIDE_EDITOR_SCATTER_CHART; + case CHART_SERIES -> GuideIconButton.Role.GUIDE_EDITOR_CHART_SERIES; + case CHART_LINE_SERIES -> GuideIconButton.Role.GUIDE_EDITOR_CHART_LINE_SERIES; + case CHART_SLICE -> GuideIconButton.Role.GUIDE_EDITOR_CHART_SLICE; + case CHART_PIE_INSET -> GuideIconButton.Role.GUIDE_EDITOR_CHART_PIE_INSET; + case FUNCTION_GRAPH -> GuideIconButton.Role.GUIDE_EDITOR_FUNCTION_GRAPH; + case FUNCTION -> GuideIconButton.Role.GUIDE_EDITOR_FUNCTION; + case FUNCTION_PLOT -> GuideIconButton.Role.GUIDE_EDITOR_FUNCTION_PLOT; + case FUNCTION_POINT -> GuideIconButton.Role.GUIDE_EDITOR_FUNCTION_POINT; + case FUNCTION_GRAPH_FENCE -> GuideIconButton.Role.GUIDE_EDITOR_FUNCTION_GRAPH_FENCE; + case STRUCTURE -> GuideIconButton.Role.GUIDE_EDITOR_STRUCTURE; + case GAME_SCENE -> GuideIconButton.Role.GUIDE_EDITOR_GAME_SCENE; + case SCENE_BLOCK -> GuideIconButton.Role.GUIDE_EDITOR_SCENE_BLOCK; + case SCENE_ENTITY -> GuideIconButton.Role.GUIDE_EDITOR_SCENE_ENTITY; + case ISOMETRIC_CAMERA -> GuideIconButton.Role.GUIDE_EDITOR_ISOMETRIC_CAMERA; + case BOX_ANNOTATION -> GuideIconButton.Role.GUIDE_EDITOR_BOX_ANNOTATION; + case BLOCK_ANNOTATION -> GuideIconButton.Role.GUIDE_EDITOR_BLOCK_ANNOTATION; + case LINE_ANNOTATION -> GuideIconButton.Role.GUIDE_EDITOR_LINE_ANNOTATION; + case DIAMOND_ANNOTATION -> GuideIconButton.Role.GUIDE_EDITOR_DIAMOND_ANNOTATION; + case TEXT_ANNOTATION -> GuideIconButton.Role.GUIDE_EDITOR_TEXT_ANNOTATION; + case BLOCK_ANNOTATION_TEMPLATE -> GuideIconButton.Role.GUIDE_EDITOR_BLOCK_ANNOTATION_TEMPLATE; + case IMPORT_STRUCTURE -> GuideIconButton.Role.GUIDE_EDITOR_IMPORT_STRUCTURE; + case IMPORT_STRUCTURE_LIB -> GuideIconButton.Role.GUIDE_EDITOR_IMPORT_STRUCTURE_LIB; + case IMPORT_PONDER -> GuideIconButton.Role.GUIDE_EDITOR_IMPORT_PONDER; + case PLACE_BLOCK -> GuideIconButton.Role.GUIDE_EDITOR_PLACE_BLOCK; + case REPLACE_BLOCK -> GuideIconButton.Role.GUIDE_EDITOR_REPLACE_BLOCK; + case REMOVE_BLOCKS -> GuideIconButton.Role.GUIDE_EDITOR_REMOVE_BLOCKS; + case QUEST_LINK -> GuideIconButton.Role.GUIDE_EDITOR_QUEST_LINK; + case QUEST_CARD -> GuideIconButton.Role.GUIDE_EDITOR_QUEST_CARD; + case QUEST_IDS -> GuideIconButton.Role.GUIDE_EDITOR_QUEST_IDS; + case NAV_POSITION -> GuideIconButton.Role.GUIDE_EDITOR_NAV_POSITION; + case NAV_ICON -> GuideIconButton.Role.GUIDE_EDITOR_NAV_ICON; + case NAV_ICON_TEXTURE -> GuideIconButton.Role.GUIDE_EDITOR_NAV_ICON_TEXTURE; + case NAV_ICONS -> GuideIconButton.Role.GUIDE_EDITOR_NAV_ICONS; + case NAV_ICON_TEXTURES -> GuideIconButton.Role.GUIDE_EDITOR_NAV_ICON_TEXTURES; + case NAV_REQUIRED_MODS -> GuideIconButton.Role.GUIDE_EDITOR_NAV_REQUIRED_MODS; + case PAGE_CATEGORIES -> GuideIconButton.Role.GUIDE_EDITOR_PAGE_CATEGORIES; + case PAGE_ITEM_IDS -> GuideIconButton.Role.GUIDE_EDITOR_PAGE_ITEM_IDS; + case PAGE_ORE_IDS -> GuideIconButton.Role.GUIDE_EDITOR_PAGE_ORE_IDS; + case PAGE_METADATA -> GuideIconButton.Role.GUIDE_EDITOR_PAGE_METADATA; + case QUOTE_CALLOUT -> GuideIconButton.Role.GUIDE_EDITOR_QUOTE_CALLOUT; + case QUOTE_ICON_TEXT -> GuideIconButton.Role.GUIDE_EDITOR_QUOTE_ICON_TEXT; + case QUOTE_ICON_ITEM -> GuideIconButton.Role.GUIDE_EDITOR_QUOTE_ICON_ITEM; + case QUOTE_ICON_PNG -> GuideIconButton.Role.GUIDE_EDITOR_QUOTE_ICON_PNG; + case LATEX_SHORTHAND -> GuideIconButton.Role.GUIDE_EDITOR_LATEX_SHORTHAND; + case LINK -> GuideIconButton.Role.GUIDE_EDITOR_LINK; + case IMAGE -> GuideIconButton.Role.GUIDE_EDITOR_IMAGE; + case INLINE_CODE -> GuideIconButton.Role.GUIDE_EDITOR_INLINE_CODE; + case CODE_BLOCK -> GuideIconButton.Role.GUIDE_EDITOR_CODE_BLOCK; + case BLOCKQUOTE -> GuideIconButton.Role.GUIDE_EDITOR_QUOTE; + case UNORDERED_LIST -> GuideIconButton.Role.GUIDE_EDITOR_BULLET_LIST; + case ORDERED_LIST -> GuideIconButton.Role.GUIDE_EDITOR_NUMBERED_LIST; + case TASK_LIST -> GuideIconButton.Role.GUIDE_EDITOR_TASK_LIST; + case TABLE -> GuideIconButton.Role.GUIDE_EDITOR_TABLE; + case ALERT_NOTE -> GuideIconButton.Role.GUIDE_EDITOR_ALERT_NOTE; + case ALERT_TIP -> GuideIconButton.Role.GUIDE_EDITOR_ALERT_TIP; + case ALERT_IMPORTANT -> GuideIconButton.Role.GUIDE_EDITOR_ALERT_IMPORTANT; + case ALERT_WARNING -> GuideIconButton.Role.GUIDE_EDITOR_ALERT_WARNING; + case ALERT_CAUTION -> GuideIconButton.Role.GUIDE_EDITOR_ALERT_CAUTION; + case DETAILS -> GuideIconButton.Role.GUIDE_EDITOR_DETAILS; + case KEY_BIND -> GuideIconButton.Role.GUIDE_EDITOR_KEY_BIND; + case PLAYER_NAME -> GuideIconButton.Role.GUIDE_EDITOR_PLAYER_NAME; + case COLOR -> GuideIconButton.Role.GUIDE_EDITOR_COLOR; + case BREAK -> GuideIconButton.Role.GUIDE_EDITOR_BREAK; + case REFERENCE_LINK -> GuideIconButton.Role.GUIDE_EDITOR_REFERENCE_LINK; + case REFERENCE_IMAGE -> GuideIconButton.Role.GUIDE_EDITOR_REFERENCE_IMAGE; + case THEMATIC_BREAK -> GuideIconButton.Role.GUIDE_EDITOR_RULE; + case UNDO -> GuideIconButton.Role.GUIDE_EDITOR_UNDO; + case REDO -> GuideIconButton.Role.GUIDE_EDITOR_REDO; + case CUT -> GuideIconButton.Role.GUIDE_EDITOR_CUT; + case COPY -> GuideIconButton.Role.GUIDE_EDITOR_COPY; + case PASTE -> GuideIconButton.Role.GUIDE_EDITOR_PASTE; + case SELECT_ALL -> GuideIconButton.Role.GUIDE_EDITOR_SELECT_ALL; + default -> GuideIconButton.Role.GUIDE_EDITOR_ADVANCED_TOGGLE; + }; } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorConflictPrompt.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorConflictPrompt.java index 69c4cf03..fb353f9b 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorConflictPrompt.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorConflictPrompt.java @@ -7,7 +7,7 @@ import com.hfstudio.guidenh.guide.internal.GuidebookText; -public final class GuideScreenEditorConflictPrompt extends GuiScreen { +public class GuideScreenEditorConflictPrompt extends GuiScreen { public interface Callback { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorContextMenu.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorContextMenu.java index 882a5584..cf5eabab 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorContextMenu.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorContextMenu.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal.editor.guide; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.client.Minecraft; @@ -16,7 +15,7 @@ import com.hfstudio.guidenh.guide.internal.screen.GuideIconButton; import com.hfstudio.guidenh.guide.internal.util.DisplayScale; -public final class GuideScreenEditorContextMenu { +public class GuideScreenEditorContextMenu { public static final int ITEM_HEIGHT = 14; private static final int PADDING_X = 6; @@ -55,16 +54,16 @@ private Entry(String label, @Nullable GuideScreenEditorAction action, ListemptyList(), false); + return new Entry(action.getTooltip(), action, List.of(), false); } public static Entry submenu(String label, List children) { - List safeChildren = children != null ? new ArrayList<>(children) : new ArrayList(); - return new Entry(label, null, Collections.unmodifiableList(safeChildren), false); + List safeChildren = children != null ? new ArrayList<>(children) : new ArrayList<>(); + return new Entry(label, null, List.copyOf(safeChildren), false); } public static Entry separator() { - return new Entry("", null, Collections.emptyList(), true); + return new Entry("", null, List.of(), true); } public String getLabel() { @@ -101,8 +100,7 @@ public boolean hasChildren() { private int activePaneIndex = -1; public GuideScreenEditorContextMenu(List entries) { - this.entries = entries != null ? Collections.unmodifiableList(new ArrayList<>(entries)) - : Collections.emptyList(); + this.entries = entries != null ? List.copyOf(new ArrayList<>(entries)) : List.of(); } public boolean isOpen() { @@ -125,7 +123,7 @@ public void setViewport(int viewportWidth, int viewportHeight, FontRenderer font if (!open || panes.isEmpty()) { return; } - MenuPane rootPane = panes.get(0); + MenuPane rootPane = panes.getFirst(); rootPane.width = computeMenuWidth(entries, fontRenderer); rootPane.height = clampMenuHeight(computeMenuContentHeight(entries), viewportHeight); rootPane.scrollY = clampScroll(rootPane.scrollY, rootPane.entries, rootPane.height); @@ -212,7 +210,7 @@ public void update(int mouseX, int mouseY, int viewportWidth, int viewportHeight int paneIndex = findDeepestPaneIndex(mouseX, mouseY); if (paneIndex < 0) { activePaneIndex = -1; - panes.get(0).hoveredIndex = -1; + panes.getFirst().hoveredIndex = -1; trimPanesAfter(0); return; } @@ -300,7 +298,7 @@ private int clampToViewportY(int y, int height, int viewportHeight) { private void trimPanesAfter(int paneIndex) { while (panes.size() > paneIndex + 1) { - panes.remove(panes.size() - 1); + panes.removeLast(); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorFileStore.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorFileStore.java index 716d7e60..950552d5 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorFileStore.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorFileStore.java @@ -17,7 +17,7 @@ import com.hfstudio.guidenh.guide.internal.datadriven.GuidePageResourceSelector; import com.hfstudio.guidenh.guide.internal.util.LangUtil; -public final class GuideScreenEditorFileStore { +public class GuideScreenEditorFileStore { private final Path resourcePacksRoot; private final Path packRoot; @@ -69,7 +69,7 @@ public void ensurePackStructure() throws IOException { Files.createDirectories(packRoot); Files.createDirectories(resourcePacksRoot); if (!Files.exists(packMetaPath)) { - Files.write(packMetaPath, buildPackMeta().getBytes(StandardCharsets.UTF_8)); + Files.writeString(packMetaPath, buildPackMeta()); } } @@ -85,14 +85,14 @@ public void savePage(MutableGuide guide, ResourceLocation pageId, String languag } Path pagePath = buildPagePath(targetPackRoot, guide, pageId, language); Files.createDirectories(pagePath.getParent()); - Files.write(pagePath, text.getBytes(StandardCharsets.UTF_8)); + Files.writeString(pagePath, text); } public void savePageInRoot(Path root, MutableGuide guide, ResourceLocation pageId, String language, String text) throws IOException { Path pagePath = buildPagePath(root, guide, pageId, language); Files.createDirectories(pagePath.getParent()); - Files.write(pagePath, text.getBytes(StandardCharsets.UTF_8)); + Files.writeString(pagePath, text); } public boolean canSaveBesideSource(MutableGuide guide, @Nullable ResourceLocation sourcePageId, String language) { @@ -144,9 +144,7 @@ private Path resolveExistingWritablePagePath(MutableGuide guide, ResourceLocatio return selectedSourcePath; } Path fallbackPath = buildPagePath(packRoot, guide, pageId, language); - if (Files.isRegularFile(fallbackPath)) { - return fallbackPath; - } + Files.isRegularFile(fallbackPath); return fallbackPath; } @@ -194,16 +192,12 @@ private Path resolveWritablePackRoot(MutableGuide guide, @Nullable ResourceLocat @Nullable private Path findWritableResourcePackRootContaining(MutableGuide guide, ResourceLocation pageId, String language) { - Path root = findWritableResourcePackRootContainingAsset( + return findWritableResourcePackRootContainingAsset( toResourcePackPageId(guide, pageId, language), language != null && !language.equals(guide.getDefaultLanguage()) ? toResourcePackPageId(guide, pageId, guide.getDefaultLanguage()) : null, toNeutralPageId(guide, pageId)); - if (root != null) { - return root; - } - return null; } @Nullable diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorMerge.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorMerge.java index 84348c12..ee9154f6 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorMerge.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorMerge.java @@ -1,6 +1,6 @@ package com.hfstudio.guidenh.guide.internal.editor.guide; -public final class GuideScreenEditorMerge { +public class GuideScreenEditorMerge { private GuideScreenEditorMerge() {} diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorState.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorState.java index af132d17..a2553855 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorState.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorState.java @@ -3,7 +3,7 @@ import com.hfstudio.guidenh.config.ModConfig; import com.hfstudio.guidenh.guide.internal.structure.GuideNhStructureExportAccess; -public final class GuideScreenEditorState { +public class GuideScreenEditorState { private static final String DEFAULT_AUTHOR = "GuideNH"; private static final String DEFAULT_NEW_PAGE_PATH = "NewGuide.md"; diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorTextActions.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorTextActions.java index cf724376..860bbf49 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorTextActions.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorTextActions.java @@ -1,6 +1,6 @@ package com.hfstudio.guidenh.guide.internal.editor.guide; -public final class GuideScreenEditorTextActions { +public class GuideScreenEditorTextActions { private GuideScreenEditorTextActions() {} @@ -42,367 +42,269 @@ public static Result apply(GuideScreenEditorAction action, String text, int sele if (action == null) { return new Result(source, start, end); } - switch (action) { - case HEADING_1: - return applyLinePrefix(source, start, end, "# ", 0, 0); - case HEADING_2: - return applyLinePrefix(source, start, end, "## ", 0, 0); - case HEADING_3: - return applyLinePrefix(source, start, end, "### ", 0, 0); - case HEADING_4: - return applyLinePrefix(source, start, end, "#### ", 0, 0); - case HEADING_5: - return applyLinePrefix(source, start, end, "##### ", 0, 0); - case HEADING_6: - return applyLinePrefix(source, start, end, "###### ", 0, 0); - case BOLD: - return wrap(source, start, end, "**", "**", "", ""); - case ITALIC: - return wrap(source, start, end, "*", "*", "", ""); - case STRIKETHROUGH: - return wrap(source, start, end, "~~", "~~", "", ""); - case UNDERLINE: - return wrap(source, start, end, "++", "++", "", ""); - case KBD: - return wrap(source, start, end, "", "", "key", ""); - case SUBSCRIPT: - return wrap(source, start, end, "", "", "1", ""); - case SUPERSCRIPT: - return wrap(source, start, end, "", "", "2", ""); - case FOOTNOTE: - return applyFootnote(source, start, end); - case TOOLTIP: - return applyTooltip(source, start, end); - case ITEM_IMAGE: - return applyItemTag(source, start, end, "ItemImage"); - case BLOCK_IMAGE: - return applyItemTag(source, start, end, "BlockImage"); - case ITEM_LINK: - return applyItemTag(source, start, end, "ItemLink"); - case LATEX: - return applyAttributeTag(source, start, end, "Latex", "formula", "E=mc^2", true); - case CSV_TABLE: - return applyCsvTable(source, start, end); - case COMMAND_LINK: - return applyCommandLink(source, start, end); - case RECIPE: - return applyRecipeTag(source, start, end, "Recipe", " fallbackText=\"Recipe unavailable.\""); - case RECIPE_FOR: - return applyRecipeTag(source, start, end, "RecipeFor", ""); - case RECIPES_FOR: - return applyRecipeTag(source, start, end, "RecipesFor", " limit=\"3\""); - case FLOATING_IMAGE: - return applyFloatingImage(source, start, end); - case MERMAID: - return applyNamedBlock( - source, - start, - end, - "", - "", - "mindmap\n root((GuideNH))"); - case FILE_TREE: - return applyNamedBlock( - source, - start, - end, - "", - "", - "project\n src\n docs"); - case SUB_PAGES: - return applyAttributeTag(source, start, end, "SubPages", "id", "", true); - case CATEGORY: - return applyNamedTag(source, start, end, "Category", "name", "general", " rows=\"3\"", true); - case FOOTNOTE_LIST: - return applyNamedBlock( - source, - start, - end, - "", - "", - "[^note]: tooltip text"); - case ROW: - return applyNamedBlock( - source, - start, - end, - "", - "", - "Left\nRight"); - case COLUMN: - return applyNamedBlock( - source, - start, - end, - "", - "", - "Top\nBottom"); - case DIV: - return applyNamedBlock(source, start, end, "
", "
", "Content"); - case ITEM_GRID: - return applyNamedBlock( - source, - start, - end, - "", - "", - " \n "); - case CSV_TABLE_IMPORT: - return applyAttributeTag(source, start, end, "CsvTable", "src", "./data.csv", true); - case ANCHOR: - return applyAttributeTag(source, start, end, "a", "name", "anchor-name", true); - case COLUMN_CHART: - return applyNamedBlock( - source, - start, - end, - "", - "", - " "); - case BAR_CHART: - return applyNamedBlock( - source, - start, - end, - "", - "", - " "); - case LINE_CHART: - return applyNamedBlock( - source, - start, - end, - "", - "", - " "); - case PIE_CHART: - return applyNamedBlock( - source, - start, - end, - "", - "", - " \n" - + " "); - case SCATTER_CHART: - return applyNamedBlock( - source, - start, - end, - "", - "", - " "); - case CHART_SERIES: - return applyChartSeries(source, start, end); - case CHART_LINE_SERIES: - return applyChartLineSeries(source, start, end); - case CHART_SLICE: - return applyChartSlice(source, start, end); - case CHART_PIE_INSET: - return applyNamedBlock( - source, - start, - end, - "", - "", - " \n" - + " "); - case FUNCTION_GRAPH: - return applyNamedBlock( - source, - start, - end, - "", - "", - " \n "); - case FUNCTION: - return applyFunction(source, start, end); - case FUNCTION_PLOT: - return applyFunctionPlot(source, start, end); - case FUNCTION_POINT: - return applyFunctionPoint(source, start, end); - case FUNCTION_GRAPH_FENCE: - return applyFunctionGraphFence(source, start, end); - case STRUCTURE: - return applyNamedBlock( - source, - start, - end, - "", - "", - "0 0 0 minecraft:stone"); - case GAME_SCENE: - return applyNamedBlock( - source, - start, - end, - "", - "", - " "); - case SCENE_BLOCK: - return applySceneBlock(source, start, end); - case SCENE_ENTITY: - return applySceneEntity(source, start, end); - case ISOMETRIC_CAMERA: - return applyIsometricCamera(source, start, end); - case BOX_ANNOTATION: - return applyNamedBlock( - source, - start, - end, - "", - "", - "Important area"); - case BLOCK_ANNOTATION: - return applyNamedBlock( - source, - start, - end, - "", - "", - "Block note"); - case LINE_ANNOTATION: - return applyNamedBlock( - source, - start, - end, - "", - "", - "Line note"); - case DIAMOND_ANNOTATION: - return applyNamedBlock( - source, - start, - end, - "", - "", - "Point note"); - case TEXT_ANNOTATION: - return applyNamedBlock( - source, - start, - end, - "", - "", - "Scene note"); - case BLOCK_ANNOTATION_TEMPLATE: - return applyNamedBlock( - source, - start, - end, - "", - "", - " \n Stone\n "); - case IMPORT_STRUCTURE: - return applyImportFile( - source, - start, - end, - "ImportStructure", - "src", - "./scene.snbt", - " x=\"0\" y=\"0\" z=\"0\""); - case IMPORT_STRUCTURE_LIB: - return applyImportStructureLib(source, start, end); - case IMPORT_PONDER: - return applyImportFile(source, start, end, "ImportPonder", "src", "./scene.json", ""); - case PLACE_BLOCK: - return applyPlaceBlock(source, start, end); - case REPLACE_BLOCK: - return applyReplaceBlock(source, start, end); - case REMOVE_BLOCKS: - return applyRemoveBlocks(source, start, end); - case QUEST_LINK: - return applyQuestTag(source, start, end, "QuestLink"); - case QUEST_CARD: - return applyQuestTag(source, start, end, "QuestCard"); - case QUEST_IDS: - return applyQuestIdsFrontmatter(source, start, end); - case NAV_POSITION: - return applyNavigationScalarFrontmatter(source, start, end, "position", "0", true); - case NAV_ICON: - return applyNavigationScalarFrontmatter(source, start, end, "icon", "minecraft:book", false); - case NAV_ICON_TEXTURE: - return applyNavigationScalarFrontmatter(source, start, end, "icon_texture", "test1.png", false); - case NAV_ICONS: - return applyNavigationListFrontmatter(source, start, end, "icons", "minecraft:book"); - case NAV_ICON_TEXTURES: - return applyNavigationListFrontmatter(source, start, end, "icon_textures", "test1.png"); - case NAV_REQUIRED_MODS: - return applyNavigationRequiredModsFrontmatter(source, start, end); - case PAGE_CATEGORIES: - return applyTopLevelListFrontmatter(source, start, end, "categories", "general"); - case PAGE_ITEM_IDS: - return applyTopLevelListFrontmatter(source, start, end, "item_ids", "minecraft:stone"); - case PAGE_ORE_IDS: - return applyTopLevelListFrontmatter(source, start, end, "ore_ids", "ingotIron"); - case PAGE_METADATA: - return applyPageMetadataFrontmatter(source, start, end); - case QUOTE_CALLOUT: - return applyQuoteDirective(source, start, end, "title=\"Callout\" color=\"#7C8795\""); - case QUOTE_ICON_TEXT: - return applyQuoteDirective(source, start, end, "title=\"Callout\" color=\"#7C8795\" icon=\"i\""); - case QUOTE_ICON_ITEM: - return applyQuoteDirective( - source, - start, - end, - "title=\"Callout\" color=\"#7C8795\" iconItem=\"minecraft:stone\""); - case QUOTE_ICON_PNG: - return applyQuoteDirective( - source, - start, - end, - "title=\"Callout\" color=\"#7C8795\" iconPng=\"./icon.png\""); - case LATEX_SHORTHAND: - return wrap(source, start, end, "$$", "$$", "formula", ""); - case LINK: - return wrap(source, start, end, "[", "]()", "", ""); - case IMAGE: - return wrap(source, start, end, "![](", ")", "", ""); - case INLINE_CODE: - return wrap(source, start, end, "`", "`", "", ""); - case CODE_BLOCK: - return wrapBlock(source, start, end, "```", "```"); - case BLOCKQUOTE: - return applyLinePrefix(source, start, end, "> ", 0, 0); - case UNORDERED_LIST: - return applyLinePrefix(source, start, end, "- ", 0, 0); - case ORDERED_LIST: - return applyOrderedList(source, start, end); - case TASK_LIST: - return applyLinePrefix(source, start, end, "- [ ] ", 0, 0); - case TABLE: - return applyTableTemplate(source, start, end); - case ALERT_NOTE: - return applyAlertBlock(source, start, end, "NOTE"); - case ALERT_TIP: - return applyAlertBlock(source, start, end, "TIP"); - case ALERT_IMPORTANT: - return applyAlertBlock(source, start, end, "IMPORTANT"); - case ALERT_WARNING: - return applyAlertBlock(source, start, end, "WARNING"); - case ALERT_CAUTION: - return applyAlertBlock(source, start, end, "CAUTION"); - case DETAILS: - return applyDetailsBlock(source, start, end); - case KEY_BIND: - return applyAttributeTag(source, start, end, "KeyBind", "id", "key.jump", true); - case PLAYER_NAME: - return insertAt(source, start, end, "", 0, 0); - case COLOR: - return applyColor(source, start, end); - case BREAK: - return insertAt(source, start, end, "
", 0, 0); - case REFERENCE_LINK: - return applyReference(source, start, end, false); - case REFERENCE_IMAGE: - return applyReference(source, start, end, true); - case THEMATIC_BREAK: - return insertAt(source, start, end, "\n---\n", 1, 4); - default: - return new Result(source, start, end); - } + return switch (action) { + case HEADING_1 -> applyLinePrefix(source, start, end, "# ", 0, 0); + case HEADING_2 -> applyLinePrefix(source, start, end, "## ", 0, 0); + case HEADING_3 -> applyLinePrefix(source, start, end, "### ", 0, 0); + case HEADING_4 -> applyLinePrefix(source, start, end, "#### ", 0, 0); + case HEADING_5 -> applyLinePrefix(source, start, end, "##### ", 0, 0); + case HEADING_6 -> applyLinePrefix(source, start, end, "###### ", 0, 0); + case BOLD -> wrap(source, start, end, "**", "**", "", ""); + case ITALIC -> wrap(source, start, end, "*", "*", "", ""); + case STRIKETHROUGH -> wrap(source, start, end, "~~", "~~", "", ""); + case UNDERLINE -> wrap(source, start, end, "++", "++", "", ""); + case KBD -> wrap(source, start, end, "", "", "key", ""); + case SUBSCRIPT -> wrap(source, start, end, "", "", "1", ""); + case SUPERSCRIPT -> wrap(source, start, end, "", "", "2", ""); + case FOOTNOTE -> applyFootnote(source, start, end); + case TOOLTIP -> applyTooltip(source, start, end); + case ITEM_IMAGE -> applyItemTag(source, start, end, "ItemImage"); + case BLOCK_IMAGE -> applyItemTag(source, start, end, "BlockImage"); + case ITEM_LINK -> applyItemTag(source, start, end, "ItemLink"); + case LATEX -> applyAttributeTag(source, start, end, "Latex", "formula", "E=mc^2", true); + case CSV_TABLE -> applyCsvTable(source, start, end); + case COMMAND_LINK -> applyCommandLink(source, start, end); + case RECIPE -> applyRecipeTag(source, start, end, "Recipe", " fallbackText=\"Recipe unavailable.\""); + case RECIPE_FOR -> applyRecipeTag(source, start, end, "RecipeFor", ""); + case RECIPES_FOR -> applyRecipeTag(source, start, end, "RecipesFor", " limit=\"3\""); + case FLOATING_IMAGE -> applyFloatingImage(source, start, end); + case MERMAID -> applyNamedBlock( + source, + start, + end, + "", + "", + "mindmap\n root((GuideNH))"); + case FILE_TREE -> applyNamedBlock( + source, + start, + end, + "", + "", + "project\n src\n docs"); + case SUB_PAGES -> applyAttributeTag(source, start, end, "SubPages", "id", "", true); + case CATEGORY -> applyNamedTag(source, start, end, "Category", "name", "general", " rows=\"3\"", true); + case FOOTNOTE_LIST -> applyNamedBlock( + source, + start, + end, + "", + "", + "[^note]: tooltip text"); + case ROW -> applyNamedBlock( + source, + start, + end, + "", + "", + "Left\nRight"); + case COLUMN -> applyNamedBlock( + source, + start, + end, + "", + "", + "Top\nBottom"); + case DIV -> applyNamedBlock(source, start, end, "
", "
", "Content"); + case ITEM_GRID -> applyNamedBlock( + source, + start, + end, + "", + "", + " \n "); + case CSV_TABLE_IMPORT -> applyAttributeTag(source, start, end, "CsvTable", "src", "./data.csv", true); + case ANCHOR -> applyAttributeTag(source, start, end, "a", "name", "anchor-name", true); + case COLUMN_CHART -> applyNamedBlock( + source, + start, + end, + "", + "", + " "); + case BAR_CHART -> applyNamedBlock( + source, + start, + end, + "", + "", + " "); + case LINE_CHART -> applyNamedBlock( + source, + start, + end, + "", + "", + " "); + case PIE_CHART -> applyNamedBlock( + source, + start, + end, + "", + "", + " \n" + + " "); + case SCATTER_CHART -> applyNamedBlock( + source, + start, + end, + "", + "", + " "); + case CHART_SERIES -> applyChartSeries(source, start, end); + case CHART_LINE_SERIES -> applyChartLineSeries(source, start, end); + case CHART_SLICE -> applyChartSlice(source, start, end); + case CHART_PIE_INSET -> applyNamedBlock( + source, + start, + end, + "", + "", + " \n" + + " "); + case FUNCTION_GRAPH -> applyNamedBlock( + source, + start, + end, + "", + "", + " \n "); + case FUNCTION -> applyFunction(source, start, end); + case FUNCTION_PLOT -> applyFunctionPlot(source, start, end); + case FUNCTION_POINT -> applyFunctionPoint(source, start, end); + case FUNCTION_GRAPH_FENCE -> applyFunctionGraphFence(source, start, end); + case STRUCTURE -> applyNamedBlock( + source, + start, + end, + "", + "", + "0 0 0 minecraft:stone"); + case GAME_SCENE -> applyNamedBlock( + source, + start, + end, + "", + "", + " "); + case SCENE_BLOCK -> applySceneBlock(source, start, end); + case SCENE_ENTITY -> applySceneEntity(source, start, end); + case ISOMETRIC_CAMERA -> applyIsometricCamera(source, start, end); + case BOX_ANNOTATION -> applyNamedBlock( + source, + start, + end, + "", + "", + "Important area"); + case BLOCK_ANNOTATION -> applyNamedBlock( + source, + start, + end, + "", + "", + "Block note"); + case LINE_ANNOTATION -> applyNamedBlock( + source, + start, + end, + "", + "", + "Line note"); + case DIAMOND_ANNOTATION -> applyNamedBlock( + source, + start, + end, + "", + "", + "Point note"); + case TEXT_ANNOTATION -> applyNamedBlock( + source, + start, + end, + "", + "", + "Scene note"); + case BLOCK_ANNOTATION_TEMPLATE -> applyNamedBlock( + source, + start, + end, + "", + "", + " \n Stone\n "); + case IMPORT_STRUCTURE -> applyImportFile( + source, + start, + end, + "ImportStructure", + "src", + "./scene.snbt", + " x=\"0\" y=\"0\" z=\"0\""); + case IMPORT_STRUCTURE_LIB -> applyImportStructureLib(source, start, end); + case IMPORT_PONDER -> applyImportFile(source, start, end, "ImportPonder", "src", "./scene.json", ""); + case PLACE_BLOCK -> applyPlaceBlock(source, start, end); + case REPLACE_BLOCK -> applyReplaceBlock(source, start, end); + case REMOVE_BLOCKS -> applyRemoveBlocks(source, start, end); + case QUEST_LINK -> applyQuestTag(source, start, end, "QuestLink"); + case QUEST_CARD -> applyQuestTag(source, start, end, "QuestCard"); + case QUEST_IDS -> applyQuestIdsFrontmatter(source, start, end); + case NAV_POSITION -> applyNavigationScalarFrontmatter(source, start, end, "position", "0", true); + case NAV_ICON -> applyNavigationScalarFrontmatter(source, start, end, "icon", "minecraft:book", false); + case NAV_ICON_TEXTURE -> applyNavigationScalarFrontmatter( + source, + start, + end, + "icon_texture", + "test1.png", + false); + case NAV_ICONS -> applyNavigationListFrontmatter(source, start, end, "icons", "minecraft:book"); + case NAV_ICON_TEXTURES -> applyNavigationListFrontmatter(source, start, end, "icon_textures", "test1.png"); + case NAV_REQUIRED_MODS -> applyNavigationRequiredModsFrontmatter(source, start, end); + case PAGE_CATEGORIES -> applyTopLevelListFrontmatter(source, start, end, "categories", "general"); + case PAGE_ITEM_IDS -> applyTopLevelListFrontmatter(source, start, end, "item_ids", "minecraft:stone"); + case PAGE_ORE_IDS -> applyTopLevelListFrontmatter(source, start, end, "ore_ids", "ingotIron"); + case PAGE_METADATA -> applyPageMetadataFrontmatter(source, start, end); + case QUOTE_CALLOUT -> applyQuoteDirective(source, start, end, "title=\"Callout\" color=\"#7C8795\""); + case QUOTE_ICON_TEXT -> applyQuoteDirective( + source, + start, + end, + "title=\"Callout\" color=\"#7C8795\" icon=\"i\""); + case QUOTE_ICON_ITEM -> applyQuoteDirective( + source, + start, + end, + "title=\"Callout\" color=\"#7C8795\" iconItem=\"minecraft:stone\""); + case QUOTE_ICON_PNG -> applyQuoteDirective( + source, + start, + end, + "title=\"Callout\" color=\"#7C8795\" iconPng=\"./icon.png\""); + case LATEX_SHORTHAND -> wrap(source, start, end, "$$", "$$", "formula", ""); + case LINK -> wrap(source, start, end, "[", "]()", "", ""); + case IMAGE -> wrap(source, start, end, "![](", ")", "", ""); + case INLINE_CODE -> wrap(source, start, end, "`", "`", "", ""); + case CODE_BLOCK -> wrapBlock(source, start, end, "```", "```"); + case BLOCKQUOTE -> applyLinePrefix(source, start, end, "> ", 0, 0); + case UNORDERED_LIST -> applyLinePrefix(source, start, end, "- ", 0, 0); + case ORDERED_LIST -> applyOrderedList(source, start, end); + case TASK_LIST -> applyLinePrefix(source, start, end, "- [ ] ", 0, 0); + case TABLE -> applyTableTemplate(source, start, end); + case ALERT_NOTE -> applyAlertBlock(source, start, end, "NOTE"); + case ALERT_TIP -> applyAlertBlock(source, start, end, "TIP"); + case ALERT_IMPORTANT -> applyAlertBlock(source, start, end, "IMPORTANT"); + case ALERT_WARNING -> applyAlertBlock(source, start, end, "WARNING"); + case ALERT_CAUTION -> applyAlertBlock(source, start, end, "CAUTION"); + case DETAILS -> applyDetailsBlock(source, start, end); + case KEY_BIND -> applyAttributeTag(source, start, end, "KeyBind", "id", "key.jump", true); + case PLAYER_NAME -> insertAt(source, start, end, "", 0, 0); + case COLOR -> applyColor(source, start, end); + case BREAK -> insertAt(source, start, end, "
", 0, 0); + case REFERENCE_LINK -> applyReference(source, start, end, false); + case REFERENCE_IMAGE -> applyReference(source, start, end, true); + case THEMATIC_BREAK -> insertAt(source, start, end, "\n---\n", 1, 4); + default -> new Result(source, start, end); + }; } private static Result applyRecipeTag(String source, int start, int end, String tagName, String extraAttributes) { @@ -672,12 +574,10 @@ private static Result applyQuoteDirective(String source, int start, int end, Str .trim(); String replacement = "> {:" + directive + "}\n> "; int caret; - if (body.isEmpty()) { - caret = range.start + replacement.length(); - } else { + if (!body.isEmpty()) { replacement += body.replace("\n", "\n> "); - caret = range.start + replacement.length(); } + caret = range.start + replacement.length(); return new Result(source.substring(0, range.start) + replacement + source.substring(range.end), caret, caret); } @@ -1105,13 +1005,11 @@ private static Result applyFootnote(String source, int start, int end) { int caretEnd; if (selected.isEmpty()) { replacement = "[^" + id + "]" + definition; - caretStart = start + replacement.indexOf("tooltip text"); - caretEnd = caretStart + "tooltip text".length(); } else { replacement = selected + "[^" + id + "]" + definition; - caretStart = start + replacement.indexOf("tooltip text"); - caretEnd = caretStart + "tooltip text".length(); } + caretStart = start + replacement.indexOf("tooltip text"); + caretEnd = caretStart + "tooltip text".length(); return new Result(source.substring(0, start) + replacement + source.substring(end), caretStart, caretEnd); } @@ -1124,13 +1022,11 @@ private static Result applyTooltip(String source, int start, int end) { int caretEnd; if (body.isEmpty()) { replacement = "\n Tooltip content\n"; - caretStart = range.start + replacement.indexOf("Hover"); - caretEnd = caretStart + "Hover".length(); } else { replacement = "\n " + body.replace("\n", "\n ") + "\n"; - caretStart = range.start + replacement.indexOf("Hover"); - caretEnd = caretStart + "Hover".length(); } + caretStart = range.start + replacement.indexOf("Hover"); + caretEnd = caretStart + "Hover".length(); return new Result( source.substring(0, range.start) + replacement + source.substring(range.end), caretStart, @@ -1242,15 +1138,13 @@ private static Result applyDetailsBlock(String source, int start, int end) { replacement.append("
\n"); replacement.append("Details\n\n"); int caret; - if (body.isEmpty()) { - caret = range.start + replacement.length(); - } else { + if (!body.isEmpty()) { replacement.append(body); if (!body.endsWith("\n")) { replacement.append('\n'); } - caret = range.start + replacement.length(); } + caret = range.start + replacement.length(); replacement.append("
"); return new Result(source.substring(0, range.start) + replacement + source.substring(range.end), caret, caret); } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorUndoHistory.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorUndoHistory.java index a34a4b2c..f2da5aa8 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorUndoHistory.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/guide/GuideScreenEditorUndoHistory.java @@ -25,12 +25,12 @@ public void push(String text, int selectionStart, int selectionEnd) { return; } while (states.size() > index + 1) { - states.remove(states.size() - 1); + states.removeLast(); } states.add(entry); index = states.size() - 1; while (states.size() > limit) { - states.remove(0); + states.removeFirst(); index--; } if (index < 0 && !states.isEmpty()) { @@ -101,10 +101,9 @@ public boolean equals(Object obj) { if (this == obj) { return true; } - if (!(obj instanceof Entry)) { + if (!(obj instanceof Entry other)) { return false; } - Entry other = (Entry) obj; return selectionStart == other.selectionStart && selectionEnd == other.selectionEnd && text.equals(other.text); } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/io/SceneEditorScreenshotExportService.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/io/SceneEditorScreenshotExportService.java index 4864453f..9fd9b184 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/io/SceneEditorScreenshotExportService.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/io/SceneEditorScreenshotExportService.java @@ -209,8 +209,7 @@ public BufferedImage render(LytGuidebookScene scene, int width, int height) thro return renderTiled(scene, width, height, maxFboSize); } - private BufferedImage renderTiled(LytGuidebookScene scene, int fullWidth, int fullHeight, int tileSize) - throws Exception { + private BufferedImage renderTiled(LytGuidebookScene scene, int fullWidth, int fullHeight, int tileSize) { scene.setSceneSize(fullWidth, fullHeight); scene.layout(new LayoutContext(new MinecraftFontMetrics()), 0, 0, fullWidth); @@ -278,7 +277,7 @@ public boolean isSuccess() { return success; } - public Path getSavedPath() { + public @Nullable Path getSavedPath() { return savedPath; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/io/SceneEditorStructureCache.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/io/SceneEditorStructureCache.java index ce5266ae..f1bdbd1b 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/io/SceneEditorStructureCache.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/io/SceneEditorStructureCache.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal.editor.io; import java.io.IOException; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -45,7 +44,7 @@ public void writeStructureCache(Path path, String snbtText) throws IOException { if (parent != null) { Files.createDirectories(parent); } - Files.write(path, snbtText.getBytes(StandardCharsets.UTF_8)); + Files.writeString(path, snbtText); } public static Optional resolveSceneStructurePath(Path workingRoot, @Nullable String structureSource) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/io/SceneEditorStructureImportService.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/io/SceneEditorStructureImportService.java index 0fdd25bf..9102a585 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/io/SceneEditorStructureImportService.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/io/SceneEditorStructureImportService.java @@ -5,7 +5,6 @@ import java.awt.Frame; import java.awt.GraphicsEnvironment; import java.io.File; -import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.Locale; @@ -40,7 +39,7 @@ public class SceneEditorStructureImportService { public SceneEditorStructureImportService(SceneEditorStructureCache structureCache) { this.structureCache = structureCache; this.fileChooser = this::chooseStructureFileOnDialogThread; - this.structureTextReader = path -> new String(Files.readAllBytes(path), StandardCharsets.UTF_8); + this.structureTextReader = Files::readString; this.importExecutor = IMPORT_EXECUTOR; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/md/SceneEditorMarkdownCodec.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/md/SceneEditorMarkdownCodec.java index 7d0190bd..8dcbe208 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/md/SceneEditorMarkdownCodec.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/md/SceneEditorMarkdownCodec.java @@ -2,7 +2,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.HashSet; import java.util.LinkedHashMap; import java.util.List; @@ -40,123 +39,101 @@ public class SceneEditorMarkdownCodec { public static final MdastOptions PARSE_OPTIONS = GuideMarkdownOptions.sceneEditor(); - public static final Set ROOT_TAG_NAMES = Collections - .unmodifiableSet(new HashSet<>(Arrays.asList("GameScene", "Scene"))); - public static final Set ROOT_ATTRIBUTES = Collections.unmodifiableSet( - new HashSet<>( - Arrays.asList( - "width", - "height", - "perspective", - "zoom", - "rotateX", - "rotateY", - "rotateZ", - "offsetX", - "offsetY", - "centerX", - "centerY", - "centerZ", - "interactive", - "showBackground", - "allowLayerSlider"))); - public static final Set IMPORT_STRUCTURE_ATTRIBUTES = Collections - .unmodifiableSet(new HashSet<>(Arrays.asList("src", "x", "y", "z", "offsetX", "offsetY", "offsetZ", "formed"))); - public static final Set IMPORT_STRUCTURE_LIB_ATTRIBUTES = Collections.unmodifiableSet( - new HashSet<>( - Arrays.asList( - "controller", - "name", - "piece", - "facing", - "rotation", - "flip", - "channel", - "offsetX", - "offsetY", - "offsetZ", - "formed"))); - public static final Set REMOVE_BLOCKS_ATTRIBUTES = Collections - .unmodifiableSet(new HashSet<>(Collections.singletonList("id"))); - public static final Set BLOCK_ANNOTATION_TEMPLATE_ATTRIBUTES = Collections - .unmodifiableSet(new HashSet<>(Arrays.asList("id", "showWhenStructure", "showWhenTier", "showWhenChannels"))); - public static final Set BLOCK_ATTRIBUTES = Collections.unmodifiableSet( - new HashSet<>( - Arrays.asList( - "pos", - "color", - "thickness", - "alwaysOnTop", - "visible", - "showWhenStructure", - "showWhenTier", - "showWhenChannels"))); - public static final Set BOX_ATTRIBUTES = Collections.unmodifiableSet( - new HashSet<>( - Arrays.asList( - "min", - "max", - "color", - "thickness", - "alwaysOnTop", - "visible", - "showWhenStructure", - "showWhenTier", - "showWhenChannels"))); - public static final Set LINE_ATTRIBUTES = Collections.unmodifiableSet( - new HashSet<>( - Arrays.asList( - "from", - "to", - "points", - "arrow", - "color", - "thickness", - "alwaysOnTop", - "visible", - "showPoints", - "pointColor", - "pointSize", - "showWhenStructure", - "showWhenTier", - "showWhenChannels"))); - public static final Set DIAMOND_ATTRIBUTES = Collections.unmodifiableSet( - new HashSet<>( - Arrays.asList( - "pos", - "color", - "alwaysOnTop", - "visible", - "showWhenStructure", - "showWhenTier", - "showWhenChannels"))); - public static final Set TEXT_ATTRIBUTES = Collections.unmodifiableSet( - new HashSet<>( - Arrays.asList( - "pos", - "x", - "y", - "z", - "color", - "maxWidth", - "backgroundAlpha", - "textKey", - "independent", - "yOffset", - "connectorSide", - "connectorOffset", - "connectorLength", - "hlMinX", - "hlMinY", - "hlMinZ", - "hlMaxX", - "hlMaxY", - "hlMaxZ", - "highlightColor", - "visible", - "showWhenStructure", - "showWhenTier", - "showWhenChannels"))); + public static final Set ROOT_TAG_NAMES = Set.of("GameScene", "Scene"); + public static final Set ROOT_ATTRIBUTES = Set.of( + "width", + "height", + "perspective", + "zoom", + "rotateX", + "rotateY", + "rotateZ", + "offsetX", + "offsetY", + "centerX", + "centerY", + "centerZ", + "interactive", + "showBackground", + "allowLayerSlider"); + public static final Set IMPORT_STRUCTURE_ATTRIBUTES = Set + .of("src", "x", "y", "z", "offsetX", "offsetY", "offsetZ", "formed"); + public static final Set IMPORT_STRUCTURE_LIB_ATTRIBUTES = Set.of( + "controller", + "name", + "piece", + "facing", + "rotation", + "flip", + "channel", + "offsetX", + "offsetY", + "offsetZ", + "formed"); + public static final Set REMOVE_BLOCKS_ATTRIBUTES = Set.of("id"); + public static final Set BLOCK_ANNOTATION_TEMPLATE_ATTRIBUTES = Set + .of("id", "showWhenStructure", "showWhenTier", "showWhenChannels"); + public static final Set BLOCK_ATTRIBUTES = Set.of( + "pos", + "color", + "thickness", + "alwaysOnTop", + "visible", + "showWhenStructure", + "showWhenTier", + "showWhenChannels"); + public static final Set BOX_ATTRIBUTES = Set.of( + "min", + "max", + "color", + "thickness", + "alwaysOnTop", + "visible", + "showWhenStructure", + "showWhenTier", + "showWhenChannels"); + public static final Set LINE_ATTRIBUTES = Set.of( + "from", + "to", + "points", + "arrow", + "color", + "thickness", + "alwaysOnTop", + "visible", + "showPoints", + "pointColor", + "pointSize", + "showWhenStructure", + "showWhenTier", + "showWhenChannels"); + public static final Set DIAMOND_ATTRIBUTES = Set + .of("pos", "color", "alwaysOnTop", "visible", "showWhenStructure", "showWhenTier", "showWhenChannels"); + public static final Set TEXT_ATTRIBUTES = Set.of( + "pos", + "x", + "y", + "z", + "color", + "maxWidth", + "backgroundAlpha", + "textKey", + "independent", + "yOffset", + "connectorSide", + "connectorOffset", + "connectorLength", + "hlMinX", + "hlMinY", + "hlMinZ", + "hlMaxX", + "hlMaxY", + "hlMaxZ", + "highlightColor", + "visible", + "showWhenStructure", + "showWhenTier", + "showWhenChannels"); public SceneEditorMarkdownParseResult parse(String markdown) { String normalized = normalizeLineEndings(markdown); @@ -316,18 +293,18 @@ private boolean appendParsedSceneChildFromRawText(SceneEditorSceneModel model, U } SceneEditorMarkdownParseResult nestedResult = parseSceneChildFragment(rawText); String rawTagName = extractLeadingTagName(rawText); - if (nestedResult instanceof SceneEditorMarkdownParseResult.Unsupported unsupported + if (nestedResult instanceof SceneEditorMarkdownParseResult.Unsupported(String message) && isKnownSceneTag(rawTagName)) { - throw new UnsupportedSubsetException(unsupported.message()); + throw new UnsupportedSubsetException(message); } - if (nestedResult instanceof SceneEditorMarkdownParseResult.SyntaxError syntaxError + if (nestedResult instanceof SceneEditorMarkdownParseResult.SyntaxError(String message) && isKnownSceneTag(rawTagName)) { - throw new InvalidSceneSyntaxException(syntaxError.message()); + throw new InvalidSceneSyntaxException(message); } - if (!(nestedResult instanceof SceneEditorMarkdownParseResult.Success success)) { + if (!(nestedResult instanceof SceneEditorMarkdownParseResult.Success(SceneEditorSceneModel model1))) { return false; } - mergeParsedSceneChild(model, success.model()); + mergeParsedSceneChild(model, model1); return true; } @@ -659,7 +636,7 @@ private List collectSerializableSceneNodes(SceneEdito SceneEditorSceneNodeModel importStructure = new SceneEditorSceneNodeModel( SceneEditorSceneNodeType.IMPORT_STRUCTURE); importStructure.setAttribute("src", model.getStructureSource()); - sceneNodes.add(0, importStructure); + sceneNodes.addFirst(importStructure); } Set annotationIds = new HashSet<>(); @@ -1048,7 +1025,7 @@ private void appendOptionalStringAttribute(StringBuilder builder, String attribu } private void appendExtraAttributes(StringBuilder builder, SceneEditorElementModel element, String... attributes) { - if (builder == null || element == null || attributes == null || attributes.length == 0) { + if (builder == null || element == null || attributes == null) { return; } for (String attribute : attributes) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/md/SceneEditorMarkdownElementRangeIndex.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/md/SceneEditorMarkdownElementRangeIndex.java index 62064216..60b55035 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/md/SceneEditorMarkdownElementRangeIndex.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/md/SceneEditorMarkdownElementRangeIndex.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal.editor.md; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.UUID; @@ -14,7 +13,7 @@ public class SceneEditorMarkdownElementRangeIndex { public static final SceneEditorMarkdownElementRangeIndex EMPTY = new SceneEditorMarkdownElementRangeIndex( - Collections.emptyList()); + List.of()); private final List ranges; @@ -54,7 +53,7 @@ public static SceneEditorMarkdownElementRangeIndex fromBestEffortText(String tex if (ranges.isEmpty()) { return empty(); } - return new SceneEditorMarkdownElementRangeIndex(Collections.unmodifiableList(ranges)); + return new SceneEditorMarkdownElementRangeIndex(List.copyOf(ranges)); } public boolean isEmpty() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/model/SceneEditorElementModel.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/model/SceneEditorElementModel.java index 0ad9803a..7abeddf9 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/model/SceneEditorElementModel.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/model/SceneEditorElementModel.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal.editor.model; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -116,7 +115,7 @@ public void setSecondaryZ(float secondaryZ) { } public List getLinePoints() { - return Collections.unmodifiableList(linePoints); + return List.copyOf(linePoints); } public void setLinePoints(List points) { @@ -228,7 +227,7 @@ public void setBackgroundAlpha(int backgroundAlpha) { } public Map getExtraAttributes() { - return Collections.unmodifiableMap(extraAttributes); + return Map.copyOf(extraAttributes); } public String getExtraAttribute(String name) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/model/SceneEditorElementType.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/model/SceneEditorElementType.java index f6b39baa..b82a442d 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/model/SceneEditorElementType.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/model/SceneEditorElementType.java @@ -1,7 +1,5 @@ package com.hfstudio.guidenh.guide.internal.editor.model; -import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -161,7 +159,7 @@ public static synchronized SceneEditorElementType register(SceneEditorElementTyp } public static List values() { - return Collections.unmodifiableList(new ArrayList<>(TYPES_BY_ID.values())); + return List.copyOf(TYPES_BY_ID.values()); } @Nullable diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/model/SceneEditorSceneModel.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/model/SceneEditorSceneModel.java index 60dc4b8c..2a344dd2 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/model/SceneEditorSceneModel.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/model/SceneEditorSceneModel.java @@ -119,7 +119,7 @@ public void setStructureSource(@Nullable String structureSource) { SceneEditorSceneNodeModel node = new SceneEditorSceneNodeModel(SceneEditorSceneNodeType.IMPORT_STRUCTURE); node.setAttribute("src", structureSource); - sceneNodes.add(0, node); + sceneNodes.addFirst(node); } @Nullable diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorPointDragService.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorPointDragService.java index b944927f..92dc4256 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorPointDragService.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorPointDragService.java @@ -455,7 +455,7 @@ private enum DragBehavior { BOX_CORNER } - private enum DragMode { + public enum DragMode { CENTER(SceneEditorHandleOverlay.CENTER_HANDLE_ID, false, false, false), AXIS_X(SceneEditorHandleOverlay.X_AXIS_HANDLE_ID, false, true, true), diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorSceneNodePreviewApplier.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorSceneNodePreviewApplier.java index 91b7c1ce..7df3dfde 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorSceneNodePreviewApplier.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorSceneNodePreviewApplier.java @@ -154,23 +154,24 @@ private boolean applyLegacyPreview(SceneEditorSession session, LytGuidebookScene private boolean applyNode(SceneEditorSession session, LytGuidebookScene scene, SceneEditorSceneNodeModel node, @Nullable StructureLibPreviewSelection structureLibSelectionOverride, boolean structureMutationEnabled) { - switch (node.getType()) { - case IMPORT_STRUCTURE: - return applyImportStructure(session, scene.getLevel(), node, structureMutationEnabled); - case IMPORT_STRUCTURE_LIB: - return applyImportStructureLib(scene, node, structureLibSelectionOverride, structureMutationEnabled); - case REMOVE_BLOCKS: - return applyRemoveBlocks(scene.getLevel(), node, structureMutationEnabled); - case BLOCK_ANNOTATION_TEMPLATE: + return switch (node.getType()) { + case IMPORT_STRUCTURE -> applyImportStructure(session, scene.getLevel(), node, structureMutationEnabled); + case IMPORT_STRUCTURE_LIB -> applyImportStructureLib( + scene, + node, + structureLibSelectionOverride, + structureMutationEnabled); + case REMOVE_BLOCKS -> applyRemoveBlocks(scene.getLevel(), node, structureMutationEnabled); + case BLOCK_ANNOTATION_TEMPLATE -> { applyBlockAnnotationTemplate(scene, node); - return true; - case ANNOTATION: + yield true; + } + case ANNOTATION -> { appendAnnotation(scene, node.getAnnotationElement()); - return true; - case OPAQUE: - default: - return true; - } + yield true; + } + default -> true; + }; } private void applyAnnotationNode(LytGuidebookScene scene, SceneEditorSceneNodeModel node) { @@ -396,7 +397,7 @@ private String resolveStructureText(SceneEditorSession session, @Nullable String } try { - return new String(Files.readAllBytes(path), StandardCharsets.UTF_8); + return Files.readString(path); } catch (Exception e) { GuideDebugLog.warn("Failed to read scene editor preview structure {}", normalizedSource, e); return null; @@ -506,7 +507,7 @@ private List toRuntimeAnnotations(SceneEditorElementModel eleme annotation.setAlwaysOnTop(element.isAlwaysOnTop()); applyTooltip(annotation, element.getTooltipMarkdown()); applyStructureLibCondition(annotation, element); - return Collections.singletonList(annotation); + return Collections.singletonList(annotation); } if (element.getType() == SceneEditorElementType.BOX) { Vector3f min = new Vector3f(element.getPrimaryX(), element.getPrimaryY(), element.getPrimaryZ()); @@ -516,7 +517,7 @@ private List toRuntimeAnnotations(SceneEditorElementModel eleme annotation.setAlwaysOnTop(element.isAlwaysOnTop()); applyTooltip(annotation, element.getTooltipMarkdown()); applyStructureLibCondition(annotation, element); - return Collections.singletonList(annotation); + return Collections.singletonList(annotation); } if (element.getType() == SceneEditorElementType.LINE) { InWorldLineAnnotation annotation = new InWorldLineAnnotation( @@ -526,7 +527,7 @@ private List toRuntimeAnnotations(SceneEditorElementModel eleme annotation.setAlwaysOnTop(element.isAlwaysOnTop()); applyTooltip(annotation, element.getTooltipMarkdown()); applyStructureLibCondition(annotation, element); - return Collections.singletonList(annotation); + return Collections.singletonList(annotation); } if (element.getType() == SceneEditorElementType.TEXT) { String text = resolveAnnotationText(element); @@ -557,7 +558,7 @@ private List toRuntimeAnnotations(SceneEditorElementModel eleme annotation.setAlwaysOnTop(element.isAlwaysOnTop()); applyTooltip(annotation, element.getTooltipMarkdown()); applyStructureLibCondition(annotation, element); - return Collections.singletonList(annotation); + return Collections.singletonList(annotation); } private List resolveLinePoints(SceneEditorElementModel element) { @@ -732,6 +733,6 @@ public static Integer parseIntegerAttribute(@Nullable String value) { private static int parseIntegerAttributeOrDefault(@Nullable String value, int defaultValue) { Integer parsed = parseIntegerAttribute(value); - return parsed != null ? parsed.intValue() : defaultValue; + return parsed != null ? parsed : defaultValue; } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorSnapService.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorSnapService.java index 41f739bf..c12eed08 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorSnapService.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorSnapService.java @@ -431,7 +431,7 @@ public static float squaredDistance(float ax, float ay, float az, float bx, floa return dx * dx + dy * dy + dz * dz; } - private interface SnapCandidateVisitor { + public interface SnapCandidateVisitor { void visit(float x, float y, float z, float distanceMultiplier); } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorTooltipCompiler.java b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorTooltipCompiler.java index 68f270e4..32e9c76c 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorTooltipCompiler.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/editor/preview/SceneEditorTooltipCompiler.java @@ -2,7 +2,8 @@ import java.util.ArrayList; import java.util.Collection; -import java.util.Collections; +import java.util.List; +import java.util.Set; import net.minecraft.util.ResourceLocation; @@ -23,7 +24,7 @@ import com.hfstudio.guidenh.guide.internal.extensions.DefaultExtensions; import com.hfstudio.guidenh.guide.navigation.NavigationTree; -final class SceneEditorTooltipCompiler { +public class SceneEditorTooltipCompiler { public static final String PREVIEW_SOURCE_PACK = "guidenh-scene-editor"; public static final ResourceLocation PREVIEW_PAGE_ID = new ResourceLocation( @@ -66,7 +67,7 @@ public static PageCompiler createPreviewCompiler(ParsedGuidePage parsed) { public static ExtensionCollection buildExtensions() { ExtensionCollection.Builder builder = ExtensionCollection.builder(); - DefaultExtensions.addAll(builder, Collections.emptySet()); + DefaultExtensions.addAll(builder, Set.of()); return builder.build(); } @@ -86,7 +87,7 @@ public T getIndex(Class indexClass) { public Collection getPages() { Collection guides = GuideRegistry.getAll(); if (guides.isEmpty()) { - return Collections.emptyList(); + return List.of(); } ArrayList pages = new ArrayList<>(); for (MutableGuide guide : guides) { @@ -125,8 +126,7 @@ public GuidePage getPage(ResourceLocation id) { } @Override - @Nullable - public byte[] loadAsset(ResourceLocation id) { + public byte @Nullable [] loadAsset(ResourceLocation id) { return null; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/extensions/DefaultExtensions.java b/src/main/java/com/hfstudio/guidenh/guide/internal/extensions/DefaultExtensions.java index 1ea56c41..255d8f62 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/extensions/DefaultExtensions.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/extensions/DefaultExtensions.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal.extensions; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collection; import java.util.List; import java.util.Set; @@ -77,7 +76,7 @@ public class DefaultExtensions { - public static final List> EXTENSIONS = Arrays.asList( + public static final List> EXTENSIONS = List.of( new Registration<>(TagCompiler.EXTENSION_POINT, DefaultExtensions::tagCompilers), new Registration<>(SceneElementTagCompiler.EXTENSION_POINT, DefaultExtensions::sceneElementCompilers)); @@ -102,7 +101,7 @@ public static void add(ExtensionCollection.Builder builder public static List tagCompilers() { var compilers = new ArrayList<>( - Arrays.asList( + List.of( new DivTagCompiler(), new ATagCompiler(), new KbdTagCompiler(), @@ -151,7 +150,7 @@ public static List tagCompilers() { } public static List sceneElementCompilers() { - return Arrays.asList( + return List.of( new EntityElementCompiler(), new BlockElementCompiler(), new ImportStructureElementCompiler(), diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/home/GuideScreenHomeHistory.java b/src/main/java/com/hfstudio/guidenh/guide/internal/home/GuideScreenHomeHistory.java index ac371861..6255da17 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/home/GuideScreenHomeHistory.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/home/GuideScreenHomeHistory.java @@ -1,7 +1,5 @@ package com.hfstudio.guidenh.guide.internal.home; -import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -15,7 +13,7 @@ public static GuideScreenHomeHistory shared() { return SHARED; } - private final LinkedList entries = new LinkedList(); + private final LinkedList entries = new LinkedList<>(); private int version; public void record(ResourceLocation guideId, ResourceLocation pageId) { @@ -32,7 +30,7 @@ public void record(ResourceLocation guideId, ResourceLocation pageId) { } public List snapshot() { - return Collections.unmodifiableList(new ArrayList(entries)); + return List.copyOf(entries); } public int version() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/home/HomePageDataBuilder.java b/src/main/java/com/hfstudio/guidenh/guide/internal/home/HomePageDataBuilder.java index 6b1e309c..aa20ad23 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/home/HomePageDataBuilder.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/home/HomePageDataBuilder.java @@ -90,7 +90,7 @@ public HomePageSections build(GuideBookmarkState bookmarkState, GuideScreenHomeH private List buildRecommendedEntries(NavigationTree navigationTree, PageLookup pageLookup, int limit) { - List entries = new ArrayList(); + List entries = new ArrayList<>(); for (PageReference pageReference : pageLookup.pages()) { ParsedGuidePage page = pageReference.page(); FrontmatterNavigation navigation = page.getFrontmatter() @@ -115,7 +115,7 @@ private List buildRecommendedEntries(NavigationTree navigationTre private List buildBookmarkedEntries(GuideBookmarkState bookmarkState, NavigationTree navigationTree, PageLookup pageLookup, int limit) { - List entries = new ArrayList(); + List entries = new ArrayList<>(); for (ResourceLocation pageId : bookmarkState.getBookmarksView()) { HomePageEntry entry = toEntry( pageLookup.guideByPageId() @@ -132,7 +132,7 @@ private List buildBookmarkedEntries(GuideBookmarkState bookmarkSt private List buildHistoryEntries(GuideScreenHomeHistory history, NavigationTree navigationTree, PageLookup pageLookup, int limit) { - List entries = new ArrayList(); + List entries = new ArrayList<>(); for (GuideScreenHomeHistory.Entry historyEntry : history.snapshot()) { HomePageEntry entry = toEntry( pageLookup.guideByGuideId() @@ -199,10 +199,10 @@ private NavigationNode resolveNavigationNode(NavigationTree navigationTree, Muta } private PageLookup buildPageLookup() { - Map guideByPageId = new HashMap(); - Map guideByGuideId = new HashMap(); - Set ambiguousPageIds = new HashSet(); - List pages = new ArrayList(); + Map guideByPageId = new HashMap<>(); + Map guideByGuideId = new HashMap<>(); + Set ambiguousPageIds = new HashSet<>(); + List pages = new ArrayList<>(); for (MutableGuide guide : GuideRegistry.getAll()) { guideByGuideId.put(guide.getId(), guide); for (ParsedGuidePage page : guide.getPages()) { @@ -223,7 +223,7 @@ private List limit(List entries, int limit) { if (entries.size() <= limit) { return entries; } - return new ArrayList(entries.subList(0, limit)); + return new ArrayList<>(entries.subList(0, limit)); } public static class HomePageSections { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/home/HomePageSection.java b/src/main/java/com/hfstudio/guidenh/guide/internal/home/HomePageSection.java index 74796e09..09fa8633 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/home/HomePageSection.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/home/HomePageSection.java @@ -1,7 +1,5 @@ package com.hfstudio.guidenh.guide.internal.home; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class HomePageSection { @@ -21,7 +19,7 @@ public HomePageSection(Kind kind, String title, String emptyText, List(entries)); + this.entries = List.copyOf(entries); } public Kind kind() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/item/RegionWandItem.java b/src/main/java/com/hfstudio/guidenh/guide/internal/item/RegionWandItem.java index 1cc76319..a1920761 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/item/RegionWandItem.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/item/RegionWandItem.java @@ -4,7 +4,6 @@ import java.awt.datatransfer.StringSelection; import java.nio.file.Path; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -147,8 +146,7 @@ public static void setPos(ItemStack stack, int which, int x, int y, int z) { RegionWandSelection.setPos(which, x, y, z); } - @Nullable - public static int[] getPos(ItemStack stack, int which) { + public static int @Nullable [] getPos(ItemStack stack, int which) { return RegionWandSelection.getPos(which); } @@ -195,7 +193,6 @@ public static String exportSelectionAsStructureSnbt(World world, ItemStack stack if (GuideStructureVolume.exceedsLimit(dx, dy, dz, MAX_EXPORT_BLOCKS)) { return null; } - @SuppressWarnings("unchecked") List all = world.getEntitiesWithinAABBExcludingEntity( null, AxisAlignedBB.getBoundingBox(minX, minY, minZ, maxX + 1, maxY + 1, maxZ + 1)); @@ -316,9 +313,8 @@ public static void exportToClipboard(ItemStack stack, EntityPlayer player, World } RegionWandExportMode mode = getExportMode(); - List entities = Collections.emptyList(); + List entities = List.of(); if (mode.includeEntities()) { - @SuppressWarnings("unchecked") List all = world.getEntitiesWithinAABBExcludingEntity( null, AxisAlignedBB.getBoundingBox(minX, minY, minZ, maxX + 1, maxY + 1, maxZ + 1)); @@ -375,7 +371,7 @@ public static void exportToClipboard(ItemStack stack, EntityPlayer player, World } public static ExportResult exportBlocks(World world, int minX, int minY, int minZ, int maxX, int maxY, int maxZ) { - return exportBlocks(world, minX, minY, minZ, maxX, maxY, maxZ, Collections.emptyList()); + return exportBlocks(world, minX, minY, minZ, maxX, maxY, maxZ, List.of()); } public static ExportResult exportBlocks(World world, int minX, int minY, int minZ, int maxX, int maxY, int maxZ, @@ -528,7 +524,7 @@ public static ExportResult exportSnbt(World world, int minX, int minY, int minZ, public static ExportResult exportSnbt(StructureExportAccess access, int minX, int minY, int minZ, int maxX, int maxY, int maxZ, int dx, int dy, int dz) { - return exportSnbt(access, minX, minY, minZ, maxX, maxY, maxZ, dx, dy, dz, Collections.emptyList()); + return exportSnbt(access, minX, minY, minZ, maxX, maxY, maxZ, dx, dy, dz, List.of()); } private static ExportResult exportSnbt(StructureExportAccess access, int minX, int minY, int minZ, int maxX, @@ -545,7 +541,7 @@ private static ExportResult exportSnbt(StructureExportAccess access, int minX, i private static ExportPayload exportStructure(StructureExportAccess access, int minX, int minY, int minZ, int maxX, int maxY, int maxZ, int dx, int dy, int dz) { - return exportStructure(access, minX, minY, minZ, maxX, maxY, maxZ, dx, dy, dz, Collections.emptyList()); + return exportStructure(access, minX, minY, minZ, maxX, maxY, maxZ, dx, dy, dz, List.of()); } private static ExportPayload exportStructure(StructureExportAccess access, int minX, int minY, int minZ, int maxX, @@ -696,13 +692,12 @@ public static int[] floorBlockPosition(double x, double y, double z) { return new int[] { MathHelper.floor_double(x), MathHelper.floor_double(y), MathHelper.floor_double(z) }; } - @Nullable - public static int[] resolveLookingAtSelection(EntityPlayer player, World world, boolean selectBlockBody) { + public static int @Nullable [] resolveLookingAtSelection(EntityPlayer player, World world, + boolean selectBlockBody) { return resolveLookingAtSelection(player, world, selectBlockBody, DEFAULT_REACH_DISTANCE); } - @Nullable - public static int[] resolveLookingAtSelection(EntityPlayer player, World world, boolean selectBlockBody, + public static int @Nullable [] resolveLookingAtSelection(EntityPlayer player, World world, boolean selectBlockBody, double reachDistance) { if (player == null || world == null) { return null; diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/item/RegionWandSelection.java b/src/main/java/com/hfstudio/guidenh/guide/internal/item/RegionWandSelection.java index ea38024e..a9ae6247 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/item/RegionWandSelection.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/item/RegionWandSelection.java @@ -4,12 +4,10 @@ import com.github.bsideup.jabel.Desugar; -public final class RegionWandSelection { +public class RegionWandSelection { - @Nullable - private static int[] pos1; - @Nullable - private static int[] pos2; + private static int @Nullable [] pos1; + private static int @Nullable [] pos2; private RegionWandSelection() {} @@ -22,8 +20,7 @@ public static void setPos(int which, int x, int y, int z) { } } - @Nullable - public static int[] getPos(int which) { + public static int @Nullable [] getPos(int which) { int[] pos = which == 1 ? pos1 : which == 2 ? pos2 : null; if (pos == null) { return null; diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/localization/GuidePageLanguageIndex.java b/src/main/java/com/hfstudio/guidenh/guide/internal/localization/GuidePageLanguageIndex.java index 19535477..95fb9336 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/localization/GuidePageLanguageIndex.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/localization/GuidePageLanguageIndex.java @@ -4,7 +4,6 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.util.Collections; import java.util.Enumeration; import java.util.LinkedHashMap; import java.util.Map; @@ -51,7 +50,7 @@ public static boolean isPageLangKey(@Nullable String key) { public static Map readPageKeys(InputStream input) throws IOException { Map source = StringTranslate.parseLangFile(input); if (source.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } Map filtered = new LinkedHashMap<>(); @@ -61,7 +60,7 @@ public static Map readPageKeys(InputStream input) throws IOExcep filtered.put(key, entry.getValue()); } } - return filtered.isEmpty() ? Collections.emptyMap() : filtered; + return filtered.isEmpty() ? Map.of() : filtered; } private static Map loadLanguage(String normalizedLanguage) { @@ -81,7 +80,7 @@ private static Map loadLanguage(String normalizedLanguage) { activeResourcePacks.size(), totalNs); } - return merged.isEmpty() ? Collections.emptyMap() : Collections.unmodifiableMap(merged); + return merged.isEmpty() ? Map.of() : Map.copyOf(merged); } private static void loadResourcePackLanguage(IResourcePack resourcePack, String normalizedLanguage, diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/localization/GuideResourceLanguageIndex.java b/src/main/java/com/hfstudio/guidenh/guide/internal/localization/GuideResourceLanguageIndex.java index 1abbc676..6216c481 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/localization/GuideResourceLanguageIndex.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/localization/GuideResourceLanguageIndex.java @@ -4,7 +4,6 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; -import java.util.Collections; import java.util.Enumeration; import java.util.LinkedHashMap; import java.util.Map; @@ -59,7 +58,7 @@ private static Map load(String normalizedLanguage) { activeResourcePacks.size(), totalNs); } - return merged.isEmpty() ? Collections.emptyMap() : Collections.unmodifiableMap(merged); + return merged.isEmpty() ? Map.of() : Map.copyOf(merged); } private static void loadResourcePackLanguage(IResourcePack resourcePack, String normalizedLanguage, diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/CodeBlockLanguage.java b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/CodeBlockLanguage.java index 88ac9da3..c233b446 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/CodeBlockLanguage.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/CodeBlockLanguage.java @@ -1,6 +1,6 @@ package com.hfstudio.guidenh.guide.internal.markdown; -public final class CodeBlockLanguage { +public class CodeBlockLanguage { private final String id; private final String displayName; diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/CodeBlockLanguageRegistry.java b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/CodeBlockLanguageRegistry.java index 7a2ee1b8..c5f03567 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/CodeBlockLanguageRegistry.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/CodeBlockLanguageRegistry.java @@ -1,7 +1,5 @@ package com.hfstudio.guidenh.guide.internal.markdown; -import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.Locale; import java.util.Map; @@ -38,11 +36,12 @@ private static Map buildFenceMap() { register(result, new CodeBlockLanguage("markdown", "Markdown"), "markdown", "md"); register(result, new CodeBlockLanguage("csv", "CSV"), "csv"); register(result, new CodeBlockLanguage("mermaid", "Mermaid"), "mermaid"); - return Collections.unmodifiableMap(result); + return Map.copyOf(result); } private static void register(Map result, CodeBlockLanguage language, String... aliases) { - Arrays.stream(aliases) - .forEach(alias -> result.put(alias, language)); + for (String alias : aliases) { + result.put(alias, language); + } } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/FileTreeCompiler.java b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/FileTreeCompiler.java index 0e48dd41..ad21478b 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/FileTreeCompiler.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/FileTreeCompiler.java @@ -20,7 +20,7 @@ * as {@code }, {@code } or {@code } on individual rows. Optional per-row * icon directives are resolved here as well. */ -public final class FileTreeCompiler { +public class FileTreeCompiler { private FileTreeCompiler() {} diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/FileTreeParser.java b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/FileTreeParser.java index 1fdf4608..27a37903 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/FileTreeParser.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/FileTreeParser.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal.markdown; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -31,7 +30,7 @@ protected FileTreeParser() {} public static FileTreeModel parse(String source) { if (source == null || source.isEmpty()) { - return new FileTreeModel(Collections.emptyList()); + return new FileTreeModel(List.of()); } List entries = new ArrayList<>(); GuideStringLines.visitLines(source, (rawLine, lineIndex) -> { @@ -45,7 +44,7 @@ public static FileTreeModel parse(String source) { } return true; }); - return new FileTreeModel(Collections.unmodifiableList(entries)); + return new FileTreeModel(List.copyOf(entries)); } @Nullable @@ -77,8 +76,8 @@ private static FileTreeEntry parseLine(String line) { return null; } - boolean isLastSibling = !slots.isEmpty() && slots.get(slots.size() - 1) == SlotKind.LAST_BRANCH; - return new FileTreeEntry(Collections.unmodifiableList(slots), isLastSibling, payload, extraction.icon()); + boolean isLastSibling = !slots.isEmpty() && slots.getLast() == SlotKind.LAST_BRANCH; + return new FileTreeEntry(List.copyOf(slots), isLastSibling, payload, extraction.icon()); } @Nullable diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/FootnotePreprocessor.java b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/FootnotePreprocessor.java index 79998e69..0e6577ad 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/FootnotePreprocessor.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/FootnotePreprocessor.java @@ -16,7 +16,7 @@ public class FootnotePreprocessor { protected FootnotePreprocessor() {} public static String preprocess(String markdown) { - if (markdown == null || markdown.indexOf("[^") < 0) { + if (markdown == null || !markdown.contains("[^")) { return markdown; } @@ -40,7 +40,7 @@ public static String preprocess(String markdown) { while (i + 1 < lines.size()) { String next = lines.get(i + 1); if (next.startsWith(" ") || next.startsWith("\t")) { - if (definition.length() > 0) { + if (!definition.isEmpty()) { definition.append('\n'); } definition.append(trimDefinitionIndent(next)); @@ -70,10 +70,10 @@ public static String preprocess(String markdown) { StringBuilder result = new StringBuilder(transformedBody.length() + 64); result.append(transformedBody); - if (result.length() > 0 && result.charAt(result.length() - 1) != '\n') { + if (!result.isEmpty() && result.charAt(result.length() - 1) != '\n') { result.append('\n'); } - if (result.length() > 0) { + if (!result.isEmpty()) { result.append('\n'); } result.append("\n\n"); @@ -93,7 +93,7 @@ public static String preprocess(String markdown) { private static String replaceReferences(String body, Map definitions) { Matcher matcher = REFERENCE.matcher(body); - StringBuffer buffer = new StringBuffer(body.length()); + StringBuilder buffer = new StringBuilder(body.length()); int nextNumber = 1; Map numbers = new LinkedHashMap<>(); while (matcher.find()) { @@ -121,14 +121,14 @@ private static String trimDefinitionIndent(String line) { if (line.startsWith("\t")) { return line.substring(1); } - if (line.length() >= 4 && line.startsWith(" ")) { + if (line.startsWith(" ")) { return line.substring(4); } return line; } private static void appendLine(StringBuilder builder, String line) { - if (builder.length() > 0) { + if (!builder.isEmpty()) { builder.append('\n'); } builder.append(line); diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownHtmlRuntimeNormalizer.java b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownHtmlRuntimeNormalizer.java index f24c17ff..57821373 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownHtmlRuntimeNormalizer.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownHtmlRuntimeNormalizer.java @@ -23,7 +23,7 @@ import com.hfstudio.guidenh.libs.mdast.model.MdAstRoot; import com.hfstudio.guidenh.libs.mdast.model.MdAstText; -public final class MarkdownHtmlRuntimeNormalizer { +public class MarkdownHtmlRuntimeNormalizer { private static final Pattern SIMPLE_TAG_PATTERN = Pattern .compile("^<\\s*(/)?\\s*([A-Za-z][A-Za-z0-9:-]*)([^>]*)>$", Pattern.DOTALL); @@ -65,12 +65,12 @@ private static boolean isPhrasingParent(MdAstParent parent) { @SuppressWarnings("unchecked") private static List castPhrasingChildren(List children) { - return (List) (List) children; + return (List) children; } @SuppressWarnings("unchecked") private static List castAnyChildren(List children) { - return (List) (List) children; + return (List) children; } private static void normalizePhrasingChildren(List children) { @@ -86,12 +86,12 @@ private static void normalizePhrasingChildren(List childre String name = info.name(); if ("br".equals(name) && !info.closing()) { - children.set(i, createTextElement(info, new ArrayList())); + children.set(i, createTextElement(info, new ArrayList<>())); continue; } if ("a".equals(name) && !info.closing() && info.selfClosing()) { - children.set(i, createTextElement(info, new ArrayList())); + children.set(i, createTextElement(info, new ArrayList<>())); continue; } @@ -119,7 +119,7 @@ private static void normalizeFlowChildren(List children) { TagInfo info = parseSimpleTag(html.value); if (info != null && isSupportedStandaloneFlowTag(info)) { - children.set(i, createFlowElement(info, new ArrayList())); + children.set(i, createFlowElement(info, new ArrayList<>())); continue; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownLatexShorthand.java b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownLatexShorthand.java index 0546fca8..f412aede 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownLatexShorthand.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownLatexShorthand.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal.markdown; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -30,7 +29,7 @@ * (after trimming whitespace), the formula is rendered as a centred display block. Otherwise * each {@code $$formula$$} fragment is rendered as an inline block inside the surrounding text. */ -public final class MarkdownLatexShorthand { +public class MarkdownLatexShorthand { private static final String PLACEHOLDER_PREFIX = "\uE000GUIDENH_LATEX_"; private static final String PLACEHOLDER_SUFFIX = "_\uE001"; @@ -45,13 +44,13 @@ private MarkdownLatexShorthand() {} public static MaskResult mask(String source) { if (source == null) { - return new MaskResult("", Collections.emptyMap()); + return new MaskResult("", Map.of()); } if (!mayContain(source)) { - return new MaskResult(source, Collections.emptyMap()); + return new MaskResult(source, Map.of()); } Matcher matcher = DOLLAR_PATTERN.matcher(source); - StringBuffer masked = new StringBuffer(source.length()); + StringBuilder masked = new StringBuilder(source.length()); Map formulas = new HashMap<>(); int index = 0; while (matcher.find()) { @@ -109,7 +108,7 @@ public static String extractSoleDisplayFormula(String text) { */ public static List split(String text) { if (text == null || text.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List result = new ArrayList<>(); Matcher m = DOLLAR_PATTERN.matcher(text); @@ -180,7 +179,7 @@ private static void restoreAttribute(MdxJsxAttribute attribute, MaskResult maskR public record MaskResult(String source, Map formulas) { public MaskResult { - formulas = formulas == null ? Collections.emptyMap() : Collections.unmodifiableMap(new HashMap<>(formulas)); + formulas = formulas == null ? Map.of() : Map.copyOf(new HashMap<>(formulas)); } public boolean isEmpty() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownListSemantics.java b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownListSemantics.java index b7a7f049..b8186566 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownListSemantics.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownListSemantics.java @@ -11,7 +11,7 @@ import com.hfstudio.guidenh.libs.mdast.model.MdAstParagraph; import com.hfstudio.guidenh.libs.mdast.model.MdAstText; -public final class MarkdownListSemantics { +public class MarkdownListSemantics { private static final Pattern TASK_PATTERN = Pattern.compile("^\\[( |x|X)]\\s+(.*)$"); diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownLiteralAutolink.java b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownLiteralAutolink.java index fd7d885c..4c980bfc 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownLiteralAutolink.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownLiteralAutolink.java @@ -2,14 +2,13 @@ import java.net.URI; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.jetbrains.annotations.Nullable; -public final class MarkdownLiteralAutolink { +public class MarkdownLiteralAutolink { private static final Pattern LITERAL_LINK = Pattern.compile( "(?i)(?:(?:https://|http://)[^\\s<>()]+|(?:www\\.)[^\\s<>()]+|(?:[a-z0-9._%+-]+@[a-z0-9.-]+\\.[a-z]{2,}))"); @@ -25,7 +24,7 @@ public static boolean mayContainLiteralAutolink(@Nullable String text) { public static List split(@Nullable String text) { if (text == null || text.isEmpty()) { - return Collections.emptyList(); + return List.of(); } Matcher matcher = LITERAL_LINK.matcher(text); diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownRuntimeBlocks.java b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownRuntimeBlocks.java index 2177612c..37764588 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownRuntimeBlocks.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/markdown/MarkdownRuntimeBlocks.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal.markdown; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -15,7 +14,7 @@ import com.hfstudio.guidenh.libs.mdast.model.MdAstParagraph; import com.hfstudio.guidenh.libs.mdast.model.MdAstText; -public final class MarkdownRuntimeBlocks { +public class MarkdownRuntimeBlocks { private MarkdownRuntimeBlocks() {} @@ -142,7 +141,7 @@ private static String trimLeadingDirectiveText(String text, int startIndex) { private static List splitTokens(String expression) { if (expression == null || expression.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List tokens = new ArrayList<>(); StringBuilder current = new StringBuilder(); @@ -162,7 +161,7 @@ private static List splitTokens(String expression) { continue; } if (Character.isWhitespace(ch) && !inQuotes) { - if (current.length() > 0) { + if (!current.isEmpty()) { tokens.add(current.toString()); current.setLength(0); } @@ -170,7 +169,7 @@ private static List splitTokens(String expression) { } current.append(ch); } - if (current.length() > 0) { + if (!current.isEmpty()) { tokens.add(current.toString()); } return tokens; @@ -189,7 +188,7 @@ private static String stripOptionalQuotes(String value) { private static @Nullable ColorValue parseColor(String value) { String normalized = value != null ? value.trim() : ""; - if (normalized.isEmpty() || !normalized.startsWith("#")) { + if (!normalized.startsWith("#")) { return null; } try { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/mermaid/MermaidMindmapNode.java b/src/main/java/com/hfstudio/guidenh/guide/internal/mermaid/MermaidMindmapNode.java index 1ec4d988..55e66b47 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/mermaid/MermaidMindmapNode.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/mermaid/MermaidMindmapNode.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal.mermaid; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -27,8 +26,7 @@ public MermaidMindmapNode(String id, String labelSource, String text, MermaidMin this.labelSource = labelSource != null ? labelSource : ""; this.text = text != null ? text : ""; this.shape = shape != null ? shape : MermaidMindmapNodeShape.DEFAULT; - this.classes = Collections - .unmodifiableList(new ArrayList<>(classes != null ? classes : Collections.emptyList())); + this.classes = List.copyOf(new ArrayList<>(classes != null ? classes : List.of())); this.icon = icon != null && !icon.trim() .isEmpty() ? icon.trim() : null; this.x = x; @@ -68,7 +66,7 @@ public List getClasses() { } public List getChildren() { - return Collections.unmodifiableList(children); + return List.copyOf(children); } public void addChild(MermaidMindmapNode child) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/mermaid/MermaidMindmapNodeContentExtractor.java b/src/main/java/com/hfstudio/guidenh/guide/internal/mermaid/MermaidMindmapNodeContentExtractor.java index 864babd1..5c921499 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/mermaid/MermaidMindmapNodeContentExtractor.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/mermaid/MermaidMindmapNodeContentExtractor.java @@ -258,7 +258,7 @@ private static String dedentBlockTagBody(String body) { result.append(removeLeadingWhitespace(lines.get(index), minIndent)); } - while (result.length() > 0 && result.charAt(result.length() - 1) == '\n') { + while (!result.isEmpty() && result.charAt(result.length() - 1) == '\n') { result.setLength(result.length() - 1); } return result.toString(); diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/mermaid/MermaidMindmapParser.java b/src/main/java/com/hfstudio/guidenh/guide/internal/mermaid/MermaidMindmapParser.java index 3773b39a..abe442ca 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/mermaid/MermaidMindmapParser.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/mermaid/MermaidMindmapParser.java @@ -324,7 +324,7 @@ private static String toSlugId(String label) { previousDash = true; } } - if (builder.length() > 0 && builder.charAt(builder.length() - 1) == '-') { + if (!builder.isEmpty() && builder.charAt(builder.length() - 1) == '-') { builder.setLength(builder.length() - 1); } return builder.toString(); diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/recipe/RecipeCache.java b/src/main/java/com/hfstudio/guidenh/guide/internal/recipe/RecipeCache.java index 11f89f7f..5cdb7bbd 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/recipe/RecipeCache.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/recipe/RecipeCache.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal.recipe; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -27,13 +26,13 @@ public class RecipeCache { private RecipeCache() {} public static synchronized List getCraftingHandlers(ItemStack target) { - if (target == null) return Collections.emptyList(); + if (target == null) return List.of(); Key key = Key.of(target); List cached = HANDLERS.get(key); if (cached != null) return cached; List fresh = GuideNhIntegrationRegistry.global() .queryRawCraftingHandlers(target); - List stored = fresh.isEmpty() ? Collections.emptyList() : new ArrayList<>(fresh); + List stored = fresh.isEmpty() ? List.of() : new ArrayList<>(fresh); HANDLERS.put(key, stored); return stored; } @@ -43,13 +42,13 @@ public static synchronized List getCraftingHandlers(ItemStack target) { * (anvil / fuel / brewing ingredient) and thus do not appear in the crafting-handler list. */ public static synchronized List getUsageHandlers(ItemStack target) { - if (target == null) return Collections.emptyList(); + if (target == null) return List.of(); Key key = Key.of(target); List cached = USAGE_HANDLERS.get(key); if (cached != null) return cached; List fresh = GuideNhIntegrationRegistry.global() .queryRawUsageHandlers(target); - List stored = fresh.isEmpty() ? Collections.emptyList() : new ArrayList<>(fresh); + List stored = fresh.isEmpty() ? List.of() : new ArrayList<>(fresh); USAGE_HANDLERS.put(key, stored); return stored; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/recipe/RecipeLookup.java b/src/main/java/com/hfstudio/guidenh/guide/internal/recipe/RecipeLookup.java index c26b204f..732d15ed 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/recipe/RecipeLookup.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/recipe/RecipeLookup.java @@ -1,8 +1,6 @@ package com.hfstudio.guidenh.guide.internal.recipe; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.List; import net.minecraft.item.Item; @@ -32,7 +30,7 @@ public static class Entry { } public static List findByOutput(Item target) { - if (target == null) return Collections.emptyList(); + if (target == null) return List.of(); List out = new ArrayList<>(); List list = CraftingManager.getInstance() .getRecipeList(); @@ -143,6 +141,6 @@ public static ItemStack copy(@Nullable ItemStack s) { } public static List asList(Entry e) { - return Arrays.asList(e.input3x3); + return List.of(e.input3x3); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/scene/GuidebookPreviewPlayerCompat.java b/src/main/java/com/hfstudio/guidenh/guide/internal/scene/GuidebookPreviewPlayerCompat.java index d8ca0862..8ceab44b 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/scene/GuidebookPreviewPlayerCompat.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/scene/GuidebookPreviewPlayerCompat.java @@ -22,7 +22,7 @@ import cpw.mods.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) -public final class GuidebookPreviewPlayerCompat { +public class GuidebookPreviewPlayerCompat { private static final String TEXTURES_PROPERTY_NAME = "textures"; private static final String SLIM_MODEL_NAME = "slim"; diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/screen/GuideNavBarState.java b/src/main/java/com/hfstudio/guidenh/guide/internal/screen/GuideNavBarState.java index f92dcb0e..64f5748c 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/screen/GuideNavBarState.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/screen/GuideNavBarState.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.internal.screen; -import java.util.Collections; import java.util.LinkedHashSet; import java.util.Objects; import java.util.Set; @@ -9,14 +8,14 @@ public class GuideNavBarState { - private static final GuideNavBarState DEFAULT_STATE = new GuideNavBarState(true, Collections.emptySet()); + private static final GuideNavBarState DEFAULT_STATE = new GuideNavBarState(true, Set.of()); private final boolean bookmarkGroupExpanded; private final Set expandedPageIds; public GuideNavBarState(boolean bookmarkGroupExpanded, Set expandedPageIds) { this.bookmarkGroupExpanded = bookmarkGroupExpanded; - this.expandedPageIds = Collections.unmodifiableSet( + this.expandedPageIds = Set.copyOf( expandedPageIds == null ? new LinkedHashSet() : new LinkedHashSet(expandedPageIds)); } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/screen/GuideNavProjection.java b/src/main/java/com/hfstudio/guidenh/guide/internal/screen/GuideNavProjection.java index a32e1844..fe1459c8 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/screen/GuideNavProjection.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/screen/GuideNavProjection.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal.screen; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.List; @@ -145,7 +144,7 @@ public boolean hasPage() { public ProjectionResult project(@Nullable NavigationTree tree, GuideBookmarkState bookmarkState, Set expandedTreePageIds, boolean bookmarkGroupExpanded) { if (tree == null) { - return new ProjectionResult(Collections.emptyList()); + return new ProjectionResult(List.of()); } var rows = new ArrayList(); @@ -201,7 +200,7 @@ private void collectPageIds(NavigationNode node, Set validPage private List buildBookmarkRows(NavigationTree tree, GuideBookmarkState bookmarkState) { if (bookmarkState.isEmpty()) { - return Collections.emptyList(); + return List.of(); } var rows = new ArrayList(); for (ResourceLocation bookmarkId : bookmarkState.getBookmarksView()) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/search/Analyzers.java b/src/main/java/com/hfstudio/guidenh/guide/internal/search/Analyzers.java index 46aa6c34..1aac253f 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/search/Analyzers.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/search/Analyzers.java @@ -1,7 +1,5 @@ package com.hfstudio.guidenh.guide.internal.search; -import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -65,7 +63,7 @@ private Analyzers() {} public static final String LANG_SWEDISH = "sw"; public static final String LANG_TURKISH = "tr"; - public static final List LANGUAGES = Arrays.asList( + public static final List LANGUAGES = List.of( LANG_ARABIC, LANG_BRAZILIAN, LANG_BULGARIAN, @@ -127,7 +125,7 @@ private Analyzers() {} map.put(LANG_SPANISH, SpanishAnalyzer::new); map.put(LANG_SWEDISH, SwedishAnalyzer::new); map.put(LANG_TURKISH, TurkishAnalyzer::new); - ANALYZERS = Collections.unmodifiableMap(new HashMap<>(map)); + ANALYZERS = Map.copyOf(new HashMap<>(map)); var langMap = new HashMap(); langMap.put("ar_sa", LANG_ARABIC); @@ -159,6 +157,6 @@ private Analyzers() {} langMap.put("ru_ru", LANG_RUSSIAN); langMap.put("sv_se", LANG_SWEDISH); langMap.put("tr_tr", LANG_TURKISH); - MINECRAFT_TO_LUCENE_LANG = Collections.unmodifiableMap(new HashMap<>(langMap)); + MINECRAFT_TO_LUCENE_LANG = Map.copyOf(new HashMap<>(langMap)); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/search/GuideSearch.java b/src/main/java/com/hfstudio/guidenh/guide/internal/search/GuideSearch.java index 718d72af..28c97d97 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/search/GuideSearch.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/search/GuideSearch.java @@ -224,7 +224,7 @@ private void refreshIndexReader() throws IOException { public List searchGuide(String queryText, @Nullable Guide onlyFromGuide) { if (queryText.isEmpty()) { - return Collections.emptyList(); + return List.of(); } if (!pendingTasks.isEmpty()) { @@ -240,7 +240,7 @@ public List searchGuide(String queryText, @Nullable Guide onlyFrom } catch (Exception e) { FMLLog.getLogger() .debug("[GuideNH] [GuideSearch] Failed to parse search query: '{}'", queryText, e); - return Collections.emptyList(); + return List.of(); } // Add an exact guide filter without changing the parsed query. @@ -265,7 +265,7 @@ public List searchGuide(String queryText, @Nullable Guide onlyFrom } catch (IOException e) { FMLLog.getLogger() .error("[GuideNH] [GuideSearch] Failed to search for '{}'", queryText, e); - return Collections.emptyList(); + return List.of(); } var result = new ArrayList(topDocs.scoreDocs.length); diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/structure/GuideNhStructureExportAccess.java b/src/main/java/com/hfstudio/guidenh/guide/internal/structure/GuideNhStructureExportAccess.java index 6ea2634a..42d7e92d 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/structure/GuideNhStructureExportAccess.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/structure/GuideNhStructureExportAccess.java @@ -6,7 +6,7 @@ import cpw.mods.fml.common.FMLCommonHandler; -public final class GuideNhStructureExportAccess { +public class GuideNhStructureExportAccess { private GuideNhStructureExportAccess() {} diff --git a/src/main/java/com/hfstudio/guidenh/guide/internal/tooltip/AppendedItemTooltip.java b/src/main/java/com/hfstudio/guidenh/guide/internal/tooltip/AppendedItemTooltip.java index 84dbabc0..08233d52 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/internal/tooltip/AppendedItemTooltip.java +++ b/src/main/java/com/hfstudio/guidenh/guide/internal/tooltip/AppendedItemTooltip.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.internal.tooltip; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.item.ItemStack; @@ -16,9 +15,9 @@ public class AppendedItemTooltip extends ItemTooltip implements ItemTooltipAppen public AppendedItemTooltip(ItemStack stack, List extraLines) { super(stack); if (extraLines == null || extraLines.isEmpty()) { - this.extraLines = Collections.emptyList(); + this.extraLines = List.of(); } else { - this.extraLines = Collections.unmodifiableList(new ArrayList<>(extraLines)); + this.extraLines = List.copyOf(new ArrayList<>(extraLines)); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/layout/flow/LineBuilder.java b/src/main/java/com/hfstudio/guidenh/guide/layout/flow/LineBuilder.java index b4c86a29..d3ee77d1 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/layout/flow/LineBuilder.java +++ b/src/main/java/com/hfstudio/guidenh/guide/layout/flow/LineBuilder.java @@ -25,7 +25,7 @@ * ... */ -class LineBuilder implements Consumer { +public class LineBuilder implements Consumer { private static final ThreadLocal LINE_BREAK_ITERATOR = ThreadLocal .withInitial(BreakIterator::getLineInstance); diff --git a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiCategoryParser.java b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiCategoryParser.java index 17de97f7..36f7479f 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiCategoryParser.java +++ b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiCategoryParser.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.mediawiki; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; @@ -22,13 +21,13 @@ public static List parseReferences(ParsedGuidePage p .additionalProperties() .get(FRONTMATTER_KEY); if (categoriesNode == null) { - return Collections.emptyList(); + return List.of(); } List categoryList = normalizeEntries(page, categoriesNode); if (categoryList == null) { warnMalformedCategories(page, "contains malformed categories frontmatter"); - return Collections.emptyList(); + return List.of(); } Map categories = new LinkedHashMap<>(categoryList.size()); @@ -49,9 +48,9 @@ private static List normalizeEntries(ParsedGuidePage page, Object categoriesN String trimmed = categoryEntry.trim(); if (trimmed.isEmpty()) { warnMalformedCategories(page, "contains an empty categories frontmatter entry"); - return Collections.emptyList(); + return List.of(); } - return Collections.singletonList(trimmed); + return List.of(trimmed); } return null; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiGuideAggregator.java b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiGuideAggregator.java index df9e600f..050bb648 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiGuideAggregator.java +++ b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiGuideAggregator.java @@ -44,14 +44,14 @@ private MediaWikiGuideAggregator(Guide primaryGuide, Map ownerGuidesByPageId, List componentGuides, NavigationTree navigationTree, CategoryIndex categoryIndex) { this.primaryGuide = primaryGuide; - this.parsedPagesById = Collections.unmodifiableMap(new LinkedHashMap<>(parsedPagesById)); - this.ownerGuidesByPageId = Collections.unmodifiableMap(new LinkedHashMap<>(ownerGuidesByPageId)); - this.componentGuides = Collections.unmodifiableList(new ArrayList<>(componentGuides)); + this.parsedPagesById = Map.copyOf(new LinkedHashMap<>(parsedPagesById)); + this.ownerGuidesByPageId = Map.copyOf(new LinkedHashMap<>(ownerGuidesByPageId)); + this.componentGuides = List.copyOf(new ArrayList<>(componentGuides)); this.navigationTree = navigationTree != null ? navigationTree : new NavigationTree(); this.categoryIndex = categoryIndex; LinkedHashMap, PageIndex> overrides = new LinkedHashMap<>(); overrides.put(CategoryIndex.class, categoryIndex); - this.indexOverrides = Collections.unmodifiableMap(overrides); + this.indexOverrides = Map.copyOf(overrides); } public static MediaWikiGuideAggregator create(Guide primaryGuide) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiListContext.java b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiListContext.java index 5e9f2386..523f732d 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiListContext.java +++ b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiListContext.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.mediawiki; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; import java.util.Objects; @@ -21,7 +20,7 @@ public record MediaWikiListContext(Guide guide, Map parsedPagesById, NavigationTree navigationTree, CategoryIndex categoryIndex, MediaWikiSpecialDataIndex specialDataIndex) { - private static final Set EMPTY_PAGE_IDS = Collections.emptySet(); + private static final Set EMPTY_PAGE_IDS = Set.of(); public MediaWikiListContext { Objects.requireNonNull(guide, "guide"); @@ -29,7 +28,7 @@ public record MediaWikiListContext(Guide guide, Map(parsedPagesById)); + parsedPagesById = Map.copyOf(new LinkedHashMap<>(parsedPagesById)); } public static MediaWikiListContext create(Guide guide, Collection pages, diff --git a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiPageIds.java b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiPageIds.java index d30a96d3..c312b77b 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiPageIds.java +++ b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiPageIds.java @@ -5,6 +5,8 @@ import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.Nullable; + public class MediaWikiPageIds { public static final String CATEGORY_TITLE_PREFIX = "Category:"; @@ -66,6 +68,26 @@ public static String toSpecialTitle(String specialName) { return SPECIAL_TITLE_PREFIX + specialName; } + public static @Nullable ResourceLocation tryResolveSyntheticTitle(String namespace, @Nullable String title) { + if (namespace == null || namespace.trim() + .isEmpty() || title == null) { + return null; + } + String trimmedTitle = title.trim(); + if (trimmedTitle.startsWith(CATEGORY_TITLE_PREFIX)) { + String categoryName = trimmedTitle.substring(CATEGORY_TITLE_PREFIX.length()) + .trim(); + return categoryName.isEmpty() ? null : categoryPageId(namespace, categoryName); + } + if (trimmedTitle.startsWith(SPECIAL_TITLE_PREFIX)) { + String specialName = trimmedTitle.substring(SPECIAL_TITLE_PREFIX.length()) + .trim(); + MediaWikiSpecialDefinition definition = MediaWikiSpecialCatalog.findByName(specialName); + return definition != null ? specialPageId(namespace, definition.name()) : null; + } + return null; + } + private static String encodeName(String value) { String trimmed = value == null ? "" : value.trim(); StringBuilder builder = new StringBuilder(trimmed.length() + 24); diff --git a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialCatalog.java b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialCatalog.java index edbb7b60..5d559935 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialCatalog.java +++ b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialCatalog.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.mediawiki; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -22,7 +21,7 @@ public class MediaWikiSpecialCatalog { groups.add(new MediaWikiSpecialGroup("developer", "guidenh.mediawiki.special.group.developer", 3)); groups.add(new MediaWikiSpecialGroup("translation", "guidenh.mediawiki.special.group.translation", 4)); groups.add(new MediaWikiSpecialGroup("other", "guidenh.mediawiki.special.group.other", 5)); - GROUPS = Collections.unmodifiableList(groups); + GROUPS = List.copyOf(groups); ArrayList definitions = new ArrayList<>(); definitions.add( @@ -211,7 +210,7 @@ public class MediaWikiSpecialCatalog { "other", MediaWikiSpecialPageKind.FLAT)); - DEFINITIONS = Collections.unmodifiableList(definitions); + DEFINITIONS = List.copyOf(definitions); } private MediaWikiSpecialCatalog() {} diff --git a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialContributors.java b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialContributors.java index bf144dd9..799c10c3 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialContributors.java +++ b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialContributors.java @@ -4,7 +4,6 @@ import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.client.Minecraft; @@ -32,13 +31,13 @@ public List load(Guide guide) { } byte[] data = loadContributorsBytes(); if (data == null || data.length == 0) { - return Collections.emptyList(); + return List.of(); } List contributors = GSON .fromJson(new String(data, StandardCharsets.UTF_8), new TypeToken>() {}.getType()); if (contributors == null || contributors.isEmpty()) { - return Collections.emptyList(); + return List.of(); } ArrayList sanitized = new ArrayList<>(contributors.size()); @@ -51,7 +50,7 @@ public List load(Guide guide) { } sanitized.add(contributor); } - List immutable = Collections.unmodifiableList(sanitized); + List immutable = List.copyOf(sanitized); cachedContributors = immutable; return immutable; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialDataIndexer.java b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialDataIndexer.java index efa2dce7..a589d400 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialDataIndexer.java +++ b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialDataIndexer.java @@ -5,7 +5,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -86,17 +85,17 @@ public MediaWikiSpecialDataIndex build(Guide guide, Collection long metadataElapsedNanos = System.nanoTime() - metadataStartNanos; MediaWikiSpecialDataIndex dataIndex = new MediaWikiSpecialDataIndex( - Collections.unmodifiableMap(normalPages), - Collections.unmodifiableMap(translations), - Collections.unmodifiableMap(pageProperties), - Collections.unmodifiableMap(externalLinks), - Collections.unmodifiableMap(pageSizes), - Collections.unmodifiableMap(assetSizesById), - Collections.unmodifiableMap(fileUsageByPath), - Collections.unmodifiableMap(lintIssues), - Collections.unmodifiableMap(ambiguousBindings), - Collections.unmodifiableMap(overrides), - Collections.unmodifiableSet(unusedFiles)); + Map.copyOf(normalPages), + Map.copyOf(translations), + Map.copyOf(pageProperties), + Map.copyOf(externalLinks), + Map.copyOf(pageSizes), + Map.copyOf(assetSizesById), + Map.copyOf(fileUsageByPath), + Map.copyOf(lintIssues), + Map.copyOf(ambiguousBindings), + Map.copyOf(overrides), + Set.copyOf(unusedFiles)); long totalElapsedNanos = System.nanoTime() - totalStartNanos; FMLLog.getLogger() .info( @@ -290,7 +289,7 @@ private Map> buildLintIssues(G if (page != null && page.hasParseFailure()) { issues.put( page.getId(), - Collections.singletonList( + List.of( new MediaWikiSpecialLintIssue( page.getParseFailureMessage(), resolveLineNumber(page.getParseFailureFrom())))); @@ -409,7 +408,7 @@ private List resolveGuides(Guide guide) { if (guide instanceof MediaWikiGuideAggregator aggregator) { return new ArrayList(aggregator.getComponentGuides()); } - return Collections.singletonList(guide); + return List.of(guide); } private Guide resolveOwnerGuide(Guide guide, ParsedGuidePage page) { @@ -533,7 +532,7 @@ private void appendQuestBindings(Map> bindings, P private List readStringValues(ParsedGuidePage page, String... keys) { if (page.getFrontmatter() == null || keys == null || keys.length == 0) { - return Collections.emptyList(); + return List.of(); } LinkedHashSet result = new LinkedHashSet<>(); for (String key : keys) { @@ -558,7 +557,7 @@ private List readStringValues(ParsedGuidePage page, String... keys) { result.add(text.trim()); } } - return result.isEmpty() ? Collections.emptyList() : new ArrayList<>(result); + return result.isEmpty() ? List.of() : new ArrayList<>(result); } private @Nullable ResourceLocation tryResolveAssetId(ParsedGuidePage page, String rawPath) { @@ -624,17 +623,17 @@ private void appendLintIssue(Map resolveAssetTargets(@Nullable ResourceLocation referenceAssetId, Map> assetVariantsByReference) { if (referenceAssetId == null || assetVariantsByReference == null) { - return Collections.emptySet(); + return Set.of(); } Set matches = assetVariantsByReference.get(referenceAssetId); - return matches != null ? matches : Collections.emptySet(); + return matches != null ? matches : Set.of(); } private List collectAssetReferences(ParsedGuidePage page) { if (page == null || page.getSource() == null || page.getSource() .isEmpty()) { - return Collections.emptyList(); + return List.of(); } ArrayList references = new ArrayList<>(); LinkedHashSet seen = new LinkedHashSet<>(); diff --git a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialGeneratedBlock.java b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialGeneratedBlock.java index 954b99c8..f6b3a467 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialGeneratedBlock.java +++ b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialGeneratedBlock.java @@ -2,7 +2,6 @@ import java.net.URI; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -125,7 +124,7 @@ public void setResolverContext(MediaWikiListContext listContext, MediaWikiSpecia this.resolver = resolver; this.queryParameters = queryParameters != null && !queryParameters.isEmpty() ? new LinkedHashMap<>(queryParameters) - : Collections.emptyMap(); + : Map.of(); } public void setRows(int rows) { @@ -173,7 +172,7 @@ private void refreshResolverBackedResult(String queryText) { MediaWikiSpecialPageQuery query = new MediaWikiSpecialPageQuery( queryText != null ? queryText : "", Integer.MAX_VALUE, - queryParameters != null ? queryParameters : Collections.emptyMap()); + queryParameters != null ? queryParameters : Map.of()); MediaWikiSpecialPageResult refreshed = resolver.resolve(listContext, definition, query); if (refreshed != null) { result = refreshed; @@ -555,10 +554,10 @@ private List> layoutFlatColumns(MediaWikiSpecialPageResult vis columns.add(new ArrayList()); } List entries = visibleResult.flatEntries() != null ? visibleResult.flatEntries() - : Collections.emptyList(); + : List.of(); if (entries.isEmpty()) { columns.get(0) - .add(new GroupLayout(null, Collections.emptyList())); + .add(new GroupLayout(null, List.of())); return columns; } int perColumn = Math.max(1, (entries.size() + columnCount - 1) / columnCount); @@ -579,17 +578,12 @@ private List buildGroups(MediaWikiSpecialPageResult visibleResult) if (visibleResult.kind() == MediaWikiSpecialPageKind.GROUPED || visibleResult.kind() == MediaWikiSpecialPageKind.GROUP_INDEX) { for (MediaWikiSpecialGroupedEntry group : visibleResult.groupedEntries()) { - groups.add( - new GroupLayout( - group.title(), - group.children() != null ? group.children() : Collections.emptyList())); + groups.add(new GroupLayout(group.title(), group.children() != null ? group.children() : List.of())); } return groups; } - groups.add( - new GroupLayout( - null, - visibleResult.flatEntries() != null ? visibleResult.flatEntries() : Collections.emptyList())); + groups + .add(new GroupLayout(null, visibleResult.flatEntries() != null ? visibleResult.flatEntries() : List.of())); return groups; } @@ -785,7 +779,7 @@ private int computeTextMaxWidth(int columnWidth, boolean hasIcon) { private List wrapLines(LayoutContext context, @Nullable String text, int maxWidth, ResolvedTextStyle style) { if (text == null || text.isEmpty()) { - return Collections.emptyList(); + return List.of(); } ArrayList lines = new ArrayList<>(); for (String rawLine : GuideStringLines.splitLines(text)) { @@ -797,7 +791,7 @@ private List wrapLines(LayoutContext context, @Nullable String text, int private List wrapLines(RenderContext context, @Nullable String text, int maxWidth, ResolvedTextStyle style) { if (text == null || text.isEmpty()) { - return Collections.emptyList(); + return List.of(); } ArrayList lines = new ArrayList<>(); for (String rawLine : GuideStringLines.splitLines(text)) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialPageModels.java b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialPageModels.java index 549fe629..1fc39535 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialPageModels.java +++ b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialPageModels.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.mediawiki; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.util.ResourceLocation; @@ -16,13 +15,7 @@ public class MediaWikiSpecialPageModels { private MediaWikiSpecialPageModels() {} public static MediaWikiSpecialPageResult empty(MediaWikiSpecialDefinition definition) { - return new MediaWikiSpecialPageResult( - definition, - definition.kind(), - Collections.emptyList(), - Collections.emptyList(), - false, - true); + return new MediaWikiSpecialPageResult(definition, definition.kind(), List.of(), List.of(), false, true); } public static MediaWikiSpecialPageResult grid(MediaWikiSpecialDefinition definition, @@ -33,7 +26,7 @@ public static MediaWikiSpecialPageResult grid(MediaWikiSpecialDefinition definit definition, MediaWikiSpecialPageKind.GRID, MediaWikiSpecialSearchSupport.limit(filtered, query.visibleCount()), - Collections.emptyList(), + List.of(), MediaWikiSpecialSearchSupport.hasMore(filtered, query.visibleCount()), true); } @@ -46,7 +39,7 @@ public static MediaWikiSpecialPageResult flat(MediaWikiSpecialDefinition definit definition, MediaWikiSpecialPageKind.FLAT, MediaWikiSpecialSearchSupport.limit(filtered, query.visibleCount()), - Collections.emptyList(), + List.of(), MediaWikiSpecialSearchSupport.hasMore(filtered, query.visibleCount()), true); } @@ -58,7 +51,7 @@ public static MediaWikiSpecialPageResult grouped(MediaWikiSpecialDefinition defi return new MediaWikiSpecialPageResult( definition, MediaWikiSpecialPageKind.GROUPED, - Collections.emptyList(), + List.of(), MediaWikiSpecialSearchSupport.limit(filtered, query.visibleCount()), MediaWikiSpecialSearchSupport.hasMore(filtered, query.visibleCount()), true); @@ -68,8 +61,8 @@ public static MediaWikiSpecialPageResult info(MediaWikiSpecialDefinition definit return new MediaWikiSpecialPageResult( definition, definition.kind(), - Collections.singletonList(new MediaWikiSpecialListEntry(message, "", message, null, null)), - Collections.emptyList(), + List.of(new MediaWikiSpecialListEntry(message, "", message, null, null)), + List.of(), false, false); } @@ -79,7 +72,7 @@ public static MediaWikiSpecialPageResult groupIndex(MediaWikiSpecialDefinition d return new MediaWikiSpecialPageResult( definition, MediaWikiSpecialPageKind.GROUP_INDEX, - Collections.emptyList(), + List.of(), groupedEntries, false, true); diff --git a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialPageQuery.java b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialPageQuery.java index 5a74bf82..36efb15b 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialPageQuery.java +++ b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialPageQuery.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.mediawiki; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; @@ -17,13 +16,13 @@ public record MediaWikiSpecialPageQuery(String searchText, int visibleCount, Map public static final MediaWikiSpecialPageQuery UNLIMITED = new MediaWikiSpecialPageQuery("", Integer.MAX_VALUE); public MediaWikiSpecialPageQuery(String searchText, int visibleCount) { - this(searchText, visibleCount, Collections.emptyMap()); + this(searchText, visibleCount, Map.of()); } public MediaWikiSpecialPageQuery { searchText = searchText != null ? searchText : ""; - parameters = parameters == null || parameters.isEmpty() ? Collections.emptyMap() - : Collections.unmodifiableMap(new LinkedHashMap<>(parameters)); + parameters = parameters == null || parameters.isEmpty() ? Map.of() + : Map.copyOf(new LinkedHashMap<>(parameters)); } public MediaWikiSpecialPageQuery loadMore() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialPageResolver.java b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialPageResolver.java index ff4f35a2..78a18b7b 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialPageResolver.java +++ b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialPageResolver.java @@ -3,7 +3,6 @@ import java.text.DecimalFormat; import java.text.DecimalFormatSymbols; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.HashSet; import java.util.LinkedHashMap; @@ -723,7 +722,7 @@ private List buildPageTranslationGroups(MediaWikiL MediaWikiSpecialPageQuery query) { String pageSelector = firstNonBlank(query.parameter(MediaWikiSpecialPageQuery.PARAM_PAGE), query.searchText()); if (pageSelector == null) { - return Collections.emptyList(); + return List.of(); } String normalizedSelector = MediaWikiSpecialSearchSupport.normalize(pageSelector); MediaWikiTranslationStats.TranslationSnapshot snapshot = MediaWikiTranslationStats.scan(context.guide()); @@ -846,12 +845,7 @@ private List buildLanguageStatisticsGroups(MediaWi entries)); } if (groups.isEmpty()) { - groups.add( - new MediaWikiSpecialGroupedEntry( - GuidebookText.MediaWikiNoPages.text(), - "", - "", - Collections.emptyList())); + groups.add(new MediaWikiSpecialGroupedEntry(GuidebookText.MediaWikiNoPages.text(), "", "", List.of())); } return groups; } @@ -1169,7 +1163,7 @@ private ArrayList buildFastTranslationVariantEntries( LinkedHashMap entriesByLanguage = new LinkedHashMap<>(); for (ResourceLocation variantId : context.specialDataIndex() .translationsBySourcePage() - .getOrDefault(sourcePageId, Collections.emptyList())) { + .getOrDefault(sourcePageId, List.of())) { ParsedGuidePage variant = context.specialDataIndex() .normalPagesById() .get(variantId); @@ -1208,7 +1202,7 @@ private List loadTranslationVariants(MediaWikiListContext conte LinkedHashMap pagesByLanguage = new LinkedHashMap<>(); for (ResourceLocation variantId : context.specialDataIndex() .translationsBySourcePage() - .getOrDefault(sourcePageId, Collections.emptyList())) { + .getOrDefault(sourcePageId, List.of())) { ParsedGuidePage variant = context.specialDataIndex() .normalPagesById() .get(variantId); diff --git a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialSearchSupport.java b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialSearchSupport.java index d55d540d..c5e9884d 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialSearchSupport.java +++ b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiSpecialSearchSupport.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.mediawiki; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Locale; @@ -12,7 +11,7 @@ private MediaWikiSpecialSearchSupport() {} public static List filterFlatEntries(List entries, String rawQuery) { if (entries == null || entries.isEmpty()) { - return Collections.emptyList(); + return List.of(); } String query = normalize(rawQuery); if (query.isEmpty()) { @@ -31,7 +30,7 @@ public static List filterFlatEntries(List filterGroupedEntries(List entries, String rawQuery) { if (entries == null || entries.isEmpty()) { - return Collections.emptyList(); + return List.of(); } String query = normalize(rawQuery); if (query.isEmpty()) { @@ -67,7 +66,7 @@ public static List filterGroupedEntries(List List limit(List entries, int visibleCount) { if (entries == null || entries.isEmpty()) { - return Collections.emptyList(); + return List.of(); } if (visibleCount >= entries.size()) { return entries; diff --git a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiTranslationStats.java b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiTranslationStats.java index f4c816e0..1d8cd1f0 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiTranslationStats.java +++ b/src/main/java/com/hfstudio/guidenh/guide/mediawiki/MediaWikiTranslationStats.java @@ -3,7 +3,6 @@ import java.io.File; import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -28,10 +27,7 @@ private MediaWikiTranslationStats() {} public static TranslationSnapshot scan(Guide guide) { if (guide == null) { - return new TranslationSnapshot( - Collections.emptyList(), - Collections.>emptyMap(), - 0); + return new TranslationSnapshot(List.of(), Map.of(), 0); } String cacheKey = cacheKey(guide); long currentRevision = computeRevision(); @@ -97,7 +93,7 @@ private static Iterable resolveGuides(Guide guide) { if (guide instanceof MediaWikiGuideAggregator aggregator) { return new ArrayList(aggregator.getComponentGuides()); } - return Collections.singletonList(guide); + return List.of(guide); } private static String cacheKey(Guide guide) { @@ -185,7 +181,7 @@ public record TranslationSnapshot(List languages, Map pagePathsForLanguage(String language) { Set pages = pagePathsByLanguage != null ? pagePathsByLanguage.get(language) : null; - return pages != null ? pages : Collections.emptySet(); + return pages != null ? pages : Set.of(); } public int translatedSourcePageCount() { @@ -236,7 +232,7 @@ public List languagesForPagePath(String pagePath) { if (pagePath == null || pagePath.isEmpty() || pagePathsByLanguage == null || pagePathsByLanguage.isEmpty()) { - return Collections.emptyList(); + return List.of(); } ArrayList matchingLanguages = new ArrayList<>(); for (Map.Entry> entry : pagePathsByLanguage.entrySet()) { @@ -251,7 +247,7 @@ public List languagesForPagePath(String pagePath) { public Set allPagePaths() { if (pagePathsByLanguage == null || pagePathsByLanguage.isEmpty()) { - return Collections.emptySet(); + return Set.of(); } LinkedHashSet pagePaths = new LinkedHashSet<>(); for (Set pages : pagePathsByLanguage.values()) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/navigation/NavigationTree.java b/src/main/java/com/hfstudio/guidenh/guide/navigation/NavigationTree.java index f907010c..ad414dbc 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/navigation/NavigationTree.java +++ b/src/main/java/com/hfstudio/guidenh/guide/navigation/NavigationTree.java @@ -40,9 +40,9 @@ public NavigationTree(Map nodeIndex, } public NavigationTree() { - this.nodeIndex = Collections.emptyMap(); - this.parentIndex = Collections.emptyMap(); - this.rootNodes = Collections.emptyList(); + this.nodeIndex = Map.of(); + this.parentIndex = Map.of(); + this.rootNodes = List.of(); } public List getRootNodes() { @@ -134,10 +134,7 @@ public static NavigationTree build(@Nullable PageCollection pageCollection, Coll // Sort root nodes rootNodes.sort(NODE_COMPARATOR); - return new NavigationTree( - Collections.unmodifiableMap(new HashMap<>(nodeIndex)), - Collections.unmodifiableMap(new HashMap<>(parentIndex)), - Collections.unmodifiableList(new ArrayList<>(rootNodes))); + return new NavigationTree(Map.copyOf(nodeIndex), Map.copyOf(parentIndex), List.copyOf(rootNodes)); } public static NavigationTree buildMerged(Collection guides) { @@ -196,10 +193,7 @@ public static NavigationTree buildMerged(Collection guides) { } rootNodes.sort(NODE_COMPARATOR); - return new NavigationTree( - Collections.unmodifiableMap(new HashMap<>(nodeIndex)), - Collections.unmodifiableMap(new HashMap<>(parentIndex)), - Collections.unmodifiableList(new ArrayList<>(rootNodes))); + return new NavigationTree(Map.copyOf(nodeIndex), Map.copyOf(parentIndex), List.copyOf(rootNodes)); } public static NavigationTree buildMergedPages( @@ -258,10 +252,7 @@ public static NavigationTree buildMergedPages( } rootNodes.sort(NODE_COMPARATOR); - return new NavigationTree( - Collections.unmodifiableMap(new HashMap<>(nodeIndex)), - Collections.unmodifiableMap(new HashMap<>(parentIndex)), - Collections.unmodifiableList(new ArrayList<>(rootNodes))); + return new NavigationTree(Map.copyOf(nodeIndex), Map.copyOf(parentIndex), List.copyOf(rootNodes)); } @Nullable diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookLevelRenderer.java b/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookLevelRenderer.java index 4e7ef52b..0af0365e 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookLevelRenderer.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookLevelRenderer.java @@ -13,7 +13,6 @@ import java.nio.FloatBuffer; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.block.Block; @@ -88,7 +87,7 @@ public void render(GuidebookLevel level, CameraSettings camera, int panelX, int panelWidth, panelHeight, partialTicks, - Collections.emptyList(), + List.of(), LightDarkMode.LIGHT_MODE, null); } @@ -150,7 +149,7 @@ public void render(GuidebookLevel level, CameraSettings camera, int panelX, int annotations, lightDarkMode, visibleLayerY, - Collections.emptyList()); + List.of()); } public void render(GuidebookLevel level, CameraSettings camera, int panelX, int panelY, int panelWidth, @@ -173,7 +172,7 @@ public void render(GuidebookLevel level, CameraSettings camera, int panelX, int lightDarkMode, GuidebookSceneLayerSelection.fromVisibleLayer(visibleLayerY), particles, - Collections.emptyList(), + List.of(), 0.0f); } @@ -197,7 +196,7 @@ public void render(GuidebookLevel level, CameraSettings camera, int panelX, int lightDarkMode, layerSelection, particles, - Collections.emptyList(), + List.of(), 0.0f); } diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookSceneLayerSelection.java b/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookSceneLayerSelection.java index cbe160ef..17821e86 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookSceneLayerSelection.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookSceneLayerSelection.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.scene; -import java.util.Collections; import java.util.LinkedHashSet; import java.util.Set; @@ -26,7 +25,7 @@ public GuidebookSceneLayerSelection(Mode mode, Set visibleLayers, @Null } public static GuidebookSceneLayerSelection all() { - return new GuidebookSceneLayerSelection(Mode.ALL, Collections.emptySet(), null); + return new GuidebookSceneLayerSelection(Mode.ALL, Set.of(), null); } public static GuidebookSceneLayerSelection filtered(Set visibleLayers) { @@ -34,7 +33,7 @@ public static GuidebookSceneLayerSelection filtered(Set visibleLayers) } public static GuidebookSceneLayerSelection eachLayer(int layer) { - return new GuidebookSceneLayerSelection(Mode.EACH, Collections.singleton(layer), layer); + return new GuidebookSceneLayerSelection(Mode.EACH, Set.of(layer), layer); } public static GuidebookSceneLayerSelection fromVisibleLayer(@Nullable Integer visibleLayerY) { @@ -64,8 +63,8 @@ public Integer getSingleExportLayer() { private static Set immutableCopy(Set source) { if (source == null || source.isEmpty()) { - return Collections.emptySet(); + return Set.of(); } - return Collections.unmodifiableSet(new LinkedHashSet<>(source)); + return Set.copyOf(new LinkedHashSet<>(source)); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookSceneWeatherEffect.java b/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookSceneWeatherEffect.java index fc20cf45..4b48cbb1 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookSceneWeatherEffect.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookSceneWeatherEffect.java @@ -1,8 +1,6 @@ package com.hfstudio.guidenh.guide.scene; -import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -43,7 +41,7 @@ private GuidebookSceneWeatherEffect(GuidebookSceneWeatherType weatherType, @Null this.weatherType = weatherType != null ? weatherType : GuidebookSceneWeatherType.RAIN; this.xValues = xValues != null ? Arrays.copyOf(xValues, xValues.length) : null; this.zValues = zValues != null ? Arrays.copyOf(zValues, zValues.length) : null; - this.areas = areas != null ? Collections.unmodifiableList(new ArrayList<>(areas)) : null; + this.areas = areas != null ? List.copyOf(areas) : null; this.startTick = Math.max(0, startTick); this.durationTicks = durationTicks == INFINITE_DURATION ? INFINITE_DURATION : Math.max(1, durationTicks); this.density = Math.max(1, density); diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookSceneWeatherSupport.java b/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookSceneWeatherSupport.java index ff6ef957..df027777 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookSceneWeatherSupport.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/GuidebookSceneWeatherSupport.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.scene; import java.util.ArrayList; -import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -138,16 +137,16 @@ public static List resolveRenderableEffects(List resolveRenderableEffects(List effects, int[] bounds, @Nullable Integer activeTick) { if (effects == null || effects.isEmpty()) { - return Collections.emptyList(); + return List.of(); } if (effects.size() == 1) { GuidebookSceneWeatherEffect singleEffect = effects.get(0); if (singleEffect == null || activeTick != null && !singleEffect.isActiveAt(activeTick)) { - return Collections.emptyList(); + return List.of(); } List singleAreas = singleEffect.resolveAreas(bounds); if (singleAreas.size() <= 1 || singleEffect.hasExplicitAreas()) { - return Collections.singletonList(singleEffect); + return List.of(singleEffect); } } Set occupiedColumns = new HashSet<>(); @@ -183,7 +182,7 @@ public static List resolveRenderableEffects(List trimWeatherAreas(List areas, Set occupiedColumns) { if (areas == null || areas.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List trimmed = new ArrayList<>(); for (GuidebookSceneWeatherArea area : areas) { @@ -276,7 +275,7 @@ private static List trimWeatherAreas(List buildFallbackWeatherAreas(int[] bounds) { - return Collections.singletonList(new GuidebookSceneWeatherArea(bounds[0], bounds[2], bounds[3], bounds[5])); + return List.of(new GuidebookSceneWeatherArea(bounds[0], bounds[2], bounds[3], bounds[5])); } @Nullable diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/LytGuidebookScene.java b/src/main/java/com/hfstudio/guidenh/guide/scene/LytGuidebookScene.java index 7313093f..d2d294b0 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/LytGuidebookScene.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/LytGuidebookScene.java @@ -2,7 +2,6 @@ import java.util.ArrayDeque; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; @@ -828,12 +827,12 @@ public void clearManualBlockStatsEntries() { public List getBlockStatsEntriesForExport() { if (!blockStatsEnabled) { - return Collections.emptyList(); + return List.of(); } if (blockStatsDirty) { rebuildBlockStatsEntries(); } - return Collections.unmodifiableList(new ArrayList<>(cachedBlockStatsEntries)); + return List.copyOf(cachedBlockStatsEntries); } public boolean shouldExportBlockStats() { @@ -1096,7 +1095,7 @@ public int getStructureLibBindingCount() { } public List getStructureLibBindings() { - return Collections.unmodifiableList(new ArrayList<>(structureLibBindings.values())); + return List.copyOf(structureLibBindings.values()); } public Map getStructureLibPreviewSelectionsByBinding() { @@ -1441,7 +1440,7 @@ public void clearSeededStructureLibPreviewSelections() { } public List getSoundCues() { - return Collections.unmodifiableList(soundCues); + return List.copyOf(soundCues); } public void clearSoundCues() { @@ -1607,7 +1606,7 @@ private List resolveRenderableWeatherEffectsForLaye List resolved = GuidebookSceneWeatherSupport .resolveRenderableEffects(effects, bounds, activeTick, layerSelection, level); if (resolved.isEmpty()) { - return Collections.emptyList(); + return List.of(); } if (resolved == effects || resolved == staticWeatherEffects || resolved == ponderWeatherEffects @@ -3070,8 +3069,7 @@ public GuideTooltip createBlockStatsTooltip(int mouseX, int mouseY) { } return new AppendedItemTooltip( stack, - Collections - .singletonList(GuidebookText.SceneBlockStatsTooltipCount.text(Integer.toString(entry.getCount())))); + List.of(GuidebookText.SceneBlockStatsTooltipCount.text(Integer.toString(entry.getCount())))); } @Nullable @@ -4094,7 +4092,7 @@ public void scroll(int dwheel) { } public List getPonderActiveAnnotationsForTesting() { - return Collections.unmodifiableList(new ArrayList<>(ponderActiveAnnotations)); + return List.copyOf(ponderActiveAnnotations); } private void appendStructureLibHatchOverlays(List inWorld) { @@ -4149,7 +4147,7 @@ public int getPonderTotalTimeForExport() { public List getPonderTimelineKeyframesForExport() { if (ponderSceneData == null) { - return Collections.emptyList(); + return List.of(); } ArrayList keyframes = new ArrayList<>(); for (PonderKeyframe keyframe : ponderSceneData.getKeyframes()) { @@ -4157,7 +4155,7 @@ public List getPonderTimelineKeyframesForExport() { keyframes.add(new PonderTimelineKeyframe(keyframe.getTime(), keyframe.getLabel())); } } - return Collections.unmodifiableList(keyframes); + return List.copyOf(keyframes); } public boolean isPonderPlaying() { @@ -4181,7 +4179,7 @@ private int structureLibChannelSliderAreaHeight() { } private List getSelectableStructureLibChannels() { - return selectableStructureLibChannels.isEmpty() ? Collections.emptyList() : selectableStructureLibChannels; + return selectableStructureLibChannels.isEmpty() ? List.of() : selectableStructureLibChannels; } private boolean hasBottomControls() { @@ -4193,11 +4191,11 @@ private boolean hasStructureLibTierSlider() { } private List getBottomControlStructureLibChannels() { - return hasBottomControls() ? getSelectableStructureLibChannels() : Collections.emptyList(); + return hasBottomControls() ? getSelectableStructureLibChannels() : List.of(); } public void attachPonderData(PonderSceneData data, List> annotationsByKeyframe) { - attachPonderData(data, annotationsByKeyframe, Collections.emptyList()); + attachPonderData(data, annotationsByKeyframe, List.of()); } public void attachPonderData(PonderSceneData data, List> annotationsByKeyframe, @@ -5634,7 +5632,7 @@ private List resolveAvailableWeatherAreas(PonderKeyfr List areas = GuidebookSceneWeatherSupport .resolveWeatherAreas(weatherBounds, particle.getWeatherXValues(), particle.getWeatherZValues()); if (areas.isEmpty()) { - return Collections.emptyList(); + return List.of(); } int endTickExclusive = startTick + estimatePonderReplayLifetime(particle); List acceptedAreas = new ArrayList<>(areas.size()); @@ -5651,7 +5649,7 @@ private List resolveAvailableWeatherAreas(PonderKeyfr private List reserveWeatherAreaColumns(GuidebookSceneWeatherArea area, int startTick, int endTickExclusive) { if (area.getMinX() > area.getMaxX() || area.getMinZ() > area.getMaxZ()) { - return Collections.emptyList(); + return List.of(); } List acceptedAreas = new ArrayList<>(); int minX = Integer.MAX_VALUE; @@ -5759,7 +5757,7 @@ private static int resolvePonderBlockMeta(@Nullable Block block, int requestedMe private static Map readPreviewSupplements(@Nullable NBTTagCompound tag) { if (tag == null || !tag.hasKey(ServerPreviewSupplementNbt.TAG_ROOT, 10)) { - return Collections.emptyMap(); + return Map.of(); } NBTTagCompound root = tag.getCompoundTag(ServerPreviewSupplementNbt.TAG_ROOT); Map result = new LinkedHashMap<>(); @@ -5769,7 +5767,7 @@ private static Map readPreviewSupplements(@Nullable NBTTagCompou result.put(supplementId, payload); } } - return result.isEmpty() ? Collections.emptyMap() : result; + return result.isEmpty() ? Map.of() : result; } private Map completePonderPreviewSupplements(Map explicitSupplements, int x, int y, @@ -5778,7 +5776,7 @@ private Map completePonderPreviewSupplements(Map return explicitSupplements; } if (!Mods.AE2.isModLoaded()) { - return Collections.emptyMap(); + return Map.of(); } return Ae2Helpers.capturePonderPreviewSupplements(level, x, y, z, block, meta); } @@ -5835,7 +5833,7 @@ private static class PonderBlockInfo { private static Map copyPreviewSupplements(Map source) { if (source == null || source.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } Map result = new LinkedHashMap<>(); for (Map.Entry entry : source.entrySet()) { @@ -5844,7 +5842,7 @@ private static Map copyPreviewSupplements(Map so result.put(entry.getKey(), payload.clone()); } } - return result.isEmpty() ? Collections.emptyMap() : result; + return result.isEmpty() ? Map.of() : result; } private static class PonderEntityRuntime { diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/SceneBlockStatsEntry.java b/src/main/java/com/hfstudio/guidenh/guide/scene/SceneBlockStatsEntry.java index 4b6bc2e6..446e33e8 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/SceneBlockStatsEntry.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/SceneBlockStatsEntry.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.scene; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.item.ItemStack; @@ -79,7 +78,7 @@ private static int displayCount(int count) { } public List getPlacements() { - return Collections.unmodifiableList(placements); + return List.copyOf(placements); } public int getPlacementCount() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/SceneTagCompiler.java b/src/main/java/com/hfstudio/guidenh/guide/scene/SceneTagCompiler.java index 7d384f9d..52abebf9 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/SceneTagCompiler.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/SceneTagCompiler.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.scene; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -48,7 +47,7 @@ public class SceneTagCompiler extends BlockTagCompiler { "RemoveBlocks", "RemoveEntity", "ReplaceBlock", "Block", "Entity" }; private static final int SCENE_HEAVY_ELEMENT_THRESHOLD = 8; - private Map elementCompilers = Collections.emptyMap(); + private Map elementCompilers = Map.of(); private final GuideSceneStructureFingerprintResolver structureFingerprintResolver = new GuideSceneStructureFingerprintResolver(); public static boolean likelyHasHeavySceneWork(@Nullable ParsedGuidePage parsedPage) { @@ -306,12 +305,7 @@ private boolean compileSceneChildren(LytGuidebookScene scene, PageCompiler compi boolean[] result = new boolean[1]; compiler.withBlockTagChildrenSourceContext( flow, - () -> result[0] = compileSceneChildrenWithCache( - scene, - compiler, - errorSink, - children, - Collections.emptyMap())); + () -> result[0] = compileSceneChildrenWithCache(scene, compiler, errorSink, children, Map.of())); return result[0]; }); } @@ -459,7 +453,7 @@ private static void applyImplicitBlockStats(LytGuidebookScene scene, boolean blo scene.setBlockStatsDock(BlockStatsDock.INSIDE); scene.setBlockStatsShowNames(false); scene.setBlockStatsFilterMode(BlockStatsFilterMode.BLACKLIST); - scene.setBlockStatsFilterKeys(Collections.emptySet()); + scene.setBlockStatsFilterKeys(Set.of()); } private static Set parseBlockStatsFilter(String raw) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/StructureLibSceneCondition.java b/src/main/java/com/hfstudio/guidenh/guide/scene/StructureLibSceneCondition.java index 5fd4fbe6..6d0e4111 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/StructureLibSceneCondition.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/StructureLibSceneCondition.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.scene; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -79,7 +78,7 @@ public Map toSiteExportData() { private static Map parseChannelConditions(@Nullable String expression) { if (expression == null || expression.trim() .isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } LinkedHashMap> clausesByChannel = new LinkedHashMap<>(); String currentChannel = null; @@ -113,7 +112,7 @@ private static Map parseChannelConditions(@N } if (clausesByChannel.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } LinkedHashMap parsed = new LinkedHashMap<>(clausesByChannel.size()); @@ -123,7 +122,7 @@ private static Map parseChannelConditions(@N parsed.put(entry.getKey(), condition); } } - return parsed.isEmpty() ? Collections.emptyMap() : Collections.unmodifiableMap(parsed); + return parsed.isEmpty() ? Map.of() : Map.copyOf(parsed); } @Nullable @@ -138,7 +137,7 @@ public static String normalizeStructureName(@Nullable String structureName) { private static Map immutableChannelConditions( @Nullable Map channelConditions) { if (channelConditions == null || channelConditions.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } LinkedHashMap copied = new LinkedHashMap<>(channelConditions.size()); for (Map.Entry entry : channelConditions.entrySet()) { @@ -148,6 +147,6 @@ private static Map immutableChannelCondition copied.put(channelId, condition); } } - return copied.isEmpty() ? Collections.emptyMap() : Collections.unmodifiableMap(copied); + return copied.isEmpty() ? Map.of() : Map.copyOf(copied); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/StructureLibValueCondition.java b/src/main/java/com/hfstudio/guidenh/guide/scene/StructureLibValueCondition.java index ff5d5165..4ef2ee31 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/StructureLibValueCondition.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/StructureLibValueCondition.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.scene; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -107,7 +106,7 @@ private static List serializeRanges(List ranges) { private static List immutableRanges(@Nullable List ranges) { if (ranges == null || ranges.isEmpty()) { - return Collections.emptyList(); + return List.of(); } ArrayList copied = new ArrayList<>(ranges.size()); for (ValueRange range : ranges) { @@ -115,7 +114,7 @@ private static List immutableRanges(@Nullable List range copied.add(range); } } - return copied.isEmpty() ? Collections.emptyList() : Collections.unmodifiableList(copied); + return copied.isEmpty() ? List.of() : List.copyOf(copied); } public static class ValueRange { diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/InWorldLineAnnotation.java b/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/InWorldLineAnnotation.java index b239ff43..731fd550 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/InWorldLineAnnotation.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/InWorldLineAnnotation.java @@ -1,8 +1,6 @@ package com.hfstudio.guidenh.guide.scene.annotation; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Locale; @@ -26,7 +24,7 @@ public class InWorldLineAnnotation extends InWorldAnnotation { private final List pointStyles = new ArrayList<>(); public InWorldLineAnnotation(Vector3f from, Vector3f to, ColorValue color, float thickness) { - this(Arrays.asList(from, to), color, thickness); + this(List.of(from, to), color, thickness); } public InWorldLineAnnotation(List points, ColorValue color, float thickness) { @@ -37,7 +35,7 @@ public InWorldLineAnnotation(List points, ColorValue color, float thic for (Vector3f point : points) { copied.add(new Vector3f(point)); } - this.points = Collections.unmodifiableList(copied); + this.points = List.copyOf(copied); this.color = color; this.thickness = thickness; this.pointColor = color; @@ -107,7 +105,7 @@ public void addPointStyle(PointStyle style) { } public List pointStyles() { - return Collections.unmodifiableList(pointStyles); + return List.copyOf(pointStyles); } @Nullable diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/LineAnnotationPointParser.java b/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/LineAnnotationPointParser.java index 2f353d3b..9798e1ce 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/LineAnnotationPointParser.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/LineAnnotationPointParser.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.scene.annotation; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.joml.Vector3f; @@ -41,6 +40,6 @@ public static List parsePoints(String raw) { if (points.size() < 2) { throw new IllegalArgumentException("points expects at least two semicolon-separated points."); } - return Collections.unmodifiableList(points); + return List.copyOf(points); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/TextAnnotation.java b/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/TextAnnotation.java index e554c9c8..cc55b6e3 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/TextAnnotation.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/TextAnnotation.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.scene.annotation; -import java.util.Collections; import java.util.List; import java.util.Locale; @@ -185,17 +184,17 @@ private List getLines(FontRenderer fr, int contentWidth) { return resolvedLines; } if (text == null || text.isEmpty()) { - resolvedLines = Collections.emptyList(); + resolvedLines = List.of(); resolvedWrapWidth = contentWidth; return resolvedLines; } if (contentWidth <= 0) { - resolvedLines = Collections.singletonList(text); + resolvedLines = List.of(text); resolvedWrapWidth = contentWidth; return resolvedLines; } List wrapped = fr.listFormattedStringToWidth(text, contentWidth); - resolvedLines = wrapped.isEmpty() ? Collections.singletonList(text) : wrapped; + resolvedLines = wrapped.isEmpty() ? List.of(text) : wrapped; resolvedWrapWidth = contentWidth; return resolvedLines; } @@ -349,7 +348,7 @@ private LayoutMeasure measureLayout(int viewportWidth) { cachedMeasure = new LayoutMeasure( contentBounds.width() + PADDING_X * 2, contentBounds.height() + PADDING_Y * 2, - Collections.emptyList(), + List.of(), availableWidth); cachedMeasureWrapWidth = wrapWidth; return cachedMeasure; diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/compiler/BlockAnnotationTemplateElementCompiler.java b/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/compiler/BlockAnnotationTemplateElementCompiler.java index db9b8f0f..912e9a9b 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/compiler/BlockAnnotationTemplateElementCompiler.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/compiler/BlockAnnotationTemplateElementCompiler.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.scene.annotation.compiler; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -30,7 +29,7 @@ public class BlockAnnotationTemplateElementCompiler implements SceneElementTagCo @Override public Set getTagNames() { - return Collections.singleton("BlockAnnotationTemplate"); + return Set.of("BlockAnnotationTemplate"); } @Override @@ -168,7 +167,7 @@ public static Map createTemplateCompilers() { registerTemplateCompiler(compilers, new BoxAnnotationElementCompiler()); registerTemplateCompiler(compilers, new LineAnnotationElementCompiler()); registerTemplateCompiler(compilers, new DiamondAnnotationElementCompiler()); - return Collections.unmodifiableMap(compilers); + return Map.copyOf(compilers); } public static void registerTemplateCompiler(Map compilers, diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/compiler/LineAnnotationElementCompiler.java b/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/compiler/LineAnnotationElementCompiler.java index 38dfc150..ccf14755 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/compiler/LineAnnotationElementCompiler.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/annotation/compiler/LineAnnotationElementCompiler.java @@ -1,8 +1,6 @@ package com.hfstudio.guidenh.guide.scene.annotation.compiler; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.Set; @@ -28,7 +26,7 @@ public class LineAnnotationElementCompiler extends AnnotationTagCompiler { @Override public Set getTagNames() { - return Collections.singleton("LineAnnotation"); + return Set.of("LineAnnotation"); } @Override @@ -62,13 +60,13 @@ private static List parsePoints(PageCompiler compiler, LytErrorSink er return LineAnnotationPointParser.parsePoints(rawPoints); } catch (IllegalArgumentException e) { errorSink.appendError(compiler, e.getMessage(), el); - return Arrays.asList(new Vector3f(), new Vector3f()); + return List.of(new Vector3f(), new Vector3f()); } } var from = MdxAttrs.getVector3(compiler, errorSink, el, "from", new Vector3f()); var to = MdxAttrs.getVector3(compiler, errorSink, el, "to", new Vector3f()); - return Arrays.asList(from, to); + return List.of(from, to); } private static InWorldLineAnnotation.Arrow parseArrow(PageCompiler compiler, LytErrorSink errorSink, diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/cache/GuideSceneStructureCacheEntry.java b/src/main/java/com/hfstudio/guidenh/guide/scene/cache/GuideSceneStructureCacheEntry.java index de0aad68..5456e673 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/cache/GuideSceneStructureCacheEntry.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/cache/GuideSceneStructureCacheEntry.java @@ -255,10 +255,10 @@ public static class BlockTooltipDataEntry implements Serializable { public BlockTooltipDataEntry(@Nullable String structureLibDescription, List blockCandidates, List hatchDescriptionLines, List hatchCandidates) { this.structureLibDescription = structureLibDescription; - this.blockCandidates = blockCandidates != null ? new ArrayList<>(blockCandidates) : Collections.emptyList(); + this.blockCandidates = blockCandidates != null ? new ArrayList<>(blockCandidates) : List.of(); this.hatchDescriptionLines = hatchDescriptionLines != null ? new ArrayList<>(hatchDescriptionLines) - : Collections.emptyList(); - this.hatchCandidates = hatchCandidates != null ? new ArrayList<>(hatchCandidates) : Collections.emptyList(); + : List.of(); + this.hatchCandidates = hatchCandidates != null ? new ArrayList<>(hatchCandidates) : List.of(); } public static BlockTooltipDataEntry capture(StructureLibSceneMetadata.BlockTooltipData data) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/cache/GuideSceneStructureFingerprintResolver.java b/src/main/java/com/hfstudio/guidenh/guide/scene/cache/GuideSceneStructureFingerprintResolver.java index 718bb736..372dd638 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/cache/GuideSceneStructureFingerprintResolver.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/cache/GuideSceneStructureFingerprintResolver.java @@ -4,7 +4,6 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.List; import java.util.Map; @@ -37,7 +36,7 @@ public GuideSceneStructureCacheKey buildForGameScene(PageCompiler compiler, @Nullable Map structureLibSelections) { GuideSceneStructureFingerprintBuilder builder = new GuideSceneStructureFingerprintBuilder(); Map selections = structureLibSelections != null ? structureLibSelections - : Collections.emptyMap(); + : Map.of(); int structuralIndex = 0; int structureLibIndex = 0; for (MdAstAnyContent child : children) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/cache/GuideSceneStructureSnapshot.java b/src/main/java/com/hfstudio/guidenh/guide/scene/cache/GuideSceneStructureSnapshot.java index d9477b58..f0dd5187 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/cache/GuideSceneStructureSnapshot.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/cache/GuideSceneStructureSnapshot.java @@ -2,7 +2,6 @@ import java.io.Serializable; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -171,7 +170,7 @@ private void capturePreviewAuthority(GuidebookLevel level) { private Map indexExplicitBlockIds() { if (explicitBlockIds.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } HashMap indexed = new HashMap<>(explicitBlockIds.size()); for (ExplicitBlockIdEntry entry : explicitBlockIds) { @@ -493,12 +492,12 @@ public PreviewAuthorityEntry(long packedPos, @Nullable Map paylo } } } - this.payloads = copied.isEmpty() ? Collections.emptyMap() : Collections.unmodifiableMap(copied); + this.payloads = copied.isEmpty() ? Map.of() : Map.copyOf(copied); } public Map payloads() { if (payloads.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } LinkedHashMap copied = new LinkedHashMap<>(); for (Map.Entry entry : payloads.entrySet()) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/element/ImportPonderElementCompiler.java b/src/main/java/com/hfstudio/guidenh/guide/scene/element/ImportPonderElementCompiler.java index 85b1bf3f..27198d50 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/element/ImportPonderElementCompiler.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/element/ImportPonderElementCompiler.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.scene.element; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Set; @@ -63,7 +62,7 @@ public class ImportPonderElementCompiler implements SceneElementTagCompiler { @Override public Set getTagNames() { - return Collections.singleton("ImportPonder"); + return Set.of("ImportPonder"); } @Override @@ -99,14 +98,14 @@ private static List> resolveAnnotations(PonderSceneData da for (PonderKeyframe kf : data.getKeyframes()) { List rawList = kf.getAnnotations(); if (rawList.isEmpty()) { - result.add(Collections.emptyList()); + result.add(List.of()); continue; } List resolved = new ArrayList<>(rawList.size()); for (PonderKeyframeAnnotation raw : rawList) { resolveAndAdd(raw, resolved, compiler); } - result.add(resolved.isEmpty() ? Collections.emptyList() : resolved); + result.add(resolved.isEmpty() ? List.of() : resolved); } return result; } @@ -116,7 +115,7 @@ private static List> resolveSounds(PonderSceneData data, Pa for (PonderKeyframe kf : data.getKeyframes()) { List rawList = kf.getSounds(); if (rawList.isEmpty()) { - result.add(Collections.emptyList()); + result.add(List.of()); continue; } List resolved = new ArrayList<>(rawList.size()); @@ -126,7 +125,7 @@ private static List> resolveSounds(PonderSceneData data, Pa resolved.add(sound); } } - result.add(resolved.isEmpty() ? Collections.emptyList() : resolved); + result.add(resolved.isEmpty() ? List.of() : resolved); } return result; } @@ -206,12 +205,7 @@ private static SceneAnnotation resolveAnnotation(PonderKeyframeAnnotation raw, P int by = raw.getBlockY(0); int bz = raw.getBlockZ(0); int argb = raw.parseColor(0x80FFFFFF); - var ann = new InWorldBlockFaceOverlayAnnotation( - bx, - by, - bz, - new ConstantColor(argb), - Collections.emptySet()); + var ann = new InWorldBlockFaceOverlayAnnotation(bx, by, bz, new ConstantColor(argb), Set.of()); ann.setAlwaysOnTop(raw.isAlwaysOnTop()); return ann; } @@ -281,11 +275,11 @@ private static List parseJsonLinePoints(JsonElement pointsElement) { try { return LineAnnotationPointParser.parsePoints(pointsElement.getAsString()); } catch (IllegalArgumentException ignored) { - return Collections.emptyList(); + return List.of(); } } if (!pointsElement.isJsonArray()) { - return Collections.emptyList(); + return List.of(); } JsonArray array = pointsElement.getAsJsonArray(); List result = new ArrayList<>(array.size()); diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/level/GuidebookLevel.java b/src/main/java/com/hfstudio/guidenh/guide/scene/level/GuidebookLevel.java index dfb49e02..6aa52738 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/level/GuidebookLevel.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/level/GuidebookLevel.java @@ -432,17 +432,17 @@ public String getSceneEntityId(int entityId) { } public Set getSceneEntityIds() { - return Collections.unmodifiableSet(sceneEntityIds.keySet()); + return Set.copyOf(sceneEntityIds.keySet()); } public List getEntitiesBySceneEntityId(@Nullable String sceneEntityId) { String normalizedSceneEntityId = trimToNull(sceneEntityId); if (normalizedSceneEntityId == null) { - return Collections.emptyList(); + return List.of(); } LinkedHashSet entityIds = sceneEntityIds.get(normalizedSceneEntityId); if (entityIds == null || entityIds.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List resolved = new ArrayList<>(entityIds.size()); for (Integer entityId : entityIds) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/level/GuidebookPreviewBlockPlacer.java b/src/main/java/com/hfstudio/guidenh/guide/scene/level/GuidebookPreviewBlockPlacer.java index 624387a8..3296e3b3 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/level/GuidebookPreviewBlockPlacer.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/level/GuidebookPreviewBlockPlacer.java @@ -1,8 +1,8 @@ package com.hfstudio.guidenh.guide.scene.level; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashSet; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -575,7 +575,8 @@ public static Set createKnownGregTechByteArrayKeys() { keys.add("eyeOfHarmonyOutputoutputEU_BigInt"); keys.add("eyeOfHarmonyOutputusedEU"); keys.add("powerTally"); - return Collections.unmodifiableSet(keys); + return Set.copyOf( + List.of("mRedstoneSided", "eyeOfHarmonyOutputoutputEU_BigInt", "eyeOfHarmonyOutputusedEU", "powerTally")); } @Nullable diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/ponder/PonderKeyframe.java b/src/main/java/com/hfstudio/guidenh/guide/scene/ponder/PonderKeyframe.java index 02768c29..6cbdd5a0 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/ponder/PonderKeyframe.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/ponder/PonderKeyframe.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.scene.ponder; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -103,15 +102,15 @@ public Integer getLayer() { } public List getAnnotations() { - return annotations != null ? annotations : Collections.emptyList(); + return annotations != null ? annotations : List.of(); } public List getSounds() { - return sounds != null ? sounds : Collections.emptyList(); + return sounds != null ? sounds : List.of(); } public List getParticles() { - return particles != null ? particles : Collections.emptyList(); + return particles != null ? particles : List.of(); } /** @@ -120,47 +119,47 @@ public List getParticles() { * changes from keyframes 0..active, so seeking backwards works correctly. */ public List getBlockChanges() { - return blockChanges != null ? blockChanges : Collections.emptyList(); + return blockChanges != null ? blockChanges : List.of(); } public List getMergeTileNBT() { - return mergeTileNBT != null ? mergeTileNBT : Collections.emptyList(); + return mergeTileNBT != null ? mergeTileNBT : List.of(); } public List getModifyTileNBT() { - return modifyTileNBT != null ? modifyTileNBT : Collections.emptyList(); + return modifyTileNBT != null ? modifyTileNBT : List.of(); } public List getRemoveTileNBT() { - return removeTileNBT != null ? removeTileNBT : Collections.emptyList(); + return removeTileNBT != null ? removeTileNBT : List.of(); } public List getCreateEntities() { - return createEntities != null ? createEntities : Collections.emptyList(); + return createEntities != null ? createEntities : List.of(); } public List getSetEntityNBT() { - return setEntityNBT != null ? setEntityNBT : Collections.emptyList(); + return setEntityNBT != null ? setEntityNBT : List.of(); } public List getMergeEntityNBT() { - return mergeEntityNBT != null ? mergeEntityNBT : Collections.emptyList(); + return mergeEntityNBT != null ? mergeEntityNBT : List.of(); } public List getModifyEntityNBT() { - return modifyEntityNBT != null ? modifyEntityNBT : Collections.emptyList(); + return modifyEntityNBT != null ? modifyEntityNBT : List.of(); } public List getRemoveEntityNBT() { - return removeEntityNBT != null ? removeEntityNBT : Collections.emptyList(); + return removeEntityNBT != null ? removeEntityNBT : List.of(); } public List getRemoveEntities() { - return removeEntities != null ? removeEntities : Collections.emptyList(); + return removeEntities != null ? removeEntities : List.of(); } public List getAnimateEntities() { - return animateEntities != null ? animateEntities : Collections.emptyList(); + return animateEntities != null ? animateEntities : List.of(); } /** diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/ponder/PonderSceneData.java b/src/main/java/com/hfstudio/guidenh/guide/scene/ponder/PonderSceneData.java index 99de27c0..9229b2a5 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/ponder/PonderSceneData.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/ponder/PonderSceneData.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.scene.ponder; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -20,7 +19,7 @@ public int getTotalTime() { } public List getKeyframes() { - return keyframes != null ? keyframes : Collections.emptyList(); + return keyframes != null ? keyframes : List.of(); } public int getKeyframeCount() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/snapshot/GuidebookPreviewAuthorityStore.java b/src/main/java/com/hfstudio/guidenh/guide/scene/snapshot/GuidebookPreviewAuthorityStore.java index 6551545b..63377f2a 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/snapshot/GuidebookPreviewAuthorityStore.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/snapshot/GuidebookPreviewAuthorityStore.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.guide.scene.snapshot; -import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -81,7 +80,7 @@ public byte[] get(long packedPos, String supplementId) { public Map snapshotAt(long packedPos) { HashMap slot = byPos.get(packedPos); if (slot == null || slot.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } HashMap snapshot = new HashMap<>(); for (Map.Entry entry : slot.entrySet()) { @@ -90,18 +89,18 @@ public Map snapshotAt(long packedPos) { snapshot.put(entry.getKey(), payload.clone()); } } - return snapshot.isEmpty() ? Collections.emptyMap() : snapshot; + return snapshot.isEmpty() ? Map.of() : snapshot; } public Map> snapshotAll() { if (byPos.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } HashMap> snapshot = new HashMap<>(); for (Long packedPos : byPos.keySet()) { snapshot.put(packedPos, snapshotAt(packedPos.longValue())); } - return snapshot.isEmpty() ? Collections.emptyMap() : snapshot; + return snapshot.isEmpty() ? Map.of() : snapshot; } public void restoreAll(Map> snapshot) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/scene/support/GuideBlockStatsStackResolver.java b/src/main/java/com/hfstudio/guidenh/guide/scene/support/GuideBlockStatsStackResolver.java index 55f11542..8d365005 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/scene/support/GuideBlockStatsStackResolver.java +++ b/src/main/java/com/hfstudio/guidenh/guide/scene/support/GuideBlockStatsStackResolver.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.scene.support; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.block.Block; @@ -20,7 +19,7 @@ protected GuideBlockStatsStackResolver() {} public static List resolveStacks(GuidebookLevel level, int x, int y, int z) { List entries = resolveEntries(level, x, y, z); if (entries.isEmpty()) { - return Collections.emptyList(); + return List.of(); } ArrayList stacks = new ArrayList<>(entries.size()); for (ResolvedStack entry : entries) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/ExportTask.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/ExportTask.java index 736d7418..55b360f3 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/ExportTask.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/ExportTask.java @@ -2,7 +2,6 @@ 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.StandardCopyOption; @@ -100,10 +99,7 @@ public Result run() throws IOException { .toString()); index.put("pages", pageIds); index.put("assetsCopied", assetsCopied); - Files.write( - outDir.resolve("index.json"), - GSON.toJson(index) - .getBytes(StandardCharsets.UTF_8)); + Files.writeString(outDir.resolve("index.json"), GSON.toJson(index)); return new Result(ok, failed, assetsCopied, outDir); } diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteCollectedScenes.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteCollectedScenes.java index faf2d370..02714c9d 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteCollectedScenes.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteCollectedScenes.java @@ -1,19 +1,17 @@ package com.hfstudio.guidenh.guide.siteexport.site; -import java.util.Collections; import java.util.List; import com.hfstudio.guidenh.guide.scene.LytGuidebookScene; -public final class GuideSiteCollectedScenes { +public class GuideSiteCollectedScenes { private final List htmlSceneSequence; private final List uniqueScenes; public GuideSiteCollectedScenes(List htmlSceneSequence, List uniqueScenes) { - this.htmlSceneSequence = htmlSceneSequence == null ? Collections.emptyList() - : Collections.unmodifiableList(htmlSceneSequence); - this.uniqueScenes = uniqueScenes == null ? Collections.emptyList() : Collections.unmodifiableList(uniqueScenes); + this.htmlSceneSequence = htmlSceneSequence == null ? List.of() : List.copyOf(htmlSceneSequence); + this.uniqueScenes = uniqueScenes == null ? List.of() : List.copyOf(uniqueScenes); } public List htmlSceneSequence() { diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteExportTask.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteExportTask.java index 3ca7fbf0..a0a236a5 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteExportTask.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteExportTask.java @@ -153,8 +153,7 @@ public Result run() throws Exception { for (Map.Entry guideEntry : guidesById.entrySet()) { MutableGuide guide = guideEntry.getValue(); - List variants = variantsByGuideId - .getOrDefault(guideEntry.getKey(), Collections.emptyList()); + List variants = variantsByGuideId.getOrDefault(guideEntry.getKey(), List.of()); guidesExported++; Map> variantsByLanguage = new LinkedHashMap<>(); @@ -597,7 +596,7 @@ private Map buildScopedGuidesByGuideId(Map> buildLanguageLinks(GuideSiteWriter writer, MutableGuide guide, List variants, List languageOrder) { if (variants.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } Map> variantsByPageId = new LinkedHashMap<>(); @@ -1239,7 +1238,7 @@ private List buildVisibleLayerStates(LytGuidebookScene scene) { || scene.getLevel() == null || scene.getLevel() .isEmpty()) { - return Collections.singletonList(scene != null ? scene.getCurrentVisibleLayer() : 0); + return List.of(scene != null ? scene.getCurrentVisibleLayer() : 0); } int[] bounds = scene.getLevel() @@ -1255,7 +1254,7 @@ private List buildVisibleLayerStates(LytGuidebookScene scene) { private List buildPonderTickStates(LytGuidebookScene scene) { if (scene == null || !scene.hasPonderData()) { - return Collections.singletonList(0); + return List.of(0); } ArrayList states = new ArrayList<>(); if (options.exportPonderEveryTick()) { @@ -1263,20 +1262,20 @@ private List buildPonderTickStates(LytGuidebookScene scene) { for (int tick = 0; tick <= totalTime; tick++) { states.add(tick); } - return states.isEmpty() ? Collections.singletonList(0) : states; + return states.isEmpty() ? List.of(0) : states; } addUniquePonderTickState(states, scene.getPonderCurrentTickForExport()); for (PonderTimelineKeyframe keyframe : scene.getPonderTimelineKeyframesForExport()) { addUniquePonderTickState(states, keyframe.getTime()); } addUniquePonderTickState(states, scene.getPonderTotalTimeForExport()); - return states.isEmpty() ? Collections.singletonList(0) : states; + return states.isEmpty() ? List.of(0) : states; } private List buildStructureStatePlans(LytGuidebookScene scene) { if (scene == null || scene.getStructureLibBindings() .isEmpty()) { - return Collections.emptyList(); + return List.of(); } ArrayList plans = new ArrayList<>(); for (StructureLibSceneBinding binding : scene.getStructureLibBindings()) { @@ -1327,8 +1326,7 @@ private List buildStructureVariantStates(List ti ArrayList states = new ArrayList<>(); appendStructureVariantStates(states, tiers, channelIds, channelValues, 0, new ArrayList<>()); return states.isEmpty() - ? Collections - .singletonList(new StructureVariantState(StructureLibPreviewSelection.DEFAULT_MASTER_TIER, null)) + ? List.of(new StructureVariantState(StructureLibPreviewSelection.DEFAULT_MASTER_TIER, null)) : states; } @@ -1371,8 +1369,8 @@ private List buildTierStates(StructureLibSceneBinding binding, Structur || metadata.getTierData() == null || !metadata.getTierData() .isSelectable()) { - return Collections.singletonList( - binding != null ? binding.getCurrentTier() : StructureLibPreviewSelection.DEFAULT_MASTER_TIER); + return List + .of(binding != null ? binding.getCurrentTier() : StructureLibPreviewSelection.DEFAULT_MASTER_TIER); } ArrayList tiers = new ArrayList<>(); for (int tier = metadata.getTierData() @@ -1385,7 +1383,7 @@ private List buildTierStates(StructureLibSceneBinding binding, Structur private List buildSelectableChannels(StructureLibSceneMetadata metadata) { if (metadata == null) { - return Collections.emptyList(); + return List.of(); } ArrayList channels = new ArrayList<>(); for (StructureLibSceneMetadata.ChannelData channelData : metadata.getChannelDataList()) { @@ -1398,7 +1396,7 @@ private List buildSelectableChannels(Stru private List buildChannelStates(StructureLibSceneMetadata.ChannelData channelData) { if (channelData == null || !channelData.isSelectable()) { - return Collections.singletonList(0); + return List.of(0); } ArrayList states = new ArrayList<>(channelData.getMaxValue() + 1); for (int value = channelData.getMinValue(); value <= channelData.getMaxValue(); value++) { @@ -1558,13 +1556,11 @@ private StructureStatePlan(String bindingKey, @Nullable String structureName, St this.bindingKey = bindingKey; this.structureName = structureName; this.label = label; - this.tiers = tiers != null ? new ArrayList<>(tiers) : Collections.emptyList(); - this.selectableChannels = selectableChannels != null ? new ArrayList<>(selectableChannels) - : Collections.emptyList(); - this.channelIds = channelIds != null ? new ArrayList<>(channelIds) : Collections.emptyList(); + this.tiers = tiers != null ? new ArrayList<>(tiers) : List.of(); + this.selectableChannels = selectableChannels != null ? new ArrayList<>(selectableChannels) : List.of(); + this.channelIds = channelIds != null ? new ArrayList<>(channelIds) : List.of(); this.states = states != null ? new ArrayList<>(states) - : Collections - .singletonList(new StructureVariantState(StructureLibPreviewSelection.DEFAULT_MASTER_TIER, null)); + : List.of(new StructureVariantState(StructureLibPreviewSelection.DEFAULT_MASTER_TIER, null)); } private boolean hasControls() { @@ -1672,11 +1668,11 @@ private record LanguageExportContext(Map pars Map assetExportersByGuideId) { private static final LanguageExportContext EMPTY = new LanguageExportContext( - Collections.emptyMap(), + Map.of(), new NavigationTree(), - Collections.emptyMap(), - Collections.emptyMap(), - Collections.emptyMap(), - Collections.emptyMap()); + Map.of(), + Map.of(), + Map.of(), + Map.of()); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteExportedItem.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteExportedItem.java index d11e6ef4..c78b98fd 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteExportedItem.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteExportedItem.java @@ -1,6 +1,6 @@ package com.hfstudio.guidenh.guide.siteexport.site; -public final class GuideSiteExportedItem { +public class GuideSiteExportedItem { private final String itemId; private final String displayName; diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteGraphRenderer.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteGraphRenderer.java index d3085bd6..734f985e 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteGraphRenderer.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteGraphRenderer.java @@ -30,7 +30,7 @@ * Generates static HTML and SVG markup for chart, function-graph, file-tree, * mermaid-mindmap, and CSV table elements used in the static site export. */ -public final class GuideSiteGraphRenderer { +public class GuideSiteGraphRenderer { // Monotonically increasing counter used to generate unique clip-path IDs so that // multiple function-graph SVGs embedded in the same HTML page do not share the diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteHrefResolver.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteHrefResolver.java index bc14871d..518b5188 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteHrefResolver.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteHrefResolver.java @@ -5,7 +5,6 @@ import java.net.URLEncoder; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; @@ -17,6 +16,7 @@ import com.hfstudio.guidenh.guide.PageAnchor; import com.hfstudio.guidenh.guide.compiler.IdUtils; import com.hfstudio.guidenh.guide.mediawiki.MediaWikiExternalLinkSupport; +import com.hfstudio.guidenh.guide.mediawiki.MediaWikiPageIds; import cpw.mods.fml.common.FMLLog; @@ -59,7 +59,7 @@ public static String resolveRawHref(@Nullable ResourceLocation currentPageId, St try { ResourceLocation targetPageId = target.isEmpty() ? currentPageId - : IdUtils.resolveLink(target, currentPageId); + : resolveTargetPageId(currentPageId, target); return resolvePageAnchor(currentPageId, new PageAnchor(targetPageId, fragment)); } catch (IllegalArgumentException e) { FMLLog.getLogger() @@ -134,6 +134,12 @@ public static String headingAnchor(String text) { .trim()); } + private static ResourceLocation resolveTargetPageId(ResourceLocation currentPageId, String target) { + ResourceLocation syntheticPageId = MediaWikiPageIds + .tryResolveSyntheticTitle(currentPageId.getResourceDomain(), target); + return syntheticPageId != null ? syntheticPageId : IdUtils.resolveLink(target, currentPageId); + } + private static String collapseWhitespaceToDashes(String text) { StringBuilder builder = new StringBuilder(text.length()); boolean previousWhitespace = false; @@ -247,9 +253,9 @@ private ExportContext(String namespace, String guidePath, String language, this.guidePath = guidePath; this.language = language; if (guideIdsByPageId == null || guideIdsByPageId.isEmpty()) { - this.guideIdsByPageId = Collections.emptyMap(); + this.guideIdsByPageId = Map.of(); } else { - this.guideIdsByPageId = Collections.unmodifiableMap(new LinkedHashMap<>(guideIdsByPageId)); + this.guideIdsByPageId = Map.copyOf(new LinkedHashMap<>(guideIdsByPageId)); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteItemHtml.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteItemHtml.java index ef37410e..8ee5e2b8 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteItemHtml.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteItemHtml.java @@ -2,7 +2,7 @@ import org.jetbrains.annotations.Nullable; -public final class GuideSiteItemHtml { +public class GuideSiteItemHtml { /** Default rendered icon size in pixels at scale=1.0 (matches the in-game 32px nav icon). */ public static final int BASE_ICON_PX = 32; diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteLocalServer.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteLocalServer.java index 62292d05..c454e739 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteLocalServer.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteLocalServer.java @@ -17,7 +17,6 @@ import java.nio.file.Paths; import java.nio.file.StandardOpenOption; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; @@ -179,7 +178,7 @@ private void run() throws Exception { } private void handleSiteExchange(HttpExchange exchange) throws IOException { - try { + try (exchange) { String method = exchange.getRequestMethod(); if (!"GET".equalsIgnoreCase(method) && !"HEAD".equalsIgnoreCase(method)) { exchange.getResponseHeaders() @@ -214,33 +213,27 @@ private void handleSiteExchange(HttpExchange exchange) throws IOException { try (OutputStream body = exchange.getResponseBody()) { Files.copy(target, body); } - } finally { - exchange.close(); } } private void handleStatusExchange(HttpExchange exchange) throws IOException { - try { + try (exchange) { if (!isAuthorized(exchange)) { sendText(exchange, 403, "Forbidden"); return; } sendText(exchange, 200, "OK"); - } finally { - exchange.close(); } } private void handleStopExchange(HttpExchange exchange) throws IOException { - try { + try (exchange) { if (!isAuthorized(exchange)) { sendText(exchange, 403, "Forbidden"); return; } sendText(exchange, 200, "Stopping"); new Thread(this::stopServer, "GuideNH-SiteServer-Stop").start(); - } finally { - exchange.close(); } } @@ -342,7 +335,7 @@ private static Path resolveStateFileArgument(String[] args, int offset) { private static Map readStateFile(Path stateFile) throws IOException { if (!Files.exists(stateFile) || !Files.isRegularFile(stateFile)) { - return Collections.emptyMap(); + return Map.of(); } List lines = Files.readAllLines(stateFile, UTF_8); @@ -536,7 +529,7 @@ private static String readFully(InputStream inputStream) throws IOException { while ((read = in.read(buffer)) >= 0) { out.write(buffer, 0, read); } - return new String(out.toByteArray(), UTF_8); + return out.toString(UTF_8); } } @@ -548,7 +541,7 @@ private static boolean isWindows() { private static Map parseQuery(String rawQuery) { if (rawQuery == null || rawQuery.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } Map query = new LinkedHashMap<>(); @@ -575,19 +568,11 @@ private static Map parseQuery(String rawQuery) { } private static String urlDecode(String value) { - try { - return URLDecoder.decode(value, UTF_8.name()); - } catch (IOException e) { - throw new IllegalStateException("UTF-8 is not available", e); - } + return URLDecoder.decode(value, UTF_8); } private static String urlEncode(String value) { - try { - return URLEncoder.encode(value, UTF_8.name()); - } catch (IOException e) { - throw new IllegalStateException("UTF-8 is not available", e); - } + return URLEncoder.encode(value, UTF_8); } private static int parsePort(String value) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteLocalServerJarWriter.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteLocalServerJarWriter.java index 31a54a76..f9876d23 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteLocalServerJarWriter.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteLocalServerJarWriter.java @@ -8,7 +8,7 @@ import java.util.jar.JarOutputStream; import java.util.jar.Manifest; -public final class GuideSiteLocalServerJarWriter { +public class GuideSiteLocalServerJarWriter { private GuideSiteLocalServerJarWriter() {} diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteMdxTagRenderer.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteMdxTagRenderer.java index b2b17abd..6de529e6 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteMdxTagRenderer.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteMdxTagRenderer.java @@ -2,7 +2,6 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -433,7 +432,7 @@ private String renderStructure(MdxJsxElementFields element, @Nullable ResourceLo int offsetX = (width - contentWidth) / 2 - sxMin; int offsetY = (height - contentHeight) / 2 - syMin; - Collections.sort(blocks, STRUCTURE_DRAW_ORDER); + blocks.sort(STRUCTURE_DRAW_ORDER); LinkedHashMap legendEntries = new LinkedHashMap<>(); for (StructureBlockView block : blocks) { @@ -609,7 +608,7 @@ private String renderItemStack(ResourceLocation registryId, ItemStack stack, .append(escapeAttribute(templateId)) .append("\""); } - if (style.length() > 0) { + if (!style.isEmpty()) { html.append(" style=\"") .append(escapeAttribute(style.toString())) .append("\""); @@ -1031,7 +1030,7 @@ private String renderDetails(MdxJsxElementFields element, String defaultNamespac html.append(">"); List children = element.children(); int bodyStart = 0; - if (!children.isEmpty() && children.get(0) instanceof MdxJsxElementFields summaryEl + if (!children.isEmpty() && children.getFirst() instanceof MdxJsxElementFields summaryEl && "summary".equals(summaryEl.name())) { String summaryBody = compiler .compileFragment(summaryEl.children(), templates, defaultNamespace, sceneResolver, currentPageId); @@ -1966,8 +1965,6 @@ private String renderSpecialResult(MediaWikiSpecialPageResult result, int rows, break; case INFO: case ACTION: - html.append(renderSpecialInfo(result.flatEntries())); - break; default: html.append(renderSpecialInfo(result.flatEntries())); break; @@ -2624,7 +2621,7 @@ private String abbreviateStructureLabel(String displayName, String itemId) { break; } } - if (initials.length() > 0) { + if (!initials.isEmpty()) { return initials.toString(); } @@ -2713,7 +2710,7 @@ private String renderFallbackItemLabel(String itemId, @Nullable ResourceLocation .append(escapeAttribute(templateId)) .append("\""); } - if (style.length() > 0) { + if (!style.isEmpty()) { html.append(" style=\"") .append(escapeAttribute(style.toString())) .append("\""); diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteNeiPhase1BackgroundExporter.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteNeiPhase1BackgroundExporter.java index 20fecb48..718e153a 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteNeiPhase1BackgroundExporter.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteNeiPhase1BackgroundExporter.java @@ -29,7 +29,7 @@ * * @see com.hfstudio.guidenh.guide.internal.recipe.NeiHandlerRenderer */ -public final class GuideSiteNeiPhase1BackgroundExporter { +public class GuideSiteNeiPhase1BackgroundExporter { /** * Extra transparent border around the NEI body rectangle. GregTech (and similar) ModularUI / nine-patch chrome diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteOutputPaths.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteOutputPaths.java index 1807ed1e..c0b0f69a 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteOutputPaths.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteOutputPaths.java @@ -7,7 +7,7 @@ import org.jetbrains.annotations.Nullable; -public final class GuideSiteOutputPaths { +public class GuideSiteOutputPaths { private static final DateTimeFormatter DEFAULT_FOLDER_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd-HHmmss"); diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSitePageCollector.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSitePageCollector.java index b9e248cf..8a2e8fd4 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSitePageCollector.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSitePageCollector.java @@ -66,7 +66,7 @@ public List collect(MutableGuide guide, @Nullable List pageIdSet; @@ -102,7 +102,7 @@ public List collect(MutableGuide guide, @Nullable List loadedPage = loadPageCached(pageCacheByLanguage, language, pageId); - if (!loadedPage.isPresent()) { + if (loadedPage.isEmpty()) { continue; } @@ -133,8 +133,7 @@ public List collect(MutableGuide guide, @Nullable List GuideSitePageCollector - .parseSyntheticPage(pageId, sourcePack, sourceLanguage, source)) + GuideSitePageCollector::parseSyntheticPage) .values()) { variants.add( new GuideSitePageVariant( @@ -172,7 +171,7 @@ public List collect(ResourceLocation guideId, String defau for (String language : languages) { for (ResourceLocation pageId : pageIds) { Optional loadedPage = loadPageCached(pageCacheByLanguage, language, pageId); - if (!loadedPage.isPresent()) { + if (loadedPage.isEmpty()) { continue; } LoadedPage localized = loadedPage.get(); diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteRecipeExporter.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteRecipeExporter.java index 91cd80c5..f7417f0a 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteRecipeExporter.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteRecipeExporter.java @@ -1,9 +1,9 @@ package com.hfstudio.guidenh.guide.siteexport.site; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Locale; +import java.util.Objects; import net.minecraft.item.ItemStack; @@ -24,11 +24,11 @@ public String renderHtmlGrid(List> ingredients, String resultItemId unresolvedItems(ingredients), GuideSiteItemSupport.unresolved(resultItemId), "html-grid", - Collections.emptyList()); + List.of()); } public String renderNeiOverlayGrid(List> ingredients, String resultItemId) { - return renderNeiOverlayGrid(ingredients, resultItemId, Collections.emptyList()); + return renderNeiOverlayGrid(ingredients, resultItemId, List.of()); } public String renderNeiOverlayGrid(List> ingredients, String resultItemId, @@ -41,12 +41,12 @@ public String renderNeiOverlayGrid(List> ingredients, String result } public String renderHtmlGridItems(List> ingredients, GuideSiteExportedItem resultItem) { - return renderGrid(ingredients, resultItem, "html-grid", Collections.emptyList()); + return renderGrid(ingredients, resultItem, "html-grid", List.of()); } public String renderNeiOverlayGridItems(List> ingredients, GuideSiteExportedItem resultItem) { - return renderNeiOverlayGridItems(ingredients, resultItem, Collections.emptyList()); + return renderNeiOverlayGridItems(ingredients, resultItem, List.of()); } public String renderNeiOverlayGridItems(List> ingredients, @@ -250,7 +250,7 @@ private void appendSlotBoxes(StringBuilder html, List candidates : slots) { - List safeCandidates = candidates != null ? candidates : Collections.emptyList(); + List safeCandidates = candidates != null ? candidates : List.of(); if (safeCandidates.isEmpty()) { html.append("
"); continue; @@ -315,14 +315,13 @@ public List> ingredientItemsFromVanillaEntry(RecipeL } public List> ingredientsFromNeiEntry(NeiRecipeLookup.Entry entry) { - return ingredientsFromRecipeSlots( - neiSlotsToRecipeSlots(entry != null ? entry.ingredients : Collections.emptyList())); + return ingredientsFromRecipeSlots(neiSlotsToRecipeSlots(entry != null ? entry.ingredients : List.of())); } public List> ingredientItemsFromNeiEntry(NeiRecipeLookup.Entry entry, GuideSiteItemIconResolver itemIconResolver) { return ingredientItemsFromRecipeSlots( - neiSlotsToRecipeSlots(entry != null ? entry.ingredients : Collections.emptyList()), + neiSlotsToRecipeSlots(entry != null ? entry.ingredients : List.of()), itemIconResolver); } @@ -336,14 +335,12 @@ public List> ingredientItemsFromNeiSlots(List> ingredientsFromRecipeEntry(RecipeEntry entry) { - return ingredientsFromRecipeSlots(entry != null ? entry.ingredients() : Collections.emptyList()); + return ingredientsFromRecipeSlots(entry != null ? entry.ingredients() : List.of()); } public List> ingredientItemsFromRecipeEntry(RecipeEntry entry, GuideSiteItemIconResolver itemIconResolver) { - return ingredientItemsFromRecipeSlots( - entry != null ? entry.ingredients() : Collections.emptyList(), - itemIconResolver); + return ingredientItemsFromRecipeSlots(entry != null ? entry.ingredients() : List.of(), itemIconResolver); } public List> ingredientsFromRecipeSlots(List slots) { @@ -386,14 +383,13 @@ public List> ingredientItemsFromRecipeSlots(List> supportingSlotsFromNeiEntry(NeiRecipeLookup.Entry entry) { - return supportingSlotsFromRecipeSlots( - neiSlotsToRecipeSlots(entry != null ? entry.others : Collections.emptyList())); + return supportingSlotsFromRecipeSlots(neiSlotsToRecipeSlots(entry != null ? entry.others : List.of())); } public List> supportingSlotItemsFromNeiEntry(NeiRecipeLookup.Entry entry, GuideSiteItemIconResolver itemIconResolver) { return supportingSlotItemsFromRecipeSlots( - neiSlotsToRecipeSlots(entry != null ? entry.others : Collections.emptyList()), + neiSlotsToRecipeSlots(entry != null ? entry.others : List.of()), itemIconResolver); } @@ -407,13 +403,13 @@ public List> supportingSlotItemsFromNeiSlots(List> supportingSlotsFromRecipeEntry(RecipeEntry entry) { - return supportingSlotsFromRecipeSlots(entry != null ? entry.supportingSlots() : Collections.emptyList()); + return supportingSlotsFromRecipeSlots(entry != null ? entry.supportingSlots() : List.of()); } public List> supportingSlotItemsFromRecipeEntry(RecipeEntry entry, GuideSiteItemIconResolver itemIconResolver) { return supportingSlotItemsFromRecipeSlots( - entry != null ? entry.supportingSlots() : Collections.emptyList(), + entry != null ? entry.supportingSlots() : List.of(), itemIconResolver); } @@ -464,16 +460,12 @@ public GuideSiteExportedItem resultItem(@Nullable RecipeSlot result, @Nullable I private List neiSlotsToRecipeSlots(List slots) { if (slots == null || slots.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List recipeSlots = new ArrayList<>(slots.size()); for (NeiRecipeLookup.Slot slot : slots) { RecipeSlot recipeSlot = neiSlotToRecipeSlot(slot); - if (recipeSlot != null) { - recipeSlots.add(recipeSlot); - } else { - recipeSlots.add(new RecipeSlot(0, 0, Collections.emptyList())); - } + recipeSlots.add(Objects.requireNonNullElseGet(recipeSlot, () -> new RecipeSlot(0, 0, List.of()))); } return recipeSlots; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteRecipeTagRenderer.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteRecipeTagRenderer.java index 216b7c2e..ca38028a 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteRecipeTagRenderer.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteRecipeTagRenderer.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.siteexport.site; import java.util.ArrayList; -import java.util.Collections; import java.util.IdentityHashMap; import java.util.List; @@ -39,7 +38,7 @@ public interface NeiRecipeFinder { List findCraftingRecipeRefs(ItemStack targetStack); default List findUsages(ItemStack targetStack) { - return Collections.emptyList(); + return List.of(); } } @@ -80,7 +79,7 @@ public GuideSiteRecipeTagRenderer(GuideSiteItemIconResolver itemIconResolver, @Nullable GuideSiteNeiPhase1BackgroundExporter neiPhase1BackgroundExporter) { this(new GuideSiteRecipeExporter(), itemIconResolver, IdUtils::resolveItemStack, targetStack -> { if (targetStack == null || targetStack.getItem() == null) { - return Collections.emptyList(); + return List.of(); } return RecipeLookup.findByOutput(targetStack.getItem()); }, new NeiRecipeFinder() { @@ -88,7 +87,7 @@ public GuideSiteRecipeTagRenderer(GuideSiteItemIconResolver itemIconResolver, @Override public List findCraftingRecipes(ItemStack targetStack) { if (targetStack == null) { - return Collections.emptyList(); + return List.of(); } return NeiRecipeLookup.findCraftingRecipes(targetStack); } @@ -96,7 +95,7 @@ public List findCraftingRecipes(ItemStack targetStack) { @Override public List findCraftingRecipeRefs(ItemStack targetStack) { if (targetStack == null) { - return Collections.emptyList(); + return List.of(); } return NeiRecipeLookup.findCraftingRecipeRefs(targetStack); } @@ -104,7 +103,7 @@ public List findCraftingRecipeRefs(ItemStack @Override public List findUsages(ItemStack targetStack) { if (targetStack == null) { - return Collections.emptyList(); + return List.of(); } return NeiRecipeLookup.findUsages(targetStack); } @@ -113,7 +112,7 @@ public List findUsages(ItemStack targetStack) { @Override public List findCraftingHandlers(ItemStack targetStack) { if (targetStack == null) { - return Collections.emptyList(); + return List.of(); } return RecipeCache.getCraftingHandlers(targetStack); } @@ -121,7 +120,7 @@ public List findCraftingHandlers(ItemStack targetStack) { @Override public List findUsageHandlers(ItemStack targetStack) { if (targetStack == null) { - return Collections.emptyList(); + return List.of(); } return RecipeCache.getUsageHandlers(targetStack); } @@ -177,12 +176,12 @@ public List readOtherSlots(Object handler, int recipeIndex @Override public List findCraftingHandlers(ItemStack targetStack) { - return Collections.emptyList(); + return List.of(); } @Override public List findUsageHandlers(ItemStack targetStack) { - return Collections.emptyList(); + return List.of(); } }, new HandlerRuntime() { @@ -209,7 +208,7 @@ public int recipeCount(Object handler) { @Override public List readIngredientSlots(Object handler, int recipeIndex) { - return Collections.emptyList(); + return List.of(); } @Override @@ -219,7 +218,7 @@ public List readIngredientSlots(Object handler, int recipe @Override public List readOtherSlots(Object handler, int recipeIndex) { - return Collections.emptyList(); + return List.of(); } }, null); @@ -308,7 +307,7 @@ public int recipeCount(Object handler) { @Override public List readIngredientSlots(Object handler, int recipeIndex) { - return Collections.emptyList(); + return List.of(); } @Override @@ -318,7 +317,7 @@ public List readIngredientSlots(Object handler, int recipe @Override public List readOtherSlots(Object handler, int recipeIndex) { - return Collections.emptyList(); + return List.of(); } }, null); @@ -424,7 +423,7 @@ private String renderInternal(RenderRequest request) { return exporter.renderRecipeCollection(renderedRecipes, request.multi); } - renderedRecipes = request.usageQuery ? Collections.emptyList() + renderedRecipes = request.usageQuery ? List.of() : renderFromVanillaEntries(request, targetStack, hasRecipeFilter); if (!renderedRecipes.isEmpty()) { return exporter.renderRecipeCollection(renderedRecipes, request.multi); @@ -450,14 +449,14 @@ private RawHandlerRenderResult renderFromRawHandlers(RenderRequest request, Item request.handlerOrder, handlerRuntime); if (handlers.isEmpty()) { - return new RawHandlerRenderResult(Collections.emptyList(), false); + return new RawHandlerRenderResult(List.of(), false); } List renderedRecipes = new ArrayList<>(); for (int hi = 0; hi < handlers.size() && renderedRecipes.size() < request.limit; hi++) { Object handler = handlers.get(hi); int recipeCount = handlerRuntime.recipeCount(handler); - int recipeStart = request.recipeIndex >= 0 ? request.recipeIndex : 0; + int recipeStart = Math.max(request.recipeIndex, 0); int recipeEnd = request.recipeIndex >= 0 ? Math.min(recipeCount, request.recipeIndex + 1) : recipeCount; for (int recipeIndex = recipeStart; recipeIndex < recipeEnd && renderedRecipes.size() < request.limit; recipeIndex++) { @@ -481,7 +480,7 @@ private List renderFromNeiEntries(RenderRequest request, ItemStack targe } List refs = neiRecipeFinder.findCraftingRecipeRefs(targetStack); if (refs.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List renderedRecipes = new ArrayList<>(); @@ -521,11 +520,11 @@ private List renderFromNeiEntries(RenderRequest request, ItemStack targe private List renderFromUsageEntries(RenderRequest request, ItemStack targetStack, boolean hasRecipeFilter) { List entries = neiRecipeFinder.findUsages(targetStack); if (entries.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List renderedRecipes = new ArrayList<>(); - int entryStart = request.recipeIndex >= 0 ? request.recipeIndex : 0; + int entryStart = Math.max(request.recipeIndex, 0); int entryEnd = request.recipeIndex >= 0 ? Math.min(entries.size(), request.recipeIndex + 1) : entries.size(); for (int i = entryStart; i < entryEnd && renderedRecipes.size() < request.limit; i++) { NeiRecipeLookup.Entry entry = entries.get(i); @@ -550,11 +549,11 @@ private List renderFromVanillaEntries(RenderRequest request, ItemStack t boolean hasRecipeFilter) { List vanillaEntries = vanillaRecipeFinder.findByOutput(targetStack); if (vanillaEntries.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List renderedRecipes = new ArrayList<>(); - int entryStart = request.recipeIndex >= 0 ? request.recipeIndex : 0; + int entryStart = Math.max(request.recipeIndex, 0); int entryEnd = request.recipeIndex >= 0 ? Math.min(vanillaEntries.size(), request.recipeIndex + 1) : vanillaEntries.size(); for (int i = entryStart; i < entryEnd && renderedRecipes.size() < request.limit; i++) { @@ -641,7 +640,7 @@ public List readOtherSlots(Object handler, int recipeIndex private List mergeHandlers(List craftingHandlers, List usageHandlers) { if (craftingHandlers == null || craftingHandlers.isEmpty()) { - return usageHandlers != null ? usageHandlers : Collections.emptyList(); + return usageHandlers != null ? usageHandlers : List.of(); } if (usageHandlers == null || usageHandlers.isEmpty()) { return craftingHandlers; @@ -662,7 +661,7 @@ private List mergeHandlers(List craftingHandlers, List u } private List safeHandlers(List handlers) { - return handlers != null ? handlers : Collections.emptyList(); + return handlers != null ? handlers : List.of(); } @Nullable diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneAnnotationSerializer.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneAnnotationSerializer.java index 89941db7..e45dab65 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneAnnotationSerializer.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneAnnotationSerializer.java @@ -59,7 +59,7 @@ import com.hfstudio.guidenh.guide.style.ResolvedTextStyle; import com.hfstudio.guidenh.guide.style.TextAlignment; -public final class GuideSiteSceneAnnotationSerializer { +public class GuideSiteSceneAnnotationSerializer { private static final float ANNOTATION_THICKNESS_SCALE = 32.0f; private static final float MIN_EXPORTED_WORLD_THICKNESS = 1.0f / 256.0f; @@ -74,7 +74,7 @@ private GuideSiteSceneAnnotationSerializer() {} public static ExportedSceneLookupScope pushExportedSceneLookup( @Nullable Map exportedScenesByScene) { Map previous = EXPORTED_SCENE_LOOKUP.get(); - EXPORTED_SCENE_LOOKUP.set(exportedScenesByScene != null ? exportedScenesByScene : Collections.emptyMap()); + EXPORTED_SCENE_LOOKUP.set(exportedScenesByScene != null ? exportedScenesByScene : Map.of()); return new ExportedSceneLookupScope(previous); } @@ -103,41 +103,28 @@ public static AnnotationPayload serialize(LytGuidebookScene scene, GuideSiteTemp if (!scene.isStructureLibConditionSatisfied(annotation.getStructureLibCondition())) { continue; } - if (annotation instanceof InWorldBoxAnnotation box) { - inWorld.add(serializeBox(box, templates, currentPageId, assetExporter, itemIconResolver)); - continue; - } - if (annotation instanceof InWorldLineAnnotation line) { - inWorld.add(serializeLine(line, templates, currentPageId, assetExporter, itemIconResolver)); - continue; - } - if (annotation instanceof InWorldBlockFaceOverlayAnnotation blockOverlay) { - inWorld.add( - serializeBlockOverlay(blockOverlay, templates, currentPageId, assetExporter, itemIconResolver)); - continue; - } - if (annotation instanceof DiamondAnnotation diamond) { - overlay.add(serializeDiamond(diamond, templates, currentPageId, assetExporter, itemIconResolver)); - continue; - } - if (annotation instanceof TextAnnotation textAnnotation) { - overlay.add( - serializeTextAnnotation( - textAnnotation, - templates, - currentPageId, - assetExporter, - itemIconResolver)); - continue; - } - if (annotation instanceof PonderInputAnnotation inputAnnotation) { - overlay.add( - serializeInputAnnotation( - inputAnnotation, - templates, - currentPageId, - assetExporter, - itemIconResolver)); + switch (annotation) { + case InWorldBoxAnnotation box -> inWorld.add(serializeBox(box, templates, currentPageId, assetExporter, itemIconResolver)); + case InWorldLineAnnotation line -> inWorld.add(serializeLine(line, templates, currentPageId, assetExporter, itemIconResolver)); + case InWorldBlockFaceOverlayAnnotation blockOverlay -> inWorld.add( + serializeBlockOverlay(blockOverlay, templates, currentPageId, assetExporter, itemIconResolver)); + case DiamondAnnotation diamond -> overlay.add(serializeDiamond(diamond, templates, currentPageId, assetExporter, itemIconResolver)); + case TextAnnotation textAnnotation -> overlay.add( + serializeTextAnnotation( + textAnnotation, + templates, + currentPageId, + assetExporter, + itemIconResolver)); + case PonderInputAnnotation inputAnnotation -> overlay.add( + serializeInputAnnotation( + inputAnnotation, + templates, + currentPageId, + assetExporter, + itemIconResolver)); + default -> { + } } } } @@ -460,7 +447,7 @@ private ExportedSceneLookupScope(Map @Override public void close() { - EXPORTED_SCENE_LOOKUP.set(previous != null ? previous : Collections.emptyMap()); + EXPORTED_SCENE_LOOKUP.set(previous != null ? previous : Map.of()); } } @@ -476,7 +463,7 @@ private static String renderPlainTextFragment(@Nullable String text) { String[] lines = normalized.split("\\n", -1); StringBuilder html = new StringBuilder(); for (String line : lines) { - if (html.length() > 0) { + if (!html.isEmpty()) { html.append("
"); } html.append(renderLegacyFormattedText(line)); @@ -487,25 +474,18 @@ private static String renderPlainTextFragment(@Nullable String text) { private static String render(@Nullable GuideTooltip tooltip, @Nullable ResourceLocation currentPageId, @Nullable GuideSitePageAssetExporter assetExporter, GuideSiteItemIconResolver itemIconResolver, @Nullable GuideSiteTemplateRegistry templates, boolean allowNestedItemTooltips) { - if (tooltip == null) { - return ""; - } - if (tooltip instanceof TextTooltip textTooltip) { - return renderPlainTextTooltip(textTooltip.getText()); - } - if (tooltip instanceof ItemTooltip itemTooltip) { - return renderItemTooltip(itemTooltip, itemIconResolver); - } - if (tooltip instanceof ContentTooltip contentTooltip) { - return renderBlock( - contentTooltip.getContent(), - currentPageId, - assetExporter, - itemIconResolver, - templates, - allowNestedItemTooltips); - } - return ""; + return switch (tooltip) { + case TextTooltip textTooltip -> renderPlainTextTooltip(textTooltip.getText()); + case ItemTooltip itemTooltip -> renderItemTooltip(itemTooltip, itemIconResolver); + case ContentTooltip contentTooltip -> renderBlock( + contentTooltip.getContent(), + currentPageId, + assetExporter, + itemIconResolver, + templates, + allowNestedItemTooltips); + case null, default -> ""; + }; } private static String renderPlainTextTooltip(@Nullable String text) { @@ -577,143 +557,147 @@ private static void appendBlock(StringBuilder html, @Nullable LytNode node, @Nullable ResourceLocation currentPageId, @Nullable GuideSitePageAssetExporter assetExporter, GuideSiteItemIconResolver itemIconResolver, @Nullable GuideSiteTemplateRegistry templates, boolean allowNestedItemTooltips) { - if (node == null) { - return; - } - if (node instanceof LytDocument document) { - for (LytBlock child : document.getBlocks()) { - appendBlock( - html, - child, - currentPageId, - assetExporter, - itemIconResolver, - templates, - allowNestedItemTooltips); + switch (node) { + case null -> { + return; + } + case LytDocument document -> { + for (LytBlock child : document.getBlocks()) { + appendBlock( + html, + child, + currentPageId, + assetExporter, + itemIconResolver, + templates, + allowNestedItemTooltips); + } + return; + } + case LytGuidebookScene scene -> { + // Inside a hover/content tooltip we MUST NOT spawn a second WebGL-backed scene + // viewer: rehydrating a live inside a popover blows past the + // browser's per-document WebGL context cap, which makes the page-level scenes + // forfeit their context (going transparent) and frequently hard-crashes the + // page on Firefox/Chromium. Render a static placeholder image instead so the + // tooltip still shows what the scene looks like without re-hydrating it. + GuideSiteExportedScene exportedScene = resolveExportedScene(scene); + int width = Math.max(16, scene.getSceneWidth()); + int height = Math.max(16, scene.getSceneHeight()); + html.append(GuideSiteSceneTagRenderer.renderStaticScenePlaceholder(width, height, exportedScene)); + return; + } + case LytHeading heading -> { + appendParagraph( + html, + heading, + "h" + clampHeadingDepth(heading.getDepth()), + currentPageId, + assetExporter, + itemIconResolver, + templates, + allowNestedItemTooltips); + return; + } + case LytParagraph paragraph -> { + appendParagraph( + html, + paragraph, + "p", + currentPageId, + assetExporter, + itemIconResolver, + templates, + allowNestedItemTooltips); + return; + } + case LytList list -> { + appendList( + html, + list, + currentPageId, + assetExporter, + itemIconResolver, + templates, + allowNestedItemTooltips); + return; + } + case LytListItem listItem -> { + appendListItem( + html, + listItem, + currentPageId, + assetExporter, + itemIconResolver, + templates, + allowNestedItemTooltips); + return; + } + case LytThematicBreak lytThematicBreak -> { + html.append("
"); + return; + } + case LytTable table -> { + appendTable( + html, + table, + currentPageId, + assetExporter, + itemIconResolver, + templates, + allowNestedItemTooltips); + return; + } + case LytSlotGrid slotGrid -> { + appendSlotGrid( + html, + slotGrid, + itemIconResolver, + currentPageId, + assetExporter, + templates, + allowNestedItemTooltips); + return; + } + case LytItemGrid itemGrid -> { + appendItemGrid( + html, + itemGrid, + itemIconResolver, + currentPageId, + assetExporter, + templates, + allowNestedItemTooltips); + return; + } + case LytItemImage itemImage -> { + appendItemStacks( + html, + itemImage.getStacks(), + itemIconResolver, + currentPageId, + assetExporter, + templates, + allowNestedItemTooltips); + return; + } + case LytImage image -> { + appendImage(html, image, assetExporter); + return; + } + case LytSlot slot -> { + appendSlot( + html, + slot, + itemIconResolver, + currentPageId, + assetExporter, + templates, + allowNestedItemTooltips); + return; + } + default -> { } - return; - } - if (node instanceof LytGuidebookScene scene) { - // Inside a hover/content tooltip we MUST NOT spawn a second WebGL-backed scene - // viewer: rehydrating a live inside a popover blows past the - // browser's per-document WebGL context cap, which makes the page-level scenes - // forfeit their context (going transparent) and frequently hard-crashes the - // page on Firefox/Chromium. Render a static placeholder image instead so the - // tooltip still shows what the scene looks like without re-hydrating it. - GuideSiteExportedScene exportedScene = resolveExportedScene(scene); - int width = Math.max(16, scene.getSceneWidth()); - int height = Math.max(16, scene.getSceneHeight()); - html.append(GuideSiteSceneTagRenderer.renderStaticScenePlaceholder(width, height, exportedScene)); - return; - } - if (node instanceof LytHeading heading) { - appendParagraph( - html, - heading, - "h" + clampHeadingDepth(heading.getDepth()), - currentPageId, - assetExporter, - itemIconResolver, - templates, - allowNestedItemTooltips); - return; - } - if (node instanceof LytParagraph paragraph) { - appendParagraph( - html, - paragraph, - "p", - currentPageId, - assetExporter, - itemIconResolver, - templates, - allowNestedItemTooltips); - return; - } - if (node instanceof LytList list) { - appendList( - html, - list, - currentPageId, - assetExporter, - itemIconResolver, - templates, - allowNestedItemTooltips); - return; - } - if (node instanceof LytListItem listItem) { - appendListItem( - html, - listItem, - currentPageId, - assetExporter, - itemIconResolver, - templates, - allowNestedItemTooltips); - return; - } - if (node instanceof LytThematicBreak) { - html.append("
"); - return; - } - if (node instanceof LytTable table) { - appendTable( - html, - table, - currentPageId, - assetExporter, - itemIconResolver, - templates, - allowNestedItemTooltips); - return; - } - if (node instanceof LytSlotGrid slotGrid) { - appendSlotGrid( - html, - slotGrid, - itemIconResolver, - currentPageId, - assetExporter, - templates, - allowNestedItemTooltips); - return; - } - if (node instanceof LytItemGrid itemGrid) { - appendItemGrid( - html, - itemGrid, - itemIconResolver, - currentPageId, - assetExporter, - templates, - allowNestedItemTooltips); - return; - } - if (node instanceof LytItemImage itemImage) { - appendItemStacks( - html, - itemImage.getStacks(), - itemIconResolver, - currentPageId, - assetExporter, - templates, - allowNestedItemTooltips); - return; - } - if (node instanceof LytImage image) { - appendImage(html, image, assetExporter); - return; - } - if (node instanceof LytSlot slot) { - appendSlot( - html, - slot, - itemIconResolver, - currentPageId, - assetExporter, - templates, - allowNestedItemTooltips); - return; } List children = node.getChildren(); @@ -816,7 +800,7 @@ private static void appendTable(StringBuilder html, LytTable table, @Nullable Re html.append(""); appendTableRow( html, - rows.get(0), + rows.getFirst(), "th", currentPageId, assetExporter, @@ -876,7 +860,7 @@ private static void appendParagraphStyleAttribute(StringBuilder html, ResolvedTe } else if (style.alignment() == TextAlignment.RIGHT) { css.append("text-align:right;"); } - if (css.length() > 0) { + if (!css.isEmpty()) { html.append(" style=\"") .append(escapeAttribute(css.toString())) .append("\""); @@ -887,49 +871,33 @@ private static void appendFlowContent(StringBuilder html, @Nullable LytFlowConte @Nullable ResourceLocation currentPageId, @Nullable GuideSitePageAssetExporter assetExporter, GuideSiteItemIconResolver itemIconResolver, @Nullable GuideSiteTemplateRegistry templates, boolean allowNestedItemTooltips) { - if (content == null) { - return; - } - if (content instanceof LytFlowText text) { - html.append(escapeHtml(text.getText())); - return; - } - if (content instanceof LytFlowBreak) { - html.append("
"); - return; - } - if (content instanceof LytFlowAnchor flowAnchor) { - html.append(""); - return; - } - if (content instanceof LytFlowInlineBlock inlineBlock) { - appendInlineBlock( - html, - inlineBlock, - currentPageId, - assetExporter, - itemIconResolver, - templates, - allowNestedItemTooltips); - return; - } - if (content instanceof LytFlowLink link) { - appendLink(html, link, currentPageId, itemIconResolver, templates, allowNestedItemTooltips); - return; - } - if (content instanceof LytFlowSpan span) { - appendStyledFlowContainer( - html, - span, - "span", - currentPageId, - assetExporter, - itemIconResolver, - templates, - allowNestedItemTooltips, - null); + switch (content) { + case LytFlowText text -> html.append(escapeHtml(text.getText())); + case LytFlowBreak lytFlowBreak -> html.append("
"); + case LytFlowAnchor flowAnchor -> html.append(""); + case LytFlowInlineBlock inlineBlock -> appendInlineBlock( + html, + inlineBlock, + currentPageId, + assetExporter, + itemIconResolver, + templates, + allowNestedItemTooltips); + case LytFlowLink link -> appendLink(html, link, currentPageId, itemIconResolver, templates, allowNestedItemTooltips); + case LytFlowSpan span -> appendStyledFlowContainer( + html, + span, + "span", + currentPageId, + assetExporter, + itemIconResolver, + templates, + allowNestedItemTooltips, + null); + case null, default -> { + } } } @@ -1073,7 +1041,7 @@ private static void appendInlineStyleAttribute(StringBuilder html, ResolvedTextS .append(style.fontScale()) .append("em;"); } - if (css.length() > 0) { + if (!css.isEmpty()) { html.append(" style=\"") .append(escapeAttribute(css.toString())) .append("\""); @@ -1249,7 +1217,7 @@ private static String renderLegacyFormattedText(@Nullable String text) { } private static void appendLegacySegment(StringBuilder html, StringBuilder segment, LegacyStyle style) { - if (segment.length() == 0) { + if (segment.isEmpty()) { return; } String text = escapeHtml(segment.toString()); @@ -1281,7 +1249,7 @@ private static void appendLegacySegment(StringBuilder html, StringBuilder segmen css.append("filter:blur(0.6px);"); } - if (css.length() == 0) { + if (css.isEmpty()) { html.append(text); return; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneCollector.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneCollector.java index cf4658a3..2beaa7e6 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneCollector.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneCollector.java @@ -2,8 +2,8 @@ import java.util.ArrayDeque; import java.util.ArrayList; -import java.util.Collections; import java.util.IdentityHashMap; +import java.util.List; import java.util.Optional; import com.hfstudio.guidenh.guide.GuidePage; @@ -18,13 +18,13 @@ import com.hfstudio.guidenh.guide.scene.LytGuidebookScene; import com.hfstudio.guidenh.guide.scene.annotation.SceneAnnotation; -public final class GuideSiteSceneCollector { +public class GuideSiteSceneCollector { private GuideSiteSceneCollector() {} public static GuideSiteCollectedScenes collect(GuidePage compiledPage) { if (compiledPage == null || compiledPage.document() == null) { - return new GuideSiteCollectedScenes(Collections.emptyList(), Collections.emptyList()); + return new GuideSiteCollectedScenes(List.of(), List.of()); } CollectorState state = new CollectorState(); diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneHoverTargetSerializer.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneHoverTargetSerializer.java index b24a8c26..74d359bf 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneHoverTargetSerializer.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneHoverTargetSerializer.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.siteexport.site; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -34,7 +33,7 @@ import com.hfstudio.guidenh.integration.structurelib.StructureLibSceneMetadata; import com.hfstudio.guidenh.integration.structurelib.StructureLibTooltipContentBuilder; -public final class GuideSiteSceneHoverTargetSerializer { +public class GuideSiteSceneHoverTargetSerializer { private static final Gson GSON = new GsonBuilder().disableHtmlEscaping() .serializeNulls() @@ -175,7 +174,7 @@ public static String serialize(LytGuidebookScene scene, GuideSiteTemplateRegistr private static List collectStructureLibMetadata(LytGuidebookScene scene) { if (scene == null) { - return Collections.emptyList(); + return List.of(); } List metadataList = new ArrayList<>(); for (StructureLibSceneBinding binding : scene.getStructureLibBindings()) { @@ -187,7 +186,7 @@ private static List collectStructureLibMetadata(LytGu return metadataList; } StructureLibSceneMetadata metadata = scene.getStructureLibSceneMetadata(); - return metadata != null ? Collections.singletonList(metadata) : Collections.emptyList(); + return metadata != null ? List.of(metadata) : List.of(); } private static List> buildBlockTargets(LytGuidebookScene scene, int x, int y, int z, @@ -196,7 +195,7 @@ private static List> buildBlockTargets(LytGuidebookScene sce @Nullable GuideSitePageAssetExporter assetExporter, GuideSiteItemIconResolver itemIconResolver) { BlockHoverGeometry geometry = resolveBlockHoverGeometry(scene.getLevel(), x, y, z); if (geometry == null || geometry.bounds.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List> targets = new ArrayList<>(geometry.bounds.size()); @@ -355,7 +354,7 @@ private static BlockHoverGeometry resolveBlockHoverGeometry(GuidebookLevel level try { collisionBounds = GuideBlockBoundsResolver.collectCollisionBounds(level, block, x, y, z); } catch (Throwable ignored) { - collisionBounds = Collections.emptyList(); + collisionBounds = List.of(); } List bounds = new ArrayList<>(collisionBounds.size()); @@ -377,15 +376,11 @@ private static BlockHoverGeometry resolveBlockHoverGeometry(GuidebookLevel level } AxisAlignedBB fallbackBounds = GuideBlockBoundsResolver.resolveSelectedBounds(level, x, y, z); - if (fallbackBounds == null || !GuideBlockBoundsResolver.isNonEmpty(fallbackBounds)) { + if (!GuideBlockBoundsResolver.isNonEmpty(fallbackBounds)) { fallbackBounds = AxisAlignedBB.getBoundingBox(x, y, z, x + 1d, y + 1d, z + 1d); } AxisAlignedBB normalizedFallbackBounds = normalizeBounds(fallbackBounds); - return new BlockHoverGeometry( - block, - Collections.singletonList(normalizedFallbackBounds), - Collections.emptyList(), - normalizedFallbackBounds); + return new BlockHoverGeometry(block, List.of(normalizedFallbackBounds), List.of(), normalizedFallbackBounds); } @Nullable @@ -461,7 +456,7 @@ private static List resolveCandidateSides(AxisAlignedBB bounds, int x, } Integer inferredSide = inferPreferredSide(bounds, x, y, z); if (inferredSide != null && !sides.contains(inferredSide)) { - sides.add(0, inferredSide); + sides.addFirst(inferredSide); } return sides; } @@ -491,7 +486,7 @@ private static AxisAlignedBB resolveNearestRayHitBounds(List coll AxisAlignedBB bestBounds = null; double bestDistanceSq = Double.POSITIVE_INFINITY; for (AxisAlignedBB collisionBoundsBox : collisionBounds) { - if (collisionBoundsBox == null || !GuideBlockBoundsResolver.isNonEmpty(collisionBoundsBox)) { + if (!GuideBlockBoundsResolver.isNonEmpty(collisionBoundsBox)) { continue; } MovingObjectPosition intercept = collisionBoundsBox.calculateIntercept(rayStart, rayEnd); diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneRuntimeExporter.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneRuntimeExporter.java index f553e329..080099c7 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneRuntimeExporter.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneRuntimeExporter.java @@ -4,7 +4,6 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -181,7 +180,7 @@ private void captureSceneMeshes(LytGuidebookScene scene, int width, int height) width, height, 0.0f, - Collections.emptyList(), + List.of(), LightDarkMode.LIGHT_MODE, layerSelection, scene.getRenderableParticlesForExport(), diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneTagRenderer.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneTagRenderer.java index 7e03e13b..4fd80f93 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneTagRenderer.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSceneTagRenderer.java @@ -232,7 +232,7 @@ private void appendSceneActionAttributes(StringBuilder html, GuideSiteExportedSc } if (exportedScene.gridButtonEnabled()) { html.append(" data-scene-grid-toggle=\"true\" data-scene-grid-visible=\"") - .append(Boolean.toString(exportedScene.gridVisible())) + .append(exportedScene.gridVisible()) .append("\""); if (exportedScene.gridAnnotationJson() != null && !exportedScene.gridAnnotationJson() .isEmpty()) { @@ -243,7 +243,7 @@ private void appendSceneActionAttributes(StringBuilder html, GuideSiteExportedSc } if (exportedScene.blockStatsButtonEnabled()) { html.append(" data-scene-block-stats-toggle=\"true\" data-scene-block-stats-visible=\"") - .append(Boolean.toString(exportedScene.blockStatsVisible())) + .append(exportedScene.blockStatsVisible()) .append("\""); } } @@ -322,7 +322,7 @@ public static String renderSceneHtml(int logicalWidth, int logicalHeight, boolea .append("\" data-scene-height=\"") .append(normalizedHeight) .append("\" data-scene-interactive=\"") - .append(Boolean.toString(interactive)) + .append(interactive) .append("\" data-scene-default-namespace=\"") .append(escapeAttributeStatic(defaultNamespace != null ? defaultNamespace : "guidenh")) .append("\" data-scene-display-scale=\"") @@ -461,8 +461,8 @@ private AnnotationPayload collectAnnotations(MdxJsxElementFields element, String if ("LineAnnotation".equals(name)) { List points = parseLinePoints(flowElement); - float[] from = points.get(0); - float[] to = points.get(points.size() - 1); + float[] from = points.getFirst(); + float[] to = points.getLast(); inWorld.add( buildInWorldAnnotation( "line", @@ -475,7 +475,7 @@ private AnnotationPayload collectAnnotations(MdxJsxElementFields element, String createTemplateId(flowElement, defaultNamespace, currentPageId, templates), readBooleanValue(flowElement, "alwaysOnTop", false), parseStructureLibCondition(flowElement))); - Map data = inWorld.get(inWorld.size() - 1); + Map data = inWorld.getLast(); data.put("points", points); String arrow = readOptional(flowElement, "arrow"); if (arrow != null && !arrow.isEmpty()) { @@ -625,7 +625,7 @@ private String resolveTextAnnotationPlainText(MdxJsxElementFields flowElement) { StringBuilder builder = new StringBuilder(); for (MdAstAnyContent child : flowElement.children()) { if (child instanceof MdAstNode node) { - if (builder.length() > 0) { + if (!builder.isEmpty()) { builder.append('\n'); } builder.append(node.toText()); diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteScopedGuide.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteScopedGuide.java index 8702a140..88c67ee4 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteScopedGuide.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteScopedGuide.java @@ -28,16 +28,15 @@ public class GuideSiteScopedGuide implements Guide, MediaWikiListContextProvider private final Map, PageIndex> indexOverrides; @Nullable private final MediaWikiListContext mediaWikiListContext; - private final Map compiledPages = Collections - .synchronizedMap(new IdentityHashMap()); + private final Map compiledPages = Collections.synchronizedMap(new IdentityHashMap<>()); public GuideSiteScopedGuide(Guide delegate, Map parsedPagesById, NavigationTree navigationTree, Map, PageIndex> indexOverrides, @Nullable MediaWikiListContext mediaWikiListContext) { this.delegate = delegate; - this.parsedPagesById = Collections.unmodifiableMap(new LinkedHashMap<>(parsedPagesById)); + this.parsedPagesById = Map.copyOf(new LinkedHashMap<>(parsedPagesById)); this.navigationTree = navigationTree != null ? navigationTree : new NavigationTree(); - this.indexOverrides = indexOverrides != null ? new LinkedHashMap<>(indexOverrides) : Collections.emptyMap(); + this.indexOverrides = indexOverrides != null ? Map.copyOf(new LinkedHashMap<>(indexOverrides)) : Map.of(); this.mediaWikiListContext = mediaWikiListContext; } diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSoundExport.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSoundExport.java index 3a08f8ff..14e098e8 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSoundExport.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteSoundExport.java @@ -2,6 +2,7 @@ import net.minecraft.util.ResourceLocation; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import com.hfstudio.guidenh.guide.compiler.IdUtils; @@ -50,11 +51,10 @@ public static String exportSource(GuideSoundSpec sound, MdxSoundAttributes attri return ""; } ResourceLocation assetId = resolveSoundAsset(sound, attributes, currentPageId); - return assetId != null ? assetExporter.exportSound(assetId) : ""; + return assetExporter.exportSound(assetId); } - @Nullable - public static ResourceLocation resolveSoundAsset(GuideSoundSpec sound, MdxSoundAttributes attributes, + public static @NotNull ResourceLocation resolveSoundAsset(GuideSoundSpec sound, MdxSoundAttributes attributes, @Nullable ResourceLocation currentPageId) { String rawSource = attributes.source(); if (hasText(rawSource) && currentPageId != null) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteWriter.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteWriter.java index 6e3afbd8..0c26203c 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteWriter.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/GuideSiteWriter.java @@ -15,7 +15,6 @@ import java.util.List; import java.util.Locale; import java.util.Map; -import java.util.stream.Collectors; import java.util.stream.Stream; import net.minecraft.util.ResourceLocation; @@ -137,24 +136,24 @@ public void writePage(Path outDir, String namespace, String guidePath, String la .replace("{{sidebar}}", sidebarHtml) .replace("{{content}}", contentHtml + String.join("", templateHtml)) .replace("{{root}}", relativeRoot(outDir, pagePath)); - Files.write(pagePath, layout.getBytes(StandardCharsets.UTF_8)); + Files.writeString(pagePath, layout); } public void writeNavigationIndex(Path outDir, String namespace, String guidePath, String language, String json) throws Exception { Path path = outDir.resolve(Paths.get("_data", "nav", namespace, guidePath, language + ".json")); Files.createDirectories(path.getParent()); - Files.write(path, json.getBytes(StandardCharsets.UTF_8)); + Files.writeString(path, json); } public void writeSearchIndex(Path outDir, String language, String json) throws Exception { Path path = outDir.resolve(Paths.get("_data", "search", language + ".json")); Files.createDirectories(path.getParent()); - Files.write(path, json.getBytes(StandardCharsets.UTF_8)); + Files.writeString(path, json); } public void writeReport(Path outDir, String json) throws Exception { - Files.write(outDir.resolve("export-report.json"), json.getBytes(StandardCharsets.UTF_8)); + Files.writeString(outDir.resolve("export-report.json"), json); } public void writeLandingPage(Path outDir, @Nullable String firstPageUrl, String title) throws Exception { @@ -178,7 +177,7 @@ public void writeLandingPage(Path outDir, @Nullable String firstPageUrl, String + escapeHtml(uiText.siteExportOpenGuide()) + "

"; } - Files.write(outDir.resolve("index.html"), html.getBytes(StandardCharsets.UTF_8)); + Files.writeString(outDir.resolve("index.html"), html); } public void writeExternalLinkPage(Path outDir) throws Exception { @@ -246,7 +245,7 @@ public void writeExternalLinkPage(Path outDir) throws Exception { .replace("{{zh_message}}", escapeJsString(chinese.externalLinkMessage())) .replace("{{zh_open}}", escapeJsString(chinese.externalLinkOpen())) .replace("{{zh_back}}", escapeJsString(chinese.externalLinkBack())); - Files.write(pagePath, html.getBytes(StandardCharsets.UTF_8)); + Files.writeString(pagePath, html); } public String pageUrl(String namespace, String guidePath, String language, String pageRelativeFile) { @@ -329,12 +328,12 @@ public String renderSidebar(MutableGuide guide, String language, NavigationTree } private void writeStartScripts(Path outDir) throws Exception { - Files.write(outDir.resolve("start.bat"), windowsStartScript().getBytes(StandardCharsets.UTF_8)); - Files.write(outDir.resolve("stop.bat"), windowsStopScript().getBytes(StandardCharsets.UTF_8)); + Files.writeString(outDir.resolve("start.bat"), windowsStartScript()); + Files.writeString(outDir.resolve("stop.bat"), windowsStopScript()); Path startSh = outDir.resolve("start.sh"); Path stopSh = outDir.resolve("stop.sh"); - Files.write(startSh, unixStartScript().getBytes(StandardCharsets.UTF_8)); - Files.write(stopSh, unixStopScript().getBytes(StandardCharsets.UTF_8)); + Files.writeString(startSh, unixStartScript()); + Files.writeString(stopSh, unixStopScript()); trySetExecutable(startSh); trySetExecutable(stopSh); } @@ -742,7 +741,7 @@ private String loadText(String resourcePath) throws Exception { while ((read = in.read(buffer)) >= 0) { out.write(buffer, 0, read); } - return new String(out.toByteArray(), StandardCharsets.UTF_8); + return out.toString(StandardCharsets.UTF_8); } } @@ -932,7 +931,7 @@ private void deleteRecursively(Path target, Path outDir) throws Exception { if (Files.isDirectory(normalizedTarget)) { try (Stream stream = Files.walk(normalizedTarget)) { for (Path path : stream.sorted(Comparator.reverseOrder()) - .collect(Collectors.toList())) { + .toList()) { Files.deleteIfExists(path); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/layout/PositionedNeiSiteRecipeLayoutStrategy.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/layout/PositionedNeiSiteRecipeLayoutStrategy.java index 148c0b81..6439e5a4 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/layout/PositionedNeiSiteRecipeLayoutStrategy.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/layout/PositionedNeiSiteRecipeLayoutStrategy.java @@ -10,7 +10,7 @@ * inside a percentage-based canvas so handlers with irregular grids (e.g. loot tables) match NEI * spacing more closely than the legacy 3脳3 + vertical {@code others} column. */ -public final class PositionedNeiSiteRecipeLayoutStrategy implements SiteRecipeLayoutStrategy { +public class PositionedNeiSiteRecipeLayoutStrategy implements SiteRecipeLayoutStrategy { @Override public boolean supports(SiteRecipeLayoutContext ctx) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/layout/SiteRecipeLayoutStrategyRegistry.java b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/layout/SiteRecipeLayoutStrategyRegistry.java index 4d687d34..4f9d3cbc 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/layout/SiteRecipeLayoutStrategyRegistry.java +++ b/src/main/java/com/hfstudio/guidenh/guide/siteexport/site/layout/SiteRecipeLayoutStrategyRegistry.java @@ -1,8 +1,6 @@ package com.hfstudio.guidenh.guide.siteexport.site.layout; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.List; /** @@ -10,17 +8,17 @@ * and returns non-empty HTML wins; {@link DefaultSiteRecipeLayoutStrategy} should be registered * last as unconditional fallback. */ -public final class SiteRecipeLayoutStrategyRegistry { +public class SiteRecipeLayoutStrategyRegistry { private final List strategies; public SiteRecipeLayoutStrategyRegistry(List strategies) { - this.strategies = Collections.unmodifiableList(new ArrayList<>(strategies)); + this.strategies = List.copyOf(new ArrayList<>(strategies)); } public static SiteRecipeLayoutStrategyRegistry createDefault() { return new SiteRecipeLayoutStrategyRegistry( - Arrays.asList(new PositionedNeiSiteRecipeLayoutStrategy(), new DefaultSiteRecipeLayoutStrategy())); + List.of(new PositionedNeiSiteRecipeLayoutStrategy(), new DefaultSiteRecipeLayoutStrategy())); } public String render(SiteRecipeLayoutContext ctx) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/sound/GuideSoundParsers.java b/src/main/java/com/hfstudio/guidenh/guide/sound/GuideSoundParsers.java index 4ec7b3e1..1ee97cdd 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/sound/GuideSoundParsers.java +++ b/src/main/java/com/hfstudio/guidenh/guide/sound/GuideSoundParsers.java @@ -1,7 +1,7 @@ package com.hfstudio.guidenh.guide.sound; -import java.io.UnsupportedEncodingException; import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; import net.minecraft.util.ResourceLocation; @@ -227,10 +227,6 @@ private static Float getOptionalFloat(PageCompiler compiler, LytErrorSink errorS } private static String decode(String value) { - try { - return URLDecoder.decode(value, "UTF-8"); - } catch (UnsupportedEncodingException e) { - return value; - } + return URLDecoder.decode(value, StandardCharsets.UTF_8); } } diff --git a/src/main/java/com/hfstudio/guidenh/guide/sound/GuideSoundPlayback.java b/src/main/java/com/hfstudio/guidenh/guide/sound/GuideSoundPlayback.java index 45ca6345..f70d5095 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/sound/GuideSoundPlayback.java +++ b/src/main/java/com/hfstudio/guidenh/guide/sound/GuideSoundPlayback.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.guide.sound; import java.util.Collections; -import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -20,8 +19,7 @@ public class GuideSoundPlayback { private static final Map LAST_PLAYED_AT = new ConcurrentHashMap<>(); private static final Map LAST_WARNED_AT = new ConcurrentHashMap<>(); - private static final Set ACTIVE_SOUNDS = Collections - .newSetFromMap(new ConcurrentHashMap()); + private static final Set ACTIVE_SOUNDS = Collections.newSetFromMap(new ConcurrentHashMap<>()); private static final long WARN_INTERVAL_MILLIS = 30000L; private GuideSoundPlayback() {} @@ -100,13 +98,7 @@ private static void rememberPlayed(GuideSoundSpec sound) { } private static void pruneInactive(SoundHandler soundHandler) { - Iterator iterator = ACTIVE_SOUNDS.iterator(); - while (iterator.hasNext()) { - ISound sound = iterator.next(); - if (!soundHandler.isSoundPlaying(sound)) { - iterator.remove(); - } - } + ACTIVE_SOUNDS.removeIf(sound -> !soundHandler.isSoundPlaying(sound)); } private static String cooldownKey(GuideSoundSpec sound) { diff --git a/src/main/java/com/hfstudio/guidenh/guide/sound/GuideSoundTrigger.java b/src/main/java/com/hfstudio/guidenh/guide/sound/GuideSoundTrigger.java index 624a67de..c79bddf1 100644 --- a/src/main/java/com/hfstudio/guidenh/guide/sound/GuideSoundTrigger.java +++ b/src/main/java/com/hfstudio/guidenh/guide/sound/GuideSoundTrigger.java @@ -15,15 +15,11 @@ public static GuideSoundTrigger parse(String value, GuideSoundTrigger defaultVal } String normalized = value.trim() .toLowerCase(Locale.ROOT); - switch (normalized) { - case "click": - return CLICK; - case "hover": - return HOVER; - case "enter": - return ENTER; - default: - return defaultValue; - } + return switch (normalized) { + case "click" -> CLICK; + case "hover" -> HOVER; + case "enter" -> ENTER; + default -> defaultValue; + }; } } diff --git a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2BaseTileNetworkRegistration.java b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2BaseTileNetworkRegistration.java index beeaab02..15f281eb 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2BaseTileNetworkRegistration.java +++ b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2BaseTileNetworkRegistration.java @@ -19,7 +19,7 @@ * excluding {@link appeng.tile.networking.TileCableBus}): multiplayer batch RPC, snippet encode/decode, session shared * key {@link #SHARED_BASE_TILE_MP_SNAPSHOT}. Priority 11 so cable-bus fetch/snippet runs first (default 10). */ -public final class Ae2BaseTileNetworkRegistration { +public class Ae2BaseTileNetworkRegistration { /** Session key parallel to {@link Ae2ServerPreviewRegistration} cable snapshot key. */ static final String SHARED_BASE_TILE_MP_SNAPSHOT = "guidenh.ae2.previewAuthority.baseTileXpSnapshot_v1"; diff --git a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2BaseTileNetworkStreamPreview.java b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2BaseTileNetworkStreamPreview.java index 8802baa2..0a141f92 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2BaseTileNetworkStreamPreview.java +++ b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2BaseTileNetworkStreamPreview.java @@ -25,7 +25,7 @@ * uses multipart streams 鈥?guide export uses cable-bus supplement ({@link Ae2ServerPreviewRegistration#SUPPLEMENT_ID}) * instead of this blob. */ -public final class Ae2BaseTileNetworkStreamPreview { +public class Ae2BaseTileNetworkStreamPreview { /** Stored under {@link ServerPreviewSupplementNbt#TAG_ROOT}. */ public static final String SUPPLEMENT_ID = "guidenh.ae2.ae_base_tile_network"; @@ -51,9 +51,8 @@ public static boolean eligible(TileEntity te) { * TE * or handler-side world TE). */ - @Nullable @Optional.Method(modid = "appliedenergistics2") - public static byte[] captureAuthoritativeXPayload(@Nullable AEBaseTile tile) { + public static byte @Nullable [] captureAuthoritativeXPayload(@Nullable AEBaseTile tile) { if (tile == null) { return null; } @@ -79,7 +78,7 @@ public static byte[] captureAuthoritativeXPayload(@Nullable AEBaseTile tile) { /** Applies authoritative {@code X} to a preview-place {@link AEBaseTile}, or {@code false} when no-op / failure. */ @Optional.Method(modid = "appliedenergistics2") - public static boolean applyAuthorityToPreviewTile(AEBaseTile previewTile, @Nullable byte[] xPayload) { + public static boolean applyAuthorityToPreviewTile(AEBaseTile previewTile, byte @Nullable [] xPayload) { if (xPayload == null || xPayload.length == 0) { return false; } diff --git a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2BaseTileNetworkStructureSupport.java b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2BaseTileNetworkStructureSupport.java index 81897e04..b0743c0f 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2BaseTileNetworkStructureSupport.java +++ b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2BaseTileNetworkStructureSupport.java @@ -1,11 +1,12 @@ package com.hfstudio.guidenh.integration.ae2; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; +import net.minecraft.client.Minecraft; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; @@ -47,15 +48,14 @@ public static class Ae2BaseTileNetworkMpSnapshot { private final Map xpByKey; Ae2BaseTileNetworkMpSnapshot(Map xpByKey) { - this.xpByKey = xpByKey != null ? xpByKey : Collections.emptyMap(); + this.xpByKey = xpByKey != null ? xpByKey : Map.of(); } public static Ae2BaseTileNetworkMpSnapshot empty() { - return new Ae2BaseTileNetworkMpSnapshot(Collections.emptyMap()); + return new Ae2BaseTileNetworkMpSnapshot(Map.of()); } - @Nullable - public byte[] lookupXpPayload(int dim, int x, int y, int z) { + public byte @Nullable [] lookupXpPayload(int dim, int x, int y, int z) { return xpByKey.get(mpKey(dim, x, y, z)); } } @@ -66,7 +66,8 @@ public static Ae2BaseTileNetworkMpSnapshot tryCreateMpSnapshot(@Nullable World e if (!Mods.AE2.isModLoaded() || exportWorld == null || !exportWorld.isRemote || lookup == null) { return Ae2BaseTileNetworkMpSnapshot.empty(); } - if (!Ae2CableStructureSupport.isMultiplayerClientNoIntegratedServerPublic()) { + Minecraft mc = Minecraft.getMinecraft(); + if (mc.theIntegratedServer == null) { return Ae2BaseTileNetworkMpSnapshot.empty(); } int dim = exportWorld.provider.dimensionId; @@ -100,7 +101,7 @@ private static Ae2BaseTileNetworkMpSnapshot fetchMpXpBlocking(int dim, List= 6) { return null; } diff --git a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CableConnectionRules.java b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CableConnectionRules.java index 20e0d0be..a6564f93 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CableConnectionRules.java +++ b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CableConnectionRules.java @@ -1,10 +1,10 @@ package com.hfstudio.guidenh.integration.ae2; -final class Ae2CableConnectionRules { +public class Ae2CableConnectionRules { private Ae2CableConnectionRules() {} - static boolean shouldConnect(boolean sourceHasSidePart, boolean sourceBlocked, boolean sourceCanConnect, + public static boolean shouldConnect(boolean sourceHasSidePart, boolean sourceBlocked, boolean sourceCanConnect, boolean neighborCanConnect, boolean neighborFaceBlockedByPart, boolean neighborBlocked, boolean neighborAcceptsSide) { return !sourceHasSidePart && !sourceBlocked @@ -15,7 +15,7 @@ static boolean shouldConnect(boolean sourceHasSidePart, boolean sourceBlocked, b && neighborAcceptsSide; } - static boolean facePartBlocksAdjacentCable(boolean hasFacePart, boolean facePartCanConnect) { + public static boolean facePartBlocksAdjacentCable(boolean hasFacePart, boolean facePartCanConnect) { return hasFacePart && !facePartCanConnect; } } diff --git a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CablePreviewSnapshot.java b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CablePreviewSnapshot.java index fd32f507..fdb01a76 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CablePreviewSnapshot.java +++ b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CablePreviewSnapshot.java @@ -5,7 +5,7 @@ /** * Unified server-authoritative preview payload for an AE2 {@link appeng.tile.networking.TileCableBus}. */ -public final class Ae2CablePreviewSnapshot { +public class Ae2CablePreviewSnapshot { public static final Ae2CablePreviewSnapshot EMPTY = new Ae2CablePreviewSnapshot( false, diff --git a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CablePreviewWireCodec.java b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CablePreviewWireCodec.java index faf80823..9e4cb502 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CablePreviewWireCodec.java +++ b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CablePreviewWireCodec.java @@ -6,7 +6,7 @@ import io.netty.buffer.Unpooled; /** Binary wire for {@link Ae2CablePreviewSnapshot} (shared by SNBT Base64, MP batch side-car, and preview store). */ -public final class Ae2CablePreviewWireCodec { +public class Ae2CablePreviewWireCodec { public static final int WIRE_V1 = 1; @@ -29,7 +29,7 @@ public static byte[] encode(Ae2CablePreviewSnapshot snap) { return out; } - public static Ae2CablePreviewSnapshot decode(@Nullable byte[] payload) { + public static Ae2CablePreviewSnapshot decode(byte @Nullable [] payload) { if (payload == null || payload.length == 0) { return Ae2CablePreviewSnapshot.EMPTY; } diff --git a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CableStructureSupport.java b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CableStructureSupport.java index 33a09c0d..aa955083 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CableStructureSupport.java +++ b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2CableStructureSupport.java @@ -2,11 +2,12 @@ import java.io.IOException; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ThreadLocalRandom; +import net.minecraft.client.Minecraft; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.server.MinecraftServer; import net.minecraft.tileentity.TileEntity; @@ -52,15 +53,14 @@ public static class Ae2CableMpSnapshot { private final Map wireByKey; Ae2CableMpSnapshot(Map wireByKey) { - this.wireByKey = wireByKey != null ? wireByKey : Collections.emptyMap(); + this.wireByKey = wireByKey != null ? wireByKey : Map.of(); } public static Ae2CableMpSnapshot empty() { - return new Ae2CableMpSnapshot(Collections.emptyMap()); + return new Ae2CableMpSnapshot(Map.of()); } - @Nullable - public byte[] lookupWire(int dim, int x, int y, int z) { + public byte @Nullable [] lookupWire(int dim, int x, int y, int z) { return wireByKey.get(mpKey(dim, x, y, z)); } } @@ -71,7 +71,8 @@ public static Ae2CableMpSnapshot tryCreateMpSnapshot(@Nullable World exportWorld if (!Mods.AE2.isModLoaded() || exportWorld == null || !exportWorld.isRemote || lookup == null) { return Ae2CableMpSnapshot.empty(); } - if (!isMultiplayerClientNoIntegratedServer()) { + Minecraft mc = Minecraft.getMinecraft(); + if (mc.theIntegratedServer != null) { return Ae2CableMpSnapshot.empty(); } int dim = exportWorld.provider.dimensionId; @@ -105,7 +106,7 @@ private static Ae2CableMpSnapshot fetchMpStreamsBlocking(int dim, List co xyz[i * 3 + 1] = p[1]; xyz[i * 3 + 2] = p[2]; } - long corr = java.util.concurrent.ThreadLocalRandom.current() + long corr = ThreadLocalRandom.current() .nextLong(); GuideNhAe2CableBatchAwait.register(corr); GuideNhNetwork.channel() @@ -152,7 +153,7 @@ private static void logEmptyFetchOnce() { } } - private static byte[] partPackedSafe(@Nullable byte[][] partPacked, int i) { + private static byte[] partPackedSafe(byte[] @Nullable [] partPacked, int i) { if (partPacked == null || i < 0 || i >= partPacked.length) { return new byte[0]; } @@ -163,47 +164,28 @@ private static String mpKey(int dim, int x, int y, int z) { return dim + ":" + x + ":" + y + ":" + z; } - private static boolean isMultiplayerClientNoIntegratedServer() { + @Nullable + public static WorldServer tryIntegratedServerWorld(int dim) { try { - Class mcCls = Class.forName("net.minecraft.client.Minecraft"); - Object mc = mcCls.getMethod("getMinecraft") - .invoke(null); - Object integrated = mcCls.getField("theIntegratedServer") - .get(mc); - return integrated == null; - } catch (Throwable ignored) { - return false; - } - } + Minecraft mc = Minecraft.getMinecraft(); + MinecraftServer server = mc.theIntegratedServer; - /** For {@link Ae2BaseTileNetworkStructureSupport}: same heuristic as cable MP snapshot gating. */ - static boolean isMultiplayerClientNoIntegratedServerPublic() { - return isMultiplayerClientNoIntegratedServer(); - } + if (server == null) return null; - @Nullable - static WorldServer tryIntegratedServerWorld(int dim) { - try { - Class mcCls = Class.forName("net.minecraft.client.Minecraft"); - Object mc = mcCls.getMethod("getMinecraft") - .invoke(null); - Object integratedObj = mcCls.getField("theIntegratedServer") - .get(mc); - if (integratedObj instanceof MinecraftServer) { - MinecraftServer isrv = (MinecraftServer) integratedObj; - WorldServer sw = isrv.worldServerForDimension(dim); - if (sw != null) { - return sw; - } - if (isrv.worldServers != null) { - for (WorldServer w : isrv.worldServers) { - if (w != null && w.provider.dimensionId == dim) { - return w; - } + WorldServer world = server.worldServerForDimension(dim); + if (world != null) { + return world; + } + + if (server.worldServers != null) { + for (WorldServer w : server.worldServers) { + if (w != null && w.provider.dimensionId == dim) { + return w; } } } } catch (Throwable ignored) {} + return null; } diff --git a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2ForgeMultipartBridge.java b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2ForgeMultipartBridge.java index c47ecdb3..1c2abcc3 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2ForgeMultipartBridge.java +++ b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2ForgeMultipartBridge.java @@ -12,7 +12,7 @@ import codechicken.multipart.TileMultipart; import cpw.mods.fml.common.Optional; -final class Ae2ForgeMultipartBridge { +public class Ae2ForgeMultipartBridge { private Ae2ForgeMultipartBridge() {} diff --git a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2Helpers.java b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2Helpers.java index b3102b53..ea385cd3 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2Helpers.java +++ b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2Helpers.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.integration.ae2; -import java.util.Collections; import java.util.EnumSet; import java.util.LinkedHashMap; import java.util.List; @@ -53,7 +52,7 @@ * ({@link Ae2ServerPreviewRegistration#SUPPLEMENT_ID} cable bus; {@link Ae2BaseTileNetworkStreamPreview#SUPPLEMENT_ID} * other {@link AEBaseTile}), merged with locally inferred cable facings where applicable. */ -public final class Ae2Helpers { +public class Ae2Helpers { /** Low six bits of PartCable stream {@code cs}: {@link ForgeDirection#VALID_DIRECTIONS} only. */ private static final int CS_DIRECTION_MASK = 0x3F; @@ -85,11 +84,11 @@ public static Block resolvePonderBlock(@Nullable NBTTagCompound tileTag) { public static Map capturePonderPreviewSupplements(GuidebookLevel level, int x, int y, int z, @Nullable Block block, int meta) { if (level == null || block == null || block == Blocks.air) { - return Collections.emptyMap(); + return Map.of(); } TileEntity tileEntity = level.getTileEntity(x, y, z); if (!(tileEntity instanceof TileCableBus)) { - return Collections.emptyMap(); + return Map.of(); } NBTTagCompound structureBlockTag = new NBTTagCompound(); structureBlockTag.setIntArray("pos", new int[] { x, y, z }); @@ -107,7 +106,7 @@ public static Map capturePonderPreviewSupplements(GuidebookLevel private static Map readPreviewSupplements(@Nullable NBTTagCompound tag) { if (tag == null || !tag.hasKey(ServerPreviewSupplementNbt.TAG_ROOT, 10)) { - return Collections.emptyMap(); + return Map.of(); } NBTTagCompound root = tag.getCompoundTag(ServerPreviewSupplementNbt.TAG_ROOT); Map result = new LinkedHashMap<>(); @@ -117,7 +116,7 @@ private static Map readPreviewSupplements(@Nullable NBTTagCompou result.put(supplementId, payload); } } - return result.isEmpty() ? Collections.emptyMap() : result; + return result.isEmpty() ? Map.of() : result; } @Optional.Method(modid = "appliedenergistics2") diff --git a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2ServerPreviewRegistration.java b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2ServerPreviewRegistration.java index 7e81c490..3346c240 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2ServerPreviewRegistration.java +++ b/src/main/java/com/hfstudio/guidenh/integration/ae2/Ae2ServerPreviewRegistration.java @@ -18,7 +18,7 @@ * {@link ServerPreviewSupplementRegistry}: cable-bus (type1) and AEBaseTile {@code X} stream (type2 non-cable). * Bootstrap calls {@link #register()} only. */ -public final class Ae2ServerPreviewRegistration { +public class Ae2ServerPreviewRegistration { public static final String SUPPLEMENT_ID = "guidenh.ae2.cable_bus"; diff --git a/src/main/java/com/hfstudio/guidenh/integration/ae2/network/Ae2NetworkRegistration.java b/src/main/java/com/hfstudio/guidenh/integration/ae2/network/Ae2NetworkRegistration.java index 174fc957..0339faa6 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/ae2/network/Ae2NetworkRegistration.java +++ b/src/main/java/com/hfstudio/guidenh/integration/ae2/network/Ae2NetworkRegistration.java @@ -5,7 +5,7 @@ import cpw.mods.fml.relauncher.Side; -public final class Ae2NetworkRegistration { +public class Ae2NetworkRegistration { public static final int CABLE_BATCH_REQUEST_ID = 3; public static final int CABLE_BATCH_REPLY_ID = 4; diff --git a/src/main/java/com/hfstudio/guidenh/integration/ae2/network/GuideNhAe2BaseTileNetworkBatchAwait.java b/src/main/java/com/hfstudio/guidenh/integration/ae2/network/GuideNhAe2BaseTileNetworkBatchAwait.java index 79a42ce4..0867730e 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/ae2/network/GuideNhAe2BaseTileNetworkBatchAwait.java +++ b/src/main/java/com/hfstudio/guidenh/integration/ae2/network/GuideNhAe2BaseTileNetworkBatchAwait.java @@ -4,7 +4,7 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -public final class GuideNhAe2BaseTileNetworkBatchAwait { +public class GuideNhAe2BaseTileNetworkBatchAwait { private static final ConcurrentHashMap PENDING = new ConcurrentHashMap<>(); diff --git a/src/main/java/com/hfstudio/guidenh/integration/ae2/network/GuideNhAe2CableBatchAwait.java b/src/main/java/com/hfstudio/guidenh/integration/ae2/network/GuideNhAe2CableBatchAwait.java index 31f6fa31..59f5c68c 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/ae2/network/GuideNhAe2CableBatchAwait.java +++ b/src/main/java/com/hfstudio/guidenh/integration/ae2/network/GuideNhAe2CableBatchAwait.java @@ -4,7 +4,7 @@ import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -public final class GuideNhAe2CableBatchAwait { +public class GuideNhAe2CableBatchAwait { private static final ConcurrentHashMap PENDING = new ConcurrentHashMap<>(); diff --git a/src/main/java/com/hfstudio/guidenh/integration/ae2/network/GuideNhAe2CableBatchReplyMessage.java b/src/main/java/com/hfstudio/guidenh/integration/ae2/network/GuideNhAe2CableBatchReplyMessage.java index 7240cd9a..21b21fd9 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/ae2/network/GuideNhAe2CableBatchReplyMessage.java +++ b/src/main/java/com/hfstudio/guidenh/integration/ae2/network/GuideNhAe2CableBatchReplyMessage.java @@ -153,7 +153,7 @@ private static int safeEntryCount(byte[] hit, byte[] cs, int[] sideOut, byte[][] n = Math.min(n, cs != null ? cs.length : 0); n = Math.min(n, sideOut != null ? sideOut.length : 0); n = Math.min(n, partPacked != null ? partPacked.length : 0); - return Math.max(0, Math.min(n, GuideNhAe2CableBatchRequestMessage.MAX_POSITIONS)); + return Math.min(n, GuideNhAe2CableBatchRequestMessage.MAX_POSITIONS); } private static byte[] copyBytes(byte[] source, int n) { diff --git a/src/main/java/com/hfstudio/guidenh/integration/api/GuideNhIntegrationRegistry.java b/src/main/java/com/hfstudio/guidenh/integration/api/GuideNhIntegrationRegistry.java index 6c716146..38fd13db 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/api/GuideNhIntegrationRegistry.java +++ b/src/main/java/com/hfstudio/guidenh/integration/api/GuideNhIntegrationRegistry.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.integration.api; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -67,7 +66,7 @@ public synchronized IntegrationModDescriptor modDescriptor(@Nullable String id) } public synchronized List modDescriptors() { - return Collections.unmodifiableList(new ArrayList<>(modDescriptors.values())); + return List.copyOf(modDescriptors.values()); } public synchronized void registerItemStackNormalizationProvider(ItemStackNormalizationProvider provider) { @@ -80,7 +79,7 @@ public synchronized void registerItemStackNormalizationProvider(ItemStackNormali } public synchronized List itemStackNormalizationProviders() { - return Collections.unmodifiableList(new ArrayList<>(itemStackNormalizationProviders)); + return List.copyOf(itemStackNormalizationProviders); } public synchronized void registerBlockDisplayProvider(BlockDisplayProvider provider) { @@ -93,7 +92,7 @@ public synchronized void registerBlockDisplayProvider(BlockDisplayProvider provi } public synchronized List blockDisplayProviders() { - return Collections.unmodifiableList(new ArrayList<>(blockDisplayProviders)); + return List.copyOf(blockDisplayProviders); } public synchronized void registerBlockDisplayNameProvider(BlockDisplayNameProvider provider) { @@ -106,7 +105,7 @@ public synchronized void registerBlockDisplayNameProvider(BlockDisplayNameProvid } public synchronized List blockDisplayNameProviders() { - return Collections.unmodifiableList(new ArrayList<>(blockDisplayNameProviders)); + return List.copyOf(blockDisplayNameProviders); } public synchronized void registerBlockExportIdProvider(BlockExportIdProvider provider) { @@ -119,7 +118,7 @@ public synchronized void registerBlockExportIdProvider(BlockExportIdProvider pro } public synchronized List blockExportIdProviders() { - return Collections.unmodifiableList(new ArrayList<>(blockExportIdProviders)); + return List.copyOf(blockExportIdProviders); } public synchronized void registerPreviewTileEntityProvider(PreviewTileEntityProvider provider) { @@ -132,7 +131,7 @@ public synchronized void registerPreviewTileEntityProvider(PreviewTileEntityProv } public synchronized List previewTileEntityProviders() { - return Collections.unmodifiableList(new ArrayList<>(previewTileEntityProviders)); + return List.copyOf(previewTileEntityProviders); } public synchronized void registerPreviewTileEntityFinalizer(PreviewTileEntityFinalizer finalizer) { @@ -145,7 +144,7 @@ public synchronized void registerPreviewTileEntityFinalizer(PreviewTileEntityFin } public synchronized List previewTileEntityFinalizers() { - return Collections.unmodifiableList(new ArrayList<>(previewTileEntityFinalizers)); + return List.copyOf(previewTileEntityFinalizers); } public synchronized void registerPreviewPrepareContributor(PreviewPrepareContributor contributor) { @@ -158,7 +157,7 @@ public synchronized void registerPreviewPrepareContributor(PreviewPrepareContrib } public synchronized List previewPrepareContributors() { - return Collections.unmodifiableList(new ArrayList<>(previewPrepareContributors)); + return List.copyOf(previewPrepareContributors); } public synchronized void registerGuideBuilderIntegrationHook(GuideBuilderIntegrationHook hook) { @@ -171,7 +170,7 @@ public synchronized void registerGuideBuilderIntegrationHook(GuideBuilderIntegra } public synchronized List guideBuilderIntegrationHooks() { - return Collections.unmodifiableList(new ArrayList<>(guideBuilderIntegrationHooks)); + return List.copyOf(guideBuilderIntegrationHooks); } public synchronized void registerTagCompilerProvider(TagCompilerProvider provider) { @@ -184,7 +183,7 @@ public synchronized void registerTagCompilerProvider(TagCompilerProvider provide } public synchronized List tagCompilerProviders() { - return Collections.unmodifiableList(new ArrayList<>(tagCompilerProviders)); + return List.copyOf(tagCompilerProviders); } public synchronized void registerRawRecipeHandlerProvider(RawRecipeHandlerProvider provider) { @@ -197,7 +196,7 @@ public synchronized void registerRawRecipeHandlerProvider(RawRecipeHandlerProvid } public synchronized List rawRecipeHandlerProviders() { - return Collections.unmodifiableList(new ArrayList<>(rawRecipeHandlerProviders)); + return List.copyOf(rawRecipeHandlerProviders); } public synchronized void registerRecipeEntryProvider(RecipeEntryProvider provider) { @@ -210,7 +209,7 @@ public synchronized void registerRecipeEntryProvider(RecipeEntryProvider provide } public synchronized List recipeEntryProviders() { - return Collections.unmodifiableList(new ArrayList<>(recipeEntryProviders)); + return List.copyOf(recipeEntryProviders); } public synchronized void registerRecipeItemTooltipProvider(RecipeItemTooltipProvider provider) { @@ -223,7 +222,7 @@ public synchronized void registerRecipeItemTooltipProvider(RecipeItemTooltipProv } public synchronized List recipeItemTooltipProviders() { - return Collections.unmodifiableList(new ArrayList<>(recipeItemTooltipProviders)); + return List.copyOf(recipeItemTooltipProviders); } public synchronized void registerRecipeAnimationUpdateProvider(RecipeAnimationUpdateProvider provider) { @@ -236,7 +235,7 @@ public synchronized void registerRecipeAnimationUpdateProvider(RecipeAnimationUp } public synchronized List recipeAnimationUpdateProviders() { - return Collections.unmodifiableList(new ArrayList<>(recipeAnimationUpdateProviders)); + return List.copyOf(recipeAnimationUpdateProviders); } public synchronized void registerRecipeHandlerMetadataProvider(RecipeHandlerMetadataProvider provider) { @@ -249,7 +248,7 @@ public synchronized void registerRecipeHandlerMetadataProvider(RecipeHandlerMeta } public synchronized List recipeHandlerMetadataProviders() { - return Collections.unmodifiableList(new ArrayList<>(recipeHandlerMetadataProviders)); + return List.copyOf(recipeHandlerMetadataProviders); } public synchronized void registerRecipeHandlerSlotProvider(RecipeHandlerSlotProvider provider) { @@ -262,7 +261,7 @@ public synchronized void registerRecipeHandlerSlotProvider(RecipeHandlerSlotProv } public synchronized List recipeHandlerSlotProviders() { - return Collections.unmodifiableList(new ArrayList<>(recipeHandlerSlotProviders)); + return List.copyOf(recipeHandlerSlotProviders); } public synchronized void registerRecipeAvailabilityProvider(RecipeAvailabilityProvider provider) { @@ -275,7 +274,7 @@ public synchronized void registerRecipeAvailabilityProvider(RecipeAvailabilityPr } public synchronized List recipeAvailabilityProviders() { - return Collections.unmodifiableList(new ArrayList<>(recipeAvailabilityProviders)); + return List.copyOf(recipeAvailabilityProviders); } public synchronized void registerRecipeDrawableRenderProvider(RecipeDrawableRenderProvider provider) { @@ -288,7 +287,7 @@ public synchronized void registerRecipeDrawableRenderProvider(RecipeDrawableRend } public synchronized List recipeDrawableRenderProviders() { - return Collections.unmodifiableList(new ArrayList<>(recipeDrawableRenderProviders)); + return List.copyOf(recipeDrawableRenderProviders); } public synchronized void registerRecipeHandlerRenderProvider(RecipeHandlerRenderProvider provider) { @@ -301,12 +300,12 @@ public synchronized void registerRecipeHandlerRenderProvider(RecipeHandlerRender } public synchronized List recipeHandlerRenderProviders() { - return Collections.unmodifiableList(new ArrayList<>(recipeHandlerRenderProviders)); + return List.copyOf(recipeHandlerRenderProviders); } public List queryRawCraftingHandlers(@Nullable ItemStack target) { if (target == null) { - return Collections.emptyList(); + return List.of(); } for (RawRecipeHandlerProvider provider : rawRecipeHandlerProviders()) { List handlers = provider.queryRawCraftingHandlers(target); @@ -314,12 +313,12 @@ public List queryRawCraftingHandlers(@Nullable ItemStack target) { return handlers; } } - return Collections.emptyList(); + return List.of(); } public List queryRawUsageHandlers(@Nullable ItemStack target) { if (target == null) { - return Collections.emptyList(); + return List.of(); } for (RawRecipeHandlerProvider provider : rawRecipeHandlerProviders()) { List handlers = provider.queryRawUsageHandlers(target); @@ -327,12 +326,12 @@ public List queryRawUsageHandlers(@Nullable ItemStack target) { return handlers; } } - return Collections.emptyList(); + return List.of(); } public List findCraftingRecipeEntries(@Nullable ItemStack target) { if (target == null) { - return Collections.emptyList(); + return List.of(); } for (RecipeEntryProvider provider : recipeEntryProviders()) { List entries = provider.findCraftingRecipeEntries(target); @@ -340,7 +339,7 @@ public List findCraftingRecipeEntries(@Nullable ItemStack target) { return entries; } } - return Collections.emptyList(); + return List.of(); } public void appendRecipeItemTooltip(@Nullable Object handler, @Nullable ItemStack stack, @@ -591,7 +590,7 @@ public boolean recipeOtherStacksThrows(@Nullable Object handler, int recipeIndex public List readRecipeIngredientSlots(@Nullable Object handler, int recipeIndex) { if (handler == null) { - return Collections.emptyList(); + return List.of(); } for (RecipeHandlerSlotProvider provider : recipeHandlerSlotProviders()) { List slots = provider.readIngredientSlots(handler, recipeIndex); @@ -599,12 +598,12 @@ public List readRecipeIngredientSlots(@Nullable Object handler, int return slots; } } - return Collections.emptyList(); + return List.of(); } public List readRecipeOtherSlots(@Nullable Object handler, int recipeIndex) { if (handler == null) { - return Collections.emptyList(); + return List.of(); } for (RecipeHandlerSlotProvider provider : recipeHandlerSlotProviders()) { List slots = provider.readOtherSlots(handler, recipeIndex); @@ -612,7 +611,7 @@ public List readRecipeOtherSlots(@Nullable Object handler, int recip return slots; } } - return Collections.emptyList(); + return List.of(); } @Nullable @@ -639,7 +638,7 @@ public synchronized void registerBlockStatsProvider(BlockStatsProvider provider) } public synchronized List blockStatsProviders() { - return Collections.unmodifiableList(new ArrayList<>(blockStatsProviders)); + return List.copyOf(blockStatsProviders); } public synchronized void registerFakeWorldIntegration(GuidebookFakeWorldIntegration integration) { @@ -652,7 +651,7 @@ public synchronized void registerFakeWorldIntegration(GuidebookFakeWorldIntegrat } public synchronized List fakeWorldIntegrations() { - return Collections.unmodifiableList(new ArrayList<>(fakeWorldIntegrations)); + return List.copyOf(fakeWorldIntegrations); } public void registerDummyWorldIntegrations(Class worldClass) { @@ -710,7 +709,7 @@ public static void closeReverse(List resolveBlockStatsEntries(GuidebookLevel level, Block block, @Nullable TileEntity tileEntity, int x, int y, int z, @Nullable AxisAlignedBB fallbackBounds) { if (level == null || block == null) { - return Collections.emptyList(); + return List.of(); } ArrayList entries = new ArrayList<>(4); for (BlockStatsProvider provider : blockStatsProviders()) { @@ -719,7 +718,7 @@ public List resolveBlockStatsEntries return entries; } } - return Collections.emptyList(); + return List.of(); } @Nullable diff --git a/src/main/java/com/hfstudio/guidenh/integration/api/RecipeEntry.java b/src/main/java/com/hfstudio/guidenh/integration/api/RecipeEntry.java index 1b71559c..59a01830 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/api/RecipeEntry.java +++ b/src/main/java/com/hfstudio/guidenh/integration/api/RecipeEntry.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.integration.api; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -17,9 +16,8 @@ public RecipeEntry(String handlerName, String recipeName, List ingre List supportingSlots, @Nullable RecipeSlot result) { this.handlerName = handlerName; this.recipeName = recipeName; - this.ingredients = ingredients == null ? Collections.emptyList() : Collections.unmodifiableList(ingredients); - this.supportingSlots = supportingSlots == null ? Collections.emptyList() - : Collections.unmodifiableList(supportingSlots); + this.ingredients = ingredients == null ? List.of() : List.copyOf(ingredients); + this.supportingSlots = supportingSlots == null ? List.of() : List.copyOf(supportingSlots); this.result = result; } diff --git a/src/main/java/com/hfstudio/guidenh/integration/api/RecipeSlot.java b/src/main/java/com/hfstudio/guidenh/integration/api/RecipeSlot.java index aa24f271..b2b947b8 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/api/RecipeSlot.java +++ b/src/main/java/com/hfstudio/guidenh/integration/api/RecipeSlot.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.integration.api; -import java.util.Collections; import java.util.List; import net.minecraft.item.ItemStack; @@ -14,7 +13,7 @@ public class RecipeSlot { public RecipeSlot(int x, int y, List stacks) { this.x = x; this.y = y; - this.stacks = stacks == null ? Collections.emptyList() : Collections.unmodifiableList(stacks); + this.stacks = stacks == null ? List.of() : List.copyOf(stacks); } public int x() { diff --git a/src/main/java/com/hfstudio/guidenh/integration/api/client/GuideNhClientIntegrationRegistry.java b/src/main/java/com/hfstudio/guidenh/integration/api/client/GuideNhClientIntegrationRegistry.java index 4223ae9a..d9d6e407 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/api/client/GuideNhClientIntegrationRegistry.java +++ b/src/main/java/com/hfstudio/guidenh/integration/api/client/GuideNhClientIntegrationRegistry.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.integration.api.client; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.UUID; @@ -47,7 +46,7 @@ public synchronized void registerPreviewPlayerSlimArmProvider(PreviewPlayerSlimA } public synchronized List previewPlayerSlimArmProviders() { - return Collections.unmodifiableList(new ArrayList<>(previewPlayerSlimArmProviders)); + return List.copyOf(previewPlayerSlimArmProviders); } public synchronized void registerPreviewPlayerModelProvider(PreviewPlayerModelProvider provider) { @@ -60,7 +59,7 @@ public synchronized void registerPreviewPlayerModelProvider(PreviewPlayerModelPr } public synchronized List previewPlayerModelProviders() { - return Collections.unmodifiableList(new ArrayList<>(previewPlayerModelProviders)); + return List.copyOf(previewPlayerModelProviders); } public synchronized void registerPreviewPlayerElytraProvider(PreviewPlayerElytraProvider provider) { @@ -73,7 +72,7 @@ public synchronized void registerPreviewPlayerElytraProvider(PreviewPlayerElytra } public synchronized List previewPlayerElytraProviders() { - return Collections.unmodifiableList(new ArrayList<>(previewPlayerElytraProviders)); + return List.copyOf(previewPlayerElytraProviders); } public synchronized void registerPreviewBlockRenderProvider(PreviewBlockRenderProvider provider) { @@ -86,7 +85,7 @@ public synchronized void registerPreviewBlockRenderProvider(PreviewBlockRenderPr } public synchronized List previewBlockRenderProviders() { - return Collections.unmodifiableList(new ArrayList<>(previewBlockRenderProviders)); + return List.copyOf(previewBlockRenderProviders); } public synchronized void registerQuestHoverProvider(QuestHoverProvider provider) { @@ -99,7 +98,7 @@ public synchronized void registerQuestHoverProvider(QuestHoverProvider provider) } public synchronized List questHoverProviders() { - return Collections.unmodifiableList(new ArrayList<>(questHoverProviders)); + return List.copyOf(questHoverProviders); } @Nullable diff --git a/src/main/java/com/hfstudio/guidenh/integration/betterquesting/QuestIndex.java b/src/main/java/com/hfstudio/guidenh/integration/betterquesting/QuestIndex.java index 8dfabcc4..54f6b4d4 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/betterquesting/QuestIndex.java +++ b/src/main/java/com/hfstudio/guidenh/integration/betterquesting/QuestIndex.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.integration.betterquesting; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.UUID; @@ -62,13 +61,13 @@ public static List> getQuestAnchors(ParsedGuidePage page) .additionalProperties() .get("quest_ids"); if (questIdsNode == null) { - return Collections.emptyList(); + return List.of(); } if (!(questIdsNode instanceof ListquestIdList)) { FMLLog.getLogger() .warn("[GuideNH] [QuestIndex] Page {} contains malformed quest_ids frontmatter", page.getId()); - return Collections.emptyList(); + return List.of(); } ResourceLocation pageId = page.getId(); diff --git a/src/main/java/com/hfstudio/guidenh/integration/betterquesting/QuestState.java b/src/main/java/com/hfstudio/guidenh/integration/betterquesting/QuestState.java index 20731caf..4b2eaa00 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/betterquesting/QuestState.java +++ b/src/main/java/com/hfstudio/guidenh/integration/betterquesting/QuestState.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.integration.betterquesting; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; @@ -50,7 +49,7 @@ public static synchronized QuestState state(@Nullable String id) { } public static synchronized Map states() { - return Collections.unmodifiableMap(new LinkedHashMap<>(STATES)); + return Map.copyOf(new LinkedHashMap<>(STATES)); } public String id() { diff --git a/src/main/java/com/hfstudio/guidenh/integration/distanthorizons/DistantHorizonsCompat.java b/src/main/java/com/hfstudio/guidenh/integration/distanthorizons/DistantHorizonsCompat.java index 59ecb81f..ee178201 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/distanthorizons/DistantHorizonsCompat.java +++ b/src/main/java/com/hfstudio/guidenh/integration/distanthorizons/DistantHorizonsCompat.java @@ -3,7 +3,6 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Map; @@ -32,7 +31,7 @@ public class DistantHorizonsCompat { private static final SuppressionToken NOOP_TOKEN = () -> {}; private static int suppressionDepth; - private static List suspendedTargets = Collections.emptyList(); + private static List suspendedTargets = List.of(); @Nullable private static volatile Field listenersField; @@ -76,7 +75,7 @@ public static boolean isDistantHorizonsForgeClientProxy(@Nullable Object target) private static List suspendTargets(EventBus eventBus) { Map listeners = getListenersMap(eventBus); if (listeners == null || listeners.isEmpty()) { - return Collections.emptyList(); + return List.of(); } Map listenerOwners = getListenerOwnersMap(eventBus); @@ -228,7 +227,7 @@ private static void release(EventBus eventBus) { suppressionDepth--; if (suppressionDepth == 0) { restoreTargets(eventBus, suspendedTargets); - suspendedTargets = Collections.emptyList(); + suspendedTargets = List.of(); } } } diff --git a/src/main/java/com/hfstudio/guidenh/integration/forgemultipart/ForgeMultipartHelpers.java b/src/main/java/com/hfstudio/guidenh/integration/forgemultipart/ForgeMultipartHelpers.java index d05d3448..5f822181 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/forgemultipart/ForgeMultipartHelpers.java +++ b/src/main/java/com/hfstudio/guidenh/integration/forgemultipart/ForgeMultipartHelpers.java @@ -5,7 +5,6 @@ import java.lang.reflect.Method; import java.lang.reflect.Modifier; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -929,7 +928,7 @@ private static Map getUnlocalizedBlockCache() { } } catch (Throwable ignored) {} } - UNLOCALIZED_BLOCK_CACHE = Collections.unmodifiableMap(cache); + UNLOCALIZED_BLOCK_CACHE = Map.copyOf(cache); return UNLOCALIZED_BLOCK_CACHE; } } diff --git a/src/main/java/com/hfstudio/guidenh/integration/gregtech/GregTechHelpers.java b/src/main/java/com/hfstudio/guidenh/integration/gregtech/GregTechHelpers.java index 6f9d8d53..70f8504d 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/gregtech/GregTechHelpers.java +++ b/src/main/java/com/hfstudio/guidenh/integration/gregtech/GregTechHelpers.java @@ -263,7 +263,7 @@ private static boolean initializeMetaTileImpl(TileEntity tileEntity, int metaTil } public static boolean isMachineItem(@Nullable Item item) { - return item != null && Mods.GregTech.isModLoaded() && isMachineItemImpl(item); + return Mods.GregTech.isModLoaded() && isMachineItemImpl(item); } @Optional.Method(modid = "gregtech") @@ -642,7 +642,7 @@ private static Object getMetaTileEntityFromItemImpl(ItemStack stack) { } public static boolean isMTEHatch(@Nullable Object metaTileEntity) { - return metaTileEntity != null && Mods.GregTech.isModLoaded() && isMTEHatchImpl(metaTileEntity); + return Mods.GregTech.isModLoaded() && isMTEHatchImpl(metaTileEntity); } @Optional.Method(modid = "gregtech") @@ -727,7 +727,7 @@ public static String describeTileTag(@Nullable NBTTagCompound tileTag) { appendTagValue(builder, tileTag, "mID"); appendTagValue(builder, tileTag, "mFacing"); appendTagValue(builder, tileTag, "m"); - if (builder.length() == 0) { + if (builder.isEmpty()) { builder.append("empty-tag"); } return builder.toString(); @@ -787,7 +787,7 @@ public static void appendTagValue(StringBuilder builder, NBTTagCompound tileTag, if (!tileTag.hasKey(key)) { return; } - if (builder.length() > 0) { + if (!builder.isEmpty()) { builder.append(", "); } builder.append(key) diff --git a/src/main/java/com/hfstudio/guidenh/integration/nei/GuideScreenNeiNativeBridge.java b/src/main/java/com/hfstudio/guidenh/integration/nei/GuideScreenNeiNativeBridge.java index 173738bd..1fcb5ef1 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/nei/GuideScreenNeiNativeBridge.java +++ b/src/main/java/com/hfstudio/guidenh/integration/nei/GuideScreenNeiNativeBridge.java @@ -117,13 +117,7 @@ public static boolean isNeiMouseOver(EditorAccess editorAccess, int mouseX, int if (manager == null) { return false; } - return withNeiLayout(editorAccess, new NeiLayoutAction() { - - @Override - public Boolean run() { - return isNeiMouseOver(manager, mouseX, mouseY); - } - }); + return withNeiLayout(editorAccess, () -> isNeiMouseOver(manager, mouseX, mouseY)); } public static boolean isDraggingItem() { @@ -140,17 +134,13 @@ public static boolean mouseClicked(EditorAccess editorAccess, int mouseX, int mo } editorAccess.prepareForTemporaryScreenChange(); try { - return withNeiLayout(editorAccess, new NeiLayoutAction() { - - @Override - public Boolean run() { - LayoutManager.layout(editorAccess.container()); - boolean handled = manager.mouseClicked(mouseX, mouseY, button); - if (handled) { - invalidateInputLayout(); - } - return handled; + return withNeiLayout(editorAccess, () -> { + LayoutManager.layout(editorAccess.container()); + boolean handled = manager.mouseClicked(mouseX, mouseY, button); + if (handled) { + invalidateInputLayout(); } + return handled; }); } finally { if (Minecraft.getMinecraft().currentScreen == editorAccess.container()) { @@ -164,14 +154,10 @@ public static boolean mouseDragged(EditorAccess editorAccess, int mouseX, int mo if (manager == null) { return false; } - return withNeiLayout(editorAccess, new NeiLayoutAction() { - - @Override - public Boolean run() { - layoutForInput(editorAccess); - manager.mouseDragged(mouseX, mouseY, button, heldTime); - return isDraggingItem() || isNeiMouseOver(manager, mouseX, mouseY); - } + return withNeiLayout(editorAccess, () -> { + layoutForInput(editorAccess); + manager.mouseDragged(mouseX, mouseY, button, heldTime); + return isDraggingItem() || isNeiMouseOver(manager, mouseX, mouseY); }); } @@ -182,19 +168,15 @@ public static boolean mouseReleased(EditorAccess editorAccess, int mouseX, int m } editorAccess.prepareForTemporaryScreenChange(); try { - return withNeiLayout(editorAccess, new NeiLayoutAction() { - - @Override - public Boolean run() { - LayoutManager.layout(editorAccess.container()); - if (manager.overrideMouseUp(mouseX, mouseY, button)) { - invalidateInputLayout(); - return true; - } - manager.mouseUp(mouseX, mouseY, button); + return withNeiLayout(editorAccess, () -> { + LayoutManager.layout(editorAccess.container()); + if (manager.overrideMouseUp(mouseX, mouseY, button)) { invalidateInputLayout(); - return isNeiMouseOver(manager, mouseX, mouseY); + return true; } + manager.mouseUp(mouseX, mouseY, button); + invalidateInputLayout(); + return isNeiMouseOver(manager, mouseX, mouseY); }); } finally { if (Minecraft.getMinecraft().currentScreen == editorAccess.container()) { @@ -208,18 +190,14 @@ public static boolean mouseScrolled(EditorAccess editorAccess, int mouseX, int m if (manager == null) { return false; } - return withNeiLayout(editorAccess, new NeiLayoutAction() { - - @Override - public Boolean run() { - LayoutManager.layout(editorAccess.container()); - if (!isNeiMouseOver(manager, mouseX, mouseY)) { - return false; - } - manager.mouseScrolled(Integer.signum(wheelDelta)); - invalidateInputLayout(); - return true; + return withNeiLayout(editorAccess, () -> { + LayoutManager.layout(editorAccess.container()); + if (!isNeiMouseOver(manager, mouseX, mouseY)) { + return false; } + manager.mouseScrolled(Integer.signum(wheelDelta)); + invalidateInputLayout(); + return true; }); } @@ -252,23 +230,19 @@ public static boolean keyTypedForHoveredGuideItem(EditorAccess editorAccess, cha private static boolean dispatchKeyTyped(EditorAccess editorAccess, char typedChar, int keyCode, GuiContainerManager manager, boolean applyNeiLayout) { editorAccess.prepareForTemporaryScreenChange(); - boolean handled = false; + boolean handled; try { - handled = runKeyTyped(editorAccess, applyNeiLayout, new NeiLayoutAction() { - - @Override - public Boolean run() { - boolean firstHandled = manager.firstKeyTyped(typedChar, keyCode); - if (firstHandled) { - invalidateInputLayout(); - return true; - } - boolean lastHandled = manager.lastKeyTyped(keyCode, typedChar); - if (lastHandled) { - invalidateInputLayout(); - } - return lastHandled; + handled = runKeyTyped(editorAccess, applyNeiLayout, () -> { + boolean firstHandled = manager.firstKeyTyped(typedChar, keyCode); + if (firstHandled) { + invalidateInputLayout(); + return true; + } + boolean lastHandled = manager.lastKeyTyped(keyCode, typedChar); + if (lastHandled) { + invalidateInputLayout(); } + return lastHandled; }); return handled; } finally { @@ -290,13 +264,9 @@ private static boolean isEditorTextFocused(EditorAccess editorAccess) { public static void tick(EditorAccess editorAccess) { GuiContainerManager manager = configuredManager(editorAccess); if (manager != null) { - withNeiLayout(editorAccess, new NeiLayoutAction() { - - @Override - public Void run() { - manager.updateScreen(); - return null; - } + withNeiLayout(editorAccess, (NeiLayoutAction) () -> { + manager.updateScreen(); + return null; }); } } @@ -306,44 +276,36 @@ public static void drawNativeNei(EditorAccess editorAccess, int mouseX, int mous if (manager == null) { return; } - withNeiLayout(editorAccess, new NeiLayoutAction() { - - @Override - public Void run() { - manager.preDraw(); - GL11.glPushMatrix(); - try { - RenderHelper.enableGUIStandardItemLighting(); - GL11.glEnable(GL12.GL_RESCALE_NORMAL); - GL11.glEnable(GL11.GL_LIGHTING); - GL11.glEnable(GL11.GL_DEPTH_TEST); - OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0F, 240.0F); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - GL11.glTranslatef(editorAccess.containerLeft(), editorAccess.containerTop(), 0.0F); - manager.renderObjects(mouseX, mouseY); - } finally { - GL11.glPopMatrix(); - RenderHelper.disableStandardItemLighting(); - GL11.glDisable(GL12.GL_RESCALE_NORMAL); - GL11.glDisable(GL11.GL_LIGHTING); - GL11.glDisable(GL11.GL_DEPTH_TEST); - GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); - } - return null; + withNeiLayout(editorAccess, (NeiLayoutAction) () -> { + manager.preDraw(); + GL11.glPushMatrix(); + try { + RenderHelper.enableGUIStandardItemLighting(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0F, 240.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef(editorAccess.containerLeft(), editorAccess.containerTop(), 0.0F); + manager.renderObjects(mouseX, mouseY); + } finally { + GL11.glPopMatrix(); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); } + return null; }); } public static void drawNativeNeiTooltip(EditorAccess editorAccess, int mouseX, int mouseY) { GuiContainerManager manager = nativeManager(editorAccess); if (manager != null) { - withNeiLayout(editorAccess, new NeiLayoutAction() { - - @Override - public Void run() { - manager.renderToolTips(mouseX, mouseY); - return null; - } + withNeiLayout(editorAccess, (NeiLayoutAction) () -> { + manager.renderToolTips(mouseX, mouseY); + return null; }); } } @@ -475,7 +437,7 @@ public static class GuideScreenNeiBridgeEvents { @SubscribeEvent public void onRecipeButtons(GuiRecipeButton.UpdateRecipeButtonsEvent.Post event) { - EditorAccess editorAccess = editorAccessFor((GuiScreen) event.gui); + EditorAccess editorAccess = editorAccessFor(event.gui); if (editorAccess == null) { return; } diff --git a/src/main/java/com/hfstudio/guidenh/integration/nei/NeiGuideNavigation.java b/src/main/java/com/hfstudio/guidenh/integration/nei/NeiGuideNavigation.java index 81434bbe..2e4aab88 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/nei/NeiGuideNavigation.java +++ b/src/main/java/com/hfstudio/guidenh/integration/nei/NeiGuideNavigation.java @@ -24,22 +24,10 @@ public static boolean handleHoveredStackShortcut(@Nullable GuideScreenNeiBridge. return false; } if (NEIClientConfig.isKeyHashDown("gui.recipe")) { - return withTemporaryScreenChange(editorAccess, new ScreenAction() { - - @Override - public boolean run() { - return GuiCraftingRecipe.openRecipeGui("item", stack.copy()); - } - }); + return withTemporaryScreenChange(editorAccess, () -> GuiCraftingRecipe.openRecipeGui("item", stack.copy())); } if (NEIClientConfig.isKeyHashDown("gui.usage")) { - return withTemporaryScreenChange(editorAccess, new ScreenAction() { - - @Override - public boolean run() { - return GuiUsageRecipe.openRecipeGui("item", stack.copy()); - } - }); + return withTemporaryScreenChange(editorAccess, () -> GuiUsageRecipe.openRecipeGui("item", stack.copy())); } return false; } @@ -54,13 +42,9 @@ public static boolean openExactCraftingRecipe(@Nullable GuideScreenNeiBridge.Edi return false; } RecipeId recipeId = RecipeId.of(recipeHandler, recipeIndex); - return withTemporaryScreenChange(editorAccess, new ScreenAction() { - - @Override - public boolean run() { - return GuiCraftingRecipe.createRecipeGui("recipeId", true, recipeAnchor, recipeId) != null; - } - }); + return withTemporaryScreenChange( + editorAccess, + () -> GuiCraftingRecipe.createRecipeGui("recipeId", true, recipeAnchor, recipeId) != null); } private static @Nullable ItemStack resolveRecipeAnchorStack(Object handler, int recipeIndex, @@ -76,8 +60,7 @@ public boolean run() { } } List ingredients = NeiDirectCalls.ingredientStacks(handler, recipeIndex); - for (int i = 0, count = ingredients.size(); i < count; i++) { - Object ingredient = ingredients.get(i); + for (Object ingredient : ingredients) { if (ingredient instanceof PositionedStack positionedStack) { ItemStack resolved = copyVisibleStack(positionedStack); if (resolved != null) { diff --git a/src/main/java/com/hfstudio/guidenh/integration/nei/NeiRecipeEntryProvider.java b/src/main/java/com/hfstudio/guidenh/integration/nei/NeiRecipeEntryProvider.java index 8c2f1920..31c33f28 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/nei/NeiRecipeEntryProvider.java +++ b/src/main/java/com/hfstudio/guidenh/integration/nei/NeiRecipeEntryProvider.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.integration.nei; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.item.ItemStack; @@ -20,7 +19,7 @@ public List findCraftingRecipeEntries(ItemStack target) { public static List convertEntries(@Nullable List entries) { if (entries == null || entries.isEmpty()) { - return Collections.emptyList(); + return List.of(); } ArrayList converted = new ArrayList<>(entries.size()); for (NeiRecipeLookup.Entry entry : entries) { diff --git a/src/main/java/com/hfstudio/guidenh/integration/nei/NeiRecipeHandlerSlotProvider.java b/src/main/java/com/hfstudio/guidenh/integration/nei/NeiRecipeHandlerSlotProvider.java index 4cf0dbb9..2e3ec628 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/nei/NeiRecipeHandlerSlotProvider.java +++ b/src/main/java/com/hfstudio/guidenh/integration/nei/NeiRecipeHandlerSlotProvider.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.integration.nei; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -28,7 +27,7 @@ public List readOtherSlots(Object handler, int recipeIndex) { public static List convertSlots(List slots) { if (slots == null || slots.isEmpty()) { - return Collections.emptyList(); + return List.of(); } ArrayList converted = new ArrayList<>(slots.size()); for (NeiRecipeLookup.Slot slot : slots) { diff --git a/src/main/java/com/hfstudio/guidenh/integration/nei/NeiRecipeLookup.java b/src/main/java/com/hfstudio/guidenh/integration/nei/NeiRecipeLookup.java index a446f523..f0cdb36e 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/nei/NeiRecipeLookup.java +++ b/src/main/java/com/hfstudio/guidenh/integration/nei/NeiRecipeLookup.java @@ -1,8 +1,6 @@ package com.hfstudio.guidenh.integration.nei; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.List; import net.minecraft.item.ItemStack; @@ -76,7 +74,7 @@ public Entry(String handlerName, String recipeName, List ingredients, List } /** NEI crafting recipe tied to {@code handler} index for Phase1/OpenGL snapshots; mirrors {@link #Entry}. */ - public static final class CraftingRecipeRef { + public static class CraftingRecipeRef { public final Object handler; public final int recipeIndex; @@ -90,7 +88,7 @@ public static final class CraftingRecipeRef { } public static List findCraftingRecipeRefs(ItemStack target) { - if (!AVAILABLE || target == null) return Collections.emptyList(); + if (!AVAILABLE || target == null) return List.of(); try { List handlers = NeiDirectCalls.getCraftingHandlers(target); List out = new ArrayList<>(); @@ -98,14 +96,14 @@ public static List findCraftingRecipeRefs(ItemStack target) { if (handler == null) continue; CraftingRecipeRef[] refs = readHandlerCraftingRecipeRefs(handler); if (refs != null && refs.length > 0) { - out.addAll(Arrays.asList(refs)); + out.addAll(List.of(refs)); } } return out; } catch (Throwable t) { FMLLog.getLogger() .warn("[GuideNH] [NeiRecipeLookup] NEI crafting refs query failed", t); - return Collections.emptyList(); + return List.of(); } } @@ -119,13 +117,13 @@ public static List findCraftingRecipes(ItemStack target) { } public static List findUsages(ItemStack target) { - if (!AVAILABLE || target == null) return Collections.emptyList(); + if (!AVAILABLE || target == null) return List.of(); try { return processHandlers(NeiDirectCalls.getUsageHandlers(target)); } catch (Throwable t) { FMLLog.getLogger() .warn("[GuideNH] [NeiRecipeLookup] NEI usage query failed", t); - return Collections.emptyList(); + return List.of(); } } @@ -134,13 +132,13 @@ public static List findUsages(ItemStack target) { * {@link #lookupNumRecipes(Object)} before iterating recipe indices. */ public static List queryRawCraftingHandlers(ItemStack target) { - if (!AVAILABLE || target == null) return Collections.emptyList(); + if (!AVAILABLE || target == null) return List.of(); try { return NeiDirectCalls.getCraftingHandlers(target); } catch (Throwable t) { FMLLog.getLogger() .warn("[GuideNH] [NeiRecipeLookup] queryRawCraftingHandlers failed", t); - return Collections.emptyList(); + return List.of(); } } @@ -149,13 +147,13 @@ public static List queryRawCraftingHandlers(ItemStack target) { * that consume {@code target} as an input (anvil / fuel / brewing ingredient). */ public static List queryRawUsageHandlers(ItemStack target) { - if (!AVAILABLE || target == null) return Collections.emptyList(); + if (!AVAILABLE || target == null) return List.of(); try { return NeiDirectCalls.getUsageHandlers(target); } catch (Throwable t) { FMLLog.getLogger() .warn("[GuideNH] [NeiRecipeLookup] queryRawUsageHandlers failed", t); - return Collections.emptyList(); + return List.of(); } } @@ -243,20 +241,20 @@ public static int lookupRecipeHeight(Object handler, int recipeIndex) { } public static List readIngredientSlots(Object handler, int recipeIndex) { - if (!AVAILABLE || handler == null) return Collections.emptyList(); + if (!AVAILABLE || handler == null) return List.of(); try { return readSlotList(NeiDirectCalls.ingredientStacks(handler, recipeIndex)); } catch (Throwable t) { - return Collections.emptyList(); + return List.of(); } } public static List readOtherSlots(Object handler, int recipeIndex) { - if (!AVAILABLE || handler == null) return Collections.emptyList(); + if (!AVAILABLE || handler == null) return List.of(); try { return readSlotList(NeiDirectCalls.otherStacks(handler, recipeIndex)); } catch (Throwable t) { - return Collections.emptyList(); + return List.of(); } } @@ -400,7 +398,7 @@ public static void drawHandlerImage(Object drawable, int x, int y) { } public static List readSlotList(Object obj) { - if (!(obj instanceof List)) return Collections.emptyList(); + if (!(obj instanceof List)) return List.of(); List out = new ArrayList<>(); for (Object ps : (List) obj) { Slot s = readSlot(ps); @@ -441,7 +439,7 @@ private static List processHandlers(List handlers) { for (Object handler : handlers) { if (handler == null) continue; Entry[] entries = readHandler(handler); - if (entries != null) out.addAll(Arrays.asList(entries)); + if (entries != null) out.addAll(List.of(entries)); } return out; } diff --git a/src/main/java/com/hfstudio/guidenh/integration/neicustomdiagram/NeiCustomDiagramBridge.java b/src/main/java/com/hfstudio/guidenh/integration/neicustomdiagram/NeiCustomDiagramBridge.java index 61f61043..85e34895 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/neicustomdiagram/NeiCustomDiagramBridge.java +++ b/src/main/java/com/hfstudio/guidenh/integration/neicustomdiagram/NeiCustomDiagramBridge.java @@ -3,7 +3,6 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Optional; import java.util.function.Consumer; @@ -280,7 +279,7 @@ public class NeiCustomDiagramBridge { private NeiCustomDiagramBridge() {} public static boolean isDiagramGroupHandler(Object handler) { - return AVAILABLE && handler != null && CLASS_DIAGRAM_GROUP.isInstance(handler); + return AVAILABLE && CLASS_DIAGRAM_GROUP.isInstance(handler); } /** @@ -312,7 +311,7 @@ public static void renderEmbedded(Object handler, int recipeIndex, int renderX, int gw = guiScissorAbsW; int gh = guiScissorAbsH; int maxGw = Math.max(1, scaledW - guiScissorAbsX); - gw = Math.min(maxGw, Math.max(gw, gw + 400)); + gw = Math.clamp(gw, gw + 400, maxGw); int maxGh = Math.max(1, scaledH - guiScissorAbsY); gh = Math.min(maxGh, gh + 32); @@ -409,7 +408,7 @@ private static void renderInteractiveComponentGroup(Object interactable, Object private static void renderCustomInteractable(Object interactable, Object diagramState, int clipX, int clipY, int clipWidth, int clipHeight) throws Exception { Object drawable = METHOD_CUSTOM_INTERACTABLE_DRAWABLE.invoke(interactable); - if (drawable != null && CLASS_COMPONENT_LABEL.isInstance(drawable)) { + if (CLASS_COMPONENT_LABEL.isInstance(drawable)) { Object position = METHOD_INTERACTABLE_POSITION.invoke(interactable); runPointConsumer(FIELD_CUSTOM_INTERACTABLE_DRAW_BACKGROUND.get(interactable), position); Object component = METHOD_COMPONENT_LABEL_COMPONENT.invoke(drawable); @@ -554,17 +553,17 @@ private static void appendTooltipLines(List output, Object tooltip, Stri } private static List flattenTooltip(Object tooltip) { - if (tooltip == null || !CLASS_TOOLTIP.isInstance(tooltip)) { - return Collections.emptyList(); + if (!CLASS_TOOLTIP.isInstance(tooltip)) { + return List.of(); } try { Object rawLines = METHOD_TOOLTIP_LINES.invoke(tooltip); if (!(rawLines instanceof Iterableiterable)) { - return Collections.emptyList(); + return List.of(); } List lines = new ArrayList<>(); for (Object line : iterable) { - if (line == null || !CLASS_TOOLTIP_LINE.isInstance(line)) { + if (!CLASS_TOOLTIP_LINE.isInstance(line)) { continue; } String flattened = flattenTooltipLine(line); @@ -574,7 +573,7 @@ private static List flattenTooltip(Object tooltip) { } return lines; } catch (Throwable t) { - return Collections.emptyList(); + return List.of(); } } @@ -585,7 +584,7 @@ private static String flattenTooltipLine(Object line) throws Exception { } StringBuilder builder = new StringBuilder(); for (Object element : iterable) { - if (element == null || !CLASS_TOOLTIP_ELEMENT.isInstance(element)) { + if (!CLASS_TOOLTIP_ELEMENT.isInstance(element)) { continue; } Object type = METHOD_TOOLTIP_ELEMENT_TYPE.invoke(element); @@ -596,7 +595,7 @@ private static String flattenTooltipLine(Object line) throws Exception { Object component = METHOD_TOOLTIP_ELEMENT_COMPONENT_DESCRIPTION.invoke(element); Object description = component != null ? METHOD_COMPONENT_DESCRIPTION.invoke(component) : null; appendToken(builder, description != null ? description.toString() : ""); - } else if ("SPACING".equals(name) && builder.length() > 0 && builder.charAt(builder.length() - 1) != ' ') { + } else if ("SPACING".equals(name) && !builder.isEmpty() && builder.charAt(builder.length() - 1) != ' ') { builder.append(' '); } } @@ -612,7 +611,7 @@ private static void appendToken(StringBuilder builder, String token) { if (trimmed.isEmpty()) { return; } - if (builder.length() > 0 && builder.charAt(builder.length() - 1) != ' ') { + if (!builder.isEmpty() && builder.charAt(builder.length() - 1) != ' ') { builder.append(' '); } builder.append(trimmed); @@ -623,7 +622,7 @@ private static Object diagramAt(Object handler, int recipeIndex) { Object value = FIELD_DIAGRAMS.get(handler); if (value instanceof Listdiagrams && recipeIndex >= 0 && recipeIndex < diagrams.size()) { Object diagram = diagrams.get(recipeIndex); - return diagram != null && CLASS_DIAGRAM.isInstance(diagram) ? diagram : null; + return CLASS_DIAGRAM.isInstance(diagram) ? diagram : null; } } catch (Throwable ignored) {} return null; @@ -632,7 +631,7 @@ private static Object diagramAt(Object handler, int recipeIndex) { private static Object diagramState(Object handler) { try { Object state = FIELD_DIAGRAM_STATE.get(handler); - return state != null && CLASS_DIAGRAM_STATE.isInstance(state) ? state : null; + return CLASS_DIAGRAM_STATE.isInstance(state) ? state : null; } catch (Throwable ignored) { return null; } diff --git a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibBoundedCache.java b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibBoundedCache.java index 531d5bb9..bbf0e143 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibBoundedCache.java +++ b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibBoundedCache.java @@ -9,7 +9,7 @@ public class StructureLibBoundedCache { public StructureLibBoundedCache(int maxEntries) { int capacity = Math.max(1, maxEntries); - this.entries = new LinkedHashMap(capacity, 0.75F, true) { + this.entries = new LinkedHashMap<>(capacity, 0.75F, true) { @Override protected boolean removeEldestEntry(Map.Entry eldest) { diff --git a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibControllerIntegrationRegistry.java b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibControllerIntegrationRegistry.java index f2e73abd..51d641b6 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibControllerIntegrationRegistry.java +++ b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibControllerIntegrationRegistry.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.integration.structurelib; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class StructureLibControllerIntegrationRegistry { @@ -44,19 +43,19 @@ public synchronized void registerPreviewStateSynchronizer(StructureLibPreviewSta } public synchronized List discoveryIntegrations() { - return Collections.unmodifiableList(new ArrayList<>(discoveryIntegrations)); + return List.copyOf(discoveryIntegrations); } public synchronized List placementIntegrations() { - return Collections.unmodifiableList(new ArrayList<>(placementIntegrations)); + return List.copyOf(placementIntegrations); } public synchronized List previewItemProviders() { - return Collections.unmodifiableList(new ArrayList<>(previewItemProviders)); + return List.copyOf(previewItemProviders); } public synchronized List previewStateSynchronizers() { - return Collections.unmodifiableList(new ArrayList<>(previewStateSynchronizers)); + return List.copyOf(previewStateSynchronizers); } private boolean containsIntegrationType(List integrations, Class integrationType) { diff --git a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibElementTooltipResolver.java b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibElementTooltipResolver.java index 37b727aa..169259c0 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibElementTooltipResolver.java +++ b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibElementTooltipResolver.java @@ -3,7 +3,6 @@ import java.lang.reflect.Field; import java.lang.reflect.Method; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.IdentityHashMap; import java.util.LinkedHashMap; @@ -33,7 +32,7 @@ public class StructureLibElementTooltipResolver { public static final int MAX_TIER_SCAN = 50; public static final int MAX_CANDIDATE_CACHE_ENTRIES = 512; public static final String LAZY_ELEMENT_CLASS_NAME = "com.gtnewhorizon.structurelib.structure.LazyStructureElement"; - public static final IItemSource EMPTY_ITEM_SOURCE = (predicate, simulate, count) -> Collections.emptyMap(); + public static final IItemSource EMPTY_ITEM_SOURCE = (predicate, simulate, count) -> Map.of(); public static final Map, List> CAPTURED_ELEMENT_FIELDS_CACHE = new ConcurrentHashMap<>(); public static final StructureLibBoundedCache> BLOCK_CANDIDATE_CACHE = new StructureLibBoundedCache<>( MAX_CANDIDATE_CACHE_ENTRIES); @@ -97,13 +96,13 @@ public TooltipDetails resolve(Object constructable, IStructureElement element trigger, actor, contextFingerprint) - : Collections.emptyList(); + : List.of(); if (hatchLeafMatch != null && !blockCandidates.isEmpty()) { blockCandidates = filterOutHatchCandidates(blockCandidates); } List hatchDescriptionLines = hatchLeafMatch != null ? buildHatchDescriptionLines(hatchLeafMatch.details) - : Collections.emptyList(); + : List.of(); return new TooltipDetails(blockCandidates, hatchDescriptionLines, hatchCandidates); } @@ -311,7 +310,7 @@ public static ItemStack copyTrigger(ItemStack trigger, int tier) { private List filterOutHatchCandidates(List candidates) { if (candidates.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List filtered = new ArrayList<>(candidates.size()); for (ItemStack candidate : candidates) { @@ -319,7 +318,7 @@ private List filterOutHatchCandidates(List candidates) { filtered.add(candidate.copy()); } } - return filtered.isEmpty() ? Collections.emptyList() : Collections.unmodifiableList(filtered); + return filtered.isEmpty() ? List.of() : List.copyOf(filtered); } private List buildHatchDescriptionLines(HatchDetails details) { @@ -332,7 +331,7 @@ private List buildHatchDescriptionLines(HatchD .isEmpty()) { lines.add(StructureLibHatchDescriptionLine.validHatches(normalizeHatchHintText(details.getHintText()))); } - return lines.isEmpty() ? Collections.emptyList() : Collections.unmodifiableList(lines); + return lines.isEmpty() ? List.of() : List.copyOf(lines); } public static String normalizeHatchHintText(String hintText) { @@ -354,7 +353,7 @@ private void appendStacks(Map candidatesByKey, List normalizeStacks(Iterable stacks) { if (stacks == null) { - return Collections.emptyList(); + return List.of(); } List normalized = new ArrayList<>(); for (ItemStack stack : stacks) { @@ -401,14 +400,14 @@ public static List findCapturedElementFields(Class elementClass) { fields.add(field); } fields.sort(Comparator.comparing(Field::getName)); - return fields.isEmpty() ? Collections.emptyList() : Collections.unmodifiableList(fields); + return fields.isEmpty() ? List.of() : List.copyOf(fields); } public static List immutableStacks(Map candidatesByKey) { if (candidatesByKey.isEmpty()) { - return Collections.emptyList(); + return List.of(); } - return Collections.unmodifiableList(new ArrayList<>(candidatesByKey.values())); + return List.copyOf(candidatesByKey.values()); } @SuppressWarnings("unchecked") @@ -451,10 +450,7 @@ public String getHintText() { public static class TooltipDetails { - public static final TooltipDetails EMPTY = new TooltipDetails( - Collections.emptyList(), - Collections.emptyList(), - Collections.emptyList()); + public static final TooltipDetails EMPTY = new TooltipDetails(List.of(), List.of(), List.of()); private final List blockCandidates; private final List hatchDescriptionLines; @@ -583,7 +579,7 @@ public HatchDetails inspectLeaf(Object constructable, IStructureElement @Override public List enumerateHatchCandidates(Object constructable, IStructureElement element, World world, int x, int y, int z, ItemStack trigger, AutoPlaceEnvironment environment) { - return Collections.emptyList(); + return List.of(); } @Override @@ -614,19 +610,19 @@ public List enumerateHatchCandidates(Object constructable, IStructure IStructureElement.BlocksToPlace blocksToPlace = element .getBlocksToPlace(constructable, world, x, y, z, trigger, environment); if (blocksToPlace == null) { - return Collections.emptyList(); + return List.of(); } Predicate predicate = blocksToPlace.getPredicate(); if (predicate == null) { - return Collections.emptyList(); + return List.of(); } Object[] metaTileArray = GregTechHelpers.getMetaTileEntities(); if (metaTileArray == null) { - return Collections.emptyList(); + return List.of(); } Block blockMachines = GregTechHelpers.getBlockMachines(); if (blockMachines == null) { - return Collections.emptyList(); + return List.of(); } List candidates = new ArrayList<>(); for (int meta = 1; meta < metaTileArray.length; meta++) { diff --git a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibHatchDescriptionLine.java b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibHatchDescriptionLine.java index 75e68ca3..14d31c5a 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibHatchDescriptionLine.java +++ b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibHatchDescriptionLine.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.integration.structurelib; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; import java.util.Objects; @@ -55,7 +54,7 @@ public static synchronized Kind kind(@Nullable String id) { } public static synchronized Map kinds() { - return Collections.unmodifiableMap(new LinkedHashMap<>(KINDS)); + return Map.copyOf(new LinkedHashMap<>(KINDS)); } public Kind getKind() { diff --git a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibImportResult.java b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibImportResult.java index 22591b02..1e44399b 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibImportResult.java +++ b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibImportResult.java @@ -1,7 +1,5 @@ package com.hfstudio.guidenh.integration.structurelib; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.block.Block; @@ -34,22 +32,17 @@ private StructureLibImportResult(boolean success, List blocks, List public static StructureLibImportResult success(List blocks, List warnings, @Nullable StructureLibSceneMetadata metadata) { - return new StructureLibImportResult(true, blocks, warnings, Collections.emptyList(), metadata); + return new StructureLibImportResult(true, blocks, warnings, List.of(), metadata); } public static StructureLibImportResult failure(String error) { - return failure(error, Collections.emptyList(), null); + return failure(error, List.of(), null); } public static StructureLibImportResult failure(String error, List warnings, @Nullable StructureLibSceneMetadata metadata) { String normalized = normalizeMessage(error); - return new StructureLibImportResult( - false, - Collections.emptyList(), - warnings, - Collections.singletonList(normalized), - metadata); + return new StructureLibImportResult(false, List.of(), warnings, List.of(normalized), metadata); } public boolean isSuccess() { @@ -79,9 +72,9 @@ public StructureLibSceneMetadata getMetadata() { public static List immutableCopy(@Nullable List source) { if (source == null || source.isEmpty()) { - return Collections.emptyList(); + return List.of(); } - return Collections.unmodifiableList(new ArrayList<>(source)); + return List.copyOf(source); } public static String normalizeMessage(@Nullable String message) { diff --git a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibPreviewItemSource.java b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibPreviewItemSource.java index 29974ac1..c447d94d 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibPreviewItemSource.java +++ b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibPreviewItemSource.java @@ -42,7 +42,7 @@ public Map take(Predicate predicate, boolean simu } ItemStack stack = findMatchingStack(predicate); if (stack != null) { - result.put(stack, Math.max(1, count)); + result.put(stack, count); } return result; } diff --git a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibPreviewMetadataFactory.java b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibPreviewMetadataFactory.java index 9ed5b8ad..3fdb3a98 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibPreviewMetadataFactory.java +++ b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibPreviewMetadataFactory.java @@ -2,7 +2,6 @@ import java.lang.reflect.Field; import java.util.ArrayList; -import java.util.Collections; import java.util.IdentityHashMap; import java.util.LinkedHashMap; import java.util.List; @@ -27,9 +26,9 @@ public class StructureLibPreviewMetadataFactory { private static final Map, List> CHANNEL_FIELDS_CACHE = new ConcurrentHashMap<>(); private static final StructureLibSceneMetadata.BlockTooltipData GENERIC_TOOLTIP_DATA = new StructureLibSceneMetadata.BlockTooltipData( GENERIC_STRUCTURELIB_DESCRIPTION, - Collections.emptyList(), - Collections.emptyList(), - Collections.emptyList()); + List.of(), + List.of(), + List.of()); private final StructureLibElementTooltipResolver tooltipResolver; @@ -68,8 +67,7 @@ public StructureLibSceneMetadata createMetadata(StructureLibImportRequest reques request.getFlip()); int resolvedMaxTier = Math.max(maxTier, resolveHintMaxTier(visitedElementsByPos, constructable)); if (resolvedMaxTier > 0) { - metadata = metadata - .withTierData(1, Math.max(1, resolvedMaxTier), selection.getMasterTier(), selection.getMasterTier()); + metadata = metadata.withTierData(1, resolvedMaxTier, selection.getMasterTier(), selection.getMasterTier()); } if (channelMaxTierMap != null && !channelMaxTierMap.isEmpty()) { for (Map.Entry entry : channelMaxTierMap.entrySet()) { @@ -267,7 +265,7 @@ private static List findChannelFields(Class elementClass) { } current = current.getSuperclass(); } - return fields.isEmpty() ? Collections.emptyList() : Collections.unmodifiableList(fields); + return fields.isEmpty() ? List.of() : List.copyOf(fields); } public static long pack(int x, int y, int z) { diff --git a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibPreviewSelection.java b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibPreviewSelection.java index b73dae34..8ed80022 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibPreviewSelection.java +++ b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibPreviewSelection.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.integration.structurelib; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.Locale; import java.util.Map; @@ -20,11 +19,11 @@ public class StructureLibPreviewSelection { private final Map integrationOptions; public StructureLibPreviewSelection() { - this(DEFAULT_MASTER_TIER, Collections.emptyMap(), Collections.emptyMap()); + this(DEFAULT_MASTER_TIER, Map.of(), Map.of()); } public StructureLibPreviewSelection(int masterTier, @Nullable Map channelOverrides) { - this(masterTier, channelOverrides, Collections.emptyMap()); + this(masterTier, channelOverrides, Map.of()); } public StructureLibPreviewSelection(int masterTier, @Nullable Map channelOverrides, @@ -39,7 +38,7 @@ public static StructureLibPreviewSelection defaultSelection() { } public static StructureLibPreviewSelection ofMasterTier(int masterTier) { - return new StructureLibPreviewSelection(masterTier, Collections.emptyMap()); + return new StructureLibPreviewSelection(masterTier, Map.of()); } public int getMasterTier() { @@ -107,10 +106,10 @@ public StructureLibPreviewSelection withIntegrationOption(String optionId, boole public static Map immutableChannelOverrides(@Nullable Map source) { if (source == null || source.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } - LinkedHashMap normalized = new LinkedHashMap<>(source.size()); - for (Map.Entry entry : source.entrySet()) { + var normalized = new LinkedHashMap(source.size()); + for (var entry : source.entrySet()) { String channelId = normalizeChannelId(entry.getKey()); Integer value = entry.getValue(); if (channelId == null || value == null || value <= 0) { @@ -118,21 +117,21 @@ public static Map immutableChannelOverrides(@Nullable Map immutableIntegrationOptions(@Nullable Map source) { if (source == null || source.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } - LinkedHashMap normalized = new LinkedHashMap<>(source.size()); - for (Map.Entry entry : source.entrySet()) { + var normalized = new LinkedHashMap(source.size()); + for (var entry : source.entrySet()) { String optionId = normalizeIntegrationOptionId(entry.getKey()); if (optionId != null && Boolean.TRUE.equals(entry.getValue())) { normalized.put(optionId, Boolean.TRUE); } } - return normalized.isEmpty() ? Collections.emptyMap() : Collections.unmodifiableMap(normalized); + return normalized.isEmpty() ? Map.of() : Map.copyOf(normalized); } @Nullable diff --git a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibRuntimeFacade.java b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibRuntimeFacade.java index fc6fb5d3..da4bd1a4 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibRuntimeFacade.java +++ b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibRuntimeFacade.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.integration.structurelib; import java.util.ArrayList; -import java.util.Collections; import java.util.Comparator; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -173,7 +172,7 @@ public static ControlAnalysis analyzeControls(StructureLibImportRequest request, } } catch (Throwable t) { GuideDebugLog.warn(LOG, "Failed to create Guidebook fake world for StructureLib control analysis", t); - return new ControlAnalysis(MIN_TIER, Collections.emptyMap()); + return new ControlAnalysis(MIN_TIER, Map.of()); } } @@ -327,7 +326,7 @@ public static Map mergeChannelMaxTierMap(Map b StructureLibPreviewSelection selection) { if ((base == null || base.isEmpty()) && (selection == null || selection.getChannelOverrides() .isEmpty())) { - return Collections.emptyMap(); + return Map.of(); } LinkedHashMap merged = new LinkedHashMap<>(); if (base != null && !base.isEmpty()) { @@ -341,11 +340,12 @@ public static Map mergeChannelMaxTierMap(Map b if (channelId == null || selectedValue == null || selectedValue <= 0) { continue; } - Integer knownMax = merged.get(channelId); - merged.put(channelId, knownMax != null ? Math.max(knownMax, selectedValue) : selectedValue); + merged.compute( + channelId, + (k, knownMax) -> knownMax != null ? Math.max(knownMax, selectedValue) : selectedValue); } } - return merged.isEmpty() ? Collections.emptyMap() : merged; + return merged.isEmpty() ? Map.of() : merged; } public static void collectChannelIds(BuildSnapshot snapshot, Set discoveredChannels) { @@ -471,7 +471,7 @@ public static PreparedPreviewWorld preparePreviewWorld(StructureLibImportRequest } ItemStack triggerStack = createTriggerStack(selection); - Map> visitedElementsByPos = Collections.emptyMap(); + Map> visitedElementsByPos = Map.of(); Object instrumentId = new Object(); StructureLibStructureVisitCollector visitCollector = new StructureLibStructureVisitCollector( instrumentId, @@ -838,7 +838,7 @@ private static String resolvePlacedBlockId(GuidebookLevel level, int x, int y, i public static List mergeWarnings(List leadingWarnings, List cachedWarnings) { if ((leadingWarnings == null || leadingWarnings.isEmpty()) && (cachedWarnings == null || cachedWarnings.isEmpty())) { - return Collections.emptyList(); + return List.of(); } ArrayList merged = new ArrayList<>(); if (leadingWarnings != null) { @@ -1037,7 +1037,7 @@ public StructureLibPreviewSelection clampSelection(StructureLibPreviewSelection public static Map immutableChannelMaxTierMap(@Nullable Map source) { if (source == null || source.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } LinkedHashMap normalized = new LinkedHashMap<>(source.size()); for (Map.Entry entry : source.entrySet()) { @@ -1048,7 +1048,7 @@ public static Map immutableChannelMaxTierMap(@Nullable Map channelIds, String fingerprint, @Nullable String errorMessage) { this.success = success; - this.channelIds = channelIds != null ? Collections.unmodifiableSet(new LinkedHashSet<>(channelIds)) - : Collections.emptySet(); + this.channelIds = channelIds != null ? Set.copyOf(new LinkedHashSet<>(channelIds)) : Set.of(); this.fingerprint = fingerprint != null ? fingerprint : ""; this.errorMessage = errorMessage; } @@ -1261,7 +1260,7 @@ public static PreparedPreviewWorld failure(String errorMessage) { new ItemStack(StructureLibAPI.getDefaultHologramItem(), MIN_TIER), null, null, - Collections.emptyMap(), + Map.of(), sanitizeMessage(errorMessage)); } } @@ -1293,8 +1292,7 @@ public BuildSnapshot(boolean success, List this.blocks = blocks; this.absoluteBlocks = absoluteBlocks; this.visitedElementsByPos = visitedElementsByPos; - this.channelIds = channelIds != null ? Collections.unmodifiableSet(new LinkedHashSet<>(channelIds)) - : Collections.emptySet(); + this.channelIds = channelIds != null ? Set.copyOf(new LinkedHashSet<>(channelIds)) : Set.of(); this.fingerprint = fingerprint; this.world = world; this.triggerStack = triggerStack; @@ -1311,7 +1309,7 @@ public static BuildSnapshot success(List b blocks, absoluteBlocks, visitedElementsByPos, - Collections.emptySet(), + Set.of(), fingerprint, world, triggerStack, @@ -1340,9 +1338,9 @@ public static BuildSnapshot success(List b public static BuildSnapshot analysis(String fingerprint, Set channelIds) { return new BuildSnapshot( true, - Collections.emptyList(), - Collections.emptyList(), - Collections.emptyMap(), + List.of(), + List.of(), + Map.of(), channelIds, fingerprint, null, @@ -1355,10 +1353,10 @@ public static BuildSnapshot analysis(String fingerprint, Set channelIds) public static BuildSnapshot failure(String errorMessage) { return new BuildSnapshot( false, - Collections.emptyList(), - Collections.emptyList(), - Collections.emptyMap(), - Collections.emptySet(), + List.of(), + List.of(), + Map.of(), + Set.of(), "", null, new ItemStack(StructureLibAPI.getDefaultHologramItem(), MIN_TIER), @@ -1389,9 +1387,7 @@ public static BuildAttemptResult failure(String errorMessage) { public static class SnapshotBlocksResult { - public static final SnapshotBlocksResult EMPTY = new SnapshotBlocksResult( - Collections.emptyList(), - Collections.emptyList()); + public static final SnapshotBlocksResult EMPTY = new SnapshotBlocksResult(List.of(), List.of()); private final List blocks; private final List absoluteBlocks; diff --git a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibSceneMetadata.java b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibSceneMetadata.java index d4a46ffb..0fe9977f 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibSceneMetadata.java +++ b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibSceneMetadata.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.integration.structurelib; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.List; @@ -34,7 +33,7 @@ public class StructureLibSceneMetadata { public StructureLibSceneMetadata(String controller, @Nullable String piece, @Nullable String facing, @Nullable String rotation, @Nullable String flip) { - this(controller, piece, facing, rotation, flip, null, Collections.emptyList(), Collections.emptyMap()); + this(controller, piece, facing, rotation, flip, null, List.of(), Map.of()); } private StructureLibSceneMetadata(String controller, @Nullable String piece, @Nullable String facing, @@ -203,7 +202,7 @@ public static String normalizeOptional(@Nullable String value) { public static List immutableChannels(@Nullable List source) { if (source == null || source.isEmpty()) { - return Collections.emptyList(); + return List.of(); } LinkedHashMap deduplicated = new LinkedHashMap<>(source.size()); for (ChannelData channelData : source) { @@ -211,31 +210,30 @@ public static List immutableChannels(@Nullable List so deduplicated.put(channelData.getChannelId(), channelData); } } - return deduplicated.isEmpty() ? Collections.emptyList() - : Collections.unmodifiableList(new ArrayList<>(deduplicated.values())); + return deduplicated.isEmpty() ? List.of() : List.copyOf(deduplicated.values()); } public static Map indexChannels(List channels) { if (channels.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } LinkedHashMap indexed = new LinkedHashMap<>(channels.size()); for (ChannelData channelData : channels) { indexed.put(channelData.getChannelId(), channelData); } - return Collections.unmodifiableMap(indexed); + return Map.copyOf(indexed); } public static Map immutableCopy(@Nullable Map source) { if (source == null || source.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } - return Collections.unmodifiableMap(new LinkedHashMap<>(source)); + return Map.copyOf(new LinkedHashMap<>(source)); } public static Map filterTooltipData(@Nullable Map source) { if (source == null || source.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } LinkedHashMap filtered = new LinkedHashMap<>(source.size()); for (Map.Entry entry : source.entrySet()) { @@ -244,13 +242,13 @@ public static Map filterTooltipData(@Nullable Map computeHatchTooltipEntries( Map blockTooltipDataByPos) { if (blockTooltipDataByPos.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List entries = new ArrayList<>(); for (Map.Entry entry : blockTooltipDataByPos.entrySet()) { @@ -264,7 +262,7 @@ public static List computeHatchTooltipEntries( value)); } } - return entries.isEmpty() ? Collections.emptyList() : Collections.unmodifiableList(entries); + return entries.isEmpty() ? List.of() : List.copyOf(entries); } public static long packBlockPos(int x, int y, int z) { @@ -273,13 +271,13 @@ public static long packBlockPos(int x, int y, int z) { public static Set computeHatchTooltipPositions(List hatchTooltipEntries) { if (hatchTooltipEntries.isEmpty()) { - return Collections.emptySet(); + return Set.of(); } Set positions = new LinkedHashSet<>(hatchTooltipEntries.size()); for (BlockTooltipEntry entry : hatchTooltipEntries) { positions.add(packBlockPos(entry.getX(), entry.getY(), entry.getZ())); } - return Collections.unmodifiableSet(positions); + return Set.copyOf(positions); } public static int unpackBlockPosX(long packedPos) { @@ -370,7 +368,7 @@ public boolean hasHatchDetails() { public static List immutableStacks(@Nullable List stacks) { if (stacks == null || stacks.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List copied = new ArrayList<>(stacks.size()); for (ItemStack stack : stacks) { @@ -378,13 +376,13 @@ public static List immutableStacks(@Nullable List stacks) copied.add(stack.copy()); } } - return copied.isEmpty() ? Collections.emptyList() : Collections.unmodifiableList(copied); + return copied.isEmpty() ? List.of() : List.copyOf(copied); } public static List immutableLines( @Nullable List lines) { if (lines == null || lines.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List copied = new ArrayList<>(lines.size()); for (StructureLibHatchDescriptionLine line : lines) { @@ -392,7 +390,7 @@ public static List immutableLines( copied.add(line); } } - return copied.isEmpty() ? Collections.emptyList() : Collections.unmodifiableList(copied); + return copied.isEmpty() ? List.of() : List.copyOf(copied); } } diff --git a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibStructureVisitCollector.java b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibStructureVisitCollector.java index e9ff9c2d..dae75d23 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibStructureVisitCollector.java +++ b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibStructureVisitCollector.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.integration.structurelib; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.Map; @@ -34,9 +33,9 @@ public void onStructureElementVisited(StructureElementVisitedEvent event) { public Map> snapshot() { if (visitedElementsByPos.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } - return Collections.unmodifiableMap(new LinkedHashMap<>(visitedElementsByPos)); + return Map.copyOf(new LinkedHashMap<>(visitedElementsByPos)); } public static long pack(int x, int y, int z) { diff --git a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibTooltipContentBuilder.java b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibTooltipContentBuilder.java index c1e2b002..ddda6ba6 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibTooltipContentBuilder.java +++ b/src/main/java/com/hfstudio/guidenh/integration/structurelib/StructureLibTooltipContentBuilder.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.integration.structurelib; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.item.ItemStack; @@ -69,7 +68,7 @@ private static void appendDescriptionLines(LytVBox root, @Nullable List candidates) public static List normalizeStacks(@Nullable List candidates) { if (candidates == null || candidates.isEmpty()) { - return Collections.emptyList(); + return List.of(); } List normalized = new ArrayList<>(candidates.size()); for (ItemStack stack : candidates) { @@ -187,7 +186,7 @@ public static List normalizeStacks(@Nullable List candidat normalized.add(stack); } } - return normalized.isEmpty() ? Collections.emptyList() : normalized; + return normalized.isEmpty() ? List.of() : normalized; } public static String requireBlockName(@Nullable String blockName) { diff --git a/src/main/java/com/hfstudio/guidenh/integration/translocators/TranslocatorsHelpers.java b/src/main/java/com/hfstudio/guidenh/integration/translocators/TranslocatorsHelpers.java index 7e65c4b1..3a2cfe05 100644 --- a/src/main/java/com/hfstudio/guidenh/integration/translocators/TranslocatorsHelpers.java +++ b/src/main/java/com/hfstudio/guidenh/integration/translocators/TranslocatorsHelpers.java @@ -8,7 +8,7 @@ import codechicken.translocator.TileTranslocator.Attachment; import cpw.mods.fml.common.Optional; -public final class TranslocatorsHelpers { +public class TranslocatorsHelpers { @Optional.Method(modid = "Translocator") public static void prepare(GuidebookLevel level) { diff --git a/src/main/java/com/hfstudio/guidenh/libs/mdast/MdastCompiler.java b/src/main/java/com/hfstudio/guidenh/libs/mdast/MdastCompiler.java index 7c4608d7..615c1340 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/mdast/MdastCompiler.java +++ b/src/main/java/com/hfstudio/guidenh/libs/mdast/MdastCompiler.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.libs.mdast; import java.util.ArrayList; -import java.util.Collections; import java.util.IdentityHashMap; import java.util.List; import java.util.Map; @@ -338,7 +337,7 @@ public static int prepareList(List events, int start, int lengt events, (lineIndex != null ? (lineIndex) : (index)), 0, - Collections.singletonList(Tokenizer.Event.exit(listItem, event.context()))); + List.of(Tokenizer.Event.exit(listItem, event.context()))); index++; length++; } @@ -351,11 +350,7 @@ public static int prepareList(List events, int start, int lengt listItem.start = event.token().start; // @ts-expect-error: `listItem` is most definitely defined, TS... - ListUtils.splice( - events, - index, - 0, - Collections.singletonList(Tokenizer.Event.enter(listItem, event.context()))); + ListUtils.splice(events, index, 0, List.of(Tokenizer.Event.enter(listItem, event.context()))); index++; length++; firstBlankLineIndex = null; diff --git a/src/main/java/com/hfstudio/guidenh/libs/mdast/MdastExtension.java b/src/main/java/com/hfstudio/guidenh/libs/mdast/MdastExtension.java index 526f4302..528f2e60 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/mdast/MdastExtension.java +++ b/src/main/java/com/hfstudio/guidenh/libs/mdast/MdastExtension.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.libs.mdast; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -33,10 +32,10 @@ public interface Handler { public MdastExtension(List canContainEols, List transforms, Map enter, Map exit) { - this.canContainEols = Collections.unmodifiableList(new ArrayList<>(canContainEols)); - this.transforms = Collections.unmodifiableList(new ArrayList<>(transforms)); - this.enter = Collections.unmodifiableMap(new HashMap<>(enter)); - this.exit = Collections.unmodifiableMap(new HashMap<>(exit)); + this.canContainEols = List.copyOf(new ArrayList<>(canContainEols)); + this.transforms = List.copyOf(new ArrayList<>(transforms)); + this.enter = Map.copyOf(new HashMap<>(enter)); + this.exit = Map.copyOf(new HashMap<>(exit)); } public static Builder builder() { @@ -73,7 +72,7 @@ public Builder exit(String type, Runnable handler) { } public Builder canContainEol(String... types) { - Collections.addAll(canContainEols, types); + canContainEols.addAll(List.of(types)); return this; } diff --git a/src/main/java/com/hfstudio/guidenh/libs/mdast/mdx/ParseEntities.java b/src/main/java/com/hfstudio/guidenh/libs/mdast/mdx/ParseEntities.java index 618bfd8a..8b4cbb33 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/mdast/mdx/ParseEntities.java +++ b/src/main/java/com/hfstudio/guidenh/libs/mdast/mdx/ParseEntities.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.libs.mdast.mdx; -import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -203,7 +202,7 @@ boolean test(char ch) { codes.put(156, "œ"); codes.put(158, "ž"); codes.put(159, "Ÿ"); - characterReferenceInvalid = Collections.unmodifiableMap(new HashMap<>(codes)); + characterReferenceInvalid = Map.copyOf(new HashMap<>(codes)); } } diff --git a/src/main/java/com/hfstudio/guidenh/libs/mdx/MdxCommentMasker.java b/src/main/java/com/hfstudio/guidenh/libs/mdx/MdxCommentMasker.java index 4912591a..5f720015 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/mdx/MdxCommentMasker.java +++ b/src/main/java/com/hfstudio/guidenh/libs/mdx/MdxCommentMasker.java @@ -1,6 +1,6 @@ package com.hfstudio.guidenh.libs.mdx; -public final class MdxCommentMasker { +public class MdxCommentMasker { private MdxCommentMasker() {} diff --git a/src/main/java/com/hfstudio/guidenh/libs/mdx/MdxSyntax.java b/src/main/java/com/hfstudio/guidenh/libs/mdx/MdxSyntax.java index 81d8dcc9..d1db48a8 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/mdx/MdxSyntax.java +++ b/src/main/java/com/hfstudio/guidenh/libs/mdx/MdxSyntax.java @@ -1,6 +1,6 @@ package com.hfstudio.guidenh.libs.mdx; -import java.util.Collections; +import java.util.List; import com.hfstudio.guidenh.libs.micromark.Extension; import com.hfstudio.guidenh.libs.micromark.symbol.Codes; @@ -10,8 +10,8 @@ public class MdxSyntax { public static final Extension INSTANCE = new Extension(); static { - INSTANCE.flow.put(Codes.lessThan, Collections.singletonList(JsxFlow.INSTANCE)); - INSTANCE.text.put(Codes.lessThan, Collections.singletonList(JsxText.INSTANCE)); + INSTANCE.flow.put(Codes.lessThan, List.of(JsxFlow.INSTANCE)); + INSTANCE.text.put(Codes.lessThan, List.of(JsxText.INSTANCE)); } } diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/DefaultExtension.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/DefaultExtension.java index 929a944d..d5558ca4 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/DefaultExtension.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/DefaultExtension.java @@ -1,7 +1,5 @@ package com.hfstudio.guidenh.libs.micromark; -import java.util.Arrays; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -33,7 +31,7 @@ public class DefaultExtension { private DefaultExtension() {} public static List l(Construct... constructs) { - return Arrays.asList(constructs); + return List.of(constructs); } public static Extension create() { @@ -95,11 +93,11 @@ public static Extension create() { extension.text.put(Codes.underscore, l(Attention.attention)); extension.text.put(Codes.graveAccent, l(CodeText.codeText)); - extension.nullInsideSpan = Arrays.asList(Attention.attention.resolveAll, InitializeText.resolver); + extension.nullInsideSpan = List.of(Attention.attention.resolveAll, InitializeText.resolver); - extension.nullAttentionMarkers = Arrays.asList(Codes.asterisk, Codes.underscore); + extension.nullAttentionMarkers = List.of(Codes.asterisk, Codes.underscore); - extension.nullDisable = Collections.emptyList(); + extension.nullDisable = List.of(); return extension; } diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/Extensions.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/Extensions.java index 3f91c226..365f945d 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/Extensions.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/Extensions.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.libs.micromark; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -49,7 +48,7 @@ public static Map> mergeMap(Map. */ public static final Set htmlBlockNames = new HashSet<>( - Arrays.asList( + List.of( "address", "article", "aside", @@ -85,6 +85,6 @@ private HtmlTagName() {} * This module is copied from: . * Note that `textarea` was added in `CommonMark@0.30`. */ - public static final Set htmlRawNames = new HashSet<>(Arrays.asList("pre", "script", "style", "textarea")); + public static final Set htmlRawNames = new HashSet<>(List.of("pre", "script", "style", "textarea")); } diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/InitializeDocument.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/InitializeDocument.java index c5256538..2769cd23 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/InitializeDocument.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/InitializeDocument.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.libs.micromark; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -394,7 +393,7 @@ private void closeFlow() { if (childFlow == null) { throw new IllegalStateException("expected 'childFlow' to be defined when closing it"); } - childFlow.write(Collections.singletonList(Codes.eof)); + childFlow.write(List.of(Codes.eof)); childToken = null; childFlow = null; context.getContainerState() diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/InterruptedTokenizeContext.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/InterruptedTokenizeContext.java index cd950448..c1789ea4 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/InterruptedTokenizeContext.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/InterruptedTokenizeContext.java @@ -7,7 +7,7 @@ /** * A context object that helps w/ tokenizing markdown constructs. */ -class InterruptedTokenizeContext implements TokenizeContext { +public class InterruptedTokenizeContext implements TokenizeContext { private final TokenizeContext parent; diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/NamedCharacterEntities.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/NamedCharacterEntities.java index 82523ea3..54e43052 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/NamedCharacterEntities.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/NamedCharacterEntities.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.libs.micromark; -import java.util.Collections; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -18,7 +17,7 @@ public static String decodeNamedCharacterReference(String ref) { } public static Set getNames() { - return Collections.unmodifiableSet(ENTITIES.keySet()); + return Set.copyOf(ENTITIES.keySet()); } static { diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/RootTokenizeContext.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/RootTokenizeContext.java index a32a569b..843a335d 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/RootTokenizeContext.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/RootTokenizeContext.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.libs.micromark; import java.util.ArrayList; -import java.util.Collections; import java.util.IdentityHashMap; import java.util.List; import java.util.Map; @@ -16,7 +15,7 @@ /** * A context object that helps w/ tokenizing markdown constructs. */ -class RootTokenizeContext implements TokenizeContext { +public class RootTokenizeContext implements TokenizeContext { // Data attached to this context by extensions @Nullable @@ -101,7 +100,7 @@ public List write(List slice) { // Exit if we’re not done, resolve might change stuff. if (!Objects.equals(tokenizer.chunks.get(tokenizer.chunks.size() - 1), Codes.eof)) { - return Collections.emptyList(); + return List.of(); } tokenizer.addResult(tokenizer.initialize, 0); diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/Tokenizer.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/Tokenizer.java index cd560bcc..1d9804a4 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/Tokenizer.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/Tokenizer.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.libs.micromark; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -214,9 +213,7 @@ public Token exit(String type) { /** * Interrupt is used for stuff right after a line of content. */ - public Hook interrupt = constructFactory( - Tokenizer.this::onsuccessfulcheck, - Collections.singletonMap("interrupt", Boolean.TRUE)); + public Hook interrupt = constructFactory(Tokenizer.this::onsuccessfulcheck, Map.of("interrupt", Boolean.TRUE)); } /** @@ -299,15 +296,13 @@ public interface Hook { State hook(List constructs, State returnState, State bogusState); default State hook(Construct construct, State returnState, State bogusState) { - return hook(Collections.singletonList(construct), returnState, bogusState); + return hook(List.of(construct), returnState, bogusState); } default State hook(Map> map, State returnState, State bogusState) { return code -> { - List def = code != Codes.eof ? map.getOrDefault(code, Collections.emptyList()) - : Collections.emptyList(); - List all = code != Codes.eof ? map.getOrDefault(Codes.eof, Collections.emptyList()) - : Collections.emptyList(); + List def = code != Codes.eof ? map.getOrDefault(code, List.of()) : List.of(); + List all = code != Codes.eof ? map.getOrDefault(Codes.eof, List.of()) : List.of(); var list = new ArrayList(); list.addAll(def); list.addAll(all); diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/commonmark/Attention.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/commonmark/Attention.java index 4fc30d6b..5c0c0c28 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/commonmark/Attention.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/commonmark/Attention.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.libs.micromark.commonmark; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import com.hfstudio.guidenh.libs.micromark.ClassifyCharacter; @@ -119,7 +118,7 @@ public static List resolveAllAttention(List ev if (openEvent.token().end.offset() - openEvent.token().start.offset() != 0) { nextEvents = ListUtils.push( nextEvents, - Arrays.asList( + List.of( Tokenizer.Event.enter(openEvent.token(), context), Tokenizer.Event.exit(openEvent.token(), context))); } @@ -127,7 +126,7 @@ public static List resolveAllAttention(List ev // Opening. nextEvents = ListUtils.push( nextEvents, - Arrays.asList( + List.of( Tokenizer.Event.enter(group, context), Tokenizer.Event.enter(openingSequence, context), Tokenizer.Event.exit(openingSequence, context), @@ -144,7 +143,7 @@ public static List resolveAllAttention(List ev // Closing. nextEvents = ListUtils.push( nextEvents, - Arrays.asList( + List.of( Tokenizer.Event.exit(text, context), Tokenizer.Event.enter(closingSequence, context), Tokenizer.Event.exit(closingSequence, context), @@ -155,7 +154,7 @@ public static List resolveAllAttention(List ev offset = 2; nextEvents = ListUtils.push( nextEvents, - Arrays.asList( + List.of( Tokenizer.Event.enter(event.token(), context), Tokenizer.Event.exit(event.token(), context))); } else { diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/commonmark/HeadingAtx.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/commonmark/HeadingAtx.java index a0f3e5eb..dbab9762 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/commonmark/HeadingAtx.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/commonmark/HeadingAtx.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.libs.micromark.commonmark; -import java.util.Arrays; import java.util.List; import com.hfstudio.guidenh.libs.micromark.Assert; @@ -72,7 +71,7 @@ public static List resolveHeadingAtx(List even events, contentStart, contentEnd - contentStart + 1, - Arrays.asList( + List.of( Tokenizer.Event.enter(content, context), Tokenizer.Event.enter(text, context), Tokenizer.Event.exit(text, context), diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/commonmark/LabelEnd.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/commonmark/LabelEnd.java index 1c9acd32..65acfa25 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/commonmark/LabelEnd.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/commonmark/LabelEnd.java @@ -1,8 +1,6 @@ package com.hfstudio.guidenh.libs.micromark.commonmark; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -146,7 +144,7 @@ public static List resolveToLabelEnd(List even media = ListUtils.push(media, events.subList(open + 1, open + offset + 3)); // Text open. - media = ListUtils.push(media, Collections.singletonList(Tokenizer.Event.enter(text, context))); + media = ListUtils.push(media, List.of(Tokenizer.Event.enter(text, context))); // Between. media = ListUtils.push( @@ -159,7 +157,7 @@ public static List resolveToLabelEnd(List even // Text close, marker close, label close. media = ListUtils.push( media, - Arrays.asList( + List.of( Tokenizer.Event.exit(text, context), events.get(close - 2), events.get(close - 1), @@ -169,7 +167,7 @@ public static List resolveToLabelEnd(List even media = ListUtils.push(media, events.subList(close + 1, events.size())); // Media close. - media = ListUtils.push(media, Collections.singletonList(Tokenizer.Event.exit(group, context))); + media = ListUtils.push(media, List.of(Tokenizer.Event.exit(group, context))); ListUtils.splice(events, open, events.size(), media); diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/YamlFrontmatterSyntax.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/YamlFrontmatterSyntax.java index 1f40ede0..4a834c15 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/YamlFrontmatterSyntax.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/YamlFrontmatterSyntax.java @@ -1,6 +1,6 @@ package com.hfstudio.guidenh.libs.micromark.extensions; -import java.util.Collections; +import java.util.List; import com.hfstudio.guidenh.libs.micromark.CharUtil; import com.hfstudio.guidenh.libs.micromark.Construct; @@ -46,7 +46,7 @@ public class YamlFrontmatterSyntax { construct.tokenize = YamlFrontmatterSyntax::tokenizeFrontmatter; INSTANCE = new Extension(); - INSTANCE.flow.put((int) FENCE.charAt(0), Collections.singletonList(construct)); + INSTANCE.flow.put((int) FENCE.charAt(0), List.of(construct)); } public static State tokenizeFrontmatter(TokenizeContext context, Tokenizer.Effects effects, State ok, State nok) { diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/gfm/GfmTableSyntax.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/gfm/GfmTableSyntax.java index ba3d06ee..81f048f9 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/gfm/GfmTableSyntax.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/gfm/GfmTableSyntax.java @@ -1,8 +1,6 @@ package com.hfstudio.guidenh.libs.micromark.extensions.gfm; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; import java.util.List; import com.hfstudio.guidenh.libs.micromark.Assert; @@ -33,7 +31,7 @@ public GfmTableSyntax() { var construct = new Construct(); construct.tokenize = this::tokenizeTable; construct.resolve = this::resolveTable; - flow.put(Codes.eof, Collections.singletonList(construct)); + flow.put(Codes.eof, List.of(construct)); this.nextPrefixedOrBlank = new Construct(); this.nextPrefixedOrBlank.tokenize = this::tokenizeNextPrefixedOrBlank; @@ -85,7 +83,7 @@ private List resolveTable(List events, Tokeniz events, contentStart, contentEnd - contentStart + 1, - Arrays.asList( + List.of( Tokenizer.Event.enter(content, context), Tokenizer.Event.enter(text, context), Tokenizer.Event.exit(text, context), @@ -115,8 +113,8 @@ private List resolveTable(List events, Tokeniz events, index + (token.type.equals("tableCellDivider") ? 1 : 0), 0, - Collections.singletonList(Tokenizer.Event.exit(cell, context))); - ListUtils.splice(events, cellStart, 0, Collections.singletonList(Tokenizer.Event.enter(cell, context))); + List.of(Tokenizer.Event.exit(cell, context))); + ListUtils.splice(events, cellStart, 0, List.of(Tokenizer.Event.enter(cell, context))); index += 2; cellStart = index + 1; seenCellInRow = true; diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/gfmstrikethrough/GfmStrikethroughSyntax.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/gfmstrikethrough/GfmStrikethroughSyntax.java index 4bb4af10..e3b5132c 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/gfmstrikethrough/GfmStrikethroughSyntax.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/gfmstrikethrough/GfmStrikethroughSyntax.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.libs.micromark.extensions.gfmstrikethrough; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import com.github.bsideup.jabel.Desugar; @@ -42,7 +41,7 @@ public GfmStrikethroughSyntax(Options options) { tokenizer.resolveAll = this::resolveAllStrikethrough; // Set up the extension configuration - text.put(Codes.tilde, Collections.singletonList(tokenizer)); + text.put(Codes.tilde, List.of(tokenizer)); nullInsideSpan.add(tokenizer.resolveAll); nullAttentionMarkers.add(Codes.tilde); } diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/guidemark/GuideMarkSyntax.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/guidemark/GuideMarkSyntax.java index dbb184fd..3c6307a2 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/guidemark/GuideMarkSyntax.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/guidemark/GuideMarkSyntax.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.libs.micromark.extensions.guidemark; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import com.hfstudio.guidenh.libs.micromark.Assert; @@ -30,7 +29,7 @@ public GuideMarkSyntax() { construct.name = "guideMark"; construct.tokenize = GuideMarkSyntax::tokenize; construct.resolveAll = GuideMarkSyntax::resolveAll; - text.put(Codes.equalsTo, Collections.singletonList(construct)); + text.put(Codes.equalsTo, List.of(construct)); nullInsideSpan.add(construct.resolveAll); nullAttentionMarkers.add(Codes.equalsTo); } diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/guideunderline/GuideUnderlineSyntax.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/guideunderline/GuideUnderlineSyntax.java index 5f31b9ba..e2702392 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/guideunderline/GuideUnderlineSyntax.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/extensions/guideunderline/GuideUnderlineSyntax.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.libs.micromark.extensions.guideunderline; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import com.hfstudio.guidenh.libs.micromark.Assert; @@ -62,7 +61,7 @@ private void register(int markerCode, String tempType, String sequenceType, Stri construct.resolveAll = (events, context) -> resolveAll(events, context, tempType, sequenceType, wrapperType, textType); - text.put(markerCode, Collections.singletonList(construct)); + text.put(markerCode, List.of(construct)); nullInsideSpan.add(construct.resolveAll); nullAttentionMarkers.add(markerCode); } diff --git a/src/main/java/com/hfstudio/guidenh/libs/micromark/html/HtmlCompiler.java b/src/main/java/com/hfstudio/guidenh/libs/micromark/html/HtmlCompiler.java index 2eb6e29e..2f7127c1 100644 --- a/src/main/java/com/hfstudio/guidenh/libs/micromark/html/HtmlCompiler.java +++ b/src/main/java/com/hfstudio/guidenh/libs/micromark/html/HtmlCompiler.java @@ -1,7 +1,6 @@ package com.hfstudio.guidenh.libs.micromark.html; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.IdentityHashMap; import java.util.List; @@ -62,7 +61,7 @@ public static class Media { * that by tracking a stack of buffers, that can be opened (with `buffer`) and closed (with `resume`) to access * them. */ - private final List> buffers = new ArrayList<>(Collections.singletonList(new ArrayList<>())); + private final List> buffers = new ArrayList<>(List.of(new ArrayList<>())); /** * As we can have links in images and the other way around, where the deepest ones are closed first, we need to diff --git a/src/main/java/com/hfstudio/guidenh/network/GuideNhCustomPayloadLimits.java b/src/main/java/com/hfstudio/guidenh/network/GuideNhCustomPayloadLimits.java index 07517027..f7d9557e 100644 --- a/src/main/java/com/hfstudio/guidenh/network/GuideNhCustomPayloadLimits.java +++ b/src/main/java/com/hfstudio/guidenh/network/GuideNhCustomPayloadLimits.java @@ -1,6 +1,6 @@ package com.hfstudio.guidenh.network; -public final class GuideNhCustomPayloadLimits { +public class GuideNhCustomPayloadLimits { public static final int MAX_PAYLOAD_BYTES = 28 * 1024; public static final int MAX_STRUCTURE_BYTES_PER_PACKET = 27 * 1024; diff --git a/src/main/java/com/hfstudio/guidenh/network/GuideNhRegionExportServerHandler.java b/src/main/java/com/hfstudio/guidenh/network/GuideNhRegionExportServerHandler.java index bb1c9262..913e4e27 100644 --- a/src/main/java/com/hfstudio/guidenh/network/GuideNhRegionExportServerHandler.java +++ b/src/main/java/com/hfstudio/guidenh/network/GuideNhRegionExportServerHandler.java @@ -1,6 +1,5 @@ package com.hfstudio.guidenh.network; -import java.util.Collections; import java.util.List; import net.minecraft.entity.Entity; @@ -82,7 +81,7 @@ private List collectEntities(EntityPlayer player, int minX, int minY, in List all = player.worldObj.getEntitiesWithinAABBExcludingEntity( null, AxisAlignedBB.getBoundingBox(minX, minY, minZ, maxX + 1, maxY + 1, maxZ + 1)); - return all != null ? all : Collections.emptyList(); + return all != null ? all : List.of(); } private static String getErrorMessage(Throwable throwable) { diff --git a/src/main/java/com/hfstudio/guidenh/network/GuideNhStructureChunkAssembler.java b/src/main/java/com/hfstudio/guidenh/network/GuideNhStructureChunkAssembler.java index 3eb8da0d..a63ce9dc 100644 --- a/src/main/java/com/hfstudio/guidenh/network/GuideNhStructureChunkAssembler.java +++ b/src/main/java/com/hfstudio/guidenh/network/GuideNhStructureChunkAssembler.java @@ -5,7 +5,7 @@ import org.jetbrains.annotations.Nullable; -public final class GuideNhStructureChunkAssembler { +public class GuideNhStructureChunkAssembler { private final byte[][] chunks; private int received; diff --git a/src/main/java/com/hfstudio/guidenh/network/GuideNhStructureRequestMessage.java b/src/main/java/com/hfstudio/guidenh/network/GuideNhStructureRequestMessage.java index 67fd627e..6782d6a6 100644 --- a/src/main/java/com/hfstudio/guidenh/network/GuideNhStructureRequestMessage.java +++ b/src/main/java/com/hfstudio/guidenh/network/GuideNhStructureRequestMessage.java @@ -3,7 +3,6 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import java.util.concurrent.atomic.AtomicInteger; @@ -87,7 +86,7 @@ private static List split(byte singleAction, byt byte[] bytes = structureText != null ? structureText.getBytes(StandardCharsets.UTF_8) : new byte[0]; int maxChunkBytes = GuideNhCustomPayloadLimits.MAX_STRUCTURE_BYTES_PER_PACKET; if (bytes.length <= maxChunkBytes) { - return Collections.singletonList(new GuideNhStructureRequestMessage(singleAction, x, y, z, 0, 0, 0, bytes)); + return List.of(new GuideNhStructureRequestMessage(singleAction, x, y, z, 0, 0, 0, bytes)); } int chunkCount = (bytes.length + maxChunkBytes - 1) / maxChunkBytes; diff --git a/src/main/java/com/hfstudio/guidenh/network/GuideNhStructureRequestSender.java b/src/main/java/com/hfstudio/guidenh/network/GuideNhStructureRequestSender.java index fcc7b1c6..129d90f6 100644 --- a/src/main/java/com/hfstudio/guidenh/network/GuideNhStructureRequestSender.java +++ b/src/main/java/com/hfstudio/guidenh/network/GuideNhStructureRequestSender.java @@ -2,7 +2,7 @@ import cpw.mods.fml.common.network.simpleimpl.SimpleNetworkWrapper; -public final class GuideNhStructureRequestSender { +public class GuideNhStructureRequestSender { private GuideNhStructureRequestSender() {} diff --git a/src/main/java/com/hfstudio/structurelibexport/GameSceneExportManifest.java b/src/main/java/com/hfstudio/structurelibexport/GameSceneExportManifest.java index a02be47b..72254e04 100644 --- a/src/main/java/com/hfstudio/structurelibexport/GameSceneExportManifest.java +++ b/src/main/java/com/hfstudio/structurelibexport/GameSceneExportManifest.java @@ -1,7 +1,6 @@ package com.hfstudio.structurelibexport; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -17,7 +16,7 @@ public void add(Entry entry) { } public List getEntries() { - return Collections.unmodifiableList(entries); + return List.copyOf(entries); } public static class Entry { @@ -61,8 +60,8 @@ public Entry(boolean success, GameSceneExportTaskSpec task, @Nullable String pat this.path = path; this.width = width; this.height = height; - this.warnings = warnings != null ? new ArrayList<>(warnings) : Collections.emptyList(); - this.errors = errors != null ? new ArrayList<>(errors) : Collections.emptyList(); + this.warnings = warnings != null ? List.copyOf(warnings) : List.of(); + this.errors = errors != null ? List.copyOf(errors) : List.of(); } } } diff --git a/src/main/java/com/hfstudio/structurelibexport/GameSceneExportRunner.java b/src/main/java/com/hfstudio/structurelibexport/GameSceneExportRunner.java index ac80ed52..05e61625 100644 --- a/src/main/java/com/hfstudio/structurelibexport/GameSceneExportRunner.java +++ b/src/main/java/com/hfstudio/structurelibexport/GameSceneExportRunner.java @@ -5,7 +5,6 @@ import java.nio.file.Paths; import java.time.LocalDateTime; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Set; @@ -85,8 +84,8 @@ public void run(ICommandSender sender, GameSceneExportOptions options) { target.toString(), renderPlan.width, renderPlan.height, - Collections.emptyList(), - Collections.emptyList())); + List.of(), + List.of())); checkpointManifest(sender, outputDirectory, manifest, options); continue; } @@ -111,8 +110,8 @@ public void run(ICommandSender sender, GameSceneExportOptions options) { .toString(), image.getWidth(), image.getHeight(), - Collections.emptyList(), - Collections.emptyList())); + List.of(), + List.of())); checkpointManifest(sender, outputDirectory, manifest, options); } catch (Throwable t) { failureCount++; @@ -125,7 +124,7 @@ public void run(ICommandSender sender, GameSceneExportOptions options) { target.toString(), 0, 0, - Collections.emptyList(), + List.of(), errors)); checkpointManifest(sender, outputDirectory, manifest, options); } @@ -191,7 +190,7 @@ private ExportRenderPlan planRender(GameSceneExportTaskSpec task) throws Command List annotations = scene .collectInWorldAnnotationsForExport(task.isShowAnnotations(), task.isShowGrid(), layers); List overlays = task.isShowAnnotations() ? scene.collectOverlayAnnotationsForExport(layers) - : Collections.emptyList(); + : List.of(); return new ExportRenderPlan( fittedCamera.getCamera(), fittedCamera.getWidth(), @@ -207,7 +206,7 @@ private ExportRenderPlan planEmptyRender(LytGuidebookScene scene, GameSceneExpor List annotations = scene .collectInWorldAnnotationsForExport(task.isShowAnnotations(), false, layers); List overlays = task.isShowAnnotations() ? scene.collectOverlayAnnotationsForExport(layers) - : Collections.emptyList(); + : List.of(); if (annotations.isEmpty() && overlays.isEmpty()) { throw new CommandException("GameScene has no blocks or annotations to render."); } @@ -330,8 +329,8 @@ public ExportRenderPlan(CameraSettings camera, int width, int height, GuidebookS this.width = width; this.height = height; this.layers = layers; - this.annotations = annotations != null ? annotations : Collections.emptyList(); - this.overlays = overlays != null ? overlays : Collections.emptyList(); + this.annotations = annotations != null ? annotations : List.of(); + this.overlays = overlays != null ? overlays : List.of(); } } } diff --git a/src/main/java/com/hfstudio/structurelibexport/StructureExportCommand.java b/src/main/java/com/hfstudio/structurelibexport/StructureExportCommand.java index 71ca6197..0beb77f3 100644 --- a/src/main/java/com/hfstudio/structurelibexport/StructureExportCommand.java +++ b/src/main/java/com/hfstudio/structurelibexport/StructureExportCommand.java @@ -1,7 +1,6 @@ package com.hfstudio.structurelibexport; import java.util.Arrays; -import java.util.Collections; import java.util.List; import net.minecraft.command.CommandBase; @@ -63,7 +62,7 @@ public boolean canCommandSenderUseCommand(ICommandSender sender) { @Override public List addTabCompletionOptions(ICommandSender sender, String[] args) { if (args == null || args.length == 0) { - return Collections.emptyList(); + return List.of(); } if (args.length == 1) { return getListOfStringsMatchingLastWord(args, availableSubcommands()); @@ -72,14 +71,14 @@ public List addTabCompletionOptions(ICommandSender sender, String[] args String[] childArgs = Arrays.copyOfRange(args, 1, args.length); if (SUBCOMMAND_STRUCTURE_LIB.equals(subcommand)) { if (!Mods.StructureLib.isModLoaded()) { - return Collections.emptyList(); + return List.of(); } return getListOfStringsMatchingLastWord(childArgs, STRUCTURE_LIB_OPTIONS); } if (SUBCOMMAND_GAME_SCENE.equals(subcommand)) { return getListOfStringsMatchingLastWord(childArgs, GAME_SCENE_OPTIONS); } - return Collections.emptyList(); + return List.of(); } private String[] availableSubcommands() { diff --git a/src/main/java/com/hfstudio/structurelibexport/StructureLibExportLevelRenderer.java b/src/main/java/com/hfstudio/structurelibexport/StructureLibExportLevelRenderer.java index 8f071e3b..7ead33d7 100644 --- a/src/main/java/com/hfstudio/structurelibexport/StructureLibExportLevelRenderer.java +++ b/src/main/java/com/hfstudio/structurelibexport/StructureLibExportLevelRenderer.java @@ -1,6 +1,5 @@ package com.hfstudio.structurelibexport; -import java.util.Collections; import java.util.List; import com.hfstudio.guidenh.guide.color.LightDarkMode; @@ -18,7 +17,7 @@ public void renderExportTile(GuidebookLevel level, CameraSettings camera, Guideb level, camera, layers, - Collections.emptyList(), + List.of(), panelX, panelY, panelWidth, @@ -42,9 +41,9 @@ public void renderExportTile(GuidebookLevel level, CameraSettings camera, Guideb tileWidth, tileHeight, 0f, - annotations != null ? annotations : Collections.emptyList(), + annotations != null ? annotations : List.of(), LightDarkMode.LIGHT_MODE, layers, - Collections.emptyList()); + List.of()); } } diff --git a/src/main/java/com/hfstudio/structurelibexport/StructureLibExportManifest.java b/src/main/java/com/hfstudio/structurelibexport/StructureLibExportManifest.java index 67f4e4a3..c5be9cfc 100644 --- a/src/main/java/com/hfstudio/structurelibexport/StructureLibExportManifest.java +++ b/src/main/java/com/hfstudio/structurelibexport/StructureLibExportManifest.java @@ -1,7 +1,6 @@ package com.hfstudio.structurelibexport; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.Map; @@ -18,7 +17,7 @@ public void add(Entry entry) { } public List getEntries() { - return Collections.unmodifiableList(entries); + return List.copyOf(entries); } public static class Entry { @@ -61,8 +60,8 @@ public Entry(boolean success, StructureLibExportTaskSpec task, @Nullable String this.path = path; this.width = width; this.height = height; - this.warnings = warnings != null ? new ArrayList<>(warnings) : Collections.emptyList(); - this.errors = errors != null ? new ArrayList<>(errors) : Collections.emptyList(); + this.warnings = warnings != null ? List.copyOf(warnings) : List.of(); + this.errors = errors != null ? List.copyOf(errors) : List.of(); } } } diff --git a/src/main/java/com/hfstudio/structurelibexport/StructureLibExportOptions.java b/src/main/java/com/hfstudio/structurelibexport/StructureLibExportOptions.java index 1611d60c..94ed83bb 100644 --- a/src/main/java/com/hfstudio/structurelibexport/StructureLibExportOptions.java +++ b/src/main/java/com/hfstudio/structurelibexport/StructureLibExportOptions.java @@ -2,7 +2,6 @@ import java.nio.file.Path; import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -174,7 +173,7 @@ private static String normalize(@Nullable String value) { } private static List immutableValues(List values, int fallback) { - ArrayList copy = new ArrayList<>(); + var copy = new ArrayList(); if (values != null) { for (Integer value : values) { if (value != null) { @@ -185,11 +184,11 @@ private static List immutableValues(List values, int fallback) if (copy.isEmpty()) { copy.add(fallback); } - return Collections.unmodifiableList(copy); + return List.copyOf(copy); } private static Map> immutableChannels(Map> channels) { - LinkedHashMap> copy = new LinkedHashMap<>(); + var copy = new LinkedHashMap>(); if (channels != null) { for (Map.Entry> entry : channels.entrySet()) { String key = normalize(entry.getKey()); @@ -198,11 +197,11 @@ private static Map> immutableChannels(Map immutableOrientations(List values) { - ArrayList copy = new ArrayList<>(); + var copy = new ArrayList(); if (values != null) { for (StructureLibOrientationSpec value : values) { if (value != null) { @@ -213,6 +212,6 @@ private static List immutableOrientations(List overlays, int panelX, int panelY, int panelWidth, int panelHeight, int tileWidth, int tileHeight) { - List effectiveOverlays = overlays != null ? overlays : Collections.emptyList(); + List effectiveOverlays = overlays != null ? overlays : List.of(); if (effectiveOverlays.isEmpty()) { return; } diff --git a/src/main/java/com/hfstudio/structurelibexport/StructureLibExportRunner.java b/src/main/java/com/hfstudio/structurelibexport/StructureLibExportRunner.java index 78412d43..9f8d1f98 100644 --- a/src/main/java/com/hfstudio/structurelibexport/StructureLibExportRunner.java +++ b/src/main/java/com/hfstudio/structurelibexport/StructureLibExportRunner.java @@ -5,7 +5,6 @@ import java.nio.file.Paths; import java.time.LocalDateTime; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import net.minecraft.command.ICommandSender; @@ -174,12 +173,12 @@ public void run(ICommandSender sender, StructureLibExportOptions options) { private List planController(StructureLibControllerSpec controller, StructureLibExportOptions options) throws Exception { try { - return planner.plan(Collections.singletonList(controller), options); + return planner.plan(List.of(controller), options); } catch (Exception e) { if (options.getController() != null) { throw e; } - return Collections.emptyList(); + return List.of(); } } diff --git a/src/main/java/com/hfstudio/structurelibexport/StructureLibExportTaskSpec.java b/src/main/java/com/hfstudio/structurelibexport/StructureLibExportTaskSpec.java index d8ff4466..41109d10 100644 --- a/src/main/java/com/hfstudio/structurelibexport/StructureLibExportTaskSpec.java +++ b/src/main/java/com/hfstudio/structurelibexport/StructureLibExportTaskSpec.java @@ -1,8 +1,6 @@ package com.hfstudio.structurelibexport; import java.nio.file.Path; -import java.util.ArrayList; -import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; @@ -67,8 +65,7 @@ public StructureLibExportTaskSpec(StructureLibControllerSpec controller, Structu this.scale = scale > 0f ? scale : 1f; this.gtActiveController = gtActiveController; this.gtPlaceHatches = gtPlaceHatches; - this.warnings = warnings != null ? Collections.unmodifiableList(new ArrayList<>(warnings)) - : Collections.emptyList(); + this.warnings = warnings != null ? List.copyOf(warnings) : List.of(); } public StructureLibControllerSpec getController() { @@ -157,8 +154,8 @@ public void setOutputPath(Path outputPath) { private static Map immutableChannels(Map source) { if (source == null || source.isEmpty()) { - return Collections.emptyMap(); + return Map.of(); } - return Collections.unmodifiableMap(new LinkedHashMap<>(source)); + return Map.copyOf(new LinkedHashMap<>(source)); } } diff --git a/src/main/java/com/hfstudio/structurelibexport/StructureLibSceneBuildResult.java b/src/main/java/com/hfstudio/structurelibexport/StructureLibSceneBuildResult.java index ce02c630..3dbb0c7d 100644 --- a/src/main/java/com/hfstudio/structurelibexport/StructureLibSceneBuildResult.java +++ b/src/main/java/com/hfstudio/structurelibexport/StructureLibSceneBuildResult.java @@ -1,7 +1,5 @@ package com.hfstudio.structurelibexport; -import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.jetbrains.annotations.Nullable; @@ -29,7 +27,7 @@ public StructureLibSceneBuildResult(boolean success, GuidebookLevel level, List< public static StructureLibSceneBuildResult success(GuidebookLevel level, List warnings, @Nullable StructureLibSceneMetadata metadata) { - return new StructureLibSceneBuildResult(true, level, warnings, Collections.emptyList(), metadata); + return new StructureLibSceneBuildResult(true, level, warnings, List.of(), metadata); } public static StructureLibSceneBuildResult failure(List warnings, List errors) { @@ -59,8 +57,8 @@ public StructureLibSceneMetadata getMetadata() { private static List immutableCopy(List source) { if (source == null || source.isEmpty()) { - return Collections.emptyList(); + return List.of(); } - return Collections.unmodifiableList(new ArrayList<>(source)); + return List.copyOf(source); } } diff --git a/src/main/java/com/hfstudio/structurelibexport/StructureLibSceneImageExporter.java b/src/main/java/com/hfstudio/structurelibexport/StructureLibSceneImageExporter.java index 7922fc23..a9f682ed 100644 --- a/src/main/java/com/hfstudio/structurelibexport/StructureLibSceneImageExporter.java +++ b/src/main/java/com/hfstudio/structurelibexport/StructureLibSceneImageExporter.java @@ -5,7 +5,6 @@ import java.nio.ByteBuffer; import java.nio.file.Files; import java.nio.file.Path; -import java.util.Collections; import java.util.List; import javax.imageio.ImageIO; @@ -53,33 +52,13 @@ public StructureLibSceneImageExporter(StructureLibExportLevelRenderer renderer, public ExportedImage export(GuidebookLevel level, CameraSettings camera, GuidebookSceneLayerSelection layers, StructureLibExportBackground background, Path target, int width, int height, long maxPixels) throws Exception { - return export( - level, - camera, - layers, - Collections.emptyList(), - Collections.emptyList(), - background, - target, - width, - height, - maxPixels); + return export(level, camera, layers, List.of(), List.of(), background, target, width, height, maxPixels); } public ExportedImage export(GuidebookLevel level, CameraSettings camera, GuidebookSceneLayerSelection layers, List annotations, StructureLibExportBackground background, Path target, int width, int height, long maxPixels) throws Exception { - return export( - level, - camera, - layers, - annotations, - Collections.emptyList(), - background, - target, - width, - height, - maxPixels); + return export(level, camera, layers, annotations, List.of(), background, target, width, height, maxPixels); } public ExportedImage export(GuidebookLevel level, CameraSettings camera, GuidebookSceneLayerSelection layers, diff --git a/src/main/resources/META-INF/MANIFEST.MF b/src/main/resources/META-INF/MANIFEST.MF new file mode 100644 index 00000000..1b1afd89 --- /dev/null +++ b/src/main/resources/META-INF/MANIFEST.MF @@ -0,0 +1,4 @@ +Manifest-Version: 1.0 +FMLCorePluginContainsFMLMod: true +FMLAT: guidenh_at.cfg +FMLCorePlugin: com.hfstudio.guidenh.coremod.GuideNHCoreMod diff --git a/src/main/resources/META-INF/guidenh_at.cfg b/src/main/resources/META-INF/guidenh_at.cfg new file mode 100644 index 00000000..340613ac --- /dev/null +++ b/src/main/resources/META-INF/guidenh_at.cfg @@ -0,0 +1 @@ +public net.minecraft.client.Minecraft field_71437_Z # theIntegratedServer \ No newline at end of file