package net.glowstone.block.blocktype; import net.glowstone.EventFactory; import net.glowstone.block.GlowBlock; import net.glowstone.block.GlowBlockState; import net.glowstone.entity.GlowPlayer; import org.bukkit.DoublePlantSpecies; import org.bukkit.GrassSpecies; import org.bukkit.Material; import org.bukkit.block.BlockFace; import org.bukkit.event.block.BlockGrowEvent; import org.bukkit.inventory.ItemStack; import org.bukkit.material.DoublePlant; import org.bukkit.material.LongGrass; import org.bukkit.material.MaterialData; import java.util.Arrays; import java.util.Collection; import java.util.Collections; public class BlockTallGrass extends BlockNeedsAttached implements IBlockGrowable { @Override public Collection<ItemStack> getDrops(GlowBlock block, ItemStack tool) { if (random.nextFloat() < .125) { return Collections.unmodifiableList(Arrays.asList(new ItemStack(Material.SEEDS, 1))); } return BlockDropless.EMPTY_STACK; } @Override public boolean canAbsorb(GlowBlock block, BlockFace face, ItemStack holding) { return true; } @Override public boolean canOverride(GlowBlock block, BlockFace face, ItemStack holding) { return true; } @Override public boolean isFertilizable(GlowBlock block) { final MaterialData data = block.getState().getData(); if (data instanceof LongGrass) { if (((LongGrass) data).getSpecies() != GrassSpecies.DEAD) { return true; } } else { warnMaterialData(LongGrass.class, data); } return false; } @Override public boolean canGrowWithChance(GlowBlock block) { return true; } @Override public void grow(GlowPlayer player, GlowBlock block) { final MaterialData data = block.getState().getData(); if (data instanceof LongGrass) { final GrassSpecies species = ((LongGrass) data).getSpecies(); if (species == GrassSpecies.NORMAL || species == GrassSpecies.FERN_LIKE) { final GlowBlockState headBlockState = block.getRelative(BlockFace.UP).getState(); if (headBlockState.getType() == Material.AIR) { final DoublePlantSpecies doublePlantSpecies = species == GrassSpecies.FERN_LIKE ? DoublePlantSpecies.LARGE_FERN : DoublePlantSpecies.DOUBLE_TALLGRASS; final GlowBlockState blockState = block.getState(); blockState.setType(Material.DOUBLE_PLANT); blockState.setData(new DoublePlant(doublePlantSpecies)); headBlockState.setType(Material.DOUBLE_PLANT); headBlockState.setData(new DoublePlant(DoublePlantSpecies.PLANT_APEX)); BlockGrowEvent growEvent = new BlockGrowEvent(block, blockState); EventFactory.callEvent(growEvent); if (!growEvent.isCancelled()) { blockState.update(true); headBlockState.update(true); } } } } else { warnMaterialData(LongGrass.class, data); } } }