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,
|
WAITING,
|
||||||
LAUNCH,
|
LAUNCH,
|
||||||
GRACE_PERIOD,
|
GRACE_PERIOD,
|
||||||
GAME
|
GAME,
|
||||||
|
DRAGON
|
||||||
}
|
}
|
|
@ -1,5 +1,7 @@
|
||||||
package xyz.atnrch.dragon
|
package xyz.atnrch.dragon
|
||||||
|
|
||||||
|
import com.google.common.cache.Cache
|
||||||
|
import com.google.common.cache.CacheBuilder
|
||||||
import org.apache.commons.io.FileUtils
|
import org.apache.commons.io.FileUtils
|
||||||
import org.bukkit.*
|
import org.bukkit.*
|
||||||
import org.bukkit.plugin.java.JavaPlugin
|
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.commands.MainCommand
|
||||||
import xyz.atnrch.dragon.event.*
|
import xyz.atnrch.dragon.event.*
|
||||||
import xyz.atnrch.dragon.event.end.BedInteractListener
|
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.end.EnderDragonListener
|
||||||
import xyz.atnrch.dragon.event.waiting.WaitingListener
|
import xyz.atnrch.dragon.event.waiting.WaitingListener
|
||||||
import xyz.atnrch.dragon.player.PlayerManager
|
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.PreviousWorldUtils
|
||||||
import xyz.atnrch.dragon.world.WorldManager
|
import xyz.atnrch.dragon.world.WorldManager
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.time.Duration
|
||||||
|
import java.time.Instant
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
class RunnerDragon : JavaPlugin() {
|
class RunnerDragon : JavaPlugin() {
|
||||||
companion object {
|
companion object {
|
||||||
lateinit var instance: RunnerDragon
|
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 TEAM_MAX_SIZE = 2
|
||||||
const val NUMBER_OF_TEAMS = 6
|
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 DEAD_COWS = 0
|
||||||
var TIME = 0
|
var TIME = 0
|
||||||
var SPAWN_HEIGHT = 300
|
|
||||||
|
|
||||||
|
var SPAWN_HEIGHT = 300
|
||||||
var TEAM_LOCK = false
|
var TEAM_LOCK = false
|
||||||
var NETHER_PORTAL_ENTERED = false
|
var NETHER_PORTAL_ENTERED = false
|
||||||
var END_PORTAL_ENTERED = false
|
var END_PORTAL_ENTERED = false
|
||||||
var TIMER_TASK: BukkitTask? = null
|
var TIMER_TASK: BukkitTask? = null
|
||||||
|
|
||||||
var GRACE_PERIOD_TASK: BukkitTask? = null
|
var GRACE_PERIOD_TASK: BukkitTask? = null
|
||||||
|
|
||||||
lateinit var SPAWN: Location
|
lateinit var SPAWN: Location
|
||||||
|
@ -100,6 +109,7 @@ class RunnerDragon : JavaPlugin() {
|
||||||
server.pluginManager.registerEvents(PlayerQuitListener(), this)
|
server.pluginManager.registerEvents(PlayerQuitListener(), this)
|
||||||
server.pluginManager.registerEvents(PlayerRespawnListener(), this)
|
server.pluginManager.registerEvents(PlayerRespawnListener(), this)
|
||||||
server.pluginManager.registerEvents(WaitingListener(), this)
|
server.pluginManager.registerEvents(WaitingListener(), this)
|
||||||
|
server.pluginManager.registerEvents(BlockPlaceListener(), this)
|
||||||
server.pluginManager.registerEvents(EntityDeathListener(), this)
|
server.pluginManager.registerEvents(EntityDeathListener(), this)
|
||||||
server.pluginManager.registerEvents(EntityDamageListener(), this)
|
server.pluginManager.registerEvents(EntityDamageListener(), this)
|
||||||
getCommand("rd")!!.setExecutor(MainCommand())
|
getCommand("rd")!!.setExecutor(MainCommand())
|
||||||
|
|
|
@ -50,7 +50,7 @@ class TeamsSubCommand {
|
||||||
val dragonPlayer = instance.playerManager.getPlayer(it.uniqueId)
|
val dragonPlayer = instance.playerManager.getPlayer(it.uniqueId)
|
||||||
dragonPlayer.setTeam(coloredTeam)
|
dragonPlayer.setTeam(coloredTeam)
|
||||||
dragonPlayer.updateDisplayName()
|
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 {
|
} else {
|
||||||
|
|
|
@ -14,7 +14,7 @@ class EntityDamageListener : Listener {
|
||||||
if (event.entity is Player) {
|
if (event.entity is Player) {
|
||||||
val player = (event.entity as Player)
|
val player = (event.entity as Player)
|
||||||
if (player.gameMode == GameMode.SURVIVAL) {
|
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
|
event.isCancelled = true
|
||||||
} else if (RunnerDragon.STATE == GameState.LAUNCH || RunnerDragon.STATE == GameState.WAITING) {
|
} else if (RunnerDragon.STATE == GameState.LAUNCH || RunnerDragon.STATE == GameState.WAITING) {
|
||||||
event.isCancelled = true
|
event.isCancelled = true
|
||||||
|
|
|
@ -1,26 +1,16 @@
|
||||||
package xyz.atnrch.dragon.event.end
|
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.EventHandler
|
||||||
import org.bukkit.event.Listener
|
import org.bukkit.event.Listener
|
||||||
import org.bukkit.event.player.PlayerBedEnterEvent
|
import org.bukkit.event.player.PlayerBedEnterEvent
|
||||||
import java.time.Duration
|
import xyz.atnrch.dragon.RunnerDragon
|
||||||
import java.time.Instant
|
import java.time.Instant
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
class BedInteractListener : Listener {
|
class BedInteractListener : Listener {
|
||||||
companion object {
|
|
||||||
val LAST_BED_INTERACT: Cache<UUID, Instant> = CacheBuilder.newBuilder()
|
|
||||||
.expireAfterWrite(Duration.ofSeconds(10))
|
|
||||||
.build()
|
|
||||||
}
|
|
||||||
|
|
||||||
@EventHandler
|
@EventHandler
|
||||||
fun onBedInteract(event: PlayerBedEnterEvent) {
|
fun onBedInteract(event: PlayerBedEnterEvent) {
|
||||||
if (event.bedEnterResult == PlayerBedEnterEvent.BedEnterResult.NOT_POSSIBLE_HERE) {
|
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.Bukkit
|
||||||
import org.bukkit.ChatColor
|
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.EventHandler
|
||||||
import org.bukkit.event.Listener
|
import org.bukkit.event.Listener
|
||||||
import org.bukkit.event.entity.EntityDamageEvent
|
import org.bukkit.event.entity.EntityDamageEvent
|
||||||
|
@ -13,15 +18,14 @@ import java.util.*
|
||||||
class EnderDragonListener : Listener {
|
class EnderDragonListener : Listener {
|
||||||
@EventHandler
|
@EventHandler
|
||||||
fun onEnderDragonDeath(event: EntityDeathEvent) {
|
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 dragon = event.entity as EnderDragon
|
||||||
val entity = event.entity
|
val damageEvent = dragon.lastDamageCause ?: return
|
||||||
val damageEvent = entity.lastDamageCause ?: return
|
|
||||||
|
|
||||||
var player: Player? = null
|
var player: Player? = null
|
||||||
when (damageEvent.cause) {
|
when (damageEvent.cause) {
|
||||||
EntityDamageEvent.DamageCause.BLOCK_EXPLOSION -> {
|
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) }
|
.sorted { a, b -> b.value.compareTo(a.value) }
|
||||||
.map { it.key }
|
.map { it.key }
|
||||||
.findFirst()
|
.findFirst()
|
||||||
|
@ -43,14 +47,19 @@ class EnderDragonListener : Listener {
|
||||||
else -> {}
|
else -> {}
|
||||||
}
|
}
|
||||||
|
|
||||||
println(player?.name)
|
|
||||||
val dragonPlayer = player?.uniqueId?.let { RunnerDragon.instance.playerManager.getPlayer(it) }
|
val dragonPlayer = player?.uniqueId?.let { RunnerDragon.instance.playerManager.getPlayer(it) }
|
||||||
val team = dragonPlayer?.getTeam()
|
val team = dragonPlayer?.getTeam()
|
||||||
println(team?.name)
|
|
||||||
if (dragon.dragonBattle?.hasBeenPreviouslyKilled()?.not() == true) {
|
if (dragon.dragonBattle?.hasBeenPreviouslyKilled()?.not() == true) {
|
||||||
|
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}VICTOIRE !")
|
||||||
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.GOLD}${ChatColor.BOLD}LE DRAGON A ÉTÉ TUÉ PAR L'ÉQUIPE ${team?.name}!")
|
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() {
|
class CandleItem(private val team: Team) : BaseItem() {
|
||||||
|
|
||||||
override fun getItemProvider(): ItemProvider {
|
override fun getItemProvider(): ItemProvider {
|
||||||
val material = CandleColor.getFromTeamColor(team.color)
|
val material = CandleColor.getFromTeamColor(team.teamColor)
|
||||||
val itemBuilder = ItemBuilder(material)
|
val itemBuilder = ItemBuilder(material)
|
||||||
itemBuilder.setDisplayName("${team.color.chatColor}Rejoindre l'équipe")
|
itemBuilder.setDisplayName("${team.teamColor.chatColor}Rejoindre l'équipe")
|
||||||
team.players.forEach { player ->
|
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
|
return itemBuilder
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ class CandleItem(private val team: Team) : BaseItem() {
|
||||||
} else if (it.getTeam()!! == team) {
|
} else if (it.getTeam()!! == team) {
|
||||||
it.sendMessage("${ChatColor.RED}Vous êtes déjà dans cette équipe.")
|
it.sendMessage("${ChatColor.RED}Vous êtes déjà dans cette équipe.")
|
||||||
} else {
|
} 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.setTeam(team)
|
||||||
it.updateDisplayName()
|
it.updateDisplayName()
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ class DragonPlayer(uuid: UUID) {
|
||||||
}
|
}
|
||||||
|
|
||||||
fun updateDisplayName() {
|
fun updateDisplayName() {
|
||||||
NickAPI.nick(player, "${getTeam()!!.color.chatColor}${player.name}")
|
NickAPI.nick(player, "${getTeam()!!.teamColor.chatColor}${player.name}")
|
||||||
NickAPI.refreshPlayer(player)
|
NickAPI.refreshPlayer(player)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,13 +5,13 @@ import xyz.atnrch.dragon.player.DragonPlayer
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class Team(
|
class Team(
|
||||||
val color: TeamColor,
|
val teamColor: TeamColor,
|
||||||
var name: String = "undefined",
|
var displayName: String = "undefined",
|
||||||
val players: ArrayList<DragonPlayer> = arrayListOf(),
|
val players: ArrayList<DragonPlayer> = arrayListOf(),
|
||||||
private val deaths: Int = 0
|
private val deaths: Int = 0
|
||||||
) {
|
) {
|
||||||
init {
|
init {
|
||||||
name = "${color.chatColor}${color.chatColor.name}"
|
displayName = "${teamColor.chatColor}${teamColor.displayName}"
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
|
|
|
@ -3,12 +3,12 @@ package xyz.atnrch.dragon.teams
|
||||||
import org.bukkit.ChatColor
|
import org.bukkit.ChatColor
|
||||||
import org.bukkit.Color
|
import org.bukkit.Color
|
||||||
|
|
||||||
enum class TeamColor(val chatColor: ChatColor, val color: Color) {
|
enum class TeamColor(val chatColor: ChatColor, val color: Color, val displayName: String) {
|
||||||
NONE(ChatColor.GRAY, Color.GRAY),
|
NONE(ChatColor.GRAY, Color.GRAY, "Grise"),
|
||||||
BLUE(ChatColor.BLUE, Color.BLUE),
|
BLUE(ChatColor.BLUE, Color.BLUE, "Bleue"),
|
||||||
YELLOW(ChatColor.YELLOW, Color.YELLOW),
|
YELLOW(ChatColor.YELLOW, Color.YELLOW, "Jaune"),
|
||||||
RED(ChatColor.RED, Color.RED),
|
RED(ChatColor.RED, Color.RED, "Rouge"),
|
||||||
GREEN(ChatColor.DARK_GREEN, Color.GREEN),
|
GREEN(ChatColor.DARK_GREEN, Color.GREEN, "Verte"),
|
||||||
ORANGE(ChatColor.GOLD, Color.ORANGE),
|
ORANGE(ChatColor.GOLD, Color.ORANGE, "Orange"),
|
||||||
PURPLE(ChatColor.LIGHT_PURPLE, Color.PURPLE)
|
PURPLE(ChatColor.LIGHT_PURPLE, Color.PURPLE, "Violette")
|
||||||
}
|
}
|
|
@ -47,6 +47,6 @@ class TeamManager(
|
||||||
}
|
}
|
||||||
|
|
||||||
fun getTeamColorsNames(): List<String> {
|
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