Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package ru.lisenochek.mcrust.listeners
- import com.comphenix.protocol.wrappers.EnumWrappers
- import org.bukkit.Bukkit
- import org.bukkit.Location
- import org.bukkit.Material
- import org.bukkit.entity.Player
- import org.bukkit.event.EventHandler
- import org.bukkit.event.Listener
- import org.bukkit.event.inventory.InventoryClickEvent
- import ru.lisenochek.mcrust.events.player.PlayerUpgradeConstructionEvent
- import ru.lisenochek.mcrust.events.player.interact.PlayerInteractMalletEvent
- import ru.lisenochek.mcrust.objects.blockMechanic.Buildings
- import ru.lisenochek.mcrust.objects.blockMechanic.Constructions
- import ru.lisenochek.mcrust.objects.blockMechanic.Cupboard
- import ru.lisenochek.mcrust.objects.misc.CustomBlock
- import ru.lisenochek.mcrust.objects.misc.Durability
- import ru.lisenochek.mcrust.objects.misc.Radtown
- import ru.lisenochek.mcrust.objects.misc.Sounds
- import ru.lisenochek.mcrust.sql.SQLManager
- import ru.lisenochek.mcrust.utils.ISBuilder
- import ru.lisenochek.mcrust.utils.Utils
- import java.util.Arrays
- class BuildingListener : Listener {
- @EventHandler
- fun onClickOnBuildings(e: PlayerInteractMalletEvent) {
- val player = e.player
- if (Radtown.locationsMap[e.clickedBlock.location] != null && !player.hasPermission("mcrust.admin")) {
- Utils.sendBarMessage(player, "&7Здесь &cнельзя &7работать киянкой")
- return
- }
- if (player.isSneaking) {
- 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)")
- return
- }
- val cupboard = Cupboard.locationsMap[e.clickedBlock.location]
- if (cupboard != null && !cupboard.ownersList.contains(player.uniqueId) && !player.hasPermission("mcrust.admin")) {
- Utils.sendBarMessage(player, "&7Только &cавторизованные &7в шкафу &cигроки &7могут работать киянкой")
- return
- }
- if (Arrays.asList(CustomBlock.Type.HAY_CONSTRUCTION, CustomBlock.Type.WOODEN_CONSTRUCTION, CustomBlock.Type.STONE_CONSTRUCTION, CustomBlock.Type.METAL_CONSTRUCTION).contains(e.buildings.type)) {
- Constructions.getConstuction(e.buildings)!!.openUpgradeGUI(player)
- return
- }
- Buildings.openGUI(player, e.buildings)
- }
- @EventHandler
- fun onUpgradeConstructionsGUIClick(e: InventoryClickEvent) {
- val player = e.whoClicked as Player
- if (e.inventory.name != Utils.stripColor("&2&lУлучшение конструкции")) return
- if (e.currentItem == null || e.currentItem.type == Material.AIR) return
- e.isCancelled = true
- player.playSound(player.location, org.bukkit.Sound.UI_BUTTON_CLICK, 1f, 1f)
- if (e.clickedInventory.name != Utils.stripColor("&2&lУлучшение конструкции")) return
- val builder = ISBuilder.getBuilder(e.currentItem)
- if (!builder.hasTag("location")) return
- val location = Utils.deserialiseLocation(builder.getStringTag("location"))
- val buildings = Buildings.buildingsMap[location]
- player.closeInventory()
- if (buildings.getType() !== CustomBlock.getBlock(location!!.block).type) return
- Durability.getDurability(player.inventory.itemInMainHand).damage(player)
- if (e.currentItem.itemMeta.displayName == Utils.stripColor("&a&l» &e&lОтремонтировать")) {
- buildings.setHealth(buildings.getType().maxHealth)
- SQLManager.getManager().updateBuildingData(buildings)
- player.world.playSound(location, Sounds.REPAIR.soundName, 1f, 1f)
- 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)
- Utils.removeItems(player, ISBuilder.getBuilder(buildings.getType().resourceStack).setAmount(builder.getIntTag("repairCost")).stack)
- Utils.sendBarMessage(player, "&7Я &aпочинил &7конструкцию")
- return
- }
- if (e.currentItem.itemMeta.displayName == Utils.stripColor("&a&l» &c&lСломать")) {
- buildings.remove(player)
- player.world.playSound(location, Sounds.BREAK.soundName, 1f, 1f)
- Utils.sendBarMessage(player, "&7Я &aразрушил &7конструкцию")
- return
- }
- if (!builder.hasTag("upgradeType")) return
- val type = Constructions.Type.valueOf(builder.getStringTag("upgradeType"))
- buildings.setType(type.blockType)
- buildings.setHealth(type.blockType.maxHealth)
- buildings.setDecayTime(type.blockType.decayTime)
- buildings.setBlockDecayTime(type.blockType.blockDecayTime)
- SQLManager.getManager().updateBuildingData(buildings)
- CustomBlock.setMaterialData(location!!.block, type.blockType.materialData)
- player.world.playSound(player.location, Arrays.asList(*type.soundUpgrade)[Utils.getRandom().nextInt(type.soundUpgrade.size)], 1f, 1f)
- Bukkit.getPluginManager().callEvent(PlayerUpgradeConstructionEvent(player, location, type))
- 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)
- Utils.removeItems(player, ISBuilder.getBuilder(buildings.getType().resourceStack).setAmount(2).stack)
- Utils.sendBarMessage(player, "&7Я &aулучшил &7конструкцию")
- }
- @EventHandler
- fun onBuildingsGUIClick(e: InventoryClickEvent) {
- val player = e.whoClicked as Player
- if (e.inventory.name != Utils.stripColor("&2&lКонструкция")) return
- if (e.currentItem == null || e.currentItem.type == Material.AIR) return
- e.isCancelled = true
- player.playSound(player.location, org.bukkit.Sound.UI_BUTTON_CLICK, 1f, 1f)
- if (e.clickedInventory.name != Utils.stripColor("&2&lКонструкция")) return
- val builder = ISBuilder.getBuilder(e.currentItem)
- if (!builder.hasTag("location")) return
- val location = Utils.deserialiseLocation(builder.getStringTag("location"))
- val buildings = Buildings.buildingsMap[location]
- val customBlock = CustomBlock.getBlock(location!!.block)
- player.closeInventory()
- if (buildings == null) return
- if (buildings.type !== customBlock.type) return
- Durability.getDurability(player.inventory.itemInMainHand).damage(player)
- 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)
- if (e.currentItem.itemMeta.displayName == Utils.stripColor("&a&l» &e&lОтремонтировать")) {
- buildings.health = buildings.type.maxHealth
- SQLManager.getManager().updateBuildingData(buildings)
- player.world.playSound(location, Sounds.REPAIR.soundName, 1f, 1f)
- Utils.removeItems(player, ISBuilder.getBuilder(buildings.type.resourceStack).setAmount(builder.getIntTag("repairCost")).stack)
- Utils.sendBarMessage(player, "&7Я &aпочинил &7конструкцию")
- return
- }
- if (e.currentItem.itemMeta.displayName != Utils.stripColor("&a&l» &c&lСломать")) return
- if (buildings.type.drop != null) customBlock.dropItem(player)
- buildings.remove(player)
- player.world.playSound(location, Sounds.BREAK.soundName, 1f, 1f)
- Utils.sendBarMessage(player, "&7Я &aразрушил &7конструкцию")
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement