/** * 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; }
/** * Get an item from an item name or an item ID number. * * @param input input to parse * @param allAllowed true to ignore blacklists * @return a block * @throws UnknownItemException * @throws DisallowedItemException */ public BaseBlock getBlock(String input, boolean allAllowed) throws WorldEditException { ParserContext context = new ParserContext(); context.setActor(player); context.setWorld(player.getWorld()); context.setSession(session); context.setRestricted(!allAllowed); context.setPreferringWildcard(false); return controller.getBlockFactory().parseFromListInput(input, context).stream().findFirst().orElse(null); }
@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."); }
/** * Gets a selection from a {@link ArgumentStack}. * * @param context the context * @param selection the annotation * @return a selection * @throws IncompleteRegionException if no selection is available * @throws ParameterException on other error */ @BindingMatch(classifier = Selection.class, type = Region.class, behavior = BindingBehavior.PROVIDES) public Object getSelection(ArgumentStack context, Selection selection) throws IncompleteRegionException, ParameterException { Player sender = getPlayer(context); LocalSession session = worldEdit.getSessionManager().get(sender); return session.getSelection(sender.getWorld()); }
@Command( aliases = { "listchunks" }, usage = "", desc = "List chunks that your selection includes", min = 0, max = 0 ) @CommandPermissions("worldedit.listchunks") public void listChunks(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException { Set<BlockVector2> chunks = session.getSelection(player.getWorld()).getChunks(); for (BlockVector2 chunk : chunks) { player.print(LegacyChunkStore.getFilename(chunk)); } }
/** * Get a list of blocks as a set. This returns a Pattern. * * @param list the input * @return pattern * @throws UnknownItemException * @throws DisallowedItemException */ public Pattern getBlockPattern(String list) throws WorldEditException { ParserContext context = new ParserContext(); context.setActor(player); context.setWorld(player.getWorld()); context.setSession(session); return controller.getPatternFactory().parseFromInput(list, context); }
@Override public boolean actSecondary(Platform server, LocalConfiguration config, Player player, LocalSession session, com.sk89q.worldedit.util.Location clicked) { BlockState targetBlock = player.getWorld().getBlock(clicked.toVector().toBlockPoint()); if (targetBlock != null) { pattern = new BlockPattern(targetBlock); player.print("Replacer tool switched to: " + targetBlock.getBlockType().getName()); } return true; }
/** * Constructor requiring a player, max distance and a checking distance * * @param player Player to work with * @param maxDistance how far it checks for blocks * @param checkDistance how often to check for blocks, the smaller the more precise */ public TargetBlock(Player player, int maxDistance, double checkDistance) { this.world = player.getWorld(); this.setValues(player.getLocation().toVector(), player.getLocation().getYaw(), player.getLocation().getPitch(), maxDistance, 1.65, checkDistance); }
/** * Constructor requiring a player, uses default values * * @param player player to work with */ public TargetBlock(Player player) { this.world = player.getWorld(); this.setValues(player.getLocation().toVector(), player.getLocation().getYaw(), player.getLocation().getPitch(), 300, 1.65, 0.2); }
/** * Get a list of blocks as a set. * * @param list a list * @param allBlocksAllowed true if all blocks are allowed * @return set * @throws UnknownItemException * @throws DisallowedItemException */ public Set<BaseBlock> getBlocks(String list, boolean allBlocksAllowed) throws WorldEditException { ParserContext context = new ParserContext(); context.setActor(player); context.setWorld(player.getWorld()); context.setSession(session); context.setRestricted(!allBlocksAllowed); return controller.getBlockFactory().parseFromListInput(list, context); }
@Command( aliases = { "/removebelow", "removebelow" }, usage = "[size] [height]", desc = "Remove blocks below you.", min = 0, max = 2 ) @CommandPermissions("worldedit.removebelow") @Logging(PLACEMENT) public void removeBelow(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException { int size = args.argsLength() > 0 ? Math.max(1, args.getInteger(0)) : 1; we.checkMaxRadius(size); World world = player.getWorld(); int height = args.argsLength() > 1 ? Math.min((world.getMaxY() + 1), args.getInteger(1) + 2) : (world.getMaxY() + 1); int affected = editSession.removeBelow(session.getPlacementPosition(player), size, height); player.print(affected + " block(s) have been removed."); }
@Command( aliases = { "/removeabove", "removeabove" }, usage = "[size] [height]", desc = "Remove blocks above your head.", min = 0, max = 2 ) @CommandPermissions("worldedit.removeabove") @Logging(PLACEMENT) public void removeAbove(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException { int size = args.argsLength() > 0 ? Math.max(1, args.getInteger(0)) : 1; we.checkMaxRadius(size); World world = player.getWorld(); int height = args.argsLength() > 1 ? Math.min((world.getMaxY() + 1), args.getInteger(1) + 2) : (world.getMaxY() + 1); int affected = editSession.removeAbove( session.getPlacementPosition(player), size, height); player.print(affected + " block(s) have been removed."); }
@Command( aliases = { "/hpos2" }, usage = "", desc = "Set position 2 to targeted block", min = 0, max = 0 ) @CommandPermissions("worldedit.selection.hpos") public void hpos2(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException { Location pos = player.getBlockTrace(300); if (pos != null) { if (!session.getRegionSelector(player.getWorld()).selectSecondary(pos.toVector().toBlockPoint(), ActorSelectorLimits.forActor(player))) { player.printError("Position already set."); return; } session.getRegionSelector(player.getWorld()) .explainSecondarySelection(player, session, pos.toVector().toBlockPoint()); } else { player.printError("No block in sight!"); } }
@Command( aliases = { "/count" }, usage = "<block>", desc = "Counts the number of a certain type of block", min = 1, max = 1 ) @CommandPermissions("worldedit.analysis.count") public void count(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException { ParserContext context = new ParserContext(); context.setActor(player); context.setExtent(player.getExtent()); context.setWorld(player.getWorld()); context.setSession(session); context.setRestricted(false); Set<BaseBlock> searchBlocks = we.getBlockFactory().parseFromListInput(args.getString(0), context); int count = editSession.countBlocks(session.getSelection(player.getWorld()), searchBlocks); player.print("Counted: " + count); }
@Command( aliases = { "/hpos1" }, usage = "", desc = "Set position 1 to targeted block", min = 0, max = 0 ) @CommandPermissions("worldedit.selection.hpos") public void hpos1(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException { Location pos = player.getBlockTrace(300); if (pos != null) { 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()); } else { player.printError("No block in sight!"); } }
/** * Construct a new edit session. * * @param player the player * @return an edit session */ public EditSession createEditSession(Player player) { checkNotNull(player); BlockBag blockBag = getBlockBag(player); // Create an edit session EditSession editSession = WorldEdit.getInstance().getEditSessionFactory() .getEditSession(player.isPlayer() ? player.getWorld() : null, getBlockChangeLimit(), blockBag, player); editSession.setFastMode(fastMode); editSession.setReorderMode(reorderMode); Request.request().setEditSession(editSession); editSession.setMask(mask); return editSession; }
@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; }
@Override public boolean actPrimary(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.selectSecondary(blockPoint, ActorSelectorLimits.forActor(player))) { selector.explainSecondarySelection(player, session, blockPoint); } return true; } return false; }
/** * Gets the session for the player. * * @param player a player * @return a session */ public EditSession createEditSession(Player player) { com.sk89q.worldedit.entity.Player wePlayer = wrapPlayer(player); LocalSession session = WorldEdit.getInstance().getSessionManager().get(wePlayer); BlockBag blockBag = session.getBlockBag(wePlayer); EditSession editSession = WorldEdit.getInstance().getEditSessionFactory() .getEditSession(wePlayer.getWorld(), session.getBlockChangeLimit(), blockBag, wePlayer); editSession.enableStandardMode(); return editSession; }
@Command( aliases = { "/removenear", "removenear" }, usage = "<block> [size]", desc = "Remove blocks near you.", min = 1, max = 2 ) @CommandPermissions("worldedit.removenear") @Logging(PLACEMENT) public void removeNear(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException { ParserContext context = new ParserContext(); context.setActor(player); context.setWorld(player.getWorld()); context.setSession(session); context.setRestricted(false); context.setPreferringWildcard(false); BaseBlock block = we.getBlockFactory().parseFromInput(args.getString(0), context); int size = Math.max(1, args.getInteger(1, 50)); we.checkMaxRadius(size); int affected = editSession.removeNear(session.getPlacementPosition(player), block.getBlockType(), size); player.print(affected + " block(s) have been removed."); }