diff --git a/src/main/java/org/frontleaves/xf_tools/Events/BlockEvent.java b/src/main/java/org/frontleaves/xf_tools/Events/BlockEvent.java index 6bd09a0..53c4ab8 100644 --- a/src/main/java/org/frontleaves/xf_tools/Events/BlockEvent.java +++ b/src/main/java/org/frontleaves/xf_tools/Events/BlockEvent.java @@ -2,12 +2,11 @@ package org.frontleaves.xf_tools.Events; import org.bukkit.Location; import org.bukkit.Material; -import org.bukkit.entity.Item; -import org.bukkit.entity.LivingEntity; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.block.BlockPlaceEvent; +import org.bukkit.event.entity.EntityPickupItemEvent; import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.player.PlayerDropItemEvent; import org.frontleaves.xf_tools.XF_Tools; @@ -22,46 +21,49 @@ public class BlockEvent implements Listener { @EventHandler public void InventoryEvent(InventoryCloseEvent player) { - if (!player.getPlayer().isOp()) { - // 基岩检测 - if (player.getPlayer().getInventory().contains(Material.BEDROCK)) { - player.getPlayer().getInventory().remove(Material.BEDROCK); - player.getPlayer().sendMessage(String.format("%s§r%s §r§c这个 %s 你不可以拥有", Tools.XF_Prefix, Tools.XF_PrefixArrow, Material.BEDROCK)); + for (String value : Tools.BlockBanList) { + if (!player.getPlayer().isOp()) { + // 基岩检测 + if (player.getPlayer().getInventory().contains(Material.getMaterial(value))) { + player.getPlayer().getInventory().remove(Material.getMaterial(value)); + player.getPlayer().sendMessage(String.format("%s§r%s §r§c这个 %s 你不可以拥有", Tools.XF_Prefix, Tools.XF_PrefixArrow, value)); + } + } else { + Tools.getLogger().warning(String.format("管理 %s 在 [%s][%s,%s,%s] 从背包获取了 %s", player.getPlayer().getName(), player.getPlayer().getLocation().getWorld().getName(), player.getPlayer().getLocation().getX(), player.getPlayer().getLocation().getY(), player.getPlayer().getLocation().getZ(), value)); } - } else { - Player players = (Player) player; - Location playerLocation = players.getLocation(); - Tools.getLogger().warning(String.format("§7[%s§7] §r管理 %s 在 [%s][%s,%s,%s] 从背包获取了 %s", Tools.XF_Prefix, players.getDisplayName(), playerLocation.getWorld(), playerLocation.getX(), playerLocation.getY(), playerLocation.getZ(), Material.BEDROCK)); } } @EventHandler public void DropEvent(PlayerDropItemEvent player) { - if (!player.getPlayer().isOp()) { - // 基岩检测 - if (player.getPlayer().getInventory().contains(Material.BEDROCK)) { - player.setCancelled(true); - player.getPlayer().getInventory().remove(Material.BEDROCK); - player.getPlayer().sendMessage(String.format("%s§r%s §r§c这个 %s 你不可以拥有", Tools.XF_Prefix, Tools.XF_PrefixArrow, Material.BEDROCK)); + for (String value : Tools.BlockBanList) { + if (!player.getPlayer().isOp()) { + // 基岩检测 + if (player.getPlayer().getInventory().contains(Material.getMaterial(value))) { + player.setCancelled(true); + player.getPlayer().getInventory().remove(Material.getMaterial(value)); + player.getPlayer().sendMessage(String.format("%s§r%s §r§c这个 %s 你不可以拥有", Tools.XF_Prefix, Tools.XF_PrefixArrow, Material.getMaterial(value))); + } + } else { + Player players = (Player) player; + Location playerLocation = players.getLocation(); + Tools.getLogger().warning(String.format("管理 %s 在 [%s][%s,%s,%s] 从丢弃了 %s", players.getDisplayName(), playerLocation.getWorld(), playerLocation.getX(), playerLocation.getY(), playerLocation.getZ(), value)); } - } else { - Player players = (Player) player; - Location playerLocation = players.getLocation(); - Tools.getLogger().warning(String.format("§7[%s§7] §r管理 %s 在 [%s][%s,%s,%s] 从丢弃了 %s", Tools.XF_Prefix, players.getDisplayName(), playerLocation.getWorld(), playerLocation.getX(), playerLocation.getY(), playerLocation.getZ(), Material.BEDROCK)); } } @EventHandler - public void EntityPickupItemEvent(LivingEntity entity, Item item, int remaining) { - if (entity instanceof Player) { + public void PickupEvent(EntityPickupItemEvent pickupItemEvent) { + for (String value : Tools.BlockBanList) { + Player entity = (Player) pickupItemEvent.getEntity(); if (!entity.isOp()) { - if (item.getItemStack().getType() == Material.BEDROCK) { + if (pickupItemEvent.getItem().getItemStack().getType() == Material.getMaterial(value)) { entity.setCanPickupItems(false); - entity.sendMessage(String.format("%s§r%s §r§c这个 %s 你不可以拥有", Tools.XF_Prefix, Tools.XF_PrefixArrow, Material.BEDROCK)); + entity.sendMessage(String.format("%s§r%s §r§c这个 %s 你不可以拥有", Tools.XF_Prefix, Tools.XF_PrefixArrow, value)); } else { Location playerLocation = entity.getLocation(); - Tools.getLogger().warning(String.format("§7[%s§7] §r管理 %s 在 [%s][%s,%s,%s] 捡起了 %s", Tools.XF_Prefix, ((Player) entity).getDisplayName(), playerLocation.getWorld(), playerLocation.getX(), playerLocation.getY(), playerLocation.getZ(), Material.BEDROCK)); + Tools.getLogger().warning(String.format("管理 %s 在 [%s][%s,%s,%s] 捡起了 %s%n", entity.getDisplayName(), playerLocation.getWorld(), playerLocation.getX(), playerLocation.getY(), playerLocation.getZ(), value)); } } } @@ -69,16 +71,18 @@ public class BlockEvent implements Listener { @EventHandler public void BlockPlaceEvent(BlockPlaceEvent player) { - if (!player.getPlayer().isOp()) { - // 基岩检测 - if (player.getPlayer().getInventory().contains(Material.BEDROCK)) { - player.setCancelled(true); - player.getPlayer().getInventory().remove(Material.BEDROCK); - player.getPlayer().sendMessage(String.format("%s§r%s §r§c这个 %s 你不可以拥有", Tools.XF_Prefix, Tools.XF_PrefixArrow, Material.BEDROCK)); - } else { - Player players = (Player) player; - Location playerLocation = players.getLocation(); - Tools.getLogger().warning(String.format("§7[%s§7] §r管理 %s 在 [%s][%s,%s,%s] 位置使用了 %s", Tools.XF_Prefix, players.getDisplayName(), playerLocation.getWorld(), playerLocation.getX(), playerLocation.getY(), playerLocation.getZ(), Material.BEDROCK)); + for (String value : Tools.BlockBanList) { + if (!player.getPlayer().isOp()) { + // 基岩检测 + if (player.getPlayer().getInventory().contains(Material.getMaterial(value))) { + player.setCancelled(true); + player.getPlayer().getInventory().remove(Material.getMaterial(value)); + player.getPlayer().sendMessage(String.format("%s§r%s §r§c这个 %s 你不可以拥有", Tools.XF_Prefix, Tools.XF_PrefixArrow, value)); + } else { + Player players = (Player) player; + Location playerLocation = players.getLocation(); + Tools.getLogger().warning(String.format("管理 %s 在 [%s][%s,%s,%s] 位置使用了 %s", players.getDisplayName(), playerLocation.getWorld(), playerLocation.getX(), playerLocation.getY(), playerLocation.getZ(), value)); + } } } } diff --git a/src/main/java/org/frontleaves/xf_tools/Events/CommandEvent.java b/src/main/java/org/frontleaves/xf_tools/Events/CommandEvent.java new file mode 100644 index 0000000..af6ee6c --- /dev/null +++ b/src/main/java/org/frontleaves/xf_tools/Events/CommandEvent.java @@ -0,0 +1,36 @@ +package org.frontleaves.xf_tools.Events; + +import org.bukkit.event.EventHandler; +import org.bukkit.event.Listener; +import org.bukkit.event.player.PlayerCommandPreprocessEvent; +import org.frontleaves.xf_tools.XF_Tools; + +public class CommandEvent implements Listener { + + private final XF_Tools Tools; + + public CommandEvent(XF_Tools Tools) { + this.Tools = Tools; + } + + @EventHandler + public void PlayerCommandEvent(PlayerCommandPreprocessEvent playerCommandPreprocessEvent) { + // 将数据输出并载入数据库 + if (Tools.UseSQL) { + + } else { + Tools.getLogger().warning(String.format("§r玩家 %s 输入了 %s", playerCommandPreprocessEvent.getPlayer().getDisplayName(), playerCommandPreprocessEvent.getMessage())); + } + } + + @EventHandler + public void PlayerCommandForDropEvent(PlayerCommandPreprocessEvent playerCommandPreprocessEvent) { + // 检查数据内容 + if (playerCommandPreprocessEvent.getMessage().equals("/drop")) { + playerCommandPreprocessEvent.setMessage("/xf-drop off"); + } + if (playerCommandPreprocessEvent.getMessage().equals("/drop-on")) { + playerCommandPreprocessEvent.setMessage("/xf-drop on"); + } + } +} diff --git a/src/main/java/org/frontleaves/xf_tools/Others/DataBaseCreate.java b/src/main/java/org/frontleaves/xf_tools/Others/DataBaseCreate.java new file mode 100644 index 0000000..34f0c86 --- /dev/null +++ b/src/main/java/org/frontleaves/xf_tools/Others/DataBaseCreate.java @@ -0,0 +1,91 @@ +package org.frontleaves.xf_tools.Others; + +import org.frontleaves.xf_tools.XF_Tools; + +import java.sql.DriverManager; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Objects; + +public class DataBaseCreate { + + private final XF_Tools Tools; + + public DataBaseCreate(XF_Tools Tools) { + this.Tools = Tools; + } + + public void CreateTable() { + try { + Class.forName("com.mysql.jdbc.Driver"); + Tools.SqlConn = DriverManager.getConnection("jdbc:mysql://" + Tools.getConfig().getString("Mysql_Host") + ":" + Tools.getConfig().getInt("Mysql_Port") + "/?useSSL=" + Tools.getConfig().getString("Mysql_SSL"), Tools.getConfig().getString("Mysql_User"), Tools.getConfig().getString("Mysql_Password")); + Tools.Stmt = Tools.SqlConn.createStatement(); + Tools.UseSQL = true; + Tools.getLogger().info("数据库已成功连接!"); + } catch (ClassNotFoundException e) { + Tools.UseSQL = false; + } catch (SQLException e) { + Tools.getLogger().warning("数据库无法连接,已禁止使用数据库!"); + Tools.UseSQL = false; + } + + if (this.Create()) { + Tools.getLogger().info("创建数据表"); + Tools.UseSQL = true; + } else Tools.UseSQL = false; + } + + public boolean Create() { + try { + if (Tools.Stmt.executeQuery("SELECT TABLE_NAME,TABLE_SCHEMA FROM information_schema.TABLES WHERE TABLE_SCHEMA='xf_tools' AND TABLE_NAME LIKE '%xftls%'").next()) { + Tools.getLogger().info("2"); + ResultSet Result_Table = Tools.Stmt.executeQuery("SELECT TABLE_NAME,TABLE_SCHEMA FROM information_schema.TABLES WHERE TABLE_SCHEMA='xf_tools' AND TABLE_NAME LIKE '%xftls%'"); + while (Result_Table.next()) { + if (!Objects.equals(Result_Table.getString("TABLE_NAME"), TABLE_NAME.xftls_commandslogs.name())) { + if (!CreateCommandsLogs()) Tools.getLogger().warning("数据表 xftls_commandslogs 创建失败"); + return true; + } + } + } else { + Tools.getLogger().info("20"); + if (!Tools.Stmt.executeQuery("SELECT * FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='xf_tools'").next()) { + if (Tools.Stmt.execute("CREATE SCHEMA xf_tools")) Tools.getLogger().info("数据库 xf_tools 创建完毕"); + else { + Tools.getLogger().info("数据库创建失败,数据库禁用"); + Tools.UseSQL = false; + return false; + } + } + if (!CreateCommandsLogs()) { + Tools.getLogger().warning("数据表 xftls_commandslogs 创建失败,数据库禁用"); + Tools.UseSQL = false; + return false; + } + } + } catch (SQLException e) { + throw new RuntimeException(e); + } + return false; + } + + private boolean CreateCommandsLogs() { + /*Tools.getLogger().info("1"); + // 如果不存在这个数据库,需要创建一个数据库 + try { + Tools.getLogger().info("2"); + Tools.Stmt.execute("CREATE TABLE xf_tools.xftls_commandslogs (`id` INT NOT NULL AUTO_INCREMENT," + + "`player` VARCHAR(16) NOT NULL," + + "`command` TEXT NOT NULL, " + + "PRIMARY KEY (`id`)) ENGINE = MyISAM;"); + return true; + } catch (SQLException e) { + throw new RuntimeException(e); + return false; + }*/ + return false; + } + + public enum TABLE_NAME { + xftls_commandslogs, + } +} diff --git a/src/main/java/org/frontleaves/xf_tools/XF_Tools.java b/src/main/java/org/frontleaves/xf_tools/XF_Tools.java index 40ccc53..6bb5782 100644 --- a/src/main/java/org/frontleaves/xf_tools/XF_Tools.java +++ b/src/main/java/org/frontleaves/xf_tools/XF_Tools.java @@ -6,13 +6,12 @@ import org.frontleaves.xf_tools.Commands.OpCheckCommandExecutor; import org.frontleaves.xf_tools.Commands.XfDropCommandExecutor; import org.frontleaves.xf_tools.Commands.XfOpCommandExecutor; import org.frontleaves.xf_tools.Events.BlockEvent; +import org.frontleaves.xf_tools.Events.CommandEvent; import org.frontleaves.xf_tools.Events.DropEvent; import org.frontleaves.xf_tools.Events.PlayerActivityListener; import org.frontleaves.xf_tools.Others.DataBaseCreate; import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; @@ -27,7 +26,7 @@ public final class XF_Tools extends JavaPlugin { public boolean UseSQL = false; public Connection SqlConn; public Statement Stmt; - + public List BlockBanList = new ArrayList<>(); @Override public void onEnable() { // 载入指令 @@ -44,27 +43,17 @@ public final class XF_Tools extends JavaPlugin { getServer().getPluginManager().registerEvents(new PlayerActivityListener(this), this); getServer().getPluginManager().registerEvents(new BlockEvent(this), this); getServer().getPluginManager().registerEvents(new DropEvent(this), this); + getServer().getPluginManager().registerEvents(new CommandEvent(this),this); // 输出配置文件 saveDefaultConfig(); + // 获取配置文件 + this.BlockBanList = getConfig().getStringList("BanBlock_List"); // 数据库配置部分 if (getConfig().getBoolean("Mysql_Open")) { - try { - Class.forName("com.mysql.jdbc.Driver"); - this.SqlConn = DriverManager.getConnection("jdbc:mysql://"+getConfig().getString("Mysql_Host")+":"+getConfig().getInt("Mysql_Port")+"/?useSSL="+getConfig().getString("Mysql_SSL"),getConfig().getString("Mysql_User"),getConfig().getString("Mysql_Password")); - this.Stmt = this.SqlConn.createStatement(); - this.UseSQL = true; - getLogger().info("数据库已成功连接!"); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } catch (SQLException e) { - getLogger().warning("数据库无法连接,已禁止使用数据库!"); - } - DataBaseCreate DataCheck = new DataBaseCreate(this); - if (DataCheck.Create()) { - getLogger().info("创建数据表"); - } + DataBaseCreate dataBaseCreate = new DataBaseCreate(this); + dataBaseCreate.CreateTable(); } // 信息输出