4747import org .bukkit .event .entity .PotionSplashEvent ;
4848import org .bukkit .event .entity .ProjectileHitEvent ;
4949import org .bukkit .event .entity .ProjectileLaunchEvent ;
50+ import org .bukkit .event .player .PlayerEggThrowEvent ;
5051import org .bukkit .projectiles .BlockProjectileSource ;
5152import org .bukkit .projectiles .ProjectileSource ;
5253import org .checkerframework .checker .nullness .qual .NonNull ;
@@ -157,30 +158,41 @@ public void onProjectileLaunch(ProjectileLaunchEvent event) {
157158
158159 @ EventHandler
159160 public void onProjectileHit (ProjectileHitEvent event ) {
160- Projectile entity = event .getEntity ();
161+ if (cancelProjectileHit (event .getEntity ())) {
162+ event .setCancelled (true );
163+ }
164+ }
165+
166+ @ EventHandler
167+ public void onPlayerEggThrow (PlayerEggThrowEvent event ) {
168+ if (cancelProjectileHit (event .getEgg ())) {
169+ event .setHatching (false );
170+ }
171+ }
172+
173+ private boolean cancelProjectileHit (Projectile entity ) {
161174 Location location = BukkitUtil .adapt (entity .getLocation ());
162175 if (!this .plotAreaManager .hasPlotArea (location .getWorldName ())) {
163- return ;
176+ return false ;
164177 }
165178 PlotArea area = location .getPlotArea ();
166179 if (area == null ) {
167- return ;
180+ return false ;
168181 }
169182 Plot plot = area .getPlot (location );
170183 ProjectileSource shooter = entity .getShooter ();
171184 if (shooter instanceof Player ) {
172185 if (!((Player ) shooter ).isOnline ()) {
173186 if (plot != null ) {
174187 if (plot .isAdded (((Player ) shooter ).getUniqueId ()) || plot .getFlag (ProjectilesFlag .class )) {
175- return ;
188+ return false ;
176189 }
177190 } else if (PlotFlagUtil .isAreaRoadFlagsAndFlagEquals (area , ProjectilesFlag .class , true )) {
178- return ;
191+ return false ;
179192 }
180193
181194 entity .remove ();
182- event .setCancelled (true );
183- return ;
195+ return true ;
184196 }
185197
186198 PlotPlayer <?> pp = BukkitUtil .adapt ((Player ) shooter );
@@ -189,38 +201,36 @@ public void onProjectileHit(ProjectileHitEvent event) {
189201 Permission .PERMISSION_ADMIN_PROJECTILE_UNOWNED
190202 )) {
191203 entity .remove ();
192- event . setCancelled ( true ) ;
204+ return true ;
193205 }
194- return ;
206+ return false ;
195207 }
196208 if (plot .isAdded (pp .getUUID ()) || pp .hasPermission (Permission .PERMISSION_ADMIN_PROJECTILE_OTHER ) || plot .getFlag (
197209 ProjectilesFlag .class ) || (entity instanceof FishHook && plot .getFlag (
198210 FishingFlag .class ))) {
199- return ;
211+ return false ;
200212 }
201213 entity .remove ();
202- event .setCancelled (true );
203- return ;
214+ return true ;
204215 }
205216 if (!(shooter instanceof Entity ) && shooter != null ) {
206217 if (plot == null ) {
207218 entity .remove ();
208- event .setCancelled (true );
209- return ;
219+ return true ;
210220 }
211221 Location sLoc =
212222 BukkitUtil .adapt (((BlockProjectileSource ) shooter ).getBlock ().getLocation ());
213223 if (!area .contains (sLoc .getX (), sLoc .getZ ())) {
214224 entity .remove ();
215- event .setCancelled (true );
216- return ;
225+ return true ;
217226 }
218227 Plot sPlot = area .getOwnedPlotAbs (sLoc );
219228 if (sPlot == null || !PlotHandler .sameOwners (plot , sPlot )) {
220229 entity .remove ();
221- event . setCancelled ( true ) ;
230+ return true ;
222231 }
223232 }
233+ return false ;
224234 }
225235
226236}
0 commit comments