mirror of
				https://github.com/mcMMO-Dev/mcMMO.git
				synced 2025-11-04 11:03:43 +01:00 
			
		
		
		
	Merge branch 'master' of github.com:mcMMO-Dev/mcmmo into configurable
This commit is contained in:
		@@ -1,4 +1,3 @@
 | 
			
		||||
<<<<<<< HEAD
 | 
			
		||||
Version 2.2.0
 | 
			
		||||
    !!!!!!!!!!!!!!!!!!!!!!!!
 | 
			
		||||
    !!!!!!!!!!!!!!!!!!!!!!!!
 | 
			
		||||
@@ -204,6 +203,94 @@ Version 2.2.0
 | 
			
		||||
    Added API method to check if a skill was being level capped
 | 
			
		||||
    Added 'UndefinedSkillBehaviour' for trying to use a method that has no behaviour defined for the provided skill
 | 
			
		||||
 | 
			
		||||
Version 2.1.123
 | 
			
		||||
    Added 'Nether_Gold_Ore' to Mining XP tables in experience.yml with a value of 1300
 | 
			
		||||
    Adept Salvage message will now show the correct minimum level
 | 
			
		||||
    'Weeping_Vines' renamed to 'Weeping_Vines_Plant' in experience.yml (no edits necessary)
 | 
			
		||||
    'Twisted_Vines_Plant' added to Herbalism XP tables in experience.yml with a value of 10
 | 
			
		||||
    Weeping_Vines_Plant and Twisted_Vines_Plant are now flagged as multi-block plants in Herbalism
 | 
			
		||||
 | 
			
		||||
Version 2.1.122
 | 
			
		||||
    Changed the xp values for Nether_Wart_Block and Warped_Wart_Block from 20 to 1 for Woodcutting
 | 
			
		||||
    Changed the xp values for Nether_Wart_Block and Warped_Wart_Block from 20 to 3 for Herbalism
 | 
			
		||||
    mcMMO now treats Nether_Wart_Block and Warped_Wart_Block as leaves
 | 
			
		||||
    Removed Crimson_Roots and Warped_Roots from Woodcutting XP tables in experience.yml
 | 
			
		||||
    Added Crimson_Roots and Warped_Roots to Herbalism XP tables in experience.yml with a value of 6 XP
 | 
			
		||||
    Fixed some start up bugs for salvage/repair
 | 
			
		||||
 | 
			
		||||
    You can either edit experience.yml yourself or delete it to regenerate a new one to get the new changes
 | 
			
		||||
 | 
			
		||||
Version 2.1.121
 | 
			
		||||
    Fixed a netherite related bug that prevented mcMMO from functioning correctly
 | 
			
		||||
 | 
			
		||||
Version 2.1.120
 | 
			
		||||
    Fixed a bug involving the new netherite equipment
 | 
			
		||||
 | 
			
		||||
Version 2.1.119
 | 
			
		||||
    1.16 Support
 | 
			
		||||
    Fixed another dupe bug
 | 
			
		||||
    Fixed a bug that can cause blast mining to give out more rewards than intended
 | 
			
		||||
    Blast Mining rewards are now randomized but still influenced by your blast mining rank
 | 
			
		||||
    mcMMO is now aware of turtle shell and treats it appropriately
 | 
			
		||||
    mcMMO is now aware of chainmail armor and treats it appropriately
 | 
			
		||||
    Calculations which change depend on the quality of your tool or armor has had netherrack support coded in
 | 
			
		||||
    All excavation drops that can drop from soul_sand now also drop from soul_soil (edited treasures.yml)
 | 
			
		||||
 | 
			
		||||
    Added netherite armor/weapons/tools to repair.vanilla.yml
 | 
			
		||||
    Added netherite armor/weapons/tools to salvage.vanilla.yml
 | 
			
		||||
 | 
			
		||||
    Added 'Bamboo_Sapling' to bonus drops for Herbalism in experience.yml
 | 
			
		||||
    Added 'Ancient_Debris' with a value of 7777 to Mining experience tables in experience.yml
 | 
			
		||||
    Added 'Basalt' with a value of 40 to Mining experience tables in experience.yml
 | 
			
		||||
    Added 'Crimson_Fungus' with a value of 50 to Herbalism experience tables in experience.yml
 | 
			
		||||
    Added 'Warped_Fungus' with a value of 50 to Herbalism experience tables in experience.yml
 | 
			
		||||
    Added 'Warped_Nylium' with a value of 5 to Mining experience tables in experience.yml
 | 
			
		||||
    Added 'Crimson_Nylium' with a value of 5 to Mining experience tables in experience.yml
 | 
			
		||||
    Added 'Crimson_Stem' with a value of 35 to Woodcutting experience tables in experience.yml
 | 
			
		||||
    Added 'Crimson_Roots' with a value of 35 to Woodcutting experience tables in experience.yml
 | 
			
		||||
    Added 'Warped_Stem' with a value of 35 to Woodcutting experience tables in experience.yml
 | 
			
		||||
    Added 'Warped_Roots' with a value of 35 to Woodcutting experience tables in experience.yml
 | 
			
		||||
    Added 'Ancient_Debris' with a value of 200 to Smelting experience tables in experience.yml
 | 
			
		||||
    Added 'Nether_Sprouts' with a value of 10 to Herbalism experience tables in experience.yml
 | 
			
		||||
    Added 'Shroomlight' with a value of 100 to Woodcutting experience tables in experience.yml
 | 
			
		||||
    Added 'Soul_Soil' with a value of 50 to Excavation experience tables in experience.yml
 | 
			
		||||
    Added 'Nether_Wart_Block' with a value of 20 to Woodcutting experience tables in experience.yml
 | 
			
		||||
    Added 'Nether_Wart_Block' with a value of 20 to Herbalism experience tables in experience.yml
 | 
			
		||||
    Added 'Warped_Wart_Block' with a value of 20 to Woodcutting experience tables in experience.yml
 | 
			
		||||
    Added 'Warped_Wart_Block' with a value of 20 to Herbalism experience tables in experience.yml
 | 
			
		||||
    Added 'Weeping_Vines' with a value of 10 to Herbalism experience tables in experience.yml
 | 
			
		||||
 | 
			
		||||
    Added 'Ancient_Debris' to bonus drops for Mining in config.yml
 | 
			
		||||
    Added 'Netherite_Scrap' to bonus drops for Mining in config.yml
 | 
			
		||||
    Added 'Crimson_Fungus' to bonus drops for Herbalism in config.yml
 | 
			
		||||
    Added 'Warped_Fungus' to bonus drops for Herbalism in config.yml
 | 
			
		||||
    Added 'Warped_Nylium' to bonus drops for Mining in config.yml
 | 
			
		||||
    Added 'Crimson_Nylium' to bonus drops for Mining in config.yml
 | 
			
		||||
    Added 'Crimson_Stem' to bonus drops for Woodcutting in config.yml
 | 
			
		||||
    Added 'Warped_Stem' to bonus drops for Woodcutting in config.yml
 | 
			
		||||
    Added 'Shroomlight' to bonus drops for Woodcutting in config.yml
 | 
			
		||||
 | 
			
		||||
    NOTES: You will likely need to update repair.vanilla.yml, salvage.vanilla.yml and treasures.yml
 | 
			
		||||
    You can just delete those config files to regenerate them fresh which is much faster if you don't have any custom settings in those files
 | 
			
		||||
    Here are the default configuration files if you wish to compare them to your own servers settings while updating your configs.
 | 
			
		||||
    https://paste.gg/p/anonymous/bf8ba1a24c8c4f188da5f8b8ebfc2b35 (Keep scrolling)
 | 
			
		||||
 | 
			
		||||
    Netherrack is repaired using netherrack scraps for now, wait for 2.2 for a better version of repair.
 | 
			
		||||
    Netherrack salvages into netherrack scraps for now, wait for 2.2 for a better version of salvage.
 | 
			
		||||
 | 
			
		||||
    Repairing chainmail/etc will be tackled in 2.2 so don't expect that in this version
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Version 2.1.118
 | 
			
		||||
    Fixed another dupe bug
 | 
			
		||||
    Blast Mining no longer reduces debris from explosions due to some issues with the Bukkit API
 | 
			
		||||
    Modified locale string 'Mining.Blast.Effect' to remove debris reduction mention
 | 
			
		||||
    Rupture now fires a FakeEntityDamageByEntityEvent before damaging its victims (cancelling it will be ignored)
 | 
			
		||||
 | 
			
		||||
Version 2.1.117
 | 
			
		||||
    Fixed a rare http error when polling Mojang for UUIDs
 | 
			
		||||
    Fixed a bug that allowed duping
 | 
			
		||||
 | 
			
		||||
