From 77a929f6a1d62d8255f557aa62e2bd057b57f25c Mon Sep 17 00:00:00 2001 From: peaches <107517810+peaches94@users.noreply.github.com> Date: Mon, 25 Jul 2022 11:49:10 -0500 Subject: [PATCH 1/5] fix: use servers removeGameEventListener instead of reimpl (#1881) * fix: use servers removeGameEventListener instead of reimpl * fix: 1.18.2 impl --- .../v1_18_R2/PaperweightPlatformAdapter.java | 29 +++++---------- .../v1_19_R1/PaperweightPlatformAdapter.java | 36 +++++++------------ 2 files changed, 20 insertions(+), 45 deletions(-) diff --git a/worldedit-bukkit/adapters/adapter-1_18_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_18_R2/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_18_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_18_R2/PaperweightPlatformAdapter.java index ad3205feb..8546de630 100644 --- a/worldedit-bukkit/adapters/adapter-1_18_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_18_R2/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_18_2/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_18_R2/PaperweightPlatformAdapter.java @@ -99,7 +99,7 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldLock; private static final long fieldLockOffset; - private static final Field fieldGameEventDispatcherSections; + private static final MethodHandle methodRemoveGameEventListener; private static final MethodHandle methodremoveTickingBlockEntity; private static final Field fieldRemove; @@ -148,9 +148,12 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { fieldLockOffset = -1; } - fieldGameEventDispatcherSections = LevelChunk.class.getDeclaredField(Refraction.pickName( - "gameEventDispatcherSections", "t")); - fieldGameEventDispatcherSections.setAccessible(true); + Method removeGameEventListener = LevelChunk.class.getDeclaredMethod( + Refraction.pickName("removeGameEventListener", "d"), + BlockEntity.class + ); + removeGameEventListener.setAccessible(true); + methodRemoveGameEventListener = MethodHandles.lookup().unreflect(removeGameEventListener); Method removeBlockEntityTicker = LevelChunk.class.getDeclaredMethod( Refraction.pickName( "removeBlockEntityTicker", @@ -573,23 +576,7 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { BlockEntity blockEntity = levelChunk.blockEntities.remove(beacon.getBlockPos()); if (blockEntity != null) { if (!levelChunk.level.isClientSide) { - Block block = beacon.getBlockState().getBlock(); - if (block instanceof EntityBlock) { - GameEventListener gameEventListener = ((EntityBlock) block).getListener(levelChunk.level, beacon); - if (gameEventListener != null) { - int i = SectionPos.blockToSectionCoord(beacon.getBlockPos().getY()); - GameEventDispatcher gameEventDispatcher = levelChunk.getEventDispatcher(i); - gameEventDispatcher.unregister(gameEventListener); - if (gameEventDispatcher.isEmpty()) { - try { - ((Int2ObjectMap) fieldGameEventDispatcherSections.get(levelChunk)) - .remove(i); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - } + methodRemoveGameEventListener.invoke(levelChunk, beacon); } fieldRemove.set(beacon, true); } diff --git a/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R1/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R1/PaperweightPlatformAdapter.java index 9a7e73503..aa87aceea 100644 --- a/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R1/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R1/PaperweightPlatformAdapter.java @@ -62,6 +62,8 @@ import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.lang.reflect.Parameter; +import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -99,7 +101,7 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { private static final Field fieldLock; private static final long fieldLockOffset; - private static final Field fieldGameEventDispatcherSections; + private static final MethodHandle methodRemoveGameEventListener; private static final MethodHandle methodremoveTickingBlockEntity; private static final Field fieldRemove; @@ -148,9 +150,14 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { fieldLockOffset = -1; } - fieldGameEventDispatcherSections = LevelChunk.class.getDeclaredField(Refraction.pickName( - "gameEventDispatcherSections", "t")); - fieldGameEventDispatcherSections.setAccessible(true); + Method removeGameEventListener = LevelChunk.class.getDeclaredMethod( + Refraction.pickName("removeGameEventListener", "a"), + BlockEntity.class, + ServerLevel.class + ); + removeGameEventListener.setAccessible(true); + methodRemoveGameEventListener = MethodHandles.lookup().unreflect(removeGameEventListener); + Method removeBlockEntityTicker = LevelChunk.class.getDeclaredMethod( Refraction.pickName( "removeBlockEntityTicker", @@ -564,32 +571,13 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { return BiomeTypes.get(biome.unwrapKey().orElseThrow().location().toString()); } - @SuppressWarnings("unchecked") static void removeBeacon(BlockEntity beacon, LevelChunk levelChunk) { try { - // Do the method ourselves to avoid trying to reflect generic method parameters - // similar to removeGameEventListener if (levelChunk.loaded || levelChunk.level.isClientSide()) { BlockEntity blockEntity = levelChunk.blockEntities.remove(beacon.getBlockPos()); if (blockEntity != null) { if (!levelChunk.level.isClientSide) { - Block block = beacon.getBlockState().getBlock(); - if (block instanceof EntityBlock) { - GameEventListener gameEventListener = ((EntityBlock) block).getListener(levelChunk.level, beacon); - if (gameEventListener != null) { - int i = SectionPos.blockToSectionCoord(beacon.getBlockPos().getY()); - GameEventDispatcher gameEventDispatcher = levelChunk.getEventDispatcher(i); - gameEventDispatcher.unregister(gameEventListener); - if (gameEventDispatcher.isEmpty()) { - try { - ((Int2ObjectMap) fieldGameEventDispatcherSections.get(levelChunk)) - .remove(i); - } catch (IllegalAccessException e) { - e.printStackTrace(); - } - } - } - } + methodRemoveGameEventListener.invoke(levelChunk, beacon, levelChunk.level); } fieldRemove.set(beacon, true); } From e10774598e3fe9ee06201fa4b1f16d115abc458d Mon Sep 17 00:00:00 2001 From: Alexander Brandes Date: Mon, 25 Jul 2022 18:49:18 +0200 Subject: [PATCH 2/5] chore: Reword light command messages (#1885) --- .../worldedit/command/RegionCommands.java | 18 ++++-------------- .../src/main/resources/lang/strings.json | 3 ++- 2 files changed, 6 insertions(+), 15 deletions(-) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/RegionCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/RegionCommands.java index d8e28084a..092c97777 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/RegionCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/RegionCommands.java @@ -159,18 +159,6 @@ public class RegionCommands { actor.print(Caption.of("fawe.info.lighting.propagate.selection", count)); } - // @Command( - // name = "/getlighting", - // desc = "Get the light at a position" - // ) - // @CommandPermissions("worldedit.light.fix") - // public void getLighting(Player player, EditSession editSession) throws WorldEditException { - // final Location loc = player.getLocation(); - // int block = editSession.getBlockLight(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - // int sky = editSession.getSkyLight(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - // player.print(TextComponent.of("Light: " + block + " | " + sky)); - // } - @Command( name = "/removelighting", aliases = "/removelight", @@ -202,6 +190,7 @@ public class RegionCommands { } } + @Deprecated(since = "TODO", forRemoval = true) @Command( name = "/setblocklight", aliases = "/setlight", @@ -209,16 +198,17 @@ public class RegionCommands { ) @CommandPermissions("worldedit.light.set") public void setlighting(Actor actor, EditSession editSession, @Selection Region region) { - actor.print(Caption.of("fawe.info.temporarily-not-working")); + actor.print(Caption.of("fawe.info.light-blocks")); } + @Deprecated(since = "TODO", forRemoval = true) @Command( name = "/setskylight", desc = "Set sky lighting in a selection" ) @CommandPermissions("worldedit.light.set") public void setskylighting(Actor actor, @Selection Region region) { - actor.print(Caption.of("fawe.info.temporarily-not-working")); + actor.print(Caption.of("fawe.info.light-blocks")); } @Command( diff --git a/worldedit-core/src/main/resources/lang/strings.json b/worldedit-core/src/main/resources/lang/strings.json index 083ea2406..5c6a411d2 100644 --- a/worldedit-core/src/main/resources/lang/strings.json +++ b/worldedit-core/src/main/resources/lang/strings.json @@ -4,7 +4,7 @@ "fawe.worldedit.history.find.element.more": " - Changes: {0}\n - Bounds: {1} -> {2}\n - Extra: {3}\n - Size on Disk: {4}", "fawe.worldedit.history.find.hover": "{0} blocks changed, click for more info", "fawe.worldedit.history.distr.summary_null": "Could not find edit summary for inputs.", - "fawe.info.lighting.propagate.selection": "Lighting has been propagated in {0} chunks. (Note: To remove light use //removelight)", + "fawe.info.lighting.propagate.selection": "Lighting has been propagated in {0} chunks.", "fawe.info.updated.lighting.selection": "Lighting has been updated in {0} chunks. (It may take a second for the packets to send)", "fawe.info.set.region": "Selection set to your current allowed region", "fawe.info.worldedit.toggle.tips.on": "Disabled FAWE tips.", @@ -13,6 +13,7 @@ "fawe.info.worldedit.restricted": "Your FAWE edits are now restricted.", "fawe.info.worldedit.oom.admin": "Possible options:\n - //fast\n - Do smaller edits\n - Allocate more memory\n - Disable `max-memory-percent`", "fawe.info.temporarily-not-working": "Temporarily not working", + "fawe.info.light-blocks": "Light blocks are more reliable than light sources, please use the blocks. This command is deprecated and will be removed in a future version.", "fawe.info.update-available": "An update for FastAsyncWorldEdit is available. You are {0} build(s) out of date.\nYou are running build {1}, the latest version is build {2}.\nUpdate at {3}", "fawe.web.generating.link": "Uploading {0}, please wait...", "fawe.web.generating.link.failed": "Failed to generate download link!", From 50ee45feddba07caba0949de44f1a73b8799195f Mon Sep 17 00:00:00 2001 From: Alexander Brandes Date: Thu, 28 Jul 2022 10:26:43 +0200 Subject: [PATCH 3/5] feat: Add support for 1.19.1 (#1887) --- .../bukkit/adapter/ext/fawe/v1_19_R1/PaperweightAdapter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_19_R1/PaperweightAdapter.java b/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_19_R1/PaperweightAdapter.java index 2379a7d12..571a50e9e 100644 --- a/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_19_R1/PaperweightAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/ext/fawe/v1_19_R1/PaperweightAdapter.java @@ -183,8 +183,8 @@ public final class PaperweightAdapter implements BukkitImplAdapter Date: Thu, 28 Jul 2022 10:29:59 +0200 Subject: [PATCH 4/5] build: Release 2.4.2 --- build.gradle.kts | 2 +- .../main/java/com/sk89q/worldedit/command/RegionCommands.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 0e5212dc6..ec87289a0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -41,7 +41,7 @@ ext { } } -version = String.format("%s-%s", rootVersion, buildNumber) +version = String.format("%s", rootVersion) if (!project.hasProperty("gitCommitHash")) { apply(plugin = "org.ajoberstar.grgit") diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/RegionCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/RegionCommands.java index 092c97777..5d3fb30e8 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/RegionCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/RegionCommands.java @@ -190,7 +190,7 @@ public class RegionCommands { } } - @Deprecated(since = "TODO", forRemoval = true) + @Deprecated(since = "2.4.2", forRemoval = true) @Command( name = "/setblocklight", aliases = "/setlight", @@ -201,7 +201,7 @@ public class RegionCommands { actor.print(Caption.of("fawe.info.light-blocks")); } - @Deprecated(since = "TODO", forRemoval = true) + @Deprecated(since = "2.4.2", forRemoval = true) @Command( name = "/setskylight", desc = "Set sky lighting in a selection" From 8d57c0b8885c59ad7f351b987bf4af6b3c005118 Mon Sep 17 00:00:00 2001 From: Alexander Brandes Date: Thu, 28 Jul 2022 10:32:10 +0200 Subject: [PATCH 5/5] build: Back to snapshot for development --- build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index ec87289a0..7502a4b09 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -23,7 +23,7 @@ logger.lifecycle(""" ******************************************* """) -var rootVersion by extra("2.4.2") +var rootVersion by extra("2.4.3") var snapshot by extra("SNAPSHOT") var revision: String by extra("") var buildNumber by extra("") @@ -41,7 +41,7 @@ ext { } } -version = String.format("%s", rootVersion) +version = String.format("%s-%s", rootVersion, buildNumber) if (!project.hasProperty("gitCommitHash")) { apply(plugin = "org.ajoberstar.grgit")