1
0
mirror of https://github.com/mcMMO-Dev/mcMMO.git synced 2026-02-18 09:43:00 +01:00

Compare commits

..

523 Commits

Author SHA1 Message Date
TfT_02
3b249aa4e6 This function is designed for API usage. 2014-10-11 12:03:08 +02:00
TfT_02
1a2d586086 More Javadocs 2014-10-11 11:53:12 +02:00
TfT_02
63b332216e Read summon item from config in /taming command 2014-10-11 11:38:53 +02:00
TfT_02
8e5340ebc3 Wolves attack a target when shot by their owner 2014-10-11 11:38:53 +02:00
TfT_02
e4af611c91 Fix formatting of TreeFeller threshold locale key 2014-10-11 11:38:52 +02:00
TfT_02
c31281971c Summon amount limits and new ability 2014-10-11 11:38:52 +02:00
TfT_02
eda38cba66 Add lifespan to Taming summons 2014-10-11 11:25:57 +02:00
TfT_02
b5a2e76926 Fixed diminished returns not getting disabled 2014-10-10 00:03:51 +02:00
TfT_02
38cc7435dc Prevent strings from getting larger than 16 chars
Fixes #2314
2014-10-04 20:31:37 +02:00
TfT_02
864a760e9c Better like this 2014-10-04 14:16:38 +02:00
TfT_02
0838cbb874 Add option to not show ability names on scoreboard
Adds #2249
2014-10-04 14:05:30 +02:00
TfT_02
4844be80da Fixed bug with Salvage and ability tools
Fixes #2311
2014-10-04 01:36:57 +02:00
TfT-02
62a767db89 Add enable toggle and per skill thresholds 2014-09-28 11:43:17 +02:00
TfT_02
ce3463ad6d Cleanup 2014-09-28 11:34:50 +02:00
TfT_02
5d059d8537 Move SkillXpGain to datatypes/experience 2014-09-28 11:34:49 +02:00
riking
332860b9ce Use a DelayQueue to manage rolling diminished returns 2014-09-28 11:34:49 +02:00
TfT_02
2a443cd9db Diminished instead of Deminished 2014-09-28 11:34:49 +02:00
NuclearW
f4d1004d32 Rolling xp diminishing returns
This adds on top of the diminishing returns system a mechanic such that gains will expire the configured number of minutes after they occured, rather than all being reset at once.

This prevents someone from not getting diminishing returns on the xp gain they recieved just before the reset would have occured.

Obligatory explanatory graphs: http://i.imgur.com/uSzicIR.png
2014-09-28 11:34:49 +02:00
TfT_02
9d8aec7eca Add diminished returns when a player has earned too much XP
When a player reaches a certain (configurable) threshold value of total
XP earned in a specific skill, his earned XP in this skill will be
decreased.

Depending on how far the player has exceeded the threshold value, his
XP will decrease more. After the (configurable) time interval of 10
minutes, the registered data will be cleared and the player can earn XP
as normal again.
2014-09-28 11:34:49 +02:00
Ivo Julca
958c116fd0 Acrobatics: cap same-location fall counter for XP gain
It used to increase boundlessly, thus preventing players from gaining XP for a while even after moving to another place.
2014-09-28 11:19:41 +02:00
Bestle
ec1a125809 These are the wrong way round
The UUID's are the keys, not the names
2014-09-28 11:13:23 +02:00
TfT_02
2dd8e719c8 UUID support for parties 2014-09-28 11:13:23 +02:00
TfT_02
d62c68a490 Fixes build 2014-09-28 11:08:57 +02:00
TfT_02
3c6dd290f4 Allow AdvancedSalvage unlock level 0
Fixes #2265
2014-09-06 20:23:41 +02:00
TfT_02
07e589aae3 Allow equal rank levels for Salvage
Fixes #2270
2014-09-06 19:59:26 +02:00
t00thpick1
1119d3c17f Actually fix flatfile player loading....
you lied to me @tft_02
2014-09-03 00:05:48 -04:00
TfT_02
eac5d1ee7a Improve auto mod config generator 2014-08-31 19:10:49 +02:00
TfT_02
56cb5c092f Should be this 2014-08-26 21:55:35 +02:00
Shevchik
9d7faf9ed9 Fix database loading data for wrong player
Fixes #2223
2014-08-24 15:25:56 -07:00
TfT_02
7da661546f Fixed bug where processing message would always get displayed
and the player could never execute /mctop or /mcrank if chat display
was disabled.
2014-08-24 09:21:40 -07:00
TfT_02
48d3280e5e Make sure that player has McMMOPlayer object before calling API 2014-08-22 15:50:40 -07:00
TfT_02
b61c65636b Add new ExperienceAPI method to specify if XP can be shared 2014-08-22 15:50:40 -07:00
TfT_02
087a0b079f Fixed bug with new Death API 2014-08-22 15:50:40 -07:00
t00thpick1
2147417322 This seems easier. 2014-08-22 15:16:40 -04:00
t00thpick1
4304970059 This was supposed to be a zero. 2014-08-22 00:59:20 -04:00
t00thpick1
fc981fda20 Better connection validation for us. 2014-08-21 19:42:03 -04:00
t00thpick1
be9ff51fd9 Should fix #2223 for realz this time. 2014-08-21 19:42:03 -04:00
TfT_02
adde56114e Cleanup the changelog 2014-08-21 16:40:06 -06:00
TfT_02
5cfd2dc799 Added API to ExperienceAPI to get the amount of XP needed for a level 2014-08-21 16:38:33 -06:00
TfT_02
c878775c72 Close the statement here as well 2014-08-21 14:33:50 -06:00
t00thpick1
574cdd374b Use a placeholder value. Fixes #2216 #2221 2014-08-20 22:19:36 -04:00
TfT_02
a3943aab24 Add checks for loaded/unloaded profiles in commands 2014-08-19 22:23:19 -06:00
t00thpick1
1503e58d11 More relevant donation information 2014-08-19 23:45:54 -04:00
TfT_02
2650d57d8e Added options to experience.yml for Dirt and Sand variations
Adds #2194
2014-08-19 21:28:53 -06:00
t00thpick1
4d402c7229 Use correct element 2014-08-19 19:11:07 -04:00
t00thpick1
d687543910 Prevent players from having more than one database querying command running at once. 2014-08-19 18:11:56 -04:00
t00thpick1
d8ad519cd0 Seperate pools for essential tasks like profile loading and profile saving. 2014-08-19 17:58:45 -04:00
TfT_02
a23d093271 Use provided instead of compile 2014-08-18 17:19:14 -06:00
TfT_02
8a35d69540 Move RefreshChunks setting from hidden.yml to config.yml
Adds #2213
2014-08-17 20:21:23 -06:00
t00thpick1
097a5a0894 Change purge a bit. Apparently andrewkm says this works. 2014-08-17 21:23:27 -04:00
t00thpick1
8760c2bbb0 This way is cleaner though. 2014-08-17 20:01:04 -04:00
t00thpick1
dc635fe7d7 SHould fix #2195 2014-08-17 19:57:52 -04:00
TfT_02
f10a1d0ffb Added McMMOPlayerPreDeathPenaltyEvent and McMMOPlayerStatLossEvent
McMMOPlayerPreDeathPenaltyEvent is fired before hardcore calculations
take place, use this if you want to cancel hardcore penalties.

Use McMMOPlayerVampirismEvent and McMMOPlayerStatLossEvent when you
want to know how many levels or experience the player lost or if you
want to modify this.
2014-08-16 21:13:46 -06:00
TfT_02
809779e508 Added McMMOPlayerVampirismEvent
Expands API possibilities regarding death penalty features.
2014-08-16 21:13:39 -06:00
TfT_02
80d358d1fd Fix dealing too much AOE damage
Bandaid for #2170
2014-08-13 21:24:32 -06:00
t00thpick1
a1be17c72c Add a rate limit for mojang api requests. Configurable via hidden.yml 2014-08-12 11:51:34 -04:00
t00thpick1
0a066f51bb Fix #2197 There is no wait forever option, so we actually need a timeout. 2014-08-12 11:39:43 -04:00
t00thpick1
294141c353 We should be reconnecting automagically. 2014-08-11 12:16:27 -04:00
t00thpick1
5a47f9fa86 Fix #1320 2014-08-08 00:42:33 -04:00
t00thpick1
6ee2d7d823 Do UUID saves in batches. 2014-08-08 00:13:30 -04:00
t00thpick1
f2881f02c8 Fix id retrieval 2014-08-08 00:09:00 -04:00
t00thpick1
9f5445689c Helpful debug on shutdown 2014-08-08 00:02:07 -04:00
t00thpick1
0ea163e3ee Lazy fix 2014-08-08 00:01:57 -04:00
t00thpick1
f097aa4a67 Missed loaded profile check, Fix #2189 2014-08-07 23:46:22 -04:00
t00thpick1
1fcb9e649e A bit more logic simplification in SQLDatabaseManager, also fixes error printing, Fix #2188 2014-08-07 23:45:40 -04:00
t00thpick1
1d0dc02013 Greatly simplify Profile loading in mySQL 2014-08-07 14:16:28 -04:00
t00thpick1
8766d31943 Fix #2182 and Fix #2178
NOW() is a numeric representation of the date, not a timestamp....  so thats a nono.

Also,  we need to update UUIDs grabbing by name.
2014-08-07 13:54:28 -04:00
t00thpick1
d857bf483e Fix #2184 2014-08-07 11:23:02 -04:00
t00thpick1
b7774251eb Remove need for thread locks in profile loading, just reschedule as needed. also stagger based on number of previous attempts. 2014-08-05 23:02:41 -04:00
t00thpick1
da7507fc75 Throw some sanity information into the info log. 2014-08-05 20:20:05 -04:00
t00thpick1
fe4699430d Fix #2177 2014-08-05 19:15:22 -04:00
t00thpick1
df4fc8149d Stagger load attempts more. 2014-08-05 19:03:55 -04:00
t00thpick1
c156f0c346 Missed an unlock condition, lets use a finally. Should Fix #2180 2014-08-05 18:57:13 -04:00
t00thpick1
79a17b0c1c Fix /mcrank when using flatfile. Fixes #2179 2014-08-05 09:20:12 -04:00
t00thpick1
d3051ad127 Use a slight delay to ensure its after the purge. 2014-08-04 11:49:09 -04:00
t00thpick1
f4c53aaf8a Prevent user purges and UUID updates from conflicting in mass database operations. 2014-08-04 11:42:02 -04:00
t00thpick1
432ff95a98 More constants 2014-08-04 11:40:47 -04:00
t00thpick1
fe29bb4b9f Accurate purge count 2014-08-03 21:14:24 -04:00
t00thpick1
ae5347bc0f Purging shouldn't be main thread, also we have no reason to refresh profiles of purged users, as old users aren't online, and powerless users have nothing to wipe. 2014-08-03 21:12:41 -04:00
t00thpick1
966de87ef9 Print reason 2014-08-03 20:57:28 -04:00
t00thpick1
3569f9a182 Woot, rushing things without looking! 2014-08-03 20:40:48 -04:00
t00thpick1
70a23f8a0a EnumMaps cannot use a null key 2014-08-03 20:39:37 -04:00
t00thpick1
857e12b96e SQLDatabaseManager optimizations, async profile loading -t00thpick1, zreed
This commit changes our shared connection into a connection pool utility to prevent
thread locks from multiple actions attempting to access the database at the same time.
In additon,  profile loading has been moved off the main thread at login time, to
allieviate the performance issues caused by it.

Fixes #2138, Fixes #2119, Fixes #1982, Fixes #1953
2014-08-01 20:31:17 +02:00
TfT_02
c10525ada9 Add UUID support! - zreed, slipcor, t00thpick1
This commit updates our database managers to use UUIDs instead
of usernames for persistent storage.

Fixes #1979
2014-08-01 20:23:03 +02:00
TfT_02
fb8592495d Only set detected durability if it's > 0 2014-08-01 01:09:00 +02:00
TfT_02
a48ada306c Add magical mod importer
Usage: Create a folder called 'import' inside /mcMMO/mods/. Place your latest Cauldron 1.7+ startup log in this folder and rename it to 'import.log'.
It is worth noting that it's advisable to create a short log by starting and stopping the server once, or by manually editing the log file to only include material mapping in order to speed up the import process.

When the server is running, use the command /mcimport. You will see the import progress in the console, once it is done the files are created in /mcMMO/mods/output/.

Any item that wasn't recognised gets placed in a .unknown.yml config file. Durability detection only works if the mod is installed when importing (it should be).
2014-08-01 00:22:29 +02:00
Lucas Savva
8db0d663dc More configs for 1.6.X mods
+ Added full tools and armor and some block configs for:
- Advanced Genetics
- Applied Energistcs
- Big Reactors
- Biomes O Plenty
- Emasher Resource
- Extra Utilities
- Factorization
- Forestry
- MineFactory Reloaded
- Natura
- Project Red
- Railcraft
- StargateTech 2
- Thermal Expansion
- Tinker's Construct
- Twilight Forest
2014-07-31 16:56:41 +01:00
TfT_02
70744371a3 Fix bug where Repair_Material_Quantity wasn't read 2014-07-31 00:47:22 +02:00
TfT_02
18c322e8d6 Check if the user wants this item repairable first
Stop complaining that the item is not repairable when Repairable is set
to false.
2014-07-31 00:46:41 +02:00
TfT_02
75cbfa1b1c Ensure player has mcMMOPlayer object in brewing
Fixes #2086
2014-07-24 12:29:42 +02:00
zreed
48c7aa3e84 Add an UpgradeManager 2014-07-23 12:37:02 +02:00
TfT_02
87bce65098 Update twilightforest.blocks.yml 2014-07-20 19:44:13 +02:00
TfT_02
c288dc433b Add Twilightforest mod configs, made by joulesbeef 2014-07-20 17:17:02 +02:00
TfT_02
0cc29d070f Move 1.6.x mod config to their own folder
and add a folder for 1.7.x mod config files
2014-07-20 16:11:41 +02:00
TfT_02
8fd94b625c Fix Blast Mining and change its behavior slightly
Fixed bug where Blast Minings ability "Demolition Expert" would not
work with certain CB versions. DanageCause.BLOCK_EXPLOSION was not
passed, ENTITY_EXPLOSION was used instead.

Changed behavior of the Blast Mining ability "Demolition Expert"; now
only decreases damage for the ability user and for Blast Mining
explosions.
2014-07-20 00:43:53 +02:00
TfT_02
ccca3fff26 Don't use hardcoded unlock levels for Blast Mining 2014-07-20 00:43:52 +02:00
TfT_02
f77446919f Can't use more function modifiers than necessary
Fixes #2139
2014-07-18 17:11:26 +02:00
TfT_02
96fdf265d5 Don't run party chat on a separate thread
Fixes #2080
2014-07-18 17:06:30 +02:00
TfT_02
b964e3f7c3 Show colors in console for party chat
Fixes #2129
2014-07-18 00:51:09 +02:00
TfT_02
d93c83f775 Add a modifier function for each DamageModifier
Must have a modifier function for each DamageModifier

Fixes #2139
2014-07-18 00:16:12 +02:00
TfT_02
6b9f6c29ec Actually fix the isWaterBottle() check
Fixes #2134

For some reason Bukkit wanted to use Potion(PotionType type, int level)
when calling .toPotion(), even though .getDataValue() is 0.
2014-07-17 00:14:06 +02:00
TfT_02
09b0bf62e2 Added SkillAPI used to get a list of skill names
This prevents having to rely on the SkillType enum
2014-07-16 20:07:23 +02:00
TfT_02
15d7d3f8a2 Add Snow to Excavation guide 2014-07-16 11:47:28 +02:00
TfT_02
dedbdf890a Fixed broken isWaterBottle() check 2014-07-15 17:50:39 +02:00
TfT_02
30085e1e34 Add option to control Unarmed item pickup behavior
By default when using Unarmed, picking up items is prevented when a
players entire inventory is full, except for his empty hand.
2014-07-15 15:40:49 +02:00
TfT_02
1c30146491 Fixed bug where Berserk deletes items
when the players inventory is full.

Fixes #1947
2014-07-15 15:25:02 +02:00
TfT_02
037022b175 Fixed bug where falling blocks were not tracked
Fixes #2130
2014-07-15 14:46:20 +02:00
TfT_02
0aa67727f5 Fixed bug with flatfile format updater 2014-07-12 14:02:53 +02:00
TfT_02
8e3e1d5f11 Use deprecated events for damage dealing for now 2014-07-11 21:33:35 +02:00
TfT_02
d2d70089ca Update for modifierFunctions 2014-07-11 14:02:42 +02:00
zreed
94a566acc9 Remove redundant maxReconnects database connection property 2014-07-09 19:03:15 +02:00
TfT_02
daab095557 I was actually using the wrong Map
Fixes #2113
2014-07-03 12:33:03 +02:00
TfT_02
2b9b5df1ee Alter original event and stop firing FakeDamageEvents
Fixes #2105
2014-07-02 11:28:21 +02:00
TfT_02
e7e62b8d40 SecondaryAbilityEvent now implements Cancellable
Fire SecondaryAbilityEvent for abilities with static chances

Also cleanup some of the event handling for Armor Impact, Greater
Impact and Fast Food
2014-07-02 11:25:13 +02:00
TfT_02
3d242bbdb6 Always call back events 2014-07-02 11:25:13 +02:00
TfT_02
e796eae3c3 Update for new damage API 2014-07-02 11:25:08 +02:00
TfT_02
a257e83a62 Update for new getOnlinePlayers behavior 2014-06-29 14:04:36 +02:00
Kane York
d527584248 A private method cannot be abstract >.> 2014-06-28 23:49:46 -07:00
Kane York
0a4de6e2fc Reword statement in standards.md 2014-06-28 23:48:12 -07:00
TfT_02
4b20f12eff Fix a NPE with getFlowerAndGrassXp()
Fixes #1975
2014-06-23 22:52:34 +02:00
TfT_02
0de1187012 Fixed setting custom names and lore with treasures 2014-06-22 20:42:48 +02:00
TfT_02
8e474170e4 Fix crafting with items received from Salvage
Only set metadata on Salvage items when it’s not set to -1
Fixes #2078

And cleanup some javadocs in Salvageable
2014-06-18 11:44:21 +02:00
TfT_02
2eeb9b1f35 Set a pretty repair material name in armor.yml
Adds #1863
2014-06-15 17:46:16 +02:00
TfT_02
3de6e2c3f1 Add full Repairable support in armor config files
You can now fully configure armor to be repairable from the armor.yml
config files.

Adds Repair_MinimumLevel and Repair_XpMultiplier to armor.yml
2014-06-15 17:46:16 +02:00
TfT_02
98d166808f Finish the tools.yml header 2014-06-15 17:45:52 +02:00
TfT_02
f75e15dfdc Set a pretty repair material name in tools.yml
Adds #1863
2014-06-15 17:31:50 +02:00
TfT_02
f2b892b7d5 Add full Repairable support in tools config files
You can now fully configure a tool to be repairable from the tools.yml
config files.

Adds Repair_MinimumLevel and Repair_XpMultiplier to tools.yml
2014-06-15 17:28:54 +02:00
TfT_02
883ada01f8 Fix typo with XP_Modifier in tools.default.yml 2014-06-15 17:18:49 +02:00
TfT_02
3a8f45a04d Fix bugs with pistons
This commit improves piston tracking and fixes a couple of bugs with
block tracking.

Fixes #2043
2014-06-15 14:26:02 +02:00
TfT_02
906609696b Workaround a CB bug by tracking piston events
There is a bug in Craftbukkit that causes piston events to fire
multiple times. We need to keep track of the extend and retract events
to see which piston events should be processed.
2014-06-15 14:26:02 +02:00
riking
66ccde4310 MCPC+ is now known as Cauldron 2014-06-14 11:34:35 -07:00
TfT_02
4970cdc3f4 Add mcmmo.skills.salvage permission to plugin.yml
Fixes issue where players would have access to the Salvage child skill
by default.

Mentioned in #2075
2014-06-12 13:42:42 +02:00
TfT_02
1becc874ba Check if input is a water bottle first 2014-06-09 22:55:03 +02:00
TfT_02
b107a8dc7c Fire brew event after outputs have changed
and before experience is granted.
Part 2 of fixing #2041
2014-06-09 02:04:59 +02:00
TfT_02
37aebc1716 Calculate Alchemy XP based on potion stage
Adds #1926
2014-06-09 01:56:07 +02:00
TfT_02
836877ff93 Alchemy should fire BrewEvents
Fixes #2041
2014-06-09 01:43:50 +02:00
TfT_02
28a846e0cb Update changelog 2014-06-08 18:23:07 +02:00
TfT_02
0185a30ec9 Fix an IndexOutOfBoundsException: Index: 0
In SaveTimerTask.java

Fixes #2039
2014-06-08 18:21:13 +02:00
TfT_02
38e1947302 Remove PvpLogger checks
No longer needed when testing with Combat Tag v6.1.4, the NPCs have
metadata „NPC”.

Fixes #2017
2014-06-08 18:11:18 +02:00
riking
4fb4d6fc0c Save users asynchronously 2014-06-08 14:12:25 +02:00
TfT_02
6d719988bf Remove this check here, allows Salvage in Adv mode
We’re already checking if the players game mode isn’t CREATIVE, so we
can safely remove this check.

Fixes #2059
2014-06-03 12:23:42 +02:00
TfT_02
b1c1f0e21e Added missing Salvage permissions to plugin.yml 2014-05-25 23:45:20 +02:00
TfT_02
3f34cc7365 Actually fix maximumQuantity reading from config
Now we try to automatically detect the maximum quantity if possible and
fall back to the config if the user has set a value there.

Also fixed the feedback message which said „Minimum quantity” instead
of „Maximum quantity”
2014-05-25 23:20:19 +02:00
TfT_02
3c6c2837bd Check permission before sending anvil messages 2014-05-25 22:46:35 +02:00
TfT_02
4bcef76fd8 Let config key take priority here 2014-05-24 15:42:15 +02:00
TfT_02
2fd5d7aa81 Cleanup RepairConfig leftovers in SalvageConfig
Some copy/pasta I forgot to remove
2014-05-24 15:24:25 +02:00
TfT_02
5080c68dce Fix Maximum Quantity in Salvage configs 2014-05-24 15:23:50 +02:00
TfT_02
3403aef37d Don't display child skills on scoreboards
This fixes an issue where the scoreboard would not display properly
when using /mcstats or /inspect.

Fixes #2037
2014-05-23 17:03:02 +02:00
TfT_02
53a34c12d2 Add SALVAGE to MISC_SKILLS List 2014-05-23 14:23:05 +02:00
TfT_02
59417d6721 Add changelog entry for Salvage child skill
Closes #561
2014-05-19 16:59:28 +02:00
TfT_02
93d63dbca5 Minor cleanup of imports 2014-05-18 17:06:50 +02:00
TfT_02
4643cf1070 A whole bunch of more work to convert Salvage to a child skill 2014-05-18 17:04:39 +02:00
GJ
91bf54019e Convert Salvage to a child skill. 2014-05-18 17:04:38 +02:00
TfT_02
ead716ef0d Fix a NPE when tab completing with /ptp
Fixes #2013
2014-05-11 18:33:50 +02:00
TfT_02
8fec1af257 Fix a bunch of small formatting issues 2014-05-11 15:15:44 +02:00
Sean Porter
99248caba3 Redstone ore now throws events when it flips on or off.
Fixes issue #2021
2014-05-11 01:30:11 -07:00
TfT_02
af64bdf742 Added API to check if an entity is bleeding 2014-05-02 19:41:44 +02:00
TfT_02
66a4925371 Use getAllyName() here instead 2014-05-02 00:53:05 +02:00
TfT_02
8eb6acd60f Add option to prevent hopper transfers of bottles 2014-04-27 15:03:07 +02:00
TfT_02
ce6892f2e6 Update README.md 2014-04-24 16:00:02 +02:00
TfT_02
c14a4e9305 Fix /party teleport command
Why did we use getCommand("ptp").getExecutor() again?

Fixes #1995
2014-04-21 14:54:09 +02:00
TfT_02
5825eb1696 Make sure to shorten long ability and skill names
(cherry picked from commit 236ccd6ebdd0834f87b373794e1597ef36fb2ff6)
2014-04-21 14:09:52 +02:00
TfT_02
bfebbd0095 Fix formatting
(cherry picked from commit 4e36073e6e2dc3aeba087d605cef79fc4a8a9779)
2014-04-21 14:09:41 +02:00
GJ
b204507a82 Use strings instead of OfflinePlayers for scoreboards.
(cherry picked from commit 89b596591ec1974e0201395dc6e76353e4709572)
2014-04-21 14:09:09 +02:00
TfT_02
9f53426511 Added API to XP events to get XP gain reason 2014-04-18 22:32:32 +02:00
Sean Porter
03c2282c3f Fix the calculations for Iron Arm Style in the Unarmed command. 2014-04-18 02:16:35 -07:00
TfT_02
20092d55fd Fix bug where dodge would check the wrong player 2014-04-18 00:49:40 +02:00
TfT_02
69a2a5cfff Check if player has a mcMMOPlayer object
Fixes #1976
2014-04-12 17:06:14 +02:00
TfT_02
618cfad100 Prevent accidentally breaking regrown crops
Adds #828
2014-04-06 14:41:40 +02:00
TfT_02
56e625a9df Added option to open /mcstats after logging in
Added #1033
2014-04-06 13:27:38 +02:00
TfT_02
79a1ef5d3e Players need to be in a party to use /ptp
Fixes #1967
2014-04-06 12:43:42 +02:00
TfT_02
10dd7619bf Support MATERIAL|data format in treasures.yml
Allows users to use the same material type for multiple treasures in
treasures.yml

Fixes #1965
2014-04-05 18:31:01 +02:00
TfT_02
f9dfec5bd0 Check event.getBow() != null
Fixes #1933
2014-04-05 13:55:10 +02:00
TfT_02
a9488bc18b Vanished players no longer get hit by AoE effects
Fixes #1964
2014-04-05 13:12:20 +02:00
TfT_02
f0ee708710 Updater should not be running on the main thread
Fixes #1957
2014-04-05 12:10:02 +02:00
TfT_02
3390a31cc6 Move PlayerUpdateInventoryTask to runnables.player 2014-04-05 11:59:36 +02:00
t00thpick1
0b4b272223 Account for level 0 2014-04-01 14:58:24 -04:00
TfT_02
8d200ea653 Back to active development 2014-03-29 18:28:26 +01:00
TfT_02
eb359c5595 Update pom.xml and changelog.txt for 1.5.00 release 2014-03-29 17:52:08 +01:00
TfT_02
e1b8088c17 Improve holiday manager with 1.7 changes 2014-03-29 17:50:29 +01:00
TfT_02
70a1eea231 Nerf Herbalism XP from Tall Grass 2014-03-29 17:12:55 +01:00
TfT_02
c744974192 Added option to config.yml to override vanilla Minecraft treasures 2014-03-29 17:12:55 +01:00
TfT_02
faa11a87a9 Removed "Treasure found!" message
Because when treasures are found in vanilla Minecraft, there isn’t a
message either
2014-03-29 17:12:55 +01:00
TfT_02
91da5c4ab1 Add option to drop extra fish
Allows enabling of old fishing mechanic where fish was always caught,
even when a treasure was found
2014-03-29 17:12:54 +01:00
GJ
da5e770e06 Add Podzol & Red Sand to Excavation 2014-03-29 17:12:54 +01:00
TfT_02
09557e378b Update to the new ProjectileSource API 2014-03-29 17:12:54 +01:00
TfT_02
72d26fed0f Update version number to 1.5.00 2014-03-29 17:12:54 +01:00
TfT_02
225de799e8 Increase TreasureHunter chances for Luck enchantment
When the player is using a fishing rod with the ”Luck of the Sea”
enchantment, the drop chances will increase with 1% for each level of
the enchantment.
2014-03-29 17:12:36 +01:00
TfT_02
334c44760f Workaround for ClassCastException: MaterialData cannot be cast to Tree 2014-03-29 17:12:36 +01:00
TfT_02
ac7fc1020d Use tree species for Woodcutting double drops in config.yml
Oak is now Generic, and Spruce is now Redwood.
2014-03-29 17:12:36 +01:00
riking
461871327b Include new 1.7 biomes in fishing biome XP boost and Ice Fishing check 2014-03-29 17:12:36 +01:00
GJ
60ddd799de Update mcMMO for Minecraft 1.7.2 2014-03-29 17:12:35 +01:00
GJ
80571fbe8f Remove deprecated permission nodes 2014-03-29 17:12:35 +01:00
TfT_02
d407f85704 Update pom.xml and changelog.txt for 1.4.08 release 2014-03-29 17:06:01 +01:00
TfT_02
458dc7db42 Make database command cooldown configurable 2014-03-29 17:02:08 +01:00
TfT_02
beab794c0e Fixed some issues with the HolidayManager
Was severely lacking more lols
2014-03-29 16:52:41 +01:00
TfT_02
8256f5461c Using an axe is required to earn Woodcutting XP
Not really sure why or when this check had gone missing..
2014-03-26 09:52:59 +01:00
TfT_02
0fe3ad7432 Reworked COTW config options + made COTW item configurable
Adresses #1481 partially
2014-03-23 14:33:57 +01:00
TfT_02
04e5dda127 Actually fix Repair lucky perk with Arcane Forging downgrade chance 2014-03-23 14:33:57 +01:00
TfT_02
f65adea2f9 Added minimum jump strength requirement and config option
for horses summoned with "Call of the Wild"
2014-03-23 13:41:31 +01:00
TfT_02
cdfb0da5c9 Fixed bug where shift right clicking potion ingredients was broken 2014-03-23 12:59:43 +01:00
TfT_02
cfa3d34dff Fix important bug regarding pistons 2014-03-14 15:23:28 +01:00
TfT_02
01b7d4f742 Repair lucky perk should decrease the Arcane Forging downgrade chance,
instead of increasing it.
2014-03-14 15:16:22 +01:00
TfT_02
9a359bf42c We need to use event.getBlock() here
Fix my boo boo from previous commit
2014-03-11 13:33:54 +01:00
TfT_02
ebdf11300b We do need to use a runnable. 2014-03-10 20:51:52 +01:00
TfT_02
e1a8f02bce Make Acrobatics XP prevention cool down, after teleporting configurable
Adds #1906
2014-03-09 15:24:24 +01:00
TfT_02
862d38b587 Clean up all of the imports 2014-03-03 18:27:45 +01:00
GJ
2415767c06 Clean up imports. 2014-03-03 12:22:28 -05:00
GJ
aa59348a94 We only care about blocks that award XP.
Also, this fixes a possible issue where blocks changed by entities other than falling blocks could have been left as tracked even after they were destroyed.
2014-03-03 12:14:01 -05:00
GJ
9c925d3327 We can do this without needing a runnable. 2014-03-03 11:40:36 -05:00
GJ
30f7521a3a Handle healthbars even when skills are disabled. Fixes #1194 2014-03-03 10:29:14 -05:00
GJ
7b3869e385 Use .equals instead of deprecated ID method. 2014-03-03 09:24:24 -05:00
GJ
0e641f7c5b Clean up some of our metadata handling. 2014-03-03 08:48:16 -05:00
GJ
733d16cf35 Don't clone if it's null. Fixes #1894 2014-03-03 08:03:30 -05:00
TfT_02
833bc1b251 Fixed bug where disbanded parties could still see alliance chat 2014-02-28 22:41:47 +01:00
TfT_02
840f3d9382 Fix /party kick command 2014-02-28 22:32:09 +01:00
TfT_02
34d6d867f2 Prevent combat abilities from damaging allied players 2014-02-28 22:08:48 +01:00
TfT_02
e56d5a0454 Exclude vanished players from tab complete list
Part 2 of fixing #1745
2014-02-28 21:56:30 +01:00
TfT_02
53fdf750f4 Pretend like the player is offline when he is vanished
Part 1 of fixing #1745
2014-02-28 21:56:30 +01:00
TfT_02
f096e915cf Changed default amount of XP from mining Quartz Ore
#1886
2014-02-28 19:24:41 +01:00
GJ
ce59488e8e Add FakeEntityTameEvent to match expected behavior for an animal being tamed. 2014-02-28 12:04:00 -05:00
GJ
47db522cc1 Because Bukkit doesn't set this automatically with setTamed. Go figure. Fixes #1888 2014-02-28 11:50:36 -05:00
TfT_02
a2cac82cba Check if player has data key here as well
Fixes #272
2014-02-28 14:45:44 +01:00
GJ
2e74333eb7 Oops. 2014-02-28 08:40:00 -05:00
GJ
0056be2d5f Assorted cleanup. 2014-02-28 08:36:42 -05:00
TfT_02
1d7e034d5e Fix the updater 2014-02-27 22:26:58 +01:00
GJ
8deac175d1 Repair damaged user files. Fixes #1869 2014-02-22 09:52:36 -05:00
GJ
d0b766a2d3 Fixed bug with updating (very) old user data. 2014-02-21 11:38:22 -05:00
GJ
65692f2a83 Fixed bug with checking maximum durability of mod items. Fixes #1634 2014-02-20 12:43:11 -05:00
GJ
d0b0786284 Fixed exploit involving Call of The Wild. Fixes #1877 2014-02-20 11:50:56 -05:00
Luuk Jacobs
87ac1002de Fix potion datavalues for Splash poison II potions 2014-02-18 08:45:44 +01:00
TfT_02
c51fde7f1f Added new permission node to control who can check version number
Negate this permission node to hide the version number from /mcmmo and
motd
2014-02-17 16:31:59 +01:00
TfT_02
0a6735110f Get mod config file resources properly
Fixes #1870 for real
2014-02-16 23:32:14 +01:00
TfT_02
8a284c50a2 Rename mod files to type.default.yml
Fixes #1870
2014-02-16 23:08:22 +01:00
roblikescake
09431ef27c Check durability before repairMaterial 2014-02-16 00:18:27 +01:00
TfT_02
9f9de86d21 The defender isn't necessarily a player here
Besides, the defender doesn’t need to have the player data key anyways
2014-02-16 00:11:15 +01:00
TfT_02
d9c04a09ba No need to clone here and it's not null checked
Fixes #1864
2014-02-15 23:35:14 +01:00
t00thpick1
04a02cfdc8 Store McMMOPlayer objects as metadata 2014-02-15 14:21:25 +01:00
TfT_02
b3a6c32ef6 Skip glass bottles as well
Fixes #1859
2014-02-15 11:18:11 +01:00
TfT_02
254f3b5ac9 Cleanup finishBrewing a bit 2014-02-15 11:17:31 +01:00
TfT_02
7f9ada14c8 Schedule check after putting a new bottle in the brewing stand 2014-02-15 01:37:41 +01:00
TfT_02
f79a4741cc Store Locations, not BlockStates
Fixes #1862
2014-02-15 01:31:13 +01:00
TfT_02
f3fd48d0c0 Don't set potion meta data - for Vanilla potions 2014-02-14 23:58:22 +01:00
GJ
fbee3318bd These go the other way around. 2014-02-12 08:29:14 -05:00
TfT_02
813f807876 Fix remaining potion data values
Fixes #1844
2014-02-12 13:48:24 +01:00
TfT_02
0060a86b20 Compile with 1.6.4-R2.0 2014-02-12 12:00:04 +01:00
TfT_02
15743c5f46 Don't set potion meta data
It causes incompatibilities with other plugins.

Fixes #1849
2014-02-12 11:54:21 +01:00
TfT_02
4b9d472f10 Fix ConcurrentModificationException with alchemyBrewTask.finishImmediately()
Fixes #1848
2014-02-12 11:16:05 +01:00
GJ
988006f913 Alchemy cleanup, part 1. 2014-02-11 16:22:57 -05:00
TfT_02
2f05c472ce Make party names case insensitive
Fixes #1846
2014-02-10 17:14:34 +01:00
TfT_02
5c836cdaaf Check party level before sending party chat
Fixes #1847
2014-02-10 16:07:43 +01:00
TfT_02
9e39c3495d Fix IllegalArgumentException: 1 > 0 2014-02-09 17:15:42 +01:00
TfT_02
b653aa57b7 You can't accept an alliance request when you already have an ally 2014-02-09 16:10:43 +01:00
Sean Porter
2ffdd340af The command is spelled xpshare, not expshare.
Fixes #1841
2014-02-09 12:31:30 +01:00
Sean Porter
d63c3fc6d0 Ensure the FlatFile directory exists.
Fixes #1842
2014-02-09 12:31:29 +01:00
TfT_02
4486261413 Schedule an Alchemy check after using a hotkey to add ingredients
Fixes #1834
2014-02-07 13:39:24 +01:00
TfT_02
a2e32179bb Fix /mcstats command
Fixes #1819
2014-02-05 19:24:14 +01:00
TfT_02
72b106e71f Fix ptp Accept_Required setting
I forgot to change this, oops!
2014-02-05 19:15:39 +01:00
TfT_02
679f1ed629 Use default Vanilla MC potion data values in potions.yml
Fixes #1821
2014-02-04 16:48:10 +01:00
GJ
734815c58d No reason to have our scoreboard stuff in a different listener. 2014-02-04 08:34:17 -05:00
GJ
abfedf381d Allow mod name to go in the middle or at the beginning. 2014-02-04 07:53:54 -05:00
GJ
8e040ae8d9 Refactor to match existing conventions 2014-02-03 14:57:45 -05:00
GJ
0c9836eb03 Made mod config files modular. Addresses #1802 2014-02-03 14:48:43 -05:00
TfT_02
62b13a9a84 Fixed bug where Snow would never drop treasures
Fixes #1820
2014-02-01 00:30:42 +01:00
TfT_02
c48ccae484 Compile with RELEASE to remain 1.6 compatibility for now 2014-02-01 00:30:37 +01:00
TfT_02
6264bfa15f Don't store Block objects, use BlockState
Fixes #1811, Closes #1822
2014-01-30 20:45:21 +01:00
TfT_02
b50ba9c02e Fix wrong data value of Potion of Hunger II
Fixes #1817
2014-01-26 15:13:35 +01:00
GJ
b3474c04c7 Increment SQL query numbers due to addition of Alchemy. Fixes #1803
Thanks to @roastnewt for the help!
2014-01-21 11:16:39 -08:00
TfT_02
a1c1271d21 Fix issues pointed out by the FindBugs plugin 2014-01-20 23:20:51 +01:00
md-5
79155887b0 You can only ever deploy one release.
Use -SNAPSHOT to indicate this is a dev build and not a release.
2014-01-20 23:06:37 +01:00
TfT_02
4178604833 Update pom.xml with md_5 Maven repo settings 2014-01-20 22:48:27 +01:00
TfT_02
d1fcd6958f Check if brewingStand == null
Fixes #1804
2014-01-20 22:38:20 +01:00
TfT_02
f39623c279 Bit of Alchemy cleanup 2014-01-20 22:38:04 +01:00
GJ
520f5cb116 Fix the broken build. Shame on me. 2014-01-20 14:53:31 -08:00
GJ
43e2c813d1 Clean up some of our messes. 2014-01-20 13:58:40 -08:00
TfT_02
c6ea32f0b0 Added Ender Dragon, Wither, and Witch to combat experience multipliers
They do not give any XP by default.

