Merge branch 'master' of github.com:mcMMO-Dev/mcmmo into configurable

This commit is contained in:
nossr50 2020-03-18 17:05:08 -07:00
commit 9a72af12b3
35 changed files with 988 additions and 341 deletions

View File

@ -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

View File

@ -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...");
}
}

View File

@ -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)));
}

View File

@ -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));

View File

@ -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;

View File

@ -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);
}
}

View File

@ -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();

View File

@ -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<Block> blockList) {
List<BlockState> ores = new ArrayList<>();
List<BlockState> 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<BlockState> ores = new ArrayList<BlockState>();
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<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);
//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);
}

View File

@ -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;

View File

@ -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());
}
/**

View File

@ -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;
}
}

View File

@ -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);*/
}
}
}

View File

@ -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.
*

View File

@ -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());
}
/**

View File

@ -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);

View File

@ -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!

View File

@ -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:

View File

@ -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

View File

@ -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!

View File

@ -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 !

View File

@ -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

View File

@ -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!

View File

@ -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

View File

@ -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!

View File

@ -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

View File

@ -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

View File

@ -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\"!

View File

@ -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!

View File

@ -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

View File

@ -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!

View File

@ -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

View File

@ -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

View File

@ -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.

View File

@ -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
###

View File

@ -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
###