Add Schematic Revisions

This commit is contained in:
2025-07-01 21:39:08 +02:00
parent 9988774fb4
commit 4c98ce4aff
18 changed files with 165 additions and 69 deletions
@@ -47,11 +47,25 @@ public class SchematicData {
private final NodeData data;
public SchematicData(SchematicNode node) {
this.data = NodeData.get(node);
this.data = NodeData.getLatest(node);
if(node.isDir())
throw new SecurityException("Node is Directory");
}
public SchematicData(SchematicNode node, int revision) {
if(node.isDir())
throw new SecurityException("Node is Directory");
if (revision < 1) {
this.data = NodeData.getLatest(node);
} else {
if (NodeData.getRevisions(node) < revision) {
throw new IllegalArgumentException("Revision " + revision + " does not exist");
}
this.data = NodeData.get(node, revision);
}
}
public Clipboard load() throws IOException, NoClipboardException {
return WorldEditWrapper.impl.getClipboard(data.schemData(), data.getNodeFormat());
}
@@ -60,12 +74,12 @@ public class SchematicData {
WorldEditWrapper.impl.setPlayerClipboard(player, data.schemData(), data.getNodeFormat());
}
public void saveFromPlayer(Player player) throws IOException, NoClipboardException {
data.saveFromStream(WorldEditWrapper.impl.getPlayerClipboard(player), WorldEditWrapper.impl.getNativeFormat());
public static void saveFromPlayer(Player player, SchematicNode node) throws IOException, NoClipboardException {
NodeData.saveFromStream(node, WorldEditWrapper.impl.getPlayerClipboard(player), WorldEditWrapper.impl.getNativeFormat());
}
@Deprecated
public void saveFromBytes(byte[] bytes, NodeData.SchematicFormat newFormat) {
data.saveFromStream(new ByteArrayInputStream(bytes), newFormat);
public static void saveFromBytes(SchematicNode node, byte[] bytes, NodeData.SchematicFormat newFormat) {
NodeData.saveFromStream(node, new ByteArrayInputStream(bytes), newFormat);
}
}