package net.glowstone.block.blocktype; import net.glowstone.block.GlowBlock; import net.glowstone.block.ItemTable; import org.bukkit.Material; import org.bukkit.block.BlockFace; import org.bukkit.material.MaterialData; import org.bukkit.material.SimpleAttachableMaterialData; public class BlockNeedsAttached extends BlockType { @Override public void onNearBlockChanged(GlowBlock block, BlockFace face, GlowBlock changedBlock, Material oldType, byte oldData, Material newType, byte newData) { if (face == getAttachedFace(block)) { updatePhysics(block); } } @Override public void updatePhysics(GlowBlock me) { BlockFace attachedTo = getAttachedFace(me); if (me.getRelative(attachedTo).getType() == Material.AIR || !canPlaceAt(me, attachedTo)) { dropMe(me); } } @Override public boolean canPlaceAt(GlowBlock block, BlockFace against) { return !(ItemTable.instance().getBlock(block.getRelative(against).getType()) instanceof BlockNeedsAttached); } protected void dropMe(GlowBlock me) { me.breakNaturally(); } protected BlockFace getAttachedFace(GlowBlock me) { MaterialData data = me.getState().getData(); if (data instanceof SimpleAttachableMaterialData) { return ((SimpleAttachableMaterialData) data).getAttachedFace(); } else { return BlockFace.DOWN; } } }