so://phie

poppy

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

blob: eaaccac50706f8cb2e46a6d51437d2489ac92b72 (2689 bytes)[doc][blame][raw]

1package de.typable.minecrafthub.event;

2

3import org.bukkit.Location;

4import org.bukkit.Material;

5import org.bukkit.block.Block;

6import org.bukkit.block.data.Bisected.Half;

7import org.bukkit.block.data.type.Stairs;

8import org.bukkit.entity.AbstractArrow.PickupStatus;

9import org.bukkit.entity.Arrow;

10import org.bukkit.entity.Entity;

11import org.bukkit.entity.Player;

12import org.bukkit.event.EventHandler;

13import org.bukkit.event.Listener;

14import org.bukkit.event.block.Action;

15import org.bukkit.event.player.PlayerInteractEvent;

16import org.bukkit.util.Vector;

17import org.spigotmc.event.entity.EntityDismountEvent;

18

19

20public class ChairListener implements Listener

21{

22 private static final Material[] CHAIR_TYPE = new Material[] { Material.OAK_STAIRS, Material.SPRUCE_STAIRS, Material.BIRCH_STAIRS, Material.JUNGLE_STAIRS, Material.ACACIA_STAIRS, Material.DARK_OAK_STAIRS, Material.ACACIA_STAIRS, Material.CRIMSON_STAIRS, Material.WARPED_STAIRS };

23

24 @SuppressWarnings("deprecation")

25 @EventHandler

26 public void onPlayerInteract(PlayerInteractEvent event)

27 {

28 if(event.getAction() == Action.RIGHT_CLICK_BLOCK)

29 {

30 if(event.getClickedBlock() != null && !event.getPlayer().isSneaking())

31 {

32 Block block = event.getClickedBlock();

33

34 if(isChair(block.getType()))

35 {

36 Block upperBlock = block.getWorld().getBlockAt(block.getLocation().add(0, 1, 0));

37

38 if(upperBlock != null && upperBlock.getType() == Material.AIR)

39 {

40 Stairs stairs = (Stairs) block.getState().getBlockData();

41

42 if(isCompatible(stairs))

43 {

44 Location location = block.getLocation().add(0.5, 0, 0.5);

45 Arrow arrow = (Arrow) block.getWorld()

46 .spawnArrow(location, new Vector(), 0F, 0F);

47 arrow.setGravity(false);

48 arrow.setInvulnerable(true);

49 arrow.setPickupStatus(PickupStatus.DISALLOWED);

50 arrow.setPassenger((Entity) event.getPlayer());

51

52 event.setCancelled(true);

53 }

54 }

55 }

56 }

57 }

58 }

59

60 @EventHandler

61 public void onEntityDismount(EntityDismountEvent event)

62 {

63 if(event.getEntity() instanceof Player)

64 {

65 Entity entity = event.getDismounted();

66

67 if(entity != null && entity instanceof Arrow)

68 {

69 entity.remove();

70 }

71 }

72 }

73

74 private boolean isChair(Material material)

75 {

76 for(Material chair : CHAIR_TYPE)

77 {

78 if(material == chair)

79 {

80 return true;

81 }

82 }

83

84 return false;

85 }

86

87 private boolean isCompatible(Stairs stairs)

88 {

89 if(stairs.getHalf() != Half.BOTTOM)

90 {

91 return false;

92 }

93

94 if(stairs.isWaterlogged())

95 {

96 return false;

97 }

98

99 if(stairs.getShape() == Stairs.Shape.INNER_RIGHT || stairs

100 .getShape() == Stairs.Shape.INNER_LEFT)

101 {

102 return false;

103 }

104

105 return true;

106 }

107}