Multiple fixes

Fixes #393
Fixes #388
Fixes #388
Fixes #385
This commit is contained in:
boy0001 2015-07-13 05:08:41 +10:00
parent 6e9be620e0
commit 9246aa2bcc
10 changed files with 246 additions and 94 deletions

View File

@ -8,7 +8,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> </properties>
<artifactId>PlotSquared</artifactId> <artifactId>PlotSquared</artifactId>
<version>2.12.0</version> <version>2.12.4</version>
<name>PlotSquared</name> <name>PlotSquared</name>
<packaging>jar</packaging> <packaging>jar</packaging>
<build> <build>

View File

@ -224,7 +224,9 @@ public class BukkitMain extends JavaPlugin implements Listener, IPlotMain {
try { try {
unloadRecursively(this); unloadRecursively(this);
} }
catch (Exception e) {}; catch (Exception e) {
e.printStackTrace();
};
THIS = null; THIS = null;
} }

View File

@ -112,6 +112,7 @@ public class PS {
private File storageFile; private File storageFile;
private File FILE = null; // This file private File FILE = null; // This file
private String VERSION = null; private String VERSION = null;
private String LAST_VERSION;
private boolean LOADING_WORLD = false; private boolean LOADING_WORLD = false;
private LinkedHashMap<String, HashMap<PlotId, Plot>> plots; private LinkedHashMap<String, HashMap<PlotId, Plot>> plots;
private Database database; private Database database;
@ -200,6 +201,9 @@ public class PS {
log("&8 - &3Use: &7/plot update"); log("&8 - &3Use: &7/plot update");
log("&8 - &3Or: &7" + url); log("&8 - &3Or: &7" + url);
} }
else if (LAST_VERSION != null && !VERSION.equals(LAST_VERSION)) {
log("&aThanks for updating from: " + LAST_VERSION + " to " + VERSION);
}
} }
}); });
@ -240,6 +244,22 @@ public class PS {
public static PS get() { public static PS get() {
return instance; return instance;
} }
/**
* Get the last PlotSquared version
* @return last version in config or null
*/
public String getLastVersion() {
return LAST_VERSION;
}
/**
* Get the current PlotSquared version
* @return current version in config or null
*/
public String getVersion() {
return VERSION;
}
/** /**
* Log a message to the IPlotMain logger * Log a message to the IPlotMain logger
@ -1179,6 +1199,7 @@ public class PS {
* Setup the default configuration (settings.yml) * Setup the default configuration (settings.yml)
*/ */
public void setupConfig() { public void setupConfig() {
LAST_VERSION = config.getString("version");
config.set("version", VERSION); config.set("version", VERSION);
final Map<String, Object> options = new HashMap<>(); final Map<String, Object> options = new HashMap<>();

View File

@ -92,7 +92,7 @@ public class DebugExec extends SubCommand {
} }
case "remove-flag": { case "remove-flag": {
if (args.length != 2) { if (args.length != 2) {
MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot debugexec reset-flat <flag>"); MainUtil.sendMessage(player, C.COMMAND_SYNTAX, "/plot debugexec remove-flag <flag>");
return false; return false;
} }
String flag = args[1]; String flag = args[1];

View File

@ -5,6 +5,7 @@ import java.net.URL;
import com.intellectualcrafters.jnbt.CompoundTag; import com.intellectualcrafters.jnbt.CompoundTag;
import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
import com.intellectualcrafters.plot.config.Settings;
import com.intellectualcrafters.plot.object.Plot; import com.intellectualcrafters.plot.object.Plot;
import com.intellectualcrafters.plot.object.PlotPlayer; import com.intellectualcrafters.plot.object.PlotPlayer;
import com.intellectualcrafters.plot.object.PlotWorld; import com.intellectualcrafters.plot.object.PlotWorld;
@ -19,6 +20,10 @@ public class Download extends SubCommand {
@Override @Override
public boolean execute(final PlotPlayer plr, String... args) { public boolean execute(final PlotPlayer plr, String... args) {
if (!Settings.METRICS) {
MainUtil.sendMessage(plr, "&cPlease enable metrics in order to use this command.\n&7 - Or host it yourself if you don't like the free service");
return false;
}
final String world = plr.getLocation().getWorld(); final String world = plr.getLocation().getWorld();
if (!PS.get().isPlotWorld(world)) { if (!PS.get().isPlotWorld(world)) {
return !sendMessage(plr, C.NOT_IN_PLOT_WORLD); return !sendMessage(plr, C.NOT_IN_PLOT_WORLD);

View File

@ -25,6 +25,7 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.StringUtils;
import org.bukkit.Material;
import com.intellectualcrafters.plot.PS; import com.intellectualcrafters.plot.PS;
import com.intellectualcrafters.plot.config.C; import com.intellectualcrafters.plot.config.C;
@ -240,10 +241,6 @@ public class Set extends SubCommand {
MainUtil.sendMessage(plr, C.NEED_BLOCK); MainUtil.sendMessage(plr, C.NEED_BLOCK);
return true; return true;
} }
// if (!Configuration.BLOCKLIST.validateValue(args[1])) {
// MainUtil.sendMessage(plr, C.NOT_VALID_BLOCK, args[1]);
// return false;
// }
String[] split = args[1].split(","); String[] split = args[1].split(",");
blocks = Configuration.BLOCKLIST.parseString(args[1]); blocks = Configuration.BLOCKLIST.parseString(args[1]);
for (int i = 0; i < blocks.length; i++) { for (int i = 0; i < blocks.length; i++) {

View File

@ -144,55 +144,100 @@ public class SQLManager implements AbstractDB {
@Override @Override
public void run() { public void run() {
try { try {
connection.setAutoCommit(false);
// Create the plots // Create the plots
createPlots(myList); createPlots(myList, new Runnable() {
@Override
public void run() {
try {
// Creating datastructures
HashMap<PlotId, Plot> plotMap = new HashMap<>();
for (Plot plot : myList) {
plotMap.put(plot.id, plot);
}
final ArrayList<SettingsPair> settings = new ArrayList<>();
final ArrayList<UUIDPair> helpers = new ArrayList<>();
final ArrayList<UUIDPair> trusted = new ArrayList<>();
final ArrayList<UUIDPair> denied = new ArrayList<>();
// Creating datastructures // Populating structures
HashMap<PlotId, Plot> plotMap = new HashMap<>(); final PreparedStatement stmt = connection.prepareStatement(GET_ALL_PLOTS);
for (Plot plot : myList) { final ResultSet result = stmt.executeQuery();
plotMap.put(plot.id, plot); while (result.next()) {
} final int id = result.getInt("id");
ArrayList<SettingsPair> settings = new ArrayList<>(); int x = result.getInt("plot_id_x");
ArrayList<UUIDPair> helpers = new ArrayList<>(); int y = result.getInt("plot_id_z");
ArrayList<UUIDPair> trusted = new ArrayList<>(); PlotId plotId = new PlotId(x, y);
ArrayList<UUIDPair> denied = new ArrayList<>(); Plot plot = plotMap.get(plotId);
if (plot != null) {
// Populating structures settings.add(new SettingsPair(id, plot.settings));
final PreparedStatement stmt = connection.prepareStatement(GET_ALL_PLOTS); if (plot.denied != null) {
final ResultSet result = stmt.executeQuery(); for (UUID uuid : plot.denied) {
while (result.next()) { denied.add(new UUIDPair(id, uuid));
final int id = result.getInt("id"); }
int x = result.getInt("plot_id_x"); }
int y = result.getInt("plot_id_z"); if (plot.members != null) {
PlotId plotId = new PlotId(x, y); for (UUID uuid : plot.members) {
Plot plot = plotMap.get(plotId); trusted.add(new UUIDPair(id, uuid));
if (plot != null) { }
settings.add(new SettingsPair(id, plot.settings)); }
if (plot.denied != null) { if (plot.trusted != null) {
for (UUID uuid : plot.denied) { for (UUID uuid : plot.trusted) {
denied.add(new UUIDPair(id, uuid)); helpers.add(new UUIDPair(id, uuid));
}
}
} }
} }
if (plot.members != null) { createSettings(settings, new Runnable() {
for (UUID uuid : plot.members) { @Override
trusted.add(new UUIDPair(id, uuid)); public void run() {
createTiers(helpers, "helpers", new Runnable() {
@Override
public void run() {
createTiers(trusted, "trusted", new Runnable() {
@Override
public void run() {
createTiers(denied, "denied", new Runnable() {
@Override
public void run() {
try {
connection.commit();
connection.setAutoCommit(true);
} catch (SQLException e) {
e.printStackTrace();
}
if (whenDone != null) whenDone.run();
}
});
}
});
}
});
} }
});
} }
if (plot.trusted != null) { catch (SQLException e) {
for (UUID uuid : plot.trusted) { e.printStackTrace();
helpers.add(new UUIDPair(id, uuid)); PS.log("&7[WARN] " + "Failed to set all helpers for plots");
try {
connection.commit();
connection.setAutoCommit(true);
} catch (SQLException e1) {
e1.printStackTrace();
} }
} }
} }
} });
createSettings(settings);
createTiers(helpers, "helpers");
createTiers(trusted, "trusted");
createTiers(denied, "denied");
TaskManager.runTaskLater(whenDone, 60);
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
PS.log("&7[WARN] " + "Failed to set all helpers for plots"); PS.log("&7[WARN] " + "Failed to set all helpers for plots");
try {
connection.commit();
connection.setAutoCommit(true);
} catch (SQLException e1) {
e1.printStackTrace();
}
} }
} }
}); });
@ -203,7 +248,7 @@ public class SQLManager implements AbstractDB {
* *
* @param myList list of plots to be created * @param myList list of plots to be created
*/ */
public void createTiers(final ArrayList<UUIDPair> myList, final String tier) { public void createTiers(final ArrayList<UUIDPair> myList, final String tier, final Runnable whenDone) {
final StmtMod<UUIDPair> mod = new StmtMod<UUIDPair>() { final StmtMod<UUIDPair> mod = new StmtMod<UUIDPair>() {
@Override @Override
public String getCreateMySQL(int size) { public String getCreateMySQL(int size) {
@ -239,7 +284,7 @@ public class SQLManager implements AbstractDB {
stmt.setString(2, pair.uuid.toString()); stmt.setString(2, pair.uuid.toString());
} }
}; };
setBulk(myList, mod); setBulk(myList, mod, whenDone);
} }
/** /**
@ -247,7 +292,7 @@ public class SQLManager implements AbstractDB {
* *
* @param myList list of plots to be created * @param myList list of plots to be created
*/ */
public void createPlots(final ArrayList<Plot> myList) { public void createPlots(final ArrayList<Plot> myList, final Runnable whenDone) {
final StmtMod<Plot> mod = new StmtMod<Plot>() { final StmtMod<Plot> mod = new StmtMod<Plot>() {
@Override @Override
public String getCreateMySQL(int size) { public String getCreateMySQL(int size) {
@ -298,12 +343,13 @@ public class SQLManager implements AbstractDB {
stmt.setString(4, plot.world); stmt.setString(4, plot.world);
} }
}; };
setBulk(myList, mod); setBulk(myList, mod, whenDone);
} }
public <T> void setBulk(ArrayList<T> objList, StmtMod<T> mod) { public <T> void setBulk(ArrayList<T> objList, StmtMod<T> mod, Runnable whenDone) {
final int size = objList.size(); final int size = objList.size();
if (size == 0) { if (size == 0) {
if (whenDone != null) whenDone.run();
return; return;
} }
int packet; int packet;
@ -313,7 +359,6 @@ public class SQLManager implements AbstractDB {
packet = Math.min(size, 50); packet = Math.min(size, 50);
} }
final int amount = size / packet; final int amount = size / packet;
try { try {
int count = 0; int count = 0;
PreparedStatement preparedStmt = null; PreparedStatement preparedStmt = null;
@ -347,6 +392,7 @@ public class SQLManager implements AbstractDB {
preparedStmt.executeBatch(); preparedStmt.executeBatch();
preparedStmt.clearParameters(); preparedStmt.clearParameters();
preparedStmt.close(); preparedStmt.close();
if (whenDone != null) whenDone.run();
return; return;
} catch (Exception e) { } catch (Exception e) {
if (Settings.DB.USE_MYSQL) { if (Settings.DB.USE_MYSQL) {
@ -371,8 +417,7 @@ public class SQLManager implements AbstractDB {
} }
if (subList.size() != last || (count % 5000 == 0 && count > 0)) { if (subList.size() != last || (count % 5000 == 0 && count > 0)) {
preparedStmt.executeBatch(); preparedStmt.executeBatch();
preparedStmt.close(); preparedStmt.clearParameters();
statement = mod.getCreateSQLite(subList.size()); statement = mod.getCreateSQLite(subList.size());
preparedStmt = this.connection.prepareStatement(statement.toString()); preparedStmt = this.connection.prepareStatement(statement.toString());
} }
@ -388,35 +433,34 @@ public class SQLManager implements AbstractDB {
preparedStmt.executeBatch(); preparedStmt.executeBatch();
preparedStmt.clearParameters(); preparedStmt.clearParameters();
preparedStmt.close(); preparedStmt.close();
return;
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
PS.log("&cERROR 2: " + " | " + objList.get(0).getClass().getCanonicalName()); PS.log("&cERROR 2: " + " | " + objList.get(0).getClass().getCanonicalName());
} PS.log("&6[WARN] " + "Could not bulk save!");
try {
PS.log("&6[WARN] " + "Could not bulk save!"); PreparedStatement preparedStmt = null;
try { String nonBulk = mod.getCreateSQL();
PreparedStatement preparedStmt = null; preparedStmt = this.connection.prepareStatement(nonBulk.toString());
String nonBulk = mod.getCreateSQL(); for (final T obj : objList) {
preparedStmt = this.connection.prepareStatement(nonBulk.toString()); try {
for (final T obj : objList) { mod.setSQL(preparedStmt, obj);
try { preparedStmt.addBatch();
mod.setSQL(preparedStmt, obj); } catch (final Exception e3) {
preparedStmt.addBatch(); PS.log("&c[ERROR] " + "Failed to save " + obj + "!");
} catch (final Exception e3) { }
PS.log("&c[ERROR] " + "Failed to save " + obj + "!");
} }
PS.log("&aBatch 3");
preparedStmt.executeBatch();
preparedStmt.close();
} catch (Exception e3) {
e3.printStackTrace();
PS.log("&c[ERROR] " + "Failed to save all!");
} }
PS.log("&aBatch 3");
preparedStmt.executeBatch();
preparedStmt.close();
} catch (Exception e3) {
e3.printStackTrace();
PS.log("&c[ERROR] " + "Failed to save all!");
} }
if (whenDone != null) whenDone.run();
} }
public void createSettings(final ArrayList<SettingsPair> myList) { public void createSettings(final ArrayList<SettingsPair> myList, final Runnable whenDone) {
final StmtMod<SettingsPair> mod = new StmtMod<SettingsPair>() { final StmtMod<SettingsPair> mod = new StmtMod<SettingsPair>() {
@Override @Override
public String getCreateMySQL(int size) { public String getCreateMySQL(int size) {
@ -527,12 +571,12 @@ public class SQLManager implements AbstractDB {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(new Runnable() {
@Override @Override
public void run() { public void run() {
setBulk(myList, mod); setBulk(myList, mod, whenDone);
} }
}); });
} }
public void createEmptySettings(final ArrayList<Integer> myList) { public void createEmptySettings(final ArrayList<Integer> myList, final Runnable whenDone) {
final StmtMod<Integer> mod = new StmtMod<Integer>() { final StmtMod<Integer> mod = new StmtMod<Integer>() {
@Override @Override
public String getCreateMySQL(int size) { public String getCreateMySQL(int size) {
@ -576,7 +620,7 @@ public class SQLManager implements AbstractDB {
TaskManager.runTaskAsync(new Runnable() { TaskManager.runTaskAsync(new Runnable() {
@Override @Override
public void run() { public void run() {
setBulk(myList, mod); setBulk(myList, mod, whenDone);
} }
}); });
} }
@ -648,6 +692,7 @@ public class SQLManager implements AbstractDB {
} else { } else {
tables = new String[]{"plot", "plot_denied", "plot_helpers", "plot_comments", "plot_trusted", "plot_rating", "plot_settings"}; tables = new String[]{"plot", "plot_denied", "plot_helpers", "plot_comments", "plot_trusted", "plot_rating", "plot_settings"};
} }
final boolean mysql = database.equals("mysql");
final DatabaseMetaData meta = connection.getMetaData(); final DatabaseMetaData meta = connection.getMetaData();
int create = 0; int create = 0;
for (final String s : tables) { for (final String s : tables) {
@ -663,7 +708,6 @@ public class SQLManager implements AbstractDB {
boolean add_constraint; boolean add_constraint;
add_constraint = create == tables.length; add_constraint = create == tables.length;
PS.log("Creating tables"); PS.log("Creating tables");
final boolean mysql = database.equals("mysql");
final Statement stmt = this.connection.createStatement(); final Statement stmt = this.connection.createStatement();
if (mysql) { if (mysql) {
stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot` (" + "`id` INT(11) NOT NULL AUTO_INCREMENT," + "`plot_id_x` INT(11) NOT NULL," + "`plot_id_z` INT(11) NOT NULL," + "`owner` VARCHAR(40) NOT NULL," + "`world` VARCHAR(45) NOT NULL," + "`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP," + "PRIMARY KEY (`id`)" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0"); stmt.addBatch("CREATE TABLE IF NOT EXISTS `" + this.prefix + "plot` (" + "`id` INT(11) NOT NULL AUTO_INCREMENT," + "`plot_id_x` INT(11) NOT NULL," + "`plot_id_z` INT(11) NOT NULL," + "`owner` VARCHAR(40) NOT NULL," + "`world` VARCHAR(45) NOT NULL," + "`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP," + "PRIMARY KEY (`id`)" + ") ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0");
@ -791,6 +835,9 @@ public class SQLManager implements AbstractDB {
} }
public void updateTables() { public void updateTables() {
if (PS.get().getVersion().equals(PS.get().getLastVersion()) || PS.get().getLastVersion() == null) {
return;
}
try { try {
final DatabaseMetaData data = this.connection.getMetaData(); final DatabaseMetaData data = this.connection.getMetaData();
ResultSet rs = data.getColumns(null, null, this.prefix + "plot_comments", "plot_plot_id"); ResultSet rs = data.getColumns(null, null, this.prefix + "plot_comments", "plot_plot_id");
@ -820,9 +867,28 @@ public class SQLManager implements AbstractDB {
} }
} }
rs.close(); rs.close();
} catch (SQLException e) { try (Statement statement = connection.createStatement();) {
for (String table : new String[]{"plot_denied", "plot_helpers", "plot_trusted"} ) {
ResultSet result = statement.executeQuery("SELECT plot_plot_id, user_uuid, COUNT(*) FROM " + this.prefix + table + " GROUP BY plot_plot_id, user_uuid HAVING COUNT(*) > 1");
if (result.next()) {
PS.log("BACKING UP: " + table);
result.close();
statement.executeUpdate("CREATE TABLE " + table + "_tmp AS SELECT * FROM " + this.prefix + table + " GROUP BY plot_plot_id, user_uuid");
statement.executeUpdate("DROP TABLE " + this.prefix + table);
statement.executeUpdate("CREATE TABLE " + this.prefix + table + " AS SELECT * FROM " + table + "_tmp");
statement.executeUpdate("DROP TABLE " + this.prefix + table + "_tmp");
PS.log("RESTORING: " + table);
}
}
}
catch (Exception e2) {
e2.printStackTrace();
}
}
catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
/** /**
@ -906,7 +972,7 @@ public class SQLManager implements AbstractDB {
} }
final Plot plot = plots.get(id); final Plot plot = plots.get(id);
if (plot != null) { if (plot != null) {
plot.addTrusted(user); plot.trusted.add(user);
} else { } else {
PS.log("&cPLOT " + id + " in plot_helpers does not exist. Please create the plot or remove this entry."); PS.log("&cPLOT " + id + " in plot_helpers does not exist. Please create the plot or remove this entry.");
} }
@ -926,7 +992,7 @@ public class SQLManager implements AbstractDB {
} }
final Plot plot = plots.get(id); final Plot plot = plots.get(id);
if (plot != null) { if (plot != null) {
plot.addMember(user); plot.members.add(user);
} else { } else {
PS.log("&cPLOT " + id + " in plot_trusted does not exist. Please create the plot or remove this entry."); PS.log("&cPLOT " + id + " in plot_trusted does not exist. Please create the plot or remove this entry.");
} }
@ -946,7 +1012,7 @@ public class SQLManager implements AbstractDB {
} }
final Plot plot = plots.get(id); final Plot plot = plots.get(id);
if (plot != null) { if (plot != null) {
plot.addDenied(user); plot.denied.add(user);
} else { } else {
PS.log("&cPLOT " + id + " in plot_denied does not exist. Please create the plot or remove this entry."); PS.log("&cPLOT " + id + " in plot_denied does not exist. Please create the plot or remove this entry.");
} }
@ -1045,7 +1111,7 @@ public class SQLManager implements AbstractDB {
stmt.close(); stmt.close();
r.close(); r.close();
if (plots.keySet().size() > 0) { if (plots.keySet().size() > 0) {
createEmptySettings(new ArrayList<Integer>(plots.keySet())); createEmptySettings(new ArrayList<Integer>(plots.keySet()), null);
} }
boolean invalidPlot = false; boolean invalidPlot = false;
for (final String worldname : noExist.keySet()) { for (final String worldname : noExist.keySet()) {

View File

@ -843,12 +843,8 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi
} }
Location loc = BukkitUtil.getLocation(block.getLocation()); Location loc = BukkitUtil.getLocation(block.getLocation());
PlotPlayer pp = BukkitUtil.getPlayer(player); PlotPlayer pp = BukkitUtil.getPlayer(player);
PlayerBlockEventType eventType = null; PlayerBlockEventType eventType = null;
BukkitLazyBlock lb; BukkitLazyBlock lb;
switch (action) { switch (action) {
case PHYSICAL: { case PHYSICAL: {
eventType = PlayerBlockEventType.TRIGGER_PHYSICAL; eventType = PlayerBlockEventType.TRIGGER_PHYSICAL;
@ -925,6 +921,7 @@ public class PlayerEvents extends com.intellectualcrafters.plot.listeners.PlotLi
break; break;
} }
// TODO calls both: // TODO calls both:
// redstone ore // redstone ore

View File

@ -89,6 +89,7 @@ public abstract class EventUtil {
if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) { if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) {
return Permissions.hasPermission(pp, Permissions.BREAK_OTHER.s, notifyPerms); return Permissions.hasPermission(pp, Permissions.BREAK_OTHER.s, notifyPerms);
} }
return true;
} }
case BREAK_HANGING: case BREAK_HANGING:
if (plot == null) { if (plot == null) {
@ -135,6 +136,7 @@ public abstract class EventUtil {
if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) { if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) {
return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms); return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms);
} }
return true;
} }
case PLACE_BLOCK: { case PLACE_BLOCK: {
if (plot == null) { if (plot == null) {
@ -148,6 +150,7 @@ public abstract class EventUtil {
if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) { if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) {
return Permissions.hasPermission(pp, Permissions.BUILD_OTHER.s, notifyPerms); return Permissions.hasPermission(pp, Permissions.BUILD_OTHER.s, notifyPerms);
} }
return true;
} }
case TRIGGER_PHYSICAL: { case TRIGGER_PHYSICAL: {
if (plot == null) { if (plot == null) {
@ -164,6 +167,7 @@ public abstract class EventUtil {
if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) { if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) {
return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms); return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms);
} }
return true;
} }
case INTERACT_HANGING: { case INTERACT_HANGING: {
if (plot == null) { if (plot == null) {
@ -180,6 +184,7 @@ public abstract class EventUtil {
if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) { if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) {
return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms); return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms);
} }
return true;
} }
case INTERACT_MISC: { case INTERACT_MISC: {
if (plot == null) { if (plot == null) {
@ -196,6 +201,7 @@ public abstract class EventUtil {
if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) { if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) {
return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms); return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms);
} }
return true;
} }
case INTERACT_VEHICLE: { case INTERACT_VEHICLE: {
if (plot == null) { if (plot == null) {
@ -212,6 +218,7 @@ public abstract class EventUtil {
if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) { if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) {
return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms); return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms);
} }
return true;
} }
case SPAWN_MOB: { case SPAWN_MOB: {
if (plot == null) { if (plot == null) {
@ -229,13 +236,62 @@ public abstract class EventUtil {
if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) { if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) {
return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms); return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms);
} }
return true;
}
case PLACE_HANGING: {
// if (plot == null) {
// return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms);
// }
// if (!plot.hasOwner()) {
// return Permissions.hasPermission(pp, Permissions.INTERACT_UNOWNED.s, notifyPerms);
// }
//
// if (FlagManager.isPlotFlagTrue(plot, "hanging-place")) {
// return true;
// }
// Flag flag = FlagManager.getPlotFlag(plot, "place");
// HashSet<PlotBlock> value = flag == null ? null : (HashSet<PlotBlock>) flag.getValue();
// if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) {
// return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms);
// }
return true;
}
case PLACE_MISC: {
if (plot == null) {
return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms);
}
if (!plot.hasOwner()) {
return Permissions.hasPermission(pp, Permissions.INTERACT_UNOWNED.s, notifyPerms);
}
if (FlagManager.isPlotFlagTrue(plot, "misc-place")) {
return true;
}
Flag flag = FlagManager.getPlotFlag(plot, "place");
HashSet<PlotBlock> value = flag == null ? null : (HashSet<PlotBlock>) flag.getValue();
if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) {
return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms);
}
return true;
}
case PLACE_VEHICLE: {
if (plot == null) {
return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms);
}
if (!plot.hasOwner()) {
return Permissions.hasPermission(pp, Permissions.INTERACT_UNOWNED.s, notifyPerms);
}
if (FlagManager.isPlotFlagTrue(plot, "vehicle-place")) {
return true;
}
Flag flag = FlagManager.getPlotFlag(plot, "place");
HashSet<PlotBlock> value = flag == null ? null : (HashSet<PlotBlock>) flag.getValue();
if (value == null || (!value.contains(PlotBlock.EVERYTHING) && !value.contains(block.getPlotBlock()))) {
return Permissions.hasPermission(pp, Permissions.INTERACT_OTHER.s, notifyPerms);
}
return true;
} }
case PLACE_HANGING:
break;
case PLACE_MISC:
break;
case PLACE_VEHICLE:
break;
default: default:
break; break;
} }

View File

@ -326,8 +326,16 @@ public class BukkitUtil extends BlockManager {
Material material = Material.getMaterial(block.id); Material material = Material.getMaterial(block.id);
if (material.isBlock() && material.isSolid() && !material.hasGravity()) { if (material.isBlock() && material.isSolid() && !material.hasGravity()) {
Class<? extends MaterialData> data = material.getData(); Class<? extends MaterialData> data = material.getData();
if (data.equals(MaterialData.class) || data.equals(Tree.class) || data.equals(Sandstone.class) || data.equals(Wool.class) || data.equals(Step.class)) { if ((data.equals(MaterialData.class) && !material.isTransparent() && material.isOccluding()) || data.equals(Tree.class) || data.equals(Sandstone.class) || data.equals(Wool.class) || data.equals(Step.class)) {
return true; System.out.print((data.equals(MaterialData.class) && !material.isTransparent() && material.isOccluding()) + " | " + data.getCanonicalName());
switch (material) {
case NOTE_BLOCK:
case MOB_SPAWNER: {
return false;
}
default:
return true;
}
} }
} }
return false; return false;