mirror of
https://github.com/CivMC/Civ.git
synced 2026-07-18 00:20:44 +00:00
Cleaned up some generic-related warnings.
Moved all database functions to a separate class.
This commit is contained in:
@@ -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<Integer, Player> taskInitiator;
|
||||
public static HashMap<Player, Material> 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<Block, Integer>();
|
||||
playerReenforcers = new HashMap<Player, Material>();
|
||||
this.taskMaterial = new HashMap<Integer, Material>();
|
||||
this.taskInitiator = new HashMap<Integer, Player>();
|
||||
|
||||
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)
|
||||
{
|
||||
|
||||
@@ -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<Material, Integer> materialStrengths;
|
||||
public static HashMap<Material, Integer> materialRequirements;
|
||||
public HashMap<Player, Integer> 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<Material, Integer> materialStrengths;
|
||||
public static HashMap<Material, Integer> materialRequirements;
|
||||
public HashMap<Player, Integer> playerPlacementState;
|
||||
public CitadelDao dao;
|
||||
|
||||
public void onEnable()
|
||||
{
|
||||
reloadConfig();
|
||||
materialStrengths = new HashMap<Material, Integer>();
|
||||
materialRequirements = new HashMap<Material, Integer>();
|
||||
this.playerPlacementState = new HashMap<Player, Integer>();
|
||||
|
||||
List<Integer> tmp1 = getConfig().getIntegerList("materials.strengths.keys");
|
||||
List<Integer> tmp2 = getConfig().getIntegerList("materials.strengths.strengths");
|
||||
List<Integer> 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;
|
||||
}
|
||||
}
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user