Skip to content

Commit 261a1e8

Browse files
committed
Add support for Minecraft 1.21.9
* Material "CHAIN" changed to "IRON_CHAIN"
1 parent d866fc5 commit 261a1e8

23 files changed

+364
-45
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,7 +173,7 @@
173173
<dependency>
174174
<groupId>io.papermc.paper</groupId>
175175
<artifactId>paper-api</artifactId>
176-
<version>1.21.5-R0.1-SNAPSHOT</version>
176+
<version>1.21.9-R0.1-SNAPSHOT</version>
177177
</dependency>
178178

179179
<!-- Used for storing and retreiving Constructs in a storage transparent medium: JSONs -->

src/main/java/com/laytonsmith/abstraction/MCParticleData.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,22 @@ public int arrivalTime() {
7979
return this.arrivalTime;
8080
}
8181
}
82+
83+
public static class Spell {
84+
float power;
85+
MCColor color;
86+
87+
public Spell(MCColor color, float power) {
88+
this.power = power;
89+
this.color = color;
90+
}
91+
92+
public float power() {
93+
return this.power;
94+
}
95+
96+
public MCColor color() {
97+
return this.color;
98+
}
99+
}
82100
}

src/main/java/com/laytonsmith/abstraction/blocks/MCMaterial.java

