/** * {@inheritDoc} */ @Override public boolean canSpawnVehicleSafely(Vehicle vehicle) { if (this.isBlockAboveAir(vehicle.getLocation())) { return true; } return false; }
public class NavigationService{ private Map map; // a real map with distances between drivable locations ... public void navigateTo(Vehicle v, Destination to){ Location from = v.getLocation(); ...//complex business logic to find best path from current to destination. Directions directions = computeDirections(from, to); //for each step in the directions call low level methods //on vehicle to tell it how to get to destination for(Step step : directions){ v.turn(step.getCardinalDirection()); // i.e. north south east west v.travelFor(step.getDistance()); //perhaps vehicle tracks fuel consumption } } private Directions computeDirections(Location from, Destination to){ ..//use map to find best path } }
/** * Handles vehicle breaking * @param e - event */ @EventHandler(priority = EventPriority.LOW, ignoreCancelled=true) public void onVehicleDamageEvent(VehicleDamageEvent e) { if (getIWM().inWorld(e.getVehicle().getLocation()) && e.getAttacker() instanceof Player) { setUser(User.getInstance((Player) e.getAttacker())); checkIsland(e, e.getVehicle().getLocation(), Flags.BREAK_BLOCKS); } }
/** * {@inheritDoc} */ @Override public Location getNextBlock(Vehicle v) { Vector vector = v.getVelocity(); Location location = v.getLocation(); int x = vector.getX() < 0 ? vector.getX() == 0 ? 0 : -1 : 1; int z = vector.getZ() < 0 ? vector.getZ() == 0 ? 0 : -1 : 1; return location.add(x, 0, z); } }
/** * Returns the next Location that a {@link Vehicle} is traveling at. * * @param v The {@link Vehicle} * @return The {@link Location} */ public static Location getNextBlock(Vehicle v) { Vector vector = v.getVelocity(); Location location = v.getLocation(); int x = vector.getX() < 0 ? vector.getX() == 0 ? 0 : -1 : 1; int z = vector.getZ() < 0 ? vector.getZ() == 0 ? 0 : -1 : 1; return location.add(x, 0, z); } }
@EventHandler(ignoreCancelled = true) private void vehicleCreate(VehicleCreateEvent event){ if(hasRegenArea() && minigame.hasPlayers() && blockInRegenArea(event.getVehicle().getLocation())){ addEntity(event.getVehicle(), null, true); } }
@EventHandler(ignoreCancelled = true) private void vehicleDestroy(VehicleDestroyEvent event){ if(event.getAttacker() == null){ if(hasRegenArea() && minigame.hasPlayers() && blockInRegenArea(event.getVehicle().getLocation())){ addEntity(event.getVehicle(), null, false); } } }
Material material = world.getBlockAt(vehicle.getLocation()).getType(); if(material != Material.RAILS && material != Material.POWERED_RAIL && material != Material.DETECTOR_RAIL)
@EventHandler public void onVehicleEnter(VehicleEnterEvent event) { Entity entity = event.getEntered(); if (entity instanceof Player) { LocalPlayer player = plugin.wrapPlayer((Player) entity); Session session = WorldGuard.getInstance().getPlatform().getSessionManager().get(player); if (null != session.testMoveTo(player, BukkitAdapter.adapt(event.getVehicle().getLocation()), MoveType.EMBARK, true)) { event.setCancelled(true); } } }
/** * @param event */ @EventHandler(priority = EventPriority.HIGH) public void onVehicleMove(VehicleMoveEvent event) { Vehicle vehicle = event.getVehicle(); if (plugin.getSettingsManager().isBlacklistedWorld(vehicle.getLocation().getWorld())) { return; } List<Entity> passengers = vehicle.getPassengers(); for (Entity passenger : passengers) { if (passenger instanceof Player) { plugin.getPlayerListener().onPlayerMove(new PlayerMoveEvent((Player) passenger, event.getFrom(), event.getTo())); } } }
/** * @param event */ @EventHandler(priority = EventPriority.HIGH) public void onVehicleEnter(VehicleEnterEvent event) { Vehicle vehicle = event.getVehicle(); if (plugin.getSettingsManager().isBlacklistedWorld(vehicle.getLocation().getWorld())) { return; } List<Entity> passengers = vehicle.getPassengers(); for (Entity passenger : passengers) { if (passenger instanceof Player) { Player player = (Player) passenger; Field field = plugin.getForceFieldManager().getEnabledSourceField(player.getLocation(), FieldFlag.PREVENT_VEHICLE_ENTER); if (field != null) { if (FieldFlag.PREVENT_VEHICLE_ENTER.applies(field, player)) { event.setCancelled(true); } } } } }
/** * @param player * @param vehicle * @param field */ public void warnDestroyVehicle(Player player, Vehicle vehicle, Field field) { if (field == null) { return; } FieldSettings fs = field.getSettings(); if (plugin.getSettingsManager().isWarnDestroyArea() && canWarn(player)) { ChatHelper.send(player, "warnDestroyVehicle"); } if (plugin.getPermissionsManager().has(player, "preciousstones.admin.bypass.log")) { return; } if (plugin.getSettingsManager().isLogDestroyArea()) { PreciousStones.log("logDestroyVehicle", player.getName(), (new Vec(vehicle.getLocation())).toString(), field.getOwner(), fs.getTitle(), field.getDetails()); } for (Player pl : plugin.getServer().getOnlinePlayers()) { if (pl.equals(player)) { continue; } if (plugin.getPermissionsManager().has(pl, "preciousstones.alert.warn.destroyarea") && canAlert(pl)) { ChatHelper.sendPs(pl, "logDestroyVehicle", player.getName(), (new Vec(vehicle.getLocation())).toString(), field.getOwner(), fs.getTitle(), field.getDetails()); } } }
final Location loc = vehicle.getLocation(useLoc1); debug(player, "VehicleUpdateEvent: " + vehicleType + " " + loc); useLoc1.setWorld(null);
/** * @param player * @param block * @param field */ public void notifyBypassDestroyVehicle(Player player, Vehicle block, Field field) { if (field == null) { return; } FieldSettings fs = field.getSettings(); if (plugin.getSettingsManager().isNotifyBypassDestroy() && canNotify(player)) { ChatHelper.send(player, "notifyVehicleBypassDestroyed", field.getOwner(), fs.getTitle()); } if (plugin.getPermissionsManager().has(player, "preciousstones.admin.bypass.log")) { return; } if (plugin.getSettingsManager().isLogBypassDestroy()) { PreciousStones.log("logBypassDestroyVehicle", player.getName(), (new Vec(block.getLocation())).toString(), field.getOwner(), fs.getTitle(), field.getDetails()); } for (Player pl : plugin.getServer().getOnlinePlayers()) { if (pl.equals(player)) { continue; } if (plugin.getPermissionsManager().has(pl, "preciousstones.alert.notify.bypass-destroy") && canBypassAlert(pl)) { ChatHelper.sendPs(pl, "logBypassDestroyVehicle", player.getName(), (new Vec(block.getLocation())).toString(), field.getOwner(), fs.getTitle(), field.getDetails()); } } }
/** * @param event */ @EventHandler(priority = EventPriority.HIGH) public void onVehicleDestroy(VehicleDestroyEvent event) { Vehicle vehicle = event.getVehicle(); Field field = plugin.getForceFieldManager().getEnabledSourceField(vehicle.getLocation(), FieldFlag.PREVENT_VEHICLE_DESTROY); if (field != null) { if (event.getAttacker() instanceof Player) { Player player = (Player) event.getAttacker(); if (FieldFlag.PREVENT_VEHICLE_DESTROY.applies(field, player)) { if (plugin.getPermissionsManager().has(player, "preciousstones.bypass.destroy")) { plugin.getCommunicationManager().notifyBypassDestroyVehicle(player, vehicle, field); } else { event.setCancelled(true); plugin.getCommunicationManager().warnDestroyVehicle(player, vehicle, field); return; } } } } }
Claim claim = this.dataStore.getClaimAt(event.getVehicle().getLocation(), false, cachedClaim);