Signed-off-by: Chaoscaot <chaoscaot444@gmail.com>
Dieser Commit ist enthalten in:
Ursprung
1e3d387ff8
Commit
de6d8bbb10
@ -29,10 +29,9 @@ import com.sk89q.worldedit.world.registry.LegacyMapper;
|
|||||||
import de.steamwar.sql.NoClipboardException;
|
import de.steamwar.sql.NoClipboardException;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.*;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.logging.Level;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.google.common.base.Preconditions.checkNotNull;
|
import static com.google.common.base.Preconditions.checkNotNull;
|
||||||
@ -43,7 +42,7 @@ public class WorldEditWrapper14 implements WorldEditWrapper.IWorldEditWrapper {
|
|||||||
private static final ClipboardFormat SCHEM = BuiltInClipboardFormat.SPONGE_SCHEMATIC;
|
private static final ClipboardFormat SCHEM = BuiltInClipboardFormat.SPONGE_SCHEMATIC;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] getPlayerClipboard(Player player, boolean schemFormat) {
|
public InputStream getPlayerClipboard(Player player, boolean schemFormat) {
|
||||||
ClipboardHolder clipboardHolder;
|
ClipboardHolder clipboardHolder;
|
||||||
try {
|
try {
|
||||||
clipboardHolder = WorldEditWrapper.getWorldEditPlugin().getSession(player).getClipboard();
|
clipboardHolder = WorldEditWrapper.getWorldEditPlugin().getSession(player).getClipboard();
|
||||||
@ -55,7 +54,17 @@ public class WorldEditWrapper14 implements WorldEditWrapper.IWorldEditWrapper {
|
|||||||
if(clipboard == null)
|
if(clipboard == null)
|
||||||
throw new NoClipboardException();
|
throw new NoClipboardException();
|
||||||
|
|
||||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
PipedOutputStream outputStream = new PipedOutputStream();
|
||||||
|
PipedInputStream inputStream;
|
||||||
|
try {
|
||||||
|
inputStream = new PipedInputStream(outputStream, 4096);
|
||||||
|
}catch(NullPointerException e){
|
||||||
|
throw new RuntimeException(e.getMessage(), new IOException(e));
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new SecurityException("Could not init piped input stream", e);
|
||||||
|
}
|
||||||
|
|
||||||
|
new Thread(() -> {
|
||||||
try{
|
try{
|
||||||
if(schemFormat){
|
if(schemFormat){
|
||||||
ClipboardWriter writer = SCHEM.getWriter(outputStream);
|
ClipboardWriter writer = SCHEM.getWriter(outputStream);
|
||||||
@ -64,12 +73,17 @@ public class WorldEditWrapper14 implements WorldEditWrapper.IWorldEditWrapper {
|
|||||||
}else{
|
}else{
|
||||||
SCHEMATIC.getWriter(outputStream).write(clipboard);
|
SCHEMATIC.getWriter(outputStream).write(clipboard);
|
||||||
}
|
}
|
||||||
}catch(NullPointerException e){
|
}catch(NullPointerException | IOException e) {
|
||||||
throw new RuntimeException(e.getMessage(), new IOException(e));
|
Core.getInstance().getLogger().log(Level.SEVERE, "Could not write schematic", e);
|
||||||
} catch (IOException e) {
|
|
||||||
throw new RuntimeException(e.getMessage(), e);
|
|
||||||
}
|
}
|
||||||
return outputStream.toByteArray();
|
try {
|
||||||
|
outputStream.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
Core.getInstance().getLogger().log(Level.SEVERE, "Could not close schem writer", e);
|
||||||
|
}
|
||||||
|
}, "SchemWriter").start();
|
||||||
|
|
||||||
|
return inputStream;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -19,19 +19,18 @@ import com.sk89q.worldedit.world.registry.WorldData;
|
|||||||
import de.steamwar.sql.NoClipboardException;
|
import de.steamwar.sql.NoClipboardException;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.*;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStream;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Iterator;
|
import java.util.Iterator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.logging.Level;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
public class WorldEditWrapper8 implements WorldEditWrapper.IWorldEditWrapper {
|
public class WorldEditWrapper8 implements WorldEditWrapper.IWorldEditWrapper {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public byte[] getPlayerClipboard(Player player, boolean schemFormat) {
|
public InputStream getPlayerClipboard(Player player, boolean schemFormat) {
|
||||||
ClipboardHolder clipboardHolder;
|
ClipboardHolder clipboardHolder;
|
||||||
try {
|
try {
|
||||||
clipboardHolder = WorldEditWrapper.getWorldEditPlugin().getSession(player).getClipboard();
|
clipboardHolder = WorldEditWrapper.getWorldEditPlugin().getSession(player).getClipboard();
|
||||||
@ -43,13 +42,28 @@ public class WorldEditWrapper8 implements WorldEditWrapper.IWorldEditWrapper {
|
|||||||
if(clipboard == null)
|
if(clipboard == null)
|
||||||
throw new NoClipboardException();
|
throw new NoClipboardException();
|
||||||
|
|
||||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
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 {
|
try {
|
||||||
ClipboardFormat.SCHEMATIC.getWriter(outputStream).write(clipboard, clipboardHolder.getWorldData());
|
ClipboardFormat.SCHEMATIC.getWriter(outputStream).write(clipboard, clipboardHolder.getWorldData());
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
throw new RuntimeException(e.getMessage(), e);
|
Core.getInstance().getLogger().log(Level.SEVERE, "Could not write schematic", e);
|
||||||
}
|
}
|
||||||
return outputStream.toByteArray();
|
try {
|
||||||
|
outputStream.close();
|
||||||
|
} catch (IOException e) {
|
||||||
|
Core.getInstance().getLogger().log(Level.SEVERE, "Could not close schem writer", e);
|
||||||
|
}
|
||||||
|
}, "SchemWriter").start();
|
||||||
|
|
||||||
|
return inputStream;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -14,7 +14,7 @@ public class WorldEditWrapper {
|
|||||||
public static final IWorldEditWrapper impl = VersionDependent.getVersionImpl(Core.getInstance());
|
public static final IWorldEditWrapper impl = VersionDependent.getVersionImpl(Core.getInstance());
|
||||||
|
|
||||||
public interface IWorldEditWrapper {
|
public interface IWorldEditWrapper {
|
||||||
byte[] getPlayerClipboard(Player player, boolean schemFormat);
|
InputStream getPlayerClipboard(Player player, boolean schemFormat);
|
||||||
void setPlayerClipboard(Player player, InputStream is, boolean schemFormat);
|
void setPlayerClipboard(Player player, InputStream is, boolean schemFormat);
|
||||||
Clipboard getClipboard(InputStream is, boolean schemFormat) throws IOException;
|
Clipboard getClipboard(InputStream is, boolean schemFormat) throws IOException;
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ import de.steamwar.core.VersionedRunnable;
|
|||||||
import de.steamwar.core.WorldEditWrapper;
|
import de.steamwar.core.WorldEditWrapper;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.sql.Blob;
|
import java.sql.Blob;
|
||||||
@ -476,28 +477,16 @@ public class SchematicNode {
|
|||||||
public void saveFromBytes(byte[] bytes, boolean newFormat) {
|
public void saveFromBytes(byte[] bytes, boolean newFormat) {
|
||||||
if(isDir)
|
if(isDir)
|
||||||
throw new SecurityException("Node is Directory");
|
throw new SecurityException("Node is Directory");
|
||||||
Blob blob = SQL.blob();
|
updateDatabase(new ByteArrayInputStream(bytes), newFormat);
|
||||||
try {
|
|
||||||
blob.setBytes(1, bytes);
|
|
||||||
updateDatabase(blob, newFormat);
|
|
||||||
} catch (SQLException e) {
|
|
||||||
throw new SecurityException(e);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveFromPlayer(Player player, boolean newFormat) throws IOException, NoClipboardException {
|
private void saveFromPlayer(Player player, boolean newFormat) throws IOException, NoClipboardException {
|
||||||
if(isDir)
|
if(isDir)
|
||||||
throw new SecurityException("Node is Directory");
|
throw new SecurityException("Node is Directory");
|
||||||
Blob blob = SQL.blob();
|
updateDatabase(WorldEditWrapper.impl.getPlayerClipboard(player, newFormat), newFormat);
|
||||||
try {
|
|
||||||
blob.setBytes(1, WorldEditWrapper.impl.getPlayerClipboard(player, newFormat));
|
|
||||||
} catch (SQLException exception) {
|
|
||||||
throw new RuntimeException(exception.getMessage(), exception);
|
|
||||||
}
|
|
||||||
updateDatabase(blob, newFormat);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateDatabase(Blob blob, boolean newFormat) {
|
private void updateDatabase(InputStream blob, boolean newFormat) {
|
||||||
SQL.update("UPDATE SchematicNode SET NodeData = ?, NodeFormat = ? WHERE NodeId = ?", blob, newFormat, id);
|
SQL.update("UPDATE SchematicNode SET NodeData = ?, NodeFormat = ? WHERE NodeId = ?", blob, newFormat, id);
|
||||||
schemFormat = newFormat;
|
schemFormat = newFormat;
|
||||||
}
|
}
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren