1
0
Fork 0

more bugs fixed

This commit is contained in:
aro 2023-03-04 16:12:26 +01:00
parent 2a14483bf3
commit da9c02dbbb
8 changed files with 138 additions and 16 deletions

View file

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

View file

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

View file

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

View file

@ -9,6 +9,5 @@ class PlayerRespawnListener : Listener {
@EventHandler
fun onRespawn(event: PlayerRespawnEvent) {
event.respawnLocation = RunnerDragon.SPAWN
println("EVENT TRIGGERED")
}
}

View file

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

View file

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

View file

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

View file

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