skill: add option to pass inline variables (parameters) to other skills
Closed
skill: add option to pass inline variables (parameters) to other skills
Summary
Add option to define inline skill scoped variables in the meta skill to allow more reusable skills. Creators would also be able to create (and sell) reusable skills to the community.
Usage
This would allow the following:
MyMob:
Skills:
- skill{s=Bash{damage=6;duration=40}} @target ~onAttack
Bash:
Skills:
- potion{type=SLOW;d=<skill.duration>;l=7}
- effect:sound{s=block.anvil.land}
- effect:particles{p=explosion_large;speed=1}
- damage{a=<skill.damage>}
Instead of:
MyMob:
Skills:
- skill{s=Tutorial_Guard_Bash} @target ~onAttack
Tutorial_Guard_Bash:
Skills:
- setvariable{var=skill.damage;val=6}
- setvariable{var=skill.duration;val=40}
- skill{s=Bash}
Value
This would allow defining skills with inputs and reuse them across multiple projects and bosses.
Priority
Normal priority as this is just a nice addition.
Implementation
Add an additional parser for the meta skill that accepts setting (maybe increase and decrease) variables and pass them to the called skill.
Maybe this could also be implemented in a more general case and allow all mechanics to pass inline scoped variables to the called skills.
assigned to @ashijin
changed milestone to %4.12.X
added Enhancement label
Looks great. Does this also work with setting defaults like using the other variables?
MyMob: Skills: - skill:Bash{damage=10} Bash: Skills: - potion{type=SLOW;d=<skill.duration|60>;l=7} - effect:sound{s=block.anvil.land} - effect:particles{p=explosion_large;speed=1} - damage{a=<skill.damage>}
And will nested skills work?
MyMob: Skills: - skill:Bash{damage=10} Bash: Skills: - potion{type=SLOW;d=<skill.duration|60>;l=7} - skill:Explosion{sound=mob.creeper.hiss} - damage{a=<skill.damage>} Explosion: Skills: - effect:sound{s=<skill.sound|block.anvil.land>} - effect:particles{p=explosion_large;speed=1}
Edited by Silthus
I get the following NPE on startup with the latest dev build:
minimal_1 | [07:05:20 INFO]: [MythicMobs] Enabling MythicMobs v4.12.0-SNAPSHOT-f41bf890 minimal_1 | [07:05:20 INFO]: [LumineUtils] (io.lumine.xikage.mythicmobs.utils.) is bound to plugin MythicMobs - io.lumine.xikage.mythicmobs.MythicMobs minimal_1 | [07:05:20 ERROR]: Error occurred while enabling MythicMobs v4.12.0-SNAPSHOT-f41bf890 (Is it up to date?) minimal_1 | java.lang.NullPointerException: null minimal_1 | at io.lumine.xikage.mythicmobs.logging.MythicLogger.log(MythicLogger.java:31) ~[?:?] minimal_1 | at io.lumine.xikage.mythicmobs.MythicMobs.enable(MythicMobs.java:102) ~[?:?] minimal_1 | at io.lumine.xikage.mythicmobs.utils.plugin.LuminePlugin.onEnable(LuminePlugin.java:67) ~[?:?] minimal_1 | at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:380) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:483) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:501) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:415) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at net.minecraft.server.v1_16_R3.MinecraftServer.loadWorld(MinecraftServer.java:582) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:292) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1060) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at java.lang.Thread.run(Unknown Source) [?:?] minimal_1 | [07:05:20 INFO]: [MythicMobs] Disabling MythicMobs v4.12.0-SNAPSHOT-f41bf890 minimal_1 | [07:05:20 WARN]: java.lang.NullPointerException minimal_1 | [07:05:20 WARN]: at io.lumine.xikage.mythicmobs.logging.MythicLogger.log(MythicLogger.java:27) minimal_1 | [07:05:20 WARN]: at io.lumine.xikage.mythicmobs.MythicMobs.disable(MythicMobs.java:187) minimal_1 | [07:05:20 WARN]: at io.lumine.xikage.mythicmobs.utils.plugin.LuminePlugin.onDisable(LuminePlugin.java:73) minimal_1 | [07:05:20 WARN]: at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:265) minimal_1 | [07:05:20 WARN]: at org.bukkit.plugin.java.JavaPluginLoader.disablePlugin(JavaPluginLoader.java:415) minimal_1 | [07:05:20 WARN]: at org.bukkit.plugin.SimplePluginManager.disablePlugin(SimplePluginManager.java:516) minimal_1 | [07:05:20 WARN]: at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:384) minimal_1 | [07:05:20 WARN]: at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:483) minimal_1 | [07:05:20 WARN]: at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:501) minimal_1 | [07:05:20 WARN]: at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:415) minimal_1 | [07:05:20 WARN]: at net.minecraft.server.v1_16_R3.MinecraftServer.loadWorld(MinecraftServer.java:582) minimal_1 | [07:05:20 WARN]: at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:292) minimal_1 | [07:05:20 WARN]: at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1060) minimal_1 | [07:05:20 WARN]: at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) minimal_1 | [07:05:20 WARN]: at java.base/java.lang.Thread.run(Unknown Source) minimal_1 | [07:05:20 INFO]: [ModelEngine] Enabling ModelEngine vR2.1.0 minimal_1 | [07:05:20 ERROR]: Error occurred while enabling ModelEngine vR2.1.0 (Is it up to date?) minimal_1 | java.lang.NoClassDefFoundError: io/lumine/xikage/mythicmobs/skills/SkillMechanic minimal_1 | at com.ticxo.modelengine.ModelEngine.onEnable(ModelEngine.java:63) ~[?:?] minimal_1 | at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:263) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:380) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:483) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugin(CraftServer.java:501) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at org.bukkit.craftbukkit.v1_16_R3.CraftServer.enablePlugins(CraftServer.java:415) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at net.minecraft.server.v1_16_R3.MinecraftServer.loadWorld(MinecraftServer.java:582) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at net.minecraft.server.v1_16_R3.DedicatedServer.init(DedicatedServer.java:292) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at net.minecraft.server.v1_16_R3.MinecraftServer.w(MinecraftServer.java:1060) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at net.minecraft.server.v1_16_R3.MinecraftServer.lambda$a$0(MinecraftServer.java:291) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at java.lang.Thread.run(Unknown Source) [?:?] minimal_1 | Caused by: java.lang.ClassNotFoundException: io.lumine.xikage.mythicmobs.skills.SkillMechanic minimal_1 | at java.net.URLClassLoader.findClass(Unknown Source) ~[?:?] minimal_1 | at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:183) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at org.bukkit.plugin.java.PluginClassLoader.findClass(PluginClassLoader.java:111) ~[patched_1.16.5.jar:git-Purpur-1059] minimal_1 | at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?] minimal_1 | at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:?] minimal_1 | ... 11 more minimal_1 | [07:05:20 INFO]: [ModelEngine] Disabling ModelEngine vR2.1.0 minimal_1 | [07:05:20 INFO]: [Model Engine] Core shut down.
Here is the full startup log: latest.log
It works like a charm! I tested various options and they all work.
- Nested skills
- Default variable values:
<skill.XXX|mydefault>
- Using additional skill mechanic options, like
cooldown
Thank you for the quick and awesome implementation. I am sure this will help out a lot of people in structuring their skills.