diff --git a/Changelog.txt b/Changelog.txt index 1f42bd9e4..31fb70c33 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -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 diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/commands/admin/NBTToolsCommand.java b/mcmmo-core/src/main/java/com/gmail/nossr50/commands/admin/NBTToolsCommand.java index 4e36613f6..fc2ed0f2d 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/commands/admin/NBTToolsCommand.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/commands/admin/NBTToolsCommand.java @@ -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..."); } } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/commands/skills/MiningCommand.java b/mcmmo-core/src/main/java/com/gmail/nossr50/commands/skills/MiningCommand.java index 47f543bc4..9ed9763d5 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/commands/skills/MiningCommand.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/commands/skills/MiningCommand.java @@ -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))); } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/core/MaterialMapStore.java b/mcmmo-core/src/main/java/com/gmail/nossr50/core/MaterialMapStore.java index 3f723a04c..c48524f92 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/core/MaterialMapStore.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/core/MaterialMapStore.java @@ -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 foodItemWhiteList; private HashSet glassBlocks; - public MaterialMapStore() { + private HashSet netheriteArmor; + private HashSet netheriteTools; + private HashSet woodTools; + private HashSet stoneTools; + private HashSet leatherArmor; + private HashSet ironArmor; + private HashSet ironTools; + private HashSet stringTools; + private HashSet goldArmor; + private HashSet goldTools; + private HashSet chainmailArmor; + private HashSet diamondArmor; + private HashSet diamondTools; + private HashSet armors; + + private HashSet swords; + private HashSet axes; + private HashSet hoes; + private HashSet shovels; + private HashSet pickAxes; + private HashSet tridents; + private HashSet bows; + private HashSet tools; + + private HashSet enchantables; + + private HashSet ores; + + private HashMap 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 stringHashSet) { stringHashSet.add(string.toLowerCase(Locale.ENGLISH)); diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/ItemMaterialCategory.java b/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/ItemMaterialCategory.java index aebf30808..4809e3713 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/ItemMaterialCategory.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/datatypes/skills/ItemMaterialCategory.java @@ -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; diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/listeners/EntityListener.java b/mcmmo-core/src/main/java/com/gmail/nossr50/listeners/EntityListener.java index 12078c049..4ee55d22a 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/listeners/EntityListener.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/listeners/EntityListener.java @@ -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); } } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/runnables/skills/BleedTimerTask.java b/mcmmo-core/src/main/java/com/gmail/nossr50/runnables/skills/BleedTimerTask.java index 1ce9d0e17..12ad2ec13 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/runnables/skills/BleedTimerTask.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/runnables/skills/BleedTimerTask.java @@ -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(); diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java b/mcmmo-core/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java index 4f967d81f..add6595ef 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/skills/mining/MiningManager.java @@ -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 yield The % of blocks to drop + * @param event The {@link EntityExplodeEvent} */ - public void blastMiningDropProcessing(float yield, List blockList) { - List ores = new ArrayList<>(); - List debris = new ArrayList<>(); - int xp = 0; + //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 - float oreBonus = (float) (getOreBonus() / 100); - float debrisReduction = (float) (getDebrisReduction() / 100); - int dropMultiplier = getDropMultiplier(); + List ores = new ArrayList(); - 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); + List 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); + //TODO: Pretty sure something is fucked with debrisReduction stuff +// float debrisReduction = (float) (getDebrisReduction() / 100); + int dropMultiplier = getDropMultiplier(); + +// 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++) { + 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); } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java b/mcmmo-core/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java index ee070bcf3..7ea877e4e 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/skills/swords/SwordsManager.java @@ -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; diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/util/BlockTools.java b/mcmmo-core/src/main/java/com/gmail/nossr50/util/BlockTools.java index ffa71b655..3bcb67d63 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/util/BlockTools.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/util/BlockTools.java @@ -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()); } /** diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/util/ItemTools.java b/mcmmo-core/src/main/java/com/gmail/nossr50/util/ItemTools.java index 64398857e..c0ce138f0 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/util/ItemTools.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/util/ItemTools.java @@ -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; + return pluginRef.getMaterialMapStore().isDiamondArmor(item.getType().getKey().getKey()); + } - default: - return false; - } + 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; } } diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/util/MaterialUtils.java b/mcmmo-core/src/main/java/com/gmail/nossr50/util/MaterialUtils.java deleted file mode 100644 index eefd9cdce..000000000 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/util/MaterialUtils.java +++ /dev/null @@ -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);*/ - } - } -} diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/util/MiscTools.java b/mcmmo-core/src/main/java/com/gmail/nossr50/util/MiscTools.java index 564379715..f3b50e216 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/util/MiscTools.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/util/MiscTools.java @@ -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. * diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/util/skills/CombatTools.java b/mcmmo-core/src/main/java/com/gmail/nossr50/util/skills/CombatTools.java index d9fc2a098..38f7a91e7 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/util/skills/CombatTools.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/util/skills/CombatTools.java @@ -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()); } /** diff --git a/mcmmo-core/src/main/java/com/gmail/nossr50/util/skills/ParticleEffectUtils.java b/mcmmo-core/src/main/java/com/gmail/nossr50/util/skills/ParticleEffectUtils.java index caea0504d..11efa34e7 100644 --- a/mcmmo-core/src/main/java/com/gmail/nossr50/util/skills/ParticleEffectUtils.java +++ b/mcmmo-core/src/main/java/com/gmail/nossr50/util/skills/ParticleEffectUtils.java @@ -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); diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_cs_CZ.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_cs_CZ.properties index cf6c43f26..6f2071247 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_cs_CZ.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_cs_CZ.properties @@ -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! diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_de.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_de.properties index 8542dbfd3..d65193915 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_de.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_de.properties @@ -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: diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_en_US.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_en_US.properties index ae0bf6205..aa2c727f2 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_en_US.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_en_US.properties @@ -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 diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_es.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_es.properties index 054003c7c..28dd0da8c 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_es.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_es.properties @@ -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! diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_fr.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_fr.properties index 266156582..d405defb1 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_fr.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_fr.properties @@ -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 ! diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_hu_HU.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_hu_HU.properties index a6cbc7c2e..3140ff954 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_hu_HU.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_hu_HU.properties @@ -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 diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_it.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_it.properties index 991a67464..848e8b23f 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_it.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_it.properties @@ -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! diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_ja_JP.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_ja_JP.properties index 072b68a99..857a62602 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_ja_JP.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_ja_JP.properties @@ -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 diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_ko.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_ko.properties index f597e83b7..a50ccf8e3 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_ko.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_ko.properties @@ -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! diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_lt_LT.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_lt_LT.properties index f74c2188f..8dc2bc31c 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_lt_LT.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_lt_LT.properties @@ -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 diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_pt_BR.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_pt_BR.properties index a798112fc..150917d3b 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_pt_BR.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_pt_BR.properties @@ -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 diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_ru.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_ru.properties index 0448ae4bc..5d707d3f7 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_ru.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_ru.properties @@ -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\"! diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_th_TH.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_th_TH.properties index acc76850e..7f825c27c 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_th_TH.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_th_TH.properties @@ -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! diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_zh_CN.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_zh_CN.properties index 6786e19f2..c66c8bfbc 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_zh_CN.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_zh_CN.properties @@ -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 diff --git a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_zh_TW.properties b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_zh_TW.properties index f9d02d7c4..3d80914d7 100644 --- a/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_zh_TW.properties +++ b/mcmmo-core/src/main/resources/com/gmail/nossr50/locale/locale_zh_TW.properties @@ -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! diff --git a/mcmmo-core/src/main/resources/config.yml b/mcmmo-core/src/main/resources/config.yml index 973e2c8cc..6379aea52 100644 --- a/mcmmo-core/src/main/resources/config.yml +++ b/mcmmo-core/src/main/resources/config.yml @@ -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 diff --git a/mcmmo-core/src/main/resources/experience.yml b/mcmmo-core/src/main/resources/experience.yml index 88a77a3c1..33edddb9e 100644 --- a/mcmmo-core/src/main/resources/experience.yml +++ b/mcmmo-core/src/main/resources/experience.yml @@ -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 diff --git a/mcmmo-core/src/main/resources/fishing_treasures.yml b/mcmmo-core/src/main/resources/fishing_treasures.yml index 2e64ea16e..e2b0269d1 100644 --- a/mcmmo-core/src/main/resources/fishing_treasures.yml +++ b/mcmmo-core/src/main/resources/fishing_treasures.yml @@ -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. diff --git a/mcmmo-core/src/main/resources/repair.vanilla.yml b/mcmmo-core/src/main/resources/repair.vanilla.yml index 49eec21d7..357c1b6d1 100644 --- a/mcmmo-core/src/main/resources/repair.vanilla.yml +++ b/mcmmo-core/src/main/resources/repair.vanilla.yml @@ -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 ### diff --git a/mcmmo-core/src/main/resources/salvage.vanilla.yml b/mcmmo-core/src/main/resources/salvage.vanilla.yml index 15a5800d4..e583448c2 100644 --- a/mcmmo-core/src/main/resources/salvage.vanilla.yml +++ b/mcmmo-core/src/main/resources/salvage.vanilla.yml @@ -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 ###