Skip to content

Commit db3334c

Browse files
committed
26.2 Support
1 parent 77775f3 commit db3334c

53 files changed

Lines changed: 536 additions & 78 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

build-unobfuscated.gradle.kts

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
import com.modrinth.minotaur.dependencies.ModDependency
2+
plugins {
3+
id("net.fabricmc.fabric-loom") version "1.17-SNAPSHOT"
4+
id("maven-publish")
5+
id("com.modrinth.minotaur") version "2.+"
6+
id("dev.kikugie.stonecutter")
7+
}
8+
version = "${property("mod_version")}+${property("minecraft_version")}"
9+
group = property("maven_group") as String
10+
base {
11+
archivesName.set(property("archives_base_name") as String)
12+
}
13+
repositories {
14+
mavenLocal()
15+
maven { url = uri("https://maven.nucleoid.xyz") }
16+
maven {
17+
name = "TerraformersMC"
18+
url = uri("https://maven.terraformersmc.com/")
19+
}
20+
maven {
21+
name = "Ladysnake Libs"
22+
url = uri("https://maven.ladysnake.org/releases")
23+
}
24+
maven {
25+
name = "Modrinth"
26+
url = uri("https://api.modrinth.com/maven")
27+
}
28+
}
29+
// 26.1+ ships unobfuscated, so named mappings equal official ones; only the header differs.
30+
val accessWidener = layout.buildDirectory.file("solstice-official.accesswidener").get().asFile.apply {
31+
parentFile.mkdirs()
32+
writeText(
33+
rootProject.file("src/main/resources/solstice.accesswidener").readText()
34+
.replaceFirst("accessWidener v2 named", "accessWidener v2 official")
35+
)
36+
}
37+
loom {
38+
accessWidenerPath = accessWidener
39+
}
40+
dependencies {
41+
minecraft("com.mojang:minecraft:${property("minecraft_version")}")
42+
implementation("net.fabricmc:fabric-loader:${property("loader_version")}")
43+
implementation("net.fabricmc.fabric-api:fabric-api:${property("fabric_version")}")
44+
include(implementation("org.spongepowered:configurate-core:${property("configurate_version")}")!!)
45+
include(implementation("org.spongepowered:configurate-hocon:${property("configurate_version")}")!!)
46+
include(implementation("org.spongepowered:configurate-gson:${property("configurate_version")}")!!)
47+
include("com.typesafe:config:1.4.3")
48+
include("io.leangen.geantyref:geantyref:1.3.16")
49+
include(implementation("me.lucko:fabric-permissions-api:${property("permissions_api_version")}")!!)
50+
include(implementation("eu.pb4:placeholder-api:${property("placeholderapi_version")}")!!)
51+
include(implementation("eu.pb4:sgui:${property("sgui_version")}")!!)
52+
implementation(include("eu.pb4:common-economy-api:${property("commoneconomy_version")}")!!)
53+
compileOnly("maven.modrinth:trinkets-updated:${property("trinkets_version")}")
54+
compileOnly("net.luckperms:api:5.4")
55+
runtimeOnly("net.luckperms:api:5.4")
56+
compileOnly("maven.modrinth:vanish:${project.property("vanish_version")}")
57+
}
58+
tasks.processResources {
59+
val mcConstraint = project.property("minecraft_constraint") as String
60+
val javaVer = project.property("java_version") as String
61+
inputs.property("version", project.version)
62+
inputs.property("minecraft_constraint", mcConstraint)
63+
inputs.property("java_version", javaVer)
64+
filesMatching("fabric.mod.json") {
65+
expand(mapOf(
66+
"version" to project.version,
67+
"minecraft_constraint" to mcConstraint,
68+
"java_version" to javaVer
69+
))
70+
}
71+
}
72+
val javaVersion = (property("java_version") as String).toInt()
73+
tasks.withType<JavaCompile>().configureEach {
74+
options.release = javaVersion
75+
}
76+
java {
77+
withSourcesJar()
78+
sourceCompatibility = JavaVersion.toVersion(javaVersion)
79+
targetCompatibility = JavaVersion.toVersion(javaVersion)
80+
}
81+
tasks.jar {
82+
from(rootProject.file("LICENSE")) {
83+
rename { "${it}_${base.archivesName.get()}" }
84+
}
85+
}
86+
modrinth {
87+
token = System.getenv("MODRINTH_TOKEN")
88+
projectId = "uIvrDZas"
89+
uploadFile = tasks["jar"]
90+
gameVersions = listOf(property("minecraft_version") as String)
91+
loaders = listOf("fabric")
92+
dependencies = listOf(ModDependency("P7dR8mSH", "required"))
93+
}
94+
publishing {
95+
publications {
96+
create<MavenPublication>("mavenJava") {
97+
artifactId = property("archives_base_name") as String
98+
from(components["java"])
99+
}
100+
}
101+
repositories {
102+
maven {
103+
name = "AlexDevsRepo"
104+
url = uri("https://maven.alexdevs.me/releases")
105+
credentials {
106+
username = System.getenv("MAVEN_USERNAME")
107+
password = System.getenv("MAVEN_PASSWORD")
108+
}
109+
}
110+
}
111+
}
112+
113+
stonecutter {
114+
replacements.string(current.parsed >= "26.2") {
115+
replace("Placeholders.register(", "Placeholders.registerCommon(")
116+
replace("dev.emi.trinkets", "eu.pb4.trinkets")
117+
}
118+
replacements.string(current.parsed >= "1.21.11") {
119+
replace("player.getServer()", "player.level().getServer()")
120+
replace("sourcePlayer.getServer()", "sourcePlayer.level().getServer()")
121+
replace("dimension().location()", "dimension().identifier()")
122+
}
123+
}

build.gradle.kts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import com.modrinth.minotaur.dependencies.ModDependency
22
plugins {
3-
id("fabric-loom") version "1.14-SNAPSHOT"
3+
id("fabric-loom") version "1.17-SNAPSHOT"
44
id("maven-publish")
55
id("com.modrinth.minotaur") version "2.+"
66
id("dev.kikugie.stonecutter")
@@ -112,11 +112,15 @@ publishing {
112112
}
113113

114114
stonecutter {
115+
replacements.string(current.parsed >= "26.2") {
116+
replace("Placeholders.register(", "Placeholders.registerCommon(")
117+
replace("dev.emi.trinkets", "eu.pb4.trinkets")
118+
119+
}
115120
replacements.string(current.parsed >= "1.21.11") {
116-
// replace("player.level()", "player.serverLevel()")
117-
// replace("sourcePlayer.serverLevel()", "sourcePlayer.level()")
118121
replace("player.getServer()", "player.level().getServer()")
119122
replace("sourcePlayer.getServer()", "sourcePlayer.level().getServer()")
120123
replace("dimension().location()", "dimension().identifier()")
121124
}
125+
122126
}

gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
distributionBase=GRADLE_USER_HOME
22
distributionPath=wrapper/dists
3-
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip
3+
distributionUrl=https\://services.gradle.org/distributions/gradle-9.5.1-bin.zip
44
networkTimeout=10000
55
validateDistributionUrl=true
66
zipStoreBase=GRADLE_USER_HOME

settings.gradle.kts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,13 @@ plugins {
1919
}
2020

2121
stonecutter {
22-
create(rootProject) {
23-
versions("1.21.1", "1.21.4", "1.21.11")
24-
vcsVersion = "1.21.1"
22+
shared {
23+
versions("1.21.1", "1.21.4", "1.21.11", "26.2")
24+
mapBuilds { _, node ->
25+
if (node.parsed >= "26.1") "build-unobfuscated.gradle.kts" else "build.gradle.kts"
26+
}
27+
vcsVersion.set("1.21.1")
2528
}
29+
create(rootProject)
2630
}
2731

src/main/java/me/alexdevs/solstice/api/ServerLocation.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,11 @@ public boolean safeTeleport(ServerPlayer player, boolean setBackPosition, int ra
160160
// Integer zigzag pattern: 0, 1, -1, 2, -2, 3, -3, ...
161161
var y = (j % 2 == 0) ? -j / 2 : j / 2 + 1;
162162

163+
//? if >= 26.1 {
164+
/*var safePos = DismountHelper.findSafeDismountLocation(net.minecraft.world.entity.EntityTypes.PLAYER, world, attemptPos.offset(0, y, 0), true);
165+
*///? } elif >= 1.21.1 {
163166
var safePos = DismountHelper.findSafeDismountLocation(EntityType.PLAYER, world, attemptPos.offset(0, y, 0), true);
167+
//? }
164168
if (safePos != null) {
165169
var safeLocation = new ServerLocation(safePos.x, safePos.y, safePos.z, this.getYaw(), this.getPitch(), this.getWorld());
166170
safeLocation.teleport(player, setBackPosition);

src/main/java/me/alexdevs/solstice/api/text/Components.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package me.alexdevs.solstice.api.text;
22

33
import eu.pb4.placeholders.api.PlaceholderContext;
4+
import me.alexdevs.solstice.api.utils.PlaceholderUtils;
45
import eu.pb4.placeholders.api.Placeholders;
56
import eu.pb4.placeholders.api.node.TextNode;
67
import eu.pb4.placeholders.api.parsers.NodeParser;
@@ -105,7 +106,7 @@ public static Component chat(String message, EnumSet<TextCapabilities> capabilit
105106
var enableLegacy = capabilities.contains(TextCapabilities.LEGACY);
106107

107108
var placeholders = new HashMap<String, Component>();
108-
var context = PlaceholderContext.of(source);
109+
var context = PlaceholderUtils.of(source);
109110
if (ModuleProvider.STYLING.isEnabled()) {
110111
var config = Solstice.configManager.getData(StylingConfig.class);
111112
for (var repl : config.replacements.entrySet()) {
@@ -120,6 +121,9 @@ public static Component chat(String message, EnumSet<TextCapabilities> capabilit
120121

121122

122123
if (capabilities.isEmpty()) {
124+
//? if >= 26.1
125+
//return new MapPlaceholderParser(Format.PLACEHOLDER_PATTERN, placeholders).parseNode(TextNode.of(message)).toComponent();
126+
//? if < 26.1
123127
return Placeholders.parseText(TextNode.of(message), Format.PLACEHOLDER_PATTERN, placeholders);
124128
}
125129

@@ -139,6 +143,9 @@ public static Component chat(String message, EnumSet<TextCapabilities> capabilit
139143
var parser = NodeParser.merge(parsers.toArray(NodeParser[]::new));
140144

141145
var node = parser.parseNode(message);
146+
//? if >= 26.1
147+
//return new MapPlaceholderParser(Format.PLACEHOLDER_PATTERN, placeholders).parseNode(node).toComponent();
148+
//? if < 26.1
142149
return Placeholders.parseText(node, Format.PLACEHOLDER_PATTERN, placeholders);
143150
}
144151

src/main/java/me/alexdevs/solstice/api/text/Format.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,23 +11,42 @@
1111
import java.util.regex.Pattern;
1212

1313
public class Format {
14+
//? if >= 26.1 {
15+
/*public static final Pattern PLACEHOLDER_PATTERN = Pattern.compile("(?<!((?<!(\\\\))\\\\))\\$[{](?<id>[^}]+)}");
16+
*///? } elif >= 1.21.1 {
1417
public static final Pattern PLACEHOLDER_PATTERN = PatternPlaceholderParser.PREDEFINED_PLACEHOLDER_PATTERN;
18+
//? }
1519
public static final NodeParser LEGACY_PARSER = LegacyFormattingParser.ALL;
1620
public static final NodeParser PARSER;
1721

1822
static {
23+
//? if >= 26.1 {
24+
/*var parser = eu.pb4.placeholders.api.parsers.TagParser.DEFAULT.copy();
25+
26+
*///? } elif >= 1.21.1 {
1927
var parser = TextParserV1.createDefault();
28+
//? }
2029
parser.register(PhaseGradientTag.createTag());
2130
PARSER = parser;
2231
}
2332

2433
public static Component parse(String text) {
34+
//? if >= 26.1 {
35+
/*return PARSER.parseNode(text).toComponent();
36+
*///? } elif >= 1.21.1 {
2537
return PARSER.parseNode(text).toText();
38+
//? }
2639
}
2740

2841
public static Component parse(TextNode textNode, PlaceholderContext context, Map<String, Component> placeholders) {
42+
//? if >= 26.1 {
43+
/*var predefinedNode = new MapPlaceholderParser(PLACEHOLDER_PATTERN, placeholders).parseNode(textNode);
44+
return Placeholders.COMMON_PLACEHOLDER_PARSER.parseNode(predefinedNode)
45+
.toComponent(ParserContext.of(PlaceholderContext.COMMON_KEY, context));
46+
*///? } elif >= 1.21.1 {
2947
var predefinedNode = Placeholders.parseNodes(textNode, PLACEHOLDER_PATTERN, placeholders);
3048
return Placeholders.parseText(predefinedNode, context);
49+
//? }
3150
}
3251

3352
public static Component parse(Component text, PlaceholderContext context, Map<String, Component> placeholders) {
@@ -43,10 +62,18 @@ public static Component parse(String text, PlaceholderContext context) {
4362
}
4463

4564
public static Component parse(String text, Map<String, Component> placeholders) {
65+
//? if >= 26.1 {
66+
/*return new MapPlaceholderParser(PLACEHOLDER_PATTERN, placeholders).parseNode(TextNode.convert(parse(text))).toComponent();
67+
*///? } elif >= 1.21.1 {
4668
return Placeholders.parseText(parse(text), PLACEHOLDER_PATTERN, placeholders);
69+
//? }
4770
}
4871

4972
public static Component parse(Component text, Map<String, Component> placeholders) {
73+
//? if >= 26.1 {
74+
/*return new MapPlaceholderParser(PLACEHOLDER_PATTERN, placeholders).parseNode(TextNode.convert(text)).toComponent();
75+
*///? } elif >= 1.21.1 {
5076
return Placeholders.parseText(TextNode.convert(text), PLACEHOLDER_PATTERN, placeholders);
77+
//? }
5178
}
5279
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
package me.alexdevs.solstice.api.text;
2+
3+
import eu.pb4.placeholders.api.node.LiteralNode;
4+
import eu.pb4.placeholders.api.node.TextNode;
5+
import eu.pb4.placeholders.api.node.TranslatedNode;
6+
import eu.pb4.placeholders.api.node.parent.ParentTextNode;
7+
import eu.pb4.placeholders.api.parsers.NodeParser;
8+
import net.minecraft.network.chat.Component;
9+
10+
import java.util.ArrayList;
11+
import java.util.Map;
12+
import java.util.regex.Matcher;
13+
import java.util.regex.Pattern;
14+
15+
public record MapPlaceholderParser(Pattern pattern, Map<String, Component> placeholders) implements NodeParser {
16+
@Override
17+
public TextNode[] parseNodes(TextNode text) {
18+
if (text instanceof TranslatedNode translatedNode) {
19+
return new TextNode[]{translatedNode.transform(this)};
20+
} else if (text instanceof LiteralNode literalNode) {
21+
var out = new ArrayList<TextNode>();
22+
23+
String string = literalNode.value();
24+
Matcher matcher = pattern.matcher(string);
25+
int previousEnd = 0;
26+
27+
while (matcher.find()) {
28+
var key = matcher.group("id");
29+
int start = matcher.start();
30+
int end = matcher.end();
31+
32+
var replacement = placeholders.get(key);
33+
34+
if (replacement != null) {
35+
if (start != 0) {
36+
out.add(new LiteralNode(string.substring(previousEnd, start)));
37+
}
38+
out.add(TextNode.convert(replacement));
39+
previousEnd = end;
40+
} else {
41+
matcher.region(start + 1, string.length());
42+
}
43+
}
44+
45+
if (previousEnd != string.length()) {
46+
out.add(new LiteralNode(string.substring(previousEnd)));
47+
}
48+
49+
return out.toArray(new TextNode[0]);
50+
} else if (text instanceof ParentTextNode parentNode) {
51+
var out = new ArrayList<TextNode>();
52+
for (var child : parentNode.getChildren()) {
53+
out.add(TextNode.asSingle(this.parseNodes(child)));
54+
}
55+
return new TextNode[]{parentNode.copyWith(out.toArray(new TextNode[0]))};
56+
}
57+
58+
return new TextNode[]{text};
59+
}
60+
}

src/main/java/me/alexdevs/solstice/api/text/parser/CodeParser.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package me.alexdevs.solstice.api.text.parser;
22

3-
import eu.pb4.placeholders.api.node.DirectTextNode;
43
import eu.pb4.placeholders.api.node.LiteralNode;
54
import eu.pb4.placeholders.api.node.TextNode;
65
import eu.pb4.placeholders.api.parsers.NodeParser;
@@ -50,7 +49,7 @@ public TextNode[] parseNodes(TextNode node) {
5049
.withClickEvent(ComponentUtils.clickCopyToClipboardEvent(content))
5150
);
5251

53-
list.add(new DirectTextNode(text));
52+
list.add(TextNode.convert(text));
5453

5554
pos = matcher.end();
5655
}

src/main/java/me/alexdevs/solstice/api/text/parser/LinkParser.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package me.alexdevs.solstice.api.text.parser;
22

3-
import eu.pb4.placeholders.api.node.DirectTextNode;
43
import eu.pb4.placeholders.api.node.LiteralNode;
54
import eu.pb4.placeholders.api.node.TextNode;
65
import eu.pb4.placeholders.api.node.parent.ParentNode;
@@ -69,7 +68,7 @@ public TextNode[] parseNodes(TextNode node) {
6968
.withClickEvent(ComponentUtils.openUrlClickEvent(link))
7069
);
7170

72-
list.add(new DirectTextNode(text));
71+
list.add(TextNode.convert(text));
7372

7473
pos = matcher.end();
7574
}

0 commit comments

Comments
 (0)