|
2 | 2 |
|
3 | 3 | import org.bukkit.Material; |
4 | 4 | import org.bukkit.block.Block; |
| 5 | +import org.bukkit.block.data.Directional; |
5 | 6 | import org.bukkit.event.EventHandler; |
6 | 7 | import org.bukkit.event.Listener; |
| 8 | +import org.bukkit.event.block.BlockDispenseEvent; |
7 | 9 | import org.bukkit.event.block.BlockFromToEvent; |
8 | 10 | import org.bukkit.event.block.BlockPlaceEvent; |
9 | 11 | import org.bukkit.event.player.PlayerBucketEmptyEvent; |
@@ -68,8 +70,8 @@ public void onWaterFlow(BlockFromToEvent event) { |
68 | 70 | Block bottomBlock = toBlock.getWorld().getBlockAt( |
69 | 71 | toBlock.getX(), |
70 | 72 | toBlock.getY() - 1, |
71 | | - toBlock.getZ()) |
72 | | - ; |
| 73 | + toBlock.getZ() |
| 74 | + ); |
73 | 75 |
|
74 | 76 | // Exit if bottom block is different of dirt. |
75 | 77 | if(bottomBlock.getType() != Material.DIRT){ |
@@ -108,4 +110,40 @@ public void onBlockPlaceUnderWater(BlockPlaceEvent event){ |
108 | 110 | // Set block type to mud. |
109 | 111 | block.setType(Material.MUD); |
110 | 112 | } |
| 113 | + |
| 114 | + @EventHandler |
| 115 | + public void onDispenseWater(BlockDispenseEvent event){ |
| 116 | + /* |
| 117 | + * When dispenser dispenses water. |
| 118 | + */ |
| 119 | + // Exit if item dispensed is different of water bucket. |
| 120 | + if(event.getItem().getType() != Material.WATER_BUCKET){ |
| 121 | + return; |
| 122 | + } |
| 123 | + |
| 124 | + // Get dispense block. |
| 125 | + Block dispenseBlock = event.getBlock(); |
| 126 | + // Get faced block. |
| 127 | + Block facedBlock = dispenseBlock.getRelative( |
| 128 | + ((Directional) dispenseBlock.getBlockData()).getFacing() |
| 129 | + ); |
| 130 | + |
| 131 | + // Iterating block direction weights. |
| 132 | + for(Integer[] weight : this.blockDirections){ |
| 133 | + // Getting block. |
| 134 | + Block block = facedBlock.getWorld().getBlockAt( |
| 135 | + facedBlock.getX() + weight[0], |
| 136 | + facedBlock.getY() + weight[1], |
| 137 | + facedBlock.getZ() + weight[2] |
| 138 | + ); |
| 139 | + |
| 140 | + // Jump to next loop if block is different of dirt. |
| 141 | + if(block.getType() != Material.DIRT){ |
| 142 | + continue; |
| 143 | + } |
| 144 | + |
| 145 | + // Else, set block type to mud block. |
| 146 | + block.setType(Material.MUD); |
| 147 | + } |
| 148 | + } |
111 | 149 | } |
0 commit comments