Advertisement
Guest User

Untitled

a guest
Feb 25th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.52 KB | None | 0 0
  1. package com.comze_instancelabs.bedwars;
  2.  
  3. import com.comze_instancelabs.bedwars.gui.MainGUI;
  4. import com.comze_instancelabs.bedwars.gui.TeamSelectorGUI;
  5. import com.comze_instancelabs.bedwars.sheep.Register;
  6. import com.comze_instancelabs.bedwars.sheep.Register110;
  7. import com.comze_instancelabs.bedwars.sheep.Register111;
  8. import com.comze_instancelabs.bedwars.sheep.Register1710;
  9. import com.comze_instancelabs.bedwars.sheep.Register172;
  10. import com.comze_instancelabs.bedwars.sheep.Register175;
  11. import com.comze_instancelabs.bedwars.sheep.Register178;
  12. import com.comze_instancelabs.bedwars.sheep.Register18;
  13. import com.comze_instancelabs.bedwars.sheep.Register185;
  14. import com.comze_instancelabs.bedwars.sheep.Register188;
  15. import com.comze_instancelabs.bedwars.sheep.Register19;
  16. import com.comze_instancelabs.bedwars.sheep.Register194;
  17. import com.comze_instancelabs.bedwars.sheep.Sheeep;
  18. import com.comze_instancelabs.bedwars.villager.Merchant;
  19. import com.comze_instancelabs.bedwars.villager.Merchant110;
  20. import com.comze_instancelabs.bedwars.villager.Merchant111;
  21. import com.comze_instancelabs.bedwars.villager.Merchant1710;
  22. import com.comze_instancelabs.bedwars.villager.Merchant172;
  23. import com.comze_instancelabs.bedwars.villager.Merchant175;
  24. import com.comze_instancelabs.bedwars.villager.Merchant178;
  25. import com.comze_instancelabs.bedwars.villager.Merchant18;
  26. import com.comze_instancelabs.bedwars.villager.Merchant185;
  27. import com.comze_instancelabs.bedwars.villager.Merchant188;
  28. import com.comze_instancelabs.bedwars.villager.Merchant19;
  29. import com.comze_instancelabs.bedwars.villager.Merchant194;
  30. import com.comze_instancelabs.minigamesapi.Arena;
  31. import com.comze_instancelabs.minigamesapi.ArenaSetup;
  32. import com.comze_instancelabs.minigamesapi.ArenaState;
  33. import com.comze_instancelabs.minigamesapi.ArenaType;
  34. import com.comze_instancelabs.minigamesapi.MinigamesAPI;
  35. import com.comze_instancelabs.minigamesapi.PluginInstance;
  36. import com.comze_instancelabs.minigamesapi.SmartReset;
  37. import com.comze_instancelabs.minigamesapi.config.ArenasConfig;
  38. import com.comze_instancelabs.minigamesapi.config.DefaultConfig;
  39. import com.comze_instancelabs.minigamesapi.config.MessagesConfig;
  40. import com.comze_instancelabs.minigamesapi.config.StatsConfig;
  41. import com.comze_instancelabs.minigamesapi.util.Cuboid;
  42. import com.comze_instancelabs.minigamesapi.util.Util;
  43. import com.comze_instancelabs.minigamesapi.util.Validator;
  44. import java.lang.reflect.Method;
  45. import java.util.ArrayList;
  46. import java.util.HashMap;
  47. import java.util.List;
  48. import java.util.logging.Logger;
  49. import org.bukkit.Bukkit;
  50. import org.bukkit.ChatColor;
  51. import org.bukkit.Chunk;
  52. import org.bukkit.Location;
  53. import org.bukkit.Material;
  54. import org.bukkit.World;
  55. import org.bukkit.block.Block;
  56. import org.bukkit.command.Command;
  57. import org.bukkit.command.CommandSender;
  58. import org.bukkit.configuration.ConfigurationSection;
  59. import org.bukkit.configuration.file.FileConfiguration;
  60. import org.bukkit.configuration.file.FileConfigurationOptions;
  61. import org.bukkit.entity.Arrow;
  62. import org.bukkit.entity.Entity;
  63. import org.bukkit.entity.EntityType;
  64. import org.bukkit.entity.Item;
  65. import org.bukkit.entity.Player;
  66. import org.bukkit.entity.Villager;
  67. import org.bukkit.event.EventHandler;
  68. import org.bukkit.event.EventPriority;
  69. import org.bukkit.event.Listener;
  70. import org.bukkit.event.block.BlockBreakEvent;
  71. import org.bukkit.event.block.BlockPlaceEvent;
  72. import org.bukkit.event.entity.EntityDamageByEntityEvent;
  73. import org.bukkit.event.entity.ItemSpawnEvent;
  74. import org.bukkit.event.entity.PlayerDeathEvent;
  75. import org.bukkit.event.inventory.InventoryClickEvent;
  76. import org.bukkit.event.inventory.InventoryType.SlotType;
  77. import org.bukkit.event.player.AsyncPlayerChatEvent;
  78. import org.bukkit.event.player.PlayerBedEnterEvent;
  79. import org.bukkit.event.player.PlayerInteractEntityEvent;
  80. import org.bukkit.event.player.PlayerInteractEvent;
  81. import org.bukkit.event.player.PlayerMoveEvent;
  82. import org.bukkit.event.player.PlayerTeleportEvent;
  83. import org.bukkit.inventory.Inventory;
  84. import org.bukkit.inventory.ItemStack;
  85. import org.bukkit.inventory.PlayerInventory;
  86. import org.bukkit.inventory.meta.ItemMeta;
  87. import org.bukkit.plugin.PluginManager;
  88. import org.bukkit.plugin.java.JavaPlugin;
  89. import org.bukkit.scheduler.BukkitScheduler;
  90. import org.bukkit.util.Vector;
  91.  
  92. public class Main
  93. extends JavaPlugin
  94. implements Listener
  95. {
  96. Register reg;
  97. MinigamesAPI api = null;
  98. PluginInstance pli = null;
  99. static Main m = null;
  100. public IArenaScoreboard scoreboard = new IArenaScoreboard(this);
  101. ICommandHandler cmdhandler = new ICommandHandler();
  102. public MainGUI maingui;
  103. public TeamSelectorGUI teamgui;
  104. public GUIConfig gui;
  105. public static HashMap<String, String> pteam = new HashMap();
  106. public Merchant BlocksMerchant;
  107. public Merchant ArmorMerchant;
  108. public Merchant PickaxesMerchant;
  109. public Merchant SwordsMerchant;
  110. public Merchant BowsMerchant;
  111. public Merchant ConsumablesMerchant;
  112. public Merchant ChestsMerchant;
  113. public Merchant PotionsMerchant;
  114. public Merchant SpecialsMerchant;
  115.  
  116. public void onEnable()
  117. {
  118. m = this;
  119. MinigamesAPI.getAPI();this.api = MinigamesAPI.setupAPI(this, "bedwars", IArena.class, new ArenasConfig(this), new MessagesConfig(this), new IClassesConfig(this), new StatsConfig(this, false), new DefaultConfig(this, false), true);
  120. PluginInstance pinstance = (PluginInstance)MinigamesAPI.pinstances.get(this);
  121. pinstance.addLoadedArenas(loadArenas(this, pinstance.getArenasConfig()));
  122. Bukkit.getPluginManager().registerEvents(this, this);
  123. pinstance.scoreboardManager = new IArenaScoreboard(this);
  124. pinstance.arenaSetup = new IArenaSetup();
  125. IArenaListener listener = new IArenaListener(this, pinstance, "bedwars");
  126. pinstance.setArenaListener(listener);
  127. MinigamesAPI.getAPI();MinigamesAPI.registerArenaListenerLater(this, listener);
  128. pinstance.setAchievementGuiEnabled(true);
  129. this.pli = pinstance;
  130.  
  131. this.gui = new GUIConfig(this);
  132. this.maingui = new MainGUI(this.pli, this);
  133. this.teamgui = new TeamSelectorGUI(this.pli, this);
  134.  
  135. boolean continue_ = false;
  136. for (Method m : this.pli.getArenaAchievements().getClass().getMethods()) {
  137. if (m.getName().equalsIgnoreCase("addDefaultAchievement")) {
  138. continue_ = true;
  139. }
  140. }
  141. if (continue_) {}
  142. this.BlocksMerchant = createMerchant("Blocks");
  143. this.ArmorMerchant = createMerchant("Armor");
  144. this.PickaxesMerchant = createMerchant("Pickaxes");
  145. this.SwordsMerchant = createMerchant("Swords");
  146. this.BowsMerchant = createMerchant("Bows");
  147. this.ConsumablesMerchant = createMerchant("Consumables");
  148. this.ChestsMerchant = createMerchant("Chests");
  149. this.PotionsMerchant = createMerchant("Potions");
  150. this.SpecialsMerchant = createMerchant("Specials");
  151.  
  152. FileConfiguration config = this.gui.getConfig();
  153.  
  154. loadTrades(config, "blocksgui.trades.", this.BlocksMerchant);
  155. loadTrades(config, "armorgui.trades.", this.ArmorMerchant);
  156. loadTrades(config, "pickaxesgui.trades.", this.PickaxesMerchant);
  157. loadTrades(config, "swordsgui.trades.", this.SwordsMerchant);
  158. loadTrades(config, "bowsgui.trades.", this.BowsMerchant);
  159. loadTrades(config, "consumablesgui.trades.", this.ConsumablesMerchant);
  160. loadTrades(config, "chestsgui.trades.", this.ChestsMerchant);
  161. loadTrades(config, "potionsgui.trades.", this.PotionsMerchant);
  162. loadTrades(config, "specialsgui.trades.", this.SpecialsMerchant);
  163.  
  164. this.pli.getMessagesConfig().getConfig().addDefault("messages.bed_destroyed", "&cTeam &4<team>&c's bed was destroyed!");
  165. this.pli.getMessagesConfig().getConfig().options().copyDefaults(true);
  166. this.pli.getMessagesConfig().saveConfig();
  167. switch (MinigamesAPI.SERVER_VERSION)
  168. {
  169. case Unknown:
  170. default:
  171. break;
  172. case V1_10:
  173. case V1_10_R1:
  174. this.reg = new Register110();
  175. break;
  176. case V1_11:
  177. case V1_11_R1:
  178. this.reg = new Register111();
  179. break;
  180. case V1_7:
  181. case V1_7_R1:
  182. this.reg = new Register172();
  183. break;
  184. case V1_7_R2:
  185. this.reg = new Register175();
  186. break;
  187. case V1_7_R3:
  188. this.reg = new Register178();
  189. break;
  190. case V1_7_R4:
  191. this.reg = new Register1710();
  192. break;
  193. case V1_8:
  194. case V1_8_R1:
  195. this.reg = new Register18();
  196. break;
  197. case V1_8_R2:
  198. this.reg = new Register185();
  199. break;
  200. case V1_8_R3:
  201. this.reg = new Register188();
  202. break;
  203. case V1_9:
  204. case V1_9_R1:
  205. this.reg = new Register19();
  206. break;
  207. case V1_9_R2:
  208. this.reg = new Register194();
  209. }
  210. this.reg.registerEntities();
  211. }
  212.  
  213. private Merchant createMerchant(String string)
  214. {
  215. switch (MinigamesAPI.SERVER_VERSION)
  216. {
  217. case Unknown:
  218. default:
  219. break;
  220. case V1_11:
  221. case V1_11_R1:
  222. return new Merchant111(string);
  223. case V1_10:
  224. case V1_10_R1:
  225. return new Merchant110(string);
  226. case V1_7:
  227. case V1_7_R1:
  228. return new Merchant172(string);
  229. case V1_7_R2:
  230. return new Merchant175(string);
  231. case V1_7_R3:
  232. return new Merchant178(string);
  233. case V1_7_R4:
  234. return new Merchant1710(string);
  235. case V1_8:
  236. case V1_8_R1:
  237. return new Merchant18(string);
  238. case V1_8_R2:
  239. return new Merchant185(string);
  240. case V1_8_R3:
  241. return new Merchant188(string);
  242. case V1_9:
  243. case V1_9_R1:
  244. return new Merchant19(string);
  245. case V1_9_R2:
  246. return new Merchant194(string);
  247. }
  248. return null;
  249. }
  250.  
  251. public void loadTrades(FileConfiguration config, String path, Merchant m)
  252. {
  253. if (config.isSet(path)) {
  254. for (String aclass : config.getConfigurationSection(path).getKeys(false))
  255. {
  256. ArrayList<ItemStack> items = Util.parseItems(config.getString(path + aclass + ".items"));
  257. if (items.size() > 2) {
  258. m.addOffer((ItemStack)items.get(1), (ItemStack)items.get(2), (ItemStack)items.get(0));
  259. } else {
  260. m.addOffer((ItemStack)items.get(1), (ItemStack)items.get(0));
  261. }
  262. }
  263. }
  264. }
  265.  
  266. public static ArrayList<Arena> loadArenas(JavaPlugin plugin, ArenasConfig cf)
  267. {
  268. ArrayList<Arena> ret = new ArrayList();
  269. FileConfiguration config = cf.getConfig();
  270. if (!config.isSet("arenas")) {
  271. return ret;
  272. }
  273. for (String arena : config.getConfigurationSection("arenas.").getKeys(false)) {
  274. if (Validator.isArenaValid(plugin, arena, cf.getConfig())) {
  275. ret.add(initArena(arena));
  276. }
  277. }
  278. return ret;
  279. }
  280.  
  281. public static IArena initArena(String arena)
  282. {
  283. IArena a = new IArena(m, arena);
  284. MinigamesAPI.getAPI();ArenaSetup s = ((PluginInstance)MinigamesAPI.pinstances.get(m)).arenaSetup;
  285. a.init(Util.getSignLocationFromArena(m, arena), Util.getAllSpawns(m, arena), Util.getMainLobby(m), Util.getComponentForArena(m, arena, "lobby"), s.getPlayerCount(m, arena, true), s.getPlayerCount(m, arena, false), s.getArenaVIP(m, arena));
  286. return a;
  287. }
  288.  
  289. public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args)
  290. {
  291. boolean ret = this.cmdhandler.handleArgs(this, MinigamesAPI.getAPI().getPermissionGamePrefix("bedwars"), "/" + cmd.getName(), sender, args);
  292. if ((args.length > 0) &&
  293. (args[0].equalsIgnoreCase("setupbeds")) &&
  294. (args.length > 1)) {
  295. if ((sender instanceof Player))
  296. {
  297. Player p = (Player)sender;
  298.  
  299. p.getInventory().addItem(new ItemStack[] { getSetupBed(args[1], "red") });
  300. p.getInventory().addItem(new ItemStack[] { getSetupBed(args[1], "blue") });
  301. p.getInventory().addItem(new ItemStack[] { getSetupBed(args[1], "green") });
  302. p.getInventory().addItem(new ItemStack[] { getSetupBed(args[1], "yellow") });
  303.  
  304. p.updateInventory();
  305. }
  306. else
  307. {
  308. sender.sendMessage(ChatColor.DARK_GRAY + "[" + ChatColor.RED + "-" + ChatColor.DARK_GRAY + "]" + ChatColor.GRAY + " Usage: " + cmd.getName() + " setupbeds <arena> <team>");
  309. }
  310. }
  311. return ret;
  312. }
  313.  
  314. public ItemStack getSetupBed(String arena, String team)
  315. {
  316. ItemStack item = new ItemStack(Material.BED);
  317. ItemMeta itemmeta = item.getItemMeta();
  318. itemmeta.setDisplayName("bwbeds:" + team + "#" + arena);
  319. item.setItemMeta(itemmeta);
  320. return item;
  321. }
  322.  
  323. @EventHandler
  324. public void onPlace(BlockPlaceEvent event)
  325. {
  326. if (event.getBlock().getType() == Material.BED_BLOCK)
  327. {
  328. if ((event.getItemInHand().hasItemMeta()) &&
  329. (event.getItemInHand().getItemMeta().hasDisplayName()))
  330. {
  331. String displayname = event.getItemInHand().getItemMeta().getDisplayName();
  332. if (displayname.startsWith("bwbeds:"))
  333. {
  334. int a = displayname.indexOf("#");
  335. String arena = displayname.substring(a + 1);
  336. String team = displayname.substring(displayname.indexOf(":") + 1, a);
  337. getLogger().fine("#" + arena + " " + team);
  338. Util.saveComponentForArena(this, arena, team + "_bed.loc1", event.getBlock().getLocation());
  339. Location l = event.getBlock().getLocation();
  340. for (int i = -3; i < 3; i++) {
  341. for (int j = -3; j < 3; j++)
  342. {
  343. Location l_ = l.clone().add(i, 0.0D, j);
  344. if ((l.getBlockX() != l_.getBlockX()) || (l.getBlockY() != l_.getBlockY()) || (l.getBlockZ() != l_.getBlockZ())) {
  345. if (l_.getBlock().getType() == Material.BED_BLOCK) {
  346. Util.saveComponentForArena(this, arena, team + "_bed.loc2", l_);
  347. }
  348. }
  349. }
  350. }
  351. }
  352. }
  353. }
  354. else if (event.getBlock().getType() == Material.WOOL)
  355. {
  356. if (this.pli.global_players.containsKey(event.getPlayer().getName())) {
  357. event.setCancelled(true);
  358. }
  359. }
  360. else if (this.pli.global_players.containsKey(event.getPlayer().getName()))
  361. {
  362. Arena a = (Arena)this.pli.global_players.get(event.getPlayer().getName());
  363. if (a.getArenaState() == ArenaState.INGAME) {
  364. a.getSmartReset().addChanged(event.getBlock(), event.getBlockReplacedState());
  365. }
  366. }
  367. }
  368.  
  369. @EventHandler
  370. public void onInteract(PlayerBedEnterEvent event)
  371. {
  372. if (this.pli.global_players.containsKey(event.getPlayer().getName())) {
  373. event.setCancelled(true);
  374. }
  375. }
  376.  
  377. @EventHandler
  378. public void onEntityInteract(final PlayerInteractEntityEvent event)
  379. {
  380. final Player p = event.getPlayer();
  381. if ((this.pli.global_players.containsKey(p.getName())) &&
  382. (event.getRightClicked().getType() == EntityType.VILLAGER))
  383. {
  384. Bukkit.getScheduler().runTaskLater(this, new Runnable()
  385. {
  386. public void run()
  387. {
  388. Main.this.maingui.openGUI((Villager)event.getRightClicked(), p.getName());
  389. }
  390. }, 1L);
  391.  
  392. event.setCancelled(true);
  393. }
  394. }
  395.  
  396. @EventHandler
  397. public void onInventoryClick(InventoryClickEvent event)
  398. {
  399. Player p = (Player)event.getWhoClicked();
  400. if ((this.pli.global_players.containsKey(p.getName())) &&
  401. (event.getInventory().getName().equalsIgnoreCase("container.crafting")) &&
  402. (event.getSlotType() == InventoryType.SlotType.RESULT)) {
  403. event.setCancelled(true);
  404. }
  405. }
  406.  
  407. @EventHandler
  408. public void onInteract(final PlayerInteractEvent event)
  409. {
  410. if ((event.hasItem()) &&
  411. (this.pli.global_players.containsKey(event.getPlayer().getName())))
  412. {
  413. Arena a = (Arena)this.pli.global_players.get(event.getPlayer().getName());
  414. if (event.getItem().getType() == Material.WOOL)
  415. {
  416. if ((a.getArenaState() != ArenaState.INGAME) && (!a.isArcadeMain()) && (!a.getIngameCountdownStarted())) {
  417. this.teamgui.openGUI(event.getPlayer().getName());
  418. }
  419. }
  420. else if ((event.getItem().getType() == Material.MONSTER_EGG) &&
  421. (event.hasBlock()))
  422. {
  423. if (pteam.containsKey(event.getPlayer().getName()))
  424. {
  425. String team = (String)pteam.get(event.getPlayer().getName());
  426. Location l = event.getPlayer().getLocation();
  427. Player target = null;
  428. int temp_dist = 0;
  429. for (String p_ : a.getAllPlayers()) {
  430. if (Validator.isPlayerOnline(p_))
  431. {
  432. Player p = Bukkit.getPlayer(p_);
  433. if ((pteam.containsKey(p.getName())) && (this.pli.global_players.containsKey(p.getName())) &&
  434. (!((String)pteam.get(p.getName())).equalsIgnoreCase(team)))
  435. {
  436. int dist = (int)p.getLocation().distance(l);
  437. if (dist < temp_dist) {
  438. break;
  439. }
  440. temp_dist = dist;
  441. target = p; break;
  442. }
  443. }
  444. }
  445. if (target != null)
  446. {
  447. getLogger().fine("# Spawned sheeep for target " + target.getName());
  448. final Sheeep s = this.reg.spawnSheep(this, event.getClickedBlock().getLocation().add(0.0D, 1.0D, 0.0D), target, colorCodeFromTeam(team));
  449. final ItemStack item = event.getPlayer().getItemInHand();
  450. l.getBlock().getChunk().load();
  451. Bukkit.getScheduler().runTaskLater(this, new Runnable()
  452. {
  453. public void run()
  454. {
  455. event.getPlayer().getInventory().remove(item);
  456. event.getPlayer().updateInventory();
  457. }
  458. }, 5L);
  459.  
  460. Bukkit.getScheduler().runTaskLater(this, new Runnable()
  461. {
  462. public void run()
  463. {
  464. Location l = s.getLocation();
  465. l.getWorld().createExplosion(l.getX(), l.getY(), l.getZ(), 2.5F, true, false);
  466. }
  467. }, 140L);
  468. }
  469. }
  470. event.setCancelled(true);
  471. }
  472. }
  473. }
  474.  
  475. @EventHandler(priority=EventPriority.HIGHEST)
  476. public void onMove(PlayerMoveEvent event)
  477. {
  478. Player p = event.getPlayer();
  479. if (this.pli.global_players.containsKey(p.getName()))
  480. {
  481. IArena a = (IArena)this.pli.global_players.get(p.getName());
  482. if ((a.getArenaState() == ArenaState.INGAME) &&
  483. (p.getLocation().getY() < 0.0D)) {
  484. if (pteam.containsKey(p.getName()))
  485. {
  486. String team = (String)pteam.get(p.getName());
  487. String playername = p.getName();
  488. Util.clearInv(p);
  489. if (team.equalsIgnoreCase("red"))
  490. {
  491. if (a.red_bed)
  492. {
  493. a.onEliminated(playername);
  494. Util.teleportPlayerFixed(p, Util.getComponentForArena(m, a.getName(), "spawns.spawn" + (String)pteam.get(playername)));
  495. }
  496. else
  497. {
  498. a.spectate(p.getName(), true);
  499. }
  500. }
  501. else if (team.equalsIgnoreCase("blue"))
  502. {
  503. if (a.blue_bed)
  504. {
  505. a.onEliminated(playername);
  506. Util.teleportPlayerFixed(p, Util.getComponentForArena(m, a.getName(), "spawns.spawn" + (String)pteam.get(playername)));
  507. }
  508. else
  509. {
  510. a.spectate(p.getName(), true);
  511. }
  512. }
  513. else if (team.equalsIgnoreCase("green"))
  514. {
  515. if (a.green_bed)
  516. {
  517. a.onEliminated(playername);
  518. Util.teleportPlayerFixed(p, Util.getComponentForArena(m, a.getName(), "spawns.spawn" + (String)pteam.get(playername)));
  519. }
  520. else
  521. {
  522. a.spectate(p.getName(), true);
  523. }
  524. }
  525. else if (team.equalsIgnoreCase("yellow")) {
  526. if (a.yellow_bed)
  527. {
  528. a.onEliminated(playername);
  529. Util.teleportPlayerFixed(p, Util.getComponentForArena(m, a.getName(), "spawns.spawn" + (String)pteam.get(playername)));
  530. }
  531. else
  532. {
  533. a.spectate(p.getName(), true);
  534. }
  535. }
  536. this.scoreboard.updateScoreboard(a);
  537. }
  538. }
  539. }
  540. }
  541.  
  542. @EventHandler(priority=EventPriority.HIGHEST)
  543. public void onPlayerDeath(PlayerDeathEvent event)
  544. {
  545. Player p = event.getEntity();
  546. if (this.pli.global_players.containsKey(p.getName()))
  547. {
  548. IArena a = (IArena)this.pli.global_players.get(p.getName());
  549. if (a.getArenaState() == ArenaState.INGAME)
  550. {
  551. event.setDeathMessage(null);
  552. p.setHealth(20.0D);
  553. event.getDrops().clear();
  554. if (pteam.containsKey(p.getName()))
  555. {
  556. String team = (String)pteam.get(p.getName());
  557. String playername = p.getName();
  558. if (team.equalsIgnoreCase("red"))
  559. {
  560. if (a.red_bed)
  561. {
  562. a.onEliminated(playername);
  563. Util.teleportPlayerFixed(p, Util.getComponentForArena(m, a.getName(), "spawns.spawn" + (String)pteam.get(playername)));
  564. }
  565. else
  566. {
  567. a.spectate(p.getName(), true);
  568. a.red -= 1;
  569. }
  570. }
  571. else if (team.equalsIgnoreCase("blue"))
  572. {
  573. if (a.blue_bed)
  574. {
  575. a.onEliminated(playername);
  576. Util.teleportPlayerFixed(p, Util.getComponentForArena(m, a.getName(), "spawns.spawn" + (String)pteam.get(playername)));
  577. }
  578. else
  579. {
  580. a.spectate(p.getName(), true);
  581. a.blue -= 1;
  582. }
  583. }
  584. else if (team.equalsIgnoreCase("green"))
  585. {
  586. if (a.green_bed)
  587. {
  588. a.onEliminated(playername);
  589. Util.teleportPlayerFixed(p, Util.getComponentForArena(m, a.getName(), "spawns.spawn" + (String)pteam.get(playername)));
  590. }
  591. else
  592. {
  593. a.spectate(p.getName(), true);
  594. a.green -= 1;
  595. }
  596. }
  597. else if (team.equalsIgnoreCase("yellow")) {
  598. if (a.yellow_bed)
  599. {
  600. a.onEliminated(playername);
  601. Util.teleportPlayerFixed(p, Util.getComponentForArena(m, a.getName(), "spawns.spawn" + (String)pteam.get(playername)));
  602. }
  603. else
  604. {
  605. a.spectate(p.getName(), true);
  606. a.yellow -= 1;
  607. }
  608. }
  609. teamCheck(a);
  610. }
  611. }
  612. }
  613. }
  614.  
  615. public void teamCheck(IArena a)
  616. {
  617. if ((a.blue < 1) && (a.red < 1) && (a.yellow < 1) && (a.green > 0)) {
  618. a.stop();
  619. }
  620. if ((a.blue < 1) && (a.red < 1) && (a.yellow > 0) && (a.green < 1)) {
  621. a.stop();
  622. }
  623. if ((a.blue < 1) && (a.red > 0) && (a.yellow < 1) && (a.green < 1)) {
  624. a.stop();
  625. }
  626. if ((a.blue > 0) && (a.red < 1) && (a.yellow < 1) && (a.green < 1)) {
  627. a.stop();
  628. }
  629. }
  630.  
  631. @EventHandler
  632. public void onEntityDamageByEntity(EntityDamageByEntityEvent event)
  633. {
  634. if ((event.getEntity() instanceof Player))
  635. {
  636. Player p = (Player)event.getEntity();
  637. if (this.pli.global_players.containsKey(p.getName()))
  638. {
  639. IArena a = (IArena)this.pli.global_players.get(p.getName());
  640. if (a.getArenaState() == ArenaState.INGAME) {
  641. if ((event.getDamager() instanceof Player))
  642. {
  643. Player p2 = (Player)event.getDamager();
  644. if (((String)pteam.get(p.getName())).equalsIgnoreCase((String)pteam.get(p2.getName()))) {
  645. event.setCancelled(true);
  646. }
  647. }
  648. else if ((event.getDamager() instanceof Arrow))
  649. {
  650. Arrow ar = (Arrow)event.getDamager();
  651. if ((ar.getShooter() instanceof Player))
  652. {
  653. Player p2 = (Player)ar.getShooter();
  654. if (((String)pteam.get(p.getName())).equalsIgnoreCase((String)pteam.get(p2.getName()))) {
  655. event.setCancelled(true);
  656. }
  657. }
  658. }
  659. }
  660. }
  661. }
  662. else if ((event.getDamager() instanceof Player))
  663. {
  664. Player p = (Player)event.getDamager();
  665. if (this.pli.global_players.containsKey(p.getName())) {
  666. event.setCancelled(true);
  667. }
  668. }
  669. else if ((event.getDamager() instanceof Arrow))
  670. {
  671. Arrow ar = (Arrow)event.getDamager();
  672. if ((ar.getShooter() instanceof Player))
  673. {
  674. Player p = (Player)ar.getShooter();
  675. if (this.pli.global_players.containsKey(p.getName())) {
  676. event.setCancelled(true);
  677. }
  678. }
  679. }
  680. }
  681.  
  682. @EventHandler
  683. public void onItemSpawn(ItemSpawnEvent event)
  684. {
  685. for (Arena a : this.pli.getArenas()) {
  686. if ((Validator.isArenaValid(this, a)) && (a.getArenaType() == ArenaType.REGENERATION))
  687. {
  688. Cuboid c = a.getBoundaries();
  689. if ((c != null) && (a.getArenaState() == ArenaState.INGAME) &&
  690. (c.containsLocWithoutY(event.getEntity().getLocation())) &&
  691. (event.getEntity().getItemStack().getType() == Material.BED)) {
  692. event.setCancelled(true);
  693. }
  694. }
  695. }
  696. }
  697.  
  698. @EventHandler
  699. public void onBreak(BlockBreakEvent event)
  700. {
  701. Player p = event.getPlayer();
  702. if (this.pli.global_players.containsKey(p.getName()))
  703. {
  704. IArena a = (IArena)this.pli.global_players.get(p.getName());
  705. if (a.getArenaState() == ArenaState.INGAME)
  706. {
  707. if (event.getBlock().getType() == Material.BED_BLOCK)
  708. {
  709. String team = getTeambyBedLocation(a.getName(), event.getBlock().getLocation());
  710. if (team == "-")
  711. {
  712. event.setCancelled(true);
  713. return;
  714. }
  715. if (((String)pteam.get(p.getName())).equalsIgnoreCase(team))
  716. {
  717. event.setCancelled(true);
  718. return;
  719. }
  720. if (team.equalsIgnoreCase("red")) {
  721. a.red_bed = false;
  722. } else if (team.equalsIgnoreCase("green")) {
  723. a.green_bed = false;
  724. } else if (team.equalsIgnoreCase("blue")) {
  725. a.blue_bed = false;
  726. } else if (team.equalsIgnoreCase("yellow")) {
  727. a.yellow_bed = false;
  728. } else {
  729. return;
  730. }
  731. a.getSmartReset().addChanged(event.getBlock(), event.getBlock().getType().equals(Material.CHEST));
  732. a.getSmartReset().addChanged(event.getBlock().getLocation().clone().add(1.0D, 0.0D, 0.0D).getBlock(), event.getBlock().getLocation().clone().add(1.0D, 0.0D, 1.0D).getBlock().getType().equals(Material.CHEST));
  733. a.getSmartReset().addChanged(event.getBlock().getLocation().clone().add(-1.0D, 0.0D, 0.0D).getBlock(), event.getBlock().getLocation().clone().add(1.0D, 0.0D, -1.0D).getBlock().getType().equals(Material.CHEST));
  734. a.getSmartReset().addChanged(event.getBlock().getLocation().clone().add(0.0D, 0.0D, 1.0D).getBlock(), event.getBlock().getLocation().clone().add(-1.0D, 0.0D, 1.0D).getBlock().getType().equals(Material.CHEST));
  735. a.getSmartReset().addChanged(event.getBlock().getLocation().clone().add(0.0D, 0.0D, -1.0D).getBlock(), event.getBlock().getLocation().clone().add(-1.0D, 0.0D, -1.0D).getBlock().getType().equals(Material.CHEST));
  736. event.getBlock().setType(Material.AIR);
  737. for (String p_ : a.getAllPlayers()) {
  738. if (Validator.isPlayerOnline(p_)) {
  739. Bukkit.getPlayer(p_).sendMessage(ChatColor.translateAlternateColorCodes('&', this.pli.getMessagesConfig().getConfig().getString("messages.bed_destroyed").replaceAll("<team>", Character.toUpperCase(team.charAt(0)) + team.substring(1))));
  740. }
  741. }
  742. return;
  743. }
  744. if ((event.getBlock().getType() != Material.IRON_BLOCK) && (event.getBlock().getType() != Material.ENDER_CHEST) && (event.getBlock().getType() != Material.TNT) && (event.getBlock().getType() != Material.SANDSTONE) && (event.getBlock().getType() != Material.GLOWSTONE) && (event.getBlock().getType() != Material.ENDER_STONE) && (event.getBlock().getType() != Material.GLASS) && (event.getBlock().getType() != Material.LADDER) && (event.getBlock().getType() != Material.CHEST)) {
  745. event.setCancelled(true);
  746. }
  747. }
  748. }
  749. }
  750.  
  751. public String getTeambyBedLocation(String arena, Location l)
  752. {
  753. String ret = "-";
  754. HashMap<String, Location> temp = new HashMap();
  755. temp.put("yellow_1", Util.getComponentForArena(this, arena, "yellow_bed.loc1"));
  756. temp.put("yellow_2", Util.getComponentForArena(this, arena, "yellow_bed.loc2"));
  757. temp.put("red_1", Util.getComponentForArena(this, arena, "red_bed.loc1"));
  758. temp.put("red_2", Util.getComponentForArena(this, arena, "red_bed.loc2"));
  759. temp.put("blue_1", Util.getComponentForArena(this, arena, "blue_bed.loc1"));
  760. temp.put("blue_2", Util.getComponentForArena(this, arena, "blue_bed.loc2"));
  761. temp.put("green_1", Util.getComponentForArena(this, arena, "green_bed.loc1"));
  762. temp.put("green_2", Util.getComponentForArena(this, arena, "green_bed.loc2"));
  763. for (String team : temp.keySet()) {
  764. if (temp.get(team) != null)
  765. {
  766. Location l_ = (Location)temp.get(team);
  767. if ((l.getBlockX() == l_.getBlockX()) && (l.getBlockY() == l_.getBlockY()) && (l.getBlockZ() == l_.getBlockZ())) {
  768. return team.substring(0, team.indexOf("_"));
  769. }
  770. }
  771. }
  772. return ret;
  773. }
  774.  
  775. @EventHandler(priority=EventPriority.HIGHEST)
  776. public void onChat(AsyncPlayerChatEvent event)
  777. {
  778. Player p = event.getPlayer();
  779. if (this.pli.global_players.containsKey(p.getName()))
  780. {
  781. if (!pteam.containsKey(p.getName())) {
  782. return;
  783. }
  784. if (event.getMessage().startsWith("@")) {
  785. return;
  786. }
  787. if (event.getMessage().startsWith("all"))
  788. {
  789. event.setMessage(event.getMessage().replace("all", ""));
  790. return;
  791. }
  792. String team = (String)pteam.get(p.getName());
  793. String msg = String.format(ChatColor.GRAY + "[" + ChatColor.valueOf(team.toUpperCase()) + team + ChatColor.GRAY + "] " + event.getFormat(), new Object[] { p.getName(), event.getMessage() });
  794. for (Player receiver : event.getRecipients()) {
  795. if ((this.pli.global_players.containsKey(receiver.getName())) &&
  796. (this.pli.global_players.get(receiver.getName()) == this.pli.global_players.get(p.getName())) &&
  797. (pteam.containsKey(receiver.getName())) &&
  798. (((String)pteam.get(receiver.getName())).equalsIgnoreCase(team))) {
  799. receiver.sendMessage(msg);
  800. }
  801. }
  802. event.setCancelled(true);
  803. }
  804. }
  805.  
  806. @EventHandler
  807. public void onTeleport(PlayerTeleportEvent event)
  808. {
  809. final Player p = event.getPlayer();
  810. if (this.pli.global_players.containsKey(p.getName()))
  811. {
  812. for (Entity e : p.getLocation().getChunk().getEntities()) {
  813. if (e.getType() == EntityType.VILLAGER)
  814. {
  815. Villager v = (Villager)e;
  816. v.setVelocity(new Vector(0.0F, 0.1F, 0.0F));
  817. }
  818. }
  819. Bukkit.getScheduler().runTaskLater(this, new Runnable()
  820. {
  821. public void run()
  822. {
  823. p.getLocation().getChunk().unload(true, false);
  824. p.getLocation().getChunk().load();
  825. }
  826. }, 10L);
  827. }
  828. }
  829.  
  830. public int colorCodeFromTeam(String team)
  831. {
  832. int ret = 0;
  833. if (team.equalsIgnoreCase("red")) {
  834. ret = 14;
  835. } else if (team.equalsIgnoreCase("blue")) {
  836. ret = 11;
  837. } else if (team.equalsIgnoreCase("yellow")) {
  838. ret = 4;
  839. } else if (team.equalsIgnoreCase("green")) {
  840. ret = 13;
  841. }
  842. return ret;
  843. }
  844. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement