@Override protected boolean teleportToSpawn() { Location target = getBedSpawnLocation(); if (target == null) { target = server.getWorlds().get(0).getSpawnLocation(); } PlayerPortalEvent event = EventFactory.getInstance() .callEvent(new PlayerPortalEvent(this, location.clone(), target, null)); if (event.isCancelled()) { return false; } target = event.getTo(); spawnAt(target); teleported = true; awardAchievement(Achievement.THE_END, false); return true; }
if(event.getTo() == null || event.getTo().getWorld() == null) return; if(!GriefPrevention.instance.claimsEnabledForWorld(event.getTo().getWorld())) return; Player player = event.getPlayer(); if(event.getCause() == TeleportCause.NETHER_PORTAL) CheckForPortalTrapTask task = new CheckForPortalTrapTask(player, event.getFrom()); portalReturnMap.put(player.getUniqueId(), event.getFrom()); Location destination = event.getTo(); if(event.useTravelAgent()) if(event.getPortalTravelAgent().getCanCreatePortal()) TravelAgent agent = event.getPortalTravelAgent(); agent.setCanCreatePortal(false); destination = agent.findOrCreate(destination); event.setCancelled(true); GriefPrevention.sendMessage(player, TextMode.Err, Messages.NoBuildPortalPermission, claim.getOwnerName());
if (event.isCancelled() || (event.getFrom() == null)) { return; 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())) { 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; 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()); this.plugin.log(Level.FINE, "Player '" + event.getPlayer().getName() + "' was allowed to go to '" + event.getTo().getWorld().getName() + "' because enforceaccess is off.");
if (e.getFrom() == null) { return false; World fromWorld = e.getFrom().getWorld(); if (!e.getCause().equals(TeleportCause.NETHER_PORTAL) || !plugin.getIWM().inWorld(e.getFrom()) || !plugin.getIWM().isNetherGenerate(fromWorld)) { if (fromWorld.getEnvironment().equals(Environment.NORMAL)) { e.setTo(plugin.getIWM().getNetherWorld(fromWorld).getSpawnLocation()); e.useTravelAgent(true); Location to = plugin.getIslands().getIslandAt(e.getFrom()).map(i -> i.getSpawnPoint(Environment.NORMAL)).orElse(e.getFrom().toVector().toLocation(overWorld)); e.setCancelled(true); .entity(e.getPlayer()) .location(to) .portal() Location to = plugin.getIslands().getIslandAt(e.getFrom()).map(i -> i.getSpawnPoint(Environment.NETHER)).orElse(e.getFrom().toVector().toLocation(nether)); e.setCancelled(true); .entity(e.getPlayer()) .location(to) .portal()
/** * When returning from the standard nether, teleport to the player's island * @param e */ @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onNetherPortalStandardNether(PlayerPortalEvent e) { World fromWorld = e.getFrom().getWorld(); if (e.getCause().equals(TeleportCause.NETHER_PORTAL) && plugin.getIWM().inWorld(Util.getWorld(fromWorld)) && !plugin.getIWM().isNetherIslands(fromWorld) && fromWorld.getEnvironment().equals(Environment.NETHER) && plugin.getPlayers().isKnown(e.getPlayer().getUniqueId())) { e.setCancelled(true); plugin.getIslands().homeTeleport(Util.getWorld(fromWorld), e.getPlayer()); } }
@EventHandler(ignoreCancelled = true, priority = EventPriority.LOWEST) public void onPlayerPortalLowest(final PlayerPortalEvent event) { final Player player = event.getPlayer(); final IPlayerData pData = DataManager.getPlayerData(event.getPlayer()); if (MovingUtil.hasScheduledPlayerSetBack(player)) { if (pData.isDebugActive(checkType)) { debug(player, "[PORTAL] Prevent use, due to a scheduled set back."); } event.setCancelled(true); } }
@EventHandler(priority = EventPriority.LOWEST, ignoreCancelled = true) public void onPlayerPortal(PlayerPortalEvent event) { // if knockback is set to 0, or portal redirection is disabled, simply return if (Config.KnockBack() == 0.0 || !Config.portalRedirection()) return; Location newLoc = BorderCheckTask.checkPlayer(event.getPlayer(), event.getTo(), true, false); if (newLoc != null) event.setTo(newLoc); }
/** * When a player uses a portal, all information related to the moving checks becomes invalid. * * @param event * the event */ @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public void onPlayerPortal(final PlayerPortalEvent event) { final Location to = event.getTo(); final IPlayerData pData = DataManager.getPlayerData(event.getPlayer()); final MovingData data = pData.getGenericInstance(MovingData.class); if (pData.isDebugActive(checkType)) { debug(event.getPlayer(), "[PORTAL] to=" + to); } if (to != null) { // TODO: This should be redundant, might remove anyway. // TODO: Rather add something like setLatencyImmunity(...ms / conditions). data.clearMostMovingCheckData(); } }
@EventHandler public static void onPortalTravel(PlayerPortalEvent event) throws Exception { if (event.getCause() == PlayerPortalEvent.TeleportCause.END_PORTAL) { int x = event.getPlayer().getLocation().getBlockX(); int y = event.getPlayer().getLocation().getBlockY(); int z = event.getPlayer().getLocation().getBlockZ(); String[] data = getPageData("http://example.com/game.php?type=getRealm&location="+x+":"+y+":"+z).split(":"); // THIS RETURNS <username>:<oldblockid> String realm = data[0]; int oldID = Integer.parseInt(data[1].trim()); Bukkit.getServer().getWorld("world").getBlockAt(x, y, z).setTypeId(oldID); World world = Bukkit.getWorld("realms/" + realm); if(world == null){ //Loads a world with the name given in the constructor WorldCreator wc = new WorldCreator("realms/" + realm); world = Bukkit.createWorld(wc); } event.getPlayer().teleport(new Location(world, 1, 65,16.5)); } }
/** * This method is called to adjust the portal location to the actual portal location (and not * right outside of it. * @param event The Event that was fired. */ @EventHandler(priority = EventPriority.LOWEST) public void playerPortalCheck(PlayerPortalEvent event) { if (event.isCancelled() || event.getFrom() == null) { return; } // REMEMBER! getTo MAY be NULL HERE!!! // If the player was actually outside of the portal, adjust the from location if (event.getFrom().getWorld().getBlockAt(event.getFrom()).getType() != Material.NETHER_PORTAL) { Location newloc = this.plugin.getSafeTTeleporter().findPortalBlockNextTo(event.getFrom()); // TODO: Fix this. Currently, we only check for PORTAL blocks. I'll have to figure out what // TODO: we want to do here. if (newloc != null) { event.setFrom(newloc); } } // Wait for the adjust, then return! if (event.getTo() == null) { return; } } /**
@EventHandler public void onPlayerPortal(PlayerPortalEvent event) { Block block1 = event.getFrom().getBlock(); Block block2 = block1.getRelative(BlockFace.UP); Block block3 = block2.getRelative(BlockFace.UP); Block block4 = block1.getRelative(BlockFace.DOWN); if (isPortalInNearBy(block1) || isPortalInNearBy(block2) || isPortalInNearBy(block3) || isPortalInNearBy(block4)) { event.setCancelled(true); } }
@EventHandler(priority = EventPriority.MONITOR) public void onPlayerPortal(final PlayerPortalEvent event) { // Note: ignore cancelother setting. open.check(event.getPlayer()); }
@EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onPlayerPortal(PlayerPortalEvent e) { if (e.getCause().equals(TeleportCause.NETHER_PORTAL)) { checkIsland(e, e.getFrom(), Flags.NETHER_PORTAL); } else if (e.getCause().equals(TeleportCause.END_PORTAL)) { checkIsland(e, e.getFrom(), Flags.END_PORTAL); } } }
@Override public void useTravelAgent(boolean useTravelAgent) { p.useTravelAgent(useTravelAgent); }
@Override public MCTravelAgent getPortalTravelAgent() { return new BukkitMCTravelAgent(p.getPortalTravelAgent()); }
@EventHandler public void onTravel(PlayerPortalEvent event) { if (!SavageFactions.plugin.getConfig().getBoolean("portals.limit", false)) { return; // Don't do anything if they don't want us to. } TravelAgent agent = event.getPortalTravelAgent(); // If they aren't able to find a portal, it'll try to create one. if (event.useTravelAgent() && agent.getCanCreatePortal() && agent.findPortal(event.getTo()) == null) { FLocation loc = new FLocation(event.getTo()); Faction faction = Board.getInstance().getFactionAt(loc); if (faction.isWilderness()) { return; // We don't care about wilderness. } else if (!faction.isNormal() && !event.getPlayer().isOp()) { // Don't let non ops make portals in safezone or warzone. event.setCancelled(true); return; } FPlayer fp = FPlayers.getInstance().getByPlayer(event.getPlayer()); String mininumRelation = SavageFactions.plugin.getConfig().getString("portals.minimum-relation", "MEMBER"); // Defaults to Neutral if typed wrong. if (!fp.getFaction().getRelationTo(faction).isAtLeast(Relation.fromString(mininumRelation))) { event.setCancelled(true); } } }
/** * Handle end portals * @param e - event */ @EventHandler(priority = EventPriority.LOW, ignoreCancelled = true) public void onEndIslandPortal(PlayerPortalEvent e) { if (!e.getCause().equals(TeleportCause.END_PORTAL) || !plugin.getIWM().inWorld(e.getFrom())) { return; } World overWorld = Util.getWorld(e.getFrom().getWorld()); // If entering a portal in the end, teleport home if you have one, else do nothing if (e.getFrom().getWorld().getEnvironment().equals(Environment.THE_END)) { if (plugin.getIslands().hasIsland(overWorld, e.getPlayer().getUniqueId())) { e.setCancelled(true); plugin.getIslands().homeTeleport(overWorld, e.getPlayer()); } return; } // Going to the end, then go to the same location in the end world if (plugin.getIWM().isEndGenerate(overWorld) && plugin.getIWM().isEndIslands(overWorld)) { World endWorld = plugin.getIWM().getEndWorld(overWorld); // End exists and end islands are being used Location to = plugin.getIslands().getIslandAt(e.getFrom()).map(i -> i.getSpawnPoint(Environment.THE_END)).orElse(e.getFrom().toVector().toLocation(endWorld)); e.setCancelled(true); new SafeSpotTeleport.Builder(plugin) .entity(e.getPlayer()) .location(to) .build(); } }
/** * @param event */ @EventHandler(priority = EventPriority.HIGH) public void onPortalEnter(final PlayerPortalEvent event) { final Field field = plugin.getForceFieldManager().getEnabledSourceField(event.getPlayer().getLocation(), FieldFlag.PREVENT_PORTAL_ENTER); if (field != null) { if (FieldFlag.PREVENT_PORTAL_ENTER.applies(field, event.getPlayer())) { event.setCancelled(true); } } }
@Override public boolean useTravelAgent() { return p.useTravelAgent(); }
@EventHandler(ignoreCancelled = true, priority = EventPriority.HIGH) public void onPlayerPortal(PlayerPortalEvent event) { if (event.getTo() == null) { // apparently this counts as a cancelled event, implementation specific though return; LocalPlayer localPlayer = plugin.wrapPlayer(event.getPlayer()); WorldConfiguration wcfg = cfg.get(BukkitAdapter.adapt(event.getTo().getWorld())); if (!wcfg.regionNetherPortalProtection) return; if (event.getCause() != TeleportCause.NETHER_PORTAL) { return; if (!event.useTravelAgent()) { // either end travel (even though we checked cause) or another plugin is fucking with us, shouldn't create a portal though return; TravelAgent pta = event.getPortalTravelAgent(); if (pta == null) { // possible, but shouldn't create a portal return; if (pta.findPortal(event.getTo()) != null) { return; // portal exists...it shouldn't make a new one Location min = event.getTo().clone().subtract(radius, radius, radius); Location max = event.getTo().clone().add(radius, radius, radius); com.sk89q.worldedit.world.World world = BukkitAdapter.adapt(event.getTo().getWorld()); if (mgr == null) return; ApplicableRegionSet set = mgr.getApplicableRegions(check); if (!set.testState(plugin.wrapPlayer(event.getPlayer()), Flags.BUILD)) { event.getPlayer().sendMessage(ChatColor.RED + "Destination is in a protected area."); event.setCancelled(true);