Fixes #1763
2014-01-19 19:40:33 +01:00
TfT_02
976c3b8494 Fix bug which prevented Hoppers from inserting new bottles
Fixes #1801
2014-01-19 15:35:27 +01:00
TfT_02
f3db90b6a9 Fix a couple of typos in plugin.yml
Mulitplies => Multiplies
2014-01-19 01:08:38 +01:00
TfT_02
82509fb476 Added custom XP boost perk 2014-01-19 01:08:38 +01:00
TfT_02
c27d79cf25 Added new XP perk - 10% boost
Adds #1698
2014-01-19 01:08:37 +01:00
TfT_02
de912c1e07 Make sure the player is valid as well 2014-01-19 01:08:37 +01:00
TfT_02
2159aa91ff Add missing alchemy ingredient tiers to ingredient check 2014-01-18 20:28:28 +01:00
TfT_02
748dba41dc Randomize the treasure drop amounts instead of always dropping everything
For example, the guaranteed 5 diamonds will now be a 1-5 diamond drop.
2014-01-18 19:15:38 +01:00
TfT_02
9349416326 Check if brewing stand still exists before processing AlchemyBrewTask 2014-01-18 19:11:15 +01:00
TfT_02
3b794c897d Make sure the party leader is online before attempting to notify 2014-01-18 19:06:20 +01:00
TfT_02
b460f7a564 Add more debug messages in onDisable()
So that we can track down why the disable proces slows down
2014-01-18 16:59:16 +01:00
TfT_02
383b048fef Changed config validation for Rank_Levels, successive Ranks can now be less than or equal to each other
Closes #1790
2014-01-18 12:02:05 +01:00
TfT_02
243a3bfbf6 Remove trailing whitespaces 2014-01-18 12:02:05 +01:00
TfT_02
c108a475e3 Fix a typo in the Alchemy skill guide
Concotions => Concoctions
2014-01-17 19:25:48 +01:00
TfT_02
6b653fa606 Changed appearance of party member list 2014-01-17 18:58:07 +01:00
TfT_02
818962e668 Added party levels
Parties now have XP and Levels. Party features such as party teleport and party chat have to be unlocked before they can be used by the party members
2014-01-17 18:56:27 +01:00
TfT_02
c729297615 Added party alliances
Adds the following commands:
`/party alliance`
`/party alliance invite <target>`
`/party alliance accept`

Allies will share party chat and will not be able to harm eachother.
Item and XP sharing is limitied to a single party. Allowing two parties
to team up without sharing resources and XP.

Closes #1009
2014-01-17 18:55:58 +01:00
TfT_02
e6e90954a9 Changed config validation for UnlockLevels, they can now also be 0
Closes #1790
2014-01-17 15:51:28 +01:00
TfT_02
4e86f60fd2 Replace ingredient strings correctly
Fixes #1789
2014-01-17 14:00:22 +01:00
TfT_02
27ff545d46 Add Alchemy hardcore settings to default config.yml file
These setting were already working, just forgot to add them to the
default file as well.
2014-01-17 00:17:10 +01:00
TfT_02
7c891e9ba8 Optimize imports 2014-01-16 22:32:40 +01:00
TfT_02
6143003516 Update PR to changes in master
- Special thanks, instead of in dev team
- Fix formatting issues
  * Remove trailing whitespaces
  * Rename method names of event listeners
  * Check for negative instead of positive
- Added Alchemy skill guide
2014-01-16 22:32:40 +01:00
Eric Hildebrand
8f83e328b0 Introduction of new Alchemy skill! 2014-01-16 22:32:40 +01:00
TfT_02
9afa8efd7d No need to hardcode the max tier here 2014-01-15 12:20:05 +01:00
TfT_02
393d9ca74e Fixed bug where Hylian Luck was broken
Fixes #1771
2014-01-13 14:18:16 +01:00
nossr50
97c95c1c49 This doesn't belong in the main branch 2014-01-12 14:49:05 -08:00
TfT_02
491df2cc82 Changed the appearance of /mcmmo commands
Closes #978
2014-01-12 13:51:12 +01:00
TfT_02
b4a6ecc58c Abstract HolidayManager a little more
Now we don’t have to manually edit this each year.
2014-01-12 12:08:47 +01:00
TfT_02
103bf593f3 Check null here as well
Fixes #1664
2014-01-12 10:30:04 +01:00
TfT_02
0332c0f5e0 Move this comment up
#1538
2014-01-11 15:14:39 +01:00
TfT_02
a004d6976d We already had a key called Confirm_Required
Another attempt to fix #1583
2014-01-11 14:54:01 +01:00
TfT_02
730f786d5b Fix issue with /ptp command
Fixes #1773
2014-01-11 10:30:12 +01:00
Foxtail
8993c71577 Update extrabiomesxl.blocks.yml
Config file was missing a section of 2x2 trees, called Quarter logs.
Missing logs were added to appropriate divided sections.
2014-01-10 10:56:04 -05:00
Sean Porter
cc524bb2ab Map.remove() can return Null. 2014-01-09 22:52:25 -08:00
TfT_02
2e94eecda0 Fix a small error with the config validation of advanced.yml
Fixes #1769
2014-01-08 13:19:51 +01:00
TfT_02
2466270b22 Removed /stats alias for /mcstats
Closes #1667
2014-01-08 01:10:12 +01:00
TfT_02
54a514edfa Added a LOTR mod config files, made by Dragyn 2014-01-07 23:28:16 +01:00
TfT_02
1336aeaef0 Remove/move more comments on identical keys
#1583
2014-01-07 22:05:18 +01:00
TfT_02
3c078100e8 Another attempt to fix the broken config updater
An attempt to solve #1583
2014-01-07 20:50:48 +01:00
GJ
13a623ea1f Misc was getting crowded again. 2014-01-03 11:07:13 -05:00
GJ
05b21eae5f Clean up our inventory event handling. 2014-01-03 10:41:38 -05:00
GJ
e0358d42d6 Ensure we're not dealing with a fake player. Fixes #1749 2014-01-03 09:19:07 -05:00
GJ
26174d88f4 Remove unused import 2014-01-03 08:30:59 -05:00
Sean Porter
c12d4319ac Don't cancel death message fixes for NPCs. 2013-12-27 15:21:25 -08:00
Sean Porter
a87bd14342 The attack target can still be an NPC without being an instance of Player. 2013-12-27 14:50:01 -08:00
TfT_02
d5990eee71 Added a ton of mod config files, made by Dragyn 2013-12-17 19:36:41 +01:00
TfT_02
f94343f13b Only grant taming XP once when taming a horse
Fixes #1651
2013-12-15 23:36:43 +01:00
TfT_02
ea4c424e0f Added level thresholds to hardcore modes
Players will not lose stats when their level is below the
Level_Threshold.
2013-12-15 23:27:37 +01:00
riking
f99e5e015d Add checks to rectify the potential for negative XP
Fixes #1573
2013-12-15 23:26:57 +01:00
riking
56b57da077 Only call one Death Penalty Event 2013-12-15 23:26:57 +01:00
TfT_02
4b402d9837 Fixed validation feedback message for Chimaera Wing recipe cost
Fixes #1703
2013-12-15 22:25:15 +01:00
TfT_02
6c2b1f555f Improve CleanBackupsTask a bit
* Print proper file names to the console when the date could not be
determined
* Skip all directories
* Skip every file that doesn’t have .zip in the file name
2013-12-13 00:17:56 +01:00
TfT_02
cdcda03e92 Moved repair config classes to the config package 2013-12-12 19:53:27 +01:00
TfT_02
65aa05a660 Fix /addlevels all and /skillreset all commands
Fixes #1675
2013-12-12 16:50:36 +01:00
TfT_02
7c7aa994a5 Added pre-made metallurgy.tools.yml by Skuli 2013-12-11 15:02:25 +01:00
riking
2aec4a69ea Database conversion bug: Integral division in output format 2013-12-10 14:56:07 -08:00
Glitchfinder
06c9ea7068 Minecraft handles block drop chances internally.
Fixes #1678
2013-12-08 12:49:43 -08:00
TfT_02
c88583c1c0 Use Matcher.quoteReplacement here!
Fixes #1676 - for real this time
2013-12-08 17:07:45 +01:00
TfT_02
d2b6838453 Fix config.yml formatting 2013-12-08 11:40:09 +01:00
TfT_02
c9f1f8f662 Fixed bug where party chat broke if the display name contained special characters
Fixes #1676
2013-12-08 11:35:02 +01:00
TfT_02
7a08343304 Actually keep all weeks, not just from the past year
Week numbers are obviously the same every year, we need to check the
year as well as the week number to determine if we should keep the
backup file or not.
2013-12-07 13:18:14 +01:00
riking
3b1bb3e08a Minor changes to Tree Feller - use a HashSet, move comment
LinkedHashSet doesn't actually do anything for us - we were never using the consistent ordering it promises, and openjdk-7 doesn't even provide that consistent ordering. Better to just not use it.
2013-12-06 23:55:26 -08:00
TfT_02
07cafd4866 Fixed bug where disabling hardcore mode for specific skills didn't work
Fixes #1661
2013-12-03 22:15:23 +01:00
GJ
48821a710f Fixed bug with cooldown donor perks 2013-12-02 08:30:45 -05:00
GJ
30a1b333b9 Need a space here. 2013-12-02 08:18:28 -05:00
GJ
696bf71962 Remove unused import 2013-12-02 08:13:53 -05:00
t00thpick1
2d577e92f1 AntiTheft option for Disarm Ability 2013-12-01 19:08:22 -05:00
Luuk Jacobs
86b92b5b30 add alias to mcscoreboard 2013-11-27 00:35:58 +01:00
GJ
24c1dec046 Fix missing import & broken build.
That's what I get for editing through Github's web UI...
2013-11-25 09:32:16 -05:00
GJ
6c478a26c4 Fix issue with custom axes not working with Tree Feller.
Most custom materials don't properly report their max durability, so we need to use our repairable manager to handle them instead.
2013-11-25 09:29:41 -05:00
t00thpick1
2d3da6daf8 Space not underscore 2013-11-24 18:01:05 -05:00
t00thpick1
de3b2b8024 Damage should probably actually be fatal I would think. 2013-11-23 12:34:14 -05:00
t00thpick1
02a064ffc6 These need spaces to be called pretty 2013-11-23 00:45:12 -05:00
t00thpick1
cb5303ce4d These strings return with Spaces, not underscores 2013-11-23 00:42:43 -05:00
t00thpick1
c0dee19cb0 Missed a refactor :P Also, javadoc event 2013-11-22 12:48:53 -05:00
t00thpick1
870987bba7 SecondaryAbility's API additions 2013-11-22 12:32:23 -05:00
riking
5d63a4b910 Run PlayerProfileSaveTask async, as intended 2013-11-21 12:41:26 -08:00
riking
3236ee5ec9 Harden save() method by making a defensive copy 2013-11-21 11:17:24 -08:00
riking
12ed2ac07b Have ExperienceCommand and SkillresetCommand explicitly handle 'all' 2013-11-19 18:56:47 -08:00
t00thpick1
729f3b1df9 There is no usage of this method in which "all" will not cause NPE's 2013-11-19 21:00:29 -05:00
TfT_02
ee1be3599c .length doesn't start at 0 2013-11-18 21:01:41 +01:00
TfT_02
12a6aca8cd Assume that block data = 0 if there isn't one in the config 2013-11-18 20:48:37 +01:00
TfT_02
2b81b8daeb Fix Commands.Scoreboard.Timer locale string
Closes #1626
2013-11-18 19:56:29 +01:00
GJ
5edbdec151 Actually fix broken locale string. 2013-11-15 07:25:50 -05:00
GJ
eaa38c11b8 Fix broken locale string.
Fixes #1615
2013-11-13 09:47:13 -05:00
GJ
e904e34556 Update Korean translation
Closes PR #1613 from @wolfdate25
2013-11-12 08:15:58 -05:00
TfT_02
445f805bb8 Set the treasure drop after using .clone()
Fixes #1603
2013-11-12 12:49:16 +01:00
t00thpick1
df77b9d0ed Parenthesis 2013-11-10 13:56:15 -05:00
t00thpick1
29f2525b58 Tend toward the smaller values, and configurable maximum for horse jump strength 2013-11-10 13:54:45 -05:00
TfT_02
5a68c7a335 Fixed bug which prevented gaining Acrobatics XP 2013-11-10 00:52:30 +01:00
GJ
69ef7f40d8 Command cleanup. 2013-11-08 23:14:11 +01:00
GJ
d1d6b80676 Allow repair of items without a recipe. 2013-11-08 10:52:43 -05:00
GJ
dfe83ff497 Fix divide by zero bug
Minimum Level & Minimum Quantity were accidentally flipped.
2013-11-07 09:13:56 -05:00
riking
e5acf6d936 Also clone fishing treasures, use alternate Wool method
The alternate wool method is testing, the treasure clone is there to stay ;)
2013-11-06 21:34:16 -08:00
riking
bca0ca6766 Fix Shake poisoning the treasure cache with Wither skeletons
The returned ItemStack is modified for both Sheep and Skeletons, so a copy should be returned.
2013-11-06 21:03:13 -08:00
GJ
f17b5faaf6 Parenthesis are good. 2013-11-06 14:52:19 -05:00
GJ
f20fa571f1 Update changelog. 2013-11-06 11:56:50 -05:00
GJ
b90d1c31c7 Updated localization files
Includes new Portuguese (Brazil) translation provided by @FabioZumbi12
in #1585

Includes new Korean translation provided by @wolfwork in #1258
2013-11-06 09:48:05 -05:00
GJ
cf56ca35eb Tweaked durability handling slightly.
Now routes everything through one function to handle enchants and max
durability. Use max durability from RepairableManager by default to
account for mod tools.
2013-11-06 08:45:20 -05:00
TfT_02
c31f5b5782 Account for Unbreaking enchantment when using abilities 2013-11-05 14:51:54 +01:00
GJ
af98c8eb59 Best way to handle minimum quantities.
Check repair function first, assuming the item isn't null, otherwise
check the config. If not found, check config.
2013-11-04 11:01:14 -05:00
TfT_02
3a10b2d83c Make sure we're not setting a bite chance > 1.0
Fixes #1592
2013-11-04 10:32:05 +01:00
TfT_02
32e7c48fd8 Change this message to something that makes sense
The old message was confusing see #1593
2013-11-03 22:49:39 +01:00
Glitchfinder
af578870c7 Defaulted quantities should be defaulted everywhere.
Fixes #1581
2013-11-03 09:40:04 -08:00
TfT_02
cd470d5497 Fix a NPE which occured when there was no backups folder 2013-11-03 14:09:41 +01:00
TfT_02
a9c5e2a04f Don't send a message to the console if no backups were deleted 2013-11-02 21:50:49 +01:00
TfT_02
0196fd8447 Fix the update checker 2013-11-02 21:49:20 +01:00
TfT_02
b1458840e7 Permissions should be lowercase 2013-11-02 19:29:36 +01:00
TfT_02
1fea786669 Added bypass permission for finding Fishing traps 2013-11-02 19:25:02 +01:00
TfT_02
6f9a57751e We can't schedule tasks in onDisable() 2013-11-01 17:39:03 +01:00
GJ
2e1c585005 Fix issue with updating players that are offline. 2013-11-01 12:38:40 -04:00
GJ
811626e67b Cleanup. 2013-11-01 11:54:51 -04:00
TfT_02
cdfd81a67a Cleanup ZipLibrary class 2013-11-01 16:44:03 +01:00
TfT_02
408b8b2107 Added automatic cleanup of backups folder
By default mcMMO keeps the following files:
 * All files from the last 24 hours
 * Daily backups of the past week
 * Weekly backups of the past months

Adds #1574
2013-11-01 16:43:56 +01:00
GJ
6d5f3a52f4 Don't process chat if the mcMMOPlayer is null.
The player should ALWAYS be online when chatting, but depending on
external plugins and applications, this is not always properly
implemented. Fixes #1578
2013-11-01 09:30:10 -04:00
GJ
2cdf08de9f Allow offline players for chat events.
This fixes issues with plugins or applications that rely on JSONAPI to
chat. Fixes #1578
2013-11-01 09:12:06 -04:00
GJ
71141a0f8d Minimum quantity should default to 2.
Fixes #1581
2013-11-01 08:22:14 -04:00
TfT_02
bded936af5 Cleanup our imports 2013-10-31 22:30:05 +01:00
GJ
caaac232d7 Cleanup CombatUtils.
Opting to stick with the if-else rather than the switch statement,
because I think it's slightly easier to read.
2013-10-31 15:03:06 -04:00
GJ
a9d51dad34 Clean up Smelting checks.
Now uses recipes to check if an item is the result of smelting.
2013-10-31 14:29:06 -04:00
GJ
88296da0af Removed MCPC+ workaround.
This has been fixed by MCPC+ starting with build 112.

Addresses #1549
2013-10-31 13:28:54 -04:00
GJ
de3c4f8fd7 Smelting now works with custom ores.
Also fixed exploit where smelting XP could be awarded for some
non-smeltable materials.
2013-10-31 13:25:06 -04:00
GJ
1785bab504 Fix bug with Salvage config value.
After our renames and updates, Salvage was not reading the config value
for the anvil material properly.
2013-10-31 09:09:52 -04:00
GJ
41da32cd1b Added options to disable various sound effects.
Fixes #1577
2013-10-31 09:03:29 -04:00
GJ
93d586592e Move these checks up.
These checks need to happen sooner because they may impact config
loading, specifically the MCPC+ check.

Fixes #1549
2013-10-31 08:15:30 -04:00
Glitchfinder
d6c6c75157 Experience is occasionally zero or cast to zero.
Fixes #1575 and fixes #1576
2013-10-30 15:49:47 -07:00
GJ
4889769522 Workaround MCPC+ shortcomings for now.
Fixes #1549
2013-10-30 15:33:37 -04:00
TfT_02
6c70de6a58 Also backup experience.yml 2013-10-30 12:33:34 +01:00
GJ
fd9154e009 Fixed bug with toggle commands not properly displaying the success message. 2013-10-29 11:45:27 -04:00
GJ
97b9214d6e Wrap these inside McMMOPlayer for easier access. 2013-10-29 11:02:57 -04:00
GJ
a8d1376533 More minor cleanup. 2013-10-29 10:01:30 -04:00
GJ
3be443c63c Cleanup some XP functions, remove unused scoreboard values, minor refactoring. 2013-10-29 09:49:41 -04:00
GJ
cc2c9eb21d Move this to the skill itself. 2013-10-28 16:32:40 -04:00
GJ
9b3ae5c729 These belong in their managers, not in McMMOPlayer 2013-10-28 16:14:52 -04:00
GJ
ccb7fc5886 Remove, don't just comment out. 2013-10-28 16:04:55 -04:00
GJ
60d69e3cc4 Create wrapper to handle all PTP data. 2013-10-28 15:49:48 -04:00
riking
f64f62492f Reinstate static color list, clarify intent 2013-10-28 12:47:25 -07:00
GJ
3fe936306b Oops. 2013-10-28 15:19:47 -04:00
GJ
c79f8043ad Use proper functions where they exist, and move functions to better locations. 2013-10-28 15:12:24 -04:00
GJ
8369ae4616 Don't use a class variable here. 2013-10-28 14:14:20 -04:00
GJ
4715688fe8 Update changelog. 2013-10-28 14:07:41 -04:00
GJ
62e03a4ef5 Black is hard to read. 2013-10-28 13:58:34 -04:00
GJ
9ef3c721df Formatting cleanup from the scoreboard update. Also handle skill permissions differently. 2013-10-28 13:04:46 -04:00
TfT_02
f55039ac6b Earn XP when using Shake
Adds #1564
2013-10-28 17:38:03 +01:00
TfT_02
be792a1052 Fix exploitPrevention() and add Javadocs 2013-10-28 15:39:47 +01:00
GJ
c612036db3 Don't try to find a treasure if there aren't any.
Fixes #1572
2013-10-28 08:52:55 -04:00
GJ
ad4ee6f402 Cleanup exploit prevention method. 2013-10-28 08:17:06 -04:00
TfT_02
49a5bd2ba6 We can move this check to exploitPrevention() 2013-10-26 00:50:31 +02:00
GJ
8aac6a992b Back to active development. 2013-10-25 17:11:54 -04:00
GJ
5da66f05d4 Update pom.xml for 1.4.07 release 2013-10-25 17:11:04 -04:00
GJ
134e0db2e9 Cleanup more of Riking's mess. 2013-10-25 17:07:56 -04:00
GJ
b3415ee2f4 Cleanup some of Riking's mess. 2013-10-25 17:05:36 -04:00
TfT_02
14175a6dfd Don't complain about missing Guide strings 2013-10-25 22:16:18 +02:00
TfT_02
7b3fb46a9a Improved AFK Acrobatics prevention mechanism 2013-10-25 22:02:39 +02:00
Kane York
0aea165a8f Add note about temporary dev build setup to README 2013-10-25 11:46:29 -07:00
riking
17b7a9bf10 Add message to /mcscoreboard time [n] 2013-10-25 11:41:21 -07:00
riking
bd611ee11c Add message to /mcscoreboard keep when a board is not shown 2013-10-25 11:39:24 -07:00
riking
c6ca65f5c9 Create a utility method in SkillUtils to easily check ability cooldowns 2013-10-25 09:49:02 -07:00
riking
95f15e68fe New and Improved Scoreboard System
- Scoreboards now AUTO-UPDATE
 - Scoreboards now COME IN COLOR
 - If you want, they can come in EVERY COLOR (Config setting)
 - Scoreboards can be displayed alongside chat output!
 - Prevention of denial of service to SQL via spamming /mctop using a cooldown
 - Added /mccooldown command to show cooldowns for all available skills
2013-10-25 09:49:02 -07:00
TfT_02
89dabaeb43 Hook location cleanup 2013-10-24 23:14:23 +02:00
TfT_02
c2e100b1e3 Use hook location in Master Angler 2013-10-24 21:19:24 +02:00
GJ
9f33c6cef1 Use addUnsafeEnchantment instead of addEnchantment
Since the enchantment was already present on the item, there's no need to check if it's valid. This also avoids any errors that may occur when trying to repair an item with non-standard enchants.

Fixes #1561
2013-10-22 09:57:13 -04:00
GJ
7e241e3993 Useless else statement. 2013-10-21 13:15:41 -04:00
GJ
bc51505150 More cleanup. 2013-10-21 08:31:35 -04:00
TfT_02
e0599a0dea Subtract XP with Hardcore mode
Adds #1529
2013-10-20 20:02:16 +02:00
TfT_02
d410251595 Changed kraken default behavior
It will no longer broadcast chat messages globally by default, as well as strike lightning on it's target. Instead it will spawn explosion effects.
2013-10-20 17:04:50 +02:00
TfT_02
810c74dc2a Fixed bug which prevented players from leveling up
Any affected players will get their levels back when they gain some
more XP in that particular skill.
2013-10-19 14:08:04 +02:00
TfT_02
100f2c7e56 Added a warning message if the server is running NoCheatPlus without CompatNoCheatPlus 2013-10-19 00:27:07 +02:00
TfT_02
e13e5295e8 Notify about updates if user is running dev1 and beta1 is available 2013-10-18 17:25:21 +02:00
TfT_02
b100b7bcc7 Gravity's Updater version 2.0 2013-10-18 16:58:12 +02:00
TfT_02
f4ff8518c2 Cleanup progress feedback 2013-10-18 16:43:37 +02:00
riking
dbd27b641e Give periodic status messages to the console in conversion 2013-10-18 16:40:44 +02:00
TfT_02
4a428a47af Fix bug with HolidayManager and some cleanup 2013-10-18 16:24:01 +02:00
GJ
3252137ed7 Update locale files. 2013-10-18 10:20:38 -04:00
GJ
68c4b99d1b Oops. 2013-10-18 10:16:51 -04:00
GJ
f282891d0a More info for armor errors. 2013-10-18 10:15:23 -04:00
GJ
7f4e3fedb3 Need different methods for mod files and regular files. 2013-10-18 10:12:55 -04:00
GJ
2042e0cdbd How did I not realize this would loop forever... 2013-10-18 10:02:11 -04:00
GJ
2662fee9fb ACTUALLY use the proper path. 2013-10-18 10:02:10 -04:00
TfT_02
e8e2dcff46 -levelsChanged instead of - levelsChanged 2013-10-18 15:26:15 +02:00
TfT_02
3b09012b35 Also use getServer() here as well 2013-10-18 15:26:14 +02:00
GJ
a774733af4 Use proper path 2013-10-18 09:23:10 -04:00
GJ
4a7e1e2b94 Update pom.xml to fix resource issues. 2013-10-18 08:54:07 -04:00
GJ
b8c1f868f5 Event updates 2013-10-18 08:54:06 -04:00
GJ
3f56a8fbcf Importing Bukkit.java is bad, always use getServer() instead 2013-10-18 08:54:05 -04:00
Bestle
d8e86d0fc7 Fix logic error in fireworkParticleShower
If a player is inside a vehicle, the y position of the spawned firework should be modified, not the x
2013-10-18 12:59:21 +01:00
TfT_02
e125700b43 Fixed Fishing ability "Shake" 2013-10-18 12:25:49 +02:00
t00thpick1
819a1c62ed Merge pull request #1550 from Bestle/master
Add missing ignoreCancelled checks - MERGE COMMIT HAHAHAHA
2013-10-17 16:38:38 -07:00
Bestle
4bc446e306 Add missing ignoreCancelled checks
If a plugin cancels a piston retract or extend event, mcMMO still considers that block or blocks to have moved.

This allow players to gain xp and double drops from blocks that they shouldn't. Checking for cancelled events fixes this.
2013-10-17 21:05:29 +01:00
TfT_02
7f2f15d88e Revert "Don't forget to include the mod files!"
This reverts commit be4736fffd.
2013-10-16 01:41:31 +02:00
TfT_02
be4736fffd Don't forget to include the mod files!
Fixes #1546
2013-10-16 01:38:09 +02:00
riking
b4f4de4628 Get all logs in Tree Feller, and optimize performance
Tree Feller has been shown, both anecdotally and with timings, to put a strain on the server, and therefore is worthy of the effort of optimization.
Prior to this change, on jungle trees, Tree Feller would take around 20-40 milliseconds to process a Jungle Tree after the JIT kicked in, and around 15-25 milliseconds for a normal tree.

Additionally, logs would be left up in the air for jungle trees.

After this change, Tree Feller takes 2-5 milliseconds on normal trees, and 10-15 milliseconds on jungle trees, and no logs are left up in the air.
2013-10-16 00:59:11 +02:00
TfT_02
b9c652ef2b This check shouldn't be inverted
Fixes #1545
2013-10-16 00:57:56 +02:00
GJ
bf4e8d43ea Because the entity that exploded might be null (or might not be TNT) 2013-10-15 13:10:29 -04:00
GJ
468fbdab56 SkillUtils cleanup, EventUtils creation
Move some functions in SkillUtils to more relevant locations.

Begin work on utility class to handle all event calls.
2013-10-15 13:03:33 -04:00
GJ
309dfd50cd Revert change to smoke particle handling
Have to do it this way, because not all block directions are valid for
smoke
2013-10-15 08:38:59 -04:00
riking
44e3e4d1e1 Localize several command results
Also don't nullcheck the null-guarded mcMMOPlayer in PartyManager
2013-10-14 20:48:36 +02:00
riking
476f426590 Remove RepairableManagerFactory until we actually need it
Let's hold off on the factory pattern until we actually offer choices.
2013-10-14 20:48:35 +02:00
riking
766f1f4127 Oh! So that's why it's never used here 2013-10-14 20:48:35 +02:00
riking
b3cf9bf839 When an error occurs updating the leaderboards, print out the current player name if possible 2013-10-14 09:53:42 -07:00
GJ
056f7cc93b Nicer handling of some particle effect code. 2013-10-14 11:29:25 -04:00
TfT_02
741f629ab8 Don't spawn fireworks under a boat (for real this time)
Fixes #1534
2013-10-14 17:07:15 +02:00
TfT_02
dd64c4008b Account for Master Angler config values in /fishing
Fixes #1537
2013-10-14 16:28:48 +02:00
TfT_02
3a5de8e2ce This should be on LOWEST 2013-10-14 09:28:16 +02:00
TfT_02
2d78c0738d Color party leader names only once 2013-10-12 20:50:42 +02:00
TfT_02
77617ebee2 Add bow to fishing treasures 2013-10-12 20:29:52 +02:00
TfT_02
67e9d9c535 Fishing TNT traps should not destroy blocks 2013-10-12 03:30:10 +02:00
TfT_02
800786111c Fix apostrophe issues
Fixes #1523
2013-10-12 02:41:13 +02:00
TfT_02
ed8197bd50 Remove level based bonus from Master Angler
Let's try this another way, instead of removing this passive ability all togheter I think it would be nice to keep the boat/biome catch rate boost. The level based boost was out of hand and counter-intuitive as it made leveling easier on high skill levels.
2013-10-12 02:41:13 +02:00
TfT_02
82f8c4ce36 Fishing Treasure Hunter overhaul 2013-10-12 02:41:13 +02:00
TfT_02
b1cf7d0348 Fire FakeBlockBreakEvent when using Hylian Luck
Fixes #1528
2013-10-11 23:47:42 +02:00
GJ
ae77313007 We forgot one...
Fixes #1527
2013-10-11 15:46:34 -04:00
TfT_02
49cbaad47f Clean up advanced.yml comments and keys 2013-10-11 16:22:30 +02:00
TfT_02
1d96ed72dc Move Acrobatics XP settings to experience.yml 2013-10-11 15:18:57 +02:00
TfT_02
ec378d046f Reformat advanced.yml making the keys consistent 2013-10-11 15:18:56 +02:00
GJ
a25dc24c6c No reason to have this many functions... 2013-10-11 15:18:56 +02:00
TfT_02
68eb51a3d0 Removed Shake_UnlockLevel config option
because it is no longer needed.
2013-10-11 15:18:56 +02:00
TfT_02
2eda3a9c83 Add extra tiers! Every ability now has 8 tiers 2013-10-11 15:18:55 +02:00
GJ
ad8e200a84 Make sure we update the blocks config after this too. 2013-10-09 11:45:49 -04:00
GJ
0c83bf2a80 Improve our drop handling. 2013-10-09 11:44:45 -04:00
GJ
6eaec5ffab We don't need this anymore. 2013-10-09 10:27:06 -04:00
GJ
8a2c5fb051 Check 0 first. 2013-10-09 10:26:51 -04:00
GJ
9485869014 Move these functions to SkillType. 2013-10-09 09:20:32 -04:00
GJ
e1bf55b077 Backup old mod configs & replace with new. 2013-10-08 13:10:09 -04:00
GJ
81140824e4 Backup and replace updated treasures.yml file. 2013-10-07 13:09:46 -04:00
GJ
d5545de81f Backup & replace the repair config files that have been updated. 2013-10-07 13:04:36 -04:00
GJ
8632baed27 No reason to handle this ourselves, Bukkit does it for us. 2013-10-07 11:54:23 -04:00
GJ
9aaea7e44f Fix old files if they exist. 2013-10-07 10:43:22 -04:00
GJ
c2f8f4d016 User data is now saved in flatfile, not FlatFileStuff 2013-10-07 10:33:14 -04:00
GJ
5131e74349 Save mod config files to "mods" rather than "ModConfigs", mirror directory structure inside the jar file. 2013-10-07 10:32:40 -04:00
GJ
3927427b5b Refactor all our repairable stuff into a special package. 2013-10-07 10:23:04 -04:00
TfT_02
4aef4c63fc Split the locale skill guides into seperate sections
This will make it easier for translators to keep up with translating our skill guides. Closes #560
2013-10-07 16:05:11 +02:00
GJ
fb4777e7f0 Added XP boost to Acrobatics when wearing Boots of Feather Falling.
Adds #1098
2013-10-07 09:53:32 -04:00
GJ
d8f3a54f9b Compiler throws warnings all over the place about our close methods, this one is no different. 2013-10-07 07:56:13 -04:00
GJ
de964a3a60 This naming bothers me. 2013-10-07 07:53:42 -04:00
t00thpick1
ce3bc07aa8 Reasonably sure this needs to be this way 2013-10-06 17:46:45 -04:00
TfT_02
5a6bb363cf Don't spawn fireworks under the player if they're in a vehicle 2013-10-06 12:08:22 +02:00
TfT_02
3f9c98d72e Update changelog & minor formatting fixes 2013-10-06 10:25:28 +02:00
riking
96b54387fe SQL database - split loadProfile to have retry flag
Instead of assuming that newUser() worked as intended, we cycle back around into the method.
This also removes the possibility of infinite loops from the writeMissingRows() code path.
2013-10-06 10:09:09 +02:00
riking
70eb67dd6a Flatfile loadProfile - place newUser() inside of try block
This fixes incorrect behavior in the edge-case where an IOException occurs when reading (but not writing) the flatfile database.
2013-10-06 10:09:09 +02:00
riking
77f9f40065 Do not save an un-loaded PlayerProfile 2013-10-06 10:09:09 +02:00
riking
14ae1a69c4 Attempt clean recovery from an unloaded PlayerProfile
This change should cause McMMOPlayer to create a graceful recovery when the database is temporarily unavailable.
When a McMMOPlayer is constructed and recieves an unloaded PlayerProfile, it schedules a task to re-attempt profile retrieval. This task can run for a maximum of 5 seconds, after which a second warning is printed indicating that it has given up (and a message given to the user).
2013-10-06 10:09:09 +02:00
riking
c9858dfd49 Do not mark a PlayerProfile as clean if it failed to save
DatabaseManager.saveUser() now returns a success value, which is used by PlayerProfile to determine whether or not it should be considered clean.
2013-10-06 10:09:09 +02:00
riking
f75fe3cc89 Potential fix for loss of data due to SQL connection dropping
The idea behind this change is to send a ping every hour, which is shorter than the driver's 'dead connection' threshold of 8 hours.

As a side effect, this also will fix a subset of the situations where the MySQL server is restarted.
2013-10-06 10:09:08 +02:00
TfT_02
c19ccbccac Use only 1 extra durability by default, instead of 2 2013-10-06 10:08:06 +02:00
TfT_02
2f90e533a5 Improve validation messages of treasures.yml 2013-10-06 09:51:33 +02:00
Kane York
0cd0919447 /mcconvert: Fix mismatched type in list.remove() call
The databaseTypes collection is a List<String>, so attempting to remove a DatabaseType object will have no effect.
2013-10-05 14:07:06 -07:00
TfT_02
e8b886fcc6 This check somehow got removed 2013-10-05 01:18:51 +02:00
383 changed files with 30417 additions and 11096 deletions

View File

