Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package nl.Matthijs.Mattie.RedstoneSponge;
- import java.util.logging.Logger;
- import org.bukkit.Material;
- import org.bukkit.Server;
- import org.bukkit.World;
- import org.bukkit.block.*;
- import org.bukkit.event.block.*;
- public class RedstoneSpongeBlockListener extends BlockListener
- {
- private final RedstoneSponge plugin;
- private final Server server;
- final Logger logger = Logger.getLogger("Minecraft");
- private final int SPONGE = 19;
- private final int WATER = 8;
- private final int STATIONARY_WATER = 9;
- private final int LAVA = 10;
- private final int STATIONARY_LAVA = 11;
- private final int AIR = 0;
- private final int WOOL = 35;
- // private static World world;
- private int radius;
- private int woolColour;
- public RedstoneSpongeBlockListener(RedstoneSponge instance)
- {
- this.plugin = instance;
- this.server = plugin.getServer();
- radius = plugin.getRadius();
- }
- @Override
- public void onBlockPlace(BlockPlaceEvent event)
- {
- Block blockPlaced = event.getBlock();
- World world = blockPlaced.getWorld();
- boolean blockWhenPowered = plugin.isblockWhenPoweredEnabled();
- if (blockPlaced.getTypeId() == SPONGE)
- {
- boolean waterSponge = plugin.isWaterSpongeEnabled();
- // blockWhenPowered == false -> default, a sponge works like a
- // sponge without redstone current
- if (blockWhenPowered == false)
- {
- if (waterSponge && (!blockPlaced.isBlockIndirectlyPowered() || !blockPlaced.isBlockPowered()))
- {
- clearWater(world, blockPlaced);
- }
- boolean lavaSponge = plugin.isLavaSpongeEnabled();
- if (lavaSponge && (!blockPlaced.isBlockIndirectlyPowered() || !blockPlaced.isBlockPowered()))
- {
- clearLava(world, blockPlaced);
- }
- }
- // blockWhenPowered == true -> sponge works like sponge WITH
- // redstone current
- else
- {
- if (waterSponge && (blockPlaced.isBlockIndirectlyPowered() || blockPlaced.isBlockPowered()))
- {
- clearWater(world, blockPlaced);
- }
- boolean lavaSponge = plugin.isLavaSpongeEnabled();
- if (lavaSponge && (blockPlaced.isBlockIndirectlyPowered() || blockPlaced.isBlockPowered()))
- {
- clearLava(world, blockPlaced);
- }
- }
- }
- }
- @Override
- public void onBlockPhysics(BlockPhysicsEvent event)
- {
- // System.out.println("block flow event");
- World world = event.getBlock().getWorld();
- Block blockFrom = event.getBlock();
- Block blockTo = event.getBlock();
- boolean isLava = blockFrom.getTypeId() == 10 || blockFrom.getTypeId() == 11;
- boolean isWater = blockFrom.getTypeId() == 8 || blockFrom.getTypeId() == 9;
- boolean waterSponge = plugin.isWaterSpongeEnabled();
- boolean lavaSponge = plugin.isLavaSpongeEnabled();
- // is the flow water or lava and are the sponges enabled
- if ((lavaSponge && isLava) || (waterSponge && isWater))
- {
- cancelFlow(world, blockTo, event);
- }
- }
- public void cancelFlow(World world, Block blockTo, BlockPhysicsEvent event)
- {
- int blockX = blockTo.getX();
- int blockY = blockTo.getY();
- int blockZ = blockTo.getZ();
- boolean blockWhenPowered = plugin.isblockWhenPoweredEnabled();
- radius = plugin.getRadius();
- for (int radX = 0 - radius; radX <= radius; radX++)
- {
- for (int radY = 0 - radius; radY <= radius; radY++)
- {
- for (int radZ = 0 - radius; radZ <= radius; radZ++)
- {
- Block isThisSponge = world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ);
- int id = isThisSponge.getTypeId();
- if (blockWhenPowered == false)
- {
- if (id == SPONGE && (!isThisSponge.isBlockIndirectlyPowered() || !isThisSponge.isBlockPowered()))
- {
- event.setCancelled(true);
- System.out.println("ABCis event cancelled: " + event.isCancelled());
- return;
- }
- }
- else
- {
- if (id == SPONGE && (isThisSponge.isBlockIndirectlyPowered() || isThisSponge.isBlockPowered()))
- {
- event.setCancelled(true);
- return;
- }
- }
- }
- }
- }
- }
- public void clearWater(World world, Block blockPlaced)
- {
- int blockX = blockPlaced.getX();
- int blockY = blockPlaced.getY();
- int blockZ = blockPlaced.getZ();
- radius = plugin.getRadius();
- for (int radX = 0 - radius; radX <= radius; radX++)
- {
- for (int radY = 0 - radius; radY <= radius; radY++)
- {
- for (int radZ = 0 - radius; radZ <= radius; radZ++)
- {
- Block b = world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ);
- int id = b.getTypeId();
- if (id == WATER || id == STATIONARY_WATER)
- {
- world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ).setTypeId(AIR);
- }
- }
- }
- }
- }
- public void clearLava(World world, Block blockPlaced)
- {
- int blockX = blockPlaced.getX();
- int blockY = blockPlaced.getY();
- int blockZ = blockPlaced.getZ();
- radius = plugin.getRadius();
- for (int radX = 0 - radius; radX <= radius; radX++)
- {
- for (int radY = 0 - radius; radY <= radius; radY++)
- {
- for (int radZ = 0 - radius; radZ <= radius; radZ++)
- {
- Block b = world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ);
- int id = b.getTypeId();
- if (id == LAVA || id == STATIONARY_LAVA)
- {
- world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ).setTypeId(AIR);
- }
- }
- }
- }
- }
- @Override
- public void onBlockRedstoneChange(BlockRedstoneEvent event)
- {
- boolean convert = plugin.isConvertWhenPoweredEnabled();
- if (!convert)
- {
- redstoneSpongeToggle(event);
- }
- else if (convert)
- {
- redstoneSpongeConvert(event);
- }
- }
- public void redstoneSpongeConvert(BlockRedstoneEvent event)
- {
- World world = event.getBlock().getWorld();
- Block blockTo = event.getBlock();
- int blockX = blockTo.getX();
- int blockY = blockTo.getY();
- int blockZ = blockTo.getZ();
- radius = plugin.getRadius();
- boolean waterSponge = plugin.isWaterSpongeEnabled();
- boolean lavaSponge = plugin.isLavaSpongeEnabled();
- int convertID = plugin.getConvertID();
- boolean blockWhenPowered = plugin.isblockWhenPoweredEnabled();
- for (int radX = -1; radX <= 1; radX++)
- {
- for (int radY = -1; radY <= 1; radY++)
- {
- for (int radZ = -1; radZ <= 1; radZ++)
- {
- Block theBlock = world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ);
- int id = theBlock.getTypeId();
- if (blockWhenPowered == false)
- {
- if (id == convertID && (theBlock.isBlockPowered() || theBlock.isBlockIndirectlyPowered()))
- {
- theBlock.setTypeId(SPONGE);
- spongeEvent(theBlock);
- }
- else if (id == SPONGE && (!theBlock.isBlockPowered() || !theBlock.isBlockIndirectlyPowered()))
- {
- theBlock.setTypeId(convertID);
- if (convertID == WOOL)
- {
- woolColour = plugin.getWoolColour();
- theBlock.setData((byte) woolColour);
- }
- }
- }
- else
- {
- if (id == convertID && (!theBlock.isBlockPowered() || !theBlock.isBlockIndirectlyPowered()))
- {
- theBlock.setTypeId(SPONGE);
- spongeEvent(theBlock);
- }
- else if (id == SPONGE && (theBlock.isBlockPowered() || theBlock.isBlockIndirectlyPowered()))
- {
- theBlock.setTypeId(convertID);
- if (convertID == WOOL)
- {
- woolColour = plugin.getWoolColour();
- theBlock.setData((byte) woolColour);
- }
- }
- }
- }
- }
- }
- }
- public void redstoneSpongeToggle(BlockRedstoneEvent event)
- {
- World world = event.getBlock().getWorld();
- Block blockTo = event.getBlock();
- int blockX = blockTo.getX();
- int blockY = blockTo.getY();
- int blockZ = blockTo.getZ();
- radius = plugin.getRadius();
- boolean waterSponge = plugin.isWaterSpongeEnabled();
- boolean lavaSponge = plugin.isLavaSpongeEnabled();
- boolean blockWhenPowered = plugin.isblockWhenPoweredEnabled();
- for (int radX = -1; radX <= 1; radX++)
- {
- for (int radY = -1; radY <= 1; radY++)
- {
- for (int radZ = -1; radZ <= 1; radZ++)
- {
- Block isThisSponge = world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ);
- int id = isThisSponge.getTypeId();
- if (blockWhenPowered == false)
- {
- if (id == SPONGE && (isThisSponge.isBlockPowered() || isThisSponge.isBlockIndirectlyPowered()))
- {
- if (waterSponge)
- clearWater(world, isThisSponge);
- if (lavaSponge)
- clearLava(world, isThisSponge);
- }
- else if (id == SPONGE && (!isThisSponge.isBlockPowered() || !isThisSponge.isBlockIndirectlyPowered()))
- {
- isThisSponge.setTypeId(41);// just a temp-block so
- // it
- // won't "throw off" the
- // redstone on top
- isThisSponge.setTypeId(SPONGE);
- spongeEvent(isThisSponge);
- }
- }
- else
- {
- if (id == SPONGE && (!isThisSponge.isBlockPowered() || !isThisSponge.isBlockIndirectlyPowered()))
- {
- if (waterSponge)
- clearWater(world, isThisSponge);
- if (lavaSponge)
- clearLava(world, isThisSponge);
- }
- else if (id == SPONGE && (isThisSponge.isBlockPowered() || isThisSponge.isBlockIndirectlyPowered()))
- {
- isThisSponge.setTypeId(41);// just a temp-block so
- // it
- // won't "throw off" the
- // redstone on top
- isThisSponge.setTypeId(SPONGE);
- spongeEvent(isThisSponge);
- }
- }
- }
- }
- }
- }
- public void spongeToWool(BlockPhysicsEvent event)
- {
- Block b = event.getBlock();
- if (b.getFace(BlockFace.NORTH).getType() == Material.SPONGE)
- {
- Block despons = event.getBlock().getRelative(BlockFace.NORTH);
- despons.setTypeId(35);
- despons.setData((byte) 4);// set yellow
- }
- if (b.getFace(BlockFace.EAST).getType() == Material.SPONGE)
- {
- Block despons = event.getBlock().getRelative(BlockFace.EAST);
- despons.setTypeId(35);
- despons.setData((byte) 4);// set yellow
- }
- if (b.getFace(BlockFace.SOUTH).getType() == Material.SPONGE)
- {
- Block despons = event.getBlock().getRelative(BlockFace.SOUTH);
- despons.setTypeId(35);
- despons.setData((byte) 4);// set yellow
- }
- if (b.getFace(BlockFace.WEST).getType() == Material.SPONGE)
- {
- Block despons = event.getBlock().getRelative(BlockFace.WEST);
- despons.setTypeId(35);
- despons.setData((byte) 4);// set yellow
- }
- if (b.getFace(BlockFace.UP).getType() == Material.SPONGE)
- {
- Block despons = event.getBlock().getRelative(BlockFace.UP);
- despons.setTypeId(35);
- despons.setData((byte) 4);// set yellow
- }
- if (b.getFace(BlockFace.DOWN).getType() == Material.SPONGE)
- {
- Block despons = event.getBlock().getRelative(BlockFace.DOWN);
- despons.setTypeId(35);
- despons.setData((byte) 4);// set yellow
- }
- }
- public void woolToSponge(BlockPhysicsEvent event)
- {
- Block b = event.getBlock();
- Byte yellow = ((byte) 14); // sometime it's 14 for yellow
- Byte yellow2 = ((byte) 15);// and sometime it's 12
- Byte data = b.getData();
- System.out.println("data " + b.getData() + " de yellow " + yellow);
- if (b.getFace(BlockFace.NORTH).getType() == Material.WOOL && (data == yellow || data == yellow2))
- {
- Block despons = event.getBlock().getRelative(BlockFace.NORTH);
- despons.setTypeId(SPONGE);
- spongeEvent(despons);
- }
- if (b.getFace(BlockFace.EAST).getType() == Material.WOOL && (data == yellow || data == yellow2))
- {
- Block despons = event.getBlock().getRelative(BlockFace.EAST);
- despons.setTypeId(SPONGE);
- spongeEvent(despons);
- }
- if (b.getFace(BlockFace.SOUTH).getType() == Material.WOOL && (data == yellow || data == yellow2))
- {
- Block despons = event.getBlock().getRelative(BlockFace.SOUTH);
- despons.setTypeId(SPONGE);
- spongeEvent(despons);
- }
- if (b.getFace(BlockFace.WEST).getType() == Material.WOOL && (data == yellow || data == yellow2))
- {
- Block despons = event.getBlock().getRelative(BlockFace.WEST);
- despons.setTypeId(SPONGE);
- spongeEvent(despons);
- }
- if (b.getFace(BlockFace.UP).getType() == Material.WOOL && (data == yellow || data == yellow2))
- {
- Block despons = event.getBlock().getRelative(BlockFace.UP);
- despons.setTypeId(SPONGE);
- spongeEvent(despons);
- }
- if (b.getFace(BlockFace.DOWN).getType() == Material.WOOL && (data == yellow || data == yellow2))
- {
- Block despons = event.getBlock().getRelative(BlockFace.DOWN);
- despons.setTypeId(SPONGE);
- spongeEvent(despons);
- }
- }
- public void spongeEvent(Block b)
- {
- Block blockPlaced = b;
- World world = blockPlaced.getWorld();
- boolean blockWhenPowered = plugin.isblockWhenPoweredEnabled();
- boolean lavaSponge = plugin.isLavaSpongeEnabled();
- boolean waterSponge = plugin.isWaterSpongeEnabled();
- if (blockPlaced.getTypeId() == SPONGE)
- {
- if (blockWhenPowered == false)
- {
- if (waterSponge && (!blockPlaced.isBlockIndirectlyPowered() || !blockPlaced.isBlockPowered()))
- {
- clearWater(world, blockPlaced);
- }
- if (lavaSponge && (!blockPlaced.isBlockIndirectlyPowered() || !blockPlaced.isBlockPowered()))
- {
- clearLava(world, blockPlaced);
- }
- }
- else
- {
- if (waterSponge && (blockPlaced.isBlockIndirectlyPowered() || blockPlaced.isBlockPowered()))
- {
- clearWater(world, blockPlaced);
- }
- if (lavaSponge && (blockPlaced.isBlockIndirectlyPowered() || blockPlaced.isBlockPowered()))
- {
- clearLava(world, blockPlaced);
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement