/** * This method is called when a player actually portals via a vanilla style portal. * * @param event The Event that was fired. */ @EventHandler(priority = EventPriority.HIGH) public void playerPortal(PlayerPortalEvent event) { if (event.isCancelled() || (event.getFrom() == null)) { return; } // The adjust should have happened much earlier. if (event.getTo() == null) { return; } MultiverseWorld fromWorld = this.worldManager.getMVWorld(event.getFrom().getWorld().getName()); MultiverseWorld toWorld = this.worldManager.getMVWorld(event.getTo().getWorld().getName()); if (event.getFrom().getWorld().equals(event.getTo().getWorld())) { // The player is Portaling to the same world. this.plugin.log( Level.FINER, "Player '" + event.getPlayer().getName() + "' is portaling to the same world."); return; } event.setCancelled( !pt.playerHasMoneyToEnter(fromWorld, toWorld, event.getPlayer(), event.getPlayer(), true)); if (event.isCancelled()) { this.plugin.log( Level.FINE, "Player '" + event.getPlayer().getName() + "' was DENIED ACCESS to '" + event.getTo().getWorld().getName() + "' because they don't have the FUNDS required to enter."); return; } if (plugin.getMVConfig().getEnforceAccess()) { event.setCancelled( !pt.playerCanGoFromTo(fromWorld, toWorld, event.getPlayer(), event.getPlayer())); if (event.isCancelled()) { this.plugin.log( Level.FINE, "Player '" + event.getPlayer().getName() + "' was DENIED ACCESS to '" + event.getTo().getWorld().getName() + "' because they don't have: multiverse.access." + event.getTo().getWorld().getName()); } } else { this.plugin.log( Level.FINE, "Player '" + event.getPlayer().getName() + "' was allowed to go to '" + event.getTo().getWorld().getName() + "' because enforceaccess is off."); } if (!plugin.getMVConfig().isUsingDefaultPortalSearch() && event.getPortalTravelAgent() != null) { event.getPortalTravelAgent().setSearchRadius(plugin.getMVConfig().getPortalSearchRadius()); } }
@EventHandler(priority = EventPriority.NORMAL) public void onPlayerPortal(PlayerPortalEvent event) { if (event.isCancelled()) { this.plugin.log(Level.FINEST, "PlayerPortalEvent was cancelled! NOT teleporting!"); return; } Location originalTo = event.getTo(); if (originalTo != null) { originalTo = originalTo.clone(); } Location currentLocation = event.getFrom().clone(); String currentWorld = currentLocation.getWorld().getName(); PortalType type = PortalType.END; if (event.getFrom().getBlock().getType() == Material.PORTAL) { type = PortalType.NETHER; event.useTravelAgent(true); } String linkedWorld = this.plugin.getWorldLink(currentWorld, type); if (linkedWorld != null) { this.linkChecker.getNewTeleportLocation(event, currentLocation, linkedWorld); } else if (this.nameChecker.isValidNetherName(currentWorld)) { if (type == PortalType.NETHER) { this.plugin.log(Level.FINER, ""); this.linkChecker.getNewTeleportLocation( event, currentLocation, this.nameChecker.getNormalName(currentWorld, PortalType.NETHER)); } else { this.linkChecker.getNewTeleportLocation( event, currentLocation, this.nameChecker.getEndName( this.nameChecker.getNormalName(currentWorld, PortalType.NETHER))); } } else if (this.nameChecker.isValidEndName(currentWorld)) { if (type == PortalType.NETHER) { this.linkChecker.getNewTeleportLocation( event, currentLocation, this.nameChecker.getNetherName( this.nameChecker.getNormalName(currentWorld, PortalType.END))); } else { this.linkChecker.getNewTeleportLocation( event, currentLocation, this.nameChecker.getNormalName(currentWorld, PortalType.END)); } } else { if (type == PortalType.END) { this.linkChecker.getNewTeleportLocation( event, currentLocation, this.nameChecker.getEndName(currentWorld)); } else { this.linkChecker.getNewTeleportLocation( event, currentLocation, this.nameChecker.getNetherName(currentWorld)); } } if (event.getTo() == null || event.getFrom() == null) { return; } if (event.getFrom().getWorld().equals(event.getTo().getWorld())) { // The player is Portaling to the same world. this.plugin.log( Level.FINER, "Player '" + event.getPlayer().getName() + "' is portaling to the same world. Ignoring."); event.setTo(originalTo); return; } MultiverseWorld fromWorld = this.worldManager.getMVWorld(event.getFrom().getWorld().getName()); MultiverseWorld toWorld = this.worldManager.getMVWorld(event.getTo().getWorld().getName()); if (!event.isCancelled() && fromWorld.getEnvironment() == World.Environment.THE_END && type == PortalType.END) { this.plugin.log( Level.FINE, "Player '" + event.getPlayer().getName() + "' will be teleported to the spawn of '" + toWorld.getName() + "' since they used an end exit portal."); event.getPortalTravelAgent().setCanCreatePortal(false); if (toWorld.getBedRespawn() && event.getPlayer().getBedSpawnLocation() != null && event.getPlayer().getBedSpawnLocation().getWorld().getUID() == toWorld.getCBWorld().getUID()) { event.setTo(event.getPlayer().getBedSpawnLocation()); } else { event.setTo(toWorld.getSpawnLocation()); } } }