mirror of
https://github.com/mcMMO-Dev/mcMMO.git
synced 2024-11-22 21:26:46 +01: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:
parent
31134b38de
commit
652a9519c1
@ -1,12 +1,26 @@
|
|||||||
Version 2.1.164
|
Version 2.1.164
|
||||||
New exploit fix setting, when disabled it will allow combat interactions with "NPC" entities from plugins like Citizens
|
The Rarity known as Records has been renamed to Mythic
|
||||||
|
Fishing treasures have been moved from treasures.yml -> fishing_treasures.yml, you'll have to copy over your changes and be aware that Records rarity is now Mythic
|
||||||
|
Mythic rarity (formerly known as Records) now allows for Enchantments to be applied to drops (See Notes)
|
||||||
|
Added all Netherite gear to the Mythic tier in fishing_treasures.yml
|
||||||
|
Added Enchanted Books to fishing loot tables
|
||||||
|
New exploit fix setting 'PreventPluginNPCInteraction' which defaults to true, when disabled it will allow combat interactions with "NPC" entities from plugins like Citizens
|
||||||
ExploitFix.PreventPluginNPCInteraction Added to experience.yml
|
ExploitFix.PreventPluginNPCInteraction Added to experience.yml
|
||||||
|
Modified locale string 'Fishing.SubSkill.TreasureHunter.Stat.Extra' in existing locale files
|
||||||
|
You can now define a whitelist of enchants or a blacklist of enchants for an Enchanted_Book entry in fishing_treasures.yml, see notes for an example
|
||||||
|
|
||||||
NOTES:
|
NOTES:
|
||||||
|
The rarity known as Records was odd to me, if you got the best possible drop it was always going to be a Records drop, and by default the Records tier had only music records. It was treated differently in the code as well, for example Records drops never had enchantments applied to them. So you could add say NETHERITE_ARMOR to them in your user config and it would never put enchantments on it, that seemed very odd to me.
|
||||||
|
As a response to this, I've renamed Records as Mythic, I've moved the records into varying tiers, you'll start getting them much earlier now. I've also added Netherite and Enchanted Books to the Mythic tier.
|
||||||
|
Enchanted Books have been added to Fishing loot, this is a basic hacky work around until the config update comes. Enchanted books can have any legal enchant.
|
||||||
When talking about NPCs in the below notes, I am referring to "Fake" Players used in plugins such as Citizens, not Villagers from Vanilla Minecraft or anything labeled NPC in another plugin which does not constitute a "Fake Player"
|
When talking about NPCs in the below notes, I am referring to "Fake" Players used in plugins such as Citizens, not Villagers from Vanilla Minecraft or anything labeled NPC in another plugin which does not constitute a "Fake Player"
|
||||||
Historically mcMMO has checked an entity for being a Fake-Player-NPC and backed out of any interaction, this was originally done because of Fake-Player-NPCs that were meant to be invincible/etc and not give XP
|
Historically mcMMO has checked an entity for being a Fake-Player-NPC and backed out of any interaction, this was originally done because of Fake-Player-NPCs that were meant to be invincible/etc and not give XP
|
||||||
However nowadays what a Fake-Player-NPC is used for is pretty loose, mcMMO only has definitions for some NPCs (such as from Citizens) it doesn't know about most Fake-Player-NPCs in most plugins unless they identify themselves in a similar way to the predefined parameters
|
However nowadays what a Fake-Player-NPC is used for is pretty loose, mcMMO only has definitions for some NPCs (such as from Citizens) it doesn't know about most Fake-Player-NPCs in most plugins unless they identify themselves in a similar way to the predefined parameters
|
||||||
Leave this new exploit fix setting on true unless you understand the implications
|
Leave this new exploit fix setting on true unless you understand the implications
|
||||||
|
Here is an example of using the whitelist or blacklist for an Enchanted_Book entry in fishing_treasures.yml
|
||||||
|
https://gist.github.com/nossr50/4e15b8ba6915b5a5f516eccfba2d7169
|
||||||
|
If you can't load this image, at the address of your treasure for example, at Fishing.Enchanted_Book.Enchantments_Blacklist: you define a list (which must follow yaml spec, google yaml linter) of enchants to disallow, likewise at Fishing.Enchanted_Book.Enchantments_Whitelist you can setup a whitelist, if neither is defined then the book can spawn with all possible enchants, if both are defined the whitelist is used instead of the blacklist
|
||||||
|
|
||||||
|
|
||||||
Version 2.1.163
|
Version 2.1.163
|
||||||
Fixed the translate URL pointing to the wrong place (thanks chew)
|
Fixed the translate URL pointing to the wrong place (thanks chew)
|
||||||
|
@ -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 rareTreasure;
|
||||||
private String epicTreasure;
|
private String epicTreasure;
|
||||||
private String legendaryTreasure;
|
private String legendaryTreasure;
|
||||||
private String recordTreasure;
|
private String mythicTreasure;
|
||||||
|
|
||||||
private String magicChance;
|
private String magicChance;
|
||||||
|
|
||||||
@ -60,13 +60,13 @@ public class FishingCommand extends SkillCommand {
|
|||||||
rareTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.RARE) / 100.0);
|
rareTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.RARE) / 100.0);
|
||||||
epicTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.EPIC) / 100.0);
|
epicTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.EPIC) / 100.0);
|
||||||
legendaryTreasure = percent.format(TreasureConfig.getInstance().getItemDropRate(lootTier, Rarity.LEGENDARY) / 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
|
// Magic hunter drop rates
|
||||||
double totalEnchantChance = 0;
|
double totalEnchantChance = 0;
|
||||||
|
|
||||||
for (Rarity rarity : Rarity.values()) {
|
for (Rarity rarity : Rarity.values()) {
|
||||||
if (rarity != Rarity.RECORD) {
|
if (rarity != Rarity.MYTHIC) {
|
||||||
totalEnchantChance += TreasureConfig.getInstance().getEnchantmentDropRate(lootTier, rarity);
|
totalEnchantChance += TreasureConfig.getInstance().getEnchantmentDropRate(lootTier, rarity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -145,7 +145,7 @@ public class FishingCommand extends SkillCommand {
|
|||||||
String.valueOf(rareTreasure),
|
String.valueOf(rareTreasure),
|
||||||
String.valueOf(epicTreasure),
|
String.valueOf(epicTreasure),
|
||||||
String.valueOf(legendaryTreasure),
|
String.valueOf(legendaryTreasure),
|
||||||
String.valueOf(recordTreasure)));
|
String.valueOf(mythicTreasure)));
|
||||||
}
|
}
|
||||||
|
|
||||||
return messages;
|
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;
|
package com.gmail.nossr50.config.treasure;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.ConfigLoader;
|
import com.gmail.nossr50.config.ConfigLoader;
|
||||||
import com.gmail.nossr50.datatypes.treasure.*;
|
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
|
||||||
import com.gmail.nossr50.util.EnchantmentUtils;
|
import com.gmail.nossr50.datatypes.treasure.HylianTreasure;
|
||||||
|
import com.gmail.nossr50.datatypes.treasure.Rarity;
|
||||||
import com.gmail.nossr50.util.text.StringUtils;
|
import com.gmail.nossr50.util.text.StringUtils;
|
||||||
import org.bukkit.ChatColor;
|
import org.bukkit.ChatColor;
|
||||||
import org.bukkit.Material;
|
import org.bukkit.Material;
|
||||||
import org.bukkit.Tag;
|
import org.bukkit.Tag;
|
||||||
import org.bukkit.configuration.ConfigurationSection;
|
import org.bukkit.configuration.ConfigurationSection;
|
||||||
import org.bukkit.enchantments.Enchantment;
|
|
||||||
import org.bukkit.entity.EntityType;
|
import org.bukkit.entity.EntityType;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.meta.ItemMeta;
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
@ -22,18 +22,14 @@ import java.util.List;
|
|||||||
|
|
||||||
public class TreasureConfig extends ConfigLoader {
|
public class TreasureConfig extends ConfigLoader {
|
||||||
|
|
||||||
|
public static final String FILENAME = "treasures.yml";
|
||||||
private static TreasureConfig instance;
|
private static TreasureConfig instance;
|
||||||
|
|
||||||
public HashMap<String, List<ExcavationTreasure>> excavationMap = new HashMap<>();
|
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<String, List<HylianTreasure>> hylianMap = new HashMap<>();
|
||||||
|
|
||||||
public HashMap<Rarity, List<FishingTreasure>> fishingRewards = new HashMap<>();
|
|
||||||
public HashMap<Rarity, List<EnchantmentTreasure>> fishingEnchantments = new HashMap<>();
|
|
||||||
|
|
||||||
private TreasureConfig() {
|
private TreasureConfig() {
|
||||||
super("treasures.yml");
|
super(FILENAME);
|
||||||
loadKeys();
|
loadKeys();
|
||||||
validate();
|
validate();
|
||||||
}
|
}
|
||||||
@ -51,29 +47,18 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
// Validate all the settings!
|
// Validate all the settings!
|
||||||
List<String> reason = new ArrayList<>();
|
List<String> reason = new ArrayList<>();
|
||||||
for (String tier : config.getConfigurationSection("Enchantment_Drop_Rates").getKeys(false)) {
|
for (String tier : config.getConfigurationSection("Enchantment_Drop_Rates").getKeys(false)) {
|
||||||
double totalEnchantDropRate = 0;
|
|
||||||
double totalItemDropRate = 0;
|
double totalItemDropRate = 0;
|
||||||
|
|
||||||
for (Rarity rarity : Rarity.values()) {
|
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());
|
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) {
|
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!");
|
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;
|
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) {
|
if (totalItemDropRate < 0 || totalItemDropRate > 100.0) {
|
||||||
reason.add("The total item drop rate for " + tier + " should be between 0.0 and 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("Fishing");
|
||||||
loadTreasures("Excavation");
|
loadTreasures("Excavation");
|
||||||
loadTreasures("Hylian_Luck");
|
loadTreasures("Hylian_Luck");
|
||||||
loadEnchantments();
|
|
||||||
|
|
||||||
for (EntityType entity : EntityType.values()) {
|
for (EntityType entity : EntityType.values()) {
|
||||||
if (entity.isAlive()) {
|
if (entity.isAlive()) {
|
||||||
@ -102,8 +86,6 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void loadTreasures(String type) {
|
private void loadTreasures(String type) {
|
||||||
boolean isFishing = type.equals("Fishing");
|
|
||||||
boolean isShake = type.contains("Shake");
|
|
||||||
boolean isExcavation = type.equals("Excavation");
|
boolean isExcavation = type.equals("Excavation");
|
||||||
boolean isHylian = type.equals("Hylian_Luck");
|
boolean isHylian = type.equals("Hylian_Luck");
|
||||||
|
|
||||||
@ -113,13 +95,6 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize fishing HashMap
|
|
||||||
for (Rarity rarity : Rarity.values()) {
|
|
||||||
if (!fishingRewards.containsKey(rarity)) {
|
|
||||||
fishingRewards.put(rarity, (new ArrayList<>()));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (String treasureName : treasureSection.getKeys(false)) {
|
for (String treasureName : treasureSection.getKeys(false)) {
|
||||||
// Validate all the things!
|
// Validate all the things!
|
||||||
List<String> reason = new ArrayList<>();
|
List<String> reason = new ArrayList<>();
|
||||||
@ -131,16 +106,7 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
* Material, Amount, and Data
|
* Material, Amount, and Data
|
||||||
*/
|
*/
|
||||||
Material material;
|
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");
|
int amount = config.getInt(type + "." + treasureName + ".Amount");
|
||||||
short data = (treasureInfo.length == 2) ? Short.parseShort(treasureInfo[1]) : (short) config.getInt(type + "." + treasureName + ".Data");
|
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);
|
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
|
||||||
*/
|
*/
|
||||||
@ -198,7 +151,7 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
if (materialName.contains("POTION")) {
|
if (materialName.contains("POTION")) {
|
||||||
Material mat = Material.matchMaterial(materialName);
|
Material mat = Material.matchMaterial(materialName);
|
||||||
if (mat == null) {
|
if (mat == null) {
|
||||||
reason.add("Potion format for Treasures.yml has changed");
|
reason.add("Potion format for " + FILENAME + " has changed");
|
||||||
} else {
|
} else {
|
||||||
item = new ItemStack(mat, amount, data);
|
item = new ItemStack(mat, amount, data);
|
||||||
PotionMeta itemMeta = (PotionMeta) item.getItemMeta();
|
PotionMeta itemMeta = (PotionMeta) item.getItemMeta();
|
||||||
@ -247,16 +200,7 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (noErrorsInConfig(reason)) {
|
if (noErrorsInConfig(reason)) {
|
||||||
if (isFishing) {
|
if (isExcavation) {
|
||||||
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) {
|
|
||||||
ExcavationTreasure excavationTreasure = new ExcavationTreasure(item, xp, dropChance, dropLevel);
|
ExcavationTreasure excavationTreasure = new ExcavationTreasure(item, xp, dropChance, dropLevel);
|
||||||
List<String> dropList = config.getStringList(type + "." + treasureName + ".Drops_From");
|
List<String> dropList = config.getStringList(type + "." + treasureName + ".Drops_From");
|
||||||
|
|
||||||
@ -309,36 +253,6 @@ public class TreasureConfig extends ConfigLoader {
|
|||||||
hylianMap.get(dropper).add(treasure);
|
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() {
|
public boolean getInventoryStealEnabled() {
|
||||||
return config.contains("Shake.PLAYER.INVENTORY");
|
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 com.gmail.nossr50.util.sounds.SoundType;
|
||||||
import net.kyori.adventure.identity.Identified;
|
import net.kyori.adventure.identity.Identified;
|
||||||
import net.kyori.adventure.identity.Identity;
|
import net.kyori.adventure.identity.Identity;
|
||||||
import org.apache.commons.lang.Validate;
|
|
||||||
import org.bukkit.GameMode;
|
import org.bukkit.GameMode;
|
||||||
import org.bukkit.Location;
|
import org.bukkit.Location;
|
||||||
import org.bukkit.block.Block;
|
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;
|
package com.gmail.nossr50.datatypes.treasure;
|
||||||
|
|
||||||
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
public enum Rarity {
|
public enum Rarity {
|
||||||
RECORD,
|
MYTHIC,
|
||||||
LEGENDARY,
|
LEGENDARY,
|
||||||
EPIC,
|
EPIC,
|
||||||
RARE,
|
RARE,
|
||||||
UNCOMMON,
|
UNCOMMON,
|
||||||
COMMON;
|
COMMON;
|
||||||
|
|
||||||
public static Rarity getRarity(String string) {
|
public static @NotNull Rarity getRarity(@NotNull String string) {
|
||||||
try {
|
try {
|
||||||
return valueOf(string);
|
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.alchemy.PotionConfig;
|
||||||
import com.gmail.nossr50.config.skills.repair.RepairConfigManager;
|
import com.gmail.nossr50.config.skills.repair.RepairConfigManager;
|
||||||
import com.gmail.nossr50.config.skills.salvage.SalvageConfigManager;
|
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.config.treasure.TreasureConfig;
|
||||||
import com.gmail.nossr50.database.DatabaseManager;
|
import com.gmail.nossr50.database.DatabaseManager;
|
||||||
import com.gmail.nossr50.database.DatabaseManagerFactory;
|
import com.gmail.nossr50.database.DatabaseManagerFactory;
|
||||||
@ -517,6 +518,7 @@ public class mcMMO extends JavaPlugin {
|
|||||||
private void loadConfigFiles() {
|
private void loadConfigFiles() {
|
||||||
// Force the loading of config files
|
// Force the loading of config files
|
||||||
TreasureConfig.getInstance();
|
TreasureConfig.getInstance();
|
||||||
|
FishingTreasureConfig.getInstance();
|
||||||
HiddenConfig.getInstance();
|
HiddenConfig.getInstance();
|
||||||
AdvancedConfig.getInstance();
|
AdvancedConfig.getInstance();
|
||||||
PotionConfig.getInstance();
|
PotionConfig.getInstance();
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.gmail.nossr50.skills.fishing;
|
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.datatypes.treasure.ShakeTreasure;
|
||||||
import com.gmail.nossr50.util.Misc;
|
import com.gmail.nossr50.util.Misc;
|
||||||
import com.gmail.nossr50.util.adapter.BiomeAdapter;
|
import com.gmail.nossr50.util.adapter.BiomeAdapter;
|
||||||
@ -31,8 +31,8 @@ public final class Fishing {
|
|||||||
* @return possibleDrops List of ItemStack that can be dropped
|
* @return possibleDrops List of ItemStack that can be dropped
|
||||||
*/
|
*/
|
||||||
protected static List<ShakeTreasure> findPossibleDrops(LivingEntity target) {
|
protected static List<ShakeTreasure> findPossibleDrops(LivingEntity target) {
|
||||||
if (TreasureConfig.getInstance().shakeMap.containsKey(target.getType()))
|
if (FishingTreasureConfig.getInstance().shakeMap.containsKey(target.getType()))
|
||||||
return TreasureConfig.getInstance().shakeMap.get(target.getType());
|
return FishingTreasureConfig.getInstance().shakeMap.get(target.getType());
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -4,16 +4,14 @@ import com.gmail.nossr50.api.ItemSpawnReason;
|
|||||||
import com.gmail.nossr50.config.AdvancedConfig;
|
import com.gmail.nossr50.config.AdvancedConfig;
|
||||||
import com.gmail.nossr50.config.Config;
|
import com.gmail.nossr50.config.Config;
|
||||||
import com.gmail.nossr50.config.experience.ExperienceConfig;
|
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.config.treasure.TreasureConfig;
|
||||||
import com.gmail.nossr50.datatypes.experience.XPGainReason;
|
import com.gmail.nossr50.datatypes.experience.XPGainReason;
|
||||||
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
import com.gmail.nossr50.datatypes.interactions.NotificationType;
|
||||||
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
import com.gmail.nossr50.datatypes.player.McMMOPlayer;
|
||||||
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
import com.gmail.nossr50.datatypes.skills.PrimarySkillType;
|
||||||
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
import com.gmail.nossr50.datatypes.skills.SubSkillType;
|
||||||
import com.gmail.nossr50.datatypes.treasure.EnchantmentTreasure;
|
import com.gmail.nossr50.datatypes.treasure.*;
|
||||||
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.events.skills.fishing.McMMOPlayerFishingTreasureEvent;
|
import com.gmail.nossr50.events.skills.fishing.McMMOPlayerFishingTreasureEvent;
|
||||||
import com.gmail.nossr50.events.skills.fishing.McMMOPlayerShakeEvent;
|
import com.gmail.nossr50.events.skills.fishing.McMMOPlayerShakeEvent;
|
||||||
import com.gmail.nossr50.locale.LocaleLoader;
|
import com.gmail.nossr50.locale.LocaleLoader;
|
||||||
@ -40,10 +38,12 @@ import org.bukkit.entity.*;
|
|||||||
import org.bukkit.event.entity.EntityDamageEvent;
|
import org.bukkit.event.entity.EntityDamageEvent;
|
||||||
import org.bukkit.inventory.ItemStack;
|
import org.bukkit.inventory.ItemStack;
|
||||||
import org.bukkit.inventory.PlayerInventory;
|
import org.bukkit.inventory.PlayerInventory;
|
||||||
|
import org.bukkit.inventory.meta.ItemMeta;
|
||||||
import org.bukkit.inventory.meta.SkullMeta;
|
import org.bukkit.inventory.meta.SkullMeta;
|
||||||
import org.bukkit.util.BoundingBox;
|
import org.bukkit.util.BoundingBox;
|
||||||
import org.bukkit.util.Vector;
|
import org.bukkit.util.Vector;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
import org.jetbrains.annotations.Nullable;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@ -370,9 +370,7 @@ public class FishingManager extends SkillManager {
|
|||||||
return AdvancedConfig.getInstance().getFishingBoatReductionMaxWaitTicks();
|
return AdvancedConfig.getInstance().getFishingBoatReductionMaxWaitTicks();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isMagicHunterEnabled() {
|
||||||
public boolean isMagicHunterEnabled()
|
|
||||||
{
|
|
||||||
return RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.FISHING_MAGIC_HUNTER)
|
return RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.FISHING_MAGIC_HUNTER)
|
||||||
&& RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.FISHING_TREASURE_HUNTER)
|
&& RankUtils.hasUnlockedSubskill(getPlayer(), SubSkillType.FISHING_TREASURE_HUNTER)
|
||||||
&& Permissions.isSubSkillEnabled(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
|
* @param fishingCatch The {@link Item} initially caught
|
||||||
*/
|
*/
|
||||||
public void handleFishing(Item fishingCatch) {
|
public void handleFishing(@NotNull Item fishingCatch) {
|
||||||
this.fishingCatch = fishingCatch;
|
this.fishingCatch = fishingCatch;
|
||||||
int fishXp = ExperienceConfig.getInstance().getXp(PrimarySkillType.FISHING, fishingCatch.getItemStack().getType());
|
int fishXp = ExperienceConfig.getInstance().getXp(PrimarySkillType.FISHING, fishingCatch.getItemStack().getType());
|
||||||
int treasureXp = 0;
|
int treasureXp = 0;
|
||||||
|
ItemStack treasureDrop = null;
|
||||||
Player player = getPlayer();
|
Player player = getPlayer();
|
||||||
FishingTreasure treasure = null;
|
FishingTreasure treasure = null;
|
||||||
|
boolean fishingSucceeds = false;
|
||||||
|
|
||||||
if (Config.getInstance().getFishingDropsEnabled() && Permissions.isSubSkillEnabled(player, SubSkillType.FISHING_TREASURE_HUNTER)) {
|
if (Config.getInstance().getFishingDropsEnabled() && Permissions.isSubSkillEnabled(player, SubSkillType.FISHING_TREASURE_HUNTER)) {
|
||||||
treasure = getFishingTreasure();
|
treasure = getFishingTreasure();
|
||||||
@ -396,30 +396,45 @@ public class FishingManager extends SkillManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (treasure != null) {
|
if (treasure != null) {
|
||||||
ItemStack treasureDrop = treasure.getDrop().clone(); // Not cloning is bad, m'kay?
|
if(treasure instanceof FishingTreasureBook) {
|
||||||
Map<Enchantment, Integer> enchants = new HashMap<>();
|
treasureDrop = createEnchantBook((FishingTreasureBook) treasure);
|
||||||
|
} else {
|
||||||
|
treasureDrop = treasure.getDrop().clone(); // Not cloning is bad, m'kay?
|
||||||
|
|
||||||
if (isMagicHunterEnabled()
|
}
|
||||||
&& ItemUtils.isEnchantable(treasureDrop)) {
|
Map<Enchantment, Integer> enchants = new HashMap<>();
|
||||||
enchants = handleMagicHunter(treasureDrop);
|
McMMOPlayerFishingTreasureEvent event;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Books get some special treatment
|
||||||
|
*/
|
||||||
|
if(treasure instanceof FishingTreasureBook) {
|
||||||
|
//Skip the magic hunter stuff
|
||||||
|
if(treasureDrop.getItemMeta() != null) {
|
||||||
|
enchants.putAll(treasureDrop.getItemMeta().getEnchants());
|
||||||
}
|
}
|
||||||
|
|
||||||
McMMOPlayerFishingTreasureEvent event = EventUtils.callFishingTreasureEvent(player, treasureDrop, treasure.getXp(), enchants);
|
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()) {
|
if (!event.isCancelled()) {
|
||||||
treasureDrop = event.getTreasure();
|
treasureDrop = event.getTreasure();
|
||||||
treasureXp = event.getXp();
|
treasureXp = event.getXp();
|
||||||
}
|
|
||||||
else {
|
|
||||||
treasureDrop = null;
|
|
||||||
treasureXp = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Drop the original catch at the feet of the player and set the treasure as the real catch
|
// Drop the original catch at the feet of the player and set the treasure as the real catch
|
||||||
if (treasureDrop != null) {
|
if (treasureDrop != null) {
|
||||||
|
fishingSucceeds = true;
|
||||||
boolean enchanted = false;
|
boolean enchanted = false;
|
||||||
|
|
||||||
if (!enchants.isEmpty()) {
|
if(treasure instanceof FishingTreasureBook) {
|
||||||
|
enchanted = true;
|
||||||
|
} else if (!enchants.isEmpty()) {
|
||||||
treasureDrop.addUnsafeEnchantments(enchants);
|
treasureDrop.addUnsafeEnchantments(enchants);
|
||||||
enchanted = true;
|
enchanted = true;
|
||||||
}
|
}
|
||||||
@ -428,17 +443,45 @@ public class FishingManager extends SkillManager {
|
|||||||
NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE, "Fishing.Ability.TH.MagicFound");
|
NotificationManager.sendPlayerInformation(player, NotificationType.SUBSKILL_MESSAGE, "Fishing.Ability.TH.MagicFound");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Config.getInstance().getFishingExtraFish()) {
|
}
|
||||||
Misc.spawnItem(player.getEyeLocation(), fishingCatch.getItemStack(), ItemSpawnReason.FISHING_EXTRA_FISH);
|
} else {
|
||||||
|
treasureDrop = null;
|
||||||
|
treasureXp = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(fishingSucceeds) {
|
||||||
fishingCatch.setItemStack(treasureDrop);
|
fishingCatch.setItemStack(treasureDrop);
|
||||||
|
|
||||||
|
if (Config.getInstance().getFishingExtraFish()) {
|
||||||
|
Misc.spawnItem(player.getEyeLocation(), fishingCatch.getItemStack(), ItemSpawnReason.FISHING_EXTRA_FISH);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
applyXpGain(fishXp + treasureXp, XPGainReason.PVE);
|
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
|
* 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.
|
* @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;
|
double diceRoll = Misc.getRandom().nextDouble() * 100;
|
||||||
int luck;
|
int luck;
|
||||||
|
|
||||||
@ -569,12 +612,8 @@ public class FishingManager extends SkillManager {
|
|||||||
double dropRate = TreasureConfig.getInstance().getItemDropRate(getLootTier(), rarity);
|
double dropRate = TreasureConfig.getInstance().getItemDropRate(getLootTier(), rarity);
|
||||||
|
|
||||||
if (diceRoll <= dropRate) {
|
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()) {
|
if (fishingTreasures.isEmpty()) {
|
||||||
return null;
|
return null;
|
||||||
@ -612,19 +651,14 @@ public class FishingManager extends SkillManager {
|
|||||||
* Process the Magic Hunter ability
|
* Process the Magic Hunter ability
|
||||||
*
|
*
|
||||||
* @param treasureDrop The {@link ItemStack} to enchant
|
* @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<>();
|
Map<Enchantment, Integer> enchants = new HashMap<>();
|
||||||
List<EnchantmentTreasure> fishingEnchantments = null;
|
List<EnchantmentTreasure> fishingEnchantments = null;
|
||||||
|
|
||||||
double diceRoll = Misc.getRandom().nextDouble() * 100;
|
double diceRoll = Misc.getRandom().nextDouble() * 100;
|
||||||
|
|
||||||
for (Rarity rarity : Rarity.values()) {
|
for (Rarity rarity : Rarity.values()) {
|
||||||
if (rarity == Rarity.RECORD) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
double dropRate = TreasureConfig.getInstance().getEnchantmentDropRate(getLootTier(), rarity);
|
double dropRate = TreasureConfig.getInstance().getEnchantmentDropRate(getLootTier(), rarity);
|
||||||
|
|
||||||
@ -634,7 +668,8 @@ public class FishingManager extends SkillManager {
|
|||||||
diceRoll = dropRate + 1;
|
diceRoll = dropRate + 1;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
fishingEnchantments = TreasureConfig.getInstance().fishingEnchantments.get(rarity);
|
|
||||||
|
fishingEnchantments = FishingTreasureConfig.getInstance().fishingEnchantments.get(rarity);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package com.gmail.nossr50.util;
|
package com.gmail.nossr50.util;
|
||||||
|
|
||||||
import com.gmail.nossr50.config.Config;
|
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.XPGainReason;
|
||||||
import com.gmail.nossr50.datatypes.experience.XPGainSource;
|
import com.gmail.nossr50.datatypes.experience.XPGainSource;
|
||||||
import com.gmail.nossr50.datatypes.party.Party;
|
import com.gmail.nossr50.datatypes.party.Party;
|
||||||
|
@ -142,6 +142,15 @@ public final class CommandRegistrationManager {
|
|||||||
command.setExecutor(new McgodCommand());
|
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() {
|
private static void registerMmoInfoCommand() {
|
||||||
PluginCommand command = mcMMO.p.getCommand("mmoinfo");
|
PluginCommand command = mcMMO.p.getCommand("mmoinfo");
|
||||||
command.setDescription(LocaleLoader.getString("Commands.Description.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.Description = Angle verschiedene Objekte
|
||||||
Fishing.SubSkill.TreasureHunter.Name = Schatz J\u00E4ger
|
Fishing.SubSkill.TreasureHunter.Name = Schatz J\u00E4ger
|
||||||
Fishing.SubSkill.TreasureHunter.Stat = Schatz J\u00E4ger Rang: &a{0}&3/&a{1}
|
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.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.
|
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.Name=Treasure Hunter
|
||||||
Fishing.SubSkill.TreasureHunter.Description=Fish up misc. objects
|
Fishing.SubSkill.TreasureHunter.Description=Fish up misc. objects
|
||||||
Fishing.SubSkill.TreasureHunter.Stat=Treasure Hunter Rank: &a{0}&3/&a{1}
|
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.Name=Magic Hunter
|
||||||
Fishing.SubSkill.MagicHunter.Description=Find Enchanted Items
|
Fishing.SubSkill.MagicHunter.Description=Find Enchanted Items
|
||||||
Fishing.SubSkill.MagicHunter.Stat=Magic Hunter Chance
|
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.Name=Chasseur de tr\u00e9sors
|
||||||
Fishing.SubSkill.TreasureHunter.Description=Remonte des objets inhabituels
|
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=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.Name=P\u00eache magique
|
||||||
Fishing.SubSkill.MagicHunter.Description=Remonte des objets magiques
|
Fishing.SubSkill.MagicHunter.Description=Remonte des objets magiques
|
||||||
Fishing.SubSkill.MagicHunter.Stat=Chance du chasseur de tr\u00e9sor
|
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.Name=Kincsvad\u00E1sz
|
||||||
Fishing.SubSkill.TreasureHunter.Description=Furcsa t\u00E1rgyak kihal\u00E1sz\u00E1sa
|
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=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.Name=M\u00E1gikus Vad\u00E1sz
|
||||||
Fishing.SubSkill.MagicHunter.Description=Elvar\u00E1zsolt T\u00E1rgyak Megtal\u00E1l\u00E1sa
|
Fishing.SubSkill.MagicHunter.Description=Elvar\u00E1zsolt T\u00E1rgyak Megtal\u00E1l\u00E1sa
|
||||||
Fishing.SubSkill.MagicHunter.Stat=Es\u00E9ly M\u00E1gikus Vad\u00E1szra
|
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.Name=Cacciatore di Tesori
|
||||||
Fishing.SubSkill.TreasureHunter.Description=Pesca oggetti vari
|
Fishing.SubSkill.TreasureHunter.Description=Pesca oggetti vari
|
||||||
Fishing.SubSkill.TreasureHunter.Stat=Grado Cacciatore di Tesori: &a{0}&3/&a{1}
|
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.Name=Cacciatore di Magia
|
||||||
Fishing.SubSkill.MagicHunter.Description=Trova Oggetti Incantati
|
Fishing.SubSkill.MagicHunter.Description=Trova Oggetti Incantati
|
||||||
Fishing.SubSkill.MagicHunter.Stat=Possibilit\u00E0 Cacciatore di Magia
|
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.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.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=\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.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.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
|
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.Name=Lobių ieškotojas
|
||||||
Fishing.SubSkill.TreasureHunter.Description=Fish up misc. objects
|
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=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.Name=Magiškas žvejys
|
||||||
Fishing.SubSkill.MagicHunter.Description=Find Enchanted Items
|
Fishing.SubSkill.MagicHunter.Description=Find Enchanted Items
|
||||||
Fishing.SubSkill.MagicHunter.Stat=Magic Hunter Chance
|
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.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.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=\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.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.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
|
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.Name=\u6dd8\u91d1\u8005
|
||||||
Fishing.SubSkill.TreasureHunter.Description=\u9493\u51fa\u5404\u79cd\u5404\u6837\u7684\u7269\u54c1
|
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=\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.Name=\u9b54\u6cd5\u730e\u4eba
|
||||||
Fishing.SubSkill.MagicHunter.Description=\u627e\u5230\u9644\u9b54\u7269\u54c1
|
Fishing.SubSkill.MagicHunter.Description=\u627e\u5230\u9644\u9b54\u7269\u54c1
|
||||||
Fishing.SubSkill.MagicHunter.Stat=\u9b54\u6cd5\u730e\u4eba\u51e0\u7387
|
Fishing.SubSkill.MagicHunter.Stat=\u9b54\u6cd5\u730e\u4eba\u51e0\u7387
|
||||||
|
@ -19,6 +19,9 @@ load: POSTWORLD
|
|||||||
api-version: 1.13
|
api-version: 1.13
|
||||||
|
|
||||||
commands:
|
commands:
|
||||||
|
# mmodroptreasures:
|
||||||
|
# description: An admin command used to spawn treasure drops
|
||||||
|
# permission: mcmmo.commands.droptreasures
|
||||||
mmoxpbar:
|
mmoxpbar:
|
||||||
aliases: xpbarsettings
|
aliases: xpbarsettings
|
||||||
description: Change XP bar settings
|
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
|
# Settings for Excavation's Archaeology
|
||||||
# If you are in retro mode, Drop_Level is multiplied by 10.
|
# If you are in retro mode, Drop_Level is multiplied by 10.
|
||||||
###
|
###
|
||||||
@ -631,334 +188,3 @@ Hylian_Luck:
|
|||||||
Drop_Chance: 100.0
|
Drop_Chance: 100.0
|
||||||
Drop_Level: 0
|
Drop_Level: 0
|
||||||
Drops_From: [Pots]
|
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
|
|
||||||
|
Loading…
Reference in New Issue
Block a user