mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-25 22:56:45 +01:00
Abstract PlotMe connector
This commit is contained in:
parent
3540e1f6ca
commit
454772fd27
@ -76,7 +76,7 @@ import com.intellectualcrafters.plot.commands.list;
|
|||||||
import com.intellectualcrafters.plot.commands.plugin;
|
import com.intellectualcrafters.plot.commands.plugin;
|
||||||
import com.intellectualcrafters.plot.config.C;
|
import com.intellectualcrafters.plot.config.C;
|
||||||
import com.intellectualcrafters.plot.config.Settings;
|
import com.intellectualcrafters.plot.config.Settings;
|
||||||
import com.intellectualcrafters.plot.database.PlotMeConverter;
|
import com.intellectualcrafters.plot.database.plotme.PlotMeConverter;
|
||||||
import com.intellectualcrafters.plot.flag.FlagManager;
|
import com.intellectualcrafters.plot.flag.FlagManager;
|
||||||
import com.intellectualcrafters.plot.generator.BukkitHybridUtils;
|
import com.intellectualcrafters.plot.generator.BukkitHybridUtils;
|
||||||
import com.intellectualcrafters.plot.generator.HybridGen;
|
import com.intellectualcrafters.plot.generator.HybridGen;
|
||||||
|
@ -0,0 +1,16 @@
|
|||||||
|
package com.intellectualcrafters.plot.database.plotme;
|
||||||
|
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.object.Plot;
|
||||||
|
import com.intellectualcrafters.plot.object.PlotId;
|
||||||
|
|
||||||
|
public abstract class APlotMeConnector {
|
||||||
|
public abstract Connection getPlotMeConnection(FileConfiguration plotConfig, String dataFolder);
|
||||||
|
|
||||||
|
public abstract HashMap<String, HashMap<PlotId, Plot>> getPlotMePlots(Connection connection) throws SQLException;
|
||||||
|
}
|
@ -0,0 +1,141 @@
|
|||||||
|
package com.intellectualcrafters.plot.database.plotme;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.DriverManager;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.sql.SQLException;
|
||||||
|
import java.sql.Statement;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.bukkit.configuration.file.FileConfiguration;
|
||||||
|
|
||||||
|
import com.intellectualcrafters.plot.PlotSquared;
|
||||||
|
import com.intellectualcrafters.plot.database.DBFunc;
|
||||||
|
import com.intellectualcrafters.plot.database.SQLite;
|
||||||
|
import com.intellectualcrafters.plot.object.Plot;
|
||||||
|
import com.intellectualcrafters.plot.object.PlotId;
|
||||||
|
import com.intellectualcrafters.plot.object.StringWrapper;
|
||||||
|
import com.intellectualcrafters.plot.util.MainUtil;
|
||||||
|
import com.intellectualcrafters.plot.util.bukkit.UUIDHandler;
|
||||||
|
|
||||||
|
public class ClassicPlotMeConnector extends APlotMeConnector {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Connection getPlotMeConnection(FileConfiguration plotConfig, String dataFolder) {
|
||||||
|
try {
|
||||||
|
if (plotConfig.getBoolean("usemySQL")) {
|
||||||
|
final String user = plotConfig.getString("mySQLuname");
|
||||||
|
final String password = plotConfig.getString("mySQLpass");
|
||||||
|
final String con = plotConfig.getString("mySQLconn");
|
||||||
|
return DriverManager.getConnection(con, user, password);
|
||||||
|
} else {
|
||||||
|
return new SQLite(PlotSquared.THIS, dataFolder + File.separator + "plots.db").openConnection();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (SQLException | ClassNotFoundException e) {}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HashMap<String, HashMap<PlotId, Plot>> getPlotMePlots(Connection connection) throws SQLException {
|
||||||
|
ResultSet r;
|
||||||
|
Statement stmt;
|
||||||
|
final HashMap<String, Integer> plotSize = new HashMap<>();
|
||||||
|
final HashMap<String, HashMap<PlotId, Plot>> plots = new HashMap<>();
|
||||||
|
stmt = connection.createStatement();
|
||||||
|
r = stmt.executeQuery("SELECT * FROM `plotmePlots`");
|
||||||
|
|
||||||
|
boolean checkUUID = DBFunc.hasColumn(r, "ownerid");
|
||||||
|
|
||||||
|
while (r.next()) {
|
||||||
|
final PlotId id = new PlotId(r.getInt("idX"), r.getInt("idZ"));
|
||||||
|
final String name = r.getString("owner");
|
||||||
|
final String world = PlotMeConverter.getWorld(r.getString("world"));
|
||||||
|
if (!plotSize.containsKey(world)) {
|
||||||
|
final int size = r.getInt("topZ") - r.getInt("bottomZ");
|
||||||
|
plotSize.put(world, size);
|
||||||
|
plots.put(world, new HashMap<PlotId, Plot>());
|
||||||
|
}
|
||||||
|
UUID owner = UUIDHandler.getUUID(name);
|
||||||
|
if (owner == null) {
|
||||||
|
if (name.equals("*")) {
|
||||||
|
owner = DBFunc.everyone;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (checkUUID){
|
||||||
|
try {
|
||||||
|
byte[] bytes = r.getBytes("ownerid");
|
||||||
|
if (bytes != null) {
|
||||||
|
owner = UUID.nameUUIDFromBytes(bytes);
|
||||||
|
if (owner != null) {
|
||||||
|
UUIDHandler.add(new StringWrapper(name), owner);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (owner == null) {
|
||||||
|
MainUtil.sendConsoleMessage("&cCould not identify owner for plot: " + id + " -> '" + name + "'");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
UUIDHandler.add(new StringWrapper(name), owner);
|
||||||
|
}
|
||||||
|
final Plot plot = new Plot(id, owner, new ArrayList<UUID>(), new ArrayList<UUID>(), world);
|
||||||
|
plots.get(world).put(id, plot);
|
||||||
|
}
|
||||||
|
r.close();
|
||||||
|
stmt.close();
|
||||||
|
|
||||||
|
stmt = connection.createStatement();
|
||||||
|
r = stmt.executeQuery("SELECT * FROM `plotmeAllowed`");
|
||||||
|
while (r.next()) {
|
||||||
|
final PlotId id = new PlotId(r.getInt("idX"), r.getInt("idZ"));
|
||||||
|
final String name = r.getString("player");
|
||||||
|
final String world = PlotMeConverter.getWorld(r.getString("world"));
|
||||||
|
UUID helper = UUIDHandler.getUUID(name);
|
||||||
|
if (helper == null) {
|
||||||
|
if (name.equals("*")) {
|
||||||
|
helper = DBFunc.everyone;
|
||||||
|
} else {
|
||||||
|
MainUtil.sendConsoleMessage("&6Could not identify helper for plot: " + id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (plots.get(world).containsKey(id)) {
|
||||||
|
plots.get(world).get(id).helpers.add(helper);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
MainUtil.sendConsoleMessage(" - plotmeDenied");
|
||||||
|
r = stmt.executeQuery("SELECT * FROM `plotmeDenied`");
|
||||||
|
|
||||||
|
while (r.next()) {
|
||||||
|
final PlotId id = new PlotId(r.getInt("idX"), r.getInt("idZ"));
|
||||||
|
final String name = r.getString("player");
|
||||||
|
final String world = PlotMeConverter.getWorld(r.getString("world"));
|
||||||
|
UUID denied = UUIDHandler.getUUID(name);
|
||||||
|
if (denied == null) {
|
||||||
|
if (name.equals("*")) {
|
||||||
|
denied = DBFunc.everyone;
|
||||||
|
} else {
|
||||||
|
MainUtil.sendConsoleMessage("&6Could not identify denied for plot: " + id);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (plots.get(world).containsKey(id)) {
|
||||||
|
plots.get(world).get(id).denied.add(denied);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return plots;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -18,7 +18,7 @@
|
|||||||
// /
|
// /
|
||||||
// You can contact us via: support@intellectualsites.com /
|
// You can contact us via: support@intellectualsites.com /
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
package com.intellectualcrafters.plot.database;
|
package com.intellectualcrafters.plot.database.plotme;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@ -42,6 +42,8 @@ import org.bukkit.configuration.file.YamlConfiguration;
|
|||||||
|
|
||||||
import com.intellectualcrafters.plot.PlotSquared;
|
import com.intellectualcrafters.plot.PlotSquared;
|
||||||
import com.intellectualcrafters.plot.config.Settings;
|
import com.intellectualcrafters.plot.config.Settings;
|
||||||
|
import com.intellectualcrafters.plot.database.DBFunc;
|
||||||
|
import com.intellectualcrafters.plot.database.SQLite;
|
||||||
import com.intellectualcrafters.plot.generator.HybridGen;
|
import com.intellectualcrafters.plot.generator.HybridGen;
|
||||||
import com.intellectualcrafters.plot.object.Plot;
|
import com.intellectualcrafters.plot.object.Plot;
|
||||||
import com.intellectualcrafters.plot.object.PlotId;
|
import com.intellectualcrafters.plot.object.PlotId;
|
||||||
@ -77,80 +79,11 @@ public class PlotMeConverter {
|
|||||||
return YamlConfiguration.loadConfiguration(plotMeFile);
|
return YamlConfiguration.loadConfiguration(plotMeFile);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Connection getPlotMeConnection(FileConfiguration plotConfig, String dataFolder) {
|
|
||||||
try {
|
|
||||||
if (plotConfig.getBoolean("usemySQL")) {
|
|
||||||
final String user = plotConfig.getString("mySQLuname");
|
|
||||||
final String password = plotConfig.getString("mySQLpass");
|
|
||||||
final String con = plotConfig.getString("mySQLconn");
|
|
||||||
return DriverManager.getConnection(con, user, password);
|
|
||||||
} else {
|
|
||||||
return new SQLite(PlotSquared.THIS, dataFolder + File.separator + "plots.db").openConnection();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (SQLException | ClassNotFoundException e) {}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Set<String> getPlotMeWorlds(FileConfiguration plotConfig) {
|
public Set<String> getPlotMeWorlds(FileConfiguration plotConfig) {
|
||||||
return plotConfig.getConfigurationSection("worlds").getKeys(false);
|
return plotConfig.getConfigurationSection("worlds").getKeys(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public HashMap<String, HashMap<PlotId, Plot>> getPlotMePlots(Connection connection) throws SQLException {
|
public void runAsync(final APlotMeConnector connector) throws Exception {
|
||||||
ResultSet r;
|
|
||||||
Statement stmt;
|
|
||||||
final HashMap<String, Integer> plotSize = new HashMap<>();
|
|
||||||
final HashMap<String, HashMap<PlotId, Plot>> plots = new HashMap<>();
|
|
||||||
stmt = connection.createStatement();
|
|
||||||
r = stmt.executeQuery("SELECT * FROM `plotmePlots`");
|
|
||||||
|
|
||||||
boolean checkUUID = DBFunc.hasColumn(r, "ownerid");
|
|
||||||
|
|
||||||
while (r.next()) {
|
|
||||||
final PlotId id = new PlotId(r.getInt("idX"), r.getInt("idZ"));
|
|
||||||
final String name = r.getString("owner");
|
|
||||||
final String world = getWorld(r.getString("world"));
|
|
||||||
if (!plotSize.containsKey(world)) {
|
|
||||||
final int size = r.getInt("topZ") - r.getInt("bottomZ");
|
|
||||||
plotSize.put(world, size);
|
|
||||||
plots.put(world, new HashMap<PlotId, Plot>());
|
|
||||||
}
|
|
||||||
UUID owner = UUIDHandler.getUUID(name);
|
|
||||||
if (owner == null) {
|
|
||||||
if (name.equals("*")) {
|
|
||||||
owner = DBFunc.everyone;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (checkUUID){
|
|
||||||
try {
|
|
||||||
byte[] bytes = r.getBytes("ownerid");
|
|
||||||
if (bytes != null) {
|
|
||||||
owner = UUID.nameUUIDFromBytes(bytes);
|
|
||||||
if (owner != null) {
|
|
||||||
UUIDHandler.add(new StringWrapper(name), owner);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (owner == null) {
|
|
||||||
sendMessage("&cCould not identify owner for plot: " + id + " -> '" + name + "'");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
UUIDHandler.add(new StringWrapper(name), owner);
|
|
||||||
}
|
|
||||||
final Plot plot = new Plot(id, owner, new ArrayList<UUID>(), new ArrayList<UUID>(), world);
|
|
||||||
plots.get(world).put(id, plot);
|
|
||||||
}
|
|
||||||
return plots;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void runAsync() throws Exception {
|
|
||||||
// We have to make it wait a couple of seconds
|
// We have to make it wait a couple of seconds
|
||||||
TaskManager.runTaskLaterAsync(new Runnable() {
|
TaskManager.runTaskLaterAsync(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
@ -163,7 +96,7 @@ public class PlotMeConverter {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
Connection connection = getPlotMeConnection(plotConfig, dataFolder);
|
Connection connection = connector.getPlotMeConnection(plotConfig, dataFolder);
|
||||||
|
|
||||||
if (connection == null) {
|
if (connection == null) {
|
||||||
sendMessage("Cannot connect to PlotMe DB. Conversion process will not continue");
|
sendMessage("Cannot connect to PlotMe DB. Conversion process will not continue");
|
||||||
@ -179,7 +112,7 @@ public class PlotMeConverter {
|
|||||||
sendMessage(" - plotmePlots");
|
sendMessage(" - plotmePlots");
|
||||||
|
|
||||||
final Set<String> worlds = getPlotMeWorlds(plotConfig);
|
final Set<String> worlds = getPlotMeWorlds(plotConfig);
|
||||||
HashMap<String, HashMap<PlotId, Plot>> plots = getPlotMePlots(connection);
|
HashMap<String, HashMap<PlotId, Plot>> plots = connector.getPlotMePlots(connection);
|
||||||
for (Entry<String, HashMap<PlotId, Plot>> entry : plots.entrySet()) {
|
for (Entry<String, HashMap<PlotId, Plot>> entry : plots.entrySet()) {
|
||||||
plotCount += entry.getValue().size();
|
plotCount += entry.getValue().size();
|
||||||
}
|
}
|
||||||
@ -189,45 +122,7 @@ public class PlotMeConverter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
sendMessage(" - plotmeAllowed");
|
sendMessage(" - plotmeAllowed");
|
||||||
ResultSet r;
|
|
||||||
Statement stmt = connection.createStatement();
|
|
||||||
r = stmt.executeQuery("SELECT * FROM `plotmeAllowed`");
|
|
||||||
while (r.next()) {
|
|
||||||
final PlotId id = new PlotId(r.getInt("idX"), r.getInt("idZ"));
|
|
||||||
final String name = r.getString("player");
|
|
||||||
final String world = getWorld(r.getString("world"));
|
|
||||||
UUID helper = UUIDHandler.getUUID(name);
|
|
||||||
if (helper == null) {
|
|
||||||
if (name.equals("*")) {
|
|
||||||
helper = DBFunc.everyone;
|
|
||||||
} else {
|
|
||||||
sendMessage("&6Could not identify helper for plot: " + id);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (plots.get(world).containsKey(id)) {
|
|
||||||
plots.get(world).get(id).helpers.add(helper);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sendMessage(" - plotmeDenied");
|
|
||||||
r = stmt.executeQuery("SELECT * FROM `plotmeDenied`");
|
|
||||||
while (r.next()) {
|
|
||||||
final PlotId id = new PlotId(r.getInt("idX"), r.getInt("idZ"));
|
|
||||||
final String name = r.getString("player");
|
|
||||||
final String world = getWorld(r.getString("world"));
|
|
||||||
UUID denied = UUIDHandler.getUUID(name);
|
|
||||||
if (denied == null) {
|
|
||||||
if (name.equals("*")) {
|
|
||||||
denied = DBFunc.everyone;
|
|
||||||
} else {
|
|
||||||
sendMessage("&6Could not identify denied for plot: " + id);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (plots.get(world).containsKey(id)) {
|
|
||||||
plots.get(world).get(id).denied.add(denied);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
sendMessage("Collected " + plotCount + " plots from PlotMe");
|
sendMessage("Collected " + plotCount + " plots from PlotMe");
|
||||||
for (final String world : plots.keySet()) {
|
for (final String world : plots.keySet()) {
|
||||||
sendMessage("Copying config for: " + world);
|
sendMessage("Copying config for: " + world);
|
||||||
@ -346,6 +241,9 @@ public class PlotMeConverter {
|
|||||||
}
|
}
|
||||||
for (final String worldname : worlds) {
|
for (final String worldname : worlds) {
|
||||||
final World world = Bukkit.getWorld(getWorld(worldname));
|
final World world = Bukkit.getWorld(getWorld(worldname));
|
||||||
|
if (world == null) {
|
||||||
|
sendMessage("&cInvalid world in PlotMe configuration: " + worldname);
|
||||||
|
}
|
||||||
final String actualWorldName = world.getName();
|
final String actualWorldName = world.getName();
|
||||||
sendMessage("Reloading generator for world: '" + actualWorldName + "'...");
|
sendMessage("Reloading generator for world: '" + actualWorldName + "'...");
|
||||||
PlotSquared.removePlotWorld(actualWorldName);
|
PlotSquared.removePlotWorld(actualWorldName);
|
||||||
@ -394,7 +292,7 @@ public class PlotMeConverter {
|
|||||||
}, 20);
|
}, 20);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getWorld(final String world) {
|
public static String getWorld(final String world) {
|
||||||
for (final World newworld : Bukkit.getWorlds()) {
|
for (final World newworld : Bukkit.getWorlds()) {
|
||||||
if (newworld.getName().equalsIgnoreCase(world)) {
|
if (newworld.getName().equalsIgnoreCase(world)) {
|
||||||
return newworld.getName();
|
return newworld.getName();
|
@ -94,7 +94,10 @@ public class MainUtil {
|
|||||||
myplot.settings.setMerged(new boolean[] { false, false, false, false });
|
myplot.settings.setMerged(new boolean[] { false, false, false, false });
|
||||||
DBFunc.setMerged(world, myplot, myplot.settings.getMerged());
|
DBFunc.setMerged(world, myplot, myplot.settings.getMerged());
|
||||||
}
|
}
|
||||||
|
if (plotworld.TYPE != 0 && plotworld.TERRAIN < 2) {
|
||||||
// FIXME unlink augmented
|
// FIXME unlink augmented
|
||||||
|
}
|
||||||
|
else {
|
||||||
for (int x = pos1.x; x <= pos2.x; x++) {
|
for (int x = pos1.x; x <= pos2.x; x++) {
|
||||||
for (int y = pos1.y; y <= pos2.y; y++) {
|
for (int y = pos1.y; y <= pos2.y; y++) {
|
||||||
final boolean lx = x < pos2.x;
|
final boolean lx = x < pos2.x;
|
||||||
@ -112,6 +115,7 @@ public class MainUtil {
|
|||||||
MainUtil.setSign(UUIDHandler.getName(plot.owner), plot);
|
MainUtil.setSign(UUIDHandler.getName(plot.owner), plot);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
manager.finishPlotUnlink(plotworld, ids);
|
manager.finishPlotUnlink(plotworld, ids);
|
||||||
for (final PlotId id : ids) {
|
for (final PlotId id : ids) {
|
||||||
final Plot myPlot = MainUtil.getPlot(world, id);
|
final Plot myPlot = MainUtil.getPlot(world, id);
|
||||||
|
Loading…
Reference in New Issue
Block a user