Advertisement
Mattie

Untitled

Mar 14th, 2011
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.35 KB | None | 0 0
  1. package nl.Matthijs.Mattie.RedstoneSponge;
  2.  
  3. import java.util.logging.Logger;
  4. import org.bukkit.Material;
  5. import org.bukkit.Server;
  6. import org.bukkit.World;
  7. import org.bukkit.block.*;
  8. import org.bukkit.event.block.*;
  9.  
  10. public class RedstoneSpongeBlockListener extends BlockListener
  11. {
  12.     private final RedstoneSponge    plugin;
  13.     private final Server            server;
  14.     final Logger                    logger              = Logger.getLogger("Minecraft");
  15.     private final int               SPONGE              = 19;
  16.     private final int               WATER               = 8;
  17.     private final int               STATIONARY_WATER    = 9;
  18.     private final int               LAVA                = 10;
  19.     private final int               STATIONARY_LAVA     = 11;
  20.     private final int               AIR                 = 0;
  21.     private final int               WOOL                = 35;
  22.     // private static World world;
  23.     private int                     radius;
  24.     private int                     woolColour;
  25.  
  26.     public RedstoneSpongeBlockListener(RedstoneSponge instance)
  27.     {
  28.         this.plugin = instance;
  29.         this.server = plugin.getServer();
  30.         radius = plugin.getRadius();
  31.     }
  32.  
  33.     @Override
  34.     public void onBlockPlace(BlockPlaceEvent event)
  35.     {
  36.         Block blockPlaced = event.getBlock();
  37.         World world = blockPlaced.getWorld();
  38.         boolean blockWhenPowered = plugin.isblockWhenPoweredEnabled();
  39.         if (blockPlaced.getTypeId() == SPONGE)
  40.         {
  41.             boolean waterSponge = plugin.isWaterSpongeEnabled();
  42.             // blockWhenPowered == false -> default, a sponge works like a
  43.             // sponge without redstone current
  44.             if (blockWhenPowered == false)
  45.             {
  46.                 if (waterSponge && (!blockPlaced.isBlockIndirectlyPowered() || !blockPlaced.isBlockPowered()))
  47.                 {
  48.                     clearWater(world, blockPlaced);
  49.                 }
  50.  
  51.                 boolean lavaSponge = plugin.isLavaSpongeEnabled();
  52.                 if (lavaSponge && (!blockPlaced.isBlockIndirectlyPowered() || !blockPlaced.isBlockPowered()))
  53.                 {
  54.                     clearLava(world, blockPlaced);
  55.                 }
  56.             }
  57.             // blockWhenPowered == true -> sponge works like sponge WITH
  58.             // redstone current
  59.             else
  60.             {
  61.                 if (waterSponge && (blockPlaced.isBlockIndirectlyPowered() || blockPlaced.isBlockPowered()))
  62.                 {
  63.                     clearWater(world, blockPlaced);
  64.                 }
  65.  
  66.                 boolean lavaSponge = plugin.isLavaSpongeEnabled();
  67.                 if (lavaSponge && (blockPlaced.isBlockIndirectlyPowered() || blockPlaced.isBlockPowered()))
  68.                 {
  69.                     clearLava(world, blockPlaced);
  70.                 }
  71.             }
  72.         }
  73.     }
  74.  
  75.     @Override
  76.     public void onBlockPhysics(BlockPhysicsEvent event)
  77.     {
  78. //      System.out.println("block flow event");
  79.  
  80.         World world = event.getBlock().getWorld();
  81.         Block blockFrom = event.getBlock();
  82.         Block blockTo = event.getBlock();
  83.         boolean isLava = blockFrom.getTypeId() == 10 || blockFrom.getTypeId() == 11;
  84.         boolean isWater = blockFrom.getTypeId() == 8 || blockFrom.getTypeId() == 9;
  85.         boolean waterSponge = plugin.isWaterSpongeEnabled();
  86.         boolean lavaSponge = plugin.isLavaSpongeEnabled();
  87.  
  88.         // is the flow water or lava and are the sponges enabled
  89.         if ((lavaSponge && isLava) || (waterSponge && isWater))
  90.         {
  91.             cancelFlow(world, blockTo, event);
  92.         }
  93.     }
  94.  
  95.     public void cancelFlow(World world, Block blockTo, BlockPhysicsEvent event)
  96.     {
  97.         int blockX = blockTo.getX();
  98.         int blockY = blockTo.getY();
  99.         int blockZ = blockTo.getZ();
  100.         boolean blockWhenPowered = plugin.isblockWhenPoweredEnabled();
  101.  
  102.         radius = plugin.getRadius();
  103.  
  104.         for (int radX = 0 - radius; radX <= radius; radX++)
  105.         {
  106.             for (int radY = 0 - radius; radY <= radius; radY++)
  107.             {
  108.                 for (int radZ = 0 - radius; radZ <= radius; radZ++)
  109.                 {
  110.                     Block isThisSponge = world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ);
  111.                     int id = isThisSponge.getTypeId();
  112.                     if (blockWhenPowered == false)
  113.                     {
  114.                         if (id == SPONGE && (!isThisSponge.isBlockIndirectlyPowered() || !isThisSponge.isBlockPowered()))
  115.                         {
  116.                             event.setCancelled(true);
  117.                             System.out.println("ABCis event cancelled: " + event.isCancelled());
  118.                             return;
  119.                         }
  120.                     }
  121.                     else
  122.                     {
  123.                         if (id == SPONGE && (isThisSponge.isBlockIndirectlyPowered() || isThisSponge.isBlockPowered()))
  124.                         {
  125.                             event.setCancelled(true);
  126.                             return;
  127.                         }
  128.                     }
  129.                 }
  130.             }
  131.         }
  132.     }
  133.  
  134.     public void clearWater(World world, Block blockPlaced)
  135.     {
  136.         int blockX = blockPlaced.getX();
  137.         int blockY = blockPlaced.getY();
  138.         int blockZ = blockPlaced.getZ();
  139.         radius = plugin.getRadius();
  140.         for (int radX = 0 - radius; radX <= radius; radX++)
  141.         {
  142.             for (int radY = 0 - radius; radY <= radius; radY++)
  143.             {
  144.                 for (int radZ = 0 - radius; radZ <= radius; radZ++)
  145.                 {
  146.                     Block b = world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ);
  147.                     int id = b.getTypeId();
  148.  
  149.                     if (id == WATER || id == STATIONARY_WATER)
  150.                     {
  151.                         world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ).setTypeId(AIR);
  152.                     }
  153.                 }
  154.             }
  155.         }
  156.     }
  157.  
  158.     public void clearLava(World world, Block blockPlaced)
  159.     {
  160.         int blockX = blockPlaced.getX();
  161.         int blockY = blockPlaced.getY();
  162.         int blockZ = blockPlaced.getZ();
  163.         radius = plugin.getRadius();
  164.         for (int radX = 0 - radius; radX <= radius; radX++)
  165.         {
  166.             for (int radY = 0 - radius; radY <= radius; radY++)
  167.             {
  168.                 for (int radZ = 0 - radius; radZ <= radius; radZ++)
  169.                 {
  170.                     Block b = world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ);
  171.                     int id = b.getTypeId();
  172.  
  173.                     if (id == LAVA || id == STATIONARY_LAVA)
  174.                     {
  175.                         world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ).setTypeId(AIR);
  176.                     }
  177.                 }
  178.             }
  179.         }
  180.     }
  181.  
  182.     @Override
  183.     public void onBlockRedstoneChange(BlockRedstoneEvent event)
  184.     {
  185.  
  186.         boolean convert = plugin.isConvertWhenPoweredEnabled();
  187.  
  188.         if (!convert)
  189.         {
  190.             redstoneSpongeToggle(event);
  191.         }
  192.         else if (convert)
  193.         {
  194.             redstoneSpongeConvert(event);
  195.         }
  196.  
  197.     }
  198.  
  199.     public void redstoneSpongeConvert(BlockRedstoneEvent event)
  200.     {
  201.  
  202.         World world = event.getBlock().getWorld();
  203.         Block blockTo = event.getBlock();
  204.  
  205.         int blockX = blockTo.getX();
  206.         int blockY = blockTo.getY();
  207.         int blockZ = blockTo.getZ();
  208.         radius = plugin.getRadius();
  209.         boolean waterSponge = plugin.isWaterSpongeEnabled();
  210.         boolean lavaSponge = plugin.isLavaSpongeEnabled();
  211.         int convertID = plugin.getConvertID();
  212.         boolean blockWhenPowered = plugin.isblockWhenPoweredEnabled();
  213.  
  214.         for (int radX = -1; radX <= 1; radX++)
  215.         {
  216.             for (int radY = -1; radY <= 1; radY++)
  217.             {
  218.                 for (int radZ = -1; radZ <= 1; radZ++)
  219.                 {
  220.                     Block theBlock = world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ);
  221.                     int id = theBlock.getTypeId();
  222.  
  223.                     if (blockWhenPowered == false)
  224.                     {
  225.                         if (id == convertID && (theBlock.isBlockPowered() || theBlock.isBlockIndirectlyPowered()))
  226.                         {
  227.                             theBlock.setTypeId(SPONGE);
  228.                             spongeEvent(theBlock);
  229.                         }
  230.                         else if (id == SPONGE && (!theBlock.isBlockPowered() || !theBlock.isBlockIndirectlyPowered()))
  231.                         {
  232.  
  233.                             theBlock.setTypeId(convertID);
  234.                             if (convertID == WOOL)
  235.                             {
  236.                                 woolColour = plugin.getWoolColour();
  237.                                 theBlock.setData((byte) woolColour);
  238.                             }
  239.                         }
  240.                     }
  241.                     else
  242.                     {
  243.                         if (id == convertID && (!theBlock.isBlockPowered() || !theBlock.isBlockIndirectlyPowered()))
  244.                         {
  245.                             theBlock.setTypeId(SPONGE);
  246.                             spongeEvent(theBlock);
  247.                         }
  248.                         else if (id == SPONGE && (theBlock.isBlockPowered() || theBlock.isBlockIndirectlyPowered()))
  249.                         {
  250.  
  251.                             theBlock.setTypeId(convertID);
  252.                             if (convertID == WOOL)
  253.                             {
  254.                                 woolColour = plugin.getWoolColour();
  255.                                 theBlock.setData((byte) woolColour);
  256.                             }
  257.                         }
  258.                     }
  259.  
  260.                 }
  261.             }
  262.         }
  263.     }
  264.  
  265.     public void redstoneSpongeToggle(BlockRedstoneEvent event)
  266.     {
  267.         World world = event.getBlock().getWorld();
  268.         Block blockTo = event.getBlock();
  269.  
  270.         int blockX = blockTo.getX();
  271.         int blockY = blockTo.getY();
  272.         int blockZ = blockTo.getZ();
  273.         radius = plugin.getRadius();
  274.         boolean waterSponge = plugin.isWaterSpongeEnabled();
  275.         boolean lavaSponge = plugin.isLavaSpongeEnabled();
  276.  
  277.         boolean blockWhenPowered = plugin.isblockWhenPoweredEnabled();
  278.  
  279.         for (int radX = -1; radX <= 1; radX++)
  280.         {
  281.             for (int radY = -1; radY <= 1; radY++)
  282.             {
  283.                 for (int radZ = -1; radZ <= 1; radZ++)
  284.                 {
  285.                     Block isThisSponge = world.getBlockAt(blockX + radX, blockY + radY, blockZ + radZ);
  286.                     int id = isThisSponge.getTypeId();
  287.  
  288.                     if (blockWhenPowered == false)
  289.                     {
  290.                         if (id == SPONGE && (isThisSponge.isBlockPowered() || isThisSponge.isBlockIndirectlyPowered()))
  291.                         {
  292.                             if (waterSponge)
  293.                                 clearWater(world, isThisSponge);
  294.  
  295.                             if (lavaSponge)
  296.                                 clearLava(world, isThisSponge);
  297.                         }
  298.                         else if (id == SPONGE && (!isThisSponge.isBlockPowered() || !isThisSponge.isBlockIndirectlyPowered()))
  299.                         {
  300.                             isThisSponge.setTypeId(41);// just a temp-block so
  301.                             // it
  302.                             // won't "throw off" the
  303.                             // redstone on top
  304.                             isThisSponge.setTypeId(SPONGE);
  305.                             spongeEvent(isThisSponge);
  306.                         }
  307.                     }
  308.  
  309.                     else
  310.                     {
  311.                         if (id == SPONGE && (!isThisSponge.isBlockPowered() || !isThisSponge.isBlockIndirectlyPowered()))
  312.                         {
  313.                             if (waterSponge)
  314.                                 clearWater(world, isThisSponge);
  315.  
  316.                             if (lavaSponge)
  317.                                 clearLava(world, isThisSponge);
  318.                         }
  319.                         else if (id == SPONGE && (isThisSponge.isBlockPowered() || isThisSponge.isBlockIndirectlyPowered()))
  320.                         {
  321.                             isThisSponge.setTypeId(41);// just a temp-block so
  322.                             // it
  323.                             // won't "throw off" the
  324.                             // redstone on top
  325.                             isThisSponge.setTypeId(SPONGE);
  326.                             spongeEvent(isThisSponge);
  327.                         }
  328.                     }
  329.  
  330.                 }
  331.             }
  332.         }
  333.  
  334.     }
  335.  
  336.     public void spongeToWool(BlockPhysicsEvent event)
  337.     {
  338.         Block b = event.getBlock();
  339.  
  340.         if (b.getFace(BlockFace.NORTH).getType() == Material.SPONGE)
  341.         {
  342.             Block despons = event.getBlock().getRelative(BlockFace.NORTH);
  343.             despons.setTypeId(35);
  344.             despons.setData((byte) 4);// set yellow
  345.         }
  346.         if (b.getFace(BlockFace.EAST).getType() == Material.SPONGE)
  347.         {
  348.             Block despons = event.getBlock().getRelative(BlockFace.EAST);
  349.             despons.setTypeId(35);
  350.             despons.setData((byte) 4);// set yellow
  351.         }
  352.         if (b.getFace(BlockFace.SOUTH).getType() == Material.SPONGE)
  353.         {
  354.             Block despons = event.getBlock().getRelative(BlockFace.SOUTH);
  355.             despons.setTypeId(35);
  356.             despons.setData((byte) 4);// set yellow
  357.         }
  358.         if (b.getFace(BlockFace.WEST).getType() == Material.SPONGE)
  359.         {
  360.             Block despons = event.getBlock().getRelative(BlockFace.WEST);
  361.             despons.setTypeId(35);
  362.             despons.setData((byte) 4);// set yellow
  363.         }
  364.         if (b.getFace(BlockFace.UP).getType() == Material.SPONGE)
  365.         {
  366.             Block despons = event.getBlock().getRelative(BlockFace.UP);
  367.             despons.setTypeId(35);
  368.             despons.setData((byte) 4);// set yellow
  369.         }
  370.         if (b.getFace(BlockFace.DOWN).getType() == Material.SPONGE)
  371.         {
  372.             Block despons = event.getBlock().getRelative(BlockFace.DOWN);
  373.             despons.setTypeId(35);
  374.             despons.setData((byte) 4);// set yellow
  375.         }
  376.     }
  377.  
  378.     public void woolToSponge(BlockPhysicsEvent event)
  379.     {
  380.         Block b = event.getBlock();
  381.         Byte yellow = ((byte) 14); // sometime it's 14 for yellow
  382.         Byte yellow2 = ((byte) 15);// and sometime it's 12
  383.         Byte data = b.getData();
  384.  
  385.         System.out.println("data " + b.getData() + "  de yellow " + yellow);
  386.  
  387.         if (b.getFace(BlockFace.NORTH).getType() == Material.WOOL && (data == yellow || data == yellow2))
  388.         {
  389.             Block despons = event.getBlock().getRelative(BlockFace.NORTH);
  390.             despons.setTypeId(SPONGE);
  391.             spongeEvent(despons);
  392.         }
  393.         if (b.getFace(BlockFace.EAST).getType() == Material.WOOL && (data == yellow || data == yellow2))
  394.         {
  395.             Block despons = event.getBlock().getRelative(BlockFace.EAST);
  396.             despons.setTypeId(SPONGE);
  397.             spongeEvent(despons);
  398.         }
  399.         if (b.getFace(BlockFace.SOUTH).getType() == Material.WOOL && (data == yellow || data == yellow2))
  400.         {
  401.             Block despons = event.getBlock().getRelative(BlockFace.SOUTH);
  402.             despons.setTypeId(SPONGE);
  403.             spongeEvent(despons);
  404.         }
  405.         if (b.getFace(BlockFace.WEST).getType() == Material.WOOL && (data == yellow || data == yellow2))
  406.         {
  407.             Block despons = event.getBlock().getRelative(BlockFace.WEST);
  408.             despons.setTypeId(SPONGE);
  409.             spongeEvent(despons);
  410.         }
  411.         if (b.getFace(BlockFace.UP).getType() == Material.WOOL && (data == yellow || data == yellow2))
  412.         {
  413.             Block despons = event.getBlock().getRelative(BlockFace.UP);
  414.             despons.setTypeId(SPONGE);
  415.             spongeEvent(despons);
  416.         }
  417.         if (b.getFace(BlockFace.DOWN).getType() == Material.WOOL && (data == yellow || data == yellow2))
  418.         {
  419.             Block despons = event.getBlock().getRelative(BlockFace.DOWN);
  420.             despons.setTypeId(SPONGE);
  421.             spongeEvent(despons);
  422.         }
  423.  
  424.     }
  425.  
  426.     public void spongeEvent(Block b)
  427.     {
  428.         Block blockPlaced = b;
  429.         World world = blockPlaced.getWorld();
  430.         boolean blockWhenPowered = plugin.isblockWhenPoweredEnabled();
  431.         boolean lavaSponge = plugin.isLavaSpongeEnabled();
  432.         boolean waterSponge = plugin.isWaterSpongeEnabled();
  433.  
  434.         if (blockPlaced.getTypeId() == SPONGE)
  435.         {
  436.  
  437.             if (blockWhenPowered == false)
  438.             {
  439.  
  440.                 if (waterSponge && (!blockPlaced.isBlockIndirectlyPowered() || !blockPlaced.isBlockPowered()))
  441.                 {
  442.                     clearWater(world, blockPlaced);
  443.                 }
  444.  
  445.                 if (lavaSponge && (!blockPlaced.isBlockIndirectlyPowered() || !blockPlaced.isBlockPowered()))
  446.                 {
  447.                     clearLava(world, blockPlaced);
  448.                 }
  449.             }
  450.             else
  451.             {
  452.  
  453.                 if (waterSponge && (blockPlaced.isBlockIndirectlyPowered() || blockPlaced.isBlockPowered()))
  454.                 {
  455.                     clearWater(world, blockPlaced);
  456.                 }
  457.  
  458.                 if (lavaSponge && (blockPlaced.isBlockIndirectlyPowered() || blockPlaced.isBlockPowered()))
  459.                 {
  460.                     clearLava(world, blockPlaced);
  461.                 }
  462.             }
  463.         }
  464.     }
  465.  
  466. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement