Skip to content

Commit 6fc25bc

Browse files
authored
feat: Add support for Minecraft 1.21.8 (#4701)
* Update libs.versions.toml * Update build.gradle.kts * Update PlayerEventListener.java * Update BukkitPlatform.java * Update ReplicatingEntityWrapper.java * Update ReplicatingEntityWrapper.java * Update libs.versions.toml * Update PlayerEventListener.java * Update PlayerEventListener.java * Update BukkitPlatform.java * Update ReplicatingEntityWrapper.java * Update BukkitPlatform.java * Update ReplicatingEntityWrapper.java * Update ReplicatingEntityWrapper.java * Update PlayerEventListener.java
1 parent 1054018 commit 6fc25bc

File tree

4 files changed

+22
-8
lines changed

4 files changed

+22
-8
lines changed

Bukkit/src/main/java/com/plotsquared/bukkit/BukkitPlatform.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -837,7 +837,8 @@ private void runEntityTask() {
837837
case "HOPPER_MINECART":
838838
case "MINECART_MOB_SPAWNER":
839839
case "SPAWNER_MINECART":
840-
case "ENDER_CRYSTAL":
840+
case "END_CRYSTAL":
841+
case "ENDER_CRYSTAL": // Backwards compatibility for 1.20.4
841842
case "MINECART_TNT":
842843
case "TNT_MINECART":
843844
case "CHEST_BOAT":
@@ -955,6 +956,8 @@ private void runEntityTask() {
955956
case "ENDERMITE":
956957
case "ENDER_DRAGON":
957958
case "GHAST":
959+
case "HAPPY_GHAST": // 1.21.6+
960+
case "GHASTLING": // 1.21.6+
958961
case "GIANT":
959962
case "GUARDIAN":
960963
case "HORSE":

Bukkit/src/main/java/com/plotsquared/bukkit/entity/ReplicatingEntityWrapper.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public ReplicatingEntityWrapper(Entity entity, short depth) {
115115
this.dataByte = getOrdinal(Boat.Type.values(), boat.getBoatType());
116116
storeInventory(boat);
117117
}
118-
case "ARROW", "EGG", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "EXPERIENCE_ORB", "FALLING_BLOCK", "FIREBALL",
118+
case "ARROW", "EGG", "END_CRYSTAL", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "EXPERIENCE_ORB", "FALLING_BLOCK", "FIREBALL",
119119
"FIREWORK", "FISHING_HOOK", "LEASH_HITCH", "LIGHTNING", "MINECART", "MINECART_COMMAND", "MINECART_MOB_SPAWNER",
120120
"MINECART_TNT", "PLAYER", "PRIMED_TNT", "SLIME", "SMALL_FIREBALL", "SNOWBALL", "MINECART_FURNACE", "SPLASH_POTION",
121121
"THROWN_EXP_BOTTLE", "WITHER_SKULL", "UNKNOWN", "SPECTRAL_ARROW", "SHULKER_BULLET", "DRAGON_FIREBALL", "AREA_EFFECT_CLOUD",
@@ -272,7 +272,7 @@ public ReplicatingEntityWrapper(Entity entity, short depth) {
272272
this.dataByte = (byte) entity1.getPhase().ordinal();
273273
return;
274274
}
275-
case "SKELETON", "WITHER_SKELETON", "GUARDIAN", "ELDER_GUARDIAN", "GHAST", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN",
275+
case "SKELETON", "WITHER_SKELETON", "GUARDIAN", "ELDER_GUARDIAN", "GHAST", "HAPPY_GHAST", "GHASTLING", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN",
276276
"ZOMBIFIED_PIGLIN", "PIGLIN", "PIGLIN_BRUTE", "ZOMBIE", "WITHER", "WITCH", "SPIDER", "CAVE_SPIDER", "SILVERFISH",
277277
"GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SHULKER", "SNOWMAN", "SNOW_GOLEM" -> {
278278
storeLiving((LivingEntity) entity);
@@ -511,7 +511,7 @@ public Entity spawn(World world, int xOffset, int zOffset) {
511511
((Slime) entity).setSize(this.dataByte);
512512
return entity;
513513
} */
514-
case "ARROW", "EGG", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "DROPPED_ITEM", "EXPERIENCE_ORB", "FALLING_BLOCK",
514+
case "ARROW", "EGG", "END_CRYSTAL", "ENDER_CRYSTAL", "ENDER_PEARL", "ENDER_SIGNAL", "DROPPED_ITEM", "EXPERIENCE_ORB", "FALLING_BLOCK",
515515
"FIREBALL", "FIREWORK", "FISHING_HOOK", "LEASH_HITCH", "LIGHTNING", "MINECART", "MINECART_COMMAND",
516516
"MINECART_MOB_SPAWNER", "MINECART_TNT", "PLAYER", "PRIMED_TNT", "SMALL_FIREBALL", "SNOWBALL",
517517
"SPLASH_POTION", "THROWN_EXP_BOTTLE", "SPECTRAL_ARROW", "SHULKER_BULLET", "AREA_EFFECT_CLOUD",
@@ -676,7 +676,7 @@ public Entity spawn(World world, int xOffset, int zOffset) {
676676
restoreLiving((LivingEntity) entity);
677677
return entity;
678678
}
679-
case "ENDERMITE", "GHAST", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN", "PIGLIN", "ZOMBIFIED_PIGLIN", "PIGLIN_BRUTE", "ZOMBIE", "WITHER", "WITCH", "SPIDER", "CAVE_SPIDER", "SILVERFISH", "GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SNOWMAN", "SHULKER", "GUARDIAN", "ELDER_GUARDIAN", "SKELETON", "WITHER_SKELETON" -> {
679+
case "ENDERMITE", "GHAST", "HAPPY_GHAST", "GHASTLING", "MAGMA_CUBE", "SQUID", "PIG_ZOMBIE", "HOGLIN", "PIGLIN", "ZOMBIFIED_PIGLIN", "PIGLIN_BRUTE", "ZOMBIE", "WITHER", "WITCH", "SPIDER", "CAVE_SPIDER", "SILVERFISH", "GIANT", "ENDERMAN", "CREEPER", "BLAZE", "SNOWMAN", "SHULKER", "GUARDIAN", "ELDER_GUARDIAN", "SKELETON", "WITHER_SKELETON" -> {
680680
restoreLiving((LivingEntity) entity);
681681
return entity;
682682
}

Bukkit/src/main/java/com/plotsquared/bukkit/listener/PlayerEventListener.java

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
import com.plotsquared.core.util.task.TaskTime;
8080
import com.sk89q.worldedit.WorldEdit;
8181
import com.sk89q.worldedit.bukkit.BukkitAdapter;
82+
import com.sk89q.worldedit.util.Enums;
8283
import com.sk89q.worldedit.world.block.BlockType;
8384
import com.sk89q.worldedit.world.block.BlockTypes;
8485
import io.papermc.lib.PaperLib;
@@ -159,6 +160,7 @@
159160
import java.util.HashSet;
160161
import java.util.List;
161162
import java.util.Locale;
163+
import java.util.Objects;
162164
import java.util.Optional;
163165
import java.util.Set;
164166
import java.util.UUID;
@@ -183,6 +185,15 @@ public class PlayerEventListener implements Listener {
183185
Material.WRITABLE_BOOK,
184186
Material.WRITTEN_BOOK
185187
);
188+
189+
/**
190+
* The correct EntityType for End Crystal, determined once at class loading time.
191+
* Tries END_CRYSTAL first (1.21+), falls back to ENDER_CRYSTAL (1.20.4 and older).
192+
*/
193+
private static final EntityType END_CRYSTAL_ENTITY_TYPE = Objects.requireNonNull(
194+
Enums.findByValue(EntityType.class, "END_CRYSTAL", "ENDER_CRYSTAL")
195+
);
196+
186197
private static final Set<String> DYES;
187198

188199
static {
@@ -1317,8 +1328,8 @@ public void onInteract(PlayerInteractEvent event) {
13171328
// reset the player's hand item if spawning needs to be cancelled.
13181329
if (type == Material.ARMOR_STAND || type == Material.END_CRYSTAL) {
13191330
Plot plot = location.getOwnedPlotAbs();
1320-
if (BukkitEntityUtil.checkEntity(type == Material.ARMOR_STAND ? EntityType.ARMOR_STAND : EntityType.ENDER_CRYSTAL,
1321-
plot)) {
1331+
EntityType entityType = type == Material.ARMOR_STAND ? EntityType.ARMOR_STAND : END_CRYSTAL_ENTITY_TYPE;
1332+
if (BukkitEntityUtil.checkEntity(entityType, plot)) {
13221333
event.setCancelled(true);
13231334
break;
13241335
}

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,7 @@ tasks.getByName<Jar>("jar") {
204204
enabled = false
205205
}
206206

207-
val supportedVersions = listOf("1.19.4", "1.20.6", "1.21.1", "1.21.3", "1.21.4", "1.21.5")
207+
val supportedVersions = listOf("1.19.4", "1.20.6", "1.21.1", "1.21.3", "1.21.4", "1.21.5", "1.21.6", "1.21.7", "1.21.8")
208208
tasks {
209209
register("cacheLatestFaweArtifact") {
210210
val lastSuccessfulBuildUrl = uri("https://ci.athion.net/job/FastAsyncWorldEdit/lastSuccessfulBuild/api/json").toURL()

0 commit comments

Comments
 (0)