Advertisement
Lisenochek

Untitled

Oct 23rd, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.55 KB | None | 0 0
  1. package ru.lisenochek.mcrust.objects.blockMechanic;
  2.  
  3. import org.bukkit.Bukkit;
  4. import org.bukkit.ChatColor;
  5. import org.bukkit.Material;
  6. import org.bukkit.entity.Player;
  7. import org.bukkit.inventory.Inventory;
  8. import org.bukkit.inventory.ItemStack;
  9. import ru.lisenochek.mcrust.objects.misc.CustomBlock;
  10. import ru.lisenochek.mcrust.objects.misc.Sounds;
  11. import ru.lisenochek.mcrust.utils.ISBuilder;
  12. import ru.lisenochek.mcrust.utils.Utils;
  13.  
  14. import java.util.Arrays;
  15. import java.util.Collections;
  16. import java.util.List;
  17.  
  18. public class Constructions {
  19.  
  20. private Buildings buildings;
  21. private Type type;
  22.  
  23. private Constructions(Buildings buildings, Type type) {
  24. this.buildings = buildings;
  25. this.type = type;
  26. }
  27.  
  28. public static Constructions getConstuction(Buildings buildings) {
  29.  
  30. Type type = null;
  31.  
  32. for (Constructions.Type types : Constructions.Type.values()) {
  33. if (types.getBlockType() != buildings.getType()) continue;
  34. type = types;
  35. break;
  36. }
  37.  
  38. return type == null ? null : new Constructions(buildings, type);
  39. }
  40.  
  41. public void openUpgradeGUI(Player player) {
  42.  
  43. Inventory inventory = Bukkit.createInventory(null, 45, Utils.stripColor("&2&lУлучшение конструкции"));
  44.  
  45. inventory.setItem(13, Type.WOOD.getUpgradeStack(buildings, type, player));
  46. inventory.setItem(23, Type.STONE.getUpgradeStack(buildings, type, player));
  47. inventory.setItem(31, Type.METAL.getUpgradeStack(buildings, type, player));
  48. inventory.setItem(22, type.getRepairStack(buildings, player));
  49.  
  50. inventory.setItem(21, ISBuilder.getBuilder(Material.BARRIER, 0, 1, "&a&l» &c&lСломать",
  51. "",
  52. "&7Конструкция будет &aразрушена&7. Ресурсы",
  53. "&7возвращены не будут",
  54. "",
  55. "&aНажмите&7, чтобы разрушить конструкцию"
  56. ).setTag("location", Utils.serialiseLocation(buildings.getLocation())).getStack()
  57. );
  58.  
  59. inventory.setItem(25, buildings.getDecayTime() == -1
  60. ?
  61. ISBuilder.getBuilder(Material.BOOK, 0, 1, "&a&l» &e&lИнформация",
  62. "",
  63. "&7&l&nПрочность&7&l » &a&l" + buildings.getHealth() + "&7&l/&a&l" + buildings.getType().getMaxHealth(),
  64. "",
  65. "&7- Если прочность будет равна &a0&7, то конструкция",
  66. "&aсломается"
  67. ).getStack()
  68. :
  69. ISBuilder.getBuilder(Material.BOOK, 0, 1, "&a&l» &e&lИнформация",
  70. "",
  71. "&7&l&nПрочность&7&l » &a&l" + buildings.getHealth() + "&7&l/&a&l" + buildings.getType().getMaxHealth(),
  72. "",
  73. "&7- Если прочность будет равна &a0&7, то конструкция",
  74. "&aсломается",
  75. "",
  76. "&7&l&nЗадержка перед гниением&7&l » &a&l" + Utils.getTimeFormat(buildings.getBlockDecayTime()),
  77. "",
  78. "&7- Задержка, в течение которого конструкция &aне &7гниет.",
  79. "&7Сбрасывается, если конструкция в &aзоне &7шкафа",
  80. "",
  81. "&7&l&nВремя гниения&7&l » &a&l" + Utils.getTimeFormat(buildings.getDecayTime()),
  82. "",
  83. "&7- Время, по &aистечении &7которого конструкция потеряет",
  84. "&a1 &7единицу прочности"
  85. ).getStack()
  86. );
  87.  
  88. for (int freeSlot = 0; freeSlot < inventory.getSize(); freeSlot++) if (inventory.getItem(freeSlot) == null) inventory.setItem(freeSlot, ISBuilder.getBuilder(Material.STAINED_GLASS_PANE, 0, 1, " ").getStack());
  89. player.openInventory(inventory);
  90. }
  91.  
  92. public enum Type {
  93.  
  94. HAY(CustomBlock.Type.HAY_CONSTRUCTION),
  95.  
  96. WOOD("&a&l» &e&lУлучшить в дерево",
  97. CustomBlock.Type.WOODEN_CONSTRUCTION,
  98. Sounds.UPGRADE_WOOD_1.getSoundName(),
  99. Sounds.UPGRADE_WOOD_2.getSoundName()
  100. ),
  101.  
  102. STONE("&a&l» &e&lУлучшить в камень",
  103. CustomBlock.Type.STONE_CONSTRUCTION,
  104. Sounds.UPGRADE_STONE_1.getSoundName(),
  105. Sounds.UPGRADE_STONE_2.getSoundName()
  106. ),
  107.  
  108. METAL("&a&l» &e&lУлучшить в металл",
  109. CustomBlock.Type.METAL_CONSTRUCTION,
  110. Sounds.UPGRADE_METAL_1.getSoundName(),
  111. Sounds.UPGRADE_METAL_2.getSoundName()
  112. );
  113.  
  114. private String displayName;
  115. private CustomBlock.Type blockType;
  116. private String[] soundUpgrade;
  117.  
  118. Type(CustomBlock.Type blockType) {
  119. this.blockType = blockType;
  120. }
  121.  
  122. Type(String displayName, CustomBlock.Type blockType, String... soundUpgrade) {
  123. this.displayName = displayName;
  124. this.blockType = blockType;
  125. this.soundUpgrade = soundUpgrade;
  126. }
  127.  
  128. public CustomBlock.Type getBlockType() {
  129. return blockType;
  130. }
  131.  
  132. public String[] getSoundUpgrade() {
  133. return soundUpgrade;
  134. }
  135.  
  136. public ItemStack getUpgradeStack(Buildings buildings, Type currectType, Player player) {
  137.  
  138. List<Type> list;
  139.  
  140. switch (currectType) {
  141. case HAY: {
  142. list = Arrays.asList(WOOD, STONE, METAL);
  143. break;
  144. }
  145.  
  146. case WOOD: {
  147. list = Arrays.asList(STONE, METAL);
  148. break;
  149. }
  150.  
  151. case STONE: {
  152. list = Collections.singletonList(METAL);
  153. break;
  154. }
  155.  
  156. default: {
  157. list = Collections.emptyList();
  158. break;
  159. }
  160. }
  161.  
  162. if (!list.contains(this)) return ISBuilder.getBuilder(blockType.getMaterialData().getItemType(), blockType.getMaterialData().getData(), 1, "&a&l» &c&lУже улучшено").getStack();
  163.  
  164. int resourceAmount = Utils.getStacksAmount(player, blockType.getResourceStack());
  165.  
  166. ISBuilder builder = ISBuilder.getBuilder(blockType.getMaterialData().getItemType(), blockType.getMaterialData().getData(), 1, displayName,
  167. "",
  168. "&7&l&nДля улучшения нужны ресурсы&7&l:",
  169. "",
  170. "&7- " + ChatColor.stripColor(blockType.getResourceStack().getItemMeta().getDisplayName().toLowerCase()) + " (" + (resourceAmount >= 2 ? "&a" : "&c") + 2 + "&7) - " + (resourceAmount < 2 ? "не хватает - &c" + (2 - resourceAmount) : "у вас - &a" + resourceAmount)
  171. );
  172.  
  173. return (resourceAmount < 2
  174. ?
  175. builder.addLore(
  176. "",
  177. "&cНедостаточно &7ресурсов для улучшения"
  178. )
  179. :
  180. builder.addLore(
  181. "",
  182. "&aНажмите&7, чтобы улучшить конструкцию"
  183. ).setTag("location", Utils.serialiseLocation(buildings.getLocation())).setTag("upgradeType", name())
  184. ).getStack();
  185. }
  186.  
  187. public ItemStack getRepairStack(Buildings buildings, Player player) {
  188.  
  189. if (buildings.getHealth() == buildings.getType().getMaxHealth()) return ISBuilder.getBuilder(Material.WOOD_SPADE, 0, 1, "&a&l» &c&lКонструкция целая").hideFlags().getStack();
  190.  
  191. int resourceAmount = Utils.getStacksAmount(player, buildings.getType().getResourceStack());
  192. int repairCost = buildings.getRepairCost(player);
  193.  
  194. ISBuilder builder = ISBuilder.getBuilder(Material.WOOD_SPADE, 0, 1, "&a&l» &e&lОтремонтировать",
  195. "",
  196. "&7&l&nДля ремонта нужны ресурсы&7&l:",
  197. "",
  198. "&7- " + ChatColor.stripColor(buildings.getType().getResourceStack().getItemMeta().getDisplayName().toLowerCase()) + " (" + (resourceAmount >= repairCost ? "&a" : "&c") + repairCost + "&7) - " + (resourceAmount < repairCost ? "не хватает - &c" + (repairCost - resourceAmount) : "у вас - &a" + resourceAmount)
  199. );
  200.  
  201. return (resourceAmount < repairCost
  202. ?
  203. builder.addLore(
  204. "",
  205. "&cНедостаточно &7ресурсов для починки"
  206. ).hideFlags()
  207. :
  208. builder.addLore(
  209. "",
  210. "&aНажмите&7, чтобы починить конструкцию"
  211. ).hideFlags().setTag("location", Utils.serialiseLocation(buildings.getLocation())).setTag("repairCost", repairCost)
  212. ).getStack();
  213. }
  214. }
  215. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement