Added ability to configure drops from Shake in treasures.yml

This commit is contained in:
GJ 2013-04-11 21:40:09 -04:00
parent 5ad7716137
commit 875091a1ce
6 changed files with 794 additions and 91 deletions

View File

@ -8,6 +8,7 @@ Key:
- Removal - Removal
Version 1.4.06-dev Version 1.4.06-dev
+ Added ability to configure drops from Shake in treasures.yml
+ Added "Master Angler" ability to Fishing. + Added "Master Angler" ability to Fishing.
+ Added health display for mobs during combat. + Added health display for mobs during combat.
+ Added new API method to McMMOPlayerLevelUpEvent to set levels gained + Added new API method to McMMOPlayerLevelUpEvent to set levels gained

View File

@ -9,13 +9,17 @@ import java.util.Set;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.configuration.ConfigurationSection; import org.bukkit.configuration.ConfigurationSection;
import org.bukkit.entity.EntityType;
import org.bukkit.inventory.ItemStack; import org.bukkit.inventory.ItemStack;
import org.bukkit.material.MaterialData; 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.config.ConfigLoader;
import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure; import com.gmail.nossr50.datatypes.treasure.ExcavationTreasure;
import com.gmail.nossr50.datatypes.treasure.FishingTreasure; import com.gmail.nossr50.datatypes.treasure.FishingTreasure;
import com.gmail.nossr50.datatypes.treasure.HylianTreasure; import com.gmail.nossr50.datatypes.treasure.HylianTreasure;
import com.gmail.nossr50.datatypes.treasure.ShakeTreasure;
import com.gmail.nossr50.datatypes.treasure.Treasure; import com.gmail.nossr50.datatypes.treasure.Treasure;
public class TreasureConfig extends ConfigLoader { public class TreasureConfig extends ConfigLoader {
@ -33,6 +37,27 @@ public class TreasureConfig extends ConfigLoader {
public List<HylianTreasure> hylianFromFlowers = new ArrayList<HylianTreasure>(); public List<HylianTreasure> hylianFromFlowers = new ArrayList<HylianTreasure>();
public List<HylianTreasure> hylianFromPots = new ArrayList<HylianTreasure>(); public List<HylianTreasure> hylianFromPots = new ArrayList<HylianTreasure>();
public List<ShakeTreasure> shakeFromBlaze = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromCaveSpider = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromSpider = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromChicken = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromCow = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromCreeper = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromEnderman = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromGhast = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromIronGolem = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromMagmaCube = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromMushroomCow = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromPig = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromPigZombie = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromSheep = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromSkeleton = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromSlime = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromSnowman = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromSquid = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromWitch = new ArrayList<ShakeTreasure>();
public List<ShakeTreasure> shakeFromZombie = new ArrayList<ShakeTreasure>();
public List<FishingTreasure> fishingRewards = new ArrayList<FishingTreasure>(); public List<FishingTreasure> fishingRewards = new ArrayList<FishingTreasure>();
private TreasureConfig() { private TreasureConfig() {
@ -128,15 +153,32 @@ public class TreasureConfig extends ConfigLoader {
reason.add("Invalid Drop_Level: " + dropLevel); 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 * Drops From & Max Level
*/ */
ItemStack item = (new MaterialData(id, (byte) data)).toItemStack(amount);
if (config.getBoolean("Treasures." + treasureName + ".Drops_From.Fishing", false)) { if (config.getBoolean("Treasures." + treasureName + ".Drops_From.Fishing", false)) {
if (config.getConfigurationSection("Treasures." + treasureName + ".Drops_From").getKeys(false).size() != 1) { 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")) { if (!config.contains("Treasures." + treasureName + ".Max_Level")) {
@ -150,6 +192,30 @@ public class TreasureConfig extends ConfigLoader {
treasures.put(treasureName, fTreasure); 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 { else {
ExcavationTreasure eTreasure = new ExcavationTreasure(item, xp, dropChance, dropLevel); ExcavationTreasure eTreasure = new ExcavationTreasure(item, xp, dropChance, dropLevel);
HylianTreasure hTreasure = new HylianTreasure(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)) { 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) { if (noErrorsInTreasure(reason) && hTreasure.getDropsFrom() == (byte) 0x0) {
@ -210,6 +280,7 @@ public class TreasureConfig extends ConfigLoader {
List<String> excavationTreasures = config.getStringList("Excavation.Treasure"); List<String> excavationTreasures = config.getStringList("Excavation.Treasure");
List<String> fishingTreasures = config.getStringList("Fishing.Treasure"); List<String> fishingTreasures = config.getStringList("Fishing.Treasure");
List<String> hylianTreasures = config.getStringList("Hylian_Luck.Treasure"); List<String> hylianTreasures = config.getStringList("Hylian_Luck.Treasure");
List<String> shakeTreasures = config.getStringList("Shake.Treasure");
for (Entry<String, Treasure> nextEntry : treasures.entrySet()) { for (Entry<String, Treasure> nextEntry : treasures.entrySet()) {
String treasureKey = nextEntry.getKey(); String treasureKey = nextEntry.getKey();
@ -222,6 +293,97 @@ public class TreasureConfig extends ConfigLoader {
fishingRewards.add((FishingTreasure) treasure); 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) { else if (treasure instanceof HylianTreasure) {
if (hylianTreasures == null || !hylianTreasures.contains(treasureKey)) { if (hylianTreasures == null || !hylianTreasures.contains(treasureKey)) {
continue; continue;

View File

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

View File

@ -1,16 +1,13 @@
package com.gmail.nossr50.skills.fishing; package com.gmail.nossr50.skills.fishing;
import java.util.Map; import java.util.List;
import java.util.Map.Entry;
import org.bukkit.DyeColor;
import org.bukkit.Material;
import org.bukkit.entity.LivingEntity; import org.bukkit.entity.LivingEntity;
import org.bukkit.inventory.ItemStack; 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.AdvancedConfig;
import com.gmail.nossr50.config.treasure.TreasureConfig;
import com.gmail.nossr50.datatypes.treasure.ShakeTreasure;
import com.gmail.nossr50.util.Misc; import com.gmail.nossr50.util.Misc;
public final class Fishing { public final class Fishing {
@ -66,115 +63,70 @@ public final class Fishing {
* @param target Targeted entity * @param target Targeted entity
* @param possibleDrops List of ItemStack that can be dropped * @param possibleDrops List of ItemStack that can be dropped
*/ */
protected static void findPossibleDrops(LivingEntity target, Map<ItemStack, Integer> possibleDrops) { protected static List<ShakeTreasure> findPossibleDrops(LivingEntity target) {
switch (target.getType()) { switch (target.getType()) {
case BLAZE: case BLAZE:
possibleDrops.put(new ItemStack(Material.BLAZE_ROD), 100); return TreasureConfig.getInstance().shakeFromBlaze;
break;
case CAVE_SPIDER: case CAVE_SPIDER:
case SPIDER: return TreasureConfig.getInstance().shakeFromCaveSpider;
possibleDrops.put(new ItemStack(Material.SPIDER_EYE), 50);
possibleDrops.put(new ItemStack(Material.STRING), 50);
break;
case CHICKEN: case CHICKEN:
possibleDrops.put(new ItemStack(Material.FEATHER), 34); return TreasureConfig.getInstance().shakeFromChicken;
possibleDrops.put(new ItemStack(Material.RAW_CHICKEN), 33);
possibleDrops.put(new ItemStack(Material.EGG), 33);
break;
case COW: case COW:
possibleDrops.put(new ItemStack(Material.MILK_BUCKET), 2); return TreasureConfig.getInstance().shakeFromCow;
possibleDrops.put(new ItemStack(Material.LEATHER), 49);
possibleDrops.put(new ItemStack(Material.RAW_BEEF), 49);
break;
case CREEPER: case CREEPER:
possibleDrops.put(new ItemStack(Material.SKULL_ITEM, 1, (short) 4), 1); return TreasureConfig.getInstance().shakeFromCreeper;
possibleDrops.put(new ItemStack(Material.SULPHUR), 99);
break;
case ENDERMAN: case ENDERMAN:
possibleDrops.put(new ItemStack(Material.ENDER_PEARL), 100); return TreasureConfig.getInstance().shakeFromEnderman;
break;
case GHAST: case GHAST:
possibleDrops.put(new ItemStack(Material.SULPHUR), 50); return TreasureConfig.getInstance().shakeFromGhast;
possibleDrops.put(new ItemStack(Material.GHAST_TEAR), 50);
break;
case IRON_GOLEM: case IRON_GOLEM:
possibleDrops.put(new ItemStack(Material.PUMPKIN), 3); return TreasureConfig.getInstance().shakeFromIronGolem;
possibleDrops.put(new ItemStack(Material.IRON_INGOT), 12);
possibleDrops.put(new ItemStack(Material.RED_ROSE), 85);
break;
case MAGMA_CUBE: case MAGMA_CUBE:
possibleDrops.put(new ItemStack(Material.MAGMA_CREAM), 100); return TreasureConfig.getInstance().shakeFromMagmaCube;
break;
case MUSHROOM_COW: case MUSHROOM_COW:
possibleDrops.put(new ItemStack(Material.MILK_BUCKET), 5); return TreasureConfig.getInstance().shakeFromMushroomCow;
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;
case PIG: case PIG:
possibleDrops.put(new ItemStack(Material.PORK), 100); return TreasureConfig.getInstance().shakeFromPig;
break;
case PIG_ZOMBIE: case PIG_ZOMBIE:
possibleDrops.put(new ItemStack(Material.ROTTEN_FLESH), 50); return TreasureConfig.getInstance().shakeFromPigZombie;
possibleDrops.put(new ItemStack(Material.GOLD_NUGGET), 50);
break;
case SHEEP: case SHEEP:
possibleDrops.put(new ItemStack(Material.WOOL, Misc.getRandom().nextInt(6) + 1), 100); return TreasureConfig.getInstance().shakeFromSheep;
break;
case SKELETON: case SKELETON:
possibleDrops.put(new ItemStack(Material.SKULL_ITEM, 1, (short) 0), 2); return TreasureConfig.getInstance().shakeFromSkeleton;
possibleDrops.put(new ItemStack(Material.BONE), 49);
possibleDrops.put(new ItemStack(Material.ARROW, Misc.getRandom().nextInt(3) + 1), 49);
break;
case SLIME: case SLIME:
possibleDrops.put(new ItemStack(Material.SLIME_BALL), 100); return TreasureConfig.getInstance().shakeFromSlime;
break;
case SNOWMAN: case SNOWMAN:
possibleDrops.put(new ItemStack(Material.PUMPKIN), 3); return TreasureConfig.getInstance().shakeFromSnowman;
possibleDrops.put(new ItemStack(Material.SNOW_BALL, Misc.getRandom().nextInt(4) + 1), 97);
break; case SPIDER:
return TreasureConfig.getInstance().shakeFromSpider;
case SQUID: case SQUID:
possibleDrops.put(new ItemStack(Material.INK_SACK, 1, DyeColor.BLACK.getDyeData()), 100); return TreasureConfig.getInstance().shakeFromSquid;
break;
case WITCH: case WITCH:
possibleDrops.put(new Potion(PotionType.INSTANT_HEAL).toItemStack(1), 1); return TreasureConfig.getInstance().shakeFromWitch;
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;
case ZOMBIE: case ZOMBIE:
possibleDrops.put(new ItemStack(Material.SKULL_ITEM, 1, (short) 2), 2); return TreasureConfig.getInstance().shakeFromZombie;
possibleDrops.put(new ItemStack(Material.ROTTEN_FLESH), 98);
break;
default: default:
return; return null;
} }
} }
@ -184,15 +136,15 @@ public final class Fishing {
* @param possibleDrops List of ItemStack that can be dropped * @param possibleDrops List of ItemStack that can be dropped
* @return Chosen ItemStack * @return Chosen ItemStack
*/ */
protected static ItemStack chooseDrop(Map<ItemStack, Integer> possibleDrops) { protected static ItemStack chooseDrop(List<ShakeTreasure> possibleDrops) {
int dropProbability = Misc.getRandom().nextInt(100); int dropProbability = Misc.getRandom().nextInt(100);
int cumulatedProbability = 0; double cumulatedProbability = 0;
for (Entry<ItemStack, Integer> entry : possibleDrops.entrySet()) { for (ShakeTreasure treasure : possibleDrops) {
cumulatedProbability += entry.getValue(); cumulatedProbability += treasure.getDropChance();
if (dropProbability < cumulatedProbability) { if (dropProbability < cumulatedProbability) {
return entry.getKey(); return treasure.getDrop();
} }
} }

View File

@ -2,9 +2,7 @@ package com.gmail.nossr50.skills.fishing;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import org.bukkit.Material; import org.bukkit.Material;
import org.bukkit.enchantments.Enchantment; 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.player.McMMOPlayer;
import com.gmail.nossr50.datatypes.skills.SkillType; import com.gmail.nossr50.datatypes.skills.SkillType;
import com.gmail.nossr50.datatypes.treasure.FishingTreasure; import com.gmail.nossr50.datatypes.treasure.FishingTreasure;
import com.gmail.nossr50.datatypes.treasure.ShakeTreasure;
import com.gmail.nossr50.locale.LocaleLoader; import com.gmail.nossr50.locale.LocaleLoader;
import com.gmail.nossr50.skills.SkillManager; import com.gmail.nossr50.skills.SkillManager;
import com.gmail.nossr50.skills.fishing.Fishing.Tier; import com.gmail.nossr50.skills.fishing.Fishing.Tier;
@ -144,11 +143,9 @@ public class FishingManager extends SkillManager {
*/ */
public void shakeCheck(LivingEntity target) { public void shakeCheck(LivingEntity target) {
if (getShakeProbability() > Misc.getRandom().nextInt(getActivationChance())) { if (getShakeProbability() > Misc.getRandom().nextInt(getActivationChance())) {
Map<ItemStack, Integer> possibleDrops = new HashMap<ItemStack, Integer>(); List<ShakeTreasure> possibleDrops = Fishing.findPossibleDrops(target);
Fishing.findPossibleDrops(target, possibleDrops); if (possibleDrops == null || possibleDrops.isEmpty()) {
if (possibleDrops.isEmpty()) {
return; return;
} }

View File

@ -100,6 +100,62 @@ Hylian_Luck:
- Diamond_Gem - Diamond_Gem
- Gold_Nuggets - 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 # Configuration to define Treasures
### ###
Treasures: Treasures:
@ -969,3 +1025,517 @@ Treasures:
Drop_Level: 0 Drop_Level: 0
Drops_From: Drops_From:
Pots: true 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