diff --git a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java index 4e00a179d..af6afe670 100644 --- a/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java +++ b/bukkit/compatibility/src/main/java/net/momirealms/craftengine/bukkit/compatibility/BukkitCompatibilityManager.java @@ -82,8 +82,12 @@ public class BukkitCompatibilityManager implements CompatibilityManager { } // WorldEdit if (this.isPluginEnabled("FastAsyncWorldEdit")) { - this.initFastAsyncWorldEditHook(); - logHook("FastAsyncWorldEdit"); + try { + this.initFastAsyncWorldEditHook(); + logHook("FastAsyncWorldEdit"); + } catch (Exception e) { + this.plugin.logger().warn("[Compatibility] Failed to initialize FastAsyncWorldEdit hook", e); + } } else if (this.isPluginEnabled("WorldEdit")) { this.initWorldEditHook(); logHook("WorldEdit"); @@ -172,10 +176,28 @@ public class BukkitCompatibilityManager implements CompatibilityManager { } } + @SuppressWarnings("all") private void initFastAsyncWorldEditHook() { + Plugin fastAsyncWorldEdit = Bukkit.getPluginManager().getPlugin("FastAsyncWorldEdit"); + String version = VersionHelper.isPaper() ? fastAsyncWorldEdit.getPluginMeta().getVersion() : fastAsyncWorldEdit.getDescription().getVersion(); + if (!this.fastAsyncWorldEditVersionCheck(new int[]{2, 13, 0}, version)) { + this.plugin.logger().warn("[Compatibility] FastAsyncWorldEdit version is too old, please update to 2.13.0 or newer"); + } new WorldEditBlockRegister(BukkitBlockManager.instance(), true); } + private boolean fastAsyncWorldEditVersionCheck(int[] target, String version) { + String cleanVersion = version.split("-")[0]; + String[] parts = cleanVersion.split("\\."); + for (int i = 0; i < target.length; i++) { + if (i >= parts.length) return false; + int currentPart = Integer.parseInt(parts[i]); + if (currentPart > target[i]) return true; + if (currentPart < target[i]) return false; + } + return true; + } + private void initWorldEditHook() { WorldEditBlockRegister weBlockRegister = new WorldEditBlockRegister(BukkitBlockManager.instance(), false); try { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java index 31acebdf2..9b2deba0c 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/network/PacketConsumers.java @@ -2083,9 +2083,9 @@ public class PacketConsumers { try { FriendlyByteBuf buf = event.getBuffer(); ItemBuildContext context = ItemBuildContext.of((BukkitServerPlayer) user); + int slot = buf.readVarInt(); Object friendlyBuf = FastNMS.INSTANCE.constructor$FriendlyByteBuf(buf); ItemStack itemStack = FastNMS.INSTANCE.method$FriendlyByteBuf$readItem(friendlyBuf); - int slot = buf.readVarInt(); BukkitItemManager.instance().s2c(itemStack, context).ifPresent((newItemStack) -> { event.setChanged(true); buf.clear(); @@ -2290,7 +2290,7 @@ public class PacketConsumers { private static BukkitNetworkManager.Handlers simpleAddEntityHandler(EntityPacketHandler handler) { return (user, event) -> { FriendlyByteBuf buf = event.getBuffer(); - user.entityPacketHandlers().put(buf.readVarInt(), handler); + user.entityPacketHandlers().putIfAbsent(buf.readVarInt(), handler); }; } } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java index ede8f4f74..ea7173512 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/util/Reflections.java @@ -3604,7 +3604,7 @@ public class Reflections { public static final Field field$FallingBlockEntity$blockState = requireNonNull( ReflectionUtils.getDeclaredField( - clazz$FallingBlockEntity, clazz$BlockState, 0 + clazz$FallingBlockEntity, clazz$BlockState, VersionHelper.isOrAbove1_21_5() ? 1 : 0 ) ); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java index 091115e16..3c605ed84 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/DropboxHost.java @@ -225,7 +225,7 @@ public class DropboxHost implements ResourcePackHost { try (HttpClient client = HttpClient.newBuilder().proxy(this.proxy).build()) { HttpRequest request = HttpRequest.newBuilder() - .uri(URI.create("https://alist.nn.ci/tool/dropbox/callback")) + .uri(URI.create("https://api.dropboxapi.com/oauth2/token")) .header("Content-Type", "application/x-www-form-urlencoded") .header("Authorization", authHeader) .POST(HttpRequest.BodyPublishers.ofString( diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java index de06dd2b3..9c413d5e0 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/host/impl/OneDriveHost.java @@ -189,7 +189,6 @@ public class OneDriveHost implements ResourcePackHost { try (HttpClient client = HttpClient.newBuilder().proxy(this.proxy).build()) { String formData = "client_id=" + URLEncoder.encode(this.clientId, StandardCharsets.UTF_8) + "&client_secret=" + URLEncoder.encode(this.clientSecret, StandardCharsets.UTF_8) + - "&redirect_uri=" + URLEncoder.encode("https://alist.nn.ci/tool/onedrive/callback", StandardCharsets.UTF_8) + "&refresh_token=" + URLEncoder.encode(this.refreshToken.left(), StandardCharsets.UTF_8) + "&grant_type=refresh_token" + "&scope=Files.ReadWrite.All+offline_access"; diff --git a/server-mod/v1_21_5/src/main/resources/mixins.craftengine.json b/server-mod/v1_21_5/src/main/resources/mixins.craftengine.json index 288b6501f..69e19f9d0 100644 --- a/server-mod/v1_21_5/src/main/resources/mixins.craftengine.json +++ b/server-mod/v1_21_5/src/main/resources/mixins.craftengine.json @@ -6,7 +6,6 @@ "target": "@env(DEFAULT)", "compatibilityLevel": "JAVA_21", "server": [ - "BlocksMixin", - "ItemStackMixin" + "BlocksMixin" ] }