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) + } + } +}