forked from SteamWar/SteamWar
Add TNTLeague Module
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
/*
|
||||
* This file is a part of the SteamWar software.
|
||||
*
|
||||
* Copyright (C) 2024 SteamWar.de-Serverteam
|
||||
*
|
||||
* This program is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Affero General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Affero General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public License
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package de.steamwar.tntleague.events
|
||||
|
||||
import org.bukkit.event.Listener
|
||||
|
||||
object DummyListener: Listener {
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
package de.steamwar.tntleague.events
|
||||
|
||||
import de.steamwar.tntleague.config.TNTLeagueWorldConfig
|
||||
import de.steamwar.tntleague.game.TNTLeagueGame
|
||||
import de.steamwar.tntleague.game.TNTLeagueTeam
|
||||
import de.steamwar.tntleague.inventory.SWInventoryHolder
|
||||
import de.steamwar.tntleague.plugin
|
||||
import de.steamwar.tntleague.util.*
|
||||
import io.papermc.paper.event.player.AsyncChatEvent
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.EventPriority
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.entity.PlayerDeathEvent
|
||||
import org.bukkit.event.inventory.InventoryClickEvent
|
||||
import org.bukkit.event.player.PlayerJoinEvent
|
||||
import org.bukkit.event.player.PlayerMoveEvent
|
||||
import org.bukkit.event.player.PlayerQuitEvent
|
||||
import org.bukkit.event.player.PlayerRespawnEvent
|
||||
|
||||
object GlobalListener: Listener {
|
||||
|
||||
@EventHandler(priority = EventPriority.LOW)
|
||||
fun onPlayerJoin(e: PlayerJoinEvent) {
|
||||
e.joinMessage(null)
|
||||
with(e.player) {
|
||||
teleport(TNTLeagueWorldConfig.lobby)
|
||||
inventory.clear()
|
||||
plugin.server.broadcast(translate("join", name.bold()).basic())
|
||||
isOp = false
|
||||
gameMode = GameMode.SPECTATOR
|
||||
respawnLocation = TNTLeagueWorldConfig.lobby
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.HIGHEST)
|
||||
fun onPlayerQuit(e: PlayerQuitEvent) {
|
||||
e.quitMessage(null)
|
||||
plugin.server.broadcast(translate("quit", e.player.name.bold().colorByTeam(TNTLeagueGame.getTeam(e.player))).basic())
|
||||
TNTLeagueGame.playerLeave(e.player)
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
fun onPlayerClick(e: InventoryClickEvent) {
|
||||
val holder = e.inventory.getHolder(false)
|
||||
if (holder is SWInventoryHolder && e.clickedInventory == holder._inventory) {
|
||||
e.isCancelled = true
|
||||
holder.handleInventoryClick(e)
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
fun onPlayerMove(e: PlayerMoveEvent) {
|
||||
if (e.to.blockY < TNTLeagueWorldConfig.minHeight) {
|
||||
when (val team = TNTLeagueGame.getTeam(e.player)) {
|
||||
is TNTLeagueTeam -> e.player.teleport(team.config.spawnLocation)
|
||||
null -> e.player.teleport(TNTLeagueWorldConfig.blueTeam.spawnLocation)
|
||||
}
|
||||
}
|
||||
|
||||
e.player.foodLevel = 20
|
||||
e.player.saturation = 20f
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onPlayerDeath(e: PlayerDeathEvent) {
|
||||
e.deathMessage(null)
|
||||
e.drops.clear()
|
||||
|
||||
e.itemsToKeep.removeIf { it.type != Material.DIAMOND_PICKAXE }
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onPlayerRespawn(e: PlayerRespawnEvent) {
|
||||
when (val team = TNTLeagueGame.getTeam(e.player)) {
|
||||
is TNTLeagueTeam -> e.respawnLocation = team.config.spawnLocation
|
||||
null -> e.respawnLocation = TNTLeagueWorldConfig.lobby
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onChat(e: AsyncChatEvent) {
|
||||
e.renderer { source, sourceDisplayName, message, _ ->
|
||||
translate("chat", sourceDisplayName.colorByTeam(TNTLeagueGame.getTeam(source)), message).basic()
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
package de.steamwar.tntleague.events
|
||||
|
||||
import de.steamwar.scoreboard.SWScoreboard
|
||||
import de.steamwar.tntleague.config.TNTLeagueWorldConfig
|
||||
import de.steamwar.tntleague.game.TNTLeagueGame
|
||||
import de.steamwar.tntleague.game.TNTLeagueTeam
|
||||
import de.steamwar.tntleague.inventory.DealerInventory
|
||||
import de.steamwar.tntleague.util.TNTLeagueScoreboard
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.Location
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.entity.EntityType
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.entity.EntityExplodeEvent
|
||||
import org.bukkit.event.entity.PlayerDeathEvent
|
||||
import org.bukkit.event.player.PlayerDropItemEvent
|
||||
import org.bukkit.event.player.PlayerInteractEntityEvent
|
||||
import org.bukkit.event.player.PlayerJoinEvent
|
||||
import org.bukkit.event.player.PlayerMoveEvent
|
||||
import org.bukkit.event.player.PlayerQuitEvent
|
||||
|
||||
object IngameListener: Listener {
|
||||
|
||||
@EventHandler
|
||||
fun onEntityInteract(e: PlayerInteractEntityEvent) {
|
||||
if (e.player.gameMode == GameMode.SPECTATOR) return
|
||||
|
||||
if(e.rightClicked.type == EntityType.VILLAGER) {
|
||||
e.isCancelled = true
|
||||
e.player.openInventory(DealerInventory(e.player).getInventory())
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onExplode(e: EntityExplodeEvent) {
|
||||
e.blockList().filter { it.type == TNTLeagueWorldConfig.targetMaterial }
|
||||
.groupBy { getTeamByTargetLocation(it.location) }
|
||||
.filterKeysNotNull()
|
||||
.mapValues { it.value.size }
|
||||
.forEach { it.key.damagedBlocks += it.value }
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onJoin(e: PlayerJoinEvent) {
|
||||
SWScoreboard.createScoreboard(e.player, TNTLeagueScoreboard(e.player))
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onMove(e: PlayerMoveEvent) {
|
||||
if (TNTLeagueGame.getTeam(e.player) != null) {
|
||||
if (e.to.blockX >= TNTLeagueWorldConfig.lobby.blockX && e.to.blockX <= TNTLeagueWorldConfig.lobby.blockX + 1 ||
|
||||
e.to.blockZ >= TNTLeagueWorldConfig.lobby.blockZ && e.to.blockZ <= TNTLeagueWorldConfig.lobby.blockZ + 1) {
|
||||
e.isCancelled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onDropPickaxe(e: PlayerDropItemEvent) {
|
||||
if (e.itemDrop.itemStack.type == Material.DIAMOND_PICKAXE) {
|
||||
e.isCancelled = true
|
||||
}
|
||||
}
|
||||
|
||||
private fun getTeamByTargetLocation(location: Location): TNTLeagueTeam? =
|
||||
when (location) {
|
||||
in TNTLeagueWorldConfig.redTeam.target -> TNTLeagueGame.redTeam
|
||||
in TNTLeagueWorldConfig.blueTeam.target -> TNTLeagueGame.blueTeam
|
||||
else -> null
|
||||
}
|
||||
|
||||
private fun <K, T> Map<K?, T>.filterKeysNotNull(destination: MutableMap<K, T> = mutableMapOf()): Map<K, T> {
|
||||
this.forEach { (t, u) -> if(t != null) destination[t] = u }
|
||||
return destination
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
package de.steamwar.tntleague.events
|
||||
|
||||
import de.steamwar.tntleague.game.TNTLeagueGame
|
||||
import de.steamwar.tntleague.plugin
|
||||
import de.steamwar.tntleague.util.basic
|
||||
import de.steamwar.tntleague.util.colorByTeam
|
||||
import de.steamwar.tntleague.util.translate
|
||||
import de.steamwar.tntleague.util.yellow
|
||||
import io.papermc.paper.util.Tick
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.EventPriority
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.block.Action
|
||||
import org.bukkit.event.entity.EntityDamageEvent
|
||||
import org.bukkit.event.inventory.InventoryClickEvent
|
||||
import org.bukkit.event.player.PlayerDropItemEvent
|
||||
import org.bukkit.event.player.PlayerInteractEvent
|
||||
import org.bukkit.event.player.PlayerJoinEvent
|
||||
import org.bukkit.event.player.PlayerQuitEvent
|
||||
|
||||
object LobbyListener: Listener {
|
||||
|
||||
@EventHandler
|
||||
fun onPlayerJoin(e: PlayerJoinEvent) {
|
||||
TNTLeagueGame.getFreeTeam()?.run {
|
||||
join(e.player)
|
||||
TNTLeagueGame.checkStart()
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler(priority = EventPriority.LOWEST)
|
||||
fun onPlayerQuit(e: PlayerQuitEvent) {
|
||||
val team = TNTLeagueGame.getTeam(e.player) ?: return
|
||||
team.leave(e.player)
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onPlayerDamage(e: EntityDamageEvent) {
|
||||
e.isCancelled = true
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onDropEvent(e: PlayerDropItemEvent) {
|
||||
e.isCancelled = true
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun interactEvent(e: PlayerInteractEvent) {
|
||||
val team = TNTLeagueGame.getTeam(e.player)
|
||||
if (e.action.isRightClick && team != null && e.item?.isSimilar(team.readyItem()) == true && team.opposite.leader != null) {
|
||||
team.isReady = !team.isReady
|
||||
}
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun inventoryClick(e: InventoryClickEvent) {
|
||||
if (e.clickedInventory == e.whoClicked.inventory) {
|
||||
e.isCancelled = true
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user