diff --git a/.gradle/7.4.2/checksums/checksums.lock b/.gradle/7.4.2/checksums/checksums.lock index 6dab0f9..c7371bf 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/checksums/md5-checksums.bin b/.gradle/7.4.2/checksums/md5-checksums.bin index 278fbb1..87b578e 100644 Binary files a/.gradle/7.4.2/checksums/md5-checksums.bin and b/.gradle/7.4.2/checksums/md5-checksums.bin differ diff --git a/.gradle/7.4.2/checksums/sha1-checksums.bin b/.gradle/7.4.2/checksums/sha1-checksums.bin index c608507..d8702da 100644 Binary files a/.gradle/7.4.2/checksums/sha1-checksums.bin and b/.gradle/7.4.2/checksums/sha1-checksums.bin differ diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index e94ad6e..b3df897 100644 Binary files a/.gradle/buildOutputCleanup/buildOutputCleanup.lock and b/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin index d0329bf..29d05ad 100644 Binary files a/.gradle/buildOutputCleanup/outputFiles.bin and b/.gradle/buildOutputCleanup/outputFiles.bin differ diff --git a/.idea/discord.xml b/.idea/discord.xml index 30bab2a..d8e9561 100644 --- a/.idea/discord.xml +++ b/.idea/discord.xml @@ -1,7 +1,7 @@ - \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 0bcc607..90be113 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,6 @@ plugins { kotlin("jvm") version "1.8.0" + id("io.papermc.paperweight.userdev") version "1.5.3" } group = "group.pvpconnect" @@ -7,7 +8,6 @@ version = "1.0-SNAPSHOT" repositories { mavenCentral() - maven("https://repo.papermc.io/repository/maven-public/") } java { @@ -16,7 +16,8 @@ java { dependencies { testImplementation(kotlin("test")) - compileOnly("io.papermc.paper:paper-api:1.19.2-R0.1-SNAPSHOT") + paperweight.paperDevBundle("1.19.2-R0.1-SNAPSHOT") + implementation("io.github.monun:kommand-api:3.1.3") } tasks.test { diff --git a/src/main/kotlin/group/pvpconnect/combat_f/Main.kt b/src/main/kotlin/group/pvpconnect/combat_f/Main.kt index 875f5b6..d2e6895 100644 --- a/src/main/kotlin/group/pvpconnect/combat_f/Main.kt +++ b/src/main/kotlin/group/pvpconnect/combat_f/Main.kt @@ -1,11 +1,25 @@ 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.plugin.java.JavaPlugin +import java.util.UUID +@Suppress("unused") class Main:JavaPlugin() { + var list:HashMap> = HashMap() + lateinit var instance: Main + + val combatData by lazy { CombatData(this) } + + override fun onLoad() { + instance = this + } override fun onEnable() { - + CombatCmd(this,combatData) + CombatEvent(this,combatData) } } \ No newline at end of file diff --git a/src/main/kotlin/group/pvpconnect/combat_f/cmd/CombatCmd.kt b/src/main/kotlin/group/pvpconnect/combat_f/cmd/CombatCmd.kt new file mode 100644 index 0000000..c542bbb --- /dev/null +++ b/src/main/kotlin/group/pvpconnect/combat_f/cmd/CombatCmd.kt @@ -0,0 +1,51 @@ +package group.pvpconnect.combat_f.cmd + +import group.pvpconnect.combat_f.data.CombatData +import io.github.monun.kommand.getValue +import io.github.monun.kommand.kommand +import org.bukkit.ChatColor +import org.bukkit.World +import org.bukkit.plugin.Plugin + +class CombatCmd(plugin:Plugin, val cd:CombatData) { + init { + plugin.apply { + kommand { + register("combat"){ + requires { isPlayer && isOp } + then("toggle"){ + then("world" to dimension()){ + executes { + val world: World by it + val bool = cd.instance.getUseWorld(world.name) + cd.instance.setUseWorld(world.name,!bool) + sender.sendMessage("${ChatColor.BOLD}${ChatColor.GOLD}[${ChatColor.GREEN}✓${ChatColor.GOLD}] ${ChatColor.WHITE}${world.name}의 컴뱃 모드 사용이 ${if(bool)"활성화 되었습니다!" else "비활성화 되었습니다!"}") + } + } + } + then("visiable"){ + then("world" to dimension()){ + executes { + val world:World by it + val bool = cd.instance.getCanSeeWorld(world.name) + cd.instance.setCanSeeWorld(world.name,!bool) + sender.sendMessage("${ChatColor.BOLD}${ChatColor.GOLD}[${ChatColor.GREEN}✓${ChatColor.GOLD}] ${ChatColor.WHITE}${world.name}의 컴뱃중 다른 사람 볼수있음이 ${if(bool)"활성화 되었습니다!" else "비활성화 되었습니다!"}") + } + } + } + then("time"){ + then("int" to int()){ + executes { + val int:Int by it + val otime = cd.instance.getTime() + val ctime = int + cd.instance.setTime(ctime) + sender.sendMessage("${ChatColor.BOLD}${ChatColor.GOLD}[${ChatColor.GREEN}✓${ChatColor.GOLD}] ${ChatColor.WHITE}컴뱃타임이 ${otime}에서 ${ctime}으로 변경되었습니다!") + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/src/main/kotlin/group/pvpconnect/combat_f/data/CombatData.kt b/src/main/kotlin/group/pvpconnect/combat_f/data/CombatData.kt new file mode 100644 index 0000000..9e81813 --- /dev/null +++ b/src/main/kotlin/group/pvpconnect/combat_f/data/CombatData.kt @@ -0,0 +1,38 @@ +package group.pvpconnect.combat_f.data + +import org.bukkit.configuration.file.YamlConfiguration +import org.bukkit.plugin.Plugin +import java.io.File + +@Suppress("unused") +class CombatData(val plugin:Plugin) { + var instance:CombatData = this + + private val file get() = File(plugin.dataFolder, "data.yml") + private val yaml = YamlConfiguration.loadConfiguration(file) + + fun getUseWorld(world:String):Boolean{ + return yaml.getBoolean("${world}.use") + } + + fun setUseWorld(world:String,use:Boolean){ + yaml.set("${world}.use",use) + } + + fun getCanSeeWorld(world:String):Boolean{ + return yaml.getBoolean("${world}.see") + } + + fun setCanSeeWorld(world:String,see:Boolean){ + yaml.set("${world}.see",see) + } + + fun setTime(time:Int){ + yaml.set("time",time) + } + + fun getTime():Int{ + return yaml.getInt("time") + } + +} \ 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 new file mode 100644 index 0000000..1667e4c --- /dev/null +++ b/src/main/kotlin/group/pvpconnect/combat_f/event/CombatEvent.kt @@ -0,0 +1,107 @@ +package group.pvpconnect.combat_f.event + +import group.pvpconnect.combat_f.Main +import group.pvpconnect.combat_f.data.CombatData +import org.bukkit.Bukkit +import org.bukkit.entity.EntityType +import org.bukkit.entity.Player +import org.bukkit.event.EventHandler +import org.bukkit.event.Listener +import org.bukkit.event.entity.EntityDamageByEntityEvent +import org.bukkit.event.entity.PlayerDeathEvent +import org.bukkit.event.player.PlayerCommandPreprocessEvent +import org.bukkit.event.player.PlayerQuitEvent + +class CombatEvent(private val plugin:Main, private val combatData: CombatData):Listener { + + init { + Bukkit.getPluginManager().registerEvents(this,plugin) + } + + @EventHandler + 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) + } + } + } + + @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){ + 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){ + 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) + } + } + } + + @EventHandler + fun onKill(e:PlayerDeathEvent){ + val ctime = combatData.instance.getTime() + 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) + } + } + } + } + +} \ No newline at end of file diff --git a/src/main/resources/plugin.yml b/src/main/resources/plugin.yml new file mode 100644 index 0000000..3b994f6 --- /dev/null +++ b/src/main/resources/plugin.yml @@ -0,0 +1,7 @@ +name: Combat +version: 1.0-SNAPSHOT +main: group.pvpconnect.combat_f.Main +api-version: 1.19 +author: faiz +libraries: + - io.github.monun:kommand-core:3.1.3 \ No newline at end of file