diff --git a/verification/src/changes/accepted-cli-public-api-changes.json b/verification/src/changes/accepted-cli-public-api-changes.json index a5023f9fa5..aa3d07f3b3 100644 --- a/verification/src/changes/accepted-cli-public-api-changes.json +++ b/verification/src/changes/accepted-cli-public-api-changes.json @@ -142,5 +142,14 @@ "CONSTRUCTOR_REMOVED" ] } + ], + "Constructor added with required data to not trigger race condition": [ + { + "type": "com.sk89q.worldedit.cli.schematic.ClipboardWorld", + "member": "Constructor com.sk89q.worldedit.cli.schematic.ClipboardWorld(java.io.File,com.sk89q.worldedit.extent.clipboard.Clipboard,java.lang.String)", + "changes": [ + "CONSTRUCTOR_REMOVED" + ] + } ] } diff --git a/worldedit-cli/src/main/java/com/sk89q/worldedit/cli/CLIPlatform.java b/worldedit-cli/src/main/java/com/sk89q/worldedit/cli/CLIPlatform.java index fabb2c800e..929a08de6c 100644 --- a/worldedit-cli/src/main/java/com/sk89q/worldedit/cli/CLIPlatform.java +++ b/worldedit-cli/src/main/java/com/sk89q/worldedit/cli/CLIPlatform.java @@ -126,6 +126,9 @@ public CLIConfiguration getConfiguration() { @Override public String getVersion() { + if (app.getInternalVersion() == null) { + return "unknown"; // Run from IDE + } return app.getInternalVersion(); } @@ -136,7 +139,7 @@ public String getPlatformName() { @Override public String getPlatformVersion() { - return app.getInternalVersion(); + return this.getVersion(); } @Override diff --git a/worldedit-cli/src/main/java/com/sk89q/worldedit/cli/CLIWorldEdit.java b/worldedit-cli/src/main/java/com/sk89q/worldedit/cli/CLIWorldEdit.java index 34d0865674..2818876c6b 100644 --- a/worldedit-cli/src/main/java/com/sk89q/worldedit/cli/CLIWorldEdit.java +++ b/worldedit-cli/src/main/java/com/sk89q/worldedit/cli/CLIWorldEdit.java @@ -341,6 +341,7 @@ public static void main(String[] args) { try (ClipboardReader clipboardReader = format.getReader(Files.newInputStream(file.toPath(), StandardOpenOption.READ))) { world = new ClipboardWorld( file, + format, clipboardReader.read(), file.getName() ); diff --git a/worldedit-cli/src/main/java/com/sk89q/worldedit/cli/schematic/ClipboardWorld.java b/worldedit-cli/src/main/java/com/sk89q/worldedit/cli/schematic/ClipboardWorld.java index ae42d0fd21..5a264ab687 100644 --- a/worldedit-cli/src/main/java/com/sk89q/worldedit/cli/schematic/ClipboardWorld.java +++ b/worldedit-cli/src/main/java/com/sk89q/worldedit/cli/schematic/ClipboardWorld.java @@ -29,7 +29,7 @@ import com.sk89q.worldedit.entity.Entity; import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.clipboard.Clipboard; -import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats; +import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; import com.sk89q.worldedit.extent.clipboard.io.ClipboardWriter; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.Vector3; @@ -56,13 +56,15 @@ public class ClipboardWorld extends AbstractWorld implements Clipboard, CLIWorld { private final File file; + private final ClipboardFormat format; private final Clipboard clipboard; private final String name; private boolean dirty = false; - public ClipboardWorld(File file, Clipboard clipboard, String name) { + public ClipboardWorld(File file, ClipboardFormat format, Clipboard clipboard, String name) { this.file = file; + this.format = format; this.clipboard = clipboard; this.name = name; } @@ -74,7 +76,7 @@ public String getName() { @Override public String id() { - return getName().replace(" ", "_").toLowerCase(Locale.ROOT); + return name.replace(" ", "_").toLowerCase(Locale.ROOT); } @Override @@ -208,7 +210,7 @@ public BlockVector3 getMinimumPoint() { @Override public void save(boolean force) { if (dirty || force) { - try (ClipboardWriter writer = ClipboardFormats.findByFile(file).getWriter(new FileOutputStream(file))) { + try (ClipboardWriter writer = format.getWriter(new FileOutputStream(file))) { writer.write(this); dirty = false; } catch (IOException e) {