Fix Replays for 1.21

This commit is contained in:
2026-03-29 13:05:41 +02:00
parent c0b192e2bf
commit e110033315
@@ -19,13 +19,15 @@
package de.steamwar.core; package de.steamwar.core;
import com.fastasyncworldedit.core.extent.clipboard.io.FastSchematicReaderV2;
import com.fastasyncworldedit.core.extent.clipboard.io.FastSchematicReaderV3; import com.fastasyncworldedit.core.extent.clipboard.io.FastSchematicReaderV3;
import com.sk89q.jnbt.NBTInputStream;
import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldedit.extension.platform.Actor;
import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.Clipboard;
import com.sk89q.worldedit.extent.clipboard.io.BuiltInClipboardFormat; import com.sk89q.worldedit.extent.clipboard.io.*;
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; import com.sk89q.worldedit.extent.clipboard.io.sponge.SpongeSchematicV1Reader;
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats; import com.sk89q.worldedit.extent.clipboard.io.sponge.SpongeSchematicV2Reader;
import com.sk89q.worldedit.extent.clipboard.io.ClipboardWriter; import com.sk89q.worldedit.extent.clipboard.io.sponge.SpongeSchematicV3Reader;
import com.sk89q.worldedit.math.Vector3; import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldedit.math.transform.Transform; import com.sk89q.worldedit.math.transform.Transform;
import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.regions.Region;
@@ -33,13 +35,15 @@ import com.sk89q.worldedit.session.ClipboardHolder;
import de.steamwar.sql.NodeData; import de.steamwar.sql.NodeData;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.util.Vector; import org.bukkit.util.Vector;
import org.enginehub.linbus.stream.LinBinaryIO;
import java.io.DataInputStream;
import java.io.FilterInputStream; import java.io.FilterInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.zip.GZIPInputStream; import java.util.function.Function;
public class WorldEditWrapper21 implements WorldEditWrapper { public class WorldEditWrapper21 implements WorldEditWrapper {
@@ -76,19 +80,37 @@ public class WorldEditWrapper21 implements WorldEditWrapper {
throw new IOException("No clipboard found"); throw new IOException("No clipboard found");
} }
private static final Function<InputStream, ClipboardReader> FastV3 = FastSchematicReaderV3::new;
private static final Function<InputStream, ClipboardReader> FastV2 = inputStream -> new FastSchematicReaderV2(new NBTInputStream(inputStream));
private static final Function<InputStream, ClipboardReader> McEdit = inputStream -> new MCEditSchematicReader(new NBTInputStream(inputStream));
private static final Function<InputStream, ClipboardReader> SpongeV3 = inputStream -> new SpongeSchematicV3Reader(LinBinaryIO.read(new DataInputStream(inputStream)));
private static final Function<InputStream, ClipboardReader> SpongeV2 = inputStream -> new SpongeSchematicV2Reader(LinBinaryIO.read(new DataInputStream(inputStream)));
private static final Function<InputStream, ClipboardReader> SpongeV1 = inputStream -> new SpongeSchematicV1Reader(LinBinaryIO.read(new DataInputStream(inputStream)));
private static final Function<InputStream, ClipboardReader>[] READERS = new Function[]{
FastV3,
FastV2,
SpongeV3,
SpongeV2,
SpongeV1,
McEdit
};
@Override @Override
public Clipboard getClipboard(InputStream inputStream) throws IOException { public Clipboard getClipboard(InputStream inputStream) throws IOException {
// Only supports getNativeFormat() both with GZIP as well as without!
ResetableInputStream is = new ResetableInputStream(inputStream); ResetableInputStream is = new ResetableInputStream(inputStream);
try { for (Function<InputStream, ClipboardReader> reader : READERS) {
return new FastSchematicReaderV3(inputStream).read(); FilterInputStream fis = new FilterInputStream(is) {
} catch (Exception e) { @Override
is.reset(); public void close() throws IOException {
} // Ignore close call!
try { }
return new FastSchematicReaderV3(new GZIPInputStream(is)).read(); };
} catch (Exception e) { try {
is.reset(); return reader.apply(fis).read();
} catch (Exception e) {
is.reset();
}
} }
is.close(); is.close();
throw new IOException("No clipboard found"); throw new IOException("No clipboard found");