@@ -7,7 +7,130 @@ Key:
! Change
- Removal
Version 1.4.07-dev
Version 1.5.01-dev
+ Added new child skill; Salvage
+ Added UUID support!
+ Added SQL connection pooling and async loading!
+ Added the long awaited Diminished Returns feature
+ Added new feature to Herbalism. Instantly-regrown crops are protected from being broken for 1 second
+ Added option to config.yml to show the /mcstats scoreboard automatically after logging in
+ Added option to config.yml for Alchemy. Skills.Alchemy.Prevent_Hopper_Transfer_Bottles
+ Added option to config.yml for Scoreboards, display "Ability" instead of ability names on the scoreboards
+ Added options to experience.yml for Dirt and Sand variations
+ Added support for `MATERIAL|data` format in treasures.yml
+ Added API to experience events to get XP gain reason
+ Added API to check if an entity is bleeding
+ Added API to ExperienceAPI to get the amount of XP needed for a level
+ Added API class SkillAPI used to get a list of valid skill names
+ Added API events for hardcore features, McMMOPlayerPreDeathPenaltyEvent, McMMOPlayerStatLossEvent and McMMOPlayerVampirismEvent
+ Added API to ExperienceAPI to specify if XP can be shared
+ Added options to tools.yml and armor.yml config files to set a pretty repair material name
+ Added full support for repairables in tools.yml and armor.yml config files
+ Added magical mod config file import command, for Cauldron 1.7+. Check wiki for usage
+ Added particle effects and sounds to "Call of the Wild" (Taming)
+ Added summon length to "Call of the Wild". Summons will now commit suicide after their lifespan expires
+ Added feature which makes tamed wolves attack a target shot by the owner
= Fixed bug where pistons would mess with the block tracking
= Fixed bug where the Updater was running on the main thread.
= Fixed bug when players would use /ptp without being in a party
= Fixed bug where player didn't have a mcMMOPlayer object in AsyncPlayerChatEvent
= Fixed bug where dodge would check the wrong player skill level
= Fixed bug which causes /party teleport to stop working
= Fixed bug where SaveTimerTask would produce an IndexOutOfBoundsException
= Fixed bug where Alchemy would not fire BrewEvents
= Fixed bug with setting custom names and lore in treasures config
= Fixed bug which would cause a NullPointerException with getFlowerAndGrassXp()
= Fixed bug which could cause and SQLException regarding the connection property 'maxReconnects'.
= Fixed bug where falling blocks were incorrectly tracked
= Fixed bug where items would get deleted when in Berserk with a full inventory
= Fixed bug where the console would not correctly show party chat colors
= Fixed bug where party chat was using non thread safe methods
= Fixed bug where Blast Mining unlock levels could be to high in certain occasions
= Fixed bug where Blast Minings ability "Demolition Expert" would not work
= Fixed bug where Repair_Material_Quantity wasn't read in mod config files
! Changed SecondaryAbilityEvent to implement Cancellable and it now gets fired for damage related secondary abilities
! Changed the way mcMMO handles bonus damage, updated for the new damage event API
! Changed player data saving. Save tasks are now asynchronous
! Vanished players no longer get hit by AoE effects
! Changed Alchemy config option 'Prevent_Hopper_Transfer' renamed to 'Prevent_Hopper_Transfer_Ingredients'
! Changed Alchemy XP distribution. XP is granted based on the stage of the potion.
! Changed behavior of the Blast Mining ability "Demolition Expert"; now only decreases damage for the ability user
! Updated for new getOnlinePlayers() behavior
! Changed McMMOPlayerDeathPenaltyEvent to get fired after hardcore penalty calculations, use McMMOPlayerPreDeathPenaltyEvent for old behavior
! Moved Refresh_Chunks setting from hidden.yml to config.yml
- Removed salvage ability from Repair, salvage has it's own (child) skill now
Version 1.5.00
+ Added Podzol & Red Sand to Excavation
+ Added Hardened Clay, Stained Clay, and Packed Ice to Mining blocks
+ Added Acacia and Dark Oak to Woodcutting blocks
+ Added Salmon, Clownfish, and Pufferfish to Fishing XP
+ Added new flowers and grasses to Herbalism XP
+ Added option to config.yml which allows players to always catch fish, even when a treasure is found
+ Added option to config.yml to override vanilla Minecraft treasures
! Fishing XP now depends on the type of fish.
! Woodcutting XP in experience.yml and Woodcutting double drops in config.yml now use the tree species names. Oak is now Generic, and Spruce is now Redwood.
! Red_Rose was replaced by Poppy, and so the key in experience.yml has been updated accordingly.
- Removed deprecated permission nodes
- Removed "Treasure found!" message
Version 1.4.08
+ Added a new skill; Alchemy. Special thanks to EasyMFnE for creating this!
+ Added SecondaryAbilityType enum, and new SecondaryAbilityWeightedActivationCheckEvent, fired when a secondary ability checkes its activation chances
+ Added the possibility to gain experience when using Fishing "Shake"
+ Added config options to disable various sound effects
+ Smelting now works with custom ores - add smelting XP value to blocks.yml, or it will default to 1/10th of normal XP.
+ Added automatic cleanup of backups folder.
+ Added bypass permission for finding Fishing traps
+ Added level threshold settings to hardcore modes. When a players skill level is below this threshold, they will not lose any stats
+ Added party alliances, two parties can now team up. Allies share party chat and cannot harm each other.
+ Added new experience bonus perk 'mcmmo.perks.xp.10percentboost.<skillname>' multiplies incoming XP by 1.1
+ Added new experience bonus perk 'mcmmo.perks.xp.customboost.<skillname>' multiplies incoming XP by the boost amount defined in the experience config
+ Added Ender Dragon, Wither, and Witch to combat experience multipliers - they do not give XP by default
+ Added support for multiple mod config files, naming can be done as either armor.<modname>.yml or <modname>.armor.yml
+ Added config options to configure the items used in "Call of the Wild"
+ Added config option to configure the database command cooldown
= Fixed bug where healthbars wouldn't display if skills were disabled
= Fixed bug with "Call of the Wild" entities despawning
= Fixed bug with updating (very) old user data.
= Fixed bug with checking maximum durability of mod items.
= Fixed exploit involving Call of The Wild.
= Fixed bug where LeafBlower permissions were ignored
= Fixed bug with toggle commands not properly displaying the success message.
= Fixed IllegalArgumentException caused by an empty Fishing treasure category
= Fixed bug with Salvage not reading the config value for the anvil material.
= Fixed exploit where you could receive smelting XP for improper items
= Fixed bug where the Unbreaking enchantment was ignored when using "Super Breaker" or "Giga Drill Breaker"
= Fixed bug which prevented players from gaining Acrobatics XP when the setting 'Prevent_XP_After_Teleport' was set to false
= Fixed bug where cooldown donor perks were reducing more than expected
= Fixed bug where disabling hardcore mode for specific skills didn't work
= Fixed bug which caused the backup cleanup to delete old backups while it should have kept those
= Fixed bug where party chat broke if the display name contained special characters
= Fixed bug where `/addlevels all` and `/skillreset all` didn't work
= Fixed bug which made it possible to gain XP by taming the same horse multiple times, if a player "untamed" that horse
= Fixed bug where some horses summoned with "Call of the Wild" were unable to jump
= Fixed bug where the /ptp request expiration time was checked wrongly - preventing players from using the command
= Fixed bug where Hylian Luck was broken
= Fixed bug where Snow would never drop treasures
= Fixed issues with commands giving away vanished players.
= Fixed bug where the Repair lucky perk would increase the Arcane Forging downgrade chance, instead of decreasing it
! Changed party system. Parties now have XP and Levels. Party features such as party teleport and party chat have to be unlocked before they can be used by the party members
! Changed appearance of party member list. Gold = party leader, White = online, Gray = offline, Italic = not nearby
! Updated localization files
! Changed the appearance of /mcmmo commands
! Changed AxesCritical to CriticalHit in config file
! Changed several secondary ability permissions(deprecated versions still exist)
! Changed /ptp config setting, Commands.ptp.Confirm_Required is now Commands.ptp.Accept.Required
! Changed config validation for UnlockLevels, they can now also be 0
! Changed config validation for Rank_Levels, successive Ranks can now be less than or equal to each other
! Changed default amount of XP gained from mining Quartz Ore. From 250 to 100 XP.
! Changed Acrobatics config setting, Skills.Acrobatics.Prevent_XP_After_Teleport is now Skills.Acrobatics.XP_After_Teleport_Cooldown
- Removed /stats alias for /mcstats
Version 1.4.07
+ Added XP boost to Acrobatics when wearing Boots of Feather Falling
+ Added SQL Database can now recover from a dropped connection without losing data. (Thanks Riking!)
+ Added more tiers to Fishing, Repair and Smelting!
+ Added Carrot on a Stick and Flint & Steel to repair.vanilla.yml
+ Added horses to the "Shake" ability
+ Added ability to summon horses via "Call of the Wild" using apples
@@ -27,6 +150,12 @@ Version 1.4.07-dev
+ Added ability to give custom names to items in treasures.yml - use the key "Custom_Name" to set, expects a string.
+ Added ability to give lore to items in treasures.yml - use the key "Lore" to set, expects a list of strings.
+ Added Quartz and Name Tags to the default Excavation treasures
+ Added a warning message if the server is running NoCheatPlus without CompatNoCheatPlus
+ Added cooldown to commands with heavy database access to prevent denial of service
+ Added /mcscoreboard keep, to keep the scoreboard up forever
+ Added Rainbow Mode to scoreboards
+ Added new /mccooldowns command to show all ability cooldowns
+ Commands may now both print text and display a scoreboard
+ Killing a custom entity will automatically add it to the custom entity config file with default values.
= Fixed bug which allowed players to bypass fishing's exploit prevention
= Fixed bug where FakeEntityDamageByEntityEvent wasn't being fired
@@ -40,12 +169,18 @@ Version 1.4.07-dev
= Fixed a bug where squid were not awarding XP.
= Fixed a bug where Combat XP was granted within 5 seconds for respawned players
= Fixed a bug where wrong feedback messages were being send when using a command on an offline player
= Fixed a bug where players were able to gain Herbalism XP in mine carts, even though Prevent_AFK_Leveling was enabled
= Fixed a bug where players would get hit by fireworks if they leveled up while in a boat
! Changed Fishing "Treasure Hunter" and "Magic Hunter" drop percentages
! Changed format of mod config files. (blocks.yml, tools.yml, armor.yml and entities.yml) **YOU WILL NEED TO UPDATE YOUR FILE TO THE NEW FORMAT**
! Changed format of treasures.yml. **YOU WILL NEED TO UPDATE YOUR FILE TO THE NEW FORMAT**
! Changed format of repair.vanilla.yml. **YOU WILL NEED TO UPDATE YOUR FILE TO THE NEW FORMAT**
! Changed default XP multiplier for repairing shears
! Changed "Shake" drops for Witches. They no longer drop water bottles, since they no longer drop them in Vanilla.
! Changed fishing exploit prevention, by default it will no longer send global sounds, effects and messages.
! Changed Hardcore modes, they will also subtract experience
! Changed various values to double in advanced.yml for the sake of consistency.
! Nerfed Fishing "Master Angler" (removed skill level based bonus) and also made the modifiers configurable
! Nerfed Archery damage to eliminate constant one-hit kills.
! Changed the way Repair hands out XP, also added config options to control Repair XP
! Changed Swords "Counter Attack" ability from passive to active. Blocking is required to activate.
@@ -53,6 +188,8 @@ Version 1.4.07-dev
! Vampirism can now be enabled without having Skill Death Penalty enabled
! Admin and Party chat prefixes are now customizable
! Changed the color of party leader names in Party chat
! Improved "Tree Feller" algorithm (Thanks Riking!)
! Improved AFK Acrobatics prevention mechanism
! Improved profile saving
! Improved partial name matcher
! Improved update checker
@@ -60,8 +197,11 @@ Version 1.4.07-dev
! Party item share category states are now saved when the server shuts down.
! When using "Super Breaker" or "Giga Driller" abilities extra tool durability is used (again)
! Mob healthbars are automatically disabled when the plugin "HealthBar" is found
! Massively improved scoreboard handling
! Reworked scoreboard configuration (config.yml) - **you will need to update**
- The /mmoupdate command has been removed. It is replaced by /mcconvert database
- Removed Abilities.Tools.Durability_Loss_Enabled, set Abilities.Tools.Durability_Loss to 0 to disable instead.
- Removed Skills.Fishing.Shake_UnlockLevel from advanced.yml, now using Skills.Fishing.Rank_Levels.Rank_1 instead.
- Removed SpoutPlugin support
Version 1.4.06

View File

