Advertisement
Guest User

Nearby Error #1 - 26.05.2020

a guest
May 26th, 2020
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 25.87 KB | None | 0 0
  1. package razec.spawners;
  2.  
  3. import com.google.common.collect.Lists;
  4. import com.google.common.collect.Maps;
  5. import me.kasta.mobspawner.commands.Spawners;
  6. import me.kasta.mobspawner.utils.Util;
  7. import org.bukkit.Bukkit;
  8. import org.bukkit.Chunk;
  9. import org.bukkit.Location;
  10. import org.bukkit.Material;
  11. import org.bukkit.World;
  12. import org.bukkit.block.BlockState;
  13. import org.bukkit.entity.ArmorStand;
  14. import org.bukkit.entity.Entity;
  15. import org.bukkit.entity.EntityType;
  16. import org.bukkit.entity.Item;
  17. import org.bukkit.entity.LivingEntity;
  18. import org.bukkit.entity.Player;
  19. import org.bukkit.event.EventHandler;
  20. import org.bukkit.event.EventPriority;
  21. import org.bukkit.event.entity.ItemSpawnEvent;
  22. import org.bukkit.event.entity.SpawnerSpawnEvent;
  23. import org.bukkit.event.player.PlayerCommandPreprocessEvent;
  24. import org.bukkit.event.world.ChunkLoadEvent;
  25. import org.bukkit.event.world.ChunkUnloadEvent;
  26. import org.bukkit.scheduler.BukkitRunnable;
  27.  
  28. import razec.spawners.Spawner;
  29. import razec.spawners.SpawnerListener;
  30. import razec.spawners.SpawnerUtil;
  31. import razec.spawners.TranslatedEntityName;
  32. import rcore.command.RCommand;
  33. import rcore.inventory.Inv;
  34. import rcore.plugin.RPlugin;
  35. import rcore.specificutils.MapUtil;
  36. import rcore.util.Cooldown;
  37. import rcore.util.GsonManager;
  38. import rcore.util.MakeItem;
  39. import rcore.util.TXT;
  40.  
  41. import java.util.List;
  42. import java.util.Map;
  43.  
  44. public class StorySpawners extends RPlugin {
  45.  
  46. public StorySpawners() {
  47. super("StorySpawners", "Razec");
  48. }
  49.  
  50. public Map<String, List<Spawner>> cache = Maps.newHashMap();
  51. public Map<Location, Spawner> cacheByLocation = Maps.newHashMap();
  52. public Map<Chunk, List<Spawner>> cacheByChunk = Maps.newHashMap();
  53.  
  54. public List<Spawner> getCachedSpawners(String owner) {
  55. owner = owner.toLowerCase();
  56. if (!cache.containsKey(owner)) return Lists.newArrayList();
  57. return Lists.newArrayList(cache.get(owner));
  58. }
  59. public void cacheSpawner(Spawner spawner) {
  60. String owner = spawner.ownerNick.toLowerCase();
  61. List<Spawner> cached;
  62. if (cache.containsKey(owner)) cached = cache.get(owner);
  63. else cached = Lists.newArrayList();
  64. if (!cached.isEmpty()) {
  65. for (Spawner spawner1 : cached) {
  66. if (spawner1 != null) if (spawner1.spawnerLocation != null && spawner.spawnerLocation != null) if (spawner1.spawnerLocation == spawner.spawnerLocation) return;
  67. }
  68. }
  69. cached.add(spawner);
  70. cache.put(owner, cached);
  71. cacheByLocation.put(spawner.spawnerLocation, spawner);
  72. List<Spawner> curSpawners = cacheByChunk.containsKey(spawner.spawnerLocation.getChunk()) ? cacheByChunk.get(spawner.spawnerLocation.getChunk()) : Lists.newArrayList();
  73. curSpawners.add(spawner);
  74. cacheByChunk.put(spawner.spawnerLocation.getChunk(), curSpawners);
  75. }
  76. public void uncacheSpawner(Chunk chunk, Spawner spawner) {
  77. String owner = spawner.ownerNick.toLowerCase();
  78. if (!cache.containsKey(owner)) return;
  79. List<Spawner> cached = cache.get(owner);
  80. cached.remove(spawner);
  81. cacheByLocation.remove(spawner.spawnerLocation);
  82. if (cacheByChunk.containsKey(chunk)) {
  83. List<Spawner> spawners = cacheByChunk.get(chunk);
  84. spawners.remove(spawner);
  85. if (!spawners.isEmpty()) cacheByChunk.put(chunk, spawners);
  86. else cacheByChunk.remove(chunk);
  87. }
  88. if (cached.isEmpty()) cache.remove(owner);
  89. else cache.put(owner, cached);
  90. }
  91. @EventHandler(priority = EventPriority.HIGHEST)
  92. public void onChunkLoad(ChunkLoadEvent e) {
  93. BlockState[] tileEntities = e.getChunk().getTileEntities();
  94. for (BlockState tileEntity : tileEntities)
  95. if (tileEntity.getType() == Material.MOB_SPAWNER) {
  96. tryLoadSpawner(tileEntity.getLocation());
  97. }
  98. }
  99. @EventHandler(priority = EventPriority.LOWEST)
  100. public void onChunkUnload(ChunkUnloadEvent e) {
  101. if (cacheByChunk.containsKey(e.getChunk())) {
  102. Chunk chunk = e.getChunk();
  103. List<Spawner> spawners = Lists.newArrayList(cacheByChunk.get(chunk));
  104. cacheByChunk.remove(chunk);
  105. spawners.forEach(spawner -> {
  106. spawner.curDelay = spawner.delay;
  107. spawner.spawned = null;
  108. if (spawner.unloadedAt <= 0 && spawner.isEnabled) {
  109. spawner.unloadedAt = Cooldown.getCurrentTime();
  110. spawner.queueAsyncSave();
  111. }
  112. uncacheSpawner(chunk, spawner);
  113. });
  114. }
  115. }
  116. @EventHandler public void onItemSpawn(ItemSpawnEvent e) {
  117. if (e.getEntity().getItemStack().getType() == Material.EGG) e.setCancelled(true);
  118. }
  119. public void tryLoadSpawner(Location loc) {
  120. if (cacheByLocation.containsKey(loc)) return;
  121. String serializedLocation = GsonManager.serealizeLocationFull(loc).replace(".0", "");
  122. String path = "spawner." + getSerializedChunkLocation(loc.getChunk()) + "." + serializedLocation + ".";
  123. if (loc.getBlock().getType() != Material.MOB_SPAWNER) {
  124. gson.removeAll(path);
  125. return;
  126. }
  127. try {
  128. List<String> allowedToInteract = gson.getStringList(path + "allowedToInteract");
  129. String ownerNick = gson.getOr(path + "ownerNick", "AnonyDEV");
  130. double amount = gson.getDoubleOr(path + "amount", 1d);
  131. int delay = gson.getIntOr(path + "delay", 30);
  132. String typeName = gson.getOr(path + "type", "CHICKEN");
  133. if (typeName.equals("null")) typeName = "CHICKEN";
  134. EntityType type = EntityType.valueOf(typeName);
  135. boolean enabled = gson.getBooleanOr(path + "enabled", false);
  136. long unloadedAt = gson.contains(path + "unloadedAt") ? gson.get(path + "unloadedAt").asLong() : 0;
  137. int unloadedStackPercentage = gson.getIntOr(path + "unloadedStackPercentage", 5);
  138.  
  139. Spawner spawner = new Spawner(allowedToInteract, ownerNick, loc, amount, delay, type, enabled, unloadedAt, unloadedStackPercentage);
  140. spawner.serializedChunkLocation = getSerializedChunkLocation(loc.getChunk());
  141. spawner.serializedSpawnerLocation = serializedLocation;
  142. } catch (Exception ex) {
  143. ex.printStackTrace();
  144. }
  145. }
  146.  
  147. public Inv spawnerTop;
  148.  
  149. public void updateSpawnerTop() {
  150. if (spawnerTop == null) spawnerTop = new Inv(4 * 9, "TOP Geradores");
  151. else spawnerTop.clearInventory();
  152. try {
  153. Map<String, Double> onlySpawnersAmount = Maps.newHashMap();
  154. Map<String, Map<EntityType, Double>> spawners = Maps.newHashMap();
  155. for (String serializedChunkLocation : gson.getSection("spawner")) {
  156. for (String serializedLocation : gson.getSection("spawner." + serializedChunkLocation)) {
  157. try {
  158. String path = "spawner." + serializedChunkLocation + "." + serializedLocation + ".";
  159. String ownerNick = gson.getOr(path + "ownerNick", "AnonyDEV");
  160. String typeName = gson.getOr(path+"type", "CHICKEN");
  161. if (typeName.equals("null")) typeName = "CHICKEN";
  162. EntityType type = EntityType.valueOf(typeName);
  163. double amount = gson.getDoubleOr(path + "amount", 1d);
  164. Map<EntityType, Double> curMap = spawners.containsKey(ownerNick) ? spawners.get(ownerNick) : Maps.newHashMap();
  165. double curAmount = curMap.containsKey(type) ? curMap.get(type) : 0;
  166. curAmount += amount;
  167. onlySpawnersAmount.put(ownerNick,
  168. onlySpawnersAmount.containsKey(ownerNick) ? onlySpawnersAmount.get(ownerNick) + curAmount : curAmount
  169. );
  170. curMap.put(type, curAmount);
  171. spawners.put(ownerNick, curMap);
  172. } catch (Exception e) {
  173. e.printStackTrace();
  174. }
  175. }
  176. }
  177. onlySpawnersAmount = MapUtil.orderByValueDouble(onlySpawnersAmount);
  178. int curIndex = 0;
  179. int maxIndex = Math.min(spawners.size() - 1, 10);
  180. List<Integer> middle = Lists.newArrayList();
  181. for (int i : spawnerTop.getMiddle()) middle.add(i);
  182. middle.remove(new Integer(10));
  183. middle.remove(new Integer(11));
  184. middle.remove(new Integer(15));
  185. middle.remove(new Integer(16));
  186. while (curIndex < maxIndex) {
  187. try {
  188. int curMiddle = middle.get(0);
  189. String ownerNick = Lists.newArrayList(onlySpawnersAmount.keySet()).get(curIndex);
  190. double amount = onlySpawnersAmount.get(ownerNick);
  191. Map<EntityType, Double> spawnerAmount = spawners.get(ownerNick);
  192. double invested = 0;
  193. for (Map.Entry<EntityType, Double> entry : spawnerAmount.entrySet()) {
  194. EntityType type = entry.getKey();
  195. Double value = entry.getValue();
  196. invested += value * getPrice(type);
  197. }
  198. spawnerTop.setItem(curMiddle, new MakeItem(ownerNick).setName(
  199. "<a>"+(curIndex + 1)+"º <f>" + ownerNick
  200. ).addLoreList(
  201. "",
  202. " <f>Quantidade: <e>" + Util.format(amount) + " ",
  203. " <f>Investimento: <2>$<a>" + Util.format(invested)+" ",
  204. ""
  205. ).build());
  206.  
  207. middle.remove(new Integer(curMiddle));
  208. } catch (Exception e) { }
  209. curIndex++;
  210. }
  211.  
  212. if (spawnerTop.getInventory().getContents().length <= 0 && onlySpawnersAmount.size() > 0) updateSpawnerTop();
  213. } catch (Exception e) { }
  214.  
  215. }
  216.  
  217. private double getPrice(EntityType type) {
  218. double amount = Spawners.getPriceItem(type);
  219. return amount <= 0.0d ? 1 : amount;
  220. }
  221. @EventHandler(priority = EventPriority.LOWEST) public void onPreCommand(PlayerCommandPreprocessEvent e) {
  222. String cmd = e.getMessage().toLowerCase();
  223. if (cmd.startsWith("/spawners top") || cmd.startsWith("/spawner top")) {
  224. e.setCancelled(true);
  225. if (spawnerTop == null) {
  226. e.getPlayer().sendMessage(TXT.parse("<c>TOP Geradores está atualizando..."));
  227. return;
  228. }
  229. spawnerTop.open(e.getPlayer());
  230. }
  231. }
  232. public void avisarItemsEntitys() {
  233. new BukkitRunnable() {
  234. public void run() {
  235. for (World world : Bukkit.getWorlds()){
  236. for (Entity entity : world.getEntities()){
  237. if (entity instanceof LivingEntity || entity instanceof Item){
  238. if (!(entity instanceof ArmorStand) && !(entity instanceof Player)){
  239. entity.remove();
  240. }
  241. }
  242. }
  243. }
  244. Bukkit.broadcastMessage("");
  245. Bukkit.broadcastMessage("§6§lLIXEIRO §7Removendo todos os §6mobs §7e §6itens§7.");
  246. Bukkit.broadcastMessage("");
  247. }
  248. }.runTaskLater(this, 400L);
  249. }
  250. public static StorySpawners instance; @Override public void onPreStart() { instance = this; }
  251. public GsonManager gson;
  252. public List<Spawner> queueAsyncSave = Lists.newArrayList();
  253. public List<Spawner> queueAsyncDelete = Lists.newArrayList();
  254. public Map<String, Double> entityTypeDropValue;
  255. public interface Run { void run(); }
  256. public void runAsynchronously(Run run) { this.runAsynchronously.add(run); }
  257. private List<Run> runAsynchronously = Lists.newArrayList();
  258. public boolean near(Location l) {
  259. for (Entity entity : l.getWorld().getNearbyEntities(l, 9, 5, 9)){
  260. if (entity instanceof Player)
  261. return true;
  262. }
  263. return false;
  264. }
  265.  
  266. @Override public void onStart() {
  267. TXT.runAsynchronously(this, 1, 1, () -> {
  268. Lists.newArrayList(runAsynchronously).forEach(Run::run);
  269. runAsynchronously.clear();
  270. });
  271. TXT.runAsynchronously(this, 20, 4800, () -> {
  272. Bukkit.broadcastMessage("");
  273. Bukkit.broadcastMessage("§6§lLIXEIRO §7Removendo todos os §6mobs §7e §6itens§7.");
  274. Bukkit.broadcastMessage("§6§lLIXEIRO §7Tempo restante: §f20 segundos§7.");
  275. Bukkit.broadcastMessage("");
  276. avisarItemsEntitys();
  277. });
  278. gson = new GsonManager(getDefaultPluginFolderPath(), "data").prepareGson();
  279. entityTypeDropValue = gson.getOr("entityTypeDropValue", Maps.newHashMap());
  280. setListener(new SpawnerListener());
  281. TXT.runAsynchronously(this, 20, 400, () -> {
  282. boolean saveGson = false;
  283. if (!queueAsyncSave.isEmpty()) {
  284. saveGson = true;
  285. Lists.newArrayList(queueAsyncSave).forEach(save -> {
  286. try {
  287. save.save();
  288. } catch (Exception e) {}
  289. });
  290. queueAsyncSave.clear();
  291. }
  292. if (!queueAsyncDelete.isEmpty()) {
  293. saveGson = true;
  294. Lists.newArrayList(queueAsyncDelete).forEach(delete -> {
  295. try {
  296. delete.delete();
  297. } catch (Exception e) {}
  298. });
  299. queueAsyncDelete.clear();
  300. }
  301. if (saveGson) gson.save();
  302. });
  303. TXT.runAsynchronously(this, 20, 24000, () -> {
  304. updateSpawnerTop();
  305. });
  306. TXT.runAsynchronously(this, 20, 20, () ->
  307. {
  308. for (Spawner spawner : Maps.newHashMap(cacheByLocation).values()) {
  309. try {
  310. if (spawner.isEnabled) {
  311. if (near(spawner.spawnerLocation)) {
  312. spawner.curDelay--;
  313. if (spawner.curDelay <= 0) {
  314. spawner.curDelay = spawner.delay;
  315. TXT.run(this, spawner::spawn);
  316. }
  317. spawner.updateTimeSpawnerInv();
  318. }
  319. }
  320. } catch (Exception e) {}
  321.  
  322. }
  323. });
  324. registerCommand(new RCommand() {
  325. @Override public List<Object> getHelpPages() { return null; }
  326. @Override public int getHelpPageSize() { return 0; }
  327. @Override public String getNextHelpPageCommand() { return null; }
  328. @Override public String getPreviousHelpPageCommand() { return null; }
  329. @Override public List<Object> getDescription() { return null; }
  330. @Override public List<String> getAliases() { return getList("gspi"); }
  331. @Override public String getCommand() { return "givespawnerpercentageincreaser"; }
  332. @Override public String getPermission() { return "storyspawners.command.givespawnerpercentageincreaser"; }
  333. @Override public boolean canConsolePerform() { return true; }
  334. @Override public void perform() {
  335.  
  336. if (isArgsLength(2)) {
  337.  
  338. Player toGive = getPlayer(argAt(0));
  339. if (toGive == null || !toGive.isOnline()) {
  340. warnPlayerOffline(argAt(0));
  341. return;
  342. }
  343. if (isInventoryFull(toGive)) {
  344. warnInventoryFull(toGive);
  345. return;
  346. }
  347.  
  348. if (!isValidInt(argAt(1))) {
  349. warnNotValidNumber(argAt(1));
  350. return;
  351. }
  352. int amount = getInt(argAt(1));
  353. if (amount <= 0) {
  354. sendMessage("<c>A quantidade não pode ser menor ou igual a zero.");
  355. return;
  356. }
  357. if (amount > 64) {
  358. sendMessage("<c>A quantidade não pode ser maior que sessenta e quatro.");
  359. return;
  360. }
  361.  
  362. toGive.getInventory().addItem(new MakeItem(Material.NETHER_STAR).setAmout(amount).setName(
  363. "<a>Aumentador de Porcentagem"
  364. ).addLoreList(
  365. "<7>Use para aumentar <f>5% <7>de porcentagem ",
  366. "<7>de quantos mobs podem ser stackados quando ",
  367. "<7>o gerador estiver descarregado. "
  368. ).build());
  369. toGive.updateInventory();
  370. return;
  371.  
  372. }
  373.  
  374. sendMessage("<c>Uso: <f>/gspi <jogador> <quantidade>");
  375.  
  376. }
  377. @Override public List<String> tabComplete() { return null; }
  378. });
  379. registerCommand(new RCommand() {
  380. @Override public List<Object> getHelpPages() { return null; }
  381. @Override public int getHelpPageSize() { return 0; }
  382. @Override public String getNextHelpPageCommand() { return null; }
  383. @Override public String getPreviousHelpPageCommand() { return null; }
  384. @Override public List<Object> getDescription() { return null; }
  385. @Override public List<String> getAliases() { return null; }
  386. @Override public String getCommand() { return "kille"; }
  387. @Override public String getPermission() { return "storyspawners.command.kille"; }
  388. @Override public boolean canConsolePerform() { return true; }
  389. @Override public void perform() {
  390. Bukkit.broadcastMessage("");
  391. Bukkit.broadcastMessage("§6§lLIXEIRO §7Removendo todos os §6mobs §7e §6itens§7.");
  392. Bukkit.broadcastMessage("§6§lLIXEIRO §7Tempo restante: §f20 segundos§7.");
  393. Bukkit.broadcastMessage("");
  394. avisarItemsEntitys();
  395. }
  396. @Override public List<String> tabComplete() { return null; }
  397. });
  398. registerCommand(new RCommand() {
  399. @Override public List<Object> getHelpPages() { return null; }
  400. @Override public int getHelpPageSize() { return 0; }
  401. @Override public String getNextHelpPageCommand() { return null; }
  402. @Override public String getPreviousHelpPageCommand() { return null; }
  403. @Override public List<Object> getDescription() { return null; }
  404. @Override public List<String> getAliases() { return null; }
  405. @Override public String getCommand() { return "setdropvalue"; }
  406. @Override public String getPermission() { return "storyspawners.command.setdropvalue"; }
  407. @Override public boolean canConsolePerform() { return true; }
  408. @Override public void perform() {
  409. if (isArgsLength(2)) {
  410. EntityType type = tryGetEntityType(argAt(0));
  411. if (type == null) {
  412. sendMessage("%s <c> não é um tipo válido de entidade.", argAt(0));
  413. return;
  414. }
  415. try {
  416. TranslatedEntityName.valueOf(argAt(0).toUpperCase());
  417. } catch (Exception e) {
  418. sendMessage("%s <c> não é um tipo válido de entidade.", argAt(0));
  419. return;
  420. }
  421.  
  422. if (!isValidDouble(argAt(1))) {
  423. warnNotValidNumber(argAt(1));
  424. return;
  425. }
  426. double value = getDouble(argAt(1));
  427. if (value <= 0) {
  428. sendMessage("<c>O valor não pode ser menor ou igual a zero.");
  429. return;
  430. }
  431. sendMessage("<a>Valor dos drops do tipo %s definido para %s.", TranslatedEntityName.valueOf(type).getName(), value);
  432. entityTypeDropValue.put(type.name(), value);
  433. gson.put("entityTypeDropValue", entityTypeDropValue);
  434. return;
  435. }
  436. sendMessage("<c>Uso: <f>/setdropvalue <tipo> <valor>");
  437. }
  438. @Override public List<String> tabComplete() { return null; }
  439. });
  440.  
  441. registerCommand(new RCommand() {
  442. @Override public List<Object> getHelpPages() { return null; }
  443. @Override public int getHelpPageSize() { return 0; }
  444. @Override public String getNextHelpPageCommand() { return null; }
  445. @Override public String getPreviousHelpPageCommand() { return null; }
  446. @Override public List<Object> getDescription() { return null; }
  447. @Override public List<String> getAliases() { return getList("sgive", "spawnergive", "gspawner"); }
  448. @Override public String getCommand() { return "givespawner"; }
  449. @Override public String getPermission() { return "storyspawners.command.givespawner"; }
  450. @Override public boolean canConsolePerform() { return true; }
  451. @Override public void perform() {
  452.  
  453. if (isArgsLength(6)) {
  454.  
  455. Player toGive = getPlayer(argAt(0));
  456. if (toGive == null || !toGive.isOnline()) {
  457. warnPlayerOffline(argAt(0));
  458. return;
  459. }
  460. if (isInventoryFull(toGive)) {
  461. warnInventoryFull(toGive);
  462. return;
  463. }
  464.  
  465. if (!isValidInt(argAt(1))) {
  466. warnNotValidNumber(argAt(1));
  467. return;
  468. }
  469. int amount = getInt(argAt(1));
  470. if (amount <= 0) {
  471. sendMessage("<c>A quantidade não pode ser menor ou igual a zero.");
  472. return;
  473. }
  474. if (amount > 64) {
  475. sendMessage("<c>A quantidade não pode ser maior que sessenta e quatro.");
  476. return;
  477. }
  478.  
  479. EntityType type = tryGetEntityType(argAt(2));
  480. if (type == null) {
  481. sendMessage("%s <c> não é um tipo válido de entidade.", argAt(0));
  482. return;
  483. }
  484. try {
  485. TranslatedEntityName.valueOf(argAt(2).toUpperCase());
  486. } catch (Exception e) {
  487. sendMessage("%s <c> não é um tipo válido de entidade.", argAt(0));
  488. return;
  489. }
  490.  
  491. if (!isValidDouble(argAt(3))) {
  492. warnNotValidNumber(argAt(3));
  493. return;
  494. }
  495. double stack = getDouble(argAt(3));
  496. if (stack <= 0) {
  497. sendMessage("<c>O número não pode ser menor ou igual a zero.");
  498. return;
  499. }
  500.  
  501. if (!isValidInt(argAt(4))) {
  502. warnNotValidNumber(argAt(4));
  503. return;
  504. }
  505. int delay = getInt(argAt(4));
  506. if (delay <= 0) {
  507. sendMessage("<c>O número não pode ser menor ou igual a zero.");
  508. return;
  509. }
  510.  
  511. if (!isValidInt(argAt(5))) {
  512. warnNotValidNumber(argAt(5));
  513. return;
  514. }
  515. int stackOffline = getInt(argAt(5));
  516. if (stackOffline <= 0) {
  517. sendMessage("<c>O número não pode ser menor ou igual a zero.");
  518. return;
  519. }
  520.  
  521. toGive.getInventory().addItem(SpawnerUtil.getItemStack(
  522. Lists.newArrayList(),
  523. type,
  524. "?",
  525. amount,
  526. stack,
  527. delay,
  528. stackOffline
  529. ));
  530. toGive.updateInventory();
  531. return;
  532.  
  533. }
  534. sendMessage("<c>Uso: <f>/sgive <jogador> <quantidade> <tipo> <stack> <delay> <porcentagem stack offline>");
  535. }
  536. @Override public List<String> tabComplete() { return getPlayersTabComplete(argAt(argsLength() - 1), Bukkit.getOnlinePlayers()); }
  537. });
  538.  
  539. }
  540. @Override public void onStop() { }
  541.  
  542. @EventHandler(priority = EventPriority.LOWEST) public void onSpawnerSpawn(SpawnerSpawnEvent e) { e.setCancelled(true); }
  543.  
  544. public String getSerializedChunkLocation(Chunk chunk) {
  545. return chunk.getWorld().getName()+"@"+chunk.getX()+"@"+chunk.getZ();
  546. }
  547. public String getSerializedChunkLocation(Location loc) {
  548. Chunk chunk = loc.getChunk();
  549. return chunk.getWorld().getName()+"@"+chunk.getX()+"@"+chunk.getZ();
  550. }
  551. public Chunk deserializeChunkLocation(String loc) {
  552. String[] split = loc.split("@");
  553. return Bukkit.getWorld(split[0]).getChunkAt(Integer.valueOf(split[1]), Integer.valueOf(split[2]));
  554. }
  555.  
  556. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement