Search in sources :

Example 21 with Player

use of com.sk89q.worldedit.entity.Player in project FastAsyncWorldEdit by IntellectualSites.

the class GenerationCommands method generate.

@Command(name = "/generate", aliases = { "/gen", "/g" }, desc = "Generates a shape according to a formula.", descFooter = "For details, see https://ehub.to/we/expr")
@CommandPermissions("worldedit.generation.shape")
@Logging(ALL)
@Confirm(Confirm.Processor.REGION)
public int generate(Actor actor, LocalSession session, EditSession editSession, @Selection Region region, @Arg(desc = "The pattern of blocks to set") Pattern pattern, @Arg(desc = "Expression to test block placement locations and set block type", variable = true) List<String> expression, @Switch(name = 'h', desc = "Generate a hollow shape") boolean hollow, @Switch(name = 'r', desc = "Use the game's coordinate origin") boolean useRawCoords, @Switch(name = 'o', desc = "Use the placement's coordinate origin") boolean offset, @Switch(name = 'c', desc = "Use the selection's center as origin") boolean offsetCenter) throws WorldEditException {
    final Vector3 zero;
    Vector3 unit;
    if (useRawCoords) {
        zero = Vector3.ZERO;
        unit = Vector3.ONE;
    } else if (offset) {
        zero = session.getPlacementPosition(actor).toVector3();
        unit = Vector3.ONE;
    } else if (offsetCenter) {
        final Vector3 min = region.getMinimumPoint().toVector3();
        final Vector3 max = region.getMaximumPoint().toVector3();
        zero = max.add(min).multiply(0.5);
        unit = Vector3.ONE;
    } else {
        final Vector3 min = region.getMinimumPoint().toVector3();
        final Vector3 max = region.getMaximumPoint().toVector3();
        zero = max.add(min).multiply(0.5);
        unit = max.subtract(zero);
        if (unit.getX() == 0) {
            unit = unit.withX(1.0);
        }
        if (unit.getY() == 0) {
            unit = unit.withY(1.0);
        }
        if (unit.getZ() == 0) {
            unit = unit.withZ(1.0);
        }
    }
    final Vector3 unit1 = unit;
    try {
        final int affected = editSession.makeShape(region, zero, unit1, pattern, String.join(" ", expression), hollow, session.getTimeout());
        if (actor instanceof Player) {
            ((Player) actor).findFreePosition();
        }
        actor.print(Caption.of("worldedit.generate.created", TextComponent.of(affected)));
        return affected;
    } catch (ExpressionException e) {
        actor.printError(TextComponent.of(e.getMessage()));
        return 0;
    }
}
Also used : Player(com.sk89q.worldedit.entity.Player) BlockVector3(com.sk89q.worldedit.math.BlockVector3) Vector3(com.sk89q.worldedit.math.Vector3) ExpressionException(com.sk89q.worldedit.internal.expression.ExpressionException) Logging(com.sk89q.worldedit.command.util.Logging) Command(org.enginehub.piston.annotation.Command) Confirm(com.sk89q.worldedit.command.util.annotation.Confirm) CommandPermissions(com.sk89q.worldedit.command.util.CommandPermissions)

Example 22 with Player

use of com.sk89q.worldedit.entity.Player in project FastAsyncWorldEdit by IntellectualSites.

the class SessionManager method get.

/**
 * Get the session for an owner and create one if one doesn't exist.
 *
 * @param owner the owner
 * @return a session
 */
