forked from SteamWar/SteamWar
Update WorldEditWrapper21
This commit is contained in:
@@ -19,13 +19,18 @@
|
||||
|
||||
package de.steamwar.core;
|
||||
|
||||
import com.sk89q.worldedit.EmptyClipboardException;
|
||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
|
||||
import com.sk89q.worldedit.session.ClipboardHolder;
|
||||
import de.steamwar.sql.NoClipboardException;
|
||||
import org.apache.logging.log4j.util.TriConsumer;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.*;
|
||||
import java.util.logging.Level;
|
||||
|
||||
public class WorldEditWrapper {
|
||||
private WorldEditWrapper() {}
|
||||
@@ -41,4 +46,40 @@ public class WorldEditWrapper {
|
||||
public static WorldEditPlugin getWorldEditPlugin() {
|
||||
return (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit");
|
||||
}
|
||||
|
||||
public static InputStream getPlayerClipboard(Player player, boolean schemFormat, TriConsumer<OutputStream, Clipboard, ClipboardHolder> consumer) {
|
||||
ClipboardHolder clipboardHolder;
|
||||
try {
|
||||
clipboardHolder = WorldEditWrapper.getWorldEditPlugin().getSession(player).getClipboard();
|
||||
} catch (EmptyClipboardException e) {
|
||||
throw new NoClipboardException();
|
||||
}
|
||||
|
||||
Clipboard clipboard = clipboardHolder.getClipboard();
|
||||
if(clipboard == null)
|
||||
throw new NoClipboardException();
|
||||
|
||||
PipedOutputStream outputStream = new PipedOutputStream();
|
||||
PipedInputStream inputStream;
|
||||
try {
|
||||
inputStream = new PipedInputStream(outputStream, 4096);
|
||||
} catch (IOException e) {
|
||||
throw new SecurityException("Could not init piped input stream", e);
|
||||
}
|
||||
|
||||
new Thread(() -> {
|
||||
try {
|
||||
consumer.accept(outputStream, clipboard, clipboardHolder);
|
||||
} catch (Exception e) {
|
||||
Core.getInstance().getLogger().log(Level.SEVERE, "Could not write schematic", e);
|
||||
}
|
||||
try {
|
||||
outputStream.close();
|
||||
} catch (IOException e) {
|
||||
Core.getInstance().getLogger().log(Level.SEVERE, "Could not close schem writer", e);
|
||||
}
|
||||
}, "SchemWriter").start();
|
||||
|
||||
return inputStream;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user