1
0
Fork 0

feat: end fight

This commit is contained in:
aro 2023-03-05 18:08:58 +01:00
parent da9c02dbbb
commit 47b9690261
13 changed files with 107 additions and 49 deletions

View file

@ -4,5 +4,6 @@ enum class GameState {
WAITING, WAITING,
LAUNCH, LAUNCH,
GRACE_PERIOD, GRACE_PERIOD,
GAME GAME,
DRAGON
} }

View file

@ -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())

View file

@ -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 {

View file

@ -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

View file

@ -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())
} }
} }

View file

@ -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
}
}
}

View file

@ -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)
} }
} }
} }

View 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()
}
}
}

View file

@ -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()
} }

View file

@ -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)
} }

View file

@ -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 {

View file

@ -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")
} }

View file

@ -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}" }
} }
} }