brush settings

This commit is contained in:
Jesse Boyd 2019-07-20 01:29:49 +10:00
parent 5242efb4cf
commit 85ebee7da7
No known key found for this signature in database
GPG Key ID: 59F1DE6293AF6E1F
14 changed files with 308 additions and 80 deletions

View File

@ -36,10 +36,11 @@ import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
public class FaweCache implements Trimable { public final class FaweCache implements Trimable {
public static int CHUNK_LAYERS = 16; public final static int BLOCKS_PER_LAYER = 4096;
public static int WORLD_HEIGHT = CHUNK_LAYERS << 4; public final static int CHUNK_LAYERS = 16;
public static int WORLD_MAX_Y = WORLD_HEIGHT - 1; public final static int WORLD_HEIGHT = CHUNK_LAYERS << 4;
public final static int WORLD_MAX_Y = WORLD_HEIGHT - 1;
public static final char[] EMPTY_CHAR_4096 = new char[4096]; public static final char[] EMPTY_CHAR_4096 = new char[4096];

View File

@ -1,13 +1,13 @@
package com.boydti.fawe.beta; package com.boydti.fawe.beta;
import com.boydti.fawe.jnbt.anvil.generator.GenBase;
import com.boydti.fawe.jnbt.anvil.generator.Resource;
import com.sk89q.jnbt.CompoundTag; import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.entity.BaseEntity; import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.entity.Entity; import com.sk89q.worldedit.entity.Entity;
import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard; import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard;
import com.sk89q.worldedit.function.generator.GenBase;
import com.sk89q.worldedit.function.generator.Resource;
import com.sk89q.worldedit.function.mask.Mask; import com.sk89q.worldedit.function.mask.Mask;
import com.sk89q.worldedit.function.operation.Operation; import com.sk89q.worldedit.function.operation.Operation;
import com.sk89q.worldedit.function.pattern.Pattern; import com.sk89q.worldedit.function.pattern.Pattern;
@ -650,11 +650,6 @@ public class DelegateFilterBlock extends FilterBlock {
return parent.getBlock(position); return parent.getBlock(position);
} }
@Override
public BlockType getBlockType(BlockVector3 position) {
return parent.getBlockType(position);
}
@Override @Override
public BaseBlock getFullBlock(BlockVector3 position) { public BaseBlock getFullBlock(BlockVector3 position) {
return parent.getFullBlock(position); return parent.getFullBlock(position);

View File

@ -0,0 +1,102 @@
package com.boydti.fawe.beta.implementation.blocks;
import com.boydti.fawe.FaweCache;
import com.boydti.fawe.beta.IChunkSet;
import com.boydti.fawe.object.collection.BitArray4096;
import com.boydti.fawe.object.collection.BlockSet;
import com.boydti.fawe.object.collection.MemBlockSet;
import com.sk89q.jnbt.CompoundTag;
import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockStateHolder;
import java.util.Arrays;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
public class BitSetBlocks implements IChunkSet {
private final MemBlockSet.RowZ row;
private final BlockState blockState;
public BitSetBlocks(BlockState blockState) {
this.row = new MemBlockSet.RowZ();
this.blockState = blockState;
}
@Override
public boolean setBiome(int x, int y, int z, BiomeType biome) {
return false;
}
@Override
public boolean setBlock(int x, int y, int z, BlockStateHolder holder) {
row.set(null, x, y, z);
return true;
}
@Override
public boolean isEmpty() {
return row.isEmpty();
}
@Override
public void setTile(int x, int y, int z, CompoundTag tile) {}
@Override
public void setEntity(CompoundTag tag) {}
@Override
public void removeEntity(UUID uuid) {}
@Override
public BlockState getBlock(int x, int y, int z) {
if (row.get(null, x, y, z)) {
return blockState;
}
return null;
}
@Override
public char[] getArray(int layer) {
}
@Override
public BiomeType[] getBiomes() {
return null;
}
@Override
public Map<Short, CompoundTag> getTiles() {
return null;
}
@Override
public Set<CompoundTag> getEntities() {
return null;
}
@Override
public Set<UUID> getEntityRemoves() {
return null;
}
@Override
public boolean hasSection(int layer) {
return false;
}
@Override
public IChunkSet reset() {
row.reset();
return this;
}
@Override
public boolean trim(boolean aggressive) {
return false;
}
}

View File

@ -57,13 +57,13 @@ public class CharBlocks implements IBlocks {
public char get(final int x, final int y, final int z) { public char get(final int x, final int y, final int z) {
final int layer = y >> 4; final int layer = y >> 4;
final int index = ((y & 15) << 8) | (z << 4) | (x & 15); final int index = ((y & 15) << 8) | (z << 4) | (x);
return sections[layer].get(this, layer, index); return sections[layer].get(this, layer, index);
} }
public void set(final int x, final int y, final int z, final char value) { public void set(final int x, final int y, final int z, final char value) {
final int layer = y >> 4; final int layer = y >> 4;
final int index = ((y & 15) << 8) | (z << 4) | (x & 15); final int index = ((y & 15) << 8) | (z << 4) | (x);
set(layer, index, value); set(layer, index, value);
} }

View File

@ -4,7 +4,6 @@ import com.boydti.fawe.Fawe;
import com.boydti.fawe.object.brush.scroll.ScrollAction; import com.boydti.fawe.object.brush.scroll.ScrollAction;
import com.boydti.fawe.object.extent.ResettableExtent; import com.boydti.fawe.object.extent.ResettableExtent;
import com.sk89q.minecraft.util.commands.CommandException; import com.sk89q.minecraft.util.commands.CommandException;
import com.sk89q.minecraft.util.commands.CommandLocals;
import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.command.tool.BrushTool; import com.sk89q.worldedit.command.tool.BrushTool;
@ -20,9 +19,7 @@ import com.sk89q.worldedit.internal.expression.Expression;
import com.sk89q.worldedit.internal.expression.ExpressionException; import com.sk89q.worldedit.internal.expression.ExpressionException;
import com.sk89q.worldedit.internal.expression.runtime.Constant; import com.sk89q.worldedit.internal.expression.runtime.Constant;
import com.sk89q.worldedit.internal.expression.runtime.EvaluationException; import com.sk89q.worldedit.internal.expression.runtime.EvaluationException;
import com.sk89q.worldedit.util.command.CommandCallable;
import com.sk89q.worldedit.util.command.Dispatcher;
import com.sk89q.worldedit.util.command.ProcessedCallable;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet; import java.util.HashSet;
@ -62,23 +59,15 @@ public class BrushSettings {
} }
public static BrushSettings get(BrushTool tool, Player player, LocalSession session, Map<String, Object> settings) throws CommandException, InputParseException { public static BrushSettings get(BrushTool tool, Player player, LocalSession session, Map<String, Object> settings) throws CommandException, InputParseException {
Dispatcher dispatcher = PlatformCommandManager.getInstance().getCommandManager(); PlatformCommandManager manager = PlatformCommandManager.getInstance();
Dispatcher brushDispatcher = (Dispatcher) (dispatcher.get("brush").getCallable());
if (brushDispatcher == null) {
return null;
}
String constructor = (String) settings.get(SettingType.BRUSH.name()); String constructor = (String) settings.get(SettingType.BRUSH.name());
if (constructor == null) { if (constructor == null) {
return new BrushSettings(); return new BrushSettings();
} }
String[] split = constructor.split(" "); String[] split = constructor.split(" ");
CommandCallable sphereCommand = ((ProcessedCallable) brushDispatcher.get(split[0]).getCallable()).getParent();
CommandLocals locals = new CommandLocals();
locals.put(Actor.class, player);
String args = constructor.replaceAll(split[0] + "[ ]?", ""); String args = constructor.replaceAll(split[0] + "[ ]?", "");
String[] parentArgs = new String[]{"brush", split[0]}; BrushSettings bs = (BrushSettings) manager.parse(Brush.class, args, player);
BrushSettings bs = (BrushSettings) sphereCommand.call(args, locals, parentArgs);
bs.constructor.put(SettingType.BRUSH, constructor); bs.constructor.put(SettingType.BRUSH, constructor);
if (settings.containsKey(SettingType.PERMISSIONS.name())) { if (settings.containsKey(SettingType.PERMISSIONS.name())) {
bs.permissions.addAll((Collection<? extends String>) settings.get(SettingType.PERMISSIONS.name())); bs.permissions.addAll((Collection<? extends String>) settings.get(SettingType.PERMISSIONS.name()));

View File

@ -21,14 +21,13 @@ import java.util.Set;
* - Grouping / iteration is by chunk section, and the y>z>x order * - Grouping / iteration is by chunk section, and the y>z>x order
*/ */
public final class MemBlockSet extends BlockSet { public final class MemBlockSet extends BlockSet {
private final static int BITS_PER_LAYER = 4096; public final static int BITS_PER_WORD = 6;
private final static int BITS_PER_WORD = 6; public final static int WORDS = FaweCache.BLOCKS_PER_LAYER >> BITS_PER_WORD;
private final static int WORDS = BITS_PER_LAYER >> BITS_PER_WORD; public final static IRow NULL_ROW_X = new NullRowX();
private final static IRow NULL_ROW_X = new NullRowX(); public final static IRow NULL_ROW_Z = new NullRowZ();
private final static IRow NULL_ROW_Z = new NullRowZ(); public final static IRow NULL_ROW_Y = new NullRowY();
private final static IRow NULL_ROW_Y = new NullRowY(); public final IRow[] rows;
private final IRow[] rows; public final MutableBlockVector3 mutable;
private final MutableBlockVector3 mutable;
public MemBlockSet() { public MemBlockSet() {
this(16, 0, 0); this(16, 0, 0);
@ -746,7 +745,7 @@ public final class MemBlockSet extends BlockSet {
void apply(int x, int y, int z); void apply(int x, int y, int z);
} }
private interface IRow { public interface IRow {
default boolean get(IRow[] rows, int x, int y, int z) { return false; } default boolean get(IRow[] rows, int x, int y, int z) { return false; }
void set(IRow[] rows, int x, int y, int z); void set(IRow[] rows, int x, int y, int z);
default boolean add(IRow[] rows, int x, int y, int z) { default boolean add(IRow[] rows, int x, int y, int z) {
@ -760,7 +759,7 @@ public final class MemBlockSet extends BlockSet {
default void clear(IRow[] rows, int x, int y, int z) { return; } default void clear(IRow[] rows, int x, int y, int z) { return; }
} }
private static final class NullRowX implements IRow { public static final class NullRowX implements IRow {
@Override @Override
public void set(IRow[] parent, int x, int y, int z) { public void set(IRow[] parent, int x, int y, int z) {
IRow row = new RowX(parent.length); IRow row = new RowX(parent.length);
@ -769,7 +768,7 @@ public final class MemBlockSet extends BlockSet {
} }
} }
private static final class NullRowZ implements IRow { public static final class NullRowZ implements IRow {
@Override @Override
public void set(IRow[] parent, int x, int y, int z) { public void set(IRow[] parent, int x, int y, int z) {
IRow row = new RowZ(); IRow row = new RowZ();
@ -778,7 +777,7 @@ public final class MemBlockSet extends BlockSet {
} }
} }
private static final class NullRowY implements IRow { public static final class NullRowY implements IRow {
@Override @Override
public void set(IRow[] parent, int x, int y, int z) { public void set(IRow[] parent, int x, int y, int z) {
IRow row = new RowY(); IRow row = new RowY();
@ -787,7 +786,7 @@ public final class MemBlockSet extends BlockSet {
} }
} }
private static final class RowX implements IRow { public static final class RowX implements IRow {
private final IRow[] rows; private final IRow[] rows;
public RowX(int size) { public RowX(int size) {
@ -821,12 +820,12 @@ public final class MemBlockSet extends BlockSet {
} }
} }
private static final class RowZ implements IRow { public static final class RowZ implements IRow {
private final IRow[] rows; private final IRow[] rows;
public RowZ() { public RowZ() {
this.rows = new IRow[FaweCache.CHUNK_LAYERS]; this.rows = new IRow[FaweCache.CHUNK_LAYERS];
for (int i = 0; i < FaweCache.CHUNK_LAYERS; i++) rows[i] = NULL_ROW_Y; reset();
} }
@Override @Override
@ -853,9 +852,22 @@ public final class MemBlockSet extends BlockSet {
public boolean remove(IRow[] parent, int x, int y, int z) { public boolean remove(IRow[] parent, int x, int y, int z) {
return this.rows[y >> 4].remove(this.rows, x, y, z); return this.rows[y >> 4].remove(this.rows, x, y, z);
} }
public boolean isEmpty() {
for (IRow row :rows) {
if (row instanceof RowY) {
return false;
}
}
return true;
}
public void reset() {
for (int i = 0; i < FaweCache.CHUNK_LAYERS; i++) rows[i] = NULL_ROW_Y;
}
} }
private static final class RowY implements IRow { public static final class RowY implements IRow {
private final long[] bits; private final long[] bits;
public RowY() { public RowY() {

View File

@ -1,18 +1,12 @@
package com.boydti.fawe.object.pattern; package com.boydti.fawe.object.pattern;
import com.boydti.fawe.beta.DelegateFilterBlock;
import com.boydti.fawe.beta.FilterBlock;
import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.function.pattern.AbstractPattern; import com.sk89q.worldedit.function.pattern.AbstractPattern;
import com.sk89q.worldedit.function.pattern.Pattern; import com.sk89q.worldedit.function.pattern.Pattern;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.MutableBlockVector3; import com.sk89q.worldedit.math.MutableBlockVector3;
import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.world.block.BaseBlock;
import java.io.IOException;
public class NoYPattern extends AbstractPattern { public class NoYPattern extends AbstractPattern {

View File

@ -1,27 +1,52 @@
package com.sk89q.worldedit.command; package com.sk89q.worldedit.command;
import com.boydti.fawe.object.mask.*; import com.boydti.fawe.object.mask.AdjacentAnyMask;
import org.enginehub.piston.annotation.Command; import com.boydti.fawe.object.mask.AdjacentMask;
import com.boydti.fawe.object.mask.AngleMask;
import com.boydti.fawe.object.mask.BiomeMask;
import com.boydti.fawe.object.mask.BlockLightMask;
import com.boydti.fawe.object.mask.BrightnessMask;
import com.boydti.fawe.object.mask.DataMask;
import com.boydti.fawe.object.mask.ExtremaMask;
import com.boydti.fawe.object.mask.IdDataMask;
import com.boydti.fawe.object.mask.IdMask;
import com.boydti.fawe.object.mask.LightMask;
import com.boydti.fawe.object.mask.OpacityMask;
import com.boydti.fawe.object.mask.ROCAngleMask;
import com.boydti.fawe.object.mask.RadiusMask;
import com.boydti.fawe.object.mask.RandomMask;
import com.boydti.fawe.object.mask.SimplexMask;
import com.boydti.fawe.object.mask.SkyLightMask;
import com.boydti.fawe.object.mask.SurfaceMask;
import com.boydti.fawe.object.mask.WallMask;
import com.boydti.fawe.object.mask.XAxisMask;
import com.boydti.fawe.object.mask.YAxisMask;
import com.boydti.fawe.object.mask.ZAxisMask;
import com.sk89q.worldedit.IncompleteRegionException; import com.sk89q.worldedit.IncompleteRegionException;
import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.LocalSession;
import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEdit;
import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.entity.Player;
import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.Extent;
import com.sk89q.worldedit.function.mask.*; import com.sk89q.worldedit.function.mask.BlockMaskBuilder;
import com.sk89q.worldedit.function.mask.ExistingBlockMask;
import com.sk89q.worldedit.function.mask.ExpressionMask;
import com.sk89q.worldedit.function.mask.Mask;
import com.sk89q.worldedit.function.mask.MaskIntersection;
import com.sk89q.worldedit.function.mask.MaskUnion;
import com.sk89q.worldedit.function.mask.Masks;
import com.sk89q.worldedit.function.mask.OffsetMask;
import com.sk89q.worldedit.function.mask.RegionMask;
import com.sk89q.worldedit.function.mask.SolidBlockMask;
import com.sk89q.worldedit.internal.expression.Expression; import com.sk89q.worldedit.internal.expression.Expression;
import com.sk89q.worldedit.internal.expression.ExpressionException; import com.sk89q.worldedit.internal.expression.ExpressionException;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.Vector3; import com.sk89q.worldedit.math.Vector3;
import com.sk89q.worldedit.regions.shape.WorldEditExpressionEnvironment; import com.sk89q.worldedit.regions.shape.WorldEditExpressionEnvironment;
import com.sk89q.worldedit.session.request.RequestSelection; import com.sk89q.worldedit.session.request.RequestSelection;
import org.enginehub.piston.annotation.param.Switch;
import com.sk89q.worldedit.util.command.parametric.Optional;
import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BlockType; import org.enginehub.piston.annotation.Command;
import org.enginehub.piston.annotation.param.Arg;
import java.util.function.Predicate; import org.enginehub.piston.annotation.param.Switch;
@Command(aliases = {"masks"}, @Command(aliases = {"masks"},
desc = "Help for the various masks. [More Info](https://git.io/v9r4K)", desc = "Help for the various masks. [More Info](https://git.io/v9r4K)",
@ -77,7 +102,7 @@ public class MaskCommands extends MethodCommands {
@Command( @Command(
name = "#skylight", name = "#skylight",
desc = "Restrict to specific sky light levels" desc = "Restrict to specific sky light levels"
) )
public Mask skylight(Extent extent, double min, double max) { public Mask skylight(Extent extent, double min, double max) {
return new SkyLightMask(extent, (int) min, (int) max); return new SkyLightMask(extent, (int) min, (int) max);
} }

View File

@ -12,7 +12,7 @@ import static com.google.common.base.Preconditions.checkNotNull;
public final class CommandQueuedConditionGenerator implements CommandConditionGenerator { public final class CommandQueuedConditionGenerator implements CommandConditionGenerator {
public interface Registration { public interface Registration {
Registration commandQueuedConditionGenerator(CommandPermissionsConditionGenerator generator); Registration commandQueuedConditionGenerator(CommandQueuedConditionGenerator generator);
} }
@Override @Override

View File

@ -0,0 +1,83 @@
package com.sk89q.worldedit.command.util;
import com.google.common.collect.ImmutableSet;
import org.enginehub.piston.Command;
import org.enginehub.piston.CommandManager;
import org.enginehub.piston.CommandParseResult;
import org.enginehub.piston.converter.ArgumentConverter;
import org.enginehub.piston.inject.InjectedValueAccess;
import org.enginehub.piston.inject.Key;
import org.enginehub.piston.suggestion.Suggestion;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
import java.util.stream.Stream;
public class DelegateCommandManager implements CommandManager {
@Override
public Command.Builder newCommand(String s) {
return parent.newCommand(s);
}
@Override
public void register(Command command) {
parent.register(command);
}
@Override
public void register(String name, Consumer<Command.Builder> registrationProcess) {
parent.register(name, registrationProcess);
}
@Override
public void registerManager(CommandManager manager) {
parent.registerManager(manager);
}
@Override
public Stream<Command> getAllCommands() {
return parent.getAllCommands();
}
@Override
public boolean containsCommand(String name) {
return parent.containsCommand(name);
}
@Override
public Optional<Command> getCommand(String s) {
return parent.getCommand(s);
}
@Override
public ImmutableSet<Suggestion> getSuggestions(InjectedValueAccess injectedValueAccess, List<String> list) {
return parent.getSuggestions(injectedValueAccess, list);
}
@Override
public CommandParseResult parse(InjectedValueAccess injectedValueAccess, List<String> list) {
return parent.parse(injectedValueAccess, list);
}
@Override
public int execute(InjectedValueAccess context, List<String> args) {
return parent.execute(context, args);
}
@Override
public <T> void registerConverter(Key<T> key, ArgumentConverter<T> argumentConverter) {
parent.registerConverter(key, argumentConverter);
}
@Override
public <T> Optional<ArgumentConverter<T>> getConverter(Key<T> key) {
return parent.getConverter(key);
}
private final CommandManager parent;
public DelegateCommandManager(CommandManager parent) {
this.parent = parent;
}
}

View File

@ -84,6 +84,7 @@ import com.sk89q.worldedit.command.argument.RegionFactoryConverter;
import com.sk89q.worldedit.command.argument.RegistryConverter; import com.sk89q.worldedit.command.argument.RegistryConverter;
import com.sk89q.worldedit.command.argument.VectorConverter; import com.sk89q.worldedit.command.argument.VectorConverter;
import com.sk89q.worldedit.command.argument.ZonedDateTimeConverter; import com.sk89q.worldedit.command.argument.ZonedDateTimeConverter;
import com.sk89q.worldedit.command.tool.brush.Brush;
import com.sk89q.worldedit.command.util.CommandQueued; import com.sk89q.worldedit.command.util.CommandQueued;
import com.sk89q.worldedit.command.util.CommandQueuedCondition; import com.sk89q.worldedit.command.util.CommandQueuedCondition;
import com.sk89q.worldedit.command.util.PermissionCondition; import com.sk89q.worldedit.command.util.PermissionCondition;
@ -114,6 +115,8 @@ import com.sk89q.worldedit.world.World;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet; import java.util.LinkedHashSet;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@ -128,7 +131,9 @@ import javax.annotation.Nullable;
import org.enginehub.piston.Command; import org.enginehub.piston.Command;
import org.enginehub.piston.CommandManager; import org.enginehub.piston.CommandManager;
import org.enginehub.piston.TextConfig; import org.enginehub.piston.TextConfig;
import org.enginehub.piston.converter.ArgumentConverter;
import org.enginehub.piston.converter.ArgumentConverters; import org.enginehub.piston.converter.ArgumentConverters;
import org.enginehub.piston.converter.ConversionResult;
import org.enginehub.piston.exception.CommandException; import org.enginehub.piston.exception.CommandException;
import org.enginehub.piston.exception.CommandExecutionException; import org.enginehub.piston.exception.CommandExecutionException;
import org.enginehub.piston.exception.ConditionFailedException; import org.enginehub.piston.exception.ConditionFailedException;
@ -175,6 +180,11 @@ public final class PlatformCommandManager {
private final CommandRegistrationHandler registration; private final CommandRegistrationHandler registration;
private static PlatformCommandManager INSTANCE; private static PlatformCommandManager INSTANCE;
/*
Command types
*/
/** /**
* Create a new instance. * Create a new instance.
* *
@ -523,6 +533,18 @@ public final class PlatformCommandManager {
return new CommandArgParser(CommandArgParser.spaceSplit(input.substring(1))).parseArgs(); return new CommandArgParser(CommandArgParser.spaceSplit(input.substring(1))).parseArgs();
} }
public <T> Collection<T> parse(Class<T> clazz, String arguments, @Nullable Actor actor) {
List<T> def = Collections.emptyList();
Optional<ArgumentConverter<T>> converterOptional = commandManager.getConverter(Key.of(clazz));
if (converterOptional.isPresent()) {
ArgumentConverter<T> converter = converterOptional.get();
MemoizingValueAccess injectedValues = initializeInjectedValues(() -> arguments, actor);
ConversionResult<T> result = converter.convert(arguments, injectedValues);
return result.orElse(def);
}
return def;
}
@Subscribe @Subscribe
public void handleCommand(CommandEvent event) { public void handleCommand(CommandEvent event) {
Request.reset(); Request.reset();
@ -571,8 +593,6 @@ public final class PlatformCommandManager {
Request.request().setWorld(((World) extent)); Request.request().setWorld(((World) extent));
} }
} }
LocalConfiguration config = worldEdit.getConfiguration();
MemoizingValueAccess context = initializeInjectedValues(event::getArguments, actor); MemoizingValueAccess context = initializeInjectedValues(event::getArguments, actor);
final FawePlayer fp = FawePlayer.wrap(actor); final FawePlayer fp = FawePlayer.wrap(actor);

View File

@ -19,37 +19,26 @@
package com.sk89q.worldedit.extent; package com.sk89q.worldedit.extent;
import static com.google.common.base.Preconditions.checkNotNull;
import com.boydti.fawe.Fawe; import com.boydti.fawe.Fawe;
import com.boydti.fawe.jnbt.anvil.generator.GenBase;
import com.boydti.fawe.jnbt.anvil.generator.Resource;
import com.boydti.fawe.object.HistoryExtent; import com.boydti.fawe.object.HistoryExtent;
import com.boydti.fawe.object.changeset.FaweChangeSet; import com.boydti.fawe.object.changeset.FaweChangeSet;
import com.boydti.fawe.object.exception.FaweException; import com.boydti.fawe.object.exception.FaweException;
import com.boydti.fawe.object.extent.LightingExtent; import com.boydti.fawe.object.extent.LightingExtent;
import com.boydti.fawe.util.ExtentTraverser; import com.boydti.fawe.util.ExtentTraverser;
import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.WorldEditException;
import com.sk89q.worldedit.entity.BaseEntity;
import com.sk89q.worldedit.entity.Entity;
import com.sk89q.worldedit.extent.buffer.ForgetfulExtentBuffer; import com.sk89q.worldedit.extent.buffer.ForgetfulExtentBuffer;
import com.sk89q.worldedit.function.mask.Mask;
import com.sk89q.worldedit.function.operation.Operation; import com.sk89q.worldedit.function.operation.Operation;
import com.sk89q.worldedit.function.operation.OperationQueue; import com.sk89q.worldedit.function.operation.OperationQueue;
import com.sk89q.worldedit.function.pattern.Pattern;
import com.sk89q.worldedit.math.BlockVector2;
import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.BlockVector3;
import com.sk89q.worldedit.math.MutableBlockVector3;
import com.sk89q.worldedit.regions.Region;
import com.sk89q.worldedit.util.Location;
import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.biome.BiomeType;
import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BaseBlock;
import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockState;
import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.world.block.BlockStateHolder;
import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import static com.google.common.base.Preconditions.checkNotNull;
/** /**
* A base class for {@link Extent}s that merely passes extents onto another. * A base class for {@link Extent}s that merely passes extents onto another.
*/ */
@ -206,6 +195,7 @@ public class AbstractDelegateExtent implements Extent, LightingExtent {
return 0; return 0;
} }
@Override
public int getBrightness(int x, int y, int z) { public int getBrightness(int x, int y, int z) {
if (extent instanceof LightingExtent) { if (extent instanceof LightingExtent) {
return ((LightingExtent) extent).getBrightness(x, y, z); return ((LightingExtent) extent).getBrightness(x, y, z);
@ -213,6 +203,15 @@ public class AbstractDelegateExtent implements Extent, LightingExtent {
return getBlock(x, y, z).getBlockType().getMaterial().getLightValue(); return getBlock(x, y, z).getBlockType().getMaterial().getLightValue();
} }
@Override
public void relightChunk(int chunkX, int chunkZ) {
if (extent instanceof LightingExtent) {
((LightingExtent) extent).relightChunk(chunkX, chunkZ);
} else {
throw new UnsupportedOperationException("Cannot relight");
}
}
/* /*
Generic Generic
*/ */

View File

@ -21,6 +21,7 @@ package com.sk89q.worldedit.internal.command;
import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList;
import com.sk89q.worldedit.command.util.CommandPermissionsConditionGenerator; import com.sk89q.worldedit.command.util.CommandPermissionsConditionGenerator;
import com.sk89q.worldedit.command.util.CommandQueuedConditionGenerator;
import org.enginehub.piston.CommandManager; import org.enginehub.piston.CommandManager;
import org.enginehub.piston.gen.CommandCallListener; import org.enginehub.piston.gen.CommandCallListener;
import org.enginehub.piston.gen.CommandRegistration; import org.enginehub.piston.gen.CommandRegistration;
@ -30,6 +31,8 @@ import java.util.List;
public class CommandRegistrationHandler { public class CommandRegistrationHandler {
private static final CommandPermissionsConditionGenerator PERM_GEN = new CommandPermissionsConditionGenerator(); private static final CommandPermissionsConditionGenerator PERM_GEN = new CommandPermissionsConditionGenerator();
private static final CommandQueuedConditionGenerator QUEUED_GEN = new CommandQueuedConditionGenerator();
private final List<CommandCallListener> callListeners; private final List<CommandCallListener> callListeners;
@ -43,7 +46,12 @@ public class CommandRegistrationHandler {
.listeners(callListeners); .listeners(callListeners);
if (registration instanceof CommandPermissionsConditionGenerator.Registration) { if (registration instanceof CommandPermissionsConditionGenerator.Registration) {
((CommandPermissionsConditionGenerator.Registration) registration).commandPermissionsConditionGenerator( ((CommandPermissionsConditionGenerator.Registration) registration).commandPermissionsConditionGenerator(
PERM_GEN PERM_GEN
);
}
if (registration instanceof CommandQueuedConditionGenerator.Registration) {
((CommandQueuedConditionGenerator.Registration) registration).commandQueuedConditionGenerator(
QUEUED_GEN
); );
} }
registration.build(); registration.build();

View File

@ -91,7 +91,7 @@ configure(subprojects + project("core:ap")) {
def textExtrasVersion = "3.0.2" def textExtrasVersion = "3.0.2"
project("core") { project("core") {
def textVersion = "3.0.1" def textVersion = "3.0.1"
def pistonVersion = '0.4.2' def pistonVersion = '0.4.3-SNAPSHOT'
dependencies { dependencies {
shade "net.kyori:text-api:$textVersion" shade "net.kyori:text-api:$textVersion"
@ -103,7 +103,7 @@ project("core") {
} }
shade 'com.thoughtworks.paranamer:paranamer:2.6' shade 'com.thoughtworks.paranamer:paranamer:2.6'
shade 'com.sk89q.lib:jlibnoise:1.0.0' shade 'com.sk89q.lib:jlibnoise:1.0.0'
shade "org.enginehub.piston:core:$pistonVersion" shade "FAWE-Piston:lastSuccessfulBuild:core/build/libs/core-$pistonVersion@jar"
shade "org.enginehub.piston.core-ap:runtime:$pistonVersion" shade "org.enginehub.piston.core-ap:runtime:$pistonVersion"
shade "org.enginehub.piston:default-impl:$pistonVersion" shade "org.enginehub.piston:default-impl:$pistonVersion"
} }