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