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 Download ElixirMod.jar Source Code Issues: Having issues with ElixirMod? Have a suggestion? Posting it here tends to get lost in chatter, instead: Report it on GitHub Issues! 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): Spoiler (Move your mouse to the spoiler area to reveal the content) Show Spoiler Hide Spoiler Code:yaml name: ElixirModmain: me.steeveeo.ElixirMod.ElixirModversion: 1.00load: startupcommands: elixir: description: Command container for all ElixirMod Admin commands.permissions: elixirmod.*: description: Gives access to all ElixirMod permissions. default: false children: elixirmod.command.*: true elixirmod.allpotions: true elixirmod.command.*: description: Gives access to all ElixirMod chat commands default: false children: elixirmod.command.gettox: true elixirmod.command.gettox.others: true elixirmod.command.settox: true elixirmod.command.settox.others: true elixirmod.command.reset: true elixirmod.command.reset.others: true elixirmod.command.givebuff: true elixirmod.command.takebuff: true elixirmod.allpotions: description: Grants access to all ElixirMod potions default: true children: elixirmod.cactusrum: true elixirmod.firetouch: true elixirmod.haste: true elixirmod.obbyskin: true elixirmod.wheatseedtea: true elixirmod.featherfall: true elixirmod.diversale: true elixirmod.frosttouch: true elixirmod.health: true elixirmod.dragonsdraught: true elixirmod.command.gettox: default: false elixirmod.command.gettox.others: default: false elixirmod.command.settox: default: false elixirmod.command.settox.others: default: false elixirmod.command.reset: default: false elixirmod.command.reset.others: default: false elixirmod.command.givebuff: default: false elixirmod.command.takebuff: default: false elixirmod.cactusrum: default: true elixirmod.firetouch: default: true elixirmod.haste: default: true elixirmod.obbyskin: default: true elixirmod.wheatseedtea: default: true elixirmod.featherfall: default: true elixirmod.diversale: default: true elixirmod.frosttouch: default: true elixirmod.health: default: true elixirmod.dragonsdraught: 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 (Move your mouse to reveal the content) Previous Versions (open) Previous Versions (close) Version 0.75: Spoiler (Move your mouse to the spoiler area to reveal the content) Show Spoiler Hide 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: Spoiler (Move your mouse to the spoiler area to reveal the content) Show Spoiler Hide 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: Spoiler (Move your mouse to the spoiler area to reveal the content) Show Spoiler Hide 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 Spoiler (Move your mouse to the spoiler area to reveal the content) Show Spoiler Hide 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 Spoiler (Move your mouse to the spoiler area to reveal the content) Show Spoiler Hide 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 Spoiler (Move your mouse to the spoiler area to reveal the content) Show Spoiler Hide 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 Spoiler (Move your mouse to the spoiler area to reveal the content) Show Spoiler Hide Spoiler Plugin Created under the name CactusRum. Got Cactus Rum working. List of Elixirs and Potions Spoiler (Move your mouse to the spoiler area to reveal the content) Show Spoiler Hide 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 Spoiler (Move your mouse to the spoiler area to reveal the content) Show Spoiler Hide 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! Spoiler (Move your mouse to the spoiler area to reveal the content) Show Spoiler Hide 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. Spoiler (Move your mouse to the spoiler area to reveal the content) Show Spoiler Hide 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.