· 9 years ago · Aug 01, 2017, 02:58 PM
1package com.mcsmp.BlockLogLite;
2
3import java.io.File;
4import java.io.IOException;
5import java.util.HashMap;
6import java.util.logging.Logger;
7//import org.bukkit.event.Event.Priority;
8//import org.bukkit.event.Event.Type;
9import org.bukkit.util.config.Configuration;
10import org.bukkit.block.Block;
11import org.bukkit.plugin.java.JavaPlugin;
12import org.bukkit.command.Command;
13import org.bukkit.command.CommandSender;
14import java.sql.Connection;
15import java.sql.DriverManager;
16import java.sql.PreparedStatement;
17import java.sql.ResultSet;
18import java.sql.Statement;
19import java.util.logging.FileHandler;
20import java.util.logging.Level;
21import java.util.logging.SimpleFormatter;
22
23public class BlockLogLite extends JavaPlugin {
24
25 Logger log1;
26 Logger log2;
27 Configuration conf;
28 Connection db;
29 BlockLogLiteBlockListener blockListener = new BlockLogLiteBlockListener(this);
30 HashMap<String, Integer> playerIdCache = new HashMap<String, Integer>();
31
32 @Override
33 public void onEnable() {
34 try {
35 log1 = Logger.getLogger("Minecraft");
36 log2 = Logger.getLogger("BlockLogLite");
37 log2.setUseParentHandlers(false);
38 FileHandler log2fh = new FileHandler(getDataFolder().getAbsolutePath() File.separatorChar "error.log", true);
39 log2fh.setFormatter(new SimpleFormatter());
40 log2.addHandler(log2fh);
41 log2.setLevel(Level.ALL);
42 } catch (SecurityException ex) {
43 ex.printStackTrace();
44 } catch (IOException ex) {
45 ex.printStackTrace();
46 }
47 //log("onEnable();");
48 boolean configExists = (new File(getDataFolder(), "config.yml")).exists();
49 if (!configExists) {
50 getDataFolder().mkdirs();
51 }
52 conf = new Configuration(new File(getDataFolder(), "config.yml"));
53 if (!configExists) {
54 conf.setProperty("logging.file", "error.log");
55 conf.setProperty("logging.level", "all");
56 conf.setProperty("database.user", "root");
57 conf.setProperty("database.pass", "");
58 conf.setProperty("database.type", "mysql");
59 conf.setProperty("database.mysql-url", "jdbc:mysql://localhost:3306/test");
60 conf.setProperty("database.mysql-queries.create-players", "CREATE TABLE IF NOT EXISTS `bll_players` (`id` int unsigned AUTO_INCREMENT, `player` varchar(32), PRIMARY KEY `player` (`player`), KEY `id` (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
61 conf.setProperty("database.mysql-queries.create-data", "CREATE TABLE IF NOT EXISTS `bll_data` (`id` int unsigned AUTO_INCREMENT, `date` int unsigned, `player_id` int unsigned, `action` tinyint unsigned, `x` int, `y` smallint, `z` int, `block_id` smallint, PRIMARY KEY `id` (`id`), KEY `xyz` (`x`, `y`, `z`), KEY `player_id` (`player_id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;");
62 conf.setProperty("database.mysql-queries.select-player", "SELECT id FROM `bll_players` WHERE player = ?;");
63 conf.setProperty("database.mysql-queries.insert-player", "INSERT INTO `bll_players` (`player`) VALUES (?);");
64 conf.setProperty("database.mysql-queries.select-data", "SELECT date FROM `bll_players` WHERE player = ?;");
65 conf.setProperty("database.mysql-queries.insert-data", "INSERT INTO `bll_data` (`date`, `player_id`, `action`, `x`, `y`, `z`, `block_id`) VALUES (UNIX_TIMESTAMP(), ?, ?, ?, ?, ?, ?);");
66 conf.save();
67 }
68 conf.load();
69 try {
70 Class.forName("com.mysql.jdbc.Driver");
71 db = DriverManager.getConnection(conf.getString("database.mysql-url"), conf.getString("database.user"), conf.getString("database.pass"));
72 Statement s = db.createStatement();
73 s.execute(conf.getString("database.mysql-queries.create-players"));
74 s.execute(conf.getString("database.mysql-queries.create-data"));
75 s.close();
76 } catch (Exception ex) {
77 log(Level.SEVERE, ex.getStackTrace().toString());
78 }
79 getServer().getPluginManager().registerEvent(org.bukkit.event.Event.Type.BLOCK_PLACED, blockListener, org.bukkit.event.Event.Priority.Monitor, this);
80 getServer().getPluginManager().registerEvent(org.bukkit.event.Event.Type.BLOCK_BREAK, blockListener, org.bukkit.event.Event.Priority.Monitor, this);
81 }
82
83 @Override
84 public void onDisable() {
85 //log("onDisable();");
86 try {
87 db.close();
88 } catch (Exception ex) {
89 log(Level.SEVERE, ex.getStackTrace().toString());
90 }
91 }
92
93 @Override
94 public boolean onCommand(CommandSender s, Command cmd, String cl, String[] a) {
95 String cmdName = cmd.getName().toLowerCase();
96 if ( cmdName.equals("bl") && s.isOp() ) {
97 s.sendMessage("BLARG");
98 }
99 return false;
100 }
101
102 public int getPlayerId(String player) {
103 //log("getPlayerId(" player ");");
104 int id = 0;
105 if (playerIdCache.containsKey(player)) {
106 return playerIdCache.get(player);
107 }
108 try {
109 PreparedStatement s = db.prepareStatement(conf.getString("database.mysql-queries.select-player"));
110 s.setString(1, player);
111 ResultSet result = s.executeQuery();
112 if (result.next()) {
113 id = result.getInt("id");
114 playerIdCache.put(player, id);
115 } else {
116 s.close();
117 s = db.prepareStatement(conf.getString("database.mysql-queries.insert-player"), s.RETURN_GENERATED_KEYS);
118 s.setString(1, player);
119 s.executeUpdate();
120 result = s.getGeneratedKeys();
121 if (result.next()) {
122 id = result.getInt("GENERATED_KEY");
123 playerIdCache.put(player, id);
124 }
125 }
126 s.close();
127 } catch (Exception ex) {
128 log(Level.SEVERE, ex.getStackTrace().toString());
129 }
130 return id;
131 }
132
133 public void blockAction(String player, int blockAction, Block block) {
134 //log("blockAction(" player ", " blockAction ", " block.getX() ", " block.getY() ", " block.getZ() ", " block.getTypeId() ");");
135 int playerId = getPlayerId(player);
136 if (playerId > 0) {
137 try {
138 PreparedStatement s = db.prepareStatement(conf.getString("database.mysql-queries.insert-data"));
139 s.setInt(1, playerId);
140 s.setInt(2, blockAction);
141 s.setInt(3, block.getX());
142 s.setInt(4, block.getY());
143 s.setInt(5, block.getZ());
144 s.setInt(6, block.getTypeId());
145 s.executeUpdate();
146 s.close();
147 } catch (Exception ex) {
148 log(Level.SEVERE, ex.getStackTrace().toString());
149 }
150 } else {
151 log(Level.SEVERE, "getPlayerId(" player "): failed (returned 0)");
152 }
153 }
154
155 public void log(Level l, String msg) {
156 log1.log(l, "[BlockLogLite] " msg);
157 log2.log(l, msg);
158 }
159
160 /*
161 public void log(String msg) {
162 log(Level.INFO, msg);
163 }
164 */
165}