· 7 years ago · Jan 30, 2019, 05:30 PM
1package de.lucas.nick;
2
3import java.lang.reflect.Field;
4import java.sql.Connection;
5import java.sql.DriverManager;
6import java.sql.ResultSet;
7import java.sql.SQLException;
8import java.util.ArrayList;
9import java.util.Arrays;
10import java.util.List;
11
12import org.bukkit.Bukkit;
13import org.bukkit.Material;
14import org.bukkit.command.Command;
15import org.bukkit.command.CommandExecutor;
16import org.bukkit.command.CommandSender;
17import org.bukkit.entity.Player;
18import org.bukkit.event.EventHandler;
19import org.bukkit.event.Listener;
20import org.bukkit.event.player.PlayerJoinEvent;
21import org.bukkit.event.player.PlayerQuitEvent;
22import org.bukkit.inventory.Inventory;
23import org.bukkit.inventory.ItemStack;
24import org.bukkit.inventory.meta.SkullMeta;
25import org.bukkit.scheduler.BukkitRunnable;
26
27import com.mojang.authlib.GameProfile;
28
29import de.lucas.main.Main;
30import de.lucas.nick.Nick.MySQL.DataType;
31
32public class Nick implements CommandExecutor, Listener {
33
34 public String prefix = "§8[§eSystem§8] §7";
35 public ArrayList<String> autonickers = new ArrayList<String>();
36 public NickAPI api;
37 public MySQL mysql;
38 public Field nameField;
39 public boolean isEnabled = false;
40 public static Nick instance;
41
42 public Nick() {
43 instance = this;
44 }
45
46 public void nickOnEnable() {
47 isEnabled = true;
48 nameField = getField(GameProfile.class, "name");
49 api = new NickAPI(Main.instance);
50 if (!Main.lobbyServer) {
51 Bukkit.getPluginManager().registerEvents(this, Main.instance);
52 }
53 initSQL();
54 }
55
56 private Field getField(Class<?> clazz, String name) {
57 try {
58 Field field = clazz.getDeclaredField(name);
59 field.setAccessible(true);
60 return field;
61 } catch (NoSuchFieldException | SecurityException e) {
62 e.printStackTrace();
63 }
64 return null;
65 }
66
67 @SuppressWarnings("unchecked")
68 @EventHandler
69 public void onJoin(PlayerJoinEvent e) {
70 Player p = e.getPlayer();
71 if(Main.lobbyServer)
72 return;
73 ArrayList<Integer> result = (ArrayList<Integer>) mysql
74 .result("SELECT * FROM autonick WHERE username='" + p.getName() + "';", "autonick", DataType.INTEGER);
75
76 if (result.size() > 0 && result.get(0) == 1) {
77 api.nickSetzen(p);
78 p.sendMessage("§8[§eSystem§8] §7Du bist nun genickt als §a" + p.getCustomName());
79 p.sendMessage("§8[§eSystem§8] §7Nutze §c/nick §7um dich zu entnicken");
80 }
81 }
82
83 @EventHandler
84 public void onQuit(PlayerQuitEvent e) {
85 Player p = e.getPlayer();
86 if (api.isNicked(p))
87 api.nickEntfernen(p);
88 mysql.update(
89 "UPDATE autonick SET isNicked=0, nickname='" + p.getName() + "' WHERE username='" + p.getName() + "';");
90 }
91
92 public List<String> cooldown = new ArrayList<>();
93
94 @Override
95 public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
96 if (sender instanceof Player && sender.hasPermission("system.nick")) {
97 Player p = (Player) sender;
98 if (command.getName().equalsIgnoreCase("nick")) {
99 if (api == null || Main.lobbyServer) {
100 p.sendMessage("§8[§eSystem§8] §cDir §cwird §ces §cuntersagt §cdich §cauf §cdiesem §cServer §czu §cnicken§c.");
101 return false;
102 }
103 if (cooldown.contains(p.getUniqueId().toString())) {
104 p.sendMessage("§8[§eSystem§8] §cBitte warte einen Moment.");
105 return false;
106 }
107 cooldown.add(p.getUniqueId().toString());
108 new BukkitRunnable() {
109 @Override
110 public void run() {
111 cooldown.remove(p.getUniqueId().toString());
112 }
113 }.runTaskLaterAsynchronously(Main.instance, 60);
114 if (api.isNicked(p)) {
115 api.nickEntfernen(p);
116 p.sendMessage("§8[§eSystem§8] §cDu wurdest entnickt.");
117 } else {
118 api.nickSetzen(p);
119 p.sendMessage(prefix + "§7Du bist nun genickt als §a" + p.getCustomName());
120 p.sendMessage(prefix + "§7Nutze §c/nick §7um dich zu entnicken");
121 }
122 }
123 if (command.getName().equalsIgnoreCase("nicklist")) {
124 if (api == null || Main.lobbyServer) {
125 p.sendMessage(prefix + "§8[§eSystem§8] §cDir §cwird §ces §cuntersagt §cdich §cauf §cdiesem §cServer §czu §cnicken§c.");
126 return false;
127 }
128 Inventory inv = Bukkit.createInventory(null, 3 * 9, "§cNicklist");
129 try {
130 ResultSet rs = mysql.con.prepareStatement("SELECT * FROM autonick WHERE isNicked=1;")
131 .executeQuery();
132
133 while (rs.next()) {
134 String nick = rs.getString("nickname");
135 String real = rs.getString("username");
136 if (Bukkit.getPlayer(nick) != null) {
137 ItemStack i = new ItemStack(Material.SKULL_ITEM, 1, (byte) 3);
138 SkullMeta m = (SkullMeta) i.getItemMeta();
139 m.setDisplayName("§e" + nick);
140 m.setLore(Arrays.asList("§aRealname:", "§a" + real));
141 m.setOwner(nick);
142 i.setItemMeta(m);
143 inv.addItem(i);
144 }
145 }
146 } catch (Exception ex) {
147 }
148
149 p.openInventory(inv);
150 }
151 }
152 return true;
153 }
154
155 public void initSQL() {
156 mysql = new MySQL("212.224.125.251", 3306, "core", "core", "core");
157 mysql.update(
158 "CREATE TABLE IF NOT EXISTS autonick (username VARCHAR(32) NOT NULL, autonick INT(2) NOT NULL, isNicked INT(2) NOT NULL, nickname VARCHAR(32) NOT NULL);");
159 }
160
161 public static class MySQL {
162
163 public Connection con;
164
165 public MySQL(String host, int port, String user, String pw, String db) {
166 try {
167 con = DriverManager.getConnection(
168 "jdbc:mysql://" + host + ":" + port + "/" + db + "?autoReconnect=true", user, pw);
169 } catch (SQLException e) {
170 e.printStackTrace();
171 }
172 }
173
174 public void update(String sql) {
175 try {
176 con.prepareStatement(sql).executeUpdate();
177 } catch (Exception ex) {
178 ex.printStackTrace();
179 }
180 }
181
182 @SuppressWarnings("unchecked")
183 public ArrayList<?> result(String query, String column, DataType type) {
184 try {
185 ResultSet rs = con.prepareStatement(query).executeQuery();
186 ArrayList<?> rslt = new ArrayList<>();
187 while (rs.next())
188 switch (type) {
189 case STRING:
190 ((ArrayList<String>) rslt).add(rs.getString(column));
191 break;
192 case INTEGER:
193 ((ArrayList<Integer>) rslt).add(rs.getInt(column));
194 break;
195 case BOOLEAN:
196 ((ArrayList<Boolean>) rslt).add(rs.getBoolean(column));
197 break;
198 }
199 return rslt;
200 } catch (Exception ex) {
201 ex.printStackTrace();
202 return new ArrayList<>();
203 }
204 }
205
206 public static enum DataType {
207 STRING, INTEGER, BOOLEAN;
208 }
209
210 }
211
212}