mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2026-02-18 17:53:00 +01:00
Compare commits
1 Commits
dev-uuid-c
...
dev-sounds
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
da1841eb9e |
@@ -7,59 +7,7 @@ Key:
|
|||||||
! Change
|
! Change
|
||||||
- Removal
|
- Removal
|
||||||
|
|
||||||
Version 1.5.01-dev
|
Version 1.4.08-dev
|
||||||
+ Added new child skill; Salvage
|
|
||||||
+ 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 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 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 new API class SkillAPI used to get a list of valid skill names
|
|
||||||
= 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
|
|
||||||
! 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
|
|
||||||
- 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 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 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 the possibility to gain experience when using Fishing "Shake"
|
||||||
@@ -73,13 +21,6 @@ Version 1.4.08
|
|||||||
+ Added new experience bonus perk 'mcmmo.perks.xp.customboost.<skillname>' multiplies incoming XP by the boost amount defined in the experience config
|
+ 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 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 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 where LeafBlower permissions were ignored
|
||||||
= Fixed bug with toggle commands not properly displaying the success message.
|
= Fixed bug with toggle commands not properly displaying the success message.
|
||||||
= Fixed IllegalArgumentException caused by an empty Fishing treasure category
|
= Fixed IllegalArgumentException caused by an empty Fishing treasure category
|
||||||
@@ -93,12 +34,9 @@ Version 1.4.08
|
|||||||
= Fixed bug where party chat broke if the display name contained special characters
|
= 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 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 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 the /ptp request expiration time was checked wrongly - preventing players from using the command
|
||||||
= Fixed bug where Hylian Luck was broken
|
= Fixed bug where Hylian Luck was broken
|
||||||
= Fixed bug where Snow would never drop treasures
|
= 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 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
|
! Changed appearance of party member list. Gold = party leader, White = online, Gray = offline, Italic = not nearby
|
||||||
! Updated localization files
|
! Updated localization files
|
||||||
@@ -108,8 +46,6 @@ Version 1.4.08
|
|||||||
! Changed /ptp config setting, Commands.ptp.Confirm_Required is now Commands.ptp.Accept.Required
|
! 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 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 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
|
- Removed /stats alias for /mcstats
|
||||||
|
|
||||||
Version 1.4.07
|
Version 1.4.07
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ mcMMO is currently developed by a team of individuals from all over the world.
|
|||||||
|
|
||||||
### Special thanks
|
### Special thanks
|
||||||
[]
|
[]
|
||||||
(https://github.com/EasyMFnE)
|
(https://github.com/EasyMFnE)
|
||||||
Added the Alchemy skill
|
Added the Alchemy skill
|
||||||
|
|
||||||
## Compiling
|
## Compiling
|
||||||
|
|||||||
@@ -1,132 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,116 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,152 +0,0 @@
|
|||||||
# 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
|
|
||||||
@@ -1,184 +0,0 @@
|
|||||||
# 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
|
|
||||||
19
pom.xml
19
pom.xml
@@ -2,7 +2,7 @@
|
|||||||
<modelVersion>4.0.0</modelVersion>
|
<modelVersion>4.0.0</modelVersion>
|
||||||
<groupId>com.gmail.nossr50.mcMMO</groupId>
|
<groupId>com.gmail.nossr50.mcMMO</groupId>
|
||||||
<artifactId>mcMMO</artifactId>
|
<artifactId>mcMMO</artifactId>
|
||||||
<version>1.5.01-SNAPSHOT</version>
|
<version>1.4.08-SNAPSHOT</version>
|
||||||
<name>mcMMO</name>
|
<name>mcMMO</name>
|
||||||
<url>https://github.com/mcMMO-Dev/mcMMO</url>
|
<url>https://github.com/mcMMO-Dev/mcMMO</url>
|
||||||
<issueManagement>
|
<issueManagement>
|
||||||
@@ -76,8 +76,6 @@
|
|||||||
<artifactSet>
|
<artifactSet>
|
||||||
<includes>
|
<includes>
|
||||||
<include>com.turt2live.metrics:MetricsExtension</include>
|
<include>com.turt2live.metrics:MetricsExtension</include>
|
||||||
<include>commons-logging:commons-logging</include>
|
|
||||||
<include>net.snaq:dbpool</include>
|
|
||||||
</includes>
|
</includes>
|
||||||
</artifactSet>
|
</artifactSet>
|
||||||
<relocations>
|
<relocations>
|
||||||
@@ -85,14 +83,6 @@
|
|||||||
<pattern>com.turt2live.metrics</pattern>
|
<pattern>com.turt2live.metrics</pattern>
|
||||||
<shadedPattern>com.gmail.nossr50.metrics.mcstats</shadedPattern>
|
<shadedPattern>com.gmail.nossr50.metrics.mcstats</shadedPattern>
|
||||||
</relocation>
|
</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>
|
</relocations>
|
||||||
</configuration>
|
</configuration>
|
||||||
<executions>
|
<executions>
|
||||||
@@ -131,7 +121,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.bukkit</groupId>
|
<groupId>org.bukkit</groupId>
|
||||||
<artifactId>bukkit</artifactId>
|
<artifactId>bukkit</artifactId>
|
||||||
<version>LATEST</version>
|
<version>RELEASE</version>
|
||||||
<type>jar</type>
|
<type>jar</type>
|
||||||
<scope>compile</scope>
|
<scope>compile</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -146,11 +136,6 @@
|
|||||||
<artifactId>MetricsExtension</artifactId>
|
<artifactId>MetricsExtension</artifactId>
|
||||||
<version>0.0.5-SNAPSHOT</version>
|
<version>0.0.5-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>net.snaq</groupId>
|
|
||||||
<artifactId>dbpool</artifactId>
|
|
||||||
<version>5.1</version>
|
|
||||||
</dependency>
|
|
||||||
</dependencies>
|
</dependencies>
|
||||||
<distributionManagement>
|
<distributionManagement>
|
||||||
<repository>
|
<repository>
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
package com.gmail.nossr50.api;
|
package com.gmail.nossr50.api;
|
||||||
|
|
||||||
import org.bukkit.entity.LivingEntity;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
||||||
import com.gmail.nossr50.runnables.skills.BleedTimerTask;
|
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
public final class AbilityAPI {
|
public final class AbilityAPI {
|
||||||
@@ -82,8 +80,4 @@ public final class AbilityAPI {
|
|||||||
public static void setTreeFellerCooldown(Player player, long cooldown) {
|
public static void setTreeFellerCooldown(Player player, long cooldown) {
|
||||||
UserManager.getPlayer(player).setAbilityDATS(AbilityType.TREE_FELLER, cooldown);
|
UserManager.getPlayer(player).setAbilityDATS(AbilityType.TREE_FELLER, cooldown);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isBleeding(LivingEntity entity) {
|
|
||||||
return BleedTimerTask.isBleeding(entity);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +1,16 @@
|
|||||||
package com.gmail.nossr50.api;
|
package com.gmail.nossr50.api;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.api.exceptions.InvalidPlayerException;
|
import com.gmail.nossr50.api.exceptions.InvalidPlayerException;
|
||||||
import com.gmail.nossr50.api.exceptions.InvalidSkillException;
|
import com.gmail.nossr50.api.exceptions.InvalidSkillException;
|
||||||
import com.gmail.nossr50.api.exceptions.InvalidXPGainReasonException;
|
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
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.skills.child.FamilyTree;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
@@ -46,7 +43,9 @@ public final class ExperienceAPI {
|
|||||||
public static boolean isNonChildSkill(String skillType) {
|
public static boolean isNonChildSkill(String skillType) {
|
||||||
SkillType skill = SkillType.getSkill(skillType);
|
SkillType skill = SkillType.getSkill(skillType);
|
||||||
|
|
||||||
return skill != null && !skill.isChildSkill();
|
if (skill == null) return false;
|
||||||
|
|
||||||
|
return !skill.isChildSkill();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@@ -65,36 +64,10 @@ public final class ExperienceAPI {
|
|||||||
*
|
*
|
||||||
* @throws InvalidSkillException if the given skill is not valid
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static void addRawXP(Player player, String skillType, float XP) {
|
public static void addRawXP(Player player, String skillType, float XP) {
|
||||||
addRawXP(player, skillType, XP, "UNKNOWN");
|
UserManager.getPlayer(player).applyXpGain(getSkillType(skillType), XP);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 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) {
|
|
||||||
UserManager.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
|
@Deprecated
|
||||||
public static void addRawXPOffline(String playerName, String skillType, int XP) {
|
public static void addRawXPOffline(String playerName, String skillType, int XP) {
|
||||||
addRawXPOffline(playerName, skillType, (float) XP);
|
addRawXPOffline(playerName, skillType, (float) XP);
|
||||||
@@ -105,9 +78,6 @@ public final class ExperienceAPI {
|
|||||||
* </br>
|
* </br>
|
||||||
* This function is designed for API usage.
|
* 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 playerName The player to add XP to
|
||||||
* @param skillType The skill to add XP to
|
* @param skillType The skill to add XP to
|
||||||
* @param XP The amount of XP to add
|
* @param XP The amount of XP to add
|
||||||
@@ -115,27 +85,10 @@ public final class ExperienceAPI {
|
|||||||
* @throws InvalidSkillException if the given skill is not valid
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static void addRawXPOffline(String playerName, String skillType, float XP) {
|
public static void addRawXPOffline(String playerName, String skillType, float XP) {
|
||||||
addOfflineXP(playerName, getSkillType(skillType), (int) Math.floor(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.
|
* Adds XP to the player, calculates for XP Rate only.
|
||||||
* </br>
|
* </br>
|
||||||
@@ -147,26 +100,8 @@ public final class ExperienceAPI {
|
|||||||
*
|
*
|
||||||
* @throws InvalidSkillException if the given skill is not valid
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static void addMultipliedXP(Player player, String skillType, int XP) {
|
public static void addMultipliedXP(Player player, String skillType, int XP) {
|
||||||
addMultipliedXP(player, skillType, XP, "UNKNOWN");
|
UserManager.getPlayer(player).applyXpGain(getSkillType(skillType), (int) (XP * ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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) {
|
|
||||||
UserManager.getPlayer(player).applyXpGain(getSkillType(skillType), (int) (XP * ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier()), getXPGainReason(xpGainReason));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -181,7 +116,6 @@ public final class ExperienceAPI {
|
|||||||
* @throws InvalidSkillException if the given skill is not valid
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static void addMultipliedXPOffline(String playerName, String skillType, int XP) {
|
public static void addMultipliedXPOffline(String playerName, String skillType, int XP) {
|
||||||
addOfflineXP(playerName, getSkillType(skillType), (int) (XP * ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier()));
|
addOfflineXP(playerName, getSkillType(skillType), (int) (XP * ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||||
}
|
}
|
||||||
@@ -197,28 +131,10 @@ public final class ExperienceAPI {
|
|||||||
*
|
*
|
||||||
* @throws InvalidSkillException if the given skill is not valid
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static void addModifiedXP(Player player, String skillType, int XP) {
|
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) {
|
|
||||||
SkillType skill = getSkillType(skillType);
|
SkillType skill = getSkillType(skillType);
|
||||||
|
|
||||||
UserManager.getPlayer(player).applyXpGain(skill, (int) (XP / skill.getXpModifier() * ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier()), getXPGainReason(xpGainReason));
|
UserManager.getPlayer(player).applyXpGain(skill, (int) (XP / skill.getXpModifier() * ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier()));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -233,7 +149,6 @@ public final class ExperienceAPI {
|
|||||||
* @throws InvalidSkillException if the given skill is not valid
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static void addModifiedXPOffline(String playerName, String skillType, int XP) {
|
public static void addModifiedXPOffline(String playerName, String skillType, int XP) {
|
||||||
SkillType skill = getSkillType(skillType);
|
SkillType skill = getSkillType(skillType);
|
||||||
|
|
||||||
@@ -252,27 +167,8 @@ public final class ExperienceAPI {
|
|||||||
*
|
*
|
||||||
* @throws InvalidSkillException if the given skill is not valid
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static void addXP(Player player, String skillType, int XP) {
|
public static void addXP(Player player, String skillType, int XP) {
|
||||||
addXP(player, skillType, XP, "UNKNOWN");
|
UserManager.getPlayer(player).beginXpGain(getSkillType(skillType), XP);
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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) {
|
|
||||||
UserManager.getPlayer(player).beginXpGain(getSkillType(skillType), XP, getXPGainReason(xpGainReason));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -304,28 +200,10 @@ public final class ExperienceAPI {
|
|||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
* @throws UnsupportedOperationException if the given skill is a child skill
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static int getOfflineXP(String playerName, String skillType) {
|
public static int getOfflineXP(String playerName, String skillType) {
|
||||||
return getOfflineProfile(playerName).getSkillXpLevel(getNonChildSkillType(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.
|
* Get the raw amount of XP a player has in a specific skill.
|
||||||
* </br>
|
* </br>
|
||||||
@@ -355,28 +233,10 @@ public final class ExperienceAPI {
|
|||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
* @throws UnsupportedOperationException if the given skill is a child skill
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static float getOfflineXPRaw(String playerName, String skillType) {
|
public static float getOfflineXPRaw(String playerName, String skillType) {
|
||||||
return getOfflineProfile(playerName).getSkillXpLevelRaw(getNonChildSkillType(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.
|
* Get the total amount of XP needed to reach the next level.
|
||||||
* </br>
|
* </br>
|
||||||
@@ -406,28 +266,10 @@ public final class ExperienceAPI {
|
|||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
* @throws UnsupportedOperationException if the given skill is a child skill
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static int getOfflineXPToNextLevel(String playerName, String skillType) {
|
public static int getOfflineXPToNextLevel(String playerName, String skillType) {
|
||||||
return getOfflineProfile(playerName).getXpToLevel(getNonChildSkillType(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.
|
* Get the amount of XP remaining until the next level.
|
||||||
* </br>
|
* </br>
|
||||||
@@ -461,34 +303,14 @@ public final class ExperienceAPI {
|
|||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
* @throws UnsupportedOperationException if the given skill is a child skill
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static int getOfflineXPRemaining(String playerName, String skillType) {
|
public static int getOfflineXPRemaining(String playerName, String skillType) {
|
||||||
SkillType skill = getNonChildSkillType(skillType);
|
SkillType skill = getNonChildSkillType(skillType);
|
||||||
|
|
||||||
PlayerProfile profile = getOfflineProfile(playerName);
|
PlayerProfile profile = getOfflineProfile(playerName);
|
||||||
|
|
||||||
return profile.getXpToLevel(skill) - profile.getSkillXpLevel(skill);
|
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.
|
* Add levels to a skill.
|
||||||
* </br>
|
* </br>
|
||||||
@@ -516,7 +338,6 @@ public final class ExperienceAPI {
|
|||||||
* @throws InvalidSkillException if the given skill is not valid
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static void addLevelOffline(String playerName, String skillType, int levels) {
|
public static void addLevelOffline(String playerName, String skillType, int levels) {
|
||||||
PlayerProfile profile = getOfflineProfile(playerName);
|
PlayerProfile profile = getOfflineProfile(playerName);
|
||||||
SkillType skill = getSkillType(skillType);
|
SkillType skill = getSkillType(skillType);
|
||||||
@@ -528,43 +349,12 @@ public final class ExperienceAPI {
|
|||||||
profile.addLevels(parentSkill, (levels / parentSkills.size()));
|
profile.addLevels(parentSkill, (levels / parentSkills.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
profile.scheduleAsyncSave();
|
profile.save();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
profile.addLevels(skill, levels);
|
profile.addLevels(skill, levels);
|
||||||
profile.scheduleAsyncSave();
|
profile.save();
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -594,27 +384,10 @@ public final class ExperienceAPI {
|
|||||||
* @throws InvalidSkillException if the given skill is not valid
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static int getLevelOffline(String playerName, String skillType) {
|
public static int getLevelOffline(String playerName, String skillType) {
|
||||||
return getOfflineProfile(playerName).getSkillLevel(getSkillType(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.
|
* Gets the power level of a player.
|
||||||
* </br>
|
* </br>
|
||||||
@@ -637,7 +410,6 @@ public final class ExperienceAPI {
|
|||||||
*
|
*
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static int getPowerLevelOffline(String playerName) {
|
public static int getPowerLevelOffline(String playerName) {
|
||||||
int powerLevel = 0;
|
int powerLevel = 0;
|
||||||
PlayerProfile profile = getOfflineProfile(playerName);
|
PlayerProfile profile = getOfflineProfile(playerName);
|
||||||
@@ -649,27 +421,6 @@ public final class ExperienceAPI {
|
|||||||
return powerLevel;
|
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
return powerLevel;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the level cap of a specific skill.
|
* Get the level cap of a specific skill.
|
||||||
* </br>
|
* </br>
|
||||||
@@ -709,28 +460,10 @@ public final class ExperienceAPI {
|
|||||||
*
|
*
|
||||||
* @return the position on the leaderboard
|
* @return the position on the leaderboard
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static int getPlayerRankSkill(String playerName, String skillType) {
|
public static int getPlayerRankSkill(String playerName, String skillType) {
|
||||||
return mcMMO.getDatabaseManager().readRank(getOfflineProfile(playerName).getPlayerName()).get(getNonChildSkillType(skillType));
|
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.
|
* Get the position on the power level leaderboard of a player.
|
||||||
@@ -743,26 +476,10 @@ public final class ExperienceAPI {
|
|||||||
*
|
*
|
||||||
* @return the position on the power level leaderboard
|
* @return the position on the power level leaderboard
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static int getPlayerRankOverall(String playerName) {
|
public static int getPlayerRankOverall(String playerName) {
|
||||||
return mcMMO.getDatabaseManager().readRank(getOfflineProfile(playerName).getPlayerName()).get(null);
|
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sets the level of a player in a specific skill type.
|
* Sets the level of a player in a specific skill type.
|
||||||
* </br>
|
* </br>
|
||||||
@@ -790,27 +507,10 @@ public final class ExperienceAPI {
|
|||||||
* @throws InvalidSkillException if the given skill is not valid
|
* @throws InvalidSkillException if the given skill is not valid
|
||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static void setLevelOffline(String playerName, String skillType, int skillLevel) {
|
public static void setLevelOffline(String playerName, String skillType, int skillLevel) {
|
||||||
getOfflineProfile(playerName).modifySkill(getSkillType(skillType), 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.
|
* Sets the XP of a player in a specific skill type.
|
||||||
* </br>
|
* </br>
|
||||||
@@ -840,28 +540,10 @@ public final class ExperienceAPI {
|
|||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
* @throws UnsupportedOperationException if the given skill is a child skill
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static void setXPOffline(String playerName, String skillType, int newValue) {
|
public static void setXPOffline(String playerName, String skillType, int newValue) {
|
||||||
getOfflineProfile(playerName).setSkillXpLevel(getNonChildSkillType(skillType), 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.
|
* Removes XP from a player in a specific skill type.
|
||||||
* </br>
|
* </br>
|
||||||
@@ -891,58 +573,21 @@ public final class ExperienceAPI {
|
|||||||
* @throws InvalidPlayerException if the given player does not exist in the database
|
* @throws InvalidPlayerException if the given player does not exist in the database
|
||||||
* @throws UnsupportedOperationException if the given skill is a child skill
|
* @throws UnsupportedOperationException if the given skill is a child skill
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public static void removeXPOffline(String playerName, String skillType, int xp) {
|
public static void removeXPOffline(String playerName, String skillType, int xp) {
|
||||||
getOfflineProfile(playerName).removeXp(getNonChildSkillType(skillType), 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);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Utility methods follow.
|
// 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);
|
||||||
|
|
||||||
profile.addXp(skill, XP);
|
profile.addXp(skill, XP);
|
||||||
profile.save();
|
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) {
|
private static PlayerProfile getOfflineProfile(String playerName) {
|
||||||
UUID uuid = mcMMO.p.getServer().getOfflinePlayer(playerName).getUniqueId();
|
PlayerProfile profile = mcMMO.getDatabaseManager().loadPlayerProfile(playerName, false);
|
||||||
PlayerProfile profile = mcMMO.getDatabaseManager().loadPlayerProfile(uuid);
|
|
||||||
|
|
||||||
if (!profile.isLoaded()) {
|
if (!profile.isLoaded()) {
|
||||||
throw new InvalidPlayerException();
|
throw new InvalidPlayerException();
|
||||||
@@ -970,14 +615,4 @@ public final class ExperienceAPI {
|
|||||||
|
|
||||||
return skill;
|
return skill;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static XPGainReason getXPGainReason(String reason) throws InvalidXPGainReasonException {
|
|
||||||
XPGainReason xpGainReason = XPGainReason.getXPGainReason(reason);
|
|
||||||
|
|
||||||
if (xpGainReason == null) {
|
|
||||||
throw new InvalidXPGainReasonException();
|
|
||||||
}
|
|
||||||
|
|
||||||
return xpGainReason;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -176,7 +176,7 @@ public final class PartyAPI {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasAlly(String partyName) {
|
public static boolean hasAlly(String partyName) {
|
||||||
return getAllyName(partyName) != null;
|
return PartyManager.getParty(partyName).getAlly() != null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String getAllyName(String partyName) {
|
public static String getAllyName(String partyName) {
|
||||||
|
|||||||
@@ -1,93 +0,0 @@
|
|||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
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.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +1,16 @@
|
|||||||
package com.gmail.nossr50.chat;
|
package com.gmail.nossr50.chat;
|
||||||
|
|
||||||
|
import java.util.regex.Matcher;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
import com.gmail.nossr50.datatypes.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
import com.gmail.nossr50.events.chat.McMMOPartyChatEvent;
|
import com.gmail.nossr50.events.chat.McMMOPartyChatEvent;
|
||||||
import com.gmail.nossr50.runnables.party.PartyChatTask;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
|
|
||||||
public class PartyChatManager extends ChatManager {
|
public class PartyChatManager extends ChatManager {
|
||||||
private Party party;
|
private Party party;
|
||||||
@@ -25,6 +30,21 @@ public class PartyChatManager extends ChatManager {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void sendMessage() {
|
protected void sendMessage() {
|
||||||
new PartyChatTask(plugin, party, senderName, displayName, message).runTask(plugin);
|
if (Config.getInstance().getPartyChatColorLeaderName() && senderName.equalsIgnoreCase(party.getLeader())) {
|
||||||
|
message = message.replaceFirst(Pattern.quote(displayName), ChatColor.GOLD + Matcher.quoteReplacement(displayName) + ChatColor.RESET);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (Player member : party.getOnlineMembers()) {
|
||||||
|
member.sendMessage(message);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (party.getAlly() != null) {
|
||||||
|
for (Player member : party.getAlly().getOnlineMembers()) {
|
||||||
|
String allyPrefix = LocaleLoader.formatString(Config.getInstance().getPartyChatPrefixAlly());
|
||||||
|
member.sendMessage(allyPrefix + message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
plugin.getLogger().info("[P]<" + party.getName() + ">" + message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.gmail.nossr50.commands;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@@ -57,7 +58,7 @@ public class KrakenCommand implements TabExecutor {
|
|||||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 1:
|
case 1:
|
||||||
List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
|
Set<String> playerNames = UserManager.getPlayerNames();
|
||||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
default:
|
default:
|
||||||
return ImmutableList.of();
|
return ImmutableList.of();
|
||||||
|
|||||||
@@ -30,10 +30,7 @@ public class McmmoCommand implements CommandExecutor {
|
|||||||
sender.sendMessage(ChatColor.GOLD + " - " + ChatColor.GREEN + "gjmcferrin@gmail.com" + ChatColor.GOLD + " Paypal");
|
sender.sendMessage(ChatColor.GOLD + " - " + ChatColor.GREEN + "gjmcferrin@gmail.com" + ChatColor.GOLD + " Paypal");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Permissions.showversion(sender)) {
|
sender.sendMessage(LocaleLoader.getString("MOTD.Version", mcMMO.p.getDescription().getVersion()));
|
||||||
sender.sendMessage(LocaleLoader.getString("MOTD.Version", mcMMO.p.getDescription().getVersion()));
|
|
||||||
}
|
|
||||||
|
|
||||||
mcMMO.getHolidayManager().anniversaryCheck(sender);
|
mcMMO.getHolidayManager().anniversaryCheck(sender);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.gmail.nossr50.commands;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@@ -61,7 +62,7 @@ public abstract class ToggleCommand implements TabExecutor {
|
|||||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 1:
|
case 1:
|
||||||
List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
|
Set<String> playerNames = UserManager.getPlayerNames();
|
||||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
default:
|
default:
|
||||||
return ImmutableList.of();
|
return ImmutableList.of();
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ import org.bukkit.command.TabExecutor;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.util.StringUtil;
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
|
import com.gmail.nossr50.datatypes.party.PartyFeature;
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.chat.ChatManager;
|
import com.gmail.nossr50.chat.ChatManager;
|
||||||
import com.gmail.nossr50.chat.ChatManagerFactory;
|
import com.gmail.nossr50.chat.ChatManagerFactory;
|
||||||
import com.gmail.nossr50.config.Config;
|
|
||||||
import com.gmail.nossr50.datatypes.chat.ChatMode;
|
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.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
|||||||
@@ -4,10 +4,8 @@ import org.bukkit.command.CommandSender;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.gmail.nossr50.chat.PartyChatManager;
|
import com.gmail.nossr50.chat.PartyChatManager;
|
||||||
import com.gmail.nossr50.config.Config;
|
|
||||||
import com.gmail.nossr50.datatypes.chat.ChatMode;
|
import com.gmail.nossr50.datatypes.chat.ChatMode;
|
||||||
import com.gmail.nossr50.datatypes.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
import com.gmail.nossr50.datatypes.party.PartyFeature;
|
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.party.PartyManager;
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
@@ -30,11 +28,6 @@ public class PartyChatCommand extends ChatCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (party.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.CHAT)) {
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Party.Feature.Disabled.1"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
message = buildChatMessage(args, 0);
|
message = buildChatMessage(args, 0);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ import com.gmail.nossr50.datatypes.database.DatabaseType;
|
|||||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.runnables.database.DatabaseConversionTask;
|
import com.gmail.nossr50.runnables.database.DatabaseConversionTask;
|
||||||
import com.gmail.nossr50.runnables.player.PlayerProfileLoadingTask;
|
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
public class ConvertDatabaseCommand implements CommandExecutor {
|
public class ConvertDatabaseCommand implements CommandExecutor {
|
||||||
@@ -56,13 +55,13 @@ public class ConvertDatabaseCommand implements CommandExecutor {
|
|||||||
UserManager.clearAll();
|
UserManager.clearAll();
|
||||||
|
|
||||||
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
|
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
|
||||||
PlayerProfile profile = oldDatabase.loadPlayerProfile(player.getUniqueId());
|
PlayerProfile profile = oldDatabase.loadPlayerProfile(player.getName(), false);
|
||||||
|
|
||||||
if (profile.isLoaded()) {
|
if (profile.isLoaded()) {
|
||||||
mcMMO.getDatabaseManager().saveUser(profile);
|
mcMMO.getDatabaseManager().saveUser(profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
new PlayerProfileLoadingTask(player).runTaskTimerAsynchronously(mcMMO.p, 1, 20); // 1 Tick delay to ensure the player is marked as online before we begin loading
|
UserManager.addUser(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
new DatabaseConversionTask(oldDatabase, sender, previousType.toString(), newType.toString()).runTaskAsynchronously(mcMMO.p);
|
new DatabaseConversionTask(oldDatabase, sender, previousType.toString(), newType.toString()).runTaskAsynchronously(mcMMO.p);
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.gmail.nossr50.commands.database;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@@ -22,7 +23,7 @@ public class McremoveCommand implements TabExecutor {
|
|||||||
case 1:
|
case 1:
|
||||||
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
|
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
|
||||||
|
|
||||||
if (UserManager.getOfflinePlayer(playerName) == null && CommandUtils.unloadedProfile(sender, mcMMO.getDatabaseManager().loadPlayerProfile(playerName, false))) {
|
if (UserManager.getPlayer(playerName, true) == null && CommandUtils.unloadedProfile(sender, mcMMO.getDatabaseManager().loadPlayerProfile(playerName, false))) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,7 +45,7 @@ public class McremoveCommand implements TabExecutor {
|
|||||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 1:
|
case 1:
|
||||||
List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
|
Set<String> playerNames = UserManager.getPlayerNames();
|
||||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
default:
|
default:
|
||||||
return ImmutableList.of();
|
return ImmutableList.of();
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.XPGainReason;
|
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.EventUtils;
|
import com.gmail.nossr50.util.EventUtils;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
@@ -27,11 +26,11 @@ public class AddlevelsCommand extends ExperienceCommand {
|
|||||||
profile.addLevels(skill, value);
|
profile.addLevels(skill, value);
|
||||||
|
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
profile.scheduleAsyncSave();
|
profile.save();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
EventUtils.handleLevelChangeEvent(player, skill, value, xpRemoved, true, XPGainReason.COMMAND);
|
EventUtils.handleLevelChangeEvent(player, skill, value, xpRemoved, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.XPGainReason;
|
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
@@ -24,11 +23,11 @@ public class AddxpCommand extends ExperienceCommand {
|
|||||||
@Override
|
@Override
|
||||||
protected void handleCommand(Player player, PlayerProfile profile, SkillType skill, int value) {
|
protected void handleCommand(Player player, PlayerProfile profile, SkillType skill, int value) {
|
||||||
if (player != null) {
|
if (player != null) {
|
||||||
UserManager.getPlayer(player).applyXpGain(skill, value, XPGainReason.COMMAND);
|
UserManager.getPlayer(player).applyXpGain(skill, value);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
profile.addXp(skill, value);
|
profile.addXp(skill, value);
|
||||||
profile.scheduleAsyncSave();
|
profile.save();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import com.gmail.nossr50.mcMMO;
|
|||||||
import com.gmail.nossr50.datatypes.experience.FormulaType;
|
import com.gmail.nossr50.datatypes.experience.FormulaType;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.runnables.database.FormulaConversionTask;
|
import com.gmail.nossr50.runnables.database.FormulaConversionTask;
|
||||||
import com.gmail.nossr50.runnables.player.PlayerProfileLoadingTask;
|
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
public class ConvertExperienceCommand implements CommandExecutor {
|
public class ConvertExperienceCommand implements CommandExecutor {
|
||||||
@@ -38,7 +37,7 @@ public class ConvertExperienceCommand implements CommandExecutor {
|
|||||||
new FormulaConversionTask(sender, newType).runTaskLater(mcMMO.p, 1);
|
new FormulaConversionTask(sender, newType).runTaskLater(mcMMO.p, 1);
|
||||||
|
|
||||||
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
|
for (Player player : mcMMO.p.getServer().getOnlinePlayers()) {
|
||||||
new PlayerProfileLoadingTask(player).runTaskTimerAsynchronously(mcMMO.p, 1, 20); // 1 Tick delay to ensure the player is marked as online before we begin loading
|
UserManager.addUser(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.gmail.nossr50.commands.experience;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@@ -67,7 +68,7 @@ public abstract class ExperienceCommand implements TabExecutor {
|
|||||||
int value = Integer.parseInt(args[2]);
|
int value = Integer.parseInt(args[2]);
|
||||||
|
|
||||||
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
|
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getOfflinePlayer(playerName);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(playerName, true);
|
||||||
|
|
||||||
// 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 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) {
|
if (mcMMOPlayer == null) {
|
||||||
@@ -95,7 +96,7 @@ public abstract class ExperienceCommand implements TabExecutor {
|
|||||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 1:
|
case 1:
|
||||||
List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
|
Set<String> playerNames = UserManager.getPlayerNames();
|
||||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
case 2:
|
case 2:
|
||||||
return StringUtil.copyPartialMatches(args[1], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
|
return StringUtil.copyPartialMatches(args[1], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import org.bukkit.entity.Player;
|
|||||||
|
|
||||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.XPGainReason;
|
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.EventUtils;
|
import com.gmail.nossr50.util.EventUtils;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
@@ -29,7 +28,7 @@ public class MmoeditCommand extends ExperienceCommand {
|
|||||||
profile.modifySkill(skill, value);
|
profile.modifySkill(skill, value);
|
||||||
|
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
profile.scheduleAsyncSave();
|
profile.save();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -37,7 +36,7 @@ public class MmoeditCommand extends ExperienceCommand {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
EventUtils.handleLevelChangeEvent(player, skill, value, xpRemoved, value > skillLevel, XPGainReason.COMMAND);
|
EventUtils.handleLevelChangeEvent(player, skill, value, xpRemoved, value > skillLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.gmail.nossr50.commands.experience;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@@ -13,7 +14,6 @@ import com.gmail.nossr50.mcMMO;
|
|||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.XPGainReason;
|
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.EventUtils;
|
import com.gmail.nossr50.util.EventUtils;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
@@ -66,7 +66,7 @@ public class SkillresetCommand implements TabExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
|
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getOfflinePlayer(playerName);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(playerName, true);
|
||||||
|
|
||||||
// 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 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) {
|
if (mcMMOPlayer == null) {
|
||||||
@@ -94,7 +94,7 @@ public class SkillresetCommand implements TabExecutor {
|
|||||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 1:
|
case 1:
|
||||||
List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
|
Set<String> playerNames = UserManager.getPlayerNames();
|
||||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
case 2:
|
case 2:
|
||||||
return StringUtil.copyPartialMatches(args[1], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
|
return StringUtil.copyPartialMatches(args[1], SkillType.SKILL_NAMES, new ArrayList<String>(SkillType.SKILL_NAMES.size()));
|
||||||
@@ -110,11 +110,11 @@ public class SkillresetCommand implements TabExecutor {
|
|||||||
profile.modifySkill(skill, 0);
|
profile.modifySkill(skill, 0);
|
||||||
|
|
||||||
if (player == null) {
|
if (player == null) {
|
||||||
profile.scheduleAsyncSave();
|
profile.save();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
EventUtils.handleLevelChangeEvent(player, skill, levelsRemoved, xpRemoved, false, XPGainReason.COMMAND);
|
EventUtils.handleLevelChangeEvent(player, skill, levelsRemoved, xpRemoved, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean permissionsCheckSelf(CommandSender sender) {
|
protected boolean permissionsCheckSelf(CommandSender sender) {
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
package com.gmail.nossr50.commands.party;
|
package com.gmail.nossr50.commands.party;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
@@ -12,10 +9,10 @@ import org.bukkit.command.TabExecutor;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.util.StringUtil;
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.commands.chat.PartyChatCommand;
|
import com.gmail.nossr50.commands.chat.PartyChatCommand;
|
||||||
import com.gmail.nossr50.commands.party.alliance.PartyAllianceCommand;
|
import com.gmail.nossr50.commands.party.alliance.PartyAllianceCommand;
|
||||||
import com.gmail.nossr50.commands.party.teleport.PtpCommand;
|
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.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
@@ -55,7 +52,7 @@ public class PartyCommand implements TabExecutor {
|
|||||||
private CommandExecutor partyRenameCommand = new PartyRenameCommand();
|
private CommandExecutor partyRenameCommand = new PartyRenameCommand();
|
||||||
private CommandExecutor partyInfoCommand = new PartyInfoCommand();
|
private CommandExecutor partyInfoCommand = new PartyInfoCommand();
|
||||||
private CommandExecutor partyHelpCommand = new PartyHelpCommand();
|
private CommandExecutor partyHelpCommand = new PartyHelpCommand();
|
||||||
private CommandExecutor partyTeleportCommand = new PtpCommand();
|
private CommandExecutor partyTeleportCommand = mcMMO.p.getCommand("ptp").getExecutor();
|
||||||
private CommandExecutor partyChatCommand = new PartyChatCommand();
|
private CommandExecutor partyChatCommand = new PartyChatCommand();
|
||||||
private CommandExecutor partyAllianceCommand = new PartyAllianceCommand();
|
private CommandExecutor partyAllianceCommand = new PartyAllianceCommand();
|
||||||
|
|
||||||
@@ -178,7 +175,7 @@ public class PartyCommand implements TabExecutor {
|
|||||||
case INVITE:
|
case INVITE:
|
||||||
case KICK:
|
case KICK:
|
||||||
case OWNER:
|
case OWNER:
|
||||||
List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
|
Set<String> playerNames = UserManager.getPlayerNames();
|
||||||
return StringUtil.copyPartialMatches(args[1], playerNames, new ArrayList<String>(playerNames.size()));
|
return StringUtil.copyPartialMatches(args[1], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
case XPSHARE:
|
case XPSHARE:
|
||||||
return StringUtil.copyPartialMatches(args[1], XPSHARE_COMPLETIONS, new ArrayList<String>(XPSHARE_COMPLETIONS.size()));
|
return StringUtil.copyPartialMatches(args[1], XPSHARE_COMPLETIONS, new ArrayList<String>(XPSHARE_COMPLETIONS.size()));
|
||||||
@@ -193,10 +190,7 @@ public class PartyCommand implements TabExecutor {
|
|||||||
List<String> matches = StringUtil.copyPartialMatches(args[1], PtpCommand.TELEPORT_SUBCOMMANDS, new ArrayList<String>(PtpCommand.TELEPORT_SUBCOMMANDS.size()));
|
List<String> matches = StringUtil.copyPartialMatches(args[1], PtpCommand.TELEPORT_SUBCOMMANDS, new ArrayList<String>(PtpCommand.TELEPORT_SUBCOMMANDS.size()));
|
||||||
|
|
||||||
if (matches.size() == 0) {
|
if (matches.size() == 0) {
|
||||||
Player player = (Player) sender;
|
playerNames = UserManager.getPlayerNames();
|
||||||
Party party = UserManager.getPlayer(player).getParty();
|
|
||||||
|
|
||||||
playerNames = party.getOnlinePlayerNames(player);
|
|
||||||
return StringUtil.copyPartialMatches(args[1], playerNames, new ArrayList<String>(playerNames.size()));
|
return StringUtil.copyPartialMatches(args[1], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -223,7 +217,7 @@ public class PartyCommand implements TabExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private String[] extractArgs(String[] args) {
|
private String[] extractArgs(String[] args) {
|
||||||
return Arrays.copyOfRange(args, 1, args.length);
|
return Arrays.copyOfRange(args, 1, args.length - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isItemShareCategory(String category) {
|
private boolean isItemShareCategory(String category) {
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ public class PartyHelpCommand implements CommandExecutor {
|
|||||||
sender.sendMessage(LocaleLoader.getString("Party.Help.7", "/party leader"));
|
sender.sendMessage(LocaleLoader.getString("Party.Help.7", "/party leader"));
|
||||||
sender.sendMessage(LocaleLoader.getString("Party.Help.8", "/party disband"));
|
sender.sendMessage(LocaleLoader.getString("Party.Help.8", "/party disband"));
|
||||||
sender.sendMessage(LocaleLoader.getString("Party.Help.9", "/party itemshare"));
|
sender.sendMessage(LocaleLoader.getString("Party.Help.9", "/party itemshare"));
|
||||||
sender.sendMessage(LocaleLoader.getString("Party.Help.10", "/party xpshare"));
|
sender.sendMessage(LocaleLoader.getString("Party.Help.10", "/party expshare"));
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public class PartyInviteCommand implements CommandExecutor {
|
|||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 2:
|
case 2:
|
||||||
String targetName = CommandUtils.getMatchedPlayerName(args[1]);
|
String targetName = CommandUtils.getMatchedPlayerName(args[1]);
|
||||||
McMMOPlayer mcMMOTarget = UserManager.getOfflinePlayer(targetName);
|
McMMOPlayer mcMMOTarget = UserManager.getPlayer(targetName, true);
|
||||||
|
|
||||||
if (!CommandUtils.checkPlayerExistence(sender, targetName, mcMMOTarget)) {
|
if (!CommandUtils.checkPlayerExistence(sender, targetName, mcMMOTarget)) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -11,7 +11,6 @@ import com.gmail.nossr50.datatypes.party.Party;
|
|||||||
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
import com.gmail.nossr50.events.party.McMMOPartyChangeEvent.EventReason;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.party.PartyManager;
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
public class PartyKickCommand implements CommandExecutor {
|
public class PartyKickCommand implements CommandExecutor {
|
||||||
@@ -20,15 +19,13 @@ public class PartyKickCommand implements CommandExecutor {
|
|||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 2:
|
case 2:
|
||||||
Party playerParty = UserManager.getPlayer((Player) sender).getParty();
|
Party playerParty = UserManager.getPlayer((Player) sender).getParty();
|
||||||
String targetName = CommandUtils.getMatchedPlayerName(args[1]);
|
OfflinePlayer target = mcMMO.p.getServer().getOfflinePlayer(args[1]);
|
||||||
|
|
||||||
if (!playerParty.getMembers().contains(targetName)) {
|
if (!playerParty.getMembers().contains(target.getName())) {
|
||||||
sender.sendMessage(LocaleLoader.getString("Party.NotInYourParty", targetName));
|
sender.sendMessage(LocaleLoader.getString("Party.NotInYourParty", target.getName()));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
OfflinePlayer target = mcMMO.p.getServer().getOfflinePlayer(targetName);
|
|
||||||
|
|
||||||
if (target.isOnline()) {
|
if (target.isOnline()) {
|
||||||
Player onlineTarget = target.getPlayer();
|
Player onlineTarget = target.getPlayer();
|
||||||
String partyName = playerParty.getName();
|
String partyName = playerParty.getName();
|
||||||
|
|||||||
@@ -23,11 +23,6 @@ public class PartyAllianceAcceptCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (mcMMOPlayer.getParty().getAlly() != null) {
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.Party.Alliance.AlreadyAllies"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
PartyManager.acceptAllianceInvite(mcMMOPlayer);
|
PartyManager.acceptAllianceInvite(mcMMOPlayer);
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.gmail.nossr50.commands.party.alliance;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
@@ -110,7 +111,7 @@ public class PartyAllianceCommand implements TabExecutor {
|
|||||||
List<String> matches = StringUtil.copyPartialMatches(args[0], ALLIANCE_SUBCOMMANDS, new ArrayList<String>(ALLIANCE_SUBCOMMANDS.size()));
|
List<String> matches = StringUtil.copyPartialMatches(args[0], ALLIANCE_SUBCOMMANDS, new ArrayList<String>(ALLIANCE_SUBCOMMANDS.size()));
|
||||||
|
|
||||||
if (matches.size() == 0) {
|
if (matches.size() == 0) {
|
||||||
List<String> playerNames = CommandUtils.getOnlinePlayerNames(commandSender);
|
Set<String> playerNames = UserManager.getPlayerNames();
|
||||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public class PartyAllianceInviteCommand implements CommandExecutor {
|
|||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 3:
|
case 3:
|
||||||
String targetName = CommandUtils.getMatchedPlayerName(args[2]);
|
String targetName = CommandUtils.getMatchedPlayerName(args[2]);
|
||||||
McMMOPlayer mcMMOTarget = UserManager.getOfflinePlayer(targetName);
|
McMMOPlayer mcMMOTarget = UserManager.getPlayer(targetName, true);
|
||||||
|
|
||||||
if (!CommandUtils.checkPlayerExistence(sender, targetName, mcMMOTarget)) {
|
if (!CommandUtils.checkPlayerExistence(sender, targetName, mcMMOTarget)) {
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.gmail.nossr50.commands.party.teleport;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
@@ -10,10 +11,10 @@ import org.bukkit.command.TabExecutor;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.util.StringUtil;
|
import org.bukkit.util.StringUtil;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
|
||||||
import com.gmail.nossr50.config.Config;
|
|
||||||
import com.gmail.nossr50.datatypes.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
import com.gmail.nossr50.datatypes.party.PartyFeature;
|
import com.gmail.nossr50.datatypes.party.PartyFeature;
|
||||||
|
import com.gmail.nossr50.mcMMO;
|
||||||
|
import com.gmail.nossr50.config.Config;
|
||||||
import com.gmail.nossr50.datatypes.party.PartyTeleportRecord;
|
import com.gmail.nossr50.datatypes.party.PartyTeleportRecord;
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
@@ -43,12 +44,6 @@ public class PtpCommand implements TabExecutor {
|
|||||||
|
|
||||||
Player player = (Player) sender;
|
Player player = (Player) sender;
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
||||||
|
|
||||||
if (!mcMMOPlayer.inParty()) {
|
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Party.None"));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Party party = mcMMOPlayer.getParty();
|
Party party = mcMMOPlayer.getParty();
|
||||||
|
|
||||||
if (party.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.TELEPORT)) {
|
if (party.getLevel() < Config.getInstance().getPartyFeatureUnlockLevel(PartyFeature.TELEPORT)) {
|
||||||
@@ -114,14 +109,7 @@ public class PtpCommand implements TabExecutor {
|
|||||||
List<String> matches = StringUtil.copyPartialMatches(args[0], TELEPORT_SUBCOMMANDS, new ArrayList<String>(TELEPORT_SUBCOMMANDS.size()));
|
List<String> matches = StringUtil.copyPartialMatches(args[0], TELEPORT_SUBCOMMANDS, new ArrayList<String>(TELEPORT_SUBCOMMANDS.size()));
|
||||||
|
|
||||||
if (matches.size() == 0) {
|
if (matches.size() == 0) {
|
||||||
Player player = (Player) sender;
|
Set<String> playerNames = UserManager.getPlayerNames();
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(player);
|
|
||||||
|
|
||||||
if (!mcMMOPlayer.inParty()) {
|
|
||||||
return ImmutableList.of();
|
|
||||||
}
|
|
||||||
|
|
||||||
List<String> playerNames = mcMMOPlayer.getParty().getOnlinePlayerNames(player);
|
|
||||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.gmail.nossr50.commands.player;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@@ -28,7 +29,7 @@ public class InspectCommand implements TabExecutor {
|
|||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 1:
|
case 1:
|
||||||
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
|
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getOfflinePlayer(playerName);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(playerName, true);
|
||||||
|
|
||||||
// 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 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) {
|
if (mcMMOPlayer == null) {
|
||||||
@@ -103,7 +104,7 @@ public class InspectCommand implements TabExecutor {
|
|||||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 1:
|
case 1:
|
||||||
List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
|
Set<String> playerNames = UserManager.getPlayerNames();
|
||||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
default:
|
default:
|
||||||
return ImmutableList.of();
|
return ImmutableList.of();
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.gmail.nossr50.commands.player;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@@ -14,6 +15,7 @@ import com.gmail.nossr50.config.Config;
|
|||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.runnables.commands.McrankCommandAsyncTask;
|
import com.gmail.nossr50.runnables.commands.McrankCommandAsyncTask;
|
||||||
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
@@ -45,7 +47,7 @@ public class McrankCommand implements TabExecutor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
|
String playerName = CommandUtils.getMatchedPlayerName(args[0]);
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getOfflinePlayer(playerName);
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(playerName, true);
|
||||||
|
|
||||||
if (mcMMOPlayer != null) {
|
if (mcMMOPlayer != null) {
|
||||||
Player player = mcMMOPlayer.getPlayer();
|
Player player = mcMMOPlayer.getPlayer();
|
||||||
@@ -71,7 +73,7 @@ public class McrankCommand implements TabExecutor {
|
|||||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
||||||
switch (args.length) {
|
switch (args.length) {
|
||||||
case 1:
|
case 1:
|
||||||
List<String> playerNames = CommandUtils.getOnlinePlayerNames(sender);
|
Set<String> playerNames = UserManager.getPlayerNames();
|
||||||
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
return StringUtil.copyPartialMatches(args[0], playerNames, new ArrayList<String>(playerNames.size()));
|
||||||
default:
|
default:
|
||||||
return ImmutableList.of();
|
return ImmutableList.of();
|
||||||
@@ -81,9 +83,8 @@ public class McrankCommand implements TabExecutor {
|
|||||||
private void display(CommandSender sender, String playerName) {
|
private void display(CommandSender sender, String playerName) {
|
||||||
if (sender instanceof Player) {
|
if (sender instanceof Player) {
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
long cooldownMillis = Math.max(Config.getInstance().getDatabasePlayerCooldown(), 1750);
|
|
||||||
|
|
||||||
if (mcMMOPlayer.getDatabaseATS() + cooldownMillis > System.currentTimeMillis()) {
|
if (mcMMOPlayer.getDatabaseATS() + Misc.PLAYER_DATABASE_COOLDOWN_MILLIS > System.currentTimeMillis()) {
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Database.Cooldown"));
|
sender.sendMessage(LocaleLoader.getString("Commands.Database.Cooldown"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
|||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.runnables.commands.MctopCommandAsyncTask;
|
import com.gmail.nossr50.runnables.commands.MctopCommandAsyncTask;
|
||||||
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
@@ -84,9 +85,8 @@ public class MctopCommand implements TabExecutor {
|
|||||||
|
|
||||||
if (sender instanceof Player) {
|
if (sender instanceof Player) {
|
||||||
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
McMMOPlayer mcMMOPlayer = UserManager.getPlayer(sender.getName());
|
||||||
long cooldownMillis = Math.max(Config.getInstance().getDatabasePlayerCooldown(), 1750);
|
|
||||||
|
|
||||||
if (mcMMOPlayer.getDatabaseATS() + cooldownMillis > System.currentTimeMillis()) {
|
if (mcMMOPlayer.getDatabaseATS() + Misc.PLAYER_DATABASE_COOLDOWN_MILLIS > System.currentTimeMillis()) {
|
||||||
sender.sendMessage(LocaleLoader.getString("Commands.Database.Cooldown"));
|
sender.sendMessage(LocaleLoader.getString("Commands.Database.Cooldown"));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ public class AlchemyCommand extends SkillCommand {
|
|||||||
AlchemyManager alchemyManager = UserManager.getPlayer(player).getAlchemyManager();
|
AlchemyManager alchemyManager = UserManager.getPlayer(player).getAlchemyManager();
|
||||||
String[] displayValues = new String[2];
|
String[] displayValues = new String[2];
|
||||||
|
|
||||||
displayValues[0] = decimal.format(alchemyManager.calculateBrewSpeed(false)) + "x";
|
displayValues[0] = decimal.format(alchemyManager.getBrewSpeed()) + "x";
|
||||||
displayValues[1] = isLucky ? decimal.format(alchemyManager.calculateBrewSpeed(true)) + "x" : null;
|
displayValues[1] = isLucky ? decimal.format(alchemyManager.getBrewSpeedLucky()) + "x" : null;
|
||||||
|
|
||||||
return displayValues;
|
return displayValues;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,205 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.skills;
|
|
||||||
|
|
||||||
import java.text.DecimalFormat;
|
|
||||||
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 com.gmail.nossr50.locale.LocaleLoader;
|
|
||||||
import com.gmail.nossr50.util.HolidayManager.FakeSkillType;
|
|
||||||
import com.gmail.nossr50.util.Misc;
|
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
|
||||||
|
|
||||||
import com.google.common.collect.ImmutableList;
|
|
||||||
|
|
||||||
public class AprilCommand implements TabExecutor {
|
|
||||||
private String skillName;
|
|
||||||
|
|
||||||
protected DecimalFormat percent = new DecimalFormat("##0.00%");
|
|
||||||
protected DecimalFormat decimal = new DecimalFormat("##0.00");
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onCommand(CommandSender sender, Command command, String label, String[] args) {
|
|
||||||
if (CommandUtils.noConsoleUsage(sender)) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
skillName = StringUtils.getCapitalized(label);
|
|
||||||
|
|
||||||
switch (args.length) {
|
|
||||||
case 0:
|
|
||||||
Player player = (Player) sender;
|
|
||||||
FakeSkillType fakeSkillType = FakeSkillType.getByName(skillName);
|
|
||||||
|
|
||||||
float skillValue = Misc.getRandom().nextInt(99);
|
|
||||||
|
|
||||||
player.sendMessage(LocaleLoader.getString("Skills.Header", skillName));
|
|
||||||
player.sendMessage(LocaleLoader.getString("Commands.XPGain", getXPGainString(fakeSkillType)));
|
|
||||||
player.sendMessage(LocaleLoader.getString("Effects.Level", (int) skillValue, Misc.getRandom().nextInt(1000), 1000 + Misc.getRandom().nextInt(1000)));
|
|
||||||
|
|
||||||
|
|
||||||
List<String> effectMessages = effectsDisplay(fakeSkillType);
|
|
||||||
|
|
||||||
if (!effectMessages.isEmpty()) {
|
|
||||||
player.sendMessage(LocaleLoader.getString("Skills.Header", LocaleLoader.getString("Effects.Effects")));
|
|
||||||
|
|
||||||
for (String message : effectMessages) {
|
|
||||||
player.sendMessage(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
List<String> statsMessages = statsDisplay(fakeSkillType);
|
|
||||||
|
|
||||||
if (!statsMessages.isEmpty()) {
|
|
||||||
player.sendMessage(LocaleLoader.getString("Skills.Header", LocaleLoader.getString("Commands.Stats.Self")));
|
|
||||||
|
|
||||||
for (String message : statsMessages) {
|
|
||||||
player.sendMessage(message);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
player.sendMessage(LocaleLoader.formatString("[[DARK_AQUA]]Guide for {0} available - type /APRIL FOOLS ! :D", skillName));
|
|
||||||
return true;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private String getXPGainString(FakeSkillType fakeSkillType) {
|
|
||||||
switch (fakeSkillType) {
|
|
||||||
case MACHO:
|
|
||||||
return "Get beaten up";
|
|
||||||
case JUMPING:
|
|
||||||
return "Kris Kross will make ya Jump Jump";
|
|
||||||
case THROWING:
|
|
||||||
return "Chuck your items on the floor";
|
|
||||||
case WRECKING:
|
|
||||||
return "I'M GONNA WRECK IT!";
|
|
||||||
case CRAFTING:
|
|
||||||
return "Craft apple pies";
|
|
||||||
case WALKING:
|
|
||||||
return "Walk around the park";
|
|
||||||
case SWIMMING:
|
|
||||||
return "Like a fish on a bicycle";
|
|
||||||
case FALLING:
|
|
||||||
return "Faceplant the floor, headbutt the ground";
|
|
||||||
case CLIMBING:
|
|
||||||
return "Climb the highest mountain";
|
|
||||||
case FLYING:
|
|
||||||
return "I believe I can fly";
|
|
||||||
case DIVING:
|
|
||||||
return "Scuba club 4000";
|
|
||||||
case PIGGY:
|
|
||||||
return "OINK! OINK!";
|
|
||||||
default:
|
|
||||||
return "Sit and wait?";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public List<String> onTabComplete(CommandSender sender, Command command, String alias, String[] args) {
|
|
||||||
switch (args.length) {
|
|
||||||
case 1:
|
|
||||||
return ImmutableList.of("?");
|
|
||||||
default:
|
|
||||||
return ImmutableList.of();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<String> effectsDisplay(FakeSkillType fakeSkillType) {
|
|
||||||
List<String> messages = new ArrayList<String>();
|
|
||||||
|
|
||||||
switch (fakeSkillType) {
|
|
||||||
case MACHO:
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", "Punching bag", "Absorb damage, like a bag of sand"));
|
|
||||||
break;
|
|
||||||
case JUMPING:
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", "Jump", "PRESS SPACE TO JUMP"));
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", "Jump Twice", "PRESS SPACE TWICE TO JUMP TWICE"));
|
|
||||||
break;
|
|
||||||
case THROWING:
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", "Drop Item", "Randomly drop items, at random"));
|
|
||||||
break;
|
|
||||||
case WRECKING:
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", "Ralphinator", "Smash windows with your fists"));
|
|
||||||
break;
|
|
||||||
case CRAFTING:
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", "Crafting", "Chance of successful craft"));
|
|
||||||
break;
|
|
||||||
case WALKING:
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", "Walk", "Traveling gracefully by foot"));
|
|
||||||
break;
|
|
||||||
case SWIMMING:
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", "Swim", "Just keep swimming, swimming, swimming"));
|
|
||||||
break;
|
|
||||||
case FALLING:
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", "Skydiving", "Go jump of a cliff. No, seriously."));
|
|
||||||
break;
|
|
||||||
case CLIMBING:
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", "Rock Climber", "Use string to climb mountains faster"));
|
|
||||||
break;
|
|
||||||
case FLYING:
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", "Fly", "Throw yourself at the ground and miss"));
|
|
||||||
break;
|
|
||||||
case DIVING:
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", "Hold Breath", "Press shift to hold your breath longer"));
|
|
||||||
break;
|
|
||||||
case PIGGY:
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", "Carrot Turbo", "Supercharge your pigs with carrots"));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return messages;
|
|
||||||
}
|
|
||||||
|
|
||||||
private List<String> statsDisplay(FakeSkillType fakeSkillType) {
|
|
||||||
List<String> messages = new ArrayList<String>();
|
|
||||||
|
|
||||||
switch (fakeSkillType) {
|
|
||||||
case MACHO:
|
|
||||||
messages.add(LocaleLoader.formatString("[[RED]]Damage Taken: [[YELLOW]]{0}%", decimal.format(Misc.getRandom().nextInt(77))));
|
|
||||||
break;
|
|
||||||
case JUMPING:
|
|
||||||
messages.add(LocaleLoader.formatString("[[RED]]Double Jump Chance: [[YELLOW]]{0}%", decimal.format(Misc.getRandom().nextInt(27))));
|
|
||||||
break;
|
|
||||||
case THROWING:
|
|
||||||
messages.add(LocaleLoader.formatString("[[RED]]Drop Item Chance: [[YELLOW]]{0}%", decimal.format(Misc.getRandom().nextInt(87))));
|
|
||||||
break;
|
|
||||||
case WRECKING:
|
|
||||||
messages.add(LocaleLoader.formatString("[[RED]]Wrecking Chance: [[YELLOW]]{0}%", decimal.format(Misc.getRandom().nextInt(14))));
|
|
||||||
break;
|
|
||||||
case CRAFTING:
|
|
||||||
messages.add(LocaleLoader.formatString("[[RED]]Crafting Success: [[YELLOW]]{0}%", decimal.format(Misc.getRandom().nextInt(27))));
|
|
||||||
break;
|
|
||||||
case WALKING:
|
|
||||||
messages.add(LocaleLoader.formatString("[[RED]]Walk Chance: [[YELLOW]]{0}%", decimal.format(Misc.getRandom().nextInt(27))));
|
|
||||||
break;
|
|
||||||
case SWIMMING:
|
|
||||||
messages.add(LocaleLoader.formatString("[[RED]]Swim Chance: [[YELLOW]]{0}%", decimal.format(Misc.getRandom().nextInt(27))));
|
|
||||||
break;
|
|
||||||
case FALLING:
|
|
||||||
messages.add(LocaleLoader.formatString("[[RED]]Skydiving Success: [[YELLOW]]{0}%", decimal.format(Misc.getRandom().nextInt(37))));
|
|
||||||
break;
|
|
||||||
case CLIMBING:
|
|
||||||
messages.add(LocaleLoader.formatString("[[RED]]Rock Climber Chance: [[YELLOW]]{0}%", decimal.format(Misc.getRandom().nextInt(27))));
|
|
||||||
break;
|
|
||||||
case FLYING:
|
|
||||||
messages.add(LocaleLoader.formatString("[[RED]]Fly Chance: [[YELLOW]]{0}%", decimal.format(Misc.getRandom().nextInt(27))));
|
|
||||||
break;
|
|
||||||
case DIVING:
|
|
||||||
messages.add(LocaleLoader.formatString("[[RED]]Hold Breath Chance: [[YELLOW]]{0}%", decimal.format(Misc.getRandom().nextInt(27))));
|
|
||||||
break;
|
|
||||||
case PIGGY:
|
|
||||||
messages.add(LocaleLoader.formatString("[[RED]]Carrot Turbo Boost: [[YELLOW]]{0}%", decimal.format(Misc.getRandom().nextInt(80)) + 10));
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return messages;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -65,7 +65,7 @@ public class ArcheryCommand extends SkillCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (canDaze) {
|
if (canDaze) {
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Archery.Effect.2"), LocaleLoader.getString("Archery.Effect.3", Archery.dazeBonusDamage)));
|
messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Archery.Effect.2"), LocaleLoader.getString("Archery.Effect.3", Archery.dazeModifier)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canRetrieve) {
|
if (canRetrieve) {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import java.util.ArrayList;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
|
import org.bukkit.block.Biome;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
@@ -50,6 +51,7 @@ public class FishingCommand extends SkillCommand {
|
|||||||
@Override
|
@Override
|
||||||
protected void dataCalculations(Player player, float skillValue, boolean isLucky) {
|
protected void dataCalculations(Player player, float skillValue, boolean isLucky) {
|
||||||
FishingManager fishingManager = UserManager.getPlayer(player).getFishingManager();
|
FishingManager fishingManager = UserManager.getPlayer(player).getFishingManager();
|
||||||
|
boolean isStorming = player.getWorld().hasStorm();
|
||||||
|
|
||||||
// TREASURE HUNTER
|
// TREASURE HUNTER
|
||||||
if (canTreasureHunt) {
|
if (canTreasureHunt) {
|
||||||
@@ -68,7 +70,7 @@ public class FishingCommand extends SkillCommand {
|
|||||||
double totalEnchantChance = 0;
|
double totalEnchantChance = 0;
|
||||||
|
|
||||||
for (Rarity rarity : Rarity.values()) {
|
for (Rarity rarity : Rarity.values()) {
|
||||||
if (rarity != Rarity.TRAP && rarity != Rarity.RECORD) {
|
if (rarity != Rarity.TRAP || rarity != Rarity.RECORD) {
|
||||||
totalEnchantChance += TreasureConfig.getInstance().getEnchantmentDropRate(lootTier, rarity);
|
totalEnchantChance += TreasureConfig.getInstance().getEnchantmentDropRate(lootTier, rarity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -90,14 +92,16 @@ public class FishingCommand extends SkillCommand {
|
|||||||
|
|
||||||
// MASTER ANGLER
|
// MASTER ANGLER
|
||||||
if (canMasterAngler) {
|
if (canMasterAngler) {
|
||||||
double rawBiteChance = 1.0 / (player.getWorld().hasStorm() ? 300 : 500);
|
double rawBiteChance = 1.0 / (isStorming ? 300 : 500);
|
||||||
Location location = fishingManager.getHookLocation();
|
Location location = fishingManager.getHookLocation();
|
||||||
|
|
||||||
if (location == null) {
|
if (location == null) {
|
||||||
location = player.getLocation();
|
location = player.getLocation();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Fishing.masterAnglerBiomes.contains(location.getBlock().getBiome())) {
|
Biome biome = location.getBlock().getBiome();
|
||||||
|
|
||||||
|
if (biome == Biome.RIVER || biome == Biome.OCEAN) {
|
||||||
rawBiteChance = rawBiteChance * AdvancedConfig.getInstance().getMasterAnglerBiomeModifier();
|
rawBiteChance = rawBiteChance * AdvancedConfig.getInstance().getMasterAnglerBiomeModifier();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import com.gmail.nossr50.config.AdvancedConfig;
|
|||||||
import com.gmail.nossr50.datatypes.skills.SecondaryAbility;
|
import com.gmail.nossr50.datatypes.skills.SecondaryAbility;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.skills.mining.BlastMining;
|
|
||||||
import com.gmail.nossr50.skills.mining.BlastMining.Tier;
|
import com.gmail.nossr50.skills.mining.BlastMining.Tier;
|
||||||
import com.gmail.nossr50.skills.mining.MiningManager;
|
import com.gmail.nossr50.skills.mining.MiningManager;
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
@@ -127,7 +126,7 @@ public class MiningCommand extends SkillCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (canBiggerBombs) {
|
if (canBiggerBombs) {
|
||||||
int unlockLevel = BlastMining.getBiggerBombsUnlockLevel();
|
int unlockLevel = AdvancedConfig.getInstance().getBlastMiningRankLevel(Tier.TWO);
|
||||||
|
|
||||||
if (skillValue < unlockLevel) {
|
if (skillValue < unlockLevel) {
|
||||||
messages.add(LocaleLoader.getString("Ability.Generic.Template.Lock", LocaleLoader.getString("Mining.Ability.Locked.1", unlockLevel)));
|
messages.add(LocaleLoader.getString("Ability.Generic.Template.Lock", LocaleLoader.getString("Mining.Ability.Locked.1", unlockLevel)));
|
||||||
@@ -138,7 +137,7 @@ public class MiningCommand extends SkillCommand {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (canDemoExpert) {
|
if (canDemoExpert) {
|
||||||
int unlockLevel = BlastMining.getDemolitionExpertUnlockLevel();
|
int unlockLevel = AdvancedConfig.getInstance().getBlastMiningRankLevel(Tier.FOUR);
|
||||||
|
|
||||||
if (skillValue < unlockLevel) {
|
if (skillValue < unlockLevel) {
|
||||||
messages.add(LocaleLoader.getString("Ability.Generic.Template.Lock", LocaleLoader.getString("Mining.Ability.Locked.2", unlockLevel)));
|
messages.add(LocaleLoader.getString("Ability.Generic.Template.Lock", LocaleLoader.getString("Mining.Ability.Locked.2", unlockLevel)));
|
||||||
|
|||||||
@@ -7,7 +7,6 @@ import org.bukkit.Material;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.datatypes.skills.MaterialType;
|
|
||||||
import com.gmail.nossr50.datatypes.skills.SecondaryAbility;
|
import com.gmail.nossr50.datatypes.skills.SecondaryAbility;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
@@ -27,6 +26,7 @@ public class RepairCommand extends SkillCommand {
|
|||||||
private boolean canSuperRepair;
|
private boolean canSuperRepair;
|
||||||
private boolean canMasterRepair;
|
private boolean canMasterRepair;
|
||||||
private boolean canArcaneForge;
|
private boolean canArcaneForge;
|
||||||
|
private boolean canSalvage;
|
||||||
private boolean canRepairStone;
|
private boolean canRepairStone;
|
||||||
private boolean canRepairIron;
|
private boolean canRepairIron;
|
||||||
private boolean canRepairGold;
|
private boolean canRepairGold;
|
||||||
@@ -77,13 +77,14 @@ public class RepairCommand extends SkillCommand {
|
|||||||
canSuperRepair = Permissions.secondaryAbilityEnabled(player, SecondaryAbility.SUPER_REPAIR);
|
canSuperRepair = Permissions.secondaryAbilityEnabled(player, SecondaryAbility.SUPER_REPAIR);
|
||||||
canMasterRepair = Permissions.secondaryAbilityEnabled(player, SecondaryAbility.REPAIR_MASTERY);
|
canMasterRepair = Permissions.secondaryAbilityEnabled(player, SecondaryAbility.REPAIR_MASTERY);
|
||||||
canArcaneForge = Permissions.secondaryAbilityEnabled(player, SecondaryAbility.ARCANE_FORGING);
|
canArcaneForge = Permissions.secondaryAbilityEnabled(player, SecondaryAbility.ARCANE_FORGING);
|
||||||
canRepairDiamond = Permissions.repairMaterialType(player, MaterialType.DIAMOND);
|
canSalvage = Permissions.secondaryAbilityEnabled(player, SecondaryAbility.SALVAGE);
|
||||||
canRepairGold = Permissions.repairMaterialType(player, MaterialType.GOLD);
|
canRepairDiamond = Permissions.repairDiamond(player);
|
||||||
canRepairIron = Permissions.repairMaterialType(player, MaterialType.IRON);
|
canRepairGold = Permissions.repairGold(player);
|
||||||
canRepairStone = Permissions.repairMaterialType(player, MaterialType.STONE);
|
canRepairIron = Permissions.repairIron(player);
|
||||||
canRepairString = Permissions.repairMaterialType(player, MaterialType.STRING);
|
canRepairStone = Permissions.repairStone(player);
|
||||||
canRepairLeather = Permissions.repairMaterialType(player, MaterialType.LEATHER);
|
canRepairString = Permissions.repairString(player);
|
||||||
canRepairWood = Permissions.repairMaterialType(player, MaterialType.WOOD);
|
canRepairLeather = Permissions.repairLeather(player);
|
||||||
|
canRepairWood = Permissions.repairWood(player);
|
||||||
arcaneBypass = Permissions.arcaneBypass(player);
|
arcaneBypass = Permissions.arcaneBypass(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -121,6 +122,10 @@ public class RepairCommand extends SkillCommand {
|
|||||||
messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Repair.Effect.6", diamondLevel), LocaleLoader.getString("Repair.Effect.7")));
|
messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Repair.Effect.6", diamondLevel), LocaleLoader.getString("Repair.Effect.7")));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (canSalvage && Repair.salvageUnlockLevel > 0) {
|
||||||
|
messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Repair.Effect.16", Repair.salvageUnlockLevel), LocaleLoader.getString("Repair.Effect.17")));
|
||||||
|
}
|
||||||
|
|
||||||
if (canArcaneForge) {
|
if (canArcaneForge) {
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Repair.Effect.8"), LocaleLoader.getString("Repair.Effect.9")));
|
messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Repair.Effect.8"), LocaleLoader.getString("Repair.Effect.9")));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,79 +0,0 @@
|
|||||||
package com.gmail.nossr50.commands.skills;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.datatypes.skills.SecondaryAbility;
|
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
|
||||||
import com.gmail.nossr50.skills.salvage.Salvage;
|
|
||||||
import com.gmail.nossr50.skills.salvage.SalvageManager;
|
|
||||||
import com.gmail.nossr50.util.Permissions;
|
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
|
||||||
|
|
||||||
public class SalvageCommand extends SkillCommand {
|
|
||||||
private boolean canAdvancedSalvage;
|
|
||||||
private boolean canArcaneSalvage;
|
|
||||||
|
|
||||||
public SalvageCommand() {
|
|
||||||
super(SkillType.SALVAGE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void dataCalculations(Player player, float skillValue, boolean isLucky) {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void permissionsCheck(Player player) {
|
|
||||||
canAdvancedSalvage = Permissions.secondaryAbilityEnabled(player, SecondaryAbility.ADVANCED_SALVAGE);
|
|
||||||
canArcaneSalvage = Permissions.secondaryAbilityEnabled(player, SecondaryAbility.ARCANE_SALVAGE);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected List<String> effectsDisplay() {
|
|
||||||
List<String> messages = new ArrayList<String>();
|
|
||||||
|
|
||||||
if (canAdvancedSalvage) {
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Salvage.Effect.0"), LocaleLoader.getString("Salvage.Effect.1")));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (canArcaneSalvage) {
|
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Salvage.Effect.2"), LocaleLoader.getString("Salvage.Effect.3")));
|
|
||||||
}
|
|
||||||
|
|
||||||
return messages;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected List<String> statsDisplay(Player player, float skillValue, boolean hasEndurance, boolean isLucky) {
|
|
||||||
List<String> messages = new ArrayList<String>();
|
|
||||||
SalvageManager salvageManager = UserManager.getPlayer(player).getSalvageManager();
|
|
||||||
|
|
||||||
if (canAdvancedSalvage) {
|
|
||||||
if (skillValue < Salvage.advancedSalvageUnlockLevel) {
|
|
||||||
messages.add(LocaleLoader.getString("Ability.Generic.Template.Lock", LocaleLoader.getString("Salvage.Ability.Locked.0", Salvage.advancedSalvageUnlockLevel)));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
messages.add(LocaleLoader.getString("Ability.Generic.Template", LocaleLoader.getString("Salvage.Ability.Bonus.0"), LocaleLoader.getString("Salvage.Ability.Bonus.1", percent.format(salvageManager.getMaxSalvagePercentage()))));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (canArcaneSalvage) {
|
|
||||||
messages.add(LocaleLoader.getString("Salvage.Arcane.Rank", salvageManager.getArcaneSalvageRank(), Salvage.Tier.values().length));
|
|
||||||
|
|
||||||
if (Salvage.arcaneSalvageEnchantLoss) {
|
|
||||||
messages.add(LocaleLoader.getString("Ability.Generic.Template", LocaleLoader.getString("Salvage.Arcane.ExtractFull"), percent.format(salvageManager.getExtractFullEnchantChance() / 100)));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Salvage.arcaneSalvageDowngrades) {
|
|
||||||
messages.add(LocaleLoader.getString("Ability.Generic.Template", LocaleLoader.getString("Salvage.Arcane.ExtractPartial"), percent.format(salvageManager.getExtractPartialEnchantChance() / 100)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return messages;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -4,6 +4,7 @@ import java.text.DecimalFormat;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import com.gmail.nossr50.util.Motd;
|
||||||
import org.bukkit.command.Command;
|
import org.bukkit.command.Command;
|
||||||
import org.bukkit.command.CommandExecutor;
|
import org.bukkit.command.CommandExecutor;
|
||||||
import org.bukkit.command.CommandSender;
|
import org.bukkit.command.CommandSender;
|
||||||
@@ -17,7 +18,6 @@ import com.gmail.nossr50.datatypes.skills.SecondaryAbility;
|
|||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.skills.child.FamilyTree;
|
import com.gmail.nossr50.skills.child.FamilyTree;
|
||||||
import com.gmail.nossr50.util.Motd;
|
|
||||||
import com.gmail.nossr50.util.Permissions;
|
import com.gmail.nossr50.util.Permissions;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
import com.gmail.nossr50.util.commands.CommandUtils;
|
import com.gmail.nossr50.util.commands.CommandUtils;
|
||||||
|
|||||||
@@ -91,9 +91,9 @@ public class TamingCommand extends SkillCommand {
|
|||||||
|
|
||||||
if (canCallWild) {
|
if (canCallWild) {
|
||||||
messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Taming.Effect.12"), LocaleLoader.getString("Taming.Effect.13")));
|
messages.add(LocaleLoader.getString("Effects.Template", LocaleLoader.getString("Taming.Effect.12"), LocaleLoader.getString("Taming.Effect.13")));
|
||||||
messages.add(LocaleLoader.getString("Taming.Effect.14", Config.getInstance().getTamingCOTWCost(EntityType.OCELOT)));
|
messages.add(LocaleLoader.getString("Taming.Effect.14", Config.getInstance().getTamingCOTWOcelotCost()));
|
||||||
messages.add(LocaleLoader.getString("Taming.Effect.15", Config.getInstance().getTamingCOTWCost(EntityType.WOLF)));
|
messages.add(LocaleLoader.getString("Taming.Effect.15", Config.getInstance().getTamingCOTWWolfCost()));
|
||||||
messages.add(LocaleLoader.getString("Taming.Effect.20", Config.getInstance().getTamingCOTWCost(EntityType.HORSE)));
|
messages.add(LocaleLoader.getString("Taming.Effect.20", Config.getInstance().getTamingCOTWHorseCost()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return messages;
|
return messages;
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ public class UnarmedCommand extends SkillCommand {
|
|||||||
|
|
||||||
// IRON ARM
|
// IRON ARM
|
||||||
if (canIronArm) {
|
if (canIronArm) {
|
||||||
ironArmBonus = Math.min(Unarmed.ironArmMinBonusDamage + ((int) skillValue / Unarmed.ironArmIncreaseLevel), Unarmed.ironArmMaxBonusDamage);
|
ironArmBonus = Math.min(3 + ((int) skillValue / Unarmed.ironArmIncreaseLevel), Unarmed.ironArmMaxBonusDamage);
|
||||||
}
|
}
|
||||||
|
|
||||||
// IRON GRIP
|
// IRON GRIP
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import com.gmail.nossr50.skills.alchemy.Alchemy;
|
|||||||
import com.gmail.nossr50.skills.fishing.Fishing;
|
import com.gmail.nossr50.skills.fishing.Fishing;
|
||||||
import com.gmail.nossr50.skills.mining.BlastMining;
|
import com.gmail.nossr50.skills.mining.BlastMining;
|
||||||
import com.gmail.nossr50.skills.repair.ArcaneForging;
|
import com.gmail.nossr50.skills.repair.ArcaneForging;
|
||||||
import com.gmail.nossr50.skills.salvage.Salvage;
|
|
||||||
import com.gmail.nossr50.skills.smelting.Smelting;
|
import com.gmail.nossr50.skills.smelting.Smelting;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
|
||||||
@@ -134,7 +133,7 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
reason.add("Skills.Acrobatics.Daze.MaxBonusLevel should be at least 1!");
|
reason.add("Skills.Acrobatics.Daze.MaxBonusLevel should be at least 1!");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getDazeBonusDamage() < 0) {
|
if (getDazeModifier() < 0) {
|
||||||
reason.add("Skills.Acrobatics.Daze.BonusDamage should be at least 0!");
|
reason.add("Skills.Acrobatics.Daze.BonusDamage should be at least 0!");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -379,6 +378,10 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
reason.add("Skills.Repair.SuperRepair.MaxBonusLevel should be at least 1!");
|
reason.add("Skills.Repair.SuperRepair.MaxBonusLevel should be at least 1!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (getSalvageUnlockLevel() < 0) {
|
||||||
|
reason.add("Skills.Repair.Salvage.UnlockLevel should be at least 0!");
|
||||||
|
}
|
||||||
|
|
||||||
List<ArcaneForging.Tier> arcaneForgingTierList = Arrays.asList(ArcaneForging.Tier.values());
|
List<ArcaneForging.Tier> arcaneForgingTierList = Arrays.asList(ArcaneForging.Tier.values());
|
||||||
|
|
||||||
for (ArcaneForging.Tier tier : arcaneForgingTierList) {
|
for (ArcaneForging.Tier tier : arcaneForgingTierList) {
|
||||||
@@ -411,51 +414,6 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* SALVAGE */
|
|
||||||
if (getSalvageMaxPercentage() < 1) {
|
|
||||||
reason.add("Skills.Salvage.MaxPercentage should be at least 1!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getSalvageMaxPercentageLevel() < 1) {
|
|
||||||
reason.add("Skills.Salvage.MaxPercentageLevel should be at least 1!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getAdvancedSalvageUnlockLevel() < 1) {
|
|
||||||
reason.add("Skills.Salvage.AdvancedSalvage.UnlockLevel should be at least 1!");
|
|
||||||
}
|
|
||||||
|
|
||||||
List<Salvage.Tier> salvageTierList = Arrays.asList(Salvage.Tier.values());
|
|
||||||
|
|
||||||
for (Salvage.Tier tier : salvageTierList) {
|
|
||||||
if (getArcaneSalvageRankLevel(tier) < 0) {
|
|
||||||
reason.add("Skills.Salvage.ArcaneSalvage.Rank_Levels.Rank_" + tier.toNumerical() + " should be at least 0!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getArcaneSalvageExtractFullEnchantsChance(tier) < 0 || getArcaneSalvageExtractFullEnchantsChance(tier) > 100) {
|
|
||||||
reason.add("Skills.Salvage.ArcaneSalvage.ExtractFullEnchant.Rank_" + tier.toNumerical() + " only accepts values from 0 to 100!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getArcaneSalvageExtractPartialEnchantsChance(tier) < 0 || getArcaneSalvageExtractPartialEnchantsChance(tier) > 100) {
|
|
||||||
reason.add("Skills.Salvage.ArcaneSalvage.ExtractPartialEnchant.Rank_" + tier.toNumerical() + " only accepts values from 0 to 100!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tier != Salvage.Tier.EIGHT) {
|
|
||||||
Salvage.Tier nextTier = salvageTierList.get(salvageTierList.indexOf(tier) - 1);
|
|
||||||
|
|
||||||
if (getArcaneSalvageRankLevel(tier) >= getArcaneSalvageRankLevel(nextTier)) {
|
|
||||||
reason.add("Skills.Salvage.ArcaneSalvage.Rank_Levels.Rank_" + tier.toNumerical() + " should be less than Skills.Salvage.ArcaneSalvage.Rank_Levels.Rank_" + nextTier.toNumerical() + "!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getArcaneSalvageExtractFullEnchantsChance(tier) > getArcaneSalvageExtractFullEnchantsChance(nextTier)) {
|
|
||||||
reason.add("Skills.Salvage.ArcaneSalvage.ExtractFullEnchant.Rank_" + tier.toNumerical() + " should be less than or equal to Skills.Salvage.ArcaneSalvage.ExtractFullEnchant.Rank_" + nextTier.toNumerical() + "!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getArcaneSalvageExtractPartialEnchantsChance(tier) > getArcaneSalvageExtractPartialEnchantsChance(nextTier)) {
|
|
||||||
reason.add("Skills.Salvage.ArcaneSalvage.ExtractPartialEnchant.Rank_" + tier.toNumerical() + " should be less than or equal to Skills.Salvage.ArcaneSalvage.ExtractPartialEnchant.Rank_" + nextTier.toNumerical() + "!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* SMELTING */
|
/* SMELTING */
|
||||||
if (getBurnModifierMaxLevel() < 1) {
|
if (getBurnModifierMaxLevel() < 1) {
|
||||||
reason.add("Skills.Smelting.FuelEfficiency.MaxBonusLevel should be at least 1!");
|
reason.add("Skills.Smelting.FuelEfficiency.MaxBonusLevel should be at least 1!");
|
||||||
@@ -714,7 +672,7 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
public double getSkillShotBonusMax() { return config.getDouble("Skills.Archery.SkillShot.MaxBonus", 2.0D); }
|
public double getSkillShotBonusMax() { return config.getDouble("Skills.Archery.SkillShot.MaxBonus", 2.0D); }
|
||||||
public double getSkillShotDamageMax() { return config.getDouble("Skills.Archery.SkillShot.MaxDamage", 9.0D); }
|
public double getSkillShotDamageMax() { return config.getDouble("Skills.Archery.SkillShot.MaxDamage", 9.0D); }
|
||||||
|
|
||||||
public double getDazeBonusDamage() { return config.getDouble("Skills.Archery.Daze.BonusDamage", 4.0D); }
|
public double getDazeModifier() { return config.getDouble("Skills.Archery.Daze.BonusDamage", 4.0D); }
|
||||||
|
|
||||||
public double getForceMultiplier() { return config.getDouble("Skills.Archery.ForceMultiplier", 2.0D); }
|
public double getForceMultiplier() { return config.getDouble("Skills.Archery.ForceMultiplier", 2.0D); }
|
||||||
|
|
||||||
@@ -767,6 +725,7 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
/* REPAIR */
|
/* REPAIR */
|
||||||
public double getRepairMasteryMaxBonus() { return config.getDouble("Skills.Repair.RepairMastery.MaxBonusPercentage", 200.0D); }
|
public double getRepairMasteryMaxBonus() { return config.getDouble("Skills.Repair.RepairMastery.MaxBonusPercentage", 200.0D); }
|
||||||
public int getRepairMasteryMaxLevel() { return config.getInt("Skills.Repair.RepairMastery.MaxBonusLevel", 1000); }
|
public int getRepairMasteryMaxLevel() { return config.getInt("Skills.Repair.RepairMastery.MaxBonusLevel", 1000); }
|
||||||
|
public int getSalvageUnlockLevel() { return config.getInt("Skills.Repair.Salvage.UnlockLevel", 600); }
|
||||||
|
|
||||||
/* Arcane Forging */
|
/* Arcane Forging */
|
||||||
public int getArcaneForgingRankLevel(ArcaneForging.Tier tier) { return config.getInt("Skills.Repair.ArcaneForging.Rank_Levels.Rank_" + tier.toNumerical()); }
|
public int getArcaneForgingRankLevel(ArcaneForging.Tier tier) { return config.getInt("Skills.Repair.ArcaneForging.Rank_Levels.Rank_" + tier.toNumerical()); }
|
||||||
@@ -777,19 +736,6 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
public boolean getArcaneForgingDowngradeEnabled() { return config.getBoolean("Skills.Repair.ArcaneForging.Downgrades_Enabled", true); }
|
public boolean getArcaneForgingDowngradeEnabled() { return config.getBoolean("Skills.Repair.ArcaneForging.Downgrades_Enabled", true); }
|
||||||
public double getArcaneForgingDowngradeChance(ArcaneForging.Tier tier) { return config.getDouble("Skills.Repair.ArcaneForging.Downgrades_Chance.Rank_" + tier.toNumerical()); }
|
public double getArcaneForgingDowngradeChance(ArcaneForging.Tier tier) { return config.getDouble("Skills.Repair.ArcaneForging.Downgrades_Chance.Rank_" + tier.toNumerical()); }
|
||||||
|
|
||||||
/* SALVAGE */
|
|
||||||
public double getSalvageMaxPercentage() { return config.getDouble("Skills.Salvage.MaxPercentage", 100.0D); }
|
|
||||||
public int getSalvageMaxPercentageLevel() { return config.getInt("Skills.Salvage.MaxPercentageLevel", 1000); }
|
|
||||||
|
|
||||||
public int getAdvancedSalvageUnlockLevel() { return config.getInt("Skills.Salvage.AdvancedSalvage.UnlockLevel", 350); }
|
|
||||||
|
|
||||||
public boolean getArcaneSalvageEnchantDowngradeEnabled() { return config.getBoolean("Skills.Salvage.ArcaneSalvage.EnchantDowngradeEnabled", true); }
|
|
||||||
public boolean getArcaneSalvageEnchantLossEnabled() { return config.getBoolean("Skills.Salvage.ArcaneSalvage.EnchantLossEnabled", true); }
|
|
||||||
|
|
||||||
public int getArcaneSalvageRankLevel(Salvage.Tier tier) { return config.getInt("Skills.Salvage.ArcaneSalvage.Rank_Levels.Rank_" + tier.toNumerical()); }
|
|
||||||
public double getArcaneSalvageExtractFullEnchantsChance(Salvage.Tier tier) { return config.getDouble("Skills.Salvage.ArcaneSalvage.ExtractFullEnchant.Rank_" + tier.toNumerical()); }
|
|
||||||
public double getArcaneSalvageExtractPartialEnchantsChance(Salvage.Tier tier) { return config.getDouble("Skills.Salvage.ArcaneSalvage.ExtractPartialEnchant.Rank_" + tier.toNumerical()); }
|
|
||||||
|
|
||||||
/* SMELTING */
|
/* SMELTING */
|
||||||
public int getBurnModifierMaxLevel() { return config.getInt("Skills.Smelting.FuelEfficiency.MaxBonusLevel", 1000); }
|
public int getBurnModifierMaxLevel() { return config.getInt("Skills.Smelting.FuelEfficiency.MaxBonusLevel", 1000); }
|
||||||
public double getBurnTimeMultiplier() { return config.getDouble("Skills.Smelting.FuelEfficiency.Multiplier", 3.0D); }
|
public double getBurnTimeMultiplier() { return config.getDouble("Skills.Smelting.FuelEfficiency.Multiplier", 3.0D); }
|
||||||
@@ -831,7 +777,6 @@ public class AdvancedConfig extends AutoUpdateConfigLoader {
|
|||||||
public int getSharpenedClawsUnlock() { return config.getInt("Skills.Taming.SharpenedClaws.UnlockLevel", 750); }
|
public int getSharpenedClawsUnlock() { return config.getInt("Skills.Taming.SharpenedClaws.UnlockLevel", 750); }
|
||||||
public double getSharpenedClawsBonus() { return config.getDouble("Skills.Taming.SharpenedClaws.Bonus", 2.0D); }
|
public double getSharpenedClawsBonus() { return config.getDouble("Skills.Taming.SharpenedClaws.Bonus", 2.0D); }
|
||||||
|
|
||||||
public double getMinHorseJumpStrength() { return config.getDouble("Skills.Taming.CallOfTheWild.MinHorseJumpStrength", 0.7D); }
|
|
||||||
public double getMaxHorseJumpStrength() { return config.getDouble("Skills.Taming.CallOfTheWild.MaxHorseJumpStrength", 2.0D); }
|
public double getMaxHorseJumpStrength() { return config.getDouble("Skills.Taming.CallOfTheWild.MaxHorseJumpStrength", 2.0D); }
|
||||||
|
|
||||||
/* UNARMED */
|
/* UNARMED */
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import java.util.List;
|
|||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.TreeSpecies;
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
|
|
||||||
@@ -183,40 +182,20 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
reason.add("Cannot use the same item for Repair and Salvage anvils!");
|
reason.add("Cannot use the same item for Repair and Salvage anvils!");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getTamingCOTWMaterial(EntityType.WOLF) == null) {
|
if (getTamingCOTWWolfCost() < 1) {
|
||||||
reason.add("Skills.Taming.Call_Of_The_Wild.Wolf.Item_Material is invalid!!");
|
reason.add("Skills.Taming.Call_Of_The_Wild.Bones_Required should be at least 1!");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getTamingCOTWMaterial(EntityType.OCELOT) == null) {
|
if (getTamingCOTWOcelotCost() < 1) {
|
||||||
reason.add("Skills.Taming.Call_Of_The_Wild.Ocelot.Item_Material is invalid!!");
|
reason.add("Skills.Taming.Call_Of_The_Wild.Fish_Required should be at least 1!");
|
||||||
}
|
|
||||||
|
|
||||||
if (getTamingCOTWMaterial(EntityType.HORSE) == null) {
|
|
||||||
reason.add("Skills.Taming.Call_Of_The_Wild.Horse.Item_Material is invalid!!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getTamingCOTWCost(EntityType.WOLF) <= 0) {
|
|
||||||
reason.add("Skills.Taming.Call_Of_The_Wild.Wolf.Item_Amount should be greater than 0!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getTamingCOTWCost(EntityType.OCELOT) <= 0) {
|
|
||||||
reason.add("Skills.Taming.Call_Of_The_Wild.Ocelot.Item_Amount should be greater than 0!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getTamingCOTWCost(EntityType.HORSE) <= 0) {
|
|
||||||
reason.add("Skills.Taming.Call_Of_The_Wild.Horse.Item_Amount should be greater than 0!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (getTamingCOTWAmount(EntityType.WOLF) <= 0) {
|
|
||||||
reason.add("Skills.Taming.Call_Of_The_Wild.Wolf.Summon_Amount should be greater than 0!");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getTamingCOTWAmount(EntityType.OCELOT) <= 0) {
|
if (getTamingCOTWAmount(EntityType.OCELOT) <= 0) {
|
||||||
reason.add("Skills.Taming.Call_Of_The_Wild.Ocelot.Summon_Amount should be greater than 0!");
|
reason.add("Skills.Taming.Call_Of_The_Wild.Ocelot_Amount should be greater than 0!");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getTamingCOTWAmount(EntityType.HORSE) <= 0) {
|
if (getTamingCOTWAmount(EntityType.WOLF) <= 0) {
|
||||||
reason.add("Skills.Taming.Call_Of_The_Wild.Horse.Summon_Amount should be greater than 0!");
|
reason.add("Skills.Taming.Call_Of_The_Wild.Wolf_Amount should be greater than 0!");
|
||||||
}
|
}
|
||||||
|
|
||||||
return noErrorsInConfig(reason);
|
return noErrorsInConfig(reason);
|
||||||
@@ -232,13 +211,14 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
/* General Settings */
|
/* General Settings */
|
||||||
public String getLocale() { return config.getString("General.Locale", "en_us"); }
|
public String getLocale() { return config.getString("General.Locale", "en_us"); }
|
||||||
public boolean getMOTDEnabled() { return config.getBoolean("General.MOTD_Enabled", true); }
|
public boolean getMOTDEnabled() { return config.getBoolean("General.MOTD_Enabled", true); }
|
||||||
public boolean getShowProfileLoadedMessage() { return config.getBoolean("General.Show_Profile_Loaded", true); }
|
|
||||||
public boolean getDonateMessageEnabled() { return config.getBoolean("Commands.mcmmo.Donate_Message", true); }
|
public boolean getDonateMessageEnabled() { return config.getBoolean("Commands.mcmmo.Donate_Message", true); }
|
||||||
public int getSaveInterval() { return config.getInt("General.Save_Interval", 10); }
|
public int getSaveInterval() { return config.getInt("General.Save_Interval", 10); }
|
||||||
public boolean getStatsTrackingEnabled() { return config.getBoolean("General.Stats_Tracking", true); }
|
public boolean getStatsTrackingEnabled() { return config.getBoolean("General.Stats_Tracking", true); }
|
||||||
public boolean getUpdateCheckEnabled() { return config.getBoolean("General.Update_Check", true); }
|
public boolean getUpdateCheckEnabled() { return config.getBoolean("General.Update_Check", true); }
|
||||||
public boolean getPreferBeta() { return config.getBoolean("General.Prefer_Beta", false); }
|
public boolean getPreferBeta() { return config.getBoolean("General.Prefer_Beta", false); }
|
||||||
|
public boolean getEventCallbackEnabled() { return config.getBoolean("General.Event_Callback", true); }
|
||||||
public boolean getVerboseLoggingEnabled() { return config.getBoolean("General.Verbose_Logging", false); }
|
public boolean getVerboseLoggingEnabled() { return config.getBoolean("General.Verbose_Logging", false); }
|
||||||
|
public boolean getConfigOverwriteEnabled() { return config.getBoolean("General.Config_Update_Overwrite", true); }
|
||||||
|
|
||||||
public String getPartyChatPrefix() { return config.getString("Commands.partychat.Chat_Prefix_Format", "[[GREEN]]([[WHITE]]{0}[[GREEN]])"); }
|
public String getPartyChatPrefix() { return config.getString("Commands.partychat.Chat_Prefix_Format", "[[GREEN]]([[WHITE]]{0}[[GREEN]])"); }
|
||||||
public boolean getPartyChatColorLeaderName() { return config.getBoolean("Commands.partychat.Gold_Leader_Name", true); }
|
public boolean getPartyChatColorLeaderName() { return config.getBoolean("Commands.partychat.Gold_Leader_Name", true); }
|
||||||
@@ -249,7 +229,6 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
public boolean getAdminDisplayNames() { return config.getBoolean("Commands.adminchat.Use_Display_Names", true); }
|
public boolean getAdminDisplayNames() { return config.getBoolean("Commands.adminchat.Use_Display_Names", true); }
|
||||||
|
|
||||||
public boolean getMatchOfflinePlayers() { return config.getBoolean("Commands.Generic.Match_OfflinePlayers", false); }
|
public boolean getMatchOfflinePlayers() { return config.getBoolean("Commands.Generic.Match_OfflinePlayers", false); }
|
||||||
public long getDatabasePlayerCooldown() { return config.getLong("Commands.Database.Player_Cooldown", 1750); }
|
|
||||||
|
|
||||||
public boolean getLevelUpSoundsEnabled() { return config.getBoolean("General.LevelUp_Sounds", true); }
|
public boolean getLevelUpSoundsEnabled() { return config.getBoolean("General.LevelUp_Sounds", true); }
|
||||||
|
|
||||||
@@ -266,11 +245,6 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
public int getMobHealthbarTime() { return config.getInt("Mob_Healthbar.Display_Time", 3); }
|
public int getMobHealthbarTime() { return config.getInt("Mob_Healthbar.Display_Time", 3); }
|
||||||
|
|
||||||
/* Scoreboards */
|
/* Scoreboards */
|
||||||
public boolean getPowerLevelTagsEnabled() { return config.getBoolean("Scoreboard.Power_Level_Tags", false); }
|
|
||||||
public boolean getAllowKeepBoard() { return config.getBoolean("Scoreboard.Allow_Keep", true); }
|
|
||||||
public boolean getShowStatsAfterLogin() { return config.getBoolean("Scoreboard.Show_Stats_After_Login", false); }
|
|
||||||
public boolean getScoreboardRainbows() { return config.getBoolean("Scoreboard.Rainbows", false); }
|
|
||||||
|
|
||||||
public boolean getRankUseChat() { return config.getBoolean("Scoreboard.Types.Rank.Print", false); }
|
public boolean getRankUseChat() { return config.getBoolean("Scoreboard.Types.Rank.Print", false); }
|
||||||
public boolean getRankUseBoard() { return config.getBoolean("Scoreboard.Types.Rank.Board", true); }
|
public boolean getRankUseBoard() { return config.getBoolean("Scoreboard.Types.Rank.Board", true); }
|
||||||
public int getRankScoreboardTime() { return config.getInt("Scoreboard.Types.Rank.Display_Time", 10); }
|
public int getRankScoreboardTime() { return config.getInt("Scoreboard.Types.Rank.Display_Time", 10); }
|
||||||
@@ -296,6 +270,11 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
public boolean getSkillLevelUpBoard() { return config.getBoolean("Scoreboard.Types.Skill.LevelUp_Board", true); }
|
public boolean getSkillLevelUpBoard() { return config.getBoolean("Scoreboard.Types.Skill.LevelUp_Board", true); }
|
||||||
public int getSkillLevelUpTime() { return config.getInt("Scoreboard.Types.Skill.LevelUp_Time", 5); }
|
public int getSkillLevelUpTime() { return config.getInt("Scoreboard.Types.Skill.LevelUp_Time", 5); }
|
||||||
|
|
||||||
|
public boolean getPowerLevelTagsEnabled() { return config.getBoolean("Scoreboard.Power_Level_Tags", false); }
|
||||||
|
|
||||||
|
public boolean getAllowKeepBoard() { return config.getBoolean("Scoreboard.Allow_Keep", true); }
|
||||||
|
public boolean getScoreboardRainbows() { return config.getBoolean("Scoreboard.Rainbows", false); }
|
||||||
|
|
||||||
/* Database Purging */
|
/* Database Purging */
|
||||||
public int getPurgeInterval() { return config.getInt("Database_Purging.Purge_Interval", -1); }
|
public int getPurgeInterval() { return config.getInt("Database_Purging.Purge_Interval", -1); }
|
||||||
public int getOldUsersCutoff() { return config.getInt("Database_Purging.Old_User_Cutoff", 6); }
|
public int getOldUsersCutoff() { return config.getInt("Database_Purging.Old_User_Cutoff", 6); }
|
||||||
@@ -314,8 +293,6 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
public int getMySQLServerPort() { return config.getInt("MySQL.Server.Port", 3306); }
|
public int getMySQLServerPort() { return config.getInt("MySQL.Server.Port", 3306); }
|
||||||
public String getMySQLServerName() { return config.getString("MySQL.Server.Address", "localhost"); }
|
public String getMySQLServerName() { return config.getString("MySQL.Server.Address", "localhost"); }
|
||||||
public String getMySQLUserPassword() { return getStringIncludingInts("MySQL.Database.User_Password"); }
|
public String getMySQLUserPassword() { return getStringIncludingInts("MySQL.Database.User_Password"); }
|
||||||
public int getMySQLMaxConnections() { return config.getInt("MySQL.Database.MaxConnections"); }
|
|
||||||
public int getMySQLMaxPoolSize() { return config.getInt("MySQL.Database.MaxPoolSize"); }
|
|
||||||
|
|
||||||
private String getStringIncludingInts(String key) {
|
private String getStringIncludingInts(String key) {
|
||||||
String str = config.getString(key);
|
String str = config.getString(key);
|
||||||
@@ -446,17 +423,14 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
|
|
||||||
/* Acrobatics */
|
/* Acrobatics */
|
||||||
public boolean getDodgeLightningDisabled() { return config.getBoolean("Skills.Acrobatics.Prevent_Dodge_Lightning", false); }
|
public boolean getDodgeLightningDisabled() { return config.getBoolean("Skills.Acrobatics.Prevent_Dodge_Lightning", false); }
|
||||||
public int getXPAfterTeleportCooldown() { return config.getInt("Skills.Acrobatics.XP_After_Teleport_Cooldown", 5); }
|
public boolean getPreventXPAfterTeleport() { return config.getBoolean("Skills.Acrobatics.Prevent_XP_After_Teleport", true); }
|
||||||
|
|
||||||
/* Alchemy */
|
/* Alchemy */
|
||||||
public boolean getEnabledForHoppers() { return config.getBoolean("Skills.Alchemy.Enabled_for_Hoppers", true); }
|
public boolean getEnabledForHoppers() { return config.getBoolean("Skills.Alchemy.Enabled_for_Hoppers", true); }
|
||||||
public boolean getPreventHopperTransferIngredients() { return config.getBoolean("Skills.Alchemy.Prevent_Hopper_Transfer_Ingredients", false); }
|
public boolean getPreventHopperTransfer() { return config.getBoolean("Skills.Alchemy.Prevent_Hopper_Transfer", false); }
|
||||||
public boolean getPreventHopperTransferBottles() { return config.getBoolean("Skills.Alchemy.Prevent_Hopper_Transfer_Bottles", false); }
|
|
||||||
|
|
||||||
/* Fishing */
|
/* Fishing */
|
||||||
public boolean getFishingDropsEnabled() { return config.getBoolean("Skills.Fishing.Drops_Enabled", true); }
|
public boolean getFishingDropsEnabled() { return config.getBoolean("Skills.Fishing.Drops_Enabled", true); }
|
||||||
public boolean getFishingOverrideTreasures() { return config.getBoolean("Skills.Fishing.Override_Vanilla_Treasures", true); }
|
|
||||||
public boolean getFishingExtraFish() { return config.getBoolean("Skills.Fishing.Extra_Fish", true); }
|
|
||||||
|
|
||||||
/* Mining */
|
/* Mining */
|
||||||
public Material getDetonatorItem() { return Material.matchMaterial(config.getString("Skills.Mining.Detonator_Name", "FLINT_AND_STEEL")); }
|
public Material getDetonatorItem() { return Material.matchMaterial(config.getString("Skills.Mining.Detonator_Name", "FLINT_AND_STEEL")); }
|
||||||
@@ -466,27 +440,26 @@ public class Config extends AutoUpdateConfigLoader {
|
|||||||
public boolean getRepairAnvilPlaceSoundsEnabled() { return config.getBoolean("Skills.Repair.Anvil_Placed_Sounds", true); }
|
public boolean getRepairAnvilPlaceSoundsEnabled() { return config.getBoolean("Skills.Repair.Anvil_Placed_Sounds", true); }
|
||||||
public boolean getRepairAnvilUseSoundsEnabled() { return config.getBoolean("Skills.Repair.Anvil_Use_Sounds", true); }
|
public boolean getRepairAnvilUseSoundsEnabled() { return config.getBoolean("Skills.Repair.Anvil_Use_Sounds", true); }
|
||||||
public Material getRepairAnvilMaterial() { return Material.matchMaterial(config.getString("Skills.Repair.Anvil_Material", "IRON_BLOCK")); }
|
public Material getRepairAnvilMaterial() { return Material.matchMaterial(config.getString("Skills.Repair.Anvil_Material", "IRON_BLOCK")); }
|
||||||
|
public Material getSalvageAnvilMaterial() { return Material.matchMaterial(config.getString("Skills.Repair.Salvage_Anvil_Material", "GOLD_BLOCK")); }
|
||||||
|
public boolean getSalvageTools() { return config.getBoolean("Skills.Repair.Salvage_tools", true); }
|
||||||
|
public boolean getSalvageArmor() { return config.getBoolean("Skills.Repair.Salvage_armor", true); }
|
||||||
public boolean getRepairConfirmRequired() { return config.getBoolean("Skills.Repair.Confirm_Required", true); }
|
public boolean getRepairConfirmRequired() { return config.getBoolean("Skills.Repair.Confirm_Required", true); }
|
||||||
|
|
||||||
/* Salvage */
|
|
||||||
public boolean getSalvageAnvilMessagesEnabled() { return config.getBoolean("Skills.Salvage.Anvil_Messages", true); }
|
|
||||||
public boolean getSalvageAnvilPlaceSoundsEnabled() { return config.getBoolean("Skills.Salvage.Anvil_Placed_Sounds", true); }
|
|
||||||
public boolean getSalvageAnvilUseSoundsEnabled() { return config.getBoolean("Skills.Salvage.Anvil_Use_Sounds", true); }
|
|
||||||
public Material getSalvageAnvilMaterial() { return Material.matchMaterial(config.getString("Skills.Salvage.Anvil_Material", "GOLD_BLOCK")); }
|
|
||||||
public boolean getSalvageConfirmRequired() { return config.getBoolean("Skills.Salvage.Confirm_Required", true); }
|
|
||||||
|
|
||||||
/* Unarmed */
|
/* Unarmed */
|
||||||
public boolean getUnarmedBlockCrackerSmoothbrickToCracked() { return config.getBoolean("Skills.Unarmed.Block_Cracker.SmoothBrick_To_CrackedBrick", true); }
|
public boolean getUnarmedBlockCrackerSmoothbrickToCracked() { return config.getBoolean("Skills.Unarmed.Block_Cracker.SmoothBrick_To_CrackedBrick", true); }
|
||||||
public boolean getUnarmedItemPickupDisabled() { return config.getBoolean("Skills.Unarmed.Item_Pickup_Disabled_Full_Inventory", true); }
|
|
||||||
|
|
||||||
/* Taming */
|
/* Taming */
|
||||||
public Material getTamingCOTWMaterial(EntityType type) { return Material.matchMaterial(config.getString("Skills.Taming.Call_Of_The_Wild." + StringUtils.getPrettyEntityTypeString(type) + ".Item_Material")); }
|
public int getTamingCOTWHorseCost() { return config.getInt("Skills.Taming.Call_Of_The_Wild.Apples_Required", 10); }
|
||||||
public int getTamingCOTWCost(EntityType type) { return config.getInt("Skills.Taming.Call_Of_The_Wild." + StringUtils.getPrettyEntityTypeString(type) + ".Item_Amount"); }
|
public int getTamingCOTWWolfCost() { return config.getInt("Skills.Taming.Call_Of_The_Wild.Bones_Required", 10); }
|
||||||
public int getTamingCOTWAmount(EntityType type) { return config.getInt("Skills.Taming.Call_Of_The_Wild." + StringUtils.getPrettyEntityTypeString(type) + ".Summon_Amount"); }
|
public int getTamingCOTWOcelotCost() { return config.getInt("Skills.Taming.Call_Of_The_Wild.Fish_Required", 10); }
|
||||||
public double getTamingCOTWRange() { return config.getDouble("Skills.Taming.Call_Of_The_Wild.Range", 40.0D); }
|
public double getTamingCOTWRange() { return config.getDouble("Skills.Taming.Call_Of_The_Wild.Range", 40.0D); }
|
||||||
|
public int getTamingCOTWAmount(EntityType type) { return config.getInt("Skills.Taming.Call_Of_The_Wild." + StringUtils.getPrettyEntityTypeString(type)+ "_Amount"); }
|
||||||
|
|
||||||
/* Woodcutting */
|
/* Woodcutting */
|
||||||
public boolean getWoodcuttingDoubleDropsEnabled(TreeSpecies species) { return config.getBoolean("Double_Drops.Woodcutting." + StringUtils.getPrettyTreeSpeciesString(species).replace(" ", "_")); }
|
public boolean getOakDoubleDropsEnabled() { return config.getBoolean("Double_Drops.Woodcutting.Oak", true); }
|
||||||
|
public boolean getBirchDoubleDropsEnabled() { return config.getBoolean("Double_Drops.Woodcutting.Birch", true); }
|
||||||
|
public boolean getSpruceDoubleDropsEnabled() { return config.getBoolean("Double_Drops.Woodcutting.Spruce", true); }
|
||||||
|
public boolean getJungleDoubleDropsEnabled() { return config.getBoolean("Double_Drops.Woodcutting.Jungle", true); }
|
||||||
public boolean getTreeFellerSoundsEnabled() { return config.getBoolean("Skills.Woodcutting.Tree_Feller_Sounds", true); }
|
public boolean getTreeFellerSoundsEnabled() { return config.getBoolean("Skills.Woodcutting.Tree_Feller_Sounds", true); }
|
||||||
|
|
||||||
/* AFK Leveling */
|
/* AFK Leveling */
|
||||||
|
|||||||
@@ -12,7 +12,6 @@ public class HiddenConfig {
|
|||||||
private static int conversionRate;
|
private static int conversionRate;
|
||||||
private static boolean useEnchantmentBuffs;
|
private static boolean useEnchantmentBuffs;
|
||||||
private static boolean resendChunksAfterBlockAbility;
|
private static boolean resendChunksAfterBlockAbility;
|
||||||
private static int uuidConvertAmount;
|
|
||||||
|
|
||||||
public HiddenConfig(String fileName) {
|
public HiddenConfig(String fileName) {
|
||||||
HiddenConfig.fileName = fileName;
|
HiddenConfig.fileName = fileName;
|
||||||
@@ -34,7 +33,6 @@ public class HiddenConfig {
|
|||||||
conversionRate = config.getInt("Options.ConversionRate", 1);
|
conversionRate = config.getInt("Options.ConversionRate", 1);
|
||||||
useEnchantmentBuffs = config.getBoolean("Options.EnchantmentBuffs", true);
|
useEnchantmentBuffs = config.getBoolean("Options.EnchantmentBuffs", true);
|
||||||
resendChunksAfterBlockAbility = config.getBoolean("Options.RefreshChunks", false);
|
resendChunksAfterBlockAbility = config.getBoolean("Options.RefreshChunks", false);
|
||||||
uuidConvertAmount = config.getInt("Options.UUIDConvertAmount", 5);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -53,8 +51,4 @@ public class HiddenConfig {
|
|||||||
public boolean resendChunksAfterBlockAbility() {
|
public boolean resendChunksAfterBlockAbility() {
|
||||||
return resendChunksAfterBlockAbility;
|
return resendChunksAfterBlockAbility;
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getUUIDConvertAmount() {
|
|
||||||
return uuidConvertAmount;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,18 +3,13 @@ package com.gmail.nossr50.config.experience;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.bukkit.GrassSpecies;
|
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.TreeSpecies;
|
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.material.LongGrass;
|
|
||||||
import org.bukkit.material.MaterialData;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.config.AutoUpdateConfigLoader;
|
import com.gmail.nossr50.config.AutoUpdateConfigLoader;
|
||||||
import com.gmail.nossr50.datatypes.experience.FormulaType;
|
import com.gmail.nossr50.datatypes.experience.FormulaType;
|
||||||
import com.gmail.nossr50.datatypes.skills.MaterialType;
|
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.alchemy.PotionStage;
|
import com.gmail.nossr50.skills.repair.repairables.RepairMaterialType;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
import com.gmail.nossr50.util.StringUtils;
|
||||||
|
|
||||||
public class ExperienceConfig extends AutoUpdateConfigLoader {
|
public class ExperienceConfig extends AutoUpdateConfigLoader {
|
||||||
@@ -82,10 +77,8 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/* Alchemy */
|
/* Alchemy */
|
||||||
for (PotionStage potionStage : PotionStage.values()) {
|
if (getPotionXP() <= 0) {
|
||||||
if (getPotionXP(potionStage) < 0) {
|
reason.add("Experience.Alchemy.Potion should be greater than 0!");
|
||||||
reason.add("Experience.Alchemy.Potion_Stage_" + potionStage.toNumerical() + " should be at least 0!");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Combat XP Multipliers */
|
/* Combat XP Multipliers */
|
||||||
@@ -110,7 +103,9 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Fishing */
|
/* Fishing */
|
||||||
// TODO: Add validation for each fish type once enum is available.
|
if (getFishingBaseXP() <= 0) {
|
||||||
|
reason.add("Experience.Fishing.Base should be greater than 0!");
|
||||||
|
}
|
||||||
|
|
||||||
if (getFishingShakeXP() <= 0) {
|
if (getFishingShakeXP() <= 0) {
|
||||||
reason.add("Experience.Fishing.Shake should be greater than 0!");
|
reason.add("Experience.Fishing.Shake should be greater than 0!");
|
||||||
@@ -131,12 +126,20 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Woodcutting */
|
/* Woodcutting */
|
||||||
for (TreeSpecies species : TreeSpecies.values()) {
|
if (getWoodcuttingXPOak() <= 0) {
|
||||||
String key = "Experience.Woodcutting." + StringUtils.getPrettyTreeSpeciesString(species).replace(" ", "_");
|
reason.add("Experience.Woodcutting.Oak should be greater than 0!");
|
||||||
|
}
|
||||||
|
|
||||||
if (config.getInt(key) <= 0) {
|
if (getWoodcuttingXPBirch() <= 0) {
|
||||||
reason.add(key + " should be greater than 0!");
|
reason.add("Experience.Woodcutting.Birch should be greater than 0!");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (getWoodcuttingXPSpruce() <= 0) {
|
||||||
|
reason.add("Experience.Woodcutting.Spruce should be greater than 0!");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getWoodcuttingXPJungle() <= 0) {
|
||||||
|
reason.add("Experience.Woodcutting.Jungle should be greater than 0!");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getWoodcuttingXPHugeBrownMushroom() <= 0) {
|
if (getWoodcuttingXPHugeBrownMushroom() <= 0) {
|
||||||
@@ -161,7 +164,7 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
|
|||||||
/* Curve values */
|
/* Curve values */
|
||||||
public double getMultiplier(FormulaType type) { return config.getDouble("Experience_Formula." + StringUtils.getCapitalized(type.toString()) + "_Values.multiplier"); }
|
public double getMultiplier(FormulaType type) { return config.getDouble("Experience_Formula." + StringUtils.getCapitalized(type.toString()) + "_Values.multiplier"); }
|
||||||
public int getBase(FormulaType type) { return config.getInt("Experience_Formula." + StringUtils.getCapitalized(type.toString()) + "_Values.base"); }
|
public int getBase(FormulaType type) { return config.getInt("Experience_Formula." + StringUtils.getCapitalized(type.toString()) + "_Values.base"); }
|
||||||
public double getExponent(FormulaType type) { return config.getDouble("Experience_Formula." + StringUtils.getCapitalized(type.toString()) + "_Values.exponent"); }
|
public double getExponent(FormulaType type) { return config.getDouble("Experience_Formula." + StringUtils.getCapitalized(type.toString()) +"_Values.exponent"); }
|
||||||
|
|
||||||
/* Global modifier */
|
/* Global modifier */
|
||||||
public double getExperienceGainsGlobalMultiplier() { return config.getDouble("Experience_Formula.Multiplier.Global", 1.0); }
|
public double getExperienceGainsGlobalMultiplier() { return config.getDouble("Experience_Formula.Multiplier.Global", 1.0); }
|
||||||
@@ -205,119 +208,15 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
|
|||||||
public double getFeatherFallXPModifier() { return config.getDouble("Experience.Acrobatics.FeatherFall_Multiplier", 2.0); }
|
public double getFeatherFallXPModifier() { return config.getDouble("Experience.Acrobatics.FeatherFall_Multiplier", 2.0); }
|
||||||
|
|
||||||
/* Alchemy */
|
/* Alchemy */
|
||||||
public double getPotionXP(PotionStage stage) { return config.getDouble("Experience.Alchemy.Potion_Stage_" + stage.toNumerical(), 10D); }
|
public double getPotionXP() { return config.getDouble("Experience.Alchemy.Potion", 150D); }
|
||||||
|
|
||||||
/* Fishing */
|
/* Fishing */
|
||||||
public int getFishXp(MaterialData data) {
|
public int getFishingBaseXP() { return config.getInt("Experience.Fishing.Base", 800); }
|
||||||
switch (data.getData()) {
|
|
||||||
case 0x0:
|
|
||||||
return config.getInt("Experience.Fishing.Raw_Fish", 800);
|
|
||||||
|
|
||||||
case 0x1:
|
|
||||||
return config.getInt("Experience.Fishing.Raw_Salmon", 800);
|
|
||||||
|
|
||||||
case 0x2:
|
|
||||||
return config.getInt("Experience.Fishing.Clownfish", 800);
|
|
||||||
|
|
||||||
case 0x3:
|
|
||||||
return config.getInt("Experience.Fishing.Pufferfish", 800);
|
|
||||||
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public int getFishingShakeXP() { return config.getInt("Experience.Fishing.Shake", 50); }
|
public int getFishingShakeXP() { return config.getInt("Experience.Fishing.Shake", 50); }
|
||||||
|
|
||||||
/* Herbalism */
|
|
||||||
public int getFlowerAndGrassXp(MaterialData data) {
|
|
||||||
Material type = data.getItemType();
|
|
||||||
|
|
||||||
if (type == Material.RED_ROSE) {
|
|
||||||
switch (data.getData()) {
|
|
||||||
case 0x0:
|
|
||||||
return config.getInt("Experience.Herbalism.Poppy", 100);
|
|
||||||
|
|
||||||
case 0x1:
|
|
||||||
return config.getInt("Experience.Herbalism.Blue_Orchid", 150);
|
|
||||||
|
|
||||||
case 0x2:
|
|
||||||
return config.getInt("Experience.Herbalism.Allium", 300);
|
|
||||||
|
|
||||||
case 0x3:
|
|
||||||
return config.getInt("Experience.Herbalism.Azure_Bluet", 150);
|
|
||||||
|
|
||||||
case 0x4:
|
|
||||||
return config.getInt("Experience.Herbalism.Red_Tulip", 150);
|
|
||||||
|
|
||||||
case 0x5:
|
|
||||||
return config.getInt("Experience.Herbalism.Orange_Tulip", 150);
|
|
||||||
|
|
||||||
case 0x6:
|
|
||||||
return config.getInt("Experience.Herbalism.White_Tulip", 150);
|
|
||||||
|
|
||||||
case 0x7:
|
|
||||||
return config.getInt("Experience.Herbalism.Pink_Tulip", 150);
|
|
||||||
|
|
||||||
case 0x8:
|
|
||||||
return config.getInt("Experience.Herbalism.Oxeye_Daisy", 150);
|
|
||||||
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
else if (type == Material.LONG_GRASS) {
|
|
||||||
GrassSpecies species = ((LongGrass) data).getSpecies();
|
|
||||||
if (species == null) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (species) {
|
|
||||||
case DEAD:
|
|
||||||
return config.getInt("Experience.Herbalism.Dead_Bush", 30);
|
|
||||||
|
|
||||||
case FERN_LIKE:
|
|
||||||
return config.getInt("Experience.Herbalism.Small_Fern", 10);
|
|
||||||
|
|
||||||
case NORMAL:
|
|
||||||
return config.getInt("Experience.Herbalism.Small_Grass", 10);
|
|
||||||
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (type == Material.DOUBLE_PLANT) {
|
|
||||||
switch (data.getData()) {
|
|
||||||
case 0x0:
|
|
||||||
return config.getInt("Experience.Herbalism.Sunflower", 50);
|
|
||||||
|
|
||||||
case 0x1:
|
|
||||||
return config.getInt("Experience.Herbalism.Lilac", 50);
|
|
||||||
|
|
||||||
case 0x2:
|
|
||||||
return config.getInt("Experience.Herbalism.Tall_Grass", 50);
|
|
||||||
|
|
||||||
case 0x3:
|
|
||||||
return config.getInt("Experience.Herbalism.Tall_Fern", 50);
|
|
||||||
|
|
||||||
case 0x4:
|
|
||||||
return config.getInt("Experience.Herbalism.Rose_Bush", 50);
|
|
||||||
|
|
||||||
case 0x5:
|
|
||||||
return config.getInt("Experience.Herbalism.Peony", 50);
|
|
||||||
|
|
||||||
default:
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Repair */
|
/* Repair */
|
||||||
public double getRepairXPBase() { return config.getDouble("Experience.Repair.Base", 1000.0); }
|
public double getRepairXPBase() { return config.getDouble("Experience.Repair.Base", 1000.0); }
|
||||||
public double getRepairXP(MaterialType repairMaterialType) { return config.getDouble("Experience.Repair." + StringUtils.getCapitalized(repairMaterialType.toString())); }
|
public double getRepairXP(RepairMaterialType repairMaterialType) { return config.getDouble("Experience.Repair." + StringUtils.getCapitalized(repairMaterialType.toString())); }
|
||||||
|
|
||||||
/* Taming */
|
/* Taming */
|
||||||
public int getTamingXPHorse() { return config.getInt("Experience.Taming.Animal_Taming.Horse", 1000); }
|
public int getTamingXPHorse() { return config.getInt("Experience.Taming.Animal_Taming.Horse", 1000); }
|
||||||
@@ -325,7 +224,10 @@ public class ExperienceConfig extends AutoUpdateConfigLoader {
|
|||||||
public int getTamingXPOcelot() { return config.getInt("Experience.Taming.Animal_Taming.Ocelot", 500); }
|
public int getTamingXPOcelot() { return config.getInt("Experience.Taming.Animal_Taming.Ocelot", 500); }
|
||||||
|
|
||||||
/* Woodcutting */
|
/* Woodcutting */
|
||||||
public int getWoodcuttingTreeXP(TreeSpecies species) { return config.getInt("Experience.Woodcutting." + StringUtils.getPrettyTreeSpeciesString(species).replace(" ", "_")); }
|
public int getWoodcuttingXPOak() { return config.getInt("Experience.Woodcutting.Oak", 70); }
|
||||||
|
public int getWoodcuttingXPBirch() { return config.getInt("Experience.Woodcutting.Birch", 90); }
|
||||||
|
public int getWoodcuttingXPSpruce() { return config.getInt("Experience.Woodcutting.Spruce", 80); }
|
||||||
|
public int getWoodcuttingXPJungle() { return config.getInt("Experience.Woodcutting.Jungle", 100); }
|
||||||
public int getWoodcuttingXPHugeBrownMushroom() { return config.getInt("Experience.Woodcutting.Huge_Mushroom_Brown", 70); }
|
public int getWoodcuttingXPHugeBrownMushroom() { return config.getInt("Experience.Woodcutting.Huge_Mushroom_Brown", 70); }
|
||||||
public int getWoodcuttingXPHugeRedMushroom() { return config.getInt("Experience.Woodcutting.Huge_Mushroom_Red", 70); }
|
public int getWoodcuttingXPHugeRedMushroom() { return config.getInt("Experience.Woodcutting.Huge_Mushroom_Red", 70); }
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.gmail.nossr50.config.mods;
|
package com.gmail.nossr50.config.mods;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.util.ModManager;
|
import com.gmail.nossr50.util.ModManager;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class ArmorConfigManager {
|
public class ArmorConfigManager {
|
||||||
public ArmorConfigManager(mcMMO plugin) {
|
public ArmorConfigManager(mcMMO plugin) {
|
||||||
Pattern middlePattern = Pattern.compile("armor\\.(?:.+)\\.yml");
|
Pattern middlePattern = Pattern.compile("armor\\.(?:.+)\\.yml");
|
||||||
@@ -15,7 +15,7 @@ public class ArmorConfigManager {
|
|||||||
ModManager modManager = mcMMO.getModManager();
|
ModManager modManager = mcMMO.getModManager();
|
||||||
|
|
||||||
if (!vanilla.exists()) {
|
if (!vanilla.exists()) {
|
||||||
plugin.saveResource(vanilla.getParentFile().getName() + File.separator + "armor.default.yml", false);
|
plugin.saveResource(plugin.getDataFolder().getName() + File.separator + "armor.default.yml", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String fileName : dataFolder.list()) {
|
for (String fileName : dataFolder.list()) {
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.gmail.nossr50.config.mods;
|
package com.gmail.nossr50.config.mods;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.util.ModManager;
|
import com.gmail.nossr50.util.ModManager;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class BlockConfigManager {
|
public class BlockConfigManager {
|
||||||
public BlockConfigManager(mcMMO plugin) {
|
public BlockConfigManager(mcMMO plugin) {
|
||||||
Pattern middlePattern = Pattern.compile("blocks\\.(?:.+)\\.yml");
|
Pattern middlePattern = Pattern.compile("blocks\\.(?:.+)\\.yml");
|
||||||
@@ -15,7 +15,7 @@ public class BlockConfigManager {
|
|||||||
ModManager modManager = mcMMO.getModManager();
|
ModManager modManager = mcMMO.getModManager();
|
||||||
|
|
||||||
if (!vanilla.exists()) {
|
if (!vanilla.exists()) {
|
||||||
plugin.saveResource(vanilla.getParentFile().getName() + File.separator + "blocks.default.yml", false);
|
plugin.saveResource(plugin.getDataFolder().getName() + File.separator + "blocks.default.yml", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String fileName : dataFolder.list()) {
|
for (String fileName : dataFolder.list()) {
|
||||||
|
|||||||
@@ -9,11 +9,11 @@ import org.bukkit.configuration.ConfigurationSection;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.ConfigLoader;
|
import com.gmail.nossr50.config.ConfigLoader;
|
||||||
import com.gmail.nossr50.datatypes.skills.ItemType;
|
import com.gmail.nossr50.skills.repair.Repair;
|
||||||
import com.gmail.nossr50.datatypes.skills.MaterialType;
|
import com.gmail.nossr50.skills.repair.repairables.RepairItemType;
|
||||||
|
import com.gmail.nossr50.skills.repair.repairables.RepairMaterialType;
|
||||||
import com.gmail.nossr50.skills.repair.repairables.Repairable;
|
import com.gmail.nossr50.skills.repair.repairables.Repairable;
|
||||||
import com.gmail.nossr50.skills.repair.repairables.RepairableFactory;
|
import com.gmail.nossr50.skills.repair.repairables.RepairableFactory;
|
||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
|
||||||
|
|
||||||
public class CustomArmorConfig extends ConfigLoader {
|
public class CustomArmorConfig extends ConfigLoader {
|
||||||
private boolean needsUpdate = false;
|
private boolean needsUpdate = false;
|
||||||
@@ -79,23 +79,19 @@ public class CustomArmorConfig extends ConfigLoader {
|
|||||||
|
|
||||||
if (repairable) {
|
if (repairable) {
|
||||||
byte repairData = (byte) config.getInt(armorType + "." + armorName + ".Repair_Material_Data_Value", -1);
|
byte repairData = (byte) config.getInt(armorType + "." + armorName + ".Repair_Material_Data_Value", -1);
|
||||||
int repairQuantity = SkillUtils.getRepairAndSalvageQuantities(new ItemStack(armorMaterial), repairMaterial, repairData);
|
int repairQuantity = Repair.getRepairAndSalvageQuantities(new ItemStack(armorMaterial), repairMaterial, repairData);
|
||||||
|
|
||||||
if (repairQuantity == 0) {
|
if (repairQuantity == 0) {
|
||||||
repairQuantity = config.getInt(armorType + "." + armorName + ".Repair_Material_Data_Quantity", 2);
|
repairQuantity = config.getInt(armorType + "." + armorName + ".Repair_Material_Data_Quantity", 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
String repairItemName = config.getString(armorType + "." + armorName + ".Repair_Material_Pretty_Name");
|
|
||||||
int repairMinimumLevel = config.getInt(armorType + "." + armorName + ".Repair_MinimumLevel", 0);
|
|
||||||
double repairXpMultiplier = config.getDouble(armorType + "." + armorName + ".Repair_XpMultiplier", 1);
|
|
||||||
|
|
||||||
short durability = armorMaterial.getMaxDurability();
|
short durability = armorMaterial.getMaxDurability();
|
||||||
|
|
||||||
if (durability == 0) {
|
if (durability == 0) {
|
||||||
durability = (short) config.getInt(armorType + "." + armorName + ".Durability", 70);
|
durability = (short) config.getInt(armorType + "." + armorName + ".Durability", 70);
|
||||||
}
|
}
|
||||||
|
|
||||||
repairables.add(RepairableFactory.getRepairable(armorMaterial, repairMaterial, repairData, repairItemName, repairMinimumLevel, repairQuantity, durability, ItemType.ARMOR, MaterialType.OTHER, repairXpMultiplier));
|
repairables.add(RepairableFactory.getRepairable(armorMaterial, repairMaterial, repairData, 0, repairQuantity, durability, RepairItemType.ARMOR, RepairMaterialType.OTHER, 1.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
materialList.add(armorMaterial);
|
materialList.add(armorMaterial);
|
||||||
|
|||||||
@@ -11,11 +11,11 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
|
|
||||||
import com.gmail.nossr50.config.ConfigLoader;
|
import com.gmail.nossr50.config.ConfigLoader;
|
||||||
import com.gmail.nossr50.datatypes.mods.CustomTool;
|
import com.gmail.nossr50.datatypes.mods.CustomTool;
|
||||||
import com.gmail.nossr50.datatypes.skills.ItemType;
|
import com.gmail.nossr50.skills.repair.Repair;
|
||||||
import com.gmail.nossr50.datatypes.skills.MaterialType;
|
import com.gmail.nossr50.skills.repair.repairables.RepairItemType;
|
||||||
|
import com.gmail.nossr50.skills.repair.repairables.RepairMaterialType;
|
||||||
import com.gmail.nossr50.skills.repair.repairables.Repairable;
|
import com.gmail.nossr50.skills.repair.repairables.Repairable;
|
||||||
import com.gmail.nossr50.skills.repair.repairables.RepairableFactory;
|
import com.gmail.nossr50.skills.repair.repairables.RepairableFactory;
|
||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
|
||||||
|
|
||||||
public class CustomToolConfig extends ConfigLoader {
|
public class CustomToolConfig extends ConfigLoader {
|
||||||
private boolean needsUpdate = false;
|
private boolean needsUpdate = false;
|
||||||
@@ -87,23 +87,19 @@ public class CustomToolConfig extends ConfigLoader {
|
|||||||
|
|
||||||
if (repairable) {
|
if (repairable) {
|
||||||
byte repairData = (byte) config.getInt(toolType + "." + toolName + ".Repair_Material_Data_Value", -1);
|
byte repairData = (byte) config.getInt(toolType + "." + toolName + ".Repair_Material_Data_Value", -1);
|
||||||
int repairQuantity = SkillUtils.getRepairAndSalvageQuantities(new ItemStack(toolMaterial), repairMaterial, repairData);
|
int repairQuantity = Repair.getRepairAndSalvageQuantities(new ItemStack(toolMaterial), repairMaterial, repairData);
|
||||||
|
|
||||||
if (repairQuantity == 0) {
|
if (repairQuantity == 0) {
|
||||||
repairQuantity = config.getInt(toolType + "." + toolName + ".Repair_Material_Data_Quantity", 2);
|
repairQuantity = config.getInt(toolType + "." + toolName + ".Repair_Material_Data_Quantity", 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
String repairItemName = config.getString(toolType + "." + toolName + ".Repair_Material_Pretty_Name");
|
|
||||||
int repairMinimumLevel = config.getInt(toolType + "." + toolName + ".Repair_MinimumLevel", 0);
|
|
||||||
double repairXpMultiplier = config.getDouble(toolType + "." + toolName + ".Repair_XpMultiplier", 1);
|
|
||||||
|
|
||||||
short durability = toolMaterial.getMaxDurability();
|
short durability = toolMaterial.getMaxDurability();
|
||||||
|
|
||||||
if (durability == 0) {
|
if (durability == 0) {
|
||||||
durability = (short) config.getInt(toolType + "." + toolName + ".Durability", 60);
|
durability = (short) config.getInt(toolType + "." + toolName + ".Durability", 60);
|
||||||
}
|
}
|
||||||
|
|
||||||
repairables.add(RepairableFactory.getRepairable(toolMaterial, repairMaterial, repairData, repairItemName, repairMinimumLevel, repairQuantity, durability, ItemType.TOOL, MaterialType.OTHER, repairXpMultiplier));
|
repairables.add(RepairableFactory.getRepairable(toolMaterial, repairMaterial, repairData, 0, repairQuantity, durability, RepairItemType.TOOL, RepairMaterialType.OTHER, 1.0));
|
||||||
}
|
}
|
||||||
|
|
||||||
double multiplier = config.getDouble(toolType + "." + toolName + ".XP_Modifier", 1.0);
|
double multiplier = config.getDouble(toolType + "." + toolName + ".XP_Modifier", 1.0);
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.gmail.nossr50.config.mods;
|
package com.gmail.nossr50.config.mods;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.util.ModManager;
|
import com.gmail.nossr50.util.ModManager;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class EntityConfigManager {
|
public class EntityConfigManager {
|
||||||
public EntityConfigManager(mcMMO plugin) {
|
public EntityConfigManager(mcMMO plugin) {
|
||||||
Pattern middlePattern = Pattern.compile("entities\\.(?:.+)\\.yml");
|
Pattern middlePattern = Pattern.compile("entities\\.(?:.+)\\.yml");
|
||||||
@@ -15,7 +15,7 @@ public class EntityConfigManager {
|
|||||||
ModManager modManager = mcMMO.getModManager();
|
ModManager modManager = mcMMO.getModManager();
|
||||||
|
|
||||||
if (!vanilla.exists()) {
|
if (!vanilla.exists()) {
|
||||||
plugin.saveResource(vanilla.getParentFile().getName() + File.separator + "entities.default.yml", false);
|
plugin.saveResource(plugin.getDataFolder().getName() + File.separator + "entities.default.yml", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String fileName : dataFolder.list()) {
|
for (String fileName : dataFolder.list()) {
|
||||||
|
|||||||
@@ -1,11 +1,11 @@
|
|||||||
package com.gmail.nossr50.config.mods;
|
package com.gmail.nossr50.config.mods;
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.util.ModManager;
|
import com.gmail.nossr50.util.ModManager;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class ToolConfigManager {
|
public class ToolConfigManager {
|
||||||
public ToolConfigManager(mcMMO plugin) {
|
public ToolConfigManager(mcMMO plugin) {
|
||||||
Pattern middlePattern = Pattern.compile("tools\\.(?:.+)\\.yml");
|
Pattern middlePattern = Pattern.compile("tools\\.(?:.+)\\.yml");
|
||||||
@@ -15,7 +15,7 @@ public class ToolConfigManager {
|
|||||||
ModManager modManager = mcMMO.getModManager();
|
ModManager modManager = mcMMO.getModManager();
|
||||||
|
|
||||||
if (!vanilla.exists()) {
|
if (!vanilla.exists()) {
|
||||||
plugin.saveResource(vanilla.getParentFile().getName() + File.separator + "tools.default.yml", false);
|
plugin.saveResource(plugin.getDataFolder().getName() + File.separator + "tools.default.yml", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (String fileName : dataFolder.list()) {
|
for (String fileName : dataFolder.list()) {
|
||||||
|
|||||||
@@ -18,16 +18,16 @@ import com.gmail.nossr50.datatypes.skills.alchemy.AlchemyPotion;
|
|||||||
public class PotionConfig extends ConfigLoader {
|
public class PotionConfig extends ConfigLoader {
|
||||||
private static PotionConfig instance;
|
private static PotionConfig instance;
|
||||||
|
|
||||||
private List<ItemStack> concoctionsIngredientsTierOne = new ArrayList<ItemStack>();
|
public List<ItemStack> concoctionsIngredientsTierOne = new ArrayList<ItemStack>();
|
||||||
private List<ItemStack> concoctionsIngredientsTierTwo = new ArrayList<ItemStack>();
|
public List<ItemStack> concoctionsIngredientsTierTwo = new ArrayList<ItemStack>();
|
||||||
private List<ItemStack> concoctionsIngredientsTierThree = new ArrayList<ItemStack>();
|
public List<ItemStack> concoctionsIngredientsTierThree = new ArrayList<ItemStack>();
|
||||||
private List<ItemStack> concoctionsIngredientsTierFour = new ArrayList<ItemStack>();
|
public List<ItemStack> concoctionsIngredientsTierFour = new ArrayList<ItemStack>();
|
||||||
private List<ItemStack> concoctionsIngredientsTierFive = new ArrayList<ItemStack>();
|
public List<ItemStack> concoctionsIngredientsTierFive = new ArrayList<ItemStack>();
|
||||||
private List<ItemStack> concoctionsIngredientsTierSix = new ArrayList<ItemStack>();
|
public List<ItemStack> concoctionsIngredientsTierSix = new ArrayList<ItemStack>();
|
||||||
private List<ItemStack> concoctionsIngredientsTierSeven = new ArrayList<ItemStack>();
|
public List<ItemStack> concoctionsIngredientsTierSeven = new ArrayList<ItemStack>();
|
||||||
private List<ItemStack> concoctionsIngredientsTierEight = new ArrayList<ItemStack>();
|
public List<ItemStack> concoctionsIngredientsTierEight = new ArrayList<ItemStack>();
|
||||||
|
|
||||||
private Map<Short, AlchemyPotion> potionMap = new HashMap<Short, AlchemyPotion>();
|
public Map<Short, AlchemyPotion> potionMap = new HashMap<Short, AlchemyPotion>();
|
||||||
|
|
||||||
private PotionConfig() {
|
private PotionConfig() {
|
||||||
super("potions.yml");
|
super("potions.yml");
|
||||||
@@ -189,34 +189,4 @@ public class PotionConfig extends ConfigLoader {
|
|||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<ItemStack> getIngredients(int tier) {
|
|
||||||
switch (tier) {
|
|
||||||
case 8:
|
|
||||||
return concoctionsIngredientsTierEight;
|
|
||||||
case 7:
|
|
||||||
return concoctionsIngredientsTierSeven;
|
|
||||||
case 6:
|
|
||||||
return concoctionsIngredientsTierSix;
|
|
||||||
case 5:
|
|
||||||
return concoctionsIngredientsTierFive;
|
|
||||||
case 4:
|
|
||||||
return concoctionsIngredientsTierFour;
|
|
||||||
case 3:
|
|
||||||
return concoctionsIngredientsTierThree;
|
|
||||||
case 2:
|
|
||||||
return concoctionsIngredientsTierTwo;
|
|
||||||
case 1:
|
|
||||||
default:
|
|
||||||
return concoctionsIngredientsTierOne;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isValidPotion(ItemStack item) {
|
|
||||||
return potionMap.containsKey(item.getDurability());
|
|
||||||
}
|
|
||||||
|
|
||||||
public AlchemyPotion getPotion(short durability) {
|
|
||||||
return potionMap.get(durability);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -9,12 +9,12 @@ import org.bukkit.configuration.ConfigurationSection;
|
|||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.ConfigLoader;
|
import com.gmail.nossr50.config.ConfigLoader;
|
||||||
import com.gmail.nossr50.datatypes.skills.ItemType;
|
import com.gmail.nossr50.skills.repair.Repair;
|
||||||
import com.gmail.nossr50.datatypes.skills.MaterialType;
|
import com.gmail.nossr50.skills.repair.repairables.RepairItemType;
|
||||||
|
import com.gmail.nossr50.skills.repair.repairables.RepairMaterialType;
|
||||||
import com.gmail.nossr50.skills.repair.repairables.Repairable;
|
import com.gmail.nossr50.skills.repair.repairables.Repairable;
|
||||||
import com.gmail.nossr50.skills.repair.repairables.RepairableFactory;
|
import com.gmail.nossr50.skills.repair.repairables.RepairableFactory;
|
||||||
import com.gmail.nossr50.util.ItemUtils;
|
import com.gmail.nossr50.util.ItemUtils;
|
||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
|
||||||
|
|
||||||
public class RepairConfig extends ConfigLoader {
|
public class RepairConfig extends ConfigLoader {
|
||||||
private List<Repairable> repairables;
|
private List<Repairable> repairables;
|
||||||
@@ -48,37 +48,37 @@ public class RepairConfig extends ConfigLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Repair Material Type
|
// Repair Material Type
|
||||||
MaterialType repairMaterialType = MaterialType.OTHER;
|
RepairMaterialType repairMaterialType = RepairMaterialType.OTHER;
|
||||||
String repairMaterialTypeString = config.getString("Repairables." + key + ".MaterialType", "OTHER");
|
String repairMaterialTypeString = config.getString("Repairables." + key + ".MaterialType", "OTHER");
|
||||||
|
|
||||||
if (!config.contains("Repairables." + key + ".MaterialType") && itemMaterial != null) {
|
if (!config.contains("Repairables." + key + ".MaterialType") && itemMaterial != null) {
|
||||||
ItemStack repairItem = new ItemStack(itemMaterial);
|
ItemStack repairItem = new ItemStack(itemMaterial);
|
||||||
|
|
||||||
if (ItemUtils.isWoodTool(repairItem)) {
|
if (ItemUtils.isWoodTool(repairItem)) {
|
||||||
repairMaterialType = MaterialType.WOOD;
|
repairMaterialType = RepairMaterialType.WOOD;
|
||||||
}
|
}
|
||||||
else if (ItemUtils.isStoneTool(repairItem)) {
|
else if (ItemUtils.isStoneTool(repairItem)) {
|
||||||
repairMaterialType = MaterialType.STONE;
|
repairMaterialType = RepairMaterialType.STONE;
|
||||||
}
|
}
|
||||||
else if (ItemUtils.isStringTool(repairItem)) {
|
else if (ItemUtils.isStringTool(repairItem)) {
|
||||||
repairMaterialType = MaterialType.STRING;
|
repairMaterialType = RepairMaterialType.STRING;
|
||||||
}
|
}
|
||||||
else if (ItemUtils.isLeatherArmor(repairItem)) {
|
else if (ItemUtils.isLeatherArmor(repairItem)) {
|
||||||
repairMaterialType = MaterialType.LEATHER;
|
repairMaterialType = RepairMaterialType.LEATHER;
|
||||||
}
|
}
|
||||||
else if (ItemUtils.isIronArmor(repairItem) || ItemUtils.isIronTool(repairItem)) {
|
else if (ItemUtils.isIronArmor(repairItem) || ItemUtils.isIronTool(repairItem)) {
|
||||||
repairMaterialType = MaterialType.IRON;
|
repairMaterialType = RepairMaterialType.IRON;
|
||||||
}
|
}
|
||||||
else if (ItemUtils.isGoldArmor(repairItem) || ItemUtils.isGoldTool(repairItem)) {
|
else if (ItemUtils.isGoldArmor(repairItem) || ItemUtils.isGoldTool(repairItem)) {
|
||||||
repairMaterialType = MaterialType.GOLD;
|
repairMaterialType = RepairMaterialType.GOLD;
|
||||||
}
|
}
|
||||||
else if (ItemUtils.isDiamondArmor(repairItem) || ItemUtils.isDiamondTool(repairItem)) {
|
else if (ItemUtils.isDiamondArmor(repairItem) || ItemUtils.isDiamondTool(repairItem)) {
|
||||||
repairMaterialType = MaterialType.DIAMOND;
|
repairMaterialType = RepairMaterialType.DIAMOND;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
try {
|
try {
|
||||||
repairMaterialType = MaterialType.valueOf(repairMaterialTypeString);
|
repairMaterialType = RepairMaterialType.valueOf(repairMaterialTypeString);
|
||||||
}
|
}
|
||||||
catch (IllegalArgumentException ex) {
|
catch (IllegalArgumentException ex) {
|
||||||
reason.add(key + " has an invalid MaterialType of " + repairMaterialTypeString);
|
reason.add(key + " has an invalid MaterialType of " + repairMaterialTypeString);
|
||||||
@@ -87,7 +87,7 @@ public class RepairConfig extends ConfigLoader {
|
|||||||
|
|
||||||
// Repair Material
|
// Repair Material
|
||||||
String repairMaterialName = config.getString("Repairables." + key + ".RepairMaterial");
|
String repairMaterialName = config.getString("Repairables." + key + ".RepairMaterial");
|
||||||
Material repairMaterial = (repairMaterialName == null ? repairMaterialType.getDefaultMaterial() : Material.matchMaterial(repairMaterialName));
|
Material repairMaterial = (repairMaterialName == null ? repairMaterialType.getDefaultRepairMaterial() : Material.matchMaterial(repairMaterialName));
|
||||||
|
|
||||||
if (repairMaterial == null) {
|
if (repairMaterial == null) {
|
||||||
reason.add(key + " has an invalid repair material: " + repairMaterialName);
|
reason.add(key + " has an invalid repair material: " + repairMaterialName);
|
||||||
@@ -96,31 +96,27 @@ public class RepairConfig extends ConfigLoader {
|
|||||||
// Maximum Durability
|
// Maximum Durability
|
||||||
short maximumDurability = (itemMaterial != null ? itemMaterial.getMaxDurability() : (short) config.getInt("Repairables." + key + ".MaximumDurability"));
|
short maximumDurability = (itemMaterial != null ? itemMaterial.getMaxDurability() : (short) config.getInt("Repairables." + key + ".MaximumDurability"));
|
||||||
|
|
||||||
if (maximumDurability <= 0) {
|
|
||||||
maximumDurability = (short) config.getInt("Repairables." + key + ".MaximumDurability");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (maximumDurability <= 0) {
|
if (maximumDurability <= 0) {
|
||||||
reason.add("Maximum durability of " + key + " must be greater than 0!");
|
reason.add("Maximum durability of " + key + " must be greater than 0!");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Item Type
|
// Item Type
|
||||||
ItemType repairItemType = ItemType.OTHER;
|
RepairItemType repairItemType = RepairItemType.OTHER;
|
||||||
String repairItemTypeString = config.getString("Repairables." + key + ".ItemType", "OTHER");
|
String repairItemTypeString = config.getString("Repairables." + key + ".ItemType", "OTHER");
|
||||||
|
|
||||||
if (!config.contains("Repairables." + key + ".ItemType") && itemMaterial != null) {
|
if (!config.contains("Repairables." + key + ".ItemType") && itemMaterial != null) {
|
||||||
ItemStack repairItem = new ItemStack(itemMaterial);
|
ItemStack repairItem = new ItemStack(itemMaterial);
|
||||||
|
|
||||||
if (ItemUtils.isMinecraftTool(repairItem)) {
|
if (ItemUtils.isMinecraftTool(repairItem)) {
|
||||||
repairItemType = ItemType.TOOL;
|
repairItemType = RepairItemType.TOOL;
|
||||||
}
|
}
|
||||||
else if (ItemUtils.isArmor(repairItem)) {
|
else if (ItemUtils.isArmor(repairItem)) {
|
||||||
repairItemType = ItemType.ARMOR;
|
repairItemType = RepairItemType.ARMOR;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
try {
|
try {
|
||||||
repairItemType = ItemType.valueOf(repairItemTypeString);
|
repairItemType = RepairItemType.valueOf(repairItemTypeString);
|
||||||
}
|
}
|
||||||
catch (IllegalArgumentException ex) {
|
catch (IllegalArgumentException ex) {
|
||||||
reason.add(key + " has an invalid ItemType of " + repairItemTypeString);
|
reason.add(key + " has an invalid ItemType of " + repairItemTypeString);
|
||||||
@@ -136,7 +132,7 @@ public class RepairConfig extends ConfigLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Minimum Quantity
|
// Minimum Quantity
|
||||||
int minimumQuantity = (itemMaterial != null ? SkillUtils.getRepairAndSalvageQuantities(new ItemStack(itemMaterial), repairMaterial, repairMetadata) : config.getInt("Repairables." + key + ".MinimumQuantity", 2));
|
int minimumQuantity = (itemMaterial != null ? Repair.getRepairAndSalvageQuantities(new ItemStack(itemMaterial), repairMaterial, repairMetadata) : config.getInt("Repairables." + key + ".MinimumQuantity", 2));
|
||||||
|
|
||||||
if (minimumQuantity <= 0 && itemMaterial != null) {
|
if (minimumQuantity <= 0 && itemMaterial != null) {
|
||||||
minimumQuantity = config.getInt("Repairables." + key + ".MinimumQuantity", 2);
|
minimumQuantity = config.getInt("Repairables." + key + ".MinimumQuantity", 2);
|
||||||
|
|||||||
@@ -1,165 +0,0 @@
|
|||||||
package com.gmail.nossr50.config.skills.salvage;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.bukkit.Material;
|
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
|
||||||
import org.bukkit.inventory.ItemStack;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.config.ConfigLoader;
|
|
||||||
import com.gmail.nossr50.datatypes.skills.ItemType;
|
|
||||||
import com.gmail.nossr50.datatypes.skills.MaterialType;
|
|
||||||
import com.gmail.nossr50.skills.salvage.salvageables.Salvageable;
|
|
||||||
import com.gmail.nossr50.skills.salvage.salvageables.SalvageableFactory;
|
|
||||||
import com.gmail.nossr50.util.ItemUtils;
|
|
||||||
import com.gmail.nossr50.util.skills.SkillUtils;
|
|
||||||
|
|
||||||
public class SalvageConfig extends ConfigLoader {
|
|
||||||
private List<Salvageable> salvageables;
|
|
||||||
|
|
||||||
public SalvageConfig(String fileName) {
|
|
||||||
super(fileName);
|
|
||||||
loadKeys();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void loadKeys() {
|
|
||||||
salvageables = new ArrayList<Salvageable>();
|
|
||||||
|
|
||||||
ConfigurationSection section = config.getConfigurationSection("Salvageables");
|
|
||||||
Set<String> keys = section.getKeys(false);
|
|
||||||
|
|
||||||
for (String key : keys) {
|
|
||||||
// Validate all the things!
|
|
||||||
List<String> reason = new ArrayList<String>();
|
|
||||||
|
|
||||||
// Item Material
|
|
||||||
Material itemMaterial = Material.matchMaterial(key);
|
|
||||||
|
|
||||||
if (itemMaterial == null) {
|
|
||||||
reason.add("Invalid material: " + key);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Salvage Material Type
|
|
||||||
MaterialType salvageMaterialType = MaterialType.OTHER;
|
|
||||||
String salvageMaterialTypeString = config.getString("Salvageables." + key + ".MaterialType", "OTHER");
|
|
||||||
|
|
||||||
if (!config.contains("Salvageables." + key + ".MaterialType") && itemMaterial != null) {
|
|
||||||
ItemStack salvageItem = new ItemStack(itemMaterial);
|
|
||||||
|
|
||||||
if (ItemUtils.isWoodTool(salvageItem)) {
|
|
||||||
salvageMaterialType = MaterialType.WOOD;
|
|
||||||
}
|
|
||||||
else if (ItemUtils.isStoneTool(salvageItem)) {
|
|
||||||
salvageMaterialType = MaterialType.STONE;
|
|
||||||
}
|
|
||||||
else if (ItemUtils.isStringTool(salvageItem)) {
|
|
||||||
salvageMaterialType = MaterialType.STRING;
|
|
||||||
}
|
|
||||||
else if (ItemUtils.isLeatherArmor(salvageItem)) {
|
|
||||||
salvageMaterialType = MaterialType.LEATHER;
|
|
||||||
}
|
|
||||||
else if (ItemUtils.isIronArmor(salvageItem) || ItemUtils.isIronTool(salvageItem)) {
|
|
||||||
salvageMaterialType = MaterialType.IRON;
|
|
||||||
}
|
|
||||||
else if (ItemUtils.isGoldArmor(salvageItem) || ItemUtils.isGoldTool(salvageItem)) {
|
|
||||||
salvageMaterialType = MaterialType.GOLD;
|
|
||||||
}
|
|
||||||
else if (ItemUtils.isDiamondArmor(salvageItem) || ItemUtils.isDiamondTool(salvageItem)) {
|
|
||||||
salvageMaterialType = MaterialType.DIAMOND;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
salvageMaterialType = MaterialType.valueOf(salvageMaterialTypeString);
|
|
||||||
}
|
|
||||||
catch (IllegalArgumentException ex) {
|
|
||||||
reason.add(key + " has an invalid MaterialType of " + salvageMaterialTypeString);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Salvage Material
|
|
||||||
String salvageMaterialName = config.getString("Salvageables." + key + ".SalvageMaterial");
|
|
||||||
Material salvageMaterial = (salvageMaterialName == null ? salvageMaterialType.getDefaultMaterial() : Material.matchMaterial(salvageMaterialName));
|
|
||||||
|
|
||||||
if (salvageMaterial == null) {
|
|
||||||
reason.add(key + " has an invalid salvage material: " + salvageMaterialName);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Maximum Durability
|
|
||||||
short maximumDurability = (itemMaterial != null ? itemMaterial.getMaxDurability() : (short) config.getInt("Salvageables." + key + ".MaximumDurability"));
|
|
||||||
|
|
||||||
// Item Type
|
|
||||||
ItemType salvageItemType = ItemType.OTHER;
|
|
||||||
String salvageItemTypeString = config.getString("Salvageables." + key + ".ItemType", "OTHER");
|
|
||||||
|
|
||||||
if (!config.contains("Salvageables." + key + ".ItemType") && itemMaterial != null) {
|
|
||||||
ItemStack salvageItem = new ItemStack(itemMaterial);
|
|
||||||
|
|
||||||
if (ItemUtils.isMinecraftTool(salvageItem)) {
|
|
||||||
salvageItemType = ItemType.TOOL;
|
|
||||||
}
|
|
||||||
else if (ItemUtils.isArmor(salvageItem)) {
|
|
||||||
salvageItemType = ItemType.ARMOR;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
try {
|
|
||||||
salvageItemType = ItemType.valueOf(salvageItemTypeString);
|
|
||||||
}
|
|
||||||
catch (IllegalArgumentException ex) {
|
|
||||||
reason.add(key + " has an invalid ItemType of " + salvageItemTypeString);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
byte salvageMetadata = (byte) config.getInt("Salvageables." + key + ".SalvageMaterialMetadata", -1);
|
|
||||||
int minimumLevel = config.getInt("Salvageables." + key + ".MinimumLevel");
|
|
||||||
double xpMultiplier = config.getDouble("Salvageables." + key + ".XpMultiplier", 1);
|
|
||||||
|
|
||||||
if (minimumLevel < 0) {
|
|
||||||
reason.add(key + " has an invalid MinimumLevel of " + minimumLevel);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Maximum Quantity
|
|
||||||
int maximumQuantity = (itemMaterial != null ? SkillUtils.getRepairAndSalvageQuantities(new ItemStack(itemMaterial), salvageMaterial, salvageMetadata) : config.getInt("Salvageables." + key + ".MaximumQuantity", 2));
|
|
||||||
|
|
||||||
if (maximumQuantity <= 0 && itemMaterial != null) {
|
|
||||||
maximumQuantity = config.getInt("Salvageables." + key + ".MaximumQuantity", 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
int configMaximumQuantity = config.getInt("Salvageables." + key + ".MaximumQuantity", -1);
|
|
||||||
|
|
||||||
if (configMaximumQuantity > 0) {
|
|
||||||
maximumQuantity = configMaximumQuantity;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (maximumQuantity <= 0) {
|
|
||||||
reason.add("Maximum quantity of " + key + " must be greater than 0!");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (noErrorsInSalvageable(reason)) {
|
|
||||||
Salvageable salvageable = SalvageableFactory.getSalvageable(itemMaterial, salvageMaterial, salvageMetadata, minimumLevel, maximumQuantity, maximumDurability, salvageItemType, salvageMaterialType, xpMultiplier);
|
|
||||||
salvageables.add(salvageable);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
protected List<Salvageable> getLoadedSalvageables() {
|
|
||||||
return salvageables == null ? new ArrayList<Salvageable>() : salvageables;
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean noErrorsInSalvageable(List<String> issues) {
|
|
||||||
if (!issues.isEmpty()) {
|
|
||||||
plugin.getLogger().warning("Errors have been found in: " + fileName);
|
|
||||||
plugin.getLogger().warning("The following issues were found:");
|
|
||||||
}
|
|
||||||
|
|
||||||
for (String issue : issues) {
|
|
||||||
plugin.getLogger().warning(issue);
|
|
||||||
}
|
|
||||||
|
|
||||||
return issues.isEmpty();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
package com.gmail.nossr50.config.skills.salvage;
|
|
||||||
|
|
||||||
import java.io.File;
|
|
||||||
import java.util.ArrayList;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.regex.Pattern;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
|
||||||
import com.gmail.nossr50.skills.salvage.salvageables.Salvageable;
|
|
||||||
|
|
||||||
public class SalvageConfigManager {
|
|
||||||
private final List<Salvageable> salvageables = new ArrayList<Salvageable>();
|
|
||||||
|
|
||||||
public SalvageConfigManager(mcMMO plugin) {
|
|
||||||
Pattern pattern = Pattern.compile("salvage\\.(?:.+)\\.yml");
|
|
||||||
File dataFolder = plugin.getDataFolder();
|
|
||||||
File vanilla = new File(dataFolder, "salvage.vanilla.yml");
|
|
||||||
|
|
||||||
if (!vanilla.exists()) {
|
|
||||||
plugin.saveResource("salvage.vanilla.yml", false);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (String fileName : dataFolder.list()) {
|
|
||||||
if (!pattern.matcher(fileName).matches()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
File file = new File(dataFolder, fileName);
|
|
||||||
|
|
||||||
if (file.isDirectory()) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
SalvageConfig salvageConfig = new SalvageConfig(fileName);
|
|
||||||
salvageables.addAll(salvageConfig.getLoadedSalvageables());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<Salvageable> getLoadedSalvageables() {
|
|
||||||
return salvageables;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -35,8 +35,6 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
public List<ExcavationTreasure> excavationFromMycel = new ArrayList<ExcavationTreasure>();
|
public List<ExcavationTreasure> excavationFromMycel = new ArrayList<ExcavationTreasure>();
|
||||||
public List<ExcavationTreasure> excavationFromSoulSand = new ArrayList<ExcavationTreasure>();
|
public List<ExcavationTreasure> excavationFromSoulSand = new ArrayList<ExcavationTreasure>();
|
||||||
public List<ExcavationTreasure> excavationFromSnow = new ArrayList<ExcavationTreasure>();
|
public List<ExcavationTreasure> excavationFromSnow = new ArrayList<ExcavationTreasure>();
|
||||||
public List<ExcavationTreasure> excavationFromRedSand = new ArrayList<ExcavationTreasure>();
|
|
||||||
public List<ExcavationTreasure> excavationFromPodzol = new ArrayList<ExcavationTreasure>();
|
|
||||||
|
|
||||||
public List<HylianTreasure> hylianFromBushes = new ArrayList<HylianTreasure>();
|
public List<HylianTreasure> hylianFromBushes = new ArrayList<HylianTreasure>();
|
||||||
public List<HylianTreasure> hylianFromFlowers = new ArrayList<HylianTreasure>();
|
public List<HylianTreasure> hylianFromFlowers = new ArrayList<HylianTreasure>();
|
||||||
@@ -160,29 +158,26 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
// Validate all the things!
|
// Validate all the things!
|
||||||
List<String> reason = new ArrayList<String>();
|
List<String> reason = new ArrayList<String>();
|
||||||
|
|
||||||
String[] treasureInfo = treasureName.split("[|]");
|
|
||||||
String materialName = treasureInfo[0];
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Material, Amount, and Data
|
* Material, Amount, and Data
|
||||||
*/
|
*/
|
||||||
Material material;
|
Material material;
|
||||||
|
|
||||||
if (materialName.contains("POTION")) {
|
if (treasureName.contains("POTION")) {
|
||||||
material = Material.POTION;
|
material = Material.POTION;
|
||||||
}
|
}
|
||||||
else if (materialName.contains("INK_SACK")) {
|
else if (treasureName.contains("INK_SACK")) {
|
||||||
material = Material.INK_SACK;
|
material = Material.INK_SACK;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
material = Material.matchMaterial(materialName);
|
material = Material.matchMaterial(treasureName);
|
||||||
}
|
}
|
||||||
|
|
||||||
int amount = config.getInt(type + "." + treasureName + ".Amount");
|
int amount = config.getInt(type + "." + treasureName + ".Amount");
|
||||||
short data = (treasureInfo.length == 2) ? Byte.valueOf(treasureInfo[1]) : (short) config.getInt(type + "." + treasureName + ".Data");
|
int data = config.getInt(type + "." + treasureName + ".Data");
|
||||||
|
|
||||||
if (material == null) {
|
if (material == null) {
|
||||||
reason.add("Invalid material: " + materialName);
|
reason.add("Invalid material: " + treasureName);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (amount <= 0) {
|
if (amount <= 0) {
|
||||||
@@ -231,8 +226,8 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
*/
|
*/
|
||||||
ItemStack item = null;
|
ItemStack item = null;
|
||||||
|
|
||||||
if (materialName.contains("POTION")) {
|
if (treasureName.contains("POTION")) {
|
||||||
String potionType = materialName.substring(7);
|
String potionType = treasureName.substring(7);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
item = new Potion(PotionType.valueOf(potionType.toUpperCase().trim())).toItemStack(amount);
|
item = new Potion(PotionType.valueOf(potionType.toUpperCase().trim())).toItemStack(amount);
|
||||||
@@ -241,8 +236,8 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
reason.add("Invalid Potion_Type: " + potionType);
|
reason.add("Invalid Potion_Type: " + potionType);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (materialName.contains("INK_SACK")) {
|
else if (treasureName.contains("INK_SACK")) {
|
||||||
String color = materialName.substring(9);
|
String color = treasureName.substring(9);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
Dye dye = new Dye();
|
Dye dye = new Dye();
|
||||||
@@ -255,17 +250,17 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (material != null) {
|
else if (material != null) {
|
||||||
item = new ItemStack(material, amount, data);
|
item = new ItemStack(material, amount, (short) data);
|
||||||
|
|
||||||
if (config.contains(type + "." + treasureName + ".Custom_Name")) {
|
if (config.contains(type + "." + treasureName + ".Custom_Name")) {
|
||||||
ItemMeta itemMeta = item.getItemMeta();
|
ItemMeta itemMeta = item.getItemMeta();
|
||||||
itemMeta.setDisplayName(config.getString(type + "." + treasureName + ".Custom_Name"));
|
itemMeta.setDisplayName(config.getString(type + "." + treasureName + "Custom_Name"));
|
||||||
item.setItemMeta(itemMeta);
|
item.setItemMeta(itemMeta);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config.contains(type + "." + treasureName + ".Lore")) {
|
if (config.contains(type + "." + treasureName + ".Lore")) {
|
||||||
ItemMeta itemMeta = item.getItemMeta();
|
ItemMeta itemMeta = item.getItemMeta();
|
||||||
itemMeta.setLore(config.getStringList(type + "." + treasureName + ".Lore"));
|
itemMeta.setLore(config.getStringList(type + "." + treasureName + "Custom_Name"));
|
||||||
item.setItemMeta(itemMeta);
|
item.setItemMeta(itemMeta);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -376,14 +371,6 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
if (dropList.contains("Snow")) {
|
if (dropList.contains("Snow")) {
|
||||||
excavationFromSnow.add(excavationTreasure);
|
excavationFromSnow.add(excavationTreasure);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dropList.contains("Red_Sand")) {
|
|
||||||
excavationFromRedSand.add(excavationTreasure);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (dropList.contains("Podzol")) {
|
|
||||||
excavationFromPodzol.add(excavationTreasure);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (isHylian) {
|
else if (isHylian) {
|
||||||
HylianTreasure hylianTreasure = new HylianTreasure(item, xp, dropChance, dropLevel);
|
HylianTreasure hylianTreasure = new HylianTreasure(item, xp, dropChance, dropLevel);
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package com.gmail.nossr50.database;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
import com.gmail.nossr50.datatypes.database.DatabaseType;
|
import com.gmail.nossr50.datatypes.database.DatabaseType;
|
||||||
@@ -45,7 +44,7 @@ public interface DatabaseManager {
|
|||||||
/**
|
/**
|
||||||
* Retrieve leaderboard info.
|
* Retrieve leaderboard info.
|
||||||
*
|
*
|
||||||
* @param skill The skill to retrieve info on
|
* @param skillName The skill to retrieve info on
|
||||||
* @param pageNumber Which page in the leaderboards to retrieve
|
* @param pageNumber Which page in the leaderboards to retrieve
|
||||||
* @param statsPerPage The number of stats per page
|
* @param statsPerPage The number of stats per page
|
||||||
* @return the requested leaderboard information
|
* @return the requested leaderboard information
|
||||||
@@ -68,42 +67,19 @@ public interface DatabaseManager {
|
|||||||
*
|
*
|
||||||
* @param playerName The name of the player to be added to the database
|
* @param playerName The name of the player to be added to the database
|
||||||
*/
|
*/
|
||||||
public void newUser(String playerName, String uuid);
|
public void newUser(String playerName);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Load a player from the database.
|
* Load a player from the database.
|
||||||
*
|
*
|
||||||
* @deprecated replaced by {@link #loadPlayerProfile(String playerName, UUID uuid, boolean createNew)}
|
|
||||||
*
|
|
||||||
* @param playerName The name of the player to load from the database
|
* @param playerName The name of the player to load from the database
|
||||||
* @param createNew Whether to create a new record if the player is not
|
* @param createNew Whether to create a new record if the player is not
|
||||||
* found
|
* found
|
||||||
* @return The player's data, or an unloaded PlayerProfile if not found
|
* @return The player's data, or an unloaded PlayerProfile if not found
|
||||||
* and createNew is false
|
* and createNew is false
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
|
||||||
public PlayerProfile loadPlayerProfile(String playerName, boolean createNew);
|
public PlayerProfile loadPlayerProfile(String playerName, boolean createNew);
|
||||||
|
|
||||||
/**
|
|
||||||
* Load a player from the database.
|
|
||||||
*
|
|
||||||
* @param uuid The uuid of the player to load from the database
|
|
||||||
* @return The player's data, or an unloaded PlayerProfile if not found
|
|
||||||
*/
|
|
||||||
public PlayerProfile loadPlayerProfile(UUID uuid);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Load a player from the database. Attempt to use uuid, fall back on playername
|
|
||||||
*
|
|
||||||
* @param playerName The name of the player to load from the database
|
|
||||||
* @param uuid The uuid of the player to load from the database
|
|
||||||
* @param createNew Whether to create a new record if the player is not
|
|
||||||
* found
|
|
||||||
* @return The player's data, or an unloaded PlayerProfile if not found
|
|
||||||
* and createNew is false
|
|
||||||
*/
|
|
||||||
public PlayerProfile loadPlayerProfile(String playerName, UUID uuid, boolean createNew);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all users currently stored in the database.
|
* Get all users currently stored in the database.
|
||||||
*
|
*
|
||||||
@@ -119,19 +95,10 @@ public interface DatabaseManager {
|
|||||||
*/
|
*/
|
||||||
public void convertUsers(DatabaseManager destination);
|
public void convertUsers(DatabaseManager destination);
|
||||||
|
|
||||||
public boolean saveUserUUID(String userName, UUID uuid);
|
|
||||||
|
|
||||||
public boolean saveUserUUIDs(Map<String, UUID> fetchedUUIDs);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the type of database in use. Custom databases should return CUSTOM.
|
* Retrieve the type of database in use. Custom databases should return CUSTOM.
|
||||||
*
|
*
|
||||||
* @return The type of database
|
* @return The type of database
|
||||||
*/
|
*/
|
||||||
public DatabaseType getDatabaseType();
|
public DatabaseType getDatabaseType();
|
||||||
|
|
||||||
/**
|
|
||||||
* Called when the plugin disables
|
|
||||||
*/
|
|
||||||
public void onDisable();
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ package com.gmail.nossr50.database;
|
|||||||
|
|
||||||
import java.io.BufferedReader;
|
import java.io.BufferedReader;
|
||||||
import java.io.BufferedWriter;
|
import java.io.BufferedWriter;
|
||||||
|
import java.io.Closeable;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileReader;
|
import java.io.FileReader;
|
||||||
import java.io.FileWriter;
|
import java.io.FileWriter;
|
||||||
@@ -9,12 +10,10 @@ import java.io.IOException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
import java.util.EnumMap;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import org.bukkit.OfflinePlayer;
|
import org.bukkit.OfflinePlayer;
|
||||||
|
|
||||||
@@ -23,15 +22,10 @@ import com.gmail.nossr50.config.Config;
|
|||||||
import com.gmail.nossr50.datatypes.MobHealthbarType;
|
import com.gmail.nossr50.datatypes.MobHealthbarType;
|
||||||
import com.gmail.nossr50.datatypes.database.DatabaseType;
|
import com.gmail.nossr50.datatypes.database.DatabaseType;
|
||||||
import com.gmail.nossr50.datatypes.database.PlayerStat;
|
import com.gmail.nossr50.datatypes.database.PlayerStat;
|
||||||
import com.gmail.nossr50.datatypes.database.UpgradeType;
|
|
||||||
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
import com.gmail.nossr50.datatypes.player.PlayerProfile;
|
||||||
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.runnables.database.UUIDUpdateAsyncTask;
|
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.StringUtils;
|
|
||||||
|
|
||||||
import org.apache.commons.lang.ArrayUtils;
|
|
||||||
|
|
||||||
public final class FlatfileDatabaseManager implements DatabaseManager {
|
public final class FlatfileDatabaseManager implements DatabaseManager {
|
||||||
private final HashMap<SkillType, List<PlayerStat>> playerStatHash = new HashMap<SkillType, List<PlayerStat>>();
|
private final HashMap<SkillType, List<PlayerStat>> playerStatHash = new HashMap<SkillType, List<PlayerStat>>();
|
||||||
@@ -46,10 +40,6 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
usersFile = new File(mcMMO.getUsersFilePath());
|
usersFile = new File(mcMMO.getUsersFilePath());
|
||||||
checkStructure();
|
checkStructure();
|
||||||
updateLeaderboards();
|
updateLeaderboards();
|
||||||
|
|
||||||
if (mcMMO.getUpgradeManager().shouldUpgrade(UpgradeType.ADD_UUIDS)) {
|
|
||||||
new UUIDUpdateAsyncTask(mcMMO.p, getStoredUsers()).runTaskAsynchronously(mcMMO.p);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void purgePowerlessUsers() {
|
public void purgePowerlessUsers() {
|
||||||
@@ -98,22 +88,8 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
mcMMO.p.getLogger().severe("Exception while reading " + usersFilePath + " (Are you sure you formatted it correctly?)" + e.toString());
|
mcMMO.p.getLogger().severe("Exception while reading " + usersFilePath + " (Are you sure you formatted it correctly?)" + e.toString());
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (in != null) {
|
tryClose(in);
|
||||||
try {
|
tryClose(out);
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (out != null) {
|
|
||||||
try {
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -178,22 +154,8 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
mcMMO.p.getLogger().severe("Exception while reading " + usersFilePath + " (Are you sure you formatted it correctly?)" + e.toString());
|
mcMMO.p.getLogger().severe("Exception while reading " + usersFilePath + " (Are you sure you formatted it correctly?)" + e.toString());
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (in != null) {
|
tryClose(in);
|
||||||
try {
|
tryClose(out);
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (out != null) {
|
|
||||||
try {
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -231,22 +193,8 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
mcMMO.p.getLogger().severe("Exception while reading " + usersFilePath + " (Are you sure you formatted it correctly?)" + e.toString());
|
mcMMO.p.getLogger().severe("Exception while reading " + usersFilePath + " (Are you sure you formatted it correctly?)" + e.toString());
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (in != null) {
|
tryClose(in);
|
||||||
try {
|
tryClose(out);
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (out != null) {
|
|
||||||
try {
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,7 +205,6 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
|
|
||||||
public boolean saveUser(PlayerProfile profile) {
|
public boolean saveUser(PlayerProfile profile) {
|
||||||
String playerName = profile.getPlayerName();
|
String playerName = profile.getPlayerName();
|
||||||
UUID uuid = profile.getUniqueId();
|
|
||||||
|
|
||||||
BufferedReader in = null;
|
BufferedReader in = null;
|
||||||
FileWriter out = null;
|
FileWriter out = null;
|
||||||
@@ -272,9 +219,8 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
|
|
||||||
// While not at the end of the file
|
// While not at the end of the file
|
||||||
while ((line = in.readLine()) != null) {
|
while ((line = in.readLine()) != null) {
|
||||||
// Read the line in and copy it to the output if it's not the player we want to edit
|
// Read the line in and copy it to the output it's not the player we want to edit
|
||||||
String[] character = line.split(":");
|
if (!line.split(":")[0].equalsIgnoreCase(playerName)) {
|
||||||
if (!character[41].equalsIgnoreCase(uuid.toString()) && !character[0].equalsIgnoreCase(playerName)) {
|
|
||||||
writer.append(line).append("\r\n");
|
writer.append(line).append("\r\n");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@@ -321,7 +267,6 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
writer.append(mobHealthbarType == null ? Config.getInstance().getMobHealthbarDefault().toString() : mobHealthbarType.toString()).append(":");
|
writer.append(mobHealthbarType == null ? Config.getInstance().getMobHealthbarDefault().toString() : mobHealthbarType.toString()).append(":");
|
||||||
writer.append(profile.getSkillLevel(SkillType.ALCHEMY)).append(":");
|
writer.append(profile.getSkillLevel(SkillType.ALCHEMY)).append(":");
|
||||||
writer.append(profile.getSkillXpLevel(SkillType.ALCHEMY)).append(":");
|
writer.append(profile.getSkillXpLevel(SkillType.ALCHEMY)).append(":");
|
||||||
writer.append(uuid.toString()).append(":");
|
|
||||||
writer.append("\r\n");
|
writer.append("\r\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -336,22 +281,8 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (in != null) {
|
tryClose(in);
|
||||||
try {
|
tryClose(out);
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (out != null) {
|
|
||||||
try {
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -367,7 +298,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
public Map<SkillType, Integer> readRank(String playerName) {
|
public Map<SkillType, Integer> readRank(String playerName) {
|
||||||
updateLeaderboards();
|
updateLeaderboards();
|
||||||
|
|
||||||
Map<SkillType, Integer> skills = new EnumMap<SkillType, Integer>(SkillType.class);
|
Map<SkillType, Integer> skills = new HashMap<SkillType, Integer>();
|
||||||
|
|
||||||
for (SkillType skill : SkillType.NON_CHILD_SKILLS) {
|
for (SkillType skill : SkillType.NON_CHILD_SKILLS) {
|
||||||
skills.put(skill, getPlayerRank(playerName, playerStatHash.get(skill)));
|
skills.put(skill, getPlayerRank(playerName, playerStatHash.get(skill)));
|
||||||
@@ -378,7 +309,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
return skills;
|
return skills;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void newUser(String playerName, String uuid) {
|
public void newUser(String playerName) {
|
||||||
BufferedWriter out = null;
|
BufferedWriter out = null;
|
||||||
synchronized (fileWritingLock) {
|
synchronized (fileWritingLock) {
|
||||||
try {
|
try {
|
||||||
@@ -427,8 +358,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
out.append(Config.getInstance().getMobHealthbarDefault().toString()).append(":"); // Mob Healthbar HUD
|
out.append(Config.getInstance().getMobHealthbarDefault().toString()).append(":"); // Mob Healthbar HUD
|
||||||
out.append("0:"); // Alchemy
|
out.append("0:"); // Alchemy
|
||||||
out.append("0:"); // AlchemyXp
|
out.append("0:"); // AlchemyXp
|
||||||
out.append(uuid).append(":"); // UUID
|
|
||||||
|
|
||||||
// Add more in the same format as the line above
|
// Add more in the same format as the line above
|
||||||
|
|
||||||
out.newLine();
|
out.newLine();
|
||||||
@@ -437,32 +367,12 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (out != null) {
|
tryClose(out);
|
||||||
try {
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public PlayerProfile loadPlayerProfile(String playerName, boolean create) {
|
public PlayerProfile loadPlayerProfile(String playerName, boolean create) {
|
||||||
return loadPlayerProfile(playerName, "", false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlayerProfile loadPlayerProfile(UUID uuid) {
|
|
||||||
return loadPlayerProfile("", uuid.toString(), false);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlayerProfile loadPlayerProfile(String playerName, UUID uuid, boolean create) {
|
|
||||||
return loadPlayerProfile(playerName, uuid.toString(), create);
|
|
||||||
}
|
|
||||||
|
|
||||||
private PlayerProfile loadPlayerProfile(String playerName, String uuid, boolean create) {
|
|
||||||
BufferedReader in = null;
|
BufferedReader in = null;
|
||||||
String usersFilePath = mcMMO.getUsersFilePath();
|
String usersFilePath = mcMMO.getUsersFilePath();
|
||||||
|
|
||||||
@@ -476,14 +386,8 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
// Find if the line contains the player we want.
|
// Find if the line contains the player we want.
|
||||||
String[] character = line.split(":");
|
String[] character = line.split(":");
|
||||||
|
|
||||||
if (!character[41].equalsIgnoreCase(uuid) && !character[0].equalsIgnoreCase(playerName)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Update playerName in database after name change
|
|
||||||
if (!character[0].equalsIgnoreCase(playerName)) {
|
if (!character[0].equalsIgnoreCase(playerName)) {
|
||||||
mcMMO.p.debug("Name change detected: " + character[0] + " => " + playerName);
|
continue;
|
||||||
character[0] = playerName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return loadFromLine(character);
|
return loadFromLine(character);
|
||||||
@@ -491,13 +395,8 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
|
|
||||||
// Didn't find the player, create a new one
|
// Didn't find the player, create a new one
|
||||||
if (create) {
|
if (create) {
|
||||||
if (uuid.isEmpty()) {
|
newUser(playerName);
|
||||||
newUser(playerName, uuid);
|
return new PlayerProfile(playerName, true);
|
||||||
return new PlayerProfile(playerName, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
newUser(playerName, uuid);
|
|
||||||
return new PlayerProfile(playerName, UUID.fromString(uuid), true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception e) {
|
catch (Exception e) {
|
||||||
@@ -511,18 +410,14 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
in.close();
|
in.close();
|
||||||
}
|
}
|
||||||
catch (IOException e) {
|
catch (IOException e) {
|
||||||
// Ignore
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return unloaded profile
|
// Return unloaded profile
|
||||||
if (uuid.isEmpty()) {
|
return new PlayerProfile(playerName);
|
||||||
return new PlayerProfile(playerName);
|
|
||||||
}
|
|
||||||
|
|
||||||
return new PlayerProfile(playerName, UUID.fromString(uuid));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void convertUsers(DatabaseManager destination) {
|
public void convertUsers(DatabaseManager destination) {
|
||||||
@@ -554,131 +449,11 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (in != null) {
|
tryClose(in);
|
||||||
try {
|
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean saveUserUUID(String userName, UUID uuid) {
|
|
||||||
boolean worked = false;
|
|
||||||
|
|
||||||
BufferedReader in = null;
|
|
||||||
FileWriter out = null;
|
|
||||||
String usersFilePath = mcMMO.getUsersFilePath();
|
|
||||||
|
|
||||||
synchronized (fileWritingLock) {
|
|
||||||
try {
|
|
||||||
in = new BufferedReader(new FileReader(usersFilePath));
|
|
||||||
StringBuilder writer = new StringBuilder();
|
|
||||||
String line;
|
|
||||||
|
|
||||||
while ((line = in.readLine()) != null) {
|
|
||||||
String[] character = line.split(":");
|
|
||||||
if (!worked && character[0].equalsIgnoreCase(userName)) {
|
|
||||||
if (character.length < 42) {
|
|
||||||
mcMMO.p.getLogger().severe("Could not update UUID for " + userName + "!");
|
|
||||||
mcMMO.p.getLogger().severe("Database entry is invalid.");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
line = line.replace(character[41], uuid.toString());
|
|
||||||
worked = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.append(line).append("\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
out = new FileWriter(usersFilePath); // Write out the new file
|
|
||||||
out.write(writer.toString());
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
mcMMO.p.getLogger().severe("Exception while reading " + usersFilePath + " (Are you sure you formatted it correctly?)" + e.toString());
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
if (in != null) {
|
|
||||||
try {
|
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (out != null) {
|
|
||||||
try {
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return worked;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean saveUserUUIDs(Map<String, UUID> fetchedUUIDs) {
|
|
||||||
BufferedReader in = null;
|
|
||||||
FileWriter out = null;
|
|
||||||
String usersFilePath = mcMMO.getUsersFilePath();
|
|
||||||
|
|
||||||
synchronized (fileWritingLock) {
|
|
||||||
try {
|
|
||||||
in = new BufferedReader(new FileReader(usersFilePath));
|
|
||||||
StringBuilder writer = new StringBuilder();
|
|
||||||
String line;
|
|
||||||
|
|
||||||
while (((line = in.readLine()) != null) && !fetchedUUIDs.isEmpty()) {
|
|
||||||
String[] character = line.split(":");
|
|
||||||
if (fetchedUUIDs.containsKey(character[0])) {
|
|
||||||
if (character.length < 42) {
|
|
||||||
mcMMO.p.getLogger().severe("Could not update UUID for " + character[0] + "!");
|
|
||||||
mcMMO.p.getLogger().severe("Database entry is invalid.");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
line = line.replace(character[41], fetchedUUIDs.remove(character[0]).toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
writer.append(line).append("\r\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
out = new FileWriter(usersFilePath); // Write out the new file
|
|
||||||
out.write(writer.toString());
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
mcMMO.p.getLogger().severe("Exception while reading " + usersFilePath + " (Are you sure you formatted it correctly?)" + e.toString());
|
|
||||||
}
|
|
||||||
finally {
|
|
||||||
if (in != null) {
|
|
||||||
try {
|
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (out != null) {
|
|
||||||
try {
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
public List<String> getStoredUsers() {
|
public List<String> getStoredUsers() {
|
||||||
ArrayList<String> users = new ArrayList<String>();
|
ArrayList<String> users = new ArrayList<String>();
|
||||||
BufferedReader in = null;
|
BufferedReader in = null;
|
||||||
@@ -699,14 +474,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (in != null) {
|
tryClose(in);
|
||||||
try {
|
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return users;
|
return users;
|
||||||
@@ -776,14 +544,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
mcMMO.p.getLogger().severe("Exception while reading " + usersFilePath + " during user " + playerName + " (Are you sure you formatted it correctly?) " + e.toString());
|
mcMMO.p.getLogger().severe("Exception while reading " + usersFilePath + " during user " + playerName + " (Are you sure you formatted it correctly?) " + e.toString());
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (in != null) {
|
tryClose(in);
|
||||||
try {
|
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -833,7 +594,6 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
in = new BufferedReader(new FileReader(usersFilePath));
|
in = new BufferedReader(new FileReader(usersFilePath));
|
||||||
StringBuilder writer = new StringBuilder();
|
StringBuilder writer = new StringBuilder();
|
||||||
String line;
|
String line;
|
||||||
HashSet<String> usernames = new HashSet<String>();
|
|
||||||
HashSet<String> players = new HashSet<String>();
|
HashSet<String> players = new HashSet<String>();
|
||||||
|
|
||||||
while ((line = in.readLine()) != null) {
|
while ((line = in.readLine()) != null) {
|
||||||
@@ -844,17 +604,12 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
|
|
||||||
// Length checks depend on last character being ':'
|
// Length checks depend on last character being ':'
|
||||||
if (line.charAt(line.length() - 1) != ':') {
|
if (line.charAt(line.length() - 1) != ':') {
|
||||||
line = line.concat(":");
|
line = line + ":";
|
||||||
}
|
}
|
||||||
String[] character = line.split(":");
|
String[] character = line.split(":");
|
||||||
|
|
||||||
// Prevent the same username from being present multiple times
|
|
||||||
if (!usernames.add(character[0])) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prevent the same player from being present multiple times
|
// Prevent the same player from being present multiple times
|
||||||
if (character.length == 42 && (!character[41].isEmpty() && !players.add(character[41]))) {
|
if (!players.add(character[0])) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -866,33 +621,29 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
|
|
||||||
String oldVersion = null;
|
String oldVersion = null;
|
||||||
|
|
||||||
if (character.length <= 33) {
|
|
||||||
// Introduction of HUDType
|
|
||||||
// Version 1.1.06
|
|
||||||
// commit 78f79213cdd7190cd11ae54526f3b4ea42078e8a
|
|
||||||
line = line.concat(" :");
|
|
||||||
character = line.split(":");
|
|
||||||
oldVersion = "1.1.06";
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!character[33].isEmpty()) {
|
if (!character[33].isEmpty()) {
|
||||||
// Removal of Spout Support
|
// Removal of Spout Support
|
||||||
// Version 1.4.07-dev2
|
// Version 1.4.07-dev2
|
||||||
// commit 7bac0e2ca5143bce84dc160617fed97f0b1cb968
|
// commit 7bac0e2ca5143bce84dc160617fed97f0b1cb968
|
||||||
line = line.replace(character[33], "");
|
line = line.replace(character[33], "");
|
||||||
if (oldVersion == null) {
|
oldVersion = "1.4.07";
|
||||||
oldVersion = "1.4.07";
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// If they're valid, rewrite them to the file.
|
// If they're valid, rewrite them to the file.
|
||||||
if (character.length == 42) {
|
if (character.length > 40) {
|
||||||
writer.append(line).append("\r\n");
|
writer.append(line).append("\r\n");
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
StringBuilder newLine = new StringBuilder(line);
|
StringBuilder newLine = new StringBuilder(line);
|
||||||
|
|
||||||
|
if (character.length <= 33) {
|
||||||
|
// Introduction of HUDType
|
||||||
|
// Version 1.1.06
|
||||||
|
// commit 78f79213cdd7190cd11ae54526f3b4ea42078e8a
|
||||||
|
newLine.append(":");
|
||||||
|
oldVersion = "1.1.06";
|
||||||
|
}
|
||||||
if (character.length <= 35) {
|
if (character.length <= 35) {
|
||||||
// Introduction of Fishing
|
// Introduction of Fishing
|
||||||
// Version 1.2.00
|
// Version 1.2.00
|
||||||
@@ -931,7 +682,7 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
oldVersion = "1.4.06";
|
oldVersion = "1.4.06";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (character.length <= 39) {
|
if (character.length <= 40) {
|
||||||
// Addition of Alchemy
|
// Addition of Alchemy
|
||||||
// Version 1.4.08
|
// Version 1.4.08
|
||||||
newLine.append("0").append(":");
|
newLine.append("0").append(":");
|
||||||
@@ -940,62 +691,9 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
oldVersion = "1.4.08";
|
oldVersion = "1.4.08";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (character.length <= 41) {
|
|
||||||
// Addition of UUIDs
|
|
||||||
// Version 1.5.01
|
|
||||||
// Add a space because otherwise it gets removed
|
|
||||||
newLine.append(" :");
|
|
||||||
if (oldVersion == null) {
|
|
||||||
oldVersion = "1.5.01";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove any blanks that shouldn't be there, and validate the other fields
|
|
||||||
String[] newCharacter = newLine.toString().split(":");
|
|
||||||
boolean corrupted = false;
|
|
||||||
|
|
||||||
for (int i = 0; i < newCharacter.length; i++) {
|
|
||||||
if (newCharacter[i].isEmpty() && !(i == 2 || i == 3 || i == 23 || i == 33 || i == 41)) {
|
|
||||||
corrupted = true;
|
|
||||||
|
|
||||||
if (newCharacter.length != 42) {
|
|
||||||
newCharacter = (String[]) ArrayUtils.remove(newCharacter, i);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (i == 37) {
|
|
||||||
newCharacter[i] = String.valueOf(System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
|
|
||||||
}
|
|
||||||
else if (i == 38) {
|
|
||||||
newCharacter[i] = Config.getInstance().getMobHealthbarDefault().toString();
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
newCharacter[i] = "0";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (StringUtils.isInt(newCharacter[i]) && i == 38) {
|
|
||||||
corrupted = true;
|
|
||||||
newCharacter[i] = Config.getInstance().getMobHealthbarDefault().toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!StringUtils.isInt(newCharacter[i]) && !(i == 0 || i == 2 || i == 3 || i == 23 || i == 33 || i == 38 || i == 41)) {
|
|
||||||
corrupted = true;
|
|
||||||
newCharacter[i] = "0";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (corrupted) {
|
|
||||||
mcMMO.p.debug("Updating corrupted database line for player " + newCharacter[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (oldVersion != null) {
|
if (oldVersion != null) {
|
||||||
mcMMO.p.debug("Updating database line from before version " + oldVersion + " for player " + character[0]);
|
mcMMO.p.debug("Updating database line for player " + character[0] + " from before version " + oldVersion);
|
||||||
}
|
|
||||||
|
|
||||||
if (corrupted || oldVersion != null) {
|
|
||||||
newLine = new StringBuilder(org.apache.commons.lang.StringUtils.join(newCharacter, ":"));
|
|
||||||
newLine = newLine.append(":");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
writer.append(newLine).append("\r\n");
|
writer.append(newLine).append("\r\n");
|
||||||
@@ -1009,32 +707,10 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
mcMMO.p.getLogger().severe("Exception while reading " + usersFilePath + " (Are you sure you formatted it correctly?)" + e.toString());
|
mcMMO.p.getLogger().severe("Exception while reading " + usersFilePath + " (Are you sure you formatted it correctly?)" + e.toString());
|
||||||
}
|
}
|
||||||
finally {
|
finally {
|
||||||
if (in != null) {
|
tryClose(in);
|
||||||
try {
|
tryClose(out);
|
||||||
in.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (out != null) {
|
|
||||||
try {
|
|
||||||
out.close();
|
|
||||||
}
|
|
||||||
catch (IOException e) {
|
|
||||||
// Ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mcMMO.getUpgradeManager().setUpgradeCompleted(UpgradeType.ADD_FISHING);
|
|
||||||
mcMMO.getUpgradeManager().setUpgradeCompleted(UpgradeType.ADD_BLAST_MINING_COOLDOWN);
|
|
||||||
mcMMO.getUpgradeManager().setUpgradeCompleted(UpgradeType.ADD_SQL_INDEXES);
|
|
||||||
mcMMO.getUpgradeManager().setUpgradeCompleted(UpgradeType.ADD_MOB_HEALTHBARS);
|
|
||||||
mcMMO.getUpgradeManager().setUpgradeCompleted(UpgradeType.DROP_SQL_PARTY_NAMES);
|
|
||||||
mcMMO.getUpgradeManager().setUpgradeCompleted(UpgradeType.DROP_SPOUT);
|
|
||||||
mcMMO.getUpgradeManager().setUpgradeCompleted(UpgradeType.ADD_ALCHEMY);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1049,6 +725,18 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void tryClose(Closeable c) {
|
||||||
|
if (c == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
c.close();
|
||||||
|
}
|
||||||
|
catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private Integer getPlayerRank(String playerName, List<PlayerStat> statsList) {
|
private Integer getPlayerRank(String playerName, List<PlayerStat> statsList) {
|
||||||
if (statsList == null) {
|
if (statsList == null) {
|
||||||
return null;
|
return null;
|
||||||
@@ -1079,10 +767,10 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private PlayerProfile loadFromLine(String[] character) {
|
private PlayerProfile loadFromLine(String[] character) throws Exception {
|
||||||
Map<SkillType, Integer> skills = getSkillMapFromLine(character); // Skill levels
|
Map<SkillType, Integer> skills = getSkillMapFromLine(character); // Skill levels
|
||||||
Map<SkillType, Float> skillsXp = new EnumMap<SkillType, Float>(SkillType.class); // Skill & XP
|
Map<SkillType, Float> skillsXp = new HashMap<SkillType, Float>(); // Skill & XP
|
||||||
Map<AbilityType, Integer> skillsDATS = new EnumMap<AbilityType, Integer>(AbilityType.class); // Ability & Cooldown
|
Map<AbilityType, Integer> skillsDATS = new HashMap<AbilityType, Integer>(); // Ability & Cooldown
|
||||||
MobHealthbarType mobHealthbarType;
|
MobHealthbarType mobHealthbarType;
|
||||||
|
|
||||||
// TODO on updates, put new values in a try{} ?
|
// TODO on updates, put new values in a try{} ?
|
||||||
@@ -1121,19 +809,11 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
mobHealthbarType = Config.getInstance().getMobHealthbarDefault();
|
mobHealthbarType = Config.getInstance().getMobHealthbarDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
UUID uuid;
|
return new PlayerProfile(character[0], skills, skillsXp, skillsDATS, mobHealthbarType);
|
||||||
try {
|
|
||||||
uuid = UUID.fromString(character[41]);
|
|
||||||
}
|
|
||||||
catch (Exception e) {
|
|
||||||
uuid = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
return new PlayerProfile(character[0], uuid, skills, skillsXp, skillsDATS, mobHealthbarType);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<SkillType, Integer> getSkillMapFromLine(String[] character) {
|
private Map<SkillType, Integer> getSkillMapFromLine(String[] character) {
|
||||||
Map<SkillType, Integer> skills = new EnumMap<SkillType, Integer>(SkillType.class); // Skill & Level
|
Map<SkillType, Integer> skills = new HashMap<SkillType, Integer>(); // Skill & Level
|
||||||
|
|
||||||
skills.put(SkillType.TAMING, Integer.valueOf(character[24]));
|
skills.put(SkillType.TAMING, Integer.valueOf(character[24]));
|
||||||
skills.put(SkillType.MINING, Integer.valueOf(character[1]));
|
skills.put(SkillType.MINING, Integer.valueOf(character[1]));
|
||||||
@@ -1155,7 +835,4 @@ public final class FlatfileDatabaseManager implements DatabaseManager {
|
|||||||
public DatabaseType getDatabaseType() {
|
public DatabaseType getDatabaseType() {
|
||||||
return DatabaseType.FLATFILE;
|
return DatabaseType.FLATFILE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onDisable() { }
|
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,13 @@
|
|||||||
|
package com.gmail.nossr50.datatypes.database;
|
||||||
|
|
||||||
|
public enum DatabaseUpdateType {
|
||||||
|
FISHING,
|
||||||
|
BLAST_MINING,
|
||||||
|
INDEX,
|
||||||
|
MOB_HEALTHBARS,
|
||||||
|
PARTY_NAMES,
|
||||||
|
KILL_ORPHANS,
|
||||||
|
DROPPED_SPOUT,
|
||||||
|
ALCHEMY
|
||||||
|
;
|
||||||
|
}
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
package com.gmail.nossr50.datatypes.database;
|
|
||||||
|
|
||||||
public enum UpgradeType {
|
|
||||||
ADD_FISHING,
|
|
||||||
ADD_BLAST_MINING_COOLDOWN,
|
|
||||||
ADD_SQL_INDEXES,
|
|
||||||
ADD_MOB_HEALTHBARS,
|
|
||||||
DROP_SQL_PARTY_NAMES,
|
|
||||||
DROP_SPOUT,
|
|
||||||
ADD_ALCHEMY,
|
|
||||||
ADD_UUIDS;
|
|
||||||
}
|
|
||||||
@@ -7,7 +7,6 @@ import java.util.List;
|
|||||||
|
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Sound;
|
import org.bukkit.Sound;
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
@@ -84,19 +83,6 @@ public class Party {
|
|||||||
return onlineMembers;
|
return onlineMembers;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<String> getOnlinePlayerNames(CommandSender sender) {
|
|
||||||
Player player = sender instanceof Player ? (Player) sender : null;
|
|
||||||
List<String> onlinePlayerNames = new ArrayList<String>();
|
|
||||||
|
|
||||||
for (Player onlinePlayer : getOnlineMembers()) {
|
|
||||||
if (player != null && player.canSee(onlinePlayer)) {
|
|
||||||
onlinePlayerNames.add(onlinePlayer.getName());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return onlinePlayerNames;
|
|
||||||
}
|
|
||||||
|
|
||||||
public String getName() {
|
public String getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
@@ -185,7 +171,7 @@ public class Party {
|
|||||||
|
|
||||||
public String getXpToLevelPercentage() {
|
public String getXpToLevelPercentage() {
|
||||||
DecimalFormat percent = new DecimalFormat("##0.00%");
|
DecimalFormat percent = new DecimalFormat("##0.00%");
|
||||||
return percent.format(this.getXp() / getXpToLevel());
|
return percent.format( this.getXp() / getXpToLevel());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -351,4 +337,9 @@ public class Party {
|
|||||||
|
|
||||||
return this.getName().equals(other.getName());
|
return this.getName().equals(other.getName());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
return super.hashCode();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.gmail.nossr50.datatypes.player;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
@@ -25,7 +24,6 @@ import com.gmail.nossr50.datatypes.party.PartyTeleportRecord;
|
|||||||
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.ToolType;
|
import com.gmail.nossr50.datatypes.skills.ToolType;
|
||||||
import com.gmail.nossr50.datatypes.skills.XPGainReason;
|
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
import com.gmail.nossr50.party.PartyManager;
|
import com.gmail.nossr50.party.PartyManager;
|
||||||
import com.gmail.nossr50.party.ShareHandler;
|
import com.gmail.nossr50.party.ShareHandler;
|
||||||
@@ -42,7 +40,6 @@ import com.gmail.nossr50.skills.fishing.FishingManager;
|
|||||||
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
|
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
|
||||||
import com.gmail.nossr50.skills.mining.MiningManager;
|
import com.gmail.nossr50.skills.mining.MiningManager;
|
||||||
import com.gmail.nossr50.skills.repair.RepairManager;
|
import com.gmail.nossr50.skills.repair.RepairManager;
|
||||||
import com.gmail.nossr50.skills.salvage.SalvageManager;
|
|
||||||
import com.gmail.nossr50.skills.smelting.SmeltingManager;
|
import com.gmail.nossr50.skills.smelting.SmeltingManager;
|
||||||
import com.gmail.nossr50.skills.swords.SwordsManager;
|
import com.gmail.nossr50.skills.swords.SwordsManager;
|
||||||
import com.gmail.nossr50.skills.taming.TamingManager;
|
import com.gmail.nossr50.skills.taming.TamingManager;
|
||||||
@@ -78,10 +75,14 @@ public class McMMOPlayer {
|
|||||||
private boolean abilityUse = true;
|
private boolean abilityUse = true;
|
||||||
private boolean godMode;
|
private boolean godMode;
|
||||||
|
|
||||||
|
private Sound recentSound;
|
||||||
|
private int lastSound;
|
||||||
|
|
||||||
private final Map<AbilityType, Boolean> abilityMode = new HashMap<AbilityType, Boolean>();
|
private final Map<AbilityType, Boolean> abilityMode = new HashMap<AbilityType, Boolean>();
|
||||||
private final Map<AbilityType, Boolean> abilityInformed = new HashMap<AbilityType, Boolean>();
|
private final Map<AbilityType, Boolean> abilityInformed = new HashMap<AbilityType, Boolean>();
|
||||||
|
|
||||||
private final Map<ToolType, Boolean> toolMode = new HashMap<ToolType, Boolean>();
|
private final Map<ToolType, Boolean> toolMode = new HashMap<ToolType, Boolean>();
|
||||||
|
private final Map<ToolType, Integer> toolATS = new HashMap<ToolType, Integer>();
|
||||||
|
|
||||||
private int recentlyHurt;
|
private int recentlyHurt;
|
||||||
private int respawnATS;
|
private int respawnATS;
|
||||||
@@ -93,20 +94,15 @@ public class McMMOPlayer {
|
|||||||
private boolean isUsingUnarmed;
|
private boolean isUsingUnarmed;
|
||||||
private final FixedMetadataValue playerMetadata;
|
private final FixedMetadataValue playerMetadata;
|
||||||
|
|
||||||
public McMMOPlayer(Player player, PlayerProfile profile) {
|
public McMMOPlayer(Player player) {
|
||||||
String playerName = player.getName();
|
String playerName = player.getName();
|
||||||
UUID uuid = player.getUniqueId();
|
|
||||||
|
|
||||||
this.player = player;
|
this.player = player;
|
||||||
playerMetadata = new FixedMetadataValue(mcMMO.p, playerName);
|
playerMetadata = new FixedMetadataValue(mcMMO.p, playerName);
|
||||||
this.profile = profile;
|
profile = mcMMO.getDatabaseManager().loadPlayerProfile(playerName, true);
|
||||||
party = PartyManager.getPlayerParty(playerName);
|
party = PartyManager.getPlayerParty(playerName);
|
||||||
ptpRecord = new PartyTeleportRecord();
|
ptpRecord = new PartyTeleportRecord();
|
||||||
|
|
||||||
if (profile.getUniqueId() == null) {
|
|
||||||
profile.setUniqueId(uuid);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* I'm using this method because it makes code shorter and safer (we don't have to add all SkillTypes manually),
|
* I'm using this method because it makes code shorter and safer (we don't have to add all SkillTypes manually),
|
||||||
* but I actually have no idea about the performance impact, if there is any.
|
* but I actually have no idea about the performance impact, if there is any.
|
||||||
@@ -129,6 +125,70 @@ public class McMMOPlayer {
|
|||||||
|
|
||||||
for (ToolType toolType : ToolType.values()) {
|
for (ToolType toolType : ToolType.values()) {
|
||||||
toolMode.put(toolType, false);
|
toolMode.put(toolType, false);
|
||||||
|
toolATS.put(toolType, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!profile.isLoaded()) {
|
||||||
|
mcMMO.p.getLogger().warning("Unable to load the PlayerProfile for " + playerName + ". Will retry over the next several seconds.");
|
||||||
|
new RetryProfileLoadingTask().runTaskTimerAsynchronously(mcMMO.p, 11L, 31L);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class RetryProfileLoadingTask extends BukkitRunnable {
|
||||||
|
private static final int MAX_TRIES = 5;
|
||||||
|
private final String playerName = McMMOPlayer.this.player.getName();
|
||||||
|
private int attempt = 0;
|
||||||
|
|
||||||
|
// WARNING: ASYNC TASK
|
||||||
|
// DO NOT MODIFY THE McMMOPLAYER FROM THIS CODE
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
// Quit if they logged out
|
||||||
|
if (!player.isOnline()) {
|
||||||
|
mcMMO.p.getLogger().info("Aborting profile loading recovery for " + playerName + " - player logged out");
|
||||||
|
this.cancel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Send the message that we're doing the recovery
|
||||||
|
if (attempt == 0) {
|
||||||
|
player.sendMessage(LocaleLoader.getString("Recovery.Notice"));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Increment attempt counter and try
|
||||||
|
attempt++;
|
||||||
|
PlayerProfile profile = mcMMO.getDatabaseManager().loadPlayerProfile(playerName, true);
|
||||||
|
// If successful, schedule the apply
|
||||||
|
if (profile.isLoaded()) {
|
||||||
|
new ApplySuccessfulProfile(profile).runTask(mcMMO.p);
|
||||||
|
player.sendMessage(LocaleLoader.getString("Recovery.Success"));
|
||||||
|
this.cancel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// If we've failed five times, give up
|
||||||
|
if (attempt >= MAX_TRIES) {
|
||||||
|
mcMMO.p.getLogger().severe("Giving up on attempting to load the PlayerProfile for " + playerName);
|
||||||
|
mcMMO.p.getServer().broadcast(LocaleLoader.getString("Recovery.AdminFailureNotice", playerName), Server.BROADCAST_CHANNEL_ADMINISTRATIVE);
|
||||||
|
player.sendMessage(LocaleLoader.getString("Recovery.Failure").split("\n"));
|
||||||
|
this.cancel();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class ApplySuccessfulProfile extends BukkitRunnable {
|
||||||
|
private final PlayerProfile profile;
|
||||||
|
|
||||||
|
private ApplySuccessfulProfile(PlayerProfile profile) {
|
||||||
|
this.profile = profile;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Synchronized task
|
||||||
|
// No database access permitted
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
McMMOPlayer.this.profile = profile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -168,10 +228,6 @@ public class McMMOPlayer {
|
|||||||
return (RepairManager) skillManagers.get(SkillType.REPAIR);
|
return (RepairManager) skillManagers.get(SkillType.REPAIR);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SalvageManager getSalvageManager() {
|
|
||||||
return (SalvageManager) skillManagers.get(SkillType.SALVAGE);
|
|
||||||
}
|
|
||||||
|
|
||||||
public SmeltingManager getSmeltingManager() {
|
public SmeltingManager getSmeltingManager() {
|
||||||
return (SmeltingManager) skillManagers.get(SkillType.SMELTING);
|
return (SmeltingManager) skillManagers.get(SkillType.SMELTING);
|
||||||
}
|
}
|
||||||
@@ -287,6 +343,28 @@ public class McMMOPlayer {
|
|||||||
toolMode.put(tool, isPrepared);
|
toolMode.put(tool, isPrepared);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the current prep ATS of a tool.
|
||||||
|
*
|
||||||
|
* @param tool Tool to get the ATS for
|
||||||
|
* @return the ATS for the tool
|
||||||
|
*/
|
||||||
|
public long getToolPreparationATS(ToolType tool) {
|
||||||
|
return toolATS.get(tool);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the current prep ATS of a tool.
|
||||||
|
*
|
||||||
|
* @param tool Tool to set the ATS for
|
||||||
|
* @param ATS the ATS of the tool
|
||||||
|
*/
|
||||||
|
public void setToolPreparationATS(ToolType tool, long ATS) {
|
||||||
|
int startTime = (int) (ATS / Misc.TIME_CONVERSION_FACTOR);
|
||||||
|
|
||||||
|
toolATS.put(tool, startTime);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Recently Hurt
|
* Recently Hurt
|
||||||
*/
|
*/
|
||||||
@@ -367,6 +445,50 @@ public class McMMOPlayer {
|
|||||||
godMode = !godMode;
|
godMode = !godMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sounds
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Play a sound at the players location.
|
||||||
|
* Sound will only get played if it's different
|
||||||
|
* compared to the previously played sound or if the cooldown has expired.
|
||||||
|
*
|
||||||
|
* @param sound The Sound to play
|
||||||
|
* @param volume Volume of the sound
|
||||||
|
* @param pitch Pitch of the sound
|
||||||
|
* @param cooldown Cooldown time between sounds
|
||||||
|
*/
|
||||||
|
public void playSound(Sound sound, float volume, float pitch, int cooldown) {
|
||||||
|
if (getRecentSound() == sound && !SkillUtils.cooldownExpired(getLastSound(), 1)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setRecentSound(sound);
|
||||||
|
actualizeLastSound();
|
||||||
|
player.playSound(player.getLocation(), sound, volume, pitch);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void playSound(Sound sound, float volume, float pitch) {
|
||||||
|
playSound(sound, volume, pitch, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Sound getRecentSound() {
|
||||||
|
return recentSound;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setRecentSound(Sound recentSound) {
|
||||||
|
this.recentSound = recentSound;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getLastSound() {
|
||||||
|
return lastSound;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void actualizeLastSound() {
|
||||||
|
lastSound = (int) (System.currentTimeMillis() / Misc.TIME_CONVERSION_FACTOR);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Skill notifications
|
* Skill notifications
|
||||||
*/
|
*/
|
||||||
@@ -402,7 +524,7 @@ public class McMMOPlayer {
|
|||||||
* @param skill Skill being used
|
* @param skill Skill being used
|
||||||
* @param xp Experience amount to process
|
* @param xp Experience amount to process
|
||||||
*/
|
*/
|
||||||
public void beginXpGain(SkillType skill, float xp, XPGainReason xpGainReason) {
|
public void beginXpGain(SkillType skill, float xp) {
|
||||||
Validate.isTrue(xp >= 0.0, "XP gained should be greater than or equal to zero.");
|
Validate.isTrue(xp >= 0.0, "XP gained should be greater than or equal to zero.");
|
||||||
|
|
||||||
if (xp <= 0.0) {
|
if (xp <= 0.0) {
|
||||||
@@ -415,7 +537,7 @@ public class McMMOPlayer {
|
|||||||
|
|
||||||
for (SkillType parentSkill : parentSkills) {
|
for (SkillType parentSkill : parentSkills) {
|
||||||
if (parentSkill.getPermissions(player)) {
|
if (parentSkill.getPermissions(player)) {
|
||||||
beginXpGain(parentSkill, splitXp, xpGainReason);
|
beginXpGain(parentSkill, splitXp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -423,11 +545,11 @@ public class McMMOPlayer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Return if the experience has been shared
|
// Return if the experience has been shared
|
||||||
if (party != null && ShareHandler.handleXpShare(xp, this, skill, ShareHandler.getSharedXpGainReason(xpGainReason))) {
|
if (party != null && ShareHandler.handleXpShare(xp, this, skill)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
beginUnsharedXpGain(skill, xp, xpGainReason);
|
beginUnsharedXpGain(skill, xp);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -436,8 +558,8 @@ public class McMMOPlayer {
|
|||||||
* @param skill Skill being used
|
* @param skill Skill being used
|
||||||
* @param xp Experience amount to process
|
* @param xp Experience amount to process
|
||||||
*/
|
*/
|
||||||
public void beginUnsharedXpGain(SkillType skill, float xp, XPGainReason xpGainReason) {
|
public void beginUnsharedXpGain(SkillType skill, float xp) {
|
||||||
applyXpGain(skill, modifyXpGain(skill, xp), xpGainReason);
|
applyXpGain(skill, modifyXpGain(skill, xp));
|
||||||
|
|
||||||
if (party == null) {
|
if (party == null) {
|
||||||
return;
|
return;
|
||||||
@@ -454,7 +576,7 @@ public class McMMOPlayer {
|
|||||||
* @param skillType Skill being used
|
* @param skillType Skill being used
|
||||||
* @param xp Experience amount to add
|
* @param xp Experience amount to add
|
||||||
*/
|
*/
|
||||||
public void applyXpGain(SkillType skillType, float xp, XPGainReason xpGainReason) {
|
public void applyXpGain(SkillType skillType, float xp) {
|
||||||
if (!skillType.getPermissions(player)) {
|
if (!skillType.getPermissions(player)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -463,18 +585,18 @@ public class McMMOPlayer {
|
|||||||
Set<SkillType> parentSkills = FamilyTree.getParents(skillType);
|
Set<SkillType> parentSkills = FamilyTree.getParents(skillType);
|
||||||
|
|
||||||
for (SkillType parentSkill : parentSkills) {
|
for (SkillType parentSkill : parentSkills) {
|
||||||
applyXpGain(parentSkill, xp / parentSkills.size(), xpGainReason);
|
applyXpGain(parentSkill, xp / parentSkills.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!EventUtils.handleXpGainEvent(player, skillType, xp, xpGainReason)) {
|
if (!EventUtils.handleXpGainEvent(player, skillType, xp)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
isUsingUnarmed = (skillType == SkillType.UNARMED);
|
isUsingUnarmed = (skillType == SkillType.UNARMED);
|
||||||
checkXp(skillType, xpGainReason);
|
checkXp(skillType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -482,7 +604,7 @@ public class McMMOPlayer {
|
|||||||
*
|
*
|
||||||
* @param skillType The skill to check
|
* @param skillType The skill to check
|
||||||
*/
|
*/
|
||||||
private void checkXp(SkillType skillType, XPGainReason xpGainReason) {
|
private void checkXp(SkillType skillType) {
|
||||||
if (getSkillXpLevelRaw(skillType) < getXpToLevel(skillType)) {
|
if (getSkillXpLevelRaw(skillType) < getXpToLevel(skillType)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -500,7 +622,7 @@ public class McMMOPlayer {
|
|||||||
levelsGained++;
|
levelsGained++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!EventUtils.handleLevelChangeEvent(player, skillType, levelsGained, xpRemoved, true, xpGainReason)) {
|
if (!EventUtils.handleLevelChangeEvent(player, skillType, levelsGained, xpRemoved, true)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -519,6 +641,10 @@ public class McMMOPlayer {
|
|||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setPlayer(Player player) {
|
||||||
|
this.player = player;
|
||||||
|
}
|
||||||
|
|
||||||
public PlayerProfile getProfile() {
|
public PlayerProfile getProfile() {
|
||||||
return profile;
|
return profile;
|
||||||
}
|
}
|
||||||
@@ -798,6 +924,7 @@ public class McMMOPlayer {
|
|||||||
player.sendMessage(tool.getRaiseTool());
|
player.sendMessage(tool.getRaiseTool());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setToolPreparationATS(tool, System.currentTimeMillis());
|
||||||
setToolPreparationMode(tool, true);
|
setToolPreparationMode(tool, true);
|
||||||
new ToolLowerTask(this, tool).runTaskLaterAsynchronously(mcMMO.p, 4 * Misc.TICK_CONVERSION_FACTOR);
|
new ToolLowerTask(this, tool).runTaskLaterAsynchronously(mcMMO.p, 4 * Misc.TICK_CONVERSION_FACTOR);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.gmail.nossr50.datatypes.player;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import com.gmail.nossr50.mcMMO;
|
import com.gmail.nossr50.mcMMO;
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
@@ -12,7 +11,6 @@ import com.gmail.nossr50.datatypes.MobHealthbarType;
|
|||||||
import com.gmail.nossr50.datatypes.experience.FormulaType;
|
import com.gmail.nossr50.datatypes.experience.FormulaType;
|
||||||
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
import com.gmail.nossr50.datatypes.skills.AbilityType;
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.runnables.player.PlayerProfileSaveTask;
|
|
||||||
import com.gmail.nossr50.skills.child.FamilyTree;
|
import com.gmail.nossr50.skills.child.FamilyTree;
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
@@ -20,9 +18,8 @@ import com.google.common.collect.ImmutableMap;
|
|||||||
|
|
||||||
public class PlayerProfile {
|
public class PlayerProfile {
|
||||||
private final String playerName;
|
private final String playerName;
|
||||||
private UUID uuid;
|
|
||||||
private boolean loaded;
|
private boolean loaded;
|
||||||
private volatile boolean changed;
|
private boolean changed;
|
||||||
|
|
||||||
/* HUDs */
|
/* HUDs */
|
||||||
private MobHealthbarType mobHealthbarType;
|
private MobHealthbarType mobHealthbarType;
|
||||||
@@ -32,13 +29,7 @@ public class PlayerProfile {
|
|||||||
private final Map<SkillType, Float> skillsXp = new HashMap<SkillType, Float>(); // Skill & XP
|
private final Map<SkillType, Float> skillsXp = new HashMap<SkillType, Float>(); // Skill & XP
|
||||||
private final Map<AbilityType, Integer> abilityDATS = new HashMap<AbilityType, Integer>(); // Ability & Cooldown
|
private final Map<AbilityType, Integer> abilityDATS = new HashMap<AbilityType, Integer>(); // Ability & Cooldown
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public PlayerProfile(String playerName) {
|
public PlayerProfile(String playerName) {
|
||||||
this(playerName, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlayerProfile(String playerName, UUID uuid) {
|
|
||||||
this.uuid = uuid;
|
|
||||||
this.playerName = playerName;
|
this.playerName = playerName;
|
||||||
|
|
||||||
mobHealthbarType = Config.getInstance().getMobHealthbarDefault();
|
mobHealthbarType = Config.getInstance().getMobHealthbarDefault();
|
||||||
@@ -53,20 +44,13 @@ public class PlayerProfile {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public PlayerProfile(String playerName, boolean isLoaded) {
|
public PlayerProfile(String playerName, boolean isLoaded) {
|
||||||
this(playerName);
|
this(playerName);
|
||||||
this.loaded = isLoaded;
|
this.loaded = isLoaded;
|
||||||
}
|
}
|
||||||
|
|
||||||
public PlayerProfile(String playerName, UUID uuid, boolean isLoaded) {
|
public PlayerProfile(String playerName, Map<SkillType, Integer> levelData, Map<SkillType, Float> xpData, Map<AbilityType, Integer> cooldownData, MobHealthbarType mobHealthbarType) {
|
||||||
this(playerName, uuid);
|
|
||||||
this.loaded = isLoaded;
|
|
||||||
}
|
|
||||||
|
|
||||||
public PlayerProfile(String playerName, UUID uuid, Map<SkillType, Integer> levelData, Map<SkillType, Float> xpData, Map<AbilityType, Integer> cooldownData, MobHealthbarType mobHealthbarType) {
|
|
||||||
this.playerName = playerName;
|
this.playerName = playerName;
|
||||||
this.uuid = uuid;
|
|
||||||
this.mobHealthbarType = mobHealthbarType;
|
this.mobHealthbarType = mobHealthbarType;
|
||||||
|
|
||||||
skills.putAll(levelData);
|
skills.putAll(levelData);
|
||||||
@@ -76,21 +60,15 @@ public class PlayerProfile {
|
|||||||
loaded = true;
|
loaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void scheduleAsyncSave() {
|
|
||||||
new PlayerProfileSaveTask(this).runTaskAsynchronously(mcMMO.p);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void save() {
|
public void save() {
|
||||||
if (!changed || !loaded) {
|
if (!changed || !loaded) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO should this part be synchronized?
|
changed = !mcMMO.getDatabaseManager().saveUser(new PlayerProfile(playerName, ImmutableMap.copyOf(skills), ImmutableMap.copyOf(skillsXp), ImmutableMap.copyOf(abilityDATS), mobHealthbarType));
|
||||||
PlayerProfile profileCopy = new PlayerProfile(playerName, uuid, ImmutableMap.copyOf(skills), ImmutableMap.copyOf(skillsXp), ImmutableMap.copyOf(abilityDATS), mobHealthbarType);
|
|
||||||
changed = !mcMMO.getDatabaseManager().saveUser(profileCopy);
|
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
mcMMO.p.getLogger().warning("PlayerProfile saving failed for player: " + playerName + " " + uuid);
|
mcMMO.p.getLogger().warning("PlayerProfile for " + playerName + " failed to save");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -98,16 +76,6 @@ public class PlayerProfile {
|
|||||||
return playerName;
|
return playerName;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UUID getUniqueId() {
|
|
||||||
return uuid;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setUniqueId(UUID uuid) {
|
|
||||||
changed = true;
|
|
||||||
|
|
||||||
this.uuid = uuid;
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isLoaded() {
|
public boolean isLoaded() {
|
||||||
return loaded;
|
return loaded;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
package com.gmail.nossr50.datatypes.skills;
|
|
||||||
|
|
||||||
public enum ItemType {
|
|
||||||
ARMOR,
|
|
||||||
TOOL,
|
|
||||||
OTHER;
|
|
||||||
}
|
|
||||||
@@ -1,43 +0,0 @@
|
|||||||
package com.gmail.nossr50.datatypes.skills;
|
|
||||||
|
|
||||||
import org.bukkit.Material;
|
|
||||||
|
|
||||||
public enum MaterialType {
|
|
||||||
STRING,
|
|
||||||
LEATHER,
|
|
||||||
WOOD,
|
|
||||||
STONE,
|
|
||||||
IRON,
|
|
||||||
GOLD,
|
|
||||||
DIAMOND,
|
|
||||||
OTHER;
|
|
||||||
|
|
||||||
public Material getDefaultMaterial() {
|
|
||||||
switch (this) {
|
|
||||||
case STRING:
|
|
||||||
return Material.STRING;
|
|
||||||
|
|
||||||
case LEATHER:
|
|
||||||
return Material.LEATHER;
|
|
||||||
|
|
||||||
case WOOD:
|
|
||||||
return Material.WOOD;
|
|
||||||
|
|
||||||
case STONE:
|
|
||||||
return Material.COBBLESTONE;
|
|
||||||
|
|
||||||
case IRON:
|
|
||||||
return Material.IRON_INGOT;
|
|
||||||
|
|
||||||
case GOLD:
|
|
||||||
return Material.GOLD_INGOT;
|
|
||||||
|
|
||||||
case DIAMOND:
|
|
||||||
return Material.DIAMOND;
|
|
||||||
|
|
||||||
case OTHER:
|
|
||||||
default:
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -46,12 +46,9 @@ public enum SecondaryAbility {
|
|||||||
/* Repair */
|
/* Repair */
|
||||||
ARCANE_FORGING,
|
ARCANE_FORGING,
|
||||||
REPAIR_MASTERY,
|
REPAIR_MASTERY,
|
||||||
|
SALVAGE,
|
||||||
SUPER_REPAIR,
|
SUPER_REPAIR,
|
||||||
|
|
||||||
/* Salvage */
|
|
||||||
ADVANCED_SALVAGE,
|
|
||||||
ARCANE_SALVAGE,
|
|
||||||
|
|
||||||
/* Smelting */
|
/* Smelting */
|
||||||
FLUX_MINING,
|
FLUX_MINING,
|
||||||
FUEL_EFFICIENCY,
|
FUEL_EFFICIENCY,
|
||||||
|
|||||||
@@ -23,7 +23,6 @@ import com.gmail.nossr50.skills.fishing.FishingManager;
|
|||||||
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
|
import com.gmail.nossr50.skills.herbalism.HerbalismManager;
|
||||||
import com.gmail.nossr50.skills.mining.MiningManager;
|
import com.gmail.nossr50.skills.mining.MiningManager;
|
||||||
import com.gmail.nossr50.skills.repair.RepairManager;
|
import com.gmail.nossr50.skills.repair.RepairManager;
|
||||||
import com.gmail.nossr50.skills.salvage.SalvageManager;
|
|
||||||
import com.gmail.nossr50.skills.smelting.SmeltingManager;
|
import com.gmail.nossr50.skills.smelting.SmeltingManager;
|
||||||
import com.gmail.nossr50.skills.swords.SwordsManager;
|
import com.gmail.nossr50.skills.swords.SwordsManager;
|
||||||
import com.gmail.nossr50.skills.taming.TamingManager;
|
import com.gmail.nossr50.skills.taming.TamingManager;
|
||||||
@@ -44,8 +43,7 @@ public enum SkillType {
|
|||||||
FISHING(FishingManager.class, Color.NAVY, ImmutableList.of(SecondaryAbility.FISHERMANS_DIET, SecondaryAbility.FISHING_TREASURE_HUNTER, SecondaryAbility.ICE_FISHING, SecondaryAbility.MAGIC_HUNTER, SecondaryAbility.MASTER_ANGLER, SecondaryAbility.SHAKE)),
|
FISHING(FishingManager.class, Color.NAVY, ImmutableList.of(SecondaryAbility.FISHERMANS_DIET, SecondaryAbility.FISHING_TREASURE_HUNTER, SecondaryAbility.ICE_FISHING, SecondaryAbility.MAGIC_HUNTER, SecondaryAbility.MASTER_ANGLER, SecondaryAbility.SHAKE)),
|
||||||
HERBALISM(HerbalismManager.class, Color.GREEN, AbilityType.GREEN_TERRA, ToolType.HOE, ImmutableList.of(SecondaryAbility.FARMERS_DIET, SecondaryAbility.GREEN_THUMB_PLANT, SecondaryAbility.GREEN_THUMB_BLOCK, SecondaryAbility.HERBALISM_DOUBLE_DROPS, SecondaryAbility.HYLIAN_LUCK, SecondaryAbility.SHROOM_THUMB)),
|
HERBALISM(HerbalismManager.class, Color.GREEN, AbilityType.GREEN_TERRA, ToolType.HOE, ImmutableList.of(SecondaryAbility.FARMERS_DIET, SecondaryAbility.GREEN_THUMB_PLANT, SecondaryAbility.GREEN_THUMB_BLOCK, SecondaryAbility.HERBALISM_DOUBLE_DROPS, SecondaryAbility.HYLIAN_LUCK, SecondaryAbility.SHROOM_THUMB)),
|
||||||
MINING(MiningManager.class, Color.GRAY, AbilityType.SUPER_BREAKER, ToolType.PICKAXE, ImmutableList.of(SecondaryAbility.MINING_DOUBLE_DROPS)),
|
MINING(MiningManager.class, Color.GRAY, AbilityType.SUPER_BREAKER, ToolType.PICKAXE, ImmutableList.of(SecondaryAbility.MINING_DOUBLE_DROPS)),
|
||||||
REPAIR(RepairManager.class, Color.SILVER, ImmutableList.of(SecondaryAbility.ARCANE_FORGING, SecondaryAbility.REPAIR_MASTERY, SecondaryAbility.SUPER_REPAIR)),
|
REPAIR(RepairManager.class, Color.SILVER, ImmutableList.of(SecondaryAbility.ARCANE_FORGING, SecondaryAbility.REPAIR_MASTERY, SecondaryAbility.SALVAGE, SecondaryAbility.SUPER_REPAIR)),
|
||||||
SALVAGE(SalvageManager.class, Color.ORANGE, ImmutableList.of(SecondaryAbility.ADVANCED_SALVAGE, SecondaryAbility.ARCANE_SALVAGE)),
|
|
||||||
SMELTING(SmeltingManager.class, Color.YELLOW, ImmutableList.of(SecondaryAbility.FLUX_MINING, SecondaryAbility.FUEL_EFFICIENCY, SecondaryAbility.SECOND_SMELT)),
|
SMELTING(SmeltingManager.class, Color.YELLOW, ImmutableList.of(SecondaryAbility.FLUX_MINING, SecondaryAbility.FUEL_EFFICIENCY, SecondaryAbility.SECOND_SMELT)),
|
||||||
SWORDS(SwordsManager.class, Color.fromRGB(178, 34, 34), AbilityType.SERRATED_STRIKES, ToolType.SWORD, ImmutableList.of(SecondaryAbility.BLEED, SecondaryAbility.COUNTER)),
|
SWORDS(SwordsManager.class, Color.fromRGB(178, 34, 34), AbilityType.SERRATED_STRIKES, ToolType.SWORD, ImmutableList.of(SecondaryAbility.BLEED, SecondaryAbility.COUNTER)),
|
||||||
TAMING(TamingManager.class, Color.PURPLE, ImmutableList.of(SecondaryAbility.BEAST_LORE, SecondaryAbility.CALL_OF_THE_WILD, SecondaryAbility.ENVIROMENTALLY_AWARE, SecondaryAbility.FAST_FOOD, SecondaryAbility.GORE, SecondaryAbility.HOLY_HOUND, SecondaryAbility.SHARPENED_CLAWS, SecondaryAbility.SHOCK_PROOF, SecondaryAbility.THICK_FUR)),
|
TAMING(TamingManager.class, Color.PURPLE, ImmutableList.of(SecondaryAbility.BEAST_LORE, SecondaryAbility.CALL_OF_THE_WILD, SecondaryAbility.ENVIROMENTALLY_AWARE, SecondaryAbility.FAST_FOOD, SecondaryAbility.GORE, SecondaryAbility.HOLY_HOUND, SecondaryAbility.SHARPENED_CLAWS, SecondaryAbility.SHOCK_PROOF, SecondaryAbility.THICK_FUR)),
|
||||||
@@ -65,7 +63,7 @@ public enum SkillType {
|
|||||||
|
|
||||||
public static final List<SkillType> COMBAT_SKILLS = ImmutableList.of(ARCHERY, AXES, SWORDS, TAMING, UNARMED);
|
public static final List<SkillType> COMBAT_SKILLS = ImmutableList.of(ARCHERY, AXES, SWORDS, TAMING, UNARMED);
|
||||||
public static final List<SkillType> GATHERING_SKILLS = ImmutableList.of(EXCAVATION, FISHING, HERBALISM, MINING, WOODCUTTING);
|
public static final List<SkillType> GATHERING_SKILLS = ImmutableList.of(EXCAVATION, FISHING, HERBALISM, MINING, WOODCUTTING);
|
||||||
public static final List<SkillType> MISC_SKILLS = ImmutableList.of(ACROBATICS, ALCHEMY, REPAIR, SALVAGE, SMELTING);
|
public static final List<SkillType> MISC_SKILLS = ImmutableList.of(ACROBATICS, ALCHEMY, REPAIR, SMELTING);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
List<SkillType> childSkills = new ArrayList<SkillType>();
|
List<SkillType> childSkills = new ArrayList<SkillType>();
|
||||||
@@ -184,7 +182,6 @@ public enum SkillType {
|
|||||||
// TODO: This is a little "hacky", we probably need to add something to distinguish child skills in the enum, or to use another enum for them
|
// TODO: This is a little "hacky", we probably need to add something to distinguish child skills in the enum, or to use another enum for them
|
||||||
public boolean isChildSkill() {
|
public boolean isChildSkill() {
|
||||||
switch (this) {
|
switch (this) {
|
||||||
case SALVAGE:
|
|
||||||
case SMELTING:
|
case SMELTING:
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
|
|||||||
@@ -1,21 +0,0 @@
|
|||||||
package com.gmail.nossr50.datatypes.skills;
|
|
||||||
|
|
||||||
public enum XPGainReason {
|
|
||||||
PVP,
|
|
||||||
PVE,
|
|
||||||
VAMPIRISM,
|
|
||||||
SHARED_PVP,
|
|
||||||
SHARED_PVE,
|
|
||||||
COMMAND,
|
|
||||||
UNKNOWN;
|
|
||||||
|
|
||||||
public static XPGainReason getXPGainReason(String reason) {
|
|
||||||
for (XPGainReason type : values()) {
|
|
||||||
if (type.name().equalsIgnoreCase(reason)) {
|
|
||||||
return type;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -7,7 +7,6 @@ import java.util.Map.Entry;
|
|||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.PotionMeta;
|
import org.bukkit.inventory.meta.PotionMeta;
|
||||||
import org.bukkit.potion.Potion;
|
|
||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
|
||||||
public class AlchemyPotion {
|
public class AlchemyPotion {
|
||||||
@@ -26,35 +25,29 @@ public class AlchemyPotion {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "AlchemyPotion{" + dataValue + ", " + name + ", Effects[" + effects.size() + "], Children[" + children.size() + "]}";
|
return "AlchemyPotion{" + dataValue + "," + name + ",Effects[" + effects.size() + "], Children[" + children.size() + "]}";
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack toItemStack() {
|
||||||
|
return toItemStack(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
public ItemStack toItemStack(int amount) {
|
public ItemStack toItemStack(int amount) {
|
||||||
ItemStack potion = new ItemStack(Material.POTION, amount, this.getDataValue());
|
ItemStack potion = new ItemStack(Material.POTION, amount, this.getDataValue());
|
||||||
PotionMeta meta = (PotionMeta) potion.getItemMeta();
|
PotionMeta meta = (PotionMeta) potion.getItemMeta();
|
||||||
|
meta.setDisplayName(this.getName());
|
||||||
if (this.getName() != null) {
|
|
||||||
meta.setDisplayName(this.getName());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (this.getLore() != null && !this.getLore().isEmpty()) {
|
if (this.getLore() != null && !this.getLore().isEmpty()) {
|
||||||
meta.setLore(this.getLore());
|
meta.setLore(this.getLore());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!this.getEffects().isEmpty()) {
|
if (!this.getEffects().isEmpty()) {
|
||||||
for (PotionEffect effect : this.getEffects()) {
|
for (PotionEffect effect : this.getEffects()) {
|
||||||
meta.addCustomEffect(effect, true);
|
meta.addCustomEffect(effect, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
potion.setItemMeta(meta);
|
potion.setItemMeta(meta);
|
||||||
return potion;
|
return potion;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Potion toPotion(int amount) {
|
|
||||||
return Potion.fromItemStack(this.toItemStack(amount));
|
|
||||||
}
|
|
||||||
|
|
||||||
public short getDataValue() {
|
public short getDataValue() {
|
||||||
return dataValue;
|
return dataValue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,72 +0,0 @@
|
|||||||
package com.gmail.nossr50.datatypes.skills.alchemy;
|
|
||||||
|
|
||||||
import org.bukkit.potion.Potion;
|
|
||||||
|
|
||||||
public enum PotionStage {
|
|
||||||
FIVE(5),
|
|
||||||
FOUR(4),
|
|
||||||
THREE(3),
|
|
||||||
TWO(2),
|
|
||||||
ONE(1);
|
|
||||||
|
|
||||||
int numerical;
|
|
||||||
|
|
||||||
private PotionStage(int numerical) {
|
|
||||||
this.numerical = numerical;
|
|
||||||
}
|
|
||||||
|
|
||||||
public int toNumerical() {
|
|
||||||
return numerical;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static PotionStage getPotionStageNumerical(int numerical) {
|
|
||||||
for (PotionStage potionStage : values()) {
|
|
||||||
if (numerical >= potionStage.toNumerical()) {
|
|
||||||
return potionStage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return ONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static PotionStage getPotionStage(AlchemyPotion input, AlchemyPotion output) {
|
|
||||||
PotionStage potionStage = getPotionStage(output);
|
|
||||||
if (!isWaterBottle(input) && getPotionStage(input) == potionStage) {
|
|
||||||
potionStage = PotionStage.FIVE;
|
|
||||||
}
|
|
||||||
|
|
||||||
return potionStage;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean isWaterBottle(AlchemyPotion input) {
|
|
||||||
return input.getDataValue() == 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static PotionStage getPotionStage(AlchemyPotion alchemyPotion) {
|
|
||||||
Potion potion = alchemyPotion.toPotion(1);
|
|
||||||
|
|
||||||
int stage = 1;
|
|
||||||
|
|
||||||
// Check if potion isn't awkward or mundane
|
|
||||||
if (potion.getType() != null) {
|
|
||||||
stage++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if potion has a glowstone dust amplifier
|
|
||||||
if (potion.getLevel() > 1) {
|
|
||||||
stage++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if potion has a redstone dust amplifier
|
|
||||||
if (potion.hasExtendedDuration()) {
|
|
||||||
stage++;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Check if potion has a gunpowder amplifier
|
|
||||||
if (potion.isSplash()) {
|
|
||||||
stage++;
|
|
||||||
}
|
|
||||||
|
|
||||||
return PotionStage.getPotionStageNumerical(stage);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -6,7 +6,6 @@ import org.bukkit.event.HandlerList;
|
|||||||
import org.bukkit.event.player.PlayerEvent;
|
import org.bukkit.event.player.PlayerEvent;
|
||||||
|
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.XPGainReason;
|
|
||||||
import com.gmail.nossr50.util.player.UserManager;
|
import com.gmail.nossr50.util.player.UserManager;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -16,21 +15,11 @@ public abstract class McMMOPlayerExperienceEvent extends PlayerEvent implements
|
|||||||
private boolean cancelled;
|
private boolean cancelled;
|
||||||
protected SkillType skill;
|
protected SkillType skill;
|
||||||
protected int skillLevel;
|
protected int skillLevel;
|
||||||
protected XPGainReason xpGainReason;
|
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
protected McMMOPlayerExperienceEvent(Player player, SkillType skill) {
|
protected McMMOPlayerExperienceEvent(Player player, SkillType skill) {
|
||||||
super(player);
|
super(player);
|
||||||
this.skill = skill;
|
this.skill = skill;
|
||||||
this.skillLevel = UserManager.getPlayer(player).getSkillLevel(skill);
|
this.skillLevel = UserManager.getPlayer(player).getSkillLevel(skill);
|
||||||
this.xpGainReason = XPGainReason.UNKNOWN;
|
|
||||||
}
|
|
||||||
|
|
||||||
protected McMMOPlayerExperienceEvent(Player player, SkillType skill, XPGainReason xpGainReason) {
|
|
||||||
super(player);
|
|
||||||
this.skill = skill;
|
|
||||||
this.skillLevel = UserManager.getPlayer(player).getSkillLevel(skill);
|
|
||||||
this.xpGainReason = xpGainReason;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -47,13 +36,6 @@ public abstract class McMMOPlayerExperienceEvent extends PlayerEvent implements
|
|||||||
return skillLevel;
|
return skillLevel;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @return The combat type involved in this event
|
|
||||||
*/
|
|
||||||
public XPGainReason getXpGainReason() {
|
|
||||||
return xpGainReason;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Following are required for Cancellable **/
|
/** Following are required for Cancellable **/
|
||||||
@Override
|
@Override
|
||||||
public boolean isCancelled() {
|
public boolean isCancelled() {
|
||||||
|
|||||||
@@ -3,18 +3,12 @@ package com.gmail.nossr50.events.experience;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.XPGainReason;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a user levels change
|
* Called when a user levels change
|
||||||
*/
|
*/
|
||||||
public abstract class McMMOPlayerLevelChangeEvent extends McMMOPlayerExperienceEvent {
|
public abstract class McMMOPlayerLevelChangeEvent extends McMMOPlayerExperienceEvent {
|
||||||
@Deprecated
|
|
||||||
public McMMOPlayerLevelChangeEvent(Player player, SkillType skill) {
|
public McMMOPlayerLevelChangeEvent(Player player, SkillType skill) {
|
||||||
super(player, skill, XPGainReason.UNKNOWN);
|
super(player, skill);
|
||||||
}
|
|
||||||
|
|
||||||
public McMMOPlayerLevelChangeEvent(Player player, SkillType skill, XPGainReason xpGainReason) {
|
|
||||||
super(player, skill, xpGainReason);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.gmail.nossr50.events.experience;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.XPGainReason;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a user loses levels in a skill
|
* Called when a user loses levels in a skill
|
||||||
@@ -11,25 +10,13 @@ import com.gmail.nossr50.datatypes.skills.XPGainReason;
|
|||||||
public class McMMOPlayerLevelDownEvent extends McMMOPlayerLevelChangeEvent {
|
public class McMMOPlayerLevelDownEvent extends McMMOPlayerLevelChangeEvent {
|
||||||
private int levelsLost;
|
private int levelsLost;
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public McMMOPlayerLevelDownEvent(Player player, SkillType skill) {
|
public McMMOPlayerLevelDownEvent(Player player, SkillType skill) {
|
||||||
super(player, skill, XPGainReason.UNKNOWN);
|
super(player, skill);
|
||||||
this.levelsLost = 1;
|
this.levelsLost = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public McMMOPlayerLevelDownEvent(Player player, SkillType skill, int levelsLost) {
|
public McMMOPlayerLevelDownEvent(Player player, SkillType skill, int levelsLost) {
|
||||||
super(player, skill, XPGainReason.UNKNOWN);
|
super(player, skill);
|
||||||
this.levelsLost = levelsLost;
|
|
||||||
}
|
|
||||||
|
|
||||||
public McMMOPlayerLevelDownEvent(Player player, SkillType skill, XPGainReason xpGainReason) {
|
|
||||||
super(player, skill, xpGainReason);
|
|
||||||
this.levelsLost = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public McMMOPlayerLevelDownEvent(Player player, SkillType skill, int levelsLost, XPGainReason xpGainReason) {
|
|
||||||
super(player, skill, xpGainReason);
|
|
||||||
this.levelsLost = levelsLost;
|
this.levelsLost = levelsLost;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ package com.gmail.nossr50.events.experience;
|
|||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
import com.gmail.nossr50.datatypes.skills.SkillType;
|
import com.gmail.nossr50.datatypes.skills.SkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.XPGainReason;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Called when a user levels up in a skill
|
* Called when a user levels up in a skill
|
||||||
@@ -11,25 +10,13 @@ import com.gmail.nossr50.datatypes.skills.XPGainReason;
|
|||||||
public class McMMOPlayerLevelUpEvent extends McMMOPlayerLevelChangeEvent {
|
public class McMMOPlayerLevelUpEvent extends McMMOPlayerLevelChangeEvent {
|
||||||
private int levelsGained;
|
private int levelsGained;
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public McMMOPlayerLevelUpEvent(Player player, SkillType skill) {
|
public McMMOPlayerLevelUpEvent(Player player, SkillType skill) {
|
||||||
super(player, skill, XPGainReason.UNKNOWN);
|
super(player, skill);
|
||||||
this.levelsGained = 1;
|
this.levelsGained = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Deprecated
|
|
||||||
public McMMOPlayerLevelUpEvent(Player player, SkillType skill, int levelsGained) {
|
public McMMOPlayerLevelUpEvent(Player player, SkillType skill, int levelsGained) {
|
||||||
super(player, skill, XPGainReason.UNKNOWN);
|
super(player, skill);
|
||||||
this.levelsGained = levelsGained;
|
|
||||||
}
|
|
||||||
|
|
||||||
public McMMOPlayerLevelUpEvent(Player player, SkillType skill, XPGainReason xpGainReason) {
|
|
||||||
super(player, skill, xpGainReason);
|
|
||||||
this.levelsGained = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
public McMMOPlayerLevelUpEvent(Player player, SkillType skill, int levelsGained, XPGainReason xpGainReason) {
|
|
||||||
super(player, skill, xpGainReason);
|
|
||||||
this.levelsGained = levelsGained;
|
this.levelsGained = levelsGained;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user