Skip to content

Commit 8489904

Browse files
committed
Refactor MinecraftVersion to include a range of minor patches which a MinecraftVersion targets
1 parent 8d49c16 commit 8489904

File tree

2 files changed

+43
-2
lines changed

2 files changed

+43
-2
lines changed

src/main/java/io/github/thebusybiscuit/slimefun4/api/MinecraftVersion.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public enum MinecraftVersion {
4747
* This constant represents Minecraft (Java Edition) Version 1.20
4848
* ("The Trails & Tales Update")
4949
*/
50-
MINECRAFT_1_20(20, "1.20.x"),
50+
MINECRAFT_1_20(20, 0, 4,"1.20.x"),
5151

5252
/**
5353
* This constant represents Minecraft (Java Edition) Version 1.20.5
@@ -71,6 +71,7 @@ public enum MinecraftVersion {
7171
private final boolean virtual;
7272
private final int majorVersion;
7373
private final int minorVersion;
74+
private final int maxMinorVersion;
7475

7576
/**
7677
* This constructs a new {@link MinecraftVersion} with the given name.
@@ -86,6 +87,7 @@ public enum MinecraftVersion {
8687
this.name = name;
8788
this.majorVersion = majorVersion;
8889
this.minorVersion = -1;
90+
this.maxMinorVersion = -1;
8991
this.virtual = false;
9092
}
9193

@@ -105,6 +107,29 @@ public enum MinecraftVersion {
105107
this.name = name;
106108
this.majorVersion = majorVersion;
107109
this.minorVersion = minor;
110+
this.maxMinorVersion = -1;
111+
this.virtual = false;
112+
}
113+
114+
/**
115+
* This constructs a new {@link MinecraftVersion} with the given name.
116+
* This constructor forces the {@link MinecraftVersion} to be real.
117+
* It must be a real version of Minecraft.
118+
*
119+
* @param majorVersion
120+
* The major (minor in semver, major in MC land) version of minecraft as an {@link Integer}
121+
* @param minor
122+
* The minor (patch in semver, minor in MC land) version of minecraft as an {@link Integer}
123+
* @param maxMinorVersion
124+
* The maximum minor (patch) version of minecraft this version represents
125+
* @param name
126+
* The display name of this {@link MinecraftVersion}
127+
*/
128+
MinecraftVersion(int majorVersion, int minor, int maxMinorVersion, @Nonnull String name) {
129+
this.name = name;
130+
this.majorVersion = majorVersion;
131+
this.minorVersion = minor;
132+
this.maxMinorVersion = maxMinorVersion;
108133
this.virtual = false;
109134
}
110135

@@ -122,6 +147,7 @@ public enum MinecraftVersion {
122147
this.name = name;
123148
this.majorVersion = 0;
124149
this.minorVersion = -1;
150+
this.maxMinorVersion = -1;
125151
this.virtual = virtual;
126152
}
127153

@@ -185,7 +211,8 @@ public boolean isMinecraftVersion(int minecraftVersion) {
185211
public boolean isMinecraftVersion(int minecraftVersion, int patchVersion) {
186212
return !isVirtual()
187213
&& this.majorVersion == minecraftVersion
188-
&& (this.minorVersion == -1 || this.minorVersion >= patchVersion);
214+
&& (this.minorVersion == -1 || this.minorVersion <= patchVersion)
215+
&& (this.maxMinorVersion == -1 || patchVersion <= this.maxMinorVersion);
189216
}
190217

191218
/**

src/test/java/io/github/thebusybiscuit/slimefun4/utils/TestMinecraftVersion.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,20 @@ void testMatches() {
2020
Assertions.assertFalse(MinecraftVersion.MINECRAFT_1_20_5.isMinecraftVersion(20, 4));
2121
}
2222

23+
@Test
24+
@DisplayName("Test if Minecraft versions match minor versions")
25+
void testMatchesMinor() {
26+
Assertions.assertTrue(MinecraftVersion.MINECRAFT_1_16.isMinecraftVersion(16, 1));
27+
Assertions.assertTrue(MinecraftVersion.MINECRAFT_1_16.isMinecraftVersion(16, 2));
28+
29+
Assertions.assertTrue(MinecraftVersion.MINECRAFT_1_20.isMinecraftVersion(20, 4));
30+
Assertions.assertTrue(MinecraftVersion.MINECRAFT_1_20_5.isMinecraftVersion(20, 6));
31+
32+
Assertions.assertFalse(MinecraftVersion.MINECRAFT_1_20.isMinecraftVersion(20, 5));
33+
Assertions.assertFalse(MinecraftVersion.MINECRAFT_1_16.isMinecraftVersion(17, 1));
34+
Assertions.assertFalse(MinecraftVersion.MINECRAFT_1_20_5.isMinecraftVersion(20, 4));
35+
}
36+
2337
@Test
2438
@DisplayName("Test if Minecraft versions are ordered correctly (#atLeast)")
2539
void testAtLeast() {

0 commit comments

Comments
 (0)