다시 집에서 만든, 이번엔 괜찮은

This commit is contained in:
faiz36 2023-03-30 00:34:51 +09:00
parent 53f44071cc
commit 28799cadeb
8 changed files with 46 additions and 65 deletions

View File

@ -3,12 +3,17 @@ package group.pvpconnect.combat_f
import group.pvpconnect.combat_f.cmd.CombatCmd import group.pvpconnect.combat_f.cmd.CombatCmd
import group.pvpconnect.combat_f.data.CombatData import group.pvpconnect.combat_f.data.CombatData
import group.pvpconnect.combat_f.event.CombatEvent import group.pvpconnect.combat_f.event.CombatEvent
import org.bukkit.Bukkit
import org.bukkit.ChatColor
import org.bukkit.plugin.java.JavaPlugin import org.bukkit.plugin.java.JavaPlugin
import org.bukkit.scheduler.BukkitTask
import java.util.UUID import java.util.UUID
@Suppress("unused") @Suppress("unused")
class Main:JavaPlugin() { class Main:JavaPlugin() {
var list:HashMap<UUID,Pair<UUID?,Long?>> = HashMap() // 첫번째 전투 여부, 두번째 전투자 UUID, 남은 시간?
var list:HashMap<UUID,Triple<Boolean,UUID?,Long?>> = HashMap()
lateinit var schedule:BukkitTask
lateinit var instance: Main lateinit var instance: Main
val combatData by lazy { CombatData(this) } val combatData by lazy { CombatData(this) }
@ -17,9 +22,26 @@ class Main:JavaPlugin() {
instance = this instance = this
} }
override fun onDisable() {
schedule.cancel()
}
override fun onEnable() { override fun onEnable() {
CombatCmd(this,combatData) CombatCmd(this,combatData)
CombatEvent(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)
} }
} }

View File

@ -2,10 +2,12 @@ package group.pvpconnect.combat_f.event
import group.pvpconnect.combat_f.Main import group.pvpconnect.combat_f.Main
import group.pvpconnect.combat_f.data.CombatData import group.pvpconnect.combat_f.data.CombatData
import net.kyori.adventure.text.Component
import org.bukkit.Bukkit import org.bukkit.Bukkit
import org.bukkit.entity.EntityType import org.bukkit.entity.EntityType
import org.bukkit.entity.Player import org.bukkit.entity.Player
import org.bukkit.event.EventHandler import org.bukkit.event.EventHandler
import org.bukkit.event.EventPriority
import org.bukkit.event.Listener import org.bukkit.event.Listener
import org.bukkit.event.entity.EntityDamageByEntityEvent import org.bukkit.event.entity.EntityDamageByEntityEvent
import org.bukkit.event.entity.PlayerDeathEvent 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){ fun onDamage(e:EntityDamageByEntityEvent){
if(e.entityType != EntityType.PLAYER) return if(e.entityType != EntityType.PLAYER) return
if(e.damager.type != EntityType.PLAYER) return if(e.damager.type != EntityType.PLAYER) return
val player:Player = e.entity as Player val list = plugin.instance.list[e.entity.uniqueId]
val damager:Player = e.damager as Player plugin.instance.list[e.entity.uniqueId] = Triple(true,e.damager.uniqueId,System.currentTimeMillis())
plugin.instance.list[e.entity.uniqueId] = Pair(e.damager.uniqueId,System.currentTimeMillis()/1000) plugin.instance.list[e.damager.uniqueId] = Triple(true,e.entity.uniqueId,System.currentTimeMillis())
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)
}
}
} }
@EventHandler @EventHandler
fun onOtherDamage(e:EntityDamageByEntityEvent){ 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.entityType != EntityType.PLAYER) return
if(e.damager.type != 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 e.isCancelled = true
} }
} }
@EventHandler @EventHandler
fun onCommand(e:PlayerCommandPreprocessEvent){ fun onQuit(e:PlayerQuitEvent){
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){
val list = plugin.instance.list[e.player.uniqueId] ?: return val list = plugin.instance.list[e.player.uniqueId] ?: return
val time = list.second ?: return if(!list.first) return
val killer = list.first ?: return e.player.killer = Bukkit.getPlayer(list.second!!)
val player = e.player e.player.health = 0.0
val killerP = Bukkit.getPlayer(killer) plugin.instance.list[e.player.uniqueId] = Triple(false,null,null)
val ctime = combatData.instance.getTime() plugin.instance.list[list.second!!] = Triple(false,null,null)
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)
}
}
} }
@EventHandler @EventHandler
fun onKill(e:PlayerDeathEvent){ fun onDeath(e:PlayerDeathEvent){
val ctime = combatData.instance.getTime()
val list = plugin.instance.list[e.player.uniqueId] ?: return val list = plugin.instance.list[e.player.uniqueId] ?: return
val time = list.second ?: return if(!list.first) return
val killer = list.first ?: return plugin.instance.list[e.player.uniqueId] = Triple(false,null,null)
if(time + ctime <= System.currentTimeMillis() /1000){ plugin.instance.list[list.second!!] = Triple(false,null,null)
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)
}
}
}
} }
} }