Sabbertran

Untitled

Aug 1st, 2014
205
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.79 KB | None | 0 0
  1. package me.sabbertran.infectedutils;
  2.  
  3. import com.sk89q.worldedit.bukkit.WorldEditPlugin;
  4. import java.io.BufferedReader;
  5. import java.io.ByteArrayOutputStream;
  6. import java.io.DataOutputStream;
  7. import java.io.File;
  8. import java.io.FileNotFoundException;
  9. import java.io.FileReader;
  10. import java.io.IOException;
  11. import java.io.PrintWriter;
  12. import java.sql.Connection;
  13. import java.sql.DriverManager;
  14. import java.sql.SQLException;
  15. import java.text.DecimalFormat;
  16. import java.util.ArrayList;
  17. import java.util.Arrays;
  18. import java.util.Date;
  19. import java.util.HashMap;
  20. import java.util.Map;
  21. import java.util.logging.Level;
  22. import java.util.logging.Logger;
  23. import me.sabbertran.infectedutils.commands.HubCommand;
  24. import me.sabbertran.infectedutils.commands.InfectedCommand;
  25. import org.bukkit.Bukkit;
  26. import org.bukkit.ChatColor;
  27. import org.bukkit.Location;
  28. import org.bukkit.Material;
  29. import org.bukkit.entity.Player;
  30. import org.bukkit.plugin.java.JavaPlugin;
  31. import org.bukkit.scoreboard.DisplaySlot;
  32. import org.bukkit.scoreboard.Objective;
  33. import org.bukkit.scoreboard.Score;
  34. import org.bukkit.scoreboard.Scoreboard;
  35.  
  36. public class InfectedUtils extends JavaPlugin
  37. {
  38.  
  39. private Logger log = Bukkit.getLogger();
  40.  
  41. private WorldEditPlugin worldedit = (WorldEditPlugin) getServer().getPluginManager().getPlugin("WorldEdit");
  42.  
  43. private HashMap<Player, Location> loc1, loc2;
  44. private HashMap<Player, Integer> scanningTasks;
  45. private HashMap<Player, Location> hologramLocations;
  46. private HashMap<String, ArrayList<String>> schematics;
  47. private HashMap<Player, Date> lastChange;
  48.  
  49. private HashMap<Player, Boolean> hubCommandMoved;
  50.  
  51. private File schematicsFolder = new File("plugins/InfectedUtils/schematics/");
  52.  
  53. //TPS
  54. private InfectedUtils main;
  55. private long starttime = 0;
  56. private long endTime = 0;
  57. private ArrayList<String> serverOrder;
  58. private HashMap<String, String[]> serverInfo;
  59. private HashMap<String, String> serverStatus;
  60.  
  61. private ArrayList<String> serverInfoSql;
  62. private Connection serverInfoSql_Connection;
  63.  
  64. @Override
  65. public void onDisable()
  66. {
  67. for (Map.Entry<String, ArrayList<String>> entry : schematics.entrySet())
  68. {
  69. System.out.println(entry.getKey());
  70. try
  71. {
  72. File f = new File("plugins/InfectedUtils/schematics/" + entry.getKey() + ".yml");
  73. if (f.exists())
  74. {
  75. f.delete();
  76. }
  77. f.createNewFile();
  78. PrintWriter pw = new PrintWriter(f);
  79. for (String s : entry.getValue())
  80. {
  81. pw.println(s);
  82. }
  83. pw.close();
  84. } catch (IOException ex)
  85. {
  86. Logger.getLogger(InfectedUtils.class.getName()).log(Level.SEVERE, null, ex);
  87. }
  88. }
  89.  
  90. try
  91. {
  92. serverInfoSql_Connection.close();
  93. } catch (SQLException ex)
  94. {
  95. Logger.getLogger(InfectedUtils.class.getName()).log(Level.SEVERE, null, ex);
  96. }
  97.  
  98. log.info("InfectedUtils disabled");
  99. }
  100.  
  101. @Override
  102. public void onEnable()
  103. {
  104. main = this;
  105.  
  106. loc1 = new HashMap<Player, Location>();
  107. loc2 = new HashMap<Player, Location>();
  108. scanningTasks = new HashMap<Player, Integer>();
  109. hologramLocations = new HashMap<Player, Location>();
  110. schematics = new HashMap<String, ArrayList<String>>();
  111. lastChange = new HashMap<Player, Date>();
  112. hubCommandMoved = new HashMap<Player, Boolean>();
  113.  
  114. getServer().getPluginManager().registerEvents(new Events(this), this);
  115.  
  116. getCommand("infected").setExecutor(new InfectedCommand(this));
  117. getCommand("hub").setExecutor(new HubCommand(this));
  118.  
  119. getConfig().addDefault("InfectedUtils.ServerInfo.SQL", new String[]
  120. {
  121. "Adress", "Port", "Database", "User", "Password"
  122. });
  123. getConfig().options().copyDefaults(true);
  124. saveConfig();
  125.  
  126. if (!schematicsFolder.exists())
  127. {
  128. schematicsFolder.mkdirs();
  129. }
  130. for (File f : schematicsFolder.listFiles())
  131. {
  132. BufferedReader read = null;
  133. try
  134. {
  135. String name = f.getName().substring(0, f.getName().length() - 4);
  136. read = new BufferedReader(new FileReader(f));
  137. ArrayList<String> temp = new ArrayList<String>();
  138. String line;
  139. while ((line = read.readLine()) != null)
  140. {
  141. temp.add(line);
  142. }
  143. schematics.put(name, temp);
  144. read.close();
  145. } catch (FileNotFoundException ex)
  146. {
  147. Logger.getLogger(InfectedUtils.class.getName()).log(Level.SEVERE, null, ex);
  148. } catch (IOException ex)
  149. {
  150. Logger.getLogger(InfectedUtils.class.getName()).log(Level.SEVERE, null, ex);
  151. }
  152. }
  153.  
  154. getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
  155.  
  156. getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable()
  157. {
  158. @Override
  159. public void run()
  160. {
  161. getServer().dispatchCommand(getServer().getConsoleSender(), "save-all");
  162. }
  163. }, 0, 12000);
  164.  
  165. getServer().getScheduler().scheduleAsyncRepeatingTask(this, new TickTask(this), 0L, 20L);
  166.  
  167. PMessageListener listener = new PMessageListener(this);
  168. getServer().getMessenger().registerOutgoingPluginChannel(this, "InfectedUtils");
  169. getServer().getMessenger().registerIncomingPluginChannel(this, "InfectedUtils", listener);
  170.  
  171. serverInfo = new HashMap<String, String[]>();
  172. serverStatus = new HashMap<String, String>();
  173. serverOrder = new ArrayList<String>();
  174. serverOrder.add("Hub");
  175. serverOrder.add("Genesis");
  176. serverOrder.add("Deathmatch");
  177. serverOrder.add("ZombieInvasion");
  178. serverOrder.add("HideAndSeek");
  179. serverOrder.add("Splegg");
  180. serverOrder.add("Build");
  181.  
  182. serverInfoSql = new ArrayList<String>();
  183.  
  184. serverInfoSql = (ArrayList<String>) this.getConfig().getStringList("InfectedUtils.ServerInfo.SQL");
  185.  
  186. try
  187. {
  188. Class.forName("com.mysql.jdbc.Driver");
  189. String url = "jdbc:mysql://" + serverInfoSql.get(0) + ":" + serverInfoSql.get(1) + "/" + serverInfoSql.get(2);
  190. serverInfoSql_Connection = DriverManager.getConnection(url, serverInfoSql.get(3), serverInfoSql.get(4));
  191. serverInfoSql_Connection.createStatement().execute("CREATE TABLE IF NOT EXISTS `serverinfo` (`name` varchar(50), `tps` varchar(50), `players` varchar(50), `lastupdate` varchar(50))");
  192.  
  193. log.info("SQL Connection established.");
  194. } catch (ClassNotFoundException | SQLException ex)
  195. {
  196. Logger.getLogger(InfectedUtils.class.getName()).log(Level.SEVERE, null, ex);
  197. }
  198.  
  199. getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable()
  200. {
  201. @Override
  202. public void run()
  203. {
  204. try
  205. {
  206. serverInfoSql_Connection.close();
  207. Class.forName("com.mysql.jdbc.Driver");
  208. String url = "jdbc:mysql://" + serverInfoSql.get(0) + ":" + serverInfoSql.get(1) + "/" + serverInfoSql.get(2);
  209. serverInfoSql_Connection = DriverManager.getConnection(url, serverInfoSql.get(3), serverInfoSql.get(4));
  210.  
  211. log.info("SQL Connection renewed.");
  212. } catch (ClassNotFoundException | SQLException ex)
  213. {
  214. Logger.getLogger(InfectedUtils.class.getName()).log(Level.SEVERE, null, ex);
  215. }
  216. }
  217. }, 72000L, 72000L);
  218.  
  219. log.info("InfectedUtils enabled");
  220. }
  221.  
  222. public void scanSurroundings(final Player p)
  223. {
  224. p.sendMessage("Scanning surroundings...");
  225. Scoreboard s = getServer().getScoreboardManager().getNewScoreboard();
  226. Objective o = s.registerNewObjective(ChatColor.GOLD + "Scanning...", "dummy");
  227. o.setDisplaySlot(DisplaySlot.SIDEBAR);
  228. o.setDisplayName(ChatColor.GOLD + "Scanning...");
  229. final Score sc = o.getScore("Progress (%)");
  230. p.setScoreboard(s);
  231. scanningTasks.put(p, getServer().getScheduler().scheduleSyncRepeatingTask(this, new Runnable()
  232. {
  233. int i = 0;
  234.  
  235. @Override
  236. public void run()
  237. {
  238. sc.setScore(i);
  239. if (i == 100)
  240. {
  241. Location l = p.getLocation();
  242. boolean b = validLocation(l);
  243. p.setScoreboard(getServer().getScoreboardManager().getNewScoreboard());
  244. getServer().getScheduler().cancelTask(scanningTasks.get(p));
  245. scanningTasks.remove(p);
  246. if (b)
  247. {
  248. p.sendMessage("PIKACHU, PLACE HOUSE!");
  249. sendHologram("test", p);
  250. } else
  251. {
  252. p.sendMessage("You need be on a flat grass area to use these special pokemon powers.");
  253. }
  254. }
  255. i++;
  256. }
  257. }, 1L, 1L));
  258. }
  259.  
  260. public boolean validLocation(Location l)
  261. {
  262. for (int x = -15; x <= 15; x++)
  263. {
  264. for (int z = -15; z < 15; z++)
  265. {
  266. Location l1 = new Location(l.getWorld(), l.getX() + x, l.getY() - 1, l.getZ() + z);
  267. if (l1.getBlock().getType() != Material.GRASS)
  268. {
  269. return false;
  270. }
  271. for (int y = 0; y < 15; y++)
  272. {
  273. Location l2 = new Location(l.getWorld(), l.getX() + x, l.getY() + y, l.getZ() + z);
  274. if (l2.getBlock().getType() != Material.AIR)
  275. {
  276. return false;
  277. }
  278. }
  279. }
  280. }
  281. return true;
  282. }
  283.  
  284. public void sendHologram(String name, Player p)
  285. {
  286. for (String s : schematics.get(name))
  287. {
  288. String[] split = s.split("; ");
  289. Location l = new Location(p.getWorld(), p.getLocation().getBlockX() + Integer.parseInt(split[0]), p.getLocation().getBlockY() + Integer.parseInt(split[1]), p.getLocation().getBlockZ() + Integer.parseInt(split[2]));
  290. p.sendBlockChange(l, Material.getMaterial(Integer.parseInt(split[3])), Byte.parseByte(split[4]));
  291. }
  292. hologramLocations.put(p, p.getLocation());
  293. }
  294.  
  295. public void removeBlockChanges(String name, Player p)
  296. {
  297. Location l = hologramLocations.get(p);
  298. for (String s : schematics.get(name))
  299. {
  300. String[] split = s.split("; ");
  301. Location l1 = new Location(p.getWorld(), l.getBlockX() + Integer.parseInt(split[0]), l.getBlockY() + Integer.parseInt(split[1]), l.getBlockZ() + Integer.parseInt(split[2]));
  302. if (p.getLocation().getY() - 1 == l1.getY())
  303. {
  304. Location l2 = new Location(p.getWorld(), p.getLocation().getX(), p.getLocation().getY() - 1, p.getLocation().getZ());
  305. p.sendBlockChange(l1, l2.getBlock().getType(), l2.getBlock().getData());
  306. } else
  307. {
  308. p.sendBlockChange(l1, Material.AIR, (byte) 0);
  309. }
  310. }
  311. hologramLocations.remove(p);
  312. }
  313.  
  314. public void pasteSchematic(String name, Player p)
  315. {
  316. if (hologramLocations.containsKey(p))
  317. {
  318. Location l = hologramLocations.get(p);
  319. for (String s : schematics.get(name))
  320. {
  321. String[] split = s.split("; ");
  322. Location l1 = new Location(l.getWorld(), l.getBlockX() + Integer.parseInt(split[0]), l.getBlockY() + Integer.parseInt(split[1]), l.getBlockZ() + Integer.parseInt(split[2]));
  323. l1.getBlock().setType(Material.getMaterial(Integer.parseInt(split[3])));
  324. l1.getBlock().setData(Byte.parseByte(split[4]));
  325. }
  326. }
  327. }
  328.  
  329. public void updateServerInfo(String server, String status, String newTps, String newPlayers)
  330. {
  331. serverInfo.put(server, new String[]
  332. {
  333. newTps, newPlayers
  334. });
  335. serverStatus.put(server, status);
  336. }
  337.  
  338. public void updateScoreboards()
  339. {
  340. Scoreboard board = getServer().getScoreboardManager().getNewScoreboard();
  341. Objective serverInfo = board.registerNewObjective("Server Info", "dummy");
  342. serverInfo.setDisplaySlot(DisplaySlot.SIDEBAR);
  343. serverInfo.setDisplayName(ChatColor.AQUA + "" + ChatColor.UNDERLINE + getServer().getMotd());
  344. int i = this.serverInfo.size() * 2;
  345. int j = 1;
  346. Score empty = serverInfo.getScore("");
  347. empty.setScore(i + 1);
  348. for (int k = 0; k < serverOrder.size(); k++)
  349. {
  350. String name = serverOrder.get(k);
  351. String status = serverStatus.get(name);
  352. if (status != null)
  353. {
  354. if (status.equals("Online"))
  355. {
  356. String stps = this.serverInfo.get(name)[0];
  357. String player = this.serverInfo.get(name)[1];
  358. double tps;
  359. if (stps.equals("--.--"))
  360. {
  361. tps = 0;
  362. } else
  363. {
  364. tps = Double.parseDouble(stps);
  365. }
  366.  
  367. if (tps == 0 || tps >= 15)
  368. {
  369. Score s = serverInfo.getScore(ChatColor.GREEN + name);
  370. s.setScore(i);
  371. } else if (tps >= 10)
  372. {
  373. Score s = serverInfo.getScore(ChatColor.YELLOW + name);
  374. s.setScore(i);
  375. } else
  376. {
  377. Score s = serverInfo.getScore(ChatColor.RED + name);
  378. s.setScore(i);
  379. }
  380. Score s1 = serverInfo.getScore(j + ") " + stps + " | " + player);
  381. s1.setScore(i - 1);
  382. } else
  383. {
  384. Score s = serverInfo.getScore(ChatColor.DARK_RED + name);
  385. s.setScore(i);
  386. Score s1 = serverInfo.getScore(j + ") " + "Offline");
  387. s1.setScore(i - 1);
  388. }
  389. }
  390.  
  391. i = i - 2;
  392. j++;
  393. }
  394.  
  395. for (Player p : getServer().getOnlinePlayers())
  396. {
  397. if (p.hasPermission("infected.admin.serverinfo"))
  398. {
  399. p.setScoreboard(board);
  400. } else
  401. {
  402. p.setScoreboard(getServer().getScoreboardManager().getNewScoreboard());
  403. }
  404. }
  405. }
  406.  
  407. public void sendServerInfo()
  408. {
  409. try
  410. {
  411. ByteArrayOutputStream b = new ByteArrayOutputStream();
  412. DataOutputStream out = new DataOutputStream(b);
  413. out.writeUTF("Info");
  414. out.writeUTF("Online");
  415. out.writeUTF(getServer().getMotd());
  416. double endstart = endTime - starttime;
  417. double dtps = 20000 / endstart;
  418. if (dtps > 20)
  419. {
  420. dtps = 20;
  421. }
  422. DecimalFormat df = new DecimalFormat("00.00");
  423. String tps = df.format(dtps);
  424. out.writeUTF("" + tps);
  425. String players = getServer().getOnlinePlayers().length + "/" + getServer().getMaxPlayers();
  426. out.writeUTF(players);
  427. getServer().sendPluginMessage(this, "InfectedUtils", b.toByteArray());
  428.  
  429. serverInfoSql_Connection.createStatement().execute("UPDATE serverinfo SET tps = '" + tps + "' WHERE name = '" + getServer().getMotd() + "'");
  430. serverInfoSql_Connection.createStatement().execute("UPDATE serverinfo SET players = '" + players + "' WHERE name = '" + getServer().getMotd() + "'");
  431. serverInfoSql_Connection.createStatement().execute("UPDATE serverinfo SET lastupdate = '" + new Date().getTime() + "' WHERE name = '" + getServer().getMotd() + "'");
  432. } catch (IOException | SQLException ex)
  433. {
  434. Logger.getLogger(InfectedUtils.class.getName()).log(Level.SEVERE, null, ex);
  435. }
  436. }
  437.  
  438. public void setStartTime(long startTime)
  439. {
  440. this.starttime = startTime;
  441. }
  442.  
  443. public void setEndTime(long endTime)
  444. {
  445. this.endTime = endTime;
  446. }
  447.  
  448. public HashMap<Player, Integer> getScanningTasks()
  449. {
  450. return scanningTasks;
  451. }
  452.  
  453. public HashMap<Player, Location> getHologramLocations()
  454. {
  455. return hologramLocations;
  456. }
  457.  
  458. public HashMap<Player, Location> getLoc1()
  459. {
  460. return loc1;
  461. }
  462.  
  463. public HashMap<Player, Location> getLoc2()
  464. {
  465. return loc2;
  466. }
  467.  
  468. public HashMap<String, ArrayList<String>> getSchematics()
  469. {
  470. return schematics;
  471. }
  472.  
  473. public WorldEditPlugin getWorldedit()
  474. {
  475. return worldedit;
  476. }
  477.  
  478. public HashMap<Player, Date> getLastChange()
  479. {
  480. return lastChange;
  481. }
  482.  
  483. public HashMap<Player, Boolean> getHubCommandMoved()
  484. {
  485. return hubCommandMoved;
  486. }
  487.  
  488. public HashMap<String, String[]> getServerInfo()
  489. {
  490. return serverInfo;
  491. }
  492.  
  493. public HashMap<String, String> getServerStatus()
  494. {
  495. return serverStatus;
  496. }
  497.  
  498. }
Advertisement
Add Comment
Please, Sign In to add comment