ExperienceMod
ExperienceMod is a plugin that makes it possible to add, or change, the types of player activity that awards experience points. This can be anything from mining blocks (also ensures no cheating with silk touch), placing blocks, crafting, brewing or even smelting.
Configure the experience system in Minecraft 1.3 to be more challenging, more like 1.2.5 - or, go the other way. You can experiment, finding a system that works for you. It's all configurable.
- Download 2.6.0 for Minecraft 1.4.7
- Download 2.5.0 for Minecraft 1.3.1
- Download 2.2.6 for Minecraft 1.2.5 or Tekkit
- Removing or changing the new 1.3 experience.
- Source (Github)
- Forum Thread
Up-to-date developer builds of this project can be acquired at my Jenkins server. These builds have not been approved by the BukkitDev staff. Use them at your own risk.
Features
- Modify or remove the dropped experience by a number of factors:
- Name of mob or creature
- The type of damage that killed the mob/creature. Deny experience from using splash potions!
- Whether or not a mob has spawned from a monster spawner
- Drop experience when placing and breaking blocks, along with crafting, brewing and smelting items:
- By block name and durability, and whether it was placed by a player.
- By potion effect, level, extended duration, and more.
- Prevent experience loss upon death.
- Set how much experience a player will get for killing another another.
- Broadcast a message to the server or a specific channel (HeroChat and ChannelChat only) when experience is being awarded. You can also limit the rate of messages transmitted.
- Use a different configuration for every world, or even particular players or groups.
- Add experience to fishing!
- Set a range of experience to drop. Can handle decimal numbers.
- Use (optionally) permissions to decide who will be affected by the modifications.
- Reward experience through currency (requires the Vault plugin).
- Drop currency items instead of being given currency directly.
- Reward by dropping additional items.
- Change the maximum enchanting level from 30 to anything you'd like.
- Set the amount of bookcases you need to get the maximum enchanting level.
- Set how much experience you need to level up a level. Recreate the 1.2.5 experience system perfectly.
Configuration
Note that the default configuration file has been written mostly to demonstrate the functionality of this plugin. The configuration page has some better (and more usable) examples, along with a detailed documentation.
Commands
Syntax | Description | Permission |
---|---|---|
/experiencemod reload | Reloads the configuration files | experiencemod.admin |
/experiencemod debug | Toggles debug mode | experiencemod.admin |
/experiencemod warnings | Displays the most recent parsing warnings. | experiencemod.admin |
/experiencemod item [action] [block] | Displays the experience worth of a block/item. | experiencemod.admin |
/experiencemod mob [mob-name] | Displays the experience worth of a mob. | experiencemod.admin |
/expmod | Alias for the experiencemod command. | experiencemod.admin |
/spawnexp amount | Spawn the given amount experience at the target location of the cursor. | experiencemod.admin |
Mod Support
This mod supports Tekkit servers and its custom blocks. Simply download and install ExperienceBridgeMod 1.2.0 to enable the feature.
The following client and server-side mods are supported:
More information can be found on the ExperienceBridgeMod page.
Permissions
You can disable permissions in global.yml.
Permission | Description |
---|---|
experiencemod.keepexp | Prevents the loss of experience upon death. |
experiencemod.maxenchant | Ensures that the last slot on an enchantment table will always be the highest possible. |
experiencemod.admin | Allows administrators to reload or debug ExperienceMod. |
experiencemod.info | Allows access to warning and debug messages. |
experiencemod.rewards.block | Rewards mining blocks with experience. Will not be awarded if the player has silk-touch. |
experiencemod.rewards.bonus | Rewards destroying non-renewable blocks with experience. Will always be awarded, unlike block. |
experiencemod.rewards.placing | Rewards placing blocks in the world. |
experiencemod.rewards.crafting | Rewards crafting items with experience. |
experiencemod.rewards.brewing | Rewards brewing potions with experience. |
experiencemod.rewards.smelting | Rewards smelting ores with experience. |
experiencemod.rewards.fishing | Rewards fishing and failing to catch a fish. |
autoupdate.announce | Receive a notification when a new version of ExperienceMod is available. |
autoupdate.update | Download a new version, if available, for the next server restart. |
Options
Note: Not all permission plugins support options.
Option | Description |
---|---|
experiencePreset | The preset to load for this player or group. This allows you to have different configuration files for each world, group or even player. |
Statistics Collection
This plugin uses MCStats to generate and publish anonymous usage statistics, but you can easily opt-out by setting use metrics in config.yml to false.
If enabled, the following is sent every ten minutes:
- Metrics revision version (currently 5).
- Server's GUID
- Players currently online (not max player count)
- Server version string (the same version string you see in /version)
- Current version of ExperienceMod
- Whether or not any of the optional plugins are installed AND hooked. This allows me to determine which plugins I should spend time supporting:
- This includes: LogBlock, HawkEye, Vault, HeroChat, ChannelChat and ExperienceBridgeMod.
- The number of "warnings" (configuration errors and general exceptions) encountered since the plugin was last reloaded.
Hi plugin is not working for me - when im destryoing blocks I see im getting exp message.. but exp does not count (green bar stay same and /exp show name .. shows 0 exp) im on 131 R2 but it was on R1 too thanks
@aadnk
I had a feeling that might have something to do with it, I've been playing around - still not figured it out though.
I've narrowed it down to something this mod is doing though - but as you said, It's likely a permissions problem - I'll post back my results after I've been mucking about for a while xD
Thanks for getting back to me!
@cprobertson1
That should do it. Have you checked if the users aren't inheriting the permission? Though, I really don't know much about PermissionsBukkit - I could only get it half working with Essentials, while VanishNoPacket wouldn't cooperate at all.
For my test realm, I'm using PermissionsEx with the following settings:
That seems to prevent keep experience.
My players retain their level after death when this mod is installed, but I can't find anything in the config for it: I tried setting experiencemod.keepexp: false in my permissions mod but it still happens.
Any ideas?
(latest version of bukkit, experiencemod and permissionsbukkit)
PS - no messages in debug or console upon death
big error
http://dev.bukkit.org/paste/6223/
@Zefram
Ah, now I see what you're talking about. Yes, changing the experience leveling only applies to actual experience orbs, as well as "virtual" rewards from mining and other activities.
There's not a lot I can do to change the experience other mods give the player, but I could provide my own "xp" command. In the meantime, try adding the "d" flag to your command:
/xp -d player 17
That will spawn experience orbs instead, which as you noted, will give the correct amount.
I also see you got a potion error. Could you create a ticket containing the entire error message? You'll find it in the console log.
admincmd
/xp -a player 17
level 1-15 xp orb is 17
you just change orb size
@Zefram
Can you send me your config.yml along with presets.yml? Also, enable debug mode (/expmod debug) and see if you get any error messages when gaining experience.
i set config
levels:
0 - Infinity: floor(7 + 3.5*level)
why no work?
ExperienceMod 2.5.0
NoVanillaExperienceMod 1.0
bukki 1.3.1-R2.0
@thejohnnyg87
You can find a detailed explanation in the documentation, but essentially the "|" is used to separate the block id and the data value. So, coal|0 here is charcoal, while something like coal|0 would only match normally mined coal. This makes it possible to give out less experience for just smelting tree logs instead of smelting coal ore blocks. It's also necessary if you, for instance, want to give out different experience for crafting wool blocks depending on the color.
As for your next question, it's a feature I call "presets". It allows you to use a different configuration file depending on a permission option per player, or the current world.
Lets look at the example you posted. The first line member|?: means "match every player with the experiencePreset option member in every world". Next, you have the two properties "local" and "file". These are used to construct the actual configuration file that will be used for the matching players. The "file" property is just a list of configuration files to load, and "local" is a embedded configuration file that will be loaded at the end.
They are combined using a very simple rule - everything that is specified in a later configuration file will override what was specified in a previous file. So, if you had two configuration files, "a.yml", and "b.yml" with the following content:
And "b.yml":
Then merging the files in order ...:
... would result in the following file:
Note that the global multiplier is treated a bit differently - previous values are not replaced, but multiplied. So in our case the two multipliers 2 and 0.5 are multiplied together to get the resulting value.
So, that example really is a bit misleading. The "local: multiplier" part doesn't actually DO anything. It just multiplies by one, which doesn't change the multiplier in "config.yml". But it does load "config.yml".
What does...
..mean? The second line means smelting coal results in 1 - 3 xp (chance based) I think, but I don't know what the number after the "|" means on the first line. This kind of thing appears in your example in page comments also...
What does this mean in this instance?
Thank you for your time.
@AngelZodiac
Thanks a lot. I hope you find the new version useful. :)
Now, ExperienceBridgeMod is a bit different from something like an enchanting plugin as you're suggesting. It's essentially useless without ExperienceMod, and as you can see from the log, far from perfect. It's completely unable to register 19 items, and for the rest, they're often given a cryptic and confusing name. This is because it's automatically and dynamically reading the item names from Minecraft. They should be more reliable than the ID, as those can be changed or be different in future versions of Tekkit. But the registry is messy, and definitely not needed in Bukkit - all in all it makes sense to keep it in the bridge mod.
But overhauling the enchanting system could be useful on its own, and could merit its own complete mod. And like always, the biggest problem is figuring out how much of it should be configurable. While Minecraft doesn't allow for new enchantment names, it's still theoretically possible to customize not only how enchantments are awarded (the algorithm itself), but also how the operate. From simple things, like "silk touch" weapons that can drop mob eggs, to changing the scaling on "fortune" to work from 1 - 10 instead of 1 - 3, but with the same yield at the maximum. At least, if you change the algorithm, you'd probably have to change the behavior as well. Enchanting is already powerful, so any higher level would essentially be overpowered. Unfortunately, Minecraft isn't exactly designed to be easily extended (compared to something like Skyrim, WarCraft 3, ect.), so it would require some serious trickery. It might also be difficult to configure, though that might already be the case for ExperienceMod in general ...
I suppose that's why I originally opted for the simple "scaling factor". But I might add a sub-set of those features in the future. I'll have to think about it. :)
Right, the message rate limiter. Yes, it does have its quirks due to its simple rule. If a message is sent, a similar message cannot be sent until the number of seconds specified by "message max rate" has elapsed, as you noted. Messages sent during this lockout are combined.
My original design was a bit like yours - it would use two timers, one would be set (at 2 or 3 seconds) and start counting down the moment a message was "queued". If it reached zero, the message would be broadcasted. If there were any other similar messages queued during this time, they would reset the timer, and be combined. I'd then either allow the user to specify the maximum number of combined messages (typically 5) before being broadcasted regardless, or use second timer (probably after 20 seconds).
But the first method is much simpler - you only have to set a single value, and for some things, it's invisible. It's global, so it should equally well for both coal ore as for crafting/smelting. And I like to think that instant feedback, even if you end up with more messages, is better than a 5 - 10 second delay on every message. Though, I suppose in hindsight I could have made that decision up to you instead of hard coding it ...
@aadnk
You're awesome aadnk ;) Definitely one of the best plugin/mod developers I've met thus far. Also, what's with the 1/100 chance to get diamonds from stone? You could at least make your representation more believable :P Thank you very much for all of your help - I'm definitely going to tinker with this new version.
Think it might be possible to make a new bridge like the ExperienceBridgeMod that interacts directly with the core mod to completely revamp the enchanting system? That way ExperienceMod can still be the 1.2.5/1.3.1 emulation machine it is but give quite an amazing bonus with it (I know whatever you do it will be awesome).
Oh, by the way.. While I'm on the subject of ExperienceBridgeMod.. I don't think I really need it as I use the item values for everything with a comment next to it, but I'm getting invalid name errors in my console whenever I start up the server. I looked through the IDs of ExperienceBridgeMod and every item ID it lists isn't from here: http://dev.bukkit.org/server-mods/experiencemod/pages/main/bridge-mod/custom-blocks/
Not sure why it's popping up.. But it's a bit spammy.
Honestly, I should be utilizing the names as it might be easier to read.. But I'm just a numbers kind of guy.
Also, is there any way for you to store specific player actions at all? For example, if a player has made a macerator they are rewarded (for their first macerator), then every macerator after gives no bonus. Or maybe even every certain number of made items give so and so reward, but not like the drops system due to it using probability instead of actual instances of failure/success.
Again: I'm rambling ;)
EDIT: I remembered something that I wanted to tell you along with everything else: I noticed the messages would always spam you twice due to mining more than one ore. If you were to mine five diamond ore in quick succession it would give you a message stating you found 1 diamond and then 4 more later (sometimes weasels in more messages if you take too long). I'm thinking a better delay system would work nicely; instead of instantly giving the first message start a timer and wait x seconds (configurable? everyone loves more things to configure :P). If another message is to be sent, reset the timer completely and wait for more messages. I also saw there's a cut-off point for message combining. I think it's somewhere between 4-10 seconds or so from the first message (From mining monster spawners with a decent pickaxe)? If you were to setup a rig where every diamond ore mined results in a global message and you had an infinite supply of diamond ore right in front of you, it would result in more than one message, which might need tweaking.
Just a little bit more: Anything I say is just what I think could be done.. I don't want to throw my ideas upon you and force you to act on them. My mind is wild with creative thoughts, so if one is too wild just say so. =p
DOUBLE EDIT: I remembered that ID 166 is the block ID for all pipes, and I think it's 228 that is the block ID for all cables instead of the item IDs.
@AngelZodiac
Sorry for taking so long to respond. It was actually a bit difficult to do this properly, I found, but I think I've found the best way.
I have added two new features that should do what you're looking for. First, you can add messages to specific "reward types", such as "currency", "experience", "virtual" and "drop". These will only be sent IF the reward is actually non-zero, so a rare diamond drop won't be announced every single time a player mines for it:
In addition, I've added a new "messages" keyword. That will allow you to set different messages for different channels:
And so on. You can get the next version (for 1.2.5) on GitHub again:
As for the enchanting modifications - yes, you're right - it only alters the amount of levels spent to gain normal enchantments. It won't allow you to gain access to even more powerful enchantments. This is mostly because it would require the mod to completely recreate the enchanting system. But in addition, you would probably need far more customization than a simple multiplier, at least if you want the system to be balanced. In any case, that's completely beyond the intended usage of that feature - it was really only meant for players who wanted to recreate 1.2.5 in 1.3.1. :P
@aadnk
Thank you very much for the merged version!
I do agree it might work well if the placing result is used instead of an add-on to crafting result, but I was thinking about making it so that only admins/moderators could place Nuclear Reactors on my server (don't want people placing them anywhere without a proper setup >.<) upon inspecting the person's containment facility and granting them permission to use a reactor.
Also, I'm guessing it's not possible to send out a message specifically for a drop?
As in,
if drop happens send awesome message
else do nothing
I tried quite a few variations of placement for every word, but I guess that's a hopeless cause with how it's currently formatted.
Do you think it would be a good idea to maybe add:
message1:
message2:
all the way to infinity? That way priority wouldn't be an issue but instead it would be two different "entities". It would definitely give room for expanding the mod and make it more useful in my opinion.
P.S: Sorry for rambling, but I really like your mod and couldn't find anything else close to it ;)
EDIT: I've done a little testing with it and I see that when the maximum level is increased it just stretches out the formula, I guess that's the best way I can explain it, instead of furthering it. What I mean is, instead of pushing past the limits of normal enchanting (efficiency V for example) it just makes it more difficult to get better enchantments at lower levels. In a way, it's not that surprising.. Would you need to edit the actual enchanting formula to provide higher enchantments?
@AngelZodiac
First things first - 2.2.4 predates the 2.3.0 version line, so it doesn't contain any of the new features introduced since then, including the maximum enchant level and bookcase count. But still, it's not terribly difficult to merge all the new features into the old 2.2-version line for 1.2.5, so I figured why not. I've now pushed a version 2.2.5 that includes every feature (except AutoUpdate) from 2.5.0, but for Minecraft 1.2.5 instead:
As far as the messages is concerned - no, it's not currently possible to send multiple messages per action. But you could have a different message for, say, placing the nuclear reactor blocks (use the placing result trigger).
Is there a way to send multiple messages for one event? I couldn't really find a way to achieve that.
Such as:
Another thing, does the maximum enchant level work for version 2.2.4? It didn't seem to have any function at all when I was testing.
@xcanner
Yes, presets have the final say on what configuration file is actually used. Though config.yml will be automatically regenerated whatever you do, it won't actually be loaded.
And yes, the "no experience mod" will be included in future versions. Currently, I feel it's too much of a hack for me to include it in the main plugin, especially considering that the fact that it will become obsolete when the Bukkit API is more complete.
Still, that is just for the furnace/smelting experience. The newest RB of Bukkit now supports changing the mining experience, so it will be included in the next version of ExperienceMod. :)
@aadnk
Thanks for the reply!
Im a little confused about config.yml and presets. Should I delete config.yml and have presets.yml point to the different world configs. Config.yml will generate itself, but will a preset for a world overrule config.yml?
Will you have the "no-experience-mod" option in this plugin in a later version?
@xcanner
Thanks! :D
Unfortunately, the multiplier setting is currently only global - it cannot selectively set the experience levels for different types of actions. But I might add this in the future.
So, instead, you have giving each world a separate configuration file and set the bonuses manually:
Now, edit presets.yml so that it looks like the following:
Then, in worldA.yml, you set the mining experience to 50% by dividing the numbers by two:
And so on ...