/** * @param e * This function prevents boats from exploding when they hit * something */ @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = false) public void onBoatHit(VehicleDestroyEvent e) { // plugin.getLogger().info("Vehicle destroyed event called"); final Entity boat = e.getVehicle(); if (!(boat instanceof Boat)) { return; } if (!boat.getWorld().getName().equalsIgnoreCase(Settings.worldName)) { // Not the right world return; } if (!(e.getAttacker() instanceof Player)) { // plugin.getLogger().info("Attacker is not a player so cancel event"); e.setCancelled(true); } }
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGHEST) public void onVehicleCreate(VehicleCreateEvent event) { Vehicle vehicle = event.getVehicle(); if (vehicle instanceof Boat) { Boat boat = (Boat) vehicle; Block belowBlock = boat.getLocation().add(0, -1, 0).getBlock(); if (belowBlock.getType() != Material.WATER && belowBlock.getType() != Material.STATIONARY_WATER) { boat.remove(); } } }
public static void kickBoats() { for (Player player : Bukkit.getOnlinePlayers()) { if(player.isInsideVehicle() && player.getVehicle() instanceof Boat && ProtocolSupportAPI.getProtocolVersion(player).isBefore(ProtocolVersion.MINECRAFT_1_9)){ player.getVehicle().eject(); player.sendMessage(ChatColor.RED + "Boats are currently disabled for versions lower than " + ChatColor.DARK_RED + "1.9"); } } }
@EventHandler public void onPlayerInteract(PlayerInteractEntityEvent e) { if (e.isCancelled()) { return; } Player p = e.getPlayer(); Entity ent = e.getRightClicked(); Location l = ent.getLocation(); Region r = RedProtect.get().rm.getTopRegion(l); if (r != null){ return; } if (ent instanceof ItemFrame || ent instanceof Painting) { if (!bypassBuild(p, null, 0)) { e.setCancelled(true); return; } } if (ent instanceof Minecart || ent instanceof Boat){ if (!RPConfig.getGlobalFlagBool(l.getWorld().getName()+".use-minecart") && !p.hasPermission("redprotect.bypass.world")) { e.setCancelled(true); return; } } if (!RPConfig.getGlobalFlagBool(l.getWorld().getName()+".interact") && !p.hasPermission("redprotect.bypass.world") && (!(ent instanceof Player))) { if (RPConfig.getGlobalFlagList(p.getWorld().getName() + ".if-interact-false.allow-entities").contains(ent.getType().name())){ return; } e.setCancelled(true); } }
/** * Teleport player to a home location. If one cannot be found a search is done to * find a safe place. * @param player * @param number - home location to do to * @return true if successful, false if not */ public boolean homeTeleport(final Player player, int number) { Location home = null; //plugin.getLogger().info("home teleport called for #" + number); home = getSafeHomeLocation(player.getUniqueId(), number); //plugin.getLogger().info("home get safe loc = " + home); // Check if the player is a passenger in a boat if (player.isInsideVehicle()) { Entity boat = player.getVehicle(); if (boat instanceof Boat) { player.leaveVehicle(); // Remove the boat so they don't lie around everywhere boat.remove(); player.getInventory().addItem(new ItemStack(Material.BOAT, 1)); player.updateInventory(); } } if (home == null) { //plugin.getLogger().info("Fixing home location using safe spot teleport"); // Try to fix this teleport location and teleport the player if possible new SafeSpotTeleport(plugin, player, plugin.getPlayers().getHomeLocation(player.getUniqueId(), number), number); return true; } //plugin.getLogger().info("DEBUG: home loc = " + home + " teleporting"); //home.getChunk().load(); player.teleport(home); player.setFallDistance(0); //player.sendBlockChange(home, Material.GLOWSTONE, (byte)0); if (number ==1 ) { player.sendMessage(ChatColor.GREEN + plugin.myLocale(player.getUniqueId()).homeTeleport); } else { player.sendMessage(ChatColor.GREEN + plugin.myLocale(player.getUniqueId()).homeTeleport + " #" + number); } return true; }
/** * Teleport player to a home location. If one cannot be found a search is done to * find a safe place. * @param player * @param number - home location to do to * @return true if successful, false if not */ public boolean homeTeleport(final Player player, int number) { Location home = null; //plugin.getLogger().info("home teleport called for #" + number); home = getSafeHomeLocation(player.getUniqueId(), number); //plugin.getLogger().info("home get safe loc = " + home); // Check if the player is a passenger in a boat if (player.isInsideVehicle()) { Entity boat = player.getVehicle(); if (boat instanceof Boat) { player.leaveVehicle(); // Remove the boat so they don't lie around everywhere boat.remove(); player.getInventory().addItem(new ItemStack(Material.BOAT, 1)); player.updateInventory(); } } if (home == null) { //plugin.getLogger().info("Fixing home location using safe spot teleport"); // Try to fix this teleport location and teleport the player if possible new SafeSpotTeleport(plugin, player, plugin.getPlayers().getHomeLocation(player.getUniqueId(), number), number); return true; } //plugin.getLogger().info("DEBUG: home loc = " + home + " teleporting"); //home.getChunk().load(); player.teleport(home); //player.sendBlockChange(home, Material.GLOWSTONE, (byte)0); if (number ==1 ) { Util.sendMessage(player, ChatColor.GREEN + plugin.myLocale(player.getUniqueId()).islandteleport); } else { Util.sendMessage(player, ChatColor.GREEN + plugin.myLocale(player.getUniqueId()).islandteleport + " #" + number); } return true; }
/** * @param e * This event check throws the boat at a player when they hit it * unless someone is in it */ @EventHandler(priority = EventPriority.NORMAL, ignoreCancelled = true) public void onClick(VehicleDamageEvent e) { // plugin.getLogger().info("Damage event " + e.getDamage()); // Find out what block is being clicked Vehicle boat = e.getVehicle(); if (!(boat instanceof Boat)) { return; } if (!boat.isEmpty()) { return; } final World playerWorld = boat.getWorld(); if (!playerWorld.getName().equalsIgnoreCase(Settings.worldName)) { // Not the right world return; } // plugin.getLogger().info("Boat "); // Find out who is doing the clicking if (!(e.getAttacker() instanceof Player)) { // If a creeper blows up the boat, tough cookies! return; } Player p = (Player) e.getAttacker(); if (p == null) { return; } // Try to remove the boat and throw it at the player Location boatSpot = new Location(boat.getWorld(), boat.getLocation().getX(), boat.getLocation().getY() + 2, boat.getLocation().getZ()); Location throwTo = new Location(boat.getWorld(), p.getLocation().getX(), p.getLocation().getY() + 1, p.getLocation().getZ()); ItemStack newBoat = new ItemStack(Material.BOAT, 1); // Find the direction the boat should move in Vector dir = throwTo.toVector().subtract(boatSpot.toVector()).normalize(); dir = dir.multiply(0.5); Entity newB = boat.getWorld().dropItem(boatSpot, newBoat); newB.setVelocity(dir); boat.remove(); e.setCancelled(true); }
private static boolean canWipe(Entity entity, boolean wipeExplosives, boolean wipeVehicles) { if (wipeExplosives) { if (Explosive.class.isAssignableFrom(entity.getClass())) { return true; } } if (wipeVehicles) { if (Boat.class.isAssignableFrom(entity.getClass())) { return true; } else if (Minecart.class.isAssignableFrom(entity.getClass())) { return true; } } Iterator<Class<? extends Entity>> it = WIPEABLES.iterator(); while (it.hasNext()) { if (it.next().isAssignableFrom(entity.getClass())) { return true; } } return false; }
/** * Teleport player to a home location. If one cannot be found a search is done to * find a safe place. * @param player * @param number - home location to do to * @return true if successful, false if not */ @SuppressWarnings("deprecation") public boolean homeTeleport(final Player player, int number) { Location home; if (DEBUG) plugin.getLogger().info("home teleport called for #" + number); home = getSafeHomeLocation(player.getUniqueId(), number); if (DEBUG) plugin.getLogger().info("home get safe loc = " + home); // Check if the player is a passenger in a boat if (player.isInsideVehicle()) { Entity boat = player.getVehicle(); if (boat instanceof Boat) { player.leaveVehicle(); // Remove the boat so they don't lie around everywhere boat.remove(); player.getInventory().addItem(new ItemStack(Material.BOAT, 1)); player.updateInventory(); } } if (home == null) { if (DEBUG) plugin.getLogger().info("Fixing home location using safe spot teleport"); // Try to fix this teleport location and teleport the player if possible new SafeSpotTeleport(plugin, player, plugin.getPlayers().getHomeLocation(player.getUniqueId(), number), number); return true; } if (DEBUG) plugin.getLogger().info("DEBUG: home loc = " + home + " teleporting"); //home.getChunk().load(); player.teleport(home); //player.sendBlockChange(home, Material.GLOWSTONE, (byte)0); if (number ==1 ) { Util.sendMessage(player, ChatColor.GREEN + plugin.getLocale(player.getUniqueId()).get("island.teleport").replace("[label]", Settings.ISLANDCOMMAND)); } else { Util.sendMessage(player, ChatColor.GREEN + plugin.getLocale(player.getUniqueId()).get("island.teleported").replace("[number]", String.valueOf(number))); } // Exit spectator mode if in it if (player.getGameMode().equals(GameMode.SPECTATOR)) { player.setGameMode(GameMode.SURVIVAL); } return true; }
public CanaryBoat(net.canarymod.api.entity.vehicle.Boat entity) { super(entity); }
@Override protected net.canarymod.api.entity.vehicle.Boat getHandle() { return (net.canarymod.api.entity.vehicle.Boat) super.getHandle(); }
/** * Update distances and store them into server's memory until player disconnects. * * @param player */ private void validateMovementAndUpdateDistance(Player player) { String uuid = player.getUniqueId().toString(); Location previousLocation = playerLocations.get(uuid); // Update new location. playerLocations.put(uuid, player.getLocation()); // If player location not found or if player has changed world, ignore previous location. // Evaluating distance would give an exception. if (previousLocation == null || !previousLocation.getWorld().getName().equals(player.getWorld().getName())) { return; } // If player is in restricted game mode or is in a blocked world, don't update distances. if (!shouldIncreaseBeTakenIntoAccountNoPermissions(player)) { return; } int difference = getDistanceDifference(player, previousLocation); // Player has not moved. if (difference == 0L) { return; } if (player.getVehicle() instanceof Horse) { updateDistance(difference, player, NormalAchievements.DISTANCEHORSE); } else if (player.getVehicle() instanceof Pig) { updateDistance(difference, player, NormalAchievements.DISTANCEPIG); } else if (player.getVehicle() instanceof Minecart) { updateDistance(difference, player, NormalAchievements.DISTANCEMINECART); } else if (player.getVehicle() instanceof Boat) { updateDistance(difference, player, NormalAchievements.DISTANCEBOAT); } else if (plugin.getServerVersion() >= 11 && player.getVehicle() instanceof Llama) { updateDistance(difference, player, NormalAchievements.DISTANCELLAMA); } else if (!player.isFlying() && (plugin.getServerVersion() < 9 || !player.isGliding())) { updateDistance(difference, player, NormalAchievements.DISTANCEFOOT); } else if (plugin.getServerVersion() >= 9 && player.isGliding()) { updateDistance(difference, player, NormalAchievements.DISTANCEGLIDING); } }
@EventHandler(priority = EventPriority.LOWEST) public void onEntityDamageByEntityEvent(EntityDamageByEntityEvent e) { Player p = null; RedProtect.get().logger.debug("RPLayerListener: Is EntityDamageByEntityEvent event"); if (e.getDamager() instanceof Player){ p = (Player)e.getDamager(); } else if (e.getDamager() instanceof Projectile){ Projectile proj = (Projectile)e.getDamager(); if (proj.getShooter() instanceof Player){ p = (Player) proj.getShooter(); } } if (p != null){ RedProtect.get().logger.debug("Player: " + p.getName()); } else { RedProtect.get().logger.debug("Player: is null"); return; } RedProtect.get().logger.debug("Damager: " + e.getDamager().getType().name()); //check killaura or freekill if (RPConfig.getBool("server-protection.check-killaura-freekill.enable")){ startCheckRate(p.getName()); } Location l = e.getEntity().getLocation(); Region r = RedProtect.get().rm.getTopRegion(l); if (r == null){ return; } if (RedProtect.get().tpWait.contains(p.getName())){ RedProtect.get().tpWait.remove(p.getName()); RPLang.sendMessage(p, "cmdmanager.region.tpcancelled"); } if (e.getEntity() instanceof Player && !p.equals(e.getEntity()) && r.flagExists("pvp") && !r.canPVP((Player)e.getEntity(), p)){ RPLang.sendMessage(p, "entitylistener.region.cantpvp"); e.setCancelled(true); } if ((e.getEntity() instanceof Hanging || e.getEntity() instanceof EnderCrystal) && !r.canBuild(p) && !r.canBreak(e.getEntityType())){ RPLang.sendMessage(p, "playerlistener.region.cantremove"); e.setCancelled(true); } if ((e.getEntity() instanceof Boat || e.getEntity() instanceof Minecart) && !r.canMinecart(p)){ RPLang.sendMessage(p, "blocklistener.region.cantbreak"); e.setCancelled(true); } }