package choonster.testmod3.dispensebehavior; import net.minecraft.dispenser.BehaviorDefaultDispenseItem; import net.minecraft.dispenser.IBehaviorDispenseItem; import net.minecraft.dispenser.IBlockSource; import net.minecraft.init.Bootstrap; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; /** * An extension of {@link Bootstrap.BehaviorDispenseOptional} that can delegate to another {@link IBehaviorDispenseItem} implementation. * * @author Choonster */ public class BehaviorDispenseDelegate extends Bootstrap.BehaviorDispenseOptional { /** * The {@link IBehaviorDispenseItem} to delegate to. */ protected final IBehaviorDispenseItem delegate; /** * Whether to play sounds and spawn particles. Should be set from an override of {@link BehaviorDefaultDispenseItem#dispenseStack}. */ protected boolean doSoundsParticles; public BehaviorDispenseDelegate(IBehaviorDispenseItem delegate) { this.delegate = delegate; } /** * Call the delegate's {@link IBehaviorDispenseItem#dispense} method without playing sounds or spawning particles * from this behavior. * * @param source The block source * @param stack The item * @return The replacement item */ protected ItemStack callDelegate(IBlockSource source, ItemStack stack) { doSoundsParticles = false; return delegate.dispense(source, stack); } @Override protected void spawnDispenseParticles(IBlockSource source, EnumFacing facingIn) { if (doSoundsParticles) { super.spawnDispenseParticles(source, facingIn); } } @Override protected void playDispenseSound(IBlockSource source) { if (doSoundsParticles) { super.playDispenseSound(source); } } }