From 025ec2a850470e7b55d39a16c48655533ccb7b6b Mon Sep 17 00:00:00 2001 From: Chaoscaot Date: Wed, 1 Jan 2025 14:12:38 +0100 Subject: [PATCH] Hotfix: 1.20 Schematic Reader --- .../de/steamwar/core/WorldEditWrapper14.java | 13 ++++++-- .../de/steamwar/core/WorldEditWrapper18.java | 30 +++++-------------- .../de/steamwar/core/WorldEditWrapper21.java | 1 + 3 files changed, 18 insertions(+), 26 deletions(-) diff --git a/SpigotCore/SpigotCore_14/src/de/steamwar/core/WorldEditWrapper14.java b/SpigotCore/SpigotCore_14/src/de/steamwar/core/WorldEditWrapper14.java index 6f5d0ffc..3251e5bc 100644 --- a/SpigotCore/SpigotCore_14/src/de/steamwar/core/WorldEditWrapper14.java +++ b/SpigotCore/SpigotCore_14/src/de/steamwar/core/WorldEditWrapper14.java @@ -54,6 +54,7 @@ import java.util.stream.Collectors; import static com.google.common.base.Preconditions.checkNotNull; +@SuppressWarnings("removal") public class WorldEditWrapper14 implements WorldEditWrapper { @Override @@ -88,7 +89,7 @@ public class WorldEditWrapper14 implements WorldEditWrapper { switch (schemFormat) { case SPONGE_V2: case SPONGE_V3: - return new SpongeSchematicReader(new NBTInputStream(is)).read(); + return new SpongeSchematicReader(new NBTInputStream(is), this).read(); case MCEDIT: return new MCEditSchematicReader(new NBTInputStream(is)).read(); default: @@ -126,6 +127,10 @@ public class WorldEditWrapper14 implements WorldEditWrapper { return NodeData.SchematicFormat.SPONGE_V2; } + public Map applyDataFixer(DataFixer fixer, int dataVersion, Map values) { + return fixer.fixUp(DataFixer.FixTypes.BLOCK_ENTITY, new CompoundTag(values), dataVersion).getValue(); + } + private static class MCEditSchematicReader extends NBTSchematicReader { private final NBTInputStream inputStream; @@ -396,15 +401,17 @@ public class WorldEditWrapper14 implements WorldEditWrapper { private int schematicVersion = -1; private int dataVersion = -1; private boolean faweSchem = false; + private final WorldEditWrapper14 wrapper; /** * Create a new instance. * * @param inputStream the input stream to read from */ - public SpongeSchematicReader(NBTInputStream inputStream) { + public SpongeSchematicReader(NBTInputStream inputStream, WorldEditWrapper14 wrapper) { checkNotNull(inputStream); this.inputStream = inputStream; + this.wrapper = wrapper; } @Override @@ -572,7 +579,7 @@ public class WorldEditWrapper14 implements WorldEditWrapper { values.remove("Id"); values.remove("Pos"); if (fixer != null) { - tileEntity = fixer.fixUp(DataFixer.FixTypes.BLOCK_ENTITY, new CompoundTag(values), dataVersion).getValue(); + tileEntity = wrapper.applyDataFixer(fixer, dataVersion, values); } else { tileEntity = values; } diff --git a/SpigotCore/SpigotCore_18/src/de/steamwar/core/WorldEditWrapper18.java b/SpigotCore/SpigotCore_18/src/de/steamwar/core/WorldEditWrapper18.java index 1c674150..1c216a1a 100644 --- a/SpigotCore/SpigotCore_18/src/de/steamwar/core/WorldEditWrapper18.java +++ b/SpigotCore/SpigotCore_18/src/de/steamwar/core/WorldEditWrapper18.java @@ -19,34 +19,18 @@ package de.steamwar.core; -import com.sk89q.jnbt.NBTInputStream; -import com.sk89q.worldedit.extent.clipboard.Clipboard; -import com.sk89q.worldedit.extent.clipboard.io.*; -import de.steamwar.sql.NoClipboardException; -import de.steamwar.sql.NodeData; +import com.sk89q.jnbt.AdventureNBTConverter; +import com.sk89q.jnbt.CompoundTag; +import com.sk89q.jnbt.Tag; +import com.sk89q.worldedit.world.DataFixer; -import java.io.IOException; -import java.io.InputStream; +import java.util.Map; public class WorldEditWrapper18 extends WorldEditWrapper14 { @Override @SuppressWarnings("removal") - public Clipboard getClipboard(InputStream is, NodeData.SchematicFormat schemFormat) throws IOException { - NBTInputStream nbtStream = new NBTInputStream(is); - //Use FAWE reader due to FAWE capability of reading corrupt FAWE schems - try { - switch (schemFormat) { - case MCEDIT: - return new MCEditSchematicReader(nbtStream).read(); - case SPONGE_V2: - case SPONGE_V3: - return new WorldEditWrapper14.SpongeSchematicReader(nbtStream).read(); - default: - throw new IllegalArgumentException("Unsupported schematic format"); - } - } catch (NullPointerException e) { - throw new NoClipboardException(); - } + public Map applyDataFixer(DataFixer fixer, int dataVersion, Map values) { + return ((CompoundTag) AdventureNBTConverter.fromAdventure(fixer.fixUp(DataFixer.FixTypes.BLOCK_ENTITY, new CompoundTag(values).asBinaryTag(), dataVersion))).getValue(); } } diff --git a/SpigotCore/SpigotCore_21/src/de/steamwar/core/WorldEditWrapper21.java b/SpigotCore/SpigotCore_21/src/de/steamwar/core/WorldEditWrapper21.java index d93c095d..52947f3a 100644 --- a/SpigotCore/SpigotCore_21/src/de/steamwar/core/WorldEditWrapper21.java +++ b/SpigotCore/SpigotCore_21/src/de/steamwar/core/WorldEditWrapper21.java @@ -67,6 +67,7 @@ public class WorldEditWrapper21 implements WorldEditWrapper { } @Override + @SuppressWarnings("removal") public Clipboard getClipboard(InputStream is, NodeData.SchematicFormat schemFormat) throws IOException { return switch (schemFormat) { case MCEDIT -> new MCEditSchematicReader(new NBTInputStream(is)).read();