@Override public void handlePayload(ChannelBuf data, RemoteConnection connection, Platform.Type side) { if (connection instanceof PlayerConnection) { Player player = ((PlayerConnection) connection).getPlayer(); LocalSession session = SpongeWorldEdit.inst().getSession(player); if (session.hasCUISupport()) { return; } session.handleCUIInitializationMessage(new String(data.readBytes(data.available()), StandardCharsets.UTF_8)); session.describeCUI(SpongeWorldEdit.inst().wrapPlayer(player)); } } }
/** * Get an edit session. Every subsequent call returns a new edit session. * Usually you only need to use one edit session. * * @return an edit session */ public EditSession remember() { EditSession editSession = controller.getEditSessionFactory() .getEditSession(player.getWorld(), session.getBlockChangeLimit(), session.getBlockBag(player), player); editSession.enableStandardMode(); editSessions.add(editSession); return editSession; }
@Override public boolean actPrimary(Platform server, LocalConfiguration config, Player player, LocalSession session, com.sk89q.worldedit.util.Location clicked) { BlockBag bag = session.getBlockBag(player); try (EditSession editSession = session.createEditSession(player)) { try { editSession.disableBuffering(); BlockVector3 position = clicked.toVector().toBlockPoint(); editSession.setBlock(position, pattern.apply(position)); } catch (MaxChangedBlocksException ignored) { } finally { session.remember(editSession); } } finally { if (bag != null) { bag.flushChanges(); } } return true; }
@Override public void onPluginMessageReceived(String channel, Player player, byte[] message) { LocalSession session = plugin.getSession(player); String text = new String(message, UTF_8_CHARSET); session.handleCUIInitializationMessage(text); session.describeCUI(plugin.wrapPlayer(player)); }
@Override public void explainRegionAdjust(Actor player, LocalSession session) { session.describeCUI(player); }
try { session = store.load(getKey(sessionKey)); session.postLoad(); } catch (IOException e) { log.log(Level.WARNING, "Failed to load saved session", e); session = new LocalSession(); session.setConfiguration(config); session.setBlockChangeLimit(config.defaultChangeLimit); int currentChangeLimit = session.getBlockChangeLimit(); session.setBlockChangeLimit(config.maxChangeLimit); session.setBlockChangeLimit(maxChangeLimit); session.setUseInventory(config.useInventory && !(config.useInventoryOverride && (owner.hasPermission("worldedit.inventory.unrestricted")
@Command( aliases = { "/pos1" }, usage = "[coordinates]", desc = "Set position 1", min = 0, max = 1 ) @Logging(POSITION) @CommandPermissions("worldedit.selection.pos") public void pos1(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException { Location pos; if (args.argsLength() == 1) { if (args.getString(0).matches("-?\\d+,-?\\d+,-?\\d+")) { String[] coords = args.getString(0).split(","); pos = new Location(player.getWorld(), Integer.parseInt(coords[0]), Integer.parseInt(coords[1]), Integer.parseInt(coords[2])); } else { player.printError("Invalid coordinates " + args.getString(0)); return; } } else { pos = player.getBlockIn(); } if (!session.getRegionSelector(player.getWorld()).selectPrimary(pos.toVector().toBlockPoint(), ActorSelectorLimits.forActor(player))) { player.printError("Position already set."); return; } session.getRegionSelector(player.getWorld()) .explainPrimarySelection(player, session, pos.toVector().toBlockPoint()); }
@Command( aliases = { "/inset" }, usage = "<amount>", desc = "Inset the selection area", help = "Contracts the selection by the given amount in all directions.\n" + "Flags:\n" + " -h only contract horizontally\n" + " -v only contract vertically\n", flags = "hv", min = 1, max = 1 ) @Logging(REGION) @CommandPermissions("worldedit.selection.inset") public void inset(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException { Region region = session.getSelection(player.getWorld()); region.contract(getChangesForEachDir(args)); session.getRegionSelector(player.getWorld()).learnChanges(); session.getRegionSelector(player.getWorld()).explainRegionAdjust(player, session); player.print("Region inset."); }
final World world = player.getWorld(); if (args.argsLength() == 0) { session.getRegionSelector(world).clear(); session.dispatchCUISelection(player); player.print("Selection cleared."); return; final RegionSelector oldSelector = session.getRegionSelector(world); session.setDefaultRegionSelector(found); player.print("Your default region selector is now " + found.name() + "."); } else { session.setRegionSelector(world, selector); session.dispatchCUISelection(player);
if (!session.isToolControlEnabled()) { return; RegionSelector selector = session.getRegionSelector(player.getWorld()); if (player.isHoldingPickAxe() && session.hasSuperPickAxe()) { final BlockTool superPickaxe = session.getSuperPickaxe(); if (superPickaxe != null && superPickaxe.canUse(player)) { event.setCancelled(superPickaxe.actPrimary(queryCapability(Capability.WORLD_EDITING), getConfiguration(), player, session, location)); Tool tool = session.getTool(player.getItemInHand(HandSide.MAIN_HAND).getType()); if (tool instanceof DoubleActionBlockTool) { if (tool.canUse(player)) { if (!session.isToolControlEnabled()) { return; RegionSelector selector = session.getRegionSelector(player.getWorld()); BlockVector3 blockPoint = vector.toBlockPoint(); if (selector.selectSecondary(blockPoint, ActorSelectorLimits.forActor(player))) { Tool tool = session.getTool(player.getItemInHand(HandSide.MAIN_HAND).getType()); if (tool instanceof BlockTool) { if (tool.canUse(player)) {
final World world = player.getWorld(); if (args.hasFlag('s')) { Region region = session.getSelection(world); if (session.getRegionSelector(world) instanceof ExtendingCuboidRegionSelector) { selector = new ExtendingCuboidRegionSelector(world); } else { session.setRegionSelector(world, selector); session.dispatchCUISelection(player);
@Override public boolean actPrimary(Platform server, LocalConfiguration config, Player player, LocalSession session, Location clicked) { try (EditSession editSession = session.createEditSession(player)) { try { boolean successful = false; for (int i = 0; i < 10; i++) { if (treeType.generate(editSession, clicked.toVector().add(0, 1, 0).toBlockPoint())) { successful = true; break; } } if (!successful) { player.printError("A tree can't go there."); } } catch (MaxChangedBlocksException e) { player.printError("Max. blocks changed reached."); } finally { session.remember(editSession); } } return true; }
EditSession undone; if (args.argsLength() < 2) { undone = session.undo(session.getBlockBag(player), player); } else { player.checkPermission("worldedit.history.undo.other"); break; undone = sess.undo(session.getBlockBag(player), player);
@Override public boolean actSecondary(Platform server, LocalConfiguration config, Player player, LocalSession session) { if (session.isToolControlEnabled() && player.hasPermission("worldedit.selection.pos")) { Location target = getTarget(player); if (target == null) return true; RegionSelector selector = session.getRegionSelector(player.getWorld()); BlockVector3 blockPoint = target.toVector().toBlockPoint(); if (selector.selectPrimary(blockPoint, ActorSelectorLimits.forActor(player))) { selector.explainPrimarySelection(player, session, blockPoint); } return true; } return false; }
BlockVector3 center = session.getPlacementPosition(player); editSession = session.createEditSession(player); List<? extends Entity> entities; if (radius >= 0) { session.remember(editSession); editSession.flushSession();
public void size(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException { if (args.hasFlag('c')) { ClipboardHolder holder = session.getClipboard(); Clipboard clipboard = holder.getClipboard(); Region region = clipboard.getRegion(); Region region = session.getSelection(player.getWorld()); BlockVector3 size = region.getMaximumPoint() .subtract(region.getMinimumPoint()) .add(1, 1, 1); player.print("Type: " + session.getRegionSelector(player.getWorld()) .getTypeName()); for (String line : session.getRegionSelector(player.getWorld()) .getInformationLines()) { player.print(line);
EditSession redone; if (args.argsLength() < 2) { redone = session.redo(session.getBlockBag(player), player); } else { player.checkPermission("worldedit.history.redo.other"); break; redone = sess.redo(session.getBlockBag(player), player);
@Switch('s') boolean selectPasted) throws WorldEditException { ClipboardHolder holder = session.getClipboard(); Clipboard clipboard = holder.getClipboard(); Region region = clipboard.getRegion(); BlockVector3 to = atOrigin ? clipboard.getOrigin() : session.getPlacementPosition(player); Operation operation = holder .createPaste(editSession) Vector3 max = realTo.add(holder.getTransform().apply(region.getMaximumPoint().subtract(region.getMinimumPoint()).toVector3())); RegionSelector selector = new CuboidRegionSelector(player.getWorld(), realTo.toBlockPoint(), max.toBlockPoint()); session.setRegionSelector(player.getWorld(), selector); selector.learnChanges(); selector.explainRegionAdjust(player, session);
for (EditSession editSession : scriptContext.getEditSessions()) { editSession.flushSession(); session.remember(editSession);
@Command( aliases = { "/limit" }, usage = "<limit>", desc = "Modify block change limit", min = 1, max = 1 ) @CommandPermissions("worldedit.limit") public void limit(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException { LocalConfiguration config = worldEdit.getConfiguration(); boolean mayDisable = player.hasPermission("worldedit.limit.unrestricted"); int limit = Math.max(-1, args.getInteger(0)); if (!mayDisable && config.maxChangeLimit > -1) { if (limit > config.maxChangeLimit) { player.printError("Your maximum allowable limit is " + config.maxChangeLimit + "."); return; } } session.setBlockChangeLimit(limit); if (limit != -1) { player.print("Block change limit set to " + limit + ". (Use //limit -1 to go back to the default.)"); } else { player.print("Block change limit set to " + limit + "."); } }