@@ -2,10 +2,10 @@
## The RPG lovers mod
### Dev builds
Our latest development builds are available [here](http://ci.mcmmo.info).
Our latest development builds are available ~~[here](http://ci.mcmmo.info)~~. Unfortunately, the mcMMO site is down; a temporary dev build location is hosted [here](http://ci.ecocitycraft.com/job/mcMMO/).
### Brief Description
The goal of mcMMO is to take core Minecraft game mechanics and expand them into add an extensive and quality RPG experience. Everything in mcMMO has been carefully thought out and is constantly being improved upon. Currently, mcMMO adds thirteen unique skills to train and level in. Each of these skills is highly customizable through our configuration files, allowing server admins to tweak mcMMO to best suit the needs of his or her server. Know that the mcMMO team is dedicated to providing an ever-evolving experience, and that we carefully read all feedback and bug reports in order to evaluate and balance the mechanics of mcMMO in every update.
The goal of mcMMO is to take core Minecraft game mechanics and expand them into add an extensive and quality RPG experience. Everything in mcMMO has been carefully thought out and is constantly being improved upon. Currently, mcMMO adds fourteen unique skills to train and level in. Each of these skills is highly customizable through our configuration files, allowing server admins to tweak mcMMO to best suit the needs of his or her server. Know that the mcMMO team is dedicated to providing an ever-evolving experience, and that we carefully read all feedback and bug reports in order to evaluate and balance the mechanics of mcMMO in every update.
## About the Team
@@ -29,10 +29,17 @@ mcMMO is currently developed by a team of individuals from all over the world.
(https://github.com/TfT-02)
[![t00thpick1](http://www.gravatar.com/avatar/ee23c7794a0c40120c3474287c7bce06.png)]
(https://github.com/t00thpick1)
[![riking](https://1.gravatar.com/avatar/aca9f37e569ac3a63929920035a91ba4.png)]
(https://github.com/riking)
### Special thanks
[![EasyMFnE](https://www.gravatar.com/avatar/99c9a1fa3bbf957791ceac7b45daadb0.png)]
(https://github.com/EasyMFnE)
Added the Alchemy skill
## Compiling
mcMMO uses Maven 3 to manage dependancies, packaging, and shading of necessary classes; Maven 3 is required to compile mcMMO.
mcMMO uses Maven 3 to manage dependencies, packaging, and shading of necessary classes; Maven 3 is required to compile mcMMO.
The typical command used to build mcMMO is: `mvn clean package install`

439
extras/mods/1.6.x/LOTR.armor.yml Executable file
View File

@@ -0,0 +1,439 @@
# Lord of the Rings mod config by Dragyn
# Built against version [1.6.4] The Lord of the Rings Mod Public Beta 11.1
#
#
# Settings for Boots
###
Boots:
# Bronze
X12015:
Repairable: true
Repair_Material: X12004
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Orc
X12035:
Repairable: true
Repair_Material: X12036
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Gondorian
X12060:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Mithril
X12064:
Repairable: true
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Elven
X12088:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Warg
X12098:
Repairable: true
Repair_Material: X12094
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Dwarven
X12129:
Repairable: true
Repair_Material: X12112
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Galven
X12134:
Repairable: true
Repair_Material: X12130
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Uruk
X12161:
Repairable: true
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Wood Elf
X12176:
Repairable: true
Repair_Material: LEATHER
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Ancient
X12180:
Repairable: true
Repair_Material: X12179
Repair_Material_Data_Value: 3
Repair_Material_Quantity: 2
Durability: 500
# Rohirric
X12187:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Rangers
X12206:
Repairable: true
Repair_Material: LEATHER
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Dunlending
X12210:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Morgul
X12222:
Repairable: true
Repair_Material: X12217
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
#
# Settings for Chestplates
###
Chestplates:
# Bronze
X12013:
Repairable: true
Repair_Material: X12004
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Orc
X12033:
Repairable: true
Repair_Material: X12036
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Gondorian
X12058:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Mithril
X12062:
Repairable: true
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Elven
X12086:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Warg
X12096:
Repairable: true
Repair_Material: X12094
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Dwarven
X12127:
Repairable: true
Repair_Material: X12112
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Galven
X12132:
Repairable: true
Repair_Material: X12130
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Uruk
X12159:
Repairable: true
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Wood Elf
X12174:
Repairable: true
Repair_Material: LEATHER
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Ancient
X12178:
Repairable: true
Repair_Material: X12179
Repair_Material_Data_Value: 3
Repair_Material_Quantity: 2
Durability: 500
# Rohirric
X12185:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Rangers
X12204:
Repairable: true
Repair_Material: LEATHER
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Dunlending
X12208:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Morgul
X12220:
Repairable: true
Repair_Material: X12217
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
#
# Settings for Helmets
###
Helmets:
# Bronze
X12012:
Repairable: true
Repair_Material: X12004
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Orc
X12032:
Repairable: true
Repair_Material: X12036
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Gondorian
X12057:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Mithril
X12061:
Repairable: true
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Elven
X12085:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Warg
X12095:
Repairable: true
Repair_Material: X12094
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Dwarven
X12126:
Repairable: true
Repair_Material: X12112
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Galven
X12131:
Repairable: true
Repair_Material: X12130
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Uruk
X12158:
Repairable: true
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Wood Elf
X12173:
Repairable: true
Repair_Material: LEATHER
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Ancient
X12177:
Repairable: true
Repair_Material: X12179
Repair_Material_Data_Value: 3
Repair_Material_Quantity: 2
Durability: 500
# Rohirric
X12184:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Rangers
X12203:
Repairable: true
Repair_Material: LEATHER
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Dunlending
X12207:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Morgul
X12219:
Repairable: true
Repair_Material: X12217
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
#
# Settings for Leggings
###
Leggings:
# Bronze
X12014:
Repairable: true
Repair_Material: X12004
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Orc
X12034:
Repairable: true
Repair_Material: X12036
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Gondorian
X12059:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Mithril
X12063:
Repairable: true
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Elven
X12087:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Warg
X12097:
Repairable: true
Repair_Material: X12094
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Dwarven
X12128:
Repairable: true
Repair_Material: X12112
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Galven
X12133:
Repairable: true
Repair_Material: X12130
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Uruk
X12160:
Repairable: true
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Wood Elf
X12175:
Repairable: true
Repair_Material: LEATHER
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Ancient
X12179:
Repairable: true
Repair_Material: X12179
Repair_Material_Data_Value: 3
Repair_Material_Quantity: 2
Durability: 500
# Rohirric
X12186:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Rangers
X12205:
Repairable: true
Repair_Material: LEATHER
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Dunlending
X12209:
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Morgul
X12221:
Repairable: true
Repair_Material: X12217
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500

211
extras/mods/1.6.x/LOTR.blocks.yml Executable file
View File

@@ -0,0 +1,211 @@
# Lord of the Rings mod config by Skuli (Updated by Dragyn)
# Built against version [1.6.4] The Lord of the Rings Mod Public Beta 11.1
#
# Settings for Custom Excavation Blocks
###
Excavation:
Block_1|0:
XP_Gain: 99
Double_Drops_Enabled: true
Block_2|0:
XP_Gain: 99
Double_Drops_Enabled: true
#
# Settings for Custom Herbalism Blocks
###
Herbalism:
# Shireheather
X1813:
XP_Gain: 100
Double_Drops_Enabled: true
# Simbelmyne
X1805:
XP_Gain: 100
Double_Drops_Enabled: true
# Asphodel
X1895:
XP_Gain: 100
Double_Drops_Enabled: true
# Bluebell
X1867:
XP_Gain: 100
Double_Drops_Enabled: true
# Clover
X1873:
XP_Gain: 10
Double_Drops_Enabled: false
# Dead Marsh Plant
X1886:
XP_Gain: 10
Double_Drops_Enabled: false
# DwarfWort
X1902:
XP_Gain: 100
Double_Drops_Enabled: true
# Elanor
X1833:
XP_Gain: 100
Double_Drops_Enabled: true
# Lettuce Crop
X1830:
XP_Gain: 100
Double_Drops_Enabled: true
# Morgul Shroom
X1870:
XP_Gain: 100
Double_Drops_Enabled: true
# Niphredil
X1834:
XP_Gain: 100
Double_Drops_Enabled: true
# Pipeweed Crop
X1823:
XP_Gain: 100
Double_Drops_Enabled: true
# Pipeweed Plant
X1822:
XP_Gain: 100
Double_Drops_Enabled: true
#
# Settings for Custom Mining Blocks
###
Mining:
# Mithril
X1803:
XP_Gain: 2000
Double_Drops_Enabled: false
Is_Ore: true
# Naurite
X1818:
XP_Gain: 150
Double_Drops_Enabled: false
Is_Ore: false
#Glowstone Ore
X1859:
XP_Gain: 30
Double_Drops_Enabled: false
Is_Ore: false
# Remains
X1885:
XP_Gain: 1800
Double_Drops_Enabled: false
Is_Ore: false
# Gulduril
X1887:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Ore: false
# Quendite
X1846:
XP_Gain: 150
Double_Drops_Enabled: false
Is_Ore: false
# MorgulIron
X1819:
XP_Gain: 25
Double_Drops_Enabled: true
Is_Ore: false
# Rohan Rock
X180|2:
XP_Gain: 30
Double_Drops_Enabled: false
Is_Ore: false
#Gondor Stone
X180|1:
XP_Gain: 30
Double_Drops_Enabled: false
Is_Ore: false
# Mordor Stone
X180|0:
XP_Gain: 30
Double_Drops_Enabled: false
Is_Ore: false
#
# Settings for Custom Woodcutting Blocks
###
Woodcutting:
# Shire Pine
X1806|0:
XP_Gain: 90
Double_Drops_Enabled: true
Is_Log: true
# Mallorn
X1806|1:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
# Apple
X1860|0:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
# Pear
X1860|1:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
# Cherry
X1860|2:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
# Mirkwood
X1806|2:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
# Charred
X1806|3:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
# Lebethron
X1896|0:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
# Beech
X1896|1:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
#
# Settings for Custom Ability Blocks
# (These blocks don't trigger abilities)
###
Ability_Blocks:
Block_1|0:
Block_2|0:

700
extras/mods/1.6.x/LOTR.tools.yml Executable file
View File

@@ -0,0 +1,700 @@
# Lord of the Rings mod config by Skuli (Updated by Dragyn)
# Built against version [1.6.4] The Lord of the Rings Mod Public Beta 11.1
Axes:
#DwarvenThrowingAxe
X12146:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12112
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 451
#UrukWarhammer
X12156:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 391
#Gondorian Warhammer
X12140:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: X12112
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 281
#UrukBattleaxe
X12155:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 391
#MithrilBattleaxe
X12138:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 2479
#MithrilWarhamer
X12139:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 2479
#OrcWarhammer
X12125:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12036
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 261
#Dwarven Warhammer
X12120:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12112
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 451
#DwarvenZbattleaxe
X12119:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12112
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 451
#BronzeAxe
X12009:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12004
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 197
#MithrilAxe
X12050:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 2479
#MallornAxe
X12075:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X1801
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 121
#Elven Axe
X12080:
XP_Modifer: 2
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: X12112
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 313
#DwarvenAxe
X12115:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12112
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 450
#OrcAxe
X12123:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12036
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 261
#UrukAxe
X12150:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 391
Bows:
#ElvenBow
X12093:
XP_Modifer: 2
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 9
Durability: 485
#mallornbow
X12084:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X1801
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 417
#orcBow
X12099:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12036
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 441
#UrukCrossbow
X12163:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 471
#MithrilCrossbow
X12171:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 1761
#IronCrossbow
X12170:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 9
Durability: 357
#BowofMirkwood
X12177:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: X1806
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 3
Durability: 417
Hoes:
#BronzeHoe
X12011:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12004
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 197
#MithrilHoe
X12052:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 2479
#MallornHoe
X12077:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X1801
Repair_Material_Data_Value: 1
Repair_Material_Quantity: 2
Durability: 121
#CopperHoe
X26511:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X26507
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 180
#ElvenHoe
X12082:
XP_Modifer: 2
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: X12082
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 313
#DwarvenHoe
X12117:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X26507
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 180
Pickaxes:
#MEBronzePickaxe
X12008:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12004
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 197
#MithrilPixkaxe
X12049:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 2479
#MallornPickaxe
X12074:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X1801
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 121
#ElvenPickaxe
X12079:
XP_Modifer: 2
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 313
#DwarvenPickaxe
X12114:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12112
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 451
#UrukPickaxe
X12149:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 391
#OrcPickaxe
X12122:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12036
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 261
Shovels:
#BronzeShovel
X12007:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12004
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 197
#MithrilShovel
X12048:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 2479
#MallornShovel
X12073:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X1801
Repair_Material_Data_Value: 1
Repair_Material_Quantity: 1
Durability: 121
#ElvenShovel
X12078:
XP_Modifer: 2
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: X12082
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 313
#DwarvenShovel
X12113:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12112
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 451
#UrukShovel
X12148:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 391
#OrcShovel
X12121:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12036
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 261
Swords:
#Uruk Dagger
X12153:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 313
#Poisoned urukd agger
X12154:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 313
#Uruk Spear
X12157:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 391
#Rohirric Sword
X12181:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 251
#Rohirric Dagger
X12182:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 201
#Rohirric Spear
X12183:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 251
#Dunlending Spear
X12212:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 251
#Uruk Scimitar
X12151:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12147
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 391
#Mithril Dagger
X12137:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 1983
#Iron Dagger
X12136:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 201
#Dwarven Dagger
X12118:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12112
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 361
#Dwarven Sword
X12116:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12112
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 451
#Elven Sword
X12081:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 313
#Elven Spear
X12083:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 313
#Anduril
X12070:
XP_Modifer: 1
Ability_Enabled: true
Tier: 4
Repairable: false
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 313
#Mallorn Sword
X12076:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X1801
Repair_Material_Data_Value: 1
Repair_Material_Quantity: 2
Durability: 121
#Mithril Spear
X12069:
XP_Modifer: 1
Ability_Enabled: true
Tier: 4
Repairable: true
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 2479
#Iron Spear
X12068:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: IRON_INGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 251
#Orc Spear
X12066:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12036
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 261
#Bronze Spear
X12067:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12004
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 197
#Gondor Spear
X12065:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 281
#Gondor Sword
X12056:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: false
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 281
#Orc Scimitar
X12031:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12036
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 261
#Steel Sword
X26862:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X26857
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 751
#Bronze Sword
X12010:
XP_Modifer: 1
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X12004
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 197
#Mithril Sword
X12051:
XP_Modifer: 1
Ability_Enabled: true
Tier: 4
Repairable: true
Repair_Material: X12006
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 2479

View File

@@ -0,0 +1,14 @@
# Config wrote by M1cr0man
# Up to date as of Advanced Genetics 1.4.3
Bows:
# Genetic
X31179:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X31197
Repair_Material_Pretty_Name: "Cell"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 1501

View File

@@ -0,0 +1,9 @@
# Config wrote by M1cr0man
# Possibly incomplete. Only covers ores
# Up to date as of Applied Energistics rv14-finale3
Mining:
# Certus Quartz Ore
X4076|0:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true

View File

@@ -0,0 +1,65 @@
# Config wrote by M1cr0man
# Up to date as of Applied Energistics rv14-finale3
Axes:
# Quartz
X4365:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X4362
Repair_Material_Pretty_Name: "Certus Quartz"
Repair_Material_Data_Value: 6
Repair_Material_Quantity: 3
Durability: 250
Hoes:
# Quartz
X4366:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X4362
Repair_Material_Pretty_Name: "Certus Quartz"
Repair_Material_Data_Value: 6
Repair_Material_Quantity: 2
Pickaxes:
# Quartz
X4368:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X4362
Repair_Material_Pretty_Name: "Certus Quartz"
Repair_Material_Data_Value: 6
Repair_Material_Quantity: 3
Durability: 250
Shovels:
# Quartz
X4367:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X4362
Repair_Material_Pretty_Name: "Certus Quartz"
Repair_Material_Data_Value: 6
Repair_Material_Quantity: 1
Durability: 750
Swords:
# Quartz
X4369:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X4362
Repair_Material_Pretty_Name: "Certus Quartz"
Repair_Material_Data_Value: 6
Repair_Material_Quantity: 2
Durability: 250

View File

@@ -0,0 +1,9 @@
# Config wrote by M1cr0man
# Possibly incomplete. Only covers ores
# Up to date as of Big Reactors 0.3.4A2
Mining:
# Yellorite
X1750|0:
XP_Gain: 300
Double_Drops_Enabled: true
Is_Ore: true

View File

@@ -0,0 +1,77 @@
# Config wrote by M1cr0man
# Up to date as of BoP 1.2.1.434
Boots:
# Wading
X21269:
Repairable: false
Durability: 9999
# Muddy
X21283:
Repairable: true
Repair_Material: X21263
Repair_Material_Pretty_Name: "Mud Ball"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 4
Durability: 26
# Amethyst
X21293:
Repairable: true
Repair_Material: X21264
Repair_Material_Pretty_Name: "Amethyst"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 4
Durability: 520
Chestplates:
# Muddy
X21281:
Repairable: true
Repair_Material: X21263
Repair_Material_Pretty_Name: "Mud Ball"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 8
Durability: 32
# Amethyst
X21291:
Repairable: true
Repair_Material: X21264
Repair_Material_Pretty_Name: "Amethyst"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 8
Durability: 640
Helmets:
# Muddy
X21280:
Repairable: true
Repair_Material: X21263
Repair_Material_Pretty_Name: "Mud Ball"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 5
Durability: 22
# Amethyst
X21290:
Repairable: true
Repair_Material: X21264
Repair_Material_Pretty_Name: "Amethyst"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 5
Durability: 440
Leggings:
# Muddy
X21280:
Repairable: true
Repair_Material: X21263
Repair_Material_Pretty_Name: "Mud Ball"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 7
Durability: 30
# Amethyst
X21290:
Repairable: true
Repair_Material: X21264
Repair_Material_Pretty_Name: "Amethyst"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 7
Durability: 600

View File

@@ -0,0 +1,44 @@
# Config wrote by M1cr0man
# Incomplete! Only covers ores
# Up to date as of BoP 1.2.1.434
Mining:
# Red Rock
X162|0:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
# Amethyst
X1921|0:
XP_Gain: 200
Double_Drops_Enabled: true
Is_Ore: true
# Ruby
X1921|2:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Peridot
X1921|4:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Topaz
X1921|6:
XP_Gain: 200
Double_Drops_Enabled: true
Is_Ore: true
# Tanzanite
X1921|8:
XP_Gain: 200
Double_Drops_Enabled: true
Is_Ore: true
# Malachite
X1921|10:
XP_Gain: 200
Double_Drops_Enabled: true
Is_Ore: true
# Sapphire
X1921|12:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true

View File

@@ -0,0 +1,121 @@
# Config wrote by M1cr0man
# Up to date as of BoP 1.2.1.434
Axes:
# Amethyst
X21287:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 4
Repairable: true
Repair_Material: X21264
Repair_Material_Pretty_Name: "Amethyst"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 2013
# Muddy
X21277:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X21263
Repair_Material_Pretty_Name: "Mud Ball"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 32
Hoes:
# Amethyst
X21288:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 4
Repairable: true
Repair_Material: X21264
Repair_Material_Pretty_Name: "Amethyst"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 2013
# Muddy
X21278:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X21263
Repair_Material_Pretty_Name: "Mud Ball"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 32
Pickaxes:
# Amethyst
X21286:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 4
Repairable: true
Repair_Material: X21264
Repair_Material_Pretty_Name: "Amethyst"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 2013
# Muddy
X21276:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X21263
Repair_Material_Pretty_Name: "Mud Ball"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 32
Shovels:
# Amethyst
X21285:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 4
Repairable: true
Repair_Material: X21264
Repair_Material_Pretty_Name: "Amethyst"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 2013
# Muddy
X21275:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X21263
Repair_Material_Pretty_Name: "Mud Ball"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 32
Swords:
# Amethyst
X21284:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 4
Repairable: true
Repair_Material: X21264
Repair_Material_Pretty_Name: "Amethyst"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 2013
# Muddy
X21274:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X21263
Repair_Material_Pretty_Name: "Mud Ball"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 32

View File

@@ -0,0 +1,31 @@
# Config wrote by M1cr0man
# Up to date as of Emasher Resource 1.2.3.5
Boots:
# Hemp
X9301:
Repairable: true
Repair_Material: X9291
Repair_Material_Pretty_Name: "Hemp"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 4
Durability: 65
Chestplates:
# Hemp
X9299:
Repairable: true
Repair_Material: X9291
Repair_Material_Pretty_Name: "Hemp"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 8
Durability: 80
Leggings:
# Hemp
X9300:
Repairable: true
Repair_Material: X9291
Repair_Material_Pretty_Name: "Hemp"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 7
Durability: 75

View File

@@ -0,0 +1,44 @@
# Config wrote by M1cr0man
# Possibly incomplete. Only covers ores
# Up to date as of Emasher Resource 1.2.3.5
Mining:
# Bauxite
X1565|0:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true
# Cassiterite
X1565|1:
XP_Gain: 175
Double_Drops_Enabled: true
Is_Ore: true
# Emery
X1565|2:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Galena
X1565|3:
XP_Gain: 300
Double_Drops_Enabled: true
Is_Ore: true
# Native Copper
X1565|4:
XP_Gain: 175
Double_Drops_Enabled: true
Is_Ore: true
# Petlandite
X1565|5:
XP_Gain: 300
Double_Drops_Enabled: true
Is_Ore: true
# Ruby
X1565|6:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Sapphire
X1565|7:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true

View File

@@ -0,0 +1,182 @@
# Config created by Dragyn
# Created For ExtrabiomesXL-universal-1.6.4-3.14.5
#
# Settings for Custom Excavation Blocks
###
Excavation:
# Quicksand
X2214|0:
XP_Gain: 40
Double_Drops_Enabled: true
#
# Settings for Custom Herbalism Blocks
###
Herbalism:
# Cattails
X2201|0:
XP_Gain: 30
Double_Drops_Enabled: true
# Hydrangea
X2202|1:
XP_Gain: 100
Double_Drops_Enabled: true
# Buttercups
X2202|2:
XP_Gain: 100
Double_Drops_Enabled: true
# Lavender
X2202|3:
XP_Gain: 100
Double_Drops_Enabled: true
# Tiny Cactus
X2202|4:
XP_Gain: 30
Double_Drops_Enabled: true
# Toadstool
X2202|6:
XP_Gain: 150
Double_Drops_Enabled: true
# Calla Lillies
X2202|7:
XP_Gain: 100
Double_Drops_Enabled: true
#
# Settings for Custom Mining Blocks
###
Mining:
X254|0:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X254|1:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
#
# Settings for Custom Woodcutting Blocks
###
Woodcutting:
# Fir
X2208|0:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
# Acacia
X2208|1:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
# Cypress
X2208|2:
XP_Gain: 90
Double_Drops_Enabled: true
Is_Log: true
# Japanese Maple
X2208|3:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
# Redwood Quarter
X2209|0:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
X2211|0:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
X2212|0:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
X2213|0:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
# Fir Quarters
X2209|1:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X2211|1:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
X2212|1:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X2213|1:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
# Oak Quarters
X2209|2:
XP_Gain: 70
Double_Drops_Enabled: true
Is_Log: true
X2211|2:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
X2212|2:
XP_Gain: 70
Double_Drops_Enabled: true
Is_Log: true
X2213|2:
XP_Gain: 70
Double_Drops_Enabled: true
Is_Log: true
# Acacia
X2209|1:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
# Cypress
X2209|2:
XP_Gain: 90
Double_Drops_Enabled: true
Is_Log: true
# Bald Cypress Quarter
X2225|0:
XP_Gain: 90
Double_Drops_Enabled: true
Is_Log: true
# Bald Cypress Elbow
X2227|0:
XP_Gain: 90
Double_Drops_Enabled: true
Is_Log: true
# Bald Cypress Log
X2231|2:
XP_Gain: 90
Double_Drops_Enabled: true
Is_Log: true
# Rainbow Eucalyptus
X2228|0:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
X2229|0:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
X2231|0:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
# Autumn Log
X2231|1:
XP_Gain: 90
Double_Drops_Enabled: true
Is_Log: true
# Sakura Log
X2238|0:
XP_Gain: 90
Double_Drops_Enabled: true
Is_Log: true

View File

@@ -0,0 +1,54 @@
# Config wrote by M1cr0man
# Up to date as of Extra Utilities 1.0.3c
Axes:
# Healing
X10264:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 4
Repairable: true
Repair_Material: X10258
Repair_Material_Pretty_Name: "Unstable Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 1561
Hoes:
# Reversing
X10265:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 4
Repairable: true
Repair_Material: X10258
Repair_Material_Pretty_Name: "Unstable Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 1561
Pickaxes:
# Destruction
X10263:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 4
Repairable: false
Durability: 6244
Shovels:
# Erosion
X10262:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 4
Repairable: false
Durability: 6244
Swords:
# Etheric
X10261:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 4
Repairable: false
Durability: 1561

View File

@@ -0,0 +1,9 @@
# Config wrote by M1cr0man
# Possibly incomplete. Only covers ores
# Up to date as of Factorization 0.8.34
Mining:
# Dark Iron Ore
X1004|0:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true

View File

@@ -0,0 +1,19 @@
# Config wrote by M1cr0man
# Possibly incomplete. Only covers ores
# Up to date as of Forestry 2.3.1.1
Mining:
# Apatite
X1398|0:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Ore: true
# Copper
X1398|1:
XP_Gain: 175
Double_Drops_Enabled: true
Is_Ore: true
# Tin
X1398|2:
XP_Gain: 175
Double_Drops_Enabled: true
Is_Ore: true

View File

@@ -0,0 +1,27 @@
# Config wrote by M1cr0man
# Up to date as of Forestry 2.3.1.1
Pickaxes:
# Survivalist
X13261:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X5261
Repair_Material_Pretty_Name: "Bronze Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 200
Shovels:
# Survivalist
X13264:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X5261
Repair_Material_Pretty_Name: "Bronze Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 200

View File

@@ -0,0 +1,71 @@
# Config created by Dragyn
# Created For Galacticraft-1.6.4-2.0.7.904 and Galacticraft-Planets-1.6.4-2.0.7.904
#
# Settings for Boots
###
Boots:
# Heavy Duty
X10149:
Repairable: true
Repair_Material: X10150
Repair_Material_Data_Value: 9
Repair_Material_Quantity: 2
Durability: 500
X10171:
Repairable: true
Repair_Material: X10161
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 2
Durability: 999
#
# Settings for Chestplates
###
Chestplates:
# Heavy Duty
X10147:
Repairable: true
Repair_Material: X10150
Repair_Material_Data_Value: 9
Repair_Material_Quantity: 2
Durability: 500
X10169:
Repairable: true
Repair_Material: X10161
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 2
Durability: 999
#
# Settings for Helmets
###
Helmets:
# Heavy Duty
X10146:
Repairable: true
Repair_Material: X10150
Repair_Material_Data_Value: 9
Repair_Material_Quantity: 2
Durability: 500
X10168:
Repairable: true
Repair_Material: X10161
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 2
Durability: 999
#
# Settings for Leggings
###
Leggings:
# Heavy Duty
X10148:
Repairable: true
Repair_Material: X10150
Repair_Material_Data_Value: 9
Repair_Material_Quantity: 2
Durability: 500
X10170:
Repairable: true
Repair_Material: X10161
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 2
Durability: 999

View File

@@ -0,0 +1,98 @@
# Config created by Dragyn
# Created For Galacticraft-1.6.4-2.0.7.904 and Galacticraft-Planets-1.6.4-2.0.7.904
#
# Settings for Custom Excavation Blocks
###
Excavation:
# Dirt
X3347|3:
XP_Gain: 40
Double_Drops_Enabled: true
Block_2|0:
XP_Gain: 99
Double_Drops_Enabled: true
#
# Settings for Custom Mining Blocks
###
Mining:
# Copper Ore
X3347|0:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
X3372|5:
XP_Gain: 450
Double_Drops_Enabled: true
Is_Ore: true
X3390|0:
XP_Gain: 550
Double_Drops_Enabled: true
Is_Ore: true
# Tin Ore
X3347|1:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
X3372|6:
XP_Gain: 450
Double_Drops_Enabled: true
Is_Ore: true
X3390|1:
XP_Gain: 550
Double_Drops_Enabled: true
Is_Ore: true
# Aluminum Ore
X3372|7:
XP_Gain: 450
Double_Drops_Enabled: true
Is_Ore: true
# Silicon Ore
X3372|8:
XP_Gain: 450
Double_Drops_Enabled: true
Is_Ore: true
# Cheese Ore
X3347|2:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Iron Ore
X3390|3:
XP_Gain: 550
Double_Drops_Enabled: true
Is_Ore: true
# Desh Ore
X3390|2:
XP_Gain: 600
Double_Drops_Enabled: true
Is_Ore: true
# Moon Stone
X3347|4:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
# Moon Turf
X3347|5:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
# Mars Cobblestone
X3390|4:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
# Mars Rock/Stone
X3390|5:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X3390|6:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X3390|9:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false

View File

@@ -0,0 +1,123 @@
# Config created by Dragyn
# Created For Galacticraft-1.6.4-2.0.7.904 and Galacticraft-Planets-1.6.4-2.0.7.904
#
# Settings for Axes
###
Axes:
# Heavy Duty
X10145:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X10150
Repair_Material_Data_Value: 9
Repair_Material_Quantity: 2
Durability: 500
# Desh
X10167:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: 10161
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 2
Durability: 1000
#
# Settings for Hoes
###
Hoes:
# Heavy Duty
X10144:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X10150
Repair_Material_Data_Value: 9
Repair_Material_Quantity: 2
Durability: 500
# Desh
X10166:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: 10161
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 2
Durability: 1000
#
# Settings for Pickaxes
###
Pickaxes:
# Heavy Duty
X10142:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X10150
Repair_Material_Data_Value: 9
Repair_Material_Quantity: 2
Durability: 500
# Desh
X10164:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: 10161
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 2
Durability: 1000
#
# Settings for Shovels
###
Shovels:
# Heavy Duty
X10143:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X10150
Repair_Material_Data_Value: 9
Repair_Material_Quantity: 2
Durability: 500
# Desh
X10165:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: 10161
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 2
Durability: 1000
#
# Settings for Swords
###
Swords:
# Heavy Duty
X10141:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 4
Repairable: true
Repair_Material: X10150
Repair_Material_Data_Value: 9
Repair_Material_Quantity: 2
Durability: 500
# Desh
X10163:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: 10161
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 2
Durability: 1000

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,185 @@
# Config created by Dragyn
# Created For Metallurgy-1.6.4-3.3.1
#
#
# Settings for Custom Mining Blocks
###
Mining:
# Copper
X900|0:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true
# Tin
X900|1:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true
# Zinc
X902|0:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true
# Silver
X902|1:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Platinum
X902|3:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# NETHER ORES
# Ignatius
X903|0:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true
# Shadow Iron
X903|1:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true
# Lemurite
X903|2:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true
# Midasium
X903|3:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true
# Vyroxeres
X903|4:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true
# Ceruclase
X903|5:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true
# Alduorite
X903|6:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true
# Kalendrite
X903|7:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true
# Vulcanite
X903|8:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Sanguinite
X903|9:
XP_Gain: 450
Double_Drops_Enabled: true
Is_Ore: true
# Manganese
X900|2:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true
# Eximite
X900|5:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Meutoite
X900|6:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Sulfur
X905|7:
XP_Gain: 150
Double_Drops_Enabled: true
Is_Ore: false
# Phosphorite
X905|8:
XP_Gain: 150
Double_Drops_Enabled: true
Is_Ore: false
# Saltpeter
X905|9:
XP_Gain: 150
Double_Drops_Enabled: true
Is_Ore: false
# Magnesium
X905|10:
XP_Gain: 150
Double_Drops_Enabled: true
Is_Ore: false
# Bitumen
X905|11:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Ore: false
# Potash
X905|12:
XP_Gain: 150
Double_Drops_Enabled: true
Is_Ore: false
# Prometheum
X906|0:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Deep Iron
X906|1:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Infuscolium
X906|2:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Oureclase
X906|4:
XP_Gain: 650
Double_Drops_Enabled: true
Is_Ore: true
# Astral Silver
X906|5:
XP_Gain: 650
Double_Drops_Enabled: true
Is_Ore: true
# Carmot
X906|6:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Mithril
X906|7:
XP_Gain: 750
Double_Drops_Enabled: true
Is_Ore: true
# Rubracium
X906|8:
XP_Gain: 800
Double_Drops_Enabled: true
Is_Ore: true
# Orichalcum
X906|11:
XP_Gain: 900
Double_Drops_Enabled: true
Is_Ore: true
# Adamantine
X906|13:
XP_Gain: 1000
Double_Drops_Enabled: true
Is_Ore: true
# Atlarus
X906|14:
XP_Gain: 1000
Double_Drops_Enabled: true
Is_Ore: true

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,11 @@
# Config wrote by M1cr0man
# Up to date as of Minefactory Reloaded 2.7.9 Final
Boots:
# Plastic
X12306:
Repairable: true
Repair_Material: X12249
Repair_Material_Pretty_Name: "Plastic Sheets"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 4
Durability: 39

View File

@@ -0,0 +1,41 @@
# Config wrote by M1cr0man
# Up to date as of Natura 2.1.14
Boots:
# Impskin
X12712:
Repairable: true
Repair_Material: X12660
Repair_Material_Pretty_Name: "Imp Leather"
Repair_Material_Data_Value: 6
Repair_Material_Quantity: 4
Durability: 429
Chestplates:
# Impskin
X12710:
Repairable: true
Repair_Material: X12660
Repair_Material_Pretty_Name: "Imp Leather"
Repair_Material_Data_Value: 6
Repair_Material_Quantity: 8
Durability: 528
Helmets:
# Impskin
X12709:
Repairable: true
Repair_Material: X12660
Repair_Material_Pretty_Name: "Imp Leather"
Repair_Material_Data_Value: 6
Repair_Material_Quantity: 5
Durability: 363
Leggings:
# Impskin
X12709:
Repairable: true
Repair_Material: X12660
Repair_Material_Pretty_Name: "Imp Leather"
Repair_Material_Data_Value: 6
Repair_Material_Quantity: 7
Durability: 495

View File

@@ -0,0 +1,272 @@
# Config wrote by M1cr0man
# Up to date as of Natura 2.1.14
Axes:
# Bloodwood
X12685:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Bloodwood Planks"
Repair_Material_Data_Value: 4
Repair_Material_Quantity: 3
Durability: 350
# Darkwood
X12689:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Darkwood Planks"
Repair_Material_Data_Value: 11
Repair_Material_Quantity: 3
Durability: 131
# Fusewood
X12693:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Fusewood Planks"
Repair_Material_Data_Value: 12
Repair_Material_Quantity: 3
Durability: 250
# Ghostwood
X12681:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Ghostwood Planks"
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 3
Durability: 59
# Quartz
X12697:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: QUARTZ_BLOCK
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 131
Bows:
# Bloodwood
X12706:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X12677
Repair_Material_Pretty_Name: "Bloodwood Stick"
Repair_Material_Data_Value: 4
Repair_Material_Quantity: 3
Durability: 1501
# Darkwood
X12707:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X12677
Repair_Material_Pretty_Name: "Darkwood Stick"
Repair_Material_Data_Value: 11
Repair_Material_Quantity: 3
Durability: 162
# Fusewood
X12708:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X12677
Repair_Material_Pretty_Name: "Fusewood Stick"
Repair_Material_Data_Value: 12
Repair_Material_Quantity: 3
Durability: 28
# Ghostwood
X12705:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X12677
Repair_Material_Pretty_Name: "Ghostwood Stick"
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 3
Durability: 384
Pickaxes:
# Bloodwood
X12683:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Bloodwood Planks"
Repair_Material_Data_Value: 4
Repair_Material_Quantity: 3
Durability: 350
# Darkwood
X12687:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Darkwood Planks"
Repair_Material_Data_Value: 11
Repair_Material_Quantity: 3
Durability: 131
# Fusewood
X12691:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Fusewood Planks"
Repair_Material_Data_Value: 12
Repair_Material_Quantity: 3
Durability: 250
# Ghostwood
X12679:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Ghostwood Planks"
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 3
Durability: 59
# Quartz
X12695:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: QUARTZ_BLOCK
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 3
Durability: 131
Shovels:
# Bloodwood
X12684:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Bloodwood Planks"
Repair_Material_Data_Value: 4
Repair_Material_Quantity: 1
Durability: 350
# Darkwood
X12688:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Darkwood Planks"
Repair_Material_Data_Value: 11
Repair_Material_Quantity: 1
Durability: 131
# Fusewood
X12692:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Fusewood Planks"
Repair_Material_Data_Value: 12
Repair_Material_Quantity: 1
Durability: 250
# Ghostwood
X12680:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Ghostwood Planks"
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 1
Durability: 59
# Quartz
X12696:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: QUARTZ_BLOCK
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 1
Durability: 131
Swords:
# Bloodwood
X12682:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Bloodwood Planks"
Repair_Material_Data_Value: 4
Repair_Material_Quantity: 2
Durability: 350
# Darkwood
X12686:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Darkwood Planks"
Repair_Material_Data_Value: 11
Repair_Material_Quantity: 2
Durability: 131
# Fusewood
X12690:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Fusewood Planks"
Repair_Material_Data_Value: 12
Repair_Material_Quantity: 2
Durability: 250
# Ghostwood
X12678:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: X3262
Repair_Material_Pretty_Name: "Ghostwood Planks"
Repair_Material_Data_Value: 2
Repair_Material_Quantity: 2
Durability: 59
# Quartz
X12694:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: true
Repair_Material: QUARTZ_BLOCK
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 131

View File

@@ -0,0 +1,29 @@
# Config wrote by M1cr0man
# Possibly incomplete. Only covers ores
# Up to date as of Project Red 4.3.5.30
Mining:
# Ruby
X2130|0:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Sapphire
X2130|1:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Peridot
X2130|2:
XP_Gain: 350
Double_Drops_Enabled: true
Is_Ore: true
# Marble
X2131|0:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
# Basalt
X2131|3:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false

View File

@@ -0,0 +1,176 @@
# Config wrote by M1cr0man
# Up to date as of Project Red 4.3.5.30
Axes:
# Ruby
X9353:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Ruby"
Repair_Material_Data_Value: 37
Repair_Material_Quantity: 3
Durability: 500
# Sapphire
X9354:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Sapphire"
Repair_Material_Data_Value: 38
Repair_Material_Quantity: 3
Durability: 500
# Peridot
X9355:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Peridot"
Repair_Material_Data_Value: 39
Repair_Material_Quantity: 3
Durability: 500
Hoes:
# Ruby
X9356:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Ruby"
Repair_Material_Data_Value: 37
Repair_Material_Quantity: 2
Durability: 500
# Sapphire
X9357:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Sapphire"
Repair_Material_Data_Value: 38
Repair_Material_Quantity: 2
Durability: 500
# Peridot
X9358:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Peridot"
Repair_Material_Data_Value: 39
Repair_Material_Quantity: 2
Durability: 500
Pickaxes:
# Ruby
X9359:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Ruby"
Repair_Material_Data_Value: 37
Repair_Material_Quantity: 3
Durability: 500
# Sapphire
X9360:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Sapphire"
Repair_Material_Data_Value: 38
Repair_Material_Quantity: 3
Durability: 500
# Peridot
X9361:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Peridot"
Repair_Material_Data_Value: 39
Repair_Material_Quantity: 3
Durability: 500
Shovels:
# Ruby
X9362:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Ruby"
Repair_Material_Data_Value: 37
Repair_Material_Quantity: 1
Durability: 500
# Sapphire
X9363:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Sapphire"
Repair_Material_Data_Value: 38
Repair_Material_Quantity: 1
Durability: 500
# Peridot
X9364:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Peridot"
Repair_Material_Data_Value: 39
Repair_Material_Quantity: 1
Durability: 500
Swords:
# Ruby
X9365:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Ruby"
Repair_Material_Data_Value: 37
Repair_Material_Quantity: 2
Durability: 500
# Sapphire
X9366:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Sapphire"
Repair_Material_Data_Value: 38
Repair_Material_Quantity: 2
Durability: 500
# Peridot
X9368:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X9281
Repair_Material_Pretty_Name: "Peridot"
Repair_Material_Data_Value: 39
Repair_Material_Quantity: 2
Durability: 500

View File

@@ -0,0 +1,49 @@
# Config wrote by Dragyn, updated by M1cr0man
# Up to date as of Railcraft 8.4.0.0
Boots:
# Steel
X7758:
Repairable: true
Repair_Material: X7796
Repair_Material_Pretty_Name: "Steel Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 4
Durability: 325
Chestplates:
# Steel
X7761:
Repairable: true
Repair_Material: X7796
Repair_Material_Pretty_Name: "Steel Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 8
Durability: 400
Helmets:
# Steel
X7759:
Repairable: true
Repair_Material: X7796
Repair_Material_Pretty_Name: "Steel Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 5
Durability: 275
Leggings:
# Steel
X7760:
Repairable: true
Repair_Material: X7796
Repair_Material_Pretty_Name: "Steel Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 7
Durability: 375
# Overalls
X7757:
Repairable: true
Repair_Material: WOOL
Repair_Material_Pretty_Name: "Light Blue Wool"
Repair_Material_Data_Value: 3
Repair_Material_Quantity: 7
Durability: 75

View File

@@ -0,0 +1,103 @@
# Config created by Dragyn
# Created For Railcraft_1.6.2-8.1.0.0
#
#
# Settings for Custom Mining Blocks
###
Mining:
# Abyssal Stone
X457|6:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
# Quarried Stone
X457|7:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
# Sulfur
X458|0:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
# Saltpeter
X458|1:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
# Dark Diamond
X458|2:
XP_Gain: 750
Double_Drops_Enabled: true
Is_Ore: false
# Dark Emerald
X458|3:
XP_Gain: 1000
Double_Drops_Enabled: true
Is_Ore: false
# Dark Lapis
X458|4:
XP_Gain: 400
Double_Drops_Enabled: true
Is_Ore: false
# Firestone
X458|5:
XP_Gain: 450
Double_Drops_Enabled: true
Is_Ore: false
# Infernal Stone
X467|2:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X467|5:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
# Blood Stained Stone
X468|2:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X468|5:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
# Sandy Stone
X469|2:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X469|5:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
# Quarried Stone
X471|2:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X471|5:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
# Frost Bound Stone
X472|2:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X472|5:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
# Nether Stone
X475|2:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X475|5:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false

View File

@@ -0,0 +1,66 @@
# Config wrote by Dragyn, updated by M1cr0man
# Up to date as of Railcraft 8.4.0.0
Axes:
# Steel
X7819:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X7796
Repair_Material_Pretty_Name: "Steel Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
Hoes:
# Steel
X7820:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X7796
Repair_Material_Pretty_Name: "Steel Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
Pickaxes:
# Steel
X7821:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X7796
Repair_Material_Pretty_Name: "Steel Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
Shovels:
# Steel
X7823:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X7796
Repair_Material_Pretty_Name: "Steel Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
Swords:
# Steel
X7824:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X7796
Repair_Material_Pretty_Name: "Steel Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500

View File

@@ -0,0 +1,543 @@
# Config created by Dragyn
# Created For SimCraft 1.6.4
#
#
# Settings for Custom Herbalism Blocks
###
Herbalism:
X705|0:
XP_Gain: 50
Double_Drops_Enabled: true
X705|1:
XP_Gain: 50
Double_Drops_Enabled: true
X705|2:
XP_Gain: 50
Double_Drops_Enabled: true
X705|3:
XP_Gain: 50
Double_Drops_Enabled: true
X705|4:
XP_Gain: 50
Double_Drops_Enabled: true
X705|5:
XP_Gain: 50
Double_Drops_Enabled: true
X705|6:
XP_Gain: 50
Double_Drops_Enabled: true
X705|7:
XP_Gain: 50
Double_Drops_Enabled: true
X705|8:
XP_Gain: 50
Double_Drops_Enabled: true
X705|9:
XP_Gain: 50
Double_Drops_Enabled: true
X705|10:
XP_Gain: 50
Double_Drops_Enabled: true
X705|11:
XP_Gain: 50
Double_Drops_Enabled: true
X705|12:
XP_Gain: 50
Double_Drops_Enabled: true
X705|13:
XP_Gain: 50
Double_Drops_Enabled: true
X705|14:
XP_Gain: 50
Double_Drops_Enabled: true
X705|15:
XP_Gain: 50
Double_Drops_Enabled: true
X706|0:
XP_Gain: 50
Double_Drops_Enabled: true
X706|1:
XP_Gain: 50
Double_Drops_Enabled: true
X706|2:
XP_Gain: 50
Double_Drops_Enabled: true
X706|3:
XP_Gain: 50
Double_Drops_Enabled: true
X706|4:
XP_Gain: 50
Double_Drops_Enabled: true
X706|5:
XP_Gain: 50
Double_Drops_Enabled: true
X706|6:
XP_Gain: 50
Double_Drops_Enabled: true
X706|7:
XP_Gain: 50
Double_Drops_Enabled: true
X706|8:
XP_Gain: 50
Double_Drops_Enabled: true
X706|9:
XP_Gain: 50
Double_Drops_Enabled: true
X706|10:
XP_Gain: 50
Double_Drops_Enabled: true
X706|11:
XP_Gain: 50
Double_Drops_Enabled: true
X706|12:
XP_Gain: 50
Double_Drops_Enabled: true
X706|13:
XP_Gain: 50
Double_Drops_Enabled: true
X706|14:
XP_Gain: 50
Double_Drops_Enabled: true
X706|15:
XP_Gain: 50
Double_Drops_Enabled: true
X707|0:
XP_Gain: 50
Double_Drops_Enabled: true
X707|1:
XP_Gain: 50
Double_Drops_Enabled: true
X707|2:
XP_Gain: 50
Double_Drops_Enabled: true
X707|3:
XP_Gain: 50
Double_Drops_Enabled: true
X707|4:
XP_Gain: 50
Double_Drops_Enabled: true
X707|5:
XP_Gain: 50
Double_Drops_Enabled: true
X707|6:
XP_Gain: 50
Double_Drops_Enabled: true
X707|7:
XP_Gain: 50
Double_Drops_Enabled: true
X707|8:
XP_Gain: 50
Double_Drops_Enabled: true
X707|9:
XP_Gain: 50
Double_Drops_Enabled: true
X707|10:
XP_Gain: 50
Double_Drops_Enabled: true
X707|11:
XP_Gain: 50
Double_Drops_Enabled: true
X707|12:
XP_Gain: 50
Double_Drops_Enabled: true
X707|13:
XP_Gain: 50
Double_Drops_Enabled: true
X707|14:
XP_Gain: 50
Double_Drops_Enabled: true
X707|15:
XP_Gain: 50
Double_Drops_Enabled: true
#
# Settings for Custom Mining Blocks
###
Mining:
X700|0:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|1:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|2:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|3:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|4:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|5:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|6:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|7:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|8:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|9:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|10:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|11:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|12:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|13:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|14:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X700|15:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X701|0:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|1:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|2:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|3:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|4:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|5:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|6:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|7:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|8:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|9:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|10:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|11:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|12:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|13:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|14:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X701|15:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X702|0:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|1:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|2:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|3:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|4:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|5:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|6:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|7:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|8:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|9:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|10:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|11:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|12:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|13:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|14:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X702|15:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|0:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|1:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|2:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|3:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|4:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|5:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|6:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|7:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|8:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|9:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|10:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|11:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|12:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|13:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|14:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X703|15:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|0:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|1:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|2:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|3:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|4:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|5:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|6:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|7:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|8:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|9:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|10:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|11:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|12:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|13:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|14:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X704|15:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
#
# Settings for Custom Woodcutting Blocks
###
Woodcutting:
X708|0:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X708|1:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X708|2:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X708|3:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X708|4:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X708|5:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X708|6:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X708|7:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X708|8:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X708|9:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X708|10:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X708|11:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X1095|0:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X1095|1:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X1095|2:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
X1095|3:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true

View File

@@ -0,0 +1,61 @@
# Config created by Dragyn
# Created For Railcraft_1.6.2-8.1.0.0
#
#
# Settings for Axes
###
Axes:
# Steel
X15787:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X15260
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
#
# Settings for Pickaxes
###
Pickaxes:
# Steel
X15788:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X15260
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
#
# Settings for Shovels
###
Shovels:
# Steel
X15789:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X15260
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
#
# Settings for Swords
###
Swords:
# Steel
X15786:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X15260
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500

View File

@@ -0,0 +1,9 @@
# Config wrote by M1cr0man
# Possibly incomplete. Only covers ores
# Up to date as of Stargate Tech 2 Alpha 0.7.3
Mining:
# Naquadah Ore
X1005|0:
XP_Gain: 300
Double_Drops_Enabled: true
Is_Ore: true

View File

@@ -0,0 +1,41 @@
# Config wrote by M1cr0man
# Up to date as of Thermal Expansion 3.0.0.7
Boots:
# Invar
X31973:
Repairable: true
Repair_Material: X31978
Repair_Material_Pretty_Name: "Invar Ingot"
Repair_Material_Data_Value: 71
Repair_Material_Quantity: 4
Durability: 325
Chestplates:
# Invar
X31975:
Repairable: true
Repair_Material: X31978
Repair_Material_Pretty_Name: "Invar Ingot"
Repair_Material_Data_Value: 71
Repair_Material_Quantity: 8
Durability: 400
Helmets:
# Invar
X31976:
Repairable: true
Repair_Material: X31978
Repair_Material_Pretty_Name: "Invar Ingot"
Repair_Material_Data_Value: 71
Repair_Material_Quantity: 5
Durability: 275
Leggings:
# Invar
X31976:
Repairable: true
Repair_Material: X31978
Repair_Material_Pretty_Name: "Invar Ingot"
Repair_Material_Data_Value: 71
Repair_Material_Quantity: 7
Durability: 375

View File

@@ -0,0 +1,29 @@
# Config wrote by M1cr0man
# Possibly incomplete. Only covers ores
# Up to date as of Thermal Expansion 3.0.0.7
Mining:
# Copper
X4064|0:
XP_Gain: 175
Double_Drops_Enabled: true
Is_Ore: true
# Tin
X4064|1:
XP_Gain: 175
Double_Drops_Enabled: true
Is_Ore: true
# Silver
X4064|2:
XP_Gain: 300
Double_Drops_Enabled: true
Is_Ore: true
# Lead
X4064|3:
XP_Gain: 300
Double_Drops_Enabled: true
Is_Ore: true
# Ferrous
X4064|4:
XP_Gain: 300
Double_Drops_Enabled: true
Is_Ore: true

View File

@@ -0,0 +1,66 @@
# Config wrote by M1cr0man
# Up to date as of Thermal Expansion 3.0.0.7
Axes:
# Invar
X31969:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X31978
Repair_Material_Pretty_Name: "Invar Ingot"
Repair_Material_Data_Value: 71
Repair_Material_Quantity: 3
Durability: 450
Hoes:
# Invar
X31968:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X31978
Repair_Material_Pretty_Name: "Invar Ingot"
Repair_Material_Data_Value: 71
Repair_Material_Quantity: 2
Durability: 450
Pickaxes:
# Invar
X31970:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X31978
Repair_Material_Pretty_Name: "Invar Ingot"
Repair_Material_Data_Value: 71
Repair_Material_Quantity: 3
Durability: 450
Shovels:
# Invar
X31971:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X31978
Repair_Material_Pretty_Name: "Invar Ingot"
Repair_Material_Data_Value: 71
Repair_Material_Quantity: 1
Durability: 450
Swords:
# Invar
X31972:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 3
Repairable: true
Repair_Material: X31978
Repair_Material_Pretty_Name: "Invar Ingot"
Repair_Material_Data_Value: 71
Repair_Material_Quantity: 2
Durability: 450

View File

@@ -0,0 +1,74 @@
# Config wrote by M1cr0man
# Up to date as of Tinker's Construct 1.5.5.7
# Also covers Tinker's Steelworks 0.0.4.2-fix2
Boots:
# Wooden (Repaired with Oak Wood)
X14366:
Repairable: true
Repair_Material: LOG
Repair_Material_Pretty_Name: "Oak Wood"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 4
Durability: 26
# Steel
X14771:
Repairable: true
Repair_Material: X14276
Repair_Material_Pretty_Name: "Steel Ingot"
Repair_Material_Data_Value: 16
Repair_Material_Quantity: 4
Durability: 325
Chestplates:
# Wooden (Repaired with Oak Wood)
X14364:
Repairable: true
Repair_Material: LOG
Repair_Material_Pretty_Name: "Oak Wood"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 8
Durability: 32
# Steel
X14769:
Repairable: true
Repair_Material: X14276
Repair_Material_Pretty_Name: "Steel Ingot"
Repair_Material_Data_Value: 16
Repair_Material_Quantity: 8
Durability: 400
Helmets:
# Wooden (Repaired with Oak Wood)
X14362:
Repairable: true
Repair_Material: LOG
Repair_Material_Pretty_Name: "Oak Wood"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 5
Durability: 22
# Steel
X14768:
Repairable: true
Repair_Material: X14276
Repair_Material_Pretty_Name: "Steel Ingot"
Repair_Material_Data_Value: 16
Repair_Material_Quantity: 5
Durability: 275
Leggings:
# Wooden (Repaired with Oak Wood)
X14362:
Repairable: true
Repair_Material: LOG
Repair_Material_Pretty_Name: "Oak Wood"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 7
Durability: 30
# Steel
X14768:
Repairable: true
Repair_Material: X14276
Repair_Material_Pretty_Name: "Steel Ingot"
Repair_Material_Data_Value: 16
Repair_Material_Quantity: 7
Durability: 375

View File

@@ -0,0 +1,55 @@
# Config wrote by M1cr0man
# Possibly incomplete. Only covers ores
# Up to date as of Tinker's Construct 1.5.5.7
Excavation:
# Iron
X1488|0:
XP_Gain: 250
Double_Drops_Enabled: true
# Gold
X1488|1:
XP_Gain: 350
Double_Drops_Enabled: true
# Copper
X1488|2:
XP_Gain: 175
Double_Drops_Enabled: true
# Tin
X1488|3:
XP_Gain: 175
Double_Drops_Enabled: true
# Aluminum
X1488|4:
XP_Gain: 250
Double_Drops_Enabled: true
# Cobalt
X1488|5:
XP_Gain: 500
Double_Drops_Enabled: true
Mining:
# Cobalt
X1475|1:
XP_Gain: 500
Double_Drops_Enabled: true
Is_Ore: true
# Ardite
X1475|2:
XP_Gain: 500
Double_Drops_Enabled: true
Is_Ore: true
# Copper
X1475|3:
XP_Gain: 175
Double_Drops_Enabled: true
Is_Ore: true
# Tin
X1475|4:
XP_Gain: 175
Double_Drops_Enabled: true
Is_Ore: true
# Aluminium
X1475|5:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: true

View File

@@ -0,0 +1,149 @@
# Config wrote by M1cr0man
# Abilites for Pickaxes and Shovels disabled due to a bug
# Repair disabled as mcMMO does not support NBTTag - based tools
# Up to date as of Tinker's Construct 1.5.5.7
# Also covers Tinker's Steelworks 0.0.4.2-fix2
Axes:
# Hatchets
X14309:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: false
Durability: 500
# Mattocks
X14316:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: false
Durability: 500
# Lumber Axes
X14317:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: false
Durability: 500
# Battle Axes
X14327:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: false
Durability: 500
Bows:
# Shortbows
X14319:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: false
Durability: 500
Hoes:
# Mattocks
X14316:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: false
Durability: 500
# Scythes
X14323:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: false
Durability: 500
Pickaxes:
# Pickaxes
X14307:
XP_Modifier: 1.0
Ability_Enabled: false
Tier: 2
Repairable: false
Durability: 500
# Hammers
X14326:
XP_Modifier: 1.0
Ability_Enabled: false
Tier: 2
Repairable: false
Durability: 500
Shovels:
# Shovels
X14308:
XP_Modifier: 1.0
Ability_Enabled: false
Tier: 2
Repairable: false
Durability: 500
# Mattocks
X14316:
XP_Modifier: 1.0
Ability_Enabled: false
Tier: 2
Repairable: false
Durability: 500
# Excavators
X14325:
XP_Modifier: 1.0
Ability_Enabled: false
Tier: 2
Repairable: false
Durability: 500
Swords:
# Broadswords
X14311:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: false
Durability: 500
# Longswords
X14312:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: false
Durability: 500
# Rapiers
X14313:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: false
Durability: 500
# Daggers
X14321:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: false
Durability: 500
# Cleavers
X14324:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: false
Durability: 500
# Battle Axes
X14327:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: false
Durability: 500
# Cutlasses
X14328:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 2
Repairable: false
Durability: 500

View File

@@ -0,0 +1,161 @@
# Config wrote by Dragyn, updated by M1cr0man
# Up to date as of Twilight Forest 1.20.5
Boots:
# Ironwood
X27978:
Repairable: true
Repair_Material: X27974
Repair_Material_Pretty_Name: "Ironwood Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 4
Durability: 260
# Fiery
X27995:
Repairable: true
Repair_Material: X27991
Repair_Material_Pretty_Name: "Fiery Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 4
Durability: 325
# Stealeaf
X28002:
Repairable: true
Repair_Material: X27998
Repair_Material_Pretty_Name: "Steeleaf"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 4
Durability: 260
# Knightmetal
X28037:
Repairable: true
Repair_Material: X28032
Repair_Material_Pretty_Name: "Knightmetal Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 4
Durability: 260
Chestplates:
# Ironwood
X27976:
Repairable: true
Repair_Material: X27974
Repair_Material_Pretty_Name: "Ironwood Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 8
Durability: 320
# Naga Scale
X27958:
Repairable: true
Repair_Material: X27957
Repair_Material_Pretty_Name: "Naga Scale"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 8
Durability: 336
# Fiery
X27993:
Repairable: true
Repair_Material: X27991
Repair_Material_Pretty_Name: "Fiery Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 8
Durability: 400
# Stealeaf
X28000:
Repairable: true
Repair_Material: X27998
Repair_Material_Pretty_Name: "Steeleaf"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 8
Durability: 320
# Knightmetal
X28035:
Repairable: true
Repair_Material: X28032
Repair_Material_Pretty_Name: "Knightmetal Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 8
Durability: 320
# Phantom
X28035:
Repairable: false
Durability: 480
Helmets:
# Ironwood
X27975:
Repairable: true
Repair_Material: X27974
Repair_Material_Pretty_Name: "Ironwood Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 5
Durability: 220
# Fiery
X27992:
Repairable: true
Repair_Material: X27991
Repair_Material_Pretty_Name: "Fiery Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 5
Durability: 275
# Stealeaf
X27999:
Repairable: true
Repair_Material: X27998
Repair_Material_Pretty_Name: "Steeleaf"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 5
Durability: 220
# Knightmetal
X28034:
Repairable: true
Repair_Material: X28032
Repair_Material_Pretty_Name: "Knightmetal Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 5
Durability: 220
# Phantom
X28034:
Repairable: false
Durability: 330
Leggings:
# Ironwood
X27977:
Repairable: true
Repair_Material: X27974
Repair_Material_Pretty_Name: "Ironwood Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 7
Durability: 300
# Naga Scale
X27959:
Repairable: true
Repair_Material: X27957
Repair_Material_Pretty_Name: "Naga Scale"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 7
Durability: 315
# Fiery
X27994:
Repairable: true
Repair_Material: X27991
Repair_Material_Pretty_Name: "Fiery Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 7
Durability: 375
# Stealeaf
X28001:
Repairable: true
Repair_Material: X27998
Repair_Material_Pretty_Name: "Steeleaf"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 7
Durability: 300
# Knightmetal
X28036:
Repairable: true
Repair_Material: X28032
Repair_Material_Pretty_Name: "Knightmetal Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 7
Durability: 300

View File

@@ -0,0 +1,117 @@
# Config created by Dragyn
# Created For twilightforest-1.20.3
#
#
# Settings for Custom Herbalism Blocks
###
Herbalism:
# Mushgloom
X2169|9:
XP_Gain: 150
Double_Drops_Enabled: true
# Torchberry Plant
X2169|13:
XP_Gain: 20
Double_Drops_Enabled: true
# Mayapple
X2169|4:
XP_Gain: 30
Double_Drops_Enabled: true
# Fiddlehead
X2169|8:
XP_Gain: 35
Double_Drops_Enabled: true
#
# Settings for Custom Mining Blocks
###
Mining:
# Mazestone
X2165|0:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X2165|1:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X2165|2:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X2165|3:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X2165|4:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X2165|5:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X2165|6:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
X2165|7:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
#
# Settings for Custom Woodcutting Blocks
###
Woodcutting:
# Twilight Oak
X2163|0:
XP_Gain: 70
Double_Drops_Enabled: true
Is_Log: true
# Canopy
X2163|1:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
# Mangrove
X2163|2:
XP_Gain: 90
Double_Drops_Enabled: true
Is_Log: true
# Darkwood
X2163|3:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
# Roots
X2170|0:
XP_Gain: 10
Double_Drops_Enabled: true
Is_Log: false
X2170|1:
XP_Gain: 10
Double_Drops_Enabled: true
Is_Log: false
# Timewood
X2176|0:
XP_Gain: 1000
Double_Drops_Enabled: true
Is_Log: true
# Transwood
X2176|1:
XP_Gain: 1000
Double_Drops_Enabled: true
Is_Log: true
# Minewood
X2176|2:
XP_Gain: 1000
Double_Drops_Enabled: true
Is_Log: true
# Sortingwood
X2176|3:
XP_Gain: 1000
Double_Drops_Enabled: true
Is_Log: true

View File

@@ -0,0 +1,181 @@
# Config wrote by Dragyn, updated by M1cr0man
# Up to date as of Twilight Forest 1.20.5
Axes:
# Ironwood
X27982:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X27974
Repair_Material_Pretty_Name: "Ironwood Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 512
# Steeleaf
X28006:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X27998
Repair_Material_Pretty_Name: "Steeleaf"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 131
# Knightmetal
X28040:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X28032
Repair_Material_Pretty_Name: "Knightmetal Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 512
# Minotaur
X28008:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: false
Durability: 1561
Hoes:
# Ironwood
X27983:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X27974
Repair_Material_Pretty_Name: "Ironwood Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 512
# Steeleaf
X28007:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X27998
Repair_Material_Pretty_Name: "Steeleaf"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 131
Pickaxes:
# Ironwood
X27981:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X27974
Repair_Material_Pretty_Name: "Ironwood Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 512
# Fiery
X27997:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X27991
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 1024
# Steeleaf
X28005:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X27998
Repair_Material_Pretty_Name: "Steeleaf"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 131
# Knightmetal
X28039:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X28032
Repair_Material_Pretty_Name: "Knightmetal Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 512
Shovels:
# Ironwood
X27980:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X27974
Repair_Material_Pretty_Name: "Ironwood Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 512
# Steeleaf
X28004:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X27998
Repair_Material_Pretty_Name: "Steeleaf"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 131
Swords:
# Ironwood
X27979:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X27974
Repair_Material_Pretty_Name: "Ironwood Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 512
# Fiery
X27996:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X27991
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 1024
# Steeleaf
X28003:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X27998
Repair_Material_Pretty_Name: "Steeleaf"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 131
# Knightmetal
X28038:
XP_Modifier: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: X28032
Repair_Material_Pretty_Name: "Knightmetal Ingot"
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 512

View File

@@ -0,0 +1,171 @@
# Config created by Dragyn
# Created For UndergroundBiomes 1.6.x - 0.4.2c
#
#
# Settings for Custom Mining Blocks
###
Mining:
X2000|0:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2000|1:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2000|2:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2000|3:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2000|4:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2000|5:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2000|6:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2000|7:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
#
X2001|0:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2001|1:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2001|2:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2001|3:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2001|4:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2001|5:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2001|6:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2001|7:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
#
X2009|0:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2009|1:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2009|2:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2009|3:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2009|4:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2009|5:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2009|6:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2009|7:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
#
X2010|0:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2010|1:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2010|2:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2010|3:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2010|4:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2010|5:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2010|6:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2010|7:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
#
X2011|0:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2011|1:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2011|2:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2011|3:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2011|4:
XP_Gain: 50
Double_Drops_Enabled: true
Is_Ore: false
X2011|5:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2011|6:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false
X2011|7:
XP_Gain: 30
Double_Drops_Enabled: true
Is_Ore: false

View File

@@ -0,0 +1,132 @@
# Config created by joulesbeef
# Created For twilightforest-2.2.3
#
#
# Settings for Boots
###
Boots:
# Ironwood
TWILIGHTFOREST_ITEM_IRONWOODBOOTS:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_IRONWOODINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Fiery
TWILIGHTFOREST_ITEM_FIERYBOOTS:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_FIERYINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Stealeaf
TWILIGHTFOREST_ITEM_STEELEAFBOOTS:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_STEELEAFINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Knightmetal
TWILIGHTFOREST_ITEM_KNIGHTLYBOOTS:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_KNIGHTMETAL
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
#
# Settings for Chestplates
###
Chestplates:
# Ironwood
TWILIGHTFOREST_ITEM_IRONWOODPLATE:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_IRONWOODINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Fiery
TWILIGHTFOREST_ITEM_FIERYPLATE:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_FIERYINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Stealeaf
TWILIGHTFOREST_ITEM_STEELEAFPLATE:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_STEELEAFINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Knightmetal
TWILIGHTFOREST_ITEM_KNIGHTLYPLATE:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_KNIGHTMETAL
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
#
# Settings for Helmets
###
Helmets:
# Ironwood
TWILIGHTFOREST_ITEM_IRONWOODHELM:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_IRONWOODINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Fiery
TWILIGHTFOREST_ITEM_FIERYHELM:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_FIERYINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Stealeaf
TWILIGHTFOREST_ITEM_STEELEAFHELM:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_STEELEAFINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Knightmetal
TWILIGHTFOREST_ITEM_KNIGHTLYHELM:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_KNIGHTMETAL
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 50
# Settings for Leggings
###
Leggings:
# Ironwood
TWILIGHTFOREST_ITEM_IRONWOODLEGS:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_IRONWOODINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Fiery
TWILIGHTFOREST_ITEM_FIERYLEGS:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_FIERYINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Stealeaf
TWILIGHTFOREST_ITEM_STEELEAFLEGS:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_STEELEAFINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Knightmetal
TWILIGHTFOREST_ITEM_KNIGHTLYLEGS:
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_KNIGHTMETAL
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500

View File

@@ -0,0 +1,116 @@
# Config created by joulesbeef
# Created For twilightforest-2.2.3
#
#
# Settings for Custom Herbalism Blocks
###
Herbalism:
# Mushgloom
TWILIGHTFOREST_TILE_TFLOG|9:
XP_Gain: 150
Double_Drops_Enabled: true
# Torchberry Plant
TWILIGHTFOREST_TILE_TFLOG|13:
XP_Gain: 20
Double_Drops_Enabled: true
# Mayapple
TWILIGHTFOREST_TILE_TFLOG|4:
XP_Gain: 30
Double_Drops_Enabled: true
# Fiddlehead
TWILIGHTFOREST_TILE_TFLOG|8:
XP_Gain: 35
Double_Drops_Enabled: true
#
# Settings for Custom Mining Blocks
###
Mining:
# Mazestone
TWILIGHTFOREST_TILE_TFMAZESTONE|0:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
TWILIGHTFOREST_TILE_TFMAZESTONE|1:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
TWILIGHTFOREST_TILE_TFMAZESTONE|2:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
TWILIGHTFOREST_TILE_TFMAZESTONE|3:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
TWILIGHTFOREST_TILE_TFMAZESTONE|4:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
TWILIGHTFOREST_TILE_TFMAZESTONE|5:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
TWILIGHTFOREST_TILE_TFMAZESTONE|6:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
TWILIGHTFOREST_TILE_TFMAZESTONE|7:
XP_Gain: 250
Double_Drops_Enabled: true
Is_Ore: false
#
# Settings for Custom Woodcutting Blocks
###
Woodcutting:
# Twilight Oak
TWILIGHTFOREST_TILE_TFLOG|0:
XP_Gain: 70
Double_Drops_Enabled: true
Is_Log: true
# Canopy
TWILIGHTFOREST_TILE_TFLOG|1:
XP_Gain: 80
Double_Drops_Enabled: true
Is_Log: true
# Mangrove
TWILIGHTFOREST_TILE_TFLOG|2:
XP_Gain: 90
Double_Drops_Enabled: true
Is_Log: true
# Darkwood
TWILIGHTFOREST_TILE_TFLOG|3:
XP_Gain: 100
Double_Drops_Enabled: true
Is_Log: true
# Roots
TWILIGHTFOREST_TILE_TFROOTS|0:
XP_Gain: 10
Double_Drops_Enabled: true
Is_Log: false
TWILIGHTFOREST_TILE_TFROOTS|1:
XP_Gain: 10
Double_Drops_Enabled: true
Is_Log: false
# Timewood
TWILIGHTFOREST_TILE_TFMAGICLOG|0:
XP_Gain: 1000
Double_Drops_Enabled: true
Is_Log: true
# Transwood
TWILIGHTFOREST_TILE_TFMAGICLOG|1:
XP_Gain: 1000
Double_Drops_Enabled: true
Is_Log: true
# Minewood
TWILIGHTFOREST_TILE_TFMAGICLOG|2:
XP_Gain: 1000
Double_Drops_Enabled: true
Is_Log: true
# Sortingwood
TWILIGHTFOREST_TILE_TFMAGICLOG|3:
XP_Gain: 1000
Double_Drops_Enabled: true
Is_Log: true

View File

@@ -0,0 +1,152 @@
# Config created by joulesbeef
# Created For twilightforest-2.2.3
#
# Settings for Custom Mobs
MoCreatures-Ogre:
Class: Monster
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
TwilightForest-TwilightLich:
Class: Monster
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
TwilightForest-HelmetCrab:
Class: Monster
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
TwilightForest-SlimeBeetle:
Class: Monster
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
TwilightForest-TwilightWraith:
Class: Monster
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
TwilightForest-Naga:
Class: Monster
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
MoCreatures-Shark:
Class: Monster
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
TwilightForest-TowerTermite:
Class: Monster
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
MoCreatures-SmallFish:
Class: Monster
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
TwilightForest-Redcap:
Class: Monster
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
TwilightForest-YetiBoss:
Class: Monster
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
MoCreatures-HellRat:
Class: Monster
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
TwilightForest-Hydra:
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
TwilightForest-Firefly:
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
TwilightForest-KnightPhantom:
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
TwilightForest-TowerGolem:
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0
MoCreatures-FishBowl:
XP_Multiplier: 1.0
Tameable: false
Taming_XP: 0
CanBeSummoned: false
COTW_Material: ''
COTW_Material_Data: 0
COTW_Material_Amount: 0

View File

@@ -0,0 +1,184 @@
# Config created by joulesbeef
# Created For twilightforest-2.2.3
#
#
# Settings for Axes
###
Axes:
# Ironwood
TWILIGHTFOREST_ITEM_IRONWOODAXE:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_IRONWOODINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Steeleaf
TWILIGHTFOREST_ITEM_STEELEAFAXE:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_STEELEAFINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Knightmetal
TWILIGHTFOREST_ITEM_KNIGHTLYAXE:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_KNIGHTMETAL
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Minotaur
TWILIGHTFOREST_ITEM_MINOTAURAXE:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: Diamond
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
#
# Settings for Hoes
###
Hoes:
# Ironwood
TWILIGHTFOREST_ITEM_IRONWOODHOE:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_IRONWOODINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Steeleaf
TWILIGHTFOREST_ITEM_STEELEAFHOE:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_STEELEAFINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
#
# Settings for Pickaxes
###
Pickaxes:
# Ironwood
TWILIGHTFOREST_ITEM_IRONWOODPICK:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_IRONWOODINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Fiery
TWILIGHTFOREST_ITEM_FIERYPICK:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_FIERYINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Steeleaf
TWILIGHTFOREST_ITEM_STEELEAFPICK:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_STEELEAFINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Knightmetal
TWILIGHTFOREST_ITEM_KNIGHTLYPICK:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_KNIGHTMETAL
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
#
# Settings for Shovels
###
Shovels:
# Ironwood
TWILIGHTFOREST_ITEM_IRONWOODSHOVEL:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_IRONWOODINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Steeleaf
TWILIGHTFOREST_ITEM_STEELEAFSHOVEL:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_STEELEAFINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
#
# Settings for Swords
###
Swords:
# Ironwood
TWILIGHTFOREST_ITEM_IRONWOODSWORD:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_IRONWOODINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Fiery
TWILIGHTFOREST_ITEM_FIERYSWORD:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_FIERYINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Steeleaf
TWILIGHTFOREST_ITEM_STEELEAFSWORD:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_STEELEAFINGOT
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500
# Knightmetal
TWILIGHTFOREST_ITEM_KNIGHTLYSWORD:
XP_Modifer: 1.0
Ability_Enabled: true
Tier: 1
Repairable: true
Repair_Material: TWILIGHTFOREST_ITEM_KNIGHTMETAL
Repair_Material_Data_Value: 0
Repair_Material_Quantity: 2
Durability: 500

45
pom.xml
View File

@@ -2,7 +2,7 @@
<modelVersion>4.0.0</modelVersion>
<groupId>com.gmail.nossr50.mcMMO</groupId>
<artifactId>mcMMO</artifactId>
<version>1.4.07-dev2</version>
<version>1.5.01-SNAPSHOT</version>
<name>mcMMO</name>
<url>https://github.com/mcMMO-Dev/mcMMO</url>
<issueManagement>
@@ -30,6 +30,14 @@
<include>locale*.properties</include>
</includes>
</resource>
<resource>
<targetPath>mods</targetPath>
<filtering>true</filtering>
<directory>${basedir}/src/main/resources/mods</directory>
<includes>
<include>*.yml</include>
</includes>
</resource>
</resources>
<plugins>
<plugin>
@@ -68,6 +76,8 @@
<artifactSet>
<includes>
<include>com.turt2live.metrics:MetricsExtension</include>
<include>commons-logging:commons-logging</include>
<include>net.snaq:dbpool</include>
</includes>
</artifactSet>
<relocations>
@@ -75,6 +85,14 @@
<pattern>com.turt2live.metrics</pattern>
<shadedPattern>com.gmail.nossr50.metrics.mcstats</shadedPattern>
</relocation>
<relocation>
<pattern>org.apache.commons.logging</pattern>
<shadedPattern>com.gmail.nossr50.commons.logging</shadedPattern>
</relocation>
<relocation>
<pattern>net.snaq</pattern>
<shadedPattern>com.gmail.nossr50.dbpool</shadedPattern>
</relocation>
</relocations>
</configuration>
<executions>
@@ -100,6 +118,10 @@
<id>bukkit-repo</id>
<url>http://repo.bukkit.org/content/groups/public/</url>
</repository>
<repository>
<id>md_5-releases</id>
<url>http://repo.md-5.net/content/repositories/releases/</url>
</repository>
<repository>
<id>Plugin MetricsExtension</id>
<url>http://repo.turt2live.com</url>
@@ -109,9 +131,9 @@
<dependency>
<groupId>org.bukkit</groupId>
<artifactId>bukkit</artifactId>
<version>LATEST</version>
<version>1.7.10-R0.1-SNAPSHOT</version>
<type>jar</type>
<scope>compile</scope>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
@@ -124,18 +146,27 @@
<artifactId>MetricsExtension</artifactId>
<version>0.0.5-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>net.snaq</groupId>
<artifactId>dbpool</artifactId>
<version>5.1</version>
</dependency>
</dependencies>
<distributionManagement>
<repository>
<id>mcmmo-repo</id>
<url>file:///var/lib/jenkins/repo</url>
<id>md_5-releases</id>
<url>http://repo.md-5.net/content/repositories/releases/</url>
</repository>
<snapshotRepository>
<id>md_5-snapshots</id>
<url>http://repo.md-5.net/content/repositories/snapshots/</url>
</snapshotRepository>
</distributionManagement>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<ciManagement>
<system>Jenkins</system>
<url>ci.mcmmo.org</url>
<system>Jenkins</system>
<url>http://ci.ecocitycraft.com/job/mcMMO</url>
</ciManagement>
</project>

View File

@@ -1,42 +1,116 @@
package com.gmail.nossr50.api;
import org.bukkit.entity.LivingEntity;
import org.bukkit.entity.Player;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.AbilityType;
import com.gmail.nossr50.runnables.skills.BleedTimerTask;
import com.gmail.nossr50.util.player.UserManager;
public final class AbilityAPI {
private AbilityAPI() {}
/**
* Checks if the ability "Berserk" is active.
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to check
*
* @return true if "Berserk" is active
*/
public static boolean berserkEnabled(Player player) {
return UserManager.getPlayer(player).getAbilityMode(AbilityType.BERSERK);
}
/**
* Checks if the ability "Giga Drill Breaker" is active.
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to check
*
* @return true if "Giga Drill Breaker" is active
*/
public static boolean gigaDrillBreakerEnabled(Player player) {
return UserManager.getPlayer(player).getAbilityMode(AbilityType.GIGA_DRILL_BREAKER);
}
/**
* Checks if the ability "Green Terra" is active.
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to check
*
* @return true if "Green Terra" is active
*/
public static boolean greenTerraEnabled(Player player) {
return UserManager.getPlayer(player).getAbilityMode(AbilityType.GREEN_TERRA);
}
/**
* Checks if the ability "Serrated Strikes" is active.
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to check
*
* @return true if "Serrated Strikes" is active
*/
public static boolean serratedStrikesEnabled(Player player) {
return UserManager.getPlayer(player).getAbilityMode(AbilityType.SERRATED_STRIKES);
}
/**
* Checks if the ability "Skull Splitter" is active.
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to check
*
* @return true if "Skull Splitter" is active
*/
public static boolean skullSplitterEnabled(Player player) {
return UserManager.getPlayer(player).getAbilityMode(AbilityType.SKULL_SPLITTER);
}
/**
* Checks if the ability "Super Breaker" is active.
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to check
*
* @return true if "Super Breaker" is active
*/
public static boolean superBreakerEnabled(Player player) {
return UserManager.getPlayer(player).getAbilityMode(AbilityType.SUPER_BREAKER);
}
/**
* Checks if the ability "Tree Feller" is active.
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to check
*
* @return true if "Tree Feller" is active
*/
public static boolean treeFellerEnabled(Player player) {
return UserManager.getPlayer(player).getAbilityMode(AbilityType.TREE_FELLER);
}
/**
* Checks if any ability is active.
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to check
*
* @return true if any ability is active
*/
public static boolean isAnyAbilityEnabled(Player player) {
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
@@ -49,35 +123,111 @@ public final class AbilityAPI {
return false;
}
/**
* Reset the ability cooldowns for a player
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to reset the cooldowns for
*/
public static void resetCooldowns(Player player) {
UserManager.getPlayer(player).getProfile().resetCooldowns();
UserManager.getPlayer(player).resetCooldowns();
}
/**
* Set the cooldown for the "Berserk" ability
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to set the cooldown for
* @param cooldown The cooldown length to set
*/
public static void setBerserkCooldown(Player player, long cooldown) {
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.BERSERK, cooldown);
UserManager.getPlayer(player).setAbilityDATS(AbilityType.BERSERK, cooldown);
}
/**
* Set the cooldown for the "Giga Drill Breaker" ability
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to set the cooldown for
* @param cooldown The cooldown length to set
*/
public static void setGigaDrillBreakerCooldown(Player player, long cooldown) {
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.GIGA_DRILL_BREAKER, cooldown);
UserManager.getPlayer(player).setAbilityDATS(AbilityType.GIGA_DRILL_BREAKER, cooldown);
}
/**
* Set the cooldown for the "Green Terra" ability
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to set the cooldown for
* @param cooldown The cooldown length to set
*/
public static void setGreenTerraCooldown(Player player, long cooldown) {
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.GREEN_TERRA, cooldown);
UserManager.getPlayer(player).setAbilityDATS(AbilityType.GREEN_TERRA, cooldown);
}
/**
* Set the cooldown for the "Serrated Strikes" ability
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to set the cooldown for
* @param cooldown The cooldown length to set
*/
public static void setSerratedStrikesCooldown(Player player, long cooldown) {
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.SERRATED_STRIKES, cooldown);
UserManager.getPlayer(player).setAbilityDATS(AbilityType.SERRATED_STRIKES, cooldown);
}
/**
* Set the cooldown for the "Skull Splitter" ability
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to set the cooldown for
* @param cooldown The cooldown length to set
*/
public static void setSkullSplitterCooldown(Player player, long cooldown) {
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.SKULL_SPLITTER, cooldown);
UserManager.getPlayer(player).setAbilityDATS(AbilityType.SKULL_SPLITTER, cooldown);
}
/**
* Set the cooldown for the "Super Breaker" ability
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to set the cooldown for
* @param cooldown The cooldown length to set
*/
public static void setSuperBreakerCooldown(Player player, long cooldown) {
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.SUPER_BREAKER, cooldown);
UserManager.getPlayer(player).setAbilityDATS(AbilityType.SUPER_BREAKER, cooldown);
}
/**
* Set the cooldown for the "Tree Feller" ability
* </br>
* This function is designed for API usage.
*
* @param player The {@link Player} to set the cooldown for
* @param cooldown The cooldown length to set
*/
public static void setTreeFellerCooldown(Player player, long cooldown) {
UserManager.getPlayer(player).getProfile().setSkillDATS(AbilityType.TREE_FELLER, cooldown);
UserManager.getPlayer(player).setAbilityDATS(AbilityType.TREE_FELLER, cooldown);
}
/**
* Check if a LivingEntity is bleeding
* </br>
* This function is designed for API usage.
*
* @param entity The {@link LivingEntity} to check
* @return true if entity is bleeding, false otherwise
*/
public static boolean isBleeding(LivingEntity entity) {
return BleedTimerTask.isBleeding(entity);
}
}

View File

@@ -71,78 +71,94 @@ public final class ChatAPI {
/**
* Check if a player is currently talking in party chat.
* </br>
* This function is designed for API usage.
*
* @param player The player to check
* @return true if the player is using party chat, false otherwise
*/
public static boolean isUsingPartyChat(Player player) {
return UserManager.getPlayer(player).getPartyChatMode();
return UserManager.getPlayer(player).isChatEnabled(ChatMode.PARTY);
}
/**
* Check if a player is currently talking in party chat.
* </br>
* This function is designed for API usage.
*
* @param playerName The name of the player to check
* @return true if the player is using party chat, false otherwise
*/
public static boolean isUsingPartyChat(String playerName) {
return UserManager.getPlayer(playerName).getPartyChatMode();
return UserManager.getPlayer(playerName).isChatEnabled(ChatMode.PARTY);
}
/**
* Check if a player is currently talking in admin chat.
* </br>
* This function is designed for API usage.
*
* @param player The player to check
* @return true if the player is using admin chat, false otherwise
*/
public static boolean isUsingAdminChat(Player player) {
return UserManager.getPlayer(player).getAdminChatMode();
return UserManager.getPlayer(player).isChatEnabled(ChatMode.ADMIN);
}
/**
* Check if a player is currently talking in admin chat.
* </br>
* This function is designed for API usage.
*
* @param playerName The name of the player to check
* @return true if the player is using admin chat, false otherwise
*/
public static boolean isUsingAdminChat(String playerName) {
return UserManager.getPlayer(playerName).getAdminChatMode();
return UserManager.getPlayer(playerName).isChatEnabled(ChatMode.ADMIN);
}
/**
* Toggle the party chat mode of a player.
* </br>
* This function is designed for API usage.
*
* @param player The player to toggle party chat on.
*/
public static void togglePartyChat(Player player) {
UserManager.getPlayer(player).togglePartyChat();
UserManager.getPlayer(player).toggleChat(ChatMode.PARTY);
}
/**
* Toggle the party chat mode of a player.
* </br>
* This function is designed for API usage.
*
* @param playerName The name of the player to toggle party chat on.
*/
public static void togglePartyChat(String playerName) {
UserManager.getPlayer(playerName).togglePartyChat();
UserManager.getPlayer(playerName).toggleChat(ChatMode.PARTY);
}
/**
* Toggle the admin chat mode of a player.
* </br>
* This function is designed for API usage.
*
* @param player The player to toggle admin chat on.
*/
public static void toggleAdminChat(Player player) {
UserManager.getPlayer(player).toggleAdminChat();
UserManager.getPlayer(player).toggleChat(ChatMode.ADMIN);
}
/**
* Toggle the admin chat mode of a player.
* </br>
* This function is designed for API usage.
*
* @param playerName The name of the player to toggle party chat on.
*/
public static void toggleAdminChat(String playerName) {
UserManager.getPlayer(playerName).toggleAdminChat();
UserManager.getPlayer(playerName).toggleChat(ChatMode.ADMIN);
}
private static ChatManager getPartyChatManager(Plugin plugin, String party) {

View File

@@ -1,16 +1,23 @@
package com.gmail.nossr50.api;
import java.util.Set;
import java.util.UUID;
import org.bukkit.entity.Player;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.api.exceptions.InvalidFormulaTypeException;
import com.gmail.nossr50.api.exceptions.InvalidPlayerException;
import com.gmail.nossr50.api.exceptions.InvalidSkillException;
import com.gmail.nossr50.api.exceptions.InvalidXPGainReasonException;
import com.gmail.nossr50.api.exceptions.McMMOPlayerNotFoundException;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.config.experience.ExperienceConfig;
import com.gmail.nossr50.datatypes.experience.FormulaType;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.player.PlayerProfile;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.datatypes.skills.XPGainReason;
import com.gmail.nossr50.skills.child.FamilyTree;
import com.gmail.nossr50.util.player.UserManager;
@@ -43,9 +50,7 @@ public final class ExperienceAPI {
public static boolean isNonChildSkill(String skillType) {
SkillType skill = SkillType.getSkill(skillType);
if (skill == null) return false;
return !skill.isChildSkill();
return skill != null && !skill.isChildSkill();
}
@Deprecated
@@ -64,10 +69,59 @@ public final class ExperienceAPI {
*
* @throws InvalidSkillException if the given skill is not valid
*/
@Deprecated
public static void addRawXP(Player player, String skillType, float XP) {
UserManager.getPlayer(player).applyXpGain(getSkillType(skillType), XP);
addRawXP(player, skillType, XP, "UNKNOWN");
}
/**
* Adds raw XP to the player.
* </br>
* This function is designed for API usage.
*
* @param player The player to add XP to
* @param skillType The skill to add XP to
* @param XP The amount of XP to add
* @param xpGainReason The reason to gain XP
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidXPGainReasonException if the given xpGainReason is not valid
*/
public static void addRawXP(Player player, String skillType, float XP, String xpGainReason) {
addRawXP(player, skillType, XP, xpGainReason, false);
}
/**
* Adds raw XP to the player.
* </br>
* This function is designed for API usage.
*
* @param player The player to add XP to
* @param skillType The skill to add XP to
* @param XP The amount of XP to add
* @param xpGainReason The reason to gain XP
* @param isUnshared true if the XP cannot be shared with party members
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidXPGainReasonException if the given xpGainReason is not valid
*/
public static void addRawXP(Player player, String skillType, float XP, String xpGainReason, boolean isUnshared) {
if (isUnshared) {
getPlayer(player).beginUnsharedXpGain(getSkillType(skillType), XP, getXPGainReason(xpGainReason));
return;
}
getPlayer(player).applyXpGain(getSkillType(skillType), XP, getXPGainReason(xpGainReason));
}
/**
* Adds raw XP to an offline player.
* </br>
* This function is designed for API usage.
*
* @deprecated We're using float for our XP values now
* replaced by {@link #addRawXPOffline(String playerName, String skillType, float XP)}
*/
@Deprecated
public static void addRawXPOffline(String playerName, String skillType, int XP) {
addRawXPOffline(playerName, skillType, (float) XP);
@@ -78,6 +132,9 @@ public final class ExperienceAPI {
* </br>
* This function is designed for API usage.
*
* @deprecated We're using uuids to get an offline player
* replaced by {@link #addRawXPOffline(UUID uuid, String skillType, float XP)}
*
* @param playerName The player to add XP to
* @param skillType The skill to add XP to
* @param XP The amount of XP to add
@@ -85,10 +142,27 @@ public final class ExperienceAPI {
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
*/
@Deprecated
public static void addRawXPOffline(String playerName, String skillType, float XP) {
addOfflineXP(playerName, getSkillType(skillType), (int) Math.floor(XP));
}
/**
* Adds raw XP to an offline player.
* </br>
* This function is designed for API usage.
*
* @param uuid The UUID of player to add XP to
* @param skillType The skill to add XP to
* @param XP The amount of XP to add
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
*/
public static void addRawXPOffline(UUID uuid, String skillType, float XP) {
addOfflineXP(uuid, getSkillType(skillType), (int) Math.floor(XP));
}
/**
* Adds XP to the player, calculates for XP Rate only.
* </br>
@@ -100,8 +174,26 @@ public final class ExperienceAPI {
*
* @throws InvalidSkillException if the given skill is not valid
*/
@Deprecated
public static void addMultipliedXP(Player player, String skillType, int XP) {
UserManager.getPlayer(player).applyXpGain(getSkillType(skillType), (int) (XP * ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier()));
addMultipliedXP(player, skillType, XP, "UNKNOWN");
}
/**
* Adds XP to the player, calculates for XP Rate only.
* </br>
* This function is designed for API usage.
*
* @param player The player to add XP to
* @param skillType The skill to add XP to
* @param XP The amount of XP to add
* @param xpGainReason The reason to gain XP
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidXPGainReasonException if the given xpGainReason is not valid
*/
public static void addMultipliedXP(Player player, String skillType, int XP, String xpGainReason) {
getPlayer(player).applyXpGain(getSkillType(skillType), (int) (XP * ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier()), getXPGainReason(xpGainReason));
}
/**
@@ -116,6 +208,7 @@ public final class ExperienceAPI {
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
*/
@Deprecated
public static void addMultipliedXPOffline(String playerName, String skillType, int XP) {
addOfflineXP(playerName, getSkillType(skillType), (int) (XP * ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier()));
}
@@ -131,10 +224,51 @@ public final class ExperienceAPI {
*
* @throws InvalidSkillException if the given skill is not valid
*/
@Deprecated
public static void addModifiedXP(Player player, String skillType, int XP) {
addModifiedXP(player, skillType, XP, "UNKNOWN");
}
/**
* Adds XP to the player, calculates for XP Rate and skill modifier.
* </br>
* This function is designed for API usage.
*
* @param player The player to add XP to
* @param skillType The skill to add XP to
* @param XP The amount of XP to add
* @param xpGainReason The reason to gain XP
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidXPGainReasonException if the given xpGainReason is not valid
*/
public static void addModifiedXP(Player player, String skillType, int XP, String xpGainReason) {
addModifiedXP(player, skillType, XP, xpGainReason, false);
}
/**
* Adds XP to the player, calculates for XP Rate and skill modifier.
* </br>
* This function is designed for API usage.
*
* @param player The player to add XP to
* @param skillType The skill to add XP to
* @param XP The amount of XP to add
* @param xpGainReason The reason to gain XP
* @param isUnshared true if the XP cannot be shared with party members
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidXPGainReasonException if the given xpGainReason is not valid
*/
public static void addModifiedXP(Player player, String skillType, int XP, String xpGainReason, boolean isUnshared) {
SkillType skill = getSkillType(skillType);
UserManager.getPlayer(player).applyXpGain(skill, (int) (XP / skill.getXpModifier() * ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier()));
if (isUnshared) {
getPlayer(player).beginUnsharedXpGain(skill, (int) (XP / skill.getXpModifier() * ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier()), getXPGainReason(xpGainReason));
return;
}
getPlayer(player).applyXpGain(skill, (int) (XP / skill.getXpModifier() * ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier()), getXPGainReason(xpGainReason));
}
/**
@@ -149,6 +283,7 @@ public final class ExperienceAPI {
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
*/
@Deprecated
public static void addModifiedXPOffline(String playerName, String skillType, int XP) {
SkillType skill = getSkillType(skillType);
@@ -167,8 +302,51 @@ public final class ExperienceAPI {
*
* @throws InvalidSkillException if the given skill is not valid
*/
@Deprecated
public static void addXP(Player player, String skillType, int XP) {
UserManager.getPlayer(player).beginXpGain(getSkillType(skillType), XP);
addXP(player, skillType, XP, "UNKNOWN");
}
/**
* Adds XP to the player, calculates for XP Rate, skill modifiers, perks, child skills,
* and party sharing.
* </br>
* This function is designed for API usage.
*
* @param player The player to add XP to
* @param skillType The skill to add XP to
* @param XP The amount of XP to add
* @param xpGainReason The reason to gain XP
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidXPGainReasonException if the given xpGainReason is not valid
*/
public static void addXP(Player player, String skillType, int XP, String xpGainReason) {
addXP(player, skillType, XP, xpGainReason, false);
}
/**
* Adds XP to the player, calculates for XP Rate, skill modifiers, perks, child skills,
* and party sharing.
* </br>
* This function is designed for API usage.
*
* @param player The player to add XP to
* @param skillType The skill to add XP to
* @param XP The amount of XP to add
* @param xpGainReason The reason to gain XP
* @param isUnshared true if the XP cannot be shared with party members
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidXPGainReasonException if the given xpGainReason is not valid
*/
public static void addXP(Player player, String skillType, int XP, String xpGainReason, boolean isUnshared) {
if (isUnshared) {
getPlayer(player).beginUnsharedXpGain(getSkillType(skillType), XP, getXPGainReason(xpGainReason));
return;
}
getPlayer(player).beginXpGain(getSkillType(skillType), XP, getXPGainReason(xpGainReason));
}
/**
@@ -184,7 +362,7 @@ public final class ExperienceAPI {
* @throws UnsupportedOperationException if the given skill is a child skill
*/
public static int getXP(Player player, String skillType) {
return UserManager.getPlayer(player).getProfile().getSkillXpLevel(getNonChildSkillType(skillType));
return getPlayer(player).getSkillXpLevel(getNonChildSkillType(skillType));
}
/**
@@ -200,10 +378,28 @@ public final class ExperienceAPI {
* @throws InvalidPlayerException if the given player does not exist in the database
* @throws UnsupportedOperationException if the given skill is a child skill
*/
@Deprecated
public static int getOfflineXP(String playerName, String skillType) {
return getOfflineProfile(playerName).getSkillXpLevel(getNonChildSkillType(skillType));
}
/**
* Get the amount of XP an offline player has in a specific skill.
* </br>
* This function is designed for API usage.
*
* @param uuid The player to get XP for
* @param skillType The skill to get XP for
* @return the amount of XP in a given skill
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
* @throws UnsupportedOperationException if the given skill is a child skill
*/
public static int getOfflineXP(UUID uuid, String skillType) {
return getOfflineProfile(uuid).getSkillXpLevel(getNonChildSkillType(skillType));
}
/**
* Get the raw amount of XP a player has in a specific skill.
* </br>
@@ -217,7 +413,7 @@ public final class ExperienceAPI {
* @throws UnsupportedOperationException if the given skill is a child skill
*/
public static float getXPRaw(Player player, String skillType) {
return UserManager.getPlayer(player).getProfile().getSkillXpLevelRaw(getNonChildSkillType(skillType));
return getPlayer(player).getSkillXpLevelRaw(getNonChildSkillType(skillType));
}
/**
@@ -233,10 +429,28 @@ public final class ExperienceAPI {
* @throws InvalidPlayerException if the given player does not exist in the database
* @throws UnsupportedOperationException if the given skill is a child skill
*/
@Deprecated
public static float getOfflineXPRaw(String playerName, String skillType) {
return getOfflineProfile(playerName).getSkillXpLevelRaw(getNonChildSkillType(skillType));
}
/**
* Get the raw amount of XP an offline player has in a specific skill.
* </br>
* This function is designed for API usage.
*
* @param uuid The player to get XP for
* @param skillType The skill to get XP for
* @return the amount of XP in a given skill
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
* @throws UnsupportedOperationException if the given skill is a child skill
*/
public static float getOfflineXPRaw(UUID uuid, String skillType) {
return getOfflineProfile(uuid).getSkillXpLevelRaw(getNonChildSkillType(skillType));
}
/**
* Get the total amount of XP needed to reach the next level.
* </br>
@@ -250,7 +464,7 @@ public final class ExperienceAPI {
* @throws UnsupportedOperationException if the given skill is a child skill
*/
public static int getXPToNextLevel(Player player, String skillType) {
return UserManager.getPlayer(player).getProfile().getXpToLevel(getNonChildSkillType(skillType));
return getPlayer(player).getXpToLevel(getNonChildSkillType(skillType));
}
/**
@@ -266,10 +480,28 @@ public final class ExperienceAPI {
* @throws InvalidPlayerException if the given player does not exist in the database
* @throws UnsupportedOperationException if the given skill is a child skill
*/
@Deprecated
public static int getOfflineXPToNextLevel(String playerName, String skillType) {
return getOfflineProfile(playerName).getXpToLevel(getNonChildSkillType(skillType));
}
/**
* Get the total amount of XP an offline player needs to reach the next level.
* </br>
* This function is designed for API usage.
*
* @param uuid The player to get XP for
* @param skillType The skill to get XP for
* @return the total amount of XP needed to reach the next level
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
* @throws UnsupportedOperationException if the given skill is a child skill
*/
public static int getOfflineXPToNextLevel(UUID uuid, String skillType) {
return getOfflineProfile(uuid).getXpToLevel(getNonChildSkillType(skillType));
}
/**
* Get the amount of XP remaining until the next level.
* </br>
@@ -285,7 +517,7 @@ public final class ExperienceAPI {
public static int getXPRemaining(Player player, String skillType) {
SkillType skill = getNonChildSkillType(skillType);
PlayerProfile profile = UserManager.getPlayer(player).getProfile();
PlayerProfile profile = getPlayer(player).getProfile();
return profile.getXpToLevel(skill) - profile.getSkillXpLevel(skill);
}
@@ -303,14 +535,34 @@ public final class ExperienceAPI {
* @throws InvalidPlayerException if the given player does not exist in the database
* @throws UnsupportedOperationException if the given skill is a child skill
*/
@Deprecated
public static int getOfflineXPRemaining(String playerName, String skillType) {
SkillType skill = getNonChildSkillType(skillType);
PlayerProfile profile = getOfflineProfile(playerName);
return profile.getXpToLevel(skill) - profile.getSkillXpLevel(skill);
}
/**
* Get the amount of XP an offline player has left before leveling up.
* </br>
* This function is designed for API usage.
*
* @param uuid The player to get XP for
* @param skillType The skill to get XP for
* @return the amount of XP needed to reach the next level
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
* @throws UnsupportedOperationException if the given skill is a child skill
*/
public static float getOfflineXPRemaining(UUID uuid, String skillType) {
SkillType skill = getNonChildSkillType(skillType);
PlayerProfile profile = getOfflineProfile(uuid);
return profile.getXpToLevel(skill) - profile.getSkillXpLevelRaw(skill);
}
/**
* Add levels to a skill.
* </br>
@@ -323,7 +575,7 @@ public final class ExperienceAPI {
* @throws InvalidSkillException if the given skill is not valid
*/
public static void addLevel(Player player, String skillType, int levels) {
UserManager.getPlayer(player).getProfile().addLevels(getSkillType(skillType), levels);
getPlayer(player).addLevels(getSkillType(skillType), levels);
}
/**
@@ -338,6 +590,7 @@ public final class ExperienceAPI {
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
*/
@Deprecated
public static void addLevelOffline(String playerName, String skillType, int levels) {
PlayerProfile profile = getOfflineProfile(playerName);
SkillType skill = getSkillType(skillType);
@@ -349,12 +602,43 @@ public final class ExperienceAPI {
profile.addLevels(parentSkill, (levels / parentSkills.size()));
}
profile.save();
profile.scheduleAsyncSave();
return;
}
profile.addLevels(skill, levels);
profile.save();
profile.scheduleAsyncSave();
}
/**
* Add levels to a skill for an offline player.
* </br>
* This function is designed for API usage.
*
* @param uuid The player to add levels to
* @param skillType Type of skill to add levels to
* @param levels Number of levels to add
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
*/
public static void addLevelOffline(UUID uuid, String skillType, int levels) {
PlayerProfile profile = getOfflineProfile(uuid);
SkillType skill = getSkillType(skillType);
if (skill.isChildSkill()) {
Set<SkillType> parentSkills = FamilyTree.getParents(skill);
for (SkillType parentSkill : parentSkills) {
profile.addLevels(parentSkill, (levels / parentSkills.size()));
}
profile.scheduleAsyncSave();
return;
}
profile.addLevels(skill, levels);
profile.scheduleAsyncSave();
}
/**
@@ -369,7 +653,7 @@ public final class ExperienceAPI {
* @throws InvalidSkillException if the given skill is not valid
*/
public static int getLevel(Player player, String skillType) {
return UserManager.getPlayer(player).getProfile().getSkillLevel(getSkillType(skillType));
return getPlayer(player).getSkillLevel(getSkillType(skillType));
}
/**
@@ -384,10 +668,27 @@ public final class ExperienceAPI {
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
*/
@Deprecated
public static int getLevelOffline(String playerName, String skillType) {
return getOfflineProfile(playerName).getSkillLevel(getSkillType(skillType));
}
/**
* Get the level an offline player has in a specific skill.
* </br>
* This function is designed for API usage.
*
* @param uuid The player to get the level for
* @param skillType The skill to get the level for
* @return the level of a given skill
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
*/
public static int getLevelOffline(UUID uuid, String skillType) {
return getOfflineProfile(uuid).getSkillLevel(getSkillType(skillType));
}
/**
* Gets the power level of a player.
* </br>
@@ -397,7 +698,7 @@ public final class ExperienceAPI {
* @return the power level of the player
*/
public static int getPowerLevel(Player player) {
return UserManager.getPlayer(player).getPowerLevel();
return getPlayer(player).getPowerLevel();
}
/**
@@ -410,11 +711,33 @@ public final class ExperienceAPI {
*
* @throws InvalidPlayerException if the given player does not exist in the database
*/
@Deprecated
public static int getPowerLevelOffline(String playerName) {
int powerLevel = 0;
PlayerProfile profile = getOfflineProfile(playerName);
for (SkillType type : SkillType.nonChildSkills()) {
for (SkillType type : SkillType.NON_CHILD_SKILLS) {
powerLevel += profile.getSkillLevel(type);
}
return powerLevel;
}
/**
* Gets the power level of an offline player.
* </br>
* This function is designed for API usage.
*
* @param uuid The player to get the power level for
* @return the power level of the player
*
* @throws InvalidPlayerException if the given player does not exist in the database
*/
public static int getPowerLevelOffline(UUID uuid) {
int powerLevel = 0;
PlayerProfile profile = getOfflineProfile(uuid);
for (SkillType type : SkillType.NON_CHILD_SKILLS) {
powerLevel += profile.getSkillLevel(type);
}
@@ -460,10 +783,28 @@ public final class ExperienceAPI {
*
* @return the position on the leaderboard
*/
@Deprecated
public static int getPlayerRankSkill(String playerName, String skillType) {
return mcMMO.getDatabaseManager().readRank(getOfflineProfile(playerName).getPlayerName()).get(getNonChildSkillType(skillType).toString());
return mcMMO.getDatabaseManager().readRank(getOfflineProfile(playerName).getPlayerName()).get(getNonChildSkillType(skillType));
}
/**
* Get the position on the leaderboard of a player.
* </br>
* This function is designed for API usage.
*
* @param uuid The name of the player to check
* @param skillType The skill to check
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
* @throws UnsupportedOperationException if the given skill is a child skill
*
* @return the position on the leaderboard
*/
public static int getPlayerRankSkill(UUID uuid, String skillType) {
return mcMMO.getDatabaseManager().readRank(getOfflineProfile(uuid).getPlayerName()).get(getNonChildSkillType(skillType));
}
/**
* Get the position on the power level leaderboard of a player.
@@ -476,8 +817,24 @@ public final class ExperienceAPI {
*
* @return the position on the power level leaderboard
*/
@Deprecated
public static int getPlayerRankOverall(String playerName) {
return mcMMO.getDatabaseManager().readRank(getOfflineProfile(playerName).getPlayerName()).get("ALL");
return mcMMO.getDatabaseManager().readRank(getOfflineProfile(playerName).getPlayerName()).get(null);
}
/**
* Get the position on the power level leaderboard of a player.
* </br>
* This function is designed for API usage.
*
* @param uuid The name of the player to check
*
* @throws InvalidPlayerException if the given player does not exist in the database
*
* @return the position on the power level leaderboard
*/
public static int getPlayerRankOverall(UUID uuid) {
return mcMMO.getDatabaseManager().readRank(getOfflineProfile(uuid).getPlayerName()).get(null);
}
/**
@@ -492,7 +849,7 @@ public final class ExperienceAPI {
* @throws InvalidSkillException if the given skill is not valid
*/
public static void setLevel(Player player, String skillType, int skillLevel) {
UserManager.getPlayer(player).getProfile().modifySkill(getSkillType(skillType), skillLevel);
getPlayer(player).modifySkill(getSkillType(skillType), skillLevel);
}
/**
@@ -507,10 +864,27 @@ public final class ExperienceAPI {
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
*/
@Deprecated
public static void setLevelOffline(String playerName, String skillType, int skillLevel) {
getOfflineProfile(playerName).modifySkill(getSkillType(skillType), skillLevel);
}
/**
* Sets the level of an offline player in a specific skill type.
* </br>
* This function is designed for API usage.
*
* @param uuid The player to set the level of
* @param skillType The skill to set the level for
* @param skillLevel The value to set the level to
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
*/
public static void setLevelOffline(UUID uuid, String skillType, int skillLevel) {
getOfflineProfile(uuid).modifySkill(getSkillType(skillType), skillLevel);
}
/**
* Sets the XP of a player in a specific skill type.
* </br>
@@ -524,7 +898,7 @@ public final class ExperienceAPI {
* @throws UnsupportedOperationException if the given skill is a child skill
*/
public static void setXP(Player player, String skillType, int newValue) {
UserManager.getPlayer(player).getProfile().setSkillXpLevel(getNonChildSkillType(skillType), newValue);
getPlayer(player).setSkillXpLevel(getNonChildSkillType(skillType), newValue);
}
/**
@@ -540,10 +914,28 @@ public final class ExperienceAPI {
* @throws InvalidPlayerException if the given player does not exist in the database
* @throws UnsupportedOperationException if the given skill is a child skill
*/
@Deprecated
public static void setXPOffline(String playerName, String skillType, int newValue) {
getOfflineProfile(playerName).setSkillXpLevel(getNonChildSkillType(skillType), newValue);
}
/**
* Sets the XP of an offline player in a specific skill type.
* </br>
* This function is designed for API usage.
*
* @param uuid The player to set the XP of
* @param skillType The skill to set the XP for
* @param newValue The value to set the XP to
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
* @throws UnsupportedOperationException if the given skill is a child skill
*/
public static void setXPOffline(UUID uuid, String skillType, int newValue) {
getOfflineProfile(uuid).setSkillXpLevel(getNonChildSkillType(skillType), newValue);
}
/**
* Removes XP from a player in a specific skill type.
* </br>
@@ -557,7 +949,7 @@ public final class ExperienceAPI {
* @throws UnsupportedOperationException if the given skill is a child skill
*/
public static void removeXP(Player player, String skillType, int xp) {
UserManager.getPlayer(player).getProfile().removeXp(getNonChildSkillType(skillType), xp);
getPlayer(player).removeXp(getNonChildSkillType(skillType), xp);
}
/**
@@ -573,32 +965,85 @@ public final class ExperienceAPI {
* @throws InvalidPlayerException if the given player does not exist in the database
* @throws UnsupportedOperationException if the given skill is a child skill
*/
@Deprecated
public static void removeXPOffline(String playerName, String skillType, int xp) {
getOfflineProfile(playerName).removeXp(getNonChildSkillType(skillType), xp);
}
/**
* Removes XP from an offline player in a specific skill type.
* </br>
* This function is designed for API usage.
*
* @param uuid The player to change the XP of
* @param skillType The skill to change the XP for
* @param xp The amount of XP to remove
*
* @throws InvalidSkillException if the given skill is not valid
* @throws InvalidPlayerException if the given player does not exist in the database
* @throws UnsupportedOperationException if the given skill is a child skill
*/
public static void removeXPOffline(UUID uuid, String skillType, int xp) {
getOfflineProfile(uuid).removeXp(getNonChildSkillType(skillType), xp);
}
/**
* Check how much XP is needed for a specific level with the selected level curve.
* </br>
* This function is designed for API usage.
*
* @param level The level to get the amount of XP for
*
* @throws InvalidFormulaTypeException if the given formulaType is not valid
*/
public static int getXpNeededToLevel(int level) {
return mcMMO.getFormulaManager().getCachedXpToLevel(level, ExperienceConfig.getInstance().getFormulaType());
}
/**
* Check how much XP is needed for a specific level with the provided level curve.
* </br>
* This function is designed for API usage.
*
* @param level The level to get the amount of XP for
* @param formulaType The formula type to get the amount of XP for
*
* @throws InvalidFormulaTypeException if the given formulaType is not valid
*/
public static int getXpNeededToLevel(int level, String formulaType) {
return mcMMO.getFormulaManager().getCachedXpToLevel(level, getFormulaType(formulaType));
}
// Utility methods follow.
private static void addOfflineXP(UUID playerUniqueId, SkillType skill, int XP) {
PlayerProfile profile = getOfflineProfile(playerUniqueId);
private static void addOfflineXP(String playerName, SkillType skill, int XP) {
PlayerProfile profile = getOfflineProfile(playerName);
if (skill.isChildSkill()) {
Set<SkillType> parentSkills = FamilyTree.getParents(skill);
for (SkillType parentSkill : parentSkills) {
profile.setSkillXpLevel(parentSkill, profile.getSkillLevel(parentSkill) + (XP / parentSkills.size()));
}
profile.save();
return;
}
profile.setSkillXpLevel(skill, profile.getSkillXpLevel(skill) + XP);
profile.addXp(skill, XP);
profile.save();
}
@Deprecated
private static void addOfflineXP(String playerName, SkillType skill, int XP) {
PlayerProfile profile = getOfflineProfile(playerName);
profile.addXp(skill, XP);
profile.scheduleAsyncSave();
}
private static PlayerProfile getOfflineProfile(UUID uuid) {
PlayerProfile profile = mcMMO.getDatabaseManager().loadPlayerProfile(uuid);
if (!profile.isLoaded()) {
throw new InvalidPlayerException();
}
return profile;
}
@Deprecated
private static PlayerProfile getOfflineProfile(String playerName) {
PlayerProfile profile = mcMMO.getDatabaseManager().loadPlayerProfile(playerName, false);
UUID uuid = mcMMO.p.getServer().getOfflinePlayer(playerName).getUniqueId();
PlayerProfile profile = mcMMO.getDatabaseManager().loadPlayerProfile(uuid);
if (!profile.isLoaded()) {
throw new InvalidPlayerException();
@@ -626,4 +1071,32 @@ public final class ExperienceAPI {
return skill;
}
private static XPGainReason getXPGainReason(String reason) throws InvalidXPGainReasonException {
XPGainReason xpGainReason = XPGainReason.getXPGainReason(reason);
if (xpGainReason == null) {
throw new InvalidXPGainReasonException();
}
return xpGainReason;
}
private static FormulaType getFormulaType(String formula) throws InvalidFormulaTypeException {
FormulaType formulaType = FormulaType.getFormulaType(formula);
if (formulaType == null) {
throw new InvalidFormulaTypeException();
}
return formulaType;
}
private static McMMOPlayer getPlayer(Player player) throws McMMOPlayerNotFoundException {
if (!UserManager.hasPlayerDataKey(player)) {
throw new McMMOPlayerNotFoundException(player);
}
return UserManager.getPlayer(player);
}
}

View File

@@ -1,14 +1,17 @@
package com.gmail.nossr50.api;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.UUID;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.party.PartyLeader;
import com.gmail.nossr50.party.PartyManager;
import com.gmail.nossr50.util.player.UserManager;
@@ -79,7 +82,7 @@ public final class PartyAPI {
Party party = PartyManager.getParty(partyName);
if (party == null) {
party = new Party(player.getName(), partyName);
party = new Party(new PartyLeader(player.getUniqueId(), player.getName()), partyName);
}
PartyManager.addToParty(UserManager.getPlayer(player), party);
@@ -105,7 +108,7 @@ public final class PartyAPI {
* @return the leader of the party
*/
public static String getPartyLeader(String partyName) {
return PartyManager.getPartyLeader(partyName);
return PartyManager.getPartyLeaderName(partyName);
}
/**
@@ -114,10 +117,11 @@ public final class PartyAPI {
* This function is designed for API usage.
*
* @param partyName The name of the party to set the leader of
* @param player The player to set as leader
* @param playerName The playerName to set as leader
*/
public static void setPartyLeader(String partyName, String player) {
PartyManager.setPartyLeader(player, PartyManager.getParty(partyName));
@Deprecated
public static void setPartyLeader(String partyName, String playerName) {
PartyManager.setPartyLeader(mcMMO.p.getServer().getOfflinePlayer(playerName).getUniqueId(), PartyManager.getParty(partyName));
}
/**
@@ -132,8 +136,8 @@ public final class PartyAPI {
public static List<OfflinePlayer> getOnlineAndOfflineMembers(Player player) {
List<OfflinePlayer> members = new ArrayList<OfflinePlayer>();
for (String memberName : PartyManager.getAllMembers(player)) {
OfflinePlayer member = mcMMO.p.getServer().getOfflinePlayer(memberName);
for (UUID memberUniqueId : PartyManager.getAllMembers(player).keySet()) {
OfflinePlayer member = mcMMO.p.getServer().getOfflinePlayer(memberUniqueId);
members.add(member);
}
return members;
@@ -147,7 +151,20 @@ public final class PartyAPI {
* @param player The player to check
* @return all the player names in the player's party
*/
@Deprecated
public static LinkedHashSet<String> getMembers(Player player) {
return (LinkedHashSet<String>) PartyManager.getAllMembers(player).values();
}
/**
* Get a list of all player names and uuids in this player's party.
* </br>
* This function is designed for API usage.
*
* @param player The player to check
* @return all the player names and uuids in the player's party
*/
public static LinkedHashMap<UUID, String> getMembersMap(Player player) {
return PartyManager.getAllMembers(player);
}
@@ -174,4 +191,25 @@ public final class PartyAPI {
public static List<Player> getOnlineMembers(Player player) {
return PartyManager.getOnlineMembers(player);
}
/**
* Check is a certain party has an ally
* </br>
* This function is designed for API usage.
*
* @param partyName The name of the party to check
* @return true if the party has an ally, false otherwise
*/
public static boolean hasAlly(String partyName) {
return getAllyName(partyName) != null;
}
public static String getAllyName(String partyName) {
Party ally = PartyManager.getParty(partyName).getAlly();
if (ally != null) {
return ally.getName();
}
return null;
}
}

View File

@@ -0,0 +1,93 @@
package com.gmail.nossr50.api;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import com.gmail.nossr50.datatypes.skills.SkillType;
public final class SkillAPI {
private SkillAPI() {}
/**
* Returns a list of strings with mcMMO's skills
* This includes parent and child skills
* </br>
* This function is designed for API usage.
*
* @return a list of strings with valid skill names
*/
public static List<String> getSkills() {
return getListFromEnum(Arrays.asList(SkillType.values()));
}
/**
* Returns a list of strings with mcMMO's skills
* This only includes parent skills
* </br>
* This function is designed for API usage.
*
* @return a list of strings with valid skill names
*/
public static List<String> getNonChildSkills() {
return getListFromEnum(SkillType.NON_CHILD_SKILLS);
}
/**
* Returns a list of strings with mcMMO's skills
* This only includes child skills
* </br>
* This function is designed for API usage.
*
* @return a list of strings with valid skill names
*/
public static List<String> getChildSkills() {
return getListFromEnum(SkillType.CHILD_SKILLS);
}
/**
* Returns a list of strings with mcMMO's skills
* This only includes combat skills
* </br>
* This function is designed for API usage.
*
* @return a list of strings with valid skill names
*/
public static List<String> getCombatSkills() {
return getListFromEnum(SkillType.COMBAT_SKILLS);
}
/**
* Returns a list of strings with mcMMO's skills
* This only includes gathering skills
* </br>
* This function is designed for API usage.
*
* @return a list of strings with valid skill names
*/
public static List<String> getGatheringSkills() {
return getListFromEnum(SkillType.GATHERING_SKILLS);
}
/**
* Returns a list of strings with mcMMO's skills
* This only includes misc skills
* </br>
* This function is designed for API usage.
*
* @return a list of strings with valid skill names
*/
public static List<String> getMiscSkills() {
return getListFromEnum(SkillType.MISC_SKILLS);
}
private static List<String> getListFromEnum(List<SkillType> skillsTypes) {
List<String> skills = new ArrayList<String>();
for (SkillType skillType : skillsTypes) {
skills.add(skillType.name());
}
return skills;
}
}

View File

@@ -0,0 +1,9 @@
package com.gmail.nossr50.api.exceptions;
public class InvalidFormulaTypeException extends RuntimeException {
private static final long serialVersionUID = 3368670229490121886L;
public InvalidFormulaTypeException() {
super("That is not a valid FormulaType.");
}
}

View File

@@ -0,0 +1,9 @@
package com.gmail.nossr50.api.exceptions;
public class InvalidXPGainReasonException extends RuntimeException {
private static final long serialVersionUID = 4427052841957931157L;
public InvalidXPGainReasonException() {
super("That is not a valid XPGainReason.");
}
}

View File

@@ -0,0 +1,11 @@
package com.gmail.nossr50.api.exceptions;
import org.bukkit.entity.Player;
public class McMMOPlayerNotFoundException extends RuntimeException {
private static final long serialVersionUID = 761917904993202836L;
public McMMOPlayerNotFoundException(Player player) {
super("McMMOPlayer object was not found for: " + player.getName() + " " + player.getUniqueId());
}
}

View File

@@ -1,12 +1,11 @@
package com.gmail.nossr50.chat;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.plugin.Plugin;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.events.chat.McMMOPartyChatEvent;
import com.gmail.nossr50.runnables.party.PartyChatTask;
public class PartyChatManager extends ChatManager {
private Party party;
@@ -26,14 +25,6 @@ public class PartyChatManager extends ChatManager {
@Override
protected void sendMessage() {
if (Config.getInstance().getPartyChatColorLeaderName() && senderName.equalsIgnoreCase(party.getLeader())) {
message = message.replaceAll(displayName, ChatColor.GOLD + displayName + ChatColor.RESET);
}
for (Player member : party.getOnlineMembers()) {
member.sendMessage(message);
}
plugin.getLogger().info("[P]<" + party.getName() + ">" + message);
new PartyChatTask(plugin, party, senderName, displayName, message).runTask(plugin);
}
}

View File

@@ -2,16 +2,13 @@ package com.gmail.nossr50.commands;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
@@ -32,7 +29,11 @@ public class KrakenCommand implements TabExecutor {
return true;
}
UserManager.getPlayer((Player) sender).getFishingManager().unleashTheKraken();
if (!CommandUtils.hasPlayerDataKey(sender)) {
return true;
}
UserManager.getPlayer(sender.getName()).getFishingManager().unleashTheKraken();
return true;
case 1:
@@ -41,7 +42,7 @@ public class KrakenCommand implements TabExecutor {
return true;
}
String playerName = Misc.getMatchedPlayerName(args[0]);
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(playerName);
if (!CommandUtils.checkPlayerExistence(sender, playerName, mcMMOPlayer)) {
@@ -60,7 +61,7 @@ public class KrakenCommand implements TabExecutor {
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
switch (args.length) {
case 1:
Set<String> playerNames = UserManager.getPlayerNames();
List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
default:
return ImmutableList.of();

View File

@@ -0,0 +1,351 @@
package com.gmail.nossr50.commands;
import java.io.BufferedReader;
import java.io.Closeable;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.datatypes.skills.ModConfigType;
import com.gmail.nossr50.util.Misc;
public class McImportCommand implements CommandExecutor {
int fileAmount;
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
switch (args.length) {
case 0:
importModConfig();
return true;
default:
return false;
}
}
public boolean importModConfig() {
String importFilePath = mcMMO.getModDirectory() + File.separator + "import";
File importFile = new File(importFilePath, "import.log");
mcMMO.p.getLogger().info("Starting import of mod materials...");
fileAmount = 0;
HashMap<ModConfigType, ArrayList<String>> materialNames = new HashMap<ModConfigType, ArrayList<String>>();
BufferedReader in = null;
try {
// Open the file
in = new BufferedReader(new FileReader(importFile));
String line;
String materialName;
String modName;
// While not at the end of the file
while ((line = in.readLine()) != null) {
String[] split1 = line.split("material ");
if (split1.length != 2) {
continue;
}
String[] split2 = split1[1].split(" with");
if (split2.length != 2) {
continue;
}
materialName = split2[0];
// Categorise each material under a mod config type
ModConfigType type = ModConfigType.getModConfigType(materialName);
if (!materialNames.containsKey(type)) {
materialNames.put(type, new ArrayList<String>());
}
materialNames.get(type).add(materialName);
continue;
}
}
catch (FileNotFoundException e) {
mcMMO.p.getLogger().warning("Could not find " + importFile.getAbsolutePath() + " ! (No such file or directory)");
mcMMO.p.getLogger().warning("Copy and paste latest.log to " + importFile.getParentFile().getAbsolutePath() + " and rename it to import.log");
return false;
}
catch (Exception e) {
e.printStackTrace();
return false;
}
finally {
tryClose(in);
}
createOutput(materialNames);
mcMMO.p.getLogger().info("Import finished! Created " + fileAmount + " files!");
return true;
}
private void createOutput(HashMap<ModConfigType, ArrayList<String>> materialNames) {
for (ModConfigType modConfigType : materialNames.keySet()) {
HashMap<String, ArrayList<String>> materialNamesType = new HashMap<String, ArrayList<String>>();
for (String materialName : materialNames.get(modConfigType)) {
String modName = Misc.getModName(materialName);
if (!materialNamesType.containsKey(modName)) {
materialNamesType.put(modName, new ArrayList<String>());
}
materialNamesType.get(modName).add(materialName);
}
createOutput(modConfigType, materialNamesType);
}
}
private void tryClose(Closeable c) {
if (c == null) {
return;
}
try {
c.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
private void createOutput(ModConfigType modConfigType, HashMap<String, ArrayList<String>> materialNames) {
File outputFilePath = new File(mcMMO.getModDirectory() + File.separator + "output");
if (!outputFilePath.exists() && !outputFilePath.mkdirs()) {
mcMMO.p.getLogger().severe("Could not create output directory! " + outputFilePath.getAbsolutePath());
}
FileWriter out = null;
String type = modConfigType.name().toLowerCase();
for (String modName : materialNames.keySet()) {
File outputFile = new File(outputFilePath, modName + "." + type + ".yml");
mcMMO.p.getLogger().info("Creating " + outputFile.getName());
try {
if (outputFile.exists() && !outputFile.delete()) {
mcMMO.p.getLogger().severe("Not able to delete old output file! " + outputFile.getAbsolutePath());
}
if (!outputFile.createNewFile()) {
mcMMO.p.getLogger().severe("Could not create output file! " + outputFile.getAbsolutePath());
continue;
}
StringBuilder writer = new StringBuilder();
HashMap<String, ArrayList<String>> configSections = getConfigSections(modConfigType, modName, materialNames);
if (configSections == null) {
mcMMO.p.getLogger().severe("Something went wrong!! type is " + type);
return;
}
// Write the file, go through each skill and write all the materials
for (String configSection : configSections.keySet()) {
if (configSection.equals("UNIDENTIFIED")) {
writer.append("# This isn't a valid config section and all materials in this category need to be").append("\r\n");
writer.append("# copy and pasted to a valid section of this config file.").append("\r\n");
}
writer.append(configSection).append(":").append("\r\n");
for (String line : configSections.get(configSection)) {
writer.append(line).append("\r\n");
}
writer.append("\r\n");
}
out = new FileWriter(outputFile);
out.write(writer.toString());
}
catch (IOException e) {
e.printStackTrace();
return;
}
catch (Exception e) {
e.printStackTrace();
return;
}
finally {
tryClose(out);
fileAmount++;
}
}
}
private HashMap<String, ArrayList<String>> getConfigSections(ModConfigType type, String modName, HashMap<String, ArrayList<String>> materialNames) {
switch (type) {
case BLOCKS:
return getConfigSectionsBlocks(modName, materialNames);
case TOOLS:
return getConfigSectionsTools(modName, materialNames);
case ARMOR:
return getConfigSectionsArmor(modName, materialNames);
case UNKNOWN:
return getConfigSectionsUnknown(modName, materialNames);
}
return null;
}
private HashMap<String, ArrayList<String>> getConfigSectionsBlocks(String modName, HashMap<String, ArrayList<String>> materialNames) {
HashMap<String, ArrayList<String>> configSections = new HashMap<String, ArrayList<String>>();
// Go through all the materials and categorise them under a skill
for (String materialName : materialNames.get(modName)) {
String skillName = "UNIDENTIFIED";
if (materialName.contains("ORE")) {
skillName = "Mining";
}
else if (materialName.contains("LOG") || materialName.contains("LEAVES")) {
skillName = "Woodcutting";
}
else if (materialName.contains("GRASS") || materialName.contains("FLOWER") || materialName.contains("CROP")) {
skillName = "Herbalism";
}
else if (materialName.contains("DIRT") || materialName.contains("SAND")) {
skillName = "Excavation";
}
if (!configSections.containsKey(skillName)) {
configSections.put(skillName, new ArrayList<String>());
}
ArrayList<String> skillContents = configSections.get(skillName);
skillContents.add(" " + materialName + "|0:");
skillContents.add(" " + " " + "XP_Gain: 99");
skillContents.add(" " + " " + "Double_Drops_Enabled: true");
if (skillName.equals("Mining")) {
skillContents.add(" " + " " + "Smelting_XP_Gain: 9");
}
else if (skillName.equals("Woodcutting")) {
skillContents.add(" " + " " + "Is_Log: " + materialName.contains("LOG"));
}
}
return configSections;
}
private HashMap<String, ArrayList<String>> getConfigSectionsTools(String modName, HashMap<String, ArrayList<String>> materialNames) {
HashMap<String, ArrayList<String>> configSections = new HashMap<String, ArrayList<String>>();
// Go through all the materials and categorise them under a tool type
for (String materialName : materialNames.get(modName)) {
String toolType = "UNIDENTIFIED";
if (materialName.contains("PICKAXE")) {
toolType = "Pickaxes";
}
else if (materialName.contains("AXE")) {
toolType = "Axes";
}
else if (materialName.contains("BOW")) {
toolType = "Bows";
}
else if (materialName.contains("HOE")) {
toolType = "Hoes";
}
else if (materialName.contains("SHOVEL") || materialName.contains("SPADE")) {
toolType = "Shovels";
}
else if (materialName.contains("SWORD")) {
toolType = "Swords";
}
if (!configSections.containsKey(toolType)) {
configSections.put(toolType, new ArrayList<String>());
}
ArrayList<String> skillContents = configSections.get(toolType);
skillContents.add(" " + materialName + ":");
skillContents.add(" " + " " + "XP_Modifier: 1.0");
skillContents.add(" " + " " + "Tier: 1");
skillContents.add(" " + " " + "Ability_Enabled: true");
addRepairableLines(materialName, skillContents);
}
return configSections;
}
private HashMap<String, ArrayList<String>> getConfigSectionsArmor(String modName, HashMap<String, ArrayList<String>> materialNames) {
HashMap<String, ArrayList<String>> configSections = new HashMap<String, ArrayList<String>>();
// Go through all the materials and categorise them under an armor type
for (String materialName : materialNames.get(modName)) {
String toolType = "UNIDENTIFIED";
if (materialName.contains("BOOT") || materialName.contains("SHOE")) {
toolType = "Boots";
}
else if (materialName.contains("CHESTPLATE") || materialName.contains("CHEST")) {
toolType = "Chestplates";
}
else if (materialName.contains("HELM") || materialName.contains("HAT")) {
toolType = "Helmets";
}
else if (materialName.contains("LEGGINGS") || materialName.contains("LEGS") || materialName.contains("PANTS")) {
toolType = "Leggings";
}
if (!configSections.containsKey(toolType)) {
configSections.put(toolType, new ArrayList<String>());
}
ArrayList<String> skillContents = configSections.get(toolType);
skillContents.add(" " + materialName + ":");
addRepairableLines(materialName, skillContents);
}
return configSections;
}
private void addRepairableLines(String materialName, ArrayList<String> skillContents) {
skillContents.add(" " + " " + "Repairable: true");
skillContents.add(" " + " " + "Repair_Material: REPAIR_MATERIAL_NAME");
skillContents.add(" " + " " + "Repair_Material_Data_Value: 0");
skillContents.add(" " + " " + "Repair_Material_Quantity: 9");
skillContents.add(" " + " " + "Repair_Material_Pretty_Name: Repair Item Name");
skillContents.add(" " + " " + "Repair_MinimumLevel: 0");
skillContents.add(" " + " " + "Repair_XpMultiplier: 1.0");
Material material = Material.matchMaterial(materialName);
short durability = (material == null) ? (short) 9999 : material.getMaxDurability();
skillContents.add(" " + " " + "Durability: " + ((durability > 0) ? durability : (short) 9999));
}
private HashMap<String, ArrayList<String>> getConfigSectionsUnknown(String modName, HashMap<String, ArrayList<String>> materialNames) {
HashMap<String, ArrayList<String>> configSections = new HashMap<String, ArrayList<String>>();
// Go through all the materials and print them
for (String materialName : materialNames.get(modName)) {
String configKey = "UNIDENTIFIED";
if (!configSections.containsKey(configKey)) {
configSections.put(configKey, new ArrayList<String>());
}
ArrayList<String> skillContents = configSections.get(configKey);
skillContents.add(" " + materialName);
}
return configSections;
}
}

View File

@@ -2,6 +2,7 @@ package com.gmail.nossr50.commands;
import org.bukkit.command.CommandSender;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Permissions;
@@ -17,13 +18,13 @@ public class McabilityCommand extends ToggleCommand {
}
@Override
protected void applyCommandAction() {
player.sendMessage(LocaleLoader.getString("Commands.Ability." + (mcMMOPlayer.getAbilityUse() ? "Off" : "On")));
protected void applyCommandAction(McMMOPlayer mcMMOPlayer) {
mcMMOPlayer.getPlayer().sendMessage(LocaleLoader.getString("Commands.Ability." + (mcMMOPlayer.getAbilityUse() ? "Off" : "On")));
mcMMOPlayer.toggleAbilityUse();
}
@Override
protected void sendSuccessMessage(CommandSender sender) {
sender.sendMessage("Ability use has been toggled for " + player.getName()); // TODO: Localize
protected void sendSuccessMessage(CommandSender sender, String playerName) {
sender.sendMessage(LocaleLoader.getString("Commands.Ability.Toggle", playerName));
}
}

View File

@@ -1,4 +1,4 @@
package com.gmail.nossr50.commands.database;
package com.gmail.nossr50.commands;
import java.util.ArrayList;
import java.util.Collections;
@@ -11,6 +11,7 @@ import org.bukkit.command.TabExecutor;
import org.bukkit.util.StringUtil;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.commands.database.ConvertDatabaseCommand;
import com.gmail.nossr50.commands.experience.ConvertExperienceCommand;
import com.gmail.nossr50.database.DatabaseManagerFactory;
import com.gmail.nossr50.datatypes.database.DatabaseType;
@@ -23,36 +24,34 @@ public class McconvertCommand implements TabExecutor {
private static final List<String> DATABASE_TYPES;
private static final List<String> SUBCOMMANDS = ImmutableList.of("database", "experience");
private CommandExecutor databaseConvertCommand = new ConvertDatabaseCommand();
private CommandExecutor databaseConvertCommand = new ConvertDatabaseCommand();
private CommandExecutor experienceConvertCommand = new ConvertExperienceCommand();
static {
ArrayList<String> formulaTypes = new ArrayList<String>();
ArrayList<String> databaseTypes = new ArrayList<String>();
for (FormulaType type : FormulaType.values()) {
formulaTypes.add(type.toString());
}
Collections.sort(formulaTypes);
FORMULA_TYPES = ImmutableList.copyOf(formulaTypes);
}
static {
ArrayList<String> databaseTypes = new ArrayList<String>();
for (DatabaseType type : DatabaseType.values()) {
databaseTypes.add(type.toString());
}
// Custom stuff
databaseTypes.remove(DatabaseType.CUSTOM);
databaseTypes.remove(DatabaseType.CUSTOM.toString());
if (mcMMO.getDatabaseManager().getDatabaseType() == DatabaseType.CUSTOM) {
databaseTypes.add(DatabaseManagerFactory.getCustomDatabaseManagerClass().getName());
}
Collections.sort(formulaTypes);
Collections.sort(databaseTypes);
FORMULA_TYPES = ImmutableList.copyOf(formulaTypes);
DATABASE_TYPES = ImmutableList.copyOf(databaseTypes);
}
@Override

View File

@@ -2,6 +2,7 @@ package com.gmail.nossr50.commands;
import org.bukkit.command.CommandSender;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Permissions;
@@ -17,13 +18,13 @@ public class McgodCommand extends ToggleCommand {
}
@Override
protected void applyCommandAction() {
player.sendMessage(LocaleLoader.getString("Commands.GodMode." + (mcMMOPlayer.getGodMode() ? "Disabled" : "Enabled")));
protected void applyCommandAction(McMMOPlayer mcMMOPlayer) {
mcMMOPlayer.getPlayer().sendMessage(LocaleLoader.getString("Commands.GodMode." + (mcMMOPlayer.getGodMode() ? "Disabled" : "Enabled")));
mcMMOPlayer.toggleGodMode();
}
@Override
protected void sendSuccessMessage(CommandSender sender) {
sender.sendMessage("God mode has been toggled for " + player.getName()); // TODO: Localize
protected void sendSuccessMessage(CommandSender sender, String playerName) {
sender.sendMessage(LocaleLoader.getString("Commands.GodMode.Toggle", playerName));
}
}

View File

@@ -9,7 +9,6 @@ import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.commands.party.PartySubcommandType;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.HolidayManager;
import com.gmail.nossr50.util.Permissions;
public class McmmoCommand implements CommandExecutor {
@@ -28,11 +27,14 @@ public class McmmoCommand implements CommandExecutor {
if (Config.getInstance().getDonateMessageEnabled()) {
sender.sendMessage(LocaleLoader.getString("MOTD.Donate"));
sender.sendMessage(ChatColor.GOLD + " - " + ChatColor.GREEN + "gjmcferrin@gmail.com" + ChatColor.GOLD + " Paypal");
sender.sendMessage(ChatColor.GOLD + " - " + ChatColor.GREEN + "tft_02@hotmail.com" + ChatColor.GOLD + " Paypal");
}
sender.sendMessage(LocaleLoader.getString("MOTD.Version", mcMMO.p.getDescription().getVersion()));
HolidayManager.anniversaryCheck(sender);
if (Permissions.showversion(sender)) {
sender.sendMessage(LocaleLoader.getString("MOTD.Version", mcMMO.p.getDescription().getVersion()));
}
mcMMO.getHolidayManager().anniversaryCheck(sender);
return true;
case 1:
@@ -43,9 +45,9 @@ public class McmmoCommand implements CommandExecutor {
}
sender.sendMessage(LocaleLoader.getString("Commands.mcc.Header"));
displayPartyCommands(sender);
displayGeneralCommands(sender);
displayOtherCommands(sender);
displayPartyCommands(sender);
}
return true;
@@ -54,55 +56,57 @@ public class McmmoCommand implements CommandExecutor {
}
}
private void displayPartyCommands(CommandSender sender) {
if (Permissions.party(sender)) {
sender.sendMessage(LocaleLoader.getString("Commands.Party.Commands"));
sender.sendMessage(" /party create <" + LocaleLoader.getString("Commands.Usage.PartyName") + "> " + LocaleLoader.getString("Commands.Party1"));
sender.sendMessage(" /party join <" + LocaleLoader.getString("Commands.Usage.Player") + "> " + LocaleLoader.getString("Commands.Party2"));
sender.sendMessage(" /party quit " + LocaleLoader.getString("Commands.Party.Quit"));
private void displayGeneralCommands(CommandSender sender) {
sender.sendMessage(ChatColor.DARK_AQUA + " /mcstats " + LocaleLoader.getString("Commands.Stats"));
sender.sendMessage(ChatColor.DARK_AQUA + " /<skill>" + LocaleLoader.getString("Commands.SkillInfo"));
sender.sendMessage(ChatColor.DARK_AQUA + " /mctop " + LocaleLoader.getString("Commands.Leaderboards"));
if (Permissions.partyChat(sender)) {
sender.sendMessage(" /party chat " + LocaleLoader.getString("Commands.Party.Toggle"));
}
if (Permissions.inspect(sender)) {
sender.sendMessage(ChatColor.DARK_AQUA + " /inspect " + LocaleLoader.getString("Commands.Inspect"));
}
sender.sendMessage(" /party invite <" + LocaleLoader.getString("Commands.Usage.Player") + "> " + LocaleLoader.getString("Commands.Party.Invite"));
sender.sendMessage(" /party accept " + LocaleLoader.getString("Commands.Party.Accept"));
if (Permissions.partySubcommand(sender, PartySubcommandType.TELEPORT)) {
sender.sendMessage(" /party teleport " + LocaleLoader.getString("Commands.Party.Teleport"));
}
if (Permissions.mcability(sender)) {
sender.sendMessage(ChatColor.DARK_AQUA + " /mcability " + LocaleLoader.getString("Commands.ToggleAbility"));
}
}
private void displayOtherCommands(CommandSender sender) {
sender.sendMessage(LocaleLoader.getString("Commands.Other"));
sender.sendMessage(" /mcstats " + LocaleLoader.getString("Commands.Stats"));
sender.sendMessage(" /mctop " + LocaleLoader.getString("Commands.Leaderboards"));
if (Permissions.skillreset(sender)) {
sender.sendMessage(" /skillreset <skill|all> " + LocaleLoader.getString("Commands.Reset"));
}
if (Permissions.mcability(sender)) {
sender.sendMessage(" /mcability " + LocaleLoader.getString("Commands.ToggleAbility"));
}
if (Permissions.adminChat(sender)) {
sender.sendMessage(" /adminchat " + LocaleLoader.getString("Commands.AdminToggle"));
}
if (Permissions.inspect(sender)) {
sender.sendMessage(" /inspect " + LocaleLoader.getString("Commands.Inspect"));
sender.sendMessage(ChatColor.DARK_AQUA + " /skillreset <skill|all> " + LocaleLoader.getString("Commands.Reset"));
}
if (Permissions.mmoedit(sender)) {
sender.sendMessage(" /mmoedit " + LocaleLoader.getString("Commands.mmoedit"));
sender.sendMessage(ChatColor.DARK_AQUA + " /mmoedit " + LocaleLoader.getString("Commands.mmoedit"));
}
if (Permissions.adminChat(sender)) {
sender.sendMessage(ChatColor.DARK_AQUA + " /adminchat " + LocaleLoader.getString("Commands.AdminToggle"));
}
if (Permissions.mcgod(sender)) {
sender.sendMessage(" /mcgod " + LocaleLoader.getString("Commands.mcgod"));
sender.sendMessage(ChatColor.DARK_AQUA + " /mcgod " + LocaleLoader.getString("Commands.mcgod"));
}
}
sender.sendMessage(" /<skill>" + LocaleLoader.getString("Commands.SkillInfo"));
private void displayPartyCommands(CommandSender sender) {
if (Permissions.party(sender)) {
sender.sendMessage(LocaleLoader.getString("Commands.Party.Commands"));
sender.sendMessage(ChatColor.DARK_AQUA + " /party create <" + LocaleLoader.getString("Commands.Usage.PartyName") + "> " + LocaleLoader.getString("Commands.Party1"));
sender.sendMessage(ChatColor.DARK_AQUA + " /party join <" + LocaleLoader.getString("Commands.Usage.Player") + "> " + LocaleLoader.getString("Commands.Party2"));
sender.sendMessage(ChatColor.DARK_AQUA + " /party quit " + LocaleLoader.getString("Commands.Party.Quit"));
if (Permissions.partyChat(sender)) {
sender.sendMessage(ChatColor.DARK_AQUA + " /party chat " + LocaleLoader.getString("Commands.Party.Toggle"));
}
sender.sendMessage(ChatColor.DARK_AQUA + " /party invite <" + LocaleLoader.getString("Commands.Usage.Player") + "> " + LocaleLoader.getString("Commands.Party.Invite"));
sender.sendMessage(ChatColor.DARK_AQUA + " /party accept " + LocaleLoader.getString("Commands.Party.Accept"));
if (Permissions.partySubcommand(sender, PartySubcommandType.TELEPORT)) {
sender.sendMessage(ChatColor.DARK_AQUA + " /party teleport <" + LocaleLoader.getString("Commands.Usage.Player") + "> " + LocaleLoader.getString("Commands.Party.Teleport"));
}
}
}
}

View File

@@ -2,6 +2,7 @@ package com.gmail.nossr50.commands;
import org.bukkit.command.CommandSender;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Permissions;
@@ -17,17 +18,17 @@ public class McrefreshCommand extends ToggleCommand {
}
@Override
protected void applyCommandAction() {
protected void applyCommandAction(McMMOPlayer mcMMOPlayer) {
mcMMOPlayer.setRecentlyHurt(0);
mcMMOPlayer.getProfile().resetCooldowns();
mcMMOPlayer.resetCooldowns();
mcMMOPlayer.resetToolPrepMode();
mcMMOPlayer.resetAbilityMode();
player.sendMessage(LocaleLoader.getString("Ability.Generic.Refresh"));
mcMMOPlayer.getPlayer().sendMessage(LocaleLoader.getString("Ability.Generic.Refresh"));
}
@Override
protected void sendSuccessMessage(CommandSender sender) {
sender.sendMessage(LocaleLoader.getString("Commands.mcrefresh.Success", player.getName()));
protected void sendSuccessMessage(CommandSender sender, String playerName) {
sender.sendMessage(LocaleLoader.getString("Commands.mcrefresh.Success", playerName));
}
}

View File

@@ -6,21 +6,17 @@ import java.util.List;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.util.StringUtils;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
import com.gmail.nossr50.util.scoreboards.ScoreboardManager;
import com.google.common.collect.ImmutableList;
public class McscoreboardCommand implements TabExecutor {
private static final List<String> SCOREBOARD_TYPES = ImmutableList.of("clear", "rank", "stats", "top");
private static final List<String> FIRST_ARGS = ImmutableList.of("keep", "time", "clear");
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
@@ -28,94 +24,49 @@ public class McscoreboardCommand implements TabExecutor {
return true;
}
Player player = (Player) sender;
switch (args.length) {
case 0:
clearScoreboard(player);
return true;
case 1:
if (args[0].equalsIgnoreCase("clear")) {
clearScoreboard(player);
if (args[0].equalsIgnoreCase("clear") || args[0].equalsIgnoreCase("reset")) {
ScoreboardManager.clearBoard(sender.getName());
sender.sendMessage(LocaleLoader.getString("Commands.Scoreboard.Clear"));
return true;
}
else if (args[0].equalsIgnoreCase("rank")) {
if (!Config.getInstance().getMcrankScoreboardEnabled()) {
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
if (args[0].equalsIgnoreCase("keep")) {
if (!Config.getInstance().getAllowKeepBoard()) {
sender.sendMessage(LocaleLoader.getString("Commands.Disabled"));
return true;
}
ScoreboardManager.setupPlayerScoreboard(player.getName());
ScoreboardManager.enablePlayerRankScoreboard(player);
}
else if (args[0].equalsIgnoreCase("stats")) {
if (!Config.getInstance().getMcstatsScoreboardsEnabled()) {
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
if (!ScoreboardManager.isBoardShown(sender.getName())) {
sender.sendMessage(LocaleLoader.getString("Commands.Scoreboard.NoBoard"));
return true;
}
ScoreboardManager.setupPlayerScoreboard(player.getName());
ScoreboardManager.enablePlayerStatsScoreboard(UserManager.getPlayer(player));
}
else if (args[0].equalsIgnoreCase("top")) {
if (!Config.getInstance().getMctopScoreboardEnabled()) {
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
return true;
}
ScoreboardManager.enableGlobalStatsScoreboard(player, "all", 1);
}
else {
return false;
ScoreboardManager.keepBoard(sender.getName());
sender.sendMessage(LocaleLoader.getString("Commands.Scoreboard.Keep"));
return true;
}
return true;
return help(sender);
case 2:
if (!args[0].equalsIgnoreCase("top")) {
return false;
}
if (args[0].equalsIgnoreCase("time") || args[0].equalsIgnoreCase("timer")) {
if (CommandUtils.isInvalidInteger(sender, args[1])) {
return true;
}
if (!Config.getInstance().getMctopScoreboardEnabled()) {
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
int time = Math.abs(Integer.parseInt(args[1]));
ScoreboardManager.setRevertTimer(sender.getName(), time);
sender.sendMessage(LocaleLoader.getString("Commands.Scoreboard.Timer", time));
return true;
}
if (StringUtils.isInt(args[1])) {
ScoreboardManager.enableGlobalStatsScoreboard(player, "all", Math.abs(Integer.parseInt(args[1])));
return true;
}
if (CommandUtils.isInvalidSkill(sender, args[1])) {
return true;
}
ScoreboardManager.enableGlobalStatsScoreboard(player, args[1], 1);
return true;
case 3:
if (!args[0].equalsIgnoreCase("top")) {
return false;
}
if (!Config.getInstance().getMctopScoreboardEnabled()) {
sender.sendMessage("This scoreboard is not enabled."); //TODO: Localize
return true;
}
if (CommandUtils.isInvalidSkill(sender, args[1])) {
return true;
}
if (CommandUtils.isInvalidInteger(sender, args[2])) {
return true;
}
ScoreboardManager.enableGlobalStatsScoreboard(player, args[1], Math.abs(Integer.parseInt(args[2])));
return true;
return help(sender);
default:
return false;
return help(sender);
}
}
@@ -123,20 +74,17 @@ public class McscoreboardCommand implements TabExecutor {
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
switch (args.length) {
case 1:
return StringUtil.copyPartialMatches(args[0], SCOREBOARD_TYPES, new ArrayList<String>(SCOREBOARD_TYPES.size()));
case 2:
if (args[0].equalsIgnoreCase("top")) {
return StringUtil.copyPartialMatches(args[1], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
}
// Fallthrough
return StringUtil.copyPartialMatches(args[0], FIRST_ARGS, new ArrayList<String>(FIRST_ARGS.size()));
default:
return ImmutableList.of();
}
}
private void clearScoreboard(Player player) {
player.setScoreboard(mcMMO.p.getServer().getScoreboardManager().getMainScoreboard());
player.sendMessage("Your scoreboard has been cleared!"); //TODO: Locale
private boolean help(CommandSender sender) {
sender.sendMessage(LocaleLoader.getString("Commands.Scoreboard.Help.0"));
sender.sendMessage(LocaleLoader.getString("Commands.Scoreboard.Help.1"));
sender.sendMessage(LocaleLoader.getString("Commands.Scoreboard.Help.2"));
sender.sendMessage(LocaleLoader.getString("Commands.Scoreboard.Help.3"));
return true;
}
}

View File

@@ -11,7 +11,7 @@ import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import com.gmail.nossr50.datatypes.MobHealthbarType;
import com.gmail.nossr50.datatypes.player.PlayerProfile;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
@@ -37,18 +37,20 @@ public class MobhealthCommand implements TabExecutor {
return true;
}
if (!CommandUtils.hasPlayerDataKey(sender)) {
return true;
}
switch (args.length) {
case 1:
PlayerProfile playerProfile = UserManager.getPlayer((Player) sender).getProfile();
try {
MobHealthbarType type = MobHealthbarType.valueOf(args[0].toUpperCase().trim());
playerProfile.setMobHealthbarType(type);
sender.sendMessage("Display type changed to: " + type); //TODO: Localize
UserManager.getPlayer((Player) sender).getProfile().setMobHealthbarType(type);
sender.sendMessage(LocaleLoader.getString("Commands.Healthbars.Changed." + type.name()));
return true;
}
catch (IllegalArgumentException ex) {
sender.sendMessage("Invalid type!"); //TODO: Localize
sender.sendMessage(LocaleLoader.getString("Commands.Healthbars.Invalid"));
return true;
}

View File

@@ -2,25 +2,19 @@ package com.gmail.nossr50.commands;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
import com.google.common.collect.ImmutableList;
public abstract class ToggleCommand implements TabExecutor {
protected McMMOPlayer mcMMOPlayer;
protected Player player;
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
switch (args.length) {
@@ -34,10 +28,11 @@ public abstract class ToggleCommand implements TabExecutor {
return true;
}
player = (Player) sender;
mcMMOPlayer = UserManager.getPlayer(player);
if (!CommandUtils.hasPlayerDataKey(sender)) {
return true;
}
applyCommandAction();
applyCommandAction(UserManager.getPlayer(sender.getName()));
return true;
case 1:
@@ -46,21 +41,19 @@ public abstract class ToggleCommand implements TabExecutor {
return true;
}
String playerName = Misc.getMatchedPlayerName(args[0]);
mcMMOPlayer = UserManager.getPlayer(playerName);
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(playerName);
if (!CommandUtils.checkPlayerExistence(sender, playerName, mcMMOPlayer)) {
return true;
}
player = mcMMOPlayer.getPlayer();
if (CommandUtils.isOffline(sender, player)) {
if (CommandUtils.isOffline(sender, mcMMOPlayer.getPlayer())) {
return true;
}
applyCommandAction();
sendSuccessMessage(sender);
applyCommandAction(mcMMOPlayer);
sendSuccessMessage(sender, playerName);
return true;
default:
@@ -72,7 +65,7 @@ public abstract class ToggleCommand implements TabExecutor {
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
switch (args.length) {
case 1:
Set<String> playerNames = UserManager.getPlayerNames();
List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
default:
return ImmutableList.of();
@@ -81,6 +74,6 @@ public abstract class ToggleCommand implements TabExecutor {
protected abstract boolean hasOtherPermission(CommandSender sender);
protected abstract boolean hasSelfPermission(CommandSender sender);
protected abstract void applyCommandAction();
protected abstract void sendSuccessMessage(CommandSender sender);
protected abstract void applyCommandAction(McMMOPlayer mcMMOPlayer);
protected abstract void sendSuccessMessage(CommandSender sender, String playerName);
}

View File

@@ -18,11 +18,7 @@ import com.gmail.nossr50.util.commands.CommandUtils;
import com.google.common.collect.ImmutableList;
public class XprateCommand implements TabExecutor {
private double originalRate;
public XprateCommand() {
originalRate = ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier();
}
private final double ORIGINAL_XP_RATE = ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier();
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
@@ -42,7 +38,7 @@ public class XprateCommand implements TabExecutor {
mcMMO.p.toggleXpEventEnabled();
}
ExperienceConfig.getInstance().setExperienceGainsGlobalMultiplier(originalRate);
ExperienceConfig.getInstance().setExperienceGainsGlobalMultiplier(ORIGINAL_XP_RATE);
return true;
case 2:

View File

@@ -12,7 +12,9 @@ import org.bukkit.util.StringUtil;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.chat.ChatManager;
import com.gmail.nossr50.chat.ChatManagerFactory;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.chat.ChatMode;
import com.gmail.nossr50.datatypes.party.PartyFeature;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.commands.CommandUtils;
@@ -21,9 +23,8 @@ import com.gmail.nossr50.util.player.UserManager;
import com.google.common.collect.ImmutableList;
public abstract class ChatCommand implements TabExecutor {
protected ChatMode chatMode;
private ChatMode chatMode;
protected ChatManager chatManager;
private McMMOPlayer mcMMOPlayer;
public ChatCommand(ChatMode chatMode) {
this.chatMode = chatMode;
@@ -32,32 +33,40 @@ public abstract class ChatCommand implements TabExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
McMMOPlayer mcMMOPlayer;
switch (args.length) {
case 0:
if (CommandUtils.noConsoleUsage(sender)) {
return true;
}
mcMMOPlayer = UserManager.getPlayer((Player) sender);
if (!CommandUtils.hasPlayerDataKey(sender)) {
return true;
}
if (chatMode.isEnabled(mcMMOPlayer)) {
disableChatMode(sender);
mcMMOPlayer = UserManager.getPlayer(sender.getName());
if (mcMMOPlayer.isChatEnabled(chatMode)) {
disableChatMode(mcMMOPlayer, sender);
}
else {
enableChatMode(sender);
enableChatMode(mcMMOPlayer, sender);
}
return true;
case 1:
if (!CommandUtils.hasPlayerDataKey(sender)) {
return true;
}
if (CommandUtils.shouldEnableToggle(args[0])) {
if (CommandUtils.noConsoleUsage(sender)) {
return true;
}
mcMMOPlayer = UserManager.getPlayer((Player) sender);
enableChatMode(sender);
enableChatMode(UserManager.getPlayer(sender.getName()), sender);
return true;
}
@@ -66,9 +75,7 @@ public abstract class ChatCommand implements TabExecutor {
return true;
}
mcMMOPlayer = UserManager.getPlayer((Player) sender);
disableChatMode(sender);
disableChatMode(UserManager.getPlayer(sender.getName()), sender);
return true;
}
@@ -108,23 +115,28 @@ public abstract class ChatCommand implements TabExecutor {
protected abstract void handleChatSending(CommandSender sender, String[] args);
private void enableChatMode(CommandSender sender) {
private void enableChatMode(McMMOPlayer mcMMOPlayer, CommandSender sender) {
if (chatMode == ChatMode.PARTY && mcMMOPlayer.getParty() == null) {
sender.sendMessage(LocaleLoader.getString("Commands.Party.None"));
return;
}
chatMode.enable(mcMMOPlayer);
if (chatMode == ChatMode.PARTY && (mcMMOPlayer.getParty().getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.CHAT))) {
sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.1"));
return;
}
mcMMOPlayer.enableChat(chatMode);
sender.sendMessage(chatMode.getEnabledMessage());
}
private void disableChatMode(CommandSender sender) {
private void disableChatMode(McMMOPlayer mcMMOPlayer, CommandSender sender) {
if (chatMode == ChatMode.PARTY && mcMMOPlayer.getParty() == null) {
sender.sendMessage(LocaleLoader.getString("Commands.Party.None"));
return;
}
chatMode.disable(mcMMOPlayer);
mcMMOPlayer.disableChat(chatMode);
sender.sendMessage(chatMode.getDisabledMessage());
}
}

View File

@@ -4,8 +4,10 @@ import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.gmail.nossr50.chat.PartyChatManager;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.chat.ChatMode;
import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.party.PartyFeature;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.party.PartyManager;
import com.gmail.nossr50.util.player.UserManager;
@@ -28,6 +30,11 @@ public class PartyChatCommand extends ChatCommand {
return;
}
if (party.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.CHAT)) {
sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.1"));
return;
}
message = buildChatMessage(args, 0);
}
else {

View File

@@ -12,6 +12,7 @@ import com.gmail.nossr50.datatypes.database.DatabaseType;
import com.gmail.nossr50.datatypes.player.PlayerProfile;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.runnables.database.DatabaseConversionTask;
import com.gmail.nossr50.runnables.player.PlayerProfileLoadingTask;
import com.gmail.nossr50.util.player.UserManager;
public class ConvertDatabaseCommand implements CommandExecutor {
@@ -22,7 +23,7 @@ public class ConvertDatabaseCommand implements CommandExecutor {
DatabaseType previousType = DatabaseType.getDatabaseType(args[1]);
DatabaseType newType = mcMMO.getDatabaseManager().getDatabaseType();
if ((newType == DatabaseType.CUSTOM && DatabaseManagerFactory.getCustomDatabaseManagerClass().getSimpleName().equalsIgnoreCase(args[1])) || previousType == newType) {
if (previousType == newType || (newType == DatabaseType.CUSTOM && DatabaseManagerFactory.getCustomDatabaseManagerClass().getSimpleName().equalsIgnoreCase(args[1]))) {
sender.sendMessage(LocaleLoader.getString("Commands.mcconvert.Database.Same", newType.toString()));
return true;
}
@@ -39,17 +40,12 @@ public class ConvertDatabaseCommand implements CommandExecutor {
sender.sendMessage(LocaleLoader.getString("Commands.mcconvert.Database.InvalidType", args[1]));
return true;
}
}
catch (Exception e) {
sender.sendMessage(LocaleLoader.getString("Commands.mcconvert.Database.InvalidType", args[1]));
return true;
}
try {
oldDatabase = DatabaseManagerFactory.createCustomDatabaseManager((Class<? extends DatabaseManager>) clazz);
}
catch (Throwable t) {
sender.sendMessage("An error occurred during the conversion process."); // TODO: Localize
catch (Throwable e) {
e.printStackTrace();
sender.sendMessage(LocaleLoader.getString("Commands.mcconvert.Database.InvalidType", args[1]));
return true;
}
}
@@ -60,13 +56,13 @@ public class ConvertDatabaseCommand implements CommandExecutor {
UserManager.clearAll();
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
PlayerProfile profile = oldDatabase.loadPlayerProfile(player.getName(), false);
PlayerProfile profile = oldDatabase.loadPlayerProfile(player.getUniqueId());
if (profile.isLoaded()) {
mcMMO.getDatabaseManager().saveUser(profile);
}
UserManager.addUser(player);
new PlayerProfileLoadingTask(player).runTaskLaterAsynchronously(mcMMO.p, 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
}
new DatabaseConversionTask(oldDatabase, sender, previousType.toString(), newType.toString()).runTaskAsynchronously(mcMMO.p);

View File

@@ -2,7 +2,6 @@ package com.gmail.nossr50.commands.database;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
@@ -11,7 +10,6 @@ import org.bukkit.util.StringUtil;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
@@ -22,9 +20,9 @@ public class McremoveCommand implements TabExecutor {
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
switch (args.length) {
case 1:
String playerName = Misc.getMatchedPlayerName(args[0]);
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
if (UserManager.getPlayer(playerName, true) == null && CommandUtils.unloadedProfile(sender, mcMMO.getDatabaseManager().loadPlayerProfile(playerName, false))) {
if (UserManager.getOfflinePlayer(playerName) == null && CommandUtils.unloadedProfile(sender, mcMMO.getDatabaseManager().loadPlayerProfile(playerName, false))) {
return true;
}
@@ -46,7 +44,7 @@ public class McremoveCommand implements TabExecutor {
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
switch (args.length) {
case 1:
Set<String> playerNames = UserManager.getPlayerNames();
List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
default:
return ImmutableList.of();

View File

@@ -15,19 +15,21 @@ import com.google.common.collect.ImmutableList;
public class MmoshowdbCommand implements TabExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (args.length != 0) {
return false;
switch (args.length) {
case 0:
Class<?> clazz = DatabaseManagerFactory.getCustomDatabaseManagerClass();
if (clazz != null) {
sender.sendMessage(LocaleLoader.getString("Commands.mmoshowdb", clazz.getName()));
return true;
}
sender.sendMessage(LocaleLoader.getString("Commands.mmoshowdb", (Config.getInstance().getUseMySQL() ? "sql" : "flatfile")));
return true;
default:
return false;
}
Class<?> clazz = DatabaseManagerFactory.getCustomDatabaseManagerClass();
if (clazz != null) {
sender.sendMessage(LocaleLoader.getString("Commands.mmoshowdb", clazz.getName()));
return true;
}
sender.sendMessage(LocaleLoader.getString("Commands.mmoshowdb", (Config.getInstance().getUseMySQL() ? "sql" : "flatfile")));
return true;
}
@Override

View File

@@ -1,13 +1,14 @@
package com.gmail.nossr50.commands.experience;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.datatypes.player.PlayerProfile;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
import com.gmail.nossr50.datatypes.skills.XPGainReason;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.EventUtils;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.skills.SkillUtils;
public class AddlevelsCommand extends ExperienceCommand {
@Override
@@ -21,21 +22,25 @@ public class AddlevelsCommand extends ExperienceCommand {
}
@Override
protected void handleCommand(SkillType skill) {
protected void handleCommand(Player player, PlayerProfile profile, SkillType skill, int value) {
float xpRemoved = profile.getSkillXpLevelRaw(skill);
profile.addLevels(skill, value);
if (player != null) {
mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerLevelUpEvent(player, skill, value));
if (player == null) {
profile.scheduleAsyncSave();
return;
}
EventUtils.handleLevelChangeEvent(player, skill, value, xpRemoved, true, XPGainReason.COMMAND);
}
@Override
protected void handlePlayerMessageAll() {
protected void handlePlayerMessageAll(Player player, int value) {
player.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardAll.1", value));
}
@Override
protected void handlePlayerMessageSkill() {
player.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardSkill.1", value, SkillUtils.getSkillName(skill)));
protected void handlePlayerMessageSkill(Player player, int value, SkillType skill) {
player.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardSkill.1", value, skill.getName()));
}
}

View File

@@ -1,11 +1,14 @@
package com.gmail.nossr50.commands.experience;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.gmail.nossr50.datatypes.player.PlayerProfile;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.datatypes.skills.XPGainReason;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.skills.SkillUtils;
import com.gmail.nossr50.util.player.UserManager;
public class AddxpCommand extends ExperienceCommand {
@Override
@@ -19,22 +22,23 @@ public class AddxpCommand extends ExperienceCommand {
}
@Override
protected void handleCommand(SkillType skill) {
protected void handleCommand(Player player, PlayerProfile profile, SkillType skill, int value) {
if (player != null) {
mcMMOPlayer.applyXpGain(skill, value);
UserManager.getPlayer(player).applyXpGain(skill, value, XPGainReason.COMMAND);
}
else {
profile.addExperience(skill, value);
profile.addXp(skill, value);
profile.scheduleAsyncSave();
}
}
@Override
protected void handlePlayerMessageAll() {
protected void handlePlayerMessageAll(Player player, int value) {
player.sendMessage(LocaleLoader.getString("Commands.addxp.AwardAll", value));
}
@Override
protected void handlePlayerMessageSkill() {
player.sendMessage(LocaleLoader.getString("Commands.addxp.AwardSkill", value, SkillUtils.getSkillName(skill)));
protected void handlePlayerMessageSkill(Player player, int value, SkillType skill) {
player.sendMessage(LocaleLoader.getString("Commands.addxp.AwardSkill", value, skill.getName()));
}
}

View File

@@ -9,6 +9,7 @@ import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.datatypes.experience.FormulaType;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.runnables.database.FormulaConversionTask;
import com.gmail.nossr50.runnables.player.PlayerProfileLoadingTask;
import com.gmail.nossr50.util.player.UserManager;
public class ConvertExperienceCommand implements CommandExecutor {
@@ -37,7 +38,7 @@ public class ConvertExperienceCommand implements CommandExecutor {
new FormulaConversionTask(sender, newType).runTaskLater(mcMMO.p, 1);
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
UserManager.addUser(player);
new PlayerProfileLoadingTask(player).runTaskLaterAsynchronously(mcMMO.p, 1); // 1 Tick delay to ensure the player is marked as online before we begin loading
}
return true;

View File

@@ -2,7 +2,6 @@ package com.gmail.nossr50.commands.experience;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
@@ -15,24 +14,16 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.player.PlayerProfile;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
import com.gmail.nossr50.util.skills.SkillUtils;
import com.google.common.collect.ImmutableList;
public abstract class ExperienceCommand implements TabExecutor {
protected McMMOPlayer mcMMOPlayer;
protected Player player;
protected PlayerProfile profile;
protected boolean allSkills;
protected SkillType skill;
protected int value;
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
SkillType skill;
switch (args.length) {
case 2:
if (CommandUtils.noConsoleUsage(sender)) {
@@ -48,12 +39,13 @@ public abstract class ExperienceCommand implements TabExecutor {
return true;
}
player = (Player) sender;
mcMMOPlayer = UserManager.getPlayer(player);
profile = mcMMOPlayer.getProfile();
skill = SkillType.getSkill(args[0]);
editValues();
cleanUp();
if (args[1].equalsIgnoreCase("all")) {
skill = null;
}
editValues((Player) sender, UserManager.getPlayer(sender.getName()).getProfile(), skill, Integer.parseInt(args[1]));
return true;
case 3:
@@ -66,28 +58,32 @@ public abstract class ExperienceCommand implements TabExecutor {
return true;
}
String playerName = Misc.getMatchedPlayerName(args[0]);
mcMMOPlayer = UserManager.getPlayer(playerName, true);
skill = SkillType.getSkill(args[1]);
if (args[1].equalsIgnoreCase("all")) {
skill = null;
}
int value = Integer.parseInt(args[2]);
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
McMMOPlayer mcMMOPlayer = UserManager.getOfflinePlayer(playerName);
// If the mcMMOPlayer doesn't exist, create a temporary profile and check if it's present in the database. If it's not, abort the process.
if (mcMMOPlayer == null) {
profile = mcMMO.getDatabaseManager().loadPlayerProfile(playerName, false);
PlayerProfile profile = mcMMO.getDatabaseManager().loadPlayerProfile(playerName, false);
if (CommandUtils.unloadedProfile(sender, profile)) {
return true;
}
editValues();
profile.save(); // Since this is a temporary profile, we save it here.
editValues(null, profile, skill, value);
}
else {
profile = mcMMOPlayer.getProfile();
player = mcMMOPlayer.getPlayer();
editValues();
editValues(mcMMOPlayer.getPlayer(), mcMMOPlayer.getProfile(), skill, value);
}
handleSenderMessage(sender, playerName);
cleanUp();
handleSenderMessage(sender, playerName, skill);
return true;
default:
@@ -99,7 +95,7 @@ public abstract class ExperienceCommand implements TabExecutor {
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
switch (args.length) {
case 1:
Set<String> playerNames = UserManager.getPlayerNames();
List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
case 2:
return StringUtil.copyPartialMatches(args[1], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
@@ -110,70 +106,39 @@ public abstract class ExperienceCommand implements TabExecutor {
protected abstract boolean permissionsCheckSelf(CommandSender sender);
protected abstract boolean permissionsCheckOthers(CommandSender sender);
protected abstract void handleCommand(SkillType skill);
protected abstract void handlePlayerMessageAll();
protected abstract void handlePlayerMessageSkill();
protected abstract void handleCommand(Player player, PlayerProfile profile, SkillType skill, int value);
protected abstract void handlePlayerMessageAll(Player player, int value);
protected abstract void handlePlayerMessageSkill(Player player, int value, SkillType skill);
private boolean validateArguments(CommandSender sender, String skillName, String value) {
if (isInvalidInteger(sender, value) || isInvalidSkill(sender, skillName)) {
return false;
}
return true;
return !(CommandUtils.isInvalidInteger(sender, value) || (!skillName.equalsIgnoreCase("all") && CommandUtils.isInvalidSkill(sender, skillName)));
}
private boolean isInvalidInteger(CommandSender sender, String value) {
if (CommandUtils.isInvalidInteger(sender, value)) {
return true;
}
this.value = Integer.parseInt(value);
return false;
}
protected boolean isInvalidSkill(CommandSender sender, String skillName) {
if (skillName.equalsIgnoreCase("all")) {
allSkills = true;
return false;
}
else if (CommandUtils.isInvalidSkill(sender, skillName)) {
return true;
}
skill = SkillType.getSkill(skillName);
return false;
}
protected void handleSenderMessage(CommandSender sender, String playerName) {
if (allSkills) {
protected static void handleSenderMessage(CommandSender sender, String playerName, SkillType skill) {
if (skill == null) {
sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardAll.2", playerName));
}
else {
sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardSkill.2", SkillUtils.getSkillName(skill), playerName));
sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardSkill.2", skill.getName(), playerName));
}
}
protected void editValues() {
if (allSkills) {
for (SkillType skillType : SkillType.values()) {
handleCommand(skillType);
protected void editValues(Player player, PlayerProfile profile, SkillType skill, int value) {
if (skill == null) {
for (SkillType skillType : SkillType.NON_CHILD_SKILLS) {
handleCommand(player, profile, skillType, value);
}
if (player != null) {
handlePlayerMessageAll();
handlePlayerMessageAll(player, value);
}
}
else {
handleCommand(skill);
handleCommand(player, profile, skill, value);
if (player != null) {
handlePlayerMessageSkill();
handlePlayerMessageSkill(player, value, skill);
}
}
}
private void cleanUp() {
allSkills = false;
player = null;
}
}

View File

@@ -1,14 +1,14 @@
package com.gmail.nossr50.commands.experience;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.datatypes.player.PlayerProfile;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.events.experience.McMMOPlayerLevelDownEvent;
import com.gmail.nossr50.events.experience.McMMOPlayerLevelUpEvent;
import com.gmail.nossr50.datatypes.skills.XPGainReason;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.EventUtils;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.skills.SkillUtils;
public class MmoeditCommand extends ExperienceCommand {
@Override
@@ -22,30 +22,31 @@ public class MmoeditCommand extends ExperienceCommand {
}
@Override
protected void handleCommand(SkillType skill) {
protected void handleCommand(Player player, PlayerProfile profile, SkillType skill, int value) {
int skillLevel = profile.getSkillLevel(skill);
float xpRemoved = profile.getSkillXpLevelRaw(skill);
profile.modifySkill(skill, value);
if (player == null) {
profile.scheduleAsyncSave();
return;
}
int skillLevel = profile.getSkillLevel(skill);
if (value == skillLevel) {
return;
}
if (value > skillLevel) {
mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerLevelUpEvent(player, skill, value - skillLevel));
}
else if (value < skillLevel) {
mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerLevelDownEvent(player, skill, skillLevel - value));
}
EventUtils.handleLevelChangeEvent(player, skill, value, xpRemoved, value > skillLevel, XPGainReason.COMMAND);
}
@Override
protected void handlePlayerMessageAll() {
protected void handlePlayerMessageAll(Player player, int value) {
player.sendMessage(LocaleLoader.getString("Commands.mmoedit.AllSkills.1", value));
}
@Override
protected void handlePlayerMessageSkill() {
player.sendMessage(LocaleLoader.getString("Commands.mmoedit.Modified.1", SkillUtils.getSkillName(skill), value));
protected void handlePlayerMessageSkill(Player player, int value, SkillType skill) {
player.sendMessage(LocaleLoader.getString("Commands.mmoedit.Modified.1", skill.getName(), value));
}
}

View File

@@ -1,84 +1,88 @@
package com.gmail.nossr50.commands.experience;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.player.PlayerProfile;
import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.events.experience.McMMOPlayerLevelDownEvent;
import com.gmail.nossr50.datatypes.skills.XPGainReason;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.EventUtils;
import com.gmail.nossr50.util.Permissions;
import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
import com.gmail.nossr50.util.skills.SkillUtils;
public class SkillresetCommand extends ExperienceCommand {
private CommandSender sender;
private Command command;
private int argsLength;
import com.google.common.collect.ImmutableList;
/**
* This class mirrors the structure of ExperienceCommand, except the
* value/quantity argument is removed.
*/
public class SkillresetCommand implements TabExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
this.command = command;
this.sender = sender;
argsLength = args.length;
switch (args.length) {
case 1:
if (CommandUtils.noConsoleUsage(sender)) {
return true;
}
if (!Permissions.skillreset(sender)) {
if (!permissionsCheckSelf(sender)) {
sender.sendMessage(command.getPermissionMessage());
return true;
}
if (isInvalidSkill(sender, args[0])) {
if (!validateArguments(sender, args[0])) {
return true;
}
player = (Player) sender;
mcMMOPlayer = UserManager.getPlayer(player);
profile = mcMMOPlayer.getProfile();
editValues();
editValues((Player) sender, UserManager.getPlayer(sender.getName()).getProfile(), SkillType.getSkill(args[0]));
return true;
case 2:
if (!Permissions.skillresetOthers(sender)) {
if (!permissionsCheckOthers(sender)) {
sender.sendMessage(command.getPermissionMessage());
return true;
}
if (isInvalidSkill(sender, args[1])) {
if (!validateArguments(sender, args[1])) {
return true;
}
String playerName = Misc.getMatchedPlayerName(args[0]);
mcMMOPlayer = UserManager.getPlayer(playerName, true);
SkillType skill;
if (args[1].equalsIgnoreCase("all")) {
skill = null;
}
else {
skill = SkillType.getSkill(args[1]);
}
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
McMMOPlayer mcMMOPlayer = UserManager.getOfflinePlayer(playerName);
// If the mcMMOPlayer doesn't exist, create a temporary profile and check if it's present in the database. If it's not, abort the process.
if (mcMMOPlayer == null) {
profile = mcMMO.getDatabaseManager().loadPlayerProfile(playerName, false);
PlayerProfile profile = mcMMO.getDatabaseManager().loadPlayerProfile(playerName, false);
if (CommandUtils.unloadedProfile(sender, profile)) {
return true;
}
editValues();
profile.save(); // Since this is a temporary profile, we save it here.
editValues(null, profile, skill);
}
else {
profile = mcMMOPlayer.getProfile();
player = mcMMOPlayer.getPlayer();
editValues();
editValues(mcMMOPlayer.getPlayer(), mcMMOPlayer.getProfile(), skill);
}
handleSenderMessage(sender, playerName);
handleSenderMessage(sender, playerName, skill);
return true;
default:
@@ -87,36 +91,77 @@ public class SkillresetCommand extends ExperienceCommand {
}
@Override
protected boolean permissionsCheckSelf(CommandSender sender) {
return false;
}
@Override
protected boolean permissionsCheckOthers(CommandSender sender) {
return false;
}
@Override
protected void handleCommand(SkillType skill) {
if (argsLength == 1 && !Permissions.skillreset(sender, skill) || (argsLength == 2 && !Permissions.skillresetOthers(sender, skill))) {
sender.sendMessage(command.getPermissionMessage());
return;
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
switch (args.length) {
case 1:
List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
case 2:
return StringUtil.copyPartialMatches(args[1], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
default:
return ImmutableList.of();
}
}
protected void handleCommand(Player player, PlayerProfile profile, SkillType skill) {
int levelsRemoved = profile.getSkillLevel(skill);
float xpRemoved = profile.getSkillXpLevelRaw(skill);
profile.modifySkill(skill, 0);
if (player != null) {
mcMMO.p.getServer().getPluginManager().callEvent(new McMMOPlayerLevelDownEvent(player, skill, profile.getSkillLevel(skill)));
if (player == null) {
profile.scheduleAsyncSave();
return;
}
EventUtils.handleLevelChangeEvent(player, skill, levelsRemoved, xpRemoved, false, XPGainReason.COMMAND);
}
@Override
protected void handlePlayerMessageAll() {
protected boolean permissionsCheckSelf(CommandSender sender) {
return Permissions.skillreset(sender);
}
protected boolean permissionsCheckOthers(CommandSender sender) {
return Permissions.skillresetOthers(sender);
}
protected void handlePlayerMessageAll(Player player) {
player.sendMessage(LocaleLoader.getString("Commands.Reset.All"));
}
@Override
protected void handlePlayerMessageSkill() {
player.sendMessage(LocaleLoader.getString("Commands.Reset.Single", SkillUtils.getSkillName(skill)));
protected void handlePlayerMessageSkill(Player player, SkillType skill) {
player.sendMessage(LocaleLoader.getString("Commands.Reset.Single", skill.getName()));
}
private boolean validateArguments(CommandSender sender, String skillName) {
return !(CommandUtils.isInvalidSkill(sender, skillName) && !skillName.equalsIgnoreCase("all"));
}
protected static void handleSenderMessage(CommandSender sender, String playerName, SkillType skill) {
if (skill == null) {
sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardAll.2", playerName));
}
else {
sender.sendMessage(LocaleLoader.getString("Commands.addlevels.AwardSkill.2", skill.getName(), playerName));
}
}
protected void editValues(Player player, PlayerProfile profile, SkillType skill) {
if (skill == null) {
for (SkillType skillType : SkillType.NON_CHILD_SKILLS) {
handleCommand(player, profile, skillType);
}
if (player != null) {
handlePlayerMessageAll(player);
}
}
else {
handleCommand(player, profile, skill);
if (player != null) {
handlePlayerMessageSkill(player, skill);
}
}
}
}

View File

@@ -1,5 +1,7 @@
package com.gmail.nossr50.commands.hardcore;
import org.bukkit.command.CommandSender;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.skills.SkillType;
@@ -8,18 +10,18 @@ import com.gmail.nossr50.util.Permissions;
public class HardcoreCommand extends HardcoreModeCommand {
@Override
protected boolean checkTogglePermissions() {
protected boolean checkTogglePermissions(CommandSender sender) {
return Permissions.hardcoreToggle(sender);
}
@Override
protected boolean checkModifyPermissions() {
protected boolean checkModifyPermissions(CommandSender sender) {
return Permissions.hardcoreModify(sender);
}
@Override
protected boolean checkEnabled(String skill) {
if (skill.equalsIgnoreCase("ALL")) {
protected boolean checkEnabled(SkillType skill) {
if (skill == null) {
for (SkillType skillType : SkillType.values()) {
if (!skillType.getHardcoreStatLossEnabled()) {
return false;
@@ -29,35 +31,35 @@ public class HardcoreCommand extends HardcoreModeCommand {
return true;
}
return SkillType.getSkill(skill).getHardcoreStatLossEnabled();
return skill.getHardcoreStatLossEnabled();
}
@Override
protected void enable(String skill) {
toggle(true);
protected void enable(SkillType skill) {
toggle(true, skill);
}
@Override
protected void disable(String skill) {
toggle(false);
protected void disable(SkillType skill) {
toggle(false, skill);
}
@Override
protected void modify() {
Config.getInstance().setHardcoreDeathStatPenaltyPercentage(newPercent);
sender.sendMessage(LocaleLoader.getString("Hardcore.DeathStatLoss.PercentageChanged", percent.format(newPercent / 100D)));
protected void modify(CommandSender sender, double newPercentage) {
Config.getInstance().setHardcoreDeathStatPenaltyPercentage(newPercentage);
sender.sendMessage(LocaleLoader.getString("Hardcore.DeathStatLoss.PercentageChanged", percent.format(newPercentage / 100.0D)));
}
private void toggle(boolean enable) {
if (skill.equalsIgnoreCase("ALL")) {
for (SkillType skillType : SkillType.nonChildSkills()) {
Config.getInstance().setHardcoreStatLossEnabled(skillType, enable);
private void toggle(boolean enable, SkillType skill) {
if (skill == null) {
for (SkillType skillType : SkillType.NON_CHILD_SKILLS) {
skillType.setHardcoreStatLossEnabled(enable);
}
}
else {
Config.getInstance().setHardcoreStatLossEnabled(SkillType.getSkill(skill), enable);
skill.setHardcoreStatLossEnabled(enable);
}
mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Hardcore.Mode." + (enable ? "Enabled" : "Disabled"), LocaleLoader.getString("Hardcore.DeathStatLoss.Name"), skill));
mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Hardcore.Mode." + (enable ? "Enabled" : "Disabled"), LocaleLoader.getString("Hardcore.DeathStatLoss.Name"), (skill == null ? "all skills" : skill.getName())));
}
}

View File

@@ -17,31 +17,22 @@ import com.gmail.nossr50.util.commands.CommandUtils;
import com.google.common.collect.ImmutableList;
public abstract class HardcoreModeCommand implements TabExecutor {
protected CommandSender sender;
protected double newPercent;
protected DecimalFormat percent;
protected String skill;
public HardcoreModeCommand() {
percent = new DecimalFormat("##0.00%");
}
protected final DecimalFormat percent = new DecimalFormat("##0.00%");
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
switch (args.length) {
case 0:
this.sender = sender;
if (!checkTogglePermissions()) {
if (!checkTogglePermissions(sender)) {
sender.sendMessage(command.getPermissionMessage());
return true;
}
if (checkEnabled("ALL")) {
disable("ALL");
if (checkEnabled(null)) {
disable(null);
}
else {
enable("ALL");
enable(null);
}
return true;
@@ -53,7 +44,7 @@ public abstract class HardcoreModeCommand implements TabExecutor {
return true;
}
enable("ALL");
enable(null);
return true;
}
@@ -63,11 +54,11 @@ public abstract class HardcoreModeCommand implements TabExecutor {
return true;
}
disable("ALL");
disable(null);
return true;
}
if (isInvalidPercentage(sender, args[0])) {
if (CommandUtils.isInvalidDouble(sender, args[0])) {
return true;
}
@@ -76,16 +67,20 @@ public abstract class HardcoreModeCommand implements TabExecutor {
return true;
}
modify();
modify(sender, Double.parseDouble(args[0]));
return true;
case 2:
if (!args[0].equalsIgnoreCase("ALL") && CommandUtils.isChildSkill(sender, SkillType.getSkill(args[0]))) {
if (CommandUtils.isInvalidSkill(sender, args[0])) {
return true;
}
skill = args[0];
SkillType skill = SkillType.getSkill(args[0]);
if (!CommandUtils.isChildSkill(sender, skill)) {
return true;
}
if (CommandUtils.shouldEnableToggle(args[1])) {
if (!Permissions.hardcoreToggle(sender)) {
@@ -103,7 +98,7 @@ public abstract class HardcoreModeCommand implements TabExecutor {
return true;
}
disable(skill);
enable(skill);
return true;
}
@@ -128,19 +123,10 @@ public abstract class HardcoreModeCommand implements TabExecutor {
}
}
protected abstract boolean checkTogglePermissions();
protected abstract boolean checkModifyPermissions();
protected abstract boolean checkEnabled(String skill);
protected abstract void enable(String skill);
protected abstract void disable(String skill);
protected abstract void modify();
private boolean isInvalidPercentage(CommandSender sender, String value) {
if (CommandUtils.isInvalidDouble(sender, value)) {
return true;
}
newPercent = Double.parseDouble(value);
return false;
}
protected abstract boolean checkTogglePermissions(CommandSender sender);
protected abstract boolean checkModifyPermissions(CommandSender sender);
protected abstract boolean checkEnabled(SkillType skill);
protected abstract void enable(SkillType skill);
protected abstract void disable(SkillType skill);
protected abstract void modify(CommandSender sender, double newPercentage);
}

View File

@@ -1,5 +1,7 @@
package com.gmail.nossr50.commands.hardcore;
import org.bukkit.command.CommandSender;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.skills.SkillType;
@@ -8,18 +10,18 @@ import com.gmail.nossr50.util.Permissions;
public class VampirismCommand extends HardcoreModeCommand {
@Override
protected boolean checkTogglePermissions() {
protected boolean checkTogglePermissions(CommandSender sender) {
return Permissions.vampirismToggle(sender);
}
@Override
protected boolean checkModifyPermissions() {
protected boolean checkModifyPermissions(CommandSender sender) {
return Permissions.vampirismModify(sender);
}
@Override
protected boolean checkEnabled(String skill) {
if (skill.equalsIgnoreCase("ALL")) {
protected boolean checkEnabled(SkillType skill) {
if (skill == null) {
for (SkillType skillType : SkillType.values()) {
if (!skillType.getHardcoreVampirismEnabled()) {
return false;
@@ -29,35 +31,35 @@ public class VampirismCommand extends HardcoreModeCommand {
return true;
}
return SkillType.getSkill(skill).getHardcoreVampirismEnabled();
return skill.getHardcoreVampirismEnabled();
}
@Override
protected void enable(String skill) {
toggle(true);
protected void enable(SkillType skill) {
toggle(true, skill);
}
@Override
protected void disable(String skill) {
toggle(false);
protected void disable(SkillType skill) {
toggle(false, skill);
}
@Override
protected void modify() {
Config.getInstance().setHardcoreVampirismStatLeechPercentage(newPercent);
sender.sendMessage(LocaleLoader.getString("Hardcore.Vampirism.PercentageChanged", percent.format(newPercent / 100D)));
protected void modify(CommandSender sender, double newPercentage) {
Config.getInstance().setHardcoreVampirismStatLeechPercentage(newPercentage);
sender.sendMessage(LocaleLoader.getString("Hardcore.Vampirism.PercentageChanged", percent.format(newPercentage / 100.0D)));
}
private void toggle(boolean enabled) {
if (skill.equalsIgnoreCase("ALL")) {
for (SkillType skillType : SkillType.nonChildSkills()) {
Config.getInstance().setHardcoreVampirismEnabled(skillType, enabled);
private void toggle(boolean enable, SkillType skill) {
if (skill == null) {
for (SkillType skillType : SkillType.NON_CHILD_SKILLS) {
skillType.setHardcoreVampirismEnabled(enable);
}
}
else {
Config.getInstance().setHardcoreVampirismEnabled(SkillType.getSkill(skill), enabled);
skill.setHardcoreVampirismEnabled(enable);
}
mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Hardcore.Mode." + (enabled ? "Enabled" : "Disabled"), LocaleLoader.getString("Hardcore.Vampirism.Name"), skill));
mcMMO.p.getServer().broadcastMessage(LocaleLoader.getString("Hardcore.Mode." + (enable ? "Enabled" : "Disabled"), LocaleLoader.getString("Hardcore.Vampirism.Name"), (skill == null ? "all skills" : skill)));
}
}

View File

@@ -1,14 +1,16 @@
package com.gmail.nossr50.commands.party;
import org.bukkit.OfflinePlayer;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.party.PartyManager;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
public class PartyChangeOwnerCommand implements CommandExecutor {
@@ -17,14 +19,15 @@ public class PartyChangeOwnerCommand implements CommandExecutor {
switch (args.length) {
case 2:
Party playerParty = UserManager.getPlayer((Player) sender).getParty();
String targetName = Misc.getMatchedPlayerName(args[1]);
String targetName = CommandUtils.getMatchedPlayerName(args[1]);
OfflinePlayer target = mcMMO.p.getServer().getOfflinePlayer(targetName);
if (!playerParty.getMembers().contains(targetName)) {
if (!playerParty.hasMember(target.getUniqueId())) {
sender.sendMessage(LocaleLoader.getString("Party.NotInYourParty", targetName));
return true;
}
PartyManager.setPartyLeader(targetName, playerParty);
PartyManager.setPartyLeader(target.getUniqueId(), playerParty);
return true;
default:

View File

@@ -10,24 +10,22 @@ import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.player.UserManager;
public class PartyChangePasswordCommand implements CommandExecutor {
private Party playerParty;
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
playerParty = UserManager.getPlayer((Player) sender).getParty();
Party party = UserManager.getPlayer((Player) sender).getParty();
switch (args.length) {
case 1:
unprotectParty(sender);
unprotectParty(party, sender);
return true;
case 2:
if (args[1].equalsIgnoreCase("clear") || args[1].equalsIgnoreCase("reset")) {
unprotectParty(sender);
unprotectParty(party, sender);
return true;
}
protectParty(sender, args[1]);
protectParty(party, sender, args[1]);
return true;
default:
@@ -37,15 +35,15 @@ public class PartyChangePasswordCommand implements CommandExecutor {
}
}
private void unprotectParty(CommandSender sender) {
playerParty.setLocked(true);
playerParty.setPassword(null);
private void unprotectParty(Party party, CommandSender sender) {
party.setLocked(true);
party.setPassword(null);
sender.sendMessage(LocaleLoader.getString("Party.Password.Removed"));
}
private void protectParty(CommandSender sender, String password) {
playerParty.setLocked(true);
playerParty.setPassword(password);
private void protectParty(Party party, CommandSender sender, String password) {
party.setLocked(true);
party.setPassword(password);
sender.sendMessage(LocaleLoader.getString("Party.Password.Set", password));
}
}

View File

@@ -1,9 +1,9 @@
package com.gmail.nossr50.commands.party;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Set;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
@@ -12,9 +12,10 @@ import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.commands.chat.PartyChatCommand;
import com.gmail.nossr50.commands.party.alliance.PartyAllianceCommand;
import com.gmail.nossr50.commands.party.teleport.PtpCommand;
import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.Permissions;
@@ -24,11 +25,8 @@ import com.gmail.nossr50.util.player.UserManager;
import com.google.common.collect.ImmutableList;
public class PartyCommand implements TabExecutor {
private McMMOPlayer mcMMOPlayer;
private Player player;
private static final List<String> PARTY_SUBCOMMANDS;
private static final List<String> EXPSHARE_COMPLETIONS = ImmutableList.of("none", "equal");
private static final List<String> XPSHARE_COMPLETIONS = ImmutableList.of("none", "equal");
private static final List<String> ITEMSHARE_COMPLETIONS = ImmutableList.of("none", "equal", "random", "loot", "mining", "herbalism", "woodcutting", "misc");
static {
@@ -46,7 +44,7 @@ public class PartyCommand implements TabExecutor {
private CommandExecutor partyAcceptCommand = new PartyAcceptCommand();
private CommandExecutor partyCreateCommand = new PartyCreateCommand();
private CommandExecutor partyQuitCommand = new PartyQuitCommand();
private CommandExecutor partyExpShareCommand = new PartyExpShareCommand();
private CommandExecutor partyXpShareCommand = new PartyXpShareCommand();
private CommandExecutor partyItemShareCommand = new PartyItemShareCommand();
private CommandExecutor partyInviteCommand = new PartyInviteCommand();
private CommandExecutor partyKickCommand = new PartyKickCommand();
@@ -57,8 +55,9 @@ public class PartyCommand implements TabExecutor {
private CommandExecutor partyRenameCommand = new PartyRenameCommand();
private CommandExecutor partyInfoCommand = new PartyInfoCommand();
private CommandExecutor partyHelpCommand = new PartyHelpCommand();
private CommandExecutor partyTeleportCommand = mcMMO.p.getCommand("ptp").getExecutor();
private CommandExecutor partyTeleportCommand = new PtpCommand();
private CommandExecutor partyChatCommand = new PartyChatCommand();
private CommandExecutor partyAllianceCommand = new PartyAllianceCommand();
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
@@ -71,13 +70,18 @@ public class PartyCommand implements TabExecutor {
return true;
}
player = (Player) sender;
mcMMOPlayer = UserManager.getPlayer(player);
Player player = (Player) sender;
if (!UserManager.hasPlayerDataKey(player)) {
return true;
}
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
if (args.length < 1) {
if (!mcMMOPlayer.inParty()) {
sender.sendMessage(LocaleLoader.getString("Commands.Party.None"));
return printUsage();
return printUsage(player);
}
return partyInfoCommand.onCommand(sender, command, label, args);
@@ -86,7 +90,7 @@ public class PartyCommand implements TabExecutor {
PartySubcommandType subcommand = PartySubcommandType.getSubcommand(args[0]);
if (subcommand == null) {
return printUsage();
return printUsage(player);
}
// Can't use this for lock/unlock since they're handled by the same command
@@ -111,7 +115,7 @@ public class PartyCommand implements TabExecutor {
// Party member commands
if (!mcMMOPlayer.inParty()) {
sender.sendMessage(LocaleLoader.getString("Commands.Party.None"));
return printUsage();
return printUsage(player);
}
switch (subcommand) {
@@ -130,14 +134,14 @@ public class PartyCommand implements TabExecutor {
}
// Party leader commands
if (!mcMMOPlayer.getParty().getLeader().equalsIgnoreCase(player.getName())) {
if (!mcMMOPlayer.getParty().getLeader().getUniqueId().equals(player.getUniqueId())) {
sender.sendMessage(LocaleLoader.getString("Party.NotOwner"));
return true;
}
switch (subcommand) {
case EXPSHARE:
return partyExpShareCommand.onCommand(sender, command, label, args);
case XPSHARE:
return partyXpShareCommand.onCommand(sender, command, label, args);
case ITEMSHARE:
return partyItemShareCommand.onCommand(sender, command, label, args);
case KICK:
@@ -153,6 +157,8 @@ public class PartyCommand implements TabExecutor {
return partyChangePasswordCommand.onCommand(sender, command, label, args);
case RENAME:
return partyRenameCommand.onCommand(sender, command, label, args);
case ALLIANCE:
return partyAllianceCommand.onCommand(sender, command, label, args);
default:
break;
}
@@ -177,10 +183,10 @@ public class PartyCommand implements TabExecutor {
case INVITE:
case KICK:
case OWNER:
Set<String> playerNames = UserManager.getPlayerNames();
List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
return StringUtil.copyPartialMatches(args[1], playerNames, new ArrayList<String>(playerNames.size()));
case EXPSHARE:
return StringUtil.copyPartialMatches(args[1], EXPSHARE_COMPLETIONS, new ArrayList<String>(EXPSHARE_COMPLETIONS.size()));
case XPSHARE:
return StringUtil.copyPartialMatches(args[1], XPSHARE_COMPLETIONS, new ArrayList<String>(XPSHARE_COMPLETIONS.size()));
case ITEMSHARE:
return StringUtil.copyPartialMatches(args[1], ITEMSHARE_COMPLETIONS, new ArrayList<String>(ITEMSHARE_COMPLETIONS.size()));
case LOCK:
@@ -192,7 +198,10 @@ public class PartyCommand implements TabExecutor {
List<String> matches = StringUtil.copyPartialMatches(args[1], PtpCommand.TELEPORT_SUBCOMMANDS, new ArrayList<String>(PtpCommand.TELEPORT_SUBCOMMANDS.size()));
if (matches.size() == 0) {
playerNames = UserManager.getPlayerNames();
Player player = (Player) sender;
Party party = UserManager.getPlayer(player).getParty();
playerNames = party.getOnlinePlayerNames(player);
return StringUtil.copyPartialMatches(args[1], playerNames, new ArrayList<String>(playerNames.size()));
}
@@ -211,7 +220,7 @@ public class PartyCommand implements TabExecutor {
}
}
private boolean printUsage() {
private boolean printUsage(Player player) {
player.sendMessage(LocaleLoader.getString("Party.Help.0", "/party join"));
player.sendMessage(LocaleLoader.getString("Party.Help.1", "/party create"));
player.sendMessage(LocaleLoader.getString("Party.Help.2", "/party ?"));
@@ -219,13 +228,7 @@ public class PartyCommand implements TabExecutor {
}
private String[] extractArgs(String[] args) {
String[] newArgs = new String[args.length - 1];
for (int i = 1; i < args.length; i++) {
newArgs[i - 1] = args[i];
}
return newArgs;
return Arrays.copyOfRange(args, 1, args.length);
}
private boolean isItemShareCategory(String category) {

View File

@@ -20,7 +20,7 @@ public class PartyHelpCommand implements CommandExecutor {
sender.sendMessage(LocaleLoader.getString("Party.Help.7", "/party leader"));
sender.sendMessage(LocaleLoader.getString("Party.Help.8", "/party disband"));
sender.sendMessage(LocaleLoader.getString("Party.Help.9", "/party itemshare"));
sender.sendMessage(LocaleLoader.getString("Party.Help.10", "/party expshare"));
sender.sendMessage(LocaleLoader.getString("Party.Help.10", "/party xpshare"));
return true;
default:

View File

@@ -1,14 +1,17 @@
package com.gmail.nossr50.commands.party;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.gmail.nossr50.mcMMO;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.party.PartyFeature;
import com.gmail.nossr50.datatypes.party.ShareMode;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader;
@@ -16,55 +19,74 @@ import com.gmail.nossr50.party.PartyManager;
import com.gmail.nossr50.util.player.UserManager;
public class PartyInfoCommand implements CommandExecutor {
private McMMOPlayer mcMMOPlayer;
private Player player;
private Party playerParty;
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
switch (args.length) {
case 0:
case 1:
player = (Player) sender;
mcMMOPlayer = UserManager.getPlayer(player);
playerParty = mcMMOPlayer.getParty();
Player player = (Player) sender;
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
Party party = mcMMOPlayer.getParty();
displayPartyHeader();
displayShareModeInfo();
displayMemberInfo();
displayPartyHeader(player, party);
displayShareModeInfo(player, party);
displayPartyFeatures(player, party);
displayMemberInfo(player, mcMMOPlayer, party);
return true;
default:
sender.sendMessage(LocaleLoader.getString("Commands.Usage.1", "party", "info"));
return true;
}
}
private String createMembersList() {
StringBuilder memberList = new StringBuilder();
private void displayPartyHeader(Player player, Party party) {
player.sendMessage(LocaleLoader.getString("Commands.Party.Header"));
for (String memberName : playerParty.getMembers()) {
Player member = mcMMO.p.getServer().getPlayerExact(memberName);
StringBuilder status = new StringBuilder();
status.append(LocaleLoader.getString("Commands.Party.Status", party.getName(), LocaleLoader.getString("Party.Status." + (party.isLocked() ? "Locked" : "Unlocked")), party.getLevel()));
if (playerParty.getLeader().equalsIgnoreCase(memberName)) {
memberList.append(ChatColor.GOLD);
}
else if (member != null) {
memberList.append(ChatColor.WHITE);
}
else {
memberList.append(ChatColor.GRAY);
}
memberList.append(memberName).append(" ");
if (!party.hasReachedLevelCap()) {
status.append(" (").append(party.getXpToLevelPercentage()).append(")");
}
return memberList.toString();
player.sendMessage(status.toString());
}
private void displayShareModeInfo() {
boolean xpShareEnabled = Config.getInstance().getExpShareEnabled();
boolean itemShareEnabled = Config.getInstance().getItemShareEnabled();
boolean itemSharingActive = (playerParty.getItemShareMode() != ShareMode.NONE);
private void displayPartyFeatures(Player player, Party party) {
player.sendMessage(LocaleLoader.getString("Commands.Party.Features.Header"));
List<String> unlockedPartyFeatures = new ArrayList<String>();
List<String> lockedPartyFeatures = new ArrayList<String>();
for (PartyFeature partyFeature : PartyFeature.values()) {
if (!partyFeature.hasPermission(player)) {
continue;
}
if (isUnlockedFeature(party, partyFeature)) {
unlockedPartyFeatures.add(partyFeature.getLocaleString());
}
else {
lockedPartyFeatures.add(partyFeature.getFeatureLockedLocaleString());
}
}
player.sendMessage(LocaleLoader.getString("Commands.Party.UnlockedFeatures", unlockedPartyFeatures.isEmpty() ? "None" : unlockedPartyFeatures));
for (String message : lockedPartyFeatures) {
player.sendMessage(message);
}
}
private boolean isUnlockedFeature(Party party, PartyFeature partyFeature) {
return party.getLevel() >= Config.getInstance().getPartyFeatureUnlockLevel(partyFeature);
}
private void displayShareModeInfo(Player player, Party party) {
boolean xpShareEnabled = isUnlockedFeature(party, PartyFeature.XP_SHARE);
boolean itemShareEnabled = isUnlockedFeature(party, PartyFeature.ITEM_SHARE);
boolean itemSharingActive = (party.getItemShareMode() != ShareMode.NONE);
if (!xpShareEnabled && !itemShareEnabled) {
return;
@@ -75,11 +97,11 @@ public class PartyInfoCommand implements CommandExecutor {
String separator = "";
if (xpShareEnabled) {
expShareInfo = LocaleLoader.getString("Commands.Party.ExpShare", playerParty.getXpShareMode().toString());
expShareInfo = LocaleLoader.getString("Commands.Party.ExpShare", party.getXpShareMode().toString());
}
if (itemShareEnabled) {
itemShareInfo = LocaleLoader.getString("Commands.Party.ItemShare", playerParty.getItemShareMode().toString());
itemShareInfo = LocaleLoader.getString("Commands.Party.ItemShare", party.getItemShareMode().toString());
}
if (xpShareEnabled && itemShareEnabled) {
@@ -87,28 +109,18 @@ public class PartyInfoCommand implements CommandExecutor {
}
player.sendMessage(LocaleLoader.getString("Commands.Party.ShareMode") + expShareInfo + separator + itemShareInfo);
if (itemSharingActive) {
player.sendMessage(LocaleLoader.getString("Commands.Party.ItemShareCategories", playerParty.getItemShareCategories()));
player.sendMessage(LocaleLoader.getString("Commands.Party.ItemShareCategories", party.getItemShareCategories()));
}
}
private void displayPartyHeader() {
player.sendMessage(LocaleLoader.getString("Commands.Party.Header"));
if (playerParty.isLocked()) {
player.sendMessage(LocaleLoader.getString("Commands.Party.Status", playerParty.getName(), LocaleLoader.getString("Party.Status.Locked")));
}
else {
player.sendMessage(LocaleLoader.getString("Commands.Party.Status", playerParty.getName(), LocaleLoader.getString("Party.Status.Unlocked")));
}
}
private void displayMemberInfo() {
int membersNear = PartyManager.getNearMembers(mcMMOPlayer).size();
int membersOnline = playerParty.getOnlineMembers().size() - 1;
private void displayMemberInfo(Player player, McMMOPlayer mcMMOPlayer, Party party) {
List<Player> nearMembers = PartyManager.getNearMembers(mcMMOPlayer);
int membersOnline = party.getOnlineMembers().size() - 1;
player.sendMessage(LocaleLoader.getString("Commands.Party.Members.Header"));
player.sendMessage(LocaleLoader.getString("Commands.Party.MembersNear", membersNear, membersOnline));
player.sendMessage(createMembersList());
player.sendMessage(LocaleLoader.getString("Commands.Party.MembersNear", nearMembers.size(), membersOnline));
player.sendMessage(party.createMembersList(player.getName(), nearMembers));
}
}

View File

@@ -9,7 +9,6 @@ import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.party.PartyManager;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
@@ -18,8 +17,8 @@ public class PartyInviteCommand implements CommandExecutor {
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
switch (args.length) {
case 2:
String targetName = Misc.getMatchedPlayerName(args[1]);
McMMOPlayer mcMMOTarget = UserManager.getPlayer(targetName, true);
String targetName = CommandUtils.getMatchedPlayerName(args[1]);
McMMOPlayer mcMMOTarget = UserManager.getOfflinePlayer(targetName);
if (!CommandUtils.checkPlayerExistence(sender, targetName, mcMMOTarget)) {
return false;

View File

@@ -8,6 +8,7 @@ import org.bukkit.entity.Player;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.party.ItemShareType;
import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.party.PartyFeature;
import com.gmail.nossr50.datatypes.party.ShareMode;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.StringUtils;
@@ -15,18 +16,17 @@ import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
public class PartyItemShareCommand implements CommandExecutor {
private Party playerParty;
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!Config.getInstance().getItemShareEnabled()) {
sender.sendMessage(LocaleLoader.getString("Party.ItemShare.Disabled"));
Party party = UserManager.getPlayer((Player) sender).getParty();
if (party.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.ITEM_SHARE)) {
sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.4"));
return true;
}
switch (args.length) {
case 2:
playerParty = UserManager.getPlayer((Player) sender).getParty();
ShareMode mode = ShareMode.getShareMode(args[1].toUpperCase());
if (mode == null) {
@@ -34,12 +34,11 @@ public class PartyItemShareCommand implements CommandExecutor {
return true;
}
handleChangingShareMode(mode);
handleChangingShareMode(party, mode);
return true;
case 3:
playerParty = UserManager.getPlayer((Player) sender).getParty();
boolean toggle = false;
boolean toggle;
if (CommandUtils.shouldEnableToggle(args[2])) {
toggle = true;
@@ -53,7 +52,7 @@ public class PartyItemShareCommand implements CommandExecutor {
}
try {
handleToggleItemShareCategory(ItemShareType.valueOf(args[1].toUpperCase()), toggle);
handleToggleItemShareCategory(party, ItemShareType.valueOf(args[1].toUpperCase()), toggle);
}
catch (IllegalArgumentException ex) {
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "itemshare", "<loot | mining | herbalism | woodcutting | misc> <true | false>"));
@@ -68,22 +67,22 @@ public class PartyItemShareCommand implements CommandExecutor {
}
}
private void handleChangingShareMode(ShareMode mode) {
playerParty.setItemShareMode(mode);
private void handleChangingShareMode(Party party, ShareMode mode) {
party.setItemShareMode(mode);
String changeModeMessage = LocaleLoader.getString("Commands.Party.SetSharing", LocaleLoader.getString("Party.ShareType.Item"), LocaleLoader.getString("Party.ShareMode." + StringUtils.getCapitalized(mode.toString())));
for (Player member : playerParty.getOnlineMembers()) {
for (Player member : party.getOnlineMembers()) {
member.sendMessage(changeModeMessage);
}
}
private void handleToggleItemShareCategory(ItemShareType type, boolean toggle) {
playerParty.setSharingDrops(type, toggle);
private void handleToggleItemShareCategory(Party party, ItemShareType type, boolean toggle) {
party.setSharingDrops(type, toggle);
String toggleMessage = LocaleLoader.getString("Commands.Party.ToggleShareCategory", StringUtils.getCapitalized(type.toString()), toggle ? "enabled" : "disabled");
for (Player member : playerParty.getOnlineMembers()) {
for (Player member : party.getOnlineMembers()) {
member.sendMessage(toggleMessage);
}
}

View File

@@ -9,30 +9,37 @@ import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.party.PartyManager;
import com.gmail.nossr50.util.Misc;
import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
public class PartyJoinCommand implements CommandExecutor {
private McMMOPlayer mcMMOTarget;
private Player target;
private Party targetParty;
private McMMOPlayer mcMMOPlayer;
private Player player;
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
switch (args.length) {
case 2:
case 3:
// Verify target exists and is in a different party than the player
if (!canJoinParty(sender, args[1])) {
String targetName = CommandUtils.getMatchedPlayerName(args[1]);
McMMOPlayer mcMMOTarget = UserManager.getPlayer(targetName);
if (!CommandUtils.checkPlayerExistence(sender, targetName, mcMMOTarget)) {
return true;
}
mcMMOPlayer = UserManager.getPlayer((Player) sender);
player = mcMMOPlayer.getPlayer();
Player target = mcMMOTarget.getPlayer();
if (!mcMMOTarget.inParty()) {
sender.sendMessage(LocaleLoader.getString("Party.PlayerNotInParty", targetName));
return true;
}
Player player = (Player) sender;
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
Party targetParty = mcMMOTarget.getParty();
if (player.equals(target) || (mcMMOPlayer.inParty() && mcMMOPlayer.getParty().equals(targetParty))) {
sender.sendMessage(LocaleLoader.getString("Party.Join.Self"));
return true;
}
String password = getPassword(args);
@@ -65,31 +72,4 @@ public class PartyJoinCommand implements CommandExecutor {
return null;
}
private boolean canJoinParty(CommandSender sender, String targetName) {
targetName = Misc.getMatchedPlayerName(targetName);
mcMMOTarget = UserManager.getPlayer(targetName);
if (!CommandUtils.checkPlayerExistence(sender, targetName, mcMMOTarget)) {
return false;
}
target = mcMMOTarget.getPlayer();
if (!mcMMOTarget.inParty()) {
sender.sendMessage(LocaleLoader.getString("Party.PlayerNotInParty", targetName));
return false;
}
player = (Player) sender;
mcMMOPlayer = UserManager.getPlayer(player);
targetParty = mcMMOTarget.getParty();
if (player.equals(target) || (mcMMOPlayer.inParty() && mcMMOPlayer.getParty().equals(targetParty))) {
sender.sendMessage(LocaleLoader.getString("Party.Join.Self"));
return false;
}
return true;
}
}

View File

@@ -11,6 +11,7 @@ import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.party.PartyManager;
import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
public class PartyKickCommand implements CommandExecutor {
@@ -19,13 +20,15 @@ public class PartyKickCommand implements CommandExecutor {
switch (args.length) {
case 2:
Party playerParty = UserManager.getPlayer((Player) sender).getParty();
OfflinePlayer target = mcMMO.p.getServer().getOfflinePlayer(args[1]);
String targetName = CommandUtils.getMatchedPlayerName(args[1]);
if (!playerParty.getMembers().contains(target.getName())) {
sender.sendMessage(LocaleLoader.getString("Party.NotInYourParty", target.getName()));
if (!playerParty.hasMember(targetName)) {
sender.sendMessage(LocaleLoader.getString("Party.NotInYourParty", targetName));
return true;
}
OfflinePlayer target = mcMMO.p.getServer().getOfflinePlayer(targetName);
if (target.isOnline()) {
Player onlineTarget = target.getPlayer();
String partyName = playerParty.getName();

View File

@@ -12,19 +12,15 @@ import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
public class PartyLockCommand implements CommandExecutor {
private Party playerParty;
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
playerParty = UserManager.getPlayer((Player) sender).getParty();
switch (args.length) {
case 1:
if (args[0].equalsIgnoreCase("lock")) {
lockParty(sender, command.getPermissionMessage());
togglePartyLock(sender, true);
}
else if (args[0].equalsIgnoreCase("unlock")) {
unlockParty(sender, command.getPermissionMessage());
togglePartyLock(sender, false);
}
return true;
@@ -36,10 +32,10 @@ public class PartyLockCommand implements CommandExecutor {
}
if (CommandUtils.shouldEnableToggle(args[1])) {
lockParty(sender, command.getPermissionMessage());
togglePartyLock(sender, true);
}
else if (CommandUtils.shouldDisableToggle(args[1])) {
unlockParty(sender, command.getPermissionMessage());
togglePartyLock(sender, false);
}
else {
sendUsageStrings(sender);
@@ -53,44 +49,25 @@ public class PartyLockCommand implements CommandExecutor {
}
}
/**
* Handle locking a party.
*/
private void lockParty(CommandSender sender, String permissionMessage) {
if (!Permissions.partySubcommand(sender, PartySubcommandType.LOCK)) {
sender.sendMessage(permissionMessage);
return;
}
if (playerParty.isLocked()) {
sender.sendMessage(LocaleLoader.getString("Party.IsLocked"));
return;
}
playerParty.setLocked(true);
sender.sendMessage(LocaleLoader.getString("Party.Locked"));
}
/**
* Handle unlocking a party.
*/
private void unlockParty(CommandSender sender, String permissionMessage) {
if (!Permissions.partySubcommand(sender, PartySubcommandType.UNLOCK)) {
sender.sendMessage(permissionMessage);
return;
}
if (!playerParty.isLocked()) {
sender.sendMessage(LocaleLoader.getString("Party.IsntLocked"));
return;
}
playerParty.setLocked(false);
sender.sendMessage(LocaleLoader.getString("Party.Unlocked"));
}
private void sendUsageStrings(CommandSender sender) {
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "lock", "[on|off]"));
sender.sendMessage(LocaleLoader.getString("Commands.Usage.1", "party", "unlock"));
}
private void togglePartyLock(CommandSender sender, boolean lock) {
Party party = UserManager.getPlayer((Player) sender).getParty();
if (!Permissions.partySubcommand(sender, lock ? PartySubcommandType.LOCK : PartySubcommandType.UNLOCK)) {
sender.sendMessage(LocaleLoader.getString("mcMMO.NoPermission"));
return;
}
if (lock ? party.isLocked() : !party.isLocked()) {
sender.sendMessage(LocaleLoader.getString("Party." + (lock ? "IsLocked" : "IsntLocked")));
return;
}
party.setLocked(lock);
sender.sendMessage(LocaleLoader.getString("Party." + (lock ? "Locked" : "Unlocked")));
}
}

View File

@@ -36,7 +36,7 @@ public class PartyRenameCommand implements CommandExecutor {
return true;
}
String leaderName = playerParty.getLeader();
String leaderName = playerParty.getLeader().getPlayerName();
for (Player member : playerParty.getOnlineMembers()) {
if (!PartyManager.handlePartyChangeEvent(member, oldPartyName, newPartyName, EventReason.CHANGED_PARTIES)) {

View File

@@ -7,7 +7,7 @@ public enum PartySubcommandType {
HELP,
INFO,
QUIT,
EXPSHARE,
XPSHARE,
ITEMSHARE,
INVITE,
KICK,
@@ -18,7 +18,8 @@ public enum PartySubcommandType {
PASSWORD,
RENAME,
TELEPORT,
CHAT;
CHAT,
ALLIANCE;
public static PartySubcommandType getSubcommand(String commandName) {
for (PartySubcommandType command : values()) {
@@ -37,11 +38,14 @@ public enum PartySubcommandType {
return OWNER;
}
else if (commandName.equalsIgnoreCase("xpshare") || commandName.equalsIgnoreCase("shareexp") || commandName.equalsIgnoreCase("sharexp")) {
return EXPSHARE;
return XPSHARE;
}
else if (commandName.equalsIgnoreCase("shareitem") || commandName.equalsIgnoreCase("shareitems")) {
return ITEMSHARE;
}
else if (commandName.equalsIgnoreCase("ally")) {
return ALLIANCE;
}
return null;
}

View File

@@ -7,50 +7,49 @@ import org.bukkit.entity.Player;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.party.PartyFeature;
import com.gmail.nossr50.datatypes.party.ShareMode;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.util.StringUtils;
import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
public class PartyExpShareCommand implements CommandExecutor {
private Party playerParty;
public class PartyXpShareCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (!Config.getInstance().getExpShareEnabled()) {
sender.sendMessage(LocaleLoader.getString("Party.ExpShare.Disabled"));
Party party = UserManager.getPlayer((Player) sender).getParty();
if (party.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.XP_SHARE)) {
sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.5"));
return true;
}
switch (args.length) {
case 2:
playerParty = UserManager.getPlayer((Player) sender).getParty();
if (args[1].equalsIgnoreCase("none") || CommandUtils.shouldDisableToggle(args[1])) {
handleChangingShareMode(ShareMode.NONE);
handleChangingShareMode(party, ShareMode.NONE);
}
else if (args[1].equalsIgnoreCase("equal") || args[1].equalsIgnoreCase("even") || CommandUtils.shouldEnableToggle(args[1])) {
handleChangingShareMode(ShareMode.EQUAL);
handleChangingShareMode(party, ShareMode.EQUAL);
}
else {
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "expshare", "<NONE | EQUAL>"));
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "xpshare", "<NONE | EQUAL>"));
}
return true;
default:
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "expshare", "<NONE | EQUAL>"));
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "xpshare", "<NONE | EQUAL>"));
return true;
}
}
private void handleChangingShareMode(ShareMode mode) {
playerParty.setXpShareMode(mode);
private void handleChangingShareMode(Party party, ShareMode mode) {
party.setXpShareMode(mode);
String changeModeMessage = LocaleLoader.getString("Commands.Party.SetSharing", LocaleLoader.getString("Party.ShareType.Exp"), LocaleLoader.getString("Party.ShareMode." + StringUtils.getCapitalized(mode.toString())));
String changeModeMessage = LocaleLoader.getString("Commands.Party.SetSharing", LocaleLoader.getString("Party.ShareType.Xp"), LocaleLoader.getString("Party.ShareMode." + StringUtils.getCapitalized(mode.toString())));
for (Player member : playerParty.getOnlineMembers()) {
for (Player member : party.getOnlineMembers()) {
member.sendMessage(changeModeMessage);
}
}

View File

@@ -0,0 +1,39 @@
package com.gmail.nossr50.commands.party.alliance;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.party.PartyManager;
import com.gmail.nossr50.util.player.UserManager;
public class PartyAllianceAcceptCommand implements CommandExecutor {
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
switch (args.length) {
case 2:
Player player = (Player) sender;
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
if (!mcMMOPlayer.hasPartyAllianceInvite()) {
sender.sendMessage(LocaleLoader.getString("mcMMO.NoInvites"));
return true;
}
if (mcMMOPlayer.getParty().getAlly() != null) {
player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.AlreadyAllies"));
return true;
}
PartyManager.acceptAllianceInvite(mcMMOPlayer);
return true;
default:
sender.sendMessage(LocaleLoader.getString("Commands.Usage.2", "party", "alliance", "accept"));
return true;
}
}
}

View File

@@ -0,0 +1,135 @@
package com.gmail.nossr50.commands.party.alliance;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.ChatColor;
import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.command.TabExecutor;
import org.bukkit.entity.Player;
import org.bukkit.util.StringUtil;
import com.gmail.nossr50.config.Config;
import com.gmail.nossr50.datatypes.party.Party;
import com.gmail.nossr50.datatypes.party.PartyFeature;
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.party.PartyManager;
import com.gmail.nossr50.util.commands.CommandUtils;
import com.gmail.nossr50.util.player.UserManager;
import com.google.common.collect.ImmutableList;
public class PartyAllianceCommand implements TabExecutor {
private Player player;
private Party playerParty;
private Party targetParty;
public static final List<String> ALLIANCE_SUBCOMMANDS = ImmutableList.of("invite", "accept", "disband");
private CommandExecutor partyAllianceInviteCommand = new PartyAllianceInviteCommand();
private CommandExecutor partyAllianceAcceptCommand = new PartyAllianceAcceptCommand();
private CommandExecutor partyAllianceDisbandCommand = new PartyAllianceDisbandCommand();
@Override
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
if (CommandUtils.noConsoleUsage(sender)) {
return true;
}
player = (Player) sender;
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
playerParty = mcMMOPlayer.getParty();
switch (args.length) {
case 1:
if (playerParty.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.ALLIANCE)) {
sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.3"));
return true;
}
if (playerParty.getAlly() == null) {
printUsage();
return true;
}
targetParty = playerParty.getAlly();
displayPartyHeader();
displayMemberInfo(mcMMOPlayer);
return true;
case 2:
case 3:
if (playerParty.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.ALLIANCE)) {
sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.3"));
return true;
}
if (args[1].equalsIgnoreCase("invite")) {
return partyAllianceInviteCommand.onCommand(sender, command, label, args);
}
if (args[1].equalsIgnoreCase("accept")) {
return partyAllianceAcceptCommand.onCommand(sender, command, label, args);
}
if (args[1].equalsIgnoreCase("disband")) {
return partyAllianceDisbandCommand.onCommand(sender, command, label, args);
}
if (playerParty.getAlly() == null) {
printUsage();
return true;
}
targetParty = playerParty.getAlly();
displayPartyHeader();
displayMemberInfo(mcMMOPlayer);
return true;
default:
return false;
}
}
private boolean printUsage() {
player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.Help.0"));
player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.Help.1"));
return true;
}
@Override
public List<String> onTabComplete(CommandSender commandSender, Command command, String label, String[] args) {
switch (args.length) {
case 1:
List<String> matches = StringUtil.copyPartialMatches(args[0], ALLIANCE_SUBCOMMANDS, new ArrayList<String>(ALLIANCE_SUBCOMMANDS.size()));
if (matches.size() == 0) {
List<String> playerNames = CommandUtils.getOnlinePlayerNames(commandSender);
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
}
return matches;
default:
return ImmutableList.of();
}
}
private void displayPartyHeader() {
player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.Header"));
player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.Ally", playerParty.getName(), targetParty.getName()));
}
private void displayMemberInfo(McMMOPlayer mcMMOPlayer) {
List<Player> nearMembers = PartyManager.getNearMembers(mcMMOPlayer);
player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.Members.Header"));
player.sendMessage(playerParty.createMembersList(player.getName(), nearMembers));
player.sendMessage(ChatColor.DARK_GRAY + "----------------------------");
player.sendMessage(targetParty.createMembersList(player.getName(), nearMembers));
}
}

Some files were not shown because too many files have changed in this diff Show More