mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2025-06-25 10:14:43 +02:00
Move fishing treasues to new file fishing_treasures.yml, replace Records rarity with Mythic, and allow for Enchanted_Book in the treasures list with new optional whitelist/blacklist parameters
read the changelog for information about this
This commit is contained in:
@ -0,0 +1,57 @@
|
||||
//package com.gmail.nossr50.commands.admin;
|
||||
//
|
||||
//import com.gmail.nossr50.config.treasure.FishingTreasureConfig;
|
||||
//import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
//import com.gmail.nossr50.datatypes.treasure.FishingTreasure;
|
||||
//import com.gmail.nossr50.datatypes.treasure.Rarity;
|
||||
//import com.gmail.nossr50.mcMMO;
|
||||
//import com.gmail.nossr50.skills.fishing.FishingManager;
|
||||
//import com.gmail.nossr50.util.player.UserManager;
|
||||
//import org.bukkit.Location;
|
||||
//import org.bukkit.command.Command;
|
||||
//import org.bukkit.command.CommandExecutor;
|
||||
//import org.bukkit.command.CommandSender;
|
||||
//import org.bukkit.entity.Player;
|
||||
//import org.jetbrains.annotations.NotNull;
|
||||
//
|
||||
//public class DropTreasureCommand implements CommandExecutor {
|
||||
// @Override
|
||||
// public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command, @NotNull String label, @NotNull String[] args) {
|
||||
// if(sender instanceof Player) {
|
||||
// if(!sender.isOp()) {
|
||||
// sender.sendMessage("This command is for Operators only");
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// Player player = (Player) sender;
|
||||
// Location location = player.getLocation();
|
||||
// McMMOPlayer mmoPlayer = UserManager.getPlayer(player);
|
||||
//
|
||||
// if(mmoPlayer == null) {
|
||||
// //TODO: Localize
|
||||
// player.sendMessage("Your player data is not loaded yet");
|
||||
// return false;
|
||||
// }
|
||||
//
|
||||
// if(args.length == 0) {
|
||||
// mcMMO.p.getLogger().info(player.toString() +" is dropping all mcMMO treasures via admin command at location "+location.toString());
|
||||
// for(Rarity rarity : FishingTreasureConfig.getInstance().fishingRewards.keySet()) {
|
||||
// for(FishingTreasure fishingTreasure : FishingTreasureConfig.getInstance().fishingRewards.get(rarity)) {
|
||||
// FishingManager fishingManager = mmoPlayer.getFishingManager();
|
||||
// }
|
||||
// }
|
||||
// //TODO: impl
|
||||
// } else {
|
||||
// String targetTreasure = args[1];
|
||||
//
|
||||
// //Drop all treasures matching the name
|
||||
// //TODO: impl
|
||||
// }
|
||||
//
|
||||
// return true;
|
||||
// } else {
|
||||
// sender.sendMessage("No console support for this command");
|
||||
// return false;
|
||||
// }
|
||||
// }
|
||||
//}
|
@ -29,7 +29,7 @@ public class FishingCommand extends SkillCommand {
|
||||
private String rareTreasure;
|
||||
private String epicTreasure;
|
||||
private String legendaryTreasure;
|
||||
private String recordTreasure;
|
||||
private String mythicTreasure;
|
||||
|
||||
private String magicChance;
|
||||
|
||||
@ -60,13 +60,13 @@ public class FishingCommand extends SkillCommand {
|
||||
rareTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.RARE) / 100.0);
|
||||
epicTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.EPIC) / 100.0);
|
||||
legendaryTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.LEGENDARY) / 100.0);
|
||||
recordTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.RECORD) / 100.0);
|
||||
mythicTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.MYTHIC) / 100.0);
|
||||
|
||||
// Magic hunter drop rates
|
||||
double totalEnchantChance = 0;
|
||||
|
||||
for (Rarity rarity : Rarity.values()) {
|
||||
if (rarity != Rarity.RECORD) {
|
||||
if (rarity != Rarity.MYTHIC) {
|
||||
totalEnchantChance += TreasureConfig.getInstance().getEnchantmentDropRate(lootTier, rarity);
|
||||
}
|
||||
}
|
||||
@ -145,7 +145,7 @@ public class FishingCommand extends SkillCommand {
|
||||
String.valueOf(rareTreasure),
|
||||
String.valueOf(epicTreasure),
|
||||
String.valueOf(legendaryTreasure),
|
||||
String.valueOf(recordTreasure)));
|
||||
String.valueOf(mythicTreasure)));
|
||||
}
|
||||
|
||||
return messages;
|
||||
|
368
src/main/java/com/gmail/nossr50/config/treasure/FishingTreasureConfig.java
Executable file
368
src/main/java/com/gmail/nossr50/config/treasure/FishingTreasureConfig.java
Executable file
@ -0,0 +1,368 @@
|
||||
package com.gmail.nossr50.config.treasure;
|
||||
|
||||
import com.gmail.nossr50.config.ConfigLoader;
|
||||
import com.gmail.nossr50.datatypes.treasure.*;
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import com.gmail.nossr50.util.EnchantmentUtils;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.PotionMeta;
|
||||
import org.bukkit.potion.PotionData;
|
||||
import org.bukkit.potion.PotionType;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
public class FishingTreasureConfig extends ConfigLoader {
|
||||
|
||||
public static final String FILENAME = "fishing_treasures.yml";
|
||||
private static FishingTreasureConfig instance;
|
||||
|
||||
public @NotNull HashMap<Rarity, List<FishingTreasure>> fishingRewards = new HashMap<>();
|
||||
public @NotNull HashMap<Rarity, List<EnchantmentTreasure>> fishingEnchantments = new HashMap<>();
|
||||
public @NotNull HashMap<EntityType, List<ShakeTreasure>> shakeMap = new HashMap<>();
|
||||
|
||||
private FishingTreasureConfig() {
|
||||
super(FILENAME);
|
||||
loadKeys();
|
||||
validate();
|
||||
}
|
||||
|
||||
public static FishingTreasureConfig getInstance() {
|
||||
if (instance == null) {
|
||||
instance = new FishingTreasureConfig();
|
||||
}
|
||||
|
||||
return instance;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected boolean validateKeys() {
|
||||
// Validate all the settings!
|
||||
List<String> reason = new ArrayList<>();
|
||||
for (String tier : config.getConfigurationSection("Enchantment_Drop_Rates").getKeys(false)) {
|
||||
double totalEnchantDropRate = 0;
|
||||
double totalItemDropRate = 0;
|
||||
|
||||
for (Rarity rarity : Rarity.values()) {
|
||||
double enchantDropRate = config.getDouble("Enchantment_Drop_Rates." + tier + "." + rarity.toString());
|
||||
double itemDropRate = config.getDouble("Item_Drop_Rates." + tier + "." + rarity.toString());
|
||||
|
||||
if ((enchantDropRate < 0.0 || enchantDropRate > 100.0)) {
|
||||
reason.add("The enchant drop rate for " + tier + " items that are " + rarity.toString() + "should be between 0.0 and 100.0!");
|
||||
}
|
||||
|
||||
if (itemDropRate < 0.0 || itemDropRate > 100.0) {
|
||||
reason.add("The item drop rate for " + tier + " items that are " + rarity.toString() + "should be between 0.0 and 100.0!");
|
||||
}
|
||||
|
||||
totalEnchantDropRate += enchantDropRate;
|
||||
totalItemDropRate += itemDropRate;
|
||||
}
|
||||
|
||||
if (totalEnchantDropRate < 0 || totalEnchantDropRate > 100.0) {
|
||||
reason.add("The total enchant drop rate for " + tier + " should be between 0.0 and 100.0!");
|
||||
}
|
||||
|
||||
if (totalItemDropRate < 0 || totalItemDropRate > 100.0) {
|
||||
reason.add("The total item drop rate for " + tier + " should be between 0.0 and 100.0!");
|
||||
}
|
||||
}
|
||||
|
||||
return noErrorsInConfig(reason);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void loadKeys() {
|
||||
if (config.getConfigurationSection("Treasures") != null) {
|
||||
backup();
|
||||
return;
|
||||
}
|
||||
|
||||
loadTreasures("Fishing");
|
||||
loadEnchantments();
|
||||
|
||||
for (EntityType entity : EntityType.values()) {
|
||||
if (entity.isAlive()) {
|
||||
loadTreasures("Shake." + entity.toString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void loadTreasures(String type) {
|
||||
boolean isFishing = type.equals("Fishing");
|
||||
boolean isShake = type.contains("Shake");
|
||||
|
||||
ConfigurationSection treasureSection = config.getConfigurationSection(type);
|
||||
|
||||
if (treasureSection == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Initialize fishing HashMap
|
||||
for (Rarity rarity : Rarity.values()) {
|
||||
if (!fishingRewards.containsKey(rarity)) {
|
||||
fishingRewards.put(rarity, (new ArrayList<>()));
|
||||
}
|
||||
}
|
||||
|
||||
for (String treasureName : treasureSection.getKeys(false)) {
|
||||
// Validate all the things!
|
||||
List<String> reason = new ArrayList<>();
|
||||
|
||||
String[] treasureInfo = treasureName.split("[|]");
|
||||
String materialName = treasureInfo[0];
|
||||
|
||||
/*
|
||||
* Material, Amount, and Data
|
||||
*/
|
||||
Material material;
|
||||
|
||||
if (materialName.contains("INVENTORY")) {
|
||||
// Use magic material BEDROCK to know that we're grabbing something from the inventory and not a normal treasure
|
||||
if (!shakeMap.containsKey(EntityType.PLAYER))
|
||||
shakeMap.put(EntityType.PLAYER, new ArrayList<>());
|
||||
shakeMap.get(EntityType.PLAYER).add(new ShakeTreasure(new ItemStack(Material.BEDROCK, 1, (byte) 0), 1, getInventoryStealDropChance(), getInventoryStealDropLevel()));
|
||||
continue;
|
||||
} else {
|
||||
material = Material.matchMaterial(materialName);
|
||||
}
|
||||
|
||||
int amount = config.getInt(type + "." + treasureName + ".Amount");
|
||||
short data = (treasureInfo.length == 2) ? Short.parseShort(treasureInfo[1]) : (short) config.getInt(type + "." + treasureName + ".Data");
|
||||
|
||||
if (material == null) {
|
||||
reason.add("Invalid material: " + materialName);
|
||||
}
|
||||
|
||||
if (amount <= 0) {
|
||||
amount = 1;
|
||||
}
|
||||
|
||||
if (material != null && material.isBlock() && (data > 127 || data < -128)) {
|
||||
reason.add("Data of " + treasureName + " is invalid! " + data);
|
||||
}
|
||||
|
||||
/*
|
||||
* XP, Drop Chance, and Drop Level
|
||||
*/
|
||||
|
||||
int xp = config.getInt(type + "." + treasureName + ".XP");
|
||||
double dropChance = config.getDouble(type + "." + treasureName + ".Drop_Chance");
|
||||
int dropLevel = config.getInt(type + "." + treasureName + ".Drop_Level");
|
||||
|
||||
if (xp < 0) {
|
||||
reason.add(treasureName + " has an invalid XP value: " + xp);
|
||||
}
|
||||
|
||||
if (dropChance < 0.0D) {
|
||||
reason.add(treasureName + " has an invalid Drop_Chance: " + dropChance);
|
||||
}
|
||||
|
||||
if (dropLevel < 0) {
|
||||
reason.add(treasureName + " has an invalid Drop_Level: " + dropLevel);
|
||||
}
|
||||
|
||||
/*
|
||||
* Specific Types
|
||||
*/
|
||||
Rarity rarity = null;
|
||||
|
||||
if (isFishing) {
|
||||
rarity = Rarity.getRarity(config.getString(type + "." + treasureName + ".Rarity"));
|
||||
|
||||
if (rarity == null) {
|
||||
reason.add("Invalid Rarity for item: " + treasureName);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Itemstack
|
||||
*/
|
||||
ItemStack item = null;
|
||||
|
||||
|
||||
String customName = null;
|
||||
|
||||
if(hasCustomName(type, treasureName)) {
|
||||
customName = config.getString(type + "." + treasureName + ".Custom_Name");
|
||||
}
|
||||
|
||||
if (materialName.contains("POTION")) {
|
||||
Material mat = Material.matchMaterial(materialName);
|
||||
if (mat == null) {
|
||||
reason.add("Potion format for Treasures.yml has changed");
|
||||
} else {
|
||||
item = new ItemStack(mat, amount, data);
|
||||
PotionMeta itemMeta = (PotionMeta) item.getItemMeta();
|
||||
|
||||
PotionType potionType = null;
|
||||
try {
|
||||
potionType = PotionType.valueOf(config.getString(type + "." + treasureName + ".PotionData.PotionType", "WATER"));
|
||||
} catch (IllegalArgumentException ex) {
|
||||
reason.add("Invalid Potion_Type: " + config.getString(type + "." + treasureName + ".PotionData.PotionType", "WATER"));
|
||||
}
|
||||
boolean extended = config.getBoolean(type + "." + treasureName + ".PotionData.Extended", false);
|
||||
boolean upgraded = config.getBoolean(type + "." + treasureName + ".PotionData.Upgraded", false);
|
||||
itemMeta.setBasePotionData(new PotionData(potionType, extended, upgraded));
|
||||
|
||||
if (customName != null) {
|
||||
itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', customName));
|
||||
}
|
||||
|
||||
if (config.contains(type + "." + treasureName + ".Lore")) {
|
||||
List<String> lore = new ArrayList<>();
|
||||
for (String s : config.getStringList(type + "." + treasureName + ".Lore")) {
|
||||
lore.add(ChatColor.translateAlternateColorCodes('&', s));
|
||||
}
|
||||
itemMeta.setLore(lore);
|
||||
}
|
||||
item.setItemMeta(itemMeta);
|
||||
}
|
||||
} else if (material != null) {
|
||||
if(material == Material.ENCHANTED_BOOK) {
|
||||
//If any whitelisted enchants exist we use whitelist-based matching
|
||||
item = new ItemStack(material, 1);
|
||||
ItemMeta itemMeta = item.getItemMeta();
|
||||
|
||||
List<String> allowedEnchantsList = config.getStringList(type + "." + treasureName + ".Enchantments_Whitelist");
|
||||
List<String> disallowedEnchantsList = config.getStringList(type + "." + treasureName + ".Enchantments_Blacklist");
|
||||
|
||||
Set<Enchantment> blackListedEnchants = new HashSet<>();
|
||||
Set<Enchantment> whiteListedEnchants = new HashSet<>();
|
||||
|
||||
matchAndFillSet(disallowedEnchantsList, blackListedEnchants);
|
||||
matchAndFillSet(allowedEnchantsList, whiteListedEnchants);
|
||||
|
||||
if (customName != null && itemMeta != null) {
|
||||
itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', customName));
|
||||
item.setItemMeta(itemMeta);
|
||||
}
|
||||
|
||||
FishingTreasureBook fishingTreasureBook = new FishingTreasureBook(item, xp, blackListedEnchants, whiteListedEnchants);
|
||||
//TODO: Add book support for shake
|
||||
continue; //The code in this whole file is a disaster, ignore this hacky solution :P
|
||||
} else {
|
||||
item = new ItemStack(material, amount, data);
|
||||
|
||||
if (customName != null) {
|
||||
ItemMeta itemMeta = item.getItemMeta();
|
||||
itemMeta.setDisplayName(ChatColor.translateAlternateColorCodes('&', customName));
|
||||
item.setItemMeta(itemMeta);
|
||||
}
|
||||
|
||||
if (config.contains(type + "." + treasureName + ".Lore")) {
|
||||
ItemMeta itemMeta = item.getItemMeta();
|
||||
List<String> lore = new ArrayList<>();
|
||||
for (String s : config.getStringList(type + "." + treasureName + ".Lore")) {
|
||||
lore.add(ChatColor.translateAlternateColorCodes('&', s));
|
||||
}
|
||||
itemMeta.setLore(lore);
|
||||
item.setItemMeta(itemMeta);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
if (noErrorsInConfig(reason)) {
|
||||
if (isFishing) {
|
||||
fishingRewards.get(rarity).add(new FishingTreasure(item, xp));
|
||||
} else if (isShake) {
|
||||
ShakeTreasure shakeTreasure = new ShakeTreasure(item, xp, dropChance, dropLevel);
|
||||
|
||||
EntityType entityType = EntityType.valueOf(type.substring(6));
|
||||
if (!shakeMap.containsKey(entityType))
|
||||
shakeMap.put(entityType, new ArrayList<>());
|
||||
shakeMap.get(entityType).add(shakeTreasure);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private boolean hasCustomName(@NotNull String type, @NotNull String treasureName) {
|
||||
return config.contains(type + "." + treasureName + ".Custom_Name");
|
||||
}
|
||||
|
||||
/**
|
||||
* Matches enchantments on a list (user provided string) to known enchantments in the Spigot API
|
||||
* Any matches are added to the passed set
|
||||
* @param enchantListStr the users string list of enchantments
|
||||
* @param permissiveList the permissive list of enchantments
|
||||
*/
|
||||
private void matchAndFillSet(List<String> enchantListStr, Set<Enchantment> permissiveList) {
|
||||
if(enchantListStr.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
for(String str : enchantListStr) {
|
||||
boolean foundMatch = false;
|
||||
for(Enchantment enchantment : Enchantment.values()) {
|
||||
if(enchantment.getKey().getKey().equalsIgnoreCase(str)) {
|
||||
permissiveList.add(enchantment);
|
||||
foundMatch = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!foundMatch) {
|
||||
mcMMO.p.getLogger().info("[Fishing Treasure Init] Could not find any enchantments which matched the user defined enchantment named: "+str);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void loadEnchantments() {
|
||||
for (Rarity rarity : Rarity.values()) {
|
||||
if (!fishingEnchantments.containsKey(rarity)) {
|
||||
fishingEnchantments.put(rarity, (new ArrayList<>()));
|
||||
}
|
||||
|
||||
ConfigurationSection enchantmentSection = config.getConfigurationSection("Enchantments_Rarity." + rarity.toString());
|
||||
|
||||
if (enchantmentSection == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (String enchantmentName : enchantmentSection.getKeys(false)) {
|
||||
int level = config.getInt("Enchantments_Rarity." + rarity.toString() + "." + enchantmentName);
|
||||
Enchantment enchantment = EnchantmentUtils.getByName(enchantmentName);
|
||||
|
||||
if (enchantment == null) {
|
||||
plugin.getLogger().warning("Skipping invalid enchantment in " + FILENAME + ": " + enchantmentName);
|
||||
continue;
|
||||
}
|
||||
|
||||
fishingEnchantments.get(rarity).add(new EnchantmentTreasure(enchantment, level));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean getInventoryStealEnabled() {
|
||||
return config.contains("Shake.PLAYER.INVENTORY");
|
||||
}
|
||||
|
||||
public boolean getInventoryStealStacks() {
|
||||
return config.getBoolean("Shake.PLAYER.INVENTORY.Whole_Stacks");
|
||||
}
|
||||
|
||||
public double getInventoryStealDropChance() {
|
||||
return config.getDouble("Shake.PLAYER.INVENTORY.Drop_Chance");
|
||||
}
|
||||
|
||||
public int getInventoryStealDropLevel() {
|
||||
return config.getInt("Shake.PLAYER.INVENTORY.Drop_Level");
|
||||
}
|
||||
|
||||
public double getItemDropRate(int tier, Rarity rarity) {
|
||||
return config.getDouble("Item_Drop_Rates.Tier_" + tier + "." + rarity.toString());
|
||||
}
|
||||
|
||||
public double getEnchantmentDropRate(int tier, Rarity rarity) {
|
||||
return config.getDouble("Enchantment_Drop_Rates.Tier_" + tier + "." + rarity.toString());
|
||||
}
|
||||
}
|
@ -1,14 +1,14 @@
|
||||
package com.gmail.nossr50.config.treasure;
|
||||
|
||||
import com.gmail.nossr50.config.ConfigLoader;
|
||||
import com.gmail.nossr50.datatypes.treasure.*;
|
||||
import com.gmail.nossr50.util.EnchantmentUtils;
|
||||
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
|
||||
import com.gmail.nossr50.datatypes.treasure.HylianTreasure;
|
||||
import com.gmail.nossr50.datatypes.treasure.Rarity;
|
||||
import com.gmail.nossr50.util.text.StringUtils;
|
||||
import org.bukkit.ChatColor;
|
||||
import org.bukkit.Material;
|
||||
import org.bukkit.Tag;
|
||||
import org.bukkit.configuration.ConfigurationSection;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.entity.EntityType;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
@ -22,18 +22,14 @@ import java.util.List;
|
||||
|
||||
public class TreasureConfig extends ConfigLoader {
|
||||
|
||||
public static final String FILENAME = "treasures.yml";
|
||||
private static TreasureConfig instance;
|
||||
|
||||
public HashMap<String, List<ExcavationTreasure>> excavationMap = new HashMap<>();
|
||||
|
||||
public HashMap<EntityType, List<ShakeTreasure>> shakeMap = new HashMap<>();
|
||||
public HashMap<String, List<HylianTreasure>> hylianMap = new HashMap<>();
|
||||
|
||||
public HashMap<Rarity, List<FishingTreasure>> fishingRewards = new HashMap<>();
|
||||
public HashMap<Rarity, List<EnchantmentTreasure>> fishingEnchantments = new HashMap<>();
|
||||
|
||||
private TreasureConfig() {
|
||||
super("treasures.yml");
|
||||
super(FILENAME);
|
||||
loadKeys();
|
||||
validate();
|
||||
}
|
||||
@ -51,29 +47,18 @@ public class TreasureConfig extends ConfigLoader {
|
||||
// Validate all the settings!
|
||||
List<String> reason = new ArrayList<>();
|
||||
for (String tier : config.getConfigurationSection("Enchantment_Drop_Rates").getKeys(false)) {
|
||||
double totalEnchantDropRate = 0;
|
||||
double totalItemDropRate = 0;
|
||||
|
||||
for (Rarity rarity : Rarity.values()) {
|
||||
double enchantDropRate = config.getDouble("Enchantment_Drop_Rates." + tier + "." + rarity.toString());
|
||||
double itemDropRate = config.getDouble("Item_Drop_Rates." + tier + "." + rarity.toString());
|
||||
|
||||
if ((enchantDropRate < 0.0 || enchantDropRate > 100.0) && rarity != Rarity.RECORD) {
|
||||
reason.add("The enchant drop rate for " + tier + " items that are " + rarity.toString() + "should be between 0.0 and 100.0!");
|
||||
}
|
||||
|
||||
if (itemDropRate < 0.0 || itemDropRate > 100.0) {
|
||||
reason.add("The item drop rate for " + tier + " items that are " + rarity.toString() + "should be between 0.0 and 100.0!");
|
||||
}
|
||||
|
||||
totalEnchantDropRate += enchantDropRate;
|
||||
totalItemDropRate += itemDropRate;
|
||||
}
|
||||
|
||||
if (totalEnchantDropRate < 0 || totalEnchantDropRate > 100.0) {
|
||||
reason.add("The total enchant drop rate for " + tier + " should be between 0.0 and 100.0!");
|
||||
}
|
||||
|
||||
if (totalItemDropRate < 0 || totalItemDropRate > 100.0) {
|
||||
reason.add("The total item drop rate for " + tier + " should be between 0.0 and 100.0!");
|
||||
}
|
||||
@ -92,7 +77,6 @@ public class TreasureConfig extends ConfigLoader {
|
||||
loadTreasures("Fishing");
|
||||
loadTreasures("Excavation");
|
||||
loadTreasures("Hylian_Luck");
|
||||
loadEnchantments();
|
||||
|
||||
for (EntityType entity : EntityType.values()) {
|
||||
if (entity.isAlive()) {
|
||||
@ -102,8 +86,6 @@ public class TreasureConfig extends ConfigLoader {
|
||||
}
|
||||
|
||||
private void loadTreasures(String type) {
|
||||
boolean isFishing = type.equals("Fishing");
|
||||
boolean isShake = type.contains("Shake");
|
||||
boolean isExcavation = type.equals("Excavation");
|
||||
boolean isHylian = type.equals("Hylian_Luck");
|
||||
|
||||
@ -113,13 +95,6 @@ public class TreasureConfig extends ConfigLoader {
|
||||
return;
|
||||
}
|
||||
|
||||
// Initialize fishing HashMap
|
||||
for (Rarity rarity : Rarity.values()) {
|
||||
if (!fishingRewards.containsKey(rarity)) {
|
||||
fishingRewards.put(rarity, (new ArrayList<>()));
|
||||
}
|
||||
}
|
||||
|
||||
for (String treasureName : treasureSection.getKeys(false)) {
|
||||
// Validate all the things!
|
||||
List<String> reason = new ArrayList<>();
|
||||
@ -131,16 +106,7 @@ public class TreasureConfig extends ConfigLoader {
|
||||
* Material, Amount, and Data
|
||||
*/
|
||||
Material material;
|
||||
|
||||
if (materialName.contains("INVENTORY")) {
|
||||
// Use magic material BEDROCK to know that we're grabbing something from the inventory and not a normal treasure
|
||||
if (!shakeMap.containsKey(EntityType.PLAYER))
|
||||
shakeMap.put(EntityType.PLAYER, new ArrayList<>());
|
||||
shakeMap.get(EntityType.PLAYER).add(new ShakeTreasure(new ItemStack(Material.BEDROCK, 1, (byte) 0), 1, getInventoryStealDropChance(), getInventoryStealDropLevel()));
|
||||
continue;
|
||||
} else {
|
||||
material = Material.matchMaterial(materialName);
|
||||
}
|
||||
material = Material.matchMaterial(materialName);
|
||||
|
||||
int amount = config.getInt(type + "." + treasureName + ".Amount");
|
||||
short data = (treasureInfo.length == 2) ? Short.parseShort(treasureInfo[1]) : (short) config.getInt(type + "." + treasureName + ".Data");
|
||||
@ -177,19 +143,6 @@ public class TreasureConfig extends ConfigLoader {
|
||||
reason.add(treasureName + " has an invalid Drop_Level: " + dropLevel);
|
||||
}
|
||||
|
||||
/*
|
||||
* Specific Types
|
||||
*/
|
||||
Rarity rarity = null;
|
||||
|
||||
if (isFishing) {
|
||||
rarity = Rarity.getRarity(config.getString(type + "." + treasureName + ".Rarity"));
|
||||
|
||||
if (rarity == null) {
|
||||
reason.add("Invalid Rarity for item: " + treasureName);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Itemstack
|
||||
*/
|
||||
@ -198,7 +151,7 @@ public class TreasureConfig extends ConfigLoader {
|
||||
if (materialName.contains("POTION")) {
|
||||
Material mat = Material.matchMaterial(materialName);
|
||||
if (mat == null) {
|
||||
reason.add("Potion format for Treasures.yml has changed");
|
||||
reason.add("Potion format for " + FILENAME + " has changed");
|
||||
} else {
|
||||
item = new ItemStack(mat, amount, data);
|
||||
PotionMeta itemMeta = (PotionMeta) item.getItemMeta();
|
||||
@ -247,16 +200,7 @@ public class TreasureConfig extends ConfigLoader {
|
||||
}
|
||||
|
||||
if (noErrorsInConfig(reason)) {
|
||||
if (isFishing) {
|
||||
fishingRewards.get(rarity).add(new FishingTreasure(item, xp));
|
||||
} else if (isShake) {
|
||||
ShakeTreasure shakeTreasure = new ShakeTreasure(item, xp, dropChance, dropLevel);
|
||||
|
||||
EntityType entityType = EntityType.valueOf(type.substring(6));
|
||||
if (!shakeMap.containsKey(entityType))
|
||||
shakeMap.put(entityType, new ArrayList<>());
|
||||
shakeMap.get(entityType).add(shakeTreasure);
|
||||
} else if (isExcavation) {
|
||||
if (isExcavation) {
|
||||
ExcavationTreasure excavationTreasure = new ExcavationTreasure(item, xp, dropChance, dropLevel);
|
||||
List<String> dropList = config.getStringList(type + "." + treasureName + ".Drops_From");
|
||||
|
||||
@ -309,36 +253,6 @@ public class TreasureConfig extends ConfigLoader {
|
||||
hylianMap.get(dropper).add(treasure);
|
||||
}
|
||||
|
||||
private void loadEnchantments() {
|
||||
for (Rarity rarity : Rarity.values()) {
|
||||
if (rarity == Rarity.RECORD) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!fishingEnchantments.containsKey(rarity)) {
|
||||
fishingEnchantments.put(rarity, (new ArrayList<>()));
|
||||
}
|
||||
|
||||
ConfigurationSection enchantmentSection = config.getConfigurationSection("Enchantments_Rarity." + rarity.toString());
|
||||
|
||||
if (enchantmentSection == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
for (String enchantmentName : enchantmentSection.getKeys(false)) {
|
||||
int level = config.getInt("Enchantments_Rarity." + rarity.toString() + "." + enchantmentName);
|
||||
Enchantment enchantment = EnchantmentUtils.getByName(enchantmentName);
|
||||
|
||||
if (enchantment == null) {
|
||||
plugin.getLogger().warning("Skipping invalid enchantment in treasures.yml: " + enchantmentName);
|
||||
continue;
|
||||
}
|
||||
|
||||
fishingEnchantments.get(rarity).add(new EnchantmentTreasure(enchantment, level));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public boolean getInventoryStealEnabled() {
|
||||
return config.contains("Shake.PLAYER.INVENTORY");
|
||||
}
|
||||
|
@ -56,7 +56,6 @@ import com.gmail.nossr50.util.sounds.SoundManager;
|
||||
import com.gmail.nossr50.util.sounds.SoundType;
|
||||
import net.kyori.adventure.identity.Identified;
|
||||
import net.kyori.adventure.identity.Identity;
|
||||
import org.apache.commons.lang.Validate;
|
||||
import org.bukkit.GameMode;
|
||||
import org.bukkit.Location;
|
||||
import org.bukkit.block.Block;
|
||||
|
@ -0,0 +1,44 @@
|
||||
package com.gmail.nossr50.datatypes.treasure;
|
||||
|
||||
import com.google.common.base.Objects;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class EnchantmentWrapper {
|
||||
private final @NotNull Enchantment enchantment;
|
||||
private final int enchantmentLevel;
|
||||
|
||||
public EnchantmentWrapper(@NotNull Enchantment enchantment, int enchantmentLevel) {
|
||||
this.enchantment = enchantment;
|
||||
this.enchantmentLevel = enchantmentLevel;
|
||||
}
|
||||
|
||||
public @NotNull Enchantment getEnchantment() {
|
||||
return enchantment;
|
||||
}
|
||||
|
||||
public int getEnchantmentLevel() {
|
||||
return enchantmentLevel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "EnchantmentWrapper{" +
|
||||
"enchantment=" + enchantment +
|
||||
", enchantmentLevel=" + enchantmentLevel +
|
||||
'}';
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
if (this == o) return true;
|
||||
if (o == null || getClass() != o.getClass()) return false;
|
||||
EnchantmentWrapper that = (EnchantmentWrapper) o;
|
||||
return enchantmentLevel == that.enchantmentLevel && Objects.equal(enchantment, that.enchantment);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hashCode(enchantment, enchantmentLevel);
|
||||
}
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
package com.gmail.nossr50.datatypes.treasure;
|
||||
|
||||
import com.gmail.nossr50.mcMMO;
|
||||
import org.bukkit.enchantments.Enchantment;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class FishingTreasureBook extends FishingTreasure {
|
||||
private final @Nullable Set<Enchantment> blackListedEnchantments;
|
||||
private final @Nullable Set<Enchantment> whiteListedEnchantments;
|
||||
private final @NotNull List<EnchantmentWrapper> legalEnchantments; //TODO: Make immutable
|
||||
|
||||
public FishingTreasureBook(@NotNull ItemStack enchantedBook, int xp, @Nullable Set<Enchantment> blackListedEnchantments, @Nullable Set<Enchantment> whiteListedEnchantments) {
|
||||
super(enchantedBook, xp);
|
||||
|
||||
this.blackListedEnchantments = blackListedEnchantments;
|
||||
this.whiteListedEnchantments = whiteListedEnchantments;
|
||||
this.legalEnchantments = new ArrayList<>();
|
||||
|
||||
initLegalEnchantments();
|
||||
}
|
||||
|
||||
private void initLegalEnchantments() {
|
||||
mcMMO.p.getLogger().info("Registering enchantments for Fishing Book...");
|
||||
|
||||
for(Enchantment enchantment : Enchantment.values()) {
|
||||
if(isEnchantAllowed(enchantment)) {
|
||||
addAllLegalEnchants(enchantment);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Get all the enchantments which can drop for this book
|
||||
* This list can be empty, but should in practice never be empty...
|
||||
*
|
||||
* @return all the enchantments that can drop for this book
|
||||
*/
|
||||
public @NotNull List<EnchantmentWrapper> getLegalEnchantments() {
|
||||
return legalEnchantments;
|
||||
}
|
||||
|
||||
private @Nullable Set<Enchantment> getBlacklistedEnchantments() {
|
||||
return blackListedEnchantments;
|
||||
}
|
||||
|
||||
private @Nullable Set<Enchantment> getWhitelistedEnchantments() {
|
||||
return whiteListedEnchantments;
|
||||
}
|
||||
|
||||
private void addAllLegalEnchants(@NotNull Enchantment enchantment) {
|
||||
int legalEnchantCap = enchantment.getMaxLevel();
|
||||
|
||||
for(int i = 0; i < legalEnchantCap; i++) {
|
||||
int enchantLevel = i+1;
|
||||
EnchantmentWrapper enchantmentWrapper = new EnchantmentWrapper(enchantment, enchantLevel);
|
||||
legalEnchantments.add(enchantmentWrapper);
|
||||
mcMMO.p.getLogger().info("Fishing treasure book enchantment added: " + enchantmentWrapper);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isEnchantAllowed(@NotNull Enchantment enchantment) {
|
||||
if(whiteListedEnchantments != null && !whiteListedEnchantments.isEmpty()) {
|
||||
return whiteListedEnchantments.contains(enchantment);
|
||||
} else if(blackListedEnchantments != null && !blackListedEnchantments.isEmpty()) {
|
||||
return !blackListedEnchantments.contains(enchantment);
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
@ -1,14 +1,16 @@
|
||||
package com.gmail.nossr50.datatypes.treasure;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public enum Rarity {
|
||||
RECORD,
|
||||
MYTHIC,
|
||||
LEGENDARY,
|
||||
EPIC,
|
||||
RARE,
|
||||
UNCOMMON,
|
||||
COMMON;
|
||||
|
||||
public static Rarity getRarity(String string) {
|
||||
public static @NotNull Rarity getRarity(@NotNull String string) {
|
||||
try {
|
||||
return valueOf(string);
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ import com.gmail.nossr50.config.mods.ToolConfigManager;
|
||||
import com.gmail.nossr50.config.skills.alchemy.PotionConfig;
|
||||
import com.gmail.nossr50.config.skills.repair.RepairConfigManager;
|
||||
import com.gmail.nossr50.config.skills.salvage.SalvageConfigManager;
|
||||
import com.gmail.nossr50.config.treasure.FishingTreasureConfig;
|
||||
import com.gmail.nossr50.config.treasure.TreasureConfig;
|
||||
import com.gmail.nossr50.database.DatabaseManager;
|
||||
import com.gmail.nossr50.database.DatabaseManagerFactory;
|
||||
@ -517,6 +518,7 @@ public class mcMMO extends JavaPlugin {
|
||||
private void loadConfigFiles() {
|
||||
// Force the loading of config files
|
||||
TreasureConfig.getInstance();
|
||||
FishingTreasureConfig.getInstance();
|
||||
HiddenConfig.getInstance();
|
||||
AdvancedConfig.getInstance();
|
||||
PotionConfig.getInstance();
|
||||
|
@ -1,6 +1,6 @@
|
||||
package com.gmail.nossr50.skills.fishing;
|
||||
|
||||
import com.gmail.nossr50.config.treasure.TreasureConfig;
|
||||
import com.gmail.nossr50.config.treasure.FishingTreasureConfig;
|
||||
import com.gmail.nossr50.datatypes.treasure.ShakeTreasure;
|
||||
import com.gmail.nossr50.util.Misc;
|
||||
import com.gmail.nossr50.util.adapter.BiomeAdapter;
|
||||
@ -31,8 +31,8 @@ public final class Fishing {
|
||||
* @return possibleDrops List of ItemStack that can be dropped
|
||||
*/
|
||||
protected static List<ShakeTreasure> findPossibleDrops(LivingEntity target) {
|
||||
if (TreasureConfig.getInstance().shakeMap.containsKey(target.getType()))
|
||||
return TreasureConfig.getInstance().shakeMap.get(target.getType());
|
||||
if (FishingTreasureConfig.getInstance().shakeMap.containsKey(target.getType()))
|
||||
return FishingTreasureConfig.getInstance().shakeMap.get(target.getType());
|
||||
|
||||
return null;
|
||||
}
|
||||
|
@ -4,16 +4,14 @@ import com.gmail.nossr50.api.ItemSpawnReason;
|
||||
import com.gmail.nossr50.config.AdvancedConfig;
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.config.treasure.FishingTreasureConfig;
|
||||
import com.gmail.nossr50.config.treasure.TreasureConfig;
|
||||
import com.gmail.nossr50.datatypes.experience.XPGainReason;
|
||||
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||
import com.gmail.nossr50.datatypes.treasure.EnchantmentTreasure;
|
||||
import com.gmail.nossr50.datatypes.treasure.FishingTreasure;
|
||||
import com.gmail.nossr50.datatypes.treasure.Rarity;
|
||||
import com.gmail.nossr50.datatypes.treasure.ShakeTreasure;
|
||||
import com.gmail.nossr50.datatypes.treasure.*;
|
||||
import com.gmail.nossr50.events.skills.fishing.McMMOPlayerFishingTreasureEvent;
|
||||
import com.gmail.nossr50.events.skills.fishing.McMMOPlayerShakeEvent;
|
||||
import com.gmail.nossr50.locale.LocaleLoader;
|
||||
@ -40,10 +38,12 @@ import org.bukkit.entity.*;
|
||||
import org.bukkit.event.entity.EntityDamageEvent;
|
||||
import org.bukkit.inventory.ItemStack;
|
||||
import org.bukkit.inventory.PlayerInventory;
|
||||
import org.bukkit.inventory.meta.ItemMeta;
|
||||
import org.bukkit.inventory.meta.SkullMeta;
|
||||
import org.bukkit.util.BoundingBox;
|
||||
import org.bukkit.util.Vector;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@ -370,9 +370,7 @@ public class FishingManager extends SkillManager {
|
||||
return AdvancedConfig.getInstance().getFishingBoatReductionMaxWaitTicks();
|
||||
}
|
||||
|
||||
|
||||
public boolean isMagicHunterEnabled()
|
||||
{
|
||||
public boolean isMagicHunterEnabled() {
|
||||
return RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.FISHING_MAGIC_HUNTER)
|
||||
&& RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.FISHING_TREASURE_HUNTER)
|
||||
&& Permissions.isSubSkillEnabled(getPlayer(), SubSkillType.FISHING_TREASURE_HUNTER);
|
||||
@ -383,12 +381,14 @@ public class FishingManager extends SkillManager {
|
||||
*
|
||||
* @param fishingCatch The {@link Item} initially caught
|
||||
*/
|
||||
public void handleFishing(Item fishingCatch) {
|
||||
public void handleFishing(@NotNull Item fishingCatch) {
|
||||
this.fishingCatch = fishingCatch;
|
||||
int fishXp = ExperienceConfig.getInstance().getXp(PrimarySkillType.FISHING, fishingCatch.getItemStack().getType());
|
||||
int treasureXp = 0;
|
||||
ItemStack treasureDrop = null;
|
||||
Player player = getPlayer();
|
||||
FishingTreasure treasure = null;
|
||||
boolean fishingSucceeds = false;
|
||||
|
||||
if (Config.getInstance().getFishingDropsEnabled() && Permissions.isSubSkillEnabled(player, SubSkillType.FISHING_TREASURE_HUNTER)) {
|
||||
treasure = getFishingTreasure();
|
||||
@ -396,49 +396,92 @@ public class FishingManager extends SkillManager {
|
||||
}
|
||||
|
||||
if (treasure != null) {
|
||||
ItemStack treasureDrop = treasure.getDrop().clone(); // Not cloning is bad, m'kay?
|
||||
Map<Enchantment, Integer> enchants = new HashMap<>();
|
||||
if(treasure instanceof FishingTreasureBook) {
|
||||
treasureDrop = createEnchantBook((FishingTreasureBook) treasure);
|
||||
} else {
|
||||
treasureDrop = treasure.getDrop().clone(); // Not cloning is bad, m'kay?
|
||||
|
||||
if (isMagicHunterEnabled()
|
||||
&& ItemUtils.isEnchantable(treasureDrop)) {
|
||||
enchants = handleMagicHunter(treasureDrop);
|
||||
}
|
||||
Map<Enchantment, Integer> enchants = new HashMap<>();
|
||||
McMMOPlayerFishingTreasureEvent event;
|
||||
|
||||
McMMOPlayerFishingTreasureEvent event = EventUtils.callFishingTreasureEvent(player, treasureDrop, treasure.getXp(), enchants);
|
||||
/*
|
||||
* Books get some special treatment
|
||||
*/
|
||||
if(treasure instanceof FishingTreasureBook) {
|
||||
//Skip the magic hunter stuff
|
||||
if(treasureDrop.getItemMeta() != null) {
|
||||
enchants.putAll(treasureDrop.getItemMeta().getEnchants());
|
||||
}
|
||||
|
||||
event = EventUtils.callFishingTreasureEvent(player, treasureDrop, treasure.getXp(), enchants);
|
||||
} else {
|
||||
if (isMagicHunterEnabled() && ItemUtils.isEnchantable(treasureDrop)) {
|
||||
enchants = processMagicHunter(treasureDrop);
|
||||
}
|
||||
|
||||
event = EventUtils.callFishingTreasureEvent(player, treasureDrop, treasure.getXp(), enchants);
|
||||
}
|
||||
|
||||
if (!event.isCancelled()) {
|
||||
treasureDrop = event.getTreasure();
|
||||
treasureXp = event.getXp();
|
||||
}
|
||||
else {
|
||||
|
||||
// Drop the original catch at the feet of the player and set the treasure as the real catch
|
||||
if (treasureDrop != null) {
|
||||
fishingSucceeds = true;
|
||||
boolean enchanted = false;
|
||||
|
||||
if(treasure instanceof FishingTreasureBook) {
|
||||
enchanted = true;
|
||||
} else if (!enchants.isEmpty()) {
|
||||
treasureDrop.addUnsafeEnchantments(enchants);
|
||||
enchanted = true;
|
||||
}
|
||||
|
||||
if (enchanted) {
|
||||
NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE, "Fishing.Ability.TH.MagicFound");
|
||||
}
|
||||
|
||||
}
|
||||
} else {
|
||||
treasureDrop = null;
|
||||
treasureXp = 0;
|
||||
}
|
||||
}
|
||||
|
||||
// Drop the original catch at the feet of the player and set the treasure as the real catch
|
||||
if (treasureDrop != null) {
|
||||
boolean enchanted = false;
|
||||
if(fishingSucceeds) {
|
||||
fishingCatch.setItemStack(treasureDrop);
|
||||
|
||||
if (!enchants.isEmpty()) {
|
||||
treasureDrop.addUnsafeEnchantments(enchants);
|
||||
enchanted = true;
|
||||
}
|
||||
|
||||
if (enchanted) {
|
||||
NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE, "Fishing.Ability.TH.MagicFound");
|
||||
}
|
||||
|
||||
if (Config.getInstance().getFishingExtraFish()) {
|
||||
Misc.spawnItem(player.getEyeLocation(), fishingCatch.getItemStack(), ItemSpawnReason.FISHING_EXTRA_FISH);
|
||||
}
|
||||
|
||||
fishingCatch.setItemStack(treasureDrop);
|
||||
if (Config.getInstance().getFishingExtraFish()) {
|
||||
Misc.spawnItem(player.getEyeLocation(), fishingCatch.getItemStack(), ItemSpawnReason.FISHING_EXTRA_FISH);
|
||||
}
|
||||
}
|
||||
|
||||
applyXpGain(fishXp + treasureXp, XPGainReason.PVE);
|
||||
}
|
||||
|
||||
|
||||
private @NotNull ItemStack createEnchantBook(@NotNull FishingTreasureBook fishingTreasureBook) {
|
||||
ItemStack itemStack = fishingTreasureBook.getDrop().clone();
|
||||
EnchantmentWrapper enchantmentWrapper = getRandomEnchantment(fishingTreasureBook.getLegalEnchantments());
|
||||
ItemMeta itemMeta = itemStack.getItemMeta();
|
||||
|
||||
if(itemMeta == null)
|
||||
return itemStack;
|
||||
|
||||
itemMeta.addEnchant(enchantmentWrapper.getEnchantment(), enchantmentWrapper.getEnchantmentLevel(), ExperienceConfig.getInstance().allowUnsafeEnchantments());
|
||||
itemStack.setItemMeta(itemMeta);
|
||||
return itemStack;
|
||||
}
|
||||
|
||||
private @NotNull EnchantmentWrapper getRandomEnchantment(@NotNull List<EnchantmentWrapper> enchantmentWrappers) {
|
||||
Collections.shuffle(enchantmentWrappers, Misc.getRandom());
|
||||
|
||||
int randomIndex = Misc.getRandom().nextInt(enchantmentWrappers.size());
|
||||
return enchantmentWrappers.get(randomIndex+1);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle the vanilla XP boost for Fishing
|
||||
*
|
||||
@ -548,7 +591,7 @@ public class FishingManager extends SkillManager {
|
||||
*
|
||||
* @return The {@link FishingTreasure} found, or null if no treasure was found.
|
||||
*/
|
||||
private FishingTreasure getFishingTreasure() {
|
||||
private @Nullable FishingTreasure getFishingTreasure() {
|
||||
double diceRoll = Misc.getRandom().nextDouble() * 100;
|
||||
int luck;
|
||||
|
||||
@ -569,12 +612,8 @@ public class FishingManager extends SkillManager {
|
||||
double dropRate = TreasureConfig.getInstance().getItemDropRate(getLootTier(), rarity);
|
||||
|
||||
if (diceRoll <= dropRate) {
|
||||
/*if (rarity == Rarity.TRAP) {
|
||||
handleTraps();
|
||||
break;
|
||||
}*/
|
||||
|
||||
List<FishingTreasure> fishingTreasures = TreasureConfig.getInstance().fishingRewards.get(rarity);
|
||||
List<FishingTreasure> fishingTreasures = FishingTreasureConfig.getInstance().fishingRewards.get(rarity);
|
||||
|
||||
if (fishingTreasures.isEmpty()) {
|
||||
return null;
|
||||
@ -612,19 +651,14 @@ public class FishingManager extends SkillManager {
|
||||
* Process the Magic Hunter ability
|
||||
*
|
||||
* @param treasureDrop The {@link ItemStack} to enchant
|
||||
*
|
||||
* @return true if the item has been enchanted
|
||||
*/
|
||||
private Map<Enchantment, Integer> handleMagicHunter(ItemStack treasureDrop) {
|
||||
private Map<Enchantment, Integer> processMagicHunter(@NotNull ItemStack treasureDrop) {
|
||||
Map<Enchantment, Integer> enchants = new HashMap<>();
|
||||
List<EnchantmentTreasure> fishingEnchantments = null;
|
||||
|
||||
double diceRoll = Misc.getRandom().nextDouble() * 100;
|
||||
|
||||
for (Rarity rarity : Rarity.values()) {
|
||||
if (rarity == Rarity.RECORD) {
|
||||
continue;
|
||||
}
|
||||
|
||||
double dropRate = TreasureConfig.getInstance().getEnchantmentDropRate(getLootTier(), rarity);
|
||||
|
||||
@ -634,7 +668,8 @@ public class FishingManager extends SkillManager {
|
||||
diceRoll = dropRate + 1;
|
||||
continue;
|
||||
}
|
||||
fishingEnchantments = TreasureConfig.getInstance().fishingEnchantments.get(rarity);
|
||||
|
||||
fishingEnchantments = FishingTreasureConfig.getInstance().fishingEnchantments.get(rarity);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -1,7 +1,6 @@
|
||||
package com.gmail.nossr50.util;
|
||||
|
||||
import com.gmail.nossr50.config.Config;
|
||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
||||
import com.gmail.nossr50.datatypes.experience.XPGainReason;
|
||||
import com.gmail.nossr50.datatypes.experience.XPGainSource;
|
||||
import com.gmail.nossr50.datatypes.party.Party;
|
||||
|
@ -142,6 +142,15 @@ public final class CommandRegistrationManager {
|
||||
command.setExecutor(new McgodCommand());
|
||||
}
|
||||
|
||||
// private static void registerDropTreasureCommand() {
|
||||
// PluginCommand command = mcMMO.p.getCommand("mmodroptreasures");
|
||||
// command.setDescription(LocaleLoader.getString("Commands.Description.droptreasures"));
|
||||
// command.setPermission("mcmmo.commands.droptreasures");
|
||||
// command.setPermissionMessage(permissionsMessage);
|
||||
// command.setUsage(LocaleLoader.getString("Commands.Usage.0", "mcgod"));
|
||||
// command.setExecutor(new DropTreasureCommand());
|
||||
// }
|
||||
|
||||
private static void registerMmoInfoCommand() {
|
||||
PluginCommand command = mcMMO.p.getCommand("mmoinfo");
|
||||
command.setDescription(LocaleLoader.getString("Commands.Description.mmoinfo"));
|
||||
|
828
src/main/resources/fishing_treasures.yml
Normal file
828
src/main/resources/fishing_treasures.yml
Normal file
@ -0,0 +1,828 @@
|
||||
#
|
||||
# Settings for Fishing Treasures / Shake Treasures
|
||||
# Last updated on 12/28/2020
|
||||
###
|
||||
Fishing:
|
||||
LEATHER_BOOTS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
LEATHER_HELMET:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
LEATHER_LEGGINGS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
LEATHER_CHESTPLATE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
WOODEN_SWORD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
WOODEN_SHOVEL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
WOODEN_PICKAXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
WOODEN_AXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
WOODEN_HOE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
LAPIS_LAZULI:
|
||||
Amount: 20
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
STONE_SWORD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
STONE_SHOVEL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
STONE_PICKAXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
STONE_AXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
STONE_HOE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_SWORD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_SHOVEL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_PICKAXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_AXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_HOE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_BOOTS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_HELMET:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_LEGGINGS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_CHESTPLATE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
IRON_INGOT:
|
||||
Amount: 5
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLD_INGOT:
|
||||
Amount: 5
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
IRON_SWORD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
IRON_SHOVEL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
IRON_PICKAXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
IRON_AXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
IRON_HOE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
BOW:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
ENDER_PEARL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
BLAZE_ROD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
IRON_BOOTS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
IRON_HELMET:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
IRON_LEGGINGS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
IRON_CHESTPLATE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
GHAST_TEAR:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
DIAMOND:
|
||||
Amount: 5
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
DIAMOND_SWORD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_SHOVEL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_PICKAXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_AXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_HOE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_BOOTS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_HELMET:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_LEGGINGS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_CHESTPLATE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
MUSIC_DISC_BLOCKS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
MUSIC_DISC_CHIRP:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
MUSIC_DISC_FAR:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
MUSIC_DISC_MALL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
MUSIC_DISC_MELLOHI:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
MUSIC_DISC_STAL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
MUSIC_DISC_STRAD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
MUSIC_DISC_WARD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
MUSIC_DISC_11:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
MUSIC_DISC_WAIT:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
MUSIC_DISC_13:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: MYTHIC
|
||||
NETHERITE_SWORD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: MYTHIC
|
||||
NETHERITE_SHOVEL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: MYTHIC
|
||||
NETHERITE_PICKAXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: MYTHIC
|
||||
NETHERITE_AXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: MYTHIC
|
||||
NETHERITE_HOE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: MYTHIC
|
||||
NETHERITE_BOOTS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: MYTHIC
|
||||
NETHERITE_HELMET:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: MYTHIC
|
||||
NETHERITE_LEGGINGS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: MYTHIC
|
||||
NETHERITE_CHESTPLATE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: MYTHIC
|
||||
ENCHANTED_BOOK:
|
||||
Amount: 1
|
||||
XP: 400
|
||||
Rarity: MYTHIC
|
||||
Enchantments_Whitelist:
|
||||
- Fortune
|
||||
- Protection
|
||||
NETHERITE_SCRAP:
|
||||
Amount: 1
|
||||
XP: 400
|
||||
Rarity: MYTHIC
|
||||
#
|
||||
# Fishing drop rates
|
||||
###
|
||||
Item_Drop_Rates:
|
||||
Tier_1:
|
||||
TRAP: 7.68
|
||||
COMMON: 7.50
|
||||
UNCOMMON: 1.25
|
||||
RARE: 0.25
|
||||
EPIC: 0.10
|
||||
LEGENDARY: 0.01
|
||||
MYTHIC: 0.01
|
||||
Tier_2:
|
||||
TRAP: 2.50
|
||||
COMMON: 6.50
|
||||
UNCOMMON: 1.75
|
||||
RARE: 0.75
|
||||
EPIC: 0.50
|
||||
LEGENDARY: 0.05
|
||||
MYTHIC: 0.01
|
||||
Tier_3:
|
||||
TRAP: 1.50
|
||||
COMMON: 3.50
|
||||
UNCOMMON: 2.75
|
||||
RARE: 1.25
|
||||
EPIC: 1.00
|
||||
LEGENDARY: 0.10
|
||||
MYTHIC: 0.01
|
||||
Tier_4:
|
||||
TRAP: 1.00
|
||||
COMMON: 2.00
|
||||
UNCOMMON: 3.50
|
||||
RARE: 2.25
|
||||
EPIC: 1.50
|
||||
LEGENDARY: 1.00
|
||||
MYTHIC: 0.01
|
||||
Tier_5:
|
||||
TRAP: 0.25
|
||||
COMMON: 1.50
|
||||
UNCOMMON: 3.75
|
||||
RARE: 2.50
|
||||
EPIC: 2.00
|
||||
LEGENDARY: 1.00
|
||||
MYTHIC: 0.01
|
||||
Tier_6:
|
||||
TRAP: 0.10
|
||||
COMMON: 1.00
|
||||
UNCOMMON: 3.25
|
||||
RARE: 3.75
|
||||
EPIC: 2.50
|
||||
LEGENDARY: 1.50
|
||||
MYTHIC: 0.05
|
||||
Tier_7:
|
||||
TRAP: 0.05
|
||||
COMMON: 0.25
|
||||
UNCOMMON: 2.75
|
||||
RARE: 4.00
|
||||
EPIC: 5.00
|
||||
LEGENDARY: 2.50
|
||||
MYTHIC: 0.10
|
||||
Tier_8:
|
||||
TRAP: 0.01
|
||||
COMMON: 0.10
|
||||
UNCOMMON: 1.50
|
||||
RARE: 6.00
|
||||
EPIC: 7.50
|
||||
LEGENDARY: 5.00
|
||||
MYTHIC: 0.25
|
||||
#
|
||||
# Fishing enchantment drop rates
|
||||
###
|
||||
Enchantments_Rarity:
|
||||
COMMON:
|
||||
EFFICIENCY: 1
|
||||
UNBREAKING: 1
|
||||
FORTUNE: 1
|
||||
PROTECTION: 1
|
||||
FIRE_PROTECTION: 1
|
||||
FEATHER_FALLING: 1
|
||||
BLAST_PROTECTION: 1
|
||||
PROJECTILE_PROTECTION: 1
|
||||
RESPIRATION: 1
|
||||
THORNS: 1
|
||||
SHARPNESS: 1
|
||||
SMITE: 1
|
||||
BANE_OF_ARTHROPODS: 1
|
||||
POWER: 1
|
||||
UNCOMMON:
|
||||
EFFICIENCY: 2
|
||||
PROTECTION: 2
|
||||
FIRE_PROTECTION: 2
|
||||
FEATHER_FALLING: 2
|
||||
BLAST_PROTECTION: 2
|
||||
PROJECTILE_PROTECTION: 2
|
||||
SHARPNESS: 2
|
||||
SMITE: 2
|
||||
BANE_OF_ARTHROPODS: 2
|
||||
KNOCKBACK: 1
|
||||
LOOTING: 1
|
||||
POWER: 2
|
||||
PUNCH: 1
|
||||
RARE:
|
||||
EFFICIENCY: 3
|
||||
UNBREAKING: 2
|
||||
PROTECTION: 3
|
||||
FIRE_PROTECTION: 3
|
||||
FEATHER_FALLING: 3
|
||||
BLAST_PROTECTION: 3
|
||||
PROJECTILE_PROTECTION: 3
|
||||
RESPIRATION: 2
|
||||
SHARPNESS: 3
|
||||
SMITE: 3
|
||||
BANE_OF_ARTHROPODS: 3
|
||||
FIRE_ASPECT: 1
|
||||
LOOTING: 2
|
||||
POWER: 3
|
||||
EPIC:
|
||||
EFFICIENCY: 4
|
||||
FORTUNE: 2
|
||||
AQUA_AFFINITY: 1
|
||||
THORNS: 2
|
||||
SHARPNESS: 4
|
||||
SMITE: 4
|
||||
BANE_OF_ARTHROPODS: 4
|
||||
POWER: 4
|
||||
FLAME: 1
|
||||
LEGENDARY:
|
||||
EFFICIENCY: 5
|
||||
UNBREAKING: 3
|
||||
FORTUNE: 3
|
||||
PROTECTION: 4
|
||||
FIRE_PROTECTION: 4
|
||||
FEATHER_FALLING: 4
|
||||
BLAST_PROTECTION: 4
|
||||
PROJECTILE_PROTECTION: 4
|
||||
RESPIRATION: 3
|
||||
AQUA_AFFINITY: 1
|
||||
THORNS: 3
|
||||
SHARPNESS: 5
|
||||
SMITE: 5
|
||||
BANE_OF_ARTHROPODS: 5
|
||||
KNOCKBACK: 2
|
||||
FIRE_ASPECT: 2
|
||||
LOOTING: 3
|
||||
SILK_TOUCH: 1
|
||||
POWER: 5
|
||||
PUNCH: 2
|
||||
INFINITY: 1
|
||||
Enchantment_Drop_Rates:
|
||||
Tier_1:
|
||||
COMMON: 5.00
|
||||
UNCOMMON: 1.00
|
||||
RARE: 0.10
|
||||
EPIC: 0.01
|
||||
LEGENDARY: 0.01
|
||||
MYTHIC: 0.01
|
||||
Tier_2:
|
||||
COMMON: 7.50
|
||||
UNCOMMON: 1.00
|
||||
RARE: 0.10
|
||||
EPIC: 0.01
|
||||
LEGENDARY: 0.01
|
||||
MYTHIC: 0.01
|
||||
Tier_3:
|
||||
COMMON: 7.50
|
||||
UNCOMMON: 2.50
|
||||
RARE: 0.25
|
||||
EPIC: 0.10
|
||||
LEGENDARY: 0.01
|
||||
MYTHIC: 0.01
|
||||
Tier_4:
|
||||
COMMON: 10.0
|
||||
UNCOMMON: 2.75
|
||||
RARE: 0.50
|
||||
EPIC: 0.10
|
||||
LEGENDARY: 0.05
|
||||
MYTHIC: 0.05
|
||||
Tier_5:
|
||||
COMMON: 10.0
|
||||
UNCOMMON: 4.00
|
||||
RARE: 0.75
|
||||
EPIC: 0.25
|
||||
LEGENDARY: 0.10
|
||||
MYTHIC: 0.10
|
||||
Tier_6:
|
||||
COMMON: 9.50
|
||||
UNCOMMON: 5.50
|
||||
RARE: 1.75
|
||||
EPIC: 0.50
|
||||
LEGENDARY: 0.25
|
||||
MYTHIC: 0.25
|
||||
Tier_7:
|
||||
COMMON: 8.50
|
||||
UNCOMMON: 7.50
|
||||
RARE: 2.75
|
||||
EPIC: 0.75
|
||||
LEGENDARY: 0.50
|
||||
MYTHIC: 0.50
|
||||
Tier_8:
|
||||
COMMON: 7.50
|
||||
UNCOMMON: 10.0
|
||||
RARE: 5.25
|
||||
EPIC: 1.50
|
||||
LEGENDARY: 0.75
|
||||
MYTHIC: 0.75
|
||||
#
|
||||
# Settings for Shake
|
||||
# If you are in retro mode, Drop_Level is multiplied by 10.
|
||||
###
|
||||
Shake:
|
||||
BLAZE:
|
||||
BLAZE_ROD:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
CAVE_SPIDER:
|
||||
SPIDER_EYE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
STRING:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
COBWEB:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
POTION|0|POISON:
|
||||
PotionData:
|
||||
PotionType: POISON
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
CHICKEN:
|
||||
FEATHER:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 33.3
|
||||
Drop_Level: 0
|
||||
CHICKEN:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 33.3
|
||||
Drop_Level: 0
|
||||
EGG:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 33.3
|
||||
Drop_Level: 0
|
||||
COW:
|
||||
MILK_BUCKET:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 2.0
|
||||
Drop_Level: 0
|
||||
LEATHER:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
BEEF:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
CREEPER:
|
||||
CREEPER_HEAD:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
GUNPOWDER:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 99.0
|
||||
Drop_Level: 0
|
||||
ENDERMAN:
|
||||
ENDER_PEARL:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
GHAST:
|
||||
GUNPOWDER:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
GHAST_TEAR:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
HORSE:
|
||||
LEATHER:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 99.0
|
||||
Drop_Level: 0
|
||||
SADDLE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
IRON_GOLEM:
|
||||
PUMPKIN:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 3.0
|
||||
Drop_Level: 0
|
||||
IRON_INGOT:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 12.0
|
||||
Drop_Level: 0
|
||||
POPPY:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 85.0
|
||||
Drop_Level: 0
|
||||
MAGMA_CUBE:
|
||||
MAGMA_CREAM:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
MUSHROOM_COW:
|
||||
MILK_BUCKET:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 5.0
|
||||
Drop_Level: 0
|
||||
MUSHROOM_STEW:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 5.0
|
||||
Drop_Level: 0
|
||||
LEATHER:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 30.0
|
||||
Drop_Level: 0
|
||||
BEEF:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 30.0
|
||||
Drop_Level: 0
|
||||
RED_MUSHROOM:
|
||||
Amount: 2
|
||||
XP: 0
|
||||
Drop_Chance: 30.0
|
||||
Drop_Level: 0
|
||||
PIG:
|
||||
PORKCHOP:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
PIG_ZOMBIE:
|
||||
ROTTEN_FLESH:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
GOLD_NUGGET:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
PLAYER:
|
||||
SKELETON_SKULL:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 0.0
|
||||
Drop_Level: 0
|
||||
INVENTORY:
|
||||
Whole_Stacks: false
|
||||
Drop_Chance: 0.0
|
||||
Drop_Level: 0
|
||||
SHEEP:
|
||||
WHITE_WOOL:
|
||||
Amount: 3
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
SHULKER:
|
||||
SHULKER_SHELL:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 25.0
|
||||
Drop_Level: 0
|
||||
PURPUR_BLOCK:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 75.0
|
||||
Drop_Level: 0
|
||||
SKELETON:
|
||||
SKELETON_SKULL:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 2.0
|
||||
Drop_Level: 0
|
||||
BONE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
ARROW:
|
||||
Amount: 2
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
SLIME:
|
||||
SLIME_BALL:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
SPIDER:
|
||||
SPIDER_EYE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
STRING:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
SNOWMAN:
|
||||
PUMPKIN:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 3.0
|
||||
Drop_Level: 0
|
||||
SNOWBALL:
|
||||
Amount: 2
|
||||
XP: 0
|
||||
Drop_Chance: 97.0
|
||||
Drop_Level: 0
|
||||
SQUID:
|
||||
INK_SAC:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
WITCH:
|
||||
SPLASH_POTION|0|INSTANT_HEAL:
|
||||
PotionData:
|
||||
PotionType: INSTANT_HEAL
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
SPLASH_POTION|0|FIRE_RESISTANCE:
|
||||
PotionData:
|
||||
PotionType: FIRE_RESISTANCE
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
SPLASH_POTION|0|SPEED:
|
||||
PotionData:
|
||||
PotionType: SPEED
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
GLASS_BOTTLE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 7.0
|
||||
Drop_Level: 0
|
||||
GLOWSTONE_DUST:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 15.0
|
||||
Drop_Level: 0
|
||||
GUNPOWDER:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 15.0
|
||||
Drop_Level: 0
|
||||
REDSTONE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 15.0
|
||||
Drop_Level: 0
|
||||
SPIDER_EYE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 15.0
|
||||
Drop_Level: 0
|
||||
STICK:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 15.0
|
||||
Drop_Level: 0
|
||||
SUGAR:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 15.0
|
||||
Drop_Level: 0
|
||||
WITHER_SKELETON:
|
||||
WITHER_SKELETON_SKULL:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 2.0
|
||||
Drop_Level: 0
|
||||
BONE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
COAL:
|
||||
Amount: 2
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
ZOMBIE:
|
||||
ZOMBIE_HEAD:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 2.0
|
||||
Drop_Level: 0
|
||||
ROTTEN_FLESH:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 98.0
|
||||
Drop_Level: 0
|
@ -380,7 +380,7 @@ Fishing.SubSkill.Shake.Stat = Rei\u00DFen Chance
|
||||
Fishing.SubSkill.TreasureHunter.Description = Angle verschiedene Objekte
|
||||
Fishing.SubSkill.TreasureHunter.Name = Schatz J\u00E4ger
|
||||
Fishing.SubSkill.TreasureHunter.Stat = Schatz J\u00E4ger Rang: &a{0}&3/&a{1}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra = Drop Rate: &7\u00DCblich: &e{0} &aUn\u00FCblich: &e{1}\r\n&9Selten: &e{2} &dEpisch: &e{3} &6Legend\u00E4r: &e{4} &bSchallplatte: &e{5}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra = Drop Rate: &7\u00DCblich: &e{0} &aUn\u00FCblich: &e{1}\r\n&9Selten: &e{2} &dEpisch: &e{3} &6Legend\u00E4r: &e{4} &bMythic: &e{5}
|
||||
|
||||
Guides.Acrobatics.Section.0 = &3\u00DCber Akrobatik:\n&eAkrobatik ist die Kunst sich anmutig fortzubewegen.\n&eFall- und Kampfschaden werden reduziert\n\n&3XP GAIN:\n&eErfahrung sammelst du indem du in K\u00E4mpfen\n&eausweichst oder St\u00FCrze aus gro\u00DFen H\u00F6hen \u00FCberlebst.
|
||||
Guides.Acrobatics.Section.1 = &3Wie funktioniert Abrollen?\n&eAb und zu rollst du beim Fallen ab und der Fallschaden wird\n&ereduziert. Wenn du den Schleichen Knopf w\u00E4hrend dem Fallen\n&eh\u00E4ltst, verdoppelt sich die Chance abzurollen.\n&eIn dem Fall rollst du anmutig ab.\n&eAnmutige Rollen sind wie normale Rollen, nur dass\n&esie \u00F6fter passieren und damit mehr Schutz vor St\u00FCrzen\n&eliefern.
|
||||
|
@ -241,7 +241,7 @@ Fishing.Ability.Locked.2=LOCKED UNTIL {0}+ SKILL (MASTER ANGLER)
|
||||
Fishing.SubSkill.TreasureHunter.Name=Treasure Hunter
|
||||
Fishing.SubSkill.TreasureHunter.Description=Fish up misc. objects
|
||||
Fishing.SubSkill.TreasureHunter.Stat=Treasure Hunter Rank: &a{0}&3/&a{1}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=Drop Rate: &7Common: &e{0} &aUncommon: &e{1}\n&9Rare: &e{2} &dEpic: &e{3} &6Legendary: &e{4} &bRecord: &e{5}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=Drop Rate: &7Common: &e{0} &aUncommon: &e{1}\n&9Rare: &e{2} &dEpic: &e{3} &6Legendary: &e{4} &bMythic: &e{5}
|
||||
Fishing.SubSkill.MagicHunter.Name=Magic Hunter
|
||||
Fishing.SubSkill.MagicHunter.Description=Find Enchanted Items
|
||||
Fishing.SubSkill.MagicHunter.Stat=Magic Hunter Chance
|
||||
|
@ -240,7 +240,7 @@ Fishing.Ability.Locked.2=Bloqu\u00e9 jusqu\'\u00e0 {0}+ niveau(x) (Ma\u00eetre P
|
||||
Fishing.SubSkill.TreasureHunter.Name=Chasseur de tr\u00e9sors
|
||||
Fishing.SubSkill.TreasureHunter.Description=Remonte des objets inhabituels
|
||||
Fishing.SubSkill.TreasureHunter.Stat=Grade de chasseur de tr\u00e9sor: &a{0}&3/&a{1}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=Ratio de drop: &7Commun: &e{0} &aNon-commun: &e{1}\n&9Rare: &e{2} &dEpique: &e{3} &6Legendaire: &e{4} &bRecord: &e{5}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=Ratio de drop: &7Commun: &e{0} &aNon-commun: &e{1}\n&9Rare: &e{2} &dEpique: &e{3} &6Legendaire: &e{4} &bMythic: &e{5}
|
||||
Fishing.SubSkill.MagicHunter.Name=P\u00eache magique
|
||||
Fishing.SubSkill.MagicHunter.Description=Remonte des objets magiques
|
||||
Fishing.SubSkill.MagicHunter.Stat=Chance du chasseur de tr\u00e9sor
|
||||
|
@ -240,7 +240,7 @@ Fishing.Ability.Locked.2=LEZ\u00C1RVA {0}+ K\u00C9PESS\u00C9G SZINTIG (MESTER HO
|
||||
Fishing.SubSkill.TreasureHunter.Name=Kincsvad\u00E1sz
|
||||
Fishing.SubSkill.TreasureHunter.Description=Furcsa t\u00E1rgyak kihal\u00E1sz\u00E1sa
|
||||
Fishing.SubSkill.TreasureHunter.Stat=Kincsvad\u00E1sz Szint: &a{0}&3/&a{1}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=T\u00E1rgy Es\u00E9si Es\u00E9ly: &7\u00C1tlagos: &e{0} &aRendk\u00EDv\u00FCli: &e{1}\n&9Ritka: &e{2} &dEpikus: &e{3} &6Legend\u00E1s: &e{4} &bRekord: &e{5}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=T\u00E1rgy Es\u00E9si Es\u00E9ly: &7\u00C1tlagos: &e{0} &aRendk\u00EDv\u00FCli: &e{1}\n&9Ritka: &e{2} &dEpikus: &e{3} &6Legend\u00E1s: &e{4} &bMythic: &e{5}
|
||||
Fishing.SubSkill.MagicHunter.Name=M\u00E1gikus Vad\u00E1sz
|
||||
Fishing.SubSkill.MagicHunter.Description=Elvar\u00E1zsolt T\u00E1rgyak Megtal\u00E1l\u00E1sa
|
||||
Fishing.SubSkill.MagicHunter.Stat=Es\u00E9ly M\u00E1gikus Vad\u00E1szra
|
||||
|
@ -247,7 +247,7 @@ Fishing.Ability.Locked.2=BLOCCATO FINO AD ABILIT\u00E0 {0}+ (PESCATORE PROVETTO)
|
||||
Fishing.SubSkill.TreasureHunter.Name=Cacciatore di Tesori
|
||||
Fishing.SubSkill.TreasureHunter.Description=Pesca oggetti vari
|
||||
Fishing.SubSkill.TreasureHunter.Stat=Grado Cacciatore di Tesori: &a{0}&3/&a{1}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=Tasso di Drop: &7Comune: &e{0} &aNon comune: &e{1}\n&9Raro: &e{2} &dEpico: &e{3} &6Leggendario: &e{4} &bRecord: &e{5}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=Tasso di Drop: &7Comune: &e{0} &aNon comune: &e{1}\n&9Raro: &e{2} &dEpico: &e{3} &6Leggendario: &e{4} &bMythic: &e{5}
|
||||
Fishing.SubSkill.MagicHunter.Name=Cacciatore di Magia
|
||||
Fishing.SubSkill.MagicHunter.Description=Trova Oggetti Incantati
|
||||
Fishing.SubSkill.MagicHunter.Stat=Possibilit\u00E0 Cacciatore di Magia
|
||||
|
@ -230,7 +230,7 @@ Fishing.Ability.Locked.2=\u30ed\u30c3\u30af\u3055\u308c\u308b\u307e\u3067 {0}+ \
|
||||
Fishing.SubSkill.TreasureHunter.Name=\u30c8\u30ec\u30b8\u30e3\u30fc\u30cf\u30f3\u30bf\u30fc
|
||||
Fishing.SubSkill.TreasureHunter.Description=\u9b5a\u3084\u7269\u3092\u91e3\u308a\u4e0a\u3052\u308b\u3002
|
||||
Fishing.SubSkill.TreasureHunter.Stat=\u30c8\u30ec\u30b8\u30e3\u30fc\u30cf\u30f3\u30bf\u30fc \u30e9\u30f3\u30af: &a{0}&3/&a{1}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=\u30c9\u30ed\u30c3\u30d7\u7387: &7\u30b3\u30e2\u30f3: &e{0} &a\u30a2\u30f3\u30b3\u30e2\u30f3: &e{1}\n&9\u30ec\u30a2: &e{2} &d\u30a8\u30d4\u30c3\u30af: &e{3} &6\u30ec\u30b8\u30a7\u30f3\u30c0\u30ea\u30fc: &e{4} &b\u30ec\u30b3\u30fc\u30c9: &e{5}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=\u30c9\u30ed\u30c3\u30d7\u7387: &7\u30b3\u30e2\u30f3: &e{0} &a\u30a2\u30f3\u30b3\u30e2\u30f3: &e{1}\n&9\u30ec\u30a2: &e{2} &d\u30a8\u30d4\u30c3\u30af: &e{3} &6\u30ec\u30b8\u30a7\u30f3\u30c0\u30ea\u30fc: &e{4} &bMythic: &e{5}
|
||||
Fishing.SubSkill.MagicHunter.Name=\u30de\u30b8\u30c3\u30af\u30cf\u30f3\u30bf\u30fc
|
||||
Fishing.SubSkill.MagicHunter.Description=\u30a8\u30f3\u30c1\u30e3\u30f3\u30c8\u3055\u308c\u305f\u30a2\u30a4\u30c6\u30e0\u3092\u898b\u3064\u3051\u308b\u3002
|
||||
Fishing.SubSkill.MagicHunter.Stat=\u30de\u30b8\u30c3\u30af\u30cf\u30f3\u30bf\u30fc \u78ba\u7387
|
||||
|
@ -240,7 +240,7 @@ Fishing.Ability.Locked.2=LOCKED UNTIL {0}+ SKILL (MASTER ANGLER)
|
||||
Fishing.SubSkill.TreasureHunter.Name=Lobių ieškotojas
|
||||
Fishing.SubSkill.TreasureHunter.Description=Fish up misc. objects
|
||||
Fishing.SubSkill.TreasureHunter.Stat=Lobių ieškotojo rankas: &a{0}&3/&a{1}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=Drop Rate: &7Common: &e{0} &aUncommon: &e{1}\n&9Rare: &e{2} &dEpic: &e{3} &6Legendary: &e{4} &bRecord: &e{5}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=Drop Rate: &7Common: &e{0} &aUncommon: &e{1}\n&9Rare: &e{2} &dEpic: &e{3} &6Legendary: &e{4} &bMythic: &e{5}
|
||||
Fishing.SubSkill.MagicHunter.Name=Magiškas žvejys
|
||||
Fishing.SubSkill.MagicHunter.Description=Find Enchanted Items
|
||||
Fishing.SubSkill.MagicHunter.Stat=Magic Hunter Chance
|
||||
|
@ -188,7 +188,7 @@ Fishing.Ability.FD=\u0420\u044b\u0431\u0430\u0446\u043a\u0430\u044f \u0414\u0438
|
||||
Fishing.SubSkill.TreasureHunter.Name=\u041e\u0445\u043e\u0442\u043d\u0438\u043a \u0437\u0430 \u0421\u043e\u043a\u0440\u043e\u0432\u0438\u0449\u0430\u043c\u0438 (\u041f\u0430\u0441\u0441\u0438\u0432\u043d\u043e\u0435)
|
||||
Fishing.SubSkill.TreasureHunter.Description=\u041b\u043e\u0432\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432
|
||||
Fishing.SubSkill.TreasureHunter.Stat=\u0420\u0430\u043d\u0433 \u041e\u0445\u043e\u0442\u043d\u0438\u043a\u0430 \u0437\u0430 \u0421\u043e\u043a\u0440\u043e\u0432\u0438\u0449\u0430\u043c\u0438: &a{0}&3/&a{1}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=\u0428\u0430\u043d\u0441 \u0434\u0440\u043e\u043f\u0430: &7\u041e\u0431\u044b\u0447\u043d\u044b\u0439: &e{0} &a\u041d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0439: &e{1}\n&9\u0420\u0435\u0434\u043a\u0438\u0439: &e{2} &d\u042d\u043f\u0438\u0447\u0435\u0441\u043a\u0438\u0439: &e{3} &6\u041b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u0439: &e{4} &b\u041f\u043b\u0430\u0441\u0442\u0438\u043d\u043a\u0430: &e{5}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=\u0428\u0430\u043d\u0441 \u0434\u0440\u043e\u043f\u0430: &7\u041e\u0431\u044b\u0447\u043d\u044b\u0439: &e{0} &a\u041d\u0435\u043e\u0431\u044b\u0447\u043d\u044b\u0439: &e{1}\n&9\u0420\u0435\u0434\u043a\u0438\u0439: &e{2} &d\u042d\u043f\u0438\u0447\u0435\u0441\u043a\u0438\u0439: &e{3} &6\u041b\u0435\u0433\u0435\u043d\u0434\u0430\u0440\u043d\u044b\u0439: &e{4} &bMythic: &e{5}
|
||||
Fishing.SubSkill.MagicHunter.Name=\u041e\u0445\u043e\u0442\u043d\u0438\u043a \u0417\u0430 \u041c\u0430\u0433\u0438\u0435\u0439
|
||||
Fishing.SubSkill.MagicHunter.Description=\u041d\u0430\u0445\u043e\u0434\u043a\u0430 \u0417\u0430\u0447\u0430\u0440\u043e\u0432\u0430\u043d\u044b\u0445 \u041f\u0440\u0435\u0434\u043c\u0435\u0442\u043e\u0432
|
||||
Fishing.SubSkill.MagicHunter.Stat=\u041e\u0445\u043e\u0442\u043d\u0438\u043a \u0417\u0430 \u041c\u0430\u0433\u0438\u0435\u0439 \u0428\u0430\u043d\u0441
|
||||
|
@ -240,7 +240,7 @@ Fishing.Ability.Locked.2=\u9501\u5b9a\u72b6\u6001,\u76f4\u5230 {0}+ \u6280\u80fd
|
||||
Fishing.SubSkill.TreasureHunter.Name=\u6dd8\u91d1\u8005
|
||||
Fishing.SubSkill.TreasureHunter.Description=\u9493\u51fa\u5404\u79cd\u5404\u6837\u7684\u7269\u54c1
|
||||
Fishing.SubSkill.TreasureHunter.Stat=\u6dd8\u91d1\u8005\u7b49\u7ea7: &a{0}&3/&a{1}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=\u6389\u843d\u7387: &7\u4e00\u822c: &e{0} &a\u666e\u901a: &e{1}\n&9\u7a00\u6709: &e{2} &d\u7f55\u89c1: &e{3} &6\u53f2\u8bd7: &e{4} &b\u4f20\u8bf4: &e{5}
|
||||
Fishing.SubSkill.TreasureHunter.Stat.Extra=\u6389\u843d\u7387: &7\u4e00\u822c: &e{0} &a\u666e\u901a: &e{1}\n&9\u7a00\u6709: &e{2} &d\u7f55\u89c1: &e{3} &6\u53f2\u8bd7: &e{4} &bMythic: &e{5}
|
||||
Fishing.SubSkill.MagicHunter.Name=\u9b54\u6cd5\u730e\u4eba
|
||||
Fishing.SubSkill.MagicHunter.Description=\u627e\u5230\u9644\u9b54\u7269\u54c1
|
||||
Fishing.SubSkill.MagicHunter.Stat=\u9b54\u6cd5\u730e\u4eba\u51e0\u7387
|
||||
|
@ -19,6 +19,9 @@ load: POSTWORLD
|
||||
api-version: 1.13
|
||||
|
||||
commands:
|
||||
# mmodroptreasures:
|
||||
# description: An admin command used to spawn treasure drops
|
||||
# permission: mcmmo.commands.droptreasures
|
||||
mmoxpbar:
|
||||
aliases: xpbarsettings
|
||||
description: Change XP bar settings
|
||||
|
@ -1,447 +1,4 @@
|
||||
#
|
||||
# Settings for Fishing
|
||||
# Last updated on ${project.version}-b${BUILD_NUMBER}
|
||||
###
|
||||
Fishing:
|
||||
LEATHER_BOOTS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
LEATHER_HELMET:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
LEATHER_LEGGINGS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
LEATHER_CHESTPLATE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
WOODEN_SWORD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
WOODEN_SHOVEL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
WOODEN_PICKAXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
WOODEN_AXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
WOODEN_HOE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
LAPIS_LAZULI:
|
||||
Amount: 20
|
||||
XP: 200
|
||||
Rarity: COMMON
|
||||
STONE_SWORD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
STONE_SHOVEL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
STONE_PICKAXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
STONE_AXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
STONE_HOE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_SWORD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_SHOVEL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_PICKAXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_AXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_HOE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_BOOTS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_HELMET:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_LEGGINGS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLDEN_CHESTPLATE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
IRON_INGOT:
|
||||
Amount: 5
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
GOLD_INGOT:
|
||||
Amount: 5
|
||||
XP: 200
|
||||
Rarity: UNCOMMON
|
||||
IRON_SWORD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
IRON_SHOVEL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
IRON_PICKAXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
IRON_AXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
IRON_HOE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
BOW:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
ENDER_PEARL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
BLAZE_ROD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RARE
|
||||
IRON_BOOTS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
IRON_HELMET:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
IRON_LEGGINGS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
IRON_CHESTPLATE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
GHAST_TEAR:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
DIAMOND:
|
||||
Amount: 5
|
||||
XP: 200
|
||||
Rarity: EPIC
|
||||
DIAMOND_SWORD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_SHOVEL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_PICKAXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_AXE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_HOE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_BOOTS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_HELMET:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_LEGGINGS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
DIAMOND_CHESTPLATE:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: LEGENDARY
|
||||
MUSIC_DISC_BLOCKS:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RECORD
|
||||
MUSIC_DISC_CHIRP:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RECORD
|
||||
MUSIC_DISC_FAR:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RECORD
|
||||
MUSIC_DISC_MALL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RECORD
|
||||
MUSIC_DISC_MELLOHI:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RECORD
|
||||
MUSIC_DISC_STAL:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RECORD
|
||||
MUSIC_DISC_STRAD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RECORD
|
||||
MUSIC_DISC_WARD:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RECORD
|
||||
MUSIC_DISC_11:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RECORD
|
||||
MUSIC_DISC_WAIT:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RECORD
|
||||
MUSIC_DISC_13:
|
||||
Amount: 1
|
||||
XP: 200
|
||||
Rarity: RECORD
|
||||
#
|
||||
# Fishing drop rates
|
||||
###
|
||||
Item_Drop_Rates:
|
||||
Tier_1:
|
||||
TRAP: 7.68
|
||||
COMMON: 7.50
|
||||
UNCOMMON: 1.25
|
||||
RARE: 0.25
|
||||
EPIC: 0.10
|
||||
LEGENDARY: 0.01
|
||||
RECORD: 0.01
|
||||
Tier_2:
|
||||
TRAP: 2.50
|
||||
COMMON: 6.50
|
||||
UNCOMMON: 1.75
|
||||
RARE: 0.75
|
||||
EPIC: 0.50
|
||||
LEGENDARY: 0.05
|
||||
RECORD: 0.01
|
||||
Tier_3:
|
||||
TRAP: 1.50
|
||||
COMMON: 3.50
|
||||
UNCOMMON: 2.75
|
||||
RARE: 1.25
|
||||
EPIC: 1.00
|
||||
LEGENDARY: 0.10
|
||||
RECORD: 0.01
|
||||
Tier_4:
|
||||
TRAP: 1.00
|
||||
COMMON: 2.00
|
||||
UNCOMMON: 3.50
|
||||
RARE: 2.25
|
||||
EPIC: 1.50
|
||||
LEGENDARY: 1.00
|
||||
RECORD: 0.01
|
||||
Tier_5:
|
||||
TRAP: 0.25
|
||||
COMMON: 1.50
|
||||
UNCOMMON: 3.75
|
||||
RARE: 2.50
|
||||
EPIC: 2.00
|
||||
LEGENDARY: 1.00
|
||||
RECORD: 0.01
|
||||
Tier_6:
|
||||
TRAP: 0.10
|
||||
COMMON: 1.00
|
||||
UNCOMMON: 3.25
|
||||
RARE: 3.75
|
||||
EPIC: 2.50
|
||||
LEGENDARY: 1.50
|
||||
RECORD: 0.05
|
||||
Tier_7:
|
||||
TRAP: 0.05
|
||||
COMMON: 0.25
|
||||
UNCOMMON: 2.75
|
||||
RARE: 4.00
|
||||
EPIC: 5.00
|
||||
LEGENDARY: 2.50
|
||||
RECORD: 0.10
|
||||
Tier_8:
|
||||
TRAP: 0.01
|
||||
COMMON: 0.10
|
||||
UNCOMMON: 1.50
|
||||
RARE: 6.00
|
||||
EPIC: 7.50
|
||||
LEGENDARY: 5.00
|
||||
RECORD: 0.25
|
||||
#
|
||||
# Fishing enchantment drop rates
|
||||
###
|
||||
Enchantments_Rarity:
|
||||
COMMON:
|
||||
EFFICIENCY: 1
|
||||
UNBREAKING: 1
|
||||
FORTUNE: 1
|
||||
PROTECTION: 1
|
||||
FIRE_PROTECTION: 1
|
||||
FEATHER_FALLING: 1
|
||||
BLAST_PROTECTION: 1
|
||||
PROJECTILE_PROTECTION: 1
|
||||
RESPIRATION: 1
|
||||
THORNS: 1
|
||||
SHARPNESS: 1
|
||||
SMITE: 1
|
||||
BANE_OF_ARTHROPODS: 1
|
||||
POWER: 1
|
||||
UNCOMMON:
|
||||
EFFICIENCY: 2
|
||||
PROTECTION: 2
|
||||
FIRE_PROTECTION: 2
|
||||
FEATHER_FALLING: 2
|
||||
BLAST_PROTECTION: 2
|
||||
PROJECTILE_PROTECTION: 2
|
||||
SHARPNESS: 2
|
||||
SMITE: 2
|
||||
BANE_OF_ARTHROPODS: 2
|
||||
KNOCKBACK: 1
|
||||
LOOTING: 1
|
||||
POWER: 2
|
||||
PUNCH: 1
|
||||
RARE:
|
||||
EFFICIENCY: 3
|
||||
UNBREAKING: 2
|
||||
PROTECTION: 3
|
||||
FIRE_PROTECTION: 3
|
||||
FEATHER_FALLING: 3
|
||||
BLAST_PROTECTION: 3
|
||||
PROJECTILE_PROTECTION: 3
|
||||
RESPIRATION: 2
|
||||
SHARPNESS: 3
|
||||
SMITE: 3
|
||||
BANE_OF_ARTHROPODS: 3
|
||||
FIRE_ASPECT: 1
|
||||
LOOTING: 2
|
||||
POWER: 3
|
||||
EPIC:
|
||||
EFFICIENCY: 4
|
||||
FORTUNE: 2
|
||||
AQUA_AFFINITY: 1
|
||||
THORNS: 2
|
||||
SHARPNESS: 4
|
||||
SMITE: 4
|
||||
BANE_OF_ARTHROPODS: 4
|
||||
POWER: 4
|
||||
FLAME: 1
|
||||
LEGENDARY:
|
||||
EFFICIENCY: 5
|
||||
UNBREAKING: 3
|
||||
FORTUNE: 3
|
||||
PROTECTION: 4
|
||||
FIRE_PROTECTION: 4
|
||||
FEATHER_FALLING: 4
|
||||
BLAST_PROTECTION: 4
|
||||
PROJECTILE_PROTECTION: 4
|
||||
RESPIRATION: 3
|
||||
AQUA_AFFINITY: 1
|
||||
THORNS: 3
|
||||
SHARPNESS: 5
|
||||
SMITE: 5
|
||||
BANE_OF_ARTHROPODS: 5
|
||||
KNOCKBACK: 2
|
||||
FIRE_ASPECT: 2
|
||||
LOOTING: 3
|
||||
SILK_TOUCH: 1
|
||||
POWER: 5
|
||||
PUNCH: 2
|
||||
INFINITY: 1
|
||||
|
||||
Enchantment_Drop_Rates:
|
||||
Tier_1:
|
||||
COMMON: 5.00
|
||||
UNCOMMON: 1.00
|
||||
RARE: 0.10
|
||||
EPIC: 0.01
|
||||
LEGENDARY: 0.01
|
||||
Tier_2:
|
||||
COMMON: 7.50
|
||||
UNCOMMON: 1.00
|
||||
RARE: 0.10
|
||||
EPIC: 0.01
|
||||
LEGENDARY: 0.01
|
||||
Tier_3:
|
||||
COMMON: 7.50
|
||||
UNCOMMON: 2.50
|
||||
RARE: 0.25
|
||||
EPIC: 0.10
|
||||
LEGENDARY: 0.01
|
||||
Tier_4:
|
||||
COMMON: 10.0
|
||||
UNCOMMON: 2.75
|
||||
RARE: 0.50
|
||||
EPIC: 0.10
|
||||
LEGENDARY: 0.05
|
||||
Tier_5:
|
||||
COMMON: 10.0
|
||||
UNCOMMON: 4.00
|
||||
RARE: 0.75
|
||||
EPIC: 0.25
|
||||
LEGENDARY: 0.10
|
||||
Tier_6:
|
||||
COMMON: 9.50
|
||||
UNCOMMON: 5.50
|
||||
RARE: 1.75
|
||||
EPIC: 0.50
|
||||
LEGENDARY: 0.25
|
||||
Tier_7:
|
||||
COMMON: 8.50
|
||||
UNCOMMON: 7.50
|
||||
RARE: 2.75
|
||||
EPIC: 0.75
|
||||
LEGENDARY: 0.50
|
||||
Tier_8:
|
||||
COMMON: 7.50
|
||||
UNCOMMON: 10.0
|
||||
RARE: 5.25
|
||||
EPIC: 1.50
|
||||
LEGENDARY: 0.75
|
||||
#
|
||||
# Settings for Excavation's Archaeology
|
||||
# If you are in retro mode, Drop_Level is multiplied by 10.
|
||||
###
|
||||
@ -630,335 +187,4 @@ Hylian_Luck:
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
Drops_From: [Pots]
|
||||
#
|
||||
# Settings for Shake
|
||||
# If you are in retro mode, Drop_Level is multiplied by 10.
|
||||
###
|
||||
Shake:
|
||||
BLAZE:
|
||||
BLAZE_ROD:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
CAVE_SPIDER:
|
||||
SPIDER_EYE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
STRING:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
COBWEB:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
POTION|0|POISON:
|
||||
PotionData:
|
||||
PotionType: POISON
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
CHICKEN:
|
||||
FEATHER:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 33.3
|
||||
Drop_Level: 0
|
||||
CHICKEN:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 33.3
|
||||
Drop_Level: 0
|
||||
EGG:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 33.3
|
||||
Drop_Level: 0
|
||||
COW:
|
||||
MILK_BUCKET:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 2.0
|
||||
Drop_Level: 0
|
||||
LEATHER:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
BEEF:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
CREEPER:
|
||||
CREEPER_HEAD:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
GUNPOWDER:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 99.0
|
||||
Drop_Level: 0
|
||||
ENDERMAN:
|
||||
ENDER_PEARL:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
GHAST:
|
||||
GUNPOWDER:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
GHAST_TEAR:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
HORSE:
|
||||
LEATHER:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 99.0
|
||||
Drop_Level: 0
|
||||
SADDLE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
IRON_GOLEM:
|
||||
PUMPKIN:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 3.0
|
||||
Drop_Level: 0
|
||||
IRON_INGOT:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 12.0
|
||||
Drop_Level: 0
|
||||
POPPY:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 85.0
|
||||
Drop_Level: 0
|
||||
MAGMA_CUBE:
|
||||
MAGMA_CREAM:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
MUSHROOM_COW:
|
||||
MILK_BUCKET:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 5.0
|
||||
Drop_Level: 0
|
||||
MUSHROOM_STEW:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 5.0
|
||||
Drop_Level: 0
|
||||
LEATHER:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 30.0
|
||||
Drop_Level: 0
|
||||
BEEF:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 30.0
|
||||
Drop_Level: 0
|
||||
RED_MUSHROOM:
|
||||
Amount: 2
|
||||
XP: 0
|
||||
Drop_Chance: 30.0
|
||||
Drop_Level: 0
|
||||
PIG:
|
||||
PORKCHOP:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
PIG_ZOMBIE:
|
||||
ROTTEN_FLESH:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
GOLD_NUGGET:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
PLAYER:
|
||||
SKELETON_SKULL:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 0.0
|
||||
Drop_Level: 0
|
||||
INVENTORY:
|
||||
Whole_Stacks: false
|
||||
Drop_Chance: 0.0
|
||||
Drop_Level: 0
|
||||
SHEEP:
|
||||
WHITE_WOOL:
|
||||
Amount: 3
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
SHULKER:
|
||||
SHULKER_SHELL:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 25.0
|
||||
Drop_Level: 0
|
||||
PURPUR_BLOCK:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 75.0
|
||||
Drop_Level: 0
|
||||
SKELETON:
|
||||
SKELETON_SKULL:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 2.0
|
||||
Drop_Level: 0
|
||||
BONE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
ARROW:
|
||||
Amount: 2
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
SLIME:
|
||||
SLIME_BALL:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
SPIDER:
|
||||
SPIDER_EYE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
STRING:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 50.0
|
||||
Drop_Level: 0
|
||||
SNOWMAN:
|
||||
PUMPKIN:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 3.0
|
||||
Drop_Level: 0
|
||||
SNOWBALL:
|
||||
Amount: 2
|
||||
XP: 0
|
||||
Drop_Chance: 97.0
|
||||
Drop_Level: 0
|
||||
SQUID:
|
||||
INK_SAC:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 100.0
|
||||
Drop_Level: 0
|
||||
WITCH:
|
||||
SPLASH_POTION|0|INSTANT_HEAL:
|
||||
PotionData:
|
||||
PotionType: INSTANT_HEAL
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
SPLASH_POTION|0|FIRE_RESISTANCE:
|
||||
PotionData:
|
||||
PotionType: FIRE_RESISTANCE
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
SPLASH_POTION|0|SPEED:
|
||||
PotionData:
|
||||
PotionType: SPEED
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 1.0
|
||||
Drop_Level: 0
|
||||
GLASS_BOTTLE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 7.0
|
||||
Drop_Level: 0
|
||||
GLOWSTONE_DUST:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 15.0
|
||||
Drop_Level: 0
|
||||
GUNPOWDER:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 15.0
|
||||
Drop_Level: 0
|
||||
REDSTONE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 15.0
|
||||
Drop_Level: 0
|
||||
SPIDER_EYE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 15.0
|
||||
Drop_Level: 0
|
||||
STICK:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 15.0
|
||||
Drop_Level: 0
|
||||
SUGAR:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 15.0
|
||||
Drop_Level: 0
|
||||
WITHER_SKELETON:
|
||||
WITHER_SKELETON_SKULL:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 2.0
|
||||
Drop_Level: 0
|
||||
BONE:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
COAL:
|
||||
Amount: 2
|
||||
XP: 0
|
||||
Drop_Chance: 49.0
|
||||
Drop_Level: 0
|
||||
ZOMBIE:
|
||||
ZOMBIE_HEAD:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 2.0
|
||||
Drop_Level: 0
|
||||
ROTTEN_FLESH:
|
||||
Amount: 1
|
||||
XP: 0
|
||||
Drop_Chance: 98.0
|
||||
Drop_Level: 0
|
||||
Drops_From: [Pots]
|
Reference in New Issue
Block a user