2019-02-21 18:08:25 -08:00
package com.gmail.nossr50.config.treasure ;
2019-02-21 19:06:59 -08:00
import com.gmail.nossr50.config.Config ;
import com.gmail.nossr50.config.Registers ;
import com.gmail.nossr50.config.UnsafeValueValidation ;
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure ;
import com.gmail.nossr50.mcMMO ;
import com.google.common.reflect.TypeToken ;
import ninja.leaping.configurate.ConfigurationNode ;
import ninja.leaping.configurate.objectmapping.ObjectMappingException ;
2019-02-21 23:01:33 -08:00
import org.bukkit.Material ;
2019-02-21 19:06:59 -08:00
2019-02-21 23:01:33 -08:00
import java.util.ArrayList ;
2019-02-21 19:06:59 -08:00
import java.util.HashMap ;
import java.util.List ;
public class ExcavationTreasureConfig extends Config implements UnsafeValueValidation , Registers {
public static final String EXCAVATION = " Archaeology " ;
2019-02-21 23:01:33 -08:00
public static final String AMOUNT = " Amount " ;
public static final String XP = " XP " ;
public static final String DROP_CHANCE = " Drop_Chance " ;
public static final String DROP_LEVEL = " Drop_Level " ;
public static final String CUSTOM_NAME = " Custom_Name " ;
public static final String LORE = " Lore " ;
2019-02-21 19:06:59 -08:00
public HashMap < String , List < ExcavationTreasure > > excavationMap = new HashMap < String , List < ExcavationTreasure > > ( ) ;
public ExcavationTreasureConfig ( ) {
super ( mcMMO . p . getDataFolder ( ) . getAbsoluteFile ( ) , " excavation_treasures.yml " , false , true , false ) ;
register ( ) ;
}
2019-02-21 23:01:33 -08:00
/ * *
* This grabs an instance of this config class from the Config Manager
* This method is deprecated and will be removed in the future
* @see mcMMO # getConfigManager ( )
* @return the instance of this config
* @deprecated Please use mcMMO . getConfigManager ( ) to grab a specific config instead
* /
@Deprecated
public static ExcavationTreasureConfig getInstance ( ) {
return mcMMO . getConfigManager ( ) . getExcavationTreasureConfig ( ) ;
}
2019-02-21 19:06:59 -08:00
/ * *
* Register stuff
* /
@Override
public void register ( ) {
ConfigurationNode excavationTreasureNode = getUserRootNode ( ) . getNode ( EXCAVATION ) ;
if ( excavationTreasureNode = = null )
{
mcMMO . p . getLogger ( ) . info ( " Excavation treasures in treasures config not defined " ) ;
return ;
}
try {
for ( String treasureName : excavationTreasureNode . getList ( TypeToken . of ( String . class ) ) ) {
2019-02-21 23:01:33 -08:00
//Treasure Material Definition
Material treasureMaterial = Material . matchMaterial ( treasureName . toUpperCase ( ) ) ;
if ( treasureMaterial ! = null )
{
ConfigurationNode currentTreasure = excavationTreasureNode . getNode ( treasureName ) ;
//TODO: Rewrite the entire treasure system because it sucks
/ *
* TREASURE PARAMETERS
* /
int amount = currentTreasure . getNode ( AMOUNT ) . getInt ( ) ;
int xp = currentTreasure . getNode ( XP ) . getInt ( ) ;
double dropChance = currentTreasure . getNode ( DROP_CHANCE ) . getDouble ( ) ;
int dropLevel = currentTreasure . getNode ( DROP_LEVEL ) . getInt ( ) ;
String customName = null ;
/ *
* PARAMETER INIT
* /
ArrayList < String > dropsFrom = new ArrayList ( currentTreasure . getNode ( " Drops_From " ) . getList ( TypeToken . of ( String . class ) ) ) ;
2019-02-21 23:15:58 -08:00
//VALIDATE AMOUNT
2019-02-21 23:01:33 -08:00
if ( amount < = 0 )
{
mcMMO . p . getLogger ( ) . severe ( " Excavation Treasure named " + treasureName + " in the config has an amount of 0 or below, is this intentional? " ) ;
mcMMO . p . getLogger ( ) . severe ( " Skipping " + treasureName + " for being invalid " ) ;
continue ;
}
2019-02-21 23:15:58 -08:00
//VALIDATE XP
2019-02-21 23:01:33 -08:00
if ( xp < = 0 )
{
mcMMO . p . getLogger ( ) . info ( " Excavation Treasure named " + treasureName + " in the config has xp set to 0 or below, is this intentional? " ) ;
xp = 0 ;
}
2019-02-21 23:15:58 -08:00
//VALIDATE DROP CHANCE
2019-02-21 23:01:33 -08:00
if ( dropChance < = 0 )
{
mcMMO . p . getLogger ( ) . severe ( " Excavation Treasure named " + treasureName + " in the config has a drop chance of 0 or below, is this intentional? " ) ;
mcMMO . p . getLogger ( ) . severe ( " Skipping " + treasureName + " for being invalid " ) ;
continue ;
}
2019-02-21 19:06:59 -08:00
2019-02-21 23:15:58 -08:00
//VALIDATE DROP LEVEL
2019-02-21 23:01:33 -08:00
if ( dropLevel < 0 )
{
mcMMO . p . getLogger ( ) . info ( " Excavation Treasure named " + treasureName + " in the config has a drop level below 0, is this intentional? " ) ;
dropLevel = 0 ;
}
2019-02-21 23:15:58 -08:00
//VALIDATE DROP SOURCES
2019-02-21 23:01:33 -08:00
if ( dropsFrom = = null | | dropsFrom . isEmpty ( ) )
{
mcMMO . p . getLogger ( ) . severe ( " Excavation Treasure named " + treasureName + " in the config has no drop targets, which would make it impossible to obtain, is this intentional? " ) ;
mcMMO . p . getLogger ( ) . severe ( " Skipping " + treasureName + " for being invalid " ) ;
continue ;
}
/* OPTIONAL PARAMETERS */
//Custom Name
if ( currentTreasure . getNode ( CUSTOM_NAME ) ! = null & & ! currentTreasure . getNode ( CUSTOM_NAME ) . getString ( ) . equalsIgnoreCase ( " ChangeMe " ) )
{
customName = currentTreasure . getNode ( CUSTOM_NAME ) . getString ( ) ;
}
/ *
* REGISTER TREASURE
* /
ExcavationTreasure excavationTreasure = TreasureFactory . makeExcavationTreasure ( treasureMaterial , amount , xp , dropChance , dropLevel , customName , currentTreasure . getNode ( LORE ) ) ;
/ *
* Add to map
* /
for ( String dropBlock : dropsFrom )
{
if ( excavationMap . get ( dropBlock ) = = null )
excavationMap . put ( dropBlock , new ArrayList < > ( ) ) ;
excavationMap . get ( dropBlock ) . add ( excavationTreasure ) ;
}
} else {
mcMMO . p . getLogger ( ) . severe ( " Excavation Treasure Config - Material named " + treasureName + " does not match any known material. " ) ;
}
2019-02-21 19:06:59 -08:00
}
} catch ( ObjectMappingException e ) {
e . printStackTrace ( ) ;
}
}
@Override
public void unload ( ) {
2019-02-21 23:01:33 -08:00
excavationMap . clear ( ) ;
2019-02-21 19:06:59 -08:00
}
@Override
public List < String > validateKeys ( ) {
return null ;
}
/ * *
* The version of this config
*
* @return
* /
@Override
public double getConfigVersion ( ) {
return 1 ;
}
2019-02-21 18:08:25 -08:00
}