Version 2.1.116
 | 
			
		||||
    Fixed directional plants not maintaining their direction when replanted
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -54,13 +54,40 @@ public class NBTToolsCommand extends BaseCommand {
 | 
			
		||||
        player.sendMessage(ChatColor.GRAY + "NBT Analysis completed!");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Subcommand("tags add")
 | 
			
		||||
    public void onAddTags(Player player) {
 | 
			
		||||
    @Subcommand("tags set")
 | 
			
		||||
    public void onAddTags(Player player, String[] args) {
 | 
			
		||||
        if(args.length == 0) {
 | 
			
		||||
            player.sendMessage("No arguments provided!");
 | 
			
		||||
        } else if(args.length == 1) {
 | 
			
		||||
            player.sendMessage("Not enough arguments provided!");
 | 
			
		||||
        } else {
 | 
			
		||||
            player.sendMessage("Modifying NBT on item in hand...");
 | 
			
		||||
            String targetTag = args[0];
 | 
			
		||||
 | 
			
		||||
            //Check for the tag
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Subcommand("tags remove")
 | 
			
		||||
    public void onRemoveTags(Player player) {
 | 
			
		||||
    public void onRemoveTags(Player player, String[] args) {
 | 
			
		||||
        if(args.length == 0) {
 | 
			
		||||
            player.sendMessage("No arguments provided!");
 | 
			
		||||
        } else if(args.length == 1) {
 | 
			
		||||
            player.sendMessage("Not enough arguments provided!");
 | 
			
		||||
        } else {
 | 
			
		||||
            player.sendMessage("Modifying NBT on item in hand...");
 | 
			
		||||
            String targetTag = args[0];
 | 
			
		||||
 | 
			
		||||
            //Check for the tag
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Subcommand("tags clear")
 | 
			
		||||
    public void onClearTags(Player player) {
 | 
			
		||||
        //Clear all NBT tags that fall under "tag" on the item
 | 
			
		||||
 | 
			
		||||
        player.sendMessage("Clearing NBT on item...");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -20,7 +20,7 @@ public class MiningCommand extends SkillCommand {
 | 
			
		||||
    private int bonusTNTDrops;
 | 
			
		||||
    private double blastRadiusIncrease;
 | 
			
		||||
    private String oreBonus;
 | 
			
		||||
    private String debrisReduction;
 | 
			
		||||
//    private String debrisReduction;
 | 
			
		||||
    private String blastDamageDecrease;
 | 
			
		||||
 | 
			
		||||
    private boolean canSuperBreaker;
 | 
			
		||||
@@ -42,7 +42,7 @@ public class MiningCommand extends SkillCommand {
 | 
			
		||||
            blastMiningRank = miningManager.getBlastMiningTier();
 | 
			
		||||
            bonusTNTDrops = miningManager.getDropMultiplier();
 | 
			
		||||
            oreBonus = percent.format(miningManager.getOreBonus() / 30.0D); // Base received in TNT is 30%
 | 
			
		||||
            debrisReduction = percent.format(miningManager.getDebrisReduction() / 30.0D); // Base received in TNT is 30%
 | 
			
		||||
//            debrisReduction = percent.format(miningManager.getDebrisReduction() / 30.0D); // Base received in TNT is 30%
 | 
			
		||||
            blastDamageDecrease = percent.format(miningManager.getBlastDamageModifier() / 100.0D);
 | 
			
		||||
            blastRadiusIncrease = miningManager.getBlastRadiusModifier();
 | 
			
		||||
        }
 | 
			
		||||
@@ -81,7 +81,7 @@ public class MiningCommand extends SkillCommand {
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (canBlast) {
 | 
			
		||||
            messages.add(getStatMessage(false, true, SubSkillType.MINING_BLAST_MINING, String.valueOf(blastMiningRank), String.valueOf(pluginRef.getRankTools().getHighestRank(SubSkillType.MINING_BLAST_MINING)), pluginRef.getLocaleManager().getString("SuperAbility.BlastMining.Effect", oreBonus, debrisReduction, bonusTNTDrops)));
 | 
			
		||||
            messages.add(getStatMessage(false, true, SubSkillType.MINING_BLAST_MINING, String.valueOf(blastMiningRank), String.valueOf(pluginRef.getRankTools().getHighestRank(SubSkillType.MINING_BLAST_MINING)), pluginRef.getLocaleManager().getString("SuperAbility.BlastMining.Effect", oreBonus, bonusTNTDrops)));
 | 
			
		||||
            //messages.add(pluginRef.getLocaleManager().getString("SuperAbility.BlastMining.Rank", blastMiningRank, RankUtils.getHighestRank(SubSkillType.MINING_BLAST_MINING), pluginRef.getLocaleManager().getString("SuperAbility.BlastMining.Effect", oreBonus, debrisReduction, bonusTNTDrops)));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,6 +2,7 @@ package com.gmail.nossr50.core;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.HashSet;
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
 | 
			
		||||
@@ -24,7 +25,39 @@ public class MaterialMapStore {
 | 
			
		||||
    private HashSet<String> foodItemWhiteList;
 | 
			
		||||
    private HashSet<String> glassBlocks;
 | 
			
		||||
 | 
			
		||||
    public MaterialMapStore() {
 | 
			
		||||
    private HashSet<String> netheriteArmor;
 | 
			
		||||
    private HashSet<String> netheriteTools;
 | 
			
		||||
    private HashSet<String> woodTools;
 | 
			
		||||
    private HashSet<String> stoneTools;
 | 
			
		||||
    private HashSet<String> leatherArmor;
 | 
			
		||||
    private HashSet<String> ironArmor;
 | 
			
		||||
    private HashSet<String> ironTools;
 | 
			
		||||
    private HashSet<String> stringTools;
 | 
			
		||||
    private HashSet<String> goldArmor;
 | 
			
		||||
    private HashSet<String> goldTools;
 | 
			
		||||
    private HashSet<String> chainmailArmor;
 | 
			
		||||
    private HashSet<String> diamondArmor;
 | 
			
		||||
    private HashSet<String> diamondTools;
 | 
			
		||||
    private HashSet<String> armors;
 | 
			
		||||
 | 
			
		||||
    private HashSet<String> swords;
 | 
			
		||||
    private HashSet<String> axes;
 | 
			
		||||
    private HashSet<String> hoes;
 | 
			
		||||
    private HashSet<String> shovels;
 | 
			
		||||
    private HashSet<String> pickAxes;
 | 
			
		||||
    private HashSet<String> tridents;
 | 
			
		||||
    private HashSet<String> bows;
 | 
			
		||||
    private HashSet<String> tools;
 | 
			
		||||
 | 
			
		||||
    private HashSet<String> enchantables;
 | 
			
		||||
 | 
			
		||||
    private HashSet<String> ores;
 | 
			
		||||
 | 
			
		||||
    private HashMap<String, Integer> tierValue;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public MaterialMapStore()
 | 
			
		||||
    {
 | 
			
		||||
        abilityBlackList = new HashSet<>();
 | 
			
		||||
        toolBlackList = new HashSet<>();
 | 
			
		||||
        mossyWhiteList = new HashSet<>();
 | 
			
		||||
@@ -36,7 +69,38 @@ public class MaterialMapStore {
 | 
			
		||||
        foodItemWhiteList = new HashSet<>();
 | 
			
		||||
        glassBlocks = new HashSet<>();
 | 
			
		||||
 | 
			
		||||
        fillHardcodedHashSets();
 | 
			
		||||
        leatherArmor = new HashSet<>();
 | 
			
		||||
        ironArmor = new HashSet<>();
 | 
			
		||||
        chainmailArmor = new HashSet<>();
 | 
			
		||||
        goldArmor = new HashSet<>();
 | 
			
		||||
        diamondArmor = new HashSet<>();
 | 
			
		||||
        netheriteArmor = new HashSet<>();
 | 
			
		||||
        armors = new HashSet<>();
 | 
			
		||||
 | 
			
		||||
        woodTools = new HashSet<>();
 | 
			
		||||
        stoneTools = new HashSet<>();
 | 
			
		||||
        ironTools = new HashSet<>();
 | 
			
		||||
        goldTools = new HashSet<>();
 | 
			
		||||
        diamondTools = new HashSet<>();
 | 
			
		||||
        netheriteTools = new HashSet<>();
 | 
			
		||||
        bows = new HashSet<>();
 | 
			
		||||
        stringTools = new HashSet<>();
 | 
			
		||||
        tools = new HashSet<>();
 | 
			
		||||
 | 
			
		||||
        swords = new HashSet<>();
 | 
			
		||||
        axes = new HashSet<>();
 | 
			
		||||
        pickAxes = new HashSet<>();
 | 
			
		||||
        shovels = new HashSet<>();
 | 
			
		||||
        hoes = new HashSet<>();
 | 
			
		||||
        tridents = new HashSet<>();
 | 
			
		||||
 | 
			
		||||
        enchantables = new HashSet<>();
 | 
			
		||||
 | 
			
		||||
        ores = new HashSet<>();
 | 
			
		||||
 | 
			
		||||
        tierValue = new HashMap<>();
 | 
			
		||||
 | 
			
		||||
        fillVanillaMaterialRegisters();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isMultiBlockPlant(Material material)
 | 
			
		||||
@@ -72,7 +136,8 @@ public class MaterialMapStore {
 | 
			
		||||
        return canMakeShroomyWhiteList.contains(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillHardcodedHashSets() {
 | 
			
		||||
    private void fillVanillaMaterialRegisters()
 | 
			
		||||
    {
 | 
			
		||||
        fillAbilityBlackList();
 | 
			
		||||
        fillToolBlackList();
 | 
			
		||||
        fillMossyWhiteList();
 | 
			
		||||
@@ -83,6 +148,320 @@ public class MaterialMapStore {
 | 
			
		||||
        fillMultiBlockEntitiesList();
 | 
			
		||||
        fillFoodWhiteList();
 | 
			
		||||
        fillGlassBlockWhiteList();
 | 
			
		||||
        fillArmors();
 | 
			
		||||
        fillTools();
 | 
			
		||||
        fillEnchantables();
 | 
			
		||||
        fillOres();
 | 
			
		||||
 | 
			
		||||
        fillTierMap();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillTierMap() {
 | 
			
		||||
        for(String id : leatherArmor) {
 | 
			
		||||
            tierValue.put(id, 1);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for(String id : ironArmor) {
 | 
			
		||||
            tierValue.put(id, 2);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for(String id : goldArmor) {
 | 
			
		||||
            tierValue.put(id, 3);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for(String id : chainmailArmor) {
 | 
			
		||||
            tierValue.put(id, 3);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for(String id : diamondArmor) {
 | 
			
		||||
            tierValue.put(id, 6);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        for(String id : netheriteArmor) {
 | 
			
		||||
            tierValue.put(id, 12);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillOres() {
 | 
			
		||||
        ores.add("coal_ore");
 | 
			
		||||
        ores.add("diamond_ore");
 | 
			
		||||
        ores.add("nether_quartz_ore");
 | 
			
		||||
        ores.add("quartz_ore"); //Pre 1.13
 | 
			
		||||
        ores.add("gold_ore");
 | 
			
		||||
        ores.add("iron_ore");
 | 
			
		||||
        ores.add("lapis_ore");
 | 
			
		||||
        ores.add("redstone_ore");
 | 
			
		||||
        ores.add("emerald_ore");
 | 
			
		||||
        ores.add("ancient_debris");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillArmors() {
 | 
			
		||||
        fillLeatherArmorWhiteList();
 | 
			
		||||
        fillIronArmorWhiteList();
 | 
			
		||||
        fillChainmailWhiteList();
 | 
			
		||||
        fillGoldArmorWhiteList();
 | 
			
		||||
        fillDiamondArmorWhiteList();
 | 
			
		||||
        fillnetheriteArmorWhiteList();
 | 
			
		||||
 | 
			
		||||
        //Add all armors to armors hashset
 | 
			
		||||
        armors.addAll(leatherArmor);
 | 
			
		||||
        armors.addAll(ironArmor);
 | 
			
		||||
        armors.addAll(chainmailArmor);
 | 
			
		||||
        armors.addAll(goldArmor);
 | 
			
		||||
        armors.addAll(diamondArmor);
 | 
			
		||||
        armors.addAll(netheriteArmor);
 | 
			
		||||
 | 
			
		||||
        armors.add("turtle_shell");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillEnchantables() {
 | 
			
		||||
        enchantables.addAll(armors);
 | 
			
		||||
        enchantables.addAll(swords);
 | 
			
		||||
        enchantables.addAll(axes);
 | 
			
		||||
        enchantables.addAll(hoes);
 | 
			
		||||
        enchantables.addAll(pickAxes);
 | 
			
		||||
        enchantables.addAll(tridents);
 | 
			
		||||
        enchantables.addAll(bows);
 | 
			
		||||
 | 
			
		||||
        enchantables.add("shears");
 | 
			
		||||
        enchantables.add("fishing_rod");
 | 
			
		||||
        enchantables.add("carrot_on_a_stick");
 | 
			
		||||
        enchantables.add("enchanted_book");
 | 
			
		||||
        enchantables.add("flint_and_steel");
 | 
			
		||||
        enchantables.add("turtle_shell");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillTools() {
 | 
			
		||||
        fillWoodToolsWhiteList();
 | 
			
		||||
        fillStoneToolsWhiteList();
 | 
			
		||||
        fillIronToolsWhiteList();
 | 
			
		||||
        fillGoldToolsWhiteList();
 | 
			
		||||
        fillDiamondToolsWhiteList();
 | 
			
		||||
        fillnetheriteToolsWhiteList();
 | 
			
		||||
 | 
			
		||||
        fillSwords();
 | 
			
		||||
        fillAxes();
 | 
			
		||||
        fillPickAxes();
 | 
			
		||||
        fillHoes();
 | 
			
		||||
        fillShovels();
 | 
			
		||||
        fillTridents();
 | 
			
		||||
        fillStringTools();
 | 
			
		||||
        fillBows();
 | 
			
		||||
 | 
			
		||||
        //Tools collection
 | 
			
		||||
        tools.addAll(woodTools);
 | 
			
		||||
        tools.addAll(stoneTools);
 | 
			
		||||
        tools.addAll(ironTools);
 | 
			
		||||
        tools.addAll(goldTools);
 | 
			
		||||
        tools.addAll(diamondTools);
 | 
			
		||||
        tools.addAll(netheriteTools);
 | 
			
		||||
        tools.addAll(tridents);
 | 
			
		||||
        tools.addAll(stringTools);
 | 
			
		||||
        tools.addAll(bows);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillBows() {
 | 
			
		||||
        bows.add("bow");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillStringTools() {
 | 
			
		||||
        stringTools.add("bow");
 | 
			
		||||
        stringTools.add("fishing_rod");
 | 
			
		||||
        stringTools.add("carrot_on_a_stick");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillTridents() {
 | 
			
		||||
        tridents.add("trident");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillSwords() {
 | 
			
		||||
        swords.add("wood_sword");
 | 
			
		||||
        swords.add("wooden_sword");
 | 
			
		||||
        swords.add("stone_sword");
 | 
			
		||||
        swords.add("iron_sword");
 | 
			
		||||
        swords.add("gold_sword");
 | 
			
		||||
        swords.add("golden_sword");
 | 
			
		||||
        swords.add("diamond_sword");
 | 
			
		||||
        swords.add("netherite_sword");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillAxes() {
 | 
			
		||||
        axes.add("wood_axe");
 | 
			
		||||
        axes.add("wooden_axe");
 | 
			
		||||
        axes.add("stone_axe");
 | 
			
		||||
        axes.add("iron_axe");
 | 
			
		||||
        axes.add("gold_axe");
 | 
			
		||||
        axes.add("golden_axe");
 | 
			
		||||
        axes.add("diamond_axe");
 | 
			
		||||
        axes.add("netherite_axe");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillPickAxes() {
 | 
			
		||||
        pickAxes.add("wood_pickaxe");
 | 
			
		||||
        pickAxes.add("wooden_pickaxe");
 | 
			
		||||
        pickAxes.add("stone_pickaxe");
 | 
			
		||||
        pickAxes.add("iron_pickaxe");
 | 
			
		||||
        pickAxes.add("gold_pickaxe");
 | 
			
		||||
        pickAxes.add("golden_pickaxe");
 | 
			
		||||
        pickAxes.add("diamond_pickaxe");
 | 
			
		||||
        pickAxes.add("netherite_pickaxe");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillHoes() {
 | 
			
		||||
        hoes.add("wood_hoe");
 | 
			
		||||
        hoes.add("wooden_hoe");
 | 
			
		||||
        hoes.add("stone_hoe");
 | 
			
		||||
        hoes.add("iron_hoe");
 | 
			
		||||
        hoes.add("gold_hoe");
 | 
			
		||||
        hoes.add("golden_hoe");
 | 
			
		||||
        hoes.add("diamond_hoe");
 | 
			
		||||
        hoes.add("netherite_hoe");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillShovels() {
 | 
			
		||||
        shovels.add("wood_shovel");
 | 
			
		||||
        shovels.add("wooden_shovel");
 | 
			
		||||
        shovels.add("stone_shovel");
 | 
			
		||||
        shovels.add("iron_shovel");
 | 
			
		||||
        shovels.add("gold_shovel");
 | 
			
		||||
        shovels.add("golden_shovel");
 | 
			
		||||
        shovels.add("diamond_shovel");
 | 
			
		||||
        shovels.add("netherite_shovel");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillLeatherArmorWhiteList() {
 | 
			
		||||
        leatherArmor.add("leather_helmet");
 | 
			
		||||
        leatherArmor.add("leather_chestplate");
 | 
			
		||||
        leatherArmor.add("leather_leggings");
 | 
			
		||||
        leatherArmor.add("leather_boots");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillIronArmorWhiteList() {
 | 
			
		||||
        ironArmor.add("iron_helmet");
 | 
			
		||||
        ironArmor.add("iron_chestplate");
 | 
			
		||||
        ironArmor.add("iron_leggings");
 | 
			
		||||
        ironArmor.add("iron_boots");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillChainmailWhiteList() {
 | 
			
		||||
        chainmailArmor.add("chainmail_helmet");
 | 
			
		||||
        chainmailArmor.add("chainmail_chestplate");
 | 
			
		||||
        chainmailArmor.add("chainmail_leggings");
 | 
			
		||||
        chainmailArmor.add("chainmail_boots");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillGoldArmorWhiteList() {
 | 
			
		||||
        goldArmor.add("gold_helmet");
 | 
			
		||||
        goldArmor.add("gold_chestplate");
 | 
			
		||||
        goldArmor.add("gold_leggings");
 | 
			
		||||
        goldArmor.add("gold_boots");
 | 
			
		||||
 | 
			
		||||
        //Gold became Golden post 1.13
 | 
			
		||||
        goldArmor.add("golden_helmet");
 | 
			
		||||
        goldArmor.add("golden_chestplate");
 | 
			
		||||
        goldArmor.add("golden_leggings");
 | 
			
		||||
        goldArmor.add("golden_boots");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillDiamondArmorWhiteList() {
 | 
			
		||||
        diamondArmor.add("diamond_helmet");
 | 
			
		||||
        diamondArmor.add("diamond_chestplate");
 | 
			
		||||
        diamondArmor.add("diamond_leggings");
 | 
			
		||||
        diamondArmor.add("diamond_boots");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillnetheriteArmorWhiteList() {
 | 
			
		||||
        netheriteArmor.add("netherite_helmet");
 | 
			
		||||
        netheriteArmor.add("netherite_chestplate");
 | 
			
		||||
        netheriteArmor.add("netherite_leggings");
 | 
			
		||||
        netheriteArmor.add("netherite_boots");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillWoodToolsWhiteList() {
 | 
			
		||||
        woodTools.add("wood_sword");
 | 
			
		||||
        woodTools.add("wood_axe");
 | 
			
		||||
        woodTools.add("wood_hoe");
 | 
			
		||||
        woodTools.add("wood_pickaxe");
 | 
			
		||||
        woodTools.add("wood_shovel");
 | 
			
		||||
 | 
			
		||||
        //Wood became wooden post 1.13
 | 
			
		||||
        woodTools.add("wooden_sword");
 | 
			
		||||
        woodTools.add("wooden_axe");
 | 
			
		||||
        woodTools.add("wooden_hoe");
 | 
			
		||||
        woodTools.add("wooden_pickaxe");
 | 
			
		||||
        woodTools.add("wooden_shovel");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillStoneToolsWhiteList() {
 | 
			
		||||
        stoneTools.add("stone_sword");
 | 
			
		||||
        stoneTools.add("stone_axe");
 | 
			
		||||
        stoneTools.add("stone_hoe");
 | 
			
		||||
        stoneTools.add("stone_pickaxe");
 | 
			
		||||
        stoneTools.add("stone_shovel");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillIronToolsWhiteList() {
 | 
			
		||||
        ironTools.add("iron_sword");
 | 
			
		||||
        ironTools.add("iron_axe");
 | 
			
		||||
        ironTools.add("iron_hoe");
 | 
			
		||||
        ironTools.add("iron_pickaxe");
 | 
			
		||||
        ironTools.add("iron_shovel");
 | 
			
		||||
 | 
			
		||||
        //Used for repair, remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        //TODO: Remove in 2.2
 | 
			
		||||
        ironTools.add("bucket");
 | 
			
		||||
        ironTools.add("flint_and_steel");
 | 
			
		||||
        ironTools.add("shears");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillGoldToolsWhiteList() {
 | 
			
		||||
        goldTools.add("gold_sword");
 | 
			
		||||
        goldTools.add("gold_axe");
 | 
			
		||||
        goldTools.add("gold_hoe");
 | 
			
		||||
        goldTools.add("gold_pickaxe");
 | 
			
		||||
        goldTools.add("gold_shovel");
 | 
			
		||||
 | 
			
		||||
        //Gold became golden post 1.13
 | 
			
		||||
        goldTools.add("golden_sword");
 | 
			
		||||
        goldTools.add("golden_axe");
 | 
			
		||||
        goldTools.add("golden_hoe");
 | 
			
		||||
        goldTools.add("golden_pickaxe");
 | 
			
		||||
        goldTools.add("golden_shovel");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillDiamondToolsWhiteList() {
 | 
			
		||||
        diamondTools.add("diamond_sword");
 | 
			
		||||
        diamondTools.add("diamond_axe");
 | 
			
		||||
        diamondTools.add("diamond_hoe");
 | 
			
		||||
        diamondTools.add("diamond_pickaxe");
 | 
			
		||||
        diamondTools.add("diamond_shovel");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillnetheriteToolsWhiteList() {
 | 
			
		||||
        netheriteTools.add("netherite_sword");
 | 
			
		||||
        netheriteTools.add("netherite_axe");
 | 
			
		||||
        netheriteTools.add("netherite_hoe");
 | 
			
		||||
        netheriteTools.add("netherite_pickaxe");
 | 
			
		||||
        netheriteTools.add("netherite_shovel");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillGlassBlockWhiteList() {
 | 
			
		||||
@@ -161,6 +540,200 @@ public class MaterialMapStore {
 | 
			
		||||
        foodItemWhiteList.add("tropical_fish");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks if a Material is used for Armor
 | 
			
		||||
     * @param material target material
 | 
			
		||||
     * @return true if it is used for armor
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isArmor(Material material) {
 | 
			
		||||
        return isArmor(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Checks if the id provided is used as armor
 | 
			
		||||
     * @param id target item id
 | 
			
		||||
     * @return true if the item id matches armor
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isArmor(String id) {
 | 
			
		||||
        return armors.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isTool(Material material) {
 | 
			
		||||
        return isTool(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isTool(String id) {
 | 
			
		||||
        return tools.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isEnchantable(Material material) {
 | 
			
		||||
        return isEnchantable(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isEnchantable(String id) {
 | 
			
		||||
        return enchantables.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isOre(Material material) {
 | 
			
		||||
        return isOre(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isOre(String id) {
 | 
			
		||||
        return ores.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isBow(Material material) {
 | 
			
		||||
        return isBow(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isBow(String id) {
 | 
			
		||||
        return bows.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isLeatherArmor(Material material) {
 | 
			
		||||
        return isLeatherArmor(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isLeatherArmor(String id) {
 | 
			
		||||
        return leatherArmor.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isIronArmor(Material material) {
 | 
			
		||||
        return isIronArmor(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isIronArmor(String id) {
 | 
			
		||||
        return ironArmor.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isGoldArmor(Material material) {
 | 
			
		||||
        return isGoldArmor(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isGoldArmor(String id) {
 | 
			
		||||
        return goldArmor.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isDiamondArmor(Material material) {
 | 
			
		||||
        return isDiamondArmor(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isDiamondArmor(String id) {
 | 
			
		||||
        return diamondArmor.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isChainmailArmor(Material material) {
 | 
			
		||||
        return isChainmailArmor(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isChainmailArmor(String id) {
 | 
			
		||||
        return chainmailArmor.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isNetheriteArmor(Material material) {
 | 
			
		||||
        return isNetheriteArmor(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isNetheriteArmor(String id) {
 | 
			
		||||
        return netheriteArmor.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isWoodTool(Material material) {
 | 
			
		||||
        return isWoodTool(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isWoodTool(String id) {
 | 
			
		||||
        return woodTools.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isStoneTool(Material material) {
 | 
			
		||||
        return isStoneTool(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isStoneTool(String id) {
 | 
			
		||||
        return stoneTools.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isIronTool(Material material) {
 | 
			
		||||
        return isIronTool(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isIronTool(String id) {
 | 
			
		||||
        return ironTools.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isGoldTool(Material material) {
 | 
			
		||||
        return isGoldTool(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isGoldTool(String id) {
 | 
			
		||||
        return goldTools.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isDiamondTool(Material material) {
 | 
			
		||||
        return isDiamondTool(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isDiamondTool(String id) {
 | 
			
		||||
        return diamondTools.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isSword(Material material) {
 | 
			
		||||
        return isSword(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isSword(String id) {
 | 
			
		||||
        return swords.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isAxe(Material material) {
 | 
			
		||||
        return isAxe(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isAxe(String id) {
 | 
			
		||||
        return axes.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isPickAxe(Material material) {
 | 
			
		||||
        return isPickAxe(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isPickAxe(String id) {
 | 
			
		||||
        return pickAxes.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isShovel(Material material) {
 | 
			
		||||
        return isShovel(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isShovel(String id) {
 | 
			
		||||
        return shovels.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isHoe(Material material) {
 | 
			
		||||
        return isHoe(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isHoe(String id) {
 | 
			
		||||
        return hoes.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isNetheriteTool(Material material) {
 | 
			
		||||
        return isNetheriteTool(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isNetheriteTool(String id) {
 | 
			
		||||
        return netheriteTools.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isStringTool(Material material) {
 | 
			
		||||
        return isStringTool(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isStringTool(String id) {
 | 
			
		||||
        return stringTools.contains(id);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isGlass(Material material) {
 | 
			
		||||
        return glassBlocks.contains(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
@@ -181,6 +754,8 @@ public class MaterialMapStore {
 | 
			
		||||
        multiBlockPlant.add("large_fern");
 | 
			
		||||
        multiBlockPlant.add("tall_grass");
 | 
			
		||||
        multiBlockPlant.add("bamboo");
 | 
			
		||||
        multiBlockPlant.add("weeping_vines_plant");
 | 
			
		||||
        multiBlockPlant.add("twisted_vines_plant");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillShroomyWhiteList() {
 | 
			
		||||
@@ -209,6 +784,8 @@ public class MaterialMapStore {
 | 
			
		||||
        leavesWhiteList.add("dark_oak_leaves");
 | 
			
		||||
        leavesWhiteList.add("jungle_leaves");
 | 
			
		||||
        leavesWhiteList.add("spruce_leaves");
 | 
			
		||||
        leavesWhiteList.add("nether_wart_block");
 | 
			
		||||
        leavesWhiteList.add("warped_wart_block");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillMossyWhiteList() {
 | 
			
		||||
@@ -219,7 +796,18 @@ public class MaterialMapStore {
 | 
			
		||||
        mossyWhiteList.add("cobblestone_wall");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void fillAbilityBlackList() {
 | 
			
		||||
    private void fillAbilityBlackList()
 | 
			
		||||
    {
 | 
			
		||||
        abilityBlackList.add("warped_fence_gate");
 | 
			
		||||
        abilityBlackList.add("crimson_fence_gate");
 | 
			
		||||
        abilityBlackList.add("warped_pressure_plate");
 | 
			
		||||
        abilityBlackList.add("crimson_pressure_plate");
 | 
			
		||||
        abilityBlackList.add("warped_button");
 | 
			
		||||
        abilityBlackList.add("crimson_button");
 | 
			
		||||
        abilityBlackList.add("warped_door");
 | 
			
		||||
        abilityBlackList.add("crimson_door");
 | 
			
		||||
        abilityBlackList.add("warped_trapdoor");
 | 
			
		||||
        abilityBlackList.add("crimson_trapdoor");
 | 
			
		||||
        abilityBlackList.add("black_bed");
 | 
			
		||||
        abilityBlackList.add("blue_bed");
 | 
			
		||||
        abilityBlackList.add("brown_bed");
 | 
			
		||||
@@ -473,6 +1061,14 @@ public class MaterialMapStore {
 | 
			
		||||
        toolBlackList.add("stonecutter");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getTier(Material material) {
 | 
			
		||||
        return getTier(material.getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getTier(String id) {
 | 
			
		||||
        return tierValue.getOrDefault(id, 1); //1 for unknown items
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private void addToHashSet(String string, HashSet<String> stringHashSet)
 | 
			
		||||
    {
 | 
			
		||||
        stringHashSet.add(string.toLowerCase(Locale.ENGLISH));
 | 
			
		||||
 
 | 
			
		||||
@@ -10,6 +10,7 @@ public enum ItemMaterialCategory {
 | 
			
		||||
    IRON,
 | 
			
		||||
    GOLD,
 | 
			
		||||
    DIAMOND,
 | 
			
		||||
    NETHER,
 | 
			
		||||
    OTHER;
 | 
			
		||||
 | 
			
		||||
    public Material getDefaultMaterial() {
 | 
			
		||||
@@ -35,6 +36,12 @@ public enum ItemMaterialCategory {
 | 
			
		||||
            case DIAMOND:
 | 
			
		||||
                return Material.DIAMOND;
 | 
			
		||||
 | 
			
		||||
            case NETHER:
 | 
			
		||||
                if(Material.getMaterial("netherite_scrap") != null)
 | 
			
		||||
                    return Material.getMaterial("netherite_scrap");
 | 
			
		||||
                else
 | 
			
		||||
                    return Material.GOLD_INGOT;
 | 
			
		||||
 | 
			
		||||
            case OTHER:
 | 
			
		||||
            default:
 | 
			
		||||
                return null;
 | 
			
		||||
 
 | 
			
		||||
@@ -83,6 +83,7 @@ public class EntityListener implements Listener {
 | 
			
		||||
 | 
			
		||||
        Entity projectile = event.getProjectile();
 | 
			
		||||
 | 
			
		||||
        //Should be noted that there are API changes regarding Arrow from 1.13.2 to current versions of the game
 | 
			
		||||
        if (!(projectile instanceof Arrow)) {
 | 
			
		||||
            return;
 | 
			
		||||
        }
 | 
			
		||||
@@ -791,8 +792,8 @@ public class EntityListener implements Listener {
 | 
			
		||||
        MiningManager miningManager = pluginRef.getUserManager().getPlayer(player).getMiningManager();
 | 
			
		||||
 | 
			
		||||
        if (miningManager.canUseBlastMining()) {
 | 
			
		||||
            miningManager.blastMiningDropProcessing(event.getYield(), event.blockList());
 | 
			
		||||
            event.setYield(0);
 | 
			
		||||
            miningManager.blastMiningDropProcessing(event.getYield(), event);
 | 
			
		||||
//            event.setYield(0);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -2,11 +2,13 @@ package com.gmail.nossr50.runnables.skills;
 | 
			
		||||
 | 
			
		||||
import com.gmail.nossr50.datatypes.interactions.NotificationType;
 | 
			
		||||
import com.gmail.nossr50.datatypes.skills.BleedContainer;
 | 
			
		||||
import com.gmail.nossr50.events.fake.FakeEntityDamageByEntityEvent;
 | 
			
		||||
import com.gmail.nossr50.mcMMO;
 | 
			
		||||
import com.gmail.nossr50.util.sounds.SoundType;
 | 
			
		||||
import org.bukkit.Bukkit;
 | 
			
		||||
import org.bukkit.entity.LivingEntity;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.event.entity.EntityDamageEvent;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
import org.bukkit.scheduler.BukkitRunnable;
 | 
			
		||||
 | 
			
		||||
@@ -161,6 +163,10 @@ public class BleedTimerTask extends BukkitRunnable {
 | 
			
		||||
 | 
			
		||||
//            debugMessage+="TargetHealthBeforeDMG=["+String.valueOf(target.getHealth())+"], ";
 | 
			
		||||
 | 
			
		||||
            //Fire a fake event
 | 
			
		||||
            FakeEntityDamageByEntityEvent fakeEntityDamageByEntityEvent = (FakeEntityDamageByEntityEvent) pluginRef.getCombatTools().sendEntityDamageEvent(containerEntry.getValue().damageSource, target, EntityDamageEvent.DamageCause.CUSTOM, damage);
 | 
			
		||||
            Bukkit.getPluginManager().callEvent(fakeEntityDamageByEntityEvent);
 | 
			
		||||
 | 
			
		||||
            pluginRef.getCombatTools().dealNoInvulnerabilityTickDamageRupture(target, damage, containerEntry.getValue().damageSource, toolTier);
 | 
			
		||||
 | 
			
		||||
            double victimHealthAftermath = target.getHealth();
 | 
			
		||||
 
 | 
			
		||||
@@ -14,9 +14,11 @@ import com.gmail.nossr50.skills.SkillManager;
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
import org.bukkit.block.Block;
 | 
			
		||||
import org.bukkit.block.BlockState;
 | 
			
		||||
import org.bukkit.block.Container;
 | 
			
		||||
import org.bukkit.enchantments.Enchantment;
 | 
			
		||||
import org.bukkit.entity.Player;
 | 
			
		||||
import org.bukkit.entity.TNTPrimed;
 | 
			
		||||
import org.bukkit.event.entity.EntityExplodeEvent;
 | 
			
		||||
import org.bukkit.inventory.ItemStack;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
@@ -118,9 +120,9 @@ public class MiningManager extends SkillManager {
 | 
			
		||||
 | 
			
		||||
        TNTPrimed tnt = player.getWorld().spawn(targetBlock.getLocation(), TNTPrimed.class);
 | 
			
		||||
 | 
			
		||||
        //SkillUtils.sendSkillMessage(player, SuperAbilityType.BLAST_miningBehaviour.getAbilityPlayer(player));
 | 
			
		||||
        pluginRef.getNotificationManager().sendPlayerInformation(player, NotificationType.SUPER_ABILITY, "miningBehaviour.Blast.Boom");
 | 
			
		||||
        //player.sendMessage(pluginRef.getLocaleManager().getString("miningBehaviour.Blast.Boom"));
 | 
			
		||||
        //SkillUtils.sendSkillMessage(player, SuperAbilityType.BLAST_MINING.getAbilityPlayer(player));
 | 
			
		||||
        pluginRef.getNotificationManager().sendPlayerInformation(player, NotificationType.SUPER_ABILITY, "Mining.Blast.Boom");
 | 
			
		||||
        //player.sendMessage(LocaleLoader.getString("Mining.Blast.Boom"));
 | 
			
		||||
 | 
			
		||||
        tnt.setMetadata(MetadataConstants.TNT_TRACKING_METAKEY, mcMMOPlayer.getPlayerMetadata());
 | 
			
		||||
        tnt.setFuseTicks(0);
 | 
			
		||||
@@ -128,62 +130,80 @@ public class MiningManager extends SkillManager {
 | 
			
		||||
 | 
			
		||||
        mcMMOPlayer.setAbilityDATS(SuperAbilityType.BLAST_MINING, System.currentTimeMillis());
 | 
			
		||||
        mcMMOPlayer.setAbilityInformed(SuperAbilityType.BLAST_MINING, false);
 | 
			
		||||
        new AbilityCooldownTask(pluginRef, mcMMOPlayer, SuperAbilityType.BLAST_MINING)
 | 
			
		||||
                .runTaskLater(pluginRef, pluginRef.getSkillTools().getSuperAbilityCooldown(SuperAbilityType.BLAST_MINING)
 | 
			
		||||
                        * pluginRef.getMiscTools().TICK_CONVERSION_FACTOR);
 | 
			
		||||
        new AbilityCooldownTask(pluginRef, mcMMOPlayer, SuperAbilityType.BLAST_MINING).runTaskLater(pluginRef, pluginRef.getSkillTools().getSuperAbilityCooldown(SuperAbilityType.BLAST_MINING) * pluginRef.getMiscTools().TICK_CONVERSION_FACTOR);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Handler for explosion drops and XP gain.
 | 
			
		||||
     *
 | 
			
		||||
     * @param yield The % of blocks to drop
 | 
			
		||||
     * @param blockList The list of blocks to drop
 | 
			
		||||
     * @param event The {@link EntityExplodeEvent}
 | 
			
		||||
     */
 | 
			
		||||
    public void blastMiningDropProcessing(float yield, List<Block> blockList) {
 | 
			
		||||
        List<BlockState> ores = new ArrayList<>();
 | 
			
		||||
        List<BlockState> debris = new ArrayList<>();
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    //TODO: Rewrite this garbage
 | 
			
		||||
    public void blastMiningDropProcessing(float yield, EntityExplodeEvent event) {
 | 
			
		||||
        //Strip out only stuff that gives mining XP
 | 
			
		||||
 | 
			
		||||
        List<BlockState> ores = new ArrayList<BlockState>();
 | 
			
		||||
 | 
			
		||||
        List<Block> notOres = new ArrayList<>();
 | 
			
		||||
        for (Block targetBlock : event.blockList()) {
 | 
			
		||||
            //Containers usually have 0 XP unless someone edited their config in a very strange way
 | 
			
		||||
            if (pluginRef.getDynamicSettingsManager().getExperienceManager().getMiningXp(targetBlock.getType()) == 0 || targetBlock instanceof Container || pluginRef.getPlaceStore().isTrue(targetBlock)) {
 | 
			
		||||
                notOres.add(targetBlock);
 | 
			
		||||
            } else {
 | 
			
		||||
                ores.add(targetBlock.getState());
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        int xp = 0;
 | 
			
		||||
 | 
			
		||||
        float oreBonus = (float) (getOreBonus() / 100);
 | 
			
		||||
        float debrisReduction = (float) (getDebrisReduction() / 100);
 | 
			
		||||
//        float oreBonus = (float) (getOreBonus() / 100);
 | 
			
		||||
        //TODO: Pretty sure something is fucked with debrisReduction stuff
 | 
			
		||||
//        float debrisReduction = (float) (getDebrisReduction() / 100);
 | 
			
		||||
        int dropMultiplier = getDropMultiplier();
 | 
			
		||||
 | 
			
		||||
        float debrisYield = yield - debrisReduction;
 | 
			
		||||
 | 
			
		||||
        for (Block block : blockList) {
 | 
			
		||||
            BlockState blockState = block.getState();
 | 
			
		||||
 | 
			
		||||
            if (pluginRef.getBlockTools().isOre(blockState)) {
 | 
			
		||||
                ores.add(blockState);
 | 
			
		||||
            //A bug where beacons can drop when yield is set to 0 on explosion events is prevented here
 | 
			
		||||
            } else if(blockState.getType() != Material.BEACON) {
 | 
			
		||||
                debris.add(blockState);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
//        float debrisYield = yield - debrisReduction;
 | 
			
		||||
 | 
			
		||||
        for (BlockState blockState : ores) {
 | 
			
		||||
            if (pluginRef.getMiscTools().getRandom().nextFloat() < (yield + oreBonus)) {
 | 
			
		||||
                if (!pluginRef.getPlaceStore().isTrue(blockState)) {
 | 
			
		||||
                    xp += miningBehaviour.getBlockXp(blockState);
 | 
			
		||||
                }
 | 
			
		||||
            if (pluginRef.getMiscTools().getRandom().nextInt(ores.size()) >= (ores.size() / 2)) {
 | 
			
		||||
                xp += pluginRef.getDynamicSettingsManager().getExperienceManager().getMiningXp(blockState.getType());
 | 
			
		||||
 | 
			
		||||
                pluginRef.getMiscTools().dropItem(pluginRef.getMiscTools().getBlockCenter(blockState), new ItemStack(blockState.getType())); // Initial block that would have been dropped
 | 
			
		||||
 | 
			
		||||
                if (!pluginRef.getPlaceStore().isTrue(blockState)) {
 | 
			
		||||
                for (int i = 1; i < dropMultiplier; i++) {
 | 
			
		||||
                    if(pluginRef.getMiscTools().getRandom().nextInt(100) >= 75)
 | 
			
		||||
                        miningBehaviour.handleSilkTouchDrops(blockState); // Bonus drops - should drop the block & not the items
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (debrisYield > 0) {
 | 
			
		||||
            for (BlockState blockState : debris) {
 | 
			
		||||
                if (pluginRef.getMiscTools().getRandom().nextFloat() < debrisYield) {
 | 
			
		||||
                    pluginRef.getMiscTools().dropItems(pluginRef.getMiscTools().getBlockCenter(blockState), blockState.getBlock().getDrops());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        //Replace the event blocklist with the newYield list
 | 
			
		||||
        event.setYield(0F);
 | 
			
		||||
//        event.blockList().clear();
 | 
			
		||||
//        event.blockList().addAll(notOres);
 | 
			
		||||
 | 
			
		||||
        applyXpGain(xp, XPGainReason.PVE);
 | 
			
		||||
    }
 | 
			
		||||
 
 | 
			
		||||
@@ -89,7 +89,9 @@ public class SwordsManager extends SkillManager {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getToolTier(ItemStack itemStack) {
 | 
			
		||||
        if (pluginRef.getItemTools().isDiamondTool(itemStack))
 | 
			
		||||
        if(pluginRef.getItemTools().isNetheriteTool(itemStack))
 | 
			
		||||
            return 5;
 | 
			
		||||
        else if (pluginRef.getItemTools().isDiamondTool(itemStack))
 | 
			
		||||
            return 4;
 | 
			
		||||
        else if (pluginRef.getItemTools().isIronTool(itemStack) || pluginRef.getItemTools().isGoldTool(itemStack))
 | 
			
		||||
            return 3;
 | 
			
		||||
 
 | 
			
		||||
@@ -119,7 +119,7 @@ public final class BlockTools {
 | 
			
		||||
     * @return true if the block is an ore, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isOre(BlockState blockState) {
 | 
			
		||||
        return MaterialUtils.isOre(blockState.getType());
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isOre(blockState.getType());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -103,16 +103,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is a bow, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isBow(ItemStack item) {
 | 
			
		||||
        Material type = item.getType();
 | 
			
		||||
 | 
			
		||||
        switch (type) {
 | 
			
		||||
            case BOW:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
            //return mcMMO.getModManager().isCustomBow(type);
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isBow(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean hasItemInEitherHand(Player player, Material material) {
 | 
			
		||||
@@ -126,20 +117,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is a sword, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isSword(ItemStack item) {
 | 
			
		||||
        Material type = item.getType();
 | 
			
		||||
 | 
			
		||||
        switch (type) {
 | 
			
		||||
            case DIAMOND_SWORD:
 | 
			
		||||
            case GOLDEN_SWORD:
 | 
			
		||||
            case IRON_SWORD:
 | 
			
		||||
            case STONE_SWORD:
 | 
			
		||||
            case WOODEN_SWORD:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
            //return mcMMO.getModManager().isCustomSword(type);
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isSword(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -149,20 +127,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is a hoe, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isHoe(ItemStack item) {
 | 
			
		||||
        Material type = item.getType();
 | 
			
		||||
 | 
			
		||||
        switch (type) {
 | 
			
		||||
            case DIAMOND_HOE:
 | 
			
		||||
            case GOLDEN_HOE:
 | 
			
		||||
            case IRON_HOE:
 | 
			
		||||
            case STONE_HOE:
 | 
			
		||||
            case WOODEN_HOE:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
            //return mcMMO.getModManager().isCustomHoe(type);
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isHoe(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -172,20 +137,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is a shovel, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isShovel(ItemStack item) {
 | 
			
		||||
        Material type = item.getType();
 | 
			
		||||
 | 
			
		||||
        switch (type) {
 | 
			
		||||
            case DIAMOND_SHOVEL:
 | 
			
		||||
            case GOLDEN_SHOVEL:
 | 
			
		||||
            case IRON_SHOVEL:
 | 
			
		||||
            case STONE_SHOVEL:
 | 
			
		||||
            case WOODEN_SHOVEL:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
            //return mcMMO.getModManager().isCustomShovel(type);
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isShovel(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -195,20 +147,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is an axe, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isAxe(ItemStack item) {
 | 
			
		||||
        Material type = item.getType();
 | 
			
		||||
 | 
			
		||||
        switch (type) {
 | 
			
		||||
            case DIAMOND_AXE:
 | 
			
		||||
            case GOLDEN_AXE:
 | 
			
		||||
            case IRON_AXE:
 | 
			
		||||
            case STONE_AXE:
 | 
			
		||||
            case WOODEN_AXE:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
            //return mcMMO.getModManager().isCustomAxe(type);
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isAxe(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -218,20 +157,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is a pickaxe, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isPickaxe(ItemStack item) {
 | 
			
		||||
        Material type = item.getType();
 | 
			
		||||
 | 
			
		||||
        switch (type) {
 | 
			
		||||
            case DIAMOND_PICKAXE:
 | 
			
		||||
            case GOLDEN_PICKAXE:
 | 
			
		||||
            case IRON_PICKAXE:
 | 
			
		||||
            case STONE_PICKAXE:
 | 
			
		||||
            case WOODEN_PICKAXE:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
            //return mcMMO.getModManager().isCustomPickaxe(type);
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isPickAxe(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -357,7 +283,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is armor, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isMinecraftArmor(ItemStack item) {
 | 
			
		||||
        return isLeatherArmor(item) || isGoldArmor(item) || isIronArmor(item) || isDiamondArmor(item) || isChainmailArmor(item);
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isArmor(item.getType());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -367,16 +293,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is leather armor, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isLeatherArmor(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
            case LEATHER_BOOTS:
 | 
			
		||||
            case LEATHER_CHESTPLATE:
 | 
			
		||||
            case LEATHER_HELMET:
 | 
			
		||||
            case LEATHER_LEGGINGS:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isLeatherArmor(item.getType());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -386,16 +303,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is gold armor, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isGoldArmor(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
            case GOLDEN_BOOTS:
 | 
			
		||||
            case GOLDEN_CHESTPLATE:
 | 
			
		||||
            case GOLDEN_HELMET:
 | 
			
		||||
            case GOLDEN_LEGGINGS:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isGoldArmor(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -405,16 +313,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is iron armor, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isIronArmor(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
            case IRON_BOOTS:
 | 
			
		||||
            case IRON_CHESTPLATE:
 | 
			
		||||
            case IRON_HELMET:
 | 
			
		||||
            case IRON_LEGGINGS:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isIronArmor(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -424,16 +323,15 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is diamond armor, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isDiamondArmor(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
            case DIAMOND_BOOTS:
 | 
			
		||||
            case DIAMOND_CHESTPLATE:
 | 
			
		||||
            case DIAMOND_HELMET:
 | 
			
		||||
            case DIAMOND_LEGGINGS:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isDiamondArmor(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isNetheriteArmor(ItemStack itemStack) {
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isNetheriteArmor(itemStack.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isNetheriteTool(ItemStack itemStack) {
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isNetheriteTool(itemStack.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -443,16 +341,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is chainmail armor, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isChainmailArmor(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
            case CHAINMAIL_BOOTS:
 | 
			
		||||
            case CHAINMAIL_CHESTPLATE:
 | 
			
		||||
            case CHAINMAIL_HELMET:
 | 
			
		||||
            case CHAINMAIL_LEGGINGS:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isChainmailArmor(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -462,7 +351,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is a tool, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isMinecraftTool(ItemStack item) {
 | 
			
		||||
        return isStoneTool(item) || isWoodTool(item) || isGoldTool(item) || isIronTool(item) || isDiamondTool(item) || isStringTool(item) || item.getType() == Material.TRIDENT;
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isTool(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -472,17 +361,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is a stone tool, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isStoneTool(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
            case STONE_AXE:
 | 
			
		||||
            case STONE_HOE:
 | 
			
		||||
            case STONE_PICKAXE:
 | 
			
		||||
            case STONE_SHOVEL:
 | 
			
		||||
            case STONE_SWORD:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isStoneTool(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -492,17 +371,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is a wooden tool, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isWoodTool(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
            case WOODEN_AXE:
 | 
			
		||||
            case WOODEN_HOE:
 | 
			
		||||
            case WOODEN_PICKAXE:
 | 
			
		||||
            case WOODEN_SHOVEL:
 | 
			
		||||
            case WOODEN_SWORD:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isWoodTool(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -532,15 +401,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is a string tool, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isStringTool(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
            case BOW:
 | 
			
		||||
            case CARROT_ON_A_STICK:
 | 
			
		||||
            case FISHING_ROD:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isStringTool(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -550,17 +411,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is a stone tool, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isGoldTool(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
            case GOLDEN_AXE:
 | 
			
		||||
            case GOLDEN_HOE:
 | 
			
		||||
            case GOLDEN_PICKAXE:
 | 
			
		||||
            case GOLDEN_SHOVEL:
 | 
			
		||||
            case GOLDEN_SWORD:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isGoldTool(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -570,20 +421,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is an iron tool, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isIronTool(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
            case BUCKET:
 | 
			
		||||
            case FLINT_AND_STEEL:
 | 
			
		||||
            case IRON_AXE:
 | 
			
		||||
            case IRON_HOE:
 | 
			
		||||
            case IRON_PICKAXE:
 | 
			
		||||
            case IRON_SHOVEL:
 | 
			
		||||
            case IRON_SWORD:
 | 
			
		||||
            case SHEARS:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isIronTool(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -593,17 +431,7 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is a diamond tool, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isDiamondTool(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
            case DIAMOND_AXE:
 | 
			
		||||
            case DIAMOND_HOE:
 | 
			
		||||
            case DIAMOND_PICKAXE:
 | 
			
		||||
            case DIAMOND_SHOVEL:
 | 
			
		||||
            case DIAMOND_SWORD:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isDiamondTool(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
@@ -613,22 +441,11 @@ public final class ItemTools {
 | 
			
		||||
     * @return true if the item is enchantable, false otherwise
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isEnchantable(ItemStack item) {
 | 
			
		||||
        switch (item.getType()) {
 | 
			
		||||
            case ENCHANTED_BOOK:
 | 
			
		||||
            case SHEARS:
 | 
			
		||||
            case FISHING_ROD:
 | 
			
		||||
            case CARROT_ON_A_STICK:
 | 
			
		||||
            case FLINT_AND_STEEL:
 | 
			
		||||
            case TRIDENT:
 | 
			
		||||
                return true;
 | 
			
		||||
 | 
			
		||||
            default:
 | 
			
		||||
                return isArmor(item) || isSword(item) || isAxe(item) || isShovel(item) || isPickaxe(item) || isBow(item);
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().isEnchantable(item.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isSmeltable(ItemStack item) {
 | 
			
		||||
        return item != null && item.getType().isBlock() && MaterialUtils.isOre(item.getType());
 | 
			
		||||
        return item != null && item.getType().isBlock() && pluginRef.getMaterialMapStore().isOre(item.getType());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isSmelted(ItemStack item) {
 | 
			
		||||
@@ -639,7 +456,7 @@ public final class ItemTools {
 | 
			
		||||
        for (Recipe recipe : pluginRef.getServer().getRecipesFor(item)) {
 | 
			
		||||
            if (recipe instanceof FurnaceRecipe
 | 
			
		||||
                    && ((FurnaceRecipe) recipe).getInput().getType().isBlock()
 | 
			
		||||
                    && MaterialUtils.isOre(((FurnaceRecipe) recipe).getInput().getType())) {
 | 
			
		||||
                    && pluginRef.getMaterialMapStore().isOre(((FurnaceRecipe) recipe).getInput().getType())) {
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -1,26 +0,0 @@
 | 
			
		||||
package com.gmail.nossr50.util;
 | 
			
		||||
 | 
			
		||||
import org.bukkit.Material;
 | 
			
		||||
 | 
			
		||||
public final class MaterialUtils {
 | 
			
		||||
    private MaterialUtils() {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    protected static boolean isOre(Material data) {
 | 
			
		||||
        switch (data) {
 | 
			
		||||
            case COAL_ORE:
 | 
			
		||||
            case DIAMOND_ORE:
 | 
			
		||||
            case NETHER_QUARTZ_ORE:
 | 
			
		||||
            case GOLD_ORE:
 | 
			
		||||
            case IRON_ORE:
 | 
			
		||||
            case LAPIS_ORE:
 | 
			
		||||
            case REDSTONE_ORE:
 | 
			
		||||
            case EMERALD_ORE:
 | 
			
		||||
                return true;
 | 
			
		||||
            default:
 | 
			
		||||
                return false;
 | 
			
		||||
            /*default:
 | 
			
		||||
                return mcMMO.getModManager().isCustomOre(data);*/
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
@@ -133,6 +133,29 @@ public final class MiscTools {
 | 
			
		||||
        return location.getWorld().dropItemNaturally(location, itemStack);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Drop an item at a given location.
 | 
			
		||||
     *
 | 
			
		||||
     * @param location The location to drop the item at
 | 
			
		||||
     * @param itemStack The item to drop
 | 
			
		||||
     * @return Dropped Item entity or null if invalid or cancelled
 | 
			
		||||
     */
 | 
			
		||||
    public Item dropItem(Location location, ItemStack itemStack, int count) {
 | 
			
		||||
        if (itemStack.getType() == Material.AIR) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // We can't get the item until we spawn it and we want to make it cancellable, so we have a custom event.
 | 
			
		||||
        McMMOItemSpawnEvent event = new McMMOItemSpawnEvent(location, itemStack);
 | 
			
		||||
        pluginRef.getServer().getPluginManager().callEvent(event);
 | 
			
		||||
 | 
			
		||||
        if (event.isCancelled()) {
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return location.getWorld().dropItem(location, itemStack);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Drop items at a given location.
 | 
			
		||||
     *
 | 
			
		||||
 
 | 
			
		||||
@@ -476,31 +476,7 @@ public final class CombatTools {
 | 
			
		||||
     * @return the armor quality of a specific Item Stack
 | 
			
		||||
     */
 | 
			
		||||
    private int getArmorQuality(ItemStack itemStack) {
 | 
			
		||||
        int quality = 0;
 | 
			
		||||
        switch(itemStack.getType()) {
 | 
			
		||||
            case LEATHER_HELMET:
 | 
			
		||||
            case LEATHER_BOOTS:
 | 
			
		||||
            case LEATHER_CHESTPLATE:
 | 
			
		||||
            case LEATHER_LEGGINGS:
 | 
			
		||||
                return 1;
 | 
			
		||||
            case IRON_HELMET:
 | 
			
		||||
            case IRON_BOOTS:
 | 
			
		||||
            case IRON_CHESTPLATE:
 | 
			
		||||
            case IRON_LEGGINGS:
 | 
			
		||||
                return 2;
 | 
			
		||||
            case GOLDEN_HELMET:
 | 
			
		||||
            case GOLDEN_BOOTS:
 | 
			
		||||
            case GOLDEN_CHESTPLATE:
 | 
			
		||||
            case GOLDEN_LEGGINGS:
 | 
			
		||||
                return 3;
 | 
			
		||||
            case DIAMOND_HELMET:
 | 
			
		||||
            case DIAMOND_BOOTS:
 | 
			
		||||
            case DIAMOND_CHESTPLATE:
 | 
			
		||||
            case DIAMOND_LEGGINGS:
 | 
			
		||||
                return 6;
 | 
			
		||||
            default:
 | 
			
		||||
                return 1;
 | 
			
		||||
        }
 | 
			
		||||
        return pluginRef.getMaterialMapStore().getTier(itemStack.getType().getKey().getKey());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
@@ -46,12 +46,18 @@ public final class ParticleEffectUtils {
 | 
			
		||||
            return;
 | 
			
		||||
        }*/
 | 
			
		||||
 | 
			
		||||
        if(location.getWorld() == null)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        location.getWorld().playEffect(location, Effect.MOBSPAWNER_FLAMES, 1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void playSmokeEffect(Location location) {
 | 
			
		||||
        World world = location.getWorld();
 | 
			
		||||
 | 
			
		||||
        if(world == null)
 | 
			
		||||
            return;
 | 
			
		||||
 | 
			
		||||
        // Have to do it this way, because not all block directions are valid for smoke
 | 
			
		||||
        world.playEffect(location, Effect.SMOKE, BlockFace.SOUTH_EAST);
 | 
			
		||||
        world.playEffect(location, Effect.SMOKE, BlockFace.SOUTH);
 | 
			
		||||
 
 | 
			
		||||
@@ -159,7 +159,7 @@ SuperAbility.SuperBreaker.Other.On=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Me
 | 
			
		||||
SuperAbility.SuperBreaker.Refresh=[[GREEN]]Schopnost [[YELLOW]]Super Breaker [[GREEN]]obnovena!
 | 
			
		||||
Mining.Skillup=Dovednost v dolovani byla navysena o {0}. Celkem ({1})
 | 
			
		||||
SuperAbility.BlastMining.Boom=[[GRAY]]**VYBUCH**
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} v\u00fdnos rudy, -{1} v\u00fdnos trosek, {2}x ko\u0159ist
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} v\u00fdnos rudy, {1}x ko\u0159ist
 | 
			
		||||
SuperAbility.BlastMining.Radius.Increase=Navyseni radiusu vybuchu: [[YELLOW]]+{0}
 | 
			
		||||
SuperAbility.BlastMining.Rank=V\u00fdbu\u0161n\u00e9 t\u011b\u017een\u00ed [[YELLOW]] Rank {0}/8 [[GRAY]]({1})
 | 
			
		||||
SuperAbility.BlastMining.Other.On=[[GREEN]]{0}[[DARK_GREEN]] pou\u017eil [[RED]]V\u00fdbu\u0161n\u00e9 T\u011b\u017een\u00ed!
 | 
			
		||||
 
 | 
			
		||||
@@ -601,7 +601,7 @@ Mining.Ability.Locked.2                          = GESPERRT bis Skill {0}+  (Exp
 | 
			
		||||
Mining.Ability.Lower                             = &7**Du senkst deine SPITZHACKE**
 | 
			
		||||
Mining.Ability.Ready                             = &a**Deine SPITZHACKE ist bereit**
 | 
			
		||||
SuperAbility.BlastMining.Boom                                = &7**BOOM**
 | 
			
		||||
SuperAbility.BlastMining.Effect                              = +{0} Erze -{1} Schutt, {2}x Drops
 | 
			
		||||
SuperAbility.BlastMining.Effect                              = +{0} Erze {1}x Drops
 | 
			
		||||
SuperAbility.BlastMining.Other.On                            = &a{0}&2 benutzte &cZ\u00FCndstoff!
 | 
			
		||||
SuperAbility.BlastMining.Refresh                             = &aDein &eZ\u00FCndstoff &aist wieder bereit!
 | 
			
		||||
Mining.Listener                                  = Bergbau:
 | 
			
		||||
 
 | 
			
		||||
@@ -327,7 +327,7 @@ SuperAbility.SuperBreaker.Refresh=[[GREEN]]Your [[YELLOW]]Super Breaker [[GREEN]
 | 
			
		||||
#Blast Mining
 | 
			
		||||
SuperAbility.BlastMining.Boom=[[GRAY]]**BOOM**
 | 
			
		||||
SuperAbility.BlastMining.Cooldown=
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} ore yield, -{1} debris yield, {2}x drops
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} ore yield,  {1}x drops
 | 
			
		||||
SuperAbility.BlastMining.Other.On=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Blast Mining!
 | 
			
		||||
SuperAbility.BlastMining.Refresh=[[GREEN]]Your [[YELLOW]]Blast Mining [[GREEN]]ability is refreshed!
 | 
			
		||||
#REPAIR
 | 
			
		||||
 
 | 
			
		||||
@@ -161,7 +161,7 @@ SuperAbility.SuperBreaker.Other.On=[[GREEN]]\u00a1{0}[[DARK_GREEN]] us\u00f3 [[R
 | 
			
		||||
SuperAbility.SuperBreaker.Refresh=[[GREEN]]\u00a1Tu habilidad de [[YELLOW]]S\u00faper Destructor [[GREEN]]est\u00e1 refrescada!
 | 
			
		||||
Mining.Skillup=Habilidad de Miner\u00eda incrementada en {0}. Total ({1})
 | 
			
		||||
SuperAbility.BlastMining.Boom=[[GRAY]]**BOOM**
 | 
			
		||||
SuperAbility.BlastMining.Effect=+ {0} mineral de rendimiento, - {1} rendimiento de los desechos, {2} x drops
 | 
			
		||||
SuperAbility.BlastMining.Effect=+ {0} mineral de rendimiento, {1} x drops
 | 
			
		||||
SuperAbility.BlastMining.Radius.Increase=Incrementado Radio de Explosi\u00f3n: [[YELLOW]]+{0}
 | 
			
		||||
SuperAbility.BlastMining.Rank=Miner\u00eda Explosiva: [[YELLOW]] Rango {0}/8 [[GRAY]]({1})
 | 
			
		||||
SuperAbility.BlastMining.Other.On=[[GREEN]]\u00a1{0}[[DARK_GREEN]] us\u00f3 [[RED]]Miner\u00eda Explosiva!
 | 
			
		||||
 
 | 
			
		||||
@@ -177,7 +177,7 @@ SuperAbility.SuperBreaker.Other.On=[[GREEN]]{0}[[DARK_GREEN]] a utilis\u00e9 [[R
 | 
			
		||||
SuperAbility.SuperBreaker.Refresh=[[GREEN]]Votre comp\u00e9tence [[YELLOW]]Broyeur [[GREEN]]est pr\u00eate !
 | 
			
		||||
Mining.Skillup=Le talent Minage augmente de {0}. Total ({1})
 | 
			
		||||
SuperAbility.BlastMining.Boom=[[GRAY]]**BOUM**
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} de r\u00e9colte des minerais, -{1} de r\u00e9colte des d\u00e9bris, {2}x les r\u00e9compenses
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} de r\u00e9colte des minerais, {1}x les r\u00e9compenses
 | 
			
		||||
SuperAbility.BlastMining.Radius.Increase=Rayon d\'explosion : [[YELLOW]]+{0}
 | 
			
		||||
SuperAbility.BlastMining.Rank=Minage explosif : [[YELLOW]]Rang {0}/8 [[GRAY]]({1})
 | 
			
		||||
SuperAbility.BlastMining.Other.On=[[GREEN]]{0}[[DARK_GREEN]] a utilis\u00e9 [[RED]]Minage explosif !
 | 
			
		||||
 
 | 
			
		||||
@@ -330,7 +330,7 @@ SuperAbility.SuperBreaker.Refresh=[[GREEN]]A [[YELLOW]]Szuper T\u00F6r\u00E9s [[
 | 
			
		||||
#Blast Mining
 | 
			
		||||
SuperAbility.BlastMining.Boom=[[GRAY]]**BUMM**
 | 
			
		||||
SuperAbility.BlastMining.Cooldown=
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} \u00E9rc hozam, -{1} t\u00F6rmel\u00E9k hozam, {2}x t\u00E1rgy es\u00E9s
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} \u00E9rc hozam, {1}x t\u00E1rgy es\u00E9s
 | 
			
		||||
SuperAbility.BlastMining.Other.On=[[GREEN]]{0}[[DARK_GREEN]] haszn\u00E1lta a [[RED]]Robbant\u00E1sb\u00E1ny\u00E1szat [[DARK_GREEN]]k\u00E9pess\u00E9get!
 | 
			
		||||
SuperAbility.BlastMining.Refresh=[[GREEN]]A [[YELLOW]]Robbant\u00E1sb\u00E1ny\u00E1szat [[GREEN]]k\u00E9pess\u00E9ged ism\u00E9t el\u00E9rhet\u0151!
 | 
			
		||||
#REPAIR
 | 
			
		||||
 
 | 
			
		||||
@@ -338,7 +338,7 @@ SuperAbility.SuperBreaker.Refresh=[[GREEN]]La tua capacit\u00E0 [[YELLOW]]Super
 | 
			
		||||
#Blast Mining
 | 
			
		||||
SuperAbility.BlastMining.Boom=[[GRAY]]**BOOM**
 | 
			
		||||
SuperAbility.BlastMining.Cooldown=
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} minerale raccolto, -{1} macerie prodotte, drop {2}x
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} minerale raccolto, drop {1}x
 | 
			
		||||
SuperAbility.BlastMining.Other.On=[[GREEN]]{0}[[DARK_GREEN]] ha usato [[RED]]Estrazione Esplosiva!
 | 
			
		||||
SuperAbility.BlastMining.Refresh=[[GREEN]]La tua capacit\u00E0 [[YELLOW]]Estrazione Esplosiva [[GREEN]]si \u00E8 rigenerata!
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -322,7 +322,7 @@ SuperAbility.SuperBreaker.Other.On=[[GREEN]]{0}[[DARK_GREEN]]\u304c [[RED]]\u30b
 | 
			
		||||
# Blast Mining
 | 
			
		||||
SuperAbility.BlastMining.Boom=[[GRAY]]**BOOM**
 | 
			
		||||
SuperAbility.BlastMining.Cooldown=
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} ore yield, -{1} debris yield, {2}x \u30c9\u30ed\u30c3\u30d7
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} ore yield, {1}x \u30c9\u30ed\u30c3\u30d7
 | 
			
		||||
SuperAbility.BlastMining.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u304c [[RED]]\u30d6\u30e9\u30b9\u30c8\u30de\u30a4\u30cb\u30f3\u30b0 [[DARK_GREEN]]\u3092\u4f7f\u3063\u305f\uff01
 | 
			
		||||
SuperAbility.BlastMining.Refresh=[[YELLOW]]\u30d6\u30e9\u30b9\u30c8\u30de\u30a4\u30cb\u30f3\u30b0[GREEN]]\u30a2\u30d3\u30ea\u30c6\u30a3\u304c\u56de\u5fa9\u3057\u307e\u3057\u305f\uff01
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -202,7 +202,7 @@ SuperAbility.SuperBreaker.Refresh=[[GREEN]]\uB2F9\uC2E0\uC758 [[YELLOW]]\uD30C\u
 | 
			
		||||
Mining.Skillup=\uCC44\uAD11 \uAE30\uC220\uC774 {0} \uC62C\uB77C \uCD1D {1} \uB808\uBCA8\uC774 \uB418\uC5C8\uC2B5\uB2C8\uB2E4
 | 
			
		||||
#Blast Mining
 | 
			
		||||
SuperAbility.BlastMining.Boom=[[GRAY]]**\uD3ED\uBC1C**
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} \uAD11\uBB3C \uC774\uC775, -{1} \uD30C\uD3B8 \uC0B0\uCD9C, {2}x \uB4DC\uB86D
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} \uAD11\uBB3C \uC774\uC775, {1}x \uB4DC\uB86D
 | 
			
		||||
SuperAbility.BlastMining.Radius.Increase=\uD3ED\uBC1C \uBC18\uACBD \uC99D\uAC00: [[YELLOW]]+{0}
 | 
			
		||||
SuperAbility.BlastMining.Rank=\uD3ED\uBC1C \uCC44\uAD74: [[YELLOW]]{0}/8\uB7AD\uD06C [[GRAY]]({1})
 | 
			
		||||
SuperAbility.BlastMining.Other.On=[[GREEN]]{0}[[DARK_GREEN]]\uB2D8\uC740 [[RED]]\uD3ED\uBC1C \uCC44\uAD74\uC744 \uC0AC\uC6A9\uD558\uC168\uC2B5\uB2C8\uB2E4!
 | 
			
		||||
 
 | 
			
		||||
@@ -330,7 +330,7 @@ SuperAbility.SuperBreaker.Refresh=[[GREEN]]Your [[YELLOW]]Super Breaker [[GREEN]
 | 
			
		||||
#Blast Mining
 | 
			
		||||
SuperAbility.BlastMining.Boom=[[GRAY]]**BOOM**
 | 
			
		||||
SuperAbility.BlastMining.Cooldown=
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} ore yield, -{1} debris yield, {2}x drops
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} ore yield, {1}x drops
 | 
			
		||||
SuperAbility.BlastMining.Other.On=[[GREEN]]{0}[[DARK_GREEN]] has used [[RED]]Blast Mining!
 | 
			
		||||
SuperAbility.BlastMining.Refresh=[[GREEN]]Your [[YELLOW]]Blast Mining [[GREEN]]ability is refreshed!
 | 
			
		||||
#REPAIR
 | 
			
		||||
 
 | 
			
		||||
@@ -186,11 +186,12 @@ SuperAbility.SuperBreaker.Refresh=[[GREEN]]Sua Habilidade [[YELLOW]]Super Quebra
 | 
			
		||||
Mining.Skillup=[[YELLOW]]Habilidade de Mineracao foi aumentada para {0}. Total ({1})
 | 
			
		||||
#Mineracao Explosiva
 | 
			
		||||
SuperAbility.BlastMining.Boom=[[GRAY]]**BOOM**
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} Rendimento de Minerios, -{1} Prejuizo de Detritos, {2}x drops
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} Rendimento de Minerios, {1}x drops
 | 
			
		||||
SuperAbility.BlastMining.Radius.Increase=[[RED]]Aumento no Raio de explosao: [[YELLOW]]+{0}
 | 
			
		||||
SuperAbility.BlastMining.Rank=[[RED]]Mineracao Explosiva: [[YELLOW]] Rank {0}/{1} [[GRAY]]({2})
 | 
			
		||||
SuperAbility.BlastMining.Other.On=[[GREEN]]{0}[[DARK_GREEN]] usou [[RED]]Mineracao Explosiva!
 | 
			
		||||
SuperAbility.BlastMining.Refresh=[[GREEN]]Sua Habilidade [[YELLOW]]Mineracao Explosiva [[GREEN]]foi refrescada!
 | 
			
		||||
 | 
			
		||||
#REPARAR
 | 
			
		||||
Repair.Effect.0=Reparar
 | 
			
		||||
Repair.Effect.1=Reparar Ferramentas & Armaduras
 | 
			
		||||
 
 | 
			
		||||
@@ -290,7 +290,7 @@ Mining.Skillup=\u0423\u0440\u043e\u0432\u0435\u043d\u044c \u043d\u0430\u0432\u04
 | 
			
		||||
#Blast Mining
 | 
			
		||||
SuperAbility.BlastMining.Boom=[[GRAY]]**\u0411\u0423\u041c**
 | 
			
		||||
SuperAbility.BlastMining.Cooldown=
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} \u0440\u0443\u0434\u044b, -{1} \u043c\u0443\u0441\u043e\u0440\u0430, {2}x \u0434\u0440\u043e\u043f
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} \u0440\u0443\u0434\u044b, {1}x \u0434\u0440\u043e\u043f
 | 
			
		||||
SuperAbility.BlastMining.Radius.Increase=\u0420\u0430\u0434\u0438\u0443\u0441 \u0412\u0437\u0440\u044b\u0432\u0430 \u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d: [[YELLOW]]+{0}
 | 
			
		||||
SuperAbility.BlastMining.Rank=\u041f\u043e\u0434\u0440\u044b\u0432\u043d\u0430\u044f \u0414\u043e\u0431\u044b\u0447\u0430: [[YELLOW]] \u0420\u0430\u043d\u0433 {0}/8 [[GRAY]]({1})
 | 
			
		||||
SuperAbility.BlastMining.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0443\u043c\u0435\u043d\u0438\u0435 [[RED]]\"\u041f\u043e\u0434\u0440\u044b\u0432\u043d\u0430\u044f \u0414\u043e\u0431\u044b\u0447\u0430\"!
 | 
			
		||||
 
 | 
			
		||||
@@ -159,7 +159,7 @@ SuperAbility.SuperBreaker.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u0e44\u0e14\u0e49
 | 
			
		||||
SuperAbility.SuperBreaker.Refresh=[[GREEN]]\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e32\u0e21\u0e23\u0e16\u0e17\u0e31\u0e01\u0e29\u0e30 [[YELLOW]]Super Breaker [[GREEN]]\u0e04\u0e39\u0e25\u0e14\u0e32\u0e27\u0e19\u0e4c\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e41\u0e25\u0e49\u0e27!
 | 
			
		||||
Mining.Skillup=\u0e17\u0e31\u0e01\u0e29\u0e30 Mining \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19 {0}. \u0e21\u0e35\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14 ({1})
 | 
			
		||||
SuperAbility.BlastMining.Boom=[[GRAY]]**BOOM**
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} \u0e1c\u0e25\u0e1c\u0e25\u0e34\u0e15\u0e41\u0e23\u0e48, -{1} \u0e1c\u0e25\u0e1c\u0e25\u0e34\u0e15\u0e40\u0e28\u0e29, {2}x \u0e14\u0e23\u0e2d\u0e1b
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} \u0e1c\u0e25\u0e1c\u0e25\u0e34\u0e15\u0e41\u0e23\u0e48, {1}x \u0e14\u0e23\u0e2d\u0e1b
 | 
			
		||||
SuperAbility.BlastMining.Radius.Increase=\u0e23\u0e31\u0e28\u0e21\u0e35\u0e02\u0e2d\u0e07\u0e23\u0e30\u0e40\u0e1a\u0e34\u0e14\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19: [[YELLOW]]+{0}
 | 
			
		||||
SuperAbility.BlastMining.Rank=\u0e17\u0e31\u0e01\u0e29\u0e30 Blast Mining: [[YELLOW]] \u0e23\u0e30\u0e14\u0e31\u0e1a {0}/8 [[GRAY]]({1})
 | 
			
		||||
SuperAbility.BlastMining.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u0e44\u0e14\u0e49\u0e43\u0e0a\u0e49\u0e17\u0e31\u0e01\u0e29\u0e30 [[RED]]Blast Mining!
 | 
			
		||||
 
 | 
			
		||||
@@ -330,7 +330,7 @@ SuperAbility.SuperBreaker.Refresh=[[GREEN]]\u4f60\u7684 [[YELLOW]]\u8d85\u7ea7\u
 | 
			
		||||
#Blast Mining
 | 
			
		||||
SuperAbility.BlastMining.Boom=[[GRAY]]**\u5623**
 | 
			
		||||
SuperAbility.BlastMining.Cooldown=
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} \u77ff\u7269\u91cf, -{1} \u788e\u7247\u91cf, {2}x \u6389\u843d
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} \u77ff\u7269\u91cf, {1}x \u6389\u843d
 | 
			
		||||
SuperAbility.BlastMining.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u4f7f\u7528\u4e86 [[RED]]\u7206\u7834\u5f00\u91c7!
 | 
			
		||||
SuperAbility.BlastMining.Refresh=[[GREEN]]\u4f60\u7684 [[YELLOW]]\u7206\u7834\u5f00\u91c7 [[GREEN]]\u6280\u80fd\u53ef\u4ee5\u4f7f\u7528\u4e86!
 | 
			
		||||
#REPAIR
 | 
			
		||||
 
 | 
			
		||||
@@ -165,7 +165,7 @@ SuperAbility.SuperBreaker.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u4f7f\u7528\u4e86
 | 
			
		||||
SuperAbility.SuperBreaker.Refresh=[[GREEN]]\u4f60\u7684[[YELLOW]] \u8d85\u7d1a\u788e\u77f3\u6a5f [[GREEN]]\u80fd\u529b\u5df2\u53ef\u518d\u6b21\u4f7f\u7528\uff01
 | 
			
		||||
Mining.Skillup=\u6316\u7926\u6280\u80fd\u4e0a\u5347\u4e86 {0}! \u7e3d\u7b49\u7d1a ({1})!
 | 
			
		||||
SuperAbility.BlastMining.Boom=[[GRAY]]**\u78b0!**
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} \u7926\u7269\u7522\u91cf, -{1}\u5783\u573e\u7522\u91cf, {2}x \u6389\u843d\u91cf
 | 
			
		||||
SuperAbility.BlastMining.Effect=+{0} \u7926\u7269\u7522\u91cf, {1}x \u6389\u843d\u91cf
 | 
			
		||||
SuperAbility.BlastMining.Radius.Increase=\u7206\u70b8\u534a\u5f91\u63d0\u5347: [[YELLOW]]+{0}
 | 
			
		||||
SuperAbility.BlastMining.Rank=\u6316\u7926\u7206\u767c: [[YELLOW]] \u6392\u540d {0}/8 [[GRAY]]({1})
 | 
			
		||||
SuperAbility.BlastMining.Other.On=[[GREEN]]{0}[[DARK_GREEN]] \u4f7f\u7528\u4e86 [[RED]]\u6316\u7926\u7206\u767c!
 | 
			
		||||
 
 | 
			
		||||
@@ -421,6 +421,9 @@ Skills:
 | 
			
		||||
###
 | 
			
		||||
Bonus_Drops:
 | 
			
		||||
    Herbalism:
 | 
			
		||||
        Bamboo_Sapling: true
 | 
			
		||||
        Crimson_Fungus: true
 | 
			
		||||
        Warped_Fungus: true
 | 
			
		||||
        Chorus_Fruit: true
 | 
			
		||||
        Chorus_Plant: true
 | 
			
		||||
        Beetroots: true
 | 
			
		||||
@@ -458,6 +461,10 @@ Bonus_Drops:
 | 
			
		||||
        Peony: true
 | 
			
		||||
        Lily_Of_The_Valley: true
 | 
			
		||||
    Mining:
 | 
			
		||||
        Warped_Nylium: true
 | 
			
		||||
        Crimson_Nylium: true
 | 
			
		||||
        Ancient_Debris: true
 | 
			
		||||
        Netherite_Scrap: true
 | 
			
		||||
        Andesite: true
 | 
			
		||||
        Diorite: true
 | 
			
		||||
        Granite: true
 | 
			
		||||
@@ -486,6 +493,11 @@ Bonus_Drops:
 | 
			
		||||
        Stone: true
 | 
			
		||||
        Cobblestone: true
 | 
			
		||||
    Woodcutting:
 | 
			
		||||
        Shroomlight: true
 | 
			
		||||
        Crimson_Stem: true
 | 
			
		||||
        Warped_Stem: true
 | 
			
		||||
        Crimson_Roots: true
 | 
			
		||||
        Warped_Roots: true
 | 
			
		||||
        Acacia_Wood: true
 | 
			
		||||
        Acacia_Log: true
 | 
			
		||||
        Birch_Wood: true
 | 
			
		||||
 
 | 
			
		||||
@@ -246,7 +246,13 @@ Experience_Values:
 | 
			
		||||
        Snow: 20
 | 
			
		||||
        Snow_Block: 40
 | 
			
		||||
        Soul_Sand: 40
 | 
			
		||||
        Soul_Soil: 40
 | 
			
		||||
    Woodcutting:
 | 
			
		||||
        Nether_Wart_Block: 1
 | 
			
		||||
        Warped_Wart_Block: 1
 | 
			
		||||
        Shroomlight: 100
 | 
			
		||||
        Crimson_Stem: 35
 | 
			
		||||
        Warped_Stem: 35
 | 
			
		||||
        Oak_Log: 70
 | 
			
		||||
        Spruce_Log: 80
 | 
			
		||||
        Birch_Log: 90
 | 
			
		||||
@@ -275,6 +281,13 @@ Experience_Values:
 | 
			
		||||
        Brown_Mushroom_Block: 70
 | 
			
		||||
        Mushroom_Stem: 80
 | 
			
		||||
    Herbalism:
 | 
			
		||||
        Crimson_Roots: 6
 | 
			
		||||
        Warped_Roots: 6
 | 
			
		||||
        Nether_Wart_Block: 3
 | 
			
		||||
        Warped_Wart_Block: 3
 | 
			
		||||
        Nether_Sprouts: 10
 | 
			
		||||
        Crimson_Fungus: 50
 | 
			
		||||
        Warped_Fungus: 50
 | 
			
		||||
        Bee_Nest: 200
 | 
			
		||||
        Sweet_Berry_Bush: 50
 | 
			
		||||
        Seagrass: 10
 | 
			
		||||
@@ -343,6 +356,8 @@ Experience_Values:
 | 
			
		||||
        Tall_Grass: 50
 | 
			
		||||
        Large_Fern: 50
 | 
			
		||||
        Vine: 10
 | 
			
		||||
        Weeping_Vines_Plant: 10
 | 
			
		||||
        Twisting_Vines_Plant: 10
 | 
			
		||||
        Lily_Pad: 100
 | 
			
		||||
        White_Tulip: 150
 | 
			
		||||
        Dandelion: 100
 | 
			
		||||
@@ -351,7 +366,11 @@ Experience_Values:
 | 
			
		||||
        Lily_Of_The_Valley: 150
 | 
			
		||||
        Wither_Rose: 500
 | 
			
		||||
    Mining:
 | 
			
		||||
        Warped_Nylium: 5
 | 
			
		||||
        Crimson_Nylium: 5
 | 
			
		||||
        Ancient_Debris: 7777
 | 
			
		||||
        Magma_Block: 30
 | 
			
		||||
        Basalt: 40
 | 
			
		||||
        Tube_Coral_Block: 75
 | 
			
		||||
        Brain_Coral_Block: 80
 | 
			
		||||
        Bubble_Coral_Block: 70
 | 
			
		||||
@@ -365,6 +384,7 @@ Experience_Values:
 | 
			
		||||
        End_Stone: 15
 | 
			
		||||
        Glowstone: 15
 | 
			
		||||
        Gold_Ore: 1300
 | 
			
		||||
        Nether_Gold_Ore: 1300
 | 
			
		||||
        Terracotta: 30
 | 
			
		||||
        Iron_Ore: 900
 | 
			
		||||
        Lapis_Ore: 800
 | 
			
		||||
@@ -420,6 +440,7 @@ Experience_Values:
 | 
			
		||||
        String: 1.8
 | 
			
		||||
        Other: 1.5
 | 
			
		||||
    Smelting:
 | 
			
		||||
        Ancient_Debris: 200
 | 
			
		||||
        Coal_Ore: 10
 | 
			
		||||
        Diamond_Ore: 75
 | 
			
		||||
        Emerald_Ore: 100
 | 
			
		||||
 
 | 
			
		||||
@@ -569,7 +569,7 @@ Excavation:
 | 
			
		||||
        XP: 3000
 | 
			
		||||
        Drop_Chance: 0.05
 | 
			
		||||
        Drop_Level: 75
 | 
			
		||||
        Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand]
 | 
			
		||||
        Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
 | 
			
		||||
    GUNPOWDER:
 | 
			
		||||
        Amount: 1
 | 
			
		||||
        XP: 30
 | 
			
		||||
@@ -659,19 +659,19 @@ Excavation:
 | 
			
		||||
        XP: 3000
 | 
			
		||||
        Drop_Chance: 0.05
 | 
			
		||||
        Drop_Level: 25
 | 
			
		||||
        Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand]
 | 
			
		||||
        Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
 | 
			
		||||
    MUSIC_DISC_CAT:
 | 
			
		||||
        Amount: 1
 | 
			
		||||
        XP: 3000
 | 
			
		||||
        Drop_Chance: 0.05
 | 
			
		||||
        Drop_Level: 25
 | 
			
		||||
        Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand]
 | 
			
		||||
        Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
 | 
			
		||||
    DIAMOND:
 | 
			
		||||
        Amount: 1
 | 
			
		||||
        XP: 1000
 | 
			
		||||
        Drop_Chance: 0.13
 | 
			
		||||
        Drop_Level: 35
 | 
			
		||||
        Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand]
 | 
			
		||||
        Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
 | 
			
		||||
    COCOA_BEANS:
 | 
			
		||||
        Amount: 1
 | 
			
		||||
        XP: 100
 | 
			
		||||
@@ -683,13 +683,13 @@ Excavation:
 | 
			
		||||
        XP: 100
 | 
			
		||||
        Drop_Chance: 0.5
 | 
			
		||||
        Drop_Level: 85
 | 
			
		||||
        Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Mycelium, Soul_Sand]
 | 
			
		||||
        Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Mycelium, Soul_Sand, Soul_Soil]
 | 
			
		||||
    NAME_TAG:
 | 
			
		||||
        Amount: 1
 | 
			
		||||
        XP: 3000
 | 
			
		||||
        Drop_Chance: 0.05
 | 
			
		||||
        Drop_Level: 25
 | 
			
		||||
        Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand]
 | 
			
		||||
        Drops_From: [Dirt, Coarse_Dirt, Podzol, Grass_Block, Sand, Red_Sand, Gravel, Clay, Mycelium, Soul_Sand, Soul_Soil]
 | 
			
		||||
#
 | 
			
		||||
#  Settings for Hylian Luck
 | 
			
		||||
#  If you are in retro mode, Drop_Level is multiplied by 10.
 | 
			
		||||
 
 | 
			
		||||
@@ -11,7 +11,7 @@
 | 
			
		||||
## This defaults to OTHER.
 | 
			
		||||
#
 | 
			
		||||
# ItemMaterialCategory: This is the type of the material of the item to be repaired, this is only important for permissions.
 | 
			
		||||
## Valid values are STRING, LEATHER, WOOD, STONE, IRON, GOLD, DIAMOND, and OTHER
 | 
			
		||||
## Valid values are STRING, LEATHER, WOOD, STONE, IRON, GOLD, DIAMOND, NETHER, and OTHER
 | 
			
		||||
## This defaults to OTHER.
 | 
			
		||||
#
 | 
			
		||||
# RepairMaterial: This is the material name of the item used to repair this repairable.
 | 
			
		||||
@@ -181,6 +181,39 @@ Repairables:
 | 
			
		||||
    DIAMOND_BOOTS:
 | 
			
		||||
        MinimumLevel: 0
 | 
			
		||||
        XpMultiplier: 6
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
    # Diamond repairables
 | 
			
		||||
    ###
 | 
			
		||||
    # Tools
 | 
			
		||||
    NETHERITE_SWORD:
 | 
			
		||||
        MinimumLevel: 0
 | 
			
		||||
        XpMultiplier: .6
 | 
			
		||||
    NETHERITE_SHOVEL:
 | 
			
		||||
        MinimumLevel: 0
 | 
			
		||||
        XpMultiplier: .4
 | 
			
		||||
    NETHERITE_PICKAXE:
 | 
			
		||||
        MinimumLevel: 0
 | 
			
		||||
        XpMultiplier: 1.1
 | 
			
		||||
    NETHERITE_AXE:
 | 
			
		||||
        MinimumLevel: 0
 | 
			
		||||
        XpMultiplier: 1.1
 | 
			
		||||
    NETHERITE_HOE:
 | 
			
		||||
        MinimumLevel: 0
 | 
			
		||||
        XpMultiplier: .75
 | 
			
		||||
    # Armor
 | 
			
		||||
    NETHERITE_HELMET:
 | 
			
		||||
        MinimumLevel: 0
 | 
			
		||||
        XpMultiplier: 7
 | 
			
		||||
    NETHERITE_CHESTPLATE:
 | 
			
		||||
        MinimumLevel: 0
 | 
			
		||||
        XpMultiplier: 7
 | 
			
		||||
    NETHERITE_LEGGINGS:
 | 
			
		||||
        MinimumLevel: 0
 | 
			
		||||
        XpMultiplier: 7
 | 
			
		||||
    NETHERITE_BOOTS:
 | 
			
		||||
        MinimumLevel: 0
 | 
			
		||||
        XpMultiplier: 7
 | 
			
		||||
    #
 | 
			
		||||
    # Leather repairables
 | 
			
		||||
    ###
 | 
			
		||||
 
 | 
			
		||||
@@ -10,8 +10,8 @@
 | 
			
		||||
## Valid values are ARMOR, TOOL, and OTHER.
 | 
			
		||||
## This defaults to OTHER.
 | 
			
		||||
#
 | 
			
		||||
# ItemMaterialCategory: This is the type of the material of the item to be salvaged, this is only important for permissions.
 | 
			
		||||
## Valid values are STRING, LEATHER, WOOD, STONE, IRON, GOLD, DIAMOND, and OTHER
 | 
			
		||||
# MaterialType: This is the type of the material of the item to be salvaged, this is only important for permissions.
 | 
			
		||||
## Valid values are STRING, LEATHER, WOOD, STONE, IRON, GOLD, DIAMOND, NETHER, and OTHER
 | 
			
		||||
## This defaults to OTHER.
 | 
			
		||||
#
 | 
			
		||||
# SalvageMaterial: This is the material name of the item used to salvage this item.
 | 
			
		||||
@@ -218,6 +218,44 @@ Salvageables:
 | 
			
		||||
        MinimumLevel: 50
 | 
			
		||||
        XpMultiplier: 6
 | 
			
		||||
        MaximumQuantity: 4
 | 
			
		||||
 | 
			
		||||
    NETHERITE_SWORD:
 | 
			
		||||
        MinimumLevel: 50
 | 
			
		||||
        XpMultiplier: .5
 | 
			
		||||
        MaximumQuantity: 2
 | 
			
		||||
    NETHERITE_SHOVEL:
 | 
			
		||||
        MinimumLevel: 50
 | 
			
		||||
        XpMultiplier: .3
 | 
			
		||||
        MaximumQuantity: 1
 | 
			
		||||
    NETHERITE_PICKAXE:
 | 
			
		||||
        MinimumLevel: 50
 | 
			
		||||
        XpMultiplier: 1
 | 
			
		||||
        MaximumQuantity: 3
 | 
			
		||||
    NETHERITE_AXE:
 | 
			
		||||
        MinimumLevel: 50
 | 
			
		||||
        XpMultiplier: 1
 | 
			
		||||
        MaximumQuantity: 3
 | 
			
		||||
    NETHERITE_HOE:
 | 
			
		||||
        MinimumLevel: 50
 | 
			
		||||
        XpMultiplier: .5
 | 
			
		||||
        MaximumQuantity: 2
 | 
			
		||||
    # Armor
 | 
			
		||||
    NETHERITE_HELMET:
 | 
			
		||||
        MinimumLevel: 50
 | 
			
		||||
        XpMultiplier: 6
 | 
			
		||||
        MaximumQuantity: 5
 | 
			
		||||
    NETHERITE_CHESTPLATE:
 | 
			
		||||
        MinimumLevel: 50
 | 
			
		||||
        XpMultiplier: 6
 | 
			
		||||
        MaximumQuantity: 8
 | 
			
		||||
    NETHERITE_LEGGINGS:
 | 
			
		||||
        MinimumLevel: 50
 | 
			
		||||
        XpMultiplier: 6
 | 
			
		||||
        MaximumQuantity: 7
 | 
			
		||||
    NETHERITE_BOOTS:
 | 
			
		||||
        MinimumLevel: 50
 | 
			
		||||
        XpMultiplier: 6
 | 
			
		||||
        MaximumQuantity: 4
 | 
			
		||||
    #
 | 
			
		||||
    # Leather salvageables
 | 
			
		||||
    ###
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user