mirror of
				https://github.com/IntellectualSites/PlotSquared.git
				synced 2025-11-03 10:43:45 +01:00 
			
		
		
		
	@@ -44,15 +44,12 @@ import com.intellectualcrafters.plot.database.SQLite;
 | 
				
			|||||||
import com.intellectualcrafters.plot.flag.AbstractFlag;
 | 
					import com.intellectualcrafters.plot.flag.AbstractFlag;
 | 
				
			||||||
import com.intellectualcrafters.plot.flag.FlagManager;
 | 
					import com.intellectualcrafters.plot.flag.FlagManager;
 | 
				
			||||||
import com.intellectualcrafters.plot.flag.FlagValue;
 | 
					import com.intellectualcrafters.plot.flag.FlagValue;
 | 
				
			||||||
import com.intellectualcrafters.plot.generator.ClassicPlotWorld;
 | 
					 | 
				
			||||||
import com.intellectualcrafters.plot.generator.HybridPlotWorld;
 | 
					import com.intellectualcrafters.plot.generator.HybridPlotWorld;
 | 
				
			||||||
import com.intellectualcrafters.plot.generator.HybridUtils;
 | 
					import com.intellectualcrafters.plot.generator.HybridUtils;
 | 
				
			||||||
import com.intellectualcrafters.plot.generator.PlotGenerator;
 | 
					import com.intellectualcrafters.plot.generator.PlotGenerator;
 | 
				
			||||||
import com.intellectualcrafters.plot.generator.SquarePlotManager;
 | 
					import com.intellectualcrafters.plot.generator.SquarePlotManager;
 | 
				
			||||||
import com.intellectualcrafters.plot.generator.SquarePlotWorld;
 | 
					 | 
				
			||||||
import com.intellectualcrafters.plot.object.Plot;
 | 
					import com.intellectualcrafters.plot.object.Plot;
 | 
				
			||||||
import com.intellectualcrafters.plot.object.PlotAnalysis;
 | 
					import com.intellectualcrafters.plot.object.PlotAnalysis;
 | 
				
			||||||
import com.intellectualcrafters.plot.object.PlotBlock;
 | 
					 | 
				
			||||||
import com.intellectualcrafters.plot.object.PlotCluster;
 | 
					import com.intellectualcrafters.plot.object.PlotCluster;
 | 
				
			||||||
import com.intellectualcrafters.plot.object.PlotFilter;
 | 
					import com.intellectualcrafters.plot.object.PlotFilter;
 | 
				
			||||||
import com.intellectualcrafters.plot.object.PlotHandler;
 | 
					import com.intellectualcrafters.plot.object.PlotHandler;
 | 
				
			||||||
