|
21 | 21 | import org.bukkit.entity.Entity; |
22 | 22 | import org.bukkit.entity.Player; |
23 | 23 | import org.bukkit.event.EventHandler; |
| 24 | +import org.bukkit.event.EventPriority; |
24 | 25 | import org.bukkit.event.Listener; |
25 | 26 | import org.bukkit.event.block.Action; |
26 | 27 | import org.bukkit.event.block.BlockBreakEvent; |
27 | 28 | import org.bukkit.event.entity.EntityDamageByEntityEvent; |
28 | 29 | import org.bukkit.event.entity.EntityDamageEvent; |
| 30 | +import org.bukkit.event.entity.EntityToggleGlideEvent; |
29 | 31 | import org.bukkit.event.entity.PlayerDeathEvent; |
30 | 32 | import org.bukkit.event.player.*; |
31 | 33 | import org.bukkit.inventory.ItemStack; |
@@ -101,29 +103,39 @@ private void onDismount(EntityDismountEvent event) { |
101 | 103 | } |
102 | 104 |
|
103 | 105 | @EventHandler |
104 | | - private void onMove(PlayerMoveEvent event) { |
105 | | - final Player player = event.getPlayer(); |
106 | | - if (event.getFrom().getBlock().getRelative(BlockFace.DOWN).getType() == Material.AIR && event.getTo().getBlock().getRelative(BlockFace.DOWN).getType() != Material.AIR) { |
| 106 | + private void onMove(EntityToggleGlideEvent event) { |
| 107 | + if (event.getEntity() instanceof Player player) { |
| 108 | + if (event.isGliding()) return; |
107 | 109 | final ItemStack chestPlate = player.getInventory().getChestplate(); |
108 | 110 | if (chestPlate == null) return; |
109 | 111 | if (chestPlate.getType() == Material.ELYTRA) { |
110 | 112 | player.getInventory().setChestplate(null); |
111 | 113 | player.getInventory().addItem(ItemBuilder.of(Material.BREAD).amount(20).build()); |
112 | 114 | player.getPassengers().forEach(player::removePassenger); |
| 115 | + |
113 | 116 | } |
114 | 117 | } |
115 | 118 | } |
116 | 119 |
|
117 | 120 | @EventHandler |
118 | 121 | private void onDamage(EntityDamageEvent event) { |
119 | | - if (event.getEntity() instanceof Player) { |
| 122 | + if (event.getEntity() instanceof Player player) { |
120 | 123 | if (game.getPhase() instanceof WaitingPhase) { |
121 | 124 | event.setCancelled(true); |
122 | 125 | return; |
123 | 126 | } |
124 | 127 |
|
125 | 128 | switch (event.getCause()) { |
126 | | - case FALL, FLY_INTO_WALL -> event.setCancelled(true); |
| 129 | + case FALL, FLY_INTO_WALL -> { |
| 130 | + final ItemStack chestPlate = player.getInventory().getChestplate(); |
| 131 | + if (chestPlate == null) return; |
| 132 | + if (chestPlate.getType() == Material.ELYTRA) { |
| 133 | + player.getInventory().setChestplate(null); |
| 134 | + player.getInventory().addItem(ItemBuilder.of(Material.BREAD).amount(20).build()); |
| 135 | + player.getPassengers().forEach(player::removePassenger); |
| 136 | + event.setCancelled(true); |
| 137 | + } |
| 138 | + } |
127 | 139 | } |
128 | 140 | } |
129 | 141 | } |
|
0 commit comments