@Override public void onKeyPressedEvent(KeyPressedEvent event) { if (event.getScreenType() != ScreenType.GAME_SCREEN) { return; } SpoutPlayer player = event.getPlayer(); PlayerOptions po = PlayerOptions.getPlayer(player); String msg = ""; if (Utils.isValidModifier(event.getKey())) { PlayerOptions.addPressed(player.getName(), event.getKey()); return; } ChooseMode mode = PlayerOptions.getMode(player); boolean valid = Utils.isValidKey(player, event.getKey()); if (!valid) { switch (mode) { case SET: case GSET: player.sendMessage(ChatColor.RED + "That key combination is not valid."); } return; } LinkedHashSet<Keyboard> allPressed = PlayerOptions.getPressed(player.getName()); allPressed.add(event.getKey()); if (mode == ChooseMode.NONE) { if (!Permission.check(player, "SpoutKeyCommands.use")) { return; } PlayerCmd pc = PlayerCmd.get(player, allPressed); GlobalCmd gc = GlobalCmd.get(allPressed); if (pc == null && gc == null) { return; } String perf = po.getPreferred(); if (perf.equalsIgnoreCase("global") && gc != null || pc == null) { player.performCommand(gc.getCommand()); } else if (perf.equalsIgnoreCase("personal") && pc != null || pc != null) { player.performCommand(pc.getCommand()); } return; } String cmd = PlayerOptions.getCmd(player); PluginManager pm = Bukkit.getServer().getPluginManager(); String pluginName = SpoutKeyCommands.getInstance().getDescription().getName(); PlayerCmd pc = null; GlobalCmd gc = null; switch (mode) { case SET: if (cmd.equals("")) { return; } msg = ChatColor.DARK_AQUA + "Command set to: " + ChatColor.GREEN + Utils.getKeyString(allPressed); pc = PlayerCmd.get(player, allPressed); if (pc != null) { if (!pluginName.equals(pc.getPlugin())) { Plugin p = pm.getPlugin(pc.getPlugin()); if (p != null && p.isEnabled()) { msg = ChatColor.RED + "That key is already set by " + pc.getPlugin(); break; } } pc.setCommand(cmd); pc.setPlugin(pluginName); SpoutKeyCommands.getInstance().getDatabase().update(pc); break; } pc = new PlayerCmd(allPressed, cmd, player, SpoutKeyCommands.getInstance()); SpoutKeyCommands.getInstance().getDatabase().save(pc); break; case GSET: if (cmd.equals("")) { return; } msg = ChatColor.DARK_AQUA + "Global command set to: " + ChatColor.GREEN + Utils.getKeyString(allPressed); gc = GlobalCmd.get(allPressed); if (gc != null) { if (!pluginName.equals(gc.getPlugin())) { Plugin p = pm.getPlugin(gc.getPlugin()); if (p != null && p.isEnabled()) { msg = ChatColor.RED + "That key is already set by " + gc.getPlugin(); break; } } gc.setCommand(cmd); gc.setPlugin(pluginName); SpoutKeyCommands.getInstance().getDatabase().update(gc); break; } gc = new GlobalCmd(allPressed, cmd, SpoutKeyCommands.getInstance()); SpoutKeyCommands.getInstance().getDatabase().save(gc); break; case UNSET: pc = PlayerCmd.get(player, allPressed); if (pc == null) { msg = ChatColor.RED + "No command on this combination"; break; } if (!pluginName.equals(pc.getPlugin())) { Plugin p = pm.getPlugin(pc.getPlugin()); if (p != null && p.isEnabled()) { msg = ChatColor.RED + "That key is set by " + pc.getPlugin(); break; } } SpoutKeyCommands.getInstance().getDatabase().delete(pc); msg = ChatColor.DARK_AQUA + "Command unset from: " + ChatColor.GREEN + Utils.getKeyString(allPressed); break; case GUNSET: gc = GlobalCmd.get(allPressed); if (gc == null) { msg = ChatColor.RED + "No global command on this combination"; break; } if (!pluginName.equals(gc.getPlugin())) { Plugin p = pm.getPlugin(gc.getPlugin()); if (p != null && p.isEnabled()) { msg = ChatColor.RED + "That key is already set by " + gc.getPlugin(); break; } } SpoutKeyCommands.getInstance().getDatabase().delete(gc); msg = ChatColor.DARK_AQUA + "Global command unset from: " + ChatColor.GREEN + Utils.getKeyString(allPressed); break; } player.sendMessage(msg); }