more bugs fixed
This commit is contained in:
parent
2a14483bf3
commit
da9c02dbbb
8 changed files with 138 additions and 16 deletions
|
@ -6,6 +6,7 @@ import org.bukkit.plugin.java.JavaPlugin
|
||||||
import org.bukkit.scheduler.BukkitTask
|
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.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
|
||||||
|
@ -14,6 +15,7 @@ import xyz.atnrch.dragon.tasks.GracePeriodTask
|
||||||
import xyz.atnrch.dragon.tasks.TimerTask
|
import xyz.atnrch.dragon.tasks.TimerTask
|
||||||
import xyz.atnrch.dragon.teams.Team
|
import xyz.atnrch.dragon.teams.Team
|
||||||
import xyz.atnrch.dragon.teams.TeamManager
|
import xyz.atnrch.dragon.teams.TeamManager
|
||||||
|
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
|
||||||
|
|
||||||
|
@ -43,6 +45,8 @@ class RunnerDragon : JavaPlugin() {
|
||||||
|
|
||||||
lateinit var SPAWN: Location
|
lateinit var SPAWN: Location
|
||||||
lateinit var WORLD: World
|
lateinit var WORLD: World
|
||||||
|
lateinit var WORLD_END: World
|
||||||
|
lateinit var WORLD_NETHER: World
|
||||||
lateinit var LOBBY_SCHEMATIC: SchematicLoader
|
lateinit var LOBBY_SCHEMATIC: SchematicLoader
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -54,24 +58,43 @@ class RunnerDragon : JavaPlugin() {
|
||||||
instance = this
|
instance = this
|
||||||
|
|
||||||
val previousWorldFolder = File("runnerdragon")
|
val previousWorldFolder = File("runnerdragon")
|
||||||
|
val previousEndFolder = File("world_the_end")
|
||||||
|
val previousNetherFolder = File("world_nether")
|
||||||
if (previousWorldFolder.exists()) {
|
if (previousWorldFolder.exists()) {
|
||||||
logger.warning("Ancien monde détecté! Suppression...")
|
logger.warning("Ancien monde détecté! Suppression...")
|
||||||
FileUtils.deleteDirectory(previousWorldFolder)
|
FileUtils.deleteDirectory(previousWorldFolder)
|
||||||
}
|
}
|
||||||
|
if (previousEndFolder.exists()) {
|
||||||
|
logger.warning("Ancien End détecté! Suppression...")
|
||||||
|
PreviousWorldUtils.resetEnd()
|
||||||
|
}
|
||||||
|
if (previousNetherFolder.exists()) {
|
||||||
|
logger.warning("Ancien Nether détecté! Suppression...")
|
||||||
|
PreviousWorldUtils.resetNether()
|
||||||
|
}
|
||||||
|
|
||||||
val creator = WorldCreator("runnerdragon")
|
val creator = WorldCreator("runnerdragon")
|
||||||
creator.environment(World.Environment.NORMAL)
|
creator.environment(World.Environment.NORMAL)
|
||||||
creator.generateStructures(true)
|
creator.generateStructures(true)
|
||||||
creator.type(WorldType.NORMAL)
|
creator.type(WorldType.NORMAL)
|
||||||
|
|
||||||
logger.info("Création d'un nouveau monde...")
|
val creatorTheEnd = WorldCreator("world_the_end")
|
||||||
|
creatorTheEnd.environment(World.Environment.THE_END)
|
||||||
|
|
||||||
|
val creatorNether = WorldCreator("world_nether")
|
||||||
|
creatorNether.environment(World.Environment.NETHER)
|
||||||
|
|
||||||
|
logger.info("Création des nouveaux mondes...")
|
||||||
WORLD = Bukkit.createWorld(creator)!!
|
WORLD = Bukkit.createWorld(creator)!!
|
||||||
worldManager = WorldManager(WORLD)
|
WORLD_END = Bukkit.createWorld(creatorTheEnd)!!
|
||||||
|
WORLD_NETHER = Bukkit.createWorld(creatorNether)!!
|
||||||
|
worldManager = WorldManager(WORLD, WORLD_END, WORLD_NETHER)
|
||||||
|
|
||||||
playerManager = PlayerManager()
|
playerManager = PlayerManager()
|
||||||
teamManager = TeamManager(this)
|
teamManager = TeamManager(this)
|
||||||
|
|
||||||
server.pluginManager.registerEvents(DimensionEntranceListener(), this)
|
server.pluginManager.registerEvents(DimensionEntranceListener(), this)
|
||||||
|
server.pluginManager.registerEvents(BedInteractListener(), this)
|
||||||
server.pluginManager.registerEvents(EnderDragonListener(), this)
|
server.pluginManager.registerEvents(EnderDragonListener(), this)
|
||||||
server.pluginManager.registerEvents(PlayerJoinListener(), this)
|
server.pluginManager.registerEvents(PlayerJoinListener(), this)
|
||||||
server.pluginManager.registerEvents(PlayerQuitListener(), this)
|
server.pluginManager.registerEvents(PlayerQuitListener(), this)
|
||||||
|
@ -99,13 +122,12 @@ class RunnerDragon : JavaPlugin() {
|
||||||
GRACE_PERIOD_TASK?.taskId?.let { Bukkit.getScheduler().cancelTask(it) }
|
GRACE_PERIOD_TASK?.taskId?.let { Bukkit.getScheduler().cancelTask(it) }
|
||||||
TIME = 0
|
TIME = 0
|
||||||
DEAD_COWS = 0
|
DEAD_COWS = 0
|
||||||
worldManager.applyWaitingRules()
|
worldManager.applyRules()
|
||||||
|
|
||||||
logger.info("Génération du spawn...")
|
logger.info("Génération du spawn...")
|
||||||
LOBBY_SCHEMATIC = SchematicLoader(File("./lobby1.schem"), WORLD)
|
LOBBY_SCHEMATIC = SchematicLoader(File("./lobby1.schem"), WORLD)
|
||||||
val schematicSpawn = LOBBY_SCHEMATIC.spawnSchematicAt(0, SPAWN_HEIGHT, 0)
|
val schematicSpawn = LOBBY_SCHEMATIC.spawnSchematicAt(0, SPAWN_HEIGHT, 0)
|
||||||
SPAWN = Location(WORLD, 0.0, SPAWN_HEIGHT.plus(2).toDouble(), 0.0, -180f, 0f)
|
SPAWN = Location(WORLD, 0.0, SPAWN_HEIGHT.plus(2).toDouble(), 0.0, -180f, 0f)
|
||||||
WORLD.spawnLocation = SPAWN
|
|
||||||
Bukkit.unloadWorld("world", true)
|
Bukkit.unloadWorld("world", true)
|
||||||
|
|
||||||
logger.info("Création des équipes...")
|
logger.info("Création des équipes...")
|
||||||
|
@ -142,6 +164,7 @@ class RunnerDragon : JavaPlugin() {
|
||||||
|
|
||||||
GameState.GAME -> {
|
GameState.GAME -> {
|
||||||
Bukkit.broadcastMessage("$TITLE_MSG ${ChatColor.GOLD}${ChatColor.ITALIC}PVP activé !")
|
Bukkit.broadcastMessage("$TITLE_MSG ${ChatColor.GOLD}${ChatColor.ITALIC}PVP activé !")
|
||||||
|
GRACE_PERIOD_TASK?.taskId?.let { Bukkit.getScheduler().cancelTask(it) }
|
||||||
true
|
true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,12 @@ class GameSubCommand {
|
||||||
}
|
}
|
||||||
|
|
||||||
when (args[0]) {
|
when (args[0]) {
|
||||||
|
"end" -> {
|
||||||
|
Bukkit.getOnlinePlayers().forEach {
|
||||||
|
it.teleport(RunnerDragon.WORLD_END.spawnLocation)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
"state" -> {
|
"state" -> {
|
||||||
if (args.size == 2) {
|
if (args.size == 2) {
|
||||||
if (enumContains<GameState>(args[1])) {
|
if (enumContains<GameState>(args[1])) {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
package xyz.atnrch.dragon.event
|
package xyz.atnrch.dragon.event
|
||||||
|
|
||||||
|
import net.md_5.bungee.api.ChatColor
|
||||||
import org.bukkit.Bukkit
|
import org.bukkit.Bukkit
|
||||||
|
import org.bukkit.Sound
|
||||||
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.PlayerPortalEvent
|
import org.bukkit.event.player.PlayerPortalEvent
|
||||||
|
@ -15,12 +17,21 @@ class DimensionEntranceListener : Listener {
|
||||||
when (event.cause) {
|
when (event.cause) {
|
||||||
PlayerTeleportEvent.TeleportCause.NETHER_PORTAL -> if (RunnerDragon.NETHER_PORTAL_ENTERED.not()) {
|
PlayerTeleportEvent.TeleportCause.NETHER_PORTAL -> if (RunnerDragon.NETHER_PORTAL_ENTERED.not()) {
|
||||||
RunnerDragon.NETHER_PORTAL_ENTERED = true
|
RunnerDragon.NETHER_PORTAL_ENTERED = true
|
||||||
Bukkit.broadcastMessage("Nether portal 1st time!")
|
Bukkit.broadcastMessage("${RunnerDragon.TITLE_MSG} ${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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
PlayerTeleportEvent.TeleportCause.END_PORTAL -> if (RunnerDragon.END_PORTAL_ENTERED.not()) {
|
PlayerTeleportEvent.TeleportCause.END_PORTAL -> {
|
||||||
RunnerDragon.END_PORTAL_ENTERED = true
|
event.player.teleport(RunnerDragon.WORLD_END.spawnLocation)
|
||||||
Bukkit.broadcastMessage("End portal 1st time!")
|
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.getOnlinePlayers().forEach {
|
||||||
|
it.playSound(it.location, Sound.ENTITY_VILLAGER_CELEBRATE, 1f, 0.3f)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else -> {}
|
else -> {}
|
||||||
|
|
|
@ -9,6 +9,5 @@ class PlayerRespawnListener : Listener {
|
||||||
@EventHandler
|
@EventHandler
|
||||||
fun onRespawn(event: PlayerRespawnEvent) {
|
fun onRespawn(event: PlayerRespawnEvent) {
|
||||||
event.respawnLocation = RunnerDragon.SPAWN
|
event.respawnLocation = RunnerDragon.SPAWN
|
||||||
println("EVENT TRIGGERED")
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
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 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
|
||||||
|
}
|
||||||
|
LAST_BED_INTERACT.put(event.player.uniqueId, Instant.now())
|
||||||
|
}
|
||||||
|
}
|
|
@ -2,21 +2,53 @@ 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.EnderDragon
|
import org.bukkit.entity.*
|
||||||
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.EntityDeathEvent
|
import org.bukkit.event.entity.EntityDeathEvent
|
||||||
import xyz.atnrch.dragon.RunnerDragon
|
import xyz.atnrch.dragon.RunnerDragon
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
class EnderDragonListener : Listener {
|
class EnderDragonListener : Listener {
|
||||||
@EventHandler
|
@EventHandler
|
||||||
fun onEnderDragonDeath(event: EntityDeathEvent) {
|
fun onEnderDragonDeath(event: EntityDeathEvent) {
|
||||||
if (event.entity is EnderDragon) {
|
if (event.entity.type == EntityType.ENDER_DRAGON || event.entity is EnderDragon) {
|
||||||
val dragon: EnderDragon = event.entity as EnderDragon
|
val dragon = event.entity as EnderDragon
|
||||||
val player = dragon.killer
|
val entity = event.entity
|
||||||
|
val damageEvent = entity.lastDamageCause ?: return
|
||||||
|
|
||||||
|
var player: Player? = null
|
||||||
|
when (damageEvent.cause) {
|
||||||
|
EntityDamageEvent.DamageCause.BLOCK_EXPLOSION -> {
|
||||||
|
val first: Optional<UUID> = BedInteractListener.LAST_BED_INTERACT.asMap().entries.stream()
|
||||||
|
.sorted { a, b -> b.value.compareTo(a.value) }
|
||||||
|
.map { it.key }
|
||||||
|
.findFirst()
|
||||||
|
if (first.isEmpty) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
player = Bukkit.getPlayer(first.get()) ?: return
|
||||||
|
}
|
||||||
|
|
||||||
|
EntityDamageEvent.DamageCause.ENTITY_ATTACK, EntityDamageEvent.DamageCause.PROJECTILE -> {
|
||||||
|
val damager: Entity = damageEvent.entity
|
||||||
|
if (damager is Projectile) {
|
||||||
|
player = damager.shooter as Player
|
||||||
|
} else if (damager is Player) {
|
||||||
|
player = damager
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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.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?.name}!")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
package xyz.atnrch.dragon.world
|
||||||
|
|
||||||
|
import org.apache.commons.io.FileUtils
|
||||||
|
import org.bukkit.Bukkit
|
||||||
|
|
||||||
|
class PreviousWorldUtils {
|
||||||
|
companion object {
|
||||||
|
fun resetEnd() {
|
||||||
|
val end = Bukkit.getWorld("world_the_end")!!
|
||||||
|
end.loadedChunks.forEach { it.unload(false) }
|
||||||
|
Bukkit.unloadWorld(end, false)
|
||||||
|
FileUtils.deleteDirectory(end.worldFolder)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun resetNether() {
|
||||||
|
val nether = Bukkit.getWorld("world_nether")!!
|
||||||
|
nether.loadedChunks.forEach { it.unload(false) }
|
||||||
|
Bukkit.unloadWorld(nether, false)
|
||||||
|
FileUtils.deleteDirectory(nether.worldFolder)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,9 +5,12 @@ import org.bukkit.World
|
||||||
import org.bukkit.entity.Player
|
import org.bukkit.entity.Player
|
||||||
import xyz.atnrch.dragon.RunnerDragon
|
import xyz.atnrch.dragon.RunnerDragon
|
||||||
|
|
||||||
class WorldManager(private val world: World) {
|
class WorldManager(private vararg val worlds: World) {
|
||||||
fun applyWaitingRules() {
|
fun applyRules() {
|
||||||
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false)
|
worlds.forEach {
|
||||||
|
it.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false)
|
||||||
|
it.setGameRule(GameRule.ANNOUNCE_ADVANCEMENTS, false)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fun teleportAtSpawn(player: Player) {
|
fun teleportAtSpawn(player: Player) {
|
||||||
|
|
Loading…
Reference in a new issue