Advertisement
Lisenochek

Untitled

Oct 22nd, 2019
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.69 KB | None | 0 0
  1. package ru.lisenochek.mcrust.listeners
  2.  
  3. import com.comphenix.protocol.wrappers.EnumWrappers
  4. import org.bukkit.Bukkit
  5. import org.bukkit.Location
  6. import org.bukkit.Material
  7. import org.bukkit.entity.Player
  8. import org.bukkit.event.EventHandler
  9. import org.bukkit.event.Listener
  10. import org.bukkit.event.inventory.InventoryClickEvent
  11. import ru.lisenochek.mcrust.events.player.PlayerUpgradeConstructionEvent
  12. import ru.lisenochek.mcrust.events.player.interact.PlayerInteractMalletEvent
  13. import ru.lisenochek.mcrust.objects.blockMechanic.Buildings
  14. import ru.lisenochek.mcrust.objects.blockMechanic.Constructions
  15. import ru.lisenochek.mcrust.objects.blockMechanic.Cupboard
  16. import ru.lisenochek.mcrust.objects.misc.CustomBlock
  17. import ru.lisenochek.mcrust.objects.misc.Durability
  18. import ru.lisenochek.mcrust.objects.misc.Radtown
  19. import ru.lisenochek.mcrust.objects.misc.Sounds
  20. import ru.lisenochek.mcrust.sql.SQLManager
  21. import ru.lisenochek.mcrust.utils.ISBuilder
  22. import ru.lisenochek.mcrust.utils.Utils
  23.  
  24. import java.util.Arrays
  25.  
  26. class BuildingListener : Listener {
  27.  
  28. @EventHandler
  29. fun onClickOnBuildings(e: PlayerInteractMalletEvent) {
  30.  
  31. val player = e.player
  32.  
  33. if (Radtown.locationsMap[e.clickedBlock.location] != null && !player.hasPermission("mcrust.admin")) {
  34. Utils.sendBarMessage(player, "&7Здесь &cнельзя &7работать киянкой")
  35. return
  36. }
  37.  
  38. if (player.isSneaking) {
  39. Utils.sendTitleMessage(player, "", Utils.generateLine(30, e.buildings.health, e.buildings.type.maxHealth, "&a", "&7") + " &7(&a" + e.buildings.health + "&7/&a" + e.buildings.type.maxHealth + "&7)")
  40. return
  41. }
  42.  
  43. val cupboard = Cupboard.locationsMap[e.clickedBlock.location]
  44.  
  45. if (cupboard != null && !cupboard.ownersList.contains(player.uniqueId) && !player.hasPermission("mcrust.admin")) {
  46. Utils.sendBarMessage(player, "&7Только &cавторизованные &7в шкафу &cигроки &7могут работать киянкой")
  47. return
  48. }
  49.  
  50. if (Arrays.asList(CustomBlock.Type.HAY_CONSTRUCTION, CustomBlock.Type.WOODEN_CONSTRUCTION, CustomBlock.Type.STONE_CONSTRUCTION, CustomBlock.Type.METAL_CONSTRUCTION).contains(e.buildings.type)) {
  51. Constructions.getConstuction(e.buildings)!!.openUpgradeGUI(player)
  52. return
  53. }
  54.  
  55. Buildings.openGUI(player, e.buildings)
  56. }
  57.  
  58. @EventHandler
  59. fun onUpgradeConstructionsGUIClick(e: InventoryClickEvent) {
  60.  
  61. val player = e.whoClicked as Player
  62.  
  63. if (e.inventory.name != Utils.stripColor("&2&lУлучшение конструкции")) return
  64. if (e.currentItem == null || e.currentItem.type == Material.AIR) return
  65.  
  66. e.isCancelled = true
  67. player.playSound(player.location, org.bukkit.Sound.UI_BUTTON_CLICK, 1f, 1f)
  68.  
  69. if (e.clickedInventory.name != Utils.stripColor("&2&lУлучшение конструкции")) return
  70.  
  71. val builder = ISBuilder.getBuilder(e.currentItem)
  72.  
  73. if (!builder.hasTag("location")) return
  74.  
  75. val location = Utils.deserialiseLocation(builder.getStringTag("location"))
  76. val buildings = Buildings.buildingsMap[location]
  77.  
  78. player.closeInventory()
  79.  
  80. if (buildings.getType() !== CustomBlock.getBlock(location!!.block).type) return
  81.  
  82. Durability.getDurability(player.inventory.itemInMainHand).damage(player)
  83.  
  84. if (e.currentItem.itemMeta.displayName == Utils.stripColor("&a&l» &e&lОтремонтировать")) {
  85. buildings.setHealth(buildings.getType().maxHealth)
  86. SQLManager.getManager().updateBuildingData(buildings)
  87. player.world.playSound(location, Sounds.REPAIR.soundName, 1f, 1f)
  88. Utils.playEffect(location!!.clone().add(0.5, 0.0, 0.5), false, false, 0.5f, 0.5f, 0.5f, 0, EnumWrappers.Particle.CLOUD, Material.AIR, 25)
  89. Utils.removeItems(player, ISBuilder.getBuilder(buildings.getType().resourceStack).setAmount(builder.getIntTag("repairCost")).stack)
  90. Utils.sendBarMessage(player, "&7Я &aпочинил &7конструкцию")
  91. return
  92. }
  93.  
  94. if (e.currentItem.itemMeta.displayName == Utils.stripColor("&a&l» &c&lСломать")) {
  95. buildings.remove(player)
  96. player.world.playSound(location, Sounds.BREAK.soundName, 1f, 1f)
  97. Utils.sendBarMessage(player, "&7Я &aразрушил &7конструкцию")
  98. return
  99. }
  100.  
  101. if (!builder.hasTag("upgradeType")) return
  102.  
  103. val type = Constructions.Type.valueOf(builder.getStringTag("upgradeType"))
  104.  
  105. buildings.setType(type.blockType)
  106. buildings.setHealth(type.blockType.maxHealth)
  107. buildings.setDecayTime(type.blockType.decayTime)
  108. buildings.setBlockDecayTime(type.blockType.blockDecayTime)
  109. SQLManager.getManager().updateBuildingData(buildings)
  110. CustomBlock.setMaterialData(location!!.block, type.blockType.materialData)
  111. player.world.playSound(player.location, Arrays.asList(*type.soundUpgrade)[Utils.getRandom().nextInt(type.soundUpgrade.size)], 1f, 1f)
  112. Bukkit.getPluginManager().callEvent(PlayerUpgradeConstructionEvent(player, location, type))
  113. Utils.playEffect(location.clone().add(0.5, 0.0, 0.5), false, false, 0.5f, 0.5f, 0.5f, 0, EnumWrappers.Particle.CLOUD, Material.AIR, 25)
  114. Utils.removeItems(player, ISBuilder.getBuilder(buildings.getType().resourceStack).setAmount(2).stack)
  115. Utils.sendBarMessage(player, "&7Я &aулучшил &7конструкцию")
  116. }
  117.  
  118. @EventHandler
  119. fun onBuildingsGUIClick(e: InventoryClickEvent) {
  120.  
  121. val player = e.whoClicked as Player
  122.  
  123. if (e.inventory.name != Utils.stripColor("&2&lКонструкция")) return
  124. if (e.currentItem == null || e.currentItem.type == Material.AIR) return
  125.  
  126. e.isCancelled = true
  127. player.playSound(player.location, org.bukkit.Sound.UI_BUTTON_CLICK, 1f, 1f)
  128.  
  129. if (e.clickedInventory.name != Utils.stripColor("&2&lКонструкция")) return
  130.  
  131. val builder = ISBuilder.getBuilder(e.currentItem)
  132.  
  133. if (!builder.hasTag("location")) return
  134.  
  135. val location = Utils.deserialiseLocation(builder.getStringTag("location"))
  136. val buildings = Buildings.buildingsMap[location]
  137. val customBlock = CustomBlock.getBlock(location!!.block)
  138.  
  139. player.closeInventory()
  140.  
  141. if (buildings == null) return
  142. if (buildings.type !== customBlock.type) return
  143.  
  144. Durability.getDurability(player.inventory.itemInMainHand).damage(player)
  145. Utils.playEffect(location.clone().add(0.5, 0.0, 0.5), false, false, 0.5f, 0.5f, 0.5f, 0, EnumWrappers.Particle.CLOUD, Material.AIR, 25)
  146.  
  147. if (e.currentItem.itemMeta.displayName == Utils.stripColor("&a&l» &e&lОтремонтировать")) {
  148. buildings.health = buildings.type.maxHealth
  149. SQLManager.getManager().updateBuildingData(buildings)
  150. player.world.playSound(location, Sounds.REPAIR.soundName, 1f, 1f)
  151. Utils.removeItems(player, ISBuilder.getBuilder(buildings.type.resourceStack).setAmount(builder.getIntTag("repairCost")).stack)
  152. Utils.sendBarMessage(player, "&7Я &aпочинил &7конструкцию")
  153. return
  154. }
  155.  
  156. if (e.currentItem.itemMeta.displayName != Utils.stripColor("&a&l» &c&lСломать")) return
  157.  
  158. if (buildings.type.drop != null) customBlock.dropItem(player)
  159.  
  160. buildings.remove(player)
  161. player.world.playSound(location, Sounds.BREAK.soundName, 1f, 1f)
  162. Utils.sendBarMessage(player, "&7Я &aразрушил &7конструкцию")
  163. }
  164. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement