From 17aa068230bd04408a99d3cb6ba95fec311c055d Mon Sep 17 00:00:00 2001 From: Matt <4009945+MattBDev@users.noreply.github.com> Date: Mon, 12 Oct 2026 10:29:03 -0400 Subject: [PATCH 1/3] Deprecate playEffect without replacement (#3697) --- .../main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java | 1 + .../java/com/sk89q/worldedit/command/tool/AreaPickaxe.java | 1 + .../com/sk89q/worldedit/command/tool/RecursivePickaxe.java | 1 + .../main/java/com/sk89q/worldedit/world/AbstractWorld.java | 5 +++++ .../src/main/java/com/sk89q/worldedit/world/World.java | 4 ++++ 5 files changed, 12 insertions(+) diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java index 6a6419ef28..6d10db9950 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/BukkitWorld.java @@ -453,6 +453,7 @@ public void fixAfterFastMode(Iterable chunks) { } } + @Deprecated @Override public boolean playEffect(Vector3 position, int type, int data) { World world = getWorld(); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/AreaPickaxe.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/AreaPickaxe.java index 299908d993..d5f4b2af5e 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/AreaPickaxe.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/AreaPickaxe.java @@ -49,6 +49,7 @@ public boolean canUse(Actor player) { return player.hasPermission("worldedit.superpickaxe.area"); } + @SuppressWarnings("deprecation") @Override public boolean actPrimary(Platform server, LocalConfiguration config, Player player, LocalSession session, Location clicked) { int ox = clicked.getBlockX(); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/RecursivePickaxe.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/RecursivePickaxe.java index 9fad39f9d3..9bbede5f95 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/RecursivePickaxe.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/RecursivePickaxe.java @@ -106,6 +106,7 @@ public boolean actPrimary( return true; } + @SuppressWarnings("deprecation") private static void recurse( Platform server, EditSession editSession, World world, BlockVector3 pos, BlockVector3 origin, double size, BlockType initialType, Set visited diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/AbstractWorld.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/AbstractWorld.java index 9c41ea97c9..51f5f97339 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/AbstractWorld.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/AbstractWorld.java @@ -48,6 +48,7 @@ */ public abstract class AbstractWorld implements World { + @Deprecated private final PriorityQueue effectQueue = new PriorityQueue<>(); private int taskId = -1; @@ -102,6 +103,7 @@ public void fixAfterFastMode(Iterable chunks) { public void fixLighting(Iterable chunks) { } + @Deprecated @Override public boolean playEffect(Vector3 position, int type, int data) { return false; @@ -114,6 +116,7 @@ public boolean playBlockBreakEffect(Vector3 position, BlockType type) { } //FAWE end + @Deprecated @Override public boolean queueBlockBreakEffect(Platform server, BlockVector3 position, BlockType blockType, double priority) { if (taskId == -1) { @@ -180,6 +183,7 @@ public void setWeather(WeatherType weatherType) { public void setWeather(WeatherType weatherType, long duration) { } + @Deprecated private class QueuedEffect implements Comparable { private final Vector3 position; @@ -192,6 +196,7 @@ private QueuedEffect(Vector3 position, BlockType blockType, double priority) { this.priority = priority; } + @Deprecated //FAWE start - allow block break effect of non-legacy blocks public void play() { playBlockBreakEffect(position, blockType); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/World.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/World.java index 2430e705f8..5b2edb28d0 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/World.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/World.java @@ -391,7 +391,9 @@ default boolean generateFeature(ConfiguredFeatureType type, EditSession editSess * @param type the effect type * @param data the effect data * @return true if the effect was played + * @deprecated This is deprecated without replacement. */ + @Deprecated boolean playEffect(Vector3 position, int type, int data); //FAWE start - allow block break effect of non-legacy blocks @@ -413,7 +415,9 @@ default boolean generateFeature(ConfiguredFeatureType type, EditSession editSess * @param blockType the block type * @param priority the priority * @return true if the effect was played + * @deprecated This is deprecated without replacement. */ + @Deprecated boolean queueBlockBreakEffect(Platform server, BlockVector3 position, BlockType blockType, double priority); /** From d2489f63cd8c639b5cccd7fc7af9a6be27eeb6db Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=BCseyin=20Serhat=20Han?= Date: Mon, 12 Oct 2026 17:29:26 +0300 Subject: [PATCH 2/3] fix: use FluidState#isEmpty in PaperweightBlockMaterial (#3693) --- .../bukkit/adapter/impl/v26_1/PaperweightBlockMaterial.java | 3 +-- .../bukkit/adapter/impl/v26_2/PaperweightBlockMaterial.java | 3 +-- .../bukkit/adapter/impl/v26_3/PaperweightBlockMaterial.java | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_1/PaperweightBlockMaterial.java b/worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_1/PaperweightBlockMaterial.java index 179d621045..1b59d33393 100644 --- a/worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_1/PaperweightBlockMaterial.java +++ b/worldedit-bukkit/adapters/adapter-26.1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_1/PaperweightBlockMaterial.java @@ -28,7 +28,6 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.PushReaction; public class PaperweightBlockMaterial extends BukkitBlockMaterial { @@ -69,7 +68,7 @@ public boolean isPowerSource() { @Override public boolean isLiquid() { - return !this.blockState.getFluidState().is(Fluids.EMPTY); + return !this.blockState.getFluidState().isEmpty(); } @Override diff --git a/worldedit-bukkit/adapters/adapter-26.2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_2/PaperweightBlockMaterial.java b/worldedit-bukkit/adapters/adapter-26.2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_2/PaperweightBlockMaterial.java index 7ec90111d4..4c31e76f7d 100644 --- a/worldedit-bukkit/adapters/adapter-26.2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_2/PaperweightBlockMaterial.java +++ b/worldedit-bukkit/adapters/adapter-26.2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_2/PaperweightBlockMaterial.java @@ -29,7 +29,6 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.PushReaction; public class PaperweightBlockMaterial extends BukkitBlockMaterial { @@ -70,7 +69,7 @@ public boolean isPowerSource() { @Override public boolean isLiquid() { - return !this.blockState.getFluidState().is(Fluids.EMPTY); + return !this.blockState.getFluidState().isEmpty(); } @Override diff --git a/worldedit-bukkit/adapters/adapter-26.3/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_3/PaperweightBlockMaterial.java b/worldedit-bukkit/adapters/adapter-26.3/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_3/PaperweightBlockMaterial.java index ec4db3f7fd..ff231b2ab7 100644 --- a/worldedit-bukkit/adapters/adapter-26.3/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_3/PaperweightBlockMaterial.java +++ b/worldedit-bukkit/adapters/adapter-26.3/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/v26_3/PaperweightBlockMaterial.java @@ -28,7 +28,6 @@ import net.minecraft.world.level.block.EntityBlock; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.state.BlockState; -import net.minecraft.world.level.material.Fluids; import net.minecraft.world.level.material.PushReaction; public class PaperweightBlockMaterial extends BukkitBlockMaterial { @@ -69,7 +68,7 @@ public boolean isPowerSource() { @Override public boolean isLiquid() { - return !this.blockState.getFluidState().is(Fluids.EMPTY); + return !this.blockState.getFluidState().isEmpty(); } @Override From fbf5c91c5de175eb3f55ef8521a3e09c56950778 Mon Sep 17 00:00:00 2001 From: Matt <4009945+MattBDev@users.noreply.github.com> Date: Mon, 12 Oct 2026 10:30:05 -0400 Subject: [PATCH 3/3] Deprecate HttpRequest in favor of native JDK HttpClient (#2713) (#3698) --- .../sk89q/worldedit/util/net/HttpRequest.java | 6 ++ .../worldedit/util/paste/EngineHubPaste.java | 87 ++++++++++--------- 2 files changed, 52 insertions(+), 41 deletions(-) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/net/HttpRequest.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/net/HttpRequest.java index d133eb54ec..b93c0c5cda 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/net/HttpRequest.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/net/HttpRequest.java @@ -45,6 +45,12 @@ import java.util.Map; import java.util.concurrent.ThreadLocalRandom; +/** + * A class for making HTTP requests. + * + * @deprecated Use the native JDK HttpClient API instead. + */ +@Deprecated(forRemoval = true) public class HttpRequest implements Closeable { private static final int CONNECT_TIMEOUT = 1000 * 5; diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/util/paste/EngineHubPaste.java b/worldedit-core/src/main/java/com/sk89q/worldedit/util/paste/EngineHubPaste.java index 1decfd384a..a0f6889ef8 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/util/paste/EngineHubPaste.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/util/paste/EngineHubPaste.java @@ -21,11 +21,13 @@ import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; -import com.sk89q.worldedit.util.net.HttpRequest; import java.io.IOException; import java.net.URI; import java.net.URL; +import java.net.http.HttpClient; +import java.net.http.HttpRequest; +import java.net.http.HttpResponse; import java.util.Map; import java.util.concurrent.Callable; @@ -39,7 +41,6 @@ public Callable paste(String content, PasteMetadata metadata) { } private static final class PasteTask implements Callable { - private final String content; private final PasteMetadata metadata; @@ -50,51 +51,55 @@ private PasteTask(String content, PasteMetadata metadata) { @Override public URL call() throws IOException, InterruptedException { - URL initialUrl = HttpRequest.url("https://paste.enginehub.org/signed_paste"); - - HttpRequest requestBuilder = HttpRequest.get(initialUrl); - - requestBuilder.header("x-paste-meta-from", "EngineHub"); - if (metadata.name != null) { - requestBuilder.header("x-paste-meta-name", metadata.name); - } - if (metadata.author != null) { - requestBuilder.header("x-paste-meta-author", metadata.author); - } - if (metadata.extension != null) { - requestBuilder.header("x-paste-meta-extension", metadata.extension); - } - - SignedPasteResponse response = GSON.fromJson(requestBuilder - .execute() - .expectResponseCode(200) - .returnContent() - .asString("UTF-8"), TypeToken.get(SignedPasteResponse.class).getType()); - - HttpRequest.Form form = HttpRequest.Form.create(); - for (Map.Entry entry : response.uploadFields.entrySet()) { - form.add(entry.getKey(), entry.getValue()); + try (HttpClient client = HttpClient.newHttpClient()) { + HttpRequest.Builder signRequestBuilder = HttpRequest.newBuilder() + .uri(URI.create("https://paste.enginehub.org/signed_paste_v2")) + .header("x-paste-meta-from", "EngineHub"); + + if (metadata.name != null) { + signRequestBuilder.header("x-paste-meta-name", metadata.name); + } + if (metadata.author != null) { + signRequestBuilder.header("x-paste-meta-author", metadata.author); + } + if (metadata.extension != null) { + signRequestBuilder.header("x-paste-meta-extension", metadata.extension); + } + + HttpResponse signResponse = client.send(signRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + + if (signResponse.statusCode() != 200) { + throw new IOException("Failed to initiate paste upload: " + signResponse.statusCode() + " " + signResponse.body()); + } + + SignedPasteResponse response = GSON.fromJson( + signResponse.body(), + TypeToken.get(SignedPasteResponse.class).getType() + ); + + HttpRequest.Builder uploadRequestBuilder = HttpRequest.newBuilder() + .uri(URI.create(response.uploadUrl)) + .method("PUT", HttpRequest.BodyPublishers.ofString(content)); + + for (Map.Entry entry : response.headers.entrySet()) { + uploadRequestBuilder.header(entry.getKey(), entry.getValue()); + } + + // If this succeeds, it will not return any data aside from a 204 status. + HttpResponse uploadResponse = client.send(uploadRequestBuilder.build(), HttpResponse.BodyHandlers.ofString()); + + if (uploadResponse.statusCode() != 200 && uploadResponse.statusCode() != 204) { + throw new IOException("Failed to upload paste: " + uploadResponse.statusCode() + " " + uploadResponse.body()); + } + + return URI.create(response.viewUrl).toURL(); } - form.add("file", content); - - URL url = HttpRequest.url(response.uploadUrl); - // If this succeeds, it will not return any data aside from a 204 status. - HttpRequest.post(url) - .bodyMultipartForm(form) - .execute() - .expectResponseCode(200, 204); - - return URI.create(response.viewUrl).toURL(); } - } private static final class SignedPasteResponse { - String viewUrl; String uploadUrl; - Map uploadFields; - + Map headers; } - }