Lines changed: 78 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,7 +394,8 @@ public enum MCVanillaMaterial {
394394
RED_MUSHROOM_BLOCK,
395395
MUSHROOM_STEM,
396396
IRON_BARS,
397-
CHAIN,
397+
CHAIN(MCVersion.MC1_16, MCVersion.MC1_21_8),
398+
IRON_CHAIN(MCVersion.MC1_21_9), // changed from CHAIN
398399
GLASS_PANE,
399400
MELON,
400401
VINE,
@@ -1772,7 +1773,82 @@ public enum MCVanillaMaterial {
17721773
MUSIC_DISC_TEARS(MCVersion.MC1_21_6),
17731774

17741775
// 1.21.7 additions
1775-
MUSIC_DISC_LAVA_CHICKEN(MCVersion.MC1_21_7);
1776+
MUSIC_DISC_LAVA_CHICKEN(MCVersion.MC1_21_7),
1777+
1778+
// 1.21.9 additions
1779+
COPPER_AXE(MCVersion.MC1_21_9),
1780+
COPPER_BARS(MCVersion.MC1_21_9),
1781+
COPPER_BOOTS(MCVersion.MC1_21_9),
1782+
COPPER_CHAIN(MCVersion.MC1_21_9),
1783+
COPPER_CHEST(MCVersion.MC1_21_9),
1784+
COPPER_CHESTPLATE(MCVersion.MC1_21_9),
1785+
COPPER_GOLEM_SPAWN_EGG(MCVersion.MC1_21_9),
1786+
COPPER_GOLEM_STATUE(MCVersion.MC1_21_9),
1787+
COPPER_HELMET(MCVersion.MC1_21_9),
1788+
COPPER_HOE(MCVersion.MC1_21_9),
1789+
COPPER_HORSE_ARMOR(MCVersion.MC1_21_9),
1790+
COPPER_LANTERN(MCVersion.MC1_21_9),
1791+
COPPER_LEGGINGS(MCVersion.MC1_21_9),
1792+
COPPER_NUGGET(MCVersion.MC1_21_9),
1793+
COPPER_PICKAXE(MCVersion.MC1_21_9),
1794+
COPPER_SHOVEL(MCVersion.MC1_21_9),
1795+
COPPER_SWORD(MCVersion.MC1_21_9),
1796+
COPPER_TORCH(MCVersion.MC1_21_9),
1797+
COPPER_WALL_TORCH(MCVersion.MC1_21_9),
1798+
EXPOSED_COPPER_BARS(MCVersion.MC1_21_9),
1799+
EXPOSED_COPPER_CHAIN(MCVersion.MC1_21_9),
1800+
EXPOSED_COPPER_CHEST(MCVersion.MC1_21_9),
1801+
EXPOSED_COPPER_GOLEM_STATUE(MCVersion.MC1_21_9),
1802+
EXPOSED_COPPER_LANTERN(MCVersion.MC1_21_9),
1803+
EXPOSED_LIGHTNING_ROD(MCVersion.MC1_21_9),
1804+
OXIDIZED_COPPER_BARS(MCVersion.MC1_21_9),
1805+
OXIDIZED_COPPER_CHAIN(MCVersion.MC1_21_9),
1806+
OXIDIZED_COPPER_CHEST(MCVersion.MC1_21_9),
1807+
OXIDIZED_COPPER_GOLEM_STATUE(MCVersion.MC1_21_9),
1808+
OXIDIZED_COPPER_LANTERN(MCVersion.MC1_21_9),
1809+
OXIDIZED_LIGHTNING_ROD(MCVersion.MC1_21_9),
1810+
WAXED_COPPER_BARS(MCVersion.MC1_21_9),
1811+
WAXED_COPPER_CHAIN(MCVersion.MC1_21_9),
1812+
WAXED_COPPER_CHEST(MCVersion.MC1_21_9),
1813+
WAXED_COPPER_GOLEM_STATUE(MCVersion.MC1_21_9),
1814+
WAXED_COPPER_LANTERN(MCVersion.MC1_21_9),
1815+
WAXED_EXPOSED_COPPER_BARS(MCVersion.MC1_21_9),
1816+
WAXED_EXPOSED_COPPER_CHAIN(MCVersion.MC1_21_9),
1817+
WAXED_EXPOSED_COPPER_CHEST(MCVersion.MC1_21_9),
1818+
WAXED_EXPOSED_COPPER_GOLEM_STATUE(MCVersion.MC1_21_9),
1819+
WAXED_EXPOSED_COPPER_LANTERN(MCVersion.MC1_21_9),
1820+
WAXED_EXPOSED_LIGHTNING_ROD(MCVersion.MC1_21_9),
1821+
WAXED_LIGHTNING_ROD(MCVersion.MC1_21_9),
1822+
WAXED_OXIDIZED_COPPER_BARS(MCVersion.MC1_21_9),
1823+
WAXED_OXIDIZED_COPPER_CHAIN(MCVersion.MC1_21_9),
1824+
WAXED_OXIDIZED_COPPER_CHEST(MCVersion.MC1_21_9),
1825+
WAXED_OXIDIZED_COPPER_GOLEM_STATUE(MCVersion.MC1_21_9),
1826+
WAXED_OXIDIZED_COPPER_LANTERN(MCVersion.MC1_21_9),
1827+
WAXED_OXIDIZED_LIGHTNING_ROD(MCVersion.MC1_21_9),
1828+
WAXED_WEATHERED_COPPER_BARS(MCVersion.MC1_21_9),
1829+
WAXED_WEATHERED_COPPER_CHAIN(MCVersion.MC1_21_9),
1830+
WAXED_WEATHERED_COPPER_CHEST(MCVersion.MC1_21_9),
1831+
WAXED_WEATHERED_COPPER_GOLEM_STATUE(MCVersion.MC1_21_9),
1832+
WAXED_WEATHERED_COPPER_LANTERN(MCVersion.MC1_21_9),
1833+
WAXED_WEATHERED_LIGHTNING_ROD(MCVersion.MC1_21_9),
1834+
WEATHERED_COPPER_BARS(MCVersion.MC1_21_9),
1835+
WEATHERED_COPPER_CHAIN(MCVersion.MC1_21_9),
1836+
WEATHERED_COPPER_CHEST(MCVersion.MC1_21_9),
1837+
WEATHERED_COPPER_GOLEM_STATUE(MCVersion.MC1_21_9),
1838+
WEATHERED_COPPER_LANTERN(MCVersion.MC1_21_9),
1839+
WEATHERED_LIGHTNING_ROD(MCVersion.MC1_21_9),
1840+
ACACIA_SHELF(MCVersion.MC1_21_9),
1841+
BAMBOO_SHELF(MCVersion.MC1_21_9),
1842+
BIRCH_SHELF(MCVersion.MC1_21_9),
1843+
CHERRY_SHELF(MCVersion.MC1_21_9),
1844+
CRIMSON_SHELF(MCVersion.MC1_21_9),
1845+
DARK_OAK_SHELF(MCVersion.MC1_21_9),
1846+
JUNGLE_SHELF(MCVersion.MC1_21_9),
1847+
MANGROVE_SHELF(MCVersion.MC1_21_9),
1848+
OAK_SHELF(MCVersion.MC1_21_9),
1849+
PALE_OAK_SHELF(MCVersion.MC1_21_9),
1850+
SPRUCE_SHELF(MCVersion.MC1_21_9),
1851+
WARPED_SHELF(MCVersion.MC1_21_9);
17761852

17771853
private final MCVersion since;
17781854
private final MCVersion until;

src/main/java/com/laytonsmith/abstraction/bukkit/BukkitMCWorld.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -627,6 +627,10 @@ public void save() {
627627

628628
@Override
629629
public void setKeepSpawnInMemory(boolean keepLoaded) {
630-
w.setKeepSpawnInMemory(keepLoaded);
630+
try {
631+
w.setKeepSpawnInMemory(keepLoaded);
632+
} catch(NoSuchMethodError ex) {
633+
// some version after 1.21.9
634+
}
631635
}
632636
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.laytonsmith.abstraction.bukkit.entities;
2+
3+
import com.laytonsmith.abstraction.entities.MCMannequin;
4+
import org.bukkit.entity.Entity;
5+
import org.bukkit.entity.Mannequin;
6+
7+
public class BukkitMCMannequin extends BukkitMCLivingEntity implements MCMannequin {
8+
9+
private final Mannequin m;
10+
11+
public BukkitMCMannequin(Entity mannequin) {
12+
super(mannequin);
13+
this.m = (Mannequin) mannequin;
14+
}
15+
16+
@Override
17+
public Entity getHandle() {
18+
return super.getHandle();
19+
}
20+
21+
@Override
22+
public boolean isImmovable() {
23+
return this.m.isImmovable();
24+
}
25+
26+
@Override
27+
public void setImmovable(boolean immovable) {
28+
this.m.setImmovable(immovable);
29+
}
30+
}

src/main/java/com/laytonsmith/abstraction/bukkit/entities/BukkitMCPlayer.java

Lines changed: 56 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,7 @@ public MCEntity getSpectatorTarget() {
429429

430430
private static Class gameProfileClass = null;
431431
private static Class opListEntryClass = null;
432+
private static Class nameAndIdClass = null;
432433
private static Map<String, Object> opMap = null;
433434

434435
private static void SetupTempOp() throws ClassNotFoundException {
@@ -439,28 +440,44 @@ private static void SetupTempOp() throws ClassNotFoundException {
439440
// Get some version specific mappings
440441
String nms = "net.minecraft.server";
441442
String playersPackage = nms + ".players";
442-
String ops = isPaper ? "ops" : "p";
443-
String getPlayerList = isPaper ? "getPlayerList" : "ag";
443+
444+
String ops = "ops";
445+
String getPlayerList = "getPlayerList";
446+
String map = "map";
447+
String serverOpListEntry = ".ServerOpListEntry";
448+
if(!isPaper) {
449+
ops = "o";
450+
getPlayerList = "am";
451+
map = "e";
452+
serverOpListEntry = ".OpListEntry";
453+
}
454+
444455
MCVersion mcversion = Static.getServer().getMinecraftVersion();
445-
if(mcversion.lt(MCVersion.MC1_21_3)) {
446-
getPlayerList = isPaper ? "getPlayerList" : "ah";
447-
if(mcversion.lt(MCVersion.MC1_20_6)) {
448-
getPlayerList = "ae";
449-
if(mcversion.lt(MCVersion.MC1_20_4)) {
450-
getPlayerList = "ac";
451-
if(mcversion.lt(MCVersion.MC1_20_2)) {
452-
ops = "o";
453-
if(mcversion.equals(MCVersion.MC1_19_3)) {
454-
getPlayerList = "ab";
455-
} else if(mcversion.lt(MCVersion.MC1_19_1)) {
456-
ops = "n";
457-
if(mcversion.lt(MCVersion.MC1_18)) {
458-
getPlayerList = "getPlayerList";
459-
if(mcversion.lt(MCVersion.MC1_17)) {
460-
String version = ((BukkitMCServer) Static.getServer()).getCraftBukkitPackage().split("\\.")[3];
461-
nms = "net.minecraft.server." + version;
462-
playersPackage = nms;
463-
ops = "operators";
456+
if(mcversion.lt(MCVersion.MC1_21_9)) {
457+
ops = isPaper ? "ops" : "p";
458+
getPlayerList = isPaper ? "getPlayerList" : "ag";
459+
map = "d";
460+
serverOpListEntry = ".OpListEntry";
461+
if(mcversion.lt(MCVersion.MC1_21_3)) {
462+
getPlayerList = isPaper ? "getPlayerList" : "ah";
463+
if(mcversion.lt(MCVersion.MC1_20_6)) {
464+
getPlayerList = "ae";
465+
if(mcversion.lt(MCVersion.MC1_20_4)) {
466+
getPlayerList = "ac";
467+
if(mcversion.lt(MCVersion.MC1_20_2)) {
468+
ops = "o";
469+
if(mcversion.equals(MCVersion.MC1_19_3)) {
470+
getPlayerList = "ab";
471+
} else if(mcversion.lt(MCVersion.MC1_19_1)) {
472+
ops = "n";
473+
if(mcversion.lt(MCVersion.MC1_18)) {
474+
getPlayerList = "getPlayerList";
475+
if(mcversion.lt(MCVersion.MC1_17)) {
476+
String version = ((BukkitMCServer) Static.getServer()).getCraftBukkitPackage().split("\\.")[3];
477+
nms = "net.minecraft.server." + version;
478+
playersPackage = nms;
479+
ops = "operators";
480+
}
464481
}
465482
}
466483
}
@@ -474,19 +491,32 @@ private static void SetupTempOp() throws ClassNotFoundException {
474491
/*n.m.s.players.PlayerList*/ Object nmsPlayerList = ReflectionUtils.invokeMethod(nmsServer, getPlayerList);
475492
/*n.m.s.players.OpList*/ Object opSet = ReflectionUtils.get(Class.forName(playersPackage + ".PlayerList"), nmsPlayerList, ops);
476493
//opSet.getClass().getSuperclass() == n.m.s.players.JsonList
477-
/*Map<String, n.m.s.players.OpListEntry>*/ opMap = (Map) ReflectionUtils.get(opSet.getClass().getSuperclass(), opSet, "d");
478-
/*n.m.s.players.OpListEntry*/ opListEntryClass = Class.forName(playersPackage + ".OpListEntry");
494+
/*Map<String, n.m.s.players.OpListEntry>*/ opMap = (Map) ReflectionUtils.get(opSet.getClass().getSuperclass(), opSet, map);
495+
/*n.m.s.players.OpListEntry*/ opListEntryClass = Class.forName(playersPackage + serverOpListEntry);
479496
/*com.mojang.authlib.GameProfile*/ gameProfileClass = Class.forName("com.mojang.authlib.GameProfile");
497+
if(mcversion.gte(MCVersion.MC1_21_9)) {
498+
nameAndIdClass = Class.forName(playersPackage + ".NameAndId");
499+
}
480500
}
481501

482502
@Override
483503
public void setTempOp(Boolean value) throws ClassNotFoundException {
484504
SetupTempOp();
485505
if(value) {
486506
Object gameProfile = ReflectionUtils.invokeMethod(p, "getProfile");
487-
Object opListEntry = ReflectionUtils.newInstance(opListEntryClass,
488-
new Class[]{gameProfileClass, int.class, boolean.class},
489-
new Object[]{gameProfile, 4, false});
507+
Object opListEntry;
508+
if(nameAndIdClass != null) {
509+
Object nameAndId = ReflectionUtils.newInstance(nameAndIdClass,
510+
new Class[]{gameProfileClass},
511+
new Object[]{gameProfile});
512+
opListEntry = ReflectionUtils.newInstance(opListEntryClass,
513+
new Class[]{nameAndIdClass, int.class, boolean.class},
514+
new Object[]{nameAndId, 4, false});
515+
} else {
516+
opListEntry = ReflectionUtils.newInstance(opListEntryClass,
517+
new Class[]{gameProfileClass, int.class, boolean.class},
518+
new Object[]{gameProfile, 4, false});
519+
}
490520
opMap.put(p.getUniqueId().toString(), opListEntry);
491521
} else {
492522
opMap.remove(p.getUniqueId().toString());
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.laytonsmith.abstraction.entities;
2+
3+
import com.laytonsmith.abstraction.MCLivingEntity;
4+
5+
public interface MCMannequin extends MCLivingEntity {
6+
boolean isImmovable();
7+
void setImmovable(boolean immovable);
8+
}

src/main/java/com/laytonsmith/abstraction/enums/MCEntityType.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,7 @@ public enum MCVanillaEntityType {
175175
CAVE_SPIDER,
176176
CHICKEN,
177177
COD,
178+
COPPER_GOLEM(true, MCVersion.MC1_21_9),
178179
COW,
179180
CREAKING(true, MCVersion.MC1_21_3),
180181
CREEPER,
@@ -221,6 +222,7 @@ public enum MCVanillaEntityType {
221222
LIGHTNING,
222223
LINGERING_POTION(true, MCVersion.MC1_21_5),
223224
MAGMA_CUBE,
225+
MANNEQUIN(true, MCVersion.MC1_21_9),
224226
MARKER(true, MCVersion.MC1_17),
225227
MINECART,
226228
MINECART_CHEST,

src/main/java/com/laytonsmith/abstraction/enums/MCGameRule.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,12 @@
1111

1212
@MEnum("com.commandhelper.GameRule")
1313
public enum MCGameRule {
14+
ALLOWENTERINGNETHERUSINGPORTALS("allowEnteringNetherUsingPortals"),
1415
ALLOWFIRETICKSAWAYFROMPLAYER("allowFireTicksAwayFromPlayer"),
1516
ANNOUNCEADVANCEMENTS("announceAdvancements"),
1617
BLOCKEXPLOSIONDROPDECAY("blockExplosionDropDecay"),
1718
COMMANDBLOCKOUTPUT("commandBlockOutput"),
19+
COMMANDBLOCKSENABLED("commandBlocksEnabled"),
1820
COMMANDMODIFICATIONBLOCKLIMIT("commandModificationBlockLimit", CInt.class),
1921
DISABLEELYTRAMOVEMENTCHECK("disableElytraMovementCheck"),
2022
DISABLEPLAYERMOVEMENTCHECK("disablePlayerMovementCheck"),
@@ -55,12 +57,15 @@ public enum MCGameRule {
5557
PLAYERSNETHERPORTALDEFAULTDELAY("playersNetherPortalDefaultDelay", CInt.class),
5658
PLAYERSSLEEPINGPERCENTAGE("playersSleepingPercentage", CInt.class),
5759
PROJECTILESCANBREAKBLOCKS("projectilesCanBreakBlocks"),
60+
PVP("pvp"),
5861
RANDOMTICKSPEED("randomTickSpeed", CInt.class),
5962
REDUCEDDEBUGINFO("reducedDebugInfo"),
6063
SENDCOMMANDFEEDBACK("sendCommandFeedback"),
6164
SHOWDEATHMESSAGES("showDeathMessages"),
6265
SNOWACCUMULATIONHEIGHT("snowAccumulationHeight", CInt.class),
63-
SPAWNCHUNKRADIUS("spawnChunkRadius", CInt.class),
66+
SPAWNCHUNKRADIUS("spawnChunkRadius", CInt.class), // removed in 1.21.9
67+
SPAWNERBLOCKSENABLED("spawnerBlocksEnabled"),
68+
SPAWNMONSTERS("spawnMonsters"),
6469
SPAWNRADIUS("spawnRadius", CInt.class),
6570
SPECTATORSGENERATECHUNKS("spectatorsGenerateChunks"),
6671
TNTEXPLODES("tntExplodes"),

src/main/java/com/laytonsmith/abstraction/enums/MCParticle.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,7 @@ public enum MCVanillaParticle {
225225
PALE_OAK_LEAVES(MCVersion.MC1_21_4),
226226
FIREFLY(MCVersion.MC1_21_5),
227227
TINTED_LEAVES(MCVersion.MC1_21_5),
228+
COPPER_FIRE_FLAME(MCVersion.MC1_21_9),
228229
UNKNOWN(MCVersion.NEVER);
229230

230231
private final MCVersion since;

0 commit comments

Comments
 (0)