Maybe, Fix Schematics Readers

This commit is contained in:
2024-12-03 22:43:14 +01:00
parent 57d4727f35
commit 0134ef1f61
18 changed files with 1010 additions and 125 deletions
@@ -77,7 +77,7 @@ public class ErrorHandler extends Handler {
return;
try {
SWException.log(message, stacktrace);
//SWException.log(message, stacktrace);
} catch (SecurityException e) {
Core.getInstance().getLogger().log(Level.INFO, "Could not log error in database", e);
}
@@ -26,19 +26,23 @@ import com.sk89q.worldedit.session.ClipboardHolder;
import de.steamwar.sql.NoClipboardException;
import com.sk89q.worldedit.math.transform.Transform;
import com.sk89q.worldedit.regions.Region;
import de.steamwar.sql.NodeData;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.bukkit.Bukkit;
import org.bukkit.entity.Player;
import org.bukkit.util.Vector;
import java.io.*;
import java.util.concurrent.CompletableFuture;
import java.util.logging.Level;
public interface WorldEditWrapper {
WorldEditWrapper impl = VersionDependent.getVersionImpl(Core.getInstance());
InputStream getPlayerClipboard(Player player, boolean schemFormat);
void setPlayerClipboard(Player player, InputStream is, boolean schemFormat);
Clipboard getClipboard(InputStream is, boolean schemFormat) throws IOException;
InputStream getPlayerClipboard(Player player);
void setPlayerClipboard(Player player, InputStream is, NodeData.SchematicFormat schemFormat);
Clipboard getClipboard(InputStream is, NodeData.SchematicFormat schemFormat) throws IOException;
Vector getOrigin(Clipboard clipboard);
Vector getMinimum(Region region);
@@ -49,7 +53,7 @@ public interface WorldEditWrapper {
return (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit");
}
public static InputStream getPlayerClipboard(Player player, boolean schemFormat, SchematicWriter consumer) {
static InputStream getPlayerClipboard(Player player, SchematicWriter consumer) {
ClipboardHolder clipboardHolder;
try {
clipboardHolder = WorldEditWrapper.getWorldEditPlugin().getSession(player).getClipboard();
@@ -85,7 +89,17 @@ public interface WorldEditWrapper {
return inputStream;
}
public static interface SchematicWriter {
static NodeData.SchematicFormat getNativeFormat() {
if (Core.getVersion() <= 12) {
return NodeData.SchematicFormat.MCEDIT;
} else if (Core.getVersion() <= 20) {
return NodeData.SchematicFormat.V2;
} else {
return NodeData.SchematicFormat.V3;
}
}
interface SchematicWriter {
void write(OutputStream outputStream, Clipboard clipboard, ClipboardHolder holder) throws IOException;
}
}
@@ -36,7 +36,7 @@ import java.util.zip.GZIPInputStream;
public class SchematicData {
public static Clipboard clipboardFromStream(InputStream is, boolean schemFormat) {
public static Clipboard clipboardFromStream(InputStream is, NodeData.SchematicFormat schemFormat) {
try {
return WorldEditWrapper.impl.getClipboard(is, schemFormat);
} catch (IOException e) {
@@ -61,15 +61,11 @@ public class SchematicData {
}
public void saveFromPlayer(Player player) throws IOException, NoClipboardException {
saveFromPlayer(player, Core.getVersion() > 12);
}
public void saveFromPlayer(Player player, boolean newFormat) throws IOException, NoClipboardException {
data.saveFromStream(WorldEditWrapper.impl.getPlayerClipboard(player, newFormat), newFormat);
data.saveFromStream(WorldEditWrapper.impl.getPlayerClipboard(player), WorldEditWrapper.getNativeFormat());
}
@Deprecated
public void saveFromBytes(byte[] bytes, boolean newFormat) {
public void saveFromBytes(byte[] bytes, NodeData.SchematicFormat newFormat) {
data.saveFromStream(new ByteArrayInputStream(bytes), newFormat);
}
}