From 53f44071ccd9a4d312c7d4e33221925961dac5b5 Mon Sep 17 00:00:00 2001 From: faiz36 Date: Wed, 29 Mar 2023 15:58:47 +0900 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=ED=95=99=EA=B5=90=EC=97=90=EC=84=9C?= =?UTF-8?q?=20=EA=B8=89=EC=A1=B0=ED=95=9C,=20=EB=8C=80=EA=B0=80=EB=A6=AC?= =?UTF-8?q?=EA=B0=80=20=EC=A2=80=20=EC=9D=B4=EC=83=81=ED=95=A0=EB=95=8C=20?= =?UTF-8?q?=EB=A7=8C=EB=93=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gradle/7.4.2/checksums/checksums.lock | Bin 17 -> 17 bytes .gradle/7.4.2/checksums/md5-checksums.bin | Bin 18597 -> 18997 bytes .gradle/7.4.2/checksums/sha1-checksums.bin | Bin 18659 -> 19199 bytes .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/outputFiles.bin | Bin 19199 -> 19685 bytes .idea/discord.xml | 2 +- build.gradle.kts | 5 +- .../kotlin/group/pvpconnect/combat_f/Main.kt | 16 ++- .../pvpconnect/combat_f/cmd/CombatCmd.kt | 51 +++++++++ .../pvpconnect/combat_f/data/CombatData.kt | 38 +++++++ .../pvpconnect/combat_f/event/CombatEvent.kt | 107 ++++++++++++++++++ src/main/resources/plugin.yml | 7 ++ 12 files changed, 222 insertions(+), 4 deletions(-) create mode 100644 src/main/kotlin/group/pvpconnect/combat_f/cmd/CombatCmd.kt create mode 100644 src/main/kotlin/group/pvpconnect/combat_f/data/CombatData.kt create mode 100644 src/main/kotlin/group/pvpconnect/combat_f/event/CombatEvent.kt create mode 100644 src/main/resources/plugin.yml diff --git a/.gradle/7.4.2/checksums/checksums.lock b/.gradle/7.4.2/checksums/checksums.lock index 6dab0f9a403b2bcac211611b253bafdd2b20e7eb..c7371bf915ca85b9f06451b000e7fcdaeed83d49 100644 GIT binary patch literal 17 UcmZP$ulZgxk+6;=34Z&G$!ip5KAHJEDlvjaf zmJ$6xDvTyep$4<1Qf9sBhm|r{ON#Q16{e!}%dzf!?m_DQg5vwY?Roef-@84Zd%0Ua zAt^#k9b|SS%`UNm00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafK;VB7u*n;Vqnk-t zK1W$393sRNuf%m(<=*azu~B;3QptWlxHR}ZyszU}RLuuj?$0wNE-WZpqUJ3u?;lw9 zFt@e8i00OpEdONNm}unFdexj~`RAxJ;N^;Ms@K`X@?ZA1u6Jzefw@J-6u$;|==yd8$FhKwU5P$##AOHafKmY;| zfB*y_009U<00Izz00bZa0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*#kDS_4U zx6PCfqjCrX(@#rEr?RUW7JG(YRb@)@8}qf7bK;KDEeTuXIqT0x)3x25J=dKr>vo

OsBIiH8CUfczwY*YjEwY& zjs)5$Qvcr|xU`LQy%c`Im47=Qs&IC3Bb?lj#9%~zF3K=W${&9{j}H5p<~?P>JB_Cw TMD(upTWMox?M#92?MmY}bh8N$ delta 56 zcmdlwg>mUb#tkMCf=s=7c`NsQ`tXhc3_OY_FO^W>`40s^F~^OHKg2g0+z_Aa=#c^d DqAVDa diff --git a/.gradle/7.4.2/checksums/sha1-checksums.bin b/.gradle/7.4.2/checksums/sha1-checksums.bin index c608507d7c5f8b136f32f285ea1c1c7653c3d7bc..d8702da7e9a85be4a372e2f45fe3c40fc1381d08 100644 GIT binary patch literal 19199 zcmeI(Ye-X300;0pnN7vj#->^8L6$|+%tvWX!P**b6MImL%p$EcN{X;dN+h$)iULUu zvZy|2X+CD9IPFC#ftAsVENzvo2feKMs0pQ=>$w-n`@IkGKXC6o{I~zky+8JCI|~`c zM>fa}W_WlFPcef41Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<;C~S?lLzsj591Ty z!cN9yFiemqnMjWYZY{sw{k@C6Y^dUYKRDUue3oY2|C{ErdVCmW!(ES_*_!hUvhG6gq7x|HGJ-N zv|YTkD4~bT3;2BerSJoeoLU9<`3^q!P1a~sUwXT_{0g6&%LgUPT%(J)JeSWCw@ize zqcHl=+^~Sp(_2j{Yf}bypQagn&R-cuWTYLOApijgKmY;|fB*y_009U<00Izz00bZa z0SG_<0uX=z1Rwwb2tWV=5P$##AOHafKmY;|fB*y_009U<00RF;Ae1aKiyVIJp%i!Z zmIV~d^qF;E`F6|gE58c-CcH?~)0XEB+VYJTwgT^-kUx05t@Zed zEN@TOPDXG-ZmguUm^}QxJw8c@oTy#4>5xmwou9iVcgl1X zO`Ec5%TUjD7{cME7X(cS{`?RU+{``J2s_N8&8nGUgAJ7;&+%m7im^*7SLp zQwDEu-B9OU^gjJT0d2){yCY=D!d7CIEp@)tzCF0zx6nUzu(U$6XEbT$sT(`;=vtCq zVe5q@GU3B9Rph&m8kY-;GS5b}xmD4YEsVC@EyC8h*r>72%<3Hn&-Xo1uc}s9A3hf#>x9P|$hFP_KKnfjvarTNx(abNJ))FH)ae zAmToAVd9f>DqgOrxpM}p{x?i~s?zbR)k(?Ipz70M;xm*tYu(s6IaoqSV{YP&<4SLe zd7)Y(VM>;2S{wg!($I&B_fL+MP;gi#_xoX9!N)A9d4@2>%UUvuPRj3Rfhyh%6JH)< zeW-fk!i`Y%p_5A`8U&7g=a1g58FU{i$UFHhQ1Ib{ovYWmExQdBJUBU3(n8=v)7+Da z4*a4}!ON4UN-7Ba3vc20uzq4KM9};CZ1TGlCID4gIhj`~AVTrO{ocU( zd5ln%?l4!W269zSXwiv+ikrg3HRh}dP=CQu1vNw-Ca%@Wv!4GrOAAze?c`7?3jw_g z|1>75KYs`j^!h)!RjNV5@!b7sC+%&ZHu^ZjOmHb(zPkI;{`pW77Eb;v)gTbGV!38u zkZ=lA@a5!EX$67A8D$@jPnggI5%gIxZEf$2~~U)CJv(+7}y*)D*h1PXmCStv!lm8 irpfm`>@m5)lNA7iur~<+ delta 109 zcmaDllkxvl#tkMCg6i$6%&Rqbb0;u>f#>weOC=O0f0dA!94c8c`6&>WN*PSvD - \ 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