[FUN/MECH] ElixirMod v1.00 - A Drink to Victory! [1060]

Discussion in 'Inactive/Unsupported Plugins' started by Steeveeo, Jun 18, 2011.

  1. Offline

    Steeveeo

    ElixirMod - A Drink to Victory!
    Version: v1.00

    ElixirMod is my first plugin for Bukkit, and is tested and working under build 860. This plugin adds a few "simulated items" that users can toy with, which are listed in Features.
    The way this mod works is that a user holds an empty bowl in hand, right clicks, and if they have the proper ingredients, will give them a buff for a period of time. But if they are not careful, they could hurt themselves, as each drink racks up "Toxicity" which can hurt more than it helps.

    Features:
    • Works with Permissions 2.7.4 and equivalent (tested with Essentials Group Manager).
    • Every aspect of each Elixir is, or will be modifiable.
    • Several fun and useful Potions and Elixirs, see the Potion List below for details
    [​IMG] Download ElixirMod.jar
    [​IMG] Source Code

    Issues:
    Having issues with ElixirMod? Have a suggestion? Posting it here tends to get lost in chatter, instead:

    PermissionsBukkit Hotfix:
    When version 1.00 of ElixirMod came out, it did not support PermissionsBukkit. The fix for this is relatively simple, and just requires a quick edit to the ElixirMod.jar file. Make sure the server is off before attempting this, and then open ElixirMod.jar in something like 7zip, open "plugin.yml" and replace its content with the stuff in the following spoiler tag, save and make sure your archive program updated the file inside it, then run the server and enjoy ElixirMod on PermissionsBukkit (note, requires SuperPermsBridge):
    Show Spoiler

    Code:yaml
    1. name: ElixirMod
    2. main: me.steeveeo.ElixirMod.ElixirMod
    3. version: 1.00
    4. load: startup
    5. commands:
    6. elixir:
    7. description: Command container for all ElixirMod Admin commands.
    8. permissions:
    9. elixirmod.*:
    10. description: Gives access to all ElixirMod permissions.
    11. default: false
    12. children:
    13. elixirmod.command.*: true
    14. elixirmod.allpotions: true
    15. elixirmod.command.*:
    16. description: Gives access to all ElixirMod chat commands
    17. default: false
    18. children:
    19. elixirmod.command.gettox: true
    20. elixirmod.command.gettox.others: true
    21. elixirmod.command.settox: true
    22. elixirmod.command.settox.others: true
    23. elixirmod.command.reset: true
    24. elixirmod.command.reset.others: true
    25. elixirmod.command.givebuff: true
    26. elixirmod.command.takebuff: true
    27. elixirmod.allpotions:
    28. description: Grants access to all ElixirMod potions
    29. default: true
    30. children:
    31. elixirmod.cactusrum: true
    32. elixirmod.firetouch: true
    33. elixirmod.haste: true
    34. elixirmod.obbyskin: true
    35. elixirmod.wheatseedtea: true
    36. elixirmod.featherfall: true
    37. elixirmod.diversale: true
    38. elixirmod.frosttouch: true
    39. elixirmod.health: true
    40. elixirmod.dragonsdraught: true
    41. elixirmod.command.gettox:
    42. default: false
    43. elixirmod.command.gettox.others:
    44. default: false
    45. elixirmod.command.settox:
    46. default: false
    47. elixirmod.command.settox.others:
    48. default: false
    49. elixirmod.command.reset:
    50. default: false
    51. elixirmod.command.reset.others:
    52. default: false
    53. elixirmod.command.givebuff:
    54. default: false
    55. elixirmod.command.takebuff:
    56. default: false
    57. elixirmod.cactusrum:
    58. default: true
    59. elixirmod.firetouch:
    60. default: true
    61. elixirmod.haste:
    62. default: true
    63. elixirmod.obbyskin:
    64. default: true
    65. elixirmod.wheatseedtea:
    66. default: true
    67. elixirmod.featherfall:
    68. default: true
    69. elixirmod.diversale:
    70. default: true
    71. elixirmod.frosttouch:
    72. default: true
    73. elixirmod.health:
    74. default: true
    75. elixirmod.dragonsdraught:
    76. default: true



    Changelog:
    Note, when updating to or through any version with the "(Config Reinstall Required)" flag in the changelog, you must delete the ElixirMod folder in Plugins, then run the server to let the plugin regenerate the file.

    Version 1.00
    (Config Reinstall Required)
    • First off, a note. Many, many things changed, so this is not a complete list. Instead, just the main points of the changes made, nothing fine.
    • Complete rewrite of how potions work and act, systematically. Now uses a modular class-based system instead of the stupid CopyPasta I had going on in prior versions. YAY, it's now officially an Object Oriented Program! Derp.
    • Added some new stuff to the config files for existing potions.
    • Made the ability for Firetouch users to ignite Netherrack with rightclick. This casts a BLOCK_IGNITE_EVENT with the cause of FLINTANDSTEEL before igniting, so it can be canceled. Handy for region protection.
    • Added support for specifying the ENTIRE recipe within the config files. Syntax is as follows: "Item : Data * Amount,..." Specifically, Item is the type of inventory item to look for, Data is the datavalue associated with the item (use them for dyes, it's what I built it for), and amount is, well, the amount. 351:1*5,1*1 would be 5 Rose Red dye and 1 Stone, for example.
    • Added Diver's Ale. Costs 8 glowstone dust and 1 rose, gives 5 times the breath underwater.
    • Added Elixir of Frosttouch. Costs 4 Snowblocks and 1 waterbucket. 75% chance to stun a hit target for 3 seconds.
    • Added Health Potion (generic name HO!). Costs 1 brown mushroom, 1 red mushroom, and 1 milkbucket. Gives a half-heart per 1 second for 15 seconds.
    • Added Dragon's Draught. Costs 2 lavabuckets and 4 obsidian. Gives heat-damage immunity. Lava immunity is on by default, but is a toggle in the config for admins who don't like it.
    • Added a Chat Command system. Commands are as follows (player can be the * wildcard to select the entire server):
      • /elixir Prints out the help and usage
      • /elixir gettox[ player] Prints out your toxicity, or the specified player(s)
      • /elixir settox[ player] amount Sets the Toxicity variable on self or player(s).
      • /elixir givebuff player buffname Grants a buff by name to player(s).
      • /elixir takebuff player buffname Inverse of the above.
    • Got rid of some useless and unused events. All of the other events are handled in the potion objects now, and there's no need for a joiner event anymore.
    • Made the util.takeItemAmount() function check for data values as well as special behavior for bucket contents. If a potion recipe asks for, say, a lava bucket, this function will now replace the lava bucket with an empty one.
    Previous Versions (open)

    Version 0.75:
    Show Spoiler
    (Config Reinstall Required)
    • Removed "Plugin Enabled" from config, really didn't do anything and was a remnant from the config tutorial I based it on.
    • Fixed some pretty severe NullPointerError spam with the Elixir of Haste and some with Elixir of Obbyskin. This was due to reloading plugins making my hashtables reset. Now checks for null hashes before doing anything with them.
    • Added Elixir of Featherfall. Costs 16 feathers and negates fall damage for 2 minutes.
    • Added Elixir of Firetouch. Costs 16 netherrack and gives the user a 75% chance to ignite a target for 5 seconds. Currently ignites via any damage from a user, but can be configured to only work when unarmed.

    Version 0.66:
    Show Spoiler

    • Fixed Wheatseed Tea use check. Failed copypasta from Obsidian Skin made it check to see if the user had leather as well as the required ingredients.

    Version 0.65:
    Show Spoiler
    (Config Reinstall Required)
    • Added Elixir of Obsidian Skin - 50% damage reduction for 5 minutes, takes 1 obsidian and 8 leather.
    • Added Wheatseed Tea - 50% toxicity reduction, 25% buff reduction, 2 hearts health regen. Takes 16 seeds.
    • Reworked Toxicity system, will now cause damage over time if overtoxic.
    • Added in more options and renamed some entries on the Config file to make them more clear.
    • Added in the ability to toggle each Elixir in the Config file.

    Version 0.31
    Show Spoiler

    • Fixed a divide-by-zero error in Cactus Rum that enabled users to get infinite health by taking a second dose after the first wore off.

    Version 0.3
    Show Spoiler

    • Official Public Release.
    • Redid entire "Toxicity" system to work with multiple types of potion buffs.
    • Added in Elixir of Haste. Note, this is just a LITTLE bit out of whack, and admins might want to restrict this for now.

    Version 0.2
    Show Spoiler

    • Refactored the plugin to be called ElixirMod, as a brainstorm session with fellow players pushed me to expand this.
    • Added Config File support.
    • Added Permissions support.

    Version 0.1
    Show Spoiler

    • Plugin Created under the name CactusRum.
    • Got Cactus Rum working.


    List of Elixirs and Potions
    Show Spoiler

    • Cactus Rum - Requires 16 cactus. Does a default of 3 hearts of damage, then grants 3 minutes of health regen (1/2 heart every 3 seconds).
      • Permission Node: elixirmod.cactusrum
    • Elixir of Haste - Requires 16 sugar. Makes the drinker run much faster than normal. Currently not working 100% as intended, but still fun to play with.
      • Permission Node: elixirmod.haste
    • Elixir of Obsidian Skin - Requires 1 obsidian, 8 leather. Drinker gets 50% damage reduction for a default of 5 minutes.
      • Permission Node: elixirmod.obbyskin
    • Wheatseed Tea - Requires 16 seeds. Reduces toxicity by half, and for balance, reduces buff durations by 25%. Also restores 4 (2 hearts of) health.
      • Permission Node: elixirmod.wheatseedtea
    • Elixir of Featherfall - Requires 16 feathers. Negates fall damage while active for a default of 2 minutes.
      • Permission Node: elixirmod.featherfall
    • Elixir of Firetouch - Requires 16 netherrack. Default 75% chance to ignite mobs on-hit. Defaults to working with any damage, but configs allow the ability to limit it to unarmed only.
      • Permission Node: elixirmod.firetouch
    • Elixir of Frosttouch - Requires 4 snowblocks, 1 water bucket. 75% chance to stun a target for 3 seconds.
      • Permission Node: elixirmod.frosttouch
    • Diver's Ale - Requires 8 glowstone dust, 1 rose. Default 5 minutes of 5 times the breath underwater.
      • Permission Node: elixirmod.diversale
    • Health Potion - Requires 1 red mushroom, 1 brown mushroom, 1 milk bucket. Gives 1 half heart per 1 second for 15 seconds.
      • Permission Node: elixirmod.health
    • Dragon's Draught - Requires 2 lava buckets, 4 obsidian. Gives fire immunity for default 5 minutes. Lava immunity can be toggled.
      • Permission Node: elixirmod.dragonsdraught


    Admin Commands
    Show Spoiler

    Note, all <player> fields can be either a player's partial name, full name, or the * wildcard to select everyone in the server. Fields surrounded by [ ] are optional (in the case of <player>, if not specified, will act on the calling player).
    • /elixir - Prints out the help and usage for all ElixirMod commands.
    • /elixir gettox[ <player>] - Prints out the toxicity level over the maximum "safe" toxicity level (i.e., greater than the second number = damage over time from being toxic).
    • /elixir settox[ <player>] <amount> - Sets the toxicity level of a player.
    • /elixir givebuff <player> <buffname> - Gives a buff by potion name to a player. Bypasses the "Drink" function, so toxicity is not applied.
    • /elixir takebuff <player> <buffname> - Inverse of the above.


    Planned Potions
    Note, I am generally only a moderately original creator, and thus I can only come up with a finite number of ideas. New suggestions are always welcome!
    Show Spoiler
    (Subject to change due to new ideas and limits on possibility.)
    • Elixir of Stealth - Blocks mob targeting unless the user attacks.
    • Greater Potion of Invulnerability - Very expensive potion that would grant godmode to the user. By "expensive", I mean it. Probably as bad as a diamond version of a Golden Apple, but more likely a callback to the Yogscast's Mistral City ark with its ingredients. ;)
    • Elixir of Protection - Gives a stackable "over-shield" buff for some time that absorbs a flat amount of damage (possibly 5 for the default, might bump that up when I enter the balancing phase of the next version.
    • Potion of Blinding Strikes - Gives a chance to "blind" the target on-hit. This will not affect player visibility or mob targeting, but will make attacks have a high chance to miss.
    • Thornskin Brew - Returns about 30% of damage taken back to its source.
    • Dread Venom - Causes the next attack to poison the target, reducing damage output by half, blocking healing (or reducing it by half, if possible), and perhaps a light slow in future versions. The Health Potion would act as an antidote and resume healing as normal.


    Known Issues
    This is a list of all the bugs that I personally know about and am planning to fix in the next couple of versions.
    Show Spoiler

    • Elixir of Haste - Wildly uncontrollable, jumping impossible while hasting. This is due to Minecraft not having any way via stock functions to get what keys a player is pressing down, meaning that the only way to Haste is to throw the player in the direction he/she is looking. Sadly, this also means that it overrides the jump velocity, due to how movement is broadcast across the net. In order to jump in the current version, you need to stop speeding by holding "Sneak". I plan to fix this by adding BukkitContrib support in the next version (planned version 1.2). Those without BukkitContrib Client installed will still have to deal with the same crappy movement code, sadly.
    • Dragon's Draught - Sinking into lava and hitting the bottom of a pool more than 2-deep will cause damage. This is due to how Minecraft treats lava, which is more like Web than Water. The user actually takes fall damage while sinking, and I am not sure how to go about fixing this, other than some wildly extensive checks that might actually bring the server to its knees if I do it improperly.
    • Heroes plugin - Health-restoring potions do not work with this plugin, as Heroes completely rewrites how health works in Bukkit, and ElixirMod uses stock Bukkit health. No plans to write an interface for this.
     
    CJits and kahlilnc like this.
  2. Offline

    DMW

    Great plugin, I fucking love it. Can't wait until you add more potions.

    I just have one question, though I might be an idiot and possibly missed it, is there a command that the user can type in that will output their current toxicity level?

    Also what's the possibility of customizing the recipes for each tonic?
     
  3. Offline

    Steeveeo

    Don't feel dumb, there is no such command yet, and I don't think there will be unless there's a huge outcry for it. The reasoning behind this is that being drunk is more of a "feel" thing, if that makes any sense. Perhaps I'll add one in for admins in a later version, who can then decide if the users can have it.

    As for the custom recipes, I have been planning to add that feature, and it most likely will show up in the next feature. The plan was to just customize how much of which item a potion would need, but if it's called for, I can make a completely customizable ingredient system.

    On a side note, the next release version will be delayed; I am working on a new plugin for a simple Remote Admin system, but that is requiring me to learn quite a few new Java libraries like Swing to make the client.
     
  4. Offline

    TheTennessee

    Any possibility of setting the ingredients needed? I think this would be awesome for making it seem more like an alchemist thing. Right now I am thinking of using the different dyes as ingredients. But if you added custom ingredients, please allow the use of data values for the dyes.
     
  5. Offline

    Steeveeo

    This is quite possible, and will probably be in post-1.0 version and up.
     
  6. Offline

    TheTennessee

    Yeah, don't get me wrong, I added this to the alchemist class on my server post-haste. This plus the "guns" mod from Armageddon finally rounded out my magic users.
     
  7. Offline

    Steeveeo

    Sounds like a right good time in there, I might ask you for some details to see how it's all implemented some day. ;)
     
  8. Offline

    TheTennessee

    One last thing, I've seen a good way of using magic in other mods, and since the bowl currently doesn't do anything, it shouldn't matter to overload it a little bit. Since you'll eventually have many elixirs, perhaps right clicking to cycle through them and then left clicking to mix and drink the elixir. Would make it a little more user friendly, since you don't want to accidentally drink the wheat seed tea if you just downed a cactus rum and want to get an [insert elixir name here] instead.
     
  9. Offline

    Steeveeo

    Hmm...not quite sure how I'd implement that without spamming the chat.
     
  10. Offline

    TheTennessee

    It's not too terrible. You should see scrolling through my spellbook on there. It makes it rather difficult to actually utilize spells on the fly, but for the most part, it is sadly the only way to do it. My preference though is on control. Besides, as is it's nearly impossible to know what elixirs are available in game. Still, if you find something better, be my guest. Maybe the ingredients have to be in the quickbar to be used, so you can control which ones you are using.
     
  11. Offline

    Steeveeo

    New version out

    Version 0.75:
    (Config Reinstall Required)
    • Removed "Plugin Enabled" from config, really didn't do anything and was a remnant from the config tutorial I based it on.
    • Fixed some pretty severe NullPointerError spam with the Elixir of Haste and some with Elixir of Obbyskin. This was due to reloading plugins making my hashtables reset. Now checks for null hashes before doing anything with them.
    • Added Elixir of Featherfall. Costs 16 feathers and negates fall damage for 2 minutes.
    • Added Elixir of Firetouch. Costs 16 netherrack and gives the user a 75% chance to ignite a target for 5 seconds. Currently ignites via any damage from a user, but can be configured to only work when unarmed.
     
  12. Offline

    Steeveeo

    Finally got around to testing this since my off-time, and this is tested and working in Bukkit recommended build #1000.

    Also, the next release may be a little delayed, jumping right to version 1.0. This means that I'll be majorly rewriting much of the extraneous code in here to make it more efficient, but I will also finish up the planned potions list. Hopefully by release, the code will be modular instead of tons of copypasta like it is now.

    TODO: Make a video for the 1.0 release...
     
  13. Offline

    leeeeeeeeo

    How does it work? We must craft something or type a command?

    edit: i'm sorry ( /facepalm) i just read above.
     
  14. Offline

    Steeveeo

    Massive update is almost complete. Now commencing beta testing of ElixirMod version 1.00; expect a release by the end of the week.

    What's new in this version?
    • 4 New Potions, including Frost Touch, which freezes your target in place.
    • A full rewrite of the way potions are used, applied, and run. The system is now fully modular and new potions are easy to add.
    • Fully customizable recipes for each potion in the Config file which supports Data Values for items (in short, Dyes work too).

    What's planned for the next version?
    • Locale Support. Coincidentally, I'll be looking for translators to volunteer their services for various languages.
     
  15. Offline

    TheTennessee

    @Steeveeo Awesome! This is the one I was waiting for. I will be watching anxiously for the next update!
     
  16. Offline

    Miklide

    when using Elixir of Haste, i cant jump over any block, could you fix it?

    also suggest for invisibility elixir
     
  17. Offline

    Steeveeo

    The Elixir of Haste is probably going to be like that for a bit. In order to jump, you need to stop speeding, which you can do by crouching. It will probably be in version 1.1 or 1.2 in which I add BukkitContrib support and have it work much better (if you have BukkitContrib installed, that is).

    On the second point: Straight invisibility is not possible without clientside modification (of which I try to avoid as much as possible, as I like my users to be able to connect without hunting down lots of different client mods before joining my server). However, I MAY be able to make an Elixir of Stealth in the next version, which would block mob targeting for a short while.

    Finally: The beta test on my server seems to be running alright, fixed all the NullPointerErrors I saw, as well as made sure all the potions were working fine. The only weirdness I saw was that Diver's Ale seems to a just a touch finicky, about one player per server session will have it fail on them and not take effect until it wears off and they take another swig. I have not yet found a cause, but I hope to have it fixed by the end of today. Speaking of the end of today, that's when I plan to release the next version.
     
  18. Offline

    TheTennessee

    Spyer and AdminCmd can do invisibility pretty well. In fact, Spyer hides from both players and mobs. I think it might have something to do with not sending the information to the client. In any case, it's possible, but I know it won't be easy.
     
  19. Offline

    Steeveeo

    Version 1.00
    (Config Reinstall Required)
    • First off, a note. Many, many things changed, so this is not a complete list. Instead, just the main points of the changes made, nothing fine.
    • Complete rewrite of how potions work and act, systematically. Now uses a modular class-based system instead of the stupid CopyPasta I had going on in prior versions. YAY, it's now officially an Object Oriented Program! Derp.
    • Added some new stuff to the config files for existing potions.
    • Made the ability for Firetouch users to ignite Netherrack with rightclick. This casts a BLOCK_IGNITE_EVENT with the cause of FLINTANDSTEEL before igniting, so it can be cancelled. Handy for region protection.
    • Added support for specifying the ENTIRE recipe within the config files. Syntax is as follows: "Item:Data*Amount,..." Specifically, Item is the type of inventory item to look for, Data is the datavalue associated with the item (use them for dyes, it's what I built it for), and amount is, well, the amount. 351:1*5,1*1 would be 5 Rose Red dye and 1 Stone, for example.
    • Added Diver's Ale. Costs 8 glowstone dust and 1 rose, gives 5 times the breath underwater.
    • Added Elixir of Frosttouch. Costs 4 Snowblocks and 1 waterbucket. 75% chance to stun a hit target for 3 seconds.
    • Added Health Potion (generic name HO!). Costs 1 brown mushroom, 1 red mushroom, and 1 milkbucket. Gives a half-heart per 1 second for 15 seconds.
    • Added Dragon's Draught. Costs 2 lavabuckets and 4 obsidian. Gives heat-damage immunity. Lava immunity is on by default, but is a toggle in the config for admins who don't like it.
    • Added a Chat Command system. Commands are as follows (player can be the * wildcard to select the entire server):
      • /elixir Prints out the help and usage
      • /elixir gettox[ player] Prints out your toxicity, or the specified player(s)
      • /elixir settox[ player] amount Sets the Toxicity variable on self or player(s).
      • /elixir givebuff player buffname Grants a buff by name to player(s).
      • /elixir takebuff player buffname Inverse of the above.
    • Got rid of some useless and unused events. All of the other events are handled in the potion objects now, and there's no need for a joiner event anymore.
    (I'll have the jar uploaded in a sec, updating the first post first, which might take a bit)
    EDIT: Okay, version 1.00 of the Jar file is now up. On a side note: can has Plugin Developer title yet?
     
  20. Offline

    vanbammel

    Nice work :D
     
  21. Offline

    dak393

    Very cool! Can I put in a request to allow users to give potions to others? Hopefully a permissions node to allow it and settings on what happens to the toxicity (maybe players can can poison each other by giving them a horrible potion :D )
     
  22. Offline

    Steeveeo

    For now, all you do is toss the ingredients at someone. I guess you could trick someone into nuking themselves by giving them a whole stack of Cactus and telling them to right click really fast, but directly poisoning someone via potion transfer seems a tad cheap.

    Will probably make a potion buff that gives arrows a chance to poison.
     
  23. Offline

    dak393

    Was think of using this in conjunction with another plugin in order to make one class that can make potions. I was thinking that they could give buffs to teammates to help out in combat and possibly a new potion (idk mix slime with sulfur to create toxin that possibly just increases toxicity) that would be used on enemies to harm them. Just throwing some ideas out there :)
     
  24. how does this really work?
    i try using 16 sugars but it does nothing with them? how to "use" the potion so it effects.
    Also what the hell is this "toxicity"? how to gain it? what it does for player? why need to lower it?
     
  25. Offline

    Steeveeo

    First off, are you right clicking with the bowl or the sugar? You need to be right clicking with an empty bowl to use any ingredients.
    Secondly, make sure your user has permissions for it. Elixir of Haste's permission node is "elixirmod.haste".
     
  26. oh great, i didnt have bowl. Nowhere reads i need bowl?. :D

    EDIT:
    i hope you can make the haste potion work better, hard to control :( and cant jump with it
     
  27. Offline

    Steeveeo

    First post, first paragraph.

    Also, I've already posted several times about the Haste Potion; it will probably not work right until version 1.2 when I add BukkitContrib support.

    EDIT: Just added a "Known Issues" list to the first post. This should prevent the multitudes of posts geared around stuff that I already know. People who continue to tell me "Haste is broken" AFTER this should learn to read the first post of the plugin they're commenting on. ;)
     
  28. Offline

    TheTennessee

    Request: Yog's Potion - This potion will revive you with all of your gear next time you die.
    Ingredients: Bucket of Water, Dirt, Two Sulphur, a Golden Apple
     
  29. Offline

    dak393

    O if you do implement this look into golden revive :) (both of you can)
     
  30. Offline

    TheTennessee

    It's more a joke request, just seeing if anyone gets the reference, or knows the amounts better than I do. :p
     
  31. Offline

    dak393

    from the yogscast ;)
     

Share This Page