package net.glowstone.block.blocktype; import net.glowstone.block.GlowBlock; import net.glowstone.block.GlowBlockState; import net.glowstone.entity.GlowPlayer; import org.bukkit.Material; import org.bukkit.block.BlockFace; import org.bukkit.inventory.ItemStack; import org.bukkit.material.Comparator; import org.bukkit.util.Vector; public class BlockRedstoneComparator extends BlockNeedsAttached { public BlockRedstoneComparator() { setDrops(new ItemStack(Material.REDSTONE_COMPARATOR)); } @Override public boolean blockInteract(GlowPlayer player, GlowBlock block, BlockFace face, Vector clickedLoc) { Comparator comparator = (Comparator) block.getState().getData(); comparator.setSubtractionMode(!comparator.isSubtractionMode()); block.setData(comparator.getData()); block.getWorld().requestPulse(block); return true; } @Override public void afterPlace(GlowPlayer player, GlowBlock block, ItemStack holding, GlowBlockState oldState) { updatePhysics(block); } @Override public void onNearBlockChanged(GlowBlock block, BlockFace face, GlowBlock changedBlock, Material oldType, byte oldData, Material newType, byte newData) { updatePhysics(block); } @Override public void placeBlock(GlowPlayer player, GlowBlockState state, BlockFace face, ItemStack holding, Vector clickedLoc) { super.placeBlock(player, state, face, holding, clickedLoc); Comparator comparator = (Comparator) state.getData(); comparator.setFacingDirection(player.getDirection()); comparator.setSubtractionMode(false); state.getBlock().setData(comparator.getData()); state.getWorld().requestPulse(state.getBlock()); } @Override public boolean isPulseOnce(GlowBlock block) { return true; } @Override public int getPulseTickSpeed(GlowBlock block) { return 2; } }