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,
LAUNCH,
GRACE_PERIOD,
GAME
GAME,
DRAGON
}

View file

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

View file

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

View file

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

View file

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

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

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

View file

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

View file

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

View file

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

View file

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