mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-08-03 04:55:28 +02:00
Update classes to use DSM over CM
This commit is contained in:
@@ -143,11 +143,6 @@ public class AdvancedConfig extends ConfigValidated {
|
||||
return mcMMO.getConfigManager().getAdvancedConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
//do nothing
|
||||
}
|
||||
|
||||
/**
|
||||
* The version of this config
|
||||
*
|
||||
|
@@ -18,7 +18,7 @@ import java.util.List;
|
||||
/**
|
||||
* Handles loading and cacheing configuration settings from a configurable compatible config file
|
||||
*/
|
||||
public abstract class Config implements VersionedConfig, Unload {
|
||||
public abstract class Config implements VersionedConfig {
|
||||
|
||||
public static final String HOCON_FILE_EXTENSION = ".conf";
|
||||
public final File DIRECTORY_DATA_FOLDER; //Directory that the file is in
|
||||
@@ -95,18 +95,9 @@ public abstract class Config implements VersionedConfig, Unload {
|
||||
}
|
||||
|
||||
//Cleanup and backup registers
|
||||
registerUnload();
|
||||
registerFileBackup();
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers with the config managers unloader
|
||||
* The unloader runs when the plugin gets disabled which cleans up registries to make reloading safe
|
||||
*/
|
||||
private void registerUnload() {
|
||||
mcMMO.getConfigManager().registerUnloadable(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers with the config managers file list
|
||||
* Used for backing up configs with our zip library
|
||||
|
@@ -39,11 +39,6 @@ public class CoreSkillsConfig extends Config {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
//Nothing to do
|
||||
}
|
||||
|
||||
/*
|
||||
* Skill Settings
|
||||
*/
|
||||
|
@@ -218,11 +218,6 @@ public class MainConfig extends ConfigValidated {
|
||||
return mcMMO.getConfigManager().getMainConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
//do nothing
|
||||
}
|
||||
|
||||
/**
|
||||
* The version of this config
|
||||
*
|
||||
|
@@ -33,11 +33,6 @@ public class RankConfig extends ConfigValidated {
|
||||
return mcMMO.getConfigManager().getRankConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
//Do nothing
|
||||
}
|
||||
|
||||
/**
|
||||
* The version of this config
|
||||
*
|
||||
|
@@ -34,11 +34,6 @@ public class SoundConfig extends ConfigValidated {
|
||||
return mcMMO.getConfigManager().getSoundConfig();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* The version of this config
|
||||
*
|
||||
|
@@ -106,11 +106,6 @@ public class ExperienceConfig extends ConfigValidated {
|
||||
return 1;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> validateKeys() {
|
||||
List<String> reason = new ArrayList<>();
|
||||
|
@@ -14,7 +14,7 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class ExcavationTreasureConfig extends Config implements UnsafeValueValidation, Registers {
|
||||
public class ExcavationTreasureConfig extends Config implements UnsafeValueValidation {
|
||||
public static final String EXCAVATION = "Archaeology";
|
||||
public static final String AMOUNT = "Amount";
|
||||
public static final String XP = "XP";
|
||||
@@ -26,7 +26,6 @@ public class ExcavationTreasureConfig extends Config implements UnsafeValueValid
|
||||
|
||||
public ExcavationTreasureConfig() {
|
||||
super("excavation_drops", mcMMO.p.getDataFolder().getAbsoluteFile(), ConfigConstants.RELATIVE_PATH_CONFIG_DIR, true, false, true, false);
|
||||
register();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -42,115 +41,6 @@ public class ExcavationTreasureConfig extends Config implements UnsafeValueValid
|
||||
return mcMMO.getConfigManager().getExcavationTreasureConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
* 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 (ConfigurationNode treasureNode : excavationTreasureNode.getChildrenList()) {
|
||||
|
||||
String treasureName = treasureNode.getString();
|
||||
//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)));
|
||||
|
||||
//VALIDATE AMOUNT
|
||||
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;
|
||||
}
|
||||
|
||||
//VALIDATE XP
|
||||
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;
|
||||
}
|
||||
|
||||
//VALIDATE DROP CHANCE
|
||||
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;
|
||||
}
|
||||
|
||||
//VALIDATE DROP LEVEL
|
||||
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;
|
||||
}
|
||||
|
||||
//VALIDATE DROP SOURCES
|
||||
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) {
|
||||
excavationMap.computeIfAbsent(dropBlock, k -> new ArrayList<>());
|
||||
|
||||
excavationMap.get(dropBlock).add(excavationTreasure);
|
||||
}
|
||||
|
||||
} else {
|
||||
mcMMO.p.getLogger().severe("Excavation Treasure Config - Material named " + treasureName + " does not match any known material.");
|
||||
}
|
||||
}
|
||||
} catch (ObjectMappingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
excavationMap.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> validateKeys() {
|
||||
return null;
|
||||
|
@@ -20,7 +20,7 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class FishingTreasureConfig extends Config implements UnsafeValueValidation, Registers {
|
||||
public class FishingTreasureConfig extends Config implements UnsafeValueValidation {
|
||||
public static final String PLAYER = "PLAYER";
|
||||
public static final String INVENTORY = "INVENTORY";
|
||||
public static final String WHOLE_STACKS = "Whole_Stacks";
|
||||
@@ -45,7 +45,6 @@ public class FishingTreasureConfig extends Config implements UnsafeValueValidati
|
||||
|
||||
public FishingTreasureConfig() {
|
||||
super("fishing_drops", mcMMO.p.getDataFolder().getAbsoluteFile(), ConfigConstants.RELATIVE_PATH_CONFIG_DIR, true, false, true, false);
|
||||
register();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -61,121 +60,6 @@ public class FishingTreasureConfig extends Config implements UnsafeValueValidati
|
||||
return mcMMO.getConfigManager().getFishingTreasureConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register stuff
|
||||
*/
|
||||
@Override
|
||||
public void register() {
|
||||
/* FISHING TREASURES */
|
||||
|
||||
ConfigurationNode fishingTreasureNode = getUserRootNode().getNode(FISHING);
|
||||
|
||||
if (fishingTreasureNode == null) {
|
||||
mcMMO.p.getLogger().info("Fishing treasures in treasures config not defined");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Initialize fishing HashMap
|
||||
for (Rarity rarity : Rarity.values()) {
|
||||
if (!fishingRewards.containsKey(rarity)) {
|
||||
fishingRewards.put(rarity, (new ArrayList<>()));
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
for (ConfigurationNode treasureNode : fishingTreasureNode.getChildrenList()) {
|
||||
|
||||
String treasureName = treasureNode.getString();
|
||||
//Treasure Material Definition
|
||||
Material treasureMaterial = Material.matchMaterial(treasureName.toUpperCase());
|
||||
|
||||
if (treasureMaterial != null) {
|
||||
ConfigurationNode currentTreasure = fishingTreasureNode.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();
|
||||
String customName = null;
|
||||
|
||||
/*
|
||||
* PARAMETER INIT
|
||||
*/
|
||||
|
||||
ArrayList<String> dropsFrom = new ArrayList(currentTreasure.getNode(DROPS_FROM).getList(TypeToken.of(String.class)));
|
||||
|
||||
//VALIDATE AMOUNT
|
||||
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;
|
||||
}
|
||||
|
||||
//VALIDATE XP
|
||||
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;
|
||||
}
|
||||
|
||||
//VALIDATE DROP SOURCES
|
||||
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
|
||||
*/
|
||||
|
||||
FishingTreasure fishingTreasure = TreasureFactory.makeFishingTreasure(treasureMaterial, amount, xp, customName, currentTreasure.getNode(LORE));
|
||||
|
||||
/*
|
||||
* Add to map
|
||||
*/
|
||||
|
||||
String configRarity = currentTreasure.getNode(RARITY).getString();
|
||||
|
||||
for (Rarity rarity : Rarity.values()) {
|
||||
if (rarity.toString().equalsIgnoreCase(configRarity)) {
|
||||
/*if(fishingRewards.get(rarity) == null)
|
||||
fishingRewards.put(rarity, new ArrayList<>());*/
|
||||
|
||||
fishingRewards.get(rarity).add(fishingTreasure);
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
mcMMO.p.getLogger().severe("Excavation Treasure Config - Material named " + treasureName + " does not match any known material.");
|
||||
}
|
||||
}
|
||||
} catch (ObjectMappingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
//Shake
|
||||
for (EntityType entity : EntityType.values()) {
|
||||
if (entity.isAlive()) {
|
||||
loadShake(entity);
|
||||
}
|
||||
}
|
||||
|
||||
//Enchantments
|
||||
loadEnchantments();
|
||||
}
|
||||
|
||||
private void loadShake(EntityType entityType) {
|
||||
ConfigurationNode shakeTreasureNode = getUserRootNode().getNode(SHAKE, entityType.toString());
|
||||
|
||||
@@ -306,13 +190,6 @@ public class FishingTreasureConfig extends Config implements UnsafeValueValidati
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
shakeMap.clear();
|
||||
fishingRewards.clear();
|
||||
fishingEnchantments.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> validateKeys() {
|
||||
// Validate all the settings!
|
||||
|
@@ -16,7 +16,7 @@ import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
||||
public class HerbalismTreasureConfig extends Config implements UnsafeValueValidation, Registers {
|
||||
public class HerbalismTreasureConfig extends Config implements UnsafeValueValidation {
|
||||
public static final String HYLIAN_LUCK = "Hylian_Luck";
|
||||
public static final String AMOUNT = "Amount";
|
||||
public static final String XP = "XP";
|
||||
@@ -29,7 +29,6 @@ public class HerbalismTreasureConfig extends Config implements UnsafeValueValida
|
||||
|
||||
public HerbalismTreasureConfig() {
|
||||
super("hylian_luck_drops", mcMMO.p.getDataFolder().getAbsoluteFile(), ConfigConstants.RELATIVE_PATH_CONFIG_DIR, true, false, true, false);
|
||||
register();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -45,141 +44,6 @@ public class HerbalismTreasureConfig extends Config implements UnsafeValueValida
|
||||
return mcMMO.getConfigManager().getHerbalismTreasureConfig();
|
||||
}
|
||||
|
||||
/**
|
||||
* Register stuff
|
||||
*/
|
||||
@Override
|
||||
public void register() {
|
||||
ConfigurationNode herbalismTreasureNode = getUserRootNode().getNode(HYLIAN_LUCK);
|
||||
|
||||
if (herbalismTreasureNode == null) {
|
||||
mcMMO.p.getLogger().info("Excavation treasures in treasures config not defined");
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
for (ConfigurationNode treasureNode : herbalismTreasureNode.getChildrenList()) {
|
||||
|
||||
String treasureName = treasureNode.getString();
|
||||
//Treasure Material Definition
|
||||
Material treasureMaterial = Material.matchMaterial(treasureName.toUpperCase());
|
||||
|
||||
if (treasureMaterial != null) {
|
||||
ConfigurationNode currentTreasure = herbalismTreasureNode.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)));
|
||||
|
||||
//VALIDATE AMOUNT
|
||||
if (amount <= 0) {
|
||||
mcMMO.p.getLogger().severe("Herbalism Hylian Luck 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;
|
||||
}
|
||||
|
||||
//VALIDATE XP
|
||||
if (xp <= 0) {
|
||||
mcMMO.p.getLogger().info("Herbalism Hylian Luck Treasure named " + treasureName + " in the config has xp set to 0 or below, is this intentional?");
|
||||
xp = 0;
|
||||
}
|
||||
|
||||
//VALIDATE DROP CHANCE
|
||||
if (dropChance <= 0) {
|
||||
mcMMO.p.getLogger().severe("Herbalism Hylian Luck 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;
|
||||
}
|
||||
|
||||
//VALIDATE DROP LEVEL
|
||||
if (dropLevel < 0) {
|
||||
mcMMO.p.getLogger().info("Herbalism Hylian Luck Treasure named " + treasureName + " in the config has a drop level below 0, is this intentional?");
|
||||
dropLevel = 0;
|
||||
}
|
||||
|
||||
//VALIDATE DROP SOURCES
|
||||
if (dropsFrom == null || dropsFrom.isEmpty()) {
|
||||
mcMMO.p.getLogger().severe("Herbalism Hylian Luck 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
|
||||
*/
|
||||
|
||||
HylianTreasure hylianTreasure = TreasureFactory.makeHylianTreasure(treasureMaterial, amount, xp, dropChance, dropLevel, customName, currentTreasure.getNode(LORE));
|
||||
|
||||
/*
|
||||
* Add to map
|
||||
*/
|
||||
for (String dropBlock : dropsFrom) {
|
||||
if (dropBlock.equals("Bushes")) {
|
||||
addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.FERN), hylianTreasure);
|
||||
addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.TALL_GRASS), hylianTreasure);
|
||||
for (Material species : Tag.SAPLINGS.getValues())
|
||||
addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(species), hylianTreasure);
|
||||
|
||||
addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.DEAD_BUSH), hylianTreasure);
|
||||
continue;
|
||||
}
|
||||
if (dropBlock.equals("Flowers")) {
|
||||
addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.POPPY), hylianTreasure);
|
||||
addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.DANDELION), hylianTreasure);
|
||||
addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.BLUE_ORCHID), hylianTreasure);
|
||||
addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.ALLIUM), hylianTreasure);
|
||||
addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.AZURE_BLUET), hylianTreasure);
|
||||
addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.ORANGE_TULIP), hylianTreasure);
|
||||
addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.PINK_TULIP), hylianTreasure);
|
||||
addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.RED_TULIP), hylianTreasure);
|
||||
addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(Material.WHITE_TULIP), hylianTreasure);
|
||||
continue;
|
||||
}
|
||||
if (dropBlock.equals("Pots")) {
|
||||
for (Material species : Tag.FLOWER_POTS.getValues())
|
||||
addHylianTreasure(StringUtils.getFriendlyConfigMaterialString(species), hylianTreasure);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
addHylianTreasure(dropBlock, hylianTreasure);
|
||||
}
|
||||
|
||||
} else {
|
||||
mcMMO.p.getLogger().severe("Excavation Treasure Config - Material named " + treasureName + " does not match any known material.");
|
||||
}
|
||||
}
|
||||
} catch (ObjectMappingException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unload() {
|
||||
hylianMap.clear();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> validateKeys() {
|
||||
return null;
|
||||
|
Reference in New Issue
Block a user