From a6a0b5eb6609b376cbcafa4bf86117dff60e7d41 Mon Sep 17 00:00:00 2001 From: Hannes Greule Date: Sat, 27 Aug 2022 16:48:54 +0200 Subject: [PATCH 1/8] fix: avoid recursive LegacyMapper initialization (#1922) --- .../factory/parser/DefaultBlockParser.java | 2 +- .../sk89q/worldedit/world/block/BlockTypes.java | 17 +++++++++++------ 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/DefaultBlockParser.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/DefaultBlockParser.java index e37e5b0fa..4d8523f84 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/DefaultBlockParser.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/factory/parser/DefaultBlockParser.java @@ -455,7 +455,7 @@ public class DefaultBlockParser extends InputParser { state = item.getType().getBlockType().getDefaultState(); nbt = item.getNbtData(); } else { - BlockType type = BlockTypes.parse(typeString.toLowerCase(Locale.ROOT)); + BlockType type = BlockTypes.parse(typeString.toLowerCase(Locale.ROOT), context); if (type != null) { state = type.getDefaultState(); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockTypes.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockTypes.java index 152c4df9b..47e083809 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockTypes.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockTypes.java @@ -23,6 +23,7 @@ import com.fastasyncworldedit.core.command.SuggestInputParseException; import com.fastasyncworldedit.core.util.JoinedCharSequence; import com.fastasyncworldedit.core.util.StringMan; import com.sk89q.worldedit.extension.input.InputParseException; +import com.sk89q.worldedit.extension.input.ParserContext; import com.sk89q.worldedit.world.registry.LegacyMapper; import javax.annotation.Nullable; @@ -1948,6 +1949,9 @@ public final class BlockTypes { */ public static BlockType parse(final String type) throws InputParseException { + return parse(type, new ParserContext()); + } + public static BlockType parse(final String type, final ParserContext context) throws InputParseException { final String inputLower = type.toLowerCase(Locale.ROOT); String input = inputLower; @@ -1958,13 +1962,14 @@ public final class BlockTypes { if (result != null) { return result; } - - try { - BlockStateHolder block = LegacyMapper.getInstance().getBlockFromLegacy(input); - if (block != null) { - return block.getBlockType(); + if (context.isTryingLegacy()) { + try { + BlockStateHolder block = LegacyMapper.getInstance().getBlockFromLegacy(input); + if (block != null) { + return block.getBlockType(); + } + } catch (NumberFormatException | IndexOutOfBoundsException ignored) { } - } catch (NumberFormatException | IndexOutOfBoundsException ignored) { } throw new SuggestInputParseException("Does not match a valid block type: " + inputLower, inputLower, () -> Stream.of( From a51863c6f006f2a3587e4dd16bf565ed1d229fd3 Mon Sep 17 00:00:00 2001 From: Hannes Greule Date: Sat, 27 Aug 2022 16:49:01 +0200 Subject: [PATCH 2/8] fix: use proper level data for regen (#1921) --- .../impl/fawe/v1_17_R1_2/regen/PaperweightRegen.java | 9 +++++---- .../impl/fawe/v1_18_R2/regen/PaperweightRegen.java | 5 ++--- .../impl/fawe/v1_19_R1/regen/PaperweightRegen.java | 5 ++--- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_17_R1_2/regen/PaperweightRegen.java b/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_17_R1_2/regen/PaperweightRegen.java index 6ea695d8c..3d9694af9 100644 --- a/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_17_R1_2/regen/PaperweightRegen.java +++ b/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_17_R1_2/regen/PaperweightRegen.java @@ -79,6 +79,7 @@ import java.util.Collections; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.OptionalLong; import java.util.Random; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentHashMap; @@ -217,10 +218,10 @@ public class PaperweightRegen extends Regenerator Date: Mon, 29 Aug 2022 17:21:21 +0200 Subject: [PATCH 3/8] Update upstream 7e61ff1 Work around invalid legacy values in schematics (2171) --- .../extent/clipboard/io/MCEditSchematicReader.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/MCEditSchematicReader.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/MCEditSchematicReader.java index 760598ad5..aebef3e9a 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/MCEditSchematicReader.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/MCEditSchematicReader.java @@ -484,7 +484,12 @@ public class MCEditSchematicReader extends NBTSchematicReader { } private BlockState getBlockState(int id, int data) { - return LegacyMapper.getInstance().getBlockFromLegacy(id, data); + BlockState foundBlock = LegacyMapper.getInstance().getBlockFromLegacy(id, data); + if (foundBlock == null && data != 0) { + // Some schematics contain invalid data values, so try without the data value + return LegacyMapper.getInstance().getBlockFromLegacy(id, 0); + } + return foundBlock; } @Override From 8233f132d4ac56129b74e6ccc527abbd3b2aeec2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 29 Aug 2022 21:31:06 +0200 Subject: [PATCH 4/8] Update dependency com.github.TownyAdvanced:Towny to v0.98.3.6 (#1926) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 689fb110a..a992f52bc 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ griefprevention = "16.18" griefdefender = "2.1.0-SNAPSHOT" mcore = "7.0.1" residence = "4.5._13.1" -towny = "0.98.3.5" +towny = "0.98.3.6" redprotect = "1.9.6" # Third party From 3b109ba3ffd73deafcfa03e592068b5c8b666ac9 Mon Sep 17 00:00:00 2001 From: Alexander Brandes Date: Sun, 4 Sep 2022 23:30:02 +0200 Subject: [PATCH 5/8] Upload files to curseforge on release (#1929) * chore: Upload files to curseforge on release * chore: Use direct artifact path --- .github/workflows/upload-release-assets.yml | 23 +++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/.github/workflows/upload-release-assets.yml b/.github/workflows/upload-release-assets.yml index 93587ed76..423c49802 100644 --- a/.github/workflows/upload-release-assets.yml +++ b/.github/workflows/upload-release-assets.yml @@ -26,3 +26,26 @@ jobs: files: 'worldedit-bukkit/build/libs/FastAsyncWorldEdit-Bukkit-*.jar' repo-token: ${{ secrets.GITHUB_TOKEN }} release-tag: ${{ github.event.release.tag_name }} + + upload-to-curseforge: + runs-on: ubuntu-latest + steps: + - uses: Kir-Antipov/mc-publish@v3.2 + with: + curseforge-id: 103525 + curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} + + files-primary: worldedit-bukkit/build/libs/FastAsyncWorldEdit-Bukkit-*.jar + + name: FastAsyncWorldEdit ${{ github.event.release.tag_name }} + version: ${{ github.event.release.tag_name }} + version-type: release + + game-versions: | + 1.19.1 + 1.19 + 1.18.2 + 1.18.1 + 1.18 + 1.17 + 1.16 From 5da558e24c9e13b91327063c07a687d140dfdd46 Mon Sep 17 00:00:00 2001 From: Hannes Greule Date: Sun, 4 Sep 2022 23:30:32 +0200 Subject: [PATCH 6/8] feature: support paper chunk system (#1884) * avoid usage of ticking chunk future on paper * fix entity handling * fix entity handling but on spigot * seems like no one uses spigot Co-authored-by: Alexander Brandes --- .../PaperweightPlatformAdapter.java | 2 +- .../v1_18_R2/PaperweightPlatformAdapter.java | 2 +- .../fawe/v1_19_R1/PaperweightFaweAdapter.java | 17 -------------- .../fawe/v1_19_R1/PaperweightGetBlocks.java | 2 +- .../v1_19_R1/PaperweightPlatformAdapter.java | 22 +++++++++++-------- .../sk89q/worldedit/bukkit/BukkitWorld.java | 9 +++----- 6 files changed, 19 insertions(+), 35 deletions(-) diff --git a/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_17_R1_2/PaperweightPlatformAdapter.java b/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_17_R1_2/PaperweightPlatformAdapter.java index 4b446d620..3ea9df730 100644 --- a/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_17_R1_2/PaperweightPlatformAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_17_1/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_17_R1_2/PaperweightPlatformAdapter.java @@ -473,7 +473,7 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { } static List getEntities(LevelChunk chunk) { - return chunk.level.entityManager.getEntities(new ChunkPos(chunk.locX, chunk.locZ)); + return chunk.level.entityManager.getEntities(chunk.getPos()); } } 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 8546de630..9de310b96 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 @@ -588,7 +588,7 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { } static List getEntities(LevelChunk chunk) { - return chunk.level.entityManager.getEntities(new ChunkPos(chunk.locX, chunk.locZ)); + return chunk.level.entityManager.getEntities(chunk.getPos()); } record FakeIdMapBlock(int size) implements IdMap { diff --git a/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R1/PaperweightFaweAdapter.java b/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R1/PaperweightFaweAdapter.java index 997e11e21..f05648b0d 100644 --- a/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R1/PaperweightFaweAdapter.java +++ b/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R1/PaperweightFaweAdapter.java @@ -585,23 +585,6 @@ public final class PaperweightFaweAdapter extends CachedBukkitAdapter implements return true; } - @Override - public List getEntities(org.bukkit.World world) { - // Quickly add each entity to a list copy. - List mcEntities = new ArrayList<>(); - ((CraftWorld) world).getHandle().entityManager.getEntityGetter().getAll().forEach(mcEntities::add); - - List list = new ArrayList<>(); - mcEntities.forEach((mcEnt) -> { - org.bukkit.entity.Entity bukkitEntity = mcEnt.getBukkitEntity(); - if (bukkitEntity.isValid()) { - list.add(bukkitEntity); - } - - }); - return list; - } - @Override public BaseItemStack adapt(org.bukkit.inventory.ItemStack itemStack) { final ItemStack nmsStack = CraftItemStack.asNMSCopy(itemStack); diff --git a/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R1/PaperweightGetBlocks.java b/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R1/PaperweightGetBlocks.java index 3c543d2c7..9ee467201 100644 --- a/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R1/PaperweightGetBlocks.java +++ b/worldedit-bukkit/adapters/adapter-1_19/src/main/java/com/sk89q/worldedit/bukkit/adapter/impl/fawe/v1_19_R1/PaperweightGetBlocks.java @@ -676,7 +676,7 @@ public class PaperweightGetBlocks extends CharGetBlocks implements BukkitGetBloc } if (Settings.settings().EXPERIMENTAL.REMOVE_ENTITY_FROM_WORLD_ON_CHUNK_FAIL) { for (UUID uuid : entityRemoves) { - Entity entity = nmsWorld.entityManager.getEntityGetter().get(uuid); + Entity entity = nmsWorld.getEntities().get(uuid); if (entity != null) { removeEntity(entity); } 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 aa87aceea..307a52d77 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 @@ -278,20 +278,21 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { return; } ChunkPos coordIntPair = new ChunkPos(chunkX, chunkZ); - // UNLOADED_CHUNK - Optional optional = ((Either) chunkHolder - .getTickingChunkFuture() - .getNow(ChunkHolder.UNLOADED_LEVEL_CHUNK)).left(); + LevelChunk levelChunk; if (PaperLib.isPaper()) { // getChunkAtIfLoadedImmediately is paper only - optional = optional.or(() -> Optional.ofNullable(nmsWorld + levelChunk = nmsWorld .getChunkSource() - .getChunkAtIfLoadedImmediately(chunkX, chunkZ))); + .getChunkAtIfLoadedImmediately(chunkX, chunkZ); + } else { + levelChunk = ((Optional) ((Either) chunkHolder + .getTickingChunkFuture() // method is not present with new paper chunk system + .getNow(ChunkHolder.UNLOADED_LEVEL_CHUNK)).left()) + .orElse(null); } - if (optional.isEmpty()) { + if (levelChunk == null) { return; } - LevelChunk levelChunk = optional.get(); TaskManager.taskManager().task(() -> { ClientboundLevelChunkWithLightPacket packet; if (PaperLib.isPaper()) { @@ -589,7 +590,10 @@ public final class PaperweightPlatformAdapter extends NMSAdapter { } static List getEntities(LevelChunk chunk) { - return chunk.level.entityManager.getEntities(new ChunkPos(chunk.locX, chunk.locZ)); + if (PaperLib.isPaper()) { + return Arrays.asList(chunk.entities.getRawData()); + } + return chunk.level.entityManager.getEntities(chunk.getPos()); } record FakeIdMapBlock(int size) implements IdMap { 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 7530c41ed..66bf6648f 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 @@ -141,10 +141,9 @@ public class BukkitWorld extends AbstractWorld { @Override public List getEntities(Region region) { - //FAWE start - allow async entity retrieval - List ents = WorldEditPlugin.getInstance().getBukkitImplAdapter().getEntities(getWorld()); - //FAWE end + World world = getWorld(); + List ents = world.getEntities(); List entities = new ArrayList<>(); for (Entity ent : ents) { if (region.contains(BukkitAdapter.asBlockVector(ent.getLocation()))) { @@ -157,9 +156,7 @@ public class BukkitWorld extends AbstractWorld { @Override public List getEntities() { List list = new ArrayList<>(); - //FAWE start - allow async entity retrieval - for (Entity entity : WorldEditPlugin.getInstance().getBukkitImplAdapter().getEntities(getWorld())) { - //FAWE end + for (Entity entity : getWorld().getEntities()) { list.add(BukkitAdapter.adapt(entity)); } return list; From 122b32b9f04e1e4b314cc041d90af4d6cc4e56af Mon Sep 17 00:00:00 2001 From: Alexander Brandes Date: Mon, 5 Sep 2022 11:26:31 +0200 Subject: [PATCH 7/8] Release 2.4.5 --- .github/workflows/upload-release-assets.yml | 9 +++------ build.gradle.kts | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/.github/workflows/upload-release-assets.yml b/.github/workflows/upload-release-assets.yml index 423c49802..cbfa9eafa 100644 --- a/.github/workflows/upload-release-assets.yml +++ b/.github/workflows/upload-release-assets.yml @@ -26,16 +26,13 @@ jobs: files: 'worldedit-bukkit/build/libs/FastAsyncWorldEdit-Bukkit-*.jar' repo-token: ${{ secrets.GITHUB_TOKEN }} release-tag: ${{ github.event.release.tag_name }} - - upload-to-curseforge: - runs-on: ubuntu-latest - steps: - - uses: Kir-Antipov/mc-publish@v3.2 + - name: Upload release to CurseForge + uses: Kir-Antipov/mc-publish@v3.2 with: curseforge-id: 103525 curseforge-token: ${{ secrets.CURSEFORGE_TOKEN }} - files-primary: worldedit-bukkit/build/libs/FastAsyncWorldEdit-Bukkit-*.jar + files-primary: 'worldedit-bukkit/build/libs/FastAsyncWorldEdit-Bukkit-*.jar' name: FastAsyncWorldEdit ${{ github.event.release.tag_name }} version: ${{ github.event.release.tag_name }} diff --git a/build.gradle.kts b/build.gradle.kts index 7ea9ffb46..af6b84df8 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") From 673b467ad9e8b6e5e35a9f50e87864c205b4ac3e Mon Sep 17 00:00:00 2001 From: Alexander Brandes Date: Mon, 5 Sep 2022 11:29:51 +0200 Subject: [PATCH 8/8] Back to snapshot for development --- build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle.kts b/build.gradle.kts index af6b84df8..7ea9ffb46 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -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")