public synchronized LocalSession get(SessionOwner owner) {
    checkNotNull(owner);
    LocalSession session = getIfPresent(owner);
    LocalConfiguration config = worldEdit.getConfiguration();
    SessionKey sessionKey = owner.getSessionKey();
    // No session exists yet -- create one
    if (session == null) {
        try {
            session = store.load(getKey(sessionKey));
            session.postLoad();
        } catch (IOException e) {
            LOGGER.warn("Failed to load saved session", e);
            session = new LocalSession();
        }
        Request.request().setSession(session);
        session.setConfiguration(config);
        session.setBlockChangeLimit(config.defaultChangeLimit);
        session.setTimeout(config.calculationTimeout);
        // FAWE start
        /*
            try {
                if (owner.hasPermission("worldedit.selection.pos")) {
                    setDefaultWand(session.getWandItem(), config.wandItem, session, new SelectionWand());
                }
                if (owner.hasPermission("worldedit.navigation.jumpto.tool") || owner.hasPermission("worldedit.navigation.thru.tool")) {
                    setDefaultWand(session.getNavWandItem(), config.navigationWand, session, new NavigationWand());
                }
            } catch (InvalidToolBindException e) {
                if (!warnedInvalidTool) {
                    warnedInvalidTool = true;
                    log.warn("Invalid wand tool set in config. Tool will not be assigned: " + e.getItemType());
                }
            }
            */
        // FAWE end
        // Remember the session regardless of if it's currently active or not.
        // And have the SessionTracker FLUSH inactive sessions.
        sessions.put(getKey(owner), new SessionHolder(sessionKey, session));
    }
    if (shouldBoundLimit(owner, "worldedit.limit.unrestricted", session.getBlockChangeLimit(), config.maxChangeLimit)) {
        session.setBlockChangeLimit(config.maxChangeLimit);
    }
    if (shouldBoundLimit(owner, "worldedit.timeout.unrestricted", session.getTimeout(), config.maxCalculationTimeout)) {
        session.setTimeout(config.maxCalculationTimeout);
    }
    // Have the session use inventory if it's enabled and the owner
    // doesn't have an override
    session.setUseInventory(config.useInventory && !(config.useInventoryOverride && (owner.hasPermission("worldedit.inventory.unrestricted") || (config.useInventoryCreativeOverride && (!(owner instanceof Player) || ((Player) owner).getGameMode() == GameModes.CREATIVE)))));
    // Force non-locatable actors to use placeAtPos1
    if (!(owner instanceof Locatable)) {
        session.setPlaceAtPos1(true);
    }
    return session;
}
Also used : Player(com.sk89q.worldedit.entity.Player) LocalSession(com.sk89q.worldedit.LocalSession) IOException(java.io.IOException) LocalConfiguration(com.sk89q.worldedit.LocalConfiguration) Locatable(com.sk89q.worldedit.extension.platform.Locatable)

Example 23 with Player

use of com.sk89q.worldedit.entity.Player in project FastAsyncWorldEdit by IntellectualSites.

the class EditSession method flushQueue.

// FAWE start
/**
 * Finish off the queue.
 */
public void flushQueue() {
    Operations.completeBlindly(commit());
    // Check fails
    FaweLimit used = getLimitUsed();
    if (used.MAX_FAILS > 0) {
        if (used.MAX_CHANGES > 0 || used.MAX_ENTITIES > 0) {
            actor.print(Caption.of("fawe.error.worldedit.some.fails", used.MAX_FAILS));
        } else if (new ExtentTraverser<>(getExtent()).findAndGet(FaweRegionExtent.class) != null) {
            actor.print(Caption.of("fawe.cancel.reason.outside.region"));
        } else {
            actor.print(Caption.of("fawe.cancel.reason.outside.level"));
        }
    }
    if (wnaMode) {
        getWorld().flush();
    }
    // Reset limit
    limit.set(originalLimit);
    try {
        if (relighter != null && !(relighter instanceof NullRelighter)) {
            // Don't relight twice!
            if (!relighter.isFinished() && relighter.getLock().tryLock()) {
                try {
                    if (Settings.settings().LIGHTING.REMOVE_FIRST) {
                        relighter.removeAndRelight(true);
                    } else {
                        relighter.fixLightingSafe(true);
                    }
                } finally {
                    relighter.getLock().unlock();
                }
            }
        }
    } catch (Throwable e) {
        actor.print(Caption.of("fawe.error.lighting"));
        e.printStackTrace();
    }
    // Cancel any preloader associated with the actor if present
    if (getActor() instanceof Player) {
        Preloader preloader = Fawe.platform().getPreloader(false);
        if (preloader != null) {
            preloader.cancel(getActor());
        }
    }
    // Enqueue it
    if (getChangeSet() != null) {
        if (Settings.settings().HISTORY.COMBINE_STAGES) {
            ((AbstractChangeSet) getChangeSet()).closeAsync();
        } else {
            try {
                getChangeSet().close();
            } catch (IOException e) {
                throw new RuntimeException(e);
            }
        }
    }
}
Also used : Player(com.sk89q.worldedit.entity.Player) FaweLimit(com.fastasyncworldedit.core.limit.FaweLimit) Preloader(com.fastasyncworldedit.core.queue.implementation.preloader.Preloader) AbstractChangeSet(com.fastasyncworldedit.core.history.changeset.AbstractChangeSet) NullRelighter(com.fastasyncworldedit.core.extent.processor.lighting.NullRelighter) IOException(java.io.IOException)

