diff --git a/.idea/.gitignore b/.idea/.gitignore
deleted file mode 100644
index a9d7db9..0000000
--- a/.idea/.gitignore
+++ /dev/null
@@ -1,10 +0,0 @@
-# Default ignored files
-/shelf/
-/workspace.xml
-# Editor-based HTTP Client requests
-/httpRequests/
-# Datasource local storage ignored files
-/dataSources/
-/dataSources.local.xml
-# GitHub Copilot persisted chat sessions
-/copilot/chatSessions
diff --git a/.idea/discord.xml b/.idea/discord.xml
deleted file mode 100644
index d8e9561..0000000
--- a/.idea/discord.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/src/main/kotlin/me/faiz/combat_f/Main.kt b/src/main/kotlin/me/faiz/combat_f/Main.kt
index ddc30d8..c357d1f 100644
--- a/src/main/kotlin/me/faiz/combat_f/Main.kt
+++ b/src/main/kotlin/me/faiz/combat_f/Main.kt
@@ -2,14 +2,22 @@ package me.faiz.combat_f
import me.faiz.combat_f.cmd.MainCommand
import me.faiz.combat_f.data.MainData
+import me.faiz.combat_f.listener.MainListener
import org.bukkit.plugin.java.JavaPlugin
+import java.util.*
+import kotlin.collections.ArrayList
+import kotlin.collections.HashMap
-class Main:JavaPlugin() {
+class Main : JavaPlugin() {
- init{
+ var clist:HashMap> = HashMap()
+
+ init {
instance = this
}
+ val list: MutableList> = ArrayList()
+
private val maindata by lazy { MainData(this) }
override fun onDisable() {
@@ -17,7 +25,8 @@ class Main:JavaPlugin() {
}
override fun onEnable() {
- MainCommand(this,maindata)
+ MainCommand(this, maindata)
+ MainListener(this, maindata)
}
companion object {
diff --git a/src/main/kotlin/me/faiz/combat_f/cmd/MainCommand.kt b/src/main/kotlin/me/faiz/combat_f/cmd/MainCommand.kt
index 87f5ba4..4526f47 100644
--- a/src/main/kotlin/me/faiz/combat_f/cmd/MainCommand.kt
+++ b/src/main/kotlin/me/faiz/combat_f/cmd/MainCommand.kt
@@ -6,7 +6,7 @@ import me.faiz.combat_f.data.MainData
import me.faiz.combat_f.handler.MainHandler
import org.bukkit.entity.Player
-class MainCommand(private val main: Main,private val data: MainData) {
+class MainCommand(private val main: Main, private val data: MainData) {
init {
main.apply {
@@ -14,10 +14,10 @@ class MainCommand(private val main: Main,private val data: MainData) {
register("combat") {
requires { isOp }
executes {
- if(sender !is Player) {
+ if (sender !is Player) {
sender.sendMessage("This command can use Player! \n Please use another command!")
return@executes
- }else MainHandler(sender as Player,data,main)
+ } else MainHandler(sender as Player, data, main)
}
}
}
diff --git a/src/main/kotlin/me/faiz/combat_f/data/MainData.kt b/src/main/kotlin/me/faiz/combat_f/data/MainData.kt
index 23a605d..d01d71b 100644
--- a/src/main/kotlin/me/faiz/combat_f/data/MainData.kt
+++ b/src/main/kotlin/me/faiz/combat_f/data/MainData.kt
@@ -4,29 +4,43 @@ import org.bukkit.configuration.file.YamlConfiguration
import org.bukkit.plugin.Plugin
import java.io.File
-class MainData(private val plugin:Plugin) {
- private val file get() = File(plugin.dataFolder,"data.yml")
+class MainData(private val plugin: Plugin) {
+ private val file get() = File(plugin.dataFolder, "data.yml")
private val yaml = YamlConfiguration.loadConfiguration(file)
- fun getUseWorld(uid:String):Boolean{
+ fun getUseWorld(uid: String): Boolean {
return yaml.getBoolean("$uid.use")
}
- fun setUseWorld(uid:String,boolean: Boolean){
- yaml.set("$uid.use",boolean)
+ fun setUseWorld(uid: String, boolean: Boolean) {
+ yaml.set("$uid.use", boolean)
}
- fun getTimeWorld(uid:String):Int{
- return if(yaml.getInt("$uid.time") == 0) -1 else yaml.getInt("$uid.time")
+ fun getTimeWorld(uid: String): Int {
+ return if (yaml.getInt("$uid.time") == 0) -1 else yaml.getInt("$uid.time")
}
- fun setTimeWorld(uid:String,time:Int){
- yaml.set("$uid.time",time)
+ fun setTimeWorld(uid: String, time: Int) {
+ yaml.set("$uid.time", time)
}
+ fun getHitOtherWorld(uid: String): Boolean {
+ return yaml.getBoolean("$uid.hitOther")
+ }
+ fun setHitOtherWorld(uid: String, bool: Boolean) {
+ yaml.set("$uid.hitOther", bool)
+ }
- fun save(){
+ fun getVisibleWorld(uid:String): Boolean{
+ return yaml.getBoolean("$uid.visible")
+ }
+
+ fun setVisibleWorld(uid: String, bool: Boolean){
+ yaml.set("$uid.visible",bool)
+ }
+
+ fun save() {
yaml.save(file)
}
diff --git a/src/main/kotlin/me/faiz/combat_f/handler/MainHandler.kt b/src/main/kotlin/me/faiz/combat_f/handler/MainHandler.kt
index bc525ab..9dbed84 100644
--- a/src/main/kotlin/me/faiz/combat_f/handler/MainHandler.kt
+++ b/src/main/kotlin/me/faiz/combat_f/handler/MainHandler.kt
@@ -4,6 +4,10 @@ import io.github.monun.invfx.InvFX
import io.github.monun.invfx.openFrame
import me.faiz.combat_f.Main
import me.faiz.combat_f.data.MainData
+import me.faiz.combat_f.handler.children.HitOtherHandler
+import me.faiz.combat_f.handler.children.TimeHandler
+import me.faiz.combat_f.handler.children.UseHandler
+import me.faiz.combat_f.handler.children.VisibleHandler
import net.kyori.adventure.text.Component
import net.kyori.adventure.text.format.TextColor
import net.kyori.adventure.text.format.TextDecoration
@@ -19,75 +23,121 @@ class MainHandler(pl: Player, private val data: MainData, main: Main) {
init {
// 메인 프레임 설정
- val mFr = InvFX.frame(3, Component.text("컴뱃 GUI").decorate(TextDecoration.BOLD)){
+ val mFr = InvFX.frame(3, Component.text("컴뱃 GUI").decorate(TextDecoration.BOLD)) {
// 기초 아이템 설정
- val useCombat = makeItem(Material.GRASS_BLOCK,"맵 선택").apply {
+ val useCombat = makeItem(Material.GRASS_BLOCK, "맵 선택").apply {
editMeta {
- it.lore(listOf(Component.text("월드마다 컴뱃 사용 여부를 선택할 수 있습니다.")
- .decoration(TextDecoration.ITALIC,false)
- .color(TextColor.color(150,150,150))))
+ it.lore(
+ listOf(
+ Component.text("월드마다 컴뱃 사용 여부를 선택할 수 있습니다.")
+ .decoration(TextDecoration.ITALIC, false)
+ .color(TextColor.color(150, 150, 150))
+ )
+ )
}
}
- val setTime = makeItem(Material.CLOCK,"시간 지정").apply {
- editMeta{
- it.lore(listOf(Component.text("월드마다 컴뱃 시간을 지정할 수 있습니다.")
- .decoration(TextDecoration.ITALIC,false)
- .color(TextColor.color(150,150,150))))
+ val setTime = makeItem(Material.CLOCK, "시간 지정").apply {
+ editMeta {
+ it.lore(
+ listOf(
+ Component.text("월드마다 컴뱃 시간을 지정할 수 있습니다.")
+ .decoration(TextDecoration.ITALIC, false)
+ .color(TextColor.color(150, 150, 150))
+ )
+ )
}
}
- val hitOther = makeItem(Material.DIAMOND_SWORD,"다중 공격").apply {
- editMeta{
- it.lore(listOf(Component.text("컴뱃 중 다른사람의 개입을 허용/비허용을 지정할 수 있습니다.")
- .decoration(TextDecoration.ITALIC,false)
- .color(TextColor.color(150,150,150)),
- Component.text("월드 마다 지정 할 수 있습니다.")
- .decoration(TextDecoration.ITALIC,false)
- .color(TextColor.color(150,150,150))))
+ val hitOther = makeItem(Material.DIAMOND_SWORD, "다중 공격").apply {
+ editMeta {
+ it.lore(
+ listOf(
+ Component.text("컴뱃 중 다른사람의 개입을 허용/비허용을 지정할 수 있습니다.")
+ .decoration(TextDecoration.ITALIC, false)
+ .color(TextColor.color(150, 150, 150)),
+ Component.text("월드 마다 지정 할 수 있습니다.")
+ .decoration(TextDecoration.ITALIC, false)
+ .color(TextColor.color(150, 150, 150))
+ )
+ )
}
}
- val visible = makeItem(Material.POTION,"전투 투시성").apply{
- editMeta{
- it.lore(listOf(Component.text("컴뱃 중 다른 사람 숨김/표시를 지정할 수 있습니다.")
- .decoration(TextDecoration.ITALIC,false)
- .color(TextColor.color(150,150,150)),
- Component.text("월드 마다 지정 할 수 있습니다.")
- .decoration(TextDecoration.ITALIC,false)
- .color(TextColor.color(150,150,150))))
- (it as PotionMeta).addCustomEffect(PotionEffect(PotionEffectType.INVISIBILITY,-1,0,false,false,true),true)
+ val visible = makeItem(Material.POTION, "전투 투시성").apply {
+ editMeta {
+ it.lore(
+ listOf(
+ Component.text("컴뱃 중 다른 사람 숨김/표시를 지정할 수 있습니다.")
+ .decoration(TextDecoration.ITALIC, false)
+ .color(TextColor.color(150, 150, 150)),
+ Component.text("월드 마다 지정 할 수 있습니다.")
+ .decoration(TextDecoration.ITALIC, false)
+ .color(TextColor.color(150, 150, 150))
+ )
+ )
+ (it as PotionMeta).addCustomEffect(
+ PotionEffect(
+ PotionEffectType.INVISIBILITY,
+ -1,
+ 0,
+ false,
+ false,
+ true
+ ), true
+ )
}
}
// 아이템 설정
- item(1,1,useCombat)
- item(3,1,setTime)
- item(5,1,hitOther)
- item(7,1,visible)
+ item(1, 1, useCombat)
+ item(3, 1, setTime)
+ item(5, 1, hitOther)
+ item(7, 1, visible)
// 이벤트 설정
- slot(1,1){
+ slot(1, 1) {
onClick {
it.whoClicked.closeInventory()
- object: BukkitRunnable() {
+ object : BukkitRunnable() {
override fun run() {
- UseHandler(it.whoClicked as Player,data)
+ UseHandler(it.whoClicked as Player, data)
+ }
+ }.runTaskLater(main, 1)
+ }
+ }
+
+ slot(3, 1) {
+ onClick {
+ it.whoClicked.closeInventory()
+ object : BukkitRunnable() {
+ override fun run() {
+ TimeHandler(it.whoClicked as Player, data, main)
+ }
+ }.runTaskLater(main, 1)
+ }
+ }
+
+ slot(5, 1) {
+ onClick {
+ it.whoClicked.closeInventory()
+ object : BukkitRunnable() {
+ override fun run() {
+ HitOtherHandler(it.whoClicked as Player, data)
+ }
+ }.runTaskLater(main, 1)
+ }
+ }
+
+ slot(7, 1) {
+ onClick {
+ it.whoClicked.closeInventory()
+ object : BukkitRunnable() {
+ override fun run() {
+ VisibleHandler(it.whoClicked as Player, data)
}
}.runTaskLater(main,1)
}
}
-
- slot(3,1){
- onClick {
- it.whoClicked.closeInventory()
- object: BukkitRunnable(){
- override fun run() {
- TimeHandler(it.whoClicked as Player,data,main)
- }
- }
- }
- }
-
}
pl.openFrame(mFr)
}
@@ -95,13 +145,14 @@ class MainHandler(pl: Player, private val data: MainData, main: Main) {
}
// 아이템 생성 함수
-private fun makeItem(material:Material,name:String,color:TextColor = TextColor.color(255,255,255)):ItemStack{
+private fun makeItem(material: Material, name: String, color: TextColor = TextColor.color(255, 255, 255)): ItemStack {
val item = ItemStack(material)
val itemMeta = item.itemMeta
- itemMeta.displayName(Component.text(name)
- .decorate(TextDecoration.BOLD)
- .decoration(TextDecoration.ITALIC,false)
- .color(color)
+ itemMeta.displayName(
+ Component.text(name)
+ .decorate(TextDecoration.BOLD)
+ .decoration(TextDecoration.ITALIC, false)
+ .color(color)
)
item.itemMeta = itemMeta
return item
diff --git a/src/main/kotlin/me/faiz/combat_f/handler/TimeHandler.kt b/src/main/kotlin/me/faiz/combat_f/handler/TimeHandler.kt
deleted file mode 100644
index d9426d7..0000000
--- a/src/main/kotlin/me/faiz/combat_f/handler/TimeHandler.kt
+++ /dev/null
@@ -1,32 +0,0 @@
-package me.faiz.combat_f.handler
-
-import io.github.monun.invfx.InvFX
-import me.faiz.combat_f.Main
-import me.faiz.combat_f.data.MainData
-import net.kyori.adventure.text.Component
-import org.bukkit.Bukkit
-import org.bukkit.Material
-import org.bukkit.World
-import org.bukkit.entity.Player
-import org.bukkit.inventory.ItemStack
-
-class TimeHandler(pl: Player, data: MainData, main: Main) {
-
- init {
- val tFr = InvFX.frame(6, Component.text("컴뱃 GUI - 시간 설정")){
- var count = 0
- Bukkit.getWorlds().forEach {
- val worldTime = data.getTimeWorld(it.uid.toString())
- val item = ItemStack(Material.AIR)
- when(it.environment){
- World.Environment.NORMAL -> item.type = Material.GRASS_BLOCK
- World.Environment.NETHER -> item.type = Material.NETHERRACK
- World.Environment.THE_END -> item.type = Material.END_STONE
- World.Environment.CUSTOM -> item.type = Material.NETHER_PORTAL
- }
-
- }
- }
- }
-
-}
diff --git a/src/main/kotlin/me/faiz/combat_f/handler/UseHandler.kt b/src/main/kotlin/me/faiz/combat_f/handler/UseHandler.kt
deleted file mode 100644
index a94856e..0000000
--- a/src/main/kotlin/me/faiz/combat_f/handler/UseHandler.kt
+++ /dev/null
@@ -1,105 +0,0 @@
-package me.faiz.combat_f.handler
-
-import io.github.monun.invfx.InvFX
-import io.github.monun.invfx.openFrame
-import me.faiz.combat_f.Main
-import me.faiz.combat_f.data.MainData
-import net.kyori.adventure.key.Key
-import net.kyori.adventure.sound.Sound
-import net.kyori.adventure.text.Component
-import net.kyori.adventure.text.format.TextColor
-import net.kyori.adventure.text.format.TextDecoration
-import org.bukkit.Bukkit
-import org.bukkit.Material
-import org.bukkit.entity.Player
-import org.bukkit.inventory.ItemStack
-
-class UseHandler(pl: Player, data: MainData) {
-
- init {
- val uFr = InvFX.frame(6, Component.text("컴뱃 GUI - 맵 선택").decorate(TextDecoration.BOLD)){
- var count = 0
- Bukkit.getWorlds().forEach {
- val useWorld = data.getUseWorld(it.uid.toString())
- val item = ItemStack(Material.AIR)
- when(it.environment.name){
- "NORMAL" -> item.type = Material.GRASS_BLOCK
- "NETHER" -> item.type = Material.NETHERRACK
- "THE_END" -> item.type = Material.END_STONE
- }
- item.apply {
- editMeta {item ->
- item.displayName(Component.text(it.name).decoration(TextDecoration.ITALIC,false))
- item.lore(listOf(Component.text("컴뱃 : ")
- .decoration(TextDecoration.ITALIC,false)
- .color(TextColor.color(150,150,150))
- .append(if(useWorld) Component.text("사용중")
- .decoration(TextDecoration.ITALIC,false)
- .decorate(TextDecoration.BOLD)
- .color(TextColor.color(0,255,0))
- else Component.text("사용안함")
- .decoration(TextDecoration.ITALIC,false)
- .decorate(TextDecoration.BOLD)
- .color(TextColor.color(255,0,0))
- )
- ))
- }
- }
- if(count == 0){
- item(0,0,item)
- slot(0,0){
- onClick {e ->
- e.whoClicked.playSound(Sound.sound(Key.key("entity.experience_orb.pickup"),Sound.Source.MASTER,1f,1f))
- data.setUseWorld(it.uid.toString(),!data.getUseWorld(it.uid.toString()))
-// main.logger.info(data.getUseWorld(it.uid.toString()).toString())
- item.editMeta{item ->
- item.lore(listOf(Component.text("컴뱃 : ")
- .decoration(TextDecoration.ITALIC,false)
- .color(TextColor.color(150,150,150))
- .append(if(data.getUseWorld(it.uid.toString())) Component.text("사용중")
- .decoration(TextDecoration.ITALIC,false)
- .decorate(TextDecoration.BOLD)
- .color(TextColor.color(0,255,0))
- else Component.text("사용안함")
- .decoration(TextDecoration.ITALIC,false)
- .decorate(TextDecoration.BOLD)
- .color(TextColor.color(255,0,0))
- )
- ))
- }
- this.item = item
- }
- }
- }else{
- item(count%9, (count/9),item)
- slot(count%9,count/9){
- onClick { e ->
- e.whoClicked.playSound(Sound.sound(Key.key("entity.experience_orb.pickup"),Sound.Source.MASTER,1f,1f))
- data.setUseWorld(it.uid.toString(),!data.getUseWorld(it.uid.toString()))
-// main.logger.info(data.getUseWorld(it.uid.toString()).toString())
- item.editMeta{item ->
- item.lore(listOf(Component.text("컴뱃 : ")
- .decoration(TextDecoration.ITALIC,false)
- .color(TextColor.color(150,150,150))
- .append(if(data.getUseWorld(it.uid.toString())) Component.text("사용중")
- .decoration(TextDecoration.ITALIC,false)
- .decorate(TextDecoration.BOLD)
- .color(TextColor.color(0,255,0))
- else Component.text("사용안함")
- .decoration(TextDecoration.ITALIC,false)
- .decorate(TextDecoration.BOLD)
- .color(TextColor.color(255,0,0))
- )
- ))
- }
- this.item = item
- }
- }
- }
- count += 1
- }
- }
- pl.openFrame(uFr)
- }
-
-}
diff --git a/src/main/kotlin/me/faiz/combat_f/handler/children/HitOtherHandler.kt b/src/main/kotlin/me/faiz/combat_f/handler/children/HitOtherHandler.kt
new file mode 100644
index 0000000..a596983
--- /dev/null
+++ b/src/main/kotlin/me/faiz/combat_f/handler/children/HitOtherHandler.kt
@@ -0,0 +1,104 @@
+package me.faiz.combat_f.handler.children
+
+import io.github.monun.invfx.InvFX
+import io.github.monun.invfx.openFrame
+import me.faiz.combat_f.data.MainData
+import net.kyori.adventure.key.Key
+import net.kyori.adventure.sound.Sound
+import net.kyori.adventure.text.Component
+import net.kyori.adventure.text.format.TextColor
+import net.kyori.adventure.text.format.TextDecoration
+import org.bukkit.Bukkit
+import org.bukkit.Material
+import org.bukkit.World.Environment
+import org.bukkit.entity.Player
+import org.bukkit.inventory.ItemStack
+
+class HitOtherHandler(pl: Player, data: MainData) {
+
+ init {
+ val hitOtherFr = InvFX.frame(6, Component.text("컴뱃 GUI - 다중 공격 설정")) {
+ var count = 0
+ Bukkit.getWorlds().forEach {
+ val worldVisible = data.getHitOtherWorld(it.uid.toString())
+ val witem = ItemStack(Material.AIR)
+ when (it.environment) {
+ Environment.NORMAL -> witem.type = Material.GRASS_BLOCK
+ Environment.NETHER -> witem.type = Material.NETHERRACK
+ Environment.THE_END -> witem.type = Material.END_STONE
+ Environment.CUSTOM -> witem.type = Material.NETHER_PORTAL
+ }
+ witem.apply {
+ editMeta { im ->
+ im.displayName(Component.text(it.name).decoration(TextDecoration.ITALIC, false))
+ im.lore(
+ listOf(
+ Component.text("다중 공격 : ")
+ .decoration(TextDecoration.ITALIC, false)
+ .color(TextColor.color(150, 150, 150))
+ .append(
+ if (worldVisible) {
+ Component.text("사용")
+ .decorate(TextDecoration.BOLD)
+ .decoration(TextDecoration.ITALIC, false)
+ .color(TextColor.color(0, 255, 0))
+
+ } else {
+ Component.text("사용 안함")
+ .decorate(TextDecoration.BOLD)
+ .decoration(TextDecoration.ITALIC, false)
+ .color(TextColor.color(255, 0, 0))
+ }
+ )
+ )
+ )
+ }
+ }
+ item(count % 9, count / 9, witem)
+ slot(count % 9, count / 9) {
+ onClick { e ->
+ e.whoClicked.playSound(
+ Sound.sound(
+ Key.key("entity.experience_orb.pickup"),
+ Sound.Source.MASTER,
+ 1f,
+ 1f
+ )
+ )
+ data.setHitOtherWorld(it.uid.toString(), !data.getHitOtherWorld(it.uid.toString()))
+ witem.editMeta { im ->
+ im.lore(
+ listOf(
+ Component.text("다중 공격 : ")
+ .decoration(TextDecoration.ITALIC, false)
+ .color(TextColor.color(150, 150, 150))
+ .append(
+ if (data.getHitOtherWorld(it.uid.toString())) {
+ Component.text("사용")
+ .decoration(TextDecoration.ITALIC, false)
+ .decorate(TextDecoration.BOLD)
+ .color(TextColor.color(0, 255, 0))
+ } else {
+ Component.text("사용 안함")
+ .decoration(TextDecoration.ITALIC, false)
+ .decorate(TextDecoration.BOLD)
+ .color(TextColor.color(255, 0, 0))
+ }
+ )
+ )
+ )
+ }
+ item = witem
+
+ }
+ }
+
+ count += 1
+ }
+
+
+ }
+ pl.openFrame(hitOtherFr)
+ }
+
+}
diff --git a/src/main/kotlin/me/faiz/combat_f/handler/children/TimeHandler.kt b/src/main/kotlin/me/faiz/combat_f/handler/children/TimeHandler.kt
new file mode 100644
index 0000000..fdd13f2
--- /dev/null
+++ b/src/main/kotlin/me/faiz/combat_f/handler/children/TimeHandler.kt
@@ -0,0 +1,77 @@
+package me.faiz.combat_f.handler.children
+
+import io.github.monun.invfx.InvFX
+import io.github.monun.invfx.openFrame
+import me.faiz.combat_f.Main
+import me.faiz.combat_f.data.MainData
+import net.kyori.adventure.text.Component
+import net.kyori.adventure.text.format.TextColor
+import net.kyori.adventure.text.format.TextDecoration
+import org.bukkit.Bukkit
+import org.bukkit.Material
+import org.bukkit.World
+import org.bukkit.entity.Player
+import org.bukkit.inventory.ItemStack
+
+class TimeHandler(pl: Player, data: MainData, main: Main) {
+
+ init {
+ val bold = TextDecoration.BOLD
+ val gray = TextColor.color(150, 150, 150)
+ val tFr = InvFX.frame(6, Component.text("컴뱃 GUI - 시간 설정").decorate(bold)) {
+ var count = 0
+ Bukkit.getWorlds().forEach {
+ val worldTime = data.getTimeWorld(it.uid.toString())
+ val item = ItemStack(Material.AIR)
+ when (it.environment) {
+ World.Environment.NORMAL -> item.type = Material.GRASS_BLOCK
+ World.Environment.NETHER -> item.type = Material.NETHERRACK
+ World.Environment.THE_END -> item.type = Material.END_STONE
+ World.Environment.CUSTOM -> item.type = Material.NETHER_PORTAL
+ }
+ item.apply {
+ editMeta { im ->
+ val italic = TextDecoration.ITALIC
+ im.displayName(Component.text(it.name).decoration(italic, false))
+ im.lore(
+ listOf(
+ Component.text("컴뱃 시간 : ")
+ .decoration(italic, false)
+ .decorate(bold)
+ .color(gray)
+ .append(
+ if (worldTime == -1) Component.text("지정되지 않음")
+ .decoration(italic, false)
+ .decorate(bold)
+ .color(TextColor.color(255, 0, 0))
+ else Component.text(worldTime)
+ .decoration(italic, false)
+ .decorate(bold)
+ .color(TextColor.color(255, 255, 255))
+ .append(
+ Component.text("초")
+ .decorate(bold)
+ .decoration(italic, false)
+ .color(TextColor.color(255, 255, 255))
+ )
+ )
+ )
+ )
+ }
+ }
+ item(count % 9, count / 9, item)
+ slot(count % 9, count / 9) {
+ onClick { e ->
+ e.whoClicked.closeInventory()
+ e.whoClicked.sendMessage("채팅에 양수를 넣어주세요! (다른걸 넣을시 취소됩니다.)")
+ main.list.add(Pair(e.whoClicked.uniqueId.toString(), it.uid.toString()))
+// main.list.add(e.whoClicked.uniqueId.toString())
+ }
+ }
+ count += 1
+ }
+ }
+ pl.openFrame(tFr)
+ }
+
+}
diff --git a/src/main/kotlin/me/faiz/combat_f/handler/children/UseHandler.kt b/src/main/kotlin/me/faiz/combat_f/handler/children/UseHandler.kt
new file mode 100644
index 0000000..f2ef871
--- /dev/null
+++ b/src/main/kotlin/me/faiz/combat_f/handler/children/UseHandler.kt
@@ -0,0 +1,99 @@
+package me.faiz.combat_f.handler.children
+
+import io.github.monun.invfx.InvFX
+import io.github.monun.invfx.openFrame
+import me.faiz.combat_f.data.MainData
+import net.kyori.adventure.key.Key
+import net.kyori.adventure.sound.Sound
+import net.kyori.adventure.text.Component
+import net.kyori.adventure.text.format.TextColor
+import net.kyori.adventure.text.format.TextDecoration
+import org.bukkit.Bukkit
+import org.bukkit.Material
+import org.bukkit.World
+import org.bukkit.entity.Player
+import org.bukkit.inventory.ItemStack
+
+class UseHandler(pl: Player, data: MainData) {
+
+ init {
+ val italic = TextDecoration.ITALIC
+ val bold = TextDecoration.BOLD
+ val gray = TextColor.color(150, 150, 150)
+ val uFr = InvFX.frame(6, Component.text("컴뱃 GUI - 맵 선택").decorate(bold)) {
+ var count = 0
+ Bukkit.getWorlds().forEach {
+ val useWorld = data.getUseWorld(it.uid.toString())
+ val item = ItemStack(Material.AIR)
+ when (it.environment) {
+ World.Environment.NORMAL -> item.type = Material.GRASS_BLOCK
+ World.Environment.NETHER -> item.type = Material.NETHERRACK
+ World.Environment.THE_END -> item.type = Material.END_STONE
+ World.Environment.CUSTOM -> item.type = Material.NETHER_PORTAL
+ }
+ val green = TextColor.color(0, 255, 0)
+ val red = TextColor.color(255, 0, 0)
+ item.apply {
+ editMeta { item ->
+ item.displayName(Component.text(it.name).decoration(italic, false))
+ item.lore(
+ listOf(
+ Component.text("컴뱃 : ")
+ .decoration(italic, false)
+ .color(gray)
+ .append(
+ if (useWorld) Component.text("사용")
+ .decoration(italic, false)
+ .decorate(bold)
+ .color(green)
+ else Component.text("사용 안함")
+ .decoration(italic, false)
+ .decorate(bold)
+ .color(red)
+ )
+ )
+ )
+ }
+ }
+ item(count % 9, (count / 9), item)
+ slot(count % 9, count / 9) {
+ onClick { e ->
+ e.whoClicked.playSound(
+ Sound.sound(
+ Key.key("entity.experience_orb.pickup"),
+ Sound.Source.MASTER,
+ 1f,
+ 1f
+ )
+ )
+ data.setUseWorld(it.uid.toString(), !data.getUseWorld(it.uid.toString()))
+// main.logger.info(data.getUseWorld(it.uid.toString()).toString())
+ item.editMeta { item ->
+ item.lore(
+ listOf(
+ Component.text("컴뱃 : ")
+ .decoration(italic, false)
+ .color(gray)
+ .append(
+ if (data.getUseWorld(it.uid.toString())) Component.text("사용중")
+ .decoration(italic, false)
+ .decorate(bold)
+ .color(green)
+ else Component.text("사용 안함")
+ .decoration(italic, false)
+ .decorate(bold)
+ .color(red)
+ )
+ )
+ )
+ }
+ this.item = item
+ }
+ }
+ count += 1
+ }
+ }
+ pl.openFrame(uFr)
+ }
+
+}
diff --git a/src/main/kotlin/me/faiz/combat_f/handler/children/VisibleHandler.kt b/src/main/kotlin/me/faiz/combat_f/handler/children/VisibleHandler.kt
new file mode 100644
index 0000000..d9c4dd6
--- /dev/null
+++ b/src/main/kotlin/me/faiz/combat_f/handler/children/VisibleHandler.kt
@@ -0,0 +1,102 @@
+package me.faiz.combat_f.handler.children
+
+import io.github.monun.invfx.InvFX
+import io.github.monun.invfx.openFrame
+import me.faiz.combat_f.data.MainData
+import net.kyori.adventure.key.Key
+import net.kyori.adventure.sound.Sound
+import net.kyori.adventure.text.Component
+import net.kyori.adventure.text.format.TextColor
+import net.kyori.adventure.text.format.TextDecoration
+import org.bukkit.Bukkit
+import org.bukkit.Material
+import org.bukkit.World.Environment
+import org.bukkit.entity.Player
+import org.bukkit.inventory.ItemStack
+
+class VisibleHandler(pl: Player, data: MainData) {
+
+ init {
+ val italic = TextDecoration.ITALIC
+ val vFr = InvFX.frame(6, Component.text("컴뱃 GUI - 전투 투시성").decorate(TextDecoration.BOLD)) {
+ var count = 0
+ Bukkit.getWorlds().forEach {
+ val vWorld = data.getVisibleWorld(it.uid.toString())
+ val item = ItemStack(Material.AIR)
+ when (it.environment) {
+ Environment.NORMAL -> item.type = Material.GRASS_BLOCK
+ Environment.NETHER -> item.type = Material.NETHERRACK
+ Environment.THE_END -> item.type = Material.END_STONE
+ Environment.CUSTOM -> item.type = Material.NETHER_PORTAL
+ }
+ item.apply {
+ editMeta { item ->
+ item.displayName(Component.text(it.name).decoration(italic, false))
+ item.lore(
+ listOf(
+ Component.text("전투 투시성 : ")
+ .decoration(italic, false)
+ .color(
+ TextColor.color(150, 150, 150)
+ ).append(
+ if (vWorld) {
+ Component.text("사용")
+ .decoration(italic, false)
+ .decorate(TextDecoration.BOLD)
+ .color(TextColor.color(0, 255, 0))
+ } else {
+ Component.text("사용 안함")
+ .decoration(italic, false)
+ .decorate(TextDecoration.BOLD)
+ .color(TextColor.color(255, 0, 0))
+ }
+ )
+ )
+ )
+ }
+ item(count % 9, count / 9, item)
+ slot(count % 9, count / 9) {
+ onClick { e ->
+ e.whoClicked.playSound(
+ Sound.sound(
+ Key.key("entity.experience_orb.pickup"),
+ Sound.Source.MASTER,
+ 1f,
+ 1f
+ )
+ )
+ data.setVisibleWorld(it.uid.toString(), !data.getVisibleWorld(it.uid.toString()))
+ item.editMeta { item ->
+ item.lore(
+ listOf(
+ Component.text("전투 투시성 : ")
+ .decoration(italic, false)
+ .color(
+ TextColor.color(150, 150, 150)
+ ).append(
+ if (data.getVisibleWorld(it.uid.toString())) {
+ Component.text("사용")
+ .decoration(italic, false)
+ .decorate(TextDecoration.BOLD)
+ .color(TextColor.color(0, 255, 0))
+ } else {
+ Component.text("사용 안함")
+ .decoration(italic, false)
+ .decorate(TextDecoration.BOLD)
+ .color(TextColor.color(255, 0, 0))
+ }
+ )
+ )
+ )
+ }
+ }
+ this.item = item
+ }
+ count += 1
+ }
+ }
+ }
+ pl.openFrame(vFr)
+ }
+
+}
diff --git a/src/main/kotlin/me/faiz/combat_f/listener/MainListener.kt b/src/main/kotlin/me/faiz/combat_f/listener/MainListener.kt
new file mode 100644
index 0000000..a2f986c
--- /dev/null
+++ b/src/main/kotlin/me/faiz/combat_f/listener/MainListener.kt
@@ -0,0 +1,41 @@
+package me.faiz.combat_f.listener
+
+import io.papermc.paper.event.player.AsyncChatEvent
+import me.faiz.combat_f.Main
+import me.faiz.combat_f.data.MainData
+import org.bukkit.Bukkit
+import org.bukkit.entity.EntityType
+import org.bukkit.event.EventHandler
+import org.bukkit.event.Listener
+import org.bukkit.event.entity.EntityDamageByEntityEvent
+
+@Suppress("unused")
+class MainListener(private val main: Main, private val data: MainData) : Listener {
+
+ init {
+ Bukkit.getPluginManager().registerEvents(this, main)
+ }
+
+ @EventHandler
+ fun onChat(e: AsyncChatEvent) {
+ OnAsyncChat(e, main, data)
+ }
+
+ @EventHandler
+ fun onDamage(e: EntityDamageByEntityEvent){
+ if(e.entityType != EntityType.PLAYER) return
+ if(e.damager.type != EntityType.PLAYER) return
+ if(!data.getUseWorld(e.entity.world.uid.toString())) return
+ val entityD = main.clist[e.entity.uniqueId]
+ val damagerD = main.clist[e.damager.uniqueId]
+ if(main.clist.contains(e.entity.uniqueId)){
+ if(data.getHitOtherWorld(e.entity.world.uid.toString())){
+ main.clist[e.entity.uniqueId] = Pair(e.damager.uniqueId,System.currentTimeMillis())
+ main.clist[e.damager.uniqueId] = Pair(e.entity.uniqueId,System.currentTimeMillis())
+ }else if (entityD != damagerD){
+ //TODO: IMPLEMENTS
+ }
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/src/main/kotlin/me/faiz/combat_f/listener/OnAsyncChat.kt b/src/main/kotlin/me/faiz/combat_f/listener/OnAsyncChat.kt
new file mode 100644
index 0000000..5a0b1e4
--- /dev/null
+++ b/src/main/kotlin/me/faiz/combat_f/listener/OnAsyncChat.kt
@@ -0,0 +1,35 @@
+package me.faiz.combat_f.listener
+
+import io.papermc.paper.event.player.AsyncChatEvent
+import me.faiz.combat_f.Main
+import me.faiz.combat_f.data.MainData
+import me.faiz.combat_f.handler.children.TimeHandler
+import net.kyori.adventure.key.Key
+import net.kyori.adventure.sound.Sound
+import net.kyori.adventure.text.serializer.plain.PlainTextComponentSerializer
+import org.bukkit.scheduler.BukkitRunnable
+
+class OnAsyncChat(e: AsyncChatEvent, main: Main, data: MainData) {
+ init {
+ var player = false
+ var index = -1
+ main.list.forEach {
+ if (it.first == e.player.uniqueId.toString()) player = true;index = main.list.lastIndexOf(it)
+ }
+ if (player) {
+ val message = PlainTextComponentSerializer.plainText().serialize(e.message()).toIntOrNull()
+ if (message != null) {
+ val time = message.toInt()
+ if (0 < time) data.setTimeWorld(main.list[index].second, time)
+ e.player.playSound(Sound.sound(Key.key("entity.experience_orb.pickup"), Sound.Source.MASTER, 1f, 1f))
+ }
+ e.isCancelled = true
+ main.list.removeAt(index)
+ object : BukkitRunnable() {
+ override fun run() {
+ TimeHandler(e.player, data, main)
+ }
+ }.runTaskLater(main, 1)
+ }
+ }
+}