@@ -1314,13 +1311,6 @@ public class PS {
 | 
				
			|||||||
            // save configuration
 | 
					            // save configuration
 | 
				
			||||||
            final String[] split = args.split(",");
 | 
					            final String[] split = args.split(",");
 | 
				
			||||||
            final HybridPlotWorld plotworld = new HybridPlotWorld(world);
 | 
					            final HybridPlotWorld plotworld = new HybridPlotWorld(world);
 | 
				
			||||||
            final int width = SquarePlotWorld.PLOT_WIDTH_DEFAULT;
 | 
					 | 
				
			||||||
            final int gap = SquarePlotWorld.ROAD_WIDTH_DEFAULT;
 | 
					 | 
				
			||||||
            final int height = ClassicPlotWorld.PLOT_HEIGHT_DEFAULT;
 | 
					 | 
				
			||||||
            final PlotBlock[] floor = ClassicPlotWorld.TOP_BLOCK_DEFAULT;
 | 
					 | 
				
			||||||
            final PlotBlock[] main = ClassicPlotWorld.MAIN_BLOCK_DEFAULT;
 | 
					 | 
				
			||||||
            final PlotBlock wall = ClassicPlotWorld.WALL_FILLING_DEFAULT;
 | 
					 | 
				
			||||||
            final PlotBlock border = ClassicPlotWorld.WALL_BLOCK_DEFAULT;
 | 
					 | 
				
			||||||
            for (final String element : split) {
 | 
					            for (final String element : split) {
 | 
				
			||||||
                final String[] pair = element.split("=");
 | 
					                final String[] pair = element.split("=");
 | 
				
			||||||
                if (pair.length != 2) {
 | 
					                if (pair.length != 2) {
 | 
				
			||||||
@@ -1329,43 +1319,44 @@ public class PS {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
                final String key = pair[0].toLowerCase();
 | 
					                final String key = pair[0].toLowerCase();
 | 
				
			||||||
                final String value = pair[1];
 | 
					                final String value = pair[1];
 | 
				
			||||||
 | 
					                final String base = "worlds." + world + ".";
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
                    switch (key) {
 | 
					                    switch (key) {
 | 
				
			||||||
                        case "s":
 | 
					                        case "s":
 | 
				
			||||||
                        case "size": {
 | 
					                        case "size": {
 | 
				
			||||||
                            SquarePlotWorld.PLOT_WIDTH_DEFAULT = Configuration.INTEGER.parseString(value).shortValue();
 | 
					                            config.set(base + "plot.size", Configuration.INTEGER.parseString(value).shortValue());
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        case "g":
 | 
					                        case "g":
 | 
				
			||||||
                        case "gap": {
 | 
					                        case "gap": {
 | 
				
			||||||
                            SquarePlotWorld.ROAD_WIDTH_DEFAULT = Configuration.INTEGER.parseString(value).shortValue();
 | 
					                            config.set(base + "road.width", Configuration.INTEGER.parseString(value).shortValue());
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        case "h":
 | 
					                        case "h":
 | 
				
			||||||
                        case "height": {
 | 
					                        case "height": {
 | 
				
			||||||
                            ClassicPlotWorld.PLOT_HEIGHT_DEFAULT = Configuration.INTEGER.parseString(value);
 | 
					                            config.set(base + "road.height", Configuration.INTEGER.parseString(value).shortValue());
 | 
				
			||||||
                            ClassicPlotWorld.ROAD_HEIGHT_DEFAULT = Configuration.INTEGER.parseString(value);
 | 
					                            config.set(base + "plot.height", Configuration.INTEGER.parseString(value).shortValue());
 | 
				
			||||||
                            ClassicPlotWorld.WALL_HEIGHT_DEFAULT = Configuration.INTEGER.parseString(value);
 | 
					                            config.set(base + "wall.height", Configuration.INTEGER.parseString(value).shortValue());
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        case "f":
 | 
					                        case "f":
 | 
				
			||||||
                        case "floor": {
 | 
					                        case "floor": {
 | 
				
			||||||
                            ClassicPlotWorld.TOP_BLOCK_DEFAULT = Configuration.BLOCKLIST.parseString(value);
 | 
					                            config.set(base + "plot.floor", Arrays.asList(StringMan.join(Configuration.BLOCKLIST.parseString(value), ",").split(",")));
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        case "m":
 | 
					                        case "m":
 | 
				
			||||||
                        case "main": {
 | 
					                        case "main": {
 | 
				
			||||||
                            ClassicPlotWorld.MAIN_BLOCK_DEFAULT = Configuration.BLOCKLIST.parseString(value);
 | 
					                            config.set(base + "plot.filling", Arrays.asList(StringMan.join(Configuration.BLOCKLIST.parseString(value), ",").split(",")));
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        case "w":
 | 
					                        case "w":
 | 
				
			||||||
                        case "wall": {
 | 
					                        case "wall": {
 | 
				
			||||||
                            ClassicPlotWorld.WALL_FILLING_DEFAULT = Configuration.BLOCK.parseString(value);
 | 
					                            config.set(base + "wall.filling", Arrays.asList(StringMan.join(Configuration.BLOCKLIST.parseString(value), ",").split(",")));
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        case "b":
 | 
					                        case "b":
 | 
				
			||||||
                        case "border": {
 | 
					                        case "border": {
 | 
				
			||||||
                            ClassicPlotWorld.WALL_BLOCK_DEFAULT = Configuration.BLOCK.parseString(value);
 | 
					                            config.set(base + "wall.block", Configuration.BLOCK.parseString(value).toString());
 | 
				
			||||||
                            break;
 | 
					                            break;
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
                        default: {
 | 
					                        default: {
 | 
				
			||||||
@@ -1380,20 +1371,8 @@ public class PS {
 | 
				
			|||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            try {
 | 
					            try {
 | 
				
			||||||
                final String root = "worlds." + world;
 | 
					                plotworld.loadConfiguration(config);
 | 
				
			||||||
                if (!config.contains(root)) {
 | 
					                config.save(configFile);
 | 
				
			||||||
                    config.createSection(root);
 | 
					 | 
				
			||||||
                }
 | 
					 | 
				
			||||||
                plotworld.saveConfiguration(config.getConfigurationSection(root));
 | 
					 | 
				
			||||||
                ClassicPlotWorld.PLOT_HEIGHT_DEFAULT = height;
 | 
					 | 
				
			||||||
                ClassicPlotWorld.ROAD_HEIGHT_DEFAULT = height;
 | 
					 | 
				
			||||||
                ClassicPlotWorld.WALL_HEIGHT_DEFAULT = height;
 | 
					 | 
				
			||||||
                ClassicPlotWorld.TOP_BLOCK_DEFAULT = floor;
 | 
					 | 
				
			||||||
                ClassicPlotWorld.MAIN_BLOCK_DEFAULT = main;
 | 
					 | 
				
			||||||
                ClassicPlotWorld.WALL_BLOCK_DEFAULT = border;
 | 
					 | 
				
			||||||
                ClassicPlotWorld.WALL_FILLING_DEFAULT = wall;
 | 
					 | 
				
			||||||
                SquarePlotWorld.PLOT_WIDTH_DEFAULT = width;
 | 
					 | 
				
			||||||
                SquarePlotWorld.ROAD_WIDTH_DEFAULT = gap;
 | 
					 | 
				
			||||||
            } catch (final Exception e) {
 | 
					            } catch (final Exception e) {
 | 
				
			||||||
                e.printStackTrace();
 | 
					                e.printStackTrace();
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -75,7 +75,7 @@ public class Inbox extends SubCommand {
 | 
				
			|||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                color = "&7";
 | 
					                color = "&7";
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            string.append("&8[&7#" + x + "&8][&7" + c.world + ";" + c.id + "&8][&6" + c.senderName + "&8]" + color + c.comment + "\n");
 | 
					            string.append("&8[&7#" + (x + 1) + "&8][&7" + c.world + ";" + c.id + "&8][&6" + c.senderName + "&8]" + color + c.comment + "\n");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        MainUtil.sendMessage(player, string.toString());
 | 
					        MainUtil.sendMessage(player, string.toString());
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -155,6 +155,7 @@ public class Inbox extends SubCommand {
 | 
				
			|||||||
                            final List<PlotComment> comments = (List<PlotComment>) value;
 | 
					                            final List<PlotComment> comments = (List<PlotComment>) value;
 | 
				
			||||||
                            if (index > comments.size()) {
 | 
					                            if (index > comments.size()) {
 | 
				
			||||||
                                sendMessage(player, C.NOT_VALID_INBOX_INDEX, index + "");
 | 
					                                sendMessage(player, C.NOT_VALID_INBOX_INDEX, index + "");
 | 
				
			||||||
 | 
					                                return;
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                            final PlotComment comment = comments.get(index - 1);
 | 
					                            final PlotComment comment = comments.get(index - 1);
 | 
				
			||||||
                            inbox.removeComment(plot, comment);
 | 
					                            inbox.removeComment(plot, comment);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -112,7 +112,7 @@ public interface AbstractDB {
 | 
				
			|||||||
     * @param world Which the plot is located in
 | 
					     * @param world Which the plot is located in
 | 
				
			||||||
     * @param id cluster id
 | 
					     * @param id cluster id
 | 
				
			||||||
     *
 | 
					     *
 | 
				
			||||||
     * @return Integer = Cluster Entry Id
 | 
					     * @return Integer = Cluster Entry Id
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    int getClusterId(final PlotCluster cluster);
 | 
					    int getClusterId(final PlotCluster cluster);
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -53,7 +53,6 @@ import com.intellectualcrafters.plot.object.PlotId;
 | 
				
			|||||||
import com.intellectualcrafters.plot.object.PlotSettings;
 | 
					import com.intellectualcrafters.plot.object.PlotSettings;
 | 
				
			||||||
import com.intellectualcrafters.plot.object.RunnableVal;
 | 
					import com.intellectualcrafters.plot.object.RunnableVal;
 | 
				
			||||||
import com.intellectualcrafters.plot.object.comment.PlotComment;
 | 
					import com.intellectualcrafters.plot.object.comment.PlotComment;
 | 
				
			||||||
import com.intellectualcrafters.plot.util.ClusterManager;
 | 
					 | 
				
			||||||
import com.intellectualcrafters.plot.util.MainUtil;
 | 
					import com.intellectualcrafters.plot.util.MainUtil;
 | 
				
			||||||
import com.intellectualcrafters.plot.util.StringMan;
 | 
					import com.intellectualcrafters.plot.util.StringMan;
 | 
				
			||||||
import com.intellectualcrafters.plot.util.TaskManager;
 | 
					import com.intellectualcrafters.plot.util.TaskManager;
 | 
				
			||||||
@@ -145,12 +144,31 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        tasks.add(task);
 | 
					        tasks.add(task);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    public synchronized void addClusterTask(final PlotCluster cluster, UniqueStatement task) {
 | 
					    public synchronized void addClusterTask(final PlotCluster cluster, UniqueStatement task) {
 | 
				
			||||||
        Queue<UniqueStatement> tasks = clusterTasks.get(cluster);
 | 
					        Queue<UniqueStatement> tasks = clusterTasks.get(cluster);
 | 
				
			||||||
        if (tasks == null) {
 | 
					        if (tasks == null) {
 | 
				
			||||||
            tasks = new ConcurrentLinkedQueue<>();
 | 
					            tasks = new ConcurrentLinkedQueue<>();
 | 
				
			||||||
            clusterTasks.put(cluster, tasks);
 | 
					            clusterTasks.put(cluster, tasks);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        if (task == null) {
 | 
				
			||||||
 | 
					            task = new UniqueStatement(cluster.hashCode() + "") {
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                @Override
 | 
				
			||||||
 | 
					                public PreparedStatement get() throws SQLException {
 | 
				
			||||||
 | 
					                    return null;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                @Override
 | 
				
			||||||
 | 
					                public void set(final PreparedStatement stmt) throws SQLException {}
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                @Override
 | 
				
			||||||
 | 
					                public void addBatch(final PreparedStatement stmt) throws SQLException {}
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					                @Override
 | 
				
			||||||
 | 
					                public void execute(final PreparedStatement stmt) throws SQLException {}
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					            };
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        tasks.add(task);
 | 
					        tasks.add(task);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -1271,6 +1289,46 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public int getClusterId(final PlotCluster cluster) {
 | 
				
			||||||
 | 
					        if (cluster.temp > 0) {
 | 
				
			||||||
 | 
					            return cluster.temp;
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        PreparedStatement stmt = null;
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            commit();
 | 
				
			||||||
 | 
					            if (cluster.temp > 0) {
 | 
				
			||||||
 | 
					                return cluster.temp;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            stmt = connection.prepareStatement("SELECT `id` FROM `"
 | 
				
			||||||
 | 
					            + prefix
 | 
				
			||||||
 | 
					            + "cluster` WHERE `pos1_x` = ? AND `pos1_z` = ? AND `pos2_x` = ? AND `pos2_z` = ? AND `world` = ? ORDER BY `timestamp` ASC");
 | 
				
			||||||
 | 
					            stmt.setInt(1, cluster.getP1().x);
 | 
				
			||||||
 | 
					            stmt.setInt(2, cluster.getP1().y);
 | 
				
			||||||
 | 
					            stmt.setInt(3, cluster.getP2().x);
 | 
				
			||||||
 | 
					            stmt.setInt(4, cluster.getP2().y);
 | 
				
			||||||
 | 
					            stmt.setString(5, cluster.world);
 | 
				
			||||||
 | 
					            final ResultSet r = stmt.executeQuery();
 | 
				
			||||||
 | 
					            int c_id = Integer.MAX_VALUE;
 | 
				
			||||||
 | 
					            while (r.next()) {
 | 
				
			||||||
 | 
					                c_id = r.getInt("id");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            stmt.close();
 | 
				
			||||||
 | 
					            r.close();
 | 
				
			||||||
 | 
					            if ((c_id == Integer.MAX_VALUE) || (c_id == 0)) {
 | 
				
			||||||
 | 
					                if (cluster.temp > 0) {
 | 
				
			||||||
 | 
					                    return cluster.temp;
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					                throw new SQLException("Cluster does not exist in database");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            cluster.temp = c_id;
 | 
				
			||||||
 | 
					            return c_id;
 | 
				
			||||||
 | 
					        } catch (final SQLException e) {
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return Integer.MAX_VALUE;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public int getId(final Plot plot) {
 | 
					    public int getId(final Plot plot) {
 | 
				
			||||||
@@ -2114,7 +2172,7 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void delete(final PlotCluster cluster) {
 | 
					    public void delete(final PlotCluster cluster) {
 | 
				
			||||||
        final int id = getClusterId(cluster);
 | 
					        final int id = getClusterId(cluster);
 | 
				
			||||||
        addClusterTask(cluster, new UniqueStatement("delete_cluster_settings") {
 | 
					        addClusterTask(cluster, new UniqueStatement("delete_cluster_settings") {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
@@ -2161,32 +2219,6 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					 | 
				
			||||||
    @Override
 | 
					 | 
				
			||||||
    public int getClusterId(final String world, final PlotClusterId id) {
 | 
					 | 
				
			||||||
        PreparedStatement stmt = null;
 | 
					 | 
				
			||||||
        try {
 | 
					 | 
				
			||||||
            stmt = connection.prepareStatement("SELECT `id` FROM `"
 | 
					 | 
				
			||||||
            + prefix
 | 
					 | 
				
			||||||
            + "cluster` WHERE `pos1_x` = ? AND `pos1_z` = ? AND `pos2_x` = ? AND `pos2_z` = ? AND `world` = ? ORDER BY `timestamp` ASC");
 | 
					 | 
				
			||||||
            stmt.setInt(1, id.pos1.x);
 | 
					 | 
				
			||||||
            stmt.setInt(2, id.pos1.y);
 | 
					 | 
				
			||||||
            stmt.setInt(3, id.pos2.x);
 | 
					 | 
				
			||||||
            stmt.setInt(4, id.pos2.y);
 | 
					 | 
				
			||||||
            stmt.setString(5, world);
 | 
					 | 
				
			||||||
            final ResultSet r = stmt.executeQuery();
 | 
					 | 
				
			||||||
            int c_id = Integer.MAX_VALUE;
 | 
					 | 
				
			||||||
            while (r.next()) {
 | 
					 | 
				
			||||||
                c_id = r.getInt("id");
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            stmt.close();
 | 
					 | 
				
			||||||
            r.close();
 | 
					 | 
				
			||||||
            return c_id;
 | 
					 | 
				
			||||||
        } catch (final SQLException e) {
 | 
					 | 
				
			||||||
            e.printStackTrace();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return Integer.MAX_VALUE;
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public HashMap<String, HashSet<PlotCluster>> getClusters() {
 | 
					    public HashMap<String, HashSet<PlotCluster>> getClusters() {
 | 
				
			||||||
@@ -2229,7 +2261,7 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
                if (user == null) {
 | 
					                if (user == null) {
 | 
				
			||||||
                    user = UUID.fromString(owner);
 | 
					                    user = UUID.fromString(owner);
 | 
				
			||||||
                    uuids.put(owner, user);
 | 
					                    uuids.put(owner, user);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                cluster = new PlotCluster(worldname, pos1, pos2, user, id);
 | 
					                cluster = new PlotCluster(worldname, pos1, pos2, user, id);
 | 
				
			||||||
                clusters.put(id, cluster);
 | 
					                clusters.put(id, cluster);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -2381,7 +2413,7 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
        addClusterTask(cluster, new UniqueStatement("setFlags") {
 | 
					        addClusterTask(cluster, new UniqueStatement("setFlags") {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void set(final PreparedStatement stmt) throws SQLException {
 | 
					            public void set(final PreparedStatement stmt) throws SQLException {
 | 
				
			||||||
                stmt.setString(1, flag_string.toString());
 | 
					                stmt.setString(1, flag_string.toString());
 | 
				
			||||||
                stmt.setInt(2, getClusterId(cluster));
 | 
					                stmt.setInt(2, getClusterId(cluster));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@@ -2397,7 +2429,7 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
        addClusterTask(cluster, new UniqueStatement("setClusterName") {
 | 
					        addClusterTask(cluster, new UniqueStatement("setClusterName") {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void set(final PreparedStatement stmt) throws SQLException {
 | 
					            public void set(final PreparedStatement stmt) throws SQLException {
 | 
				
			||||||
                stmt.setString(1, name);
 | 
					                stmt.setString(1, name);
 | 
				
			||||||
                stmt.setInt(2, getClusterId(cluster));
 | 
					                stmt.setInt(2, getClusterId(cluster));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@@ -2413,7 +2445,7 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
    public void removeHelper(final PlotCluster cluster, final UUID uuid) {
 | 
					    public void removeHelper(final PlotCluster cluster, final UUID uuid) {
 | 
				
			||||||
        addClusterTask(cluster, new UniqueStatement("removeHelper") {
 | 
					        addClusterTask(cluster, new UniqueStatement("removeHelper") {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void set(final PreparedStatement statement) throws SQLException {
 | 
					            public void set(final PreparedStatement statement) throws SQLException {
 | 
				
			||||||
                statement.setInt(1, getClusterId(cluster));
 | 
					                statement.setInt(1, getClusterId(cluster));
 | 
				
			||||||
                statement.setString(2, uuid.toString());
 | 
					                statement.setString(2, uuid.toString());
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -2429,7 +2461,7 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
    public void setHelper(final PlotCluster cluster, final UUID uuid) {
 | 
					    public void setHelper(final PlotCluster cluster, final UUID uuid) {
 | 
				
			||||||
        addClusterTask(cluster, new UniqueStatement("setHelper") {
 | 
					        addClusterTask(cluster, new UniqueStatement("setHelper") {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void set(final PreparedStatement statement) throws SQLException {
 | 
					            public void set(final PreparedStatement statement) throws SQLException {
 | 
				
			||||||
                statement.setInt(1, getClusterId(cluster));
 | 
					                statement.setInt(1, getClusterId(cluster));
 | 
				
			||||||
                statement.setString(2, uuid.toString());
 | 
					                statement.setString(2, uuid.toString());
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -2442,7 +2474,7 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void createCluster(final PlotCluster cluster) {
 | 
					    public void createCluster(final PlotCluster cluster) {
 | 
				
			||||||
        addClusterTask(cluster, new UniqueStatement("createCluster_" + cluster.hashCode()) {
 | 
					        addClusterTask(cluster, new UniqueStatement("createCluster_" + cluster.hashCode()) {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void set(final PreparedStatement stmt) throws SQLException {
 | 
					            public void set(final PreparedStatement stmt) throws SQLException {
 | 
				
			||||||
@@ -2451,22 +2483,32 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
                stmt.setInt(3, cluster.getP2().x);
 | 
					                stmt.setInt(3, cluster.getP2().x);
 | 
				
			||||||
                stmt.setInt(4, cluster.getP2().y);
 | 
					                stmt.setInt(4, cluster.getP2().y);
 | 
				
			||||||
                stmt.setString(5, cluster.owner.toString());
 | 
					                stmt.setString(5, cluster.owner.toString());
 | 
				
			||||||
                stmt.setString(6, cluster.world);
 | 
					 | 
				
			||||||
                stmt.setString(6, cluster.world);
 | 
					                stmt.setString(6, cluster.world);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public PreparedStatement get() throws SQLException {
 | 
					            public PreparedStatement get() throws SQLException {
 | 
				
			||||||
 | 
					                return connection.prepareStatement(CREATE_CLUSTER, Statement.RETURN_GENERATED_KEYS);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void execute(final PreparedStatement stmt) throws SQLException {
 | 
				
			||||||
 | 
					                
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            @Override
 | 
				
			||||||
 | 
					            public void addBatch(final PreparedStatement stmt) throws SQLException {
 | 
				
			||||||
 | 
					                stmt.executeUpdate();
 | 
				
			||||||
 | 
					                final ResultSet keys = stmt.getGeneratedKeys();
 | 
				
			||||||
 | 
					                if (keys.next()) {
 | 
				
			||||||
 | 
					                    cluster.temp = keys.getInt(1);
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
        addClusterTask(cluster, new UniqueStatement("createCluster_settings_" + cluster.hashCode()) {
 | 
					        addClusterTask(cluster, new UniqueStatement("createCluster_settings_" + cluster.hashCode()) {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void set(final PreparedStatement stmt) throws SQLException {
 | 
					            public void set(final PreparedStatement stmt) throws SQLException {
 | 
				
			||||||
                final int id = getClusterId(cluster.world, ClusterManager.getClusterId(cluster));
 | 
					 | 
				
			||||||
                stmt.setInt(1, getClusterId(cluster));
 | 
					                stmt.setInt(1, getClusterId(cluster));
 | 
				
			||||||
                stmt.setString(2, cluster.settings.getAlias());
 | 
					 | 
				
			||||||
                stmt.executeUpdate();
 | 
					 | 
				
			||||||
                stmt.setString(2, cluster.settings.getAlias());
 | 
					                stmt.setString(2, cluster.settings.getAlias());
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@@ -2490,7 +2532,7 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
                stmt.setInt(1, pos1.x);
 | 
					                stmt.setInt(1, pos1.x);
 | 
				
			||||||
                stmt.setInt(2, pos1.y);
 | 
					                stmt.setInt(2, pos1.y);
 | 
				
			||||||
                stmt.setInt(3, pos2.x);
 | 
					                stmt.setInt(3, pos2.x);
 | 
				
			||||||
                stmt.setInt(4, pos2.y);
 | 
					                stmt.setInt(4, pos2.y);
 | 
				
			||||||
                stmt.setInt(5, getClusterId(current));
 | 
					                stmt.setInt(5, getClusterId(current));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@@ -2506,7 +2548,7 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
        addClusterTask(cluster, new UniqueStatement("setPosition") {
 | 
					        addClusterTask(cluster, new UniqueStatement("setPosition") {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void set(final PreparedStatement stmt) throws SQLException {
 | 
					            public void set(final PreparedStatement stmt) throws SQLException {
 | 
				
			||||||
                stmt.setString(1, position);
 | 
					                stmt.setString(1, position);
 | 
				
			||||||
                stmt.setInt(2, getClusterId(cluster));
 | 
					                stmt.setInt(2, getClusterId(cluster));
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
@@ -2521,7 +2563,7 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
    public void removeInvited(final PlotCluster cluster, final UUID uuid) {
 | 
					    public void removeInvited(final PlotCluster cluster, final UUID uuid) {
 | 
				
			||||||
        addClusterTask(cluster, new UniqueStatement("removeInvited") {
 | 
					        addClusterTask(cluster, new UniqueStatement("removeInvited") {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void set(final PreparedStatement statement) throws SQLException {
 | 
					            public void set(final PreparedStatement statement) throws SQLException {
 | 
				
			||||||
                statement.setInt(1, getClusterId(cluster));
 | 
					                statement.setInt(1, getClusterId(cluster));
 | 
				
			||||||
                statement.setString(2, uuid.toString());
 | 
					                statement.setString(2, uuid.toString());
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@@ -2537,7 +2579,7 @@ public class SQLManager implements AbstractDB {
 | 
				
			|||||||
    public void setInvited(final PlotCluster cluster, final UUID uuid) {
 | 
					    public void setInvited(final PlotCluster cluster, final UUID uuid) {
 | 
				
			||||||
        addClusterTask(cluster, new UniqueStatement("setInvited") {
 | 
					        addClusterTask(cluster, new UniqueStatement("setInvited") {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void set(final PreparedStatement statement) throws SQLException {
 | 
					            public void set(final PreparedStatement statement) throws SQLException {
 | 
				
			||||||
                statement.setInt(1, getClusterId(cluster));
 | 
					                statement.setInt(1, getClusterId(cluster));
 | 
				
			||||||
                statement.setString(2, uuid.toString());
 | 
					                statement.setString(2, uuid.toString());
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,6 +14,8 @@ public class PlotCluster {
 | 
				
			|||||||
    private PlotId pos1;
 | 
					    private PlotId pos1;
 | 
				
			||||||
    private PlotId pos2;
 | 
					    private PlotId pos2;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
 | 
					    public int temp;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public PlotId getP1() {
 | 
					    public PlotId getP1() {
 | 
				
			||||||
        return pos1;
 | 
					        return pos1;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -36,6 +38,16 @@ public class PlotCluster {
 | 
				
			|||||||
        this.pos2 = pos2;
 | 
					        this.pos2 = pos2;
 | 
				
			||||||
        this.owner = owner;
 | 
					        this.owner = owner;
 | 
				
			||||||
        settings = new PlotSettings();
 | 
					        settings = new PlotSettings();
 | 
				
			||||||
 | 
					        this.temp = -1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    public PlotCluster(final String world, final PlotId pos1, final PlotId pos2, final UUID owner, int temp) {
 | 
				
			||||||
 | 
					        this.world = world;
 | 
				
			||||||
 | 
					        this.pos1 = pos1;
 | 
				
			||||||
 | 
					        this.pos2 = pos2;
 | 
				
			||||||
 | 
					        this.owner = owner;
 | 
				
			||||||
 | 
					        settings = new PlotSettings();
 | 
				
			||||||
 | 
					        this.temp = temp;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public boolean isAdded(final UUID uuid) {
 | 
					    public boolean isAdded(final UUID uuid) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -310,7 +310,7 @@ public class PlayerEvents extends com.plotsquared.listener.PlotListener implemen
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            entity.remove();
 | 
					            entity.remove();
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
 | 
					    @EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST)
 | 
				
			||||||
    public void PlayerCommand(final PlayerCommandPreprocessEvent event) {
 | 
					    public void PlayerCommand(final PlayerCommandPreprocessEvent event) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -130,21 +130,22 @@ public class BukkitChunkManager extends ChunkManager {
 | 
				
			|||||||
        final World newWorld = Bukkit.getWorld(newPos.getWorld());
 | 
					        final World newWorld = Bukkit.getWorld(newPos.getWorld());
 | 
				
			||||||
        final ArrayList<Chunk> chunks = new ArrayList<>();
 | 
					        final ArrayList<Chunk> chunks = new ArrayList<>();
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        initMaps();
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
        ChunkManager.chunkTask(pos1, pos2, new RunnableVal<int[]>() {
 | 
					        ChunkManager.chunkTask(pos1, pos2, new RunnableVal<int[]>() {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void run() {
 | 
					            public void run() {
 | 
				
			||||||
 | 
					                initMaps();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                final int bx = value[2];
 | 
					                final int bx = value[2];
 | 
				
			||||||
                final int bz = value[3];
 | 
					                final int bz = value[3];
 | 
				
			||||||
                
 | 
					                
 | 
				
			||||||
                final int tx = value[4];
 | 
					                final int tx = value[4];
 | 
				
			||||||
                final int tz = value[5];
 | 
					                final int tz = value[5];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                // Load chunks
 | 
					                // Load chunks
 | 
				
			||||||
                final ChunkLoc loc1 = new ChunkLoc(value[0], value[1]);
 | 
					                final ChunkLoc loc1 = new ChunkLoc(value[0], value[1]);
 | 
				
			||||||
                final ChunkLoc loc2 = new ChunkLoc(loc1.x + relCX, loc1.z + relCZ);
 | 
					                final ChunkLoc loc2 = new ChunkLoc(loc1.x + relCX, loc1.z + relCZ);
 | 
				
			||||||
                final Chunk c1 = oldWorld.getChunkAt(loc1.x, loc1.z);
 | 
					                final Chunk c1 = oldWorld.getChunkAt(loc1.x, loc1.z);
 | 
				
			||||||
                final Chunk c2 = oldWorld.getChunkAt(loc2.x, loc2.z);
 | 
					                final Chunk c2 = newWorld.getChunkAt(loc2.x, loc2.z);
 | 
				
			||||||
                c1.load(true);
 | 
					                c1.load(true);
 | 
				
			||||||
                c2.load(true);
 | 
					                c2.load(true);
 | 
				
			||||||
                chunks.add(c2);
 | 
					                chunks.add(c2);
 | 
				
			||||||
@@ -165,11 +166,11 @@ public class BukkitChunkManager extends ChunkManager {
 | 
				
			|||||||
                // restore chunk
 | 
					                // restore chunk
 | 
				
			||||||
                restoreBlocks(newWorld, relX, relZ);
 | 
					                restoreBlocks(newWorld, relX, relZ);
 | 
				
			||||||
                restoreEntities(newWorld, relX, relZ);
 | 
					                restoreEntities(newWorld, relX, relZ);
 | 
				
			||||||
                BukkitSetBlockManager.setBlockManager.update(chunks);
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }, new Runnable() {
 | 
					        }, new Runnable() {
 | 
				
			||||||
            @Override
 | 
					            @Override
 | 
				
			||||||
            public void run() {
 | 
					            public void run() {
 | 
				
			||||||
 | 
					                BukkitSetBlockManager.setBlockManager.update(chunks);
 | 
				
			||||||
                TaskManager.runTask(whenDone);
 | 
					                TaskManager.runTask(whenDone);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }, 5);
 | 
					        }, 5);
 | 
				
			||||||
@@ -854,7 +855,8 @@ public class BukkitChunkManager extends ChunkManager {
 | 
				
			|||||||
    
 | 
					    
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public boolean loadChunk(final String world, final ChunkLoc loc, final boolean force) {
 | 
					    public boolean loadChunk(final String world, final ChunkLoc loc, final boolean force) {
 | 
				
			||||||
        return BukkitUtil.getWorld(world).getChunkAt(loc.x, loc.z).load(force);
 | 
					        boolean result = BukkitUtil.getWorld(world).getChunkAt(loc.x, loc.z).load(force);
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -121,11 +121,11 @@ public class SendChunk {
 | 
				
			|||||||
                @Override
 | 
					                @Override
 | 
				
			||||||
                public void run() {
 | 
					                public void run() {
 | 
				
			||||||
                    try {
 | 
					                    try {
 | 
				
			||||||
                        chunk.unload(true, false);
 | 
					                        chunk.unload(true, false);
 | 
				
			||||||
                    } catch (final Throwable e) {
 | 
					                    } catch (final Throwable e) {
 | 
				
			||||||
                        final String worldname = chunk.getWorld().getName();
 | 
					                        final String worldname = chunk.getWorld().getName();
 | 
				
			||||||
                        PS.debug("$4Could not save chunk: " + worldname + ";" + chunk.getX() + ";" + chunk.getZ());
 | 
					                        PS.debug("$4Could not save chunk: " + worldname + ";" + chunk.getX() + ";" + chunk.getZ());
 | 
				
			||||||
                        PS.debug("$3 - $4File may be open in another process (e.g. MCEdit)");
 | 
					                        PS.debug("$3 - $4File may be open in another process (e.g. MCEdit)");
 | 
				
			||||||
                        PS.debug("$3 - $4" + worldname + "/level.dat or " + worldname + "/level_old.dat may be corrupt (try repairing or removing these)");
 | 
					                        PS.debug("$3 - $4" + worldname + "/level.dat or " + worldname + "/level_old.dat may be corrupt (try repairing or removing these)");
 | 
				
			||||||
                    }
 | 
					                    }
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -94,7 +94,7 @@ public class SetBlockFast_1_8 extends BukkitSetBlockManager {
 | 
				
			|||||||
        }, 1);
 | 
					        }, 1);
 | 
				
			||||||
        chunksender = new SendChunk();
 | 
					        chunksender = new SendChunk();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    private ChunkLoc lastLoc = null;
 | 
					    private ChunkLoc lastLoc = null;
 | 
				
			||||||
    
 | 
					    
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
@@ -109,6 +109,18 @@ public class SetBlockFast_1_8 extends BukkitSetBlockManager {
 | 
				
			|||||||
     */
 | 
					     */
 | 
				
			||||||
    @SuppressWarnings("deprecation")
 | 
					    @SuppressWarnings("deprecation")
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
 | 
					    public void set(final World world, final int x, final int y, final int z, final int id, final byte data) {
 | 
				
			||||||
 | 
					        final int X = x >> 4;
 | 
				
			||||||
 | 
					        final int Z = z >> 4;
 | 
				
			||||||
 | 
					        final ChunkLoc loc = new ChunkLoc(X, Z);
 | 
				
			||||||
 | 
					        if (lastLoc == null || loc.x != lastLoc.x || loc.z != lastLoc.z) {
 | 
				
			||||||
 | 
					            lastLoc = loc;
 | 
				
			||||||
 | 
					            Chunk chunk = toUpdate.get(loc);
 | 
				
			||||||
 | 
					            if (chunk == null) {
 | 
				
			||||||
 | 
					                chunk = world.getChunkAt(X, Z);
 | 
				
			||||||
 | 
					                toUpdate.put(loc, chunk);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            chunk.load(true);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        if (id == -1) {
 | 
					        if (id == -1) {
 | 
				
			||||||
            world.getBlockAt(x, y, z).setData(data, false);
 | 
					            world.getBlockAt(x, y, z).setData(data, false);
 | 
				
			||||||
@@ -313,17 +325,7 @@ public class SetBlockFast_1_8 extends BukkitSetBlockManager {
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // End blockstate workaround //
 | 
					        // End blockstate workaround //
 | 
				
			||||||
        
 | 
					        
 | 
				
			||||||
        final int X = x >> 4;
 | 
					 | 
				
			||||||
        final int Z = z >> 4;
 | 
					 | 
				
			||||||
        final ChunkLoc loc = new ChunkLoc(X, Z);
 | 
					 | 
				
			||||||
        if (!loc.equals(lastLoc)) {
 | 
					 | 
				
			||||||
            Chunk chunk = toUpdate.get(loc);
 | 
					 | 
				
			||||||
            if (chunk == null) {
 | 
					 | 
				
			||||||
                chunk = world.getChunkAt(X, Z);
 | 
					 | 
				
			||||||
                toUpdate.put(loc, chunk);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
            chunk.load(false);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // check sign
 | 
					        // check sign
 | 
				
			||||||
        final Object w = methodGetHandle.of(world).call();
 | 
					        final Object w = methodGetHandle.of(world).call();
 | 
				
			||||||
 
 | 
				
			|||||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user