summaryrefslogtreecommitdiffstats
path: root/EssentialsProtect/src/com/earth2me/essentials/protect
diff options
context:
space:
mode:
authorementalo <ementalo@e251c2fe-e539-e718-e476-b85c1f46cddb>2011-06-02 23:09:59 +0000
committerementalo <ementalo@e251c2fe-e539-e718-e476-b85c1f46cddb>2011-06-02 23:09:59 +0000
commitf6cedda1e227f4e8e5a18bfc864ef515f286850e (patch)
tree5f3e873e899cb893ca9e8f7b524538e138fc1f77 /EssentialsProtect/src/com/earth2me/essentials/protect
parent3dab3d8df8ab31ce5330bb447983bcc498c2f9c6 (diff)
downloadEssentials-f6cedda1e227f4e8e5a18bfc864ef515f286850e.tar
Essentials-f6cedda1e227f4e8e5a18bfc864ef515f286850e.tar.gz
Essentials-f6cedda1e227f4e8e5a18bfc864ef515f286850e.tar.lz
Essentials-f6cedda1e227f4e8e5a18bfc864ef515f286850e.tar.xz
Essentials-f6cedda1e227f4e8e5a18bfc864ef515f286850e.zip
[trunk] Protect refactors (formally known as 3.0) needs ***EXTENSIVE*** testing
git-svn-id: https://svn.java.net/svn/essentials~svn/trunk@1574 e251c2fe-e539-e718-e476-b85c1f46cddb
Diffstat (limited to 'EssentialsProtect/src/com/earth2me/essentials/protect')
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java144
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java135
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectData.java533
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java138
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectPlayerListener.java45
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectServerListener.java34
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectSqlProperties.java12
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/data/IProtectedBlock.java15
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/data/OwnedBlock.java9
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockJDBC.java296
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockMemory.java205
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockMySQL.java124
-rw-r--r--EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockSQLite.java96
13 files changed, 942 insertions, 844 deletions
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java
index b35a1346b..bdcb167b8 100644
--- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java
+++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtect.java
@@ -2,10 +2,16 @@ package com.earth2me.essentials.protect;
import com.earth2me.essentials.Essentials;
import com.earth2me.essentials.IConf;
+import com.earth2me.essentials.IEssentials;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
-import java.util.List;
-import java.util.Map;
+import com.earth2me.essentials.protect.data.IProtectedBlock;
+import com.earth2me.essentials.protect.data.ProtectedBlockMemory;
+import com.earth2me.essentials.protect.data.ProtectedBlockMySQL;
+import com.earth2me.essentials.protect.data.ProtectedBlockSQLite;
+import java.beans.PropertyVetoException;
+import java.util.ArrayList;
+import java.util.HashMap;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.bukkit.Location;
@@ -22,19 +28,21 @@ public class EssentialsProtect extends JavaPlugin implements IConf
private EssentialsProtectPlayerListener playerListener = null;
private EssentialsProtectEntityListener entityListener = null;
private EssentialsProtectWeatherListener weatherListener = null;
- private EssentialsProtectServerListener serverListener = null;
public static final String AUTHORS = Essentials.AUTHORS;
private static final Logger logger = Logger.getLogger("Minecraft");
- public static Map<String, Boolean> genSettings = null;
- public static Map<String, String> dataSettings = null;
- public static Map<String, Boolean> guardSettings = null;
- public static Map<String, Boolean> playerSettings = null;
- public static List<Integer> usageList = null;
- public static List<Integer> blackListPlace = null;
- public static List<Integer> breakBlackList = null;
- public static List<Integer> onPlaceAlert = null;
- public static List<Integer> onUseAlert = null;
- public static List<Integer> onBreakAlert = null;
+ public static HashMap<String, Boolean> genSettings = null;
+ public static HashMap<String, String> dataSettings = null;
+ public static HashMap<String, Boolean> guardSettings = null;
+ public static HashMap<String, Boolean> playerSettings = null;
+ public static ArrayList usageList = null;
+ public static ArrayList blackListPlace = null;
+ public static ArrayList breakBlackList = null;
+ public static ArrayList onPlaceAlert = null;
+ public static ArrayList onUseAlert = null;
+ public static ArrayList onBreakAlert = null;
+ private IProtectedBlock storage = null;
+ IEssentials ess = null;
+ private static EssentialsProtect instance = null;
public EssentialsProtect()
{
@@ -42,48 +50,44 @@ public class EssentialsProtect extends JavaPlugin implements IConf
public void onEnable()
{
+ ess = Essentials.getStatic();
PluginManager pm = this.getServer().getPluginManager();
+ Essentials ess = (Essentials)pm.getPlugin("Essentials");
+ if (!ess.isEnabled())
+ {
+ pm.enablePlugin(ess);
+ }
+
+ instance = this;
+ reloadConfig();
playerListener = new EssentialsProtectPlayerListener(this);
blockListener = new EssentialsProtectBlockListener(this);
entityListener = new EssentialsProtectEntityListener(this);
weatherListener = new EssentialsProtectWeatherListener(this);
- serverListener = new EssentialsProtectServerListener(this);
-
pm.registerEvent(Type.PLAYER_INTERACT, playerListener, Priority.Low, this);
-
- //blocklistener
pm.registerEvent(Type.BLOCK_PLACE, blockListener, Priority.Highest, this);
pm.registerEvent(Type.BLOCK_FROMTO, blockListener, Priority.Highest, this);
pm.registerEvent(Type.BLOCK_IGNITE, blockListener, Priority.Highest, this);
pm.registerEvent(Type.BLOCK_BURN, blockListener, Priority.Highest, this);
- pm.registerEvent(Type.BLOCK_BREAK, blockListener, Priority.Highest, this);
-
- //entitylistener
pm.registerEvent(Type.ENTITY_EXPLODE, entityListener, Priority.Highest, this);
pm.registerEvent(Type.ENTITY_DAMAGE, entityListener, Priority.Highest, this);
- pm.registerEvent(Type.ENTITY_TARGET, entityListener, Priority.Highest, this);
+ pm.registerEvent(Type.BLOCK_BREAK, blockListener, Priority.Highest, this);
pm.registerEvent(Type.CREATURE_SPAWN, entityListener, Priority.Highest, this);
-
- //weatherlistener
- pm.registerEvent(Type.WEATHER_CHANGE, weatherListener, Priority.Highest, this);
- pm.registerEvent(Type.THUNDER_CHANGE, weatherListener, Priority.Highest, this);
pm.registerEvent(Type.LIGHTNING_STRIKE, weatherListener, Priority.Highest, this);
+ pm.registerEvent(Type.THUNDER_CHANGE, weatherListener, Priority.Highest, this);
+ pm.registerEvent(Type.WEATHER_CHANGE, weatherListener, Priority.Highest, this);
- //serverlistener
- pm.registerEvent(Type.PLUGIN_ENABLE, serverListener, Priority.Highest, this);
-
- reloadConfig();
- Essentials.getStatic().addReloadListener(this);
- if (!this.getDescription().getVersion().equals(Essentials.getStatic().getDescription().getVersion())) {
- logger.log(Level.WARNING, Util.i18n("versionMismatchAll"));
+ if (!this.getDescription().getVersion().equals(Essentials.getStatic().getDescription().getVersion()))
+ {
+ logger.log(Level.WARNING, "Version mismatch! Please update all Essentials jars to the same version.");
}
- logger.info(Util.format("loadinfo", this.getDescription().getName(), this.getDescription().getVersion(), Essentials.AUTHORS));
+ logger.info("Loaded " + this.getDescription().getName() + " build " + this.getDescription().getVersion() + " maintained by " + AUTHORS);
}
- public static boolean checkProtectionItems(List<Integer> itemList, int id)
+ public static boolean checkProtectionItems(ArrayList itemList, int id)
{
- return !itemList.isEmpty() && itemList.contains(id);
+ return !itemList.isEmpty() && itemList.contains(String.valueOf(id));
}
@Override
@@ -106,29 +110,65 @@ public class EssentialsProtect extends JavaPlugin implements IConf
onBreakAlert = null;
}
- public void reloadConfig()
- {
- dataSettings = Essentials.getStatic().getSettings().getEpDBSettings();
- genSettings = Essentials.getStatic().getSettings().getEpSettings();
- guardSettings = Essentials.getStatic().getSettings().getEpGuardSettings();
- usageList = Essentials.getStatic().getSettings().epBlackListUsage();
- blackListPlace = Essentials.getStatic().getSettings().epBlackListPlacement();
- breakBlackList = Essentials.getStatic().getSettings().epBlockBreakingBlacklist();
- onPlaceAlert = Essentials.getStatic().getSettings().getEpAlertOnPlacement();
- onUseAlert = Essentials.getStatic().getSettings().getEpAlertOnUse();
- onBreakAlert = Essentials.getStatic().getSettings().getEpAlertOnBreak();
- playerSettings = Essentials.getStatic().getSettings().getEpPlayerSettings();
- EssentialsProtectData.createSqlTable();
- }
-
public void alert(User user, String item, String type)
{
Location loc = user.getLocation();
for (Player p : this.getServer().getOnlinePlayers())
{
- User alertUser = Essentials.getStatic().getUser(p);
+ User alertUser = ess.getUser(p);
if (alertUser.isAuthorized("essentials.protect.alerts"))
- alertUser.sendMessage(Util.format("alertFormat", user.getName(), type, item, EssentialsProtectData.formatCoords(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())));
+ alertUser.sendMessage(Util.format("alertFormat", user.getName(), type, item, formatCoords(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ())));
+ }
+ }
+
+ public static String formatCoords(int x, int y, int z)
+ {
+ return x + "," + y + "," + z;
+ }
+
+ public void reloadConfig()
+ {
+ dataSettings = ess.getSettings().getEpDBSettings();
+ genSettings = ess.getSettings().getEpSettings();
+ guardSettings = ess.getSettings().getEpGuardSettings();
+ usageList = ess.getSettings().epBlackListUsage();
+ blackListPlace = ess.getSettings().epBlackListPlacement();
+ breakBlackList = ess.getSettings().epBlockBreakingBlacklist();
+ onPlaceAlert = ess.getSettings().getEpAlertOnPlacement();
+ onUseAlert = ess.getSettings().getEpAlertOnUse();
+ onBreakAlert = ess.getSettings().getEpAlertOnBreak();
+ playerSettings = ess.getSettings().getEpPlayerSettings();
+
+ if (dataSettings.get("protect.datatype").equals("mysql"))
+ {
+ try
+ {
+ storage = new ProtectedBlockMySQL(dataSettings.get("protect.mysqlDb"), dataSettings.get("protect.username"), dataSettings.get("protect.password"));
+ }
+ catch (PropertyVetoException ex)
+ {
+ logger.log(Level.SEVERE, null, ex);
+ }
}
+ else
+ {
+ try
+ {
+ storage = new ProtectedBlockSQLite("jdbc:sqlite:plugins/Essentials/EssentialsProtect.db");
+ }
+ catch (PropertyVetoException ex)
+ {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ if (genSettings.get("protect.memstore"))
+ {
+ storage = new ProtectedBlockMemory(storage);
+ }
+ }
+
+ public static IProtectedBlock getStorage()
+ {
+ return EssentialsProtect.instance.storage;
}
}
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java
index b32ac95a1..f3c7968aa 100644
--- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java
+++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectBlockListener.java
@@ -3,6 +3,8 @@ package com.earth2me.essentials.protect;
import com.earth2me.essentials.Essentials;
import com.earth2me.essentials.User;
import com.earth2me.essentials.Util;
+import java.util.ArrayList;
+import java.util.List;
import org.bukkit.Material;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
@@ -18,41 +20,25 @@ import org.bukkit.inventory.ItemStack;
public class EssentialsProtectBlockListener extends BlockListener
{
private EssentialsProtect parent;
- private int railBlockX;
- private int railBlockY;
- private int railBlockZ;
- private EssentialsProtectData spData;
public EssentialsProtectBlockListener(EssentialsProtect parent)
{
this.parent = parent;
}
- private void initialize()
- {
- if (spData != null) return;
- spData = new EssentialsProtectData();
- }
-
@Override
public void onBlockPlace(BlockPlaceEvent event)
{
if (event.isCancelled()) return;
- initialize();
- ItemStack item = event.getItemInHand();
- User user = Essentials.getStatic().getUser(event.getPlayer());
+ final ItemStack item = event.getItemInHand();
+ final User user = parent.ess.getUser(event.getPlayer());
if (EssentialsProtect.playerSettings.get("protect.disable.build") && !user.canBuild())
{
- if(Essentials.getStatic().getSettings().warnOnBuildDisallow())
- {
- user.sendMessage(Util.i18n("buildAlert"));
- }
event.setCancelled(true);
return;
}
- Block blockPlaced = event.getBlockPlaced();
int id = event.getBlockPlaced().getTypeId();
if (EssentialsProtect.checkProtectionItems(EssentialsProtect.blackListPlace, id) && !user.isAuthorized("essentials.protect.exemptplacement"))
@@ -61,34 +47,33 @@ public class EssentialsProtectBlockListener extends BlockListener
return;
}
- if (EssentialsProtect.checkProtectionItems(EssentialsProtect.onPlaceAlert, id))
+ if (!EssentialsProtect.onPlaceAlert.isEmpty() && EssentialsProtect.onPlaceAlert.contains(String.valueOf(item.getTypeId())))
{
parent.alert(user, item.getType().toString(), Util.i18n("alertPlaced"));
}
- if (spData.isBlockAboveProtectedRail(blockPlaced.getFace(BlockFace.DOWN)))
- {
- if (EssentialsProtect.genSettings.get("protect.protect.prevent-block-on-rails"))
+ Block blockPlaced = event.getBlockPlaced();
+ Block below = blockPlaced.getFace(BlockFace.DOWN);
+ if (below.getType() == Material.RAILS) {
+ if (EssentialsProtect.genSettings.get("protect.protect.prevent.block-on-rail"))
{
- event.setCancelled(true);
- return;
+ if (EssentialsProtect.getStorage().isProtected(below, user.getName())) {
+ event.setCancelled(true);
+ return;
+ }
}
}
- if (blockPlaced.getType() == Material.RAILS)
- {
+ List<Block> protect = new ArrayList<Block>();
+ if (blockPlaced.getType() == Material.RAILS) {
if (EssentialsProtect.genSettings.get("protect.protect.rails"))
{
if (user.isAuthorized("essentials.protect"))
{
- railBlockX = blockPlaced.getX();
- railBlockY = blockPlaced.getY();
- railBlockZ = blockPlaced.getZ();
-
- spData.insertProtectionIntoDb(user.getWorld().getName(), user.getName(), railBlockX, railBlockY, railBlockZ);
+ protect.add(blockPlaced);
if (EssentialsProtect.genSettings.get("protect.protect.block-below"))
{
- spData.insertProtectionIntoDb(user.getWorld().getName(), user.getName(), railBlockX, railBlockY - 1, railBlockZ);
+ protect.add(blockPlaced.getFace(BlockFace.DOWN));
}
}
}
@@ -98,25 +83,17 @@ public class EssentialsProtectBlockListener extends BlockListener
{
if (user.isAuthorized("essentials.protect"))
{
- int signBlockX = blockPlaced.getX();
- int signBlockY = blockPlaced.getY();
- int signBlockZ = blockPlaced.getZ();
-
- initialize();
- spData.insertProtectionIntoDb(user.getWorld().getName(), user.getName(), signBlockX,
- signBlockY, signBlockZ);
-
+ protect.add(blockPlaced);
if (EssentialsProtect.genSettings.get("protect.protect.block-below"))
{
- signBlockX = event.getBlockAgainst().getX();
- signBlockY = event.getBlockAgainst().getY();
- signBlockZ = event.getBlockAgainst().getZ();
- spData.insertProtectionIntoDb(user.getWorld().getName(), user.getName(), signBlockX,
- signBlockY, signBlockZ);
+ protect.add(event.getBlockAgainst());
}
}
}
}
+ for (Block block : protect) {
+ EssentialsProtect.getStorage().protectBlock(block, user.getName());
+ }
}
@Override
@@ -133,14 +110,6 @@ public class EssentialsProtectBlockListener extends BlockListener
event.setCancelled(true);
return;
}
-
- if (event.getBlock().getType() == Material.OBSIDIAN ||
- event.getBlock().getFace(BlockFace.DOWN).getType() == Material.OBSIDIAN)
- {
- event.setCancelled(EssentialsProtect.guardSettings.get("protect.prevent.portal-creation"));
- return;
- }
-
if ((event.getCause().equals(BlockIgniteEvent.IgniteCause.SPREAD)))
{
event.setCancelled(EssentialsProtect.guardSettings.get("protect.prevent.fire-spread"));
@@ -158,12 +127,6 @@ public class EssentialsProtectBlockListener extends BlockListener
event.setCancelled(EssentialsProtect.guardSettings.get("protect.prevent.lava-fire-spread"));
return;
}
-
- if (event.getCause().equals(BlockIgniteEvent.IgniteCause.LIGHTNING))
- {
- event.setCancelled(EssentialsProtect.guardSettings.get("protect.prevent.lightning-fire-spread"));
- return;
- }
}
@Override
@@ -226,8 +189,7 @@ public class EssentialsProtectBlockListener extends BlockListener
public void onBlockBreak(BlockBreakEvent event)
{
if (event.isCancelled()) return;
- initialize();
- User user = Essentials.getStatic().getUser(event.getPlayer());
+ User user = parent.ess.getUser(event.getPlayer());
Block block = event.getBlock();
if (EssentialsProtect.playerSettings.get("protect.disable.build") && !user.canBuild())
{
@@ -235,13 +197,13 @@ public class EssentialsProtectBlockListener extends BlockListener
return;
}
- if (EssentialsProtect.checkProtectionItems(EssentialsProtect.breakBlackList, block.getTypeId()) && !user.isAuthorized("essentials.protect.exemptbreak"))
+ if(EssentialsProtect.breakBlackList.contains(String.valueOf(block.getTypeId())) && !user.isAuthorized("essentials.protect.exemptbreak"))
{
event.setCancelled(true);
return;
}
- if (EssentialsProtect.checkProtectionItems(EssentialsProtect.onBreakAlert, block.getTypeId()))
+ if (!EssentialsProtect.onBreakAlert.isEmpty() && EssentialsProtect.onBreakAlert.contains(String.valueOf(block.getTypeId())))
{
parent.alert(user, block.getType().toString(), Util.i18n("alertBroke"));
}
@@ -250,28 +212,57 @@ public class EssentialsProtectBlockListener extends BlockListener
{
if (block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN_POST || block.getType() == Material.RAILS)
{
- spData.removeProtectionFromDB(block, true);
+ EssentialsProtect.getStorage().unprotectBlock(block);
+ if (block.getType() == Material.RAILS || block.getType() == Material.SIGN_POST) {
+ Block below = block.getFace(BlockFace.DOWN);
+ EssentialsProtect.getStorage().unprotectBlock(below);
+ } else {
+ BlockFace[] faces = new BlockFace[] {
+ BlockFace.NORTH,
+ BlockFace.EAST,
+ BlockFace.SOUTH,
+ BlockFace.WEST
+ };
+ for (BlockFace blockFace : faces) {
+ Block against = block.getFace(blockFace);
+ EssentialsProtect.getStorage().unprotectBlock(against);
+ }
+ }
}
else
{
- spData.removeProtectionFromDB(block);
+ EssentialsProtect.getStorage().unprotectBlock(block);
}
return;
}
else
{
- boolean canDestroy = spData.canDestroy(user.getWorld().getName(), user.getName(), block);
- if (canDestroy)
- {
+
+ boolean isProtected = EssentialsProtect.getStorage().isProtected(block, user.getName());
+ if (!isProtected) {
if (block.getType() == Material.WALL_SIGN || block.getType() == Material.SIGN_POST || block.getType() == Material.RAILS)
- {
- spData.removeProtectionFromDB(block, true);
+ {
+ EssentialsProtect.getStorage().unprotectBlock(block);
+ if (block.getType() == Material.RAILS || block.getType() == Material.SIGN_POST) {
+ Block below = block.getFace(BlockFace.DOWN);
+ EssentialsProtect.getStorage().unprotectBlock(below);
+ } else {
+ BlockFace[] faces = new BlockFace[] {
+ BlockFace.NORTH,
+ BlockFace.EAST,
+ BlockFace.SOUTH,
+ BlockFace.WEST
+ };
+ for (BlockFace blockFace : faces) {
+ Block against = block.getFace(blockFace);
+ EssentialsProtect.getStorage().unprotectBlock(against);
+ }
+ }
}
else
{
- spData.removeProtectionFromDB(block);
+ EssentialsProtect.getStorage().unprotectBlock(block);
}
- return;
}
event.setCancelled(true);
return;
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectData.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectData.java
deleted file mode 100644
index 76b36d810..000000000
--- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectData.java
+++ /dev/null
@@ -1,533 +0,0 @@
-package com.earth2me.essentials.protect;
-
-import com.earth2me.essentials.Essentials;
-import java.sql.Connection;
-import java.sql.DriverManager;
-import java.sql.PreparedStatement;
-import java.sql.ResultSet;
-import java.sql.SQLException;
-import java.sql.Statement;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import org.bukkit.block.Block;
-
-
-public class EssentialsProtectData
-{
- private static final Logger logger = Logger.getLogger("Minecraft");
- private static final String mysqlDriver = "com.mysql.jdbc.Driver";
- private static String mysqlUsername;
- private static String mysqlPassword;
- private static String mysqlDatabase;
- private static String dataType;
- private static final String sqlite = "jdbc:sqlite:plugins/Essentials/EssentialsProtect.db";
- private static final String mysqlTable;
- private static final String sqliteTable;
- private static final String insertQuery;
- private static final String countByLocationQuery;
- private static final String countByPlayerLocationQuery;
- private static final String playerByLocationQuery;
- private static final String deleteByLocationQuery;
-
- static
- {
- mysqlTable = EssentialsProtectSqlProperties.EssentialsProtect;
- sqliteTable = EssentialsProtectSqlProperties.EssentialsProtect_sqlite;
- insertQuery = EssentialsProtectSqlProperties.Insert;
- countByLocationQuery = EssentialsProtectSqlProperties.CountByLocation;
- countByPlayerLocationQuery = EssentialsProtectSqlProperties.CountByPLayerLocation;
- playerByLocationQuery = EssentialsProtectSqlProperties.PlayerByLocation;
- deleteByLocationQuery = EssentialsProtectSqlProperties.DeleteByLocation;
- mysqlUsername = EssentialsProtect.dataSettings.get("protect.username");
- mysqlPassword = EssentialsProtect.dataSettings.get("protect.password");
- mysqlDatabase = EssentialsProtect.dataSettings.get("protect.mysqlDb");
- dataType = EssentialsProtect.dataSettings.get("protect.datatype");
- }
-
- public EssentialsProtectData()
- {
- }
-
- public static String formatCoords(int x, int y, int z)
- {
- return x + "," + y + "," + z;
- }
-
- public void insertProtectionIntoDb(String worldname, String playerName, int x, int y, int z)
- {
- Connection conn = null;
- PreparedStatement ps = null;
- ResultSet rs = null;
- try
- {
- if (dataType.contentEquals("mysql"))
- {
- Class.forName(mysqlDriver);
- conn = DriverManager.getConnection(mysqlDatabase, mysqlUsername, mysqlPassword);
- }
- else
- {
- Class.forName("org.sqlite.JDBC");
- conn = DriverManager.getConnection(sqlite);
- }
- ps = conn.prepareStatement(insertQuery);
- ps.setString(1, worldname);
- ps.setString(2, playerName);
- ps.setInt(3, x);
- ps.setInt(4, y);
- ps.setInt(5, z);
- ps.executeUpdate();
-
- }
- catch (SQLException ex)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Unable to add protection into SQL", ex);
- }
- catch (ClassNotFoundException e)
- {
- // TODO Auto-generated catch block
- logger.log(Level.SEVERE, "[EssentialsProtect] Class not found", e);
- }
- finally
- {
- try
- {
- if (ps != null)
- {
- ps.close();
- }
- if (rs != null)
- {
- rs.close();
- }
- if (conn != null)
- {
- conn.close();
- }
- }
- catch (SQLException ex)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Could not close connection to SQL", ex);
- }
- }
- }
-
- public boolean canDestroy(String worldName, String playerName, Block block)
- {
- int x = block.getX();
- int y = block.getY();
- int z = block.getZ();
-
- int rowCount = 0;
- Connection conn = null;
- PreparedStatement ps = null;
- ResultSet rs = null;
- try
- {
- if (dataType.contentEquals("mysql"))
- {
- Class.forName(mysqlDriver);
- conn = DriverManager.getConnection(mysqlDatabase, mysqlUsername, mysqlPassword);
- }
- else
- {
- Class.forName("org.sqlite.JDBC");
- conn = DriverManager.getConnection(sqlite);
- }
- conn.setAutoCommit(false);
- ps = conn.prepareStatement(countByLocationQuery);
- ps.setString(1, worldName);
- ps.setInt(2, x);
- ps.setInt(3, y);
- ps.setInt(4, z);
- rs = ps.executeQuery();
- rs.next();
- rowCount = rs.getInt(1);
- rs.close();
- ps.close();
-
- if (rowCount == 0)
- {
- return true;
- }
- else
- {
- ps = conn.prepareStatement(countByPlayerLocationQuery);
- ps.setString(1, worldName);
- ps.setString(2, playerName);
- ps.setInt(3, x);
- ps.setInt(4, y);
- ps.setInt(5, z);
- rs = ps.executeQuery();
- rs.next();
- rowCount = rs.getInt(1);
-
- if (rowCount == 0)
- {
- return false;
- }
-
- }
-
- }
- catch (SQLException ex)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Unable to query Protection", ex);
- }
- catch (Throwable e)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Unable to query Protection", e);
- }
- finally
- {
- try
- {
- if (ps != null)
- {
- ps.close();
- }
- if (rs != null)
- {
- rs.close();
- }
- if (conn != null)
- {
- conn.close();
- }
- }
- catch (SQLException ex)
- {
- logger.log(Level.SEVERE, "[EssentialsProtection] Could not close connection to SQL", ex);
- }
- }
- return true;
- }
-
- @SuppressWarnings("CallToThreadDumpStack")
- public static void createSqlTable()
- {
- Connection conn = null;
- Statement st = null;
-
- try
- {
- if (dataType.contentEquals("mysql"))
- {
- Class.forName(mysqlDriver);
- conn = DriverManager.getConnection(mysqlDatabase, mysqlUsername, mysqlPassword);
- }
- else
- {
- Class.forName("org.sqlite.JDBC");
- conn = DriverManager.getConnection(sqlite);
- }
-
- st = conn.createStatement();
- st.executeUpdate(dataType.contentEquals("mysql") ? mysqlTable : sqliteTable);
- }
- catch (SQLException s)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Could not create table for " + dataType, s);
-
- }
- catch (ClassNotFoundException ex)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Could not find driver for " + dataType, ex);
-
- }
- catch (Throwable e)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Unexpected error occured whilst creating table ", e);
- }
- finally
- {
- try
- {
- if (conn != null && !conn.isClosed())
- {
- try
- {
- conn.close();
- }
- catch (SQLException e)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Unexpected error occured whilst closing the connection", e);
- }
- }
- }
- catch (SQLException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
-
- public String getBlockOwner(String worldName, String playerName, Block block)
- {
- String returnPlayerName = null;
- int x = block.getX();
- int y = block.getY();
- int z = block.getZ();
-
- Connection conn = null;
- PreparedStatement ps = null;
- ResultSet rs = null;
- try
- {
- if (dataType.contentEquals("mysql"))
- {
- Class.forName(mysqlDriver);
- conn = DriverManager.getConnection(mysqlDatabase, mysqlUsername, mysqlPassword);
- }
- else
- {
- Class.forName("org.sqlite.JDBC");
- conn = DriverManager.getConnection(sqlite);
- }
- conn.setAutoCommit(false);
- ps = conn.prepareStatement(playerByLocationQuery);
-
- ps.setString(1, worldName);
- ps.setInt(2, x);
- ps.setInt(3, y);
- ps.setInt(4, z);
- rs = ps.executeQuery();
- while (rs.next())
- {
- returnPlayerName = rs.getString("playerName");
- }
- rs.close();
- ps.close();
-
- }
- catch (SQLException ex)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Unable to query EssentialsProtection", ex);
- }
- catch (Throwable e)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Unable to query EssentialsProtection", e);
- }
- finally
- {
- try
- {
- if (ps != null)
- {
- ps.close();
- }
- if (rs != null)
- {
- rs.close();
- }
- if (conn != null)
- {
- conn.close();
- }
- }
- catch (SQLException ex)
- {
- logger.log(Level.SEVERE, "[EssentialsProtection] Could not close connection to SQL", ex);
- }
-
- }
- return returnPlayerName;
- }
-
-
- public void removeProtectionFromDB(Block block)
- {
- try
- {
- Connection conn = null;
- if (dataType.contentEquals("mysql"))
- {
- Class.forName(mysqlDriver);
- conn = DriverManager.getConnection(mysqlDatabase, mysqlUsername,
- mysqlPassword);
- }
- else
- {
- Class.forName("org.sqlite.JDBC");
- conn = DriverManager.getConnection(sqlite);
- }
- PreparedStatement ps = null;
- try
- {
- ps = conn.prepareStatement(deleteByLocationQuery);
- ps.setString(1, block.getWorld().getName());
- ps.setInt(2, block.getX());
- ps.setInt(3, block.getY());
- ps.setInt(4, block.getZ());
- ps.executeUpdate();
-
- }
- catch (SQLException ex)
- {
- logger.log(Level.WARNING,
- "[EssentialsProtect] Could not delete block data from database",
- ex);
- }
- finally
- {
- if (conn != null && !conn.isClosed())
- {
- conn.close();
- }
- if (ps != null)
- {
- ps.close();
- }
- }
-
- }
- catch (Throwable e)
- {
- logger.log(Level.SEVERE, " [EssentialsProtect] Exception occured whilst trying to delete data from sql", e);
- }
-
- }
-
- public void removeProtectionFromDB(Block block, boolean removeBelow)
- {
- try
- {
- Connection conn = null;
- if (dataType.contentEquals("mysql"))
- {
- Class.forName(mysqlDriver);
- conn = DriverManager.getConnection(mysqlDatabase, mysqlUsername, mysqlPassword);
- }
- else
- {
- Class.forName("org.sqlite.JDBC");
- conn = DriverManager.getConnection(sqlite);
- }
- PreparedStatement ps = null;
- try
- {
- ps = conn.prepareStatement(deleteByLocationQuery);
- ps.setString(1, block.getWorld().getName());
- ps.setInt(2, block.getX());
- ps.setInt(3, block.getY());
- ps.setInt(4, block.getZ());
- ps.executeUpdate();
- if (removeBelow)
- {
- ps = conn.prepareStatement(deleteByLocationQuery);
- ps.setString(1, block.getWorld().getName());
- ps.setInt(2, block.getX());
- ps.setInt(3, block.getY() - 1);
- ps.setInt(4, block.getZ());
- ps.executeUpdate();
- }
-
- }
- catch (SQLException ex)
- {
- logger.log(Level.WARNING, "[EssentialsProtect] Could not delete block data from database", ex);
- }
- finally
- {
- if (conn != null && !conn.isClosed())
- {
- conn.close();
- }
- if (ps != null)
- {
- ps.close();
- }
- }
-
- }
- catch (Throwable e)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Exception occured whilst trying to delete data from sql", e);
- }
-
- }
-
- public boolean isBlockAboveProtectedRail(Block block)
- {
- Connection conn = null;
- PreparedStatement ps = null;
- ResultSet rs = null;
- if (block.getTypeId() == 66)
- {
- try
- {
- if (dataType.contentEquals("mysql"))
- {
- Class.forName(mysqlDriver);
- conn = DriverManager.getConnection(mysqlDatabase, mysqlUsername, mysqlPassword);
- }
- else
- {
- Class.forName("org.sqlite.JDBC");
- conn = DriverManager.getConnection(sqlite);
- }
- int rowCount = 0;
- conn.setAutoCommit(false);
- ps = conn.prepareStatement(countByLocationQuery);
- ps.setString(1, block.getWorld().getName());
- ps.setInt(2, block.getX());
- ps.setInt(3, block.getY());
- ps.setInt(4, block.getZ());
- rs = ps.executeQuery();
- rs.next();
- rowCount = rs.getInt(1);
- rs.close();
- ps.close();
-
- if (rowCount == 0)
- {
-
- return false;
- }
- else
- {
- return true;
- }
- }
- catch (SQLException s)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Could not query protection", s);
-
- }
- catch (ClassNotFoundException ex)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Could not find driver for " + dataType, ex);
-
- }
- catch (Throwable e)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Unexpected error occured whilst creating table", e);
- }
- finally
- {
- try
- {
- if (conn != null && !conn.isClosed())
- {
- try
- {
- conn.close();
- }
- catch (SQLException e)
- {
- logger.log(Level.SEVERE, "[EssentialsProtect] Unexpected error occured whilst closing the connection", e);
- }
-
- }
- }
- catch (SQLException e)
- {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- }
- return false;
- }
-}
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java
index 48aae97e5..f82ee9c7a 100644
--- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java
+++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectEntityListener.java
@@ -1,7 +1,6 @@
package com.earth2me.essentials.protect;
import com.earth2me.essentials.Essentials;
-import com.earth2me.essentials.EssentialsBlockListener;
import com.earth2me.essentials.User;
import java.util.ArrayList;
import java.util.HashSet;
@@ -9,9 +8,7 @@ import java.util.List;
import net.minecraft.server.ChunkPosition;
import net.minecraft.server.Packet60Explosion;
import org.bukkit.Location;
-import org.bukkit.Material;
import org.bukkit.block.Block;
-import org.bukkit.block.BlockFace;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.CraftWorld;
import org.bukkit.craftbukkit.entity.CraftPlayer;
@@ -28,8 +25,6 @@ import org.bukkit.event.entity.EntityDamageEvent;
import org.bukkit.event.entity.EntityDamageEvent.DamageCause;
import org.bukkit.event.entity.EntityExplodeEvent;
import org.bukkit.event.entity.EntityListener;
-import org.bukkit.event.entity.EntityTargetEvent;
-import org.bukkit.event.entity.EntityTargetEvent.TargetReason;
public class EssentialsProtectEntityListener extends EntityListener
@@ -44,34 +39,22 @@ public class EssentialsProtectEntityListener extends EntityListener
@Override
public void onEntityDamage(EntityDamageEvent event)
{
- if (event.isCancelled())
- {
- return;
- }
+ if (event.isCancelled()) return;
if (event instanceof EntityDamageByBlockEvent)
{
DamageCause cause = event.getCause();
- if (EssentialsProtect.playerSettings.get("protect.disable.contactdmg") && cause == DamageCause.CONTACT
- && !(event.getEntity() instanceof Player
- && Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.contact")
- && !Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.disable")))
+ if (EssentialsProtect.playerSettings.get("protect.disable.contactdmg") && cause == DamageCause.CONTACT)
{
event.setCancelled(true);
return;
}
- if (EssentialsProtect.playerSettings.get("protect.disable.lavadmg") && cause == DamageCause.LAVA
- && !(event.getEntity() instanceof Player
- && Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.lava")
- && !Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.disable")))
+ if (EssentialsProtect.playerSettings.get("protect.disable.lavadmg") && cause == DamageCause.LAVA)
{
event.setCancelled(true);
return;
}
- if (EssentialsProtect.guardSettings.get("protect.prevent.tnt-explosion") && cause == DamageCause.BLOCK_EXPLOSION
- && !(event.getEntity() instanceof Player
- && Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.tnt")
- && !Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.disable")))
+ if (EssentialsProtect.guardSettings.get("protect.prevent.tnt-explosion") && cause == DamageCause.BLOCK_EXPLOSION)
{
event.setCancelled(true);
return;
@@ -89,8 +72,8 @@ public class EssentialsProtectEntityListener extends EntityListener
{
if (EssentialsProtect.playerSettings.get("protect.disable.pvp"))
{
- User defender = Essentials.getStatic().getUser(eDefend);
- User attacker = Essentials.getStatic().getUser(eAttack);
+ User defender = parent.ess.getUser(eDefend);
+ User attacker = parent.ess.getUser(eAttack);
if (!defender.isAuthorized("essentials.protect.pvp") || !attacker.isAuthorized("essentials.protect.pvp"))
{
@@ -102,19 +85,13 @@ public class EssentialsProtectEntityListener extends EntityListener
//Creeper explode prevention
if (eAttack != null && eAttack instanceof Monster)
{
- if (eAttack instanceof Creeper && EssentialsProtect.guardSettings.get("protect.prevent.creeper-explosion")
- && !(event.getEntity() instanceof Player
- && Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.creeper")
- && !Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.disable")))
+ if (eAttack instanceof Creeper && EssentialsProtect.guardSettings.get("protect.prevent.creeper-explosion"))
{
event.setCancelled(true);
return;
}
- if (eAttack instanceof Creeper && EssentialsProtect.guardSettings.get("protect.prevent.creeper-playerdamage")
- && !(event.getEntity() instanceof Player
- && Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.creeper")
- && !Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.disable")))
+ if (eAttack instanceof Creeper && EssentialsProtect.guardSettings.get("protect.prevent.creeper-playerdamage"))
{
event.setCancelled(true);
return;
@@ -124,12 +101,9 @@ public class EssentialsProtectEntityListener extends EntityListener
if (event instanceof EntityDamageByProjectileEvent)
{
- if (event.getEntity() instanceof Player
- && EssentialsProtect.playerSettings.get("protect.disable.projectiles")
- && !Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.projectiles")
- && !Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.disable"))
+ if (event.getEntity() instanceof Player)
{
- event.setCancelled(true);
+ event.setCancelled(EssentialsProtect.playerSettings.get("protect.disable.projectiles"));
return;
}
}
@@ -138,39 +112,24 @@ public class EssentialsProtectEntityListener extends EntityListener
Entity casualty = event.getEntity();
if (casualty instanceof Player)
{
- if (EssentialsProtect.playerSettings.get("protect.disable.fall") && cause == DamageCause.FALL
- && !(Essentials.getStatic().getUser(casualty).isAuthorized("essentials.protect.damage.fall")
- && !Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.disable")))
+ if (EssentialsProtect.playerSettings.get("protect.disable.fall") && cause == DamageCause.FALL)
{
event.setCancelled(true);
return;
}
- if (EssentialsProtect.playerSettings.get("protect.disable.suffocate") && cause == DamageCause.SUFFOCATION
- && !(Essentials.getStatic().getUser(casualty).isAuthorized("essentials.protect.damage.suffocation")
- && !Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.disable")))
+ if (EssentialsProtect.playerSettings.get("protect.disable.suffocate") && cause == DamageCause.SUFFOCATION)
{
event.setCancelled(true);
return;
}
if (EssentialsProtect.playerSettings.get("protect.disable.firedmg") && (cause == DamageCause.FIRE
- || cause == DamageCause.FIRE_TICK)
- && !(Essentials.getStatic().getUser(casualty).isAuthorized("essentials.protect.damage.fire")
- && !Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.disable")))
+ || cause == DamageCause.FIRE_TICK))
{
event.setCancelled(true);
return;
}
- if (EssentialsProtect.playerSettings.get("protect.disable.drown") && cause == DamageCause.DROWNING
- && !(Essentials.getStatic().getUser(casualty).isAuthorized("essentials.protect.damage.drowning")
- && !Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.disable")))
- {
- event.setCancelled(true);
- return;
- }
- if (EssentialsProtect.playerSettings.get("protect.disable.lightning") && cause == DamageCause.LIGHTNING
- && !(Essentials.getStatic().getUser(casualty).isAuthorized("essentials.protect.damage.lightning")
- && !Essentials.getStatic().getUser(event.getEntity()).isAuthorized("essentials.protect.damage.disable")))
+ if (EssentialsProtect.playerSettings.get("protect.disable.drown") && cause == DamageCause.DROWNING)
{
event.setCancelled(true);
return;
@@ -181,14 +140,11 @@ public class EssentialsProtectEntityListener extends EntityListener
@Override
public void onEntityExplode(EntityExplodeEvent event)
{
- if (event.isCancelled())
- {
- return;
- }
+ if (event.isCancelled()) return;
if (event.getEntity() instanceof LivingEntity)
{
//Nicccccccccce plaaacccccccccce..
- int maxHeight = Essentials.getStatic().getSettings().getEpCreeperMaxHeight();
+ int maxHeight = parent.ess.getSettings().getEpCreeperMaxHeight();
if (EssentialsProtect.guardSettings.get("protect.prevent.creeper-explosion")
|| EssentialsProtect.guardSettings.get("protect.prevent.creeper-blockdamage")
|| (maxHeight >= 0 && event.getLocation().getBlockY() > maxHeight))
@@ -196,7 +152,7 @@ public class EssentialsProtectEntityListener extends EntityListener
HashSet<ChunkPosition> set = new HashSet<ChunkPosition>(event.blockList().size());
Player[] players = parent.getServer().getOnlinePlayers();
List<ChunkPosition> blocksUnderPlayers = new ArrayList<ChunkPosition>(players.length);
- Location loc = event.getLocation();
+ final Location loc = event.getLocation();
for (Player player : players)
{
if (player.getWorld().equals(loc.getWorld()))
@@ -208,9 +164,10 @@ public class EssentialsProtectEntityListener extends EntityListener
player.getLocation().getBlockZ()));
}
}
+ ChunkPosition cp;
for (Block block : event.blockList())
{
- ChunkPosition cp = new ChunkPosition(block.getX(), block.getY(), block.getZ());
+ cp = new ChunkPosition(block.getX(), block.getY(), block.getZ());
if (!blocksUnderPlayers.contains(cp))
{
set.add(cp);
@@ -231,48 +188,13 @@ public class EssentialsProtectEntityListener extends EntityListener
return;
}
}
- // This code will prevent explosions near protected rails, signs or protected chests
- // TODO: Use protect db instead of this code
- for (Block block : event.blockList())
- {
- if ((block.getType() == Material.RAILS || block.getFace(BlockFace.UP).getType() == Material.RAILS) && EssentialsProtect.genSettings.get("protect.protect.rails"))
- {
- event.setCancelled(true);
- return;
- }
- if ((block.getType() == Material.WALL_SIGN
- || block.getFace(BlockFace.NORTH).getType() == Material.WALL_SIGN
- || block.getFace(BlockFace.EAST).getType() == Material.WALL_SIGN
- || block.getFace(BlockFace.SOUTH).getType() == Material.WALL_SIGN
- || block.getFace(BlockFace.WEST).getType() == Material.WALL_SIGN
- || block.getType() == Material.SIGN_POST
- || block.getFace(BlockFace.UP).getType() == Material.SIGN_POST)
- && EssentialsProtect.genSettings.get("protect.protect.signs"))
- {
- event.setCancelled(true);
- return;
- }
- if (EssentialsBlockListener.protectedBlocks.contains(block.getType())
- && EssentialsBlockListener.isBlockProtected(block))
- {
- event.setCancelled(true);
- return;
- }
- }
}
@Override
public void onCreatureSpawn(CreatureSpawnEvent event)
{
- if (event.getEntity() instanceof CraftPlayer)
- {
- return;
- }
- if (event.isCancelled())
- {
- return;
- }
- String creatureName = event.getCreatureType().toString().toLowerCase();
+ if (event.getEntity() instanceof CraftPlayer || event.isCancelled()){ return;}
+ final String creatureName = event.getCreatureType().toString().toLowerCase();
if (creatureName == null || creatureName.isEmpty())
{
return;
@@ -280,24 +202,6 @@ public class EssentialsProtectEntityListener extends EntityListener
if (EssentialsProtect.guardSettings.get("protect.prevent.spawn." + creatureName))
{
event.setCancelled(true);
- }
- }
-
- @Override
- public void onEntityTarget(EntityTargetEvent event)
- {
- if (!(event.getTarget() instanceof Player))
- {
- return;
- }
- User user = Essentials.getStatic().getUser(event.getTarget());
- if ((event.getReason() == TargetReason.CLOSEST_PLAYER
- || event.getReason() == TargetReason.TARGET_ATTACKED_ENTITY
- || event.getReason() == TargetReason.PIG_ZOMBIE_TARGET)
- && EssentialsProtect.guardSettings.get("protect.prevent.entitytarget")
- && !user.isAuthorized("essentials.protect.entitytarget.bypass"))
- {
- event.setCancelled(true);
return;
}
}
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectPlayerListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectPlayerListener.java
index 9e1d35732..4c9b2c5fd 100644
--- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectPlayerListener.java
+++ b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectPlayerListener.java
@@ -1,46 +1,33 @@
package com.earth2me.essentials.protect;
-import com.earth2me.essentials.Essentials;
-import com.earth2me.essentials.User;
-import com.earth2me.essentials.Util;
import org.bukkit.block.Block;
-import org.bukkit.event.block.Action;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerListener;
import org.bukkit.inventory.ItemStack;
-
+import com.earth2me.essentials.Essentials;
+import com.earth2me.essentials.User;
+import com.earth2me.essentials.Util;
public class EssentialsProtectPlayerListener extends PlayerListener
{
private EssentialsProtect parent;
- private EssentialsProtectData spData = null;
public EssentialsProtectPlayerListener(EssentialsProtect parent)
{
+
this.parent = parent;
}
- public void initialize()
- {
- if (spData != null) return;
- spData = new EssentialsProtectData();
- }
-
@Override
public void onPlayerInteract(PlayerInteractEvent event)
{
- initialize();
if (event.isCancelled()) return;
ItemStack item = event.getItem();
- User user = Essentials.getStatic().getUser(event.getPlayer());
+ User user = parent.ess.getUser(event.getPlayer());
Block blockClicked = event.getClickedBlock();
if (EssentialsProtect.playerSettings.get("protect.disable.build") && !user.canBuild())
{
- if(Essentials.getStatic().getSettings().warnOnBuildDisallow())
- {
- user.sendMessage(Util.i18n("buildAlert"));
- }
event.setCancelled(true);
return;
}
@@ -52,16 +39,26 @@ public class EssentialsProtectPlayerListener extends PlayerListener
return;
}
- if (event.getAction() == Action.RIGHT_CLICK_BLOCK && user.isAuthorized("essentials.protect.ownerinfo"))
+ if (user.isAuthorized("essentials.protect.admin"))
{
- String ownerName = spData.getBlockOwner(user.getWorld().getName(), user.getName(),
- blockClicked);
- if (ownerName != null)
+ StringBuilder sb = new StringBuilder();
+ boolean first = true;
+ for (String owner : EssentialsProtect.getStorage().getOwners(blockClicked))
+ {
+ if (!first)
+ {
+ sb.append(", ");
+ }
+ first = false;
+ sb.append(owner);
+ }
+ String ownerNames = sb.toString();
+ if (ownerNames != null && !ownerNames.isEmpty())
{
- user.sendMessage(Util.format("protectionOwner", ownerName));
+ user.sendMessage(Util.format("protectionOwner", ownerNames));
}
}
- if (item != null && EssentialsProtect.checkProtectionItems(EssentialsProtect.onUseAlert, item.getTypeId()))
+ if (item != null && EssentialsProtect.onUseAlert.contains(String.valueOf(item.getTypeId())))
{
parent.alert(user, item.getType().toString(), Util.i18n("alertUsed"));
}
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectServerListener.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectServerListener.java
deleted file mode 100644
index 5642ef0dd..000000000
--- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectServerListener.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package com.earth2me.essentials.protect;
-
-import java.util.logging.Level;
-import java.util.logging.Logger;
-import org.bukkit.event.server.PluginEnableEvent;
-import org.bukkit.event.server.ServerListener;
-
-
-public class EssentialsProtectServerListener extends ServerListener
-{
- private EssentialsProtect parent;
- Logger log = Logger.getLogger("minecraft");
-
- public EssentialsProtectServerListener(EssentialsProtect parent)
- {
- this.parent = parent;
- }
-
- @Override
- public void onPluginEnable(PluginEnableEvent event)
- {
- if ("WorldGuard".equals(event.getPlugin().getDescription().getName()))
- {
- String[] features = new String[] {"disable water flow", "disable lava flow", "disable water bucket flow", "disable all fire spread", "disable tnt explosion", "disable creeper explosion", "disable all damage types"};
- log.log(Level.WARNING, "[EssentialsProtect] WorldGuard was detected, in the near future the following features of Protect will be disabled in favor of WorldGuard's versions");
-
- for (String s : features)
- {
- log.log(Level.WARNING, s);
- }
-
- }
- }
-}
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectSqlProperties.java b/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectSqlProperties.java
deleted file mode 100644
index 30b2a7032..000000000
--- a/EssentialsProtect/src/com/earth2me/essentials/protect/EssentialsProtectSqlProperties.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package com.earth2me.essentials.protect;
-
-public class EssentialsProtectSqlProperties {
-
- public static String EssentialsProtect="CREATE TABLE IF NOT EXISTS `EssentialsProtect` (`id` int(11) NOT NULL AUTO_INCREMENT, `worldName` varchar(150) NOT NULL, `playerName` varchar(150) NOT NULL, `x` int(11) NOT NULL, `y` int(11) NOT NULL, `z` int(11) NOT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=205 DEFAULT CHARSET=latin1";
- public static String EssentialsProtect_sqlite = "CREATE TABLE IF NOT EXISTS EssentialsProtect (id INTEGER PRIMARY KEY, worldName TEXT ,playerName TEXT, x NUMERIC, y NUMERIC, z NUMERIC)";
- public static String CountByLocation="SELECT COUNT(*) from EssentialsProtect where worldName = ? and x = ? and y = ? and z = ? limit 10";
- public static String CountByPLayerLocation="SELECT COUNT(*) from EssentialsProtect where worldName = ? and playerName =? and x = ? and y = ? and z = ? limit 10";
- public static String DeleteByLocation="DELETE FROM EssentialsProtect WHERE worldName=? and x=? and y=? and z=?";
- public static String Insert="INSERT INTO EssentialsProtect (worldName, playerName, x, y, z) VALUES (?,?,?,?,?)";
- public static String PlayerByLocation="SELECT playerName FROM EssentialsProtect WHERE worldname = ? and x = ? and y = ? and z = ? LIMIT 10";
-}
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/data/IProtectedBlock.java b/EssentialsProtect/src/com/earth2me/essentials/protect/data/IProtectedBlock.java
new file mode 100644
index 000000000..28b7e425b
--- /dev/null
+++ b/EssentialsProtect/src/com/earth2me/essentials/protect/data/IProtectedBlock.java
@@ -0,0 +1,15 @@
+package com.earth2me.essentials.protect.data;
+
+import java.util.List;
+import java.util.Set;
+import org.bukkit.block.Block;
+
+public interface IProtectedBlock {
+ public void clearProtections();
+ public void importProtections(List<OwnedBlock> blocks);
+ public List<OwnedBlock> exportProtections();
+ public void protectBlock(Block block, String playerName);
+ public boolean isProtected(Block block, String playerName);
+ public List<String> getOwners(Block block);
+ public int unprotectBlock(Block block);
+}
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/data/OwnedBlock.java b/EssentialsProtect/src/com/earth2me/essentials/protect/data/OwnedBlock.java
new file mode 100644
index 000000000..b9b036798
--- /dev/null
+++ b/EssentialsProtect/src/com/earth2me/essentials/protect/data/OwnedBlock.java
@@ -0,0 +1,9 @@
+package com.earth2me.essentials.protect.data;
+
+public class OwnedBlock {
+ int x;
+ int y;
+ int z;
+ String world;
+ String playerName;
+}
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockJDBC.java b/EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockJDBC.java
new file mode 100644
index 000000000..567c7e23b
--- /dev/null
+++ b/EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockJDBC.java
@@ -0,0 +1,296 @@
+package com.earth2me.essentials.protect.data;
+
+import com.mchange.v2.c3p0.ComboPooledDataSource;
+import java.beans.PropertyVetoException;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.bukkit.block.Block;
+
+public abstract class ProtectedBlockJDBC implements IProtectedBlock {
+ protected static final Logger logger = Logger.getLogger("Minecraft");
+ protected ComboPooledDataSource cpds;
+
+ protected abstract PreparedStatement getStatementCreateTable(Connection conn) throws SQLException;
+ protected abstract PreparedStatement getStatementUpdateFrom2_0Table(Connection conn) throws SQLException;
+ protected abstract PreparedStatement getStatementDeleteAll(Connection conn) throws SQLException;
+ protected abstract PreparedStatement getStatementInsert(Connection conn, String world, int x, int y, int z, String playerName) throws SQLException;
+ protected abstract PreparedStatement getStatementPlayerCountByLocation(Connection conn, String world, int x, int y, int z, String playerName) throws SQLException;
+ protected abstract PreparedStatement getStatementPlayersByLocation(Connection conn, String name, int x, int y, int z) throws SQLException;
+ protected abstract PreparedStatement getStatementDeleteByLocation(Connection conn, String world, int x, int y, int z) throws SQLException;
+ protected abstract PreparedStatement getStatementAllBlocks(Connection conn) throws SQLException;
+
+ public ProtectedBlockJDBC(String driver, String url) throws PropertyVetoException {
+ this(driver, url, null, null);
+ }
+
+ public ProtectedBlockJDBC(String driver, String url, String username, String password) throws PropertyVetoException {
+ cpds = new ComboPooledDataSource();
+ cpds.setDriverClass(driver);
+ cpds.setJdbcUrl(url);
+ if (username != null) {
+ cpds.setUser(username);
+ cpds.setPassword(password);
+ }
+ cpds.setMaxStatements(20);
+ createAndConvertTable();
+ }
+
+
+ private void createAndConvertTable() {
+ Connection conn = null;
+ PreparedStatement ps = null;
+ try {
+ conn = cpds.getConnection();
+ ps = getStatementCreateTable(conn);
+ ps.execute();
+ ps.close();
+ ps = getStatementUpdateFrom2_0Table(conn);
+ ps.execute();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ } finally {
+ if (ps != null) {
+ try {
+ ps.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ if (conn != null) {
+ try {
+ conn.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ }
+ }
+
+ public void clearProtections() {
+ Connection conn = null;
+ PreparedStatement ps = null;
+ try {
+ conn = cpds.getConnection();
+ ps = getStatementDeleteAll(conn);
+ ps.executeUpdate();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ } finally {
+ if (ps != null) {
+ try {
+ ps.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ if (conn != null) {
+ try {
+ conn.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ }
+ }
+
+ public void importProtections(List<OwnedBlock> blocks) {
+ for (OwnedBlock ownedBlock : blocks) {
+ if (ownedBlock.playerName == null) {
+ continue;
+ }
+ protectBlock(ownedBlock.world, ownedBlock.x, ownedBlock.y, ownedBlock.z, ownedBlock.playerName);
+ }
+ }
+
+ public List<OwnedBlock> exportProtections() {
+ Connection conn = null;
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ List<OwnedBlock> blocks = new ArrayList<OwnedBlock>();
+ try {
+ conn = cpds.getConnection();
+ ps = getStatementAllBlocks(conn);
+ rs = ps.executeQuery();
+ while (rs.next()) {
+ OwnedBlock ob = new OwnedBlock();
+ ob.world = rs.getString(1);
+ ob.x = rs.getInt(2);
+ ob.y = rs.getInt(3);
+ ob.z = rs.getInt(4);
+ ob.playerName = rs.getString(5);
+ blocks.add(ob);
+ }
+ return blocks;
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ return blocks;
+ } finally {
+ if (rs != null) {
+ try {
+ rs.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ if (ps != null) {
+ try {
+ ps.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ if (conn != null) {
+ try {
+ conn.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ }
+ }
+
+ public void protectBlock(Block block, String playerName) {
+ protectBlock(block.getWorld().getName(), block.getX(), block.getY(), block.getZ(), playerName);
+ }
+
+ private void protectBlock(String world, int x, int y, int z, String playerName) {
+ Connection conn = null;
+ PreparedStatement ps = null;
+ try {
+ conn = cpds.getConnection();
+ ps = getStatementInsert(conn, world, x, y, z, playerName);
+ ps.executeUpdate();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ } finally {
+ if (ps != null) {
+ try {
+ ps.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ if (conn != null) {
+ try {
+ conn.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ }
+ }
+
+ public boolean isProtected(Block block, String playerName) {
+ Connection conn = null;
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ try {
+ conn = cpds.getConnection();
+ ps = getStatementPlayerCountByLocation(conn, block.getWorld().getName(), block.getX(), block.getY(), block.getZ(), playerName);
+ rs = ps.executeQuery();
+ rs.next();
+ return rs.getInt(1) > 0 && rs.getInt(2) == 0;
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ return true;
+ } finally {
+ if (rs != null) {
+ try {
+ rs.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ if (ps != null) {
+ try {
+ ps.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ if (conn != null) {
+ try {
+ conn.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ }
+ }
+
+ public List<String> getOwners(Block block) {
+ Connection conn = null;
+ PreparedStatement ps = null;
+ ResultSet rs = null;
+ List<String> owners = new ArrayList<String>();
+ try {
+ conn = cpds.getConnection();
+ ps = getStatementPlayersByLocation(conn, block.getWorld().getName(), block.getX(), block.getY(), block.getZ());
+ rs = ps.executeQuery();
+ while (rs.next()) {
+ owners.add(rs.getString(1));
+ }
+ return owners;
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ return owners;
+ } finally {
+ if (rs != null) {
+ try {
+ rs.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ if (ps != null) {
+ try {
+ ps.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ if (conn != null) {
+ try {
+ conn.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ }
+ }
+
+ public int unprotectBlock(Block block) {
+ Connection conn = null;
+ PreparedStatement ps = null;
+ try {
+ conn = cpds.getConnection();
+ ps = getStatementDeleteByLocation(conn, block.getWorld().getName(), block.getX(), block.getY(), block.getZ());
+ return ps.executeUpdate();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ return 0;
+ } finally {
+ if (ps != null) {
+ try {
+ ps.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ if (conn != null) {
+ try {
+ conn.close();
+ } catch (SQLException ex) {
+ logger.log(Level.SEVERE, null, ex);
+ }
+ }
+ }
+ }
+
+}
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockMemory.java b/EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockMemory.java
new file mode 100644
index 000000000..53dee66d2
--- /dev/null
+++ b/EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockMemory.java
@@ -0,0 +1,205 @@
+package com.earth2me.essentials.protect.data;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map.Entry;
+import java.util.Set;
+import org.bukkit.World;
+import org.bukkit.block.Block;
+import org.bukkit.plugin.Plugin;
+
+public class ProtectedBlockMemory implements IProtectedBlock {
+
+ List<String> worlds = new ArrayList<String>();
+ List<String> playerNames = new ArrayList<String>();
+ IProtectedBlock storage;
+ Plugin plugin;
+
+ class ProtectedLocation {
+
+ int x;
+ int y;
+ int z;
+ int w;
+
+ private ProtectedLocation(Block block, int worldId) {
+ this.x = block.getX();
+ this.y = block.getY();
+ this.z = block.getZ();
+ this.w = worldId;
+ }
+
+ private ProtectedLocation(OwnedBlock ownedBlock, int worldId) {
+ this.x = ownedBlock.x;
+ this.y = ownedBlock.y;
+ this.z = ownedBlock.z;
+ this.w = worldId;
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (o instanceof ProtectedLocation) {
+ ProtectedLocation pl = (ProtectedLocation) o;
+ return x == pl.x && y == pl.y && z == pl.z && w == pl.w;
+ }
+ return false;
+ }
+
+ @Override
+ public int hashCode() {
+ return x ^ y ^ z ^ w;
+ }
+ }
+
+ class ProtectedBy {
+
+ private int playerId = -1;
+ private Set<Integer> playerIds;
+
+ private ProtectedBy() {
+ }
+
+ private void add(int playerId) {
+ if (this.playerId == -1 || this.playerId == playerId) {
+ this.playerId = playerId;
+ } else {
+ if (playerIds == null) {
+ playerIds = new HashSet<Integer>(4);
+ playerIds.add(this.playerId);
+ }
+ playerIds.add(playerId);
+ }
+ }
+
+ private boolean contains(int playerId) {
+ if (playerIds == null) {
+ return this.playerId == playerId;
+ }
+ return playerIds.contains(playerId);
+ }
+
+ private List<String> getPlayers(List<String> playerNames) {
+ if (playerIds == null) {
+ List<String> list = new ArrayList<String>(2);
+ list.add(playerNames.get(playerId));
+ return list;
+ }
+ List<String> list = new ArrayList<String>(playerIds.size());
+ for (Integer integer : playerIds) {
+ list.add(playerNames.get(integer));
+ }
+ return list;
+ }
+
+ private int size() {
+ if (playerIds == null) {
+ return 1;
+ }
+ return playerIds.size();
+ }
+ }
+ HashMap<ProtectedLocation, ProtectedBy> blocks = new HashMap<ProtectedLocation, ProtectedBy>();
+
+ public ProtectedBlockMemory(IProtectedBlock storage) {
+ this.storage = storage;
+ importProtections(storage.exportProtections());
+ }
+
+ public void clearProtections() {
+ blocks.clear();
+ }
+
+ public final void importProtections(List<OwnedBlock> blocks) {
+ for (OwnedBlock ownedBlock : blocks) {
+ ProtectedLocation pl = new ProtectedLocation(ownedBlock, getWorldId(ownedBlock.world));
+ if (ownedBlock.playerName == null) {
+ continue;
+ }
+ protectBlock(pl, ownedBlock.playerName);
+ }
+ }
+
+ public List<OwnedBlock> exportProtections() {
+ List<OwnedBlock> blockList = new ArrayList<OwnedBlock>(blocks.size());
+ for (Entry<ProtectedLocation, ProtectedBy> entry : blocks.entrySet()) {
+ for (String name : entry.getValue().getPlayers(playerNames)) {
+ OwnedBlock ob = new OwnedBlock();
+ ob.x = entry.getKey().x;
+ ob.y = entry.getKey().y;
+ ob.z = entry.getKey().z;
+ ob.world = worlds.get(entry.getKey().w);
+ ob.playerName = name;
+ blockList.add(ob);
+ }
+ }
+ return blockList;
+ }
+
+ public void protectBlock(final Block block, final String playerName) {
+ ProtectedLocation pl = new ProtectedLocation(block, getWorldId(block.getWorld()));
+ protectBlock(pl, playerName);
+ plugin.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new Runnable() {
+ public void run() {
+ storage.protectBlock(block, playerName);
+ }
+ });
+ }
+
+ private void protectBlock(ProtectedLocation pl, String playerName) {
+ int playerId = getPlayerId(playerName);
+ ProtectedBy pb = blocks.get(pl);
+ if (pb == null) {
+ pb = new ProtectedBy();
+ blocks.put(pl, pb);
+ }
+ pb.add(playerId);
+ }
+
+ public boolean isProtected(Block block, String playerName) {
+ int playerId = getPlayerId(playerName);
+ ProtectedLocation pl = new ProtectedLocation(block, getWorldId(block.getWorld()));
+ ProtectedBy pb = blocks.get(pl);
+ return !pb.contains(playerId);
+ }
+
+ public List<String> getOwners(Block block) {
+ ProtectedLocation pl = new ProtectedLocation(block, getWorldId(block.getWorld()));
+ ProtectedBy pb = blocks.get(pl);
+ return pb.getPlayers(playerNames);
+ }
+
+ public int unprotectBlock(final Block block) {
+ ProtectedLocation pl = new ProtectedLocation(block, getWorldId(block.getWorld()));
+ ProtectedBy pb = blocks.remove(pl);
+ plugin.getServer().getScheduler().scheduleAsyncDelayedTask(plugin, new Runnable() {
+ public void run() {
+ storage.unprotectBlock(block);
+ }
+ });
+ return pb.size();
+ }
+
+ private int getPlayerId(String playername) {
+ int id = playerNames.indexOf(playername);
+ if (id < 0) {
+ playerNames.add(playername);
+ id = playerNames.indexOf(playername);
+ }
+ return id;
+ }
+
+ private int getWorldId(World world) {
+ return getWorldId(world.getName());
+ }
+
+ private int getWorldId(String name) {
+ int id = worlds.indexOf(name);
+ if (id < 0) {
+ worlds.add(name);
+ id = worlds.indexOf(name);
+ }
+ return id;
+ }
+}
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockMySQL.java b/EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockMySQL.java
new file mode 100644
index 000000000..c246aca91
--- /dev/null
+++ b/EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockMySQL.java
@@ -0,0 +1,124 @@
+package com.earth2me.essentials.protect.data;
+
+import java.beans.PropertyVetoException;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+
+public class ProtectedBlockMySQL extends ProtectedBlockJDBC {
+
+ public ProtectedBlockMySQL(String url, String username, String password) throws PropertyVetoException {
+ super("com.mysql.jdbc.Driver", url, username, password);
+ }
+
+ private static final String QueryCreateTable =
+ "CREATE TABLE IF NOT EXISTS `EssentialsProtect` ("
+ + "`worldName` varchar(60) NOT NULL,"
+ + "`x` int(11) NOT NULL, `y` int(11) NOT NULL, `z` int(11) NOT NULL,"
+ + "`playerName` varchar(150) DEFAULT NULL,"
+ + "KEY `pos` (`worldName`,`x`,`z`,`y`)"
+ + ") ENGINE=MyISAM DEFAULT CHARSET=utf8";
+
+ @Override
+ protected PreparedStatement getStatementCreateTable(Connection conn) throws SQLException {
+ return conn.prepareStatement(QueryCreateTable);
+ }
+
+ private static final String QueryUpdateFrom2_0TableCheck =
+ "SHOW COLUMNS FROM `EssentialsProtect` LIKE 'id';";
+ private static final String QueryUpdateFrom2_0Table =
+ "ALTER TABLE `EssentialsProtect` "
+ + "CHARACTER SET = utf8, ENGINE = MyISAM,"
+ + "DROP COLUMN `id`,"
+ + "CHANGE COLUMN `playerName` `playerName` VARCHAR(150) NULL AFTER `z`,"
+ + "CHANGE COLUMN `worldName` `worldName` VARCHAR(60) NOT NULL,"
+ + "ADD INDEX `position` (`worldName` ASC, `x` ASC, `z` ASC, `y` ASC),"
+ + "DROP PRIMARY KEY ;";
+
+ @Override
+ protected PreparedStatement getStatementUpdateFrom2_0Table(Connection conn) throws SQLException {
+ PreparedStatement testPS = null;
+ ResultSet testRS = null;
+ try {
+ testPS = conn.prepareStatement(QueryUpdateFrom2_0TableCheck);
+ testRS = testPS.executeQuery();
+ if (testRS.first()) {
+ return conn.prepareStatement(QueryUpdateFrom2_0Table);
+ } else {
+ return conn.prepareStatement("SELECT 1;");
+ }
+ } finally {
+ if (testRS != null) {
+ testRS.close();
+ }
+ if (testPS != null) {
+ testPS.close();
+ }
+ }
+ }
+ private static final String QueryDeleteAll = "DELETE FROM EssentialsProtect;";
+
+ @Override
+ protected PreparedStatement getStatementDeleteAll(Connection conn) throws SQLException {
+ return conn.prepareStatement(QueryDeleteAll);
+ }
+ private static final String QueryInsert =
+ "INSERT INTO EssentialsProtect (worldName, x, y, z, playerName) VALUES (?, ?, ?, ?, ?);";
+
+ @Override
+ protected PreparedStatement getStatementInsert(Connection conn, String world, int x, int y, int z, String playerName) throws SQLException {
+ PreparedStatement ps = conn.prepareStatement(QueryInsert);
+ ps.setString(1, world);
+ ps.setInt(2, x);
+ ps.setInt(3, y);
+ ps.setInt(4, z);
+ ps.setString(5, playerName);
+ return ps;
+ }
+ private static final String QueryCountByPlayer =
+ "SELECT COUNT(playerName), SUM(playerName = ?) FROM EssentialsProtect "
+ + "WHERE worldName = ? AND x = ? AND y = ? AND z = ? GROUP BY x;";
+
+ @Override
+ protected PreparedStatement getStatementPlayerCountByLocation(Connection conn, String world, int x, int y, int z, String playerName) throws SQLException {
+ PreparedStatement ps = conn.prepareStatement(QueryCountByPlayer);
+ ps.setString(1, playerName);
+ ps.setString(2, world);
+ ps.setInt(3, x);
+ ps.setInt(4, y);
+ ps.setInt(5, z);
+ return ps;
+ }
+ private static final String QueryPlayersByLocation =
+ "SELECT playerName FROM EssentialsProtect WHERE worldname = ? AND x = ? AND y = ? AND z = ?;";
+
+ @Override
+ protected PreparedStatement getStatementPlayersByLocation(Connection conn, String world, int x, int y, int z) throws SQLException {
+ PreparedStatement ps = conn.prepareStatement(QueryPlayersByLocation);
+ ps.setString(1, world);
+ ps.setInt(2, x);
+ ps.setInt(3, y);
+ ps.setInt(4, z);
+ return ps;
+ }
+ private static final String QueryDeleteByLocation =
+ "DELETE FROM EssentialsProtect WHERE worldName = ? AND x = ? AND y = ? AND z = ?;";
+
+ @Override
+ protected PreparedStatement getStatementDeleteByLocation(Connection conn, String world, int x, int y, int z) throws SQLException {
+ PreparedStatement ps = conn.prepareStatement(QueryDeleteByLocation);
+ ps.setString(1, world);
+ ps.setInt(2, x);
+ ps.setInt(3, y);
+ ps.setInt(4, z);
+ return ps;
+ }
+ private static final String QueryAllBlocks =
+ "SELECT worldName, x, y, z, playerName FROM EssentialsProtect;";
+
+ @Override
+ protected PreparedStatement getStatementAllBlocks(Connection conn) throws SQLException {
+ return conn.prepareStatement(QueryAllBlocks);
+ }
+}
diff --git a/EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockSQLite.java b/EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockSQLite.java
new file mode 100644
index 000000000..444c657eb
--- /dev/null
+++ b/EssentialsProtect/src/com/earth2me/essentials/protect/data/ProtectedBlockSQLite.java
@@ -0,0 +1,96 @@
+package com.earth2me.essentials.protect.data;
+
+import java.beans.PropertyVetoException;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+
+public class ProtectedBlockSQLite extends ProtectedBlockJDBC {
+
+ public ProtectedBlockSQLite(String url) throws PropertyVetoException {
+ super("org.sqlite.JDBC", url);
+ }
+
+ private static final String QueryCreateTable =
+ "CREATE TABLE IF NOT EXISTS EssentialsProtect ("
+ + "worldName TEXT ,playerName TEXT, "
+ + "x NUMERIC, y NUMERIC, z NUMERIC)";
+
+ @Override
+ protected PreparedStatement getStatementCreateTable(Connection conn) throws SQLException {
+ return conn.prepareStatement(QueryCreateTable);
+ }
+
+ private static final String QueryUpdateFrom2_0Table =
+ "CREATE INDEX IF NOT EXISTS position ON EssentialsProtect ("
+ + "worldName, x, z, y)";
+
+ @Override
+ protected PreparedStatement getStatementUpdateFrom2_0Table(Connection conn) throws SQLException {
+ return conn.prepareStatement(QueryUpdateFrom2_0Table);
+ }
+ private static final String QueryDeleteAll = "DELETE FROM EssentialsProtect;";
+
+ @Override
+ protected PreparedStatement getStatementDeleteAll(Connection conn) throws SQLException {
+ return conn.prepareStatement(QueryDeleteAll);
+ }
+ private static final String QueryInsert =
+ "INSERT INTO EssentialsProtect (worldName, x, y, z, playerName) VALUES (?, ?, ?, ?, ?);";
+
+ @Override
+ protected PreparedStatement getStatementInsert(Connection conn, String world, int x, int y, int z, String playerName) throws SQLException {
+ PreparedStatement ps = conn.prepareStatement(QueryInsert);
+ ps.setString(1, world);
+ ps.setInt(2, x);
+ ps.setInt(3, y);
+ ps.setInt(4, z);
+ ps.setString(5, playerName);
+ return ps;
+ }
+ private static final String QueryPlayerCountByLocation =
+ "SELECT COUNT(playerName), SUM(playerName = ?) FROM EssentialsProtect "
+ + "WHERE worldName = ? AND x = ? AND y = ? AND z = ? GROUP BY x;";
+
+ @Override
+ protected PreparedStatement getStatementPlayerCountByLocation(Connection conn, String world, int x, int y, int z, String playerName) throws SQLException {
+ PreparedStatement ps = conn.prepareStatement(QueryPlayerCountByLocation);
+ ps.setString(1, playerName);
+ ps.setString(2, world);
+ ps.setInt(3, x);
+ ps.setInt(4, y);
+ ps.setInt(5, z);
+ return ps;
+ }
+ private static final String QueryPlayersByLocation =
+ "SELECT playerName FROM EssentialsProtect WHERE worldname = ? AND x = ? AND y = ? AND z = ?;";
+
+ @Override
+ protected PreparedStatement getStatementPlayersByLocation(Connection conn, String world, int x, int y, int z) throws SQLException {
+ PreparedStatement ps = conn.prepareStatement(QueryPlayersByLocation);
+ ps.setString(1, world);
+ ps.setInt(2, x);
+ ps.setInt(3, y);
+ ps.setInt(4, z);
+ return ps;
+ }
+ private static final String QueryDeleteByLocation =
+ "DELETE FROM EssentialsProtect WHERE worldName = ? AND x = ? AND y = ? AND z = ?;";
+
+ @Override
+ protected PreparedStatement getStatementDeleteByLocation(Connection conn, String world, int x, int y, int z) throws SQLException {
+ PreparedStatement ps = conn.prepareStatement(QueryDeleteByLocation);
+ ps.setString(1, world);
+ ps.setInt(2, x);
+ ps.setInt(3, y);
+ ps.setInt(4, z);
+ return ps;
+ }
+ private static final String QueryAllBlocks =
+ "SELECT worldName, x, y, z, playerName FROM EssentialsProtect;";
+
+ @Override
+ protected PreparedStatement getStatementAllBlocks(Connection conn) throws SQLException {
+ return conn.prepareStatement(QueryAllBlocks);
+ }
+}