Suggestion Closed · Implemented

skill: add option to pass inline variables (parameters) to other skills

#1836 opened by Unknown 5 years ago

Unknownreported this suggestion

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.

Unknowncommented
MyMob:
  Skills:
  - skill:Bash{damage=10;duration=60}

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>}
Unknowncommented

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}
Unknowncommented

Those should work, but will require testing

Unknowncommented

Please try out the latest build and let me know if things work how you wanted!

Unknowncommented

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: [Legacy attachment omitted]

Unknowncommented

Try the latest

Unknowncommented

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.

Sign in to join the discussion.