From 87f79f9fa61e11254e8f903d12ae01318b64bd5c Mon Sep 17 00:00:00 2001 From: Jesse Boyd Date: Tue, 12 Jul 2016 17:54:00 +1000 Subject: [PATCH] Various fixes Fix undo Fix blockshub hook API improvements Added worldedit from console Fixed async world loading for paperspigot Some minor optimizations Added some extra translations --- build.gradle | 1 + .../com/boydti/fawe/bukkit/ABukkitMain.java | 4 - .../com/boydti/fawe/bukkit/FaweBukkit.java | 28 ++- .../fawe/bukkit/logging/BlocksHubHook.java | 22 -- .../fawe/bukkit/logging/LoggingChangeSet.java | 73 ------ .../fawe/bukkit/logging/LoggingExtent.java | 232 ------------------ .../bukkit/v0/BukkitEditSessionWrapper_0.java | 29 --- .../boydti/fawe/bukkit/v0/BukkitQueue_0.java | 3 +- .../fawe/bukkit/wrapper/AsyncWorld.java | 2 - .../fawe/bukkit/v1_10/BukkitMain_110.java | 8 - .../fawe/bukkit/v1_10/BukkitQueue_1_10.java | 13 +- .../fawe/bukkit/v1_8/BukkitMain_18.java | 8 - .../fawe/bukkit/v1_9/BukkitMain_19.java | 8 - core/build.gradle | 1 - core/src/main/java/com/boydti/fawe/Fawe.java | 6 +- .../main/java/com/boydti/fawe/FaweAPI.java | 2 +- core/src/main/java/com/boydti/fawe/IFawe.java | 8 +- .../java/com/boydti/fawe/command/Cancel.java | 4 +- .../main/java/com/boydti/fawe/config/BBC.java | 2 + .../fawe/example/NMSMappedFaweQueue.java | 4 +- .../boydti/fawe/logging/LoggingChangeSet.java | 99 ++++++++ .../boydti/fawe/logging/MutableBlockData.java | 29 +++ .../boydti/fawe/logging/MutableVector.java | 47 ++++ .../fawe/object/EditSessionWrapper.java | 121 --------- .../com/boydti/fawe/object/FawePlayer.java | 14 +- .../com/boydti/fawe/object/RunnableVal.java | 7 +- .../clipboard/DiskOptimizedClipboard.java | 3 +- .../boydti/fawe/util/EditSessionBuilder.java | 2 +- .../java/com/boydti/fawe/util/FaweTimer.java | 56 ++++- .../java/com/boydti/fawe/util/SetQueue.java | 60 +++-- .../com/boydti/fawe/util/TaskManager.java | 68 ++++- .../java/com/boydti/fawe/util/WEManager.java | 12 +- .../com/boydti/fawe/wrappers/FakePlayer.java | 151 ++++++++---- .../java/com/sk89q/worldedit/EditSession.java | 13 +- .../com/sk89q/worldedit/LocalSession.java | 2 +- .../worldedit/command/NavigationCommands.java | 22 +- .../worldedit/command/SelectionCommands.java | 14 +- .../extension/platform/CommandManager.java | 16 +- .../java/com/boydti/fawe/forge/FaweForge.java | 12 +- .../java/com/boydti/fawe/forge/FaweForge.java | 13 +- pom.xml | 4 +- .../com/boydti/fawe/sponge/FaweSponge.java | 14 +- 42 files changed, 558 insertions(+), 679 deletions(-) delete mode 100644 bukkit0/src/main/java/com/boydti/fawe/bukkit/logging/BlocksHubHook.java delete mode 100644 bukkit0/src/main/java/com/boydti/fawe/bukkit/logging/LoggingChangeSet.java delete mode 100644 bukkit0/src/main/java/com/boydti/fawe/bukkit/logging/LoggingExtent.java delete mode 100644 bukkit0/src/main/java/com/boydti/fawe/bukkit/v0/BukkitEditSessionWrapper_0.java create mode 100644 core/src/main/java/com/boydti/fawe/logging/LoggingChangeSet.java create mode 100644 core/src/main/java/com/boydti/fawe/logging/MutableBlockData.java create mode 100644 core/src/main/java/com/boydti/fawe/logging/MutableVector.java delete mode 100644 core/src/main/java/com/boydti/fawe/object/EditSessionWrapper.java diff --git a/build.gradle b/build.gradle index 8ea31a01..f696f9af 100644 --- a/build.gradle +++ b/build.gradle @@ -38,6 +38,7 @@ subprojects { } compile 'com.sk89q:worldguard:6.0.0-SNAPSHOT' compile 'com.plotsquared:PlotSquared:3.4.1-SNAPSHOT' + compile 'org.primesoft:BlocksHub:2.0' } repositories { diff --git a/bukkit0/src/main/java/com/boydti/fawe/bukkit/ABukkitMain.java b/bukkit0/src/main/java/com/boydti/fawe/bukkit/ABukkitMain.java index 5b31f638..393cb163 100644 --- a/bukkit0/src/main/java/com/boydti/fawe/bukkit/ABukkitMain.java +++ b/bukkit0/src/main/java/com/boydti/fawe/bukkit/ABukkitMain.java @@ -1,11 +1,9 @@ package com.boydti.fawe.bukkit; import com.boydti.fawe.Fawe; -import com.boydti.fawe.object.EditSessionWrapper; import com.boydti.fawe.object.FaweCommand; import com.boydti.fawe.object.FawePlayer; import com.boydti.fawe.object.FaweQueue; -import com.sk89q.worldedit.EditSession; import com.thevoxelbox.voxelsniper.SnipeData; import com.thevoxelbox.voxelsniper.Sniper; import org.bukkit.Bukkit; @@ -54,6 +52,4 @@ public abstract class ABukkitMain extends JavaPlugin { } public abstract FaweQueue getQueue(String world); - - public abstract EditSessionWrapper getEditSessionWrapper(EditSession session); } \ No newline at end of file diff --git a/bukkit0/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java b/bukkit0/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java index 804e8c26..d7174123 100644 --- a/bukkit0/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java +++ b/bukkit0/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java @@ -15,16 +15,14 @@ import com.boydti.fawe.bukkit.regions.Worldguard; import com.boydti.fawe.bukkit.v0.BukkitQueue_All; import com.boydti.fawe.bukkit.v0.ChunkListener; import com.boydti.fawe.config.Settings; -import com.boydti.fawe.object.EditSessionWrapper; import com.boydti.fawe.object.FaweCommand; import com.boydti.fawe.object.FawePlayer; -import com.boydti.fawe.regions.FaweMaskManager; import com.boydti.fawe.object.FaweQueue; +import com.boydti.fawe.regions.FaweMaskManager; import com.boydti.fawe.util.MainUtil; import com.boydti.fawe.util.ReflectionUtils; import com.boydti.fawe.util.StringMan; import com.boydti.fawe.util.TaskManager; -import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.bukkit.WorldEditPlugin; import com.sk89q.worldedit.world.World; import java.io.File; @@ -41,6 +39,7 @@ import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerChangedWorldEvent; import org.bukkit.event.player.PlayerQuitEvent; import org.bukkit.plugin.Plugin; +import org.primesoft.blockshub.BlocksHubBukkit; public class FaweBukkit implements IFawe, Listener { @@ -220,14 +219,6 @@ public class FaweBukkit implements IFawe, Listener { return world.getName(); } - /** - * The EditSessionWrapper should have the same functionality as the normal EditSessionWrapper but with some optimizations - */ - @Override - public EditSessionWrapper getEditSessionWrapper(final EditSession session) { - return plugin.getEditSessionWrapper(session); - } - /** * A mask manager handles region restrictions e.g. PlotSquared plots / WorldGuard regions */ @@ -343,4 +334,19 @@ public class FaweBukkit implements IFawe, Listener { public String getName(UUID uuid) { return Bukkit.getOfflinePlayer(uuid).getName(); } + + private boolean enabledBlocksHub = true; + + @Override + public Object getBlocksHubApi() { + if (!enabledBlocksHub) { + return null; + } + Plugin blocksHubPlugin = Bukkit.getPluginManager().getPlugin("BlocksHub"); + if (blocksHubPlugin == null) { + enabledBlocksHub = false; + return null; + } + return ((BlocksHubBukkit) blocksHubPlugin).getApi(); + } } diff --git a/bukkit0/src/main/java/com/boydti/fawe/bukkit/logging/BlocksHubHook.java b/bukkit0/src/main/java/com/boydti/fawe/bukkit/logging/BlocksHubHook.java deleted file mode 100644 index 599c2f96..00000000 --- a/bukkit0/src/main/java/com/boydti/fawe/bukkit/logging/BlocksHubHook.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.boydti.fawe.bukkit.logging; - -import com.boydti.fawe.object.FawePlayer; -import com.boydti.fawe.object.changeset.FaweChangeSet; -import org.PrimeSoft.blocksHub.BlocksHub; -import org.PrimeSoft.blocksHub.IBlocksHubApi; -import org.bukkit.Bukkit; -import org.bukkit.entity.Player; - -public class BlocksHubHook { - private final BlocksHub hub; - private final IBlocksHubApi api; - - public BlocksHubHook() { - this.hub = (BlocksHub) Bukkit.getServer().getPluginManager().getPlugin("BlocksHub"); - this.api = this.hub.getApi(); - } - - public FaweChangeSet getLoggingChangeSet(FaweChangeSet set, FawePlayer player) { - return new LoggingChangeSet((FawePlayer) player, set, api); - } -} diff --git a/bukkit0/src/main/java/com/boydti/fawe/bukkit/logging/LoggingChangeSet.java b/bukkit0/src/main/java/com/boydti/fawe/bukkit/logging/LoggingChangeSet.java deleted file mode 100644 index 0649638d..00000000 --- a/bukkit0/src/main/java/com/boydti/fawe/bukkit/logging/LoggingChangeSet.java +++ /dev/null @@ -1,73 +0,0 @@ -package com.boydti.fawe.bukkit.logging; - -import com.boydti.fawe.object.FawePlayer; -import com.boydti.fawe.object.changeset.FaweChangeSet; -import com.sk89q.jnbt.CompoundTag; -import com.sk89q.worldedit.history.change.Change; -import java.util.Iterator; -import org.PrimeSoft.blocksHub.IBlocksHubApi; -import org.bukkit.Location; -import org.bukkit.World; -import org.bukkit.entity.Player; - -public class LoggingChangeSet extends FaweChangeSet { - - private final FaweChangeSet parent; - private final IBlocksHubApi api; - private final World world; - private final Location loc; - private final String name; - - public LoggingChangeSet(FawePlayer player, FaweChangeSet parent, IBlocksHubApi api) { - super(parent.getWorld()); - this.parent = parent; - this.name = player.getName(); - this.api = api; - this.world = player.parent.getWorld(); - this.loc = new Location(world, 0, 0, 0); - } - - @Override - public boolean flush() { - return parent.flush(); - } - - @Override - public void add(int x, int y, int z, int combinedId4DataFrom, int combinedId4DataTo) { - loc.setX(x); - loc.setY(y); - loc.setZ(z); - api.logBlock(name, world, loc, combinedId4DataFrom >> 4, (byte) (combinedId4DataFrom & 0xF), combinedId4DataTo >> 4, (byte) (combinedId4DataTo & 0xF)); - parent.add(x, y, z, combinedId4DataFrom, combinedId4DataTo); - } - - @Override - public void addTileCreate(CompoundTag tag) { - parent.addTileCreate(tag); - } - - @Override - public void addTileRemove(CompoundTag tag) { - parent.addTileRemove(tag); - } - - @Override - public void addEntityRemove(CompoundTag tag) { - parent.addEntityRemove(tag); - } - - @Override - public void addEntityCreate(CompoundTag tag) { - parent.addEntityCreate(tag); - } - - @Override - public Iterator getIterator(boolean undo) { - return parent.getIterator(undo); - } - - @Override - public int size() { - return parent.size(); - } -} diff --git a/bukkit0/src/main/java/com/boydti/fawe/bukkit/logging/LoggingExtent.java b/bukkit0/src/main/java/com/boydti/fawe/bukkit/logging/LoggingExtent.java deleted file mode 100644 index 84470695..00000000 --- a/bukkit0/src/main/java/com/boydti/fawe/bukkit/logging/LoggingExtent.java +++ /dev/null @@ -1,232 +0,0 @@ -package com.boydti.fawe.bukkit.logging; - -import com.boydti.fawe.object.FawePlayer; -import com.sk89q.worldedit.Vector; -import com.sk89q.worldedit.WorldEditException; -import com.sk89q.worldedit.blocks.BaseBlock; -import com.sk89q.worldedit.entity.BaseEntity; -import com.sk89q.worldedit.entity.Entity; -import com.sk89q.worldedit.extent.AbstractDelegateExtent; -import com.sk89q.worldedit.extent.Extent; -import com.sk89q.worldedit.history.change.BlockChange; -import com.sk89q.worldedit.history.change.EntityCreate; -import com.sk89q.worldedit.history.change.EntityRemove; -import com.sk89q.worldedit.history.changeset.ChangeSet; -import com.sk89q.worldedit.regions.Region; -import com.sk89q.worldedit.util.Location; -import java.util.ArrayList; -import java.util.List; -import javax.annotation.Nullable; -import org.PrimeSoft.blocksHub.IBlocksHubApi; -import org.bukkit.World; -import org.bukkit.entity.Player; - - -import static com.google.common.base.Preconditions.checkNotNull; - -/** - * Stores changes to a {@link com.sk89q.worldedit.history.changeset.ChangeSet}. - * Logs changes to BlocksHub - */ -public class LoggingExtent extends AbstractDelegateExtent { - - private final ChangeSet changeSet; - private final IBlocksHubApi api; - private final String playerName; - private final World world; - private final org.bukkit.Location loc; - - /** - * Create a new instance. - * - * @param extent the extent - * @param changeSet the change set - * @param api - * @param player - */ - public LoggingExtent(final Extent extent, final ChangeSet changeSet, final FawePlayer player, final IBlocksHubApi api) { - super(extent); - checkNotNull(changeSet); - this.changeSet = changeSet; - this.api = api; - this.playerName = player.getName(); - this.world = player.parent.getWorld(); - this.loc = new org.bukkit.Location(this.world, 0, 0, 0); - } - - @Override - public synchronized boolean setBlock(final Vector location, final BaseBlock block) throws WorldEditException { - if (super.setBlock(location, block)) { - BaseBlock previous; - try { - previous = this.getBlock(location); - } catch (final Exception e) { - previous = this.getBlock(location); - } - final int id_p = previous.getId(); - final int id_b = block.getId(); - switch (id_p) { - case 0: - case 2: - case 4: - case 13: - case 14: - case 15: - case 20: - case 21: - case 22: - case 25: - case 30: - case 32: - case 37: - case 39: - case 40: - case 41: - case 42: - case 45: - case 46: - case 47: - case 48: - case 49: - case 51: - case 52: - case 54: - case 56: - case 57: - case 58: - case 60: - case 7: - case 11: - case 73: - case 74: - case 79: - case 80: - case 81: - case 82: - case 83: - case 84: - case 85: - case 87: - case 88: - case 101: - case 102: - case 103: - case 110: - case 112: - case 113: - case 117: - case 121: - case 122: - case 123: - case 124: - case 129: - case 133: - case 138: - case 137: - case 140: - case 165: - case 166: - case 169: - case 170: - case 172: - case 173: - case 174: - case 188: - case 189: - case 190: - case 191: - case 192: - if (id_p == id_b) { - return false; - } - this.loc.setX(location.getX()); - this.loc.setY(location.getY()); - this.loc.setZ(location.getZ()); - this.api.logBlock(this.playerName, this.world, this.loc, id_p, (byte) 0, id_b, (byte) 0); - break; - default: - final int data_p = previous.getData(); - final int data_b = block.getData(); - if ((id_p == id_b) && (data_b == data_p)) { - return false; - } - this.loc.setX(location.getX()); - this.loc.setY(location.getY()); - this.loc.setZ(location.getZ()); - this.api.logBlock(this.playerName, this.world, this.loc, id_p, (byte) data_p, id_b, (byte) data_b); - break; - } - this.changeSet.add(new BlockChange(location.toBlockVector(), previous, block)); - return true; - } - return false; - } - - @Nullable - @Override - public Entity createEntity(final Location location, final BaseEntity state) { - final Entity entity = super.createEntity(location, state); - if (state != null) { - this.changeSet.add(new EntityCreate(location, state, entity)); - } - return entity; - } - - @Override - public List getEntities() { - return this.wrapEntities(super.getEntities()); - } - - @Override - public List getEntities(final Region region) { - return this.wrapEntities(super.getEntities(region)); - } - - private List wrapEntities(final List entities) { - final List newList = new ArrayList(entities.size()); - for (final Entity entity : entities) { - newList.add(new TrackedEntity(entity)); - } - return newList; - } - - private class TrackedEntity implements Entity { - private final Entity entity; - - private TrackedEntity(final Entity entity) { - this.entity = entity; - } - - @Override - public BaseEntity getState() { - return this.entity.getState(); - } - - @Override - public Location getLocation() { - return this.entity.getLocation(); - } - - @Override - public Extent getExtent() { - return this.entity.getExtent(); - } - - @Override - public boolean remove() { - final Location location = this.entity.getLocation(); - final BaseEntity state = this.entity.getState(); - final boolean success = this.entity.remove(); - if ((state != null) && success) { - LoggingExtent.this.changeSet.add(new EntityRemove(location, state)); - } - return success; - } - - @Nullable - @Override - public T getFacet(final Class cls) { - return this.entity.getFacet(cls); - } - } -} diff --git a/bukkit0/src/main/java/com/boydti/fawe/bukkit/v0/BukkitEditSessionWrapper_0.java b/bukkit0/src/main/java/com/boydti/fawe/bukkit/v0/BukkitEditSessionWrapper_0.java deleted file mode 100644 index fcb74ca0..00000000 --- a/bukkit0/src/main/java/com/boydti/fawe/bukkit/v0/BukkitEditSessionWrapper_0.java +++ /dev/null @@ -1,29 +0,0 @@ -package com.boydti.fawe.bukkit.v0; - -import com.boydti.fawe.bukkit.logging.BlocksHubHook; -import com.boydti.fawe.object.EditSessionWrapper; -import com.boydti.fawe.object.FawePlayer; -import com.boydti.fawe.object.changeset.FaweChangeSet; -import com.sk89q.worldedit.EditSession; - -public class BukkitEditSessionWrapper_0 extends EditSessionWrapper { - - private BlocksHubHook hook; - - public BukkitEditSessionWrapper_0(final EditSession session) { - super(session); - try { - // Try to hook into BlocksHub - this.hook = new BlocksHubHook(); - } catch (final Throwable ignore) {} - } - - @Override - public FaweChangeSet wrapChangeSet(FaweChangeSet set, FawePlayer player) { - if (this.hook != null) { - // If we are doing logging, use a custom logging ChangeSet - return hook.getLoggingChangeSet(set, player); - } - return set; - } -} diff --git a/bukkit0/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_0.java b/bukkit0/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_0.java index c419c14d..bf97e307 100644 --- a/bukkit0/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_0.java +++ b/bukkit0/src/main/java/com/boydti/fawe/bukkit/v0/BukkitQueue_0.java @@ -18,7 +18,6 @@ import java.util.Collection; import java.util.Map; import java.util.Set; import java.util.UUID; -import java.util.concurrent.ConcurrentLinkedDeque; import org.bukkit.Bukkit; import org.bukkit.Chunk; import org.bukkit.World; @@ -56,7 +55,7 @@ public abstract class BukkitQueue_0 extends NMSMa @EventHandler(ignoreCancelled = true, priority = EventPriority.MONITOR) public static void onChunkUnload(ChunkUnloadEvent event) { - ConcurrentLinkedDeque queues = SetQueue.IMP.activeQueues; + Collection queues = SetQueue.IMP.getActiveQueues(); if (queues.isEmpty()) { return; } diff --git a/bukkit0/src/main/java/com/boydti/fawe/bukkit/wrapper/AsyncWorld.java b/bukkit0/src/main/java/com/boydti/fawe/bukkit/wrapper/AsyncWorld.java index 9e82ceef..ffd56f7e 100644 --- a/bukkit0/src/main/java/com/boydti/fawe/bukkit/wrapper/AsyncWorld.java +++ b/bukkit0/src/main/java/com/boydti/fawe/bukkit/wrapper/AsyncWorld.java @@ -123,10 +123,8 @@ public class AsyncWorld implements World { * @return */ public static AsyncWorld create(final WorldCreator creator) { - long start = System.currentTimeMillis(); BukkitQueue_0 queue = (BukkitQueue_0) SetQueue.IMP.getNewQueue(creator.name(), true, false); World world = queue.createWorld(creator); - System.out.println(System.currentTimeMillis() - start); return wrap(world); } diff --git a/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitMain_110.java b/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitMain_110.java index 8e83390b..d3664fed 100644 --- a/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitMain_110.java +++ b/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitMain_110.java @@ -1,20 +1,12 @@ package com.boydti.fawe.bukkit.v1_10; import com.boydti.fawe.bukkit.ABukkitMain; -import com.boydti.fawe.bukkit.v0.BukkitEditSessionWrapper_0; import com.boydti.fawe.bukkit.v0.BukkitQueue_0; -import com.boydti.fawe.object.EditSessionWrapper; -import com.sk89q.worldedit.EditSession; public class BukkitMain_110 extends ABukkitMain { @Override public BukkitQueue_0 getQueue(String world) { return new BukkitQueue_1_10(world); -// return new BukkitQueue_All(world); } - @Override - public EditSessionWrapper getEditSessionWrapper(EditSession session) { - return new BukkitEditSessionWrapper_0(session); - } } \ No newline at end of file diff --git a/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitQueue_1_10.java b/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitQueue_1_10.java index edb88fca..c7d244ce 100644 --- a/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitQueue_1_10.java +++ b/bukkit110/src/main/java/com/boydti/fawe/bukkit/v1_10/BukkitQueue_1_10.java @@ -131,29 +131,32 @@ public class BukkitQueue_1_10 extends BukkitQueue_0() { @Override public void run(World value) { + console.worlds.add(internal); server.getPluginManager().callEvent(new WorldInitEvent(internal.getWorld())); server.getPluginManager().callEvent(new WorldLoadEvent(internal.getWorld())); this.value = internal.getWorld(); diff --git a/bukkit18/src/main/java/com/boydti/fawe/bukkit/v1_8/BukkitMain_18.java b/bukkit18/src/main/java/com/boydti/fawe/bukkit/v1_8/BukkitMain_18.java index 4759b2e5..854fd61d 100644 --- a/bukkit18/src/main/java/com/boydti/fawe/bukkit/v1_8/BukkitMain_18.java +++ b/bukkit18/src/main/java/com/boydti/fawe/bukkit/v1_8/BukkitMain_18.java @@ -1,10 +1,7 @@ package com.boydti.fawe.bukkit.v1_8; import com.boydti.fawe.bukkit.ABukkitMain; -import com.boydti.fawe.bukkit.v0.BukkitEditSessionWrapper_0; import com.boydti.fawe.bukkit.v0.BukkitQueue_0; -import com.boydti.fawe.object.EditSessionWrapper; -import com.sk89q.worldedit.EditSession; public class BukkitMain_18 extends ABukkitMain { @@ -12,9 +9,4 @@ public class BukkitMain_18 extends ABukkitMain { public BukkitQueue_0 getQueue(String world) { return new BukkitQueue18R3(world); } - - @Override - public EditSessionWrapper getEditSessionWrapper(EditSession session) { - return new BukkitEditSessionWrapper_0(session); - } } diff --git a/bukkit19/src/main/java/com/boydti/fawe/bukkit/v1_9/BukkitMain_19.java b/bukkit19/src/main/java/com/boydti/fawe/bukkit/v1_9/BukkitMain_19.java index d9ef5315..e3fa8872 100644 --- a/bukkit19/src/main/java/com/boydti/fawe/bukkit/v1_9/BukkitMain_19.java +++ b/bukkit19/src/main/java/com/boydti/fawe/bukkit/v1_9/BukkitMain_19.java @@ -1,19 +1,11 @@ package com.boydti.fawe.bukkit.v1_9; import com.boydti.fawe.bukkit.ABukkitMain; -import com.boydti.fawe.bukkit.v0.BukkitEditSessionWrapper_0; import com.boydti.fawe.bukkit.v0.BukkitQueue_0; -import com.boydti.fawe.object.EditSessionWrapper; -import com.sk89q.worldedit.EditSession; public class BukkitMain_19 extends ABukkitMain { @Override public BukkitQueue_0 getQueue(String world) { return new BukkitQueue_1_9_R1(world); } - - @Override - public EditSessionWrapper getEditSessionWrapper(EditSession session) { - return new BukkitEditSessionWrapper_0(session); - } } diff --git a/core/build.gradle b/core/build.gradle index 56308600..4459f1ea 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -2,7 +2,6 @@ dependencies { testCompile 'junit:junit:4.12' compile 'org.yaml:snakeyaml:1.16' compile 'com.google.code.gson:gson:2.2.4' - compile 'org.PrimeSoft:blockshub:1.2' compile 'net.fabiozumbi12:redprotect:1.9.6' } diff --git a/core/src/main/java/com/boydti/fawe/Fawe.java b/core/src/main/java/com/boydti/fawe/Fawe.java index fdf2a426..63b4c449 100644 --- a/core/src/main/java/com/boydti/fawe/Fawe.java +++ b/core/src/main/java/com/boydti/fawe/Fawe.java @@ -182,7 +182,7 @@ public class Fawe { MainUtil.deleteOlder(new File(IMP.getDirectory(), "clipboard"), TimeUnit.DAYS.toMillis(Settings.CLIPBOARD.DELETE_AFTER_DAYS)); TaskManager.IMP = this.IMP.getTaskManager(); - TaskManager.IMP.repeat(timer = new FaweTimer(), 50); + TaskManager.IMP.repeat(timer = new FaweTimer(), 1); if (Settings.METRICS) { this.IMP.startMetrics(); } @@ -211,6 +211,10 @@ public class Fawe { this.setupMemoryListener(); } + public FaweTimer getTimer() { + return timer; + } + public double getTPS() { return timer.getTPS(); } diff --git a/core/src/main/java/com/boydti/fawe/FaweAPI.java b/core/src/main/java/com/boydti/fawe/FaweAPI.java index 309601ec..29232a23 100644 --- a/core/src/main/java/com/boydti/fawe/FaweAPI.java +++ b/core/src/main/java/com/boydti/fawe/FaweAPI.java @@ -482,7 +482,7 @@ public class FaweAPI { * @param whenDone */ public static void addTask(final Runnable whenDone) { - SetQueue.IMP.addTask(whenDone); + SetQueue.IMP.addEmptyTask(whenDone); } /** diff --git a/core/src/main/java/com/boydti/fawe/IFawe.java b/core/src/main/java/com/boydti/fawe/IFawe.java index 8f9517ac..d96e2293 100644 --- a/core/src/main/java/com/boydti/fawe/IFawe.java +++ b/core/src/main/java/com/boydti/fawe/IFawe.java @@ -1,12 +1,10 @@ package com.boydti.fawe; -import com.boydti.fawe.object.EditSessionWrapper; import com.boydti.fawe.object.FaweCommand; import com.boydti.fawe.object.FawePlayer; -import com.boydti.fawe.regions.FaweMaskManager; import com.boydti.fawe.object.FaweQueue; +import com.boydti.fawe.regions.FaweMaskManager; import com.boydti.fawe.util.TaskManager; -import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.world.World; import java.io.File; import java.util.Collection; @@ -31,8 +29,6 @@ public interface IFawe { public String getWorldName(World world); - public EditSessionWrapper getEditSessionWrapper(final EditSession session); - public Collection getMaskManagers(); public void startMetrics(); @@ -42,4 +38,6 @@ public interface IFawe { public UUID getUUID(String name); public String getName(UUID uuid); + + public Object getBlocksHubApi(); } diff --git a/core/src/main/java/com/boydti/fawe/command/Cancel.java b/core/src/main/java/com/boydti/fawe/command/Cancel.java index 704456db..ff4fb9e8 100644 --- a/core/src/main/java/com/boydti/fawe/command/Cancel.java +++ b/core/src/main/java/com/boydti/fawe/command/Cancel.java @@ -6,7 +6,7 @@ import com.boydti.fawe.object.FawePlayer; import com.boydti.fawe.object.FaweQueue; import com.boydti.fawe.util.SetQueue; import com.sk89q.worldedit.EditSession; -import java.util.List; +import java.util.Collection; import java.util.Set; import java.util.UUID; @@ -22,7 +22,7 @@ public class Cancel extends FaweCommand { return false; } UUID uuid = player.getUUID(); - List queues = SetQueue.IMP.getAllQueues(); + Collection queues = SetQueue.IMP.getAllQueues(); int cancelled = 0; for (FaweQueue queue : queues) { Set sessions = queue.getEditSessions(); diff --git a/core/src/main/java/com/boydti/fawe/config/BBC.java b/core/src/main/java/com/boydti/fawe/config/BBC.java index 0d20aaee..97e4bd2a 100644 --- a/core/src/main/java/com/boydti/fawe/config/BBC.java +++ b/core/src/main/java/com/boydti/fawe/config/BBC.java @@ -103,6 +103,8 @@ public enum BBC { SELECTOR_CUBOID_POS1("First position set to %s0 %s1.", "WorldEdit.Selector"), SELECTOR_CUBOID_POS2("Second position set to %s0 %s1.", "WorldEdit.Selector"), + SELECTOR_INVALID_COORDINATES("Invalid coordinates %s0", "WorldEdit.Selector"), + SELECTOR_ALREADY_SET("Position already set.", "WorldEdit.Selector"), COMMAND_INVALID_SYNTAX("The command was not used properly (no more help available).", "WorldEdit.Command"), diff --git a/core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java b/core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java index 692c2366..66540a0d 100644 --- a/core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java +++ b/core/src/main/java/com/boydti/fawe/example/NMSMappedFaweQueue.java @@ -32,13 +32,13 @@ public abstract class NMSMappedFaweQueue ex mode = Settings.LIGHTING.FIX_ALL ? FaweQueue.RelightMode.OPTIMAL : FaweQueue.RelightMode.MINIMAL; } final RelightMode finalMode = mode; - TaskManager.IMP.taskSyncSoon(new Runnable() { + TaskManager.IMP.taskSoonMain(new Runnable() { @Override public void run() { final long pair = fc.longHash(); relighting.put(pair, pair); final boolean result = finalMode == RelightMode.NONE || fixLighting(fc, finalMode); - TaskManager.IMP.taskSyncNow(new Runnable() { + TaskManager.IMP.taskNowMain(new Runnable() { @Override public void run() { if (!result) { diff --git a/core/src/main/java/com/boydti/fawe/logging/LoggingChangeSet.java b/core/src/main/java/com/boydti/fawe/logging/LoggingChangeSet.java new file mode 100644 index 00000000..f4b54c91 --- /dev/null +++ b/core/src/main/java/com/boydti/fawe/logging/LoggingChangeSet.java @@ -0,0 +1,99 @@ +package com.boydti.fawe.logging; + +import com.boydti.fawe.Fawe; +import com.boydti.fawe.FaweCache; +import com.boydti.fawe.object.FawePlayer; +import com.boydti.fawe.object.changeset.FaweChangeSet; +import com.sk89q.jnbt.CompoundTag; +import com.sk89q.worldedit.history.change.Change; +import java.util.Iterator; +import org.bukkit.entity.Player; +import org.primesoft.blockshub.IBlocksHubApi; +import org.primesoft.blockshub.api.IPlayer; +import org.primesoft.blockshub.api.IWorld; + +public class LoggingChangeSet extends FaweChangeSet { + + private static boolean initialized = false; + + public static FaweChangeSet wrap(FawePlayer player, FaweChangeSet parent) { + if (!initialized) { + initialized = true; + api = (IBlocksHubApi) Fawe.imp().getBlocksHubApi(); + } + if (api == null) { + return parent; + } + return new LoggingChangeSet(player, parent); + } + + public static IBlocksHubApi api; + + private final FaweChangeSet parent; + + private final MutableVector loc; + private final IPlayer player; + private final IWorld world; + private final MutableBlockData oldBlock; + private final MutableBlockData newBlock; + + private LoggingChangeSet(FawePlayer player, FaweChangeSet parent) { + super(parent.getWorld()); + this.parent = parent; + this.world = api.getWorld(player.getLocation().world); + this.loc = new MutableVector(); + this.oldBlock = new MutableBlockData(); + this.newBlock = new MutableBlockData(); + this.player = api.getPlayer(player.getUUID()); + } + + @Override + public boolean flush() { + return parent.flush(); + } + + @Override + public void add(int x, int y, int z, int combinedId4DataFrom, int combinedId4DataTo) { + // Mutable (avoids object creation) + loc.x = x; + loc.y = y; + loc.z = z; + oldBlock.id = FaweCache.getId(combinedId4DataFrom); + oldBlock.data = FaweCache.getData(combinedId4DataFrom); + newBlock.id = FaweCache.getId(combinedId4DataTo); + newBlock.data = FaweCache.getData(combinedId4DataTo); + // Log to BlocksHub and parent + api.logBlock(loc, player, world, oldBlock, newBlock); + parent.add(x, y, z, combinedId4DataFrom, combinedId4DataTo); + } + + @Override + public void addTileCreate(CompoundTag tag) { + parent.addTileCreate(tag); + } + + @Override + public void addTileRemove(CompoundTag tag) { + parent.addTileRemove(tag); + } + + @Override + public void addEntityRemove(CompoundTag tag) { + parent.addEntityRemove(tag); + } + + @Override + public void addEntityCreate(CompoundTag tag) { + parent.addEntityCreate(tag); + } + + @Override + public Iterator getIterator(boolean undo) { + return parent.getIterator(undo); + } + + @Override + public int size() { + return parent.size(); + } +} \ No newline at end of file diff --git a/core/src/main/java/com/boydti/fawe/logging/MutableBlockData.java b/core/src/main/java/com/boydti/fawe/logging/MutableBlockData.java new file mode 100644 index 00000000..992177ad --- /dev/null +++ b/core/src/main/java/com/boydti/fawe/logging/MutableBlockData.java @@ -0,0 +1,29 @@ +package com.boydti.fawe.logging; + +import org.primesoft.blockshub.api.BlockData; + +public class MutableBlockData extends BlockData { + public int data; + public int id; + + public MutableBlockData() { + super(0, 0); + this.id = 0; + this.data = 0; + } + + @Override + public int getType() { + return id; + } + + @Override + public int getData() { + return data; + } + + @Override + public boolean isAir() { + return id == 0; + } +} diff --git a/core/src/main/java/com/boydti/fawe/logging/MutableVector.java b/core/src/main/java/com/boydti/fawe/logging/MutableVector.java new file mode 100644 index 00000000..2391750f --- /dev/null +++ b/core/src/main/java/com/boydti/fawe/logging/MutableVector.java @@ -0,0 +1,47 @@ +package com.boydti.fawe.logging; + +import org.primesoft.blockshub.api.Vector; + +public class MutableVector extends Vector { + + public double x, y, z; + + public MutableVector() { + super(0, 0, 0); + this.x = 0; + this.y = 0; + this.z = 0; + } + + @Override + public double getX() { + return x; + } + + @Override + public double getY() { + return y; + } + + @Override + public double getZ() { + return z; + } + + public boolean equals(Object obj) { + if(!(obj instanceof Vector)) { + return false; + } else { + Vector v = (Vector)obj; + return this.x == v.getX() && this.z == v.getZ() && this.y == v.getY(); + } + } + + public int hashCode() { + byte hash = 3; + int hash1 = 59 * hash + (int)(Double.doubleToLongBits(this.x) ^ Double.doubleToLongBits(this.x) >>> 32); + hash1 = 59 * hash1 + (int)(Double.doubleToLongBits(this.y) ^ Double.doubleToLongBits(this.y) >>> 32); + hash1 = 59 * hash1 + (int)(Double.doubleToLongBits(this.z) ^ Double.doubleToLongBits(this.z) >>> 32); + return hash1; + } +} diff --git a/core/src/main/java/com/boydti/fawe/object/EditSessionWrapper.java b/core/src/main/java/com/boydti/fawe/object/EditSessionWrapper.java deleted file mode 100644 index 0a425d2f..00000000 --- a/core/src/main/java/com/boydti/fawe/object/EditSessionWrapper.java +++ /dev/null @@ -1,121 +0,0 @@ -package com.boydti.fawe.object; - -import com.boydti.fawe.object.changeset.FaweChangeSet; -import com.sk89q.worldedit.EditSession; -import com.sk89q.worldedit.Vector; -import com.sk89q.worldedit.blocks.BaseBlock; -import com.sk89q.worldedit.blocks.BlockType; - -public class EditSessionWrapper { - - public final EditSession session; - - public EditSessionWrapper(final EditSession session) { - this.session = session; - } - - public int getHighestTerrainBlock(final int x, final int z, final int minY, final int maxY, final boolean naturalOnly) { - Vector pt = new Vector(x, 0, z); - for (int y = maxY; y >= minY; --y) { - BaseBlock block = session.getLazyBlock(x, y, z); - final int id = block.getId(); - int data; - switch (id) { - case 0: { - continue; - } - case 2: - case 4: - case 13: - case 14: - case 15: - case 20: - case 21: - case 22: - case 25: - case 30: - case 32: - case 37: - case 39: - case 40: - case 41: - case 42: - case 45: - case 46: - case 47: - case 48: - case 49: - case 51: - case 52: - case 54: - case 55: - case 56: - case 57: - case 58: - case 60: - case 61: - case 62: - case 7: - case 8: - case 9: - case 10: - case 11: - case 73: - case 74: - case 78: - case 79: - case 80: - case 81: - case 82: - case 83: - case 84: - case 85: - case 87: - case 88: - case 101: - case 102: - case 103: - case 110: - case 112: - case 113: - case 117: - case 121: - case 122: - case 123: - case 124: - case 129: - case 133: - case 138: - case 137: - case 140: - case 165: - case 166: - case 169: - case 170: - case 172: - case 173: - case 174: - case 176: - case 177: - case 181: - case 182: - case 188: - case 189: - case 190: - case 191: - case 192: - return y; - default: - data = 0; - } - if (naturalOnly ? BlockType.isNaturalTerrainBlock(id, data) : !BlockType.canPassThrough(id, data)) { - return y; - } - } - return minY; - } - - public FaweChangeSet wrapChangeSet(FaweChangeSet set, FawePlayer player) { - return set; - } -} diff --git a/core/src/main/java/com/boydti/fawe/object/FawePlayer.java b/core/src/main/java/com/boydti/fawe/object/FawePlayer.java index 1fa209fd..27b3edfa 100644 --- a/core/src/main/java/com/boydti/fawe/object/FawePlayer.java +++ b/core/src/main/java/com/boydti/fawe/object/FawePlayer.java @@ -19,6 +19,7 @@ import com.sk89q.worldedit.IncompleteRegionException; import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.entity.Player; +import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.regions.RegionSelector; @@ -57,7 +58,7 @@ public abstract class FawePlayer { */ public static FawePlayer wrap(final Object obj) { if (obj == null) { - return null; + return FakePlayer.getConsole().toFawePlayer(); } if (obj instanceof FakePlayer) { return ((FakePlayer) obj).toFawePlayer(); @@ -88,6 +89,15 @@ public abstract class FawePlayer { } } } + if (obj instanceof Actor) { + Actor actor = (Actor) obj; + FawePlayer existing = Fawe.get().getCachedPlayer(actor.getName()); + if (existing != null) { + return existing; + } + FakePlayer fake = new FakePlayer(actor.getName(), actor.getUniqueId(), actor); + return fake.toFawePlayer(); + } return Fawe.imp().wrap(obj); } @@ -448,4 +458,4 @@ public abstract class FawePlayer { }); return true; } -} +} \ No newline at end of file diff --git a/core/src/main/java/com/boydti/fawe/object/RunnableVal.java b/core/src/main/java/com/boydti/fawe/object/RunnableVal.java index f1aec1ac..c6862bfe 100644 --- a/core/src/main/java/com/boydti/fawe/object/RunnableVal.java +++ b/core/src/main/java/com/boydti/fawe/object/RunnableVal.java @@ -13,6 +13,11 @@ public abstract class RunnableVal implements Runnable { public void run() { run(this.value); } - + + public T runAndGet() { + run(); + return value; + } + public abstract void run(T value); } diff --git a/core/src/main/java/com/boydti/fawe/object/clipboard/DiskOptimizedClipboard.java b/core/src/main/java/com/boydti/fawe/object/clipboard/DiskOptimizedClipboard.java index f90bc17c..5bf02364 100644 --- a/core/src/main/java/com/boydti/fawe/object/clipboard/DiskOptimizedClipboard.java +++ b/core/src/main/java/com/boydti/fawe/object/clipboard/DiskOptimizedClipboard.java @@ -18,6 +18,7 @@ import com.sk89q.worldedit.entity.Entity; import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard; import com.sk89q.worldedit.regions.CuboidRegion; +import java.io.Closeable; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; @@ -34,7 +35,7 @@ import java.util.UUID; * * TODO load on join */ -public class DiskOptimizedClipboard extends FaweClipboard { +public class DiskOptimizedClipboard extends FaweClipboard implements Closeable { public static int COMPRESSION = 0; public static int MODE = 0; diff --git a/core/src/main/java/com/boydti/fawe/util/EditSessionBuilder.java b/core/src/main/java/com/boydti/fawe/util/EditSessionBuilder.java index dc4f9685..ea0a341b 100644 --- a/core/src/main/java/com/boydti/fawe/util/EditSessionBuilder.java +++ b/core/src/main/java/com/boydti/fawe/util/EditSessionBuilder.java @@ -38,7 +38,7 @@ public class EditSessionBuilder { * An EditSession builder
* - Unset values will revert to their default
*
- * player: The player doing the edit (defaults to to console)
+ * player: The player doing the edit (defaults to to null)
* limit: Block/Entity/Action limit (defaults to unlimited)
* changeSet: Stores changes (defaults to config.yml value)
* allowedRegions: Allowed editable regions (defaults to player's allowed regions, or everywhere)
diff --git a/core/src/main/java/com/boydti/fawe/util/FaweTimer.java b/core/src/main/java/com/boydti/fawe/util/FaweTimer.java index 4c95c3c7..f1479a14 100644 --- a/core/src/main/java/com/boydti/fawe/util/FaweTimer.java +++ b/core/src/main/java/com/boydti/fawe/util/FaweTimer.java @@ -2,36 +2,41 @@ package com.boydti.fawe.util; public class FaweTimer implements Runnable { - private long tick = 0; - private final double[] history = new double[] {20d,20d,20d,20d,20d,20d,20d,20d,20d,20d,20d,20d,20d,20d,20d,20d,20d,20d,20d,20d}; private int historyIndex = 0; - private long lastPoll = System.nanoTime(); + private long lastPoll = System.currentTimeMillis(); + private long tickStart = System.currentTimeMillis(); private final long tickInterval = 50; + private long tick = 0; + private long tickMod = 0; @Override public void run() { - final long startTime = System.nanoTime(); - final long currentTime = System.currentTimeMillis(); - long timeSpent = (startTime - lastPoll) / 1000; + tickStart = System.currentTimeMillis(); + tick++; + if (++tickMod == tickInterval) { + tickMod = 0; + } else { + return; + } + long timeSpent = (tickStart - lastPoll); if (timeSpent == 0) { timeSpent = 1; } - tick++; double tps = tickInterval * 1000000.0 / timeSpent; history[historyIndex++] = tps; if (historyIndex >= history.length) { historyIndex = 0; } - lastPoll = startTime; + lastPoll = tickStart; } private long lastGetTPSTick = 0; private double lastGetTPSValue = 20d; public double getTPS() { - if (tick == lastGetTPSTick) { + if (tick < lastGetTPSTick + tickInterval) { return lastGetTPSValue; } double total = 0; @@ -42,4 +47,37 @@ public class FaweTimer implements Runnable { lastGetTPSTick = tick; return lastGetTPSValue; } + + public long getTick() { + return tick; + } + + public long getTickMillis() { + return System.currentTimeMillis() - tickStart; + } + + private long skip = 0; + private long skipTick = 0; + + public boolean isAbove(double tps) { + if (skip > 0) { + if (skipTick != tick) { + skip--; + } + return false; + } + if (getTickMillis() < 50 || getTPS() < tps) { + skip = 10; + skipTick = tick; + } + return true; + } + + private boolean runIfAbove(Runnable run, double tps) { + if (isAbove(tps)) { + run.run(); + return true; + } + return false; + } } diff --git a/core/src/main/java/com/boydti/fawe/util/SetQueue.java b/core/src/main/java/com/boydti/fawe/util/SetQueue.java index 8c384f1e..ba8413db 100644 --- a/core/src/main/java/com/boydti/fawe/util/SetQueue.java +++ b/core/src/main/java/com/boydti/fawe/util/SetQueue.java @@ -6,9 +6,9 @@ import com.boydti.fawe.object.FaweChunk; import com.boydti.fawe.object.FaweQueue; import com.boydti.fawe.object.RunnableVal2; import java.util.ArrayList; +import java.util.Collection; import java.util.ConcurrentModificationException; import java.util.Iterator; -import java.util.List; import java.util.concurrent.ConcurrentLinkedDeque; public class SetQueue { @@ -22,8 +22,9 @@ public class SetQueue { INACTIVE, ACTIVE, NONE; } - public final ConcurrentLinkedDeque activeQueues; - public final ConcurrentLinkedDeque inactiveQueues; + private final ConcurrentLinkedDeque activeQueues; + private final ConcurrentLinkedDeque inactiveQueues; + private final ConcurrentLinkedDeque tasks; /** * Used to calculate elapsed time in milliseconds and ensure block placement doesn't lag the server @@ -35,7 +36,7 @@ public class SetQueue { /** * A queue of tasks that will run when the queue is empty */ - private final ConcurrentLinkedDeque runnables = new ConcurrentLinkedDeque<>(); + private final ConcurrentLinkedDeque emptyTasks = new ConcurrentLinkedDeque<>(); private final RunnableVal2 SET_TASK = new RunnableVal2() { @Override @@ -45,7 +46,7 @@ public class SetQueue { if (current == null) { lastSuccess = last; if (inactiveQueues.size() == 0 && activeQueues.size() == 0) { - tasks(); + runEmptyTasks(); } return; } @@ -54,14 +55,18 @@ public class SetQueue { }; public SetQueue() { + tasks = new ConcurrentLinkedDeque<>(); activeQueues = new ConcurrentLinkedDeque(); inactiveQueues = new ConcurrentLinkedDeque<>(); TaskManager.IMP.repeat(new Runnable() { @Override public void run() { + while (!tasks.isEmpty() && Fawe.get().getTimer().isAbove(18.5)) { + Runnable task = tasks.poll(); + } if (inactiveQueues.isEmpty() && activeQueues.isEmpty()) { lastSuccess = System.currentTimeMillis(); - tasks(); + runEmptyTasks(); return; } if (!MemUtil.isMemoryFree()) { @@ -76,7 +81,7 @@ public class SetQueue { if (SetQueue.this.forceChunkSet()) { System.gc(); } else { - SetQueue.this.tasks(); + SetQueue.this.runEmptyTasks(); } return; } @@ -155,19 +160,19 @@ public class SetQueue { activeQueues.remove(queue); } - public List getAllQueues() { + public Collection getAllQueues() { ArrayList list = new ArrayList(activeQueues.size() + inactiveQueues.size()); list.addAll(inactiveQueues); list.addAll(activeQueues); return list; } - public List getActiveQueues() { - return new ArrayList<>(activeQueues); + public Collection getActiveQueues() { + return activeQueues; } - public List getInactiveQueues() { - return new ArrayList<>(inactiveQueues); + public Collection getInactiveQueues() { + return inactiveQueues; } public FaweQueue getNewQueue(String world, boolean fast, boolean autoqueue) { @@ -319,31 +324,44 @@ public class SetQueue { return next() != null; } - public boolean isDone() { + /** + * Is the this empty + * @return + */ + public boolean isEmpty() { return activeQueues.size() == 0 && inactiveQueues.size() == 0; } - public boolean addTask(final Runnable whenDone) { - if (this.isDone()) { + public void addTask(Runnable whenFree) { + tasks.add(whenFree); + } + + /** + * Add a task to run when it is empty + * @param whenDone + * @return + */ + public boolean addEmptyTask(final Runnable whenDone) { + if (this.isEmpty()) { // Run - this.tasks(); + this.runEmptyTasks(); if (whenDone != null) { whenDone.run(); } return true; } if (whenDone != null) { - this.runnables.add(whenDone); + this.emptyTasks.add(whenDone); } return false; } - public synchronized boolean tasks() { - if (this.runnables.isEmpty()) { + private synchronized boolean runEmptyTasks() { + if (this.emptyTasks.isEmpty()) { return false; } - final ConcurrentLinkedDeque tmp = new ConcurrentLinkedDeque<>(this.runnables); - this.runnables.clear(); + final ConcurrentLinkedDeque tmp = new ConcurrentLinkedDeque<>(this.emptyTasks); + this.emptyTasks.clear(); for (final Runnable runnable : tmp) { runnable.run(); } diff --git a/core/src/main/java/com/boydti/fawe/util/TaskManager.java b/core/src/main/java/com/boydti/fawe/util/TaskManager.java index 92048d32..166e0f9d 100644 --- a/core/src/main/java/com/boydti/fawe/util/TaskManager.java +++ b/core/src/main/java/com/boydti/fawe/util/TaskManager.java @@ -2,6 +2,7 @@ package com.boydti.fawe.util; import com.boydti.fawe.Fawe; import com.boydti.fawe.config.Settings; +import com.boydti.fawe.object.FaweQueue; import com.boydti.fawe.object.RunnableVal; import java.util.Collection; import java.util.Iterator; @@ -98,6 +99,21 @@ public abstract class TaskManager { } + /** + * Disable async catching for a specific task + * @param queue + * @param run + */ + public void runUnsafe(FaweQueue queue, Runnable run) { + queue.startSet(true); + try { + run.run(); + } catch (Throwable e) { + e.printStackTrace(); + } + queue.endSet(true); + } + /** * Run a task on the current thread or asynchronously * - If it's already the main thread, it will jst call run() @@ -117,7 +133,7 @@ public abstract class TaskManager { * @param r * @param async */ - public void taskSyncNow(final Runnable r, boolean async) { + public void taskNowMain(final Runnable r, boolean async) { if (async) { async(r); } else if (r != null && Thread.currentThread() == Fawe.get().getMainThread()){ @@ -132,7 +148,7 @@ public abstract class TaskManager { * @param r * @param async */ - public void taskSyncSoon(final Runnable r, boolean async) { + public void taskSoonMain(final Runnable r, boolean async) { if (async) { async(r); } else { @@ -220,6 +236,54 @@ public abstract class TaskManager { } } + /** + * Run a task on the main thread when the TPS is high enough, and wait for execution to finish:
+ * - Useful if you need to access something from the Bukkit API from another thread
+ * - Usualy wait time is around 25ms
+ * @param function + * @param timeout - How long to wait for execution + * @param + * @return + */ + public T syncWhenFree(final RunnableVal function, int timeout) { + if (Fawe.get().getMainThread() == Thread.currentThread()) { + function.run(); + return function.value; + } + final AtomicBoolean running = new AtomicBoolean(true); + RunnableVal run = new RunnableVal() { + @Override + public void run(RuntimeException value) { + try { + function.run(); + } catch (RuntimeException e) { + this.value = e; + } catch (Throwable neverHappens) { + MainUtil.handleError(neverHappens); + } finally { + running.set(false); + } + synchronized (function) { + function.notifyAll(); + } + } + }; + SetQueue.IMP.addTask(run); + try { + synchronized (function) { + while (running.get()) { + function.wait(timeout); + } + } + } catch (InterruptedException e) { + MainUtil.handleError(e); + } + if (run.value != null) { + throw run.value; + } + return function.value; + } + /** * Quickly run a task on the main thread, and wait for execution to finish:
* - Useful if you need to access something from the Bukkit API from another thread
diff --git a/core/src/main/java/com/boydti/fawe/util/WEManager.java b/core/src/main/java/com/boydti/fawe/util/WEManager.java index 1004a06d..9c0de58d 100644 --- a/core/src/main/java/com/boydti/fawe/util/WEManager.java +++ b/core/src/main/java/com/boydti/fawe/util/WEManager.java @@ -64,7 +64,8 @@ public class WEManager { * @return */ public RegionWrapper[] getMask(final FawePlayer player) { - HashSet mask = TaskManager.IMP.sync(new RunnableVal>() { +// HashSet mask = TaskManager.IMP.sync(new RunnableVal>() { + HashSet mask = new RunnableVal>() { @Override public void run(HashSet ignore) { this.value = new HashSet<>(); @@ -87,7 +88,8 @@ public class WEManager { } } } - }, 1000); +// }, 1000); + }.runAndGet(); if (mask == null || mask.isEmpty()) { mask = player.getMeta("lastMask"); if (mask == null) { @@ -130,7 +132,7 @@ public class WEManager { TaskManager.IMP.later(new Runnable() { @Override public void run() { - SetQueue.IMP.addTask(new Runnable() { + SetQueue.IMP.addEmptyTask(new Runnable() { @Override public void run() { if ((System.currentTimeMillis() - start) > 1000) { @@ -150,7 +152,7 @@ public class WEManager { } public boolean delay(final FawePlayer player, final Runnable whenDone, final boolean delayed, final boolean onlyDelayedExecution) { - final boolean free = SetQueue.IMP.addTask(null); + final boolean free = SetQueue.IMP.addEmptyTask(null); if (free) { if (delayed) { if (whenDone != null) { @@ -167,7 +169,7 @@ public class WEManager { if (!delayed && (player != null)) { BBC.WORLDEDIT_DELAYED.send(player); } - SetQueue.IMP.addTask(whenDone); + SetQueue.IMP.addEmptyTask(whenDone); } return true; } diff --git a/core/src/main/java/com/boydti/fawe/wrappers/FakePlayer.java b/core/src/main/java/com/boydti/fawe/wrappers/FakePlayer.java index 59178f65..f2858932 100644 --- a/core/src/main/java/com/boydti/fawe/wrappers/FakePlayer.java +++ b/core/src/main/java/com/boydti/fawe/wrappers/FakePlayer.java @@ -11,6 +11,7 @@ import com.sk89q.worldedit.WorldVector; import com.sk89q.worldedit.entity.BaseEntity; import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.event.platform.CommandEvent; +import com.sk89q.worldedit.extension.platform.Actor; import com.sk89q.worldedit.extension.platform.CommandManager; import com.sk89q.worldedit.extent.inventory.BlockBag; import com.sk89q.worldedit.session.SessionKey; @@ -28,77 +29,90 @@ public class FakePlayer extends LocalPlayer { public static FakePlayer getConsole() { if (CONSOLE == null) { - CONSOLE = new FakePlayer("#CONSOLE", null); + CONSOLE = new FakePlayer("#CONSOLE", null, null) { + @Override + public boolean hasPermission(String permission) { + return true; + } + }; } return CONSOLE; } + private final Actor parent; private final String name; private final UUID uuid; private World world; private Location pos; - public FakePlayer(String name, UUID uuid) { + public FakePlayer(String name, UUID uuid, Actor parent) { this.name = name; this.uuid = uuid == null ? UUID.nameUUIDFromBytes(("OfflinePlayer:" + name).getBytes(Charsets.UTF_8)) : uuid; this.world = WorldEdit.getInstance().getServer().getWorlds().get(0); this.pos = new Location(world, 0, 0, 0); + this.parent = parent; } - private FawePlayer fp; + private FawePlayer fp = null; public FawePlayer toFawePlayer() { - if (fp == null) { - fp = new FawePlayer(this) { - @Override - public void sendTitle(String head, String sub) {} - - @Override - public void resetTitle() {} - - @Override - public String getName() { - return name; - } - - @Override - public UUID getUUID() { - return uuid; - } - - @Override - public boolean hasPermission(String perm) { - return FakePlayer.this.hasPermission(perm) || (Boolean) getMeta("perm." + perm, false); - } - - @Override - public void setPermission(String perm, boolean flag) { - setMeta("perm." + perm, true); - } - - @Override - public void sendMessage(String message) { - FakePlayer.this.print(message); - } - - @Override - public void executeCommand(String substring) { - CommandManager.getInstance().handleCommand(new CommandEvent(FakePlayer.this, substring)); - } - - @Override - public FaweLocation getLocation() { - Location loc = FakePlayer.this.getLocation(); - return new FaweLocation(loc.getExtent().toString(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); - } - - @Override - public Player getPlayer() { - return FakePlayer.this; - } - }; + if (fp != null) { + Fawe.get().register(fp); + return fp; } - return fp; + FawePlayer existing = Fawe.get().getCachedPlayer(getName()); + if (existing != null) { + return fp = existing; + } + final Actor actor = this; + return fp = new FawePlayer(this) { + @Override + public void sendTitle(String head, String sub) {} + + @Override + public void resetTitle() {} + + @Override + public String getName() { + return actor.getName(); + } + + @Override + public UUID getUUID() { + return actor.getUniqueId(); + } + + @Override + public boolean hasPermission(String perm) { + return actor.hasPermission(perm) || (Boolean) getMeta("perm." + perm, false); + } + + @Override + public void setPermission(String perm, boolean flag) { + setMeta("perm." + perm, true); + } + + @Override + public void sendMessage(String message) { + actor.print(message); + } + + @Override + public void executeCommand(String substring) { + CommandManager.getInstance().handleCommand(new CommandEvent(actor, substring)); + } + + @Override + public FaweLocation getLocation() { + Location loc = FakePlayer.this.getLocation(); + return new FaweLocation(loc.getExtent().toString(), loc.getBlockX(), loc.getBlockY(), loc.getBlockZ()); + } + + @Override + public Player getPlayer() { + return FakePlayer.this; + } + }; } @Override @@ -152,26 +166,45 @@ public class FakePlayer extends LocalPlayer { @Override public String getName() { + if (parent != null) { + return parent.getName(); + } return name; } @Override public void printRaw(String msg) { + if (parent != null) { + parent.printRaw(msg); + return; + } Fawe.debug(msg); } @Override public void printDebug(String msg) { + if (parent != null) { + parent.printDebug(msg); + return; + } Fawe.debug(msg); } @Override public void print(String msg) { + if (parent != null) { + parent.print(msg); + return; + } Fawe.debug(msg); } @Override public void printError(String msg) { + if (parent != null) { + parent.printError(msg); + return; + } Fawe.debug(msg); } @@ -179,6 +212,9 @@ public class FakePlayer extends LocalPlayer { @Override public SessionKey getSessionKey() { + if (parent != null) { + return parent.getSessionKey(); + } if (key == null) { key = new FakeSessionKey(uuid, name); } @@ -193,16 +229,25 @@ public class FakePlayer extends LocalPlayer { @Override public UUID getUniqueId() { + if (parent != null) { + return parent.getUniqueId(); + } return uuid; } @Override public String[] getGroups() { + if (parent != null) { + return parent.getGroups(); + } return new String[0]; } @Override public boolean hasPermission(String permission) { + if (parent != null) { + return parent.hasPermission(permission); + } return true; } diff --git a/core/src/main/java/com/sk89q/worldedit/EditSession.java b/core/src/main/java/com/sk89q/worldedit/EditSession.java index cb3f0046..7fb37728 100644 --- a/core/src/main/java/com/sk89q/worldedit/EditSession.java +++ b/core/src/main/java/com/sk89q/worldedit/EditSession.java @@ -23,7 +23,7 @@ import com.boydti.fawe.Fawe; import com.boydti.fawe.FaweCache; import com.boydti.fawe.config.BBC; import com.boydti.fawe.config.Settings; -import com.boydti.fawe.object.EditSessionWrapper; +import com.boydti.fawe.logging.LoggingChangeSet; import com.boydti.fawe.object.FaweLimit; import com.boydti.fawe.object.FawePlayer; import com.boydti.fawe.object.FaweQueue; @@ -54,6 +54,7 @@ import com.sk89q.worldedit.blocks.BlockType; import com.sk89q.worldedit.entity.BaseEntity; import com.sk89q.worldedit.entity.Entity; import com.sk89q.worldedit.event.extent.EditSessionEvent; +import com.sk89q.worldedit.extent.AbstractDelegateExtent; import com.sk89q.worldedit.extent.ChangeSetExtent; import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.extent.MaskingExtent; @@ -247,12 +248,12 @@ public class EditSession implements Extent { this.blockBag = blockBag; this.limit = limit; this.queue = SetQueue.IMP.getNewQueue(Fawe.imp().getWorldName(world), fastmode, autoQueue); + queue.addEditSession(this); this.bypassAll = wrapExtent(new FastWorldEditExtent(world, queue), bus, event, Stage.BEFORE_CHANGE); this.bypassHistory = (this.extent = wrapExtent(bypassAll, bus, event, Stage.BEFORE_REORDER)); if (!fastmode && !(changeSet instanceof NullChangeSet)) { - if (player != null) { - EditSessionWrapper wrapper = Fawe.imp().getEditSessionWrapper(this); - changeSet = wrapper.wrapChangeSet(changeSet, player); + if (player != null && Fawe.imp().getBlocksHubApi() != null) { + changeSet = LoggingChangeSet.wrap(player, changeSet); } if (combineStages) { changeTask = changeSet; @@ -324,7 +325,9 @@ public class EditSession implements Extent { NullExtent nullExtent = new NullExtent(world, BBC.WORLDEDIT_CANCEL_REASON_MANUAL); while (traverser != null) { ExtentTraverser next = traverser.next(); - traverser.setNext(nullExtent); + if (traverser.get() instanceof AbstractDelegateExtent) { + traverser.setNext(nullExtent); + } traverser = next; } bypassHistory = nullExtent; diff --git a/core/src/main/java/com/sk89q/worldedit/LocalSession.java b/core/src/main/java/com/sk89q/worldedit/LocalSession.java index bca3666d..8df11a51 100644 --- a/core/src/main/java/com/sk89q/worldedit/LocalSession.java +++ b/core/src/main/java/com/sk89q/worldedit/LocalSession.java @@ -228,7 +228,7 @@ public class LocalSession { history.add(0, editSession); historyPointer++; } - while ((history.size() > MAX_HISTORY_SIZE || historySize < limitMb) && history.size() > 1) { + while ((history.size() > MAX_HISTORY_SIZE || (historySize >> 20) > limitMb) && history.size() > 1) { EditSession item = history.get(0); historySize -= MainUtil.getSizeInMemory(item.getChangeSet()); history.remove(0); diff --git a/core/src/main/java/com/sk89q/worldedit/command/NavigationCommands.java b/core/src/main/java/com/sk89q/worldedit/command/NavigationCommands.java index 9bd6aee3..d4e6f67e 100644 --- a/core/src/main/java/com/sk89q/worldedit/command/NavigationCommands.java +++ b/core/src/main/java/com/sk89q/worldedit/command/NavigationCommands.java @@ -19,7 +19,9 @@ package com.sk89q.worldedit.command; +import com.boydti.fawe.FaweAPI; import com.boydti.fawe.config.BBC; +import com.intellectualcrafters.plot.util.MathMan; import com.sk89q.minecraft.util.commands.Command; import com.sk89q.minecraft.util.commands.CommandContext; import com.sk89q.minecraft.util.commands.CommandPermissions; @@ -27,11 +29,13 @@ import com.sk89q.minecraft.util.commands.Logging; import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.LocalConfiguration; import com.sk89q.worldedit.LocalSession; +import com.sk89q.worldedit.LocalWorld; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.WorldVector; import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.util.command.parametric.Optional; +import com.sk89q.worldedit.world.World; import static com.google.common.base.Preconditions.checkNotNull; @@ -157,7 +161,7 @@ public class NavigationCommands { } @Command( - aliases = { "jumpto", "j" }, + aliases = { "jumpto [world,x,y,z]", "j" }, usage = "", desc = "Teleport to a location", min = 0, @@ -165,8 +169,20 @@ public class NavigationCommands { ) @CommandPermissions("worldedit.navigation.jumpto.command") public void jumpTo(Player player, LocalSession session, EditSession editSession, CommandContext args) throws WorldEditException { - - WorldVector pos = player.getSolidBlockTrace(300); + WorldVector pos; + if (args.argsLength() == 1) { + String arg = args.getString(0); + String[] split = arg.split(","); + World world = FaweAPI.getWorld(split[0]); + if (world != null && split.length == 4 && MathMan.isInteger(split[1]) && MathMan.isInteger(split[2]) && MathMan.isInteger(split[3])) { + pos = new WorldVector((LocalWorld) world, Integer.parseInt(split[1]), Integer.parseInt(split[2]), Integer.parseInt(split[3])); + } else { + BBC.SELECTOR_INVALID_COORDINATES.send(player, args.getString(0)); + return; + } + } else { + pos = player.getSolidBlockTrace(300); + } if (pos != null) { player.findFreePosition(pos); BBC.POOF.send(player); diff --git a/core/src/main/java/com/sk89q/worldedit/command/SelectionCommands.java b/core/src/main/java/com/sk89q/worldedit/command/SelectionCommands.java index ddfdfc23..ce3149e2 100644 --- a/core/src/main/java/com/sk89q/worldedit/command/SelectionCommands.java +++ b/core/src/main/java/com/sk89q/worldedit/command/SelectionCommands.java @@ -93,7 +93,7 @@ public class SelectionCommands { String[] coords = args.getString(0).split(","); pos = new Vector(Integer.parseInt(coords[0]), Integer.parseInt(coords[1]), Integer.parseInt(coords[2])); } else { - player.printError("Invalid coordinates " + args.getString(0)); + BBC.SELECTOR_INVALID_COORDINATES.send(player, args.getString(0)); return; } } else { @@ -101,7 +101,7 @@ public class SelectionCommands { } if (!session.getRegionSelector(player.getWorld()).selectPrimary(pos, ActorSelectorLimits.forActor(player))) { - player.printError("Position already set."); + BBC.SELECTOR_ALREADY_SET.send(player); return; } @@ -128,7 +128,7 @@ public class SelectionCommands { Integer.parseInt(coords[1]), Integer.parseInt(coords[2])); } else { - player.printError("Invalid coordinates " + args.getString(0)); + BBC.SELECTOR_INVALID_COORDINATES.send(player, args.getString(0)); return; } } else { @@ -136,7 +136,7 @@ public class SelectionCommands { } if (!session.getRegionSelector(player.getWorld()).selectSecondary(pos, ActorSelectorLimits.forActor(player))) { - player.printError("Position already set."); + BBC.SELECTOR_ALREADY_SET.send(player); return; } @@ -158,7 +158,7 @@ public class SelectionCommands { if (pos != null) { if (!session.getRegionSelector(player.getWorld()).selectPrimary(pos, ActorSelectorLimits.forActor(player))) { - player.printError("Position already set."); + BBC.SELECTOR_ALREADY_SET.send(player); return; } @@ -183,7 +183,7 @@ public class SelectionCommands { if (pos != null) { if (!session.getRegionSelector(player.getWorld()).selectSecondary(pos, ActorSelectorLimits.forActor(player))) { - player.printError("Position already set."); + BBC.SELECTOR_ALREADY_SET.send(player); return; } @@ -232,7 +232,7 @@ public class SelectionCommands { // coords specified String[] coords = args.getString(0).split(","); if (coords.length != 2) { - throw new InsufficientArgumentsException("Invalid coordinates specified."); + BBC.SELECTOR_INVALID_COORDINATES.send(player, args.getString(0)); } int x = Integer.parseInt(coords[0]); int z = Integer.parseInt(coords[1]); diff --git a/core/src/main/java/com/sk89q/worldedit/extension/platform/CommandManager.java b/core/src/main/java/com/sk89q/worldedit/extension/platform/CommandManager.java index adb5f754..cf26f322 100644 --- a/core/src/main/java/com/sk89q/worldedit/extension/platform/CommandManager.java +++ b/core/src/main/java/com/sk89q/worldedit/extension/platform/CommandManager.java @@ -26,6 +26,7 @@ import com.boydti.fawe.object.changeset.FaweStreamChangeSet; import com.boydti.fawe.object.exception.FaweException; import com.boydti.fawe.util.MainUtil; import com.boydti.fawe.util.TaskManager; +import com.boydti.fawe.wrappers.FakePlayer; import com.boydti.fawe.wrappers.PlayerWrapper; import com.google.common.base.Joiner; import com.sk89q.minecraft.util.commands.CommandException; @@ -233,17 +234,18 @@ public final class CommandManager { TaskManager.IMP.taskNow(new Runnable() { @Override public void run() { - final Actor actor = platformManager.createProxyActor(event.getActor()); - String[] split = commandDetection(event.getArguments().split(" ")); - + Actor actor = platformManager.createProxyActor(event.getActor()); + String args = event.getArguments(); + String[] split = commandDetection(args.split(" ")); // No command found! if (!dispatcher.contains(split[0])) { return; } - + if (!actor.isPlayer()) { + actor = new FakePlayer(actor.getName(), actor.getUniqueId(), actor); + } final LocalSession session = worldEdit.getSessionManager().get(actor); LocalConfiguration config = worldEdit.getConfiguration(); - CommandLocals locals = new CommandLocals(); final FawePlayer fp = FawePlayer.wrap(actor); if (fp != null) { @@ -252,11 +254,11 @@ public final class CommandManager { return; } fp.setMeta("fawe_action", true); - locals.put(Actor.class, PlayerWrapper.wrap((Player) actor)); + locals.put(Actor.class, actor instanceof Player ? new PlayerWrapper((Player) actor) : actor); } else { locals.put(Actor.class, actor); } - locals.put("arguments", event.getArguments()); + locals.put("arguments", args); final long start = System.currentTimeMillis(); try { // This is a bit of a hack, since the call method can only throw CommandExceptions diff --git a/forge1710/src/main/java/com/boydti/fawe/forge/FaweForge.java b/forge1710/src/main/java/com/boydti/fawe/forge/FaweForge.java index c1cb72de..0d5b4057 100644 --- a/forge1710/src/main/java/com/boydti/fawe/forge/FaweForge.java +++ b/forge1710/src/main/java/com/boydti/fawe/forge/FaweForge.java @@ -4,7 +4,6 @@ package com.boydti.fawe.forge; import com.boydti.fawe.Fawe; import com.boydti.fawe.IFawe; import com.boydti.fawe.forge.v0.ForgeQueue_All; -import com.boydti.fawe.object.EditSessionWrapper; import com.boydti.fawe.object.FaweCommand; import com.boydti.fawe.object.FawePlayer; import com.boydti.fawe.object.FaweQueue; @@ -12,7 +11,6 @@ import com.boydti.fawe.regions.FaweMaskManager; import com.boydti.fawe.util.MainUtil; import com.boydti.fawe.util.TaskManager; import com.boydti.fawe.wrappers.WorldWrapper; -import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.forge.ForgeWorld; import com.sk89q.worldedit.world.World; import java.io.File; @@ -111,11 +109,6 @@ public class FaweForge implements IFawe { return new ForgeQueue_All(world); } - @Override - public EditSessionWrapper getEditSessionWrapper(EditSession session) { - return new EditSessionWrapper(session); - } - @Override public Collection getMaskManagers() { return new ArrayList<>(); @@ -150,4 +143,9 @@ public class FaweForge implements IFawe { public String getName(UUID uuid) { return uuid.toString(); } + + @Override + public Object getBlocksHubApi() { + return null; + } } diff --git a/forge189/src/main/java/com/boydti/fawe/forge/FaweForge.java b/forge189/src/main/java/com/boydti/fawe/forge/FaweForge.java index cfc62e46..7487561b 100644 --- a/forge189/src/main/java/com/boydti/fawe/forge/FaweForge.java +++ b/forge189/src/main/java/com/boydti/fawe/forge/FaweForge.java @@ -4,7 +4,6 @@ package com.boydti.fawe.forge; import com.boydti.fawe.Fawe; import com.boydti.fawe.IFawe; import com.boydti.fawe.forge.v0.ForgeQueue_All; -import com.boydti.fawe.object.EditSessionWrapper; import com.boydti.fawe.object.FaweCommand; import com.boydti.fawe.object.FawePlayer; import com.boydti.fawe.regions.FaweMaskManager; @@ -13,7 +12,6 @@ import com.boydti.fawe.util.MainUtil; import com.boydti.fawe.util.TaskManager; import com.boydti.fawe.wrappers.WorldWrapper; import com.mojang.authlib.GameProfile; -import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.forge.ForgeWorld; import com.sk89q.worldedit.world.World; import java.io.File; @@ -25,6 +23,7 @@ import net.minecraft.command.ServerCommandManager; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.server.MinecraftServer; import org.apache.logging.log4j.Logger; +import org.primesoft.blockshub.IBlocksHubApi; public class FaweForge implements IFawe { @@ -114,11 +113,6 @@ public class FaweForge implements IFawe { return new ForgeQueue_All(world); } - @Override - public EditSessionWrapper getEditSessionWrapper(EditSession session) { - return new EditSessionWrapper(session); - } - @Override public Collection getMaskManagers() { return new ArrayList<>(); @@ -159,4 +153,9 @@ public class FaweForge implements IFawe { return null; } } + + @Override + public Object getBlocksHubApi() { + return null; + } } diff --git a/pom.xml b/pom.xml index d20eef38..5a270187 100644 --- a/pom.xml +++ b/pom.xml @@ -173,9 +173,9 @@ 1.9.2 - org.PrimeSoft + org.primesoft blockshub - 1.2 + 2.0 com.massivecraft diff --git a/sponge/src/main/java/com/boydti/fawe/sponge/FaweSponge.java b/sponge/src/main/java/com/boydti/fawe/sponge/FaweSponge.java index 46c17b35..bfa5393e 100644 --- a/sponge/src/main/java/com/boydti/fawe/sponge/FaweSponge.java +++ b/sponge/src/main/java/com/boydti/fawe/sponge/FaweSponge.java @@ -5,16 +5,14 @@ import com.boydti.fawe.IFawe; import com.boydti.fawe.SpongeCommand; import com.boydti.fawe.config.BBC; import com.boydti.fawe.config.Settings; -import com.boydti.fawe.object.EditSessionWrapper; import com.boydti.fawe.object.FaweCommand; import com.boydti.fawe.object.FawePlayer; +import com.boydti.fawe.object.FaweQueue; import com.boydti.fawe.regions.FaweMaskManager; import com.boydti.fawe.sponge.v1_8.SpongeQueue_1_8; import com.boydti.fawe.sponge.v1_8.SpongeQueue_ALL; -import com.boydti.fawe.object.FaweQueue; import com.boydti.fawe.util.MainUtil; import com.boydti.fawe.util.TaskManager; -import com.sk89q.worldedit.EditSession; import com.sk89q.worldedit.forge.ForgeWorldEdit; import com.sk89q.worldedit.world.World; import java.io.File; @@ -126,11 +124,6 @@ public class FaweSponge implements IFawe { return world.getName(); } - @Override - public EditSessionWrapper getEditSessionWrapper(EditSession session) { - return new EditSessionWrapper(session); - } - @Override public Collection getMaskManagers() { return new ArrayList<>(); @@ -173,4 +166,9 @@ public class FaweSponge implements IFawe { return null; } } + + @Override + public Object getBlocksHubApi() { + return null; + } }