diff --git a/Changelog.txt b/Changelog.txt index 350317132..44b16764c 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -20,6 +20,7 @@ Version 1.4.08-dev + Added new experience bonus perk 'mcmmo.perks.xp.10percentboost.' multiplies incoming XP by 1.1 + Added new experience bonus perk 'mcmmo.perks.xp.customboost.' multiplies incoming XP by the boost amount defined in the experience config + Added Ender Dragon, Wither, and Witch to combat experience multipliers - they do not give XP by default + + Added support for multiple mod config files, naming is done in the same style as repair.*.yml (blocks.*.yml, tools.*.yml, entities.*.yml, armor.*.yml) = Fixed bug where LeafBlower permissions were ignored = Fixed bug with toggle commands not properly displaying the success message. = Fixed IllegalArgumentException caused by an empty Fishing treasure category diff --git a/src/main/java/com/gmail/nossr50/config/mods/ArmorConfigManager.java b/src/main/java/com/gmail/nossr50/config/mods/ArmorConfigManager.java new file mode 100644 index 000000000..b3a783366 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/config/mods/ArmorConfigManager.java @@ -0,0 +1,34 @@ +package com.gmail.nossr50.config.mods; + +import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.util.ModManager; + +import java.io.File; +import java.util.regex.Pattern; + +public class ArmorConfigManager { + public ArmorConfigManager(mcMMO plugin) { + Pattern pattern = Pattern.compile("armor\\.(?:.+)\\.yml"); + File dataFolder = new File(mcMMO.getModDirectory()); + File vanilla = new File(dataFolder, "armor.default.yml"); + ModManager modManager = mcMMO.getModManager(); + + if (!vanilla.exists()) { + plugin.saveResource(plugin.getDataFolder().getName() + File.separator + "armor.default.yml", false); + } + + for (String fileName : dataFolder.list()) { + if (!pattern.matcher(fileName).matches()) { + continue; + } + + File file = new File(dataFolder, fileName); + + if (file.isDirectory()) { + continue; + } + + modManager.registerCustomArmor(new CustomArmorConfig(fileName)); + } + } +} diff --git a/src/main/java/com/gmail/nossr50/config/mods/BlockConfigManager.java b/src/main/java/com/gmail/nossr50/config/mods/BlockConfigManager.java new file mode 100644 index 000000000..56dbd4c07 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/config/mods/BlockConfigManager.java @@ -0,0 +1,34 @@ +package com.gmail.nossr50.config.mods; + +import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.util.ModManager; + +import java.io.File; +import java.util.regex.Pattern; + +public class BlockConfigManager { + public BlockConfigManager(mcMMO plugin) { + Pattern pattern = Pattern.compile("blocks\\.(?:.+)\\.yml"); + File dataFolder = new File(mcMMO.getModDirectory()); + File vanilla = new File(dataFolder, "blocks.default.yml"); + ModManager modManager = mcMMO.getModManager(); + + if (!vanilla.exists()) { + plugin.saveResource(plugin.getDataFolder().getName() + File.separator + "blocks.default.yml", false); + } + + for (String fileName : dataFolder.list()) { + if (!pattern.matcher(fileName).matches()) { + continue; + } + + File file = new File(dataFolder, fileName); + + if (file.isDirectory()) { + continue; + } + + modManager.registerCustomBlocks(new CustomBlockConfig(fileName)); + } + } +} diff --git a/src/main/java/com/gmail/nossr50/config/mods/CustomArmorConfig.java b/src/main/java/com/gmail/nossr50/config/mods/CustomArmorConfig.java index 9ebdb86f0..ff2afd141 100644 --- a/src/main/java/com/gmail/nossr50/config/mods/CustomArmorConfig.java +++ b/src/main/java/com/gmail/nossr50/config/mods/CustomArmorConfig.java @@ -16,42 +16,22 @@ import com.gmail.nossr50.skills.repair.repairables.Repairable; import com.gmail.nossr50.skills.repair.repairables.RepairableFactory; public class CustomArmorConfig extends ConfigLoader { - private static CustomArmorConfig instance; - private boolean needsUpdate = false; - private List repairables; + public List customBoots = new ArrayList(); + public List customChestplates = new ArrayList(); + public List customHelmets = new ArrayList(); + public List customLeggings = new ArrayList(); - private List customBoots = new ArrayList(); - private List customChestplates = new ArrayList(); - private List customHelmets = new ArrayList(); - private List customLeggings = new ArrayList(); + public List repairables = new ArrayList(); - public CustomArmorConfig() { - super("mods", "armor.yml"); + protected CustomArmorConfig(String fileName) { + super("mods", fileName); loadKeys(); } - public static CustomArmorConfig getInstance() { - if (instance == null) { - instance = new CustomArmorConfig(); - } - - return instance; - } - - public List getLoadedRepairables() { - if (repairables == null) { - return new ArrayList(); - } - - return repairables; - } - @Override protected void loadKeys() { - repairables = new ArrayList(); - loadArmor("Boots", customBoots); loadArmor("Chestplates", customChestplates); loadArmor("Helmets", customHelmets); @@ -117,20 +97,4 @@ public class CustomArmorConfig extends ConfigLoader { materialList.add(armorMaterial); } } - - public boolean isCustomBoots(Material material) { - return customBoots.contains(material); - } - - public boolean isCustomChestplate(Material material) { - return customChestplates.contains(material); - } - - public boolean isCustomHelmet(Material material) { - return customHelmets.contains(material); - } - - public boolean isCustomLeggings(Material material) { - return customLeggings.contains(material); - } } diff --git a/src/main/java/com/gmail/nossr50/config/mods/CustomBlockConfig.java b/src/main/java/com/gmail/nossr50/config/mods/CustomBlockConfig.java index 6eaca7647..12edb75c7 100644 --- a/src/main/java/com/gmail/nossr50/config/mods/CustomBlockConfig.java +++ b/src/main/java/com/gmail/nossr50/config/mods/CustomBlockConfig.java @@ -13,40 +13,29 @@ import com.gmail.nossr50.config.ConfigLoader; import com.gmail.nossr50.datatypes.mods.CustomBlock; public class CustomBlockConfig extends ConfigLoader { - private static CustomBlockConfig instance; - private boolean needsUpdate = false; - private List customExcavationBlocks = new ArrayList(); - private List customHerbalismBlocks = new ArrayList(); - private List customMiningBlocks = new ArrayList(); - private List customWoodcuttingBlocks = new ArrayList(); - private List customOres = new ArrayList(); - private List customLogs = new ArrayList(); - private List customLeaves = new ArrayList(); - private List customAbilityBlocks = new ArrayList(); + public List customExcavationBlocks = new ArrayList(); + public List customHerbalismBlocks = new ArrayList(); + public List customMiningBlocks = new ArrayList(); + public List customOres = new ArrayList(); + public List customLogs = new ArrayList(); + public List customLeaves = new ArrayList(); + public List customAbilityBlocks = new ArrayList(); - private HashMap customBlockMap = new HashMap(); + public HashMap customBlockMap = new HashMap(); - public CustomBlockConfig() { - super("mods", "blocks.yml"); + protected CustomBlockConfig(String fileName) { + super("mods", fileName); loadKeys(); } - public static CustomBlockConfig getInstance() { - if (instance == null) { - instance = new CustomBlockConfig(); - } - - return instance; - } - @Override protected void loadKeys() { loadBlocks("Excavation", customExcavationBlocks); loadBlocks("Herbalism", customHerbalismBlocks); loadBlocks("Mining", customMiningBlocks); - loadBlocks("Woodcutting", customWoodcuttingBlocks); + loadBlocks("Woodcutting", null); loadBlocks("Ability_Blocks", customAbilityBlocks); if (needsUpdate) { @@ -85,7 +74,10 @@ public class CustomBlockConfig extends ConfigLoader { byte blockData = (blockInfo.length == 2) ? Byte.valueOf(blockInfo[1]) : 0; MaterialData blockMaterialData = new MaterialData(blockMaterial, blockData); - blockList.add(blockMaterialData); + + if (blockList != null) { + blockList.add(blockMaterialData); + } if (skillType.equals("Ability_Blocks")) { continue; @@ -111,40 +103,4 @@ public class CustomBlockConfig extends ConfigLoader { customBlockMap.put(blockMaterialData, new CustomBlock(xp, config.getBoolean(skillType + "." + blockName + ".Double_Drops_Enabled"), smeltingXp)); } } - - public CustomBlock getCustomBlock(MaterialData data) { - return customBlockMap.get(data); - } - - public boolean isCustomOre(MaterialData data) { - return customOres.contains(data); - } - - public boolean isCustomLog(MaterialData data) { - return customLogs.contains(data); - } - - public boolean isCustomLeaf(MaterialData data) { - return customLeaves.contains(data); - } - - public boolean isCustomAbilityBlock(MaterialData data) { - return customAbilityBlocks.contains(data); - } - - public boolean isCustomExcavationBlock(MaterialData data) { - return customExcavationBlocks.contains(data); - } - - public boolean isCustomHerbalismBlock(MaterialData data) { - return customHerbalismBlocks.contains(data); - } - - public boolean isCustomMiningBlock(MaterialData data) { - return customMiningBlocks.contains(data); - } - - public boolean isCustomWoodcuttingBlock(MaterialData data) { - return customWoodcuttingBlocks.contains(data); - } } diff --git a/src/main/java/com/gmail/nossr50/config/mods/CustomEntityConfig.java b/src/main/java/com/gmail/nossr50/config/mods/CustomEntityConfig.java index f395eae92..16be6e00e 100644 --- a/src/main/java/com/gmail/nossr50/config/mods/CustomEntityConfig.java +++ b/src/main/java/com/gmail/nossr50/config/mods/CustomEntityConfig.java @@ -3,7 +3,6 @@ package com.gmail.nossr50.config.mods; import java.util.HashMap; import org.bukkit.Material; -import org.bukkit.entity.Entity; import org.bukkit.material.MaterialData; import com.gmail.nossr50.config.ConfigLoader; @@ -12,24 +11,14 @@ import com.gmail.nossr50.datatypes.mods.CustomEntity; import org.apache.commons.lang.ClassUtils; public class CustomEntityConfig extends ConfigLoader { - private static CustomEntityConfig instance; + public HashMap customEntityClassMap = new HashMap(); + public HashMap customEntityTypeMap = new HashMap(); - private HashMap customEntityClassMap = new HashMap(); - private HashMap customEntityTypeMap = new HashMap(); - - public CustomEntityConfig() { - super("mods", "entities.yml"); + protected CustomEntityConfig(String fileName) { + super("mods", fileName); loadKeys(); } - public static CustomEntityConfig getInstance() { - if (instance == null) { - instance = new CustomEntityConfig(); - } - - return instance; - } - @Override protected void loadKeys() { if (config.getConfigurationSection("Hostile") != null) { @@ -71,47 +60,4 @@ public class CustomEntityConfig extends ConfigLoader { customEntityClassMap.put(clazz == null ? null : clazz.getName(), entity); } } - - public boolean isCustomEntity(Entity entity) { - if (customEntityTypeMap.containsKey(entity.getType().toString())) { - return true; - } - - try { - return customEntityClassMap.containsKey(((Class) entity.getClass().getDeclaredField("entityClass").get(entity)).getName()); - } - catch (Exception e) { - if (e instanceof NoSuchFieldException || e instanceof IllegalArgumentException || e instanceof IllegalAccessException) { - return customEntityClassMap.containsKey(entity.getClass().getName()); - } - - e.printStackTrace(); - return false; - } - } - - public CustomEntity getCustomEntity(Entity entity) { - CustomEntity customEntity = customEntityTypeMap.get(entity.getType().toString()); - - if (customEntity == null) { - try { - customEntity = customEntityClassMap.get(((Class) entity.getClass().getDeclaredField("entityClass").get(entity)).getName()); - } - catch (Exception e) { - if (e instanceof NoSuchFieldException || e instanceof IllegalArgumentException || e instanceof IllegalAccessException) { - customEntity = customEntityClassMap.get(entity.getClass().getName()); - } - else { - e.printStackTrace(); - } - } - } - - return customEntity; - } - - public void addEntity(CustomEntity customEntity, String className, String entityName) { - customEntityTypeMap.put(entityName, customEntity); - customEntityClassMap.put(className, customEntity); - } } diff --git a/src/main/java/com/gmail/nossr50/config/mods/CustomToolConfig.java b/src/main/java/com/gmail/nossr50/config/mods/CustomToolConfig.java index 2592e1ade..b1fa7c8fd 100644 --- a/src/main/java/com/gmail/nossr50/config/mods/CustomToolConfig.java +++ b/src/main/java/com/gmail/nossr50/config/mods/CustomToolConfig.java @@ -18,46 +18,26 @@ import com.gmail.nossr50.skills.repair.repairables.Repairable; import com.gmail.nossr50.skills.repair.repairables.RepairableFactory; public class CustomToolConfig extends ConfigLoader { - private static CustomToolConfig instance; - private boolean needsUpdate = false; - private List repairables; + public List customAxes = new ArrayList(); + public List customBows = new ArrayList(); + public List customHoes = new ArrayList(); + public List customPickaxes = new ArrayList(); + public List customShovels = new ArrayList(); + public List customSwords = new ArrayList(); - private List customAxes = new ArrayList(); - private List customBows = new ArrayList(); - private List customHoes = new ArrayList(); - private List customPickaxes = new ArrayList(); - private List customShovels = new ArrayList(); - private List customSwords = new ArrayList(); + public HashMap customToolMap = new HashMap(); - private HashMap customToolMap = new HashMap(); + public List repairables = new ArrayList(); - private CustomToolConfig() { - super("mods", "tools.yml"); + protected CustomToolConfig(String fileName) { + super("mods", fileName); loadKeys(); } - public static CustomToolConfig getInstance() { - if (instance == null) { - instance = new CustomToolConfig(); - } - - return instance; - } - - public List getLoadedRepairables() { - if (repairables == null) { - return new ArrayList(); - } - - return repairables; - } - @Override protected void loadKeys() { - repairables = new ArrayList(); - loadTool("Axes", customAxes); loadTool("Bows", customBows); loadTool("Hoes", customHoes); @@ -132,36 +112,4 @@ public class CustomToolConfig extends ConfigLoader { customToolMap.put(toolMaterial, tool); } } - - public boolean isCustomAxe(Material material) { - return customAxes.contains(material); - } - - public boolean isCustomBow(Material material) { - return customBows.contains(material); - } - - public boolean isCustomHoe(Material material) { - return customHoes.contains(material); - } - - public boolean isCustomPickaxe(Material material) { - return customPickaxes.contains(material); - } - - public boolean isCustomShovel(Material material) { - return customShovels.contains(material); - } - - public boolean isCustomSword(Material material) { - return customSwords.contains(material); - } - - public boolean isCustomTool(Material material) { - return customToolMap.containsKey(material); - } - - public CustomTool getCustomTool(Material material) { - return customToolMap.get(material); - } } diff --git a/src/main/java/com/gmail/nossr50/config/mods/EntityConfigManager.java b/src/main/java/com/gmail/nossr50/config/mods/EntityConfigManager.java new file mode 100644 index 000000000..e97c4ea89 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/config/mods/EntityConfigManager.java @@ -0,0 +1,34 @@ +package com.gmail.nossr50.config.mods; + +import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.util.ModManager; + +import java.io.File; +import java.util.regex.Pattern; + +public class EntityConfigManager { + public EntityConfigManager(mcMMO plugin) { + Pattern pattern = Pattern.compile("entities\\.(?:.+)\\.yml"); + File dataFolder = new File(mcMMO.getModDirectory()); + File vanilla = new File(dataFolder, "entities.default.yml"); + ModManager modManager = mcMMO.getModManager(); + + if (!vanilla.exists()) { + plugin.saveResource(plugin.getDataFolder().getName() + File.separator + "entities.default.yml", false); + } + + for (String fileName : dataFolder.list()) { + if (!pattern.matcher(fileName).matches()) { + continue; + } + + File file = new File(dataFolder, fileName); + + if (file.isDirectory()) { + continue; + } + + modManager.registerCustomEntities(new CustomEntityConfig(fileName)); + } + } +} diff --git a/src/main/java/com/gmail/nossr50/config/mods/ToolConfigManager.java b/src/main/java/com/gmail/nossr50/config/mods/ToolConfigManager.java new file mode 100644 index 000000000..af159ae3b --- /dev/null +++ b/src/main/java/com/gmail/nossr50/config/mods/ToolConfigManager.java @@ -0,0 +1,34 @@ +package com.gmail.nossr50.config.mods; + +import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.util.ModManager; + +import java.io.File; +import java.util.regex.Pattern; + +public class ToolConfigManager { + public ToolConfigManager(mcMMO plugin) { + Pattern pattern = Pattern.compile("tools\\.(?:.+)\\.yml"); + File dataFolder = new File(mcMMO.getModDirectory()); + File vanilla = new File(dataFolder, "tools.default.yml"); + ModManager modManager = mcMMO.getModManager(); + + if (!vanilla.exists()) { + plugin.saveResource(plugin.getDataFolder().getName() + File.separator + "tools.default.yml", false); + } + + for (String fileName : dataFolder.list()) { + if (!pattern.matcher(fileName).matches()) { + continue; + } + + File file = new File(dataFolder, fileName); + + if (file.isDirectory()) { + continue; + } + + modManager.registerCustomTools(new CustomToolConfig(fileName)); + } + } +} diff --git a/src/main/java/com/gmail/nossr50/config/repair/RepairConfigManager.java b/src/main/java/com/gmail/nossr50/config/repair/RepairConfigManager.java index 8a50897f9..ee81ed274 100644 --- a/src/main/java/com/gmail/nossr50/config/repair/RepairConfigManager.java +++ b/src/main/java/com/gmail/nossr50/config/repair/RepairConfigManager.java @@ -9,11 +9,9 @@ import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.skills.repair.repairables.Repairable; public class RepairConfigManager { - private List repairables; + private final List repairables = new ArrayList(); public RepairConfigManager(mcMMO plugin) { - repairables = new ArrayList(); - Pattern pattern = Pattern.compile("repair\\.(?:.+)\\.yml"); File dataFolder = plugin.getDataFolder(); File vanilla = new File(dataFolder, "repair.vanilla.yml"); @@ -34,19 +32,11 @@ public class RepairConfigManager { } RepairConfig rConfig = new RepairConfig(fileName); - List rConfigRepairables = rConfig.getLoadedRepairables(); - - if (rConfigRepairables != null) { - repairables.addAll(rConfigRepairables); - } + repairables.addAll(rConfig.getLoadedRepairables()); } } public List getLoadedRepairables() { - if (repairables == null) { - return new ArrayList(); - } - return repairables; } } diff --git a/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java b/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java index 4fc924f1e..9bcdb3e0e 100644 --- a/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java +++ b/src/main/java/com/gmail/nossr50/datatypes/player/McMMOPlayer.java @@ -47,7 +47,6 @@ import com.gmail.nossr50.skills.unarmed.UnarmedManager; import com.gmail.nossr50.skills.woodcutting.WoodcuttingManager; import com.gmail.nossr50.util.EventUtils; import com.gmail.nossr50.util.Misc; -import com.gmail.nossr50.util.ModUtils; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.StringUtils; import com.gmail.nossr50.util.skills.ParticleEffectUtils; @@ -757,7 +756,7 @@ public class McMMOPlayer { xp = (float) (xp / skillType.getXpModifier() * ExperienceConfig.getInstance().getExperienceGainsGlobalMultiplier()); if (Config.getInstance().getToolModsEnabled()) { - CustomTool tool = ModUtils.getToolFromItemStack(player.getItemInHand()); + CustomTool tool = mcMMO.getModManager().getTool(player.getItemInHand()); if (tool != null) { xp *= tool.getXpMultiplier(); @@ -843,7 +842,7 @@ public class McMMOPlayer { ItemStack inHand = player.getItemInHand(); - if (ModUtils.isCustomTool(inHand) && !ModUtils.getToolFromItemStack(inHand).isAbilityEnabled()) { + if (mcMMO.getModManager().isCustomTool(inHand) && !mcMMO.getModManager().getTool(inHand).isAbilityEnabled()) { return; } diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index d6eacbea0..284f3cf1d 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -5,6 +5,11 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; +import com.gmail.nossr50.config.mods.ArmorConfigManager; +import com.gmail.nossr50.config.mods.BlockConfigManager; +import com.gmail.nossr50.config.mods.EntityConfigManager; +import com.gmail.nossr50.config.mods.ToolConfigManager; +import com.gmail.nossr50.util.ModManager; import org.bukkit.entity.Player; import org.bukkit.event.HandlerList; import org.bukkit.metadata.FixedMetadataValue; @@ -14,10 +19,6 @@ import org.bukkit.plugin.java.JavaPlugin; import com.gmail.nossr50.config.AdvancedConfig; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.HiddenConfig; -import com.gmail.nossr50.config.mods.CustomArmorConfig; -import com.gmail.nossr50.config.mods.CustomBlockConfig; -import com.gmail.nossr50.config.mods.CustomEntityConfig; -import com.gmail.nossr50.config.mods.CustomToolConfig; import com.gmail.nossr50.config.potion.PotionConfig; import com.gmail.nossr50.config.repair.RepairConfigManager; import com.gmail.nossr50.config.treasure.TreasureConfig; @@ -65,6 +66,7 @@ public class mcMMO extends JavaPlugin { /* Managers */ private static ChunkManager placeStore; private static RepairableManager repairableManager; + private static ModManager modManager; private static DatabaseManager databaseManager; private static FormulaManager formulaManager; private static HolidayManager holidayManager; @@ -131,6 +133,8 @@ public class mcMMO extends JavaPlugin { setupFilePaths(); + modManager = new ModManager(); + loadConfigFiles(); if (!noErrorsInConfigFiles) { @@ -294,6 +298,10 @@ public class mcMMO extends JavaPlugin { return databaseManager; } + public static ModManager getModManager() { + return modManager; + } + @Deprecated public static void setDatabaseManager(DatabaseManager databaseManager) { mcMMO.databaseManager = databaseManager; @@ -329,13 +337,42 @@ public class mcMMO extends JavaPlugin { if (oldFlatfilePath.exists()) { if (!oldFlatfilePath.renameTo(new File(flatFileDirectory))) { - getLogger().warning("Failed to rename FlatFileStuff to flatfile !"); + getLogger().warning("Failed to rename FlatFileStuff to flatfile!"); } } if (oldModPath.exists()) { if (!oldModPath.renameTo(new File(modDirectory))) { - getLogger().warning("Failed to rename ModConfigs to mods !"); + getLogger().warning("Failed to rename ModConfigs to mods!"); + } + } + + File oldArmorFile = new File(modDirectory + "armor.yml"); + File oldBlocksFile = new File(modDirectory + "blocks.yml"); + File oldEntitiesFile = new File(modDirectory + "entities.yml"); + File oldToolsFile = new File(modDirectory + "tools.yml"); + + if (oldArmorFile.exists()) { + if (!oldArmorFile.renameTo(new File(modDirectory + "armor.default.yml"))) { + getLogger().warning("Failed to rename armor.yml to armor.default.yml!"); + } + } + + if (oldBlocksFile.exists()) { + if (!oldBlocksFile.renameTo(new File(modDirectory + "blocks.default.yml"))) { + getLogger().warning("Failed to rename blocks.yml to blocks.default.yml!"); + } + } + + if (oldEntitiesFile.exists()) { + if (!oldEntitiesFile.renameTo(new File(modDirectory + "entities.default.yml"))) { + getLogger().warning("Failed to rename entities.yml to entities.default.yml!"); + } + } + + if (oldToolsFile.exists()) { + if (!oldToolsFile.renameTo(new File(modDirectory + "tools.default.yml"))) { + getLogger().warning("Failed to rename tools.yml to tools.default.yml!"); } } } @@ -373,24 +410,24 @@ public class mcMMO extends JavaPlugin { List repairables = new ArrayList(); if (Config.getInstance().getToolModsEnabled()) { - repairables.addAll(CustomToolConfig.getInstance().getLoadedRepairables()); + new ToolConfigManager(this); } if (Config.getInstance().getArmorModsEnabled()) { - repairables.addAll(CustomArmorConfig.getInstance().getLoadedRepairables()); + new ArmorConfigManager(this); } if (Config.getInstance().getBlockModsEnabled()) { - CustomBlockConfig.getInstance(); + new BlockConfigManager(this); } if (Config.getInstance().getEntityModsEnabled()) { - CustomEntityConfig.getInstance(); + new EntityConfigManager(this); } // Load repair configs, make manager, and register them at this time - RepairConfigManager rManager = new RepairConfigManager(this); - repairables.addAll(rManager.getLoadedRepairables()); + repairables.addAll(new RepairConfigManager(this).getLoadedRepairables()); + repairables.addAll(modManager.getLoadedRepairables()); repairableManager = new SimpleRepairableManager(repairables.size()); repairableManager.registerRepairables(repairables); } diff --git a/src/main/java/com/gmail/nossr50/skills/excavation/Excavation.java b/src/main/java/com/gmail/nossr50/skills/excavation/Excavation.java index 8b4b4fd21..18d60cce8 100644 --- a/src/main/java/com/gmail/nossr50/skills/excavation/Excavation.java +++ b/src/main/java/com/gmail/nossr50/skills/excavation/Excavation.java @@ -3,13 +3,13 @@ package com.gmail.nossr50.skills.excavation; import java.util.ArrayList; import java.util.List; +import com.gmail.nossr50.mcMMO; import org.bukkit.block.BlockState; import com.gmail.nossr50.config.experience.ExperienceConfig; import com.gmail.nossr50.config.treasure.TreasureConfig; import com.gmail.nossr50.datatypes.skills.SkillType; import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure; -import com.gmail.nossr50.util.ModUtils; public class Excavation { /** @@ -52,8 +52,8 @@ public class Excavation { protected static int getBlockXP(BlockState blockState) { int xp = ExperienceConfig.getInstance().getXp(SkillType.EXCAVATION, blockState.getType()); - if (xp == 0 && ModUtils.isCustomExcavationBlock(blockState)) { - xp = ModUtils.getCustomBlock(blockState).getXpGain(); + if (xp == 0 && mcMMO.getModManager().isCustomExcavationBlock(blockState)) { + xp = mcMMO.getModManager().getBlock(blockState).getXpGain(); } return xp; diff --git a/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java b/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java index d16eb9d27..6d3395cf1 100644 --- a/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java +++ b/src/main/java/com/gmail/nossr50/skills/herbalism/HerbalismManager.java @@ -32,7 +32,6 @@ import com.gmail.nossr50.skills.SkillManager; import com.gmail.nossr50.util.BlockUtils; import com.gmail.nossr50.util.EventUtils; import com.gmail.nossr50.util.Misc; -import com.gmail.nossr50.util.ModUtils; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.StringUtils; import com.gmail.nossr50.util.skills.SkillUtils; @@ -136,8 +135,8 @@ public class HerbalismManager extends SkillManager { int xp; boolean greenTerra = mcMMOPlayer.getAbilityMode(skill.getAbility()); - if (ModUtils.isCustomHerbalismBlock(blockState)) { - CustomBlock customBlock = ModUtils.getCustomBlock(blockState); + if (mcMMO.getModManager().isCustomHerbalismBlock(blockState)) { + CustomBlock customBlock = mcMMO.getModManager().getBlock(blockState); xp = customBlock.getXpGain(); if (Permissions.secondaryAbilityEnabled(player, SecondaryAbility.HERBALISM_DOUBLE_DROPS) && customBlock.isDoubleDropEnabled()) { diff --git a/src/main/java/com/gmail/nossr50/skills/mining/Mining.java b/src/main/java/com/gmail/nossr50/skills/mining/Mining.java index bef3b12e3..d442e9322 100644 --- a/src/main/java/com/gmail/nossr50/skills/mining/Mining.java +++ b/src/main/java/com/gmail/nossr50/skills/mining/Mining.java @@ -1,5 +1,6 @@ package com.gmail.nossr50.skills.mining; +import com.gmail.nossr50.mcMMO; import org.bukkit.Material; import org.bukkit.block.BlockState; import org.bukkit.inventory.ItemStack; @@ -8,7 +9,6 @@ import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.experience.ExperienceConfig; import com.gmail.nossr50.datatypes.skills.SkillType; import com.gmail.nossr50.util.Misc; -import com.gmail.nossr50.util.ModUtils; public class Mining { @@ -21,8 +21,8 @@ public class Mining { Material blockType = blockState.getType(); int xp = ExperienceConfig.getInstance().getXp(SkillType.MINING, blockType != Material.GLOWING_REDSTONE_ORE ? blockType : Material.REDSTONE_ORE); - if (xp == 0 && ModUtils.isCustomMiningBlock(blockState)) { - xp = ModUtils.getCustomBlock(blockState).getXpGain(); + if (xp == 0 && mcMMO.getModManager().isCustomMiningBlock(blockState)) { + xp = mcMMO.getModManager().getBlock(blockState).getXpGain(); } return xp; @@ -65,7 +65,7 @@ public class Mining { return; default: - if (ModUtils.isCustomMiningBlock(blockState)) { + if (mcMMO.getModManager().isCustomMiningBlock(blockState)) { Misc.dropItem(blockState.getLocation(), blockState.getData().toItemStack(1)); } return; @@ -104,7 +104,7 @@ public class Mining { return; default: - if (ModUtils.isCustomMiningBlock(blockState)) { + if (mcMMO.getModManager().isCustomMiningBlock(blockState)) { Misc.dropItems(blockState.getLocation(), blockState.getBlock().getDrops()); } return; diff --git a/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java b/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java index a1f755254..062056315 100644 --- a/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java +++ b/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java @@ -23,7 +23,6 @@ import com.gmail.nossr50.skills.mining.BlastMining.Tier; import com.gmail.nossr50.util.BlockUtils; import com.gmail.nossr50.util.EventUtils; import com.gmail.nossr50.util.Misc; -import com.gmail.nossr50.util.ModUtils; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.skills.SkillUtils; @@ -70,7 +69,7 @@ public class MiningManager extends SkillManager { SkillUtils.handleDurabilityChange(getPlayer().getItemInHand(), Config.getInstance().getAbilityToolDamage()); } - if ((ModUtils.isCustomMiningBlock(blockState) && !ModUtils.getCustomBlock(blockState).isDoubleDropEnabled()) || material != Material.GLOWING_REDSTONE_ORE && !Config.getInstance().getDoubleDropsEnabled(skill, material)) { + if ((mcMMO.getModManager().isCustomMiningBlock(blockState) && !mcMMO.getModManager().getBlock(blockState).isDoubleDropEnabled()) || material != Material.GLOWING_REDSTONE_ORE && !Config.getInstance().getDoubleDropsEnabled(skill, material)) { return; } diff --git a/src/main/java/com/gmail/nossr50/skills/repair/repairables/SimpleRepairableManager.java b/src/main/java/com/gmail/nossr50/skills/repair/repairables/SimpleRepairableManager.java index 6fe40db0b..128f283cc 100644 --- a/src/main/java/com/gmail/nossr50/skills/repair/repairables/SimpleRepairableManager.java +++ b/src/main/java/com/gmail/nossr50/skills/repair/repairables/SimpleRepairableManager.java @@ -6,7 +6,6 @@ import java.util.List; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; - public class SimpleRepairableManager implements RepairableManager { private HashMap repairables; diff --git a/src/main/java/com/gmail/nossr50/skills/smelting/Smelting.java b/src/main/java/com/gmail/nossr50/skills/smelting/Smelting.java index fed50ef9f..de4ccc310 100644 --- a/src/main/java/com/gmail/nossr50/skills/smelting/Smelting.java +++ b/src/main/java/com/gmail/nossr50/skills/smelting/Smelting.java @@ -1,5 +1,6 @@ package com.gmail.nossr50.skills.smelting; +import com.gmail.nossr50.mcMMO; import org.bukkit.Material; import org.bukkit.inventory.ItemStack; import org.bukkit.material.MaterialData; @@ -7,7 +8,6 @@ import org.bukkit.material.MaterialData; import com.gmail.nossr50.config.AdvancedConfig; import com.gmail.nossr50.config.experience.ExperienceConfig; import com.gmail.nossr50.datatypes.skills.SkillType; -import com.gmail.nossr50.util.ModUtils; public class Smelting { // The order of the values is extremely important, a few methods depend on it to work properly @@ -50,6 +50,6 @@ public class Smelting { MaterialData data = smelting.getData(); Material resourceType = smelting.getType(); - return ModUtils.isCustomOre(data) ? ModUtils.getCustomBlock(data).getSmeltingXpGain() : ExperienceConfig.getInstance().getXp(SkillType.SMELTING, resourceType != Material.GLOWING_REDSTONE_ORE ? resourceType : Material.REDSTONE_ORE); + return mcMMO.getModManager().isCustomOre(data) ? mcMMO.getModManager().getBlock(data).getSmeltingXpGain() : ExperienceConfig.getInstance().getXp(SkillType.SMELTING, resourceType != Material.GLOWING_REDSTONE_ORE ? resourceType : Material.REDSTONE_ORE); } } diff --git a/src/main/java/com/gmail/nossr50/skills/woodcutting/Woodcutting.java b/src/main/java/com/gmail/nossr50/skills/woodcutting/Woodcutting.java index 334ea6d45..057bdf65f 100644 --- a/src/main/java/com/gmail/nossr50/skills/woodcutting/Woodcutting.java +++ b/src/main/java/com/gmail/nossr50/skills/woodcutting/Woodcutting.java @@ -16,7 +16,6 @@ import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.experience.ExperienceConfig; import com.gmail.nossr50.util.BlockUtils; import com.gmail.nossr50.util.Misc; -import com.gmail.nossr50.util.ModUtils; import com.gmail.nossr50.util.skills.SkillUtils; public final class Woodcutting { @@ -52,8 +51,8 @@ public final class Woodcutting { break; } - if (ModUtils.isCustomLogBlock(blockState)) { - return ModUtils.getCustomBlock(blockState).getXpGain(); + if (mcMMO.getModManager().isCustomLog(blockState)) { + return mcMMO.getModManager().getBlock(blockState).getXpGain(); } switch (((Tree) blockState.getData()).getSpecies()) { @@ -86,7 +85,7 @@ public final class Woodcutting { * @param blockState Block being broken */ protected static void checkForDoubleDrop(BlockState blockState) { - if (ModUtils.isCustomLogBlock(blockState) && ModUtils.getCustomBlock(blockState).isDoubleDropEnabled()) { + if (mcMMO.getModManager().isCustomLog(blockState) && mcMMO.getModManager().getBlock(blockState).isDoubleDropEnabled()) { Misc.dropItems(blockState.getLocation(), blockState.getBlock().getDrops()); } else { diff --git a/src/main/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingManager.java b/src/main/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingManager.java index b676abd58..1755e39fd 100644 --- a/src/main/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingManager.java +++ b/src/main/java/com/gmail/nossr50/skills/woodcutting/WoodcuttingManager.java @@ -3,6 +3,7 @@ package com.gmail.nossr50.skills.woodcutting; import java.util.HashSet; import java.util.Set; +import com.gmail.nossr50.mcMMO; import org.bukkit.Material; import org.bukkit.block.Block; import org.bukkit.block.BlockFace; @@ -22,7 +23,6 @@ import com.gmail.nossr50.skills.woodcutting.Woodcutting.ExperienceGainMethod; import com.gmail.nossr50.util.EventUtils; import com.gmail.nossr50.util.ItemUtils; import com.gmail.nossr50.util.Misc; -import com.gmail.nossr50.util.ModUtils; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.skills.CombatUtils; import com.gmail.nossr50.util.skills.SkillUtils; @@ -126,18 +126,18 @@ public class WoodcuttingManager extends SkillManager { xp += Woodcutting.getExperienceFromLog(blockState, ExperienceGainMethod.TREE_FELLER); Misc.dropItems(blockState.getLocation(), block.getDrops()); } - else if (ModUtils.isCustomLogBlock(blockState)) { + else if (mcMMO.getModManager().isCustomLog(blockState)) { if (canGetDoubleDrops()) { Woodcutting.checkForDoubleDrop(blockState); } - CustomBlock customBlock = ModUtils.getCustomBlock(blockState); + CustomBlock customBlock = mcMMO.getModManager().getBlock(blockState); xp = customBlock.getXpGain(); Misc.dropItems(blockState.getLocation(), block.getDrops()); } - else if (ModUtils.isCustomLeafBlock(blockState)) { - Misc.randomDropItems(blockState.getLocation(), block.getDrops(), 10.0); + else if (mcMMO.getModManager().isCustomLeaf(blockState)) { + Misc.dropItems(blockState.getLocation(), block.getDrops()); } else { Tree tree = (Tree) blockState.getData(); diff --git a/src/main/java/com/gmail/nossr50/util/BlockUtils.java b/src/main/java/com/gmail/nossr50/util/BlockUtils.java index 43af44c02..a7c5733ff 100644 --- a/src/main/java/com/gmail/nossr50/util/BlockUtils.java +++ b/src/main/java/com/gmail/nossr50/util/BlockUtils.java @@ -2,6 +2,7 @@ package com.gmail.nossr50.util; import java.util.HashSet; +import com.gmail.nossr50.mcMMO; import org.bukkit.CropState; import org.bukkit.Material; import org.bukkit.NetherWartsState; @@ -64,7 +65,7 @@ public final class BlockUtils { return false; default: - return !isMcMMOAnvil(blockState) && !ModUtils.isCustomAbilityBlock(blockState); + return !isMcMMOAnvil(blockState) && !mcMMO.getModManager().isCustomAbilityBlock(blockState); } } @@ -135,7 +136,7 @@ public final class BlockUtils { return ((CocoaPlant) blockState.getData()).getSize() == CocoaPlantSize.LARGE; default: - return ModUtils.isCustomHerbalismBlock(blockState); + return mcMMO.getModManager().isCustomHerbalismBlock(blockState); } } @@ -157,7 +158,7 @@ public final class BlockUtils { return true; default: - return isOre(blockState) || ModUtils.isCustomMiningBlock(blockState); + return isOre(blockState) || mcMMO.getModManager().isCustomMiningBlock(blockState); } } @@ -181,7 +182,7 @@ public final class BlockUtils { return true; default: - return ModUtils.isCustomExcavationBlock(blockState); + return mcMMO.getModManager().isCustomExcavationBlock(blockState); } } @@ -199,7 +200,7 @@ public final class BlockUtils { return true; default: - return ModUtils.isCustomLogBlock(blockState); + return mcMMO.getModManager().isCustomLog(blockState); } } @@ -215,7 +216,7 @@ public final class BlockUtils { return true; default: - return ModUtils.isCustomLeafBlock(blockState); + return mcMMO.getModManager().isCustomLeaf(blockState); } } diff --git a/src/main/java/com/gmail/nossr50/util/ItemUtils.java b/src/main/java/com/gmail/nossr50/util/ItemUtils.java index eb6c2fd30..1116018e8 100644 --- a/src/main/java/com/gmail/nossr50/util/ItemUtils.java +++ b/src/main/java/com/gmail/nossr50/util/ItemUtils.java @@ -10,9 +10,6 @@ import org.bukkit.inventory.meta.ItemMeta; import org.bukkit.material.Dye; import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.config.Config; -import com.gmail.nossr50.config.mods.CustomArmorConfig; -import com.gmail.nossr50.config.mods.CustomToolConfig; import com.gmail.nossr50.config.party.ItemWeightConfig; import com.gmail.nossr50.locale.LocaleLoader; @@ -33,7 +30,7 @@ public final class ItemUtils { return true; default: - return (Config.getInstance().getToolModsEnabled() && CustomToolConfig.getInstance().isCustomBow(type)); + return mcMMO.getModManager().isCustomBow(type); } } @@ -55,7 +52,7 @@ public final class ItemUtils { return true; default: - return (Config.getInstance().getToolModsEnabled() && CustomToolConfig.getInstance().isCustomSword(type)); + return mcMMO.getModManager().isCustomSword(type); } } @@ -77,7 +74,7 @@ public final class ItemUtils { return true; default: - return (Config.getInstance().getToolModsEnabled() && CustomToolConfig.getInstance().isCustomHoe(type)); + return mcMMO.getModManager().isCustomHoe(type); } } @@ -99,7 +96,7 @@ public final class ItemUtils { return true; default: - return (Config.getInstance().getToolModsEnabled() && CustomToolConfig.getInstance().isCustomShovel(type)); + return mcMMO.getModManager().isCustomShovel(type); } } @@ -121,7 +118,7 @@ public final class ItemUtils { return true; default: - return (Config.getInstance().getToolModsEnabled() && CustomToolConfig.getInstance().isCustomAxe(type)); + return mcMMO.getModManager().isCustomAxe(type); } } @@ -143,7 +140,7 @@ public final class ItemUtils { return true; default: - return (Config.getInstance().getToolModsEnabled() && CustomToolConfig.getInstance().isCustomPickaxe(type)); + return mcMMO.getModManager().isCustomPickaxe(type); } } @@ -165,7 +162,7 @@ public final class ItemUtils { return true; default: - return Config.getInstance().getArmorModsEnabled() && CustomArmorConfig.getInstance().isCustomHelmet(type); + return mcMMO.getModManager().isCustomHelmet(type); } } @@ -187,7 +184,7 @@ public final class ItemUtils { return true; default: - return Config.getInstance().getArmorModsEnabled() && CustomArmorConfig.getInstance().isCustomChestplate(type); + return mcMMO.getModManager().isCustomChestplate(type); } } @@ -209,7 +206,7 @@ public final class ItemUtils { return true; default: - return Config.getInstance().getArmorModsEnabled() && CustomArmorConfig.getInstance().isCustomLeggings(type); + return mcMMO.getModManager().isCustomLeggings(type); } } @@ -231,7 +228,7 @@ public final class ItemUtils { return true; default: - return Config.getInstance().getArmorModsEnabled() && CustomArmorConfig.getInstance().isCustomBoots(type); + return mcMMO.getModManager().isCustomBoots(type); } } diff --git a/src/main/java/com/gmail/nossr50/util/MaterialUtils.java b/src/main/java/com/gmail/nossr50/util/MaterialUtils.java index a2ecdc120..c81d74b4e 100644 --- a/src/main/java/com/gmail/nossr50/util/MaterialUtils.java +++ b/src/main/java/com/gmail/nossr50/util/MaterialUtils.java @@ -1,5 +1,6 @@ package com.gmail.nossr50.util; +import com.gmail.nossr50.mcMMO; import org.bukkit.material.MaterialData; public final class MaterialUtils { @@ -19,7 +20,7 @@ public final class MaterialUtils { return true; default: - return ModUtils.isCustomOre(data); + return mcMMO.getModManager().isCustomOre(data); } } } diff --git a/src/main/java/com/gmail/nossr50/util/MobHealthbarUtils.java b/src/main/java/com/gmail/nossr50/util/MobHealthbarUtils.java index 06fb5f67f..dad16a344 100644 --- a/src/main/java/com/gmail/nossr50/util/MobHealthbarUtils.java +++ b/src/main/java/com/gmail/nossr50/util/MobHealthbarUtils.java @@ -167,7 +167,7 @@ public final class MobHealthbarUtils { return true; default: - return ModUtils.isCustomBossEntity(livingEntity); + return false; } } } diff --git a/src/main/java/com/gmail/nossr50/util/ModManager.java b/src/main/java/com/gmail/nossr50/util/ModManager.java new file mode 100644 index 000000000..426bd1f07 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/util/ModManager.java @@ -0,0 +1,283 @@ +package com.gmail.nossr50.util; + +import com.gmail.nossr50.config.Config; +import com.gmail.nossr50.config.mods.CustomArmorConfig; +import com.gmail.nossr50.config.mods.CustomBlockConfig; +import com.gmail.nossr50.config.mods.CustomEntityConfig; +import com.gmail.nossr50.config.mods.CustomToolConfig; +import com.gmail.nossr50.datatypes.mods.CustomBlock; +import com.gmail.nossr50.datatypes.mods.CustomEntity; +import com.gmail.nossr50.datatypes.mods.CustomTool; +import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.skills.repair.repairables.Repairable; +import org.bukkit.Material; +import org.bukkit.block.BlockState; +import org.bukkit.configuration.file.YamlConfiguration; +import org.bukkit.entity.Entity; +import org.bukkit.inventory.ItemStack; +import org.bukkit.material.MaterialData; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; + +public class ModManager { + private List repairables = new ArrayList(); + + // Armor Mods + private List customBoots = new ArrayList(); + private List customChestplates = new ArrayList(); + private List customHelmets = new ArrayList(); + private List customLeggings = new ArrayList(); + + // Block Mods + private List customExcavationBlocks = new ArrayList(); + private List customHerbalismBlocks = new ArrayList(); + private List customMiningBlocks = new ArrayList(); + private List customOres = new ArrayList(); + private List customLogs = new ArrayList(); + private List customLeaves = new ArrayList(); + private List customAbilityBlocks = new ArrayList(); + private HashMap customBlockMap = new HashMap(); + + // Entity Mods + private HashMap customEntityClassMap = new HashMap(); + private HashMap customEntityTypeMap = new HashMap(); + + // Tool Mods + private List customAxes = new ArrayList(); + private List customBows = new ArrayList(); + private List customHoes = new ArrayList(); + private List customPickaxes = new ArrayList(); + private List customShovels = new ArrayList(); + private List customSwords = new ArrayList(); + private HashMap customToolMap = new HashMap(); + + public void registerCustomArmor(CustomArmorConfig config) { + customBoots.addAll(config.customBoots); + customChestplates.addAll(config.customChestplates); + customHelmets.addAll(config.customHelmets); + customLeggings.addAll(config.customLeggings); + repairables.addAll(config.repairables); + } + + public void registerCustomBlocks(CustomBlockConfig config) { + customExcavationBlocks.addAll(config.customExcavationBlocks); + customHerbalismBlocks.addAll(config.customHerbalismBlocks); + customMiningBlocks.addAll(config.customMiningBlocks); + customOres.addAll(config.customOres); + customLogs.addAll(config.customLogs); + customLeaves.addAll(config.customLeaves); + customAbilityBlocks.addAll(config.customAbilityBlocks); + customBlockMap.putAll(config.customBlockMap); + } + + public void registerCustomEntities(CustomEntityConfig config) { + customEntityClassMap.putAll(config.customEntityClassMap); + customEntityTypeMap.putAll(config.customEntityTypeMap); + } + + public void registerCustomTools(CustomToolConfig config) { + customAxes.addAll(config.customAxes); + customBows.addAll(config.customBows); + customHoes.addAll(config.customHoes); + customPickaxes.addAll(config.customPickaxes); + customShovels.addAll(config.customShovels); + customSwords.addAll(config.customSwords); + customToolMap.putAll(config.customToolMap); + repairables.addAll(config.repairables); + } + + public boolean isCustomBoots(Material material) { + return Config.getInstance().getArmorModsEnabled() && customBoots.contains(material); + } + + public boolean isCustomChestplate(Material material) { + return Config.getInstance().getArmorModsEnabled() && customChestplates.contains(material); + } + + public boolean isCustomHelmet(Material material) { + return Config.getInstance().getArmorModsEnabled() && customHelmets.contains(material); + } + + public boolean isCustomLeggings(Material material) { + return Config.getInstance().getArmorModsEnabled() && customLeggings.contains(material); + } + + public boolean isCustomAxe(Material material) { + return Config.getInstance().getToolModsEnabled() && customAxes.contains(material); + } + + public boolean isCustomBow(Material material) { + return Config.getInstance().getToolModsEnabled() && customBows.contains(material); + } + + public boolean isCustomHoe(Material material) { + return Config.getInstance().getToolModsEnabled() && customHoes.contains(material); + } + + public boolean isCustomPickaxe(Material material) { + return Config.getInstance().getToolModsEnabled() && customPickaxes.contains(material); + } + + public boolean isCustomShovel(Material material) { + return Config.getInstance().getToolModsEnabled() && customShovels.contains(material); + } + + public boolean isCustomSword(Material material) { + return Config.getInstance().getToolModsEnabled() && customSwords.contains(material); + } + + public boolean isCustomOre(MaterialData data) { + return Config.getInstance().getBlockModsEnabled() && customOres.contains(data); + } + + public boolean isCustomLog(BlockState state) { + return Config.getInstance().getBlockModsEnabled() && customLogs.contains(state.getData()); + } + + public boolean isCustomLeaf(BlockState state) { + return Config.getInstance().getBlockModsEnabled() && customLeaves.contains(state.getData()); + } + + public boolean isCustomAbilityBlock(BlockState state) { + return Config.getInstance().getBlockModsEnabled() && customAbilityBlocks.contains(state.getData()); + } + + public boolean isCustomExcavationBlock(BlockState state) { + return Config.getInstance().getBlockModsEnabled() && customExcavationBlocks.contains(state.getData()); + } + + public boolean isCustomHerbalismBlock(BlockState state) { + return Config.getInstance().getBlockModsEnabled() && customHerbalismBlocks.contains(state.getData()); + } + + public boolean isCustomMiningBlock(BlockState state) { + return Config.getInstance().getBlockModsEnabled() && customMiningBlocks.contains(state.getData()); + } + + public CustomBlock getBlock(BlockState state) { + return customBlockMap.get(state.getData()); + } + + public CustomBlock getBlock(MaterialData data) { + return customBlockMap.get(data); + } + + /** + * Checks to see if an item is a custom tool. + * + * @param item Item to check + * @return true if the item is a custom tool, false otherwise + */ + public boolean isCustomTool(ItemStack item) { + return Config.getInstance().getToolModsEnabled() && item != null && customToolMap.containsKey(item.getType()); + } + + /** + * Get the custom tool associated with an item. + * + * @param item The item to check + * @return the tool if it exists, null otherwise + */ + public CustomTool getTool(ItemStack item) { + return item == null ? null : customToolMap.get(item.getType()); + } + + public List getLoadedRepairables() { + return repairables; + } + + public boolean isCustomEntity(Entity entity) { + if (!Config.getInstance().getEntityModsEnabled()) { + return false; + } + + if (customEntityTypeMap.containsKey(entity.getType().toString())) { + return true; + } + + try { + return customEntityClassMap.containsKey(((Class) entity.getClass().getDeclaredField("entityClass").get(entity)).getName()); + } + catch (Exception e) { + if (e instanceof NoSuchFieldException || e instanceof IllegalArgumentException || e instanceof IllegalAccessException) { + return customEntityClassMap.containsKey(entity.getClass().getName()); + } + + e.printStackTrace(); + return false; + } + } + + public CustomEntity getEntity(Entity entity) { + CustomEntity customEntity = customEntityTypeMap.get(entity.getType().toString()); + + if (customEntity == null) { + try { + customEntity = customEntityClassMap.get(((Class) entity.getClass().getDeclaredField("entityClass").get(entity)).getName()); + } + catch (Exception e) { + if (e instanceof NoSuchFieldException || e instanceof IllegalArgumentException || e instanceof IllegalAccessException) { + customEntity = customEntityClassMap.get(entity.getClass().getName()); + } + else { + e.printStackTrace(); + } + } + } + + return customEntity; + } + + public void addCustomEntity(Entity entity) { + if (!Config.getInstance().getEntityModsEnabled()) { + return; + } + + File entityFile = new File(mcMMO.p.getDataFolder(), "mods" + File.separator + "entities.default.yml"); + YamlConfiguration entitiesFile = YamlConfiguration.loadConfiguration(entityFile); + + String entityName = entity.getType().toString(); + String sanitizedEntityName = entityName.replace(".", "_"); + + if (entitiesFile.getKeys(false).contains(sanitizedEntityName)) { + return; + } + + entitiesFile.set(sanitizedEntityName + ".XP_Multiplier", 1.0D); + entitiesFile.set(sanitizedEntityName + ".Tameable", false); + entitiesFile.set(sanitizedEntityName + ".Taming_XP", 0); + entitiesFile.set(sanitizedEntityName + ".CanBeSummoned", false); + entitiesFile.set(sanitizedEntityName + ".COTW_Material", ""); + entitiesFile.set(sanitizedEntityName + ".COTW_Material_Data", 0); + entitiesFile.set(sanitizedEntityName + ".COTW_Material_Amount", 0); + + String className = ""; + + try { + className = ((Class) entity.getClass().getDeclaredField("entityClass").get(entity)).getName(); + } + catch (Exception e) { + if (e instanceof NoSuchFieldException || e instanceof IllegalArgumentException || e instanceof IllegalAccessException) { + className = entity.getClass().getName(); + } + else { + e.printStackTrace(); + } + } + + CustomEntity customEntity = new CustomEntity(1.0D, false, 0, false, null, 0); + customEntityTypeMap.put(entityName, customEntity); + customEntityClassMap.put(className, customEntity); + + try { + entitiesFile.save(entityFile); + mcMMO.p.debug(entity.getType().toString() + " was added to the custom entities file!"); + } + catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/com/gmail/nossr50/util/ModUtils.java b/src/main/java/com/gmail/nossr50/util/ModUtils.java deleted file mode 100644 index a9dc2176a..000000000 --- a/src/main/java/com/gmail/nossr50/util/ModUtils.java +++ /dev/null @@ -1,213 +0,0 @@ -package com.gmail.nossr50.util; - -import java.io.File; - -import org.bukkit.block.BlockState; -import org.bukkit.configuration.file.YamlConfiguration; -import org.bukkit.entity.Entity; -import org.bukkit.inventory.ItemStack; -import org.bukkit.material.MaterialData; - -import com.gmail.nossr50.mcMMO; -import com.gmail.nossr50.config.Config; -import com.gmail.nossr50.config.mods.CustomBlockConfig; -import com.gmail.nossr50.config.mods.CustomEntityConfig; -import com.gmail.nossr50.config.mods.CustomToolConfig; -import com.gmail.nossr50.datatypes.mods.CustomBlock; -import com.gmail.nossr50.datatypes.mods.CustomEntity; -import com.gmail.nossr50.datatypes.mods.CustomTool; - -public final class ModUtils { - private static boolean customToolsEnabled = Config.getInstance().getToolModsEnabled(); - private static boolean customBlocksEnabled = Config.getInstance().getBlockModsEnabled(); - private static boolean customEntitiesEnabled = Config.getInstance().getEntityModsEnabled(); - - private ModUtils() {} - - /** - * Get the custom tool associated with an item. - * - * @param item The item to check - * @return the tool if it exists, null otherwise - */ - public static CustomTool getToolFromItemStack(ItemStack item) { - return CustomToolConfig.getInstance().getCustomTool(item.getType()); - } - - /** - * Get the custom entity associated with an entity. - * - * @param entity The entity to check - * @return the entity is if exists, null otherwise - */ - public static CustomEntity getCustomEntity(Entity entity) { - return CustomEntityConfig.getInstance().getCustomEntity(entity); - } - - /** - * Get the custom block associated with an block. - * - * @param blockState The BlockState of the bloc to check - * @return the block if it exists, null otherwise - */ - public static CustomBlock getCustomBlock(BlockState blockState) { - return CustomBlockConfig.getInstance().getCustomBlock(blockState.getData()); - } - - public static CustomBlock getCustomBlock(MaterialData data) { - return CustomBlockConfig.getInstance().getCustomBlock(data); - } - - /** - * Check if a custom block is a woodcutting block. - * - * @param blockState The BlockState of the block to check - * @return true if the block represents a custom woodcutting block, false otherwise - */ - public static boolean isCustomWoodcuttingBlock(BlockState blockState) { - return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomWoodcuttingBlock(blockState.getData()); - } - - /** - * Check if a custom block should not activate abilites. - * - * @param blockState The BlockState of the block to check - * @return true if the block represents an ability block, false otherwise - */ - public static boolean isCustomAbilityBlock(BlockState blockState) { - return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomAbilityBlock(blockState.getData()); - } - - /** - * Check if a custom block is a mining block. - * - * @param blockState The BlockState of the block to check - * @return true if the block represents a custom mining block, false otherwise - */ - public static boolean isCustomMiningBlock(BlockState blockState) { - return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomMiningBlock(blockState.getData()); - } - - /** - * Check if a custom block is an excavation block. - * - * @param blockState The BlockState of the block to check - * @return true if the block represents a custom excavation block, false otherwise - */ - public static boolean isCustomExcavationBlock(BlockState blockState) { - return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomExcavationBlock(blockState.getData()); - } - - /** - * Check if a custom block is an herbalism block. - * - * @param blockState The BlockState of the block to check - * @return true if the block represents a custom herbalism block, false otherwise - */ - public static boolean isCustomHerbalismBlock(BlockState blockState) { - return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomHerbalismBlock(blockState.getData()); - } - - /** - * Check if a custom block is a leaf block. - * - * @param blockState The BlockState of the block to check - * @return true if the block represents leaves, false otherwise - */ - public static boolean isCustomLeafBlock(BlockState blockState) { - return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomLeaf(blockState.getData()); - } - - /** - * Check if a custom block is a log block. - * - * @param blockState The BlockState of the block to check - * @return true if the block represents a log, false otherwise - */ - public static boolean isCustomLogBlock(BlockState blockState) { - return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomLog(blockState.getData()); - } - - public static boolean isCustomOre(MaterialData data) { - return customBlocksEnabled && CustomBlockConfig.getInstance().isCustomOre(data); - } - - /** - * Checks to see if an item is a custom tool. - * - * @param item Item to check - * @return true if the item is a custom tool, false otherwise - */ - public static boolean isCustomTool(ItemStack item) { - return customToolsEnabled && CustomToolConfig.getInstance().isCustomTool(item.getType()); - } - - /** - * Checks to see if an entity is a custom entity. - * - * @param entity Entity to check - * @return true if the entity is a custom entity, false otherwise - */ - public static boolean isCustomEntity(Entity entity) { - return customEntitiesEnabled && CustomEntityConfig.getInstance().isCustomEntity(entity); - } - - /** - * Check if a custom entity is a boss. - * - * @param entity The entity to check - * @return true if the entity represents a boss, false otherwise - */ - public static boolean isCustomBossEntity(Entity entity) { - //TODO: Finish this method - return false; - } - - public static void addCustomEntity(Entity entity) { - if (!customEntitiesEnabled) { - return; - } - - File entityFile = CustomEntityConfig.getInstance().getFile(); - YamlConfiguration entitiesFile = YamlConfiguration.loadConfiguration(entityFile); - - String entityName = entity.getType().toString(); - String sanitizedEntityName = entityName.replace(".", "_"); - - if (entitiesFile.getKeys(false).contains(sanitizedEntityName)) { - return; - } - - entitiesFile.set(sanitizedEntityName + ".XP_Multiplier", 1.0D); - entitiesFile.set(sanitizedEntityName + ".Tameable", false); - entitiesFile.set(sanitizedEntityName + ".Taming_XP", 0); - entitiesFile.set(sanitizedEntityName + ".CanBeSummoned", false); - entitiesFile.set(sanitizedEntityName + ".COTW_Material", ""); - entitiesFile.set(sanitizedEntityName + ".COTW_Material_Data", 0); - entitiesFile.set(sanitizedEntityName + ".COTW_Material_Amount", 0); - - String className = ""; - - try { - className = ((Class) entity.getClass().getDeclaredField("entityClass").get(entity)).getName(); - } - catch (Exception e) { - if (e instanceof NoSuchFieldException || e instanceof IllegalArgumentException || e instanceof IllegalAccessException) { - className = entity.getClass().getName(); - } - else { - e.printStackTrace(); - } - } - - CustomEntityConfig.getInstance().addEntity(new CustomEntity(1.0D, false, 0, false, null, 0), className, entityName); - - try { - entitiesFile.save(entityFile); - mcMMO.p.debug(entity.getType().toString() + " was added to the custom entities file!"); - } - catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java index 8a5547c94..bbb3e712b 100644 --- a/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java +++ b/src/main/java/com/gmail/nossr50/util/skills/CombatUtils.java @@ -39,7 +39,6 @@ import com.gmail.nossr50.util.EventUtils; import com.gmail.nossr50.util.ItemUtils; import com.gmail.nossr50.util.Misc; import com.gmail.nossr50.util.MobHealthbarUtils; -import com.gmail.nossr50.util.ModUtils; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.player.UserManager; @@ -421,8 +420,8 @@ public final class CombatUtils { } } else { - if (ModUtils.isCustomEntity(target)) { - baseXP = ModUtils.getCustomEntity(target).getXpMultiplier(); + if (mcMMO.getModManager().isCustomEntity(target)) { + baseXP = mcMMO.getModManager().getEntity(target).getXpMultiplier(); } else if (target instanceof Animals) { baseXP = ExperienceConfig.getInstance().getAnimalsXP(); @@ -473,7 +472,7 @@ public final class CombatUtils { default: baseXP = 1.0; - ModUtils.addCustomEntity(target); + mcMMO.getModManager().addCustomEntity(target); break; } } @@ -609,8 +608,8 @@ public final class CombatUtils { else if (ItemUtils.isDiamondTool(inHand)) { tier = 4; } - else if (ModUtils.isCustomTool(inHand)) { - tier = ModUtils.getToolFromItemStack(inHand).getTier(); + else if (mcMMO.getModManager().isCustomTool(inHand)) { + tier = mcMMO.getModManager().getTool(inHand).getTier(); } return tier;