MrNorbertPL24

Untitled

Jul 15th, 2014
204
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 17.56 KB | None | 0 0
  1. package com.sk89q.worldguard.bukkit;
  2.  
  3. import com.sk89q.bukkit.util.CommandsManagerRegistration;
  4. import com.sk89q.minecraft.util.commands.CommandException;
  5. import com.sk89q.minecraft.util.commands.CommandPermissionsException;
  6. import com.sk89q.minecraft.util.commands.CommandUsageException;
  7. import com.sk89q.minecraft.util.commands.CommandsManager;
  8. import com.sk89q.minecraft.util.commands.MissingNestedCommandException;
  9. import com.sk89q.minecraft.util.commands.SimpleInjector;
  10. import com.sk89q.minecraft.util.commands.WrappedCommandException;
  11. import com.sk89q.wepif.PermissionsResolverManager;
  12. import com.sk89q.worldedit.bukkit.WorldEditPlugin;
  13. import com.sk89q.worldguard.LocalPlayer;
  14. import com.sk89q.worldguard.bukkit.commands.GeneralCommands;
  15. import com.sk89q.worldguard.bukkit.commands.ProtectionCommands;
  16. import com.sk89q.worldguard.bukkit.commands.ToggleCommands;
  17. import com.sk89q.worldguard.protection.GlobalRegionManager;
  18. import com.sk89q.worldguard.protection.managers.RegionManager;
  19. import com.sk89q.worldguard.util.FatalConfigurationLoadingException;
  20. import java.io.File;
  21. import java.io.FileNotFoundException;
  22. import java.io.FileOutputStream;
  23. import java.io.IOException;
  24. import java.io.InputStream;
  25. import java.util.ArrayList;
  26. import java.util.Arrays;
  27. import java.util.Iterator;
  28. import java.util.List;
  29. import java.util.Set;
  30. import java.util.jar.JarFile;
  31. import java.util.logging.Logger;
  32. import java.util.zip.ZipEntry;
  33. import org.bukkit.ChatColor;
  34. import org.bukkit.Location;
  35. import org.bukkit.Server;
  36. import org.bukkit.World;
  37. import org.bukkit.World.Environment;
  38. import org.bukkit.block.Block;
  39. import org.bukkit.command.Command;
  40. import org.bukkit.command.CommandSender;
  41. import org.bukkit.command.ConsoleCommandSender;
  42. import org.bukkit.entity.Player;
  43. import org.bukkit.permissions.Permissible;
  44. import org.bukkit.plugin.Plugin;
  45. import org.bukkit.plugin.PluginManager;
  46. import org.bukkit.plugin.java.JavaPlugin;
  47. import org.bukkit.scheduler.BukkitScheduler;
  48. import org.bukkit.util.Vector;
  49.  
  50. public class WorldGuardPlugin
  51. extends JavaPlugin
  52. {
  53. private final CommandsManager<CommandSender> commands;
  54. private final GlobalRegionManager globalRegionManager;
  55. private final ConfigurationManager configuration;
  56. private FlagStateManager flagStateManager;
  57.  
  58. public WorldGuardPlugin()
  59. {
  60. this.configuration = new ConfigurationManager(this);
  61. this.globalRegionManager = new GlobalRegionManager(this);
  62.  
  63. final WorldGuardPlugin plugin = this;
  64. this.commands = new CommandsManager()
  65. {
  66. public boolean hasPermission(CommandSender player, String perm)
  67. {
  68. return plugin.hasPermission(player, perm);
  69. }
  70. };
  71. }
  72.  
  73. public void onEnable()
  74. {
  75. this.commands.setInjector(new SimpleInjector(new Object[] { this }));
  76.  
  77.  
  78. final CommandsManagerRegistration reg = new CommandsManagerRegistration(this, this.commands);
  79. reg.register(ToggleCommands.class);
  80. reg.register(ProtectionCommands.class);
  81.  
  82. getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable()
  83. {
  84. public void run()
  85. {
  86. if (!WorldGuardPlugin.this.getGlobalStateManager().hasCommandBookGodMode()) {
  87. reg.register(GeneralCommands.class);
  88. }
  89. }
  90. }, 0L);
  91.  
  92.  
  93.  
  94.  
  95.  
  96. getDataFolder().mkdirs();
  97.  
  98. PermissionsResolverManager.initialize(this);
  99.  
  100.  
  101. LegacyWorldGuardMigration.migrateBlacklist(this);
  102. try
  103. {
  104. this.configuration.load();
  105. this.globalRegionManager.preload();
  106. }
  107. catch (FatalConfigurationLoadingException e)
  108. {
  109. e.printStackTrace();
  110. getServer().shutdown();
  111. }
  112. LegacyWorldGuardMigration.migrateRegions(this);
  113.  
  114. this.flagStateManager = new FlagStateManager(this);
  115. if (this.configuration.useRegionsScheduler) {
  116. getServer().getScheduler().scheduleSyncRepeatingTask(this, this.flagStateManager, 20L, 20L);
  117. }
  118. new WorldGuardPlayerListener(this).registerEvents();
  119. new WorldGuardBlockListener(this).registerEvents();
  120. new WorldGuardEntityListener(this).registerEvents();
  121. new WorldGuardWeatherListener(this).registerEvents();
  122. new WorldGuardVehicleListener(this).registerEvents();
  123. new WorldGuardServerListener(this).registerEvents();
  124. if (BukkitUtil.hasHangingEvent()) {
  125. new WorldGuardHangingListener(this).registerEvents();
  126. } else {
  127. new WorldGuardPaintingListener(this).registerEvents();
  128. }
  129. this.configuration.updateCommandBookGodMode();
  130. if (getServer().getPluginManager().isPluginEnabled("CommandBook")) {
  131. getServer().getPluginManager().registerEvents(new WorldGuardCommandBookListener(this), this);
  132. }
  133. WorldGuardWorldListener worldListener = new WorldGuardWorldListener(this);
  134. for (World world : getServer().getWorlds()) {
  135. worldListener.initWorld(world);
  136. }
  137. worldListener.registerEvents();
  138. if (!this.configuration.hasCommandBookGodMode()) {
  139. for (Player player : getServer().getOnlinePlayers()) {
  140. if ((inGroup(player, "wg-invincible")) || ((this.configuration.autoGodMode) && (hasPermission(player, "worldguard.auto-invincible")))) {
  141. this.configuration.enableGodMode(player);
  142. }
  143. }
  144. }
  145. }
  146.  
  147. public void onDisable()
  148. {
  149. this.globalRegionManager.unload();
  150. this.configuration.unload();
  151. getServer().getScheduler().cancelTasks(this);
  152. }
  153.  
  154. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
  155. {
  156. try
  157. {
  158. this.commands.execute(cmd.getName(), args, sender, new Object[] { sender });
  159. }
  160. catch (CommandPermissionsException e)
  161. {
  162. sender.sendMessage(ChatColor.RED + "You don't have permission.");
  163. }
  164. catch (MissingNestedCommandException e)
  165. {
  166. sender.sendMessage(ChatColor.RED + e.getUsage());
  167. }
  168. catch (CommandUsageException e)
  169. {
  170. sender.sendMessage(ChatColor.RED + e.getMessage());
  171. sender.sendMessage(ChatColor.RED + e.getUsage());
  172. }
  173. catch (WrappedCommandException e)
  174. {
  175. if ((e.getCause() instanceof NumberFormatException))
  176. {
  177. sender.sendMessage(ChatColor.RED + "Number expected, string received instead.");
  178. }
  179. else
  180. {
  181. sender.sendMessage(ChatColor.RED + "An error has occurred. See console.");
  182. e.printStackTrace();
  183. }
  184. }
  185. catch (CommandException e)
  186. {
  187. sender.sendMessage(ChatColor.RED + e.getMessage());
  188. }
  189. return true;
  190. }
  191.  
  192. public GlobalRegionManager getGlobalRegionManager()
  193. {
  194. return this.globalRegionManager;
  195. }
  196.  
  197. @Deprecated
  198. public ConfigurationManager getGlobalConfiguration()
  199. {
  200. return getGlobalStateManager();
  201. }
  202.  
  203. public FlagStateManager getFlagStateManager()
  204. {
  205. return this.flagStateManager;
  206. }
  207.  
  208. public ConfigurationManager getGlobalStateManager()
  209. {
  210. return this.configuration;
  211. }
  212.  
  213. public boolean inGroup(Player player, String group)
  214. {
  215. try
  216. {
  217. return PermissionsResolverManager.getInstance().inGroup(player, group);
  218. }
  219. catch (Throwable t)
  220. {
  221. t.printStackTrace();
  222. }
  223. return false;
  224. }
  225.  
  226. public String[] getGroups(Player player)
  227. {
  228. try
  229. {
  230. return PermissionsResolverManager.getInstance().getGroups(player);
  231. }
  232. catch (Throwable t)
  233. {
  234. t.printStackTrace();
  235. }
  236. return new String[0];
  237. }
  238.  
  239. public String toUniqueName(CommandSender sender)
  240. {
  241. if ((sender instanceof ConsoleCommandSender)) {
  242. return "*Console*";
  243. }
  244. return sender.getName();
  245. }
  246.  
  247. public String toName(CommandSender sender)
  248. {
  249. if ((sender instanceof ConsoleCommandSender)) {
  250. return "*Console*";
  251. }
  252. if ((sender instanceof Player)) {
  253. return ((Player)sender).getDisplayName();
  254. }
  255. return sender.getName();
  256. }
  257.  
  258. public boolean hasPermission(CommandSender sender, String perm)
  259. {
  260. if (sender.isOp()) {
  261. if ((sender instanceof Player))
  262. {
  263. if (getGlobalStateManager().get(((Player)sender).getWorld()).opPermissions) {
  264. return true;
  265. }
  266. }
  267. else {
  268. return true;
  269. }
  270. }
  271. if ((sender instanceof Player))
  272. {
  273. Player player = (Player)sender;
  274. return PermissionsResolverManager.getInstance().hasPermission(player.getWorld().getName(), player.getName(), perm);
  275. }
  276. return false;
  277. }
  278.  
  279. public void checkPermission(CommandSender sender, String perm)
  280. throws CommandPermissionsException
  281. {
  282. if (!hasPermission(sender, perm)) {
  283. throw new CommandPermissionsException();
  284. }
  285. }
  286.  
  287. public Player checkPlayer(CommandSender sender)
  288. throws CommandException
  289. {
  290. if ((sender instanceof Player)) {
  291. return (Player)sender;
  292. }
  293. throw new CommandException("A player is expected.");
  294. }
  295.  
  296. public List<Player> matchPlayerNames(String filter)
  297. {
  298. Player[] players = getServer().getOnlinePlayers();
  299.  
  300. filter = filter.toLowerCase();
  301. if ((filter.charAt(0) == '@') && (filter.length() >= 2))
  302. {
  303. filter = filter.substring(1);
  304. for (Player player : players) {
  305. if (player.getName().equalsIgnoreCase(filter))
  306. {
  307. List<Player> list = new ArrayList();
  308. list.add(player);
  309. return list;
  310. }
  311. }
  312. return new ArrayList();
  313. }
  314. if ((filter.charAt(0) == '*') && (filter.length() >= 2))
  315. {
  316. filter = filter.substring(1);
  317.  
  318. List<Player> list = new ArrayList();
  319. for (Player player : players) {
  320. if (player.getName().toLowerCase().contains(filter)) {
  321. list.add(player);
  322. }
  323. }
  324. return list;
  325. }
  326. List<Player> list = new ArrayList();
  327. for (Player player : players) {
  328. if (player.getName().toLowerCase().startsWith(filter)) {
  329. list.add(player);
  330. }
  331. }
  332. return list;
  333. }
  334.  
  335. protected Iterable<Player> checkPlayerMatch(List<Player> players)
  336. throws CommandException
  337. {
  338. if (players.size() == 0) {
  339. throw new CommandException("No players matched query.");
  340. }
  341. return players;
  342. }
  343.  
  344. public Iterable<Player> matchPlayers(CommandSender source, String filter)
  345. throws CommandException
  346. {
  347. if (getServer().getOnlinePlayers().length == 0) {
  348. throw new CommandException("No players matched query.");
  349. }
  350. if (filter.equals("*")) {
  351. return checkPlayerMatch(Arrays.asList(getServer().getOnlinePlayers()));
  352. }
  353. if (filter.charAt(0) == '#')
  354. {
  355. if (filter.equalsIgnoreCase("#world"))
  356. {
  357. List<Player> players = new ArrayList();
  358. Player sourcePlayer = checkPlayer(source);
  359. World sourceWorld = sourcePlayer.getWorld();
  360. for (Player player : getServer().getOnlinePlayers()) {
  361. if (player.getWorld().equals(sourceWorld)) {
  362. players.add(player);
  363. }
  364. }
  365. return checkPlayerMatch(players);
  366. }
  367. if (filter.equalsIgnoreCase("#near"))
  368. {
  369. List<Player> players = new ArrayList();
  370. Player sourcePlayer = checkPlayer(source);
  371. World sourceWorld = sourcePlayer.getWorld();
  372. Vector sourceVector = sourcePlayer.getLocation().toVector();
  373. for (Player player : getServer().getOnlinePlayers()) {
  374. if ((player.getWorld().equals(sourceWorld)) && (player.getLocation().toVector().distanceSquared(sourceVector) < 900.0D)) {
  375. players.add(player);
  376. }
  377. }
  378. return checkPlayerMatch(players);
  379. }
  380. throw new CommandException("Invalid group '" + filter + "'.");
  381. }
  382. List<Player> players = matchPlayerNames(filter);
  383.  
  384. return checkPlayerMatch(players);
  385. }
  386.  
  387. public Player matchSinglePlayer(CommandSender sender, String filter)
  388. throws CommandException
  389. {
  390. Iterator<Player> players = matchPlayers(sender, filter).iterator();
  391.  
  392. Player match = (Player)players.next();
  393. if (players.hasNext()) {
  394. throw new CommandException("More than one player found! Use @<name> for exact matching.");
  395. }
  396. return match;
  397. }
  398.  
  399. public CommandSender matchPlayerOrConsole(CommandSender sender, String filter)
  400. throws CommandException
  401. {
  402. if ((filter.equalsIgnoreCase("#console")) || (filter.equalsIgnoreCase("*console*")) || (filter.equalsIgnoreCase("!"))) {
  403. return getServer().getConsoleSender();
  404. }
  405. return matchSinglePlayer(sender, filter);
  406. }
  407.  
  408. public Iterable<Player> matchPlayers(Player player)
  409. {
  410. return Arrays.asList(new Player[] { player });
  411. }
  412.  
  413. public World matchWorld(CommandSender sender, String filter)
  414. throws CommandException
  415. {
  416. List<World> worlds = getServer().getWorlds();
  417. if (filter.charAt(0) == '#')
  418. {
  419. if (filter.equalsIgnoreCase("#main")) {
  420. return (World)worlds.get(0);
  421. }
  422. if (filter.equalsIgnoreCase("#normal"))
  423. {
  424. for (World world : worlds) {
  425. if (world.getEnvironment() == World.Environment.NORMAL) {
  426. return world;
  427. }
  428. }
  429. throw new CommandException("No normal world found.");
  430. }
  431. if (filter.equalsIgnoreCase("#nether"))
  432. {
  433. for (World world : worlds) {
  434. if (world.getEnvironment() == World.Environment.NETHER) {
  435. return world;
  436. }
  437. }
  438. throw new CommandException("No nether world found.");
  439. }
  440. if (filter.matches("^#player$"))
  441. {
  442. String[] parts = filter.split(":", 2);
  443. if (parts.length == 1) {
  444. throw new CommandException("Argument expected for #player.");
  445. }
  446. return ((Player)matchPlayers(sender, parts[1]).iterator().next()).getWorld();
  447. }
  448. throw new CommandException("Invalid identifier '" + filter + "'.");
  449. }
  450. for (World world : worlds) {
  451. if (world.getName().equals(filter)) {
  452. return world;
  453. }
  454. }
  455. throw new CommandException("No world by that exact name found.");
  456. }
  457.  
  458. public WorldEditPlugin getWorldEdit()
  459. throws CommandException
  460. {
  461. Plugin worldEdit = getServer().getPluginManager().getPlugin("WorldEdit");
  462. if (worldEdit == null) {
  463. throw new CommandException("WorldEdit does not appear to be installed.");
  464. }
  465. if ((worldEdit instanceof WorldEditPlugin)) {
  466. return (WorldEditPlugin)worldEdit;
  467. }
  468. throw new CommandException("WorldEdit detection failed (report error).");
  469. }
  470.  
  471. public LocalPlayer wrapPlayer(Player player)
  472. {
  473. return new BukkitPlayer(this, player);
  474. }
  475.  
  476. public void createDefaultConfiguration(File actual, String defaultName)
  477. {
  478. File parent = actual.getParentFile();
  479. if (!parent.exists()) {
  480. parent.mkdirs();
  481. }
  482. if (actual.exists()) {
  483. return;
  484. }
  485. InputStream input = null;
  486. try
  487. {
  488. JarFile file = new JarFile(getFile());
  489. ZipEntry copy = file.getEntry("defaults/" + defaultName);
  490. if (copy == null) {
  491. throw new FileNotFoundException();
  492. }
  493. input = file.getInputStream(copy);
  494. }
  495. catch (IOException e)
  496. {
  497. getLogger().severe("Unable to read default configuration: " + defaultName);
  498. }
  499. if (input != null)
  500. {
  501. FileOutputStream output = null;
  502. try
  503. {
  504. output = new FileOutputStream(actual);
  505. byte[] buf = new byte[8192];
  506. int length = 0;
  507. while ((length = input.read(buf)) > 0) {
  508. output.write(buf, 0, length);
  509. }
  510. getLogger().info("Default configuration file written: " + actual.getAbsolutePath());
  511. }
  512. catch (IOException e)
  513. {
  514. e.printStackTrace();
  515. }
  516. finally
  517. {
  518. try
  519. {
  520. if (input != null) {
  521. input.close();
  522. }
  523. }
  524. catch (IOException ignore) {}
  525. try
  526. {
  527. if (output != null) {
  528. output.close();
  529. }
  530. }
  531. catch (IOException ignore) {}
  532. }
  533. }
  534. }
  535.  
  536. public void broadcastNotification(String msg)
  537. {
  538. getServer().broadcast(msg, "worldguard.notify");
  539. Set<Permissible> subs = getServer().getPluginManager().getPermissionSubscriptions("worldguard.notify");
  540. for (Player player : getServer().getOnlinePlayers()) {
  541. if (((!subs.contains(player)) || (!player.hasPermission("worldguard.notify"))) && (hasPermission(player, "worldguard.notify"))) {
  542. player.sendMessage(msg);
  543. }
  544. }
  545. getLogger().info(msg);
  546. }
  547.  
  548. public void forgetPlayer(Player player)
  549. {
  550. this.flagStateManager.forget(player);
  551. }
  552.  
  553. public boolean canBuild(Player player, Location loc)
  554. {
  555. return getGlobalRegionManager().canBuild(player, loc);
  556. }
  557.  
  558. public boolean canBuild(Player player, Block block)
  559. {
  560. return getGlobalRegionManager().canBuild(player, block);
  561. }
  562.  
  563. public RegionManager getRegionManager(World world)
  564. {
  565. if (!getGlobalStateManager().get(world).useRegions) {
  566. return null;
  567. }
  568. return getGlobalRegionManager().get(world);
  569. }
  570.  
  571. public String replaceMacros(CommandSender sender, String message)
  572. {
  573. Player[] online = getServer().getOnlinePlayers();
  574.  
  575. message = message.replace("%name%", toName(sender));
  576. message = message.replace("%id%", toUniqueName(sender));
  577. message = message.replace("%online%", String.valueOf(online.length));
  578. if ((sender instanceof Player))
  579. {
  580. Player player = (Player)sender;
  581. World world = player.getWorld();
  582.  
  583. message = message.replace("%world%", world.getName());
  584. message = message.replace("%health%", String.valueOf(player.getHealth()));
  585. }
  586. return message;
  587. }
  588. }
Advertisement
Add Comment
Please, Sign In to add comment