Mask location for brushes

This commit is contained in:
Jesse Boyd 2016-10-27 06:23:26 +11:00
parent 102468c2fd
commit 9d7a5e4344
No known key found for this signature in database
GPG Key ID: 59F1DE6293AF6E1F
4 changed files with 12 additions and 10 deletions

View File

@ -15,6 +15,7 @@ import com.sk89q.worldedit.event.platform.CommandEvent;
import com.sk89q.worldedit.extension.platform.CommandManager; import com.sk89q.worldedit.extension.platform.CommandManager;
import com.sk89q.worldedit.function.pattern.Pattern; import com.sk89q.worldedit.function.pattern.Pattern;
import com.sk89q.worldedit.regions.selector.CuboidRegionSelector; import com.sk89q.worldedit.regions.selector.CuboidRegionSelector;
import com.sk89q.worldedit.util.Location;
public class CommandBrush implements Brush { public class CommandBrush implements Brush {
@ -47,7 +48,7 @@ public class CommandBrush implements Brush {
} }
FawePlayer<Object> fp = FawePlayer.wrap(player); FawePlayer<Object> fp = FawePlayer.wrap(player);
fp.setSelection(selector); fp.setSelection(selector);
PlayerWrapper wePlayer = new SilentPlayerWrapper(new LocationMaskedPlayerWrapper(player, position)); PlayerWrapper wePlayer = new SilentPlayerWrapper(new LocationMaskedPlayerWrapper(player, new Location(player.getExtent(), position)));
String[] cmds = replaced.split(";"); String[] cmds = replaced.split(";");
for (String cmd : cmds) { for (String cmd : cmds) {
CommandEvent event = new CommandEvent(wePlayer, cmd); CommandEvent event = new CommandEvent(wePlayer, cmd);

View File

@ -7,9 +7,9 @@ import com.sk89q.worldedit.entity.Player;
import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.util.Location;
public class LocationMaskedPlayerWrapper extends PlayerWrapper { public class LocationMaskedPlayerWrapper extends PlayerWrapper {
private Vector position; private Location position;
public LocationMaskedPlayerWrapper(Player parent, Vector position) { public LocationMaskedPlayerWrapper(Player parent, Location position) {
super(parent); super(parent);
this.position = position; this.position = position;
} }
@ -28,16 +28,16 @@ public class LocationMaskedPlayerWrapper extends PlayerWrapper {
@Override @Override
public WorldVector getPosition() { public WorldVector getPosition() {
return new WorldVector((LocalWorld) getWorld(), position); return new WorldVector((LocalWorld) position.getExtent(), position.toVector());
} }
@Override @Override
public Location getLocation() { public Location getLocation() {
return new Location(getWorld(), position); return position;
} }
@Override @Override
public void setPosition(Vector pos, float pitch, float yaw) { public void setPosition(Vector pos, float pitch, float yaw) {
this.position = pos; this.position = new Location(position.getExtent(), pos, pitch, yaw);
} }
} }

View File

@ -265,7 +265,7 @@ public final class CommandManager {
if (fp == null) { if (fp == null) {
throw new IllegalArgumentException("FAWE doesn't support: " + actor); throw new IllegalArgumentException("FAWE doesn't support: " + actor);
} }
locals.put(Actor.class, actor instanceof Player ? (actor = new LocationMaskedPlayerWrapper((Player) actor, ((Player) actor).getPosition())) : actor); locals.put(Actor.class, actor instanceof Player ? (actor = new LocationMaskedPlayerWrapper((Player) actor, ((Player) actor).getLocation())) : actor);
final Actor finalActor = actor; final Actor finalActor = actor;
if (!fp.runAction(new Runnable() { if (!fp.runAction(new Runnable() {
@Override @Override

View File

@ -24,6 +24,7 @@ import com.boydti.fawe.object.FawePlayer;
import com.boydti.fawe.object.exception.FaweException; import com.boydti.fawe.object.exception.FaweException;
import com.boydti.fawe.object.pattern.PatternTraverser; import com.boydti.fawe.object.pattern.PatternTraverser;
import com.boydti.fawe.util.MainUtil; import com.boydti.fawe.util.MainUtil;
import com.boydti.fawe.wrappers.LocationMaskedPlayerWrapper;
import com.boydti.fawe.wrappers.PlayerWrapper; import com.boydti.fawe.wrappers.PlayerWrapper;
import com.sk89q.worldedit.LocalConfiguration; import com.sk89q.worldedit.LocalConfiguration;
import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.LocalSession;
@ -348,7 +349,7 @@ public class PlatformManager {
// At this time, only handle interaction from players // At this time, only handle interaction from players
if (actor instanceof Player) { if (actor instanceof Player) {
final Player player = PlayerWrapper.wrap((Player) actor); final Player player = new LocationMaskedPlayerWrapper(PlayerWrapper.wrap((Player) actor), ((Player) actor).getLocation());
final LocalSession session = worldEdit.getSessionManager().get(actor); final LocalSession session = worldEdit.getSessionManager().get(actor);
if (event.getType() == Interaction.HIT) { if (event.getType() == Interaction.HIT) {
@ -420,12 +421,12 @@ public class PlatformManager {
if (tool != null && tool instanceof BlockTool) { if (tool != null && tool instanceof BlockTool) {
if (tool.canUse(player)) { if (tool.canUse(player)) {
FawePlayer<?> fp = FawePlayer.wrap(player); FawePlayer<?> fp = FawePlayer.wrap(player);
fp.runAction(new Runnable() { fp.runAsyncIfFree(new Runnable() {
@Override @Override
public void run() { public void run() {
reset((BlockTool) tool).actPrimary(queryCapability(Capability.WORLD_EDITING), getConfiguration(), player, session, location); reset((BlockTool) tool).actPrimary(queryCapability(Capability.WORLD_EDITING), getConfiguration(), player, session, location);
} }
}, true, true); });
event.setCancelled(true); event.setCancelled(true);
} }
} }