BlockDetectorModule.java (2745B)
1 package poppy.modules; 2 3 import java.util.HashSet; 4 5 import org.bukkit.Location; 6 import org.bukkit.Tag; 7 import org.bukkit.Material; 8 import org.bukkit.block.Block; 9 import org.bukkit.block.data.Directional; 10 import org.bukkit.block.data.type.Observer; 11 import org.bukkit.block.data.type.TripwireHook; 12 import org.bukkit.entity.ItemFrame; 13 import org.bukkit.event.EventHandler; 14 import org.bukkit.event.Listener; 15 import org.bukkit.event.block.BlockRedstoneEvent; 16 import org.bukkit.inventory.ItemStack; 17 18 19 public class BlockDetectorModule implements Listener 20 { 21 @EventHandler 22 public void onBlockRedstone(BlockRedstoneEvent event) 23 { 24 final Block block = event.getBlock(); 25 26 if(block.getType() != Material.OBSERVER) return; 27 28 final ItemFrame[] itemframes = HopperSorterModule.getBlockItemFrames(block); 29 final ItemStack[] itemstacks = getItemsFromItemframes(itemframes); 30 31 if(itemstacks.length <= 0) return; 32 33 final Observer observer = (Observer) block.getBlockData(); 34 35 if(block.getBlockData() instanceof Directional) 36 { 37 final Location location = observer.getFacing().getDirection().toLocation(block.getWorld()); 38 final Block faceblock = block.getLocation().add(location.toVector()).getBlock(); 39 40 boolean check = false; 41 42 for(ItemStack item : itemstacks) 43 { 44 if(item.getType() == faceblock.getType()) 45 { 46 observer.setPowered(true); 47 check = true; 48 } 49 } 50 51 if(!check) event.setNewCurrent(0); 52 } 53 } 54 55 public static ItemStack[] getItemsFromItemframes(ItemFrame[] itemframes) 56 { 57 final HashSet<ItemStack> itemstacks = new HashSet <ItemStack>(); 58 59 for(ItemFrame itemframe : itemframes) 60 { 61 itemstacks.add(itemframe.getItem()); 62 } 63 return itemstacks.toArray(new ItemStack[itemstacks.size()]); 64 } 65 66 @EventHandler 67 public void onBlockRedstoneHook(BlockRedstoneEvent event) 68 { 69 final Block block = event.getBlock(); 70 71 if(block.getType() != Material.TRIPWIRE_HOOK) return; 72 if (!(block.getBlockData() instanceof TripwireHook)) return; 73 74 final TripwireHook tripwireHook = (TripwireHook) block.getBlockData(); 75 76 if(tripwireHook.getFacing().toString() == "NORTH" || tripwireHook.getFacing().toString() == "EAST") 77 { 78 if(tripwireHook.isPowered()) 79 { 80 if(tripwireHook.getFacing().toString() == "NORTH") 81 { 82 Block aBlock = block.getLocation().clone().add(0, 0, 1).getBlock(); 83 84 if(!Tag.TRAPDOORS.isTagged(aBlock.getType())) return; 85 86 block.breakNaturally(); 87 block.setType(Material.TRIPWIRE_HOOK); 88 } 89 90 if(tripwireHook.getFacing().toString() == "EAST") 91 { 92 Block aBlock = block.getLocation().clone().add(-1, 0, 0).getBlock(); 93 94 if(!Tag.TRAPDOORS.isTagged(aBlock.getType())) return; 95 96 block.breakNaturally(); 97 block.setType(Material.TRIPWIRE_HOOK); 98 } 99 } 100 } 101 } 102 }