88import org .bukkit .Chunk ;
99import org .bukkit .Location ;
1010import org .bukkit .Material ;
11+ import org .bukkit .World ;
1112import org .bukkit .block .Block ;
1213import org .bukkit .block .BlockFace ;
1314import org .bukkit .block .data .Directional ;
1819import org .bukkit .entity .EnderPearl ;
1920import org .bukkit .entity .Entity ;
2021import org .bukkit .entity .EntityType ;
22+ import org .bukkit .entity .Firework ;
2123import org .bukkit .entity .GlowItemFrame ;
2224import org .bukkit .entity .ItemFrame ;
2325import org .bukkit .entity .Monster ;
4547import org .bukkit .event .entity .EntityDamageEvent ;
4648import org .bukkit .event .entity .EntityExplodeEvent ;
4749import org .bukkit .event .entity .EntityPlaceEvent ;
50+ import org .bukkit .event .entity .EntityShootBowEvent ;
4851import org .bukkit .event .entity .EntityToggleGlideEvent ;
4952import org .bukkit .event .entity .PotionSplashEvent ;
5053import org .bukkit .event .entity .ProjectileHitEvent ;
54+ import org .bukkit .event .entity .ProjectileLaunchEvent ;
5155import org .bukkit .event .hanging .HangingBreakByEntityEvent ;
5256import org .bukkit .event .hanging .HangingBreakEvent ;
5357import org .bukkit .event .hanging .HangingPlaceEvent ;
@@ -145,6 +149,8 @@ public void onCommandPreprocess(PlayerCommandPreprocessEvent event) {
145149 event .setMessage (newCommand );
146150 }
147151 }
152+
153+
148154
149155 /**
150156 * Handles player glide event for Elytra.
@@ -163,12 +169,41 @@ public void onPlayerToggleGlide(EntityToggleGlideEvent event) {
163169 if (!claim .getPermissionForPlayer ("Elytra" , player )) {
164170 instance .getMain ().sendMessage (player , instance .getLanguage ().getMessage ("elytra" ), instance .getSettings ().getSetting ("protection-message" ));
165171 event .setCancelled (true );
166- instance .getMain ().teleportToGround (player );
172+ instance .getMain ().teleportPlayer (player , player .getLocation ());
173+ }
174+ } else if (mode == WorldMode .SURVIVAL_REQUIRING_CLAIMS && !instance .getSettings ().getSettingSRC ("Elytra" )) {
175+ instance .getMain ().sendMessage (player , instance .getLanguage ().getMessage ("elytra-mode" ), instance .getSettings ().getSetting ("protection-message" ));
176+ event .setCancelled (true );
177+ instance .getMain ().teleportPlayer (player , player .getLocation ());
178+ }
179+ }
180+ }
181+ }
182+
183+ /**
184+ * Handles the projectile launch event.
185+ *
186+ * @param event The ProjectileLaunchEvent event.
187+ */
188+ @ EventHandler
189+ public void onFireworkLaunch (ProjectileLaunchEvent event ) {
190+ WorldMode mode = instance .getSettings ().getWorldMode (event .getEntity ().getWorld ().getName ());
191+ if (event .getEntity () instanceof Firework ) {
192+ Firework firework = (Firework ) event .getEntity ();
193+ Player player = (Player ) firework .getShooter ();
194+ if (player == null ) return ;
195+ if (player .hasPermission ("scs.bypass" )) return ;
196+ if (player .isGliding () || player .getTargetBlockExact (5 ) == null ) {
197+ Chunk chunk = player .getLocation ().getChunk ();
198+ Claim claim = instance .getMain ().getClaim (chunk );
199+ if (claim != null ) {
200+ if (!claim .getPermissionForPlayer ("Elytra" , player )) {
201+ instance .getMain ().sendMessage (player , instance .getLanguage ().getMessage ("elytra" ), instance .getSettings ().getSetting ("protection-message" ));
202+ event .setCancelled (true );
167203 }
168204 } else if (mode == WorldMode .SURVIVAL_REQUIRING_CLAIMS && !instance .getSettings ().getSettingSRC ("Elytra" )) {
169205 instance .getMain ().sendMessage (player , instance .getLanguage ().getMessage ("elytra-mode" ), instance .getSettings ().getSetting ("protection-message" ));
170206 event .setCancelled (true );
171- instance .getMain ().teleportToGround (player );
172207 }
173208 }
174209 }
0 commit comments