Advertisement
Guest User

Untitled

a guest
Feb 21st, 2020
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 41.88 KB | None | 0 0
  1. package ru.socarp.aquaticland.bossfight.objects;
  2.  
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. import java.util.ArrayList;
  6. import java.util.HashMap;
  7. import java.util.Iterator;
  8. import java.util.LinkedHashMap;
  9. import java.util.List;
  10. import java.util.Map;
  11. import java.util.concurrent.ConcurrentHashMap;
  12.  
  13. import org.bukkit.Bukkit;
  14. import org.bukkit.ChatColor;
  15. import org.bukkit.Location;
  16. import org.bukkit.Material;
  17. import org.bukkit.attribute.Attribute;
  18. import org.bukkit.entity.Player;
  19. import org.bukkit.inventory.ItemStack;
  20. import org.bukkit.potion.PotionEffect;
  21. import org.bukkit.scheduler.BukkitRunnable;
  22.  
  23. import net.md_5.bungee.api.ChatMessageType;
  24. import net.md_5.bungee.api.chat.ClickEvent;
  25. import net.md_5.bungee.api.chat.ComponentBuilder;
  26. import net.md_5.bungee.api.chat.HoverEvent;
  27. import net.md_5.bungee.api.chat.TextComponent;
  28. import ru.socarp.aquaticland.bossfight.Main;
  29. import ru.socarp.aquaticland.bossfight.enums.BoosterType;
  30. import ru.socarp.aquaticland.bossfight.enums.MobType;
  31. import ru.socarp.aquaticland.bossfight.enums.StatType;
  32. import ru.socarp.aquaticland.bossfight.utils.LocationUtils;
  33. import ru.socarp.aquaticland.bossfight.utils.StringUtils;
  34. import ru.morka.stickmix.stickmixcore.utils.TimeUtils;
  35.  
  36. public class BFPlayer {
  37.  
  38. public static Map<String, BFPlayer> players = new ConcurrentHashMap<>();
  39. private String name;
  40. private int level;
  41. private double exp;
  42. private double resources;
  43. private int crystals;
  44. private int blocks;
  45. private int kills;
  46. private int deaths;
  47. private int bossKills;
  48. private long lastKit;
  49. private Map<StatType, Integer> stat_log;
  50. private Map<SellItem, Integer> block_log;
  51. private Map<MobType, Integer> mob_log;
  52. private Map<String, Integer> quest_log;
  53. private List<Artefact> artefacts;
  54. private boolean inTutorial;
  55. private String lastDamager;
  56. private long lastDamagerHitTime;
  57. private int teleportTask;
  58. private double donateResourcesMultiplier;
  59. private double donateExpMultiplier;
  60. private double donateCrystalsMultiplier;
  61. private int kitResources;
  62. private int delay;
  63. private int maxMarketItems;
  64. private double resourcesMultiplier;
  65. private double expMultiplier;
  66. private double crystalsMultiplier;
  67. private Map<String, Double> statistics;
  68.  
  69. public BFPlayer(String name) {
  70. this.name = name;
  71. load();
  72. }
  73.  
  74. private void load() {
  75. Bukkit.getScheduler().runTaskAsynchronously(Main.getMain(), () -> {
  76. if (playerExists()) {
  77. ResultSet resultSet = Main.getMain().getDatabaseManager().getResult("SELECT * FROM " + Main.GAME_TABLE + " WHERE name='" + name + "'");
  78. try {
  79. if (resultSet.next()) {
  80. this.level = resultSet.getInt("level");
  81. this.exp = resultSet.getDouble("exp");
  82. this.resources = resultSet.getDouble("resources");
  83. this.crystals = resultSet.getInt("crystals");
  84. this.blocks = resultSet.getInt("blocks");
  85. this.kills = resultSet.getInt("kills");
  86. this.deaths = resultSet.getInt("deaths");
  87. this.bossKills = resultSet.getInt("boss_kills");
  88. this.lastKit = resultSet.getLong("last_kit");
  89. this.stat_log = new LinkedHashMap<>();
  90. String[] statLog = resultSet.getString("stat_log").split(",");
  91. for (String stat : statLog) {
  92. String[] statData = stat.split("=");
  93. if (statData.length == 2)
  94. this.stat_log.put(StatType.valueOf(statData[0]), Integer.valueOf(statData[1]));
  95. }
  96. this.block_log = new LinkedHashMap<>();
  97. String[] blockLog = resultSet.getString("block_log").split(",");
  98. for (String block : blockLog) {
  99. String[] blockData = block.split("=");
  100. if (blockData.length == 2)
  101. if (SellItem.getSellItem(blockData[0]) != null)
  102. this.block_log.put(SellItem.getSellItem(blockData[0]), Integer.valueOf(blockData[1]));
  103. }
  104. this.mob_log = new LinkedHashMap<>();
  105. String[] mobLog = resultSet.getString("mob_log").split(",");
  106. for (String mob : mobLog) {
  107. String[] mobData = mob.split("=");
  108. if (mobData.length == 2)
  109. this.mob_log.put(MobType.valueOf(mobData[0]), Integer.valueOf(mobData[1]));
  110. }
  111. this.quest_log = new LinkedHashMap<>();
  112. String[] questLog = resultSet.getString("quest_log").split(",");
  113. for (String quest : questLog) {
  114. String[] questData = quest.split("=");
  115. if (questData.length == 2)
  116. this.quest_log.put(questData[0], Integer.valueOf(questData[1]));
  117. }
  118. this.artefacts = new ArrayList<>();
  119. String[] artefactLog = resultSet.getString("artefacts").split(",");
  120. for (String artefact : artefactLog)
  121. if (Artefact.getArtefact(artefact) != null)
  122. artefacts.add(Artefact.getArtefact(artefact));
  123. }
  124. } catch (SQLException e) {
  125. }
  126. } else {
  127. this.level = 1;
  128. this.exp = 0;
  129. this.resources = 0;
  130. this.crystals = 0;
  131. this.blocks = 0;
  132. this.kills = 0;
  133. this.deaths = 0;
  134. this.bossKills = 0;
  135. this.lastKit = 0;
  136. this.stat_log = new LinkedHashMap<>();
  137. this.block_log = new LinkedHashMap<>();
  138. this.mob_log = new LinkedHashMap<>();
  139. this.quest_log = new LinkedHashMap<>();
  140. this.artefacts = new ArrayList<>();
  141. Main.getMain().getDatabaseManager().update("INSERT INTO " + Main.GAME_TABLE + "(name, level, exp, resources, crystals, blocks, kills, deaths, boss_kills, last_kit, stat_log, block_log, mob_log, quest_log, artefacts) VALUES('" + name + "', '" + level + "', '" + exp + "', '" + resources + "', '" + crystals + "', '" + blocks + "', '" + kills + "', '" + deaths + "', '" + bossKills + "', '" + lastKit + "', '" + null + "', '" + null + "', '" + null + "', '" + null + "', '" + null + "')");
  142. }
  143. inTutorial = false;
  144. teleportTask = -1;
  145. donateResourcesMultiplier = 0;
  146. donateExpMultiplier = 0;
  147. donateCrystalsMultiplier = 0;
  148. kitResources = 0;
  149. delay = 10;
  150. maxMarketItems = 1;
  151. statistics = new HashMap<>();
  152. initDonate();
  153. });
  154. players.put(name, this);
  155. }
  156.  
  157. public boolean playerExists() {
  158. ResultSet resultSet = Main.getMain().getDatabaseManager().getResult("SELECT * FROM " + Main.GAME_TABLE + " WHERE name='" + name + "'");
  159. try {
  160. if (resultSet.next())
  161. return true;
  162. } catch (SQLException e) {
  163. }
  164. return false;
  165. }
  166.  
  167. public void save() {
  168. Bukkit.getScheduler().runTaskAsynchronously(Main.getMain(), () -> {
  169. String statLog = "";
  170.  
  171. StatType statType;
  172. for(Iterator var3 = this.stat_log.keySet().iterator(); var3.hasNext(); statLog = statLog + "," + statType + "=" + this.stat_log.get(statType)) {
  173. statType = (StatType)var3.next();
  174. }
  175.  
  176. statLog = statLog.replaceFirst(",", "");
  177. String blockLog = "";
  178.  
  179. SellItem sellItem;
  180. for(Iterator var4 = this.block_log.keySet().iterator(); var4.hasNext(); blockLog = blockLog + "," + sellItem.getId() + "=" + this.block_log.get(sellItem)) {
  181. sellItem = (SellItem)var4.next();
  182. }
  183.  
  184. blockLog = blockLog.replaceFirst(",", "");
  185. String mobLog = "";
  186.  
  187. MobType mobType;
  188. for(Iterator var5 = this.mob_log.keySet().iterator(); var5.hasNext(); mobLog = mobLog + "," + mobType + "=" + this.mob_log.get(mobType)) {
  189. mobType = (MobType)var5.next();
  190. }
  191.  
  192. mobLog = mobLog.replaceFirst(",", "");
  193. String questLog = "";
  194.  
  195. String artefactLog;
  196. for(Iterator var6 = this.quest_log.keySet().iterator(); var6.hasNext(); questLog = questLog + "," + artefactLog + "=" + this.quest_log.get(artefactLog)) {
  197. artefactLog = (String)var6.next();
  198. }
  199.  
  200. questLog = questLog.replaceFirst(",", "");
  201. artefactLog = "";
  202.  
  203. Artefact artefact;
  204. for(Iterator var7 = this.artefacts.iterator(); var7.hasNext(); artefactLog = artefactLog + "," + artefact.getId()) {
  205. artefact = (Artefact)var7.next();
  206. }
  207.  
  208. artefactLog = artefactLog.replaceFirst(",", "");
  209. Main.getMain().getDatabaseManager().update("UPDATE " + Main.GAME_TABLE + " SET level=" + this.level + ", exp=" + this.exp + ", resources=" + this.resources + ", crystals=" + this.crystals + ", blocks=" + this.blocks + ", kills=" + this.kills + ", deaths=" + this.deaths + ", boss_kills=" + this.bossKills + ", last_kit=" + this.lastKit + ", stat_log='" + statLog + "', block_log='" + blockLog + "', mob_log='" + mobLog + "', quest_log='" + questLog + "' , artefacts='" + artefactLog + "' " + " WHERE name='" + this.name + "'");
  210. });
  211. }
  212.  
  213. public void unload() {
  214. save();
  215. players.remove(name);
  216. }
  217.  
  218. public static BFPlayer getBFPlayer(String name) {
  219. return players.get(name);
  220. }
  221.  
  222. public Player getPlayer() {
  223. return Bukkit.getPlayer(name);
  224. }
  225.  
  226. public void sendMessage(String message) {
  227. if (getPlayer() == null)
  228. return;
  229. getPlayer().sendMessage("§8[§bStick§aMix§8] §f" + message);
  230. }
  231.  
  232. public void sendTitle(String title, String subtitle, int stayTime) {
  233. if (getPlayer() == null)
  234. return;
  235. getPlayer().sendTitle(title, subtitle, 20, stayTime, 20);
  236. }
  237.  
  238. public void sendActionBar(String actionBar) {
  239. if (getPlayer() == null)
  240. return;
  241. getPlayer().spigot().sendMessage(ChatMessageType.ACTION_BAR, new ComponentBuilder(actionBar).create());
  242. }
  243.  
  244. public void addAnswerVariable(String answerInfo, String commandName) {
  245. if (getPlayer() == null)
  246. return;
  247. TextComponent textComponent = new TextComponent("§8[§bStick§aMix§8] §f" + answerInfo);
  248. textComponent.setBold(true);
  249. textComponent.setHoverEvent(new HoverEvent(HoverEvent.Action.SHOW_TEXT, new ComponentBuilder("§aНажмите сюда, чтобы выбрать этот вариант").create()));
  250. if (commandName != null)
  251. textComponent.setClickEvent(new ClickEvent(ClickEvent.Action.RUN_COMMAND, commandName));
  252. getPlayer().spigot().sendMessage(textComponent);
  253. }
  254.  
  255. public void initDonate() {
  256. if (getPlayer() == null)
  257. return;
  258. if (getPlayer().hasPermission("bossfight.iron")) {
  259. donateResourcesMultiplier += 0.1;
  260. donateExpMultiplier += 0.05;
  261. donateCrystalsMultiplier += 0.025;
  262. kitResources += 5;
  263. }
  264. if (getPlayer().hasPermission("bossfight.nephrite")) {
  265. donateResourcesMultiplier += 0.2;
  266. donateExpMultiplier += 0.1;
  267. donateCrystalsMultiplier += 0.05;
  268. kitResources += 10;
  269. maxMarketItems++;
  270. }
  271. if (getPlayer().hasPermission("bossfight.gold")) {
  272. donateResourcesMultiplier += 0.3;
  273. donateExpMultiplier += 0.15;
  274. donateCrystalsMultiplier += 0.1;
  275. kitResources += 20;
  276. maxMarketItems++;
  277. }
  278. if (getPlayer().hasPermission("bossfight.ruby")) {
  279. donateResourcesMultiplier += 0.4;
  280. donateExpMultiplier += 0.2;
  281. donateCrystalsMultiplier += 0.15;
  282. kitResources += 30;
  283. maxMarketItems++;
  284. }
  285. if (getPlayer().hasPermission("bossfight.diamond")) {
  286. donateResourcesMultiplier += 0.5;
  287. donateExpMultiplier += 0.25;
  288. donateCrystalsMultiplier += 0.2;
  289. kitResources += 40;
  290. maxMarketItems++;
  291. }
  292. if (getPlayer().hasPermission("bossfight.emerald")) {
  293. donateResourcesMultiplier += 0.6;
  294. donateExpMultiplier += 0.35;
  295. donateCrystalsMultiplier += 0.25;
  296. kitResources += 50;
  297. maxMarketItems++;
  298. }
  299. if (getPlayer().hasPermission("bossfight.stick")) {
  300. donateResourcesMultiplier += 0.75;
  301. donateExpMultiplier += 0.5;
  302. donateCrystalsMultiplier += 0.35;
  303. kitResources += 70;
  304. maxMarketItems++;
  305. }
  306. if (getPlayer().hasPermission("bossfight.sponsor")) {
  307. donateResourcesMultiplier += 1.0;
  308. donateExpMultiplier += 0.7;
  309. donateCrystalsMultiplier += 0.5;
  310. kitResources += 100;
  311. maxMarketItems++;
  312. }
  313. }
  314.  
  315. public void teleport(Location location) {
  316. if (getPlayer() == null)
  317. return;
  318. if (teleportTask != -1) {
  319. sendMessage("§fПодождите, Вы уже отправили запрос на телепортацию!");
  320. return;
  321. }
  322. if (getPlayer().hasPermission("bossfight.nocooldowns")) {
  323. getPlayer().teleport(location);
  324. sendMessage("§fТелепортация успешно выполнена!");
  325. return;
  326. }
  327. sendMessage("§fВы будете телепортированы через §a" + delay + " §fсек. §fНе двигайтесь!");
  328. teleportTask = Bukkit.getScheduler().scheduleSyncRepeatingTask(Main.getMain(), new Runnable() {
  329. int count = -1;
  330. Location startLocation = getPlayer().getLocation();
  331.  
  332. @Override
  333. public void run() {
  334. if (getPlayer() != null) {
  335. if (!LocationUtils.isCompare(startLocation, getPlayer().getLocation())) {
  336. cancelTeleport();
  337. sendTitle("§cТелепортация", "§cотменена", 10);
  338. sendMessage("§fТелепортация отменена.");
  339. return;
  340. }
  341. if (++count == delay) {
  342. getPlayer().teleport(location);
  343. sendTitle("§aТелепортация", "§aвыполнена", 10);
  344. sendMessage("§fТелепортация успешно выполнена!");
  345. cancelTeleport();
  346. } else
  347. sendTitle("§fТелепортация через", "§a" + (delay - count) + " §fсек.", 10);
  348. }
  349. }
  350. }, 0, 10);
  351. }
  352.  
  353. public void cancelTeleport() {
  354. if (teleportTask == -1)
  355. return;
  356. Bukkit.getScheduler().cancelTask(teleportTask);
  357. teleportTask = -1;
  358. }
  359.  
  360. public void giveKit() {
  361. if (getPlayer() == null)
  362. return;
  363. if (level < 3) {
  364. sendMessage("§fВы сможете получить свой кит после достижения §a3 §fуровня.");
  365. return;
  366. }
  367. if ((System.currentTimeMillis() - lastKit) / 1000 <= 259200) {
  368. sendMessage("§fВы сможете получить свой кит через §c" + TimeUtils.getDurationString(259200 - (System.currentTimeMillis() - lastKit) / 1000) + "§f.");
  369. return;
  370. }
  371. if (kitResources > 0)
  372. addResourcesWithoutBoosters(kitResources);
  373. if (getPlayer().hasPermission("bossfight.case"))
  374. getPlayer().getInventory().addItem(UsableItem.getUsableItem("§aОбычный ключ").getItemStack());
  375. if (getPlayer().hasPermission("bossfight.caseart"))
  376. getPlayer().getInventory().addItem(UsableItem.getUsableItem("§6Древний ключ").getItemStack());
  377. if (getPlayer().hasPermission("bossfight.caserare"))
  378. getPlayer().getInventory().addItem(UsableItem.getUsableItem("§cРедкий ключ").getItemStack());
  379. lastKit = System.currentTimeMillis();
  380. }
  381.  
  382. public void updateMultipliers() {
  383. if (getPlayer() == null)
  384. return;
  385. resourcesMultiplier = StringUtils.fixDouble(3, Main.GLOBAL_RESOURCES_MULTIPLIER + donateResourcesMultiplier + Booster.getGlobalMultiplier(BoosterType.RESOURCES) + Booster.getLocalMultiplier(BoosterType.RESOURCES, this));
  386. expMultiplier = StringUtils.fixDouble(3, Main.GLOBAL_EXP_MULTIPLIER + donateExpMultiplier + Booster.getGlobalMultiplier(BoosterType.EXP) + Booster.getLocalMultiplier(BoosterType.EXP, this));
  387. crystalsMultiplier = StringUtils.fixDouble(3, Main.GLOBAL_CRYSTALS_MULTIPLIER + donateCrystalsMultiplier + Booster.getGlobalMultiplier(BoosterType.CRYSTALS) + Booster.getLocalMultiplier(BoosterType.CRYSTALS, this));
  388. }
  389.  
  390. public void updateAttributes() {
  391. if (getPlayer() == null)
  392. return;
  393. getPlayer().getAttribute(Attribute.GENERIC_ATTACK_SPEED).setBaseValue(100);
  394. double healthValue = 20 + getStatLevel(StatType.HEALTH);
  395. getPlayer().getAttribute(Attribute.GENERIC_MAX_HEALTH).setBaseValue(healthValue);
  396. }
  397.  
  398. public void showTutorial() {
  399. if (getPlayer() == null)
  400. return;
  401. if (inTutorial) {
  402. sendMessage("§fВы уже начали прохождение туториала!");
  403. return;
  404. }
  405. inTutorial = true;
  406. new BukkitRunnable() {
  407. int count = -1;
  408.  
  409. @Override
  410. public void run() {
  411. if (getPlayer() == null) {
  412. cancel();
  413. return;
  414. }
  415. ++count;
  416. sendMessage(Main.TUTORIAL.get(count));
  417. if (count == Main.TUTORIAL.size() - 1) {
  418. inTutorial = false;
  419. cancel();
  420. sendMessage("§6§lСпасибо за внимание!");
  421. if (getStatLevel(StatType.TUTORIAL) == 0) {
  422. setStatLevel(StatType.TUTORIAL, 1);
  423. addResourcesWithoutBoosters(20);
  424. }
  425. }
  426. }
  427. }.runTaskTimerAsynchronously(Main.getMain(), 10, 140);
  428. }
  429.  
  430. public void sellItems() {
  431. if (getPlayer() == null)
  432. return;
  433. double totalResources = 0.0;
  434. ItemStack[] itemStacks = getPlayer().getInventory().getContents();
  435. for (int l = itemStacks.length, i = 0; i < l; ++i) {
  436. ItemStack itemStack = itemStacks[i];
  437. if (itemStack != null && SellItem.getSellItem(itemStack.getType()) != null) {
  438. SellItem sellItem = SellItem.getSellItem(itemStack.getType());
  439. if (level >= sellItem.getLevel()) {
  440. totalResources += sellItem.getResources() * itemStack.getAmount();
  441. getPlayer().getInventory().setItem(i, new ItemStack(Material.AIR));
  442. }
  443. }
  444. }
  445. if (totalResources > 0)
  446. addResources(totalResources);
  447. else
  448. sendMessage("§fВ вашем инвентаре нет предметов, которые можно продать.");
  449. }
  450.  
  451. public void takeItemInHand() {
  452. if (getPlayer() == null)
  453. return;
  454. if (getPlayer().getInventory().getItemInMainHand() != null) {
  455. ItemStack itemStack = getPlayer().getInventory().getItemInMainHand();
  456. itemStack.setAmount(itemStack.getAmount() - 1);
  457. }
  458. }
  459.  
  460. public Map<String, UsableItem> getLadderItems() {
  461. Map<String, UsableItem> ladderItems = new LinkedHashMap<>();
  462. if (Main.SHOP_UPGRADEABLE_ITEMS != null && Main.SHOP_UPGRADEABLE_ITEMS.size() > 0)
  463. Main.SHOP_UPGRADEABLE_ITEMS.keySet().forEach(item -> {
  464. if (!ladderItems.containsKey(item))
  465. ladderItems.put(item, UsableItem.getUsableItem(Main.SHOP_UPGRADEABLE_ITEMS.get(item)));
  466. });
  467. ItemStack[] itemStacks = getPlayer().getInventory().getContents();
  468. for (int l = itemStacks.length, i = 0; i < l; ++i) {
  469. ItemStack itemStack = itemStacks[i];
  470. if (itemStack != null && itemStack.hasItemMeta() && itemStack.getItemMeta().hasDisplayName()) {
  471. String id = itemStack.getItemMeta().getDisplayName();
  472. if (UsableItem.itemsWithLadder.containsKey(id)) {
  473. UsableItem usableItem = UsableItem.itemsWithLadder.get(id);
  474. ladderItems.put(usableItem.getLadder(), usableItem.getNextUpgrade());
  475. }
  476. }
  477. }
  478. ItemStack helmet = getPlayer().getInventory().getHelmet();
  479. if (helmet != null && helmet.hasItemMeta() && helmet.getItemMeta().hasDisplayName()) {
  480. String id = helmet.getItemMeta().getDisplayName();
  481. if (UsableItem.itemsWithLadder.containsKey(id)) {
  482. UsableItem usableItem = UsableItem.itemsWithLadder.get(id);
  483. ladderItems.put(usableItem.getLadder(), usableItem.getNextUpgrade());
  484. }
  485. }
  486. ItemStack chestplate = getPlayer().getInventory().getChestplate();
  487. if (chestplate != null && chestplate.hasItemMeta() && chestplate.getItemMeta().hasDisplayName()) {
  488. String id = chestplate.getItemMeta().getDisplayName();
  489. if (UsableItem.itemsWithLadder.containsKey(id)) {
  490. UsableItem usableItem = UsableItem.itemsWithLadder.get(id);
  491. ladderItems.put(usableItem.getLadder(), usableItem.getNextUpgrade());
  492. }
  493. }
  494. ItemStack leggings = getPlayer().getInventory().getLeggings();
  495. if (leggings != null && leggings.hasItemMeta() && leggings.getItemMeta().hasDisplayName()) {
  496. String id = leggings.getItemMeta().getDisplayName();
  497. if (UsableItem.itemsWithLadder.containsKey(id)) {
  498. UsableItem usableItem = UsableItem.itemsWithLadder.get(id);
  499. ladderItems.put(usableItem.getLadder(), usableItem.getNextUpgrade());
  500. }
  501. }
  502. ItemStack boots = getPlayer().getInventory().getBoots();
  503. if (boots != null && boots.hasItemMeta() && boots.getItemMeta().hasDisplayName()) {
  504. String id = boots.getItemMeta().getDisplayName();
  505. if (UsableItem.itemsWithLadder.containsKey(id)) {
  506. UsableItem usableItem = UsableItem.itemsWithLadder.get(id);
  507. ladderItems.put(usableItem.getLadder(), usableItem.getNextUpgrade());
  508. }
  509. }
  510. return ladderItems;
  511. }
  512.  
  513. public void upgradeLadderItem(String id) {
  514. ItemStack[] itemStacks = getPlayer().getInventory().getContents();
  515. for (int l = itemStacks.length, i = 0; i < l; ++i) {
  516. ItemStack itemStack = itemStacks[i];
  517. if (itemStack != null && itemStack.hasItemMeta() && itemStack.getItemMeta().hasDisplayName())
  518. if (UsableItem.itemsWithLadder.containsKey(itemStack.getItemMeta().getDisplayName())) {
  519. UsableItem usableItem = UsableItem.itemsWithLadder.get(itemStack.getItemMeta().getDisplayName());
  520. if (usableItem.getNextUpgrade().getId().equals(id)) {
  521. getPlayer().getInventory().setItem(i, usableItem.getNext().getItemStack());
  522. return;
  523. }
  524. }
  525. }
  526. ItemStack helmet = getPlayer().getInventory().getHelmet();
  527. if (helmet != null && helmet.hasItemMeta() && helmet.getItemMeta().hasDisplayName())
  528. if (UsableItem.itemsWithLadder.containsKey(helmet.getItemMeta().getDisplayName())) {
  529. UsableItem usableItem = UsableItem.itemsWithLadder.get(helmet.getItemMeta().getDisplayName());
  530. if (usableItem.getNextUpgrade().getId().equals(id)) {
  531. getPlayer().getInventory().setHelmet(usableItem.getNext().getItemStack());
  532. return;
  533. }
  534. }
  535. ItemStack chestplate = getPlayer().getInventory().getChestplate();
  536. if (chestplate != null && chestplate.hasItemMeta() && chestplate.getItemMeta().hasDisplayName())
  537. if (UsableItem.itemsWithLadder.containsKey(chestplate.getItemMeta().getDisplayName())) {
  538. UsableItem usableItem = UsableItem.itemsWithLadder.get(chestplate.getItemMeta().getDisplayName());
  539. if (usableItem.getNextUpgrade().getId().equals(id)) {
  540. getPlayer().getInventory().setChestplate(usableItem.getNext().getItemStack());
  541. return;
  542. }
  543. }
  544. ItemStack leggings = getPlayer().getInventory().getLeggings();
  545. if (leggings != null && leggings.hasItemMeta() && leggings.getItemMeta().hasDisplayName())
  546. if (UsableItem.itemsWithLadder.containsKey(leggings.getItemMeta().getDisplayName())) {
  547. UsableItem usableItem = UsableItem.itemsWithLadder.get(leggings.getItemMeta().getDisplayName());
  548. if (usableItem.getNextUpgrade().getId().equals(id)) {
  549. getPlayer().getInventory().setLeggings(usableItem.getNext().getItemStack());
  550. return;
  551. }
  552. }
  553. ItemStack boots = getPlayer().getInventory().getBoots();
  554. if (boots != null && boots.hasItemMeta() && boots.getItemMeta().hasDisplayName())
  555. if (UsableItem.itemsWithLadder.containsKey(boots.getItemMeta().getDisplayName())) {
  556. UsableItem usableItem = UsableItem.itemsWithLadder.get(boots.getItemMeta().getDisplayName());
  557. if (usableItem.getNextUpgrade().getId().equals(id))
  558. getPlayer().getInventory().setBoots(usableItem.getNext().getItemStack());
  559. }
  560. }
  561.  
  562. public void updatePotionEffects() {
  563. if (getPlayer() == null)
  564. return;
  565. if (!artefacts.isEmpty())
  566. artefacts.stream().filter(artefact -> !artefact.getPotionEffects().isEmpty()).filter(artefact -> !artefact.getPotionEffects().isEmpty() && getPlayer() != null).forEachOrdered(artefact -> {
  567. artefact.getPotionEffects().keySet().forEach(effect -> {
  568. if (getPlayer().hasPotionEffect(effect))
  569. getPlayer().removePotionEffect(effect);
  570. getPlayer().addPotionEffect(new PotionEffect(effect, Integer.MAX_VALUE, artefact.getPotionEffects().get(effect)));
  571. });
  572. });
  573. }
  574.  
  575. public boolean hasItem(UsableItem usableItem, int amount) {
  576. int count = 0;
  577. ItemStack[] itemStacks = getPlayer().getInventory().getContents();
  578. for (int l = itemStacks.length, i = 0; i < l; ++i) {
  579. ItemStack itemStack = itemStacks[i];
  580. if (itemStack != null && itemStack.hasItemMeta() && itemStack.getItemMeta().hasDisplayName())
  581. if (UsableItem.getUsableItem(itemStack) != null && UsableItem.getUsableItem(itemStack).getId().equals(usableItem.getId()))
  582. count += itemStack.getAmount();
  583. }
  584. return count >= amount;
  585. }
  586.  
  587. public boolean takeItem(UsableItem usableItem, int amount) {
  588. int count = 0;
  589. ItemStack[] itemStacks = getPlayer().getInventory().getContents();
  590. for (int l = itemStacks.length, i = 0; i < l; ++i) {
  591. ItemStack itemStack = itemStacks[i];
  592. if (itemStack != null && itemStack.hasItemMeta() && itemStack.getItemMeta().hasDisplayName())
  593. if (UsableItem.getUsableItem(itemStack) != null && UsableItem.getUsableItem(itemStack).getId().equals(usableItem.getId())) {
  594. count += itemStack.getAmount();
  595. getPlayer().getInventory().getItem(i).setAmount(0);
  596. }
  597. }
  598. if (count == amount)
  599. return true;
  600. ItemStack itemStack = usableItem.getItemStack();
  601. if (count > amount)
  602. itemStack.setAmount(count - amount);
  603. else if (count < amount) {
  604. itemStack.setAmount(count);
  605. return false;
  606. }
  607. if (getPlayer() != null)
  608. getPlayer().getInventory().addItem(itemStack);
  609. return true;
  610. }
  611.  
  612. public double getNextLevelPrice() {
  613. int price = Main.LEVEL_PRICE;
  614. for (int i = 1; i < level; ++i)
  615. price *= 2.5;
  616. return price;
  617. }
  618.  
  619. public String getLevelPercent() {
  620. int percent = (int) (exp / getNextLevelPrice() * 100);
  621. String percentInfo = percent + "%";
  622. return percent < 33 ? "§c" + percentInfo : percent < 66 ? "§f" + percentInfo : "§a" + percentInfo;
  623. }
  624.  
  625. public String getName() {
  626. return name;
  627. }
  628.  
  629. public int getLevel() {
  630. return level;
  631. }
  632.  
  633. public void checkLevelUp() {
  634. if (exp >= getNextLevelPrice())
  635. levelUp();
  636. }
  637.  
  638. public void levelUp() {
  639. level++;
  640. sendTitle("§a§lУРОВЕНЬ ПОВЫШЕН!", "§fТеперь у Вас §a" + level + " §fуровень.", 100);
  641. sendMessage("§fВаш уровень успешно повышен до §a" + level);
  642. }
  643.  
  644. public void setResources(int resources) { this.resources = resources; }
  645.  
  646. public void setLevel(int level) {
  647. this.level = level;
  648. }
  649.  
  650. public double getExp() {
  651. return exp;
  652. }
  653.  
  654. public void addExp(double exp) {
  655. double totalExp = exp * expMultiplier;
  656. this.exp += totalExp;
  657. sendMessage("§fВы получили §a" + StringUtils.formatDouble(totalExp) + " §fопыта" + (expMultiplier > 1.0 ? " §8(§6" + expMultiplier + "x§8)" : ""));
  658. }
  659.  
  660. public void addExpSilently(double exp) {
  661. double totalExp = exp * expMultiplier;
  662. this.exp += totalExp;
  663. sendActionBar("§f+ §a" + StringUtils.formatDouble(totalExp) + " §fопыта" + (expMultiplier > 1.0 ? " §8(§6" + expMultiplier + "x§8)" : ""));
  664. }
  665.  
  666. public void setExp(double exp) {
  667. this.exp = exp;
  668. }
  669.  
  670. public double getResources() {
  671. return resources;
  672. }
  673.  
  674. public void addResources(double resources) {
  675. double totalResources = resources * resourcesMultiplier;
  676. this.resources += totalResources;
  677. sendMessage("§fВы получили §a" + StringUtils.formatDouble(totalResources) + " §fресурсов" + (resourcesMultiplier > 1.0 ? " §8(§6" + resourcesMultiplier + "x§8)" : ""));
  678. }
  679.  
  680. public void addResourcesWithoutBoosters(double resources) {
  681. this.resources += resources;
  682. sendMessage("§fВы получили §a" + StringUtils.formatDouble(resources) + " §fресурсов");
  683. }
  684.  
  685. public void addResourcesSilently(double resources) {
  686. double totalResources = resources * resourcesMultiplier;
  687. this.resources += totalResources;
  688. sendActionBar("§f+ §a" + StringUtils.formatDouble(totalResources) + " §fресурсов" + (resourcesMultiplier > 1.0 ? " §8(§6" + resourcesMultiplier + "x§8)" : ""));
  689. }
  690.  
  691. public boolean takeResources(double resources) {
  692. if (this.resources >= resources) {
  693. this.resources -= resources;
  694. if (getPlayer() != null)
  695. sendMessage("§fВы потеряли §c" + StringUtils.formatDouble(resources) + " §fресурсов");
  696. return true;
  697. }
  698. return false;
  699. }
  700.  
  701. public void setResources(double resources) {
  702. this.resources = resources;
  703. }
  704.  
  705. public int getCrystals() {
  706. return crystals;
  707. }
  708.  
  709. public void addCrystals(int crystals) {
  710. this.crystals += crystals;
  711. sendActionBar("§f+ §a" + crystals + " §fкристаллов");
  712. }
  713.  
  714. public boolean takeCrystals(int crystals) {
  715. if (this.crystals >= crystals) {
  716. this.crystals -= crystals;
  717. sendMessage("§fВы потеряли §c" + crystals + " §fкристаллов");
  718. return true;
  719. }
  720. return false;
  721. }
  722.  
  723. public void setCrystals(int crystals) {
  724. this.crystals = crystals;
  725. }
  726.  
  727. public int getBlocks() {
  728. return blocks;
  729. }
  730.  
  731. public void addBlocks(int blocks) {
  732. this.blocks += blocks;
  733. }
  734.  
  735. public void setBlocks(int blocks) {
  736. this.blocks = blocks;
  737. }
  738.  
  739. public int getKills() {
  740. return kills;
  741. }
  742.  
  743. public void addKills(int kills) {
  744. this.kills += kills;
  745. }
  746.  
  747. public void setKills(int kills) {
  748. this.kills = kills;
  749. }
  750.  
  751. public int getDeaths() {
  752. return deaths;
  753. }
  754.  
  755. public void addDeaths(int deaths) {
  756. this.deaths += deaths;
  757. }
  758.  
  759. public void setDeaths(int deaths) {
  760. this.deaths = deaths;
  761. }
  762.  
  763. public int getBossKills() {
  764. return bossKills;
  765. }
  766.  
  767. public void addBossKills(int bossKills) {
  768. this.bossKills += bossKills;
  769. }
  770.  
  771. public void setBossKills(int bossKills) {
  772. this.bossKills = bossKills;
  773. }
  774.  
  775. public long getLastKit() {
  776. return lastKit;
  777. }
  778.  
  779. public void setLastKit(long lastKit) {
  780. this.lastKit = lastKit;
  781. }
  782.  
  783. public Map<StatType, Integer> getStatLog() {
  784. return stat_log;
  785. }
  786.  
  787. public int getStatLevel(StatType statType) {
  788. if (stat_log.containsKey(statType))
  789. return stat_log.get(statType);
  790. return 0;
  791. }
  792.  
  793. public void addStatLevel(StatType statType, int level) {
  794. if (stat_log.containsKey(statType))
  795. stat_log.put(statType, stat_log.get(statType) + level);
  796. else
  797. stat_log.put(statType, level);
  798. }
  799.  
  800. public void setStatLevel(StatType statType, int level) {
  801. stat_log.put(statType, level);
  802. }
  803.  
  804. public void setStatLog(Map<StatType, Integer> stat_log) {
  805. this.stat_log = stat_log;
  806. }
  807.  
  808. public Map<SellItem, Integer> getBlockLog() {
  809. return block_log;
  810. }
  811.  
  812. public int getBlockCount(SellItem serializableBlock) {
  813. if (block_log.containsKey(serializableBlock))
  814. return block_log.get(serializableBlock);
  815. return 0;
  816. }
  817.  
  818. public void addBlockCount(SellItem serializableBlock, int count) {
  819. if (block_log.containsKey(serializableBlock))
  820. block_log.put(serializableBlock, block_log.get(serializableBlock) + count);
  821. else
  822. block_log.put(serializableBlock, count);
  823. }
  824.  
  825. public void setBlockCount(SellItem serializableBlock, int count) {
  826. block_log.put(serializableBlock, count);
  827. }
  828.  
  829. public void setBlockLog(Map<SellItem, Integer> block_log) {
  830. this.block_log = block_log;
  831. }
  832.  
  833. public Map<MobType, Integer> getMobLog() {
  834. return mob_log;
  835. }
  836.  
  837. public int getMobCount(MobType mobType) {
  838. if (mob_log.containsKey(mobType))
  839. return mob_log.get(mobType);
  840. return 0;
  841. }
  842.  
  843. public void addMobCount(MobType mobType, int count) {
  844. if (mob_log.containsKey(mobType))
  845. mob_log.put(mobType, mob_log.get(mobType) + count);
  846. else
  847. mob_log.put(mobType, count);
  848. }
  849.  
  850. public void setMobCount(MobType mobType, int count) {
  851. mob_log.put(mobType, count);
  852. }
  853.  
  854. public void setMobLog(Map<MobType, Integer> mob_log) {
  855. this.mob_log = mob_log;
  856. }
  857.  
  858. public Map<String, Integer> getQuestLog() {
  859. return quest_log;
  860. }
  861.  
  862. public int getQuestLevel(String questType) {
  863. if (quest_log.containsKey(questType))
  864. return quest_log.get(questType);
  865. return 0;
  866. }
  867.  
  868. public int getSellerLevel(String sellerType) {
  869. return 0;
  870. }
  871.  
  872. public void addQuestLevel(String questType, int count) {
  873. if (quest_log.containsKey(questType))
  874. quest_log.put(questType, quest_log.get(questType) + count);
  875. else
  876. quest_log.put(questType, count);
  877. }
  878.  
  879. public void setQuestLevel(String questType, int count) {
  880. quest_log.put(questType, count);
  881. }
  882.  
  883. public void setSellerLevel(String sellerType, int count) {
  884. }
  885.  
  886. public void setQuestLog(Map<String, Integer> quest_log) {
  887. this.quest_log = quest_log;
  888. }
  889.  
  890. public List<Artefact> getArtefacts() {
  891. return artefacts;
  892. }
  893.  
  894. public boolean addArtefact(Artefact artefact) {
  895. if (artefacts.contains(artefact))
  896. return false;
  897. if (!artefact.getStatistics().isEmpty())
  898. artefact.getStatistics().keySet().forEach(statistic -> {
  899. if (statistics.containsKey(statistic))
  900. statistics.put(statistic, statistics.get(statistic) + artefact.getStatistics().get(statistic));
  901. else
  902. statistics.put(statistic, artefact.getStatistics().get(statistic));
  903. });
  904. artefacts.add(artefact);
  905. updatePotionEffects();
  906. return true;
  907. }
  908.  
  909. public boolean removeArtefact(Artefact artefact) {
  910. if (!artefacts.contains(artefact))
  911. return false;
  912. if (!artefact.getStatistics().isEmpty())
  913. artefact.getStatistics().keySet().forEach(statistic -> {
  914. if (statistics.containsKey(statistic)) {
  915. double value = statistics.get(statistic) - artefact.getStatistics().get(statistic);
  916. if (value != 0)
  917. statistics.put(statistic, statistics.get(statistic) - artefact.getStatistics().get(statistic));
  918. else
  919. statistics.remove(statistic);
  920. }
  921. });
  922. if (!artefact.getPotionEffects().isEmpty() && getPlayer() != null)
  923. artefact.getPotionEffects().keySet().forEach(effect -> {
  924. if (getPlayer().hasPotionEffect(effect))
  925. getPlayer().removePotionEffect(effect);
  926. });
  927. artefacts.remove(artefact);
  928. updatePotionEffects();
  929. return true;
  930. }
  931.  
  932. public void setArtefacts(List<Artefact> artefacts) {
  933. this.artefacts = artefacts;
  934. }
  935.  
  936. public boolean isInTutorial() {
  937. return inTutorial;
  938. }
  939.  
  940. public void setInTutorial(boolean inTutorial) {
  941. this.inTutorial = inTutorial;
  942. }
  943.  
  944. public String getLastDamager() {
  945. if ((System.currentTimeMillis() - lastDamagerHitTime) / 1000 > delay) {
  946. if (lastDamager != null) {
  947. lastDamager = null;
  948. sendMessage("§fВы вышли из режима боя.");
  949. }
  950. return null;
  951. }
  952. return lastDamager;
  953. }
  954.  
  955. public long getLastDamagerRemoveTime() {
  956. return delay - ((System.currentTimeMillis() - lastDamagerHitTime) / 1000);
  957. }
  958.  
  959. public void setLastDamager(String lastDamager) {
  960. if (this.lastDamager == null || !this.lastDamager.equals(lastDamager)) {
  961. this.lastDamager = lastDamager;
  962. lastDamagerHitTime = System.currentTimeMillis();
  963. sendMessage("§fВы вошли в режим боя. Если Вы выйдете в течение §f" + delay + " §fсекунд, то умрёте.");
  964. }
  965. }
  966.  
  967. public int getDelay() {
  968. return delay;
  969. }
  970.  
  971. public void setDelay(int delay) {
  972. this.delay = delay;
  973. }
  974.  
  975. public int getMaxMarketItems() {
  976. return maxMarketItems;
  977. }
  978.  
  979. public void setMaxMarketItems(int maxMarketItems) {
  980. this.maxMarketItems = maxMarketItems;
  981. }
  982.  
  983. public int getKitResources() {
  984. return kitResources;
  985. }
  986.  
  987. public void setKitResources(int kitResources) {
  988. this.kitResources = kitResources;
  989. }
  990.  
  991. public double getDonateExpMultiplier() {
  992. return donateExpMultiplier;
  993. }
  994.  
  995. public void setDonateExpMultiplier(double donateExpMultiplier) {
  996. this.donateExpMultiplier = donateExpMultiplier;
  997. }
  998.  
  999. public double getDonateResourcesMultiplier() {
  1000. return donateResourcesMultiplier;
  1001. }
  1002.  
  1003. public void setDonateResourcesMultiplier(double donateResourcesMultiplier) {
  1004. this.donateResourcesMultiplier = donateResourcesMultiplier;
  1005. }
  1006.  
  1007. public double getDonateCrystalsMultiplier() {
  1008. return donateCrystalsMultiplier;
  1009. }
  1010.  
  1011. public void setDonateCrystalsMultiplier(double donateCrystalsMultiplier) {
  1012. this.donateCrystalsMultiplier = donateCrystalsMultiplier;
  1013. }
  1014.  
  1015. public double getExpMultiplier() {
  1016. return expMultiplier;
  1017. }
  1018.  
  1019. public void setExpMultiplier(double expMultiplier) {
  1020. this.expMultiplier = expMultiplier;
  1021. }
  1022.  
  1023. public double getResourcesMultiplier() {
  1024. return resourcesMultiplier;
  1025. }
  1026.  
  1027. public void setResourcesMultiplier(double resourcesMultiplier) {
  1028. this.resourcesMultiplier = resourcesMultiplier;
  1029. }
  1030.  
  1031. public double getCrystalsMultiplier() {
  1032. return crystalsMultiplier;
  1033. }
  1034.  
  1035. public void setCrystalsMultiplier(double crystalsMultiplier) {
  1036. this.crystalsMultiplier = crystalsMultiplier;
  1037. }
  1038.  
  1039. public Map<String, Double> getStatistics() {
  1040. return statistics;
  1041. }
  1042.  
  1043. public void setStatistics(Map<String, Double> statistics) {
  1044. this.statistics = statistics;
  1045. }
  1046. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement