方块检测,代码监听,数据库管理

This commit is contained in:
筱锋xiao_lfeng 2023-05-23 08:18:54 +08:00
parent 228c268b1b
commit 17c387a1ad
4 changed files with 174 additions and 54 deletions

View File

@ -2,12 +2,11 @@ package org.frontleaves.xf_tools.Events;
import org.bukkit.Location; import org.bukkit.Location;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.entity.Item;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player; import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler; import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener; import org.bukkit.event.Listener;
import org.bukkit.event.block.BlockPlaceEvent; import org.bukkit.event.block.BlockPlaceEvent;
import org.bukkit.event.entity.EntityPickupItemEvent;
import org.bukkit.event.inventory.InventoryCloseEvent; import org.bukkit.event.inventory.InventoryCloseEvent;
import org.bukkit.event.player.PlayerDropItemEvent; import org.bukkit.event.player.PlayerDropItemEvent;
import org.frontleaves.xf_tools.XF_Tools; import org.frontleaves.xf_tools.XF_Tools;
@ -22,46 +21,49 @@ public class BlockEvent implements Listener {
@EventHandler @EventHandler
public void InventoryEvent(InventoryCloseEvent player) { public void InventoryEvent(InventoryCloseEvent player) {
if (!player.getPlayer().isOp()) { for (String value : Tools.BlockBanList) {
// 基岩检测 if (!player.getPlayer().isOp()) {
if (player.getPlayer().getInventory().contains(Material.BEDROCK)) { // 基岩检测
player.getPlayer().getInventory().remove(Material.BEDROCK); if (player.getPlayer().getInventory().contains(Material.getMaterial(value))) {
player.getPlayer().sendMessage(String.format("%s§r%s §r§c这个 %s 你不可以拥有", Tools.XF_Prefix, Tools.XF_PrefixArrow, Material.BEDROCK)); 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 @EventHandler
public void DropEvent(PlayerDropItemEvent player) { public void DropEvent(PlayerDropItemEvent player) {
if (!player.getPlayer().isOp()) { for (String value : Tools.BlockBanList) {
// 基岩检测 if (!player.getPlayer().isOp()) {
if (player.getPlayer().getInventory().contains(Material.BEDROCK)) { // 基岩检测
player.setCancelled(true); if (player.getPlayer().getInventory().contains(Material.getMaterial(value))) {
player.getPlayer().getInventory().remove(Material.BEDROCK); player.setCancelled(true);
player.getPlayer().sendMessage(String.format("%s§r%s §r§c这个 %s 你不可以拥有", Tools.XF_Prefix, Tools.XF_PrefixArrow, Material.BEDROCK)); 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 @EventHandler
public void EntityPickupItemEvent(LivingEntity entity, Item item, int remaining) { public void PickupEvent(EntityPickupItemEvent pickupItemEvent) {
if (entity instanceof Player) { for (String value : Tools.BlockBanList) {
Player entity = (Player) pickupItemEvent.getEntity();
if (!entity.isOp()) { if (!entity.isOp()) {
if (item.getItemStack().getType() == Material.BEDROCK) { if (pickupItemEvent.getItem().getItemStack().getType() == Material.getMaterial(value)) {
entity.setCanPickupItems(false); 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 { } else {
Location playerLocation = entity.getLocation(); 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 @EventHandler
public void BlockPlaceEvent(BlockPlaceEvent player) { public void BlockPlaceEvent(BlockPlaceEvent player) {
if (!player.getPlayer().isOp()) { for (String value : Tools.BlockBanList) {
// 基岩检测 if (!player.getPlayer().isOp()) {
if (player.getPlayer().getInventory().contains(Material.BEDROCK)) { // 基岩检测
player.setCancelled(true); if (player.getPlayer().getInventory().contains(Material.getMaterial(value))) {
player.getPlayer().getInventory().remove(Material.BEDROCK); player.setCancelled(true);
player.getPlayer().sendMessage(String.format("%s§r%s §r§c这个 %s 你不可以拥有", Tools.XF_Prefix, Tools.XF_PrefixArrow, Material.BEDROCK)); player.getPlayer().getInventory().remove(Material.getMaterial(value));
} else { player.getPlayer().sendMessage(String.format("%s§r%s §r§c这个 %s 你不可以拥有", Tools.XF_Prefix, Tools.XF_PrefixArrow, value));
Player players = (Player) player; } else {
Location playerLocation = players.getLocation(); Player players = (Player) player;
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)); 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));
}
} }
} }
} }

View File

@ -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");
}
}
}

View File

@ -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,
}
}

View File

@ -6,13 +6,12 @@ import org.frontleaves.xf_tools.Commands.OpCheckCommandExecutor;
import org.frontleaves.xf_tools.Commands.XfDropCommandExecutor; import org.frontleaves.xf_tools.Commands.XfDropCommandExecutor;
import org.frontleaves.xf_tools.Commands.XfOpCommandExecutor; import org.frontleaves.xf_tools.Commands.XfOpCommandExecutor;
import org.frontleaves.xf_tools.Events.BlockEvent; 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.DropEvent;
import org.frontleaves.xf_tools.Events.PlayerActivityListener; import org.frontleaves.xf_tools.Events.PlayerActivityListener;
import org.frontleaves.xf_tools.Others.DataBaseCreate; import org.frontleaves.xf_tools.Others.DataBaseCreate;
import java.sql.Connection; import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement; import java.sql.Statement;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -27,7 +26,7 @@ public final class XF_Tools extends JavaPlugin {
public boolean UseSQL = false; public boolean UseSQL = false;
public Connection SqlConn; public Connection SqlConn;
public Statement Stmt; public Statement Stmt;
public List<String> BlockBanList = new ArrayList<>();
@Override @Override
public void onEnable() { 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 PlayerActivityListener(this), this);
getServer().getPluginManager().registerEvents(new BlockEvent(this), this); getServer().getPluginManager().registerEvents(new BlockEvent(this), this);
getServer().getPluginManager().registerEvents(new DropEvent(this), this); getServer().getPluginManager().registerEvents(new DropEvent(this), this);
getServer().getPluginManager().registerEvents(new CommandEvent(this),this);
// 输出配置文件 // 输出配置文件
saveDefaultConfig(); saveDefaultConfig();
// 获取配置文件
this.BlockBanList = getConfig().getStringList("BanBlock_List");
// 数据库配置部分 // 数据库配置部分
if (getConfig().getBoolean("Mysql_Open")) { if (getConfig().getBoolean("Mysql_Open")) {
try { DataBaseCreate dataBaseCreate = new DataBaseCreate(this);
Class.forName("com.mysql.jdbc.Driver"); dataBaseCreate.CreateTable();
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("创建数据表");
}
} }
// 信息输出 // 信息输出