diff --git a/plugins/citadel-paper/src/com/untamedears/Citadel/BlockListener.java b/plugins/citadel-paper/src/com/untamedears/Citadel/BlockListener.java index d79ba336f..b048db181 100644 --- a/plugins/citadel-paper/src/com/untamedears/Citadel/BlockListener.java +++ b/plugins/citadel-paper/src/com/untamedears/Citadel/BlockListener.java @@ -1,5 +1,6 @@ package com.untamedears.Citadel; +import com.untamedears.Citadel.dao.CitadelDao; import org.bukkit.ChatColor; import org.bukkit.Material; import org.bukkit.block.Block; @@ -16,9 +17,6 @@ import org.bukkit.inventory.ItemStack; import org.bukkit.material.Door; import org.bukkit.plugin.java.JavaPlugin; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; @@ -29,17 +27,17 @@ public class BlockListener implements Listener private HashMap taskInitiator; public static HashMap playerReenforcers; private JavaPlugin myPlugin; - private Connection conn; + private CitadelDao dao; public BlockListener(JavaPlugin jp)throws SQLException, ClassNotFoundException { - this.delayedReenforcements = new HashMap(); - playerReenforcers = new HashMap(); - this.taskMaterial = new HashMap(); - this.taskInitiator = new HashMap(); + this.delayedReenforcements = new HashMap(); + playerReenforcers = new HashMap(); + this.taskMaterial = new HashMap(); + this.taskInitiator = new HashMap(); this.myPlugin = jp; - this.conn = ((Citadel)this.myPlugin).connection; + this.dao = ((Citadel)this.myPlugin).dao; } @EventHandler @@ -47,39 +45,29 @@ public class BlockListener implements Listener { Player placer = bpe.getPlayer(); Block block = bpe.getBlock(); - Material matl = (Material)playerReenforcers.get(placer); - Integer pid = null; + Material matl = playerReenforcers.get(placer); if ((matl != null) && (Citadel.materialStrengths.containsKey(matl)) && (Citadel.materialRequirements.containsKey(matl))) { System.out.println("matl: " + matl + " requires: " + Citadel.materialRequirements.get(matl)); - if (placer.getInventory().contains(matl, ((Integer)Citadel.materialRequirements.get(matl)).intValue())) + if (placer.getInventory().contains(matl, Citadel.materialRequirements.get(matl))) { try { - PreparedStatement tmp = this.conn.prepareStatement( - "INSERT INTO REENFORCEMENTS (x,y,z,world,durability) values (?,?,?,?,?)"); - tmp.setInt(1, block.getX()); - tmp.setInt(2, block.getY()); - tmp.setInt(3, block.getZ()); - tmp.setString(4, block.getWorld().getName()); - tmp.setInt(5, ((Integer)Citadel.materialStrengths.get(matl)).intValue()); - - pid = Integer.valueOf(this.myPlugin.getServer().getScheduler().scheduleSyncDelayedTask( - this.myPlugin, - new DelayedReenforcement(tmp), - 20L)); + int pid = this.myPlugin.getServer().getScheduler().scheduleSyncDelayedTask( + this.myPlugin, + dao.addReinforcement(block, matl), + 20L); this.delayedReenforcements.put(block, pid); - placer.getInventory().removeItem(new ItemStack[] { new ItemStack(matl, ((Integer)Citadel.materialRequirements.get(matl)).intValue()) }); + placer.getInventory().removeItem(new ItemStack(matl, Citadel.materialRequirements.get(matl))); this.taskInitiator.put(pid, placer); this.taskMaterial.put(pid, matl); } catch (SQLException e) { System.err.println("Exception creating reenforcement:\n" + e); - return; } - } + } else { placer.sendMessage(ChatColor.YELLOW + "You require more " + matl + " to continue reenforcements."); @@ -98,70 +86,34 @@ public class BlockListener implements Listener @EventHandler public void checkDurabilityAndDelayedEventCheck(BlockBreakEvent bbe) { - Block tmp = bbe.getBlock(); + Block block = bbe.getBlock(); + try { + if (this.delayedReenforcements.containsKey(block)) + { + Integer pid = this.delayedReenforcements.get(block); + Material matl = this.taskMaterial.get(pid); + this.myPlugin.getServer().getScheduler().cancelTask(this.delayedReenforcements.get(block)); + this.taskInitiator.get(pid).getInventory().addItem(new ItemStack(matl, Citadel.materialRequirements.get(matl))); - if (this.delayedReenforcements.containsKey(tmp)) - { - Integer pid = (Integer)this.delayedReenforcements.get(tmp); - Material matl = (Material)this.taskMaterial.get(pid); - this.myPlugin.getServer().getScheduler().cancelTask(((Integer)this.delayedReenforcements.get(tmp)).intValue()); - ((Player)this.taskInitiator.get(pid)).getInventory().addItem(new ItemStack[] { new ItemStack(matl, ((Integer)Citadel.materialRequirements.get(matl)).intValue()) }); + this.delayedReenforcements.remove(block); + this.taskInitiator.remove(pid); + this.taskMaterial.remove(pid); + } - this.delayedReenforcements.remove(tmp); - this.taskInitiator.remove(pid); - this.taskMaterial.remove(pid); - } + Integer durability = dao.updateReinforcement(block, 1); + if (durability == null) return; - try - { - PreparedStatement ask = this.conn.prepareStatement( - "SELECT DURABILITY FROM REENFORCEMENTS WHERE x=? AND y=? AND z=? AND world=?"); - ask.setInt(1, tmp.getX()); - ask.setInt(2, tmp.getY()); - ask.setInt(3, tmp.getZ()); - ask.setString(4, tmp.getWorld().getName()); - ask.execute(); - ResultSet answer = ask.getResultSet(); - if (!answer.next()) - { - answer.close(); - ask.close(); - return; - } - int durability = answer.getInt(1); - durability--; - ask.close(); - answer.close(); - if (durability <= 0) - { - PreparedStatement delete = this.conn.prepareStatement( - "DELETE FROM REENFORCEMENTS WHERE x=? AND y=? AND z=? AND world=?"); - delete.setInt(1, tmp.getX()); - delete.setInt(2, tmp.getY()); - delete.setInt(3, tmp.getZ()); - delete.setString(4, tmp.getWorld().getName()); - delete.execute(); - delete.close(); - } - else - { - bbe.setCancelled(true); - PreparedStatement update = this.conn.prepareStatement( - "UPDATE REENFORCEMENTS SET DURABILITY=? WHERE x=? AND y=? AND z=? AND world=?"); - update.setInt(1, durability); - update.setInt(2, tmp.getX()); - update.setInt(3, tmp.getY()); - update.setInt(4, tmp.getZ()); - update.setString(5, tmp.getWorld().getName()); - update.execute(); - update.close(); - } - } - catch (SQLException e) - { - System.err.println("Citadel - error accessing database:\n" + e); - } - } + if (durability <= 0) + { + dao.removeReinforcement(block); + } else + { + bbe.setCancelled(true); + } + } catch (SQLException e) { + System.err.println("Citadel - error accessing database:\n" + e); + } + } @EventHandler public void controlAccess(PlayerInteractEvent pie) { @@ -174,52 +126,12 @@ public class BlockListener implements Listener try { if ((matl == Material.CHEST) || (matl == Material.WOODEN_DOOR) || (matl == Material.IRON_DOOR)) { - PreparedStatement tmp = this.conn.prepareStatement( - "SELECT grp FROM REGISTRY WHERE x=? AND y=? AND z=? AND world=?"); - tmp.setInt(1, block.getX()); - tmp.setInt(2, block.getY()); - tmp.setInt(3, block.getZ()); - tmp.setString(4, block.getWorld().getName()); - tmp.execute(); - ResultSet answer = tmp.getResultSet(); - - if (!answer.next()) { - answer.close(); - tmp.close(); - return; - } - do - { - PreparedStatement queryGroup = this.conn.prepareStatement( - "SELECT grpName FROM GROUPS WHERE grpName=? AND member=?"); - queryGroup.setString(1, answer.getString(1)); - queryGroup.setString(2, p.getPlayerListName()); - queryGroup.execute(); - ResultSet tmpRs = queryGroup.getResultSet(); - if (tmpRs.next()) - { - tmpRs.close(); - queryGroup.close(); - tmp.close(); - return; - } - tmpRs.close(); - queryGroup.close(); - } - while (answer.next()); - tmp.close(); - - p.sendMessage(ChatColor.RED + "That door/chest is locked."); - /* - p.sendMessage(ChatColor.RED + "That door/chest is locked. O NOZ!!!"); - p.sendMessage(ChatColor.MAGIC + "Hey Beavis, that was, like, cool."); - p.sendMessage(ChatColor.YELLOW + "Huh huh."); - p.sendMessage(ChatColor.GREEN + "Uh, huh huh. Oh yeah. Money is cool!"); - p.sendMessage(ChatColor.BLUE + "YEAH! It, like, uh, huh huh. Uh..."); - p.sendMessage(ChatColor.LIGHT_PURPLE + "Huh huh huh. Uh, hmmmm, heh, huh, hmmm huh huh. Yeah."); - */ - pie.setCancelled(true); - } + String group = dao.getRegisteredGroup(block); + if (group != null && !dao.isPlayerInGroup(group, p.getDisplayName())) { + p.sendMessage(ChatColor.RED + "That door/chest is locked."); + pie.setCancelled(true); + } + } } catch (SQLException e) { @@ -234,21 +146,10 @@ public class BlockListener implements Listener if ((block instanceof Door)) try { - PreparedStatement tmp = this.conn.prepareStatement( - "SELECT group FROM REGISTRY WHERE x=? AND y=? AND z=? AND world=?"); - tmp.setInt(1, block.getX()); - tmp.setInt(2, block.getY()); - tmp.setInt(3, block.getZ()); - tmp.setString(4, block.getWorld().getName()); - tmp.execute(); - ResultSet answer = tmp.getResultSet(); - - if (answer.next()) - { - bre.setNewCurrent(bre.getOldCurrent()); - } - answer.close(); - tmp.close(); + String group = dao.getRegisteredGroup(block); + if (group != null) { + bre.setNewCurrent(bre.getOldCurrent()); + } } catch (SQLException e) { @@ -259,23 +160,13 @@ public class BlockListener implements Listener @EventHandler public void makePrivateGroup(PlayerLoginEvent ple) { - ((Citadel)this.myPlugin).playerPlacementState.put(ple.getPlayer(), Integer.valueOf(1)); + ((Citadel)this.myPlugin).playerPlacementState.put(ple.getPlayer(), 1); try { - PreparedStatement tmp = this.conn.prepareStatement("SELECT grpName FROM GROUPS WHERE grpName = ?"); - tmp.setString(1, ple.getPlayer().getDisplayName()); - tmp.execute(); - ResultSet rs = tmp.getResultSet(); - if (!rs.next()) - { - tmp = this.conn.prepareStatement("INSERT INTO GROUPS (grpName,member) values (?,?)"); - tmp.setString(1, ple.getPlayer().getDisplayName()); - tmp.setString(2, ple.getPlayer().getDisplayName()); - tmp.execute(); - tmp.close(); - } - rs.close(); - tmp.close(); + String playerName = ple.getPlayer().getDisplayName(); + if (!dao.isPlayerInGroup(playerName, playerName)) { + dao.addPlayerToGroup(playerName, playerName); + } } catch (SQLException e) { @@ -294,31 +185,18 @@ public class BlockListener implements Listener return; } - Integer playerState = (Integer)((Citadel)this.myPlugin).playerPlacementState.get(bpe.getPlayer()); + Integer playerState = ((Citadel)this.myPlugin).playerPlacementState.get(bpe.getPlayer()); if (playerState == null) { - ((Citadel)this.myPlugin).playerPlacementState.put(bpe.getPlayer(), Integer.valueOf(1)); - playerState = Integer.valueOf(1); + ((Citadel)this.myPlugin).playerPlacementState.put(bpe.getPlayer(), 0); + playerState = 0; } - if (playerState.intValue() > 0) + if (playerState > 0) { try { - PreparedStatement tmp = this.conn.prepareStatement( - "INSERT INTO REGISTRY (x,y,z,world,grp) VALUES (?,?,?,?,?)"); - tmp.setInt(1, blk.getX()); - tmp.setInt(2, blk.getY()); - tmp.setInt(3, blk.getZ()); - tmp.setString(4, blk.getWorld().getName()); - tmp.setString(5, bpe.getPlayer().getDisplayName()); - tmp.execute(); - if (playerState.intValue() > 1) - { - tmp.setString(5, bpe.getPlayer().getDisplayName() + "Grp"); - tmp.execute(); - } - tmp.close(); + dao.addRegisteredGroup(blk, bpe.getPlayer().getDisplayName()); } catch (SQLException e) { @@ -331,7 +209,7 @@ public class BlockListener implements Listener { try { - this.conn.close(); + dao.close(); } catch (SQLException e) { diff --git a/plugins/citadel-paper/src/com/untamedears/Citadel/Citadel.java b/plugins/citadel-paper/src/com/untamedears/Citadel/Citadel.java index 3e4c8717d..2e3bf73c6 100644 --- a/plugins/citadel-paper/src/com/untamedears/Citadel/Citadel.java +++ b/plugins/citadel-paper/src/com/untamedears/Citadel/Citadel.java @@ -1,191 +1,172 @@ -package com.untamedears.Citadel; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.util.HashMap; -import java.util.List; -import org.bukkit.Bukkit; -import org.bukkit.ChatColor; -import org.bukkit.Material; -import org.bukkit.command.Command; -import org.bukkit.command.CommandSender; -import org.bukkit.entity.Player; -import org.bukkit.plugin.java.JavaPlugin; - -public class Citadel extends JavaPlugin -{ - public static HashMap materialStrengths; - public static HashMap materialRequirements; - public HashMap playerPlacementState; - public Connection connection; - - public void onEnable() - { - reloadConfig(); - materialStrengths = new HashMap(); - materialRequirements = new HashMap(); - this.playerPlacementState = new HashMap(); - - List tmp1 = getConfig().getIntegerList("materials.strengths.keys"); - List tmp2 = getConfig().getIntegerList("materials.strengths.strengths"); - List tmp3 = getConfig().getIntegerList("materials.strengths.requirements"); - - Integer[] keys = (Integer[])tmp1.toArray(new Integer[tmp1.size()]); - Integer[] strengths = (Integer[])tmp2.toArray(new Integer[tmp2.size()]); - Integer[] requirements = (Integer[])tmp3.toArray(new Integer[tmp3.size()]); - - if ((keys.length != strengths.length) || (keys.length != requirements.length)) - { - System.err.println("Citadel - config lengths not matching!"); - System.err.println("File is most likely corrupted but I'll try to do the best I can"); - System.err.println("By interpreting the shortest of it all as the proper length"); - System.err.println("Proceed with caution and re-look-over your configuration file!"); - } - for (int i = 0; i < Math.min(keys.length, Math.min(strengths.length, requirements.length)); i++) - { - materialStrengths.put(Material.getMaterial(keys[i].intValue()), strengths[i]); - materialRequirements.put(Material.getMaterial(keys[i].intValue()), requirements[i]); - } - - try - { - Class.forName("org.sqlite.JDBC"); - - this.connection = DriverManager.getConnection("jdbc:sqlite:plugins/Citadel/Citadel.db"); - this.connection.createStatement().execute( - "CREATE TABLE IF NOT EXISTS REENFORCEMENTS (x INTEGER,y INTEGER,z INTEGER,world TEXT,durability INTEGER);"); - - this.connection.createStatement().execute( - "CREATE TABLE IF NOT EXISTS GROUPS (grpName TEXT,member TEXT);"); - - this.connection.createStatement().execute( - "CREATE TABLE IF NOT EXISTS REGISTRY (x INTEGER,y INTEGER,z INTEGER,world TEXT,grp TEXT);"); - - Bukkit.getServer().getPluginManager().registerEvents(new BlockListener(this), this); - } - catch (SQLException e) - { - System.err.println("sorry there was some sort of sql exception:"); - System.err.println(e.toString()); - System.err.println(e.getSQLState()); - return; - } - catch (ClassNotFoundException e) - { - System.err.println("sorry we couldn't find the sqlite driver:"); - System.err.println(e.toString()); - return; - } - catch (Exception e) - { - System.err.println("Other weird error when enabling Citadel: "); - System.err.println(e.toString()); - } - - System.out.println("Citadel - Hi folks, Citadel is now on :D."); - } - - public void onDisable() - { - System.out.println("Citadel - Hi folks, Citadel is disabled :(."); - } - - public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) - { - if (!(sender instanceof Player)) { - sender.sendMessage(ChatColor.RED + "You must be a player!"); - return true; - } - - if (cmd.getName().equalsIgnoreCase("ctfortify")) - { - if (args.length < 1) - { - sender.sendMessage(ChatColor.RED + "Please specify reenforcement block type."); - return true; - } - Material matl = Material.getMaterial(args[0].toUpperCase()); - if (materialStrengths.containsKey(matl)) - BlockListener.playerReenforcers.put((Player)sender, matl); - else - sender.sendMessage(ChatColor.YELLOW + "Material " + args[0] + " not found as applicable reenforcement material"); - } - else if (cmd.getName().equalsIgnoreCase("ctstop")) - { - BlockListener.playerReenforcers.remove((Player)sender); - sender.sendMessage(ChatColor.GREEN + "You are now out of reenforcement mode"); - } - else if (cmd.getName().equalsIgnoreCase("ctplink")) - { - sender.sendMessage(ChatColor.RED + "Not yet implemented, sorry"); - if (args.length < 1) - sender.sendMessage(ChatColor.RED + "Please specify reenforcement block type."); - } - else if (cmd.getName().equalsIgnoreCase("ctlist")) - { - if ((materialRequirements.keySet() == null) || (materialRequirements.keySet().size() == 0)) - { - sender.sendMessage(ChatColor.YELLOW + "No reenforcement materials available."); - } - for (Material m : materialRequirements.keySet()) - sender.sendMessage(ChatColor.GREEN + m.toString() + " has strength " + materialStrengths.get(m) + " and you'll need " + materialRequirements.get(m) + " of it."); - } - else if (cmd.getName().equalsIgnoreCase("ctadd")) - { - if (args.length < 1) - { - sender.sendMessage(ChatColor.RED + "Please specify player to add."); - return true; - } - try { - PreparedStatement tmp = this.connection.prepareStatement( - "INSERT INTO GROUPS (grpName,member) values (?,?)"); - tmp.setString(1, ((Player)sender).getDisplayName() + "Grp"); - tmp.setString(2, args[0]); - tmp.execute(); - sender.sendMessage(ChatColor.GREEN + " player " + args[0] + " added."); - } - catch (SQLException e) - { - System.err.println("Error adding player " + args[0] + " to group " + ((Player)sender).getDisplayName() + ":\n" + e); - } - } - else if (cmd.getName().equalsIgnoreCase("ctrm")) - { - if (args.length < 1) - { - sender.sendMessage(ChatColor.RED + "Please specify player to add."); - return true; - } - try - { - PreparedStatement tmp = this.connection.prepareStatement( - "DELETE FROM GROUPS WHERE grpName=? AND member=?"); - tmp.setString(1, ((Player)sender).getDisplayName() + "Grp"); - tmp.setString(2, args[0]); - tmp.execute(); - sender.sendMessage(ChatColor.GREEN + " player " + args[0] + " removed."); - } - catch (SQLException e) - { - System.err.println("Error removing player " + args[0] + " from group " + ((Player)sender).getDisplayName() + ":\n" + e); - } - } - else if (cmd.getName().equalsIgnoreCase("ctpublic")) - { - this.playerPlacementState.put((Player)sender, Integer.valueOf(0)); - sender.sendMessage(ChatColor.GREEN + "Now in public mode."); - } - else if (cmd.getName().equalsIgnoreCase("ctprivate")) - { - this.playerPlacementState.put((Player)sender, Integer.valueOf(1)); - sender.sendMessage(ChatColor.GREEN + "Now in private mode."); - } else if (cmd.getName().equalsIgnoreCase("ctgrp")) { - this.playerPlacementState.put((Player)sender, Integer.valueOf(2)); - sender.sendMessage(ChatColor.GREEN + "Now in group mode."); - } - return true; - } +package com.untamedears.Citadel; + +import com.untamedears.Citadel.dao.CitadelDao; +import org.bukkit.Bukkit; +import org.bukkit.ChatColor; +import org.bukkit.Material; +import org.bukkit.command.Command; +import org.bukkit.command.CommandSender; +import org.bukkit.entity.Player; +import org.bukkit.plugin.java.JavaPlugin; + +import java.sql.SQLException; +import java.util.HashMap; +import java.util.List; + +public class Citadel extends JavaPlugin +{ + public static HashMap materialStrengths; + public static HashMap materialRequirements; + public HashMap playerPlacementState; + public CitadelDao dao; + + public void onEnable() + { + reloadConfig(); + materialStrengths = new HashMap(); + materialRequirements = new HashMap(); + this.playerPlacementState = new HashMap(); + + List tmp1 = getConfig().getIntegerList("materials.strengths.keys"); + List tmp2 = getConfig().getIntegerList("materials.strengths.strengths"); + List tmp3 = getConfig().getIntegerList("materials.strengths.requirements"); + + Integer[] keys = tmp1.toArray(new Integer[tmp1.size()]); + Integer[] strengths = tmp2.toArray(new Integer[tmp2.size()]); + Integer[] requirements = tmp3.toArray(new Integer[tmp3.size()]); + + if ((keys.length != strengths.length) || (keys.length != requirements.length)) + { + System.err.println("Citadel - config lengths not matching!"); + System.err.println("File is most likely corrupted but I'll try to do the best I can"); + System.err.println("By interpreting the shortest of it all as the proper length"); + System.err.println("Proceed with caution and re-look-over your configuration file!"); + } + for (int i = 0; i < Math.min(keys.length, Math.min(strengths.length, requirements.length)); i++) + { + materialStrengths.put(Material.getMaterial(keys[i]), strengths[i]); + materialRequirements.put(Material.getMaterial(keys[i]), requirements[i]); + } + + try + { + dao = new CitadelDao(); + + Bukkit.getServer().getPluginManager().registerEvents(new BlockListener(this), this); + } + catch (SQLException e) + { + System.err.println("sorry there was some sort of sql exception:"); + System.err.println(e.toString()); + System.err.println(e.getSQLState()); + return; + } + catch (ClassNotFoundException e) + { + System.err.println("sorry we couldn't find the sqlite driver:"); + System.err.println(e.toString()); + return; + } + catch (Exception e) + { + System.err.println("Other weird error when enabling Citadel: "); + System.err.println(e.toString()); + } + + System.out.println("Citadel - Hi folks, Citadel is now on :D."); + } + + public void onDisable() + { + System.out.println("Citadel - Hi folks, Citadel is disabled :(."); + } + + public boolean onCommand(CommandSender sender, Command cmd, String commandLabel, String[] args) + { + if (!(sender instanceof Player)) { + sender.sendMessage(ChatColor.RED + "You must be a player!"); + return true; + } + + if (cmd.getName().equalsIgnoreCase("ctfortify")) + { + if (args.length < 1) + { + sender.sendMessage(ChatColor.RED + "Please specify reenforcement block type."); + return true; + } + Material matl = Material.getMaterial(args[0].toUpperCase()); + if (materialStrengths.containsKey(matl)) + BlockListener.playerReenforcers.put((Player)sender, matl); + else + sender.sendMessage(ChatColor.YELLOW + "Material " + args[0] + " not found as applicable reenforcement material"); + } + else if (cmd.getName().equalsIgnoreCase("ctstop")) + { + BlockListener.playerReenforcers.remove((Player)sender); + sender.sendMessage(ChatColor.GREEN + "You are now out of reenforcement mode"); + } + else if (cmd.getName().equalsIgnoreCase("ctplink")) + { + sender.sendMessage(ChatColor.RED + "Not yet implemented, sorry"); + if (args.length < 1) + sender.sendMessage(ChatColor.RED + "Please specify reenforcement block type."); + } + else if (cmd.getName().equalsIgnoreCase("ctlist")) + { + if ((materialRequirements.keySet() == null) || (materialRequirements.keySet().size() == 0)) + { + sender.sendMessage(ChatColor.YELLOW + "No reenforcement materials available."); + } + for (Material m : materialRequirements.keySet()) + sender.sendMessage(ChatColor.GREEN + m.toString() + " has strength " + materialStrengths.get(m) + " and you'll need " + materialRequirements.get(m) + " of it."); + } + else if (cmd.getName().equalsIgnoreCase("ctadd")) + { + if (args.length < 1) + { + sender.sendMessage(ChatColor.RED + "Please specify player to add."); + return true; + } + try { + dao.addPlayerToGroup(((Player) sender).getDisplayName() + "Grp", args[0]); + sender.sendMessage(ChatColor.GREEN + " player " + args[0] + " added."); + } + catch (SQLException e) + { + System.err.println("Error adding player " + args[0] + " to group " + ((Player)sender).getDisplayName() + ":\n" + e); + } + } + else if (cmd.getName().equalsIgnoreCase("ctrm")) + { + if (args.length < 1) + { + sender.sendMessage(ChatColor.RED + "Please specify player to add."); + return true; + } + try + { + dao.removePlayerFromGroup(((Player)sender).getDisplayName() + "Grp", args[0]); + sender.sendMessage(ChatColor.GREEN + " player " + args[0] + " removed."); + } + catch (SQLException e) + { + System.err.println("Error removing player " + args[0] + " from group " + ((Player)sender).getDisplayName() + ":\n" + e); + } + } + else if (cmd.getName().equalsIgnoreCase("ctpublic")) + { + this.playerPlacementState.put((Player)sender, 0); + sender.sendMessage(ChatColor.GREEN + "Now in public mode."); + } + else if (cmd.getName().equalsIgnoreCase("ctprivate")) + { + this.playerPlacementState.put((Player)sender, 1); + sender.sendMessage(ChatColor.GREEN + "Now in private mode."); + } else if (cmd.getName().equalsIgnoreCase("ctgrp")) { + this.playerPlacementState.put((Player)sender, 2); + sender.sendMessage(ChatColor.GREEN + "Now in group mode."); + } + return true; + } } \ No newline at end of file diff --git a/plugins/citadel-paper/src/com/untamedears/Citadel/dao/CitadelDao.java b/plugins/citadel-paper/src/com/untamedears/Citadel/dao/CitadelDao.java new file mode 100644 index 000000000..12cb8e7ba --- /dev/null +++ b/plugins/citadel-paper/src/com/untamedears/Citadel/dao/CitadelDao.java @@ -0,0 +1,143 @@ +package com.untamedears.Citadel.dao; + +import com.untamedears.Citadel.Citadel; +import com.untamedears.Citadel.DelayedReenforcement; +import org.bukkit.Material; +import org.bukkit.block.Block; + +import java.sql.*; + +/** + * Created by IntelliJ IDEA. + * User: chrisrico + * Date: 3/18/12 + * Time: 3:58 PM + */ +public class CitadelDao { + private static final String CREATE_REINFORCEMENTS = "CREATE TABLE IF NOT EXISTS REENFORCEMENTS (x INTEGER,y INTEGER,z INTEGER,world TEXT,durability INTEGER);"; + private static final String CREATE_GROUPS = "CREATE TABLE IF NOT EXISTS GROUPS (grpName TEXT,member TEXT);"; + private static final String CREATE_REGISTRY = "CREATE TABLE IF NOT EXISTS REGISTRY (x INTEGER,y INTEGER,z INTEGER,world TEXT,grp TEXT);"; + + private static final String INSERT_GROUP = "INSERT INTO GROUPS (grpName,member) values (?,?);"; + private static final String SELECT_GROUP = "SELECT grpName FROM GROUPS WHERE grpName=? AND member=?;"; + private static final String DELETE_GROUP = "DELETE FROM GROUPS WHERE grpName=? AND member=?;"; + + private static final String INSERT_REINFORCEMENT = "INSERT INTO REENFORCEMENTS (x,y,z,world,durability) values (?,?,?,?,?);"; + private static final String UPDATE_REINFORCEMENT = "UPDATE REENFORCEMENTS SET DURABILITY=DURABILITY-? WHERE x=? AND y=? AND z=? AND world=?;"; + private static final String SELECT_REINFORCEMENT = "SELECT DURABILITY FROM REENFORCEMENTS WHERE x=? AND y=? AND z=? AND world=?;"; + private static final String DELETE_REINFORCEMENT = "DELETE FROM REENFORCEMENTS WHERE x=:x AND y=? AND z=? AND world=?;"; + + private static final String SELECT_REGISTRY = "SELECT grp FROM REGISTRY WHERE x=? AND y=? AND z=? AND world=?"; + + private Connection conn; + + public CitadelDao() throws ClassNotFoundException, SQLException { + Class.forName("org.sqlite.JDBC"); + + conn = DriverManager.getConnection("jdbc:sqlite:plugins/Citadel/Citadel.db"); + conn.createStatement().execute(CREATE_REINFORCEMENTS); + conn.createStatement().execute(CREATE_GROUPS); + conn.createStatement().execute(CREATE_REGISTRY); + } + + public void addPlayerToGroup(String group, String player) throws SQLException { + PreparedStatement tmp = conn.prepareStatement(INSERT_GROUP); + tmp.setString(1, group); + tmp.setString(2, player); + tmp.execute(); + tmp.close(); + } + + public void removePlayerFromGroup(String group, String player) throws SQLException { + PreparedStatement tmp = conn.prepareStatement(DELETE_GROUP); + tmp.setString(1, group); + tmp.setString(2, player); + tmp.execute(); + tmp.close(); + } + + public boolean isPlayerInGroup(String group, String player) throws SQLException { + boolean isInGroup; + PreparedStatement tmp = conn.prepareStatement(SELECT_GROUP); + tmp.setString(1, group); + tmp.setString(2, player); + tmp.execute(); + ResultSet result = tmp.getResultSet(); + isInGroup = result.next(); + + result.close(); + tmp.close(); + + return isInGroup; + } + + public DelayedReenforcement addReinforcement(Block block, Material material) throws SQLException { + PreparedStatement tmp = conn.prepareStatement(INSERT_REINFORCEMENT); + setBlockParameters(tmp, block); + tmp.setInt(5, Citadel.materialStrengths.get(material)); + + return new DelayedReenforcement(tmp); + } + + public Integer updateReinforcement(Block block, int durabilityDamage) throws SQLException { + Integer durability = null; + PreparedStatement tmp = conn.prepareStatement(UPDATE_REINFORCEMENT + SELECT_REINFORCEMENT); + tmp.setInt(1, durabilityDamage); + setBlockParameters(tmp, block); + setBlockParameters(tmp, block); + tmp.execute(); + ResultSet result = tmp.getResultSet(); + if (result.next()) { + durability = result.getInt(1); + } + + result.close(); + tmp.close(); + + return durability; + } + + public void removeReinforcement(Block block) throws SQLException { + PreparedStatement tmp = conn.prepareStatement(DELETE_REINFORCEMENT); + setBlockParameters(tmp, block); + tmp.execute(); + tmp.close(); + } + + public void addRegisteredGroup(Block block, String group) throws SQLException { + PreparedStatement tmp = this.conn.prepareStatement( + "INSERT INTO REGISTRY (x,y,z,world,grp) VALUES (?,?,?,?,?)"); + setBlockParameters(tmp, block); + tmp.setString(5, group); + tmp.execute(); + tmp.close(); + } + + public String getRegisteredGroup(Block block) throws SQLException { + String group = null; + PreparedStatement tmp = conn.prepareStatement(SELECT_REGISTRY); + setBlockParameters(tmp, block); + tmp.execute(); + ResultSet result = tmp.getResultSet(); + if (result.next()) { + group = result.getString(1); + } + + result.close(); + tmp.close(); + + return group; + } + + private void setBlockParameters(PreparedStatement tmp, Block block) throws SQLException { + int modifier = tmp.getParameterMetaData().getParameterCount(); + tmp.setInt(1 + modifier, block.getX()); + tmp.setInt(2 + modifier, block.getY()); + tmp.setInt(3 + modifier, block.getZ()); + tmp.setString(4 + modifier, block.getWorld().getName()); + } + + public void close() throws SQLException { + conn.close(); + } +}