Example 24 with Player

use of com.sk89q.worldedit.entity.Player in project FastAsyncWorldEdit by IntellectualSites.

the class PlatformManager method createProxyActor.

/**
 * Given an actor, return a new one that may use a different platform
 * for permissions and world editing.
 *
 * @param base the base actor to match
 * @return a new delegate actor
 */
@SuppressWarnings("unchecked")
public <T extends Actor> T createProxyActor(T base) {
    checkNotNull(base);
    if (base instanceof Player) {
        Player player = (Player) base;
        Player permActor = queryCapability(Capability.PERMISSIONS).matchPlayer(player);
        if (permActor == null) {
            permActor = player;
        }
        Player cuiActor = queryCapability(Capability.WORLDEDIT_CUI).matchPlayer(player);
        if (cuiActor == null) {
            cuiActor = player;
        }
        if (player == permActor && player == cuiActor) {
            return (T) proxyFawe(player);
        }
        return (T) proxyFawe(new PlayerProxy(player, permActor, cuiActor, getWorldForEditing(player.getWorld())));
    } else {
        return base;
    }
}
Also used : Player(com.sk89q.worldedit.entity.Player)

Example 25 with Player

use of com.sk89q.worldedit.entity.Player in project JeffLib by JEFF-Media-GbR.

the class WorldEditHandler method getSelectedRegion.

private static Region getSelectedRegion(final org.bukkit.entity.Player player) throws IncompleteRegionException {
    final Player actor = BukkitAdapter.adapt(player);
    final SessionManager manager = WorldEdit.getInstance().getSessionManager();
    final LocalSession session = manager.get(actor);
    final World selectionWorld = session.getSelectionWorld();
    return session.getSelection(selectionWorld);
}
Also used : Player(com.sk89q.worldedit.entity.Player) SessionManager(com.sk89q.worldedit.session.SessionManager) LocalSession(com.sk89q.worldedit.LocalSession) World(com.sk89q.worldedit.world.World)

Aggregations

Player (com.sk89q.worldedit.entity.Player)26 LocalSession (com.sk89q.worldedit.LocalSession)13 BlockVector3 (com.sk89q.worldedit.math.BlockVector3)10 CommandPermissions (com.sk89q.worldedit.command.util.CommandPermissions)9 World (com.sk89q.worldedit.world.World)9 Command (org.enginehub.piston.annotation.Command)9 Logging (com.sk89q.worldedit.command.util.Logging)7 Location (com.sk89q.worldedit.util.Location)6 Confirm (com.sk89q.worldedit.command.util.annotation.Confirm)4 Actor (com.sk89q.worldedit.extension.platform.Actor)4 Region (com.sk89q.worldedit.regions.Region)4 Caption (com.fastasyncworldedit.core.configuration.Caption)3 EditSession (com.sk89q.worldedit.EditSession)3 BlockBag (com.sk89q.worldedit.extent.inventory.BlockBag)3 FaweAPI (com.fastasyncworldedit.core.FaweAPI)2 RollbackOptimizedHistory (com.fastasyncworldedit.core.history.RollbackOptimizedHistory)2 IncompleteRegionException (com.sk89q.worldedit.IncompleteRegionException)2 WorldEdit (com.sk89q.worldedit.WorldEdit)2 Arguments (com.sk89q.worldedit.command.argument.Arguments)2 BlockTool (com.sk89q.worldedit.command.tool.BlockTool)2