This commit is contained in:
MistPhizzle 2014-09-06 22:44:20 -04:00
parent 7a709e7d19
commit 306341c350
8 changed files with 322 additions and 32 deletions

View file

@ -14,7 +14,7 @@ public class BendingPlayer {
UUID uuid;
String player;
ArrayList<Element> elements;
HashMap<Integer, String> abilities;
private HashMap<Integer, String> abilities;
ConcurrentHashMap<String, Long> cooldowns;
boolean permaRemoved;
boolean isToggled;
@ -26,7 +26,7 @@ public class BendingPlayer {
this.uuid = uuid;
this.player = player;
this.elements = elements;
this.abilities = abilities;
this.setAbilities(abilities);
cooldowns = new ConcurrentHashMap<String, Long>();
this.permaRemoved = permaRemoved;
isToggled = true;
@ -107,4 +107,8 @@ public class BendingPlayer {
public boolean isChiBlocked() {
return blockedChi;
}
public void setAbilities(HashMap<Integer, String> abilities) {
this.abilities = abilities;
}
}

View file

@ -26,6 +26,7 @@ import org.bukkit.scheduler.BukkitTask;
import com.projectkorra.ProjectKorra.Ability.AbilityModuleManager;
import com.projectkorra.ProjectKorra.Ability.StockAbilities;
import com.projectkorra.ProjectKorra.Objects.Preset;
import com.projectkorra.ProjectKorra.Utilities.GrapplingHookAPI;
public class Commands {
@ -36,7 +37,7 @@ public class Commands {
this.plugin = plugin;
init();
}
/*
* Element Aliases
*/
@ -64,15 +65,16 @@ public class Commands {
String[] importaliases = {"import", "i"};
String[] givealiases = {"give", "g", "spawn"};
String[] invinciblealiases = {"invincible", "inv"};
String[] presetaliases = {"preset", "presets", "pre", "set"};
/*
* Item Aliases
*/
public static Set<String> invincible = new HashSet<String>();
String[] grapplinghookaliases = {"grapplinghook", "grapplehook", "hook", "ghook"};
public static boolean debug = ProjectKorra.plugin.getConfig().getBoolean("debug");
public static boolean isToggledForAll = false;
@ -91,22 +93,122 @@ public class Commands {
s.sendMessage(ChatColor.RED + "/bending bind [Ability] # " + ChatColor.YELLOW + "Bind an ability.");
return true;
}
if (Arrays.asList(invinciblealiases).contains(args[0].toLowerCase())) {
if (!s.hasPermission("bending.command.invincible")) {
s.sendMessage(ChatColor.RED + "You don't have permission to do that.");
return true;
}
if (Arrays.asList(presetaliases).contains(args[0].toLowerCase())) {
if (!(s instanceof Player)) {
s.sendMessage(ChatColor.RED + "This command is only usable by players.");
return true;
}
Player player = (Player) s;
String[] deletealiases = {"delete", "d", "del"};
String[] createaliases = {"create", "c"};
String[] listaliases = {"list", "l"};
if (args.length == 2 && Arrays.asList(listaliases).contains(args[1].toLowerCase())) {
if (!s.hasPermission("bending.command.preset.list")) {
s.sendMessage(ChatColor.RED + "You don't have permission to do that.");
return true;
}
List<Preset> listnames = Preset.presets.get(player.getUniqueId());
List<String> ln2 = new ArrayList<String>();
if (listnames == null || listnames.isEmpty()) {
s.sendMessage(ChatColor.RED + "You don't have any presets.");
return true;
}
for (Preset preset: listnames) {
ln2.add(preset.getName());
}
s.sendMessage(ChatColor.GREEN + "Your Presets: " + ChatColor.DARK_AQUA + ln2.toString());
return true;
}else if (args.length != 3) { // bending preset bind|create|delete {name}
s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending preset create|bind|list|delete [name]");
return true;
}
String name = args[2];
if (Arrays.asList(deletealiases).contains(args[1].toLowerCase())) {
if (!s.hasPermission("bending.command.preset.delete")) {
s.sendMessage(ChatColor.RED + "You don't have permission to do that.");
return true;
}
if (!Preset.presetExists(player, name)) {
s.sendMessage(ChatColor.RED + "You don't have a preset with that name.");
return true;
}
Preset preset = Preset.getPreset(player, name);
preset.delete();
s.sendMessage(ChatColor.GREEN + "You have deleted your preset named: " + name);
}
if (Arrays.asList(bindaliases).contains(args[1].toLowerCase())) {
if (!s.hasPermission("bending.command.preset.bind")) {
s.sendMessage(ChatColor.RED + "You don't have permission to do that.");
return true;
}
if (!Preset.presetExists(player, name)) {
s.sendMessage(ChatColor.RED + "You don't have a preset with that name.");
return true;
}
Preset.bindPreset(player, name);
s.sendMessage(ChatColor.GREEN + "Your bound slots have been set to match the " + name + " preset.");
return true;
}
if (Arrays.asList(createaliases).contains(args[1].toLowerCase())) {
if (!s.hasPermission("bending.command.preset.create")) {
s.sendMessage(ChatColor.RED + "You don't have permission to do that.");
return true;
}
int limit = Methods.getMaxPresets(player);
if (Preset.presets.get(player) != null && Preset.presets.get(player).size() >= limit) {
s.sendMessage(ChatColor.RED + "You have reached your max number of Presets.");
return true;
}
if (Preset.presetExists(player, name)) {
s.sendMessage(ChatColor.RED + "A preset with that name already exists.");
return true;
}
BendingPlayer bPlayer = Methods.getBendingPlayer(player.getName());
if (bPlayer == null) return true;
HashMap<Integer, String> abilities = bPlayer.getAbilities();
Preset preset = new Preset(player.getUniqueId(), name, abilities);
preset.save();
s.sendMessage(ChatColor.GREEN + "Created preset with the name: " + name);
return true;
}
}
if (Arrays.asList(invinciblealiases).contains(args[0].toLowerCase())) {
if (!s.hasPermission("bending.command.invincible")) {
s.sendMessage(ChatColor.RED + "You don't have permission to do that.");
return true;
}
if (!(s instanceof Player)) {
s.sendMessage(ChatColor.RED + "This command is only usable by players.");
return true;
}
if (args.length != 1) {
s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending invincible");
return true;
}
if (!invincible.contains(s.getName())) {
/*
* Player is not invincible.
@ -124,19 +226,19 @@ public class Commands {
s.sendMessage(ChatColor.RED + "You don't have permission to do that.");
return true;
}
if (args.length < 3) {
s.sendMessage(ChatColor.GOLD + "Proper Usage: /bending give [Player] [Item] <Properties>");
return true;
}
Player player = Bukkit.getPlayer(args[1]);
if (player == null) {
s.sendMessage(ChatColor.RED + "That player is not online.");
return true;
}
if (Arrays.asList(grapplinghookaliases).contains(args[2])) {
/*
* They are spawning in a grappling hook.
@ -150,7 +252,7 @@ public class Commands {
s.sendMessage(ChatColor.GOLD + "Example: /bending give " + s.getName() + " grapplinghook 25");
return true;
}
ItemStack hook = GrapplingHookAPI.createHook(uses);
player.getInventory().addItem(hook);
s.sendMessage(ChatColor.GREEN + "A grappling hook with " + uses + " uses has been added to your inventory.");
@ -192,7 +294,7 @@ public class Commands {
}
BendingPlayer bPlayer = Methods.getBendingPlayer(s.getName());
if (args.length == 1) {
bPlayer.abilities.clear();
bPlayer.getAbilities().clear();
for (int i = 1; i <= 9; i++) {
Methods.saveAbility(bPlayer, i, null);
}
@ -207,8 +309,8 @@ public class Commands {
s.sendMessage(ChatColor.RED + "The slot must be an integer between 0 and 9.");
return true;
}
if (bPlayer.abilities.get(slot) != null) {
bPlayer.abilities.remove(slot);
if (bPlayer.getAbilities().get(slot) != null) {
bPlayer.getAbilities().remove(slot);
Methods.saveAbility(bPlayer, slot, null);
}
s.sendMessage("You have cleared slot #" + slot);
@ -404,7 +506,7 @@ public class Commands {
if (bPlayer.hasElement(Element.Fire)) elements.append("f");
if (bPlayer.hasElement(Element.Chi)) elements.append("c");
HashMap<Integer, String> abilities = bPlayer.abilities;
HashMap<Integer, String> abilities = bPlayer.getAbilities();
ResultSet rs2 = DBConnection.sql.readQuery("SELECT * FROM pk_players WHERE uuid = '" + bPlayer.uuid.toString() + "'");
@ -533,7 +635,7 @@ public class Commands {
return true;
}
BendingPlayer bPlayer = Methods.getBendingPlayer(s.getName());
HashMap<Integer, String> abilities = bPlayer.abilities;
HashMap<Integer, String> abilities = bPlayer.getAbilities();
if (abilities.isEmpty()) {
s.sendMessage("You don't have any bound abilities.");
@ -611,7 +713,7 @@ public class Commands {
}
if (args.length == 2) {
Player p = Bukkit.getPlayer(args[1]);
if (p == null) {
s.sendMessage(ChatColor.GREEN + "You are running a lookup of an offline player, this may take a second.");
@ -802,14 +904,14 @@ public class Commands {
}
BendingPlayer bPlayer = Methods.getBendingPlayer(player.getName());
if (bPlayer.isPermaRemoved()) {
bPlayer.permaRemoved = false;
Methods.savePermaRemoved(bPlayer);
s.sendMessage(ChatColor.RED + "You have restored the bending of: " + ChatColor.DARK_AQUA + player.getName());
return true;
}
bPlayer.elements.clear();
Methods.removeUnusableAbilities(player.getName());
Methods.saveElements(bPlayer);

View file

@ -40,6 +40,25 @@ public class DBConnection {
+ " PRIMARY KEY (id));";
sql.modifyQuery(query);
}
if (!sql.tableExists("pk_presets")) {
ProjectKorra.log.info("Creating pk_presets table");
String query = "CREATE TABLE `pk_presets` ("
+ "`id` int(32) NOT NULL AUTO_INCREMENT,"
+ "`uuid` varchar(255),"
+ "`name` varchar(255),"
+ "`slot1` varchar(255),"
+ "`slot2` varchar(255),"
+ "`slot3` varchar(255),"
+ "`slot4` varchar(255),"
+ "`slot5` varchar(255),"
+ "`slot6` varchar(255),"
+ "`slot7` varchar(255),"
+ "`slot8` varchar(255),"
+ "`slot9` varchar(255),"
+ " PRIMARY KEY (id));";
sql.modifyQuery(query);
}
} else {
sql = new SQLite(ProjectKorra.log, "[ProjectKorra] Establishing SQLite Connection.", "projectkorra.db", ProjectKorra.plugin.getDataFolder().getAbsolutePath());
((SQLite) sql).open();
@ -63,6 +82,24 @@ public class DBConnection {
+ "`slot9` TEXT(255));";
sql.modifyQuery(query);
}
if (!sql.tableExists("pk_presets")) {
ProjectKorra.log.info("Creating pk_presets table");
String query = "CREATE TABLE `pk_presets` ("
+ "`id` INTEGER PRIMARY KEY,"
+ "`uuid` TEXT(255),"
+ "`name` TEXT(255),"
+ "`slot1` TEXT(255),"
+ "`slot2` TEXT(255),"
+ "`slot3` TEXT(255),"
+ "`slot4` TEXT(255),"
+ "`slot5` TEXT(255),"
+ "`slot6` TEXT(255),"
+ "`slot7` TEXT(255),"
+ "`slot8` TEXT(255),"
+ "`slot9` TEXT(255));";
sql.modifyQuery(query);
}
}
}
}

View file

@ -36,6 +36,7 @@ import org.bukkit.World.Environment;
import org.bukkit.block.Block;
import org.bukkit.block.BlockFace;
import org.bukkit.block.BlockState;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Entity;
import org.bukkit.entity.FallingBlock;
import org.bukkit.entity.LivingEntity;
@ -172,7 +173,7 @@ public class Methods {
public static void bindAbility(Player player, String ability) {
int slot = player.getInventory().getHeldItemSlot() + 1;
BendingPlayer bPlayer = getBendingPlayer(player.getName());
bPlayer.abilities.put(slot, ability);
bPlayer.getAbilities().put(slot, ability);
if (isAirAbility(ability)) {
player.sendMessage(getAirColor() + "Succesfully bound " + ability + " to slot " + slot);
}
@ -203,7 +204,7 @@ public class Methods {
*/
public static void bindAbility(Player player, String ability, int slot) {
BendingPlayer bPlayer = getBendingPlayer(player.getName());
bPlayer.abilities.put(slot, ability);
bPlayer.getAbilities().put(slot, ability);
if (isAirAbility(ability)) {
player.sendMessage(getAirColor() + "Succesfully bound " + ability + " to slot " + slot);
}
@ -545,7 +546,7 @@ public class Methods {
if (bPlayer == null) return null;
int slot = player.getInventory().getHeldItemSlot() + 1;
return bPlayer.abilities.get(slot);
return bPlayer.getAbilities().get(slot);
}
public static long getGlobalCooldown() {
@ -1669,7 +1670,7 @@ public class Methods {
finalabilities.put(i, slots.get(i));
}
}
bPlayer.abilities = finalabilities;
bPlayer.setAbilities(finalabilities);
} catch (Exception ex) {
}
@ -1792,7 +1793,7 @@ public class Methods {
if (bPlayer == null) return;
String uuid = bPlayer.uuid.toString();
HashMap<Integer, String> abilities = bPlayer.abilities;
HashMap<Integer, String> abilities = bPlayer.getAbilities();
DBConnection.sql.modifyQuery("UPDATE pk_players SET slot" + slot + " = '" + (abilities.get(slot) == null ? null : abilities.get(slot)) + "' WHERE uuid = '" + uuid + "'");
}
@ -1967,5 +1968,14 @@ public class Methods {
}
return null;
}
public static int getMaxPresets(Player player) {
if (player.isOp()) return 500;
int cap = 0;
for (int i = 0; i <= 500; i++) {
if (player.hasPermission("bending.command.presets.create." + i)) cap = i;
}
return cap;
}
}

View file

@ -0,0 +1,128 @@
package com.projectkorra.ProjectKorra.Objects;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;
import org.bukkit.entity.Player;
import com.projectkorra.ProjectKorra.BendingPlayer;
import com.projectkorra.ProjectKorra.DBConnection;
import com.projectkorra.ProjectKorra.Methods;
import com.projectkorra.ProjectKorra.ProjectKorra;
public class Preset {
public static ConcurrentHashMap<UUID, List<Preset>> presets = new ConcurrentHashMap<UUID, List<Preset>>();
UUID uuid;
HashMap<Integer, String> abilities;
String name;
public Preset(UUID uuid, String name, HashMap<Integer, String> abilities) {
this.uuid = uuid;
this.name = name;
this.abilities = abilities;
if (!presets.containsKey(uuid)) {
presets.put(uuid, new ArrayList<Preset>());
}
presets.get(uuid).add(this);
}
public static void loadPresets(Player player) {
UUID uuid = player.getUniqueId();
if (uuid == null) return;
ResultSet rs2 = DBConnection.sql.readQuery("SELECT * FROM pk_presets WHERE uuid = '" + uuid.toString() + "'");
try {
if (rs2.next()) { // Presets exist.
int i = 0;
do {
HashMap<Integer, String> moves = new HashMap<Integer, String>();
for (int total = 1; total <= 9; total++) {
String slot = rs2.getString("slot" + total);
if (slot != null) moves.put(total, slot);
}
new Preset(uuid, rs2.getString("name"), moves);
i++;
} while (rs2.next());
ProjectKorra.log.info("Loaded " + i + " presets for " + player.getName());
}
} catch (SQLException ex) {
ex.printStackTrace();
}
}
public static void bindPreset(Player player, String name) {
BendingPlayer bPlayer = Methods.getBendingPlayer(player.getName());
if (bPlayer == null) return;
if (!presets.containsKey(player.getUniqueId())) return;
for (Preset preset: presets.get(player.getUniqueId())) {
if (preset.name.equalsIgnoreCase(name)) { // We found it
bPlayer.setAbilities(preset.abilities);
}
}
}
public static boolean presetExists(Player player, String name) {
if (!presets.containsKey(player.getUniqueId())) return false;
boolean exists = false;
for (Preset preset: presets.get(player.getUniqueId())) {
if (preset.name.equalsIgnoreCase(name)) exists = true;
}
return exists;
}
public static Preset getPreset(Player player, String name) {
if (!presets.containsKey(player.getUniqueId())) return null;
for (Preset preset: presets.get(player.getUniqueId())) {
if (preset.name.equalsIgnoreCase(name)) return preset;
}
return null;
}
public void delete() {
ResultSet rs2 = DBConnection.sql.readQuery("SELECT * FROM pk_presets WHERE uuid = '" + uuid.toString() + "' AND name = '" + name + "'");
try {
if (rs2.next()) {
DBConnection.sql.modifyQuery("DELETE FROM pk_presets WHERE uuid = '" + uuid.toString() + "' AND name = '" + name + "'");
}
} catch (SQLException ex) {
ex.printStackTrace();
}
presets.remove(uuid);
}
public String getName() {
return this.name;
}
public void save() {
ResultSet rs2 = DBConnection.sql.readQuery("SELECT * FROM pk_presets WHERE uuid = '" + uuid.toString() + "' AND name = '" + name + "'");
try {
if (!rs2.next()) { // Preset doesn't already exists.
DBConnection.sql.modifyQuery("INSERT INTO pk_presets (uuid, name) VALUES ('" + uuid.toString() + "', '" + name + "')");
}
} catch (SQLException ex) {
ex.printStackTrace();
}
/*
* Now we know the preset exists in the SQL table, so we can manipulate it normally.
*/
DBConnection.sql.modifyQuery("UPDATE pk_presets SET slot1 = '" + abilities.get(1) + "'");
DBConnection.sql.modifyQuery("UPDATE pk_presets SET slot2 = '" + abilities.get(2) + "'");
DBConnection.sql.modifyQuery("UPDATE pk_presets SET slot3 = '" + abilities.get(3) + "'");
DBConnection.sql.modifyQuery("UPDATE pk_presets SET slot4 = '" + abilities.get(4) + "'");
DBConnection.sql.modifyQuery("UPDATE pk_presets SET slot5 = '" + abilities.get(5) + "'");
DBConnection.sql.modifyQuery("UPDATE pk_presets SET slot6 = '" + abilities.get(6) + "'");
DBConnection.sql.modifyQuery("UPDATE pk_presets SET slot7 = '" + abilities.get(7) + "'");
DBConnection.sql.modifyQuery("UPDATE pk_presets SET slot8 = '" + abilities.get(8) + "'");
DBConnection.sql.modifyQuery("UPDATE pk_presets SET slot9 = '" + abilities.get(9) + "'");
}
}

View file

@ -61,6 +61,7 @@ import org.bukkit.util.Vector;
import com.projectkorra.ProjectKorra.Ability.AvatarState;
import com.projectkorra.ProjectKorra.CustomEvents.PlayerGrappleEvent;
import com.projectkorra.ProjectKorra.Objects.Preset;
import com.projectkorra.ProjectKorra.Utilities.GrapplingHookAPI;
import com.projectkorra.ProjectKorra.airbending.AirBlast;
import com.projectkorra.ProjectKorra.airbending.AirBubble;
@ -282,8 +283,9 @@ public class PKListener implements Listener {
@EventHandler
public void onPlayerJoin(PlayerJoinEvent e) {
Methods.createBendingPlayer(e.getPlayer().getUniqueId(), e.getPlayer().getName());
Player player = e.getPlayer();
Methods.createBendingPlayer(e.getPlayer().getUniqueId(), player.getName());
Preset.loadPresets(player);
String append = "";
boolean chatEnabled = ProjectKorra.plugin.getConfig().getBoolean("Properties.Chat.Enable");
if ((player.hasPermission("bending.avatar") || Methods.getBendingPlayer(player.getName()).elements.size() > 1) && chatEnabled) {

View file

@ -8,6 +8,7 @@ import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import com.projectkorra.ProjectKorra.Ability.AbilityModuleManager;
import com.projectkorra.ProjectKorra.Objects.Preset;
import com.projectkorra.ProjectKorra.Utilities.CraftingRecipes;
import com.projectkorra.ProjectKorra.airbending.AirbendingManager;
import com.projectkorra.ProjectKorra.chiblocking.ChiblockingManager;
@ -49,6 +50,7 @@ public class ProjectKorra extends JavaPlugin {
DBConnection.init();
for (Player player: Bukkit.getOnlinePlayers()) {
Methods.createBendingPlayer(player.getUniqueId(), player.getName());
Preset.loadPresets(player);
}
getServer().getPluginManager().registerEvents(new PKListener(this), this);
getServer().getPluginManager().registerEvents(new TagAPIListener(this), this);

View file

@ -36,6 +36,11 @@ permissions:
bending.command.help: true
bending.command.clear: true
bending.command.who: true
bending.command.preset.list: true
bending.command.preset.create.2: true
bending.command.preset.create: true
bending.command.preset.bind: true
bending.command.preset.delete: true
bending.air: true
bending.water: true
bending.earth: true