From 875091a1ce997f128e3b37c347b53125d35fb365 Mon Sep 17 00:00:00 2001 From: GJ Date: Thu, 11 Apr 2013 21:40:09 -0400 Subject: [PATCH] Added ability to configure drops from Shake in treasures.yml --- Changelog.txt | 1 + .../config/treasure/TreasureConfig.java | 170 +++++- .../datatypes/treasure/ShakeTreasure.java | 21 + .../gmail/nossr50/skills/fishing/Fishing.java | 112 +--- .../skills/fishing/FishingManager.java | 9 +- src/main/resources/treasures.yml | 572 +++++++++++++++++- 6 files changed, 794 insertions(+), 91 deletions(-) create mode 100644 src/main/java/com/gmail/nossr50/datatypes/treasure/ShakeTreasure.java diff --git a/Changelog.txt b/Changelog.txt index 29271bd1d..cab987e30 100644 --- a/Changelog.txt +++ b/Changelog.txt @@ -8,6 +8,7 @@ Key: - Removal Version 1.4.06-dev + + Added ability to configure drops from Shake in treasures.yml + Added "Master Angler" ability to Fishing. + Added health display for mobs during combat. + Added new API method to McMMOPlayerLevelUpEvent to set levels gained diff --git a/src/main/java/com/gmail/nossr50/config/treasure/TreasureConfig.java b/src/main/java/com/gmail/nossr50/config/treasure/TreasureConfig.java index 32f1a3ca1..38ff89a62 100644 --- a/src/main/java/com/gmail/nossr50/config/treasure/TreasureConfig.java +++ b/src/main/java/com/gmail/nossr50/config/treasure/TreasureConfig.java @@ -9,13 +9,17 @@ import java.util.Set; import org.bukkit.Material; import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.entity.EntityType; import org.bukkit.inventory.ItemStack; import org.bukkit.material.MaterialData; +import org.bukkit.potion.Potion; +import org.bukkit.potion.PotionType; import com.gmail.nossr50.config.ConfigLoader; import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure; import com.gmail.nossr50.datatypes.treasure.FishingTreasure; import com.gmail.nossr50.datatypes.treasure.HylianTreasure; +import com.gmail.nossr50.datatypes.treasure.ShakeTreasure; import com.gmail.nossr50.datatypes.treasure.Treasure; public class TreasureConfig extends ConfigLoader { @@ -33,6 +37,27 @@ public class TreasureConfig extends ConfigLoader { public List hylianFromFlowers = new ArrayList(); public List hylianFromPots = new ArrayList(); + public List shakeFromBlaze = new ArrayList(); + public List shakeFromCaveSpider = new ArrayList(); + public List shakeFromSpider = new ArrayList(); + public List shakeFromChicken = new ArrayList(); + public List shakeFromCow = new ArrayList(); + public List shakeFromCreeper = new ArrayList(); + public List shakeFromEnderman = new ArrayList(); + public List shakeFromGhast = new ArrayList(); + public List shakeFromIronGolem = new ArrayList(); + public List shakeFromMagmaCube = new ArrayList(); + public List shakeFromMushroomCow = new ArrayList(); + public List shakeFromPig = new ArrayList(); + public List shakeFromPigZombie = new ArrayList(); + public List shakeFromSheep = new ArrayList(); + public List shakeFromSkeleton = new ArrayList(); + public List shakeFromSlime = new ArrayList(); + public List shakeFromSnowman = new ArrayList(); + public List shakeFromSquid = new ArrayList(); + public List shakeFromWitch = new ArrayList(); + public List shakeFromZombie = new ArrayList(); + public List fishingRewards = new ArrayList(); private TreasureConfig() { @@ -128,15 +153,32 @@ public class TreasureConfig extends ConfigLoader { reason.add("Invalid Drop_Level: " + dropLevel); } + /* + * Potions + */ + + ItemStack item = null; + + if (config.contains("Treasures." + treasureName + ".Potion_Type")) { + String potionType = config.getString("Treasures." + treasureName + ".Potion_Type"); + try { + item = new Potion(PotionType.valueOf(potionType.toUpperCase())).toItemStack(amount); + } + catch (IllegalArgumentException ex) { + reason.add("Invalid Potion_Type: " + potionType); + } + } + else { + item = (new MaterialData(id, (byte) data)).toItemStack(amount); + } + /* * Drops From & Max Level */ - ItemStack item = (new MaterialData(id, (byte) data)).toItemStack(amount); - if (config.getBoolean("Treasures." + treasureName + ".Drops_From.Fishing", false)) { if (config.getConfigurationSection("Treasures." + treasureName + ".Drops_From").getKeys(false).size() != 1) { - reason.add("Fishing drops cannot also be excavation drops"); + reason.add("This can only be a fishing drop."); } if (!config.contains("Treasures." + treasureName + ".Max_Level")) { @@ -150,6 +192,30 @@ public class TreasureConfig extends ConfigLoader { treasures.put(treasureName, fTreasure); } } + else if (config.getBoolean("Treasures." + treasureName + "Drops_From.Shake", false)) { + if (config.getConfigurationSection("Treasures." + treasureName + ".Drops_From").getKeys(false).size() != 1) { + reason.add("This can only be a shake drop."); + } + + if (!config.contains("Treasures." + treasureName + ".Mob")) { + reason.add("Missing Mob"); + } + + String mobType = config.getString("Treasures." + treasureName + ".Mob"); + EntityType mob = null; + + try { + mob = EntityType.valueOf(mobType.toUpperCase().trim()); + } + catch (IllegalArgumentException ex){ + reason.add("Invalid Mob: " + mobType); + } + + if (noErrorsInTreasure(reason)) { + ShakeTreasure sTreasure = new ShakeTreasure(item, xp, dropChance, dropLevel, mob); + treasures.put(treasureName, sTreasure); + } + } else { ExcavationTreasure eTreasure = new ExcavationTreasure(item, xp, dropChance, dropLevel); HylianTreasure hTreasure = new HylianTreasure(item, xp, dropChance, dropLevel); @@ -195,7 +261,11 @@ public class TreasureConfig extends ConfigLoader { } if (config.getBoolean("Treasures." + treasureName + ".Drops_From.Fishing", false)) { - reason.add("Excavation drops cannot also be fishing drops"); + reason.add("This cannot also be a fishing drop."); + } + + if (config.getBoolean("Treasures." + treasureName + ".Drops_From.Shake", false)) { + reason.add("This cannot also be a shake drop."); } if (noErrorsInTreasure(reason) && hTreasure.getDropsFrom() == (byte) 0x0) { @@ -210,6 +280,7 @@ public class TreasureConfig extends ConfigLoader { List excavationTreasures = config.getStringList("Excavation.Treasure"); List fishingTreasures = config.getStringList("Fishing.Treasure"); List hylianTreasures = config.getStringList("Hylian_Luck.Treasure"); + List shakeTreasures = config.getStringList("Shake.Treasure"); for (Entry nextEntry : treasures.entrySet()) { String treasureKey = nextEntry.getKey(); @@ -222,6 +293,97 @@ public class TreasureConfig extends ConfigLoader { fishingRewards.add((FishingTreasure) treasure); } + else if (treasure instanceof ShakeTreasure) { + if (shakeTreasures == null || !shakeTreasures.contains(treasureKey)) { + continue; + } + + ShakeTreasure e = (ShakeTreasure) treasure; + switch (e.getMob()) { + case BLAZE: + shakeFromBlaze.add(e); + break; + + case CAVE_SPIDER: + shakeFromCaveSpider.add(e); + break; + + case CHICKEN: + shakeFromChicken.add(e); + break; + + case COW: + shakeFromCow.add(e); + break; + + case CREEPER: + shakeFromCreeper.add(e); + break; + + case ENDERMAN: + shakeFromEnderman.add(e); + break; + + case GHAST: + shakeFromGhast.add(e); + break; + + case IRON_GOLEM: + shakeFromIronGolem.add(e); + break; + + case MAGMA_CUBE: + shakeFromMagmaCube.add(e); + break; + + case MUSHROOM_COW: + shakeFromMushroomCow.add(e); + break; + + case PIG: + shakeFromPig.add(e); + break; + + case PIG_ZOMBIE: + shakeFromPigZombie.add(e); + break; + + case SHEEP: + shakeFromSheep.add(e); + break; + + case SKELETON: + shakeFromSkeleton.add(e); + break; + + case SLIME: + shakeFromSlime.add(e); + break; + + case SPIDER: + shakeFromSpider.add(e); + break; + + case SNOWMAN: + shakeFromSnowman.add(e); + break; + + case SQUID: + shakeFromSquid.add(e); + break; + + case WITCH: + shakeFromWitch.add(e); + break; + + case ZOMBIE: + shakeFromZombie.add(e); + break; + + default: + break; + } + } else if (treasure instanceof HylianTreasure) { if (hylianTreasures == null || !hylianTreasures.contains(treasureKey)) { continue; diff --git a/src/main/java/com/gmail/nossr50/datatypes/treasure/ShakeTreasure.java b/src/main/java/com/gmail/nossr50/datatypes/treasure/ShakeTreasure.java new file mode 100644 index 000000000..8c77a621e --- /dev/null +++ b/src/main/java/com/gmail/nossr50/datatypes/treasure/ShakeTreasure.java @@ -0,0 +1,21 @@ +package com.gmail.nossr50.datatypes.treasure; + +import org.bukkit.entity.EntityType; +import org.bukkit.inventory.ItemStack; + +public class ShakeTreasure extends Treasure { + private EntityType mob; + + public ShakeTreasure(ItemStack drop, int xp, double dropChance, int dropLevel, EntityType mob) { + super(drop, xp, dropChance, dropLevel); + this.mob = mob; + } + + public EntityType getMob() { + return mob; + } + + public void setMob(EntityType mob) { + this.mob = mob; + } +} diff --git a/src/main/java/com/gmail/nossr50/skills/fishing/Fishing.java b/src/main/java/com/gmail/nossr50/skills/fishing/Fishing.java index 842c80246..11b1bb576 100644 --- a/src/main/java/com/gmail/nossr50/skills/fishing/Fishing.java +++ b/src/main/java/com/gmail/nossr50/skills/fishing/Fishing.java @@ -1,16 +1,13 @@ package com.gmail.nossr50.skills.fishing; -import java.util.Map; -import java.util.Map.Entry; +import java.util.List; -import org.bukkit.DyeColor; -import org.bukkit.Material; import org.bukkit.entity.LivingEntity; import org.bukkit.inventory.ItemStack; -import org.bukkit.potion.Potion; -import org.bukkit.potion.PotionType; import com.gmail.nossr50.config.AdvancedConfig; +import com.gmail.nossr50.config.treasure.TreasureConfig; +import com.gmail.nossr50.datatypes.treasure.ShakeTreasure; import com.gmail.nossr50.util.Misc; public final class Fishing { @@ -66,115 +63,70 @@ public final class Fishing { * @param target Targeted entity * @param possibleDrops List of ItemStack that can be dropped */ - protected static void findPossibleDrops(LivingEntity target, Map possibleDrops) { + protected static List findPossibleDrops(LivingEntity target) { switch (target.getType()) { case BLAZE: - possibleDrops.put(new ItemStack(Material.BLAZE_ROD), 100); - break; + return TreasureConfig.getInstance().shakeFromBlaze; case CAVE_SPIDER: - case SPIDER: - possibleDrops.put(new ItemStack(Material.SPIDER_EYE), 50); - possibleDrops.put(new ItemStack(Material.STRING), 50); - break; + return TreasureConfig.getInstance().shakeFromCaveSpider; case CHICKEN: - possibleDrops.put(new ItemStack(Material.FEATHER), 34); - possibleDrops.put(new ItemStack(Material.RAW_CHICKEN), 33); - possibleDrops.put(new ItemStack(Material.EGG), 33); - break; + return TreasureConfig.getInstance().shakeFromChicken; case COW: - possibleDrops.put(new ItemStack(Material.MILK_BUCKET), 2); - possibleDrops.put(new ItemStack(Material.LEATHER), 49); - possibleDrops.put(new ItemStack(Material.RAW_BEEF), 49); - break; + return TreasureConfig.getInstance().shakeFromCow; case CREEPER: - possibleDrops.put(new ItemStack(Material.SKULL_ITEM, 1, (short) 4), 1); - possibleDrops.put(new ItemStack(Material.SULPHUR), 99); - break; + return TreasureConfig.getInstance().shakeFromCreeper; case ENDERMAN: - possibleDrops.put(new ItemStack(Material.ENDER_PEARL), 100); - break; + return TreasureConfig.getInstance().shakeFromEnderman; case GHAST: - possibleDrops.put(new ItemStack(Material.SULPHUR), 50); - possibleDrops.put(new ItemStack(Material.GHAST_TEAR), 50); - break; + return TreasureConfig.getInstance().shakeFromGhast; case IRON_GOLEM: - possibleDrops.put(new ItemStack(Material.PUMPKIN), 3); - possibleDrops.put(new ItemStack(Material.IRON_INGOT), 12); - possibleDrops.put(new ItemStack(Material.RED_ROSE), 85); - break; + return TreasureConfig.getInstance().shakeFromIronGolem; case MAGMA_CUBE: - possibleDrops.put(new ItemStack(Material.MAGMA_CREAM), 100); - break; + return TreasureConfig.getInstance().shakeFromMagmaCube; case MUSHROOM_COW: - possibleDrops.put(new ItemStack(Material.MILK_BUCKET), 5); - possibleDrops.put(new ItemStack(Material.MUSHROOM_SOUP), 5); - possibleDrops.put(new ItemStack(Material.LEATHER), 30); - possibleDrops.put(new ItemStack(Material.RAW_BEEF), 30); - possibleDrops.put(new ItemStack(Material.RED_MUSHROOM, Misc.getRandom().nextInt(3) + 1), 30); - break; + return TreasureConfig.getInstance().shakeFromMushroomCow; case PIG: - possibleDrops.put(new ItemStack(Material.PORK), 100); - break; + return TreasureConfig.getInstance().shakeFromPig; case PIG_ZOMBIE: - possibleDrops.put(new ItemStack(Material.ROTTEN_FLESH), 50); - possibleDrops.put(new ItemStack(Material.GOLD_NUGGET), 50); - break; + return TreasureConfig.getInstance().shakeFromPigZombie; case SHEEP: - possibleDrops.put(new ItemStack(Material.WOOL, Misc.getRandom().nextInt(6) + 1), 100); - break; + return TreasureConfig.getInstance().shakeFromSheep; case SKELETON: - possibleDrops.put(new ItemStack(Material.SKULL_ITEM, 1, (short) 0), 2); - possibleDrops.put(new ItemStack(Material.BONE), 49); - possibleDrops.put(new ItemStack(Material.ARROW, Misc.getRandom().nextInt(3) + 1), 49); - break; + return TreasureConfig.getInstance().shakeFromSkeleton; case SLIME: - possibleDrops.put(new ItemStack(Material.SLIME_BALL), 100); - break; + return TreasureConfig.getInstance().shakeFromSlime; case SNOWMAN: - possibleDrops.put(new ItemStack(Material.PUMPKIN), 3); - possibleDrops.put(new ItemStack(Material.SNOW_BALL, Misc.getRandom().nextInt(4) + 1), 97); - break; + return TreasureConfig.getInstance().shakeFromSnowman; + + case SPIDER: + return TreasureConfig.getInstance().shakeFromSpider; case SQUID: - possibleDrops.put(new ItemStack(Material.INK_SACK, 1, DyeColor.BLACK.getDyeData()), 100); - break; + return TreasureConfig.getInstance().shakeFromSquid; case WITCH: - possibleDrops.put(new Potion(PotionType.INSTANT_HEAL).toItemStack(1), 1); - possibleDrops.put(new Potion(PotionType.FIRE_RESISTANCE).toItemStack(1), 1); - possibleDrops.put(new Potion(PotionType.SPEED).toItemStack(1), 1); - possibleDrops.put(new ItemStack(Material.GLASS_BOTTLE), 9); - possibleDrops.put(new ItemStack(Material.GLOWSTONE_DUST), 13); - possibleDrops.put(new ItemStack(Material.SULPHUR), 12); - possibleDrops.put(new ItemStack(Material.REDSTONE), 13); - possibleDrops.put(new ItemStack(Material.SPIDER_EYE), 12); - possibleDrops.put(new ItemStack(Material.STICK), 13); - possibleDrops.put(new ItemStack(Material.SUGAR), 12); - possibleDrops.put(new ItemStack(Material.POTION), 13); - break; + return TreasureConfig.getInstance().shakeFromWitch; case ZOMBIE: - possibleDrops.put(new ItemStack(Material.SKULL_ITEM, 1, (short) 2), 2); - possibleDrops.put(new ItemStack(Material.ROTTEN_FLESH), 98); - break; + return TreasureConfig.getInstance().shakeFromZombie; default: - return; + return null; } } @@ -184,15 +136,15 @@ public final class Fishing { * @param possibleDrops List of ItemStack that can be dropped * @return Chosen ItemStack */ - protected static ItemStack chooseDrop(Map possibleDrops) { + protected static ItemStack chooseDrop(List possibleDrops) { int dropProbability = Misc.getRandom().nextInt(100); - int cumulatedProbability = 0; + double cumulatedProbability = 0; - for (Entry entry : possibleDrops.entrySet()) { - cumulatedProbability += entry.getValue(); + for (ShakeTreasure treasure : possibleDrops) { + cumulatedProbability += treasure.getDropChance(); if (dropProbability < cumulatedProbability) { - return entry.getKey(); + return treasure.getDrop(); } } diff --git a/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java b/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java index b9217bce7..f416f61d7 100644 --- a/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java +++ b/src/main/java/com/gmail/nossr50/skills/fishing/FishingManager.java @@ -2,9 +2,7 @@ package com.gmail.nossr50.skills.fishing; import java.util.ArrayList; import java.util.Collections; -import java.util.HashMap; import java.util.List; -import java.util.Map; import org.bukkit.Material; import org.bukkit.enchantments.Enchantment; @@ -24,6 +22,7 @@ import com.gmail.nossr50.config.treasure.TreasureConfig; import com.gmail.nossr50.datatypes.player.McMMOPlayer; import com.gmail.nossr50.datatypes.skills.SkillType; import com.gmail.nossr50.datatypes.treasure.FishingTreasure; +import com.gmail.nossr50.datatypes.treasure.ShakeTreasure; import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.skills.SkillManager; import com.gmail.nossr50.skills.fishing.Fishing.Tier; @@ -144,11 +143,9 @@ public class FishingManager extends SkillManager { */ public void shakeCheck(LivingEntity target) { if (getShakeProbability() > Misc.getRandom().nextInt(getActivationChance())) { - Map possibleDrops = new HashMap(); + List possibleDrops = Fishing.findPossibleDrops(target); - Fishing.findPossibleDrops(target, possibleDrops); - - if (possibleDrops.isEmpty()) { + if (possibleDrops == null || possibleDrops.isEmpty()) { return; } diff --git a/src/main/resources/treasures.yml b/src/main/resources/treasures.yml index f44983eee..8c7833476 100644 --- a/src/main/resources/treasures.yml +++ b/src/main/resources/treasures.yml @@ -100,6 +100,62 @@ Hylian_Luck: - Diamond_Gem - Gold_Nuggets # +# Settings for Shake +### +Shake: + Treasure: + - Blaze_Blaze_Rod + - Cave_Spider_Cobweb + - Cave_Spider_Potion + - Cave_Spider_Spider_Eye + - Cave_Spider_String + - Spider_Spider_Eye + - Spider_String + - Chicken_Feather + - Chicken_Raw_Chicken + - Chicken_Egg + - Cow_Milk_Bucket + - Cow_Leather + - Cow_Raw_Beef + - Creeper_Skull + - Creeper_Sulphur + - Enderman_Ender_Pearl + - Ghast_Sulphur + - Ghast_Ghast_Tear + - Iron_Golem_Pumpkin + - Iron_Golem_Iron_Ingot + - Iron_Golem_Red_Rose + - Magma_Cube_Magma_Cream + - Mushroom_Cow_Milk_Bucket + - Mushroom_Cow_Mushroom_Soup + - Mushroom_Cow_Leather + - Mushroom_Cow_Raw_Beef + - Mushroom_Cow_Red_Mushroom + - Pig_Pork + - Pig_Zombie_Rotten_Flesh + - Pig_Zombie_Gold_Nugget + - Sheep_Wool + - Skeleton_Skull + - Skeleton_Bone + - Skeleton_Arrow + - Slime_Slime_Ball + - Snowman_Pumpkin + - Snowman_Snowball + - Squid_Ink_Sack + - Witch_Heal_Potion + - Witch_Fire_Potion + - Witch_Speed_Potion + - Witch_Glass_Bottle + - Witch_Glowstone_Dust + - Witch_Sulphur + - Witch_Redstone + - Witch_Spider_Eye + - Witch_Stick + - Witch_Sugar + - Witch_Potion + - Zombie_Skull + - Zombie_Rotten_Flesh +# # Configuration to define Treasures ### Treasures: @@ -968,4 +1024,518 @@ Treasures: Drop_Chance: 100.0 Drop_Level: 0 Drops_From: - Pots: true \ No newline at end of file + Pots: true + Blaze_Blaze_Rod: + ID: 369 + Mob: BLAZE + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 100.0 + Drop_Level: 0 + Drops_From: + Shake: true + Cave_Spider_Spider_Eye: + ID: 375 + Mob: CAVE_SPIDER + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 49.0 + Drop_Level: 0 + Drops_From: + Shake: true + Cave_Spider_String: + ID: 287 + Mob: CAVE_SPIDER + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 49.0 + Drop_Level: 0 + Drops_From: + Shake: true + Cave_Spider_Cobweb: + ID: 30 + Mob: CAVE_SPIDER + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 1.0 + Drop_Level: 0 + Drops_From: + Shake: true + Cave_Spider_Potion: + ID: 373 + Mob: CAVE_SPIDER + Potion_Type: POISON + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 1.0 + Drop_Level: 0 + Drops_From: + Shake: true + Spider_Spider_Eye: + ID: 375 + Mob: SPIDER + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 50.0 + Drop_Level: 0 + Drops_From: + Shake: true + Spider_String: + ID: 287 + Mob: SPIDER + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 50.0 + Drop_Level: 0 + Drops_From: + Shake: true + Chicken_Feather: + ID: 288 + Mob: CHICKEN + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 33.3 + Drop_Level: 0 + Drops_From: + Shake: true + Chicken_Raw_Chicken: + ID: 365 + Mob: CHICKEN + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 33.3 + Drop_Level: 0 + Drops_From: + Shake: true + Chicken_Egg: + ID: 344 + Mob: CHICKEN + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 33.3 + Drop_Level: 0 + Drops_From: + Shake: true + Cow_Milk_Bucket: + ID: 335 + Mob: COW + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 2.0 + Drop_Level: 0 + Drops_From: + Shake: true + Cow_Leather: + ID: 334 + Mob: COW + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 49.0 + Drop_Level: 0 + Drops_From: + Shake: true + Cow_Raw_Beef: + ID: 363 + Mob: COW + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 49.0 + Drop_Level: 0 + Drops_From: + Shake: true + Creeper_Skull: + ID: 397 + Mob: CREEPER + Data: 4 + Amount: 1 + XP: 0 + Drop_Chance: 1.0 + Drop_Level: 0 + Drops_From: + Shake: true + Creeper_Sulphur: + ID: 289 + Mob: CREEPER + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 99.0 + Drop_Level: 0 + Drops_From: + Shake: true + Enderman_Ender_Pearl: + ID: 368 + Mob: ENDERMAN + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 100.0 + Drop_Level: 0 + Drops_From: + Shake: true + Ghast_Sulphur: + ID: 289 + Mob: GHAST + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 50.0 + Drop_Level: 0 + Drops_From: + Shake: true + Ghast_Ghast_Tear: + ID: 370 + Mob: GHAST + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 50.0 + Drop_Level: 0 + Drops_From: + Shake: true + Iron_Golem_Pumpkin: + ID: 86 + Mob: IRON_GOLEM + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 3.0 + Drop_Level: 0 + Drops_From: + Shake: true + Iron_Golem_Iron_Ingot: + ID: 265 + Mob: IRON_GOLEM + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 12.0 + Drop_Level: 0 + Drops_From: + Shake: true + Iron_Golem_Red_Rose: + ID: 38 + Mob: IRON_GOLEM + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 85.0 + Drop_Level: 0 + Drops_From: + Shake: true + Magma_Cube_Magma_Cream: + ID: 378 + Mob: MAGMA_CUBE + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 100.0 + Drop_Level: 0 + Drops_From: + Shake: true + Mushroom_Cow_Milk_Bucket: + ID: 335 + Mob: MUSHROOM_COW + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 5.0 + Drop_Level: 0 + Drops_From: + Shake: true + Mushroom_Cow_Mushroom_Soup: + ID: 282 + Mob: MUSHROOM_COW + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 5.0 + Drop_Level: 0 + Drops_From: + Shake: true + Mushroom_Cow_Leather: + ID: 334 + Mob: MUSHROOM_COW + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 30.0 + Drop_Level: 0 + Drops_From: + Shake: true + Mushroom_Cow_Raw_Beef: + ID: 363 + Mob: MUSHROOM_COW + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 30.0 + Drop_Level: 0 + Drops_From: + Shake: true + Mushroom_Cow_Red_Mushroom: + ID: 40 + Mob: MUSHROOM_COW + Data: 0 + Amount: 2 + XP: 0 + Drop_Chance: 30.0 + Drop_Level: 0 + Drops_From: + Shake: true + Pig_Pork: + ID: 319 + Mob: PIG + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 100.0 + Drop_Level: 0 + Drops_From: + Shake: true + Pig_Zombie_Rotten_Flesh: + ID: 367 + Mob: PIG_ZOMBIE + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 50.0 + Drop_Level: 0 + Drops_From: + Shake: true + Pig_Zombie_Gold_Nugget: + ID: 371 + Mob: PIG_ZOMBIE + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 50.0 + Drop_Level: 0 + Drops_From: + Shake: true + Sheep_Wool: + ID: 35 + Mob: SHEEP + Data: 0 + Amount: 3 + XP: 0 + Drop_Chance: 100.0 + Drop_Level: 0 + Drops_From: + Shake: true + Skeleton_Skull: + ID: 397 + Mob: SKELETON + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 2.0 + Drop_Level: 0 + Drops_From: + Shake: true + Skeleton_Bone: + ID: 352 + Mob: SKELETON + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 49.0 + Drop_Level: 0 + Drops_From: + Shake: true + Skeleton_Arrow: + ID: 262 + Mob: SKELETON + Data: 0 + Amount: 2 + XP: 0 + Drop_Chance: 49.0 + Drop_Level: 0 + Drops_From: + Shake: true + Slime_Slime_Ball: + ID: 341 + Mob: SLIME + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 100.0 + Drop_Level: 0 + Drops_From: + Shake: true + Snowman_Pumpkin: + ID: 86 + Mob: SNOWMAN + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 3.0 + Drop_Level: 0 + Drops_From: + Shake: true + Snowman_Snowball: + ID: 341 + Mob: SNOWMAN + Data: 0 + Amount: 2 + XP: 0 + Drop_Chance: 97.0 + Drop_Level: 0 + Drops_From: + Shake: true + Squid_Ink_Sack: + ID: 351 + Mob: SQUID + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 100.0 + Drop_Level: 0 + Drops_From: + Shake: true + Witch_Heal_Potion: + ID: 373 + Mob: WITCH + Potion_Type: INSTANT_HEAL + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 1.0 + Drop_Level: 0 + Drops_From: + Shake: true + Witch_Fire_Potion: + ID: 373 + Mob: WITCH + Potion_Type: FIRE_RESISTANCE + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 1.0 + Drop_Level: 0 + Drops_From: + Shake: true + Witch_Speed_Potion: + ID: 373 + Mob: WITCH + Potion_Type: SPEED + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 1.0 + Drop_Level: 0 + Drops_From: + Shake: true + Witch_Glass_Bottle: + ID: 374 + Mob: WITCH + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 9.0 + Drop_Level: 0 + Drops_From: + Shake: true + Witch_Glowstone_Dust: + ID: 348 + Mob: WITCH + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 13.0 + Drop_Level: 0 + Drops_From: + Shake: true + Witch_Sulphur: + ID: 289 + Mob: WITCH + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 12.0 + Drop_Level: 0 + Drops_From: + Shake: true + Witch_Redstone: + ID: 331 + Mob: WITCH + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 13.0 + Drop_Level: 0 + Drops_From: + Shake: true + Witch_Spider_Eye: + ID: 375 + Mob: WITCH + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 12.0 + Drop_Level: 0 + Drops_From: + Shake: true + Witch_Stick: + ID: 380 + Mob: WITCH + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 13.0 + Drop_Level: 0 + Drops_From: + Shake: true + Witch_Sugar: + ID: 353 + Mob: WITCH + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 12.0 + Drop_Level: 0 + Drops_From: + Shake: true + Witch_Potion: + ID: 373 + Mob: WITCH + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 13.0 + Drop_Level: 0 + Drops_From: + Shake: true + Zombie_Skull: + ID: 397 + Mob: ZOMBIE + Data: 2 + Amount: 1 + XP: 0 + Drop_Chance: 2.0 + Drop_Level: 0 + Drops_From: + Shake: true + Zombie_Rotten_Flesh: + ID: 367 + Mob: ZOMBIE + Data: 0 + Amount: 1 + XP: 0 + Drop_Chance: 98.0 + Drop_Level: 0 + Drops_From: + Shake: true \ No newline at end of file