Mattie

Mattie

Jan 24th, 2011
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.67 KB | None | 0 0
  1. package com.bukkit.Matthijs.RedstoneSponge;
  2.  
  3. import java.util.logging.Level;
  4. import java.util.logging.Logger;
  5.  
  6. import org.bukkit.Material;
  7. import org.bukkit.Server;
  8. import org.bukkit.World;
  9. import org.bukkit.block.*;
  10. import org.bukkit.block.Sign;
  11. import org.bukkit.event.block.*;
  12. import org.bukkit.material.*;
  13.  
  14. public class RedstoneSpongeBlockListener extends BlockListener
  15. {
  16.     private final RedstoneSponge    plugin;
  17.     private final Server            server;
  18.     final Logger                    logger  = Logger.getLogger("Minecraft");
  19.     private final int               SPONGE  = 19;
  20.     private static World            world;
  21.     private int                     radius;
  22.  
  23.     public RedstoneSpongeBlockListener(RedstoneSponge instance)
  24.     {
  25.         this.plugin = instance;
  26.         this.server = plugin.getServer();
  27.         radius = plugin.getRadius();
  28.         System.out.println("raduis: " + radius);
  29.     }
  30.  
  31.     public void onBlockPlace(BlockPlaceEvent event)
  32.     {
  33.         Block blockPlaced = event.getBlock();
  34.         World world = blockPlaced.getWorld();
  35.         if (blockPlaced.getTypeId() == SPONGE)
  36.         {
  37.             int blockX = blockPlaced.getX();
  38.             int blockY = blockPlaced.getY();
  39.             int blockZ = blockPlaced.getZ();
  40. //          int radius = plugin.getRadius();
  41.             radius = plugin.getRadius();
  42.             boolean waterSponge = plugin.isWaterSpongeEnabled();
  43.             boolean lavaSponge = plugin.isLavaSpongeEnabled();
  44.  
  45.             for (int radX = 0 - radius; radX <= radius; radX++)
  46.             {
  47.                 for (int radY = 0 - radius; radY <= radius; radY++)
  48.                 {
  49.                     for (int radZ = 0 - radius; radZ <= radius; radZ++)
  50.                     {
  51.                         int id = world.getBlockTypeIdAt(blockX + radX, blockY + radY, blockZ + radZ);
  52.                         if (lavaSponge && (id == 10 || id == 11))
  53.                         {
  54.                             world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ).setTypeId(0);
  55.                         }
  56.                         else if (waterSponge && (id == 8 || id == 9))
  57.                         {
  58.                             world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ).setTypeId(0);
  59.                         }
  60.                     }
  61.  
  62.                 }
  63.  
  64.             }
  65.  
  66.         }
  67.     }
  68.  
  69.     public void onBlockRedstoneChange(BlockFromToEvent event)
  70.     {
  71.  
  72. //      System.out.println("redstonechange");
  73.         logger.log(Level.INFO, "onredstonechange");
  74.         world = event.getBlock().getWorld();
  75.         Block blockFrom = event.getBlock();
  76. //      Block blockTo = event.getToBlock();
  77.         Material north = event.getBlock().getFace(BlockFace.NORTH).getType();
  78.         Material east = event.getBlock().getFace(BlockFace.EAST).getType();
  79.         Material south = event.getBlock().getFace(BlockFace.SOUTH).getType();
  80.         Material west = event.getBlock().getFace(BlockFace.WEST).getType();
  81.         Material spons = Material.SPONGE;
  82.         Material wool = Material.WOOL;
  83.  
  84.         if (north == spons || east == spons || south == spons || west == spons)
  85.         {
  86.             if (isBlockIndirectlyPowered(blockFrom) || isBlockPowered2(blockFrom))
  87.             {
  88.                 System.out.println("SPONS isindirect: " + isBlockIndirectlyPowered(blockFrom) + "  is direct " + isBlockPowered2(blockFrom));
  89.                 spongeToWool(event);
  90.  
  91.             }
  92.  
  93.         }
  94.  
  95.         if ((north == wool || east == wool || south == wool || west == wool))
  96.         {
  97.             System.out.println("wool if dinges");
  98.             System.out.println("123WOOL isindirect: " + !isBlockIndirectlyPowered(blockFrom) + "  is direct " + !isBlockPowered2(blockFrom));
  99.  
  100.             boolean test = !isBlockIndirectlyPowered(blockFrom) && !isBlockPowered2(blockFrom);
  101.  
  102.             if (test == false)
  103.             {
  104.                 System.out.println("WOOL isindirect: " + !isBlockIndirectlyPowered(blockFrom) + "  is direct " + !isBlockPowered2(blockFrom));
  105.                 woolToSponge(event);
  106.  
  107.             }
  108.  
  109.         }
  110.  
  111. //      System.out.println("blockfrom: " + blockFrom.getType());
  112. //      System.out.println("blockTo: " + blockTo.getType());
  113.     }
  114.  
  115.     public void spongeToWool(BlockFromToEvent event)
  116.     {
  117.         logger.log(Level.INFO, "IF SPONS");
  118.         if (event.getBlock().getFace(BlockFace.NORTH).getType() == Material.SPONGE)
  119.         {
  120.             Block despons = event.getBlock().getRelative(BlockFace.NORTH);
  121.             despons.setTypeId(35);
  122.             despons.setData((byte) 4);//set yellow
  123.  
  124.         }
  125.         if (event.getBlock().getFace(BlockFace.EAST).getType() == Material.SPONGE)
  126.         {
  127.             Block despons = event.getBlock().getRelative(BlockFace.EAST);
  128.             despons.setTypeId(35);
  129.             despons.setData((byte) 4);//set yellow
  130.  
  131.         }
  132.         if (event.getBlock().getFace(BlockFace.SOUTH).getType() == Material.SPONGE)
  133.         {
  134.             Block despons = event.getBlock().getRelative(BlockFace.SOUTH);
  135.             despons.setTypeId(35);
  136.             despons.setData((byte) 4);//set yellow
  137.  
  138.         }
  139.         if (event.getBlock().getFace(BlockFace.WEST).getType() == Material.SPONGE)
  140.         {
  141.             Block despons = event.getBlock().getRelative(BlockFace.WEST);
  142.             despons.setTypeId(35);
  143.             despons.setData((byte) 4);//set yellow
  144.  
  145.         }
  146.     }
  147.  
  148.     public void woolToSponge(BlockFromToEvent event)
  149.     {
  150.         logger.log(Level.INFO, "ELSE IF WOOL");
  151.         if (event.getBlock().getFace(BlockFace.NORTH).getType() == Material.WOOL)
  152.         {
  153.             Block despons = event.getBlock().getRelative(BlockFace.NORTH);
  154.             despons.setTypeId(SPONGE);
  155.         }
  156.         if (event.getBlock().getFace(BlockFace.EAST).getType() == Material.WOOL)
  157.         {
  158.             Block despons = event.getBlock().getRelative(BlockFace.EAST);
  159.             despons.setTypeId(SPONGE);
  160.         }
  161.         if (event.getBlock().getFace(BlockFace.SOUTH).getType() == Material.WOOL)
  162.         {
  163.             Block despons = event.getBlock().getRelative(BlockFace.SOUTH);
  164.             despons.setTypeId(SPONGE);
  165.         }
  166.         if (event.getBlock().getFace(BlockFace.WEST).getType() == Material.WOOL)
  167.         {
  168.             Block despons = event.getBlock().getRelative(BlockFace.WEST);
  169.             despons.setTypeId(SPONGE);
  170.         }
  171.  
  172.     }
  173.  
  174.     public static World getWorld()
  175.     {
  176.         return world;
  177.     }
  178.  
  179.     /**
  180.      ** Returns true if the block at the given x, y, z coordinates is indirectly
  181.      * powered
  182.      **
  183.      * @param x
  184.      *            coordinate
  185.      ** @param y
  186.      *            coordinate
  187.      ** @param z
  188.      *            coordinate
  189.      **/
  190.     public static boolean isBlockIndirectlyPowered(Block b)
  191.     {
  192.         int x = b.getX();
  193.         int y = b.getY();
  194.         int z = b.getZ();
  195.  
  196.         return isBlockPowered(x + 1, y, z) || isBlockPowered(x - 1, y, z) || isBlockPowered(x, y, z + 1) || isBlockPowered(x, y, z - 1) || isBlockPowered(x, y - 1, z);
  197.     }
  198.  
  199.     /**
  200.      ** Returns true if the block at the given x, y, z coordinates is directly
  201.      * powered
  202.      **
  203.      * @param x
  204.      *            coordinate
  205.      ** @param y
  206.      *            coordinate
  207.      ** @param z
  208.      *            coordinate
  209.      **/
  210.     public static boolean isBlockPowered(int x, int y, int z)
  211.     {
  212.         MaterialData md = getWorld().getBlockAt(x, y, z).getState().getData();
  213.         if (md instanceof Redstone)
  214.         {
  215.             return ((Redstone) md).isPowered();
  216.         }
  217.         return false;
  218.     }
  219.  
  220.     public static boolean isBlockPowered2(Block b)
  221.     {
  222.  
  223.         int x = b.getX();
  224.         int y = b.getY();
  225.         int z = b.getZ();
  226.  
  227.         MaterialData md = getWorld().getBlockAt(x, y, z).getState().getData();
  228.         if (md instanceof Redstone)
  229.         {
  230.             return ((Redstone) md).isPowered();
  231.         }
  232.         return false;
  233.     }
  234.  
  235.     public void onBlockFlow(BlockFromToEvent event)
  236.     {
  237.         World world = event.getBlock().getWorld();
  238.         Block blockFrom = event.getBlock();
  239.         Block blockTo = event.getToBlock();
  240.         boolean isLava = blockFrom.getTypeId() == 10 || blockFrom.getTypeId() == 11;
  241.         boolean isWater = blockFrom.getTypeId() == 8 || blockFrom.getTypeId() == 9;
  242.         boolean waterSponge = plugin.isWaterSpongeEnabled();
  243.         boolean lavaSponge = plugin.isLavaSpongeEnabled();
  244. //      int radius = plugin.getRadius();
  245.         if (lavaSponge && isLava || waterSponge && isWater)
  246.         {
  247.             int blockX = blockTo.getX();
  248.             int blockY = blockTo.getY();
  249.             int blockZ = blockTo.getZ();
  250.  
  251.             for (int radX = 0 - radius; radX <= radius; radX++)
  252.             {
  253.                 for (int radY = 0 - radius; radY <= radius; radY++)
  254.                 {
  255.                     for (int radZ = 0 - radius; radZ <= radius; radZ++)
  256.                     {
  257.                         int id = world.getBlockTypeIdAt(blockX + radX, blockY + radY, blockZ + radZ);
  258.                         if (id == SPONGE)
  259.                         {
  260.  
  261.                             event.setCancelled(true);
  262.                             return;
  263.                         }
  264.                     }
  265.  
  266.                 }
  267.  
  268.             }
  269.  
  270.         }
  271.     }
  272. }
Add Comment
Please, Sign In to add comment