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 xyz.atnrch.dragon.commands.MainCommand
|
||||
import xyz.atnrch.dragon.event.*
|
||||
import xyz.atnrch.dragon.event.end.BedInteractListener
|
||||
import xyz.atnrch.dragon.event.end.EnderDragonListener
|
||||
import xyz.atnrch.dragon.event.waiting.WaitingListener
|
||||
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.teams.Team
|
||||
import xyz.atnrch.dragon.teams.TeamManager
|
||||
import xyz.atnrch.dragon.world.PreviousWorldUtils
|
||||
import xyz.atnrch.dragon.world.WorldManager
|
||||
import java.io.File
|
||||
|
||||
|
@ -43,6 +45,8 @@ class RunnerDragon : JavaPlugin() {
|
|||
|
||||
lateinit var SPAWN: Location
|
||||
lateinit var WORLD: World
|
||||
lateinit var WORLD_END: World
|
||||
lateinit var WORLD_NETHER: World
|
||||
lateinit var LOBBY_SCHEMATIC: SchematicLoader
|
||||
}
|
||||
|
||||
|
@ -54,24 +58,43 @@ class RunnerDragon : JavaPlugin() {
|
|||
instance = this
|
||||
|
||||
val previousWorldFolder = File("runnerdragon")
|
||||
val previousEndFolder = File("world_the_end")
|
||||
val previousNetherFolder = File("world_nether")
|
||||
if (previousWorldFolder.exists()) {
|
||||
logger.warning("Ancien monde détecté! Suppression...")
|
||||
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")
|
||||
creator.environment(World.Environment.NORMAL)
|
||||
creator.generateStructures(true)
|
||||
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)!!
|
||||
worldManager = WorldManager(WORLD)
|
||||
WORLD_END = Bukkit.createWorld(creatorTheEnd)!!
|
||||
WORLD_NETHER = Bukkit.createWorld(creatorNether)!!
|
||||
worldManager = WorldManager(WORLD, WORLD_END, WORLD_NETHER)
|
||||
|
||||
playerManager = PlayerManager()
|
||||
teamManager = TeamManager(this)
|
||||
|
||||
server.pluginManager.registerEvents(DimensionEntranceListener(), this)
|
||||
server.pluginManager.registerEvents(BedInteractListener(), this)
|
||||
server.pluginManager.registerEvents(EnderDragonListener(), this)
|
||||
server.pluginManager.registerEvents(PlayerJoinListener(), this)
|
||||
server.pluginManager.registerEvents(PlayerQuitListener(), this)
|
||||
|
@ -99,13 +122,12 @@ class RunnerDragon : JavaPlugin() {
|
|||
GRACE_PERIOD_TASK?.taskId?.let { Bukkit.getScheduler().cancelTask(it) }
|
||||
TIME = 0
|
||||
DEAD_COWS = 0
|
||||
worldManager.applyWaitingRules()
|
||||
worldManager.applyRules()
|
||||
|
||||
logger.info("Génération du spawn...")
|
||||
LOBBY_SCHEMATIC = SchematicLoader(File("./lobby1.schem"), WORLD)
|
||||
val schematicSpawn = LOBBY_SCHEMATIC.spawnSchematicAt(0, SPAWN_HEIGHT, 0)
|
||||
SPAWN = Location(WORLD, 0.0, SPAWN_HEIGHT.plus(2).toDouble(), 0.0, -180f, 0f)
|
||||
WORLD.spawnLocation = SPAWN
|
||||
Bukkit.unloadWorld("world", true)
|
||||
|
||||
logger.info("Création des équipes...")
|
||||
|
@ -142,6 +164,7 @@ class RunnerDragon : JavaPlugin() {
|
|||
|
||||
GameState.GAME -> {
|
||||
Bukkit.broadcastMessage("$TITLE_MSG ${ChatColor.GOLD}${ChatColor.ITALIC}PVP activé !")
|
||||
GRACE_PERIOD_TASK?.taskId?.let { Bukkit.getScheduler().cancelTask(it) }
|
||||
true
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,12 @@ class GameSubCommand {
|
|||
}
|
||||
|
||||
when (args[0]) {
|
||||
"end" -> {
|
||||
Bukkit.getOnlinePlayers().forEach {
|
||||
it.teleport(RunnerDragon.WORLD_END.spawnLocation)
|
||||
}
|
||||
}
|
||||
|
||||
"state" -> {
|
||||
if (args.size == 2) {
|
||||
if (enumContains<GameState>(args[1])) {
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
package xyz.atnrch.dragon.event
|
||||
|
||||
import net.md_5.bungee.api.ChatColor
|
||||
import org.bukkit.Bukkit
|
||||
import org.bukkit.Sound
|
||||
import org.bukkit.event.EventHandler
|
||||
import org.bukkit.event.Listener
|
||||
import org.bukkit.event.player.PlayerPortalEvent
|
||||
|
@ -15,12 +17,21 @@ class DimensionEntranceListener : Listener {
|
|||
when (event.cause) {
|
||||
PlayerTeleportEvent.TeleportCause.NETHER_PORTAL -> if (RunnerDragon.NETHER_PORTAL_ENTERED.not()) {
|
||||
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()) {
|
||||
RunnerDragon.END_PORTAL_ENTERED = true
|
||||
Bukkit.broadcastMessage("End portal 1st time!")
|
||||
PlayerTeleportEvent.TeleportCause.END_PORTAL -> {
|
||||
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.getOnlinePlayers().forEach {
|
||||
it.playSound(it.location, Sound.ENTITY_VILLAGER_CELEBRATE, 1f, 0.3f)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
else -> {}
|
||||
|
|
|
@ -9,6 +9,5 @@ class PlayerRespawnListener : Listener {
|
|||
@EventHandler
|
||||
fun onRespawn(event: PlayerRespawnEvent) {
|
||||
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.ChatColor
|
||||
import org.bukkit.entity.EnderDragon
|
||||
import org.bukkit.entity.*
|
||||
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 java.util.*
|
||||
|
||||
class EnderDragonListener : Listener {
|
||||
@EventHandler
|
||||
fun onEnderDragonDeath(event: EntityDeathEvent) {
|
||||
if (event.entity is EnderDragon) {
|
||||
val dragon: EnderDragon = event.entity as EnderDragon
|
||||
val player = dragon.killer
|
||||
if (event.entity.type == EntityType.ENDER_DRAGON || event.entity is EnderDragon) {
|
||||
val dragon = event.entity as EnderDragon
|
||||
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 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}!")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 xyz.atnrch.dragon.RunnerDragon
|
||||
|
||||
class WorldManager(private val world: World) {
|
||||
fun applyWaitingRules() {
|
||||
world.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false)
|
||||
class WorldManager(private vararg val worlds: World) {
|
||||
fun applyRules() {
|
||||
worlds.forEach {
|
||||
it.setGameRule(GameRule.DO_DAYLIGHT_CYCLE, false)
|
||||
it.setGameRule(GameRule.ANNOUNCE_ADVANCEMENTS, false)
|
||||
}
|
||||
}
|
||||
|
||||
fun teleportAtSpawn(player: Player) {
|
||||
|
|
Loading…
Reference in a new issue