From 5645bf7982c0c8522b9564a5c01ae8a174f68346 Mon Sep 17 00:00:00 2001 From: GJ Date: Thu, 17 May 2012 00:24:33 -0400 Subject: [PATCH] Mod support - XP gain & double drops should now work for custom blocks EXCEPT Woodcutting. Custom excavation blocks will also never drop treasures. --- Changelog.txt | 1 + .../config/mods/CustomBlocksConfig.java | 103 ++++++++++++++++++ .../nossr50/config/mods/LoadCustomArmor.java | 3 + .../nossr50/config/mods/LoadCustomTools.java | 4 + .../nossr50/config/mods/ModConfigLoader.java | 5 - .../nossr50/datatypes/mods/CustomBlock.java | 49 +++++++++ .../nossr50/listeners/BlockListener.java | 12 +- src/main/java/com/gmail/nossr50/mcMMO.java | 53 +++++++++ .../nossr50/skills/gathering/Excavation.java | 11 +- .../nossr50/skills/gathering/Herbalism.java | 23 +++- .../nossr50/skills/gathering/Mining.java | 9 ++ .../com/gmail/nossr50/util/BlockChecks.java | 44 ++++++-- .../java/com/gmail/nossr50/util/Combat.java | 2 +- .../com/gmail/nossr50/util/ModChecks.java | 46 ++++---- src/main/resources/blocks.yml | 75 +++++++++++++ 15 files changed, 395 insertions(+), 45 deletions(-) create mode 100644 src/main/java/com/gmail/nossr50/config/mods/CustomBlocksConfig.java create mode 100644 src/main/java/com/gmail/nossr50/datatypes/mods/CustomBlock.java create mode 100644 src/main/resources/blocks.yml diff --git a/Changelog.txt b/Changelog.txt index f4a2a3654..33ac707f1 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -8,6 +8,7 @@ Key: - Removal Version 1.3.07 + + Added ability to gain XP from custom blocks. Enable custom blocks in the config file, then enter the data in the blocks.yml file. + Added ability to gain XP with custom tools. Enable custom tools in the config file, then enter the data in the tools.yml file. + Added ability to repair custom tools. Enable custom tools in the config file, then enter the data in the tools.yml file. + Added ability to repair custom armor. Enable custom armor in the config file, then enter the data in the armor.yml file. diff --git a/src/main/java/com/gmail/nossr50/config/mods/CustomBlocksConfig.java b/src/main/java/com/gmail/nossr50/config/mods/CustomBlocksConfig.java new file mode 100644 index 000000000..377fce297 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/config/mods/CustomBlocksConfig.java @@ -0,0 +1,103 @@ +package com.gmail.nossr50.config.mods; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.inventory.ItemStack; + +import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.datatypes.mods.CustomBlock; + +public class CustomBlocksConfig extends ModConfigLoader{ + private static CustomBlocksConfig instance; + + public static CustomBlocksConfig getInstance() { + if (instance == null) { + instance = new CustomBlocksConfig(mcMMO.p); + } + + return instance; + } + + public List customExcavationBlocks = new ArrayList(); + public List customHerbalismBlocks = new ArrayList(); + public List customMiningBlocks = new ArrayList(); + public List customWoodcuttingBlocks = new ArrayList(); + + public List customItems = new ArrayList(); + public List customBlocks = new ArrayList(); + + public CustomBlocksConfig(mcMMO plugin) { + super(plugin, "blocks.yml"); + config = plugin.getBlocksConfig(); + } + + @Override + public void load() { + if (!configFile.exists()) { + dataFolder.mkdir(); + plugin.saveBlocksConfig(); + } + + addDefaults(); + loadKeys(); + } + + @Override + protected void loadKeys() { + plugin.getLogger().info("Loading mcMMO blocks.yml File..."); + + loadBlocks("Excavation", customExcavationBlocks); + loadBlocks("Herbalism", customHerbalismBlocks); + loadBlocks("Mining", customMiningBlocks); + loadBlocks("Woodcutting", customWoodcuttingBlocks); + } + + private void loadBlocks(String skillType, List blockList) { + ConfigurationSection skillSection = config.getConfigurationSection(skillType); + Set skillConfigSet = skillSection.getKeys(false); + Iterator iterator = skillConfigSet.iterator(); + + while (iterator.hasNext()) { + String blockName = iterator.next(); + + int id = config.getInt(skillType + "." + blockName + ".ID", 0); + byte data = (byte) config.getInt(skillType + "." + blockName + ".Data_Value", 0); + int xp = config.getInt(skillType + "." + blockName + ".XP_Gain", 0); + boolean dropItem = config.getBoolean(skillType + "." + blockName + ".Drop_Item", false); + int dropID = config.getInt(skillType + "." + blockName + ".Drop_Item_ID", 0); + byte dropData = (byte) config.getInt(skillType + "." + blockName + ".Drop_Item_Data_Value", 0); + + if (id == 0) { + plugin.getLogger().warning("Missing ID. This block will be skipped."); + continue; + } + + if (dropItem && dropID == 0) { + plugin.getLogger().warning("Incomplete item drop information. This block will drop itself."); + dropItem = false; + } + + CustomBlock block; + ItemStack itemDrop; + ItemStack blockItem; + + if (dropItem) { + itemDrop = new ItemStack(dropID, 1, (short) 0, dropData); + } + else { + itemDrop = new ItemStack(id, 1, (short) 0, data); + } + + block = new CustomBlock(itemDrop, xp, data, id); + blockItem = new ItemStack(id, 1, (short) 0, data); + + blockList.add(blockItem); + customItems.add(blockItem); + customBlocks.add(block); + } + } +} diff --git a/src/main/java/com/gmail/nossr50/config/mods/LoadCustomArmor.java b/src/main/java/com/gmail/nossr50/config/mods/LoadCustomArmor.java index a533490cc..b72fa04fc 100644 --- a/src/main/java/com/gmail/nossr50/config/mods/LoadCustomArmor.java +++ b/src/main/java/com/gmail/nossr50/config/mods/LoadCustomArmor.java @@ -27,6 +27,9 @@ public class LoadCustomArmor extends ModConfigLoader{ public List customHelmetIDs = new ArrayList(); public List customLeggingIDs = new ArrayList(); + public List customIDs = new ArrayList(); + public List customItems = new ArrayList(); + public LoadCustomArmor(mcMMO plugin) { super(plugin, "armor.yml"); config = plugin.getArmorConfig(); diff --git a/src/main/java/com/gmail/nossr50/config/mods/LoadCustomTools.java b/src/main/java/com/gmail/nossr50/config/mods/LoadCustomTools.java index 1fcc30665..cf423011c 100644 --- a/src/main/java/com/gmail/nossr50/config/mods/LoadCustomTools.java +++ b/src/main/java/com/gmail/nossr50/config/mods/LoadCustomTools.java @@ -9,6 +9,7 @@ import org.bukkit.configuration.ConfigurationSection; import org.bukkit.inventory.ItemStack; import com.gmail.nossr50.mcMMO; +import com.gmail.nossr50.datatypes.mods.CustomItem; import com.gmail.nossr50.datatypes.mods.CustomTool; public class LoadCustomTools extends ModConfigLoader { @@ -29,6 +30,9 @@ public class LoadCustomTools extends ModConfigLoader { public List customShovelIDs = new ArrayList(); public List customSwordIDs = new ArrayList(); + public List customIDs = new ArrayList(); + public List customItems = new ArrayList(); + private LoadCustomTools(mcMMO plugin) { super(plugin, "tools.yml"); config = plugin.getToolsConfig(); diff --git a/src/main/java/com/gmail/nossr50/config/mods/ModConfigLoader.java b/src/main/java/com/gmail/nossr50/config/mods/ModConfigLoader.java index 70224bade..08ad6afa2 100644 --- a/src/main/java/com/gmail/nossr50/config/mods/ModConfigLoader.java +++ b/src/main/java/com/gmail/nossr50/config/mods/ModConfigLoader.java @@ -1,16 +1,11 @@ package com.gmail.nossr50.config.mods; import java.io.File; -import java.util.ArrayList; -import java.util.List; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.config.ConfigLoader; -import com.gmail.nossr50.datatypes.mods.CustomItem; public abstract class ModConfigLoader extends ConfigLoader{ - public List customIDs = new ArrayList(); - public List customItems = new ArrayList(); public ModConfigLoader(mcMMO plugin, String fileName) { super(plugin, "ModConfigs" + File.separator + fileName); diff --git a/src/main/java/com/gmail/nossr50/datatypes/mods/CustomBlock.java b/src/main/java/com/gmail/nossr50/datatypes/mods/CustomBlock.java new file mode 100644 index 000000000..b7fa47229 --- /dev/null +++ b/src/main/java/com/gmail/nossr50/datatypes/mods/CustomBlock.java @@ -0,0 +1,49 @@ +package com.gmail.nossr50.datatypes.mods; + +import org.bukkit.inventory.ItemStack; + +public class CustomBlock { + private int itemID; + private byte dataValue; + private int xpGain; + private ItemStack itemDrop; + + public CustomBlock(ItemStack itemDrop, int xpGain, byte dataValue, int itemID) { + this.itemID = itemID; + this.dataValue = dataValue; + this.xpGain = xpGain; + this.itemDrop = itemDrop; + } + + public int getItemID() { + return itemID; + } + + public void setItemID(int itemID) { + this.itemID = itemID; + } + + public byte getDataValue() { + return dataValue; + } + + public void setDataValue(byte dataValue) { + this.dataValue = dataValue; + } + + public int getXpGain() { + return xpGain; + } + + public void setXpGain(int xpGain) { + this.xpGain = xpGain; + } + + public ItemStack getItemDrop() { + return itemDrop; + } + + public void setItemDrop(ItemStack itemDrop) { + this.itemDrop = itemDrop; + } +} diff --git a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java index 4e85d3679..dd0fe6db1 100644 --- a/src/main/java/com/gmail/nossr50/listeners/BlockListener.java +++ b/src/main/java/com/gmail/nossr50/listeners/BlockListener.java @@ -115,7 +115,7 @@ public class BlockListener implements Listener { } /* Check if the blocks placed should be monitored so they do not give out XP in the future */ - if (BlockChecks.shouldBeWatched(mat)) { + if (BlockChecks.shouldBeWatched(block)) { mcMMO.placeStore.setTrue(block); } @@ -187,7 +187,7 @@ public class BlockListener implements Listener { if (PP.getAbilityMode(AbilityType.TREE_FELLER) && Permissions.getInstance().treeFeller(player) && ItemChecks.isAxe(inhand)) { if (Config.getInstance().getToolModsEnabled()) { - if ((ItemChecks.isCustomTool(inhand) && ModChecks.toolAbilityEnabled(inhand)) || !ItemChecks.isCustomTool(inhand)) { + if ((ItemChecks.isCustomTool(inhand) && ModChecks.getToolFromItemStack(inhand).isAbilityEnabled()) || !ItemChecks.isCustomTool(inhand)) { WoodCutting.treeFeller(event); } } @@ -210,7 +210,7 @@ public class BlockListener implements Listener { } //Remove metadata when broken - if (mcMMO.placeStore.isTrue(block) && BlockChecks.shouldBeWatched(mat)) { + if (mcMMO.placeStore.isTrue(block) && BlockChecks.shouldBeWatched(block)) { mcMMO.placeStore.setFalse(block); } } @@ -261,7 +261,7 @@ public class BlockListener implements Listener { */ if (PP.getAbilityMode(AbilityType.GREEN_TERRA) && Permissions.getInstance().greenTerra(player) && BlockChecks.makeMossy(block)) { if (Config.getInstance().getToolModsEnabled()) { - if ((ItemChecks.isCustomTool(inhand) && ModChecks.toolAbilityEnabled(inhand)) || !ItemChecks.isCustomTool(inhand)) { + if ((ItemChecks.isCustomTool(inhand) && ModChecks.getToolFromItemStack(inhand).isAbilityEnabled()) || !ItemChecks.isCustomTool(inhand)) { Herbalism.greenTerra(player, block); } } @@ -272,7 +272,7 @@ public class BlockListener implements Listener { else if (PP.getAbilityMode(AbilityType.GIGA_DRILL_BREAKER) && Skills.triggerCheck(player, block, AbilityType.GIGA_DRILL_BREAKER)) { if (Config.getInstance().getExcavationRequiresTool() && ItemChecks.isShovel(inhand)) { if (Config.getInstance().getToolModsEnabled()) { - if ((ItemChecks.isCustomTool(inhand) && ModChecks.toolAbilityEnabled(inhand)) || !ItemChecks.isCustomTool(inhand)) { + if ((ItemChecks.isCustomTool(inhand) && ModChecks.getToolFromItemStack(inhand).isAbilityEnabled()) || !ItemChecks.isCustomTool(inhand)) { event.setInstaBreak(true); Excavation.gigaDrillBreaker(player, block); } @@ -303,7 +303,7 @@ public class BlockListener implements Listener { if (!player.getItemInHand().containsEnchantment(Enchantment.SILK_TOUCH)) { //TODO: Why are we checking this? if (Config.getInstance().getMiningRequiresTool() && ItemChecks.isPickaxe(inhand)) { if (Config.getInstance().getToolModsEnabled()) { - if ((ItemChecks.isCustomTool(inhand) && ModChecks.toolAbilityEnabled(inhand)) || !ItemChecks.isCustomTool(inhand)) { + if ((ItemChecks.isCustomTool(inhand) && ModChecks.getToolFromItemStack(inhand).isAbilityEnabled()) || !ItemChecks.isCustomTool(inhand)) { event.setInstaBreak(true); Mining.SuperBreakerBlockCheck(player, block); } diff --git a/src/main/java/com/gmail/nossr50/mcMMO.java b/src/main/java/com/gmail/nossr50/mcMMO.java index c0b5cb56d..444d11f5e 100644 --- a/src/main/java/com/gmail/nossr50/mcMMO.java +++ b/src/main/java/com/gmail/nossr50/mcMMO.java @@ -498,4 +498,57 @@ public class mcMMO extends JavaPlugin { getLogger().severe("Could not save config to " + armorConfigFile + ex.toString()); } } + + /* + * Boilerplate Custom Config Stuff (Blocks) + */ + + private FileConfiguration blocksConfig = null; + private File blocksConfigFile = null; + + /** + * Reload the Blocks.yml file. + */ + public void reloadBlocksConfig() { + if (blocksConfigFile == null) { + blocksConfigFile = new File(modDirectory, "blocks.yml"); + } + + blocksConfig = YamlConfiguration.loadConfiguration(blocksConfigFile); + InputStream defConfigStream = getResource("blocks.yml"); // Look for defaults in the jar + + if (defConfigStream != null) { + YamlConfiguration defConfig = YamlConfiguration.loadConfiguration(defConfigStream); + blocksConfig.setDefaults(defConfig); + } + } + + /** + * Get the Blocks config information. + * + * @return the configuration object for blocks.yml + */ + public FileConfiguration getBlocksConfig() { + if (blocksConfig == null) { + reloadBlocksConfig(); + } + + return blocksConfig; + } + + /** + * Save the Blocks config informtion. + */ + public void saveBlocksConfig() { + if (blocksConfig == null || blocksConfigFile == null) { + return; + } + + try { + blocksConfig.save(blocksConfigFile); + } + catch (IOException ex) { + getLogger().severe("Could not save config to " + blocksConfigFile + ex.toString()); + } + } } diff --git a/src/main/java/com/gmail/nossr50/skills/gathering/Excavation.java b/src/main/java/com/gmail/nossr50/skills/gathering/Excavation.java index 34a418c83..29ea8341c 100644 --- a/src/main/java/com/gmail/nossr50/skills/gathering/Excavation.java +++ b/src/main/java/com/gmail/nossr50/skills/gathering/Excavation.java @@ -12,12 +12,14 @@ import org.bukkit.inventory.ItemStack; import com.gmail.nossr50.spout.SpoutSounds; import com.gmail.nossr50.util.Misc; +import com.gmail.nossr50.util.ModChecks; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.Skills; import com.gmail.nossr50.util.Users; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.config.Config; import com.gmail.nossr50.config.LoadTreasures; +import com.gmail.nossr50.config.mods.CustomBlocksConfig; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure; @@ -45,7 +47,14 @@ public class Excavation { List treasures = new ArrayList(); - int xp = Config.getInstance().getExcavationBaseXP(); + int xp; + + if (Config.getInstance().getBlockModsEnabled() && CustomBlocksConfig.getInstance().customExcavationBlocks.contains(new ItemStack(block.getTypeId(), 1, (short) 0, block.getData()))) { + xp = ModChecks.getCustomBlock(block).getXpGain(); + } + else { + xp = Config.getInstance().getExcavationBaseXP(); + } if (Permissions.getInstance().excavationTreasures(player)) { switch (type) { diff --git a/src/main/java/com/gmail/nossr50/skills/gathering/Herbalism.java b/src/main/java/com/gmail/nossr50/skills/gathering/Herbalism.java index 81e556f9e..107bf8427 100644 --- a/src/main/java/com/gmail/nossr50/skills/gathering/Herbalism.java +++ b/src/main/java/com/gmail/nossr50/skills/gathering/Herbalism.java @@ -13,12 +13,14 @@ import org.bukkit.inventory.PlayerInventory; import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.config.Config; +import com.gmail.nossr50.config.mods.CustomBlocksConfig; import com.gmail.nossr50.datatypes.AbilityType; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.runnables.GreenThumbTimer; import com.gmail.nossr50.util.Misc; +import com.gmail.nossr50.util.ModChecks; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.Skills; import com.gmail.nossr50.util.Users; @@ -82,10 +84,13 @@ public class Herbalism { Byte data = block.getData(); Location loc = block.getLocation(); Material mat = null; + int xp = 0; int catciDrops = 0; int caneDrops = 0; + boolean customPlant = false; + switch (type) { case BROWN_MUSHROOM: case RED_MUSHROOM: @@ -181,15 +186,26 @@ public class Herbalism { break; default: + if (Config.getInstance().getBlockModsEnabled() && CustomBlocksConfig.getInstance().customHerbalismBlocks.contains(new ItemStack(block.getTypeId(), 1, (short) 0, block.getData()))) { + customPlant = true; + xp = ModChecks.getCustomBlock(block).getXpGain(); + } break; } - if (mat == null) { + if (mat == null && !customPlant) { return; } if (Permissions.getInstance().herbalismDoubleDrops(player)) { - ItemStack is = new ItemStack(mat); + ItemStack is = null; + + if (customPlant) { + is = new ItemStack(ModChecks.getCustomBlock(block).getItemDrop()); + } + else { + is = new ItemStack(mat); + } if (herbLevel > MAX_BONUS_LEVEL || random.nextInt(1000) <= herbLevel) { Config configInstance = Config.getInstance(); @@ -264,6 +280,9 @@ public class Herbalism { break; default: + if (customPlant) { + Misc.mcDropItem(loc, is); + } break; } } diff --git a/src/main/java/com/gmail/nossr50/skills/gathering/Mining.java b/src/main/java/com/gmail/nossr50/skills/gathering/Mining.java index 35bada281..9fc464d5c 100644 --- a/src/main/java/com/gmail/nossr50/skills/gathering/Mining.java +++ b/src/main/java/com/gmail/nossr50/skills/gathering/Mining.java @@ -15,10 +15,12 @@ import com.gmail.nossr50.mcMMO; import com.gmail.nossr50.spout.SpoutSounds; import com.gmail.nossr50.util.BlockChecks; import com.gmail.nossr50.util.Misc; +import com.gmail.nossr50.util.ModChecks; import com.gmail.nossr50.util.Permissions; import com.gmail.nossr50.util.Skills; import com.gmail.nossr50.util.Users; import com.gmail.nossr50.config.Config; +import com.gmail.nossr50.config.mods.CustomBlocksConfig; import com.gmail.nossr50.datatypes.PlayerProfile; import com.gmail.nossr50.datatypes.SkillType; import com.gmail.nossr50.events.fake.FakePlayerAnimationEvent; @@ -128,6 +130,10 @@ public class Mining { break; default: + if (Config.getInstance().getBlockModsEnabled() && CustomBlocksConfig.getInstance().customMiningBlocks.contains(new ItemStack(block.getTypeId(), 1, (short) 0, block.getData()))) { + item = ModChecks.getCustomBlock(block).getItemDrop(); + Misc.mcDropItem(loc, item); + } break; } } @@ -198,6 +204,9 @@ public class Mining { break; default: + if (Config.getInstance().getBlockModsEnabled() && CustomBlocksConfig.getInstance().customMiningBlocks.contains(new ItemStack(block.getTypeId(), 1, (short) 0, block.getData()))) { + xp += ModChecks.getCustomBlock(block).getXpGain(); + } break; } diff --git a/src/main/java/com/gmail/nossr50/util/BlockChecks.java b/src/main/java/com/gmail/nossr50/util/BlockChecks.java index 202432060..86cc9f737 100644 --- a/src/main/java/com/gmail/nossr50/util/BlockChecks.java +++ b/src/main/java/com/gmail/nossr50/util/BlockChecks.java @@ -1,11 +1,14 @@ package com.gmail.nossr50.util; -import org.bukkit.Material; import org.bukkit.block.Block; +import org.bukkit.inventory.ItemStack; import com.gmail.nossr50.config.Config; +import com.gmail.nossr50.config.mods.CustomBlocksConfig; public class BlockChecks { + private static Config configInstance = Config.getInstance(); + private static boolean customBlocksEnabled = configInstance.getBlockModsEnabled(); /** * Checks to see if a block type awards XP. @@ -13,8 +16,8 @@ public class BlockChecks { * @param block Block to check * @return true if the block type awards XP, false otherwise */ - public static boolean shouldBeWatched(Material material) { - switch (material) { + public static boolean shouldBeWatched(Block block) { + switch (block.getType()) { case BROWN_MUSHROOM: case CACTUS: case CLAY: @@ -50,7 +53,12 @@ public class BlockChecks { return true; default: - return false; + if (customBlocksEnabled && CustomBlocksConfig.getInstance().customItems.contains(new ItemStack(block.getTypeId(), 1, (short) 0, block.getData()))) { + return true; + } + else { + return false; + } } } @@ -158,7 +166,12 @@ public class BlockChecks { return true; default: - return false; + if (customBlocksEnabled && CustomBlocksConfig.getInstance().customHerbalismBlocks.contains(new ItemStack(block.getTypeId(), 1, (short) 0, block.getData()))) { + return true; + } + else { + return false; + } } } @@ -187,7 +200,12 @@ public class BlockChecks { return true; default: - return false; + if (customBlocksEnabled && CustomBlocksConfig.getInstance().customMiningBlocks.contains(new ItemStack(block.getTypeId(), 1, (short) 0, block.getData()))) { + return true; + } + else { + return false; + } } } @@ -209,7 +227,12 @@ public class BlockChecks { return true; default: - return false; + if (customBlocksEnabled && CustomBlocksConfig.getInstance().customExcavationBlocks.contains(new ItemStack(block.getTypeId(), 1, (short) 0, block.getData()))) { + return true; + } + else { + return false; + } } } @@ -227,7 +250,12 @@ public class BlockChecks { return true; default: - return false; + if (customBlocksEnabled && CustomBlocksConfig.getInstance().customWoodcuttingBlocks.contains(new ItemStack(block.getTypeId(), 1, (short) 0, block.getData()))) { + return true; + } + else { + return false; + } } } } diff --git a/src/main/java/com/gmail/nossr50/util/Combat.java b/src/main/java/com/gmail/nossr50/util/Combat.java index 8674389f3..67852e4e4 100644 --- a/src/main/java/com/gmail/nossr50/util/Combat.java +++ b/src/main/java/com/gmail/nossr50/util/Combat.java @@ -369,7 +369,7 @@ public class Combat { ItemStack inHand = attacker.getItemInHand(); if (Config.getInstance().getToolModsEnabled()) { - if (ItemChecks.isCustomTool(inHand) && !ModChecks.toolAbilityEnabled(inHand)) { + if (ItemChecks.isCustomTool(inHand) && !ModChecks.getToolFromItemStack(inHand).isAbilityEnabled()) { return; } } diff --git a/src/main/java/com/gmail/nossr50/util/ModChecks.java b/src/main/java/com/gmail/nossr50/util/ModChecks.java index 471ab0d46..0337d925c 100644 --- a/src/main/java/com/gmail/nossr50/util/ModChecks.java +++ b/src/main/java/com/gmail/nossr50/util/ModChecks.java @@ -1,37 +1,19 @@ package com.gmail.nossr50.util; +import org.bukkit.block.Block; import org.bukkit.inventory.ItemStack; +import com.gmail.nossr50.config.mods.CustomBlocksConfig; import com.gmail.nossr50.config.mods.LoadCustomArmor; import com.gmail.nossr50.config.mods.LoadCustomTools; +import com.gmail.nossr50.datatypes.mods.CustomBlock; import com.gmail.nossr50.datatypes.mods.CustomItem; import com.gmail.nossr50.datatypes.mods.CustomTool; public class ModChecks { private static LoadCustomTools toolInstance = LoadCustomTools.getInstance(); private static LoadCustomArmor armorInstance = LoadCustomArmor.getInstance(); - - /** - * Check if this custom tool can use abilities. - * - * @param item The custom item to check - * @return true if the tool can use abilities, false otherwise - */ - public static boolean toolAbilityEnabled(ItemStack item) { - int id = item.getTypeId(); - - if (!toolInstance.customIDs.contains(id)) { - return false; - } - - for (CustomItem tool : toolInstance.customItems) { - if (tool.getItemID() == id) { - return ((CustomTool) tool).isAbilityEnabled(); - } - } - - return false; - } + private static CustomBlocksConfig blocksInstance = CustomBlocksConfig.getInstance(); /** * Get the custom armor associated with an item. @@ -76,4 +58,24 @@ public class ModChecks { return null; } + + /** + * Get the custom block associated with an block. + * + * @param block The block to check + * @return the armor if it exists, null otherwise + */ + public static CustomBlock getCustomBlock(Block block) { + if (!blocksInstance.customItems.contains(new ItemStack(block.getTypeId(), 1, (short) 0, block.getData()))) { + return null; + } + + for (CustomBlock b : blocksInstance.customBlocks) { + if ((b.getItemID() == block.getTypeId()) && (b.getDataValue() == block.getData())) { + return b; + } + } + + return null; + } } diff --git a/src/main/resources/blocks.yml b/src/main/resources/blocks.yml new file mode 100644 index 000000000..176b7211b --- /dev/null +++ b/src/main/resources/blocks.yml @@ -0,0 +1,75 @@ +# +# Settings for Custom Excavation Blocks +### +Excavation: + Block_1: + ID: 999 + Data_Value: 0 + XP_Gain: 99 + Drop_Item: false + Drop_Item_ID: 999 + Drop_Item_Data_Value: 0 + Block_2: + ID: 999 + Data_Value: 0 + XP_Gain: 99 + Drop_Item: false + Drop_Item_ID: 999 + Drop_Item_Data_Value: 0 + +# +# Settings for Custom Herbalism Blocks +### +Herbalism: + Block_1: + ID: 999 + Data_Value: 0 + XP_Gain: 99 + Drop_Item: false + Drop_Item_ID: 999 + Drop_Item_Data_Value: 0 + Block_2: + ID: 999 + Data_Value: 0 + XP_Gain: 99 + Drop_Item: false + Drop_Item_ID: 999 + Drop_Item_Data_Value: 0 + +# +# Settings for Custom Mining Blocks +### +Mining: + Block_1: + ID: 999 + Data_Value: 0 + XP_Gain: 99 + Drop_Item: false + Drop_Item_ID: 999 + Drop_Item_Data_Value: 0 + Block_2: + ID: 999 + Data_Value: 0 + XP_Gain: 99 + Drop_Item: false + Drop_Item_ID: 999 + Drop_Item_Data_Value: 0 + +# +# Settings for Custom Woodcutting Blocks +### +Woodcutting: + Block_1: + ID: 999 + Data_Value: 0 + XP_Gain: 99 + Drop_Item: false + Drop_Item_ID: 999 + Drop_Item_Data_Value: 0 + Block_2: + ID: 999 + Data_Value: 0 + XP_Gain: 99 + Drop_Item: false + Drop_Item_ID: 999 + Drop_Item_Data_Value: 0 \ No newline at end of file