From 5847170e2aeef380a9df4f6bc7972fc685038c4b Mon Sep 17 00:00:00 2001 From: NeumimTo Date: Sat, 5 Feb 2022 11:37:57 +0100 Subject: [PATCH 1/3] denizen --- buildSrc/src/main/kotlin/dependencies.kt | 4 ++ mimic-bukkit/build.gradle.kts | 3 ++ mimic-bukkit/src/main/kotlin/MimicPlugin.kt | 7 +++ .../kotlin/denizen/DenizenScriptBridge.kt | 25 +++++++++ .../src/main/kotlin/denizen/MimicTag.kt | 54 +++++++++++++++++++ 5 files changed, 93 insertions(+) create mode 100644 mimic-bukkit/src/main/kotlin/denizen/DenizenScriptBridge.kt create mode 100644 mimic-bukkit/src/main/kotlin/denizen/MimicTag.kt diff --git a/buildSrc/src/main/kotlin/dependencies.kt b/buildSrc/src/main/kotlin/dependencies.kt index b50da5a7..c4eac4b1 100644 --- a/buildSrc/src/main/kotlin/dependencies.kt +++ b/buildSrc/src/main/kotlin/dependencies.kt @@ -13,6 +13,10 @@ object acf { const val paper = "co.aikar:acf-paper:0.5.0-SNAPSHOT" } +object denizenscript { + const val denizen = "com.denizenscript:denizen:1.2.3-SNAPSHOT" +} + object misc { const val bstats = "org.bstats:bstats-bukkit:1.8" const val annotations = "org.jetbrains:annotations:13.0" diff --git a/mimic-bukkit/build.gradle.kts b/mimic-bukkit/build.gradle.kts index 0253aa75..44c0d965 100644 --- a/mimic-bukkit/build.gradle.kts +++ b/mimic-bukkit/build.gradle.kts @@ -36,6 +36,7 @@ repositories { flatDir { dir("libs") } // Uncomment if you want to get Heroes from maven repo //maven(url = "https://nexus.hc.to/content/repositories/pub_snapshots/") + maven(url = "https://repo.citizensnpcs.co") } dependencies { @@ -55,6 +56,8 @@ dependencies { compileOnly(rpgplugins.mmoItems) { isTransitive = false } compileOnly(rpgplugins.heroes) { isTransitive = false } + compileOnly(denizenscript.denizen) + // From libs/ directory compileOnly(":CustomItemsAPI") compileOnly(":QuantumRPG:5.10.2") diff --git a/mimic-bukkit/src/main/kotlin/MimicPlugin.kt b/mimic-bukkit/src/main/kotlin/MimicPlugin.kt index 895eb011..1a7fcb14 100644 --- a/mimic-bukkit/src/main/kotlin/MimicPlugin.kt +++ b/mimic-bukkit/src/main/kotlin/MimicPlugin.kt @@ -22,6 +22,7 @@ package ru.endlesscode.mimic import co.aikar.commands.PaperCommandManager import org.bstats.bukkit.Metrics import org.bukkit.Bukkit +import org.bukkit.event.server.ServerLoadEvent import org.bukkit.plugin.ServicePriority import org.bukkit.plugin.ServicePriority.* import org.bukkit.plugin.java.JavaPlugin @@ -32,6 +33,7 @@ import ru.endlesscode.mimic.command.ClassSystemSubcommand import ru.endlesscode.mimic.command.ItemsSubcommand import ru.endlesscode.mimic.command.LevelSystemSubcommand import ru.endlesscode.mimic.command.MainCommand +import ru.endlesscode.mimic.denizen.DenizenScriptBridge import ru.endlesscode.mimic.config.MimicConfig import ru.endlesscode.mimic.impl.battlelevels.BattleLevelsLevelSystem import ru.endlesscode.mimic.impl.customitems.CustomItemsRegistry @@ -117,8 +119,13 @@ public class MimicPlugin : JavaPlugin() { pluginHooks("MMOItems", "net.Indyuce.mmoitems.MMOItems") { hookItems(::MmoItemsRegistry) } + + pluginHooks("Denizen", "com.denizenscript.denizen.Denizen") { + DenizenScriptBridge.ínit(this); + } } + private fun pluginHooks(name: String, vararg requiredClasses: String, hooks: () -> Unit) { val pluginLoaded = Bukkit.getPluginManager().getPlugin(name) != null if (pluginLoaded && checkClassesLoaded(*requiredClasses)) { diff --git a/mimic-bukkit/src/main/kotlin/denizen/DenizenScriptBridge.kt b/mimic-bukkit/src/main/kotlin/denizen/DenizenScriptBridge.kt new file mode 100644 index 00000000..fbccd686 --- /dev/null +++ b/mimic-bukkit/src/main/kotlin/denizen/DenizenScriptBridge.kt @@ -0,0 +1,25 @@ +package ru.endlesscode.mimic.denizen + +import org.bukkit.Bukkit +import org.bukkit.Registry +import ru.endlesscode.mimic.MimicPlugin +import ru.endlesscode.mimic.classes.BukkitClassSystem + +public class DenizenScriptBridge { + + public companion object { + + @JvmStatic + public fun ínit(mimicPlugin: MimicPlugin) { + + } + + @JvmStatic + public fun hookClassSystem(mimicPlugin: MimicPlugin) { + val registration = Bukkit.getServicesManager().getRegistration(BukkitClassSystem::class.java) ?: return + val provider = registration.provider ?: return + + provider. + } + } +} \ No newline at end of file diff --git a/mimic-bukkit/src/main/kotlin/denizen/MimicTag.kt b/mimic-bukkit/src/main/kotlin/denizen/MimicTag.kt new file mode 100644 index 00000000..cf36c700 --- /dev/null +++ b/mimic-bukkit/src/main/kotlin/denizen/MimicTag.kt @@ -0,0 +1,54 @@ +package ru.endlesscode.mimic.denizen + +import com.denizenscript.denizencore.objects.Fetchable +import com.denizenscript.denizencore.objects.ObjectTag +import com.denizenscript.denizencore.tags.TagContext + + +public class MimicTag( + private var prefix: String, +) : ObjectTag { + + override fun getPrefix(): String { + return prefix; + } + + override fun setPrefix(p0: String?): ObjectTag { + prefix = p0!!; + return this; + } + + override fun isUnique(): Boolean { + return true; + } + + override fun getObjectType(): String { + return "Mimic" + } + + override fun identify(): String { + return "mimic@" + + } + + override fun identifySimple(): String { + TODO("Not yet implemented") + } + + + + companion object { + @Fetchable("faction") + @JvmStatic + fun valueOf(string: String?, context: TagContext?): MimicTag? { + var string = string ?: return null + + //////// + // Match faction name + string = string.replace("mimic@", "") + val faction: Faction = FactionColl.get().getByName(string) + return if (faction != null) { + FactionTag(faction) + } else null + } + } +} \ No newline at end of file From 053e04fc10767eb01ceee9e15893c2d63c939c71 Mon Sep 17 00:00:00 2001 From: NeumimTo Date: Sun, 6 Feb 2022 15:40:22 +0100 Subject: [PATCH 2/3] basic denizen support --- mimic-bukkit/src/main/kotlin/MimicPlugin.kt | 3 +- .../kotlin/denizen/DenizenScriptBridge.kt | 121 ++++++++++++++++-- .../src/main/kotlin/denizen/MimicTag.kt | 54 -------- 3 files changed, 114 insertions(+), 64 deletions(-) delete mode 100644 mimic-bukkit/src/main/kotlin/denizen/MimicTag.kt diff --git a/mimic-bukkit/src/main/kotlin/MimicPlugin.kt b/mimic-bukkit/src/main/kotlin/MimicPlugin.kt index 1a7fcb14..057f7f2b 100644 --- a/mimic-bukkit/src/main/kotlin/MimicPlugin.kt +++ b/mimic-bukkit/src/main/kotlin/MimicPlugin.kt @@ -121,8 +121,9 @@ public class MimicPlugin : JavaPlugin() { } pluginHooks("Denizen", "com.denizenscript.denizen.Denizen") { - DenizenScriptBridge.ínit(this); + DenizenScriptBridge.hook(); } + } diff --git a/mimic-bukkit/src/main/kotlin/denizen/DenizenScriptBridge.kt b/mimic-bukkit/src/main/kotlin/denizen/DenizenScriptBridge.kt index fbccd686..401c3194 100644 --- a/mimic-bukkit/src/main/kotlin/denizen/DenizenScriptBridge.kt +++ b/mimic-bukkit/src/main/kotlin/denizen/DenizenScriptBridge.kt @@ -1,25 +1,128 @@ package ru.endlesscode.mimic.denizen +import com.denizenscript.denizen.objects.PlayerTag +import com.denizenscript.denizencore.objects.Mechanism +import com.denizenscript.denizencore.objects.ObjectTag +import com.denizenscript.denizencore.objects.core.ElementTag +import com.denizenscript.denizencore.objects.properties.Property +import com.denizenscript.denizencore.objects.properties.PropertyParser +import com.denizenscript.denizencore.tags.Attribute +import com.sucy.skill.SkillAPI import org.bukkit.Bukkit -import org.bukkit.Registry -import ru.endlesscode.mimic.MimicPlugin import ru.endlesscode.mimic.classes.BukkitClassSystem +import ru.endlesscode.mimic.classes.ClassSystem +import ru.endlesscode.mimic.level.BukkitLevelSystem +import ru.endlesscode.mimic.level.LevelSystem + public class DenizenScriptBridge { public companion object { - @JvmStatic - public fun ínit(mimicPlugin: MimicPlugin) { + public fun hook() { + PropertyParser.registerProperty(MimicPlayerTagClassProperties::class.java, PlayerTag::class.java) + } + } + + public class MimicPlayerTagClassProperties private constructor( + public var player: PlayerTag + ) : Property { + + override fun getPropertyString(): String? { + return null + } + + override fun getPropertyId(): String { + return "MimicPlayerClass" + } + + override fun adjust(mechanism: Mechanism) {} + + private fun classSystem(): ClassSystem? { + val provider = Bukkit.getServicesManager().getRegistration(BukkitClassSystem.Provider::class.java); + return provider?.provider?.getSystem(player.playerEntity) + } + + private fun levelSystem(): LevelSystem { + val provider = Bukkit.getServicesManager().getRegistration(BukkitLevelSystem.Provider::class.java); + return provider!!.provider.getSystem(player.playerEntity) + } + + override fun getAttribute(a: Attribute): String? { + if (a.startsWith("mimic")) { + + val attribute = a.fulfill(1) + // <--[tag] + // @attribute + // @returns ElementTag(Boolean) + // @description + // Returns whether the player has specific class + // --> + if (attribute.startsWith("has_class")) { + if (!attribute.hasParam()) { + attribute.echoError("has_class requires a class name argument"); + return null; + } + return ElementTag(classSystem()!!.hasClass(attribute.param)).getAttribute(attribute.fulfill(1)) + } + + // <--[tag] + // @attribute + // @returns ElementTag(String) + // @description + // Returns primary class + // --> + if (attribute.startsWith("primary_class")) { + return ElementTag(classSystem()!!.primaryClass).getAttribute(attribute.fulfill(1)); + } + + // <--[tag] + // @attribute + // @returns ElementTag(Int) + // @description + // Returns the player class level + // --> + if (attribute.startsWith("class_level")) { + //todo level system supports getting only primary class level + //if (!attribute.hasParam()) { + // attribute.echoError("has_class requires a class name argument"); + // return null; + //} + return ElementTag(levelSystem().level).getAttribute(attribute.fulfill(1)) + } + + // <--[tag] + // @attribute + // @returns ElementTag(String) + // @description + // Returns level after exp were given + // --> + if (attribute.startsWith("class_give_exp")) { + return ElementTag(levelSystem().level).getAttribute(attribute.fulfill(1)); + } + } + + return null } - @JvmStatic - public fun hookClassSystem(mimicPlugin: MimicPlugin) { - val registration = Bukkit.getServicesManager().getRegistration(BukkitClassSystem::class.java) ?: return - val provider = registration.provider ?: return + public companion object { + public fun describes(`object`: ObjectTag?): Boolean { + return `object` is PlayerTag + } + + public fun getFrom(`object`: ObjectTag): MimicPlayerTagClassProperties? { + return if (!describes(`object`)) { + null + } else { + MimicPlayerTagClassProperties(`object` as PlayerTag) + } + } - provider. + public val handledTags: Array = arrayOf( + "mimic", + ) + public val handledMechs: Array = arrayOf() } } } \ No newline at end of file diff --git a/mimic-bukkit/src/main/kotlin/denizen/MimicTag.kt b/mimic-bukkit/src/main/kotlin/denizen/MimicTag.kt deleted file mode 100644 index cf36c700..00000000 --- a/mimic-bukkit/src/main/kotlin/denizen/MimicTag.kt +++ /dev/null @@ -1,54 +0,0 @@ -package ru.endlesscode.mimic.denizen - -import com.denizenscript.denizencore.objects.Fetchable -import com.denizenscript.denizencore.objects.ObjectTag -import com.denizenscript.denizencore.tags.TagContext - - -public class MimicTag( - private var prefix: String, -) : ObjectTag { - - override fun getPrefix(): String { - return prefix; - } - - override fun setPrefix(p0: String?): ObjectTag { - prefix = p0!!; - return this; - } - - override fun isUnique(): Boolean { - return true; - } - - override fun getObjectType(): String { - return "Mimic" - } - - override fun identify(): String { - return "mimic@" + - } - - override fun identifySimple(): String { - TODO("Not yet implemented") - } - - - - companion object { - @Fetchable("faction") - @JvmStatic - fun valueOf(string: String?, context: TagContext?): MimicTag? { - var string = string ?: return null - - //////// - // Match faction name - string = string.replace("mimic@", "") - val faction: Faction = FactionColl.get().getByName(string) - return if (faction != null) { - FactionTag(faction) - } else null - } - } -} \ No newline at end of file From b73f0a4080e662dff884df398613e4db9e2b2db6 Mon Sep 17 00:00:00 2001 From: NeumimTo Date: Sun, 6 Feb 2022 15:57:25 +0100 Subject: [PATCH 3/3] denizen --- .../kotlin/denizen/DenizenScriptBridge.kt | 41 ++++++++++++++++++- 1 file changed, 39 insertions(+), 2 deletions(-) diff --git a/mimic-bukkit/src/main/kotlin/denizen/DenizenScriptBridge.kt b/mimic-bukkit/src/main/kotlin/denizen/DenizenScriptBridge.kt index 401c3194..436d7a23 100644 --- a/mimic-bukkit/src/main/kotlin/denizen/DenizenScriptBridge.kt +++ b/mimic-bukkit/src/main/kotlin/denizen/DenizenScriptBridge.kt @@ -4,6 +4,7 @@ import com.denizenscript.denizen.objects.PlayerTag import com.denizenscript.denizencore.objects.Mechanism import com.denizenscript.denizencore.objects.ObjectTag import com.denizenscript.denizencore.objects.core.ElementTag +import com.denizenscript.denizencore.objects.core.ListTag import com.denizenscript.denizencore.objects.properties.Property import com.denizenscript.denizencore.objects.properties.PropertyParser import com.denizenscript.denizencore.tags.Attribute @@ -93,13 +94,49 @@ public class DenizenScriptBridge { } // <--[tag] - // @attribute + // @attribute // @returns ElementTag(String) // @description // Returns level after exp were given // --> if (attribute.startsWith("class_give_exp")) { - return ElementTag(levelSystem().level).getAttribute(attribute.fulfill(1)); + val levelSystem = levelSystem(); + levelSystem.giveExp(attribute.doubleParam) + return ElementTag(levelSystem.level).getAttribute(attribute.fulfill(1)); + } + + // <--[tag] + // @attribute + // @returns ElementTag(String) + // @description + // Returns level after exp were given + // --> + if (attribute.startsWith("give_level")) { + val levelSystem = levelSystem(); + levelSystem.giveLevels(attribute.intParam) + return ElementTag(levelSystem.level).getAttribute(attribute.fulfill(1)); + } + + // <--[tag] + // @attribute + // @returns ElementTag(String) + // @description + // Returns players total exp + // --> + if (attribute.startsWith("total_exp")) { + val levelSystem = levelSystem(); + return ElementTag(levelSystem.totalExp).getAttribute(attribute.fulfill(1)); + } + + // <--[tag] + // @attribute + // @returns List(String) + // @description + // Returns list of player classes + // --> + if (attribute.startsWith("classes")) { + val classSystem = classSystem()!!; + return ListTag(classSystem.classes).getAttribute(attribute.fulfill(1)); } }