feat: end fight
This commit is contained in:
parent
da9c02dbbb
commit
47b9690261
13 changed files with 107 additions and 49 deletions
|
@ -4,5 +4,6 @@ enum class GameState {
|
|||
WAITING,
|
||||
LAUNCH,
|
||||
GRACE_PERIOD,
|
||||
GAME
|
||||
GAME,
|
||||
DRAGON
|
||||
}
|
|
@ -1,5 +1,7 @@
|
|||
package xyz.atnrch.dragon
|
||||
|
||||
import com.google.common.cache.Cache
|
||||
import com.google.common.cache.CacheBuilder
|
||||
import org.apache.commons.io.FileUtils
|
||||
import org.bukkit.*
|
||||
import org.bukkit.plugin.java.JavaPlugin
|
||||
|
@ -7,6 +9,7 @@ import org.bukkit.scheduler.BukkitTask
|
|||
import xyz.atnrch.dragon.commands.MainCommand
|
||||
import xyz.atnrch.dragon.event.*
|
||||
import xyz.atnrch.dragon.event.end.BedInteractListener
|
||||
import xyz.atnrch.dragon.event.end.BlockPlaceListener
|
||||
import xyz.atnrch.dragon.event.end.EnderDragonListener
|
||||
import xyz.atnrch.dragon.event.waiting.WaitingListener
|
||||
import xyz.atnrch.dragon.player.PlayerManager
|
||||
|
@ -18,29 +21,35 @@ import xyz.atnrch.dragon.teams.TeamManager
|
|||
import xyz.atnrch.dragon.world.PreviousWorldUtils
|
||||
import xyz.atnrch.dragon.world.WorldManager
|
||||
import java.io.File
|
||||
import java.time.Duration
|
||||
import java.time.Instant
|
||||
import java.util.*
|
||||
|
||||
class RunnerDragon : JavaPlugin() {
|
||||
companion object {
|
||||
lateinit var instance: RunnerDragon
|
||||
|
||||
val TITLE =
|
||||
"${ChatColor.LIGHT_PURPLE}${ChatColor.BOLD}${ChatColor.ITALIC}Runner${ChatColor.DARK_PURPLE}${ChatColor.BOLD}${ChatColor.ITALIC}Dragon"
|
||||
|
||||
val TITLE_MSG =
|
||||
"${ChatColor.WHITE}[${ChatColor.LIGHT_PURPLE}${ChatColor.BOLD}RUNNER${ChatColor.DARK_PURPLE}${ChatColor.BOLD}DRAGON${ChatColor.WHITE}]"
|
||||
|
||||
var STATE = GameState.GAME
|
||||
|
||||
const val TEAM_MAX_SIZE = 2
|
||||
const val NUMBER_OF_TEAMS = 6
|
||||
|
||||
val TITLE =
|
||||
"${ChatColor.LIGHT_PURPLE}${ChatColor.BOLD}${ChatColor.ITALIC}Runner${ChatColor.DARK_PURPLE}${ChatColor.BOLD}${ChatColor.ITALIC}Dragon"
|
||||
val TITLE_MSG =
|
||||
"${ChatColor.WHITE}[${ChatColor.LIGHT_PURPLE}${ChatColor.BOLD}RUNNER${ChatColor.DARK_PURPLE}${ChatColor.BOLD}DRAGON${ChatColor.WHITE}]"
|
||||
val LAST_BED_INTERACT: Cache<UUID, Instant> = CacheBuilder.newBuilder()
|
||||
.expireAfterWrite(Duration.ofSeconds(10))
|
||||
.build()
|
||||
|
||||
var STATE = GameState.GAME
|
||||
var DEAD_COWS = 0
|
||||
var TIME = 0
|
||||
var SPAWN_HEIGHT = 300
|
||||
|
||||
var SPAWN_HEIGHT = 300
|
||||
var TEAM_LOCK = false
|
||||
var NETHER_PORTAL_ENTERED = false
|
||||
var END_PORTAL_ENTERED = false
|
||||
var TIMER_TASK: BukkitTask? = null
|
||||
|
||||
var GRACE_PERIOD_TASK: BukkitTask? = null
|
||||
|
||||
lateinit var SPAWN: Location
|
||||
|
@ -100,6 +109,7 @@ class RunnerDragon : JavaPlugin() {
|
|||
server.pluginManager.registerEvents(PlayerQuitListener(), this)
|
||||
server.pluginManager.registerEvents(PlayerRespawnListener(), this)
|
||||
server.pluginManager.registerEvents(WaitingListener(), this)
|
||||
server.pluginManager.registerEvents(BlockPlaceListener(), this)
|
||||
server.pluginManager.registerEvents(EntityDeathListener(), this)
|
||||
server.pluginManager.registerEvents(EntityDamageListener(), this)
|
||||
getCommand("rd")!!.setExecutor(MainCommand())
|
||||
|
|
|
@ -50,7 +50,7 @@ class TeamsSubCommand {
|
|||
val dragonPlayer = instance.playerManager.getPlayer(it.uniqueId)
|
||||
dragonPlayer.setTeam(coloredTeam)
|
||||
dragonPlayer.updateDisplayName()
|
||||
player.sendMessage("${target.name} est passé dans l'équipe ${coloredTeam.name}")
|
||||
player.sendMessage("${target.name} est passé dans l'équipe ${coloredTeam.displayName}")
|
||||
}
|
||||
}
|
||||
} else {
|
||||
|
|
|
@ -14,7 +14,7 @@ class EntityDamageListener : Listener {
|
|||
if (event.entity is Player) {
|
||||
val player = (event.entity as Player)
|
||||
if (player.gameMode == GameMode.SURVIVAL) {
|
||||
if (RunnerDragon.STATE == GameState.GRACE_PERIOD && event.cause == EntityDamageEvent.DamageCause.ENTITY_ATTACK) {
|
||||
if ((RunnerDragon.STATE == GameState.GRACE_PERIOD || RunnerDragon.STATE == GameState.DRAGON) && event.cause == EntityDamageEvent.DamageCause.ENTITY_ATTACK) {
|
||||
event.isCancelled = true
|
||||
} else if (RunnerDragon.STATE == GameState.LAUNCH || RunnerDragon.STATE == GameState.WAITING) {
|
||||
event.isCancelled = true
|
||||
|
|
|
@ -1,26 +1,16 @@
|
|||
package xyz.atnrch.dragon.event.end
|
||||
|
||||
import com.google.common.cache.Cache
|
||||
import com.google.common.cache.CacheBuilder
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerBedEnterEvent
|
||||
import java.time.Duration
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import java.time.Instant
|
||||
import java.util.*
|
||||
|
||||
class BedInteractListener : Listener {
|
||||
companion object {
|
||||
val LAST_BED_INTERACT: Cache<UUID, Instant> = CacheBuilder.newBuilder()
|
||||
.expireAfterWrite(Duration.ofSeconds(10))
|
||||
.build()
|
||||
}
|
||||
|
||||
@EventHandler
|
||||
fun onBedInteract(event: PlayerBedEnterEvent) {
|
||||
if (event.bedEnterResult == PlayerBedEnterEvent.BedEnterResult.NOT_POSSIBLE_HERE) {
|
||||
return
|
||||
RunnerDragon.LAST_BED_INTERACT.put(event.player.uniqueId, Instant.now())
|
||||
}
|
||||
LAST_BED_INTERACT.put(event.player.uniqueId, Instant.now())
|
||||
}
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
package xyz.atnrch.dragon.event.end
|
||||
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.World
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.block.BlockPlaceEvent
|
||||
|
||||
class BlockPlaceListener : Listener {
|
||||
@EventHandler
|
||||
fun onBlockPlace(event: BlockPlaceEvent) {
|
||||
if (event.block.location.world!!.environment == World.Environment.NORMAL && event.blockPlaced.type == Material.END_PORTAL) {
|
||||
event.isCancelled = true
|
||||
}
|
||||
}
|
||||
}
|
|
@ -2,7 +2,12 @@ package xyz.atnrch.dragon.event.end
|
|||
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.entity.*
|
||||
import org.bukkit.Sound
|
||||
import org.bukkit.World.Environment
|
||||
import org.bukkit.entity.EnderDragon
|
||||
import org.bukkit.entity.Entity
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.entity.Projectile
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.entity.EntityDamageEvent
|
||||
|
@ -13,15 +18,14 @@ import java.util.*
|
|||
class EnderDragonListener : Listener {
|
||||
@EventHandler
|
||||
fun onEnderDragonDeath(event: EntityDeathEvent) {
|
||||
if (event.entity.type == EntityType.ENDER_DRAGON || event.entity is EnderDragon) {
|
||||
if (event.entity is EnderDragon) {
|
||||
val dragon = event.entity as EnderDragon
|
||||
val entity = event.entity
|
||||
val damageEvent = entity.lastDamageCause ?: return
|
||||
val damageEvent = dragon.lastDamageCause ?: return
|
||||
|
||||
var player: Player? = null
|
||||
when (damageEvent.cause) {
|
||||
EntityDamageEvent.DamageCause.BLOCK_EXPLOSION -> {
|
||||
val first: Optional<UUID> = BedInteractListener.LAST_BED_INTERACT.asMap().entries.stream()
|
||||
val first: Optional<UUID> = RunnerDragon.LAST_BED_INTERACT.asMap().entries.stream()
|
||||
.sorted { a, b -> b.value.compareTo(a.value) }
|
||||
.map { it.key }
|
||||
.findFirst()
|
||||
|
@ -43,14 +47,19 @@ class EnderDragonListener : Listener {
|
|||
else -> {}
|
||||
}
|
||||
|
||||
println(player?.name)
|
||||
val dragonPlayer = player?.uniqueId?.let { RunnerDragon.instance.playerManager.getPlayer(it) }
|
||||
val team = dragonPlayer?.getTeam()
|
||||
println(team?.name)
|
||||
if (dragon.dragonBattle?.hasBeenPreviouslyKilled()?.not() == true) {
|
||||
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.GOLD}${ChatColor.BOLD}VICTOIRE !")
|
||||
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.GOLD}${ChatColor.BOLD}LE DRAGON A ÉTÉ TUÉ PAR L'ÉQUIPE ${team?.name}!")
|
||||
Bukkit.getOnlinePlayers().forEach {
|
||||
if (it.location.world!!.environment.equals(Environment.THE_END).not()) {
|
||||
it.playSound(it.location, Sound.ENTITY_ENDER_DRAGON_DEATH, 1f, 0.5f)
|
||||
}
|
||||
}
|
||||
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.GOLD}${ChatColor.BOLD}VICTOIRE !")
|
||||
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.GOLD}${ChatColor.BOLD}LE DRAGON A ÉTÉ TUÉ PAR L'ÉQUIPE ${team?.displayName}${ChatColor.GOLD}${ChatColor.BOLD}!")
|
||||
}
|
||||
|
||||
SecondFight.start(dragon, dragonPlayer)
|
||||
}
|
||||
}
|
||||
}
|
32
src/main/kotlin/xyz/atnrch/dragon/event/end/SecondFight.kt
Normal file
32
src/main/kotlin/xyz/atnrch/dragon/event/end/SecondFight.kt
Normal file
|
@ -0,0 +1,32 @@
|
|||
package xyz.atnrch.dragon.event.end
|
||||
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.Sound
|
||||
import org.bukkit.World
|
||||
import org.bukkit.entity.EnderDragon
|
||||
import org.bukkit.potion.PotionEffect
|
||||
import org.bukkit.potion.PotionEffectType
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.atnrch.dragon.player.DragonPlayer
|
||||
|
||||
class SecondFight {
|
||||
companion object {
|
||||
fun start(dragon: EnderDragon, dragonPlayer: DragonPlayer?) {
|
||||
for (i in 0..2) {
|
||||
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.BOLD}${ChatColor.RED}???")
|
||||
}
|
||||
|
||||
Bukkit.getOnlinePlayers().forEach {
|
||||
if (it.location.world!!.environment != World.Environment.THE_END) {
|
||||
it.teleport(dragonPlayer!!.player.location)
|
||||
}
|
||||
it.addPotionEffect(PotionEffect(PotionEffectType.BLINDNESS, 5, 1))
|
||||
it.playSound(it.location, Sound.ENTITY_LIGHTNING_BOLT_IMPACT, 1f, 0.5f)
|
||||
}
|
||||
|
||||
dragon.dragonBattle!!.initiateRespawn()
|
||||
dragon.dragonBattle!!.resetCrystals()
|
||||
}
|
||||
}
|
||||
}
|
|
@ -14,11 +14,11 @@ import xyz.atnrch.dragon.teams.Team
|
|||
class CandleItem(private val team: Team) : BaseItem() {
|
||||
|
||||
override fun getItemProvider(): ItemProvider {
|
||||
val material = CandleColor.getFromTeamColor(team.color)
|
||||
val material = CandleColor.getFromTeamColor(team.teamColor)
|
||||
val itemBuilder = ItemBuilder(material)
|
||||
itemBuilder.setDisplayName("${team.color.chatColor}Rejoindre l'équipe")
|
||||
itemBuilder.setDisplayName("${team.teamColor.chatColor}Rejoindre l'équipe")
|
||||
team.players.forEach { player ->
|
||||
itemBuilder.addLoreLines("${ChatColor.DARK_GRAY}- ${team.color.chatColor}${player.player.name}")
|
||||
itemBuilder.addLoreLines("${ChatColor.DARK_GRAY}- ${team.teamColor.chatColor}${player.player.name}")
|
||||
}
|
||||
return itemBuilder
|
||||
}
|
||||
|
@ -30,7 +30,7 @@ class CandleItem(private val team: Team) : BaseItem() {
|
|||
} else if (it.getTeam()!! == team) {
|
||||
it.sendMessage("${ChatColor.RED}Vous êtes déjà dans cette équipe.")
|
||||
} else {
|
||||
it.sendMessage("Vous êtes désormais dans l'équipe: ${team.name}")
|
||||
it.sendMessage("Vous êtes désormais dans l'équipe: ${team.displayName}")
|
||||
it.setTeam(team)
|
||||
it.updateDisplayName()
|
||||
}
|
||||
|
|
|
@ -74,7 +74,7 @@ class DragonPlayer(uuid: UUID) {
|
|||
}
|
||||
|
||||
fun updateDisplayName() {
|
||||
NickAPI.nick(player, "${getTeam()!!.color.chatColor}${player.name}")
|
||||
NickAPI.nick(player, "${getTeam()!!.teamColor.chatColor}${player.name}")
|
||||
NickAPI.refreshPlayer(player)
|
||||
}
|
||||
|
||||
|
|
|
@ -5,13 +5,13 @@ import xyz.atnrch.dragon.player.DragonPlayer
|
|||
import java.util.*
|
||||
|
||||
class Team(
|
||||
val color: TeamColor,
|
||||
var name: String = "undefined",
|
||||
val teamColor: TeamColor,
|
||||
var displayName: String = "undefined",
|
||||
val players: ArrayList<DragonPlayer> = arrayListOf(),
|
||||
private val deaths: Int = 0
|
||||
) {
|
||||
init {
|
||||
name = "${color.chatColor}${color.chatColor.name}"
|
||||
displayName = "${teamColor.chatColor}${teamColor.displayName}"
|
||||
}
|
||||
|
||||
companion object {
|
||||
|
|
|
@ -3,12 +3,12 @@ package xyz.atnrch.dragon.teams
|
|||
import org.bukkit.ChatColor
|
||||
import org.bukkit.Color
|
||||
|
||||
enum class TeamColor(val chatColor: ChatColor, val color: Color) {
|
||||
NONE(ChatColor.GRAY, Color.GRAY),
|
||||
BLUE(ChatColor.BLUE, Color.BLUE),
|
||||
YELLOW(ChatColor.YELLOW, Color.YELLOW),
|
||||
RED(ChatColor.RED, Color.RED),
|
||||
GREEN(ChatColor.DARK_GREEN, Color.GREEN),
|
||||
ORANGE(ChatColor.GOLD, Color.ORANGE),
|
||||
PURPLE(ChatColor.LIGHT_PURPLE, Color.PURPLE)
|
||||
enum class TeamColor(val chatColor: ChatColor, val color: Color, val displayName: String) {
|
||||
NONE(ChatColor.GRAY, Color.GRAY, "Grise"),
|
||||
BLUE(ChatColor.BLUE, Color.BLUE, "Bleue"),
|
||||
YELLOW(ChatColor.YELLOW, Color.YELLOW, "Jaune"),
|
||||
RED(ChatColor.RED, Color.RED, "Rouge"),
|
||||
GREEN(ChatColor.DARK_GREEN, Color.GREEN, "Verte"),
|
||||
ORANGE(ChatColor.GOLD, Color.ORANGE, "Orange"),
|
||||
PURPLE(ChatColor.LIGHT_PURPLE, Color.PURPLE, "Violette")
|
||||
}
|
|
@ -47,6 +47,6 @@ class TeamManager(
|
|||
}
|
||||
|
||||
fun getTeamColorsNames(): List<String> {
|
||||
return getTeams().map { team -> "${team.color.chatColor}${team.color.chatColor.name}" }
|
||||
return getTeams().map { team -> "${team.teamColor.chatColor}${team.teamColor.chatColor.name}" }
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue