so://phie

poppy

A feature-rich Minecraft plugin which enhances gaming experience
git clone git://soophie.de/poppy

blob: fa50633fe0e5167d46dc797201fdfa2acc2fdb46 (2745 bytes)[doc][blame][raw]

1package poppy.modules;

2

3import java.util.HashSet;

4

5import org.bukkit.Location;

6import org.bukkit.Tag;

7import org.bukkit.Material;

8import org.bukkit.block.Block;

9import org.bukkit.block.data.Directional;

10import org.bukkit.block.data.type.Observer;

11import org.bukkit.block.data.type.TripwireHook;

12import org.bukkit.entity.ItemFrame;

13import org.bukkit.event.EventHandler;

14import org.bukkit.event.Listener;

15import org.bukkit.event.block.BlockRedstoneEvent;

16import org.bukkit.inventory.ItemStack;

17

18

19public 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}