From cb0940a41e3d1afcc081dc9c7abb6f40f1e80880 Mon Sep 17 00:00:00 2001 From: Irmo van den Berge Date: Mon, 13 Aug 2012 01:50:32 +0200 Subject: [PATCH] Updated drop and destroy functions to API principles Signed-off-by: Irmo van den Berge --- .../org/spout/vanilla/data/drops/Drop.java | 70 +++------- .../org/spout/vanilla/data/drops/Drops.java | 13 +- .../vanilla/data/drops/SelectedDrops.java | 8 +- .../spout/vanilla/data/drops/SwitchDrops.java | 8 +- .../vanilla/data/drops/flag/BlockFlags.java | 10 +- .../data/drops/flag/DropFlagSingle.java | 69 ---------- .../vanilla/data/drops/flag/DropFlagTrue.java | 40 ------ .../flag/{DropFlag.java => DropFlags.java} | 16 ++- .../vanilla/data/drops/flag/PlayerFlags.java | 6 +- .../data/drops/flag/ToolEnchantFlags.java | 4 +- .../data/drops/flag/ToolLevelFlags.java | 28 ++-- .../data/drops/flag/ToolTypeFlags.java | 22 ++-- .../ContentsDrop.java} | 28 ++-- .../vanilla/data/drops/type/FixedDrop.java | 4 +- .../vanilla/data/drops/type/RandomDrop.java | 4 +- .../data/drops/type/RandomRangeDrop.java | 4 +- .../entity/VanillaEntityController.java | 4 +- .../material/VanillaBlockMaterial.java | 120 ++++++++---------- .../vanilla/material/block/DoorBlock.java | 2 +- .../spout/vanilla/material/block/Liquid.java | 2 +- .../spout/vanilla/material/block/Stairs.java | 12 +- .../block/attachable/AbstractAttachable.java | 6 +- .../material/block/controlled/ChestBlock.java | 4 +- .../block/controlled/ControlledMaterial.java | 9 -- .../block/controlled/JukeboxBlock.java | 7 +- .../vanilla/material/block/misc/BedBlock.java | 2 +- .../vanilla/material/block/misc/FarmLand.java | 3 +- .../vanilla/material/block/misc/Slab.java | 35 +++-- .../vanilla/material/block/misc/Snow.java | 2 +- .../vanilla/material/block/misc/TripWire.java | 4 +- .../vanilla/material/block/ore/CoalOre.java | 2 +- .../material/block/ore/DiamondBlock.java | 2 +- .../material/block/ore/DiamondOre.java | 2 +- .../material/block/ore/EmeraldBlock.java | 7 +- .../material/block/ore/EmeraldOre.java | 2 +- .../vanilla/material/block/ore/GoldBlock.java | 2 +- .../vanilla/material/block/ore/GoldOre.java | 2 +- .../vanilla/material/block/ore/IronBlock.java | 2 +- .../vanilla/material/block/ore/IronOre.java | 2 +- .../material/block/ore/LapisLazuliBlock.java | 2 +- .../material/block/ore/LapisLazuliOre.java | 2 +- .../material/block/ore/RedstoneOre.java | 2 +- .../vanilla/material/block/piston/Piston.java | 7 +- .../block/piston/PistonExtension.java | 9 +- .../material/block/plant/NetherWartBlock.java | 7 +- .../material/block/plant/WheatCrop.java | 7 +- .../material/block/solid/BookShelf.java | 2 +- .../material/block/solid/ClayBlock.java | 3 +- .../material/block/solid/Cobblestone.java | 2 +- .../vanilla/material/block/solid/Dirt.java | 3 +- .../material/block/solid/DoubleSlab.java | 4 +- .../vanilla/material/block/solid/Grass.java | 3 +- .../vanilla/material/block/solid/Gravel.java | 3 +- .../vanilla/material/block/solid/Ice.java | 4 +- .../vanilla/material/block/solid/Log.java | 5 +- .../material/block/solid/MossStone.java | 2 +- .../material/block/solid/Mycelium.java | 3 +- .../vanilla/material/block/solid/Plank.java | 5 +- .../vanilla/material/block/solid/Pumpkin.java | 3 +- .../vanilla/material/block/solid/Sand.java | 3 +- .../material/block/solid/Sandstone.java | 4 +- .../material/block/solid/SnowBlock.java | 2 +- .../material/block/solid/SoulSand.java | 2 +- .../vanilla/material/block/solid/Stone.java | 2 +- .../material/item/tool/MiningTool.java | 13 +- .../vanilla/material/item/tool/Tool.java | 30 ++--- .../material/item/tool/weapon/Bow.java | 2 - .../material/item/tool/weapon/Sword.java | 2 - .../handler/PlayerDiggingMessageHandler.java | 35 ++--- .../org/spout/vanilla/util/ToolLevel.java | 13 +- .../java/org/spout/vanilla/util/ToolType.java | 11 +- .../util/explosion/ExplosionModel.java | 2 +- 72 files changed, 287 insertions(+), 481 deletions(-) delete mode 100644 src/main/java/org/spout/vanilla/data/drops/flag/DropFlagSingle.java delete mode 100644 src/main/java/org/spout/vanilla/data/drops/flag/DropFlagTrue.java rename src/main/java/org/spout/vanilla/data/drops/flag/{DropFlag.java => DropFlags.java} (77%) rename src/main/java/org/spout/vanilla/data/drops/{flag/DropFlagBundle.java => type/ContentsDrop.java} (68%) diff --git a/src/main/java/org/spout/vanilla/data/drops/Drop.java b/src/main/java/org/spout/vanilla/data/drops/Drop.java index 726fe012d..85e6d629b 100644 --- a/src/main/java/org/spout/vanilla/data/drops/Drop.java +++ b/src/main/java/org/spout/vanilla/data/drops/Drop.java @@ -27,39 +27,27 @@ package org.spout.vanilla.data.drops; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Random; import java.util.Set; import org.spout.api.inventory.ItemStack; import org.spout.api.material.Material; - -import org.spout.vanilla.data.drops.flag.DropFlag; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; +import org.spout.api.util.flag.Flag; +import org.spout.api.util.flag.FlagContainer; /** * Contains one or more Drops */ -public abstract class Drop { - private final List flags = new ArrayList(); +public abstract class Drop extends FlagContainer { private double chance = 1.0; - /** - * Checks if this Drop matches all the flags given - * @param flags to match against - * @return True if matched, False if not - */ - public boolean matchFlags(Set flags) { - if (flags.contains(DropFlagSingle.NO_DROPS)) { - return false; - } - for (DropFlag flag : this.flags) { - if (!flag.evaluate(flags)) { - return false; - } - } - return true; + @Override + public boolean matchFlags(Set flags) { +// if (flags.contains(DropFlagSingle.NO_DROPS)) { +// return false; +// } + return super.matchFlags(flags); } /** @@ -68,11 +56,11 @@ public boolean matchFlags(Set flags) { * @param dropFlags to check against * @return True if a drop can be performed, False if not */ - public boolean canDrop(Random random, Set dropFlags) { + public boolean canDrop(Random random, Set flags) { if (this.hasChance() && random.nextDouble() >= this.getChance()) { return false; } - return this.matchFlags(dropFlags); + return this.matchFlags(flags); } /** @@ -100,38 +88,18 @@ public double getChance() { return this.chance; } - /** - * Adds all the flags for these drops
- * All flags set for these drops need to be set to make these drops function - * - * @param dropflags to add (can be a DropFlag and DropFlagBundle) - * @return these Drops - */ - public Drop addFlags(DropFlag... dropFlags) { - this.flags.addAll(Arrays.asList(dropFlags)); + @Override + public Drop addFlags(Flag... dropFlags) { + super.addFlags(dropFlags); return this; } - /** - * Removes all the flags for these drops - * - * @param dropflags to remove (can be a DropFlag and DropFlagBundle) - * @return these Drops - */ - public Drop removeFlags(DropFlag... dropFlags) { - this.flags.removeAll(Arrays.asList(dropFlags)); + @Override + public Drop removeFlags(Flag... dropFlags) { + super.removeFlags(dropFlags); return this; } - /** - * Gets all the flags set for these drops
- * All flags set for these drops need to be set to make these drops function - * @return drop flags - */ - public List getFlags() { - return this.flags; - } - /** * Fills a list with the Drops * @param random to use @@ -139,7 +107,7 @@ public List getFlags() { * @param drops list to fill * @return the inputed list of drops */ - public abstract List getDrops(Random random, Set flags, List drops); + public abstract List getDrops(Random random, Set flags, List drops); /** * Gets the Drops @@ -147,7 +115,7 @@ public List getFlags() { * @param flags to evaluate against (contains no inverted flags) * @return list of ItemStacks */ - public final List getDrops(Random random, Set flags) { + public final List getDrops(Random random, Set flags) { return getDrops(random, flags, new ArrayList()); } diff --git a/src/main/java/org/spout/vanilla/data/drops/Drops.java b/src/main/java/org/spout/vanilla/data/drops/Drops.java index 03c0a07a5..f0b31c973 100644 --- a/src/main/java/org/spout/vanilla/data/drops/Drops.java +++ b/src/main/java/org/spout/vanilla/data/drops/Drops.java @@ -34,9 +34,8 @@ import org.spout.api.inventory.ItemStack; import org.spout.api.material.Material; +import org.spout.api.util.flag.Flag; -import org.spout.vanilla.data.drops.flag.DropFlag; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; import org.spout.vanilla.data.drops.type.FixedDrop; import org.spout.vanilla.data.drops.type.RandomDrop; import org.spout.vanilla.data.drops.type.RandomRangeDrop; @@ -48,7 +47,7 @@ public class Drops extends Drop { private final List drops = new ArrayList(); @Override - public List getDrops(Random random, Set flags, List drops) { + public List getDrops(Random random, Set flags, List drops) { if (this.canDrop(random, flags) && !this.drops.isEmpty()) { for (Drop drop : this.drops) { drops = drop.getDrops(random, flags, drops); @@ -144,20 +143,20 @@ public Drops setChance(double chance) { } @Override - public Drops addFlags(DropFlag... dropFlags) { + public Drops addFlags(Flag... dropFlags) { super.addFlags(dropFlags); return this; } - public SwitchDrops addSwitch(DropFlag... dropFlags) { + public SwitchDrops addSwitch(Flag... dropFlags) { return this.add(new SwitchDrops()).addFlags(dropFlags); } - public Drops forFlags(DropFlagSingle... flags) { + public Drops forFlags(Flag... flags) { return add(new Drops().addFlags(flags)); } - public SelectedDrops addSelect(DropFlagSingle... flags) { + public SelectedDrops addSelect(Flag... flags) { return add(new SelectedDrops().addFlags(flags)); } diff --git a/src/main/java/org/spout/vanilla/data/drops/SelectedDrops.java b/src/main/java/org/spout/vanilla/data/drops/SelectedDrops.java index c29ea275a..374e37be8 100644 --- a/src/main/java/org/spout/vanilla/data/drops/SelectedDrops.java +++ b/src/main/java/org/spout/vanilla/data/drops/SelectedDrops.java @@ -31,13 +31,11 @@ import java.util.Set; import org.spout.api.inventory.ItemStack; - -import org.spout.vanilla.data.drops.flag.DropFlag; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; +import org.spout.api.util.flag.Flag; public class SelectedDrops extends Drops { @Override - public List getDrops(Random random, Set flags, List drops) { + public List getDrops(Random random, Set flags, List drops) { if (!this.canDrop(random, flags) || this.isEmpty()) { return drops; } else { @@ -46,7 +44,7 @@ public List getDrops(Random random, Set flags, List @@ -44,7 +42,7 @@ public class SwitchDrops extends Drops { public final Drops FALSE = new Drops(); @Override - public List getDrops(Random random, Set flags, List drops) { + public List getDrops(Random random, Set flags, List drops) { if (this.canDrop(random, flags)) { drops = this.TRUE.getDrops(random, flags, drops); } else { @@ -54,7 +52,7 @@ public List getDrops(Random random, Set flags, List - * Vanilla is licensed under the SpoutDev License Version 1. - * - * Vanilla is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * In addition, 180 days after any changes are published, you can use the - * software, incorporating those changes, under the terms of the MIT license, - * as described in the SpoutDev License Version 1. - * - * Vanilla is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License, - * the MIT license and the SpoutDev License Version 1 along with this program. - * If not, see for the GNU Lesser General Public - * License and see for the full license, - * including the MIT license. - */ -package org.spout.vanilla.data.drops.flag; - -import java.util.Set; - -public class DropFlagSingle implements DropFlag { - /** - * No drops should be spawned at all - */ - public static final DropFlagSingle NO_DROPS = new DropFlagSingle(); - private final boolean notState; - /** - * The inverted version for this flag, the NOT

- * Sending a NOT as flag to getDrops has no effect! - */ - public final DropFlagSingle NOT; - - public DropFlagSingle() { - this.NOT = new DropFlagSingle(this); - this.notState = false; - } - - private DropFlagSingle(DropFlagSingle parent) { - this.NOT = parent; - this.notState = true; - } - - /** - * Gets whether the flag is inverted - * @return True if the flag is inverted, False if not - */ - public boolean isNot() { - return this.notState; - } - - @Override - public boolean evaluate(Set flags) { - if (this.isNot()) { - return !flags.contains(this.NOT); - } else { - return flags.contains(this); - } - } -} diff --git a/src/main/java/org/spout/vanilla/data/drops/flag/DropFlagTrue.java b/src/main/java/org/spout/vanilla/data/drops/flag/DropFlagTrue.java deleted file mode 100644 index 328c225e0..000000000 --- a/src/main/java/org/spout/vanilla/data/drops/flag/DropFlagTrue.java +++ /dev/null @@ -1,40 +0,0 @@ -/* - * This file is part of Vanilla. - * - * Copyright (c) 2011-2012, VanillaDev - * Vanilla is licensed under the SpoutDev License Version 1. - * - * Vanilla is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * In addition, 180 days after any changes are published, you can use the - * software, incorporating those changes, under the terms of the MIT license, - * as described in the SpoutDev License Version 1. - * - * Vanilla is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public License, - * the MIT license and the SpoutDev License Version 1 along with this program. - * If not, see for the GNU Lesser General Public - * License and see for the full license, - * including the MIT license. - */ -package org.spout.vanilla.data.drops.flag; - -import java.util.Set; - -/** - * A type of flag that always evaluates True or False, no matter what input - */ -public class DropFlagTrue extends DropFlagSingle { - - @Override - public boolean evaluate(Set flags) { - return !this.isNot(); - } -} diff --git a/src/main/java/org/spout/vanilla/data/drops/flag/DropFlag.java b/src/main/java/org/spout/vanilla/data/drops/flag/DropFlags.java similarity index 77% rename from src/main/java/org/spout/vanilla/data/drops/flag/DropFlag.java rename to src/main/java/org/spout/vanilla/data/drops/flag/DropFlags.java index a9c30e838..38e5c4e9e 100644 --- a/src/main/java/org/spout/vanilla/data/drops/flag/DropFlag.java +++ b/src/main/java/org/spout/vanilla/data/drops/flag/DropFlags.java @@ -26,13 +26,17 @@ */ package org.spout.vanilla.data.drops.flag; -import java.util.Set; +import org.spout.api.inventory.ItemStack; +import org.spout.api.util.flag.FlagData; +import org.spout.api.util.flag.FlagSingle; -public interface DropFlag { +public class DropFlags { /** - * Checks if this Flag evaluates one of the flags set - * @param flags to test against - * @return True if successful, False if not + * No drops should be spawned at all */ - public boolean evaluate(Set flags); + public static final FlagSingle NO_DROPS = new FlagSingle(); + /** + * Contents are passed in + */ + public static final FlagData CONTENTS = new FlagData(); } diff --git a/src/main/java/org/spout/vanilla/data/drops/flag/PlayerFlags.java b/src/main/java/org/spout/vanilla/data/drops/flag/PlayerFlags.java index c98ced4fe..3c5b4f7ae 100644 --- a/src/main/java/org/spout/vanilla/data/drops/flag/PlayerFlags.java +++ b/src/main/java/org/spout/vanilla/data/drops/flag/PlayerFlags.java @@ -26,13 +26,15 @@ */ package org.spout.vanilla.data.drops.flag; +import org.spout.api.util.flag.FlagSingle; + public class PlayerFlags { /** * The player that caused the drops is in Creative mode */ - public static final DropFlagSingle CREATIVE = new DropFlagSingle(); + public static final FlagSingle CREATIVE = new FlagSingle(); /** * The player that caused the drops is in Survival mode */ - public static final DropFlagSingle SURVIVAL = new DropFlagSingle(); + public static final FlagSingle SURVIVAL = new FlagSingle(); } diff --git a/src/main/java/org/spout/vanilla/data/drops/flag/ToolEnchantFlags.java b/src/main/java/org/spout/vanilla/data/drops/flag/ToolEnchantFlags.java index a24e3c6b0..6e48efc28 100644 --- a/src/main/java/org/spout/vanilla/data/drops/flag/ToolEnchantFlags.java +++ b/src/main/java/org/spout/vanilla/data/drops/flag/ToolEnchantFlags.java @@ -26,9 +26,11 @@ */ package org.spout.vanilla.data.drops.flag; +import org.spout.api.util.flag.FlagSingle; + public class ToolEnchantFlags { /** * The tool used has the silk touch enchantment */ - public static final DropFlagSingle SILK_TOUCH = new DropFlagSingle(); + public static final FlagSingle SILK_TOUCH = new FlagSingle(); } diff --git a/src/main/java/org/spout/vanilla/data/drops/flag/ToolLevelFlags.java b/src/main/java/org/spout/vanilla/data/drops/flag/ToolLevelFlags.java index 5c646e64d..18bf6858d 100644 --- a/src/main/java/org/spout/vanilla/data/drops/flag/ToolLevelFlags.java +++ b/src/main/java/org/spout/vanilla/data/drops/flag/ToolLevelFlags.java @@ -26,53 +26,57 @@ */ package org.spout.vanilla.data.drops.flag; +import org.spout.api.util.flag.FlagBoolean; +import org.spout.api.util.flag.FlagBundle; +import org.spout.api.util.flag.FlagSingle; + public class ToolLevelFlags { /** * An unknown type was used, always evaluates True */ - public static final DropFlagSingle NONE = new DropFlagTrue(); + public static final FlagBoolean NONE = new FlagBoolean(true); /** * A wooden tool or weapon was used */ - public static final DropFlagSingle WOOD = new DropFlagSingle(); + public static final FlagSingle WOOD = new FlagSingle(); /** * A stone tool or weapon was used */ - public static final DropFlagSingle STONE = new DropFlagSingle(); + public static final FlagSingle STONE = new FlagSingle(); /** * An iron tool or weapon was used */ - public static final DropFlagSingle IRON = new DropFlagSingle(); + public static final FlagSingle IRON = new FlagSingle(); /** * A golden tool or weapon was used */ - public static final DropFlagSingle GOLD = new DropFlagSingle(); + public static final FlagSingle GOLD = new FlagSingle(); /** * A diamond tool or weapon was used */ - public static final DropFlagSingle DIAMOND = new DropFlagSingle(); + public static final FlagSingle DIAMOND = new FlagSingle(); /** * Any type of level */ - public static final DropFlagBundle NONE_UP = new DropFlagBundle(NONE); + public static final FlagBundle NONE_UP = new FlagBundle(NONE); /** * A wooden or higher tool or weapon level */ - public static final DropFlagBundle WOOD_UP = new DropFlagBundle(WOOD, STONE, IRON, GOLD, DIAMOND); + public static final FlagBundle WOOD_UP = new FlagBundle(WOOD, STONE, IRON, GOLD, DIAMOND); /** * A stone or higher tool or weapon level */ - public static final DropFlagBundle STONE_UP = new DropFlagBundle(STONE, IRON, GOLD, DIAMOND); + public static final FlagBundle STONE_UP = new FlagBundle(STONE, IRON, GOLD, DIAMOND); /** * An iron or higher tool or weapon level */ - public static final DropFlagBundle IRON_UP = new DropFlagBundle(IRON, GOLD, DIAMOND); + public static final FlagBundle IRON_UP = new FlagBundle(IRON, GOLD, DIAMOND); /** * A gold or higher tool or weapon level */ - public static final DropFlagBundle GOLD_UP = new DropFlagBundle(GOLD, DIAMOND); + public static final FlagBundle GOLD_UP = new FlagBundle(GOLD, DIAMOND); /** * A diamond or higher tool or weapon level */ - public static final DropFlagBundle DIAMOND_UP = new DropFlagBundle(DIAMOND); + public static final FlagBundle DIAMOND_UP = new FlagBundle(DIAMOND); } diff --git a/src/main/java/org/spout/vanilla/data/drops/flag/ToolTypeFlags.java b/src/main/java/org/spout/vanilla/data/drops/flag/ToolTypeFlags.java index c9430b35e..55b4bd9d9 100644 --- a/src/main/java/org/spout/vanilla/data/drops/flag/ToolTypeFlags.java +++ b/src/main/java/org/spout/vanilla/data/drops/flag/ToolTypeFlags.java @@ -26,45 +26,47 @@ */ package org.spout.vanilla.data.drops.flag; +import org.spout.api.util.flag.FlagSingle; + public class ToolTypeFlags { /** * A tool other than the one displayed here was used */ - public static final DropFlagSingle OTHER = new DropFlagSingle(); + public static final FlagSingle OTHER = new FlagSingle(); /** * A pickaxe was used */ - public static final DropFlagSingle PICKAXE = new DropFlagSingle(); + public static final FlagSingle PICKAXE = new FlagSingle(); /** * An axe was used */ - public static final DropFlagSingle AXE = new DropFlagSingle(); + public static final FlagSingle AXE = new FlagSingle(); /** * A spade was used */ - public static final DropFlagSingle SPADE = new DropFlagSingle(); + public static final FlagSingle SPADE = new FlagSingle(); /** * A hoe was used */ - public static final DropFlagSingle HOE = new DropFlagSingle(); + public static final FlagSingle HOE = new FlagSingle(); /** * A sword was used */ - public static final DropFlagSingle SWORD = new DropFlagSingle(); + public static final FlagSingle SWORD = new FlagSingle(); /** * A bow was used */ - public static final DropFlagSingle BOW = new DropFlagSingle(); + public static final FlagSingle BOW = new FlagSingle(); /** * A flint and steel was used */ - public static final DropFlagSingle FLINT_AND_STEEL = new DropFlagSingle(); + public static final FlagSingle FLINT_AND_STEEL = new FlagSingle(); /** * Shears were used */ - public static final DropFlagSingle SHEARS = new DropFlagSingle(); + public static final FlagSingle SHEARS = new FlagSingle(); /** * A fishing rod was used */ - public static final DropFlagSingle FISHING_ROD = new DropFlagSingle(); + public static final FlagSingle FISHING_ROD = new FlagSingle(); } diff --git a/src/main/java/org/spout/vanilla/data/drops/flag/DropFlagBundle.java b/src/main/java/org/spout/vanilla/data/drops/type/ContentsDrop.java similarity index 68% rename from src/main/java/org/spout/vanilla/data/drops/flag/DropFlagBundle.java rename to src/main/java/org/spout/vanilla/data/drops/type/ContentsDrop.java index 3411a02d8..a987427fc 100644 --- a/src/main/java/org/spout/vanilla/data/drops/flag/DropFlagBundle.java +++ b/src/main/java/org/spout/vanilla/data/drops/type/ContentsDrop.java @@ -24,26 +24,32 @@ * License and see for the full license, * including the MIT license. */ -package org.spout.vanilla.data.drops.flag; +package org.spout.vanilla.data.drops.type; import java.util.Arrays; import java.util.List; +import java.util.Random; import java.util.Set; -public class DropFlagBundle implements DropFlag { - private final List flags; +import org.spout.api.inventory.ItemStack; +import org.spout.api.material.Material; +import org.spout.api.util.flag.Flag; +import org.spout.vanilla.data.drops.Drop; +import org.spout.vanilla.data.drops.flag.DropFlags; - public DropFlagBundle(DropFlag... dropFlags) { - this.flags = Arrays.asList(dropFlags); - } +public class ContentsDrop extends Drop { @Override - public boolean evaluate(Set flags) { - for (DropFlag flag : this.flags) { - if (flag.evaluate(flags)) { - return true; - } + public List getDrops(Random random, Set flags, List drops) { + ItemStack[] contents = DropFlags.CONTENTS.getData(flags); + if (contents != null) { + drops.addAll(Arrays.asList(contents)); } + return drops; + } + + @Override + public boolean containsDrop(Material material) { return false; } } diff --git a/src/main/java/org/spout/vanilla/data/drops/type/FixedDrop.java b/src/main/java/org/spout/vanilla/data/drops/type/FixedDrop.java index 4f1391c94..8fb489bef 100644 --- a/src/main/java/org/spout/vanilla/data/drops/type/FixedDrop.java +++ b/src/main/java/org/spout/vanilla/data/drops/type/FixedDrop.java @@ -32,9 +32,9 @@ import org.spout.api.inventory.ItemStack; import org.spout.api.material.Material; +import org.spout.api.util.flag.Flag; import org.spout.vanilla.data.drops.Drop; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; /** * A drop of a fixed amount @@ -57,7 +57,7 @@ public int getAmount() { } @Override - public List getDrops(Random random, Set flags, List drops) { + public List getDrops(Random random, Set flags, List drops) { if (this.canDrop(random, flags)) { drops.add(new ItemStack(getMaterial(), getAmount())); } diff --git a/src/main/java/org/spout/vanilla/data/drops/type/RandomDrop.java b/src/main/java/org/spout/vanilla/data/drops/type/RandomDrop.java index 6812bc931..4234e21aa 100644 --- a/src/main/java/org/spout/vanilla/data/drops/type/RandomDrop.java +++ b/src/main/java/org/spout/vanilla/data/drops/type/RandomDrop.java @@ -32,9 +32,9 @@ import org.spout.api.inventory.ItemStack; import org.spout.api.material.Material; +import org.spout.api.util.flag.Flag; import org.spout.vanilla.data.drops.Drop; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; public class RandomDrop extends Drop { private final Material material; @@ -50,7 +50,7 @@ public Material getMaterial() { } @Override - public List getDrops(Random random, Set flags, List drops) { + public List getDrops(Random random, Set flags, List drops) { if (this.canDrop(random, flags)) { int amount = amounts[random.nextInt(amounts.length)]; if (amount > 0) { diff --git a/src/main/java/org/spout/vanilla/data/drops/type/RandomRangeDrop.java b/src/main/java/org/spout/vanilla/data/drops/type/RandomRangeDrop.java index bf683e308..2e114bf9e 100644 --- a/src/main/java/org/spout/vanilla/data/drops/type/RandomRangeDrop.java +++ b/src/main/java/org/spout/vanilla/data/drops/type/RandomRangeDrop.java @@ -32,9 +32,9 @@ import org.spout.api.inventory.ItemStack; import org.spout.api.material.Material; +import org.spout.api.util.flag.Flag; import org.spout.vanilla.data.drops.Drop; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; public class RandomRangeDrop extends Drop { private final Material material; @@ -62,7 +62,7 @@ public int getMaxAmount() { } @Override - public List getDrops(Random random, Set flags, List drops) { + public List getDrops(Random random, Set flags, List drops) { if (this.canDrop(random, flags)) { int amount = min + random.nextInt(max - min + 1); if (amount > 0) { diff --git a/src/main/java/org/spout/vanilla/entity/VanillaEntityController.java b/src/main/java/org/spout/vanilla/entity/VanillaEntityController.java index c8a90750b..9a7aff3c4 100644 --- a/src/main/java/org/spout/vanilla/entity/VanillaEntityController.java +++ b/src/main/java/org/spout/vanilla/entity/VanillaEntityController.java @@ -47,10 +47,10 @@ import org.spout.api.protocol.event.ProtocolEvent; import org.spout.api.tickable.TickPriority; import org.spout.api.util.Profiler; +import org.spout.api.util.flag.Flag; import org.spout.vanilla.data.VanillaData; import org.spout.vanilla.data.drops.Drops; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; import org.spout.vanilla.entity.component.HealthOwner; import org.spout.vanilla.entity.component.basic.FireDamageComponent; import org.spout.vanilla.entity.component.basic.HealthComponent; @@ -274,7 +274,7 @@ public void setMaxSpeed(Vector3 maxSpeed) { * @return the drops to disperse. */ public List getDrops(Source source, Entity lastDamager) { - return this.getDrops().getDrops(rand, new HashSet()); + return this.getDrops().getDrops(rand, new HashSet()); } /** diff --git a/src/main/java/org/spout/vanilla/material/VanillaBlockMaterial.java b/src/main/java/org/spout/vanilla/material/VanillaBlockMaterial.java index ebe8f3249..ae34ff40c 100755 --- a/src/main/java/org/spout/vanilla/material/VanillaBlockMaterial.java +++ b/src/main/java/org/spout/vanilla/material/VanillaBlockMaterial.java @@ -27,7 +27,6 @@ package org.spout.vanilla.material; import java.util.HashSet; -import java.util.List; import java.util.Random; import java.util.Set; @@ -41,8 +40,10 @@ import org.spout.api.material.block.BlockFaces; import org.spout.api.material.block.BlockSnapshot; import org.spout.api.math.Vector3; +import org.spout.api.util.flag.Flag; +import org.spout.api.util.flag.FlagBundle; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; +import org.spout.vanilla.data.drops.flag.DropFlags; import org.spout.vanilla.data.drops.type.block.BlockDrops; import org.spout.vanilla.data.effect.SoundEffect; import org.spout.vanilla.data.effect.store.SoundEffects; @@ -63,8 +64,8 @@ public abstract class VanillaBlockMaterial extends BlockMaterial implements Vani private boolean liquidObstacle = true; private SoundEffect stepSound = SoundEffects.STEP_STONE; private final BlockDrops drops = new BlockDrops(); - private ToolType miningType = null; - private ToolLevel miningLevel = ToolLevel.WOOD; + private Set miningTypes = new HashSet(); + private ToolLevel miningLevel = ToolLevel.NONE; public VanillaBlockMaterial(String name, int id) { this((short) 0, name, id); @@ -100,29 +101,31 @@ public short getMinecraftData(short data) { /** * Called when this block is destroyed because of an explosion + * * @param block that got ignited */ public void onIgnite(Block block) { - HashSet dropFlags = new HashSet(); + HashSet dropFlags = new HashSet(); if (Math.random() > 0.3) { - dropFlags.add(DropFlagSingle.NO_DROPS); + dropFlags.add(DropFlags.NO_DROPS); } - this.onDestroy(block, dropFlags); + this.destroy(block, dropFlags); } @Override - public final void onDestroy(Block block) { - onDestroy(block, new HashSet()); - } - - public void onDestroy(Block block, Set dropFlags) { + public boolean destroy(Block block, Set flags) { BlockChangeEvent event = new BlockChangeEvent(block, new BlockSnapshot(block, this, block.getData()), block.getSource()); if (event.isCancelled()) { - return; + return false; } - this.onDestroyBlock(block); + return super.destroy(block, flags); + } + + @Override + public void onPostDestroy(Block block, Set flags) { //TODO stack items together for more performance - for (ItemStack item : this.getDrops(block, dropFlags)) { + Random random = new Random(block.getWorld().getAge()); + for (ItemStack item : this.getDrops().getDrops(random, flags)) { ItemUtil.dropItemNaturally(block.getPosition(), item); } } @@ -208,14 +211,6 @@ public Instrument getInstrument() { return Instrument.PIANO; } - /** - * Called when this block is destroyed to perform the actual block destruction - * @param block to destroy - */ - public void onDestroyBlock(Block block) { - block.setMaterial(VanillaMaterials.AIR); - } - /** * Gets whether this block material acts as a solid redstone conductor * @return True if it is a conductor @@ -324,28 +319,6 @@ public boolean isPlacementSuppressed() { return false; } - /** - * Gets all the drop flags for a Block - * @param flags to fill - * @return the flags parameter - */ - public Set getDropFlags(Block block, Set flags) { - return flags; - } - - /** - * Gets all the drops for this block
- * To provide Block-specific rules, override getDropFlags. - * @param block that needs drops - * @param flags to initially use - * @return list of ItemStack drops - */ - public final List getDrops(Block block, Set flags) { - flags = getDropFlags(block, flags); - Random random = new Random(block.getWorld().getAge()); - return getDrops().getDrops(random, flags); - } - /** * Gets if this material is a liquid obstacle * @return True if it can stop liquids, False if this material gets destroyed @@ -363,44 +336,51 @@ public VanillaBlockMaterial setLiquidObstacle(boolean state) { return this; } + private void updateDropFlags() { + this.drops.NOT_CREATIVE.clearFlags(); + if (this.miningLevel != null && this.miningLevel != ToolLevel.NONE) { + this.drops.NOT_CREATIVE.addFlags(this.miningLevel.getDropFlag()); + Flag[] typeFlags = new Flag[this.miningTypes.size()]; + int i = 0; + for (ToolType type : this.miningTypes) { + typeFlags[i] = type.getDropFlag(); + i++; + } + this.drops.NOT_CREATIVE.addFlags(new FlagBundle(typeFlags)); + } + } + + public VanillaBlockMaterial setMiningLevel(ToolLevel miningLevel) { + this.miningLevel = miningLevel; + updateDropFlags(); + return this; + } + /** - * Sets the mining type of this Block material
- * This type is used when checking for drops and when calculating digging time + * Adds the mining type to this Block material
+ * This type will be used when checking for drops and when calculating the digging time * - * @param miningType to set to, can be null to disable - * @param miningLevel that has to be met to spawn drops + * @param miningType to add * @return this material */ - public VanillaBlockMaterial setMiningType(ToolType miningType, ToolLevel miningLevel) { - if (this.miningType != null) { - this.drops.NOT_CREATIVE.removeFlags(this.miningType.getDropFlag()); // remove old drop type flags - } - this.miningType = miningType; - if (this.miningType != null) { - this.drops.NOT_CREATIVE.addFlags(this.miningType.getDropFlag()); // add new drop type flags - } - if (this.miningLevel != null) { - this.drops.NOT_CREATIVE.removeFlags(this.miningLevel.getDropFlag()); // remove old drop level flags - } - this.miningLevel = miningLevel; - if (this.miningLevel != null) { - this.drops.NOT_CREATIVE.addFlags(this.miningLevel.getDropFlag()); // add new drop level flags - } + public VanillaBlockMaterial addMiningType(ToolType miningType) { + this.miningTypes.add(miningType); + updateDropFlags(); return this; } /** - * Gets the mining type of this Block material
+ * Gets if the mining type is set for this Block material
* This type is used when checking for drops and when calculating digging time * - * @return the mining type, can be null if none is set + * @return True if the tool type is set */ - public ToolType getMiningType() { - return miningType; + public boolean isMiningType(ToolType toolType) { + return this.miningTypes.contains(toolType); } /** - * Gets the mining level requires for this BlockMaterial
+ * Gets the mining level required for breaking this BlockMaterial
* This level has to be met to spawn drops * * @return mining level @@ -408,7 +388,7 @@ public ToolType getMiningType() { public ToolLevel getMiningLevel() { return miningLevel; } - + /** * Gets the drops for this block material * @return the drops diff --git a/src/main/java/org/spout/vanilla/material/block/DoorBlock.java b/src/main/java/org/spout/vanilla/material/block/DoorBlock.java index 7b62939c8..f6993db73 100644 --- a/src/main/java/org/spout/vanilla/material/block/DoorBlock.java +++ b/src/main/java/org/spout/vanilla/material/block/DoorBlock.java @@ -69,7 +69,7 @@ public boolean canSeekAttachedAlternative() { } @Override - public void onDestroyBlock(Block block) { + public void onDestroy(Block block) { Block top = getCorrectHalf(block, true); Block bottom = getCorrectHalf(block, false); top.setMaterial(VanillaMaterials.AIR); diff --git a/src/main/java/org/spout/vanilla/material/block/Liquid.java b/src/main/java/org/spout/vanilla/material/block/Liquid.java index c6e85dec5..accc59d96 100644 --- a/src/main/java/org/spout/vanilla/material/block/Liquid.java +++ b/src/main/java/org/spout/vanilla/material/block/Liquid.java @@ -145,7 +145,7 @@ public static boolean isLiquidObstacle(BlockMaterial material) { * @return True to notify spreading was allowed, False to deny */ public void onSpread(Block block, int newLevel, BlockFace from) { - block.getMaterial().onDestroy(block); + block.getMaterial().destroy(block); block.setMaterial(this.getFlowingMaterial()); this.setLevel(block, newLevel); if (from == BlockFace.TOP) { diff --git a/src/main/java/org/spout/vanilla/material/block/Stairs.java b/src/main/java/org/spout/vanilla/material/block/Stairs.java index 93444a986..553ebc035 100644 --- a/src/main/java/org/spout/vanilla/material/block/Stairs.java +++ b/src/main/java/org/spout/vanilla/material/block/Stairs.java @@ -30,20 +30,20 @@ import org.spout.api.material.block.BlockFace; import org.spout.api.material.block.BlockFaces; import org.spout.api.math.Vector3; -import org.spout.api.util.flag.ByteFlagContainer; +import org.spout.api.util.bytebit.ByteBitSet; import org.spout.vanilla.material.VanillaBlockMaterial; import org.spout.vanilla.util.VanillaPlayerUtil; public abstract class Stairs extends VanillaBlockMaterial implements Directional { - private final ByteFlagContainer[] occlusion; + private final ByteBitSet[] occlusion; public Stairs(String name, int id) { super(name, id); - this.occlusion = new ByteFlagContainer[8]; + this.occlusion = new ByteBitSet[8]; for (int i = 0; i < 4; i++) { - this.occlusion[i] = new ByteFlagContainer(BlockFaces.NSEW.get(i).getOpposite(), BlockFace.BOTTOM); - this.occlusion[i | 0x4] = new ByteFlagContainer(BlockFaces.NSEW.get(i).getOpposite(), BlockFace.TOP); + this.occlusion[i] = new ByteBitSet(BlockFaces.NSEW.get(i).getOpposite(), BlockFace.BOTTOM); + this.occlusion[i | 0x4] = new ByteBitSet(BlockFaces.NSEW.get(i).getOpposite(), BlockFace.TOP); } } @@ -84,7 +84,7 @@ public boolean onPlacement(Block block, short data, BlockFace against, Vector3 c } @Override - public ByteFlagContainer getOcclusion(short data) { + public ByteBitSet getOcclusion(short data) { return this.occlusion[data & 0x7]; } } diff --git a/src/main/java/org/spout/vanilla/material/block/attachable/AbstractAttachable.java b/src/main/java/org/spout/vanilla/material/block/attachable/AbstractAttachable.java index 53e46853e..8da3cdfac 100644 --- a/src/main/java/org/spout/vanilla/material/block/attachable/AbstractAttachable.java +++ b/src/main/java/org/spout/vanilla/material/block/attachable/AbstractAttachable.java @@ -32,7 +32,7 @@ import org.spout.api.material.block.BlockFaces; import org.spout.api.material.range.EffectRange; import org.spout.api.math.Vector3; -import org.spout.api.util.flag.ByteFlagContainer; +import org.spout.api.util.bytebit.ByteBitSet; import org.spout.vanilla.material.VanillaBlockMaterial; import org.spout.vanilla.material.block.Attachable; @@ -50,7 +50,7 @@ public AbstractAttachable(String name, int id, int data, VanillaBlockMaterial pa super(name, id, data, parent); } - private ByteFlagContainer attachableFaces = new ByteFlagContainer(BlockFaces.NONE); + private ByteBitSet attachableFaces = new ByteBitSet(BlockFaces.NONE); /** * Gets whether a certain face is attachable @@ -115,7 +115,7 @@ public boolean canSeekAttachedAlternative() { public void onUpdate(BlockMaterial oldMaterial, Block block) { super.onUpdate(oldMaterial, block); if (!this.isValidPosition(block, this.getAttachedFace(block), false)) { - this.onDestroy(block); + this.destroy(block); } } diff --git a/src/main/java/org/spout/vanilla/material/block/controlled/ChestBlock.java b/src/main/java/org/spout/vanilla/material/block/controlled/ChestBlock.java index ceb11be5e..4fc4f7113 100644 --- a/src/main/java/org/spout/vanilla/material/block/controlled/ChestBlock.java +++ b/src/main/java/org/spout/vanilla/material/block/controlled/ChestBlock.java @@ -62,7 +62,7 @@ public Instrument getInstrument() { } @Override - public void onDestroyBlock(Block block) { + public void onDestroy(Block block) { BlockController old = block.getController(); if (old != null && old instanceof org.spout.vanilla.entity.block.Chest) { //Drop items @@ -75,7 +75,7 @@ public void onDestroyBlock(Block block) { ItemUtil.dropItemNaturally(position, item); } } - super.onDestroyBlock(block); + super.onDestroy(block); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/controlled/ControlledMaterial.java b/src/main/java/org/spout/vanilla/material/block/controlled/ControlledMaterial.java index 2d8c1ee5a..971b1e70b 100644 --- a/src/main/java/org/spout/vanilla/material/block/controlled/ControlledMaterial.java +++ b/src/main/java/org/spout/vanilla/material/block/controlled/ControlledMaterial.java @@ -26,13 +26,10 @@ */ package org.spout.vanilla.material.block.controlled; -import java.util.Set; - import org.spout.api.geo.cuboid.Block; import org.spout.api.material.block.BlockFace; import org.spout.api.math.Vector3; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; import org.spout.vanilla.entity.VanillaControllerType; import org.spout.vanilla.material.block.Solid; @@ -45,12 +42,6 @@ public ControlledMaterial(VanillaControllerType type, String name, int id) { this.setController(type); } - @Override - public void onDestroy(Block block, Set dropFlags) { - block.getWorld().setBlockController(block.getX(), block.getY(), block.getZ(), null); - super.onDestroy(block, dropFlags); - } - @Override public boolean onPlacement(Block block, short data, BlockFace against, Vector3 clickedPos, boolean isClickedBlock) { super.onPlacement(block, data, against, clickedPos, isClickedBlock); diff --git a/src/main/java/org/spout/vanilla/material/block/controlled/JukeboxBlock.java b/src/main/java/org/spout/vanilla/material/block/controlled/JukeboxBlock.java index 4db2a28df..c74c6efcb 100644 --- a/src/main/java/org/spout/vanilla/material/block/controlled/JukeboxBlock.java +++ b/src/main/java/org/spout/vanilla/material/block/controlled/JukeboxBlock.java @@ -26,11 +26,8 @@ */ package org.spout.vanilla.material.block.controlled; -import java.util.Set; - import org.spout.api.geo.cuboid.Block; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; import org.spout.vanilla.entity.VanillaControllerTypes; import org.spout.vanilla.entity.block.Jukebox; import org.spout.vanilla.material.Fuel; @@ -46,9 +43,9 @@ public JukeboxBlock(String name, int id) { } @Override - public void onDestroy(Block block, Set dropFlags) { + public void onDestroy(Block block) { this.getController(block).stopMusic(); - super.onDestroy(block, dropFlags); + super.onDestroy(block); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/misc/BedBlock.java b/src/main/java/org/spout/vanilla/material/block/misc/BedBlock.java index e2027c8fc..dfb1e2cf5 100644 --- a/src/main/java/org/spout/vanilla/material/block/misc/BedBlock.java +++ b/src/main/java/org/spout/vanilla/material/block/misc/BedBlock.java @@ -49,7 +49,7 @@ public void initialize() { } @Override - public void onDestroyBlock(Block block) { + public void onDestroy(Block block) { Block head = getCorrectHalf(block, true); Block foot = getCorrectHalf(block, false); head.setMaterial(VanillaMaterials.AIR); diff --git a/src/main/java/org/spout/vanilla/material/block/misc/FarmLand.java b/src/main/java/org/spout/vanilla/material/block/misc/FarmLand.java index 82f28f69b..90290262f 100644 --- a/src/main/java/org/spout/vanilla/material/block/misc/FarmLand.java +++ b/src/main/java/org/spout/vanilla/material/block/misc/FarmLand.java @@ -37,7 +37,6 @@ import org.spout.vanilla.material.VanillaMaterials; import org.spout.vanilla.material.block.Crop; import org.spout.vanilla.material.block.liquid.Water; -import org.spout.vanilla.util.ToolLevel; import org.spout.vanilla.util.ToolType; import org.spout.vanilla.util.VanillaBlockUtil; @@ -48,7 +47,7 @@ public class FarmLand extends VanillaBlockMaterial implements InitializableMater public FarmLand(String name, int id) { super(name, id); this.setHardness(0.6F).setResistance(1.0F).setOpaque(); - this.setMiningType(ToolType.SPADE, ToolLevel.NONE); + this.addMiningType(ToolType.SPADE); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/misc/Slab.java b/src/main/java/org/spout/vanilla/material/block/misc/Slab.java index 39cabf9f0..62fdb3c56 100644 --- a/src/main/java/org/spout/vanilla/material/block/misc/Slab.java +++ b/src/main/java/org/spout/vanilla/material/block/misc/Slab.java @@ -33,9 +33,9 @@ import org.spout.api.material.block.BlockFace; import org.spout.api.material.block.BlockFaces; import org.spout.api.math.Vector3; -import org.spout.api.util.flag.ByteFlagContainer; +import org.spout.api.util.bytebit.ByteBitSet; +import org.spout.api.util.flag.Flag; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; import org.spout.vanilla.material.VanillaBlockMaterial; import org.spout.vanilla.material.block.solid.DoubleSlab; import org.spout.vanilla.util.Instrument; @@ -43,26 +43,28 @@ import org.spout.vanilla.util.ToolType; public class Slab extends VanillaBlockMaterial { - public static final Slab STONE_SLAB = new Slab("Stone Slab").setMiningType(ToolType.PICKAXE, ToolLevel.WOOD); - public static final Slab SANDSTONE_SLAB = new Slab("Sandstone Slab", 1, STONE_SLAB).setMiningType(ToolType.PICKAXE, ToolLevel.WOOD); - public static final Slab WOOD_SLAB = new Slab("Wooden Slab", 2, STONE_SLAB).setMiningType(ToolType.AXE, ToolLevel.WOOD); - public static final Slab COBBLESTONE_SLAB = new Slab("Cobblestone Slab", 3, STONE_SLAB).setMiningType(ToolType.PICKAXE, ToolLevel.WOOD); - public static final Slab BRICK_SLAB = new Slab("Brick Slab", 4, STONE_SLAB).setMiningType(ToolType.PICKAXE, ToolLevel.WOOD); - public static final Slab STONE_BRICK_SLAB = new Slab("Stone Brick Slab", 5, STONE_SLAB).setMiningType(ToolType.PICKAXE, ToolLevel.WOOD); + public static final Slab STONE_SLAB = new Slab("Stone Slab"); + public static final Slab SANDSTONE_SLAB = new Slab("Sandstone Slab", 1, STONE_SLAB); + public static final Slab WOOD_SLAB = new Slab("Wooden Slab", 2, STONE_SLAB); + public static final Slab COBBLESTONE_SLAB = new Slab("Cobblestone Slab", 3, STONE_SLAB); + public static final Slab BRICK_SLAB = new Slab("Brick Slab", 4, STONE_SLAB); + public static final Slab STONE_BRICK_SLAB = new Slab("Stone Brick Slab", 5, STONE_SLAB); private DoubleSlab doubletype; - private final ByteFlagContainer occlusionTop = new ByteFlagContainer(BlockFace.TOP); - private final ByteFlagContainer occlusionBottom = new ByteFlagContainer(BlockFace.BOTTOM); + private final ByteBitSet occlusionTop = new ByteBitSet(BlockFace.TOP); + private final ByteBitSet occlusionBottom = new ByteBitSet(BlockFace.BOTTOM); private Slab(String name) { super((short) 0x0007, name, 44); this.setHardness(2.0F).setResistance(10.0F).setOpacity(0); this.setCollision(CollisionStrategy.SOLID); + this.addMiningType(ToolType.AXE).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.WOOD); } private Slab(String name, int data, Slab parent) { super(name, 44, data, parent); this.setHardness(2.0F).setResistance(10.0F).setOpacity(0); this.setCollision(CollisionStrategy.SOLID); + this.addMiningType(ToolType.AXE).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.WOOD); } public Slab setDoubleType(DoubleSlab doubletype) { @@ -70,12 +72,6 @@ public Slab setDoubleType(DoubleSlab doubletype) { return this; } - @Override - public Slab setMiningType(ToolType miningType, ToolLevel miningLevel) { - super.setMiningType(miningType, miningLevel); - return this; - } - @Override public Instrument getInstrument() { return Instrument.BASSDRUM; @@ -109,10 +105,11 @@ public Slab getSubMaterial(short data) { } @Override - public void onDestroy(Block block, Set dropFlags) { + public boolean destroy(Block block, Set flags) { if (!block.isMaterial(this.doubletype)) { - super.onDestroy(block, dropFlags); + return false; } + return super.destroy(block, flags); } @Override @@ -144,7 +141,7 @@ public boolean onPlacement(Block block, short data, BlockFace against, Vector3 c } @Override - public ByteFlagContainer getOcclusion(short data) { + public ByteBitSet getOcclusion(short data) { if ((data & 0x8) == 0x8) { return this.occlusionTop; } else { diff --git a/src/main/java/org/spout/vanilla/material/block/misc/Snow.java b/src/main/java/org/spout/vanilla/material/block/misc/Snow.java index 673f50b86..e84081493 100644 --- a/src/main/java/org/spout/vanilla/material/block/misc/Snow.java +++ b/src/main/java/org/spout/vanilla/material/block/misc/Snow.java @@ -45,7 +45,7 @@ public Snow(String name, int id) { super(name, id); this.setLiquidObstacle(false).setStepSound(SoundEffects.STEP_CLOTH).setHardness(0.1F).setResistance(0.2F).setTransparent(); this.setOcclusion((short) 0, BlockFace.BOTTOM); - this.setMiningType(ToolType.SPADE, ToolLevel.WOOD); + this.addMiningType(ToolType.SPADE).setMiningLevel(ToolLevel.WOOD); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/misc/TripWire.java b/src/main/java/org/spout/vanilla/material/block/misc/TripWire.java index a192b82c2..611a85a3a 100644 --- a/src/main/java/org/spout/vanilla/material/block/misc/TripWire.java +++ b/src/main/java/org/spout/vanilla/material/block/misc/TripWire.java @@ -64,9 +64,9 @@ public void onUpdate(BlockMaterial oldMaterial, Block wire) { } @Override - public void onDestroyBlock(Block block) { + public void onDestroy(Block block) { this.trample(block); - super.onDestroyBlock(block); + super.onDestroy(block); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/ore/CoalOre.java b/src/main/java/org/spout/vanilla/material/block/ore/CoalOre.java index d8c4860a8..bda3ab56a 100644 --- a/src/main/java/org/spout/vanilla/material/block/ore/CoalOre.java +++ b/src/main/java/org/spout/vanilla/material/block/ore/CoalOre.java @@ -39,7 +39,7 @@ public class CoalOre extends Ore implements TimedCraftable, InitializableMaterial { public CoalOre(String name, int id) { super(name, id); - this.setHardness(3.0F).setResistance(5.0F).setMiningType(ToolType.PICKAXE, ToolLevel.WOOD); + this.setHardness(3.0F).setResistance(5.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.WOOD); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/ore/DiamondBlock.java b/src/main/java/org/spout/vanilla/material/block/ore/DiamondBlock.java index bf16785a5..6dce81f82 100644 --- a/src/main/java/org/spout/vanilla/material/block/ore/DiamondBlock.java +++ b/src/main/java/org/spout/vanilla/material/block/ore/DiamondBlock.java @@ -33,6 +33,6 @@ public class DiamondBlock extends Solid { public DiamondBlock(String name, int id) { super(name, id); - this.setHardness(5.0F).setResistance(10.0F).setMiningType(ToolType.PICKAXE, ToolLevel.IRON); + this.setHardness(5.0F).setResistance(10.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.IRON); } } diff --git a/src/main/java/org/spout/vanilla/material/block/ore/DiamondOre.java b/src/main/java/org/spout/vanilla/material/block/ore/DiamondOre.java index 25660fcab..ae20c4bcb 100644 --- a/src/main/java/org/spout/vanilla/material/block/ore/DiamondOre.java +++ b/src/main/java/org/spout/vanilla/material/block/ore/DiamondOre.java @@ -39,7 +39,7 @@ public class DiamondOre extends Ore implements InitializableMaterial, TimedCraftable { public DiamondOre(String name, int id) { super(name, id); - this.setHardness(3.0F).setResistance(5.0F).setMiningType(ToolType.PICKAXE, ToolLevel.IRON); + this.setHardness(3.0F).setResistance(5.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.IRON); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/ore/EmeraldBlock.java b/src/main/java/org/spout/vanilla/material/block/ore/EmeraldBlock.java index 14f686fbd..4f31c10ed 100644 --- a/src/main/java/org/spout/vanilla/material/block/ore/EmeraldBlock.java +++ b/src/main/java/org/spout/vanilla/material/block/ore/EmeraldBlock.java @@ -26,14 +26,13 @@ */ package org.spout.vanilla.material.block.ore; -import org.spout.vanilla.data.drops.flag.ToolLevelFlags; -import org.spout.vanilla.data.drops.flag.ToolTypeFlags; import org.spout.vanilla.material.block.Solid; +import org.spout.vanilla.util.ToolLevel; +import org.spout.vanilla.util.ToolType; public class EmeraldBlock extends Solid { public EmeraldBlock(String name, int id) { super(name, id); - this.setHardness(5.0F).setResistance(10.0F); - this.getDrops().NOT_CREATIVE.addFlags(ToolTypeFlags.PICKAXE, ToolLevelFlags.IRON_UP); + this.setHardness(5.0F).setResistance(10.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.IRON); } } diff --git a/src/main/java/org/spout/vanilla/material/block/ore/EmeraldOre.java b/src/main/java/org/spout/vanilla/material/block/ore/EmeraldOre.java index 52dcc7f25..231680ba4 100644 --- a/src/main/java/org/spout/vanilla/material/block/ore/EmeraldOre.java +++ b/src/main/java/org/spout/vanilla/material/block/ore/EmeraldOre.java @@ -39,7 +39,7 @@ public class EmeraldOre extends Ore implements InitializableMaterial, TimedCraftable { public EmeraldOre(String name, int id) { super(name, id); - this.setHardness(3.0F).setResistance(5.0F).setMiningType(ToolType.PICKAXE, ToolLevel.IRON); + this.setHardness(3.0F).setResistance(5.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.IRON); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/ore/GoldBlock.java b/src/main/java/org/spout/vanilla/material/block/ore/GoldBlock.java index 0169f81f5..91fd85b0f 100644 --- a/src/main/java/org/spout/vanilla/material/block/ore/GoldBlock.java +++ b/src/main/java/org/spout/vanilla/material/block/ore/GoldBlock.java @@ -33,6 +33,6 @@ public class GoldBlock extends Solid { public GoldBlock(String name, int id) { super(name, id); - this.setHardness(3.0F).setResistance(10.0F).setMiningType(ToolType.PICKAXE, ToolLevel.IRON); + this.setHardness(3.0F).setResistance(10.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.IRON); } } diff --git a/src/main/java/org/spout/vanilla/material/block/ore/GoldOre.java b/src/main/java/org/spout/vanilla/material/block/ore/GoldOre.java index 3c38efc46..70eb3eb3a 100644 --- a/src/main/java/org/spout/vanilla/material/block/ore/GoldOre.java +++ b/src/main/java/org/spout/vanilla/material/block/ore/GoldOre.java @@ -38,7 +38,7 @@ public class GoldOre extends Ore implements TimedCraftable { public GoldOre(String name, int id) { super(name, id); - this.setHardness(3.0F).setResistance(5.0F).setMiningType(ToolType.PICKAXE, ToolLevel.IRON); + this.setHardness(3.0F).setResistance(5.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.IRON); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/ore/IronBlock.java b/src/main/java/org/spout/vanilla/material/block/ore/IronBlock.java index 5aa673132..6d4c493f8 100644 --- a/src/main/java/org/spout/vanilla/material/block/ore/IronBlock.java +++ b/src/main/java/org/spout/vanilla/material/block/ore/IronBlock.java @@ -33,6 +33,6 @@ public class IronBlock extends Solid { public IronBlock(String name, int id) { super(name, id); - this.setHardness(5.0F).setResistance(10.0F).setMiningType(ToolType.PICKAXE, ToolLevel.STONE); + this.setHardness(5.0F).setResistance(10.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.STONE); } } diff --git a/src/main/java/org/spout/vanilla/material/block/ore/IronOre.java b/src/main/java/org/spout/vanilla/material/block/ore/IronOre.java index 1594bfb1f..00aa285de 100644 --- a/src/main/java/org/spout/vanilla/material/block/ore/IronOre.java +++ b/src/main/java/org/spout/vanilla/material/block/ore/IronOre.java @@ -38,7 +38,7 @@ public class IronOre extends Ore implements TimedCraftable { public IronOre(String name, int id) { super(name, id); - this.setHardness(3.0F).setResistance(5.0F).setMiningType(ToolType.PICKAXE, ToolLevel.STONE); + this.setHardness(3.0F).setResistance(5.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.STONE); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/ore/LapisLazuliBlock.java b/src/main/java/org/spout/vanilla/material/block/ore/LapisLazuliBlock.java index 5cd863dc7..911725e8a 100644 --- a/src/main/java/org/spout/vanilla/material/block/ore/LapisLazuliBlock.java +++ b/src/main/java/org/spout/vanilla/material/block/ore/LapisLazuliBlock.java @@ -33,6 +33,6 @@ public class LapisLazuliBlock extends Solid { public LapisLazuliBlock(String name, int id) { super(name, id); - this.setHardness(3.0F).setResistance(5.0F).setMiningType(ToolType.PICKAXE, ToolLevel.STONE); + this.setHardness(3.0F).setResistance(5.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.STONE); } } diff --git a/src/main/java/org/spout/vanilla/material/block/ore/LapisLazuliOre.java b/src/main/java/org/spout/vanilla/material/block/ore/LapisLazuliOre.java index a94c5b05c..86a558e22 100644 --- a/src/main/java/org/spout/vanilla/material/block/ore/LapisLazuliOre.java +++ b/src/main/java/org/spout/vanilla/material/block/ore/LapisLazuliOre.java @@ -39,7 +39,7 @@ public class LapisLazuliOre extends Ore implements TimedCraftable, InitializableMaterial { public LapisLazuliOre(String name, int id) { super(name, id); - this.setHardness(3.0F).setResistance(5.0F).setMiningType(ToolType.PICKAXE, ToolLevel.STONE); + this.setHardness(3.0F).setResistance(5.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.STONE); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/ore/RedstoneOre.java b/src/main/java/org/spout/vanilla/material/block/ore/RedstoneOre.java index dedbca202..ddafbc918 100644 --- a/src/main/java/org/spout/vanilla/material/block/ore/RedstoneOre.java +++ b/src/main/java/org/spout/vanilla/material/block/ore/RedstoneOre.java @@ -42,7 +42,7 @@ public class RedstoneOre extends Ore implements TimedCraftable, InitializableMat public RedstoneOre(String name, int id, boolean glowing) { super(name, id); this.glowing = glowing; - this.setHardness(3.0F).setResistance(5.0F).setMiningType(ToolType.PICKAXE, ToolLevel.IRON); + this.setHardness(3.0F).setResistance(5.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.STONE); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/piston/Piston.java b/src/main/java/org/spout/vanilla/material/block/piston/Piston.java index 02c7b590f..f2f4dc8eb 100644 --- a/src/main/java/org/spout/vanilla/material/block/piston/Piston.java +++ b/src/main/java/org/spout/vanilla/material/block/piston/Piston.java @@ -76,15 +76,14 @@ public boolean hasPhysics() { } @Override - public void onDestroyBlock(Block block) { - super.onDestroyBlock(block); + public void onDestroy(Block block) { if (this.isExtended(block)) { Block extension = block.translate(this.getFacing(block)); if (extension.getMaterial() instanceof PistonExtension) { extension.setMaterial(VanillaMaterials.AIR); } } - block.setMaterial(VanillaMaterials.AIR); + super.onDestroy(block); } @Override @@ -158,7 +157,7 @@ public boolean extend(Block block) { reac = this.getReaction(previous); if (reac == MoveReaction.BREAK) { //break block - nextMat.getSubMaterial(nextData).onDestroy(previous); + nextMat.getSubMaterial(nextData).destroy(previous); previous.setMaterial(prevMat, prevData); break; } else if (reac == MoveReaction.ALLOW) { diff --git a/src/main/java/org/spout/vanilla/material/block/piston/PistonExtension.java b/src/main/java/org/spout/vanilla/material/block/piston/PistonExtension.java index 078548cdf..15a4a6950 100644 --- a/src/main/java/org/spout/vanilla/material/block/piston/PistonExtension.java +++ b/src/main/java/org/spout/vanilla/material/block/piston/PistonExtension.java @@ -26,14 +26,11 @@ */ package org.spout.vanilla.material.block.piston; -import java.util.Set; - import org.spout.api.geo.cuboid.Block; import org.spout.api.material.BlockMaterial; import org.spout.api.material.block.BlockFace; import org.spout.api.math.Vector3; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; import org.spout.vanilla.entity.VanillaControllerTypes; import org.spout.vanilla.material.block.Directional; import org.spout.vanilla.material.block.controlled.ControlledMaterial; @@ -46,13 +43,13 @@ public PistonExtension(String name, int id) { } @Override - public void onDestroy(Block block, Set dropFlags) { + public void onDestroy(Block block) { block = block.translate(this.getFacing(block).getOpposite()); BlockMaterial mat = block.getMaterial(); if (mat instanceof Piston) { - ((Piston) mat).onDestroy(block, dropFlags); + ((Piston) mat).onDestroy(block); } else { - super.onDestroy(block, dropFlags); + super.onDestroy(block); } } diff --git a/src/main/java/org/spout/vanilla/material/block/plant/NetherWartBlock.java b/src/main/java/org/spout/vanilla/material/block/plant/NetherWartBlock.java index 29cedb6a9..f80771c73 100644 --- a/src/main/java/org/spout/vanilla/material/block/plant/NetherWartBlock.java +++ b/src/main/java/org/spout/vanilla/material/block/plant/NetherWartBlock.java @@ -32,9 +32,9 @@ import org.spout.api.geo.cuboid.Block; import org.spout.api.material.RandomBlockMaterial; import org.spout.api.material.block.BlockFace; +import org.spout.api.util.flag.Flag; import org.spout.vanilla.data.drops.flag.BlockFlags; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; import org.spout.vanilla.material.VanillaMaterials; import org.spout.vanilla.material.block.Growing; import org.spout.vanilla.material.block.Plant; @@ -52,12 +52,11 @@ public NetherWartBlock(String name, int id) { } @Override - public Set getDropFlags(Block block, Set flags) { - flags = super.getDropFlags(block, flags); + public void getBlockFlags(Block block, Set flags) { + super.getBlockFlags(block, flags); if (this.isFullyGrown(block)) { flags.add(BlockFlags.FULLY_GROWN); } - return flags; } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/plant/WheatCrop.java b/src/main/java/org/spout/vanilla/material/block/plant/WheatCrop.java index 0d52a39f3..6df40e9c7 100644 --- a/src/main/java/org/spout/vanilla/material/block/plant/WheatCrop.java +++ b/src/main/java/org/spout/vanilla/material/block/plant/WheatCrop.java @@ -36,9 +36,9 @@ import org.spout.api.inventory.special.InventorySlot; import org.spout.api.material.RandomBlockMaterial; import org.spout.api.material.block.BlockFace; +import org.spout.api.util.flag.Flag; import org.spout.vanilla.data.drops.flag.BlockFlags; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; import org.spout.vanilla.material.InitializableMaterial; import org.spout.vanilla.material.VanillaMaterials; import org.spout.vanilla.material.block.Crop; @@ -62,8 +62,8 @@ public void initialize() { } @Override - public Set getDropFlags(Block block, Set flags) { - flags = super.getDropFlags(block, flags); + public void getBlockFlags(Block block, Set flags) { + super.getBlockFlags(block, flags); Random rand = new Random(); if (rand.nextInt(15) <= getGrowthStage(block)) { flags.add(BlockFlags.SEEDS); @@ -71,7 +71,6 @@ public Set getDropFlags(Block block, Set flags) if (this.isFullyGrown(block)) { flags.add(BlockFlags.FULLY_GROWN); } - return flags; } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/BookShelf.java b/src/main/java/org/spout/vanilla/material/block/solid/BookShelf.java index 2320c4b9b..2bd4573b8 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/BookShelf.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/BookShelf.java @@ -43,7 +43,7 @@ public class BookShelf extends Solid implements Fuel, InitializableMaterial, Bur public BookShelf(String name, int id) { super(name, id); - this.setHardness(1.5F).setResistance(2.5F).setMiningType(ToolType.AXE, ToolLevel.WOOD); + this.setHardness(1.5F).setResistance(2.5F).addMiningType(ToolType.AXE).setMiningLevel(ToolLevel.WOOD); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/ClayBlock.java b/src/main/java/org/spout/vanilla/material/block/solid/ClayBlock.java index a2df79dfb..c84a361a4 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/ClayBlock.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/ClayBlock.java @@ -30,14 +30,13 @@ import org.spout.vanilla.material.InitializableMaterial; import org.spout.vanilla.material.VanillaMaterials; import org.spout.vanilla.material.block.Solid; -import org.spout.vanilla.util.ToolLevel; import org.spout.vanilla.util.ToolType; public class ClayBlock extends Solid implements InitializableMaterial { public ClayBlock(String name, int id) { super(name, id); this.setHardness(0.6F).setResistance(1.0F).setStepSound(SoundEffects.STEP_GRAVEL); - this.setMiningType(ToolType.SPADE, ToolLevel.WOOD); + this.addMiningType(ToolType.SPADE); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/Cobblestone.java b/src/main/java/org/spout/vanilla/material/block/solid/Cobblestone.java index 2f297bcc0..f89a1b78d 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/Cobblestone.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/Cobblestone.java @@ -39,7 +39,7 @@ public class Cobblestone extends Solid implements TimedCraftable { public Cobblestone(String name, int id) { super(name, id); - this.setHardness(2.0F).setResistance(10.0F).setMiningType(ToolType.PICKAXE, ToolLevel.WOOD); + this.setHardness(2.0F).setResistance(10.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.WOOD); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/Dirt.java b/src/main/java/org/spout/vanilla/material/block/solid/Dirt.java index 8ee8b5392..7367c3eed 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/Dirt.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/Dirt.java @@ -28,13 +28,12 @@ import org.spout.vanilla.data.effect.store.SoundEffects; import org.spout.vanilla.material.block.Solid; -import org.spout.vanilla.util.ToolLevel; import org.spout.vanilla.util.ToolType; public class Dirt extends Solid { public Dirt(String name, int id) { super(name, id); this.setHardness(0.5F).setResistance(0.8F).setStepSound(SoundEffects.STEP_GRAVEL); - this.setMiningType(ToolType.SPADE, ToolLevel.NONE); + this.addMiningType(ToolType.SPADE); } } diff --git a/src/main/java/org/spout/vanilla/material/block/solid/DoubleSlab.java b/src/main/java/org/spout/vanilla/material/block/solid/DoubleSlab.java index 489a3813a..c4f261fc4 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/DoubleSlab.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/DoubleSlab.java @@ -53,12 +53,12 @@ public DoubleSlab setSingleType(Slab slab) { private DoubleSlab(String name, Slab slab) { super((short) 0x0007, name, 43); - this.setSingleType(slab).setHardness(2.0F).setResistance(10.0F).setMiningType(ToolType.PICKAXE, ToolLevel.WOOD); + this.setSingleType(slab).setHardness(2.0F).setResistance(10.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.WOOD); } private DoubleSlab(String name, int data, DoubleSlab parent, Slab slab) { super(name, 43, data, parent); - this.setSingleType(slab).setHardness(2.0F).setResistance(10.0F).setMiningType(ToolType.PICKAXE, ToolLevel.WOOD); + this.setSingleType(slab).setHardness(2.0F).setResistance(10.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.WOOD); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/Grass.java b/src/main/java/org/spout/vanilla/material/block/solid/Grass.java index 43f48c13c..698319b83 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/Grass.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/Grass.java @@ -34,14 +34,13 @@ import org.spout.vanilla.material.InitializableMaterial; import org.spout.vanilla.material.VanillaMaterials; import org.spout.vanilla.material.block.SpreadingSolid; -import org.spout.vanilla.util.ToolLevel; import org.spout.vanilla.util.ToolType; public class Grass extends SpreadingSolid implements RandomBlockMaterial, InitializableMaterial { public Grass(String name, int id) { super(name, id); this.setHardness(0.6F).setResistance(0.8F).setStepSound(SoundEffects.STEP_GRASS); - this.setMiningType(ToolType.SPADE, ToolLevel.NONE); + this.addMiningType(ToolType.SPADE); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/Gravel.java b/src/main/java/org/spout/vanilla/material/block/solid/Gravel.java index 260bcfd4c..6762af835 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/Gravel.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/Gravel.java @@ -32,14 +32,13 @@ import org.spout.vanilla.material.VanillaMaterials; import org.spout.vanilla.material.block.SolidMoving; import org.spout.vanilla.util.Instrument; -import org.spout.vanilla.util.ToolLevel; import org.spout.vanilla.util.ToolType; public class Gravel extends SolidMoving implements InitializableMaterial { public Gravel(String name, int id) { super(name, id); this.setHardness(0.6F).setResistance(1.0F).setStepSound(SoundEffects.STEP_GRAVEL); - this.setMiningType(ToolType.SPADE, ToolLevel.NONE); + this.addMiningType(ToolType.SPADE); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/Ice.java b/src/main/java/org/spout/vanilla/material/block/solid/Ice.java index 1b93d3243..3cc63fdf1 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/Ice.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/Ice.java @@ -65,7 +65,7 @@ public boolean canSupport(BlockMaterial material, BlockFace face) { } @Override - public void onDestroyBlock(Block block) { + public void onDestroy(Block block) { if (!(block.getWorld().getGenerator() instanceof NetherGenerator) || block.translate(BlockFace.BOTTOM).getMaterial() != VanillaMaterials.AIR) { // TODO Setting the source to world correct? if (VanillaPlayerUtil.isCreative(block.getSource())) { @@ -80,7 +80,7 @@ public void onDestroyBlock(Block block) { } } } - block.setMaterial(VanillaMaterials.AIR); + super.onDecay(block); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/Log.java b/src/main/java/org/spout/vanilla/material/block/solid/Log.java index 070f2d296..80a53e7a9 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/Log.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/Log.java @@ -49,7 +49,6 @@ import org.spout.vanilla.material.block.plant.Sapling; import org.spout.vanilla.material.item.misc.Coal; import org.spout.vanilla.util.Instrument; -import org.spout.vanilla.util.ToolLevel; import org.spout.vanilla.util.ToolType; import org.spout.vanilla.util.VanillaPlayerUtil; @@ -71,14 +70,14 @@ public class Log extends Solid implements DynamicMaterial, Fuel, TimedCraftable, private Log(String name, Sapling sapling) { super(dataMask, name, 17); this.setHardness(2.0F).setResistance(10.F).setStepSound(SoundEffects.STEP_WOOD); - this.setMiningType(ToolType.AXE, ToolLevel.NONE); + this.addMiningType(ToolType.AXE); this.sapling = sapling; } private Log(String name, int data, Log parent, Sapling sapling) { super(name, 17, data, parent); this.setHardness(2.0F).setResistance(10.F).setStepSound(SoundEffects.STEP_WOOD); - this.setMiningType(ToolType.AXE, ToolLevel.NONE); + this.addMiningType(ToolType.AXE); this.sapling = sapling; } diff --git a/src/main/java/org/spout/vanilla/material/block/solid/MossStone.java b/src/main/java/org/spout/vanilla/material/block/solid/MossStone.java index 823eba5c3..d0a4bfd61 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/MossStone.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/MossStone.java @@ -34,7 +34,7 @@ public class MossStone extends Solid { public MossStone(String name, int id) { super(name, id); - this.setHardness(2.0F).setResistance(10.0F).setMiningType(ToolType.PICKAXE, ToolLevel.WOOD); + this.setHardness(2.0F).setResistance(10.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.WOOD); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/Mycelium.java b/src/main/java/org/spout/vanilla/material/block/solid/Mycelium.java index b4eaf46ef..a28c58ced 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/Mycelium.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/Mycelium.java @@ -32,13 +32,12 @@ import org.spout.vanilla.material.InitializableMaterial; import org.spout.vanilla.material.VanillaMaterials; import org.spout.vanilla.material.block.SpreadingSolid; -import org.spout.vanilla.util.ToolLevel; import org.spout.vanilla.util.ToolType; public class Mycelium extends SpreadingSolid implements InitializableMaterial { public Mycelium(String name, int id) { super(name, id); - this.setHardness(0.6F).setResistance(0.8F).setMiningType(ToolType.SPADE, ToolLevel.NONE); + this.setHardness(0.6F).setResistance(0.8F).addMiningType(ToolType.SPADE); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/Plank.java b/src/main/java/org/spout/vanilla/material/block/solid/Plank.java index df2e399aa..661259b87 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/Plank.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/Plank.java @@ -36,7 +36,6 @@ import org.spout.vanilla.material.VanillaMaterials; import org.spout.vanilla.material.block.Solid; import org.spout.vanilla.util.Instrument; -import org.spout.vanilla.util.ToolLevel; import org.spout.vanilla.util.ToolType; public class Plank extends Solid implements Fuel, Burnable { @@ -51,14 +50,14 @@ public Plank(String name) { super((short) 0x0003, name, 05); this.type = WoodType.OAK; this.setHardness(0.8F).setResistance(1.3F).setStepSound(SoundEffects.STEP_WOOD); - this.setMiningType(ToolType.AXE, ToolLevel.NONE); + this.addMiningType(ToolType.AXE); } public Plank(String name, WoodType type, Plank parent) { super(name, 05, type.getData(), parent); this.type = type; this.setHardness(0.8F).setResistance(1.3F).setStepSound(SoundEffects.STEP_WOOD); - this.setMiningType(ToolType.AXE, ToolLevel.NONE); + this.addMiningType(ToolType.AXE); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/Pumpkin.java b/src/main/java/org/spout/vanilla/material/block/solid/Pumpkin.java index bbb3a6f63..8066766ff 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/Pumpkin.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/Pumpkin.java @@ -33,7 +33,6 @@ import org.spout.vanilla.material.block.Directional; import org.spout.vanilla.material.block.Solid; -import org.spout.vanilla.util.ToolLevel; import org.spout.vanilla.util.ToolType; import org.spout.vanilla.util.VanillaPlayerUtil; @@ -43,7 +42,7 @@ public class Pumpkin extends Solid implements Directional { public Pumpkin(String name, int id, boolean lantern) { super(name, id); this.lantern = lantern; - this.setHardness(1.0F).setResistance(1.7F).setMiningType(ToolType.AXE, ToolLevel.NONE); + this.setHardness(1.0F).setResistance(1.7F).addMiningType(ToolType.AXE); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/Sand.java b/src/main/java/org/spout/vanilla/material/block/solid/Sand.java index 60b86aaf8..c89cfdd1d 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/Sand.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/Sand.java @@ -34,14 +34,13 @@ import org.spout.vanilla.material.block.SolidMoving; import org.spout.vanilla.material.block.controlled.FurnaceBlock; import org.spout.vanilla.util.Instrument; -import org.spout.vanilla.util.ToolLevel; import org.spout.vanilla.util.ToolType; public class Sand extends SolidMoving implements TimedCraftable { public Sand(String name, int id) { super(name, id); this.setHardness(0.5F).setResistance(0.8F).setStepSound(SoundEffects.STEP_SAND); - this.setMiningType(ToolType.SPADE, ToolLevel.NONE); + this.addMiningType(ToolType.SPADE); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/Sandstone.java b/src/main/java/org/spout/vanilla/material/block/solid/Sandstone.java index 5f8bb15a2..3f62e7a78 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/Sandstone.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/Sandstone.java @@ -41,13 +41,13 @@ public class Sandstone extends Solid { private Sandstone(String name) { super((short) 0x0003, name, 24); this.type = SandstoneType.SANDSTONE; - this.setHardness(0.8F).setResistance(1.3F).setMiningType(ToolType.PICKAXE, ToolLevel.WOOD); + this.setHardness(0.8F).setResistance(1.3F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.WOOD); } private Sandstone(String name, SandstoneType type, Sandstone parent) { super(name, 24, type.getData(), parent); this.type = type; - this.setHardness(0.8F).setResistance(1.3F).setMiningType(ToolType.PICKAXE, ToolLevel.WOOD); + this.setHardness(0.8F).setResistance(1.3F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.WOOD); } public SandstoneType getType() { diff --git a/src/main/java/org/spout/vanilla/material/block/solid/SnowBlock.java b/src/main/java/org/spout/vanilla/material/block/solid/SnowBlock.java index 3e3064f98..61af26fc1 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/SnowBlock.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/SnowBlock.java @@ -38,7 +38,7 @@ public class SnowBlock extends Solid implements InitializableMaterial { public SnowBlock(String name, int id) { super(name, id); this.setHardness(0.2F).setResistance(0.3F).setStepSound(SoundEffects.STEP_CLOTH); - this.setMiningType(ToolType.SPADE, ToolLevel.WOOD); + this.addMiningType(ToolType.SPADE).setMiningLevel(ToolLevel.WOOD); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/SoulSand.java b/src/main/java/org/spout/vanilla/material/block/solid/SoulSand.java index 84972ef7c..a7a2f742e 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/SoulSand.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/SoulSand.java @@ -36,7 +36,7 @@ public class SoulSand extends Solid { public SoulSand(String name, int id) { super(name, id); this.setHardness(0.5F).setResistance(0.8F).setStepSound(SoundEffects.STEP_SAND); - this.setMiningType(ToolType.SPADE, ToolLevel.WOOD); + this.addMiningType(ToolType.SPADE); } @Override diff --git a/src/main/java/org/spout/vanilla/material/block/solid/Stone.java b/src/main/java/org/spout/vanilla/material/block/solid/Stone.java index 43257b8d2..5c24393d5 100644 --- a/src/main/java/org/spout/vanilla/material/block/solid/Stone.java +++ b/src/main/java/org/spout/vanilla/material/block/solid/Stone.java @@ -36,7 +36,7 @@ public class Stone extends Solid implements InitializableMaterial { public Stone(String name, int id) { super(name, id); - this.setHardness(1.5F).setResistance(10.0F).setMiningType(ToolType.PICKAXE, ToolLevel.WOOD); + this.setHardness(1.5F).setResistance(10.0F).addMiningType(ToolType.PICKAXE).setMiningLevel(ToolLevel.WOOD); } @Override diff --git a/src/main/java/org/spout/vanilla/material/item/tool/MiningTool.java b/src/main/java/org/spout/vanilla/material/item/tool/MiningTool.java index fadaec7a2..6cb69239a 100644 --- a/src/main/java/org/spout/vanilla/material/item/tool/MiningTool.java +++ b/src/main/java/org/spout/vanilla/material/item/tool/MiningTool.java @@ -26,6 +26,10 @@ */ package org.spout.vanilla.material.item.tool; +import java.util.Set; + +import org.spout.api.inventory.ItemStack; +import org.spout.api.util.flag.Flag; import org.spout.vanilla.util.ToolLevel; import org.spout.vanilla.util.ToolType; @@ -34,13 +38,20 @@ */ public class MiningTool extends Tool { private float diggingSpeed; + private ToolLevel toolLevel; public MiningTool(String name, int id, ToolLevel toolLevel, ToolType toolType) { super(name, id, toolLevel.getMaxDurability(), toolType); - this.addDropFlags(toolLevel.getToolFlag()); + this.toolLevel = toolLevel; this.diggingSpeed = toolLevel.getDiggingSpeed(); } + @Override + public void getItemFlags(ItemStack item, Set flags) { + super.getItemFlags(item, flags); + flags.add(this.toolLevel.getToolFlag()); + } + /** * Gets the time this type of tool subtracts from the digging time
* The default digging speed without tool is 1.0 diff --git a/src/main/java/org/spout/vanilla/material/item/tool/Tool.java b/src/main/java/org/spout/vanilla/material/item/tool/Tool.java index 725e0d06b..3a326d200 100644 --- a/src/main/java/org/spout/vanilla/material/item/tool/Tool.java +++ b/src/main/java/org/spout/vanilla/material/item/tool/Tool.java @@ -26,17 +26,16 @@ */ package org.spout.vanilla.material.item.tool; -import java.util.Arrays; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; import java.util.Random; import java.util.Set; import org.spout.api.inventory.ItemStack; import org.spout.api.material.BlockMaterial; +import org.spout.api.util.flag.Flag; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; +import org.spout.vanilla.data.drops.flag.ToolEnchantFlags; import org.spout.vanilla.entity.VanillaEntityController; import org.spout.vanilla.entity.living.creature.hostile.Silverfish; import org.spout.vanilla.entity.living.creature.hostile.Skeleton; @@ -53,14 +52,12 @@ public abstract class Tool extends VanillaItemMaterial implements Enchantable { private short durability; private int enchantability; private Map strengthModifiers = new HashMap(); - private final HashSet dropFlags = new HashSet(); private ToolType toolType; public Tool(String name, int id, short durability, ToolType toolType) { super(name, id); this.durability = durability; this.toolType = toolType; - this.addDropFlags(this.toolType.getToolFlag()); } public short getDurabilityPenalty(ItemStack item) { @@ -122,22 +119,13 @@ public boolean hasNBTData() { return true; } - /** - * Gets all the drop flags this tool adds - * @return tool flags - */ - public Set getDropFlags() { - return this.dropFlags; - } - - /** - * Adds all the drop flags to this tool - * @param dropFlags to add - * @return this Tool - */ - public Tool addDropFlags(DropFlagSingle... dropFlags) { - this.dropFlags.addAll(Arrays.asList(dropFlags)); - return this; + @Override + public void getItemFlags(ItemStack item, Set flags) { + super.getItemFlags(item, flags); + flags.add(this.toolType.getToolFlag()); + if (EnchantmentUtil.hasEnchantment(item, Enchantments.SILK_TOUCH)) { + flags.add(ToolEnchantFlags.SILK_TOUCH); + } } public int getDamageBonus(VanillaEntityController damaged, ItemStack heldItem) { diff --git a/src/main/java/org/spout/vanilla/material/item/tool/weapon/Bow.java b/src/main/java/org/spout/vanilla/material/item/tool/weapon/Bow.java index b6d081fd0..547cc8261 100644 --- a/src/main/java/org/spout/vanilla/material/item/tool/weapon/Bow.java +++ b/src/main/java/org/spout/vanilla/material/item/tool/weapon/Bow.java @@ -31,7 +31,6 @@ import org.spout.api.geo.cuboid.Block; import org.spout.api.material.block.BlockFace; -import org.spout.vanilla.data.drops.flag.ToolTypeFlags; import org.spout.vanilla.entity.object.projectile.Arrow; import org.spout.vanilla.material.item.RangedWeapon; import org.spout.vanilla.util.ToolType; @@ -40,7 +39,6 @@ public class Bow extends RangedWeapon { public Bow(String name, int id, short durability) { super(name, id, durability, ToolType.BOW); this.setRangedDamage(9).setEnchantability(1); - this.addDropFlags(ToolTypeFlags.BOW); } @Override diff --git a/src/main/java/org/spout/vanilla/material/item/tool/weapon/Sword.java b/src/main/java/org/spout/vanilla/material/item/tool/weapon/Sword.java index d3e00f497..669ddccc6 100644 --- a/src/main/java/org/spout/vanilla/material/item/tool/weapon/Sword.java +++ b/src/main/java/org/spout/vanilla/material/item/tool/weapon/Sword.java @@ -26,7 +26,6 @@ */ package org.spout.vanilla.material.item.tool.weapon; -import org.spout.vanilla.data.drops.flag.ToolTypeFlags; import org.spout.vanilla.material.item.tool.Tool; import org.spout.vanilla.util.ToolLevel; import org.spout.vanilla.util.ToolType; @@ -35,7 +34,6 @@ public class Sword extends Tool { public Sword(String name, int id, ToolLevel toolLevel) { super(name, id, toolLevel.getMaxDurability(), ToolType.SWORD); - this.addDropFlags(ToolTypeFlags.SWORD); this.setDamage(4 + toolLevel.getDamageBonus()); } } diff --git a/src/main/java/org/spout/vanilla/protocol/handler/PlayerDiggingMessageHandler.java b/src/main/java/org/spout/vanilla/protocol/handler/PlayerDiggingMessageHandler.java index 6b81f6ed1..fe9c4bdfe 100644 --- a/src/main/java/org/spout/vanilla/protocol/handler/PlayerDiggingMessageHandler.java +++ b/src/main/java/org/spout/vanilla/protocol/handler/PlayerDiggingMessageHandler.java @@ -41,53 +41,38 @@ import org.spout.api.inventory.ItemStack; import org.spout.api.inventory.special.InventorySlot; import org.spout.api.material.BlockMaterial; -import org.spout.api.material.Material; import org.spout.api.material.basic.BasicAir; import org.spout.api.material.block.BlockFace; import org.spout.api.plugin.services.ProtectionService; import org.spout.api.protocol.MessageHandler; import org.spout.api.protocol.Session; +import org.spout.api.util.flag.Flag; import org.spout.vanilla.data.ExhaustionLevel; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; import org.spout.vanilla.data.drops.flag.PlayerFlags; -import org.spout.vanilla.data.drops.flag.ToolEnchantFlags; import org.spout.vanilla.data.effect.store.GeneralEffects; import org.spout.vanilla.entity.VanillaPlayerController; -import org.spout.vanilla.material.VanillaBlockMaterial; import org.spout.vanilla.material.VanillaMaterial; import org.spout.vanilla.material.VanillaMaterials; -import org.spout.vanilla.material.enchantment.Enchantments; import org.spout.vanilla.material.item.Food; import org.spout.vanilla.material.item.tool.Tool; import org.spout.vanilla.protocol.msg.BlockChangeMessage; import org.spout.vanilla.protocol.msg.PlayerDiggingMessage; -import org.spout.vanilla.util.EnchantmentUtil; import org.spout.vanilla.util.VanillaPlayerUtil; public final class PlayerDiggingMessageHandler extends MessageHandler { private void breakBlock(BlockMaterial blockMaterial, Block block, VanillaPlayerController player) { - if (blockMaterial instanceof VanillaBlockMaterial) { - HashSet flags = new HashSet(); - if (player.isSurvival()) { - flags.add(PlayerFlags.SURVIVAL); - } else { - flags.add(PlayerFlags.CREATIVE); - } - ItemStack heldItem = player.getInventory().getQuickbar().getCurrentItem(); - if (heldItem != null) { - if (EnchantmentUtil.hasEnchantment(heldItem, Enchantments.SILK_TOUCH)) { - flags.add(ToolEnchantFlags.SILK_TOUCH); - } - Material heldMaterial = heldItem.getMaterial(); - if (heldMaterial instanceof Tool) { - flags.addAll(((Tool) heldMaterial).getDropFlags()); - } - } - ((VanillaBlockMaterial) blockMaterial).onDestroy(block, flags); + HashSet flags = new HashSet(); + if (player.isSurvival()) { + flags.add(PlayerFlags.SURVIVAL); } else { - blockMaterial.onDestroy(block); + flags.add(PlayerFlags.CREATIVE); + } + ItemStack heldItem = player.getInventory().getQuickbar().getCurrentItem(); + if (heldItem != null) { + heldItem.getMaterial().getItemFlags(heldItem, flags); } + blockMaterial.destroy(block, flags); } @Override diff --git a/src/main/java/org/spout/vanilla/util/ToolLevel.java b/src/main/java/org/spout/vanilla/util/ToolLevel.java index 217030eba..deb7e5633 100644 --- a/src/main/java/org/spout/vanilla/util/ToolLevel.java +++ b/src/main/java/org/spout/vanilla/util/ToolLevel.java @@ -26,8 +26,7 @@ */ package org.spout.vanilla.util; -import org.spout.vanilla.data.drops.flag.DropFlagBundle; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; +import org.spout.api.util.flag.Flag; import org.spout.vanilla.data.drops.flag.ToolLevelFlags; public class ToolLevel { @@ -38,13 +37,13 @@ public class ToolLevel { public static final ToolLevel DIAMOND = new ToolLevel(ToolLevelFlags.DIAMOND, ToolLevelFlags.DIAMOND_UP, 8.0f, 1561, 3); public static final ToolLevel GOLD = new ToolLevel(ToolLevelFlags.GOLD, ToolLevelFlags.GOLD_UP, 12.0f, 32, 0); - private final DropFlagSingle toolFlag; - private final DropFlagBundle dropFlag; + private final Flag toolFlag; + private final Flag dropFlag; private final float diggingSpeed; private final short maxDurability; private final short damageBonus; - public ToolLevel(DropFlagSingle toolFlag, DropFlagBundle dropFlag, float diggingSpeed, int maxDurability, int damageBonus) { + public ToolLevel(Flag toolFlag, Flag dropFlag, float diggingSpeed, int maxDurability, int damageBonus) { this.toolFlag = toolFlag; this.dropFlag = dropFlag; this.diggingSpeed = diggingSpeed; @@ -66,7 +65,7 @@ public short getDamageBonus() { * * @return Tool flag */ - public DropFlagSingle getToolFlag() { + public Flag getToolFlag() { return this.toolFlag; } @@ -75,7 +74,7 @@ public DropFlagSingle getToolFlag() { * * @return Drop flag */ - public DropFlagBundle getDropFlag() { + public Flag getDropFlag() { return this.dropFlag; } diff --git a/src/main/java/org/spout/vanilla/util/ToolType.java b/src/main/java/org/spout/vanilla/util/ToolType.java index a91098f61..c3602e681 100644 --- a/src/main/java/org/spout/vanilla/util/ToolType.java +++ b/src/main/java/org/spout/vanilla/util/ToolType.java @@ -26,8 +26,7 @@ */ package org.spout.vanilla.util; -import org.spout.vanilla.data.drops.flag.DropFlag; -import org.spout.vanilla.data.drops.flag.DropFlagSingle; +import org.spout.api.util.flag.Flag; import org.spout.vanilla.data.drops.flag.ToolTypeFlags; public class ToolType { @@ -42,9 +41,9 @@ public class ToolType { public static final ToolType SPADE = new ToolType(ToolTypeFlags.SPADE); public static final ToolType HOE = new ToolType(ToolTypeFlags.HOE); - private final DropFlagSingle toolFlag; + private final Flag toolFlag; - public ToolType(DropFlagSingle toolFlag) { + public ToolType(Flag toolFlag) { this.toolFlag = toolFlag; } @@ -53,7 +52,7 @@ public ToolType(DropFlagSingle toolFlag) { * * @return tool flag */ - public DropFlagSingle getToolFlag() { + public Flag getToolFlag() { return this.toolFlag; } @@ -62,7 +61,7 @@ public DropFlagSingle getToolFlag() { * * @return drop flag */ - public DropFlag getDropFlag() { + public Flag getDropFlag() { return this.toolFlag; } } diff --git a/src/main/java/org/spout/vanilla/util/explosion/ExplosionModel.java b/src/main/java/org/spout/vanilla/util/explosion/ExplosionModel.java index 22039f36d..ae739893e 100644 --- a/src/main/java/org/spout/vanilla/util/explosion/ExplosionModel.java +++ b/src/main/java/org/spout/vanilla/util/explosion/ExplosionModel.java @@ -91,7 +91,7 @@ public synchronized void execute(Point position, float size, boolean fire, Sourc if (material instanceof VanillaBlockMaterial) { ((VanillaBlockMaterial) material).onIgnite(block); } else { - material.onDestroy(block); + material.destroy(block); } block.setMaterial(VanillaMaterials.AIR); }