diff --git a/.gradle/7.4.2/checksums/checksums.lock b/.gradle/7.4.2/checksums/checksums.lock index c7371bf..30f5923 100644 Binary files a/.gradle/7.4.2/checksums/checksums.lock and b/.gradle/7.4.2/checksums/checksums.lock differ diff --git a/.gradle/7.4.2/executionHistory/executionHistory.bin b/.gradle/7.4.2/executionHistory/executionHistory.bin index 7f40e65..7fdc0c8 100644 Binary files a/.gradle/7.4.2/executionHistory/executionHistory.bin and b/.gradle/7.4.2/executionHistory/executionHistory.bin differ diff --git a/.gradle/7.4.2/executionHistory/executionHistory.lock b/.gradle/7.4.2/executionHistory/executionHistory.lock index 8819c8a..d806e61 100644 Binary files a/.gradle/7.4.2/executionHistory/executionHistory.lock and b/.gradle/7.4.2/executionHistory/executionHistory.lock differ diff --git a/.gradle/7.4.2/fileHashes/fileHashes.bin b/.gradle/7.4.2/fileHashes/fileHashes.bin index a10e801..ad312cb 100644 Binary files a/.gradle/7.4.2/fileHashes/fileHashes.bin and b/.gradle/7.4.2/fileHashes/fileHashes.bin differ diff --git a/.gradle/7.4.2/fileHashes/fileHashes.lock b/.gradle/7.4.2/fileHashes/fileHashes.lock index 18f5fca..aed9128 100644 Binary files a/.gradle/7.4.2/fileHashes/fileHashes.lock and b/.gradle/7.4.2/fileHashes/fileHashes.lock differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index b3df897..84e38a7 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/src/main/kotlin/group/pvpconnect/combat_f/Main.kt b/src/main/kotlin/group/pvpconnect/combat_f/Main.kt index d2e6895..26852c5 100644 --- a/src/main/kotlin/group/pvpconnect/combat_f/Main.kt +++ b/src/main/kotlin/group/pvpconnect/combat_f/Main.kt @@ -3,12 +3,17 @@ package group.pvpconnect.combat_f import group.pvpconnect.combat_f.cmd.CombatCmd import group.pvpconnect.combat_f.data.CombatData import group.pvpconnect.combat_f.event.CombatEvent +import org.bukkit.Bukkit +import org.bukkit.ChatColor import org.bukkit.plugin.java.JavaPlugin +import org.bukkit.scheduler.BukkitTask import java.util.UUID @Suppress("unused") class Main:JavaPlugin() { - var list:HashMap> = HashMap() + // 첫번째 전투 여부, 두번째 전투자 UUID, 남은 시간? + var list:HashMap> = HashMap() + lateinit var schedule:BukkitTask lateinit var instance: Main val combatData by lazy { CombatData(this) } @@ -17,9 +22,26 @@ class Main:JavaPlugin() { instance = this } + override fun onDisable() { + schedule.cancel() + } + override fun onEnable() { CombatCmd(this,combatData) CombatEvent(this,combatData) + schedule = this.server.scheduler.runTaskTimerAsynchronously(this, Runnable { + list.forEach{ + if(it.value.third!!/1000 + combatData.instance.getTime() <= System.currentTimeMillis()/1000){ + list[it.key] = Triple(false,null,null) + } + } + Bukkit.getOnlinePlayers().forEach{ + if(list[it.uniqueId] == null) return@forEach + if(!list[it.uniqueId]!!.first) return@forEach + + it.sendActionBar("${ChatColor.WHITE}${Bukkit.getPlayer(list[it.uniqueId]!!.second!!)!!.name}${ChatColor.RED}님과 전투중입니다! ${ChatColor.WHITE}${list[it.uniqueId]!!.third!! /1000 + combatData.instance.getTime() - System.currentTimeMillis()/1000}${ChatColor.RED}초 뒤 전투모드가 끝납니다!") + } + },1L,1L) } } \ No newline at end of file diff --git a/src/main/kotlin/group/pvpconnect/combat_f/event/CombatEvent.kt b/src/main/kotlin/group/pvpconnect/combat_f/event/CombatEvent.kt index 1667e4c..2aa08c0 100644 --- a/src/main/kotlin/group/pvpconnect/combat_f/event/CombatEvent.kt +++ b/src/main/kotlin/group/pvpconnect/combat_f/event/CombatEvent.kt @@ -2,10 +2,12 @@ package group.pvpconnect.combat_f.event import group.pvpconnect.combat_f.Main import group.pvpconnect.combat_f.data.CombatData +import net.kyori.adventure.text.Component import org.bukkit.Bukkit import org.bukkit.entity.EntityType import org.bukkit.entity.Player import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority import org.bukkit.event.Listener import org.bukkit.event.entity.EntityDamageByEntityEvent import org.bukkit.event.entity.PlayerDeathEvent @@ -22,86 +24,43 @@ class CombatEvent(private val plugin:Main, private val combatData: CombatData):L fun onDamage(e:EntityDamageByEntityEvent){ if(e.entityType != EntityType.PLAYER) return if(e.damager.type != EntityType.PLAYER) return - val player:Player = e.entity as Player - val damager:Player = e.damager as Player - plugin.instance.list[e.entity.uniqueId] = Pair(e.damager.uniqueId,System.currentTimeMillis()/1000) - plugin.instance.list[e.damager.uniqueId] = Pair(e.entity.uniqueId,System.currentTimeMillis()/1000) - if(combatData.instance.getCanSeeWorld(player.world.name)) { - Bukkit.getOnlinePlayers().forEach { - it.hidePlayer(plugin, player) - it.hidePlayer(plugin, damager) - if (it.uniqueId == player.uniqueId || it.uniqueId == damager.uniqueId) return - player.hidePlayer(plugin, it) - damager.hidePlayer(plugin, it) - } - } + val list = plugin.instance.list[e.entity.uniqueId] + plugin.instance.list[e.entity.uniqueId] = Triple(true,e.damager.uniqueId,System.currentTimeMillis()) + plugin.instance.list[e.damager.uniqueId] = Triple(true,e.entity.uniqueId,System.currentTimeMillis()) } @EventHandler fun onOtherDamage(e:EntityDamageByEntityEvent){ - val list = plugin.instance.list[e.entity.uniqueId] ?: return - val time = list.second ?: return - val ctime = combatData.instance.getTime() if(e.entityType != EntityType.PLAYER) return if(e.damager.type != EntityType.PLAYER) return - if(time + ctime >= System.currentTimeMillis()/1000){ + val list = plugin.instance.list[e.entity.uniqueId] ?: return + if(!list.first) return + if(list.second == e.damager.uniqueId) { + plugin.instance.list[e.entity.uniqueId] = Triple(true,e.damager.uniqueId,System.currentTimeMillis()) + plugin.instance.list[e.damager.uniqueId] = Triple(true,e.entity.uniqueId,System.currentTimeMillis()) + return + }else{ e.isCancelled = true } + } @EventHandler - fun onCommand(e:PlayerCommandPreprocessEvent){ - val time = plugin.instance.list[e.player.uniqueId]?.second ?: return - val ctime = combatData.instance.getTime() - if(time + ctime >= System.currentTimeMillis() /1000){ - e.isCancelled = true - } - } - - @EventHandler - fun onLeave(e:PlayerQuitEvent){ + fun onQuit(e:PlayerQuitEvent){ val list = plugin.instance.list[e.player.uniqueId] ?: return - val time = list.second ?: return - val killer = list.first ?: return - val player = e.player - val killerP = Bukkit.getPlayer(killer) - val ctime = combatData.instance.getTime() - if(time + ctime >= System.currentTimeMillis() /1000){ - e.player.killer = Bukkit.getPlayer(plugin.instance.list[e.player.uniqueId]!!.first!!) - e.player.health = 0.0 - plugin.instance.list[e.player.uniqueId] = Pair(null,null) - plugin.instance.list[killer] = Pair(null,null) - } - if(combatData.instance.getCanSeeWorld(player.world.name)) { - Bukkit.getOnlinePlayers().forEach { - it.showPlayer(plugin, player) - it.showPlayer(plugin, killerP!!) - if (it.uniqueId == player.uniqueId || it.uniqueId == killer) return - player.showPlayer(plugin, it) - killerP.showPlayer(plugin, it) - } - } + if(!list.first) return + e.player.killer = Bukkit.getPlayer(list.second!!) + e.player.health = 0.0 + plugin.instance.list[e.player.uniqueId] = Triple(false,null,null) + plugin.instance.list[list.second!!] = Triple(false,null,null) } @EventHandler - fun onKill(e:PlayerDeathEvent){ - val ctime = combatData.instance.getTime() + fun onDeath(e:PlayerDeathEvent){ val list = plugin.instance.list[e.player.uniqueId] ?: return - val time = list.second ?: return - val killer = list.first ?: return - if(time + ctime <= System.currentTimeMillis() /1000){ - plugin.instance.list[e.player.uniqueId] = Pair(null,null) - plugin.instance.list[killer] = Pair(null,null) - if(combatData.instance.getCanSeeWorld(e.player.world.name)) { - Bukkit.getOnlinePlayers().forEach { - it.showPlayer(plugin, e.player) - it.showPlayer(plugin, e.player.killer!!) - if (it.uniqueId == e.player.uniqueId || it.uniqueId == killer) return - e.player.showPlayer(plugin, it) - e.player.killer!!.showPlayer(plugin, it) - } - } - } + if(!list.first) return + plugin.instance.list[e.player.uniqueId] = Triple(false,null,null) + plugin.instance.list[list.second!!] = Triple(false,null,null) } } \ No newline at end of file