From 1cea3446433f7138af8e59b7bb8097c4b7ad1a6f Mon Sep 17 00:00:00 2001 From: faiz36 Date: Mon, 11 Mar 2024 22:12:59 +0900 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8Initial=20Commit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/.gitignore | 2 + build.gradle.kts | 21 ++- .../kotlin/group/pvpconnect/combat_f/Main.kt | 61 ------- .../pvpconnect/combat_f/cmd/CombatCmd.kt | 62 ------- .../pvpconnect/combat_f/data/CombatData.kt | 59 ------ .../pvpconnect/combat_f/event/CombatEvent.kt | 169 ------------------ src/main/kotlin/me/faiz/combat_f/Main.kt | 27 +++ .../me/faiz/combat_f/cmd/MainCommand.kt | 27 +++ .../kotlin/me/faiz/combat_f/data/MainData.kt | 33 ++++ .../me/faiz/combat_f/handler/MainHandler.kt | 120 +++++++++++++ .../me/faiz/combat_f/handler/TimeHandler.kt | 32 ++++ .../me/faiz/combat_f/handler/UseHandler.kt | 105 +++++++++++ src/main/resources/plugin.yml | 10 +- 13 files changed, 369 insertions(+), 359 deletions(-) delete mode 100644 src/main/kotlin/group/pvpconnect/combat_f/Main.kt delete mode 100644 src/main/kotlin/group/pvpconnect/combat_f/cmd/CombatCmd.kt delete mode 100644 src/main/kotlin/group/pvpconnect/combat_f/data/CombatData.kt delete mode 100644 src/main/kotlin/group/pvpconnect/combat_f/event/CombatEvent.kt create mode 100644 src/main/kotlin/me/faiz/combat_f/Main.kt create mode 100644 src/main/kotlin/me/faiz/combat_f/cmd/MainCommand.kt create mode 100644 src/main/kotlin/me/faiz/combat_f/data/MainData.kt create mode 100644 src/main/kotlin/me/faiz/combat_f/handler/MainHandler.kt create mode 100644 src/main/kotlin/me/faiz/combat_f/handler/TimeHandler.kt create mode 100644 src/main/kotlin/me/faiz/combat_f/handler/UseHandler.kt diff --git a/.idea/.gitignore b/.idea/.gitignore index 13566b8..a9d7db9 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -6,3 +6,5 @@ # Datasource local storage ignored files /dataSources/ /dataSources.local.xml +# GitHub Copilot persisted chat sessions +/copilot/chatSessions diff --git a/build.gradle.kts b/build.gradle.kts index fff9505..c8a2e20 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,10 +1,11 @@ plugins { - kotlin("jvm") version "1.8.0" + kotlin("jvm") version "2.0.0-Beta4" + id("xyz.jpenilla.run-paper") version "2.2.3" // id("io.papermc.paperweight.userdev") version "1.5.4" } -group = "group.pvpconnect" -version = "1.0.1" +group = "me.faiz" +version = "2.0.0" repositories { mavenCentral() @@ -17,11 +18,23 @@ java { dependencies { testImplementation(kotlin("test")) - compileOnly("io.papermc.paper:paper-api:1.19.2-R0.1-SNAPSHOT") + compileOnly("io.papermc.paper:paper-api:1.20.1-R0.1-SNAPSHOT") + implementation("io.github.monun:invfx-api:3.3.2") // paperweight.paperDevBundle("1.19.2-R0.1-SNAPSHOT") implementation("io.github.monun:kommand-api:3.1.7") } +tasks { + runServer{ + minecraftVersion("1.20.1") + downloadPlugins{ + hangar("ViaVersion","4.9.3-SNAPSHOT+208") + hangar("ViaBackwards", "4.9.2-SNAPSHOT+126") + hangar("Multiverse-Core","4.3.12") + } + } +} + tasks.test { useJUnitPlatform() } diff --git a/src/main/kotlin/group/pvpconnect/combat_f/Main.kt b/src/main/kotlin/group/pvpconnect/combat_f/Main.kt deleted file mode 100644 index d3da51e..0000000 --- a/src/main/kotlin/group/pvpconnect/combat_f/Main.kt +++ /dev/null @@ -1,61 +0,0 @@ -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 net.kyori.adventure.text.Component -import org.bukkit.Bukkit -import org.bukkit.ChatColor -import org.bukkit.plugin.java.JavaPlugin -import org.bukkit.scheduler.BukkitTask -import java.util.* - -@Suppress("unused") -class Main:JavaPlugin() { - // 첫번째 전투 여부, 두번째 전투자 UUID, 남은 시간? - var list:HashMap> = HashMap() - private lateinit var schedule:BukkitTask - private lateinit var schedule2:BukkitTask - lateinit var instance: Main - - private val combatData by lazy { CombatData(this) } - - override fun onLoad() { - instance = this - } - - override fun onDisable() { - combatData.save() - schedule.cancel() - } - - override fun onEnable() { - CombatCmd(this,combatData) - CombatEvent(this,combatData) - schedule = this.server.scheduler.runTaskTimerAsynchronously(this, Runnable { - list.forEach{ - if(list[it.key] == null) return@forEach - if(!list[it.key]!!.first) return@forEach - if(list[it.key]!!.second == null) return@forEach - if(list[it.key]!!.third == null) return@forEach - if(it.value.third!!/1000 + combatData.instance.getTime() <= System.currentTimeMillis()/1000){ - list.remove(it.key) - } - } - Bukkit.getOnlinePlayers().forEach{ - if(list[it.uniqueId] == null) return@forEach - if(!list[it.uniqueId]!!.first) return@forEach - if(list[it.uniqueId]!!.second == null) return@forEach - if(list[it.uniqueId]!!.third == null) return@forEach - it.isGliding = false - if(combatData.getOtherHit(it.world.name)){ - it.sendActionBar(Component.text("${ChatColor.RESET}${ChatColor.WHITE}${list[it.uniqueId]!!.third!! /1000 + combatData.instance.getTime() - System.currentTimeMillis()/1000}${ChatColor.RED}${ChatColor.BOLD}초 뒤 전투모드가 끝납니다!")) - }else { - it.sendActionBar(Component.text("${ChatColor.WHITE}${Bukkit.getPlayer(list[it.uniqueId]!!.second!!)!!.name}${ChatColor.RED}${ChatColor.BOLD}님과 전투중입니다! ${ChatColor.RESET}${ChatColor.WHITE}${list[it.uniqueId]!!.third!! / 1000 + combatData.instance.getTime() - System.currentTimeMillis() / 1000}${ChatColor.RED}${ChatColor.BOLD}초 뒤 전투모드가 끝납니다!")) - } - - } - },1L,1L) - } - -} \ 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 deleted file mode 100644 index 487c09c..0000000 --- a/src/main/kotlin/group/pvpconnect/combat_f/cmd/CombatCmd.kt +++ /dev/null @@ -1,62 +0,0 @@ -package group.pvpconnect.combat_f.cmd - -import group.pvpconnect.combat_f.Main -import group.pvpconnect.combat_f.data.CombatData -import io.github.monun.kommand.getValue -import io.github.monun.kommand.kommand -import org.bukkit.Bukkit -import org.bukkit.ChatColor -import org.bukkit.World - -class CombatCmd(plugin:Main, private val cd:CombatData) { - init { - plugin.apply { - kommand { - register("combat"){ - requires { 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.BOLD}${ChatColor.GREEN}✓${ChatColor.RESET}${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("hitother"){ - then("world" to dimension()){ - executes { - val world:World by it - val bool = cd.instance.getOtherHit(world.name) - cd.instance.setOtherHit(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.BOLD}${ChatColor.GREEN}✓${ChatColor.RESET}${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 deleted file mode 100644 index 0116189..0000000 --- a/src/main/kotlin/group/pvpconnect/combat_f/data/CombatData.kt +++ /dev/null @@ -1,59 +0,0 @@ -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(private val plugin:Plugin) { - var instance:CombatData = this - - private val file get() = File(plugin.dataFolder, "data.yml") - private val yaml = YamlConfiguration.loadConfiguration(file) - - /** Return use that World CombatSystem. - * @return return use that World CombatSystem. - * @param world get world name - */ - fun getUseWorld(world:String):Boolean{ - return yaml.getBoolean("${world}.use") - } - - /** - * Set use CombatSystem that World. - * @param world world name - * @param use use Boolean - */ - 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") - } - - fun setOtherHit(world:String,hitable:Boolean){ - yaml.set("${world}.otherhitable",hitable) - } - - fun getOtherHit(world:String):Boolean{ - return yaml.getBoolean("${world}.otherhitable") - } - - fun save(){ - yaml.save(file) - } - -} \ 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 deleted file mode 100644 index f0c15ff..0000000 --- a/src/main/kotlin/group/pvpconnect/combat_f/event/CombatEvent.kt +++ /dev/null @@ -1,169 +0,0 @@ -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.ChatColor -import org.bukkit.command.CommandSender -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.EntityDamageEvent -import org.bukkit.event.entity.PlayerDeathEvent -import org.bukkit.event.entity.ProjectileHitEvent -import org.bukkit.event.player.PlayerChangedWorldEvent -import org.bukkit.event.player.PlayerCommandPreprocessEvent -import org.bukkit.event.player.PlayerQuitEvent -import org.bukkit.scoreboard.Team - -@Suppress("unused") -class CombatEvent(private val plugin:Main, private val combatData: CombatData):Listener { - - init { - Bukkit.getPluginManager().registerEvents(this,plugin) - } - - @EventHandler - fun onOtherDamage(e:EntityDamageByEntityEvent){ - if(e.entityType != EntityType.PLAYER) return - if(e.damager.type != EntityType.PLAYER) return - if(!combatData.instance.getUseWorld(e.entity.world.name)) return - val team = Bukkit.getServer().scoreboardManager.mainScoreboard.teams - lateinit var plteam: Team - team.forEach { if(it.hasPlayer(Bukkit.getOfflinePlayer(e.entity.name))) plteam = it } - if(plteam.hasPlayer(Bukkit.getOfflinePlayer(e.damager.name))){ - return - } - val list = plugin.instance.list[e.entity.uniqueId] - val dlist = plugin.instance.list[e.damager.uniqueId] - if((dlist?.second != null) && (dlist.second != e.entity.uniqueId)&& !combatData.instance.getOtherHit(e.entity.world.name)){ e.isCancelled = true;return} - if(list?.second != null && list.second != e.damager.uniqueId && !combatData.instance.getOtherHit(e.entity.world.name)) { - e.damager.sendMessage( - "${ChatColor.RED}${ChatColor.BOLD}해당 플레이어는 ${ChatColor.RESET}${ChatColor.WHITE}${ - Bukkit.getPlayer( - list.second!! - )!!.name - }${ChatColor.RED}${ChatColor.BOLD}님과 전투중입니다!" - ) - e.isCancelled = true - return - } - 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()) - if(combatData.instance.getCanSeeWorld(e.entity.world.name) && !plugin.instance.list[e.entity.uniqueId]!!.first){ - Bukkit.getOnlinePlayers().forEach { - if(it.name != e.entity.name && it.name != e.damager.name){ - it.hidePlayer(plugin,e.entity as Player) - it.hidePlayer(plugin,e.damager as Player) - (e.entity as Player).hidePlayer(plugin,it) - (e.damager as Player).hidePlayer(plugin, it) - } - } - } - } - - @EventHandler - fun onArrow(e:ProjectileHitEvent){ - if(e.hitEntity == null) return - if(e.hitEntity!!.type != EntityType.PLAYER) return - if(e.entity.shooter !is Player) return - if(!combatData.instance.getUseWorld(e.entity.world.name)) return - val team = Bukkit.getServer().scoreboardManager.mainScoreboard.teams - lateinit var plteam: Team - team.forEach { if(it.hasPlayer(Bukkit.getOfflinePlayer(e.entity.name))) plteam = it } - if(plteam.hasPlayer(Bukkit.getOfflinePlayer((e.entity.shooter as Player).name))){ - return - } - val player = e.hitEntity as Player - val shooter = e.entity.shooter as Player - val list = plugin.instance.list[player.uniqueId] - val dlist = plugin.instance.list[shooter.uniqueId] - if((dlist?.second != null) && (dlist.second != player.uniqueId)&&!combatData.instance.getOtherHit(shooter.world.name)){ e.isCancelled = true;return} - if(list?.second != null && list.second != shooter.uniqueId && !combatData.instance.getOtherHit(shooter.world.name)) { - shooter.sendMessage("${ChatColor.RED}${ChatColor.BOLD}해당 플레이어는 ${ChatColor.RESET}${ChatColor.WHITE}${Bukkit.getPlayer( - list.second!!)!!.name}${ChatColor.RED}${ChatColor.BOLD}님과 전투중입니다!") - e.isCancelled = true - return - } - if(player.uniqueId == shooter.uniqueId) return - if(combatData.instance.getCanSeeWorld(player.world.name) && !plugin.instance.list[player.uniqueId]!!.first){ - Bukkit.getOnlinePlayers().forEach { - if(it.name != player.name && it.name != shooter.name){ - it.hidePlayer(plugin, player) - it.hidePlayer(plugin,shooter) - player.hidePlayer(plugin,it) - shooter.hidePlayer(plugin, it) - } - } - } - plugin.instance.list[player.uniqueId] = Triple(true,shooter.uniqueId,System.currentTimeMillis()) - plugin.instance.list[shooter.uniqueId] = Triple(true,player.uniqueId,System.currentTimeMillis()) - } - - @EventHandler - fun onCommand(e:PlayerCommandPreprocessEvent){ - if(listOf("/l","/lobby","/home","/spawn").any { e.message == it }){ - val list = plugin.instance.list[e.player.uniqueId] ?: return - if(!list.first) return - e.isCancelled = true - } - } - - @EventHandler - fun onQuit(e:PlayerQuitEvent){ - val list = plugin.instance.list[e.player.uniqueId] ?: return - if(!list.first) return - e.player.killer = Bukkit.getPlayer(list.second!!) - Bukkit.dispatchCommand(,) - if(combatData.instance.getCanSeeWorld(e.player.world.name)){ - Bukkit.getOnlinePlayers().forEach { - val player = e.player - val killer = e.player.killer!! - if(it.name != player.name && it.name != killer.name){ - it.showPlayer(plugin, player) - it.showPlayer(plugin,killer) - player.showPlayer(plugin,it) - killer.showPlayer(plugin, it) - } - } - } - plugin.instance.list.remove(e.player.uniqueId) - plugin.instance.list.remove(list.second!!) - } - - @EventHandler - fun onDeath(e:PlayerDeathEvent){ - val list = plugin.instance.list[e.player.uniqueId] ?: return - if(!list.first) return - if(combatData.instance.getCanSeeWorld(e.player.world.name)){ - Bukkit.getOnlinePlayers().forEach { - val player = e.player - val killer = e.player.killer!! - if(it.name != player.name && it.name != killer.name){ - it.showPlayer(plugin, player) - it.showPlayer(plugin,killer) - player.showPlayer(plugin,it) - killer.showPlayer(plugin, it) - } - } - } - plugin.instance.list.remove(e.player.uniqueId) - plugin.instance.list.remove(list.second!!) - } - - @EventHandler - fun onChangeWorld(e:PlayerChangedWorldEvent){ - if(combatData.instance.getCanSeeWorld(e.player.world.name)){ - Bukkit.getOnlinePlayers().forEach{ - if(it.world.name != e.player.world.name) return@forEach - if(plugin.instance.list[it.uniqueId]?.first == true){ - it.hidePlayer(plugin,e.player) - e.player.hidePlayer(plugin,it) - } - } - } - } - -} \ 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 new file mode 100644 index 0000000..ddc30d8 --- /dev/null +++ b/src/main/kotlin/me/faiz/combat_f/Main.kt @@ -0,0 +1,27 @@ +package me.faiz.combat_f + +import me.faiz.combat_f.cmd.MainCommand +import me.faiz.combat_f.data.MainData +import org.bukkit.plugin.java.JavaPlugin + +class Main:JavaPlugin() { + + init{ + instance = this + } + + private val maindata by lazy { MainData(this) } + + override fun onDisable() { + maindata.save() + } + + override fun onEnable() { + MainCommand(this,maindata) + } + + companion object { + lateinit var instance: Main + } + +} \ No newline at end of file diff --git a/src/main/kotlin/me/faiz/combat_f/cmd/MainCommand.kt b/src/main/kotlin/me/faiz/combat_f/cmd/MainCommand.kt new file mode 100644 index 0000000..87f5ba4 --- /dev/null +++ b/src/main/kotlin/me/faiz/combat_f/cmd/MainCommand.kt @@ -0,0 +1,27 @@ +package me.faiz.combat_f.cmd + +import io.github.monun.kommand.kommand +import me.faiz.combat_f.Main +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) { + + init { + main.apply { + kommand { + register("combat") { + requires { isOp } + executes { + 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) + } + } + } + } + } + +} diff --git a/src/main/kotlin/me/faiz/combat_f/data/MainData.kt b/src/main/kotlin/me/faiz/combat_f/data/MainData.kt new file mode 100644 index 0000000..23a605d --- /dev/null +++ b/src/main/kotlin/me/faiz/combat_f/data/MainData.kt @@ -0,0 +1,33 @@ +package me.faiz.combat_f.data + +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") + private val yaml = YamlConfiguration.loadConfiguration(file) + + fun getUseWorld(uid:String):Boolean{ + return yaml.getBoolean("$uid.use") + } + + 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 setTimeWorld(uid:String,time:Int){ + yaml.set("$uid.time",time) + } + + + + fun save(){ + yaml.save(file) + } + +} \ No newline at end of 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 new file mode 100644 index 0000000..bc525ab --- /dev/null +++ b/src/main/kotlin/me/faiz/combat_f/handler/MainHandler.kt @@ -0,0 +1,120 @@ +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.text.Component +import net.kyori.adventure.text.format.TextColor +import net.kyori.adventure.text.format.TextDecoration +import org.bukkit.Material +import org.bukkit.entity.Player +import org.bukkit.inventory.ItemStack +import org.bukkit.inventory.meta.PotionMeta +import org.bukkit.potion.PotionEffect +import org.bukkit.potion.PotionEffectType +import org.bukkit.scheduler.BukkitRunnable + +class MainHandler(pl: Player, private val data: MainData, main: Main) { + + init { + // 메인 프레임 설정 + val mFr = InvFX.frame(3, Component.text("컴뱃 GUI").decorate(TextDecoration.BOLD)){ + // 기초 아이템 설정 + val useCombat = makeItem(Material.GRASS_BLOCK,"맵 선택").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 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) + + // 이벤트 설정 + slot(1,1){ + onClick { + it.whoClicked.closeInventory() + object: BukkitRunnable() { + override fun run() { + 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) + } + } + } + } + + } + pl.openFrame(mFr) + } + +} + +// 아이템 생성 함수 +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) + ) + item.itemMeta = itemMeta + return item +} + +//private fun makeItem(item:ItemStack,name:String,color:TextColor = TextColor.color(255,255,255)):ItemStack { +// val itemMeta = item.itemMeta +// itemMeta.displayName( +// Component.text(name) +// .decorate(TextDecoration.BOLD) +// .decoration(TextDecoration.ITALIC, false) +// .color(color) +// ) +// item.itemMeta = itemMeta +// return item +//} \ No newline at end of file diff --git a/src/main/kotlin/me/faiz/combat_f/handler/TimeHandler.kt b/src/main/kotlin/me/faiz/combat_f/handler/TimeHandler.kt new file mode 100644 index 0000000..d9426d7 --- /dev/null +++ b/src/main/kotlin/me/faiz/combat_f/handler/TimeHandler.kt @@ -0,0 +1,32 @@ +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 new file mode 100644 index 0000000..a94856e --- /dev/null +++ b/src/main/kotlin/me/faiz/combat_f/handler/UseHandler.kt @@ -0,0 +1,105 @@ +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/resources/plugin.yml b/src/main/resources/plugin.yml index 8954b29..b5f5b40 100644 --- a/src/main/resources/plugin.yml +++ b/src/main/resources/plugin.yml @@ -1,7 +1,9 @@ name: Combat -version: 1.0.2 -main: group.pvpconnect.combat_f.Main -api-version: 1.19 +version: 2.0.0 +main: me.faiz.combat_f.Main +api-version: "1.20" author: faiz libraries: - - io.github.monun:kommand-core:3.1.7 \ No newline at end of file + - org.jetbrains.kotlin:kotlin-stdlib:2.0.0-Beta4 + - io.github.monun:kommand-core:3.1.7 + - io.github.monun:invfx-core:3.3.2 \ No newline at end of file