Rework to save schematics in database
Dieser Commit ist enthalten in:
Ursprung
ceee166920
Commit
00898f996a
@ -33,5 +33,28 @@
|
||||
<version>1.12</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>FAWE</artifactId>
|
||||
<version>1.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>WorldEdit</artifactId>
|
||||
<version>1.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>SpigotCore_API</artifactId>
|
||||
<version>2.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>SpigotCore_8</artifactId>
|
||||
<version>2.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
42
SpigotCore_12/src/de/steamwar/sql/Schematic_12.java
Normale Datei
42
SpigotCore_12/src/de/steamwar/sql/Schematic_12.java
Normale Datei
@ -0,0 +1,42 @@
|
||||
package de.steamwar.sql;
|
||||
|
||||
import com.boydti.fawe.FaweAPI;
|
||||
import com.sk89q.worldedit.EmptyClipboardException;
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
|
||||
import com.sk89q.worldedit.session.ClipboardHolder;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
class Schematic_12 {
|
||||
private Schematic_12(){}
|
||||
|
||||
static byte[] getPlayerClipboard(Player player) throws IOException, NoClipboardException {
|
||||
ClipboardHolder clipboardHolder;
|
||||
try {
|
||||
clipboardHolder = FaweAPI.wrapPlayer(player).getSession().getClipboard();
|
||||
} catch (EmptyClipboardException e) {
|
||||
throw new NoClipboardException();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
Clipboard clipboard = clipboardHolder.getClipboard();
|
||||
if(clipboard == null)
|
||||
throw new NoClipboardException();
|
||||
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
ClipboardFormat.SCHEMATIC.getWriter(outputStream).write(clipboard, clipboardHolder.getWorldData());
|
||||
return outputStream.toByteArray();
|
||||
}
|
||||
|
||||
static void setPlayerClipboard(Player player, InputStream is) throws IOException, NoClipboardException {
|
||||
Schematic_8.setPlayerClipboard(player, is);
|
||||
}
|
||||
|
||||
static Clipboard getClipboard(InputStream is) throws IOException, NoClipboardException {
|
||||
return Schematic_8.getClipboard(is);
|
||||
}
|
||||
}
|
@ -33,5 +33,16 @@
|
||||
<version>1.14</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>FAWE</artifactId>
|
||||
<version>1.14</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>SpigotCore_API</artifactId>
|
||||
<version>2.0</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
80
SpigotCore_14/src/de/steamwar/sql/Schematic_14.java
Normale Datei
80
SpigotCore_14/src/de/steamwar/sql/Schematic_14.java
Normale Datei
@ -0,0 +1,80 @@
|
||||
package de.steamwar.sql;
|
||||
|
||||
import com.boydti.fawe.FaweAPI;
|
||||
import com.sk89q.worldedit.EmptyClipboardException;
|
||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||
import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats;
|
||||
import com.sk89q.worldedit.session.ClipboardHolder;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
class Schematic_14 {
|
||||
private Schematic_14(){}
|
||||
|
||||
private static final String SCHEM = "schem";
|
||||
private static final String SCHEMATIC = "schematic";
|
||||
|
||||
static byte[] getPlayerClipboard(Player player, boolean schemFormat) throws IOException, NoClipboardException {
|
||||
ClipboardHolder clipboardHolder;
|
||||
try {
|
||||
clipboardHolder = FaweAPI.wrapPlayer(player).getSession().getClipboard();
|
||||
} catch (EmptyClipboardException e) {
|
||||
throw new NoClipboardException();
|
||||
}
|
||||
|
||||
@SuppressWarnings("deprecation")
|
||||
Clipboard clipboard = clipboardHolder.getClipboard();
|
||||
if(clipboard == null)
|
||||
throw new NoClipboardException();
|
||||
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
try{
|
||||
if(schemFormat)
|
||||
ClipboardFormats.findByExtension(SCHEM).getWriter(outputStream).write(clipboard);
|
||||
else
|
||||
ClipboardFormats.findByExtension(SCHEMATIC).getWriter(outputStream).write(clipboard);
|
||||
}catch(NullPointerException e){
|
||||
throw new IOException(e);
|
||||
}
|
||||
return outputStream.toByteArray();
|
||||
}
|
||||
|
||||
static void setPlayerClipboard(Player player, InputStream is, boolean schemFormat) throws IOException, NoClipboardException {
|
||||
Clipboard clipboard;
|
||||
try {
|
||||
if (schemFormat)
|
||||
clipboard = ClipboardFormats.findByExtension(SCHEM).getReader(is).read();
|
||||
else
|
||||
clipboard = ClipboardFormats.findByExtension(SCHEMATIC).getReader(is).read();
|
||||
}catch(NullPointerException e){
|
||||
throw new IOException(e);
|
||||
}
|
||||
|
||||
if (clipboard == null)
|
||||
throw new NoClipboardException();
|
||||
|
||||
Actor actor = getWorldEditPlugin().wrapCommandSender(player);
|
||||
getWorldEditPlugin().getWorldEdit().getSessionManager().get(actor).setClipboard(new ClipboardHolder(clipboard));
|
||||
}
|
||||
|
||||
static Clipboard getClipboard(InputStream is, boolean schemFormat) throws IOException, NoClipboardException {
|
||||
try {
|
||||
if(schemFormat)
|
||||
return ClipboardFormats.findByExtension(SCHEM).getReader(is).read();
|
||||
else
|
||||
return ClipboardFormats.findByExtension(SCHEMATIC).getReader(is).read();
|
||||
} catch (NullPointerException e) {
|
||||
throw new NoClipboardException();
|
||||
}
|
||||
}
|
||||
|
||||
private static WorldEditPlugin getWorldEditPlugin() {
|
||||
return (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit");
|
||||
}
|
||||
}
|
@ -33,5 +33,17 @@
|
||||
<version>1.8</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>WorldEdit</artifactId>
|
||||
<version>1.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>SpigotCore_API</artifactId>
|
||||
<version>2.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</project>
|
60
SpigotCore_8/src/de/steamwar/sql/Schematic_8.java
Normale Datei
60
SpigotCore_8/src/de/steamwar/sql/Schematic_8.java
Normale Datei
@ -0,0 +1,60 @@
|
||||
package de.steamwar.sql;
|
||||
|
||||
import com.sk89q.worldedit.EmptyClipboardException;
|
||||
import com.sk89q.worldedit.bukkit.BukkitWorld;
|
||||
import com.sk89q.worldedit.bukkit.WorldEditPlugin;
|
||||
import com.sk89q.worldedit.data.DataException;
|
||||
import com.sk89q.worldedit.extension.platform.Actor;
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||
import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat;
|
||||
import com.sk89q.worldedit.schematic.MCEditSchematicFormat;
|
||||
import com.sk89q.worldedit.schematic.SchematicFormat;
|
||||
import com.sk89q.worldedit.session.ClipboardHolder;
|
||||
import com.sk89q.worldedit.world.registry.WorldData;
|
||||
import org.bukkit.Bukkit;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
class Schematic_8 {
|
||||
private Schematic_8(){}
|
||||
|
||||
static byte[] getPlayerClipboard(Player player) throws IOException, NoClipboardException {
|
||||
ClipboardHolder clipboardHolder;
|
||||
try {
|
||||
clipboardHolder = getWorldEditPlugin().getSession(player).getClipboard();
|
||||
} catch (EmptyClipboardException e) {
|
||||
throw new NoClipboardException();
|
||||
}
|
||||
|
||||
Clipboard clipboard = clipboardHolder.getClipboard();
|
||||
if(clipboard == null)
|
||||
throw new NoClipboardException();
|
||||
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
ClipboardFormat.SCHEMATIC.getWriter(outputStream).write(clipboard, clipboardHolder.getWorldData());
|
||||
return outputStream.toByteArray();
|
||||
}
|
||||
|
||||
static void setPlayerClipboard(Player player, InputStream is) throws IOException, NoClipboardException {
|
||||
WorldData world = new BukkitWorld(player.getWorld()).getWorldData();
|
||||
Clipboard clipboard = getClipboard(is);
|
||||
|
||||
Actor actor = getWorldEditPlugin().wrapCommandSender(player);
|
||||
getWorldEditPlugin().getWorldEdit().getSessionManager().get(actor).setClipboard(new ClipboardHolder(clipboard, world));
|
||||
}
|
||||
|
||||
static Clipboard getClipboard(InputStream is) throws IOException, NoClipboardException {
|
||||
try {
|
||||
return (Clipboard) ((MCEditSchematicFormat)SchematicFormat.getFormat("mcedit")).load(is);
|
||||
} catch (DataException e) {
|
||||
throw new NoClipboardException();
|
||||
}
|
||||
}
|
||||
|
||||
private static WorldEditPlugin getWorldEditPlugin() {
|
||||
return (WorldEditPlugin) Bukkit.getPluginManager().getPlugin("WorldEdit");
|
||||
}
|
||||
}
|
28
SpigotCore_API/pom.xml
Normale Datei
28
SpigotCore_API/pom.xml
Normale Datei
@ -0,0 +1,28 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<parent>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>SpigotCore</artifactId>
|
||||
<version>2.0</version>
|
||||
</parent>
|
||||
|
||||
<artifactId>SpigotCore_API</artifactId>
|
||||
<version>2.0</version>
|
||||
|
||||
<build>
|
||||
<sourceDirectory>src</sourceDirectory>
|
||||
<resources>
|
||||
<resource>
|
||||
<directory>src</directory>
|
||||
<excludes>
|
||||
<exclude>**/*.java</exclude>
|
||||
<exclude>**/*.kt</exclude>
|
||||
</excludes>
|
||||
</resource>
|
||||
</resources>
|
||||
</build>
|
||||
</project>
|
4
SpigotCore_API/src/de/steamwar/sql/NoClipboardException.java
Normale Datei
4
SpigotCore_API/src/de/steamwar/sql/NoClipboardException.java
Normale Datei
@ -0,0 +1,4 @@
|
||||
package de.steamwar.sql;
|
||||
|
||||
public class NoClipboardException extends Exception {
|
||||
}
|
@ -50,6 +50,18 @@
|
||||
<version>1.12</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>WorldEdit</artifactId>
|
||||
<version>1.0</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>SpigotCore_API</artifactId>
|
||||
<version>2.0</version>
|
||||
<scope>compile</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>steamwar</groupId>
|
||||
<artifactId>SpigotCore_8</artifactId>
|
||||
|
@ -48,6 +48,10 @@ public class SQL {
|
||||
throw new SecurityException("Could not close connection", e);
|
||||
}
|
||||
}
|
||||
|
||||
static Connection getCon(){
|
||||
return con;
|
||||
}
|
||||
|
||||
static void update(String qry) {
|
||||
try {
|
||||
|
@ -1,5 +1,13 @@
|
||||
package de.steamwar.sql;
|
||||
|
||||
import com.sk89q.worldedit.extent.clipboard.Clipboard;
|
||||
import de.steamwar.core.Core;
|
||||
import org.bukkit.entity.Player;
|
||||
|
||||
import java.io.ByteArrayInputStream;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.ArrayList;
|
||||
@ -8,38 +16,31 @@ import java.util.UUID;
|
||||
|
||||
public class Schematic {
|
||||
|
||||
private final int schemID;
|
||||
private final String schemName;
|
||||
private final int schemOwner;
|
||||
private boolean schemFormat;
|
||||
private String item;
|
||||
private SchematicType schemType;
|
||||
|
||||
private Schematic(ResultSet rs) throws SQLException {
|
||||
this(
|
||||
rs.getString("SchemName"),
|
||||
rs.getInt("SchemOwner"),
|
||||
rs.getString("Item"),
|
||||
SchematicType.fromDB(rs.getString("SchemType")),
|
||||
false);
|
||||
}
|
||||
|
||||
private Schematic(String schemName, int schemOwner, String item, SchematicType schemType, boolean updateDB){
|
||||
this.schemName = schemName;
|
||||
this.schemOwner = schemOwner;
|
||||
this.item = item;
|
||||
this.schemType = schemType;
|
||||
if(updateDB)
|
||||
updateDB();
|
||||
}
|
||||
|
||||
public Schematic(String schemName, int schemOwner, String item, SchematicType schemType){
|
||||
this(schemName, schemOwner, item, schemType, true);
|
||||
}
|
||||
|
||||
public Schematic(String schemName, UUID schemOwner, String item, SchematicType schemType){
|
||||
this(schemName, SteamwarUser.get(schemOwner).getId(), item, schemType, true);
|
||||
this.schemID = rs.getInt("SchemID");
|
||||
this.schemName = rs.getString("SchemName");
|
||||
this.schemOwner = rs.getInt("SchemOwner");
|
||||
this.item = rs.getString("Item");
|
||||
this.schemType = SchematicType.fromDB(rs.getString("SchemType"));
|
||||
this.schemFormat = rs.getBoolean("SchemFormat");
|
||||
}
|
||||
|
||||
private void updateDB(){
|
||||
createSchem(schemName, schemOwner, item, schemType);
|
||||
}
|
||||
|
||||
public static void createSchem(String schemName, UUID schemOwner, String item, SchematicType schemType){
|
||||
createSchem(schemName, SteamwarUser.get(schemOwner).getId(), item, schemType);
|
||||
}
|
||||
|
||||
public static void createSchem(String schemName, int schemOwner, String item, SchematicType schemType){
|
||||
SQL.update("INSERT INTO Schematic" +
|
||||
" (SchemName, SchemOwner, Item, SchemType)" +
|
||||
" VALUES" +
|
||||
@ -65,9 +66,8 @@ public class Schematic {
|
||||
}
|
||||
return new Schematic(schematic);
|
||||
} catch (SQLException e) {
|
||||
e.printStackTrace();
|
||||
throw new SecurityException("Failed loading schematic", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static List<Schematic> getSchemsAccessibleByUser(UUID schemOwner){
|
||||
@ -87,9 +87,8 @@ public class Schematic {
|
||||
}
|
||||
return schematics;
|
||||
}catch(SQLException e){
|
||||
e.printStackTrace();
|
||||
throw new SecurityException("Failed listing schematics", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static List<Schematic> getSchemsOfType(UUID schemOwner, SchematicType schemType){
|
||||
@ -99,10 +98,9 @@ public class Schematic {
|
||||
public static List<Schematic> getSchemsOfType(int schemOwner, SchematicType schemType){
|
||||
//Unsauber, dafür auch geaddede Schematics dabei
|
||||
List<Schematic> schems = getSchemsAccessibleByUser(schemOwner);
|
||||
if(schems != null)
|
||||
for(int i = schems.size()-1; i >= 0; i--)
|
||||
if(!schems.get(i).getSchemType().equals(schemType))
|
||||
schems.remove(i);
|
||||
for(int i = schems.size()-1; i >= 0; i--)
|
||||
if(!schems.get(i).getSchemType().equals(schemType))
|
||||
schems.remove(i);
|
||||
return schems;
|
||||
}
|
||||
|
||||
@ -115,9 +113,12 @@ public class Schematic {
|
||||
}
|
||||
return schematics;
|
||||
}catch(SQLException e){
|
||||
e.printStackTrace();
|
||||
throw new SecurityException("Failed loading all schems of type", e);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public int getSchemID() {
|
||||
return schemID;
|
||||
}
|
||||
|
||||
public String getSchemName() {
|
||||
@ -146,8 +147,75 @@ public class Schematic {
|
||||
updateDB();
|
||||
}
|
||||
|
||||
public Clipboard load() throws WrongVersionException, SQLException, IOException, NoClipboardException {
|
||||
if(Core.getVersion() <= 12 && schemFormat)
|
||||
throw new WrongVersionException();
|
||||
|
||||
ResultSet rs = SQL.select("SELECT SchemData FROM Schematic WHERE SchemID = " + schemID);
|
||||
rs.next();
|
||||
InputStream is = rs.getBlob("SchemData").getBinaryStream();
|
||||
switch(Core.getVersion()){
|
||||
case 8:
|
||||
return Schematic_8.getClipboard(is);
|
||||
case 14:
|
||||
return Schematic_14.getClipboard(is, schemFormat);
|
||||
default:
|
||||
return Schematic_12.getClipboard(is);
|
||||
}
|
||||
}
|
||||
|
||||
public void loadToPlayer(Player player) throws SQLException, IOException, NoClipboardException, WrongVersionException {
|
||||
if(Core.getVersion() <= 12 && schemFormat)
|
||||
throw new WrongVersionException();
|
||||
|
||||
ResultSet rs = SQL.select("SELECT SchemData FROM Schematic WHERE SchemID = " + schemID);
|
||||
rs.next();
|
||||
InputStream is = rs.getBlob("SchemData").getBinaryStream();
|
||||
switch(Core.getVersion()){
|
||||
case 8:
|
||||
Schematic_8.setPlayerClipboard(player, is);
|
||||
break;
|
||||
case 14:
|
||||
Schematic_14.setPlayerClipboard(player, is, schemFormat);
|
||||
break;
|
||||
default:
|
||||
Schematic_12.setPlayerClipboard(player, is);
|
||||
}
|
||||
}
|
||||
|
||||
public void saveOldFormatFromPlayer(Player player) throws SQLException, IOException, NoClipboardException {
|
||||
saveFromPlayer(player, false);
|
||||
}
|
||||
|
||||
public void saveFromPlayer(Player player) throws SQLException, IOException, NoClipboardException {
|
||||
saveFromPlayer(player, true);
|
||||
}
|
||||
|
||||
private void saveFromPlayer(Player player, boolean newFormat) throws SQLException, IOException, NoClipboardException {
|
||||
PreparedStatement st = SQL.getCon().prepareStatement("UPDATE Schematic SET SchemData = ?, SchemFormat = ? WHERE SchemID = " + schemID);
|
||||
byte[] data;
|
||||
switch(Core.getVersion()){
|
||||
case 8:
|
||||
newFormat = false;
|
||||
data = Schematic_8.getPlayerClipboard(player);
|
||||
break;
|
||||
case 14:
|
||||
data = Schematic_14.getPlayerClipboard(player, newFormat);
|
||||
break;
|
||||
default:
|
||||
newFormat = false;
|
||||
data = Schematic_12.getPlayerClipboard(player);
|
||||
}
|
||||
st.setBlob(1, new ByteArrayInputStream(data));
|
||||
st.setBoolean(2, newFormat);
|
||||
st.executeUpdate();
|
||||
schemFormat = newFormat;
|
||||
}
|
||||
|
||||
public void remove(){
|
||||
SQL.update("DELETE FROM Schematic WHERE SchemOwner = " + schemOwner + " AND SchemName = '" + schemName + "'");
|
||||
SQL.update("DELETE FROM SchemMember WHERE SchemOwner = " + schemOwner + " AND SchemName = '" + schemName + "'");
|
||||
}
|
||||
|
||||
public static class WrongVersionException extends Exception{}
|
||||
}
|
||||
|
1
pom.xml
1
pom.xml
@ -37,6 +37,7 @@
|
||||
</build>
|
||||
|
||||
<modules>
|
||||
<module>SpigotCore_API</module>
|
||||
<module>SpigotCore_8</module>
|
||||
<module>SpigotCore_12</module>
|
||||
<module>SpigotCore_14</module>
|
||||
|
In neuem Issue referenzieren
Einen Benutzer sperren