Skip to content

Commit faec31e

Browse files
committed
[CORE] Force the Move to Paper
Signed-off-by: Wolfieheart <[email protected]>
1 parent 167eb7a commit faec31e

File tree

8 files changed

+75
-207
lines changed

8 files changed

+75
-207
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<groupId>io.github.rypofalem.armorstandeditor</groupId>
55
<artifactId>armorstandeditor</artifactId>
66
<packaging>jar</packaging>
7-
<version>1.21.10-49.3</version>
7+
<version>1.21.10-INDEV-20250812</version>
88
<name>armorstandeditor</name>
99
<url>https://maven.apache.org</url>
1010

src/main/java/io/github/rypofalem/armorstandeditor/ArmorStandEditorPlugin.java

Lines changed: 15 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public class ArmorStandEditorPlugin extends JavaPlugin {
6464
String nmsVersionNotLatest = null;
6565

6666
//Hardcode the ASE Version
67-
public static final String ASE_VERSION = "1.21.10-49.3";
67+
public static final String ASE_VERSION = "1.21.10-INDEV-20250812";
6868
public static final String SEPARATOR_FIELD = "================================";
6969

7070
public PlayerEditorManager editorManager;
@@ -137,23 +137,20 @@ public void onEnable() {
137137
hasFolia = Scheduler.isFolia();
138138

139139
//Get NMS Version
140-
if (hasPaper || hasFolia) {
141-
nmsVersion = getServer().getMinecraftVersion();
142-
143-
// Check if the Minecraft version is supported
144-
if (nmsVersion.contains("1.21")) {
145-
getLogger().log(Level.INFO, warningMCVer + "{0}", nmsVersion);
146-
getLogger().info("ArmorStandEditor is compatible with this version of Minecraft. Loading continuing.");
147-
} else if (nmsVersion.contains("1.17") || nmsVersion.contains("1.18") || nmsVersion.contains("1.19") || nmsVersion.contains("1.20")) {
148-
getLogger().log(Level.WARNING, warningMCVer + "{0}", nmsVersion);
149-
getLogger().warning("ArmorStandEditor is compatible with this version of Minecraft, but it is not the latest supported version.");
150-
getLogger().warning("Loading continuing, but please consider updating to the latest version.");
151-
} else {
152-
getLogger().log(Level.WARNING, warningMCVer + "{0}", nmsVersion);
153-
getLogger().warning("ArmorStandEditor is not compatible with this version of Minecraft. Please update to at least version 1.17. Loading failed.");
154-
getServer().getPluginManager().disablePlugin(this);
155-
getLogger().info(SEPARATOR_FIELD);
156-
}
140+
nmsVersion = getServer().getMinecraftVersion();
141+
142+
if(VersionUtil.fromString(nmsVersion).isNewerThanOrEquals(VersionUtil.fromString(String.valueOf(MinecraftVersion.MINECRAFT_1_21)))) {
143+
getLogger().log(Level.INFO, warningMCVer + "{0}", nmsVersion);
144+
getLogger().info("ArmorStandEditor is compatible with this version of Minecraft. Loading continuing.");
145+
} else if (VersionUtil.fromString(nmsVersion).isOlderThanOrEquals(VersionUtil.fromString(String.valueOf(MinecraftVersion.MINECRAFT_1_21)))) {
146+
getLogger().log(Level.WARNING, warningMCVer + "{0}", nmsVersion);
147+
getLogger().warning("ArmorStandEditor is compatible with this version of Minecraft, but it is not the latest supported version.");
148+
getLogger().warning("Loading continuing, but please consider updating to the latest version.");
149+
} else {
150+
getLogger().log(Level.SEVERE, warningMCVer + "{0}", nmsVersion);
151+
getLogger().severe("ArmorStandEditor is not compatible with this version of Minecraft. Please update to at least version 1.17. Loading failed.");
152+
getServer().getPluginManager().disablePlugin(this);
153+
getLogger().info(SEPARATOR_FIELD);
157154
}
158155

159156

@@ -413,10 +410,6 @@ public void onDisable() {
413410
}
414411
}
415412

416-
public String getNmsVersion() {
417-
return MinecraftVersion.CURRENT_Version;
418-
}
419-
420413
public boolean getHasPaper() {
421414
try {
422415
Class.forName("io.papermc.paper.configuration.Configuration");

src/main/java/io/github/rypofalem/armorstandeditor/CommandEx.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import io.github.rypofalem.armorstandeditor.modes.Axis;
2727
import io.github.rypofalem.armorstandeditor.modes.EditMode;
2828

29+
import io.github.rypofalem.armorstandeditor.utils.MinecraftVersion;
2930
import io.github.rypofalem.armorstandeditor.utils.Util;
3031
import io.github.rypofalem.armorstandeditor.utils.VersionUtil;
3132
import org.bukkit.ChatColor;
@@ -408,7 +409,12 @@ private void commandStats(Player player) {
408409
leftLegZ = Math.toDegrees(leftLegZ);
409410
leftLegZ = Math.rint(leftLegZ);
410411

411-
if (VersionUtil.isAtLeast(plugin.getNmsVersion(), "1.21.4")) {
412+
/*if (VersionUtil.isAtLeast(plugin.getNmsVersion(), "1.21.4")) {
413+
sizeAttribute = Objects.requireNonNull(as.getAttribute(Attribute.SCALE)).getBaseValue();
414+
} else {
415+
sizeAttribute = 0;
416+
}*/
417+
if(VersionUtil.fromString(plugin.getMinecraftVersion()).isNewerThanOrEquals(VersionUtil.fromString(String.valueOf(MinecraftVersion.MINECRAFT_1_21_3)))){
412418
sizeAttribute = Objects.requireNonNull(as.getAttribute(Attribute.SCALE)).getBaseValue();
413419
} else {
414420
sizeAttribute = 0;
@@ -446,7 +452,7 @@ private void commandStats(Player player) {
446452
player.sendMessage(ChatColor.YELLOW + "Is Vulnerable: " + ChatColor.AQUA + isVulnerable + ". "
447453
+ ChatColor.YELLOW + "Affected by Gravity: " + ChatColor.AQUA + hasGravity);
448454

449-
if (VersionUtil.isAtLeast(plugin.getNmsVersion(), "1.21.4")) {
455+
if(VersionUtil.fromString(plugin.getMinecraftVersion()).isNewerThanOrEquals(VersionUtil.fromString(String.valueOf(MinecraftVersion.MINECRAFT_1_21_3)))){
450456
player.sendMessage(ChatColor.YELLOW + "Size: " + ChatColor.AQUA + sizeAttribute + "/" + plugin.getMaxScaleValue() + ". "
451457
+ ChatColor.YELLOW + "Is Glowing: " + ChatColor.AQUA + isGlowing + ". "
452458
+ ChatColor.YELLOW + "Is Locked: " + ChatColor.AQUA + isLocked + ". "

src/main/java/io/github/rypofalem/armorstandeditor/PlayerEditor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ private void chooseSize(ArmorStand armorStand){
267267
sendMessage("nopermoption", "warn", "size");
268268
return;
269269
} else {
270-
if(VersionUtil.fromString(plugin.getMinecraftVersion()).isNewerThanOrEquals(VersionUtil.fromString(MinecraftVersion.MINECRAFT_1_21_3))){
270+
if(VersionUtil.fromString(plugin.getMinecraftVersion()).isNewerThanOrEquals(VersionUtil.fromString(String.valueOf(MinecraftVersion.MINECRAFT_1_21_3)))){
271271
//NOTE: New Sizing Menu ONLY WORKS IN 1.21.3 and HIGHER
272272
debug.log("Player '" + getPlayer().getDisplayName() + "' has triggered the AS Attribute Size Menu");
273273
getPlayer().closeInventory();
@@ -403,7 +403,7 @@ private void paste(ArmorStand armorStand) {
403403
armorStand.setLeftLegPose(data.leftLegPos);
404404
armorStand.setRightLegPose(data.rightLegPos);
405405

406-
if(VersionUtil.fromString(plugin.getMinecraftVersion()).isNewerThanOrEquals(VersionUtil.fromString(MinecraftVersion.MINECRAFT_1_21_3))){
406+
if(VersionUtil.fromString(plugin.getMinecraftVersion()).isNewerThanOrEquals(VersionUtil.fromString(String.valueOf(MinecraftVersion.MINECRAFT_1_21_3)))){
407407
armorStand.getAttribute(Attribute.SCALE).setBaseValue(data.attributeScale);
408408
} else {
409409
armorStand.setSmall(data.size);

src/main/java/io/github/rypofalem/armorstandeditor/modes/ArmorStandData.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ public class ArmorStandData {
4343
this.rightLegPos = as.getRightLegPose();
4444
this.size = as.isSmall();
4545

46-
if(VersionUtil.fromString(plugin.getMinecraftVersion()).isNewerThanOrEquals(VersionUtil.fromString(MinecraftVersion.MINECRAFT_1_21_3))){
46+
if(VersionUtil.fromString(plugin.getMinecraftVersion()).isNewerThanOrEquals(VersionUtil.fromString(String.valueOf(MinecraftVersion.MINECRAFT_1_21_3)))){
4747
this.attributeScale = as.getAttribute(Attribute.SCALE).getValue();
4848
}
4949

src/main/java/io/github/rypofalem/armorstandeditor/utils/MinecraftVersion.java

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,10 @@ public class MinecraftVersion {
66

77
private MinecraftVersion() {}
88

9-
public static final String MINECRAFT_1_17 = VersionUtil.fromString("1.17");
10-
public static final String MINECRAFT_1_18_2 = VersionUtil.fromString("1.18.2");
11-
public static final String MINECRAFT_1_19_1 = VersionUtil.fromString("1.19.1");
12-
public static final String MINECRAFT_1_19_3 = VersionUtil.fromString("1.19.3");
13-
public static final String MINECRAFT_1_20 = VersionUtil.fromString("1.20");
14-
public static final String MINECRAFT_1_20_2 = VersionUtil.fromString("1.20.2");
15-
public static final String MINECRAFT_1_20_3 = VersionUtil.fromString("1.20.3");
16-
public static final String MINECRAFT_1_20_5 = VersionUtil.fromString("1.20.5");
17-
public static final String MINECRAFT_1_21 = VersionUtil.fromString("1.21");
18-
public static final String MINECRAFT_1_21_2 = VersionUtil.fromString("1.21.2");
19-
public static final String MINECRAFT_1_21_3 = VersionUtil.fromString("1.21.3");
20-
public static final String MINECRAFT_1_21_5 = VersionUtil.fromString("1.21.5");
21-
public static final String MINECRAFT_1_21_9 = VersionUtil.fromString("1.21.9");
9+
public static final VersionUtil MINECRAFT_1_17 = VersionUtil.fromString("1.17");
10+
public static final VersionUtil MINECRAFT_1_21 = VersionUtil.fromString("1.21");
11+
public static final VersionUtil MINECRAFT_1_21_3 = VersionUtil.fromString("1.21.3");
2212

23-
public static final String CURRENT_Version = VersionUtil.fromString(Bukkit.getMinecraftVersion());
24-
public static final String OLDEST_Version_SUPPORTED = MINECRAFT_1_17;
13+
public static final VersionUtil CURRENT_Version = VersionUtil.fromString(Bukkit.getMinecraftVersion());
14+
public static final VersionUtil OLDEST_Version_SUPPORTED = MINECRAFT_1_17;
2515
}

src/main/java/io/github/rypofalem/armorstandeditor/utils/VersionUtil.java

Lines changed: 42 additions & 163 deletions
Original file line numberDiff line numberDiff line change
@@ -6,175 +6,47 @@
66
import java.util.regex.Matcher;
77
import java.util.regex.Pattern;
88

9-
public final class VersionUtil implements Comparable<VersionUtil>{
10-
/*
11-
private VersionUtil() {}
12-
13-
/**
14-
* Returns true if current >= target (by Minecraft version).
15-
*
16-
* current can be:
17-
* - "1.21.10", "1.21.4", "1.21.4-pre1", "1.21.4-SNAPSHOT" (Paper/Folia)
18-
* - "v1_21_R3" (Spigot/Bukkit NMS package)
19-
*
20-
* target should be a normal MC version like "1.21.4".
21-
22-
public static boolean isAtLeast(String current, String target) {
23-
String normCurrent = normalize(current);
24-
String normTarget = normalize(target);
25-
26-
int[] curParts = parseVersion(normCurrent);
27-
int[] tarParts = parseVersion(normTarget);
28-
29-
int len = Math.max(curParts.length, tarParts.length);
30-
for (int i = 0; i < len; i++) {
31-
int c = i < curParts.length ? curParts[i] : 0;
32-
int t = i < tarParts.length ? tarParts[i] : 0;
33-
34-
if (c != t) {
35-
return c > t;
36-
}
37-
}
38-
return true; // equal
39-
}
40-
41-
/**
42-
* Normalizes:
43-
* - Paper/Folia style "1.21.10", "1.21.10-pre4", "1.21.10-SNAPSHOT"
44-
* - Spigot NMS style "v1_21_R3"
45-
* into a "major.minor.patch" string.
46-
47-
private static String normalize(String version) {
48-
if (version == null) return "0.0.0";
49-
version = version.trim();
50-
51-
// Case A: Spigot NMS "v1_21_RX"
52-
if (version.startsWith("v") && version.contains("_")) {
53-
// Strip leading 'v'
54-
String body = version.substring(1); // e.g. "1_21_R3"
55-
String[] parts = body.split("_");
56-
if (parts.length >= 3) {
57-
String majorStr = digitsOnly(parts[0]); // "1"
58-
String minorStr = digitsOnly(parts[1]); // "21"
59-
String rStr = digitsOnly(parts[2]); // "3" for R3
60-
61-
int major = parseIntOrZero(majorStr);
62-
int minor = parseIntOrZero(minorStr);
63-
int r = parseIntOrZero(rStr);
64-
65-
// Map 1_21_Rx -> minimum MCP version as per wiki
66-
// R1 -> 1.21.0
67-
// R2 -> 1.21.2
68-
// R3 -> 1.21.4
69-
// R4 -> 1.21.5
70-
// R5 -> 1.21.6
71-
int patch;
72-
if (major == 1 && minor == 21) {
73-
switch (r) {
74-
case 1: patch = 0; break;
75-
case 2: patch = 2; break;
76-
case 3: patch = 4; break;
77-
case 4: patch = 5; break;
78-
case 5: patch = 6; break;
79-
default:
80-
// Future R versions for 1.21: assume >= 1.21.6
81-
patch = 6;
82-
break;
83-
}
84-
} else {
85-
// Fallback for other majors/minors if needed
86-
patch = 0;
87-
}
88-
89-
return major + "." + minor + "." + patch;
90-
}
91-
}
92-
93-
// Case B: Paper/Folia "1.21.10", maybe with suffixes
94-
// Keep only the leading 0-9 and dots
95-
StringBuilder sb = new StringBuilder();
96-
for (int i = 0; i < version.length(); i++) {
97-
char c = version.charAt(i);
98-
if ((c >= '0' && c <= '9') || c == '.') {
99-
sb.append(c);
100-
} else if (sb.length() > 0) {
101-
break;
102-
}
103-
}
104-
105-
if (sb.length() == 0) {
106-
return "0.0.0";
107-
}
108-
109-
String[] nums = sb.toString().split("\\.");
110-
if (nums.length == 1) {
111-
return nums[0] + ".0.0";
112-
} else if (nums.length == 2) {
113-
return nums[0] + "." + nums[1] + ".0";
114-
} else {
115-
return sb.toString();
116-
}
117-
}
118-
119-
private static String digitsOnly(String s) {
120-
StringBuilder sb = new StringBuilder();
121-
for (int i = 0; i < s.length(); i++) {
122-
char c = s.charAt(i);
123-
if (c >= '0' && c <= '9') {
124-
sb.append(c);
125-
}
126-
}
127-
return sb.toString();
128-
}
129-
130-
private static int parseIntOrZero(String s) {
131-
try {
132-
return Integer.parseInt(s);
133-
} catch (NumberFormatException e) {
134-
return 0;
135-
}
136-
}
137-
138-
private static int[] parseVersion(String version) {
139-
String[] parts = version.split("\\.");
140-
int[] result = new int[parts.length];
141-
for (int i = 0; i < parts.length; i++) {
142-
try {
143-
result[i] = Integer.parseInt(parts[i]);
144-
} catch (NumberFormatException e) {
145-
result[i] = 0;
146-
}
147-
}
148-
return result;
149-
}*/
9+
public class VersionUtil implements Comparable<VersionUtil> {
15010

15111
private final String version;
15212
private static final Pattern SEPARATOR = Pattern.compile("\\.");
153-
private static final Pattern VERSION_NUMBER = Pattern.compile("[0-9]+(" + SEPARATOR + "[0-9]+)*");
154-
private final String[] versionComponents;
13+
private static final Pattern VERSION_PATTERN = Pattern.compile("[0-9]+(" + SEPARATOR + "[0-9]+)*");
14+
private final String[] components;
15515

156-
private VersionUtil(String version){
16+
private VersionUtil(String version) {
15717
this.version = version;
158-
versionComponents = version.split(SEPARATOR.pattern());
18+
components = version.split(SEPARATOR.pattern());
15919
}
16020

161-
public static String fromString(String version){
162-
if (version == null)
21+
/**
22+
* Constructs a Version object from the given string.
23+
*
24+
* <p>This method will truncate any extraneous characters found
25+
* after it matches the first qualified version string.</p>
26+
*
27+
* @param version A string that contains a formatted version.
28+
* @return A new Version instance from the given string.
29+
*/
30+
public static VersionUtil fromString(String version) {
31+
if(version == null) {
16332
throw new IllegalArgumentException("Version can not be null");
33+
}
16434

165-
Matcher matcher = VERSION_NUMBER.matcher(version);
166-
167-
if(!matcher.find())
168-
throw new IllegalArgumentException("Invalid Version Format: " + version);
35+
Matcher matcher = VERSION_PATTERN.matcher(version);
36+
if(!matcher.find()) {
37+
throw new IllegalArgumentException("Invalid version format: " + version);
38+
}
16939

17040
return new VersionUtil(matcher.group(0));
17141
}
17242

173-
public int compareTo(@NotNull VersionUtil that){
174-
int length = Math.max(versionComponents.length, that.versionComponents.length);
43+
@Override
44+
public int compareTo(@NotNull VersionUtil that) {
45+
int length = Math.max(components.length, that.components.length);
46+
17547
for(int i = 0; i < length; i++) {
176-
int thisPart = i < versionComponents.length ? Integer.parseInt(versionComponents[i]) : 0;
177-
int thatPart = i < that.versionComponents.length ? Integer.parseInt(that.versionComponents[i]) : 0;
48+
int thisPart = i < components.length ? Integer.parseInt(components[i]) : 0;
49+
int thatPart = i < that.components.length ? Integer.parseInt(that.components[i]) : 0;
17850

17951
if (thisPart < thatPart) {
18052
return -1;
@@ -205,20 +77,27 @@ public String toString() {
20577
return version;
20678
}
20779

80+
/**
81+
* Returns the components of the version separated by .'s
82+
*
83+
* @return A string array of the components.
84+
*/
20885
@NotNull
20986
public String[] getComponents() {
210-
return versionComponents;
87+
return components;
21188
}
21289

213-
public boolean isPreRelease() {
214-
try {
215-
return Integer.parseInt(this.versionComponents[versionComponents.length-1]) != 0;
216-
} catch (NumberFormatException e) {
217-
return false;
218-
}
219-
}
22090

22191
public boolean isNewerThanOrEquals(@NotNull VersionUtil other) {
22292
return this.compareTo(other) >= 0;
22393
}
94+
95+
public boolean isOlderThanOrEquals(@NotNull VersionUtil other) {
96+
return this.compareTo(other) <= 0;
97+
}
98+
public boolean isOlderThan(@NotNull VersionUtil other) {
99+
return this.compareTo(other) < 0;
100+
}
101+
102+
224103
}

src/main/resources/plugin.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: ArmorStandEditor
22
main: io.github.rypofalem.armorstandeditor.ArmorStandEditorPlugin
3-
version: 1.21.10-49.3
3+
version: 1.21.10-INDEV-20250812
44
api-version: "1.17"
55
folia-supported: true
66
website: https://www.spigotmc.org/resources/94503/

0 commit comments

Comments
 (0)