From 57d41ae6f7c880696ad77133be2a59f782a55506 Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Sat, 3 Dec 2016 16:37:08 +1100 Subject: [PATCH] Add id/data pattern --- .../fawe/object/pattern/DataPattern.java | 25 +++++++++++++++++++ .../boydti/fawe/object/pattern/IdPattern.java | 25 +++++++++++++++++++ .../factory/HashTagPatternParser.java | 21 ++++++---------- 3 files changed, 57 insertions(+), 14 deletions(-) create mode 100644 core/src/main/java/com/boydti/fawe/object/pattern/DataPattern.java create mode 100644 core/src/main/java/com/boydti/fawe/object/pattern/IdPattern.java diff --git a/core/src/main/java/com/boydti/fawe/object/pattern/DataPattern.java b/core/src/main/java/com/boydti/fawe/object/pattern/DataPattern.java new file mode 100644 index 00000000..0604bea6 --- /dev/null +++ b/core/src/main/java/com/boydti/fawe/object/pattern/DataPattern.java @@ -0,0 +1,25 @@ +package com.boydti.fawe.object.pattern; + +import com.boydti.fawe.FaweCache; +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.extent.Extent; +import com.sk89q.worldedit.function.pattern.AbstractPattern; +import com.sk89q.worldedit.function.pattern.Pattern; + +public class DataPattern extends AbstractPattern { + private final Extent extent; + private final Pattern pattern; + + public DataPattern(Extent extent, Pattern parent) { + this.extent = extent; + this.pattern = parent; + } + + @Override + public BaseBlock apply(Vector position) { + BaseBlock oldBlock = extent.getBlock(position); + BaseBlock newBlock = pattern.apply(position); + return FaweCache.getBlock(oldBlock.getId(), newBlock.getData()); + } +} diff --git a/core/src/main/java/com/boydti/fawe/object/pattern/IdPattern.java b/core/src/main/java/com/boydti/fawe/object/pattern/IdPattern.java new file mode 100644 index 00000000..865a08c2 --- /dev/null +++ b/core/src/main/java/com/boydti/fawe/object/pattern/IdPattern.java @@ -0,0 +1,25 @@ +package com.boydti.fawe.object.pattern; + +import com.boydti.fawe.FaweCache; +import com.sk89q.worldedit.Vector; +import com.sk89q.worldedit.blocks.BaseBlock; +import com.sk89q.worldedit.extent.Extent; +import com.sk89q.worldedit.function.pattern.AbstractPattern; +import com.sk89q.worldedit.function.pattern.Pattern; + +public class IdPattern extends AbstractPattern { + private final Extent extent; + private final Pattern pattern; + + public IdPattern(Extent extent, Pattern parent) { + this.extent = extent; + this.pattern = parent; + } + + @Override + public BaseBlock apply(Vector position) { + BaseBlock oldBlock = extent.getBlock(position); + BaseBlock newBlock = pattern.apply(position); + return FaweCache.getBlock(newBlock.getId(), oldBlock.getData()); + } +} diff --git a/core/src/main/java/com/sk89q/worldedit/extension/factory/HashTagPatternParser.java b/core/src/main/java/com/sk89q/worldedit/extension/factory/HashTagPatternParser.java index b4c6092e..c9659e1a 100644 --- a/core/src/main/java/com/sk89q/worldedit/extension/factory/HashTagPatternParser.java +++ b/core/src/main/java/com/sk89q/worldedit/extension/factory/HashTagPatternParser.java @@ -1,19 +1,6 @@ package com.sk89q.worldedit.extension.factory; -import com.boydti.fawe.object.pattern.ExistingPattern; -import com.boydti.fawe.object.pattern.ExpressionPattern; -import com.boydti.fawe.object.pattern.Linear3DBlockPattern; -import com.boydti.fawe.object.pattern.LinearBlockPattern; -import com.boydti.fawe.object.pattern.MaskedPattern; -import com.boydti.fawe.object.pattern.NoXPattern; -import com.boydti.fawe.object.pattern.NoYPattern; -import com.boydti.fawe.object.pattern.NoZPattern; -import com.boydti.fawe.object.pattern.OffsetPattern; -import com.boydti.fawe.object.pattern.PatternExtent; -import com.boydti.fawe.object.pattern.RandomOffsetPattern; -import com.boydti.fawe.object.pattern.RelativePattern; -import com.boydti.fawe.object.pattern.SolidRandomOffsetPattern; -import com.boydti.fawe.object.pattern.SurfaceRandomOffsetPattern; +import com.boydti.fawe.object.pattern.*; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.EmptyClipboardException; import com.sk89q.worldedit.LocalSession; @@ -92,6 +79,12 @@ public class HashTagPatternParser extends InputParser { if (split2.length > 1) { String rest = input.substring(split2[0].length() + 1); switch (split2[0].toLowerCase()) { + case "#id": { + return new IdPattern(context.requireExtent(), parseFromInput(rest, context)); + } + case "#data": { + return new DataPattern(context.requireExtent(), parseFromInput(rest, context)); + } case "#~": case "#r": case "#relative":