feat: en gros la mise à jour
This commit is contained in:
parent
f795dcd68f
commit
27fb3103f2
387 changed files with 16998 additions and 435 deletions
|
@ -1,46 +0,0 @@
|
|||
package xyz.atnrch.dragon.commands
|
||||
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.ChatColor
|
||||
import xyz.atnrch.dragon.GameState
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.atnrch.dragon.enumContains
|
||||
import xyz.atnrch.dragon.player.DragonPlayer
|
||||
import xyz.atnrch.dragon.tasks.StartGameTask
|
||||
|
||||
class GameSubCommand {
|
||||
fun run(sender: DragonPlayer, args: Array<String>) {
|
||||
if (args.isEmpty()) {
|
||||
sender.sendMessage("Argument manquant: /rd game (start/state)")
|
||||
return
|
||||
}
|
||||
|
||||
when (args[0]) {
|
||||
"end" -> {
|
||||
Bukkit.getOnlinePlayers().forEach {
|
||||
it.teleport(RunnerDragon.WORLD_END.spawnLocation)
|
||||
}
|
||||
}
|
||||
|
||||
"state" -> {
|
||||
if (args.size == 2) {
|
||||
if (enumContains<GameState>(args[1])) {
|
||||
val state = GameState.valueOf(args[1])
|
||||
RunnerDragon.instance.switchState(state)
|
||||
sender.sendMessage("${ChatColor.RED}État de jeu défini en: ${state.name}.")
|
||||
} else {
|
||||
sender.sendMessage("${ChatColor.RED}State invalide (WAITING/LAUNCH/GAME/END).")
|
||||
}
|
||||
} else {
|
||||
sender.sendMessage("${ChatColor.RED}Argument manquant.")
|
||||
}
|
||||
}
|
||||
|
||||
"start" -> {
|
||||
sender.sendMessage("Démarrage de la partie.")
|
||||
Bukkit.getOnlinePlayers().forEach { it.inventory.clear() }
|
||||
StartGameTask().runTaskTimer(RunnerDragon.instance, 0L, 20L)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
package xyz.atnrch.dragon.commands
|
||||
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandExecutor
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.entity.Player
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
|
||||
class MainCommand : CommandExecutor {
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<String>): Boolean {
|
||||
if (sender is Player) {
|
||||
val player: Player = sender
|
||||
val dragonPlayer = RunnerDragon.instance.playerManager.getPlayer(player.uniqueId)
|
||||
|
||||
if (player.isOp.not()) {
|
||||
dragonPlayer.sendMessage("Erreur: Status d'opérateur requis.")
|
||||
return true
|
||||
}
|
||||
|
||||
if (args.isEmpty()) {
|
||||
dragonPlayer.sendMessage("Argument manquant: /rd (teams/game/say)")
|
||||
return true
|
||||
}
|
||||
|
||||
when (args[0]) {
|
||||
"game" -> GameSubCommand().run(dragonPlayer, args.drop(1).toTypedArray())
|
||||
"teams" -> TeamsSubCommand().run(dragonPlayer, args.drop(1).toTypedArray())
|
||||
"say" -> {
|
||||
Bukkit.broadcastMessage(
|
||||
"${RunnerDragon.TITLE_MSG} ${ChatColor.RED}${ChatColor.BOLD}(ANNONCE) ${ChatColor.RESET}${
|
||||
args.drop(1).joinToString(" ", "", "")
|
||||
}"
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
|
@ -1,65 +0,0 @@
|
|||
package xyz.atnrch.dragon.commands
|
||||
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.ChatColor
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.atnrch.dragon.enumContains
|
||||
import xyz.atnrch.dragon.player.DragonPlayer
|
||||
|
||||
class TeamsSubCommand {
|
||||
fun run(player: DragonPlayer, args: Array<String>) {
|
||||
if (args.isEmpty()) {
|
||||
player.sendMessage(
|
||||
"""
|
||||
Configuration des équipes:
|
||||
${ChatColor.DARK_GRAY}- ${ChatColor.GOLD}Status: ${if (RunnerDragon.TEAM_LOCK) "${ChatColor.RED}fermées" else "${ChatColor.GREEN}ouvertes${ChatColor.RESET}."}
|
||||
${ChatColor.DARK_GRAY}- ${ChatColor.GOLD}Nombre: ${ChatColor.AQUA}${RunnerDragon.NUMBER_OF_TEAMS}
|
||||
${ChatColor.DARK_GRAY}- ${ChatColor.GOLD}Capacité: ${ChatColor.AQUA}${RunnerDragon.TEAM_MAX_SIZE}
|
||||
${ChatColor.DARK_GRAY}- ${ChatColor.GOLD}Équipes enregistrées: ${
|
||||
RunnerDragon.instance.teamManager.getTeamColorsNames().joinToString("${ChatColor.RESET}, ", "", "")
|
||||
}
|
||||
""".trimIndent()
|
||||
)
|
||||
return
|
||||
}
|
||||
|
||||
when (args[0]) {
|
||||
"lock" -> {
|
||||
RunnerDragon.TEAM_LOCK = RunnerDragon.TEAM_LOCK.not()
|
||||
Bukkit.getOnlinePlayers()
|
||||
.forEach {
|
||||
RunnerDragon.instance.playerManager.getPlayer(it.uniqueId)
|
||||
.setTeamItem(RunnerDragon.TEAM_LOCK.not())
|
||||
}
|
||||
player.sendMessage("Les équipes sont désormais: ${if (RunnerDragon.TEAM_LOCK) "${ChatColor.RED}fermées" else "${ChatColor.GREEN}ouvertes${ChatColor.RESET}."}")
|
||||
}
|
||||
|
||||
"swap" -> {
|
||||
if (args.size < 2) {
|
||||
player.sendMessage("${ChatColor.RED}Argument manquant.")
|
||||
} else {
|
||||
val target = Bukkit.getPlayer(args[1])
|
||||
val targetTeam = args[2]
|
||||
|
||||
if (enumContains<ChatColor>(targetTeam)) {
|
||||
val value: ChatColor = ChatColor.valueOf(targetTeam)
|
||||
target?.let {
|
||||
val instance = RunnerDragon.instance
|
||||
instance.teamManager.getOnColor(value)
|
||||
?.let { coloredTeam ->
|
||||
val dragonPlayer = instance.playerManager.getPlayer(it.uniqueId)
|
||||
dragonPlayer.setTeam(coloredTeam)
|
||||
dragonPlayer.updateDisplayName()
|
||||
player.sendMessage("${target.name} est passé dans l'équipe ${coloredTeam.displayName}")
|
||||
}
|
||||
}
|
||||
} else {
|
||||
player.sendMessage("${ChatColor.RED}Couleur invalide.")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
package xyz.atnrch.dragon.event
|
||||
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerQuitEvent
|
||||
|
||||
class PlayerQuitListener : Listener {
|
||||
@EventHandler
|
||||
fun onPlayerJoin(event: PlayerQuitEvent) {
|
||||
val player = event.player
|
||||
event.quitMessage = "(${ChatColor.RED}-${ChatColor.WHITE}) ${player.name}"
|
||||
}
|
||||
}
|
|
@ -1,41 +0,0 @@
|
|||
package xyz.atnrch.dragon.inventory
|
||||
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.inventory.ClickType
|
||||
import org.bukkit.event.inventory.InventoryClickEvent
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.atnrch.dragon.teams.CandleColor
|
||||
import xyz.atnrch.dragon.teams.Team
|
||||
import xyz.xenondevs.invui.item.ItemProvider
|
||||
import xyz.xenondevs.invui.item.builder.ItemBuilder
|
||||
import xyz.xenondevs.invui.item.impl.AbstractItem
|
||||
|
||||
class CandleItem(private val team: Team) : AbstractItem() {
|
||||
|
||||
override fun getItemProvider(): ItemProvider {
|
||||
val material = CandleColor.getFromTeamColor(team.teamColor)
|
||||
val itemBuilder = ItemBuilder(material)
|
||||
itemBuilder.setDisplayName("${team.teamColor.chatColor}Rejoindre l'équipe")
|
||||
team.players.forEach { player ->
|
||||
itemBuilder.addLoreLines("${ChatColor.DARK_GRAY}- ${team.teamColor.chatColor}${player.player.name}")
|
||||
}
|
||||
return itemBuilder
|
||||
}
|
||||
|
||||
override fun handleClick(clickType: ClickType, player: Player, event: InventoryClickEvent) {
|
||||
RunnerDragon.instance.playerManager.getPlayer(player.uniqueId).let {
|
||||
if (team.players.size == 2) {
|
||||
it.sendMessage("${ChatColor.RED}L'équipe est complète.")
|
||||
} 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.displayName}")
|
||||
it.setTeam(team)
|
||||
it.updateDisplayName()
|
||||
}
|
||||
}
|
||||
notifyWindows()
|
||||
event.view.close()
|
||||
}
|
||||
}
|
|
@ -1,89 +0,0 @@
|
|||
package xyz.atnrch.dragon.player
|
||||
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.atnrch.dragon.teams.Team
|
||||
import java.util.*
|
||||
|
||||
|
||||
class DragonPlayer(uuid: UUID) {
|
||||
val player = Bukkit.getPlayer(uuid)!!
|
||||
|
||||
fun instantiatePlayer() {
|
||||
RunnerDragon.instance.worldManager.teleportAtSpawn(player)
|
||||
updateHeaderFooter()
|
||||
impulse101()
|
||||
setTeam(Team.DEFAULT_TEAM)
|
||||
}
|
||||
|
||||
fun updateHeaderFooter() {
|
||||
player.playerListHeader = """
|
||||
${RunnerDragon.TITLE}
|
||||
${ChatColor.DARK_PURPLE}${ChatColor.BOLD}Met@${ChatColor.DARK_AQUA}${ChatColor.BOLD}Gaming
|
||||
|
||||
${ChatColor.GOLD}Temps: ${ChatColor.RED}${formatDuration(RunnerDragon.TIME)}
|
||||
${ChatColor.GOLD}Vaches tuées: ${ChatColor.RED}${RunnerDragon.DEAD_COWS} ${ChatColor.GRAY}${ChatColor.ITALIC}(c'est horrible)
|
||||
|
||||
""".trimIndent()
|
||||
player.playerListFooter = """
|
||||
|
||||
${ChatColor.GOLD}${ChatColor.ITALIC}Plugin: ${ChatColor.BLUE}Ineanto ${ChatColor.DARK_GRAY}/ ${ChatColor.GOLD}${ChatColor.ITALIC}Concept: ${ChatColor.BLUE}Linkxss
|
||||
""".trimIndent()
|
||||
}
|
||||
|
||||
fun sendMessage(message: String) {
|
||||
player.sendMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.RESET}$message")
|
||||
}
|
||||
|
||||
fun getTeam(): Team? {
|
||||
return RunnerDragon.instance.teamManager.getPlayerTeam(player)
|
||||
}
|
||||
|
||||
fun setTeam(team: Team) {
|
||||
RunnerDragon.instance.teamManager.setPlayerTeam(player, team)
|
||||
}
|
||||
|
||||
fun impulse101() {
|
||||
player.gameMode = GameMode.SURVIVAL
|
||||
player.inventory.clear()
|
||||
player.health = 20.0
|
||||
player.foodLevel = 20
|
||||
player.activePotionEffects.clear()
|
||||
player.walkSpeed = 0.2f
|
||||
player.flySpeed = 0.1f
|
||||
player.exp = 0f
|
||||
player.level = 0
|
||||
player.totalExperience = 0
|
||||
}
|
||||
|
||||
fun setTeamItem(value: Boolean) {
|
||||
if (value) {
|
||||
val item = ItemStack(Material.CANDLE)
|
||||
val meta = item.itemMeta!!
|
||||
meta.setDisplayName("${ChatColor.GOLD}Choisir une équipe")
|
||||
item.itemMeta = meta
|
||||
player.inventory.setItem(4, item)
|
||||
} else {
|
||||
player.inventory.setItem(4, ItemStack(Material.AIR))
|
||||
}
|
||||
}
|
||||
|
||||
fun updateDisplayName() {
|
||||
// TODO (Ineanto, 6/26/23): Update nick
|
||||
/**
|
||||
* NickAPI.nick(player, "${getTeam()!!.teamColor.chatColor}${player.name}")
|
||||
* NickAPI.refreshPlayer(player)
|
||||
*/
|
||||
}
|
||||
|
||||
private fun formatDuration(totalSeconds: Int): String {
|
||||
val hours = totalSeconds / 3600
|
||||
val minutes = (totalSeconds % 3600) / 60
|
||||
val seconds = totalSeconds % 60
|
||||
return String.format("%02d:%02d:%02d", hours, minutes, seconds)
|
||||
}
|
||||
}
|
|
@ -1,14 +0,0 @@
|
|||
package xyz.atnrch.dragon.teams
|
||||
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.Color
|
||||
|
||||
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")
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package xyz.atnrch.dragon
|
||||
package xyz.ineanto.dragon
|
||||
|
||||
inline fun <reified T : Enum<T>> enumContains(name: String): Boolean {
|
||||
return enumValues<T>().any { it.name == name }
|
|
@ -1,4 +1,4 @@
|
|||
package xyz.atnrch.dragon
|
||||
package xyz.ineanto.dragon
|
||||
|
||||
enum class GameState {
|
||||
WAITING,
|
|
@ -1,25 +1,31 @@
|
|||
package xyz.atnrch.dragon
|
||||
package xyz.ineanto.dragon
|
||||
|
||||
import com.google.common.cache.Cache
|
||||
import com.google.common.cache.CacheBuilder
|
||||
import net.kyori.adventure.text.Component
|
||||
import net.kyori.adventure.text.format.NamedTextColor
|
||||
import net.kyori.adventure.text.format.TextDecoration
|
||||
import net.kyori.adventure.text.minimessage.MiniMessage
|
||||
import org.apache.commons.io.FileUtils
|
||||
import org.bukkit.*
|
||||
import org.bukkit.attribute.Attribute
|
||||
import org.bukkit.plugin.java.JavaPlugin
|
||||
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
|
||||
import xyz.atnrch.dragon.schematic.SchematicLoader
|
||||
import xyz.atnrch.dragon.tasks.GracePeriodTask
|
||||
import xyz.atnrch.dragon.tasks.TimerTask
|
||||
import xyz.atnrch.dragon.teams.Team
|
||||
import xyz.atnrch.dragon.teams.TeamManager
|
||||
import xyz.atnrch.dragon.world.PreviousWorldUtils
|
||||
import xyz.atnrch.dragon.world.WorldManager
|
||||
import xyz.ineanto.dragon.commands.MainCommand
|
||||
import xyz.ineanto.dragon.event.*
|
||||
import xyz.ineanto.dragon.event.end.BedInteractListener
|
||||
import xyz.ineanto.dragon.event.end.BlockPlaceListener
|
||||
import xyz.ineanto.dragon.event.end.EnderDragonListener
|
||||
import xyz.ineanto.dragon.event.waiting.WaitingListener
|
||||
import xyz.ineanto.dragon.player.PlayerManager
|
||||
import xyz.ineanto.dragon.schematic.SchematicLoader
|
||||
import xyz.ineanto.dragon.scoreboard.ScoreboardTeams
|
||||
import xyz.ineanto.dragon.tasks.GracePeriodTask
|
||||
import xyz.ineanto.dragon.tasks.TimerTask
|
||||
import xyz.ineanto.dragon.teams.Team
|
||||
import xyz.ineanto.dragon.teams.TeamManager
|
||||
import xyz.ineanto.dragon.world.PreviousWorldUtils
|
||||
import xyz.ineanto.dragon.world.WorldManager
|
||||
import java.io.File
|
||||
import java.time.Duration
|
||||
import java.time.Instant
|
||||
|
@ -32,10 +38,12 @@ class RunnerDragon : JavaPlugin() {
|
|||
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 TITLE = MiniMessage.miniMessage()
|
||||
.deserialize("<gradient:#8045ff:#cd59ff><b>Runner</b></gradient><gradient:#e9f1b0:#ffbd80>Dragon</gradient>")
|
||||
|
||||
val PREFIX = MiniMessage.miniMessage()
|
||||
.deserialize("<gradient:#235ddd:#6e4bf9><b>Met@</b></gradient><gradient:#04e9e3:#93e2c8>Gaming</gradient>")
|
||||
|
||||
val LAST_BED_INTERACT: Cache<UUID, Instant> = CacheBuilder.newBuilder()
|
||||
.expireAfterWrite(Duration.ofSeconds(10))
|
||||
.build()
|
||||
|
@ -63,10 +71,12 @@ class RunnerDragon : JavaPlugin() {
|
|||
lateinit var playerManager: PlayerManager
|
||||
lateinit var worldManager: WorldManager
|
||||
|
||||
private lateinit var scoreboardTeams: ScoreboardTeams
|
||||
|
||||
override fun onEnable() {
|
||||
instance = this
|
||||
|
||||
val previousWorldFolder = File("runnerdragon")
|
||||
val previousWorldFolder = File("outerlands")
|
||||
val previousEndFolder = File("world_the_end")
|
||||
val previousNetherFolder = File("world_nether")
|
||||
if (previousWorldFolder.exists()) {
|
||||
|
@ -82,7 +92,7 @@ class RunnerDragon : JavaPlugin() {
|
|||
PreviousWorldUtils.resetNether()
|
||||
}
|
||||
|
||||
val creator = WorldCreator("runnerdragon")
|
||||
val creator = WorldCreator("outerlands")
|
||||
creator.environment(World.Environment.NORMAL)
|
||||
creator.generateStructures(true)
|
||||
creator.type(WorldType.NORMAL)
|
||||
|
@ -125,7 +135,13 @@ class RunnerDragon : JavaPlugin() {
|
|||
STATE = state
|
||||
return when (state) {
|
||||
GameState.WAITING -> {
|
||||
Bukkit.broadcastMessage("$TITLE_MSG ${ChatColor.GOLD}Mise à zéro du jeu !")
|
||||
val resetComponent: Component = Component
|
||||
.text()
|
||||
.append(PREFIX)
|
||||
.append(Component.text("Mise à zéro du jeu !", NamedTextColor.GOLD))
|
||||
.build()
|
||||
|
||||
Bukkit.broadcast(resetComponent)
|
||||
logger.info("(Re)Démarrage du jeu...")
|
||||
Bukkit.getScheduler().cancelTasks(this)
|
||||
TIMER_TASK?.taskId?.let { Bukkit.getScheduler().cancelTask(it) }
|
||||
|
@ -140,13 +156,23 @@ class RunnerDragon : JavaPlugin() {
|
|||
SPAWN = Location(WORLD, 0.0, SPAWN_HEIGHT.plus(2).toDouble(), 0.0, -180f, 0f)
|
||||
Bukkit.unloadWorld("world", true)
|
||||
|
||||
logger.info("Création des équipes...")
|
||||
logger.info("Mise en place du système d'équipe...")
|
||||
teamManager.clean()
|
||||
teamManager.createTeams(NUMBER_OF_TEAMS)
|
||||
|
||||
scoreboardTeams = ScoreboardTeams()
|
||||
scoreboardTeams.reset()
|
||||
scoreboardTeams.create()
|
||||
|
||||
Bukkit.getOnlinePlayers().forEach {
|
||||
it.teleport(SPAWN)
|
||||
it.setBedSpawnLocation(SPAWN, true)
|
||||
it.inventory.clear()
|
||||
it.clearActivePotionEffects()
|
||||
it.health = it.getAttribute(Attribute.GENERIC_MAX_HEALTH)!!.value
|
||||
it.foodLevel = 20
|
||||
it.level = 0
|
||||
it.exp = 0.0f
|
||||
playerManager.removePlayer(it.uniqueId)
|
||||
playerManager.addPlayer(it.uniqueId)
|
||||
}
|
||||
|
@ -161,7 +187,13 @@ class RunnerDragon : JavaPlugin() {
|
|||
}
|
||||
|
||||
GameState.LAUNCH -> {
|
||||
Bukkit.broadcastMessage("$TITLE_MSG ${ChatColor.GOLD}Lancement de la partie !")
|
||||
val launchComponent: Component = Component
|
||||
.text()
|
||||
.append(PREFIX)
|
||||
.append(Component.text("Lancement de la partie !", NamedTextColor.GOLD))
|
||||
.build()
|
||||
|
||||
Bukkit.broadcast(launchComponent)
|
||||
LOBBY_SCHEMATIC.removeSchematic()
|
||||
SPAWN = WORLD.spawnLocation
|
||||
TIMER_TASK = TimerTask().runTaskTimer(instance, 0L, 20L)
|
||||
|
@ -173,7 +205,14 @@ class RunnerDragon : JavaPlugin() {
|
|||
}
|
||||
|
||||
GameState.GAME -> {
|
||||
Bukkit.broadcastMessage("$TITLE_MSG ${ChatColor.GOLD}${ChatColor.ITALIC}PVP activé !")
|
||||
val pvpComponent: Component = Component
|
||||
.text()
|
||||
.append(PREFIX)
|
||||
.appendSpace()
|
||||
.append(Component.text("PVP activé !", NamedTextColor.GOLD, TextDecoration.ITALIC))
|
||||
.build()
|
||||
|
||||
Bukkit.broadcast(pvpComponent)
|
||||
GRACE_PERIOD_TASK?.taskId?.let { Bukkit.getScheduler().cancelTask(it) }
|
||||
true
|
||||
}
|
|
@ -0,0 +1,51 @@
|
|||
package xyz.ineanto.dragon.commands
|
||||
|
||||
import net.kyori.adventure.text.Component
|
||||
import net.kyori.adventure.text.format.NamedTextColor
|
||||
import org.bukkit.Bukkit
|
||||
import xyz.ineanto.dragon.GameState
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.player.DragonPlayer
|
||||
import xyz.ineanto.dragon.tasks.StartGameTask
|
||||
|
||||
class GameSubCommand {
|
||||
fun run(sender: DragonPlayer, args: Array<String>) {
|
||||
if (args.isEmpty()) {
|
||||
sender.sendMessage(Component.text("Argument manquant: /rd game (start/state)"))
|
||||
return
|
||||
}
|
||||
|
||||
when (args[0]) {
|
||||
"end" -> {
|
||||
Bukkit.getOnlinePlayers().forEach {
|
||||
it.teleport(RunnerDragon.WORLD_END.spawnLocation)
|
||||
}
|
||||
}
|
||||
|
||||
"state" -> {
|
||||
if (args.size == 2) {
|
||||
if (xyz.ineanto.dragon.enumContains<GameState>(args[1])) {
|
||||
val state = GameState.valueOf(args[1])
|
||||
RunnerDragon.instance.switchState(state)
|
||||
sender.sendMessage(Component.text("État de jeu défini en: ${state.name}.", NamedTextColor.RED))
|
||||
} else {
|
||||
sender.sendMessage(
|
||||
Component.text(
|
||||
"State invalide (WAITING/LAUNCH/GAME/END).",
|
||||
NamedTextColor.RED
|
||||
)
|
||||
)
|
||||
}
|
||||
} else {
|
||||
sender.sendMessage(Component.text("Argument manquant.", NamedTextColor.RED))
|
||||
}
|
||||
}
|
||||
|
||||
"start" -> {
|
||||
sender.sendMessage(Component.text("Démarrage de la partie.", NamedTextColor.RED))
|
||||
Bukkit.getOnlinePlayers().forEach { it.inventory.clear() }
|
||||
StartGameTask().runTaskTimer(RunnerDragon.instance, 0L, 20L)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
56
src/main/kotlin/xyz/ineanto/dragon/commands/MainCommand.kt
Normal file
56
src/main/kotlin/xyz/ineanto/dragon/commands/MainCommand.kt
Normal file
|
@ -0,0 +1,56 @@
|
|||
package xyz.ineanto.dragon.commands
|
||||
|
||||
import net.kyori.adventure.text.Component
|
||||
import net.kyori.adventure.text.format.NamedTextColor
|
||||
import net.kyori.adventure.text.format.TextDecoration
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.command.Command
|
||||
import org.bukkit.command.CommandExecutor
|
||||
import org.bukkit.command.CommandSender
|
||||
import org.bukkit.entity.Player
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
|
||||
class MainCommand : CommandExecutor {
|
||||
override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<String>): Boolean {
|
||||
if (sender is Player) {
|
||||
val player: Player = sender
|
||||
val dragonPlayer = RunnerDragon.instance.playerManager.getPlayer(player.uniqueId)
|
||||
|
||||
if (player.isOp.not()) {
|
||||
dragonPlayer.sendMessage(Component.text("Erreur: Status d'opérateur requis."))
|
||||
return true
|
||||
}
|
||||
|
||||
if (args.isEmpty()) {
|
||||
dragonPlayer.sendMessage(Component.text("Argument manquant: /rd (teams/game/say)"))
|
||||
return true
|
||||
}
|
||||
|
||||
when (args[0]) {
|
||||
"game" -> GameSubCommand().run(dragonPlayer, args.drop(1).toTypedArray())
|
||||
"teams" -> TeamsSubCommand().run(dragonPlayer, args.drop(1).toTypedArray())
|
||||
"say" -> {
|
||||
if (args.drop(1).isEmpty()) {
|
||||
player.sendMessage(
|
||||
Component
|
||||
.text()
|
||||
.append(RunnerDragon.PREFIX)
|
||||
.append(Component.text("Veuillez préciser un message.", NamedTextColor.RED))
|
||||
.build()
|
||||
)
|
||||
return true
|
||||
}
|
||||
|
||||
val announcementComponent = Component.text()
|
||||
.append(Component.text("(ANNONCE)", NamedTextColor.RED, TextDecoration.BOLD))
|
||||
.appendSpace()
|
||||
.append(Component.text(args.drop(1).joinToString(" ", "", "")))
|
||||
.build()
|
||||
|
||||
Bukkit.broadcast(announcementComponent)
|
||||
}
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
}
|
144
src/main/kotlin/xyz/ineanto/dragon/commands/TeamsSubCommand.kt
Normal file
144
src/main/kotlin/xyz/ineanto/dragon/commands/TeamsSubCommand.kt
Normal file
|
@ -0,0 +1,144 @@
|
|||
package xyz.ineanto.dragon.commands
|
||||
|
||||
import net.kyori.adventure.text.Component
|
||||
import net.kyori.adventure.text.format.NamedTextColor
|
||||
import org.bukkit.Bukkit
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.player.DragonPlayer
|
||||
import xyz.ineanto.dragon.teams.Team
|
||||
|
||||
class TeamsSubCommand {
|
||||
fun run(player: DragonPlayer, args: Array<String>) {
|
||||
if (args.isEmpty()) {
|
||||
val teamComponent = Component
|
||||
.text()
|
||||
.append(Component.text("Configuration des équipes:"))
|
||||
.appendNewline()
|
||||
|
||||
val statusComponent = Component
|
||||
.text()
|
||||
.append(Component.text("-", NamedTextColor.DARK_GRAY))
|
||||
.appendSpace()
|
||||
.append(Component.text("Status:", NamedTextColor.GOLD))
|
||||
.appendSpace()
|
||||
|
||||
if (RunnerDragon.TEAM_LOCK) {
|
||||
statusComponent.append(Component.text("fermées", NamedTextColor.RED))
|
||||
} else {
|
||||
statusComponent.append(Component.text("ouvertes", NamedTextColor.GREEN))
|
||||
}
|
||||
statusComponent.appendNewline().build()
|
||||
|
||||
val numberComponent = Component
|
||||
.text()
|
||||
.append(Component.text("-", NamedTextColor.DARK_GRAY))
|
||||
.appendSpace()
|
||||
.append(Component.text("Nombre:", NamedTextColor.GOLD))
|
||||
.appendSpace()
|
||||
.append(Component.text(RunnerDragon.NUMBER_OF_TEAMS, NamedTextColor.AQUA))
|
||||
.appendNewline()
|
||||
.build()
|
||||
|
||||
val sizeComponent = Component
|
||||
.text()
|
||||
.append(Component.text("-", NamedTextColor.DARK_GRAY))
|
||||
.appendSpace()
|
||||
.append(Component.text("Capacité:", NamedTextColor.GOLD))
|
||||
.appendSpace()
|
||||
.append(Component.text(RunnerDragon.TEAM_MAX_SIZE, NamedTextColor.AQUA))
|
||||
.appendNewline()
|
||||
.build()
|
||||
|
||||
val teamsComponent = Component
|
||||
.text()
|
||||
.append(Component.text("-", NamedTextColor.DARK_GRAY))
|
||||
.appendSpace()
|
||||
.append(Component.text("Équipes disponibles:", NamedTextColor.GOLD))
|
||||
.appendSpace()
|
||||
|
||||
val separator = Component.text(",").appendSpace()
|
||||
val teams = RunnerDragon.instance.teamManager.getTeams()
|
||||
val listIterator = teams.listIterator()
|
||||
while (listIterator.hasNext()) {
|
||||
val team: Team = listIterator.next()
|
||||
val teamNameComponent = Component.text()
|
||||
.append(Component.text(team.teamColor.displayName, team.teamColor.namedColor))
|
||||
|
||||
if (listIterator.hasNext()) {
|
||||
teamNameComponent.append(separator)
|
||||
}
|
||||
teamNameComponent.build()
|
||||
|
||||
teamsComponent.append(teamNameComponent)
|
||||
}
|
||||
teamsComponent.build()
|
||||
|
||||
teamComponent
|
||||
.append(statusComponent)
|
||||
.append(numberComponent)
|
||||
.append(sizeComponent)
|
||||
.append(teamsComponent)
|
||||
|
||||
player.sendMessage(teamComponent.build())
|
||||
return
|
||||
}
|
||||
|
||||
when (args[0]) {
|
||||
"lock" -> {
|
||||
RunnerDragon.TEAM_LOCK = RunnerDragon.TEAM_LOCK.not()
|
||||
Bukkit.getOnlinePlayers()
|
||||
.forEach {
|
||||
RunnerDragon.instance.playerManager.getPlayer(it.uniqueId)
|
||||
.setTeamItem(RunnerDragon.TEAM_LOCK.not())
|
||||
}
|
||||
|
||||
val lockComponent = Component.text()
|
||||
.append(Component.text("Les équipes sont désormais :"))
|
||||
.appendSpace()
|
||||
.append(
|
||||
if (RunnerDragon.TEAM_LOCK) Component.text(
|
||||
"fermées",
|
||||
NamedTextColor.RED
|
||||
) else Component.text("ouvertes", NamedTextColor.GREEN)
|
||||
)
|
||||
.build()
|
||||
|
||||
player.sendMessage(lockComponent)
|
||||
}
|
||||
|
||||
"swap" -> {
|
||||
if (args.size < 2) {
|
||||
player.sendMessage(Component.text("Argument manquant.", NamedTextColor.RED))
|
||||
} else {
|
||||
val target = Bukkit.getPlayer(args[1])
|
||||
val targetTeam = args[2]
|
||||
|
||||
targetTeam.let {
|
||||
val value = NamedTextColor.NAMES.value(targetTeam.lowercase())
|
||||
value?.let {
|
||||
target?.let {
|
||||
val instance = RunnerDragon.instance
|
||||
instance.teamManager.getOnColor(value)
|
||||
?.let { coloredTeam ->
|
||||
val dragonPlayer = instance.playerManager.getPlayer(it.uniqueId)
|
||||
dragonPlayer.setTeam(coloredTeam)
|
||||
dragonPlayer.updateDisplayName()
|
||||
player.sendMessage(
|
||||
Component
|
||||
.text("${target.name} est passé dans l'équipe")
|
||||
.appendSpace()
|
||||
.append(coloredTeam.displayName)
|
||||
)
|
||||
}
|
||||
}
|
||||
} ?: {
|
||||
player.sendMessage(Component.text("Couleur invalide.", NamedTextColor.RED))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package xyz.atnrch.dragon.event
|
||||
package xyz.ineanto.dragon.event
|
||||
|
||||
import net.md_5.bungee.api.ChatColor
|
||||
import org.bukkit.Bukkit
|
||||
|
@ -7,8 +7,8 @@ import org.bukkit.event.EventHandler
|
|||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerPortalEvent
|
||||
import org.bukkit.event.player.PlayerTeleportEvent
|
||||
import xyz.atnrch.dragon.GameState
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.GameState
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
|
||||
class DimensionEntranceListener : Listener {
|
||||
@EventHandler
|
||||
|
@ -17,7 +17,7 @@ class DimensionEntranceListener : Listener {
|
|||
when (event.cause) {
|
||||
PlayerTeleportEvent.TeleportCause.NETHER_PORTAL -> if (RunnerDragon.NETHER_PORTAL_ENTERED.not()) {
|
||||
RunnerDragon.NETHER_PORTAL_ENTERED = true
|
||||
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.GOLD}Le portail du Nether a été franchi pour la première fois !")
|
||||
Bukkit.broadcastMessage("${RunnerDragon.PREFIX} ${ChatColor.GOLD}Le portail du Nether a été franchi pour la première fois !")
|
||||
Bukkit.getOnlinePlayers().forEach {
|
||||
it.playSound(it.location, Sound.ENTITY_VILLAGER_CELEBRATE, 1f, 0.3f)
|
||||
}
|
||||
|
@ -27,7 +27,7 @@ class DimensionEntranceListener : Listener {
|
|||
event.player.teleport(RunnerDragon.WORLD_END.spawnLocation)
|
||||
if (RunnerDragon.END_PORTAL_ENTERED.not()) {
|
||||
RunnerDragon.END_PORTAL_ENTERED = true
|
||||
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.GOLD}Le portail de l'End a été franchi pour la première fois !")
|
||||
Bukkit.broadcastMessage("${RunnerDragon.PREFIX} ${ChatColor.GOLD}Le portail de l'End a été franchi pour la première fois !")
|
||||
Bukkit.getOnlinePlayers().forEach {
|
||||
it.playSound(it.location, Sound.ENTITY_VILLAGER_CELEBRATE, 1f, 0.3f)
|
||||
}
|
|
@ -1,12 +1,12 @@
|
|||
package xyz.atnrch.dragon.event
|
||||
package xyz.ineanto.dragon.event
|
||||
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.entity.EntityDamageEvent
|
||||
import xyz.atnrch.dragon.GameState
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.GameState
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
|
||||
class EntityDamageListener : Listener {
|
||||
@EventHandler
|
|
@ -1,10 +1,10 @@
|
|||
package xyz.atnrch.dragon.event
|
||||
package xyz.ineanto.dragon.event
|
||||
|
||||
import org.bukkit.entity.EntityType
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.entity.EntityDeathEvent
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
|
||||
class EntityDeathListener : Listener {
|
||||
@EventHandler
|
|
@ -1,13 +1,14 @@
|
|||
package xyz.atnrch.dragon.event
|
||||
package xyz.ineanto.dragon.event
|
||||
|
||||
import org.bukkit.ChatColor
|
||||
import net.kyori.adventure.text.Component
|
||||
import net.kyori.adventure.text.format.NamedTextColor
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerJoinEvent
|
||||
import xyz.atnrch.dragon.GameState
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.atnrch.dragon.player.DragonPlayer
|
||||
import xyz.ineanto.dragon.GameState
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.player.DragonPlayer
|
||||
|
||||
class PlayerJoinListener : Listener {
|
||||
@EventHandler
|
||||
|
@ -25,9 +26,16 @@ class PlayerJoinListener : Listener {
|
|||
* NickAPI.setUniqueId(player, player.uniqueId)
|
||||
*/
|
||||
|
||||
event.joinMessage = "(${ChatColor.GREEN}+${ChatColor.WHITE}) ${player.name}"
|
||||
event.joinMessage(
|
||||
Component.text("(", NamedTextColor.WHITE)
|
||||
.append(Component.text("+", NamedTextColor.GREEN))
|
||||
.append(Component.text(")", NamedTextColor.WHITE))
|
||||
.appendSpace()
|
||||
.append(Component.text(player.name))
|
||||
)
|
||||
|
||||
if (RunnerDragon.STATE == GameState.WAITING) {
|
||||
dragonPlayer.sendMessage("Bienvenue !")
|
||||
dragonPlayer.sendMessage(Component.text("Bienvenue !", NamedTextColor.WHITE))
|
||||
dragonPlayer.instantiatePlayer()
|
||||
dragonPlayer.player.gameMode = GameMode.ADVENTURE
|
||||
dragonPlayer.setTeamItem(true)
|
||||
|
@ -35,7 +43,7 @@ class PlayerJoinListener : Listener {
|
|||
|
||||
if (dragonPlayer.getTeam() == null) {
|
||||
dragonPlayer.player.gameMode = GameMode.SPECTATOR
|
||||
dragonPlayer.sendMessage("Partie rejointe en spectateur.")
|
||||
dragonPlayer.sendMessage(Component.text("Partie rejointe en spectateur."))
|
||||
return
|
||||
}
|
||||
|
|
@ -0,0 +1,22 @@
|
|||
package xyz.ineanto.dragon.event
|
||||
|
||||
import net.kyori.adventure.text.Component
|
||||
import net.kyori.adventure.text.format.NamedTextColor
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerQuitEvent
|
||||
|
||||
class PlayerQuitListener : Listener {
|
||||
@EventHandler
|
||||
fun onPlayerJoin(event: PlayerQuitEvent) {
|
||||
val player = event.player
|
||||
|
||||
event.quitMessage(
|
||||
Component.text("(", NamedTextColor.WHITE)
|
||||
.append(Component.text("-", NamedTextColor.RED))
|
||||
.append(Component.text(")", NamedTextColor.WHITE))
|
||||
.appendSpace()
|
||||
.append(Component.text(player.name))
|
||||
)
|
||||
}
|
||||
}
|
|
@ -1,9 +1,9 @@
|
|||
package xyz.atnrch.dragon.event
|
||||
package xyz.ineanto.dragon.event
|
||||
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerRespawnEvent
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
|
||||
class PlayerRespawnListener : Listener {
|
||||
@EventHandler
|
|
@ -1,9 +1,9 @@
|
|||
package xyz.atnrch.dragon.event.end
|
||||
package xyz.ineanto.dragon.event.end
|
||||
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerBedEnterEvent
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
import java.time.Instant
|
||||
|
||||
class BedInteractListener : Listener {
|
|
@ -1,4 +1,4 @@
|
|||
package xyz.atnrch.dragon.event.end
|
||||
package xyz.ineanto.dragon.event.end
|
||||
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.World
|
|
@ -1,4 +1,4 @@
|
|||
package xyz.atnrch.dragon.event.end
|
||||
package xyz.ineanto.dragon.event.end
|
||||
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.ChatColor
|
||||
|
@ -12,7 +12,7 @@ import org.bukkit.event.EventHandler
|
|||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.entity.EntityDamageEvent
|
||||
import org.bukkit.event.entity.EntityDeathEvent
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
import java.util.*
|
||||
|
||||
class EnderDragonListener : Listener {
|
||||
|
@ -53,8 +53,8 @@ class EnderDragonListener : Listener {
|
|||
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}!")
|
||||
Bukkit.broadcastMessage("${RunnerDragon.PREFIX} ${ChatColor.GOLD}${ChatColor.BOLD}VICTOIRE !")
|
||||
Bukkit.broadcastMessage("${RunnerDragon.PREFIX} ${ChatColor.GOLD}${ChatColor.BOLD}LE DRAGON A ÉTÉ TUÉ PAR L'ÉQUIPE ${team?.displayName}${ChatColor.GOLD}${ChatColor.BOLD}!")
|
||||
}
|
||||
|
||||
SecondFight.start(dragon)
|
|
@ -1,4 +1,4 @@
|
|||
package xyz.atnrch.dragon.event.end
|
||||
package xyz.ineanto.dragon.event.end
|
||||
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.ChatColor
|
||||
|
@ -7,16 +7,16 @@ 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.ineanto.dragon.RunnerDragon
|
||||
|
||||
class SecondFight {
|
||||
companion object {
|
||||
fun start(dragon: EnderDragon) {
|
||||
Bukkit.getScheduler().scheduleSyncDelayedTask(
|
||||
RunnerDragon.instance, {
|
||||
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.MAGIC}??ZFjZI19112::!d!zq?")
|
||||
Bukkit.broadcastMessage("${RunnerDragon.PREFIX} ${ChatColor.MAGIC}??ZFjZI19112::!d!zq?")
|
||||
for (i in 0..2) {
|
||||
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.BOLD}${ChatColor.RED}???")
|
||||
Bukkit.broadcastMessage("${RunnerDragon.PREFIX} ${ChatColor.BOLD}${ChatColor.RED}???")
|
||||
}
|
||||
|
||||
Bukkit.getOnlinePlayers().forEach {
|
||||
|
@ -27,7 +27,7 @@ class SecondFight {
|
|||
}
|
||||
}
|
||||
|
||||
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.BOLD}${ChatColor.RED}")
|
||||
Bukkit.broadcastMessage("${RunnerDragon.PREFIX} ${ChatColor.BOLD}${ChatColor.RED}")
|
||||
|
||||
dragon.dragonBattle!!.resetCrystals()
|
||||
dragon.dragonBattle!!.initiateRespawn()
|
|
@ -1,6 +1,7 @@
|
|||
package xyz.atnrch.dragon.event.waiting
|
||||
package xyz.ineanto.dragon.event.waiting
|
||||
|
||||
import org.bukkit.ChatColor
|
||||
import net.kyori.adventure.text.Component
|
||||
import net.kyori.adventure.text.format.NamedTextColor
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.EventHandler
|
||||
|
@ -11,9 +12,9 @@ import org.bukkit.event.entity.EntityDamageEvent
|
|||
import org.bukkit.event.entity.FoodLevelChangeEvent
|
||||
import org.bukkit.event.player.PlayerInteractAtEntityEvent
|
||||
import org.bukkit.event.player.PlayerInteractEvent
|
||||
import xyz.atnrch.dragon.GameState
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.atnrch.dragon.inventory.CandleInventory
|
||||
import xyz.ineanto.dragon.GameState
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.inventory.CandleInventory
|
||||
|
||||
class WaitingListener : Listener {
|
||||
@EventHandler
|
||||
|
@ -52,7 +53,7 @@ class WaitingListener : Listener {
|
|||
@EventHandler
|
||||
fun onItemInteract(event: PlayerInteractEvent) {
|
||||
if (RunnerDragon.STATE == GameState.WAITING && event.player.gameMode == GameMode.ADVENTURE) {
|
||||
if (event.item?.itemMeta?.displayName == "${ChatColor.GOLD}Choisir une équipe") {
|
||||
if (event.item?.itemMeta?.displayName() == Component.text("Choisir une équipe", NamedTextColor.GOLD)) {
|
||||
CandleInventory(event.player)
|
||||
}
|
||||
event.isCancelled = true
|
|
@ -1,8 +1,8 @@
|
|||
package xyz.atnrch.dragon.inventory
|
||||
package xyz.ineanto.dragon.inventory
|
||||
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.entity.Player
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
import xyz.xenondevs.invui.gui.Gui
|
||||
import xyz.xenondevs.invui.item.Item
|
||||
import xyz.xenondevs.invui.item.builder.ItemBuilder
|
56
src/main/kotlin/xyz/ineanto/dragon/inventory/CandleItem.kt
Normal file
56
src/main/kotlin/xyz/ineanto/dragon/inventory/CandleItem.kt
Normal file
|
@ -0,0 +1,56 @@
|
|||
package xyz.ineanto.dragon.inventory
|
||||
|
||||
import net.kyori.adventure.text.Component
|
||||
import net.kyori.adventure.text.format.NamedTextColor
|
||||
import org.bukkit.entity.Player
|
||||
import org.bukkit.event.inventory.ClickType
|
||||
import org.bukkit.event.inventory.InventoryClickEvent
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.teams.CandleColor
|
||||
import xyz.ineanto.dragon.teams.Team
|
||||
import xyz.xenondevs.inventoryaccess.component.AdventureComponentWrapper
|
||||
import xyz.xenondevs.invui.item.ItemProvider
|
||||
import xyz.xenondevs.invui.item.builder.ItemBuilder
|
||||
import xyz.xenondevs.invui.item.impl.AbstractItem
|
||||
|
||||
class CandleItem(private val team: Team) : AbstractItem() {
|
||||
|
||||
override fun getItemProvider(): ItemProvider {
|
||||
val material = CandleColor.getFromTeamColor(team.teamColor)
|
||||
val itemBuilder = ItemBuilder(material)
|
||||
|
||||
val nameComponent = Component.text("Rejoindre l'équipe", team.teamColor.namedColor)
|
||||
itemBuilder.setDisplayName(AdventureComponentWrapper(nameComponent))
|
||||
|
||||
team.players.forEach { player ->
|
||||
val lineComponent = Component.text("-", NamedTextColor.DARK_GRAY)
|
||||
.appendSpace()
|
||||
.append(Component.text().append(Component.text(player.player.name, team.teamColor.namedColor)))
|
||||
|
||||
itemBuilder.addLoreLines(AdventureComponentWrapper(lineComponent))
|
||||
}
|
||||
return itemBuilder
|
||||
}
|
||||
|
||||
override fun handleClick(clickType: ClickType, player: Player, event: InventoryClickEvent) {
|
||||
RunnerDragon.instance.playerManager.getPlayer(player.uniqueId).let {
|
||||
if (team.players.size == 2) {
|
||||
it.sendMessage(Component.text("L'équipe est complète.", NamedTextColor.RED))
|
||||
} else if (it.getTeam()!! == team) {
|
||||
it.sendMessage(Component.text("Vous êtes déjà dans cette équipe.", NamedTextColor.RED))
|
||||
} else {
|
||||
it.sendMessage(
|
||||
Component.text()
|
||||
.content("Vous êtes désormais dans l'équipe:")
|
||||
.appendSpace()
|
||||
.append(team.displayName)
|
||||
.build()
|
||||
)
|
||||
it.setTeam(team)
|
||||
it.updateDisplayName()
|
||||
}
|
||||
}
|
||||
notifyWindows()
|
||||
event.view.close()
|
||||
}
|
||||
}
|
116
src/main/kotlin/xyz/ineanto/dragon/player/DragonPlayer.kt
Normal file
116
src/main/kotlin/xyz/ineanto/dragon/player/DragonPlayer.kt
Normal file
|
@ -0,0 +1,116 @@
|
|||
package xyz.ineanto.dragon.player
|
||||
|
||||
import net.kyori.adventure.text.Component
|
||||
import net.kyori.adventure.text.format.NamedTextColor
|
||||
import net.kyori.adventure.text.format.TextDecoration
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.GameMode
|
||||
import org.bukkit.Material
|
||||
import org.bukkit.inventory.ItemStack
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.teams.Team
|
||||
import java.util.*
|
||||
|
||||
|
||||
class DragonPlayer(uuid: UUID) {
|
||||
val player = Bukkit.getPlayer(uuid)!!
|
||||
|
||||
fun instantiatePlayer() {
|
||||
RunnerDragon.instance.worldManager.teleportAtSpawn(player)
|
||||
updateHeaderFooter()
|
||||
impulse101()
|
||||
setTeam(Team.DEFAULT_TEAM)
|
||||
}
|
||||
|
||||
fun updateHeaderFooter() {
|
||||
val header = RunnerDragon.TITLE
|
||||
.appendNewline()
|
||||
.append(Component.text("Met@", NamedTextColor.DARK_PURPLE))
|
||||
.append(Component.text("Gaming", NamedTextColor.DARK_AQUA))
|
||||
.appendNewline()
|
||||
.append(Component.text("Temps:", NamedTextColor.GOLD))
|
||||
.appendSpace()
|
||||
.append(Component.text(formatDuration(RunnerDragon.TIME)))
|
||||
.appendNewline()
|
||||
.append(Component.text("Vaches tuées:", NamedTextColor.GOLD))
|
||||
.appendSpace()
|
||||
.append(Component.text(RunnerDragon.DEAD_COWS))
|
||||
.appendSpace()
|
||||
.append(Component.text("(c'est horrible)", NamedTextColor.GRAY, TextDecoration.ITALIC))
|
||||
.appendNewline()
|
||||
|
||||
val footer = Component
|
||||
.text()
|
||||
.appendNewline()
|
||||
.append(Component.text("Plugin:", NamedTextColor.GOLD, TextDecoration.ITALIC))
|
||||
.appendSpace()
|
||||
.append(Component.text("Ineanto", NamedTextColor.BLUE))
|
||||
.appendSpace()
|
||||
.append(Component.text("/", NamedTextColor.DARK_GRAY))
|
||||
.appendSpace()
|
||||
.append(Component.text("Concept:", NamedTextColor.GOLD, TextDecoration.ITALIC))
|
||||
.appendSpace()
|
||||
.append(Component.text("Linkxss", NamedTextColor.BLUE))
|
||||
|
||||
player.sendPlayerListHeader(header)
|
||||
player.sendPlayerListFooter(footer)
|
||||
}
|
||||
|
||||
fun sendMessage(component: Component) {
|
||||
val message = Component
|
||||
.text()
|
||||
.append(RunnerDragon.PREFIX)
|
||||
.appendSpace()
|
||||
.append(component)
|
||||
.build()
|
||||
player.sendMessage(message)
|
||||
}
|
||||
|
||||
fun getTeam(): Team? {
|
||||
return RunnerDragon.instance.teamManager.getPlayerTeam(player)
|
||||
}
|
||||
|
||||
fun setTeam(team: Team) {
|
||||
RunnerDragon.instance.teamManager.setPlayerTeam(player, team)
|
||||
}
|
||||
|
||||
fun impulse101() {
|
||||
player.gameMode = GameMode.SURVIVAL
|
||||
player.inventory.clear()
|
||||
player.health = 20.0
|
||||
player.foodLevel = 20
|
||||
player.activePotionEffects.clear()
|
||||
player.walkSpeed = 0.2f
|
||||
player.flySpeed = 0.1f
|
||||
player.exp = 0f
|
||||
player.level = 0
|
||||
player.totalExperience = 0
|
||||
}
|
||||
|
||||
fun setTeamItem(value: Boolean) {
|
||||
if (value) {
|
||||
val item = ItemStack(Material.CANDLE)
|
||||
val meta = item.itemMeta!!
|
||||
meta.displayName(Component.text("Choisir une équipe", NamedTextColor.GOLD))
|
||||
item.itemMeta = meta
|
||||
player.inventory.setItem(4, item)
|
||||
} else {
|
||||
player.inventory.setItem(4, ItemStack(Material.AIR))
|
||||
}
|
||||
}
|
||||
|
||||
fun updateDisplayName() {
|
||||
// TODO (Ineanto, 6/26/23): Update nick
|
||||
/**
|
||||
* NickAPI.nick(player, "${getTeam()!!.teamColor.chatColor}${player.name}")
|
||||
* NickAPI.refreshPlayer(player)
|
||||
*/
|
||||
}
|
||||
|
||||
private fun formatDuration(totalSeconds: Int): String {
|
||||
val hours = totalSeconds / 3600
|
||||
val minutes = (totalSeconds % 3600) / 60
|
||||
val seconds = totalSeconds % 60
|
||||
return String.format("%02d:%02d:%02d", hours, minutes, seconds)
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package xyz.atnrch.dragon.player
|
||||
package xyz.ineanto.dragon.player
|
||||
|
||||
import java.util.*
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
package xyz.atnrch.dragon.schematic
|
||||
package xyz.ineanto.dragon.schematic
|
||||
|
||||
import com.sk89q.worldedit.EditSession
|
||||
import com.sk89q.worldedit.WorldEdit
|
|
@ -0,0 +1,44 @@
|
|||
package xyz.ineanto.dragon.scoreboard
|
||||
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.scoreboard.Scoreboard
|
||||
import org.bukkit.scoreboard.Team
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
|
||||
/**
|
||||
* TeamScoreboard
|
||||
*
|
||||
* This file is part of RunnerDragon.
|
||||
* @author ineanto
|
||||
* @since 1.0
|
||||
*/
|
||||
class ScoreboardTeams {
|
||||
private var scoreboard: Scoreboard? = null
|
||||
|
||||
fun create() {
|
||||
RunnerDragon.instance.logger.info("Création des équipes du Scoreboard...")
|
||||
|
||||
val scoreboardManager = Bukkit.getScoreboardManager()
|
||||
scoreboard = scoreboardManager.newScoreboard
|
||||
RunnerDragon.instance.teamManager.getTeams().forEach {
|
||||
val team = scoreboard!!.registerNewTeam(it.teamColor.displayName)
|
||||
team.color(it.teamColor.namedColor)
|
||||
team.setAllowFriendlyFire(false)
|
||||
team.setOption(Team.Option.DEATH_MESSAGE_VISIBILITY, Team.OptionStatus.NEVER)
|
||||
team.setOption(Team.Option.NAME_TAG_VISIBILITY, Team.OptionStatus.ALWAYS)
|
||||
}
|
||||
}
|
||||
|
||||
fun addPlayer() {
|
||||
|
||||
}
|
||||
|
||||
fun reset() {
|
||||
RunnerDragon.instance.logger.info("Nettoyage des équipes du Scoreboard...")
|
||||
scoreboard?.let {
|
||||
it.teams.forEach { team ->
|
||||
team.unregister()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,10 +1,10 @@
|
|||
package xyz.atnrch.dragon.tasks
|
||||
package xyz.ineanto.dragon.tasks
|
||||
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.scheduler.BukkitRunnable
|
||||
import xyz.atnrch.dragon.GameState
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.GameState
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
|
||||
class GracePeriodTask : BukkitRunnable() {
|
||||
private var counter: Int = 601
|
||||
|
@ -13,10 +13,10 @@ class GracePeriodTask : BukkitRunnable() {
|
|||
counter--
|
||||
val base = "${ChatColor.GOLD}Activation du PVP dans"
|
||||
when (counter) {
|
||||
600 -> Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} $base ${ChatColor.AQUA}10 ${ChatColor.GOLD}minutes.")
|
||||
600 -> Bukkit.broadcastMessage("${RunnerDragon.PREFIX} $base ${ChatColor.AQUA}10 ${ChatColor.GOLD}minutes.")
|
||||
580 -> RunnerDragon.instance.switchState(GameState.GRACE_PERIOD)
|
||||
300 -> Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} $base ${ChatColor.AQUA}5 ${ChatColor.GOLD}minutes.")
|
||||
in 1..5, 60 -> Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} $base ${ChatColor.AQUA}$counter ${ChatColor.GOLD}secondes.")
|
||||
300 -> Bukkit.broadcastMessage("${RunnerDragon.PREFIX} $base ${ChatColor.AQUA}5 ${ChatColor.GOLD}minutes.")
|
||||
in 1..5, 60 -> Bukkit.broadcastMessage("${RunnerDragon.PREFIX} $base ${ChatColor.AQUA}$counter ${ChatColor.GOLD}secondes.")
|
||||
0 -> RunnerDragon.instance.switchState(GameState.GAME)
|
||||
}
|
||||
}
|
|
@ -1,10 +1,10 @@
|
|||
package xyz.atnrch.dragon.tasks
|
||||
package xyz.ineanto.dragon.tasks
|
||||
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.ChatColor
|
||||
import org.bukkit.scheduler.BukkitRunnable
|
||||
import xyz.atnrch.dragon.GameState
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.GameState
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
|
||||
class StartGameTask : BukkitRunnable() {
|
||||
private var counter: Int = 15
|
||||
|
@ -13,7 +13,7 @@ class StartGameTask : BukkitRunnable() {
|
|||
counter--
|
||||
|
||||
when (counter) {
|
||||
in 1..5, 10 -> Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${ChatColor.GOLD}Départ dans ${ChatColor.AQUA}$counter ${ChatColor.GOLD}secondes.")
|
||||
in 1..5, 10 -> Bukkit.broadcastMessage("${RunnerDragon.PREFIX} ${ChatColor.GOLD}Départ dans ${ChatColor.AQUA}$counter ${ChatColor.GOLD}secondes.")
|
||||
0 -> RunnerDragon.instance.switchState(GameState.LAUNCH)
|
||||
}
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
package xyz.atnrch.dragon.tasks
|
||||
package xyz.ineanto.dragon.tasks
|
||||
|
||||
import org.bukkit.scheduler.BukkitRunnable
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
|
||||
class TimerTask : BukkitRunnable() {
|
||||
override fun run() {
|
|
@ -1,4 +1,4 @@
|
|||
package xyz.atnrch.dragon.teams
|
||||
package xyz.ineanto.dragon.teams
|
||||
|
||||
import org.bukkit.Material
|
||||
|
||||
|
@ -15,7 +15,7 @@ enum class CandleColor(val teamColor: TeamColor, val candle: Material) {
|
|||
private val map = HashMap<TeamColor, Material>()
|
||||
|
||||
init {
|
||||
CandleColor.values().forEach {
|
||||
entries.forEach {
|
||||
map[it.teamColor] = it.candle
|
||||
}
|
||||
}
|
|
@ -1,17 +1,18 @@
|
|||
package xyz.atnrch.dragon.teams
|
||||
package xyz.ineanto.dragon.teams
|
||||
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.atnrch.dragon.player.DragonPlayer
|
||||
import net.kyori.adventure.text.Component
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.player.DragonPlayer
|
||||
import java.util.*
|
||||
|
||||
class Team(
|
||||
val teamColor: TeamColor,
|
||||
var displayName: String = "undefined",
|
||||
var displayName: Component = Component.empty(),
|
||||
val players: ArrayList<DragonPlayer> = arrayListOf(),
|
||||
private val deaths: Int = 0
|
||||
) {
|
||||
init {
|
||||
displayName = "${teamColor.chatColor}${teamColor.displayName}"
|
||||
displayName = Component.text(teamColor.displayName, teamColor.namedColor)
|
||||
}
|
||||
|
||||
companion object {
|
14
src/main/kotlin/xyz/ineanto/dragon/teams/TeamColor.kt
Normal file
14
src/main/kotlin/xyz/ineanto/dragon/teams/TeamColor.kt
Normal file
|
@ -0,0 +1,14 @@
|
|||
package xyz.ineanto.dragon.teams
|
||||
|
||||
import net.kyori.adventure.text.format.NamedTextColor
|
||||
import org.bukkit.Color
|
||||
|
||||
enum class TeamColor(val namedColor: NamedTextColor, val color: Color, val displayName: String) {
|
||||
NONE(NamedTextColor.GRAY, Color.GRAY, "Grise"),
|
||||
BLUE(NamedTextColor.BLUE, Color.BLUE, "Bleue"),
|
||||
YELLOW(NamedTextColor.YELLOW, Color.YELLOW, "Jaune"),
|
||||
RED(NamedTextColor.RED, Color.RED, "Rouge"),
|
||||
GREEN(NamedTextColor.DARK_GREEN, Color.GREEN, "Verte"),
|
||||
ORANGE(NamedTextColor.GOLD, Color.ORANGE, "Orange"),
|
||||
PURPLE(NamedTextColor.LIGHT_PURPLE, Color.PURPLE, "Violette")
|
||||
}
|
|
@ -1,23 +1,23 @@
|
|||
package xyz.atnrch.dragon.teams
|
||||
package xyz.ineanto.dragon.teams
|
||||
|
||||
import org.bukkit.ChatColor
|
||||
import net.kyori.adventure.text.format.NamedTextColor
|
||||
import org.bukkit.entity.Player
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
import java.util.*
|
||||
|
||||
class TeamManager(
|
||||
private val instance: RunnerDragon,
|
||||
private val teams: ArrayList<Team> = arrayListOf(),
|
||||
private val convert: EnumMap<ChatColor, Team> = EnumMap(ChatColor::class.java),
|
||||
private val teams: ArrayList<Team> = ArrayList(),
|
||||
private val convert: HashMap<NamedTextColor, Team> = hashMapOf(),
|
||||
private val players: HashMap<UUID, Team> = hashMapOf()
|
||||
) {
|
||||
fun createTeams(size: Int) {
|
||||
teams.clear()
|
||||
for (i in 0..size) {
|
||||
val color = TeamColor.values()[i]
|
||||
val color = TeamColor.entries[i]
|
||||
val team = Team(color)
|
||||
teams.add(team)
|
||||
convert[color.chatColor] = team
|
||||
convert[color.namedColor] = team
|
||||
}
|
||||
instance.logger.info("$size teams créés.")
|
||||
}
|
||||
|
@ -28,7 +28,7 @@ class TeamManager(
|
|||
players.clear()
|
||||
}
|
||||
|
||||
fun getOnColor(color: ChatColor): Team? {
|
||||
fun getOnColor(color: NamedTextColor): Team? {
|
||||
return convert[color]
|
||||
}
|
||||
|
||||
|
@ -42,11 +42,11 @@ class TeamManager(
|
|||
return players[player.uniqueId]
|
||||
}
|
||||
|
||||
fun getTeams(): ArrayList<Team> {
|
||||
return teams.drop(1) as ArrayList<Team>
|
||||
fun getTeams(): List<Team> {
|
||||
return teams.drop(1)
|
||||
}
|
||||
|
||||
fun getTeamColorsNames(): List<String> {
|
||||
return getTeams().map { team -> "${team.teamColor.chatColor}${team.teamColor.chatColor.name}" }
|
||||
return getTeams().map { team -> "${team.teamColor.namedColor}${team.teamColor}" }
|
||||
}
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package xyz.atnrch.dragon.world
|
||||
package xyz.ineanto.dragon.world
|
||||
|
||||
import org.apache.commons.io.FileUtils
|
||||
import org.bukkit.Bukkit
|
|
@ -1,9 +1,9 @@
|
|||
package xyz.atnrch.dragon.world
|
||||
package xyz.ineanto.dragon.world
|
||||
|
||||
import org.bukkit.GameRule
|
||||
import org.bukkit.World
|
||||
import org.bukkit.entity.Player
|
||||
import xyz.atnrch.dragon.RunnerDragon
|
||||
import xyz.ineanto.dragon.RunnerDragon
|
||||
|
||||
class WorldManager(private vararg val worlds: World) {
|
||||
fun applyRules() {
|
|
@ -1,8 +1,14 @@
|
|||
name: RunnerDragon
|
||||
main: xyz.atnrch.dragon.RunnerDragon
|
||||
main: xyz.ineanto.dragon.RunnerDragon
|
||||
version: 1.0-SNAPSHOT
|
||||
api-version: "1.20"
|
||||
depend: [WorldEdit]
|
||||
depend: [ WorldEdit ]
|
||||
commands:
|
||||
rd:
|
||||
description: "Contrôle RunnerDragon."
|
||||
permission: "runnerdragon.admin"
|
||||
description: "Contrôle RunnerDragon."
|
||||
|
||||
permissions:
|
||||
"runnerdragon.admin":
|
||||
default: op
|
||||
description: "Permet de contrôler RunnerDragon."
|
Loading…
Add table
Add a link
Reference in a new issue