From a23a4e54963c962669196e39ac6cb7c069896c84 Mon Sep 17 00:00:00 2001 From: MattBDev <4009945+MattBDev@users.noreply.github.com> Date: Mon, 11 Nov 2019 16:02:28 -0500 Subject: [PATCH] misc changes. --- .../com/boydti/fawe/bukkit/FaweBukkit.java | 35 +- .../bukkit/adapter/BukkitQueueHandler.java | 8 +- .../adapter/mc1_14/BukkitGetBlocks_1_14.java | 25 +- .../adapter/mc1_14/Spigot_v1_14_R4.java | 38 ++- .../fawe/bukkit/filter/WorldGuardFilter.java | 4 +- .../fawe/bukkit/listener/ChunkListener.java | 10 +- .../worldedit/bukkit/WorldEditPlugin.java | 4 +- .../src/main/java/com/boydti/fawe/Fawe.java | 13 +- .../main/java/com/boydti/fawe/FaweCache.java | 12 +- .../java/com/boydti/fawe/beta/Filter.java | 3 +- .../com/boydti/fawe/beta/IBatchProcessor.java | 16 +- .../java/com/boydti/fawe/beta/IChunk.java | 8 +- .../com/boydti/fawe/beta/IChunkCache.java | 4 +- .../java/com/boydti/fawe/beta/IChunkGet.java | 1 + .../com/boydti/fawe/beta/IQueueExtent.java | 13 +- .../java/com/boydti/fawe/beta/Trimable.java | 6 +- .../implementation/chunk/ChunkHolder.java | 4 +- .../beta/implementation/chunk/NullChunk.java | 14 +- .../processors/LimitExtent.java | 12 + .../queue/SingleThreadQueueExtent.java | 16 +- .../boydti/fawe/command/AnvilCommands.java | 8 +- .../com/boydti/fawe/command/CFICommands.java | 301 ++++++++++-------- .../main/java/com/boydti/fawe/config/BBC.java | 9 +- .../java/com/boydti/fawe/config/Config.java | 12 +- .../com/boydti/fawe/database/DBHandler.java | 13 +- .../fawe/database/RollbackDatabase.java | 110 +++---- .../fawe/jnbt/CorruptSchematicStreamer.java | 10 +- .../com/boydti/fawe/jnbt/anvil/MCAChunk.java | 6 + .../com/boydti/fawe/jnbt/anvil/MCAFile.java | 10 +- .../object/brush/sweep/ClipboardSpline.java | 8 +- .../fawe/object/brush/sweep/Spline.java | 8 +- .../cfi/HeightMapMCAGenerator.java | 4 +- .../boydti/fawe/object/change/CFIChange.java | 9 +- .../object/change/MutableEntityChange.java | 8 +- .../fawe/object/changeset/FaweChangeSet.java | 4 +- .../object/io/BufferedRandomAccessFile.java | 2 +- .../object/schematic/MinecraftStructure.java | 6 +- .../plotquared/PlotSquaredFeature.java | 67 ++-- .../java/com/boydti/fawe/util/BrushCache.java | 7 +- .../fawe/util/DocumentationPrinter.java | 2 +- .../boydti/fawe/util/EditSessionBuilder.java | 18 +- .../main/java/com/boydti/fawe/util/Jars.java | 45 +-- .../java/com/boydti/fawe/util/MainUtil.java | 34 +- .../com/boydti/fawe/util/TaskManager.java | 27 +- .../com/boydti/fawe/util/TextureUtil.java | 8 +- .../com/boydti/fawe/util/image/ImageUtil.java | 6 +- .../boydti/fawe/util/task/TaskBuilder.java | 4 +- .../main/java/com/sk89q/jnbt/CompoundTag.java | 6 +- .../java/com/sk89q/jnbt/NBTConstants.java | 2 - .../util/commands/CommandException.java | 2 +- .../java/com/sk89q/util/yaml/YAMLNode.java | 82 ++--- .../java/com/sk89q/worldedit/EditSession.java | 9 +- .../com/sk89q/worldedit/LocalSession.java | 5 +- .../worldedit/command/BrushCommands.java | 77 ++--- .../worldedit/command/GeneralCommands.java | 8 +- .../worldedit/command/GenerationCommands.java | 18 +- .../worldedit/command/PatternCommands.java | 24 +- .../worldedit/command/UtilityCommands.java | 4 +- .../worldedit/command/tool/BrushTool.java | 5 +- .../com/sk89q/worldedit/entity/Player.java | 12 +- .../extension/platform/binding/Bindings.java | 5 +- .../extent/AbstractDelegateExtent.java | 12 +- .../worldedit/extent/PassthroughExtent.java | 4 + .../extent/clipboard/io/ClipboardFormat.java | 4 +- .../extent/clipboard/io/ClipboardReader.java | 10 +- .../extent/clipboard/io/SchematicReader.java | 33 +- .../clipboard/io/SpongeSchematicReader.java | 2 +- .../function/mask/MaskIntersection.java | 4 +- .../sk89q/worldedit/math/geom/Polygons.java | 8 +- .../worldedit/registry/state/PropertyKey.java | 11 +- .../worldedit/world/block/BlockState.java | 10 +- 71 files changed, 676 insertions(+), 673 deletions(-) diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java index 43a019f8c..0190fb6aa 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/FaweBukkit.java @@ -2,9 +2,9 @@ package com.boydti.fawe.bukkit; import com.boydti.fawe.Fawe; import com.boydti.fawe.IFawe; -import com.boydti.fawe.beta.implementation.queue.QueueHandler; import com.boydti.fawe.beta.implementation.cache.preloader.AsyncPreloader; import com.boydti.fawe.beta.implementation.cache.preloader.Preloader; +import com.boydti.fawe.beta.implementation.queue.QueueHandler; import com.boydti.fawe.bukkit.adapter.BukkitQueueHandler; import com.boydti.fawe.bukkit.listener.BrushListener; import com.boydti.fawe.bukkit.listener.BukkitImageListener; @@ -54,9 +54,13 @@ import org.bukkit.event.world.WorldLoadEvent; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class FaweBukkit implements IFawe, Listener { + private static final Logger log = LoggerFactory.getLogger(FaweBukkit.class); + private final Plugin plugin; private VaultUtil vault; private ItemUtil itemUtil; @@ -78,9 +82,7 @@ public class FaweBukkit implements IFawe, Listener { try { new BrushListener(plugin); } catch (Throwable e) { - debug("====== BRUSH LISTENER FAILED ======"); - e.printStackTrace(); - debug("==================================="); + log.debug("Brush Listener Failed", e); } if (PaperLib.isPaper() && Settings.IMP.EXPERIMENTAL.DYNAMIC_CHUNK_RENDERING > 1) { new RenderListener(plugin); @@ -220,9 +222,7 @@ public class FaweBukkit implements IFawe, Listener { this.itemUtil = tmp = new ItemUtil(); } catch (Throwable e) { Settings.IMP.EXPERIMENTAL.PERSISTENT_BRUSHES = false; - debug("===== PERSISTENT BRUSH FAILED ====="); - e.printStackTrace(); - debug("==================================="); + log.debug("Persistent Brushes Failed", e); } } return tmp; @@ -230,13 +230,12 @@ public class FaweBukkit implements IFawe, Listener { /** * Vault isn't required, but used for setting player permissions (WorldEdit bypass) - * @return */ @Override public void setupVault() { try { this.vault = new VaultUtil(); - } catch (final Throwable e) { + } catch (final Throwable ignored) { } } @@ -270,7 +269,7 @@ public class FaweBukkit implements IFawe, Listener { } /** - * A mask manager handles region restrictions e.g. PlotSquared plots / WorldGuard regions + * A mask manager handles region restrictions e.g., PlotSquared plots / WorldGuard regions */ @Override public Collection getMaskManagers() { @@ -280,7 +279,7 @@ public class FaweBukkit implements IFawe, Listener { try { managers.add(new Worldguard(worldguardPlugin)); managers.add(new WorldguardFlag(worldguardPlugin)); - Fawe.debug("Attempting to use plugin 'WorldGuard'"); + log.debug("Attempting to use plugin 'WorldGuard'"); } catch (Throwable ignored) { } } @@ -288,7 +287,7 @@ public class FaweBukkit implements IFawe, Listener { if (townyPlugin != null && townyPlugin.isEnabled()) { try { managers.add(new TownyFeature(townyPlugin)); - Fawe.debug("Attempting to use plugin 'Towny'"); + log.debug("Attempting to use plugin 'Towny'"); } catch (Throwable ignored) { } } @@ -296,11 +295,11 @@ public class FaweBukkit implements IFawe, Listener { if (factionsPlugin != null && factionsPlugin.isEnabled()) { try { managers.add(new FactionsFeature(factionsPlugin)); - Fawe.debug("Attempting to use plugin 'Factions'"); + log.debug("Attempting to use plugin 'Factions'"); } catch (Throwable e) { try { managers.add(new FactionsUUIDFeature(factionsPlugin, this)); - Fawe.debug("Attempting to use plugin 'FactionsUUID'"); + log.debug("Attempting to use plugin 'FactionsUUID'"); } catch (Throwable ignored) { } } @@ -309,7 +308,7 @@ public class FaweBukkit implements IFawe, Listener { if (residencePlugin != null && residencePlugin.isEnabled()) { try { managers.add(new ResidenceFeature(residencePlugin, this)); - Fawe.debug("Attempting to use plugin 'Residence'"); + log.debug("Attempting to use plugin 'Residence'"); } catch (Throwable ignored) { } } @@ -317,7 +316,7 @@ public class FaweBukkit implements IFawe, Listener { if (griefpreventionPlugin != null && griefpreventionPlugin.isEnabled()) { try { managers.add(new GriefPreventionFeature(griefpreventionPlugin)); - Fawe.debug("Attempting to use plugin 'GriefPrevention'"); + log.debug("Attempting to use plugin 'GriefPrevention'"); } catch (Throwable ignored) { } } @@ -326,7 +325,7 @@ public class FaweBukkit implements IFawe, Listener { if (aSkyBlock != null && aSkyBlock.isEnabled()) { try { managers.add(new ASkyBlockHook(aSkyBlock)); - Fawe.debug("Attempting to use plugin 'ASkyBlock' found. Using it now."); + log.debug("Attempting to use plugin 'ASkyBlock' found. Using it now."); } catch (Throwable e) { e.printStackTrace(); } @@ -334,7 +333,7 @@ public class FaweBukkit implements IFawe, Listener { if (Settings.IMP.EXPERIMENTAL.FREEBUILD) { try { managers.add(new FreeBuildRegion()); - Fawe.debug("Attempting to use plugin ''"); + log.debug("Attempting to use plugin ''"); } catch (Throwable ignored) { } } diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/BukkitQueueHandler.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/BukkitQueueHandler.java index f7ca9fd9c..eb0213c1d 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/BukkitQueueHandler.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/BukkitQueueHandler.java @@ -1,9 +1,9 @@ package com.boydti.fawe.bukkit.adapter; -import com.boydti.fawe.Fawe; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.beta.implementation.queue.QueueHandler; import com.boydti.fawe.bukkit.listener.ChunkListener; - import java.lang.reflect.Field; import java.lang.reflect.Method; @@ -40,7 +40,7 @@ public class BukkitQueueHandler extends QueueHandler { if (timingsEnabled) { if (alertTimingsChange) { alertTimingsChange = false; - Fawe.debug("Having `parallel-threads` > 1 interferes with the timings."); + getLogger(BukkitQueueHandler.class).debug("Having `parallel-threads` > 1 interferes with the timings."); } fieldTimingsEnabled.set(null, false); methodCheck.invoke(null); @@ -69,4 +69,4 @@ public class BukkitQueueHandler extends QueueHandler { } } } -} \ No newline at end of file +} diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/BukkitGetBlocks_1_14.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/BukkitGetBlocks_1_14.java index 742fa5a49..412e3dfca 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/BukkitGetBlocks_1_14.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/BukkitGetBlocks_1_14.java @@ -1,10 +1,12 @@ package com.boydti.fawe.bukkit.adapter.mc1_14; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.Fawe; import com.boydti.fawe.FaweCache; import com.boydti.fawe.beta.IChunkSet; -import com.boydti.fawe.beta.implementation.queue.QueueHandler; import com.boydti.fawe.beta.implementation.blocks.CharGetBlocks; +import com.boydti.fawe.beta.implementation.queue.QueueHandler; import com.boydti.fawe.bukkit.adapter.DelegateLock; import com.boydti.fawe.object.collection.AdaptedMap; import com.boydti.fawe.object.collection.BitArray4096; @@ -22,6 +24,19 @@ import com.sk89q.worldedit.internal.Constants; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.block.BlockTypes; +import java.util.AbstractSet; +import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.Callable; +import java.util.concurrent.Future; +import java.util.function.Function; +import javax.annotation.Nullable; import net.minecraft.server.v1_14_R1.BiomeBase; import net.minecraft.server.v1_14_R1.BlockPosition; import net.minecraft.server.v1_14_R1.Chunk; @@ -45,12 +60,6 @@ import org.bukkit.craftbukkit.v1_14_R1.block.CraftBlock; import org.bukkit.event.entity.CreatureSpawnEvent; import org.jetbrains.annotations.NotNull; -import javax.annotation.Nullable; -import java.util.*; -import java.util.concurrent.Callable; -import java.util.concurrent.Future; -import java.util.function.Function; - public class BukkitGetBlocks_1_14 extends CharGetBlocks { public ChunkSection[] sections; public Chunk nmsChunk; @@ -363,7 +372,7 @@ public class BukkitGetBlocks_1_14 extends CharGetBlocks { final ListTag posTag = (ListTag) entityTagMap.get("Pos"); final ListTag rotTag = (ListTag) entityTagMap.get("Rotation"); if (idTag == null || posTag == null || rotTag == null) { - Fawe.debug("Unknown entity tag: " + nativeTag); + getLogger(BukkitGetBlocks_1_14.class).debug("Unknown entity tag: " + nativeTag); continue; } final double x = posTag.getDouble(0); diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/Spigot_v1_14_R4.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/Spigot_v1_14_R4.java index 5efd3d5d2..d3546afbb 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/Spigot_v1_14_R4.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/mc1_14/Spigot_v1_14_R4.java @@ -19,7 +19,8 @@ package com.boydti.fawe.bukkit.adapter.mc1_14; -import com.boydti.fawe.Fawe; +import static com.google.common.base.Preconditions.checkNotNull; + import com.boydti.fawe.FaweCache; import com.boydti.fawe.beta.implementation.packet.ChunkPacket; import com.google.common.cache.CacheBuilder; @@ -67,6 +68,20 @@ import com.sk89q.worldedit.world.block.BlockTypes; import com.sk89q.worldedit.world.block.BlockTypesCache; import com.sk89q.worldedit.world.entity.EntityType; import com.sk89q.worldedit.world.registry.BlockMaterial; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.OptionalInt; +import java.util.Set; +import java.util.concurrent.ExecutionException; +import java.util.function.Supplier; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import javax.annotation.Nullable; import net.minecraft.server.v1_14_R1.Block; import net.minecraft.server.v1_14_R1.BlockPosition; import net.minecraft.server.v1_14_R1.BlockStateBoolean; @@ -130,23 +145,6 @@ import org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.annotation.Nullable; -import java.lang.reflect.Field; -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.Collections; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.OptionalInt; -import java.util.Set; -import java.util.concurrent.ExecutionException; -import java.util.function.Supplier; -import java.util.stream.Collectors; -import java.util.stream.Stream; - -import static com.google.common.base.Preconditions.checkNotNull; - public final class Spigot_v1_14_R4 extends CachedBukkitAdapter implements BukkitImplAdapter{ private final Logger logger = LoggerFactory.getLogger(getClass()); @@ -197,7 +195,7 @@ public final class Spigot_v1_14_R4 extends CachedBukkitAdapter implements Bukkit try { tileEntity.load(tag); } catch (Throwable e) { - Fawe.debug("Invalid tag " + tag + " | " + tileEntity); + //Fawe.debug("Invalid tag " + tag + " | " + tileEntity); } } @@ -419,7 +417,7 @@ public final class Spigot_v1_14_R4 extends CachedBukkitAdapter implements Bukkit worldServer.addEntity(createdEntity, SpawnReason.CUSTOM); return createdEntity.getBukkitEntity(); } else { - Fawe.debug("Invalid entity " + state.getType().getId()); + logger.debug("Invalid entity " + state.getType().getId()); return null; } } diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/filter/WorldGuardFilter.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/filter/WorldGuardFilter.java index 2a421b1c4..39234c0f9 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/filter/WorldGuardFilter.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/filter/WorldGuardFilter.java @@ -1,8 +1,8 @@ package com.boydti.fawe.bukkit.filter; import static com.google.common.base.Preconditions.checkNotNull; +import static org.slf4j.LoggerFactory.getLogger; -import com.boydti.fawe.Fawe; import com.boydti.fawe.FaweAPI; import com.boydti.fawe.object.RunnableVal; import com.boydti.fawe.regions.general.CuboidRegionFilter; @@ -34,7 +34,7 @@ public class WorldGuardFilter extends CuboidRegionFilter { BlockVector3 min = region.getMinimumPoint(); BlockVector3 max = region.getMaximumPoint(); if (max.getBlockX() - min.getBlockX() > 1024 || max.getBlockZ() - min.getBlockZ() > 1024) { - Fawe.debug("Large or complex region shapes cannot be optimized. Filtering will be slower"); + getLogger(WorldGuardFilter.class).debug("Large or complex region shapes cannot be optimized. Filtering will be slower"); large = true; break; } diff --git a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/listener/ChunkListener.java b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/listener/ChunkListener.java index 26e494ae1..0d37d4379 100644 --- a/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/listener/ChunkListener.java +++ b/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/listener/ChunkListener.java @@ -1,5 +1,7 @@ package com.boydti.fawe.bukkit.listener; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.Fawe; import com.boydti.fawe.bukkit.FaweBukkit; import com.boydti.fawe.config.Settings; @@ -61,7 +63,7 @@ public abstract class ChunkListener implements Listener { TaskManager.IMP.repeat(() -> { Location tmpLoc = lastCancelPos; if (tmpLoc != null) { - Fawe.debug("[FAWE `tick-limiter`] Detected and cancelled physics lag source at " + getLogger(ChunkListener.class).debug("[FAWE `tick-limiter`] Detected and cancelled physics lag source at " + tmpLoc); } rateLimit--; @@ -351,7 +353,6 @@ public abstract class ChunkListener implements Listener { lastCancelPos = block.getLocation(); } event.setCancelled(true); - return; } else { count[1] = 0; } @@ -391,7 +392,7 @@ public abstract class ChunkListener implements Listener { double vertical = Math.abs(velocity.getY()); if (Math.abs(velocity.getX()) > vertical || Math.abs(velocity.getZ()) > vertical) { - Fawe.debug( + getLogger(ChunkListener.class).warn( "[FAWE `tick-limiter`] Detected and cancelled rogue FireWork at " + ent.getLocation()); ent.remove(); @@ -422,11 +423,10 @@ public abstract class ChunkListener implements Listener { cancelNearby(cx, cz); if (rateLimit <= 0) { rateLimit = 20; - Fawe.debug( + getLogger(ChunkListener.class).warn( "[FAWE `tick-limiter`] Detected and cancelled item lag source at " + loc); } event.setCancelled(true); - return; } } } diff --git a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java index efdce1069..8562cf16f 100644 --- a/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java +++ b/worldedit-bukkit/src/main/java/com/sk89q/worldedit/bukkit/WorldEditPlugin.java @@ -125,9 +125,9 @@ public class WorldEditPlugin extends JavaPlugin { //implements TabCompleter @Override public boolean add(Plugin plugin) { if (plugin.getName().startsWith("AsyncWorldEdit")) { - Fawe.debug("Disabling `" + plugin.getName() + "` as it is incompatible"); + log.debug("Disabling `" + plugin.getName() + "` as it is incompatible"); } else if (plugin.getName().startsWith("BetterShutdown")) { - Fawe.debug("Disabling `" + plugin.getName() + "` as it is incompatible (Improperly shaded classes from com.sk89q.minecraft.util.commands)"); + log.debug("Disabling `" + plugin.getName() + "` as it is incompatible (Improperly shaded classes from com.sk89q.minecraft.util.commands)"); } else { return super.add(plugin); } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/Fawe.java b/worldedit-core/src/main/java/com/boydti/fawe/Fawe.java index 465e94a92..7f5697e6c 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/Fawe.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/Fawe.java @@ -36,6 +36,8 @@ import java.util.concurrent.TimeUnit; import javax.annotation.Nullable; import javax.management.InstanceAlreadyExistsException; import javax.management.NotificationEmitter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * [ WorldEdit action] @@ -62,19 +64,22 @@ import javax.management.NotificationEmitter; * - The chunk is modified directly rather than through the API * \ Removes some overhead, and means some processing can be done async * - Lighting updates are performed on the chunk level rather than for every block - * \ e.g. A blob of stone: only the visible blocks need to have the lighting calculated + * \ e.g., A blob of stone: only the visible blocks need to have the lighting calculated * - Block changes are sent with a chunk packet * \ A chunk packet is generally quicker to create and smaller for large world edits * - No physics updates * \ Physics updates are slow, and are usually performed on each block * - Block data shortcuts - * \ Some known blocks don't need to have the data set or accessed (e.g. air is never going to have data) + * \ Some known blocks don't need to have the data set or accessed (e.g., air is never going to have data) * - Remove redundant extents * \ Up to 11 layers of extents can be removed * - History bypassing * \ FastMode bypasses history and means blocks in the world don't need to be checked and recorded */ public class Fawe { + + private static final Logger log = LoggerFactory.getLogger(Fawe.class); + /** * The FAWE instance; */ @@ -183,7 +188,7 @@ public class Fawe { visualQueue = new VisualQueue(3); WEManager.IMP.managers.addAll(Fawe.this.IMP.getMaskManagers()); WEManager.IMP.managers.add(new PlotSquaredFeature()); - Fawe.debug("Plugin 'PlotSquared' found. Using it now."); + log.debug("Plugin 'PlotSquared' found. Using it now."); } catch (Throwable ignored) {} try { imp().startMetrics(); @@ -324,7 +329,7 @@ public class Fawe { public static void setupInjector() { /* * Modify the sessions - * - EditSession supports custom queue and a lot of optimizations + * - EditSession supports a custom queue, and a lot of optimizations * - LocalSession supports VirtualPlayers and undo on disk */ if (!Settings.IMP.EXPERIMENTAL.DISABLE_NATIVES) { diff --git a/worldedit-core/src/main/java/com/boydti/fawe/FaweCache.java b/worldedit-core/src/main/java/com/boydti/fawe/FaweCache.java index 797fb6c4e..658a45046 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/FaweCache.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/FaweCache.java @@ -1,5 +1,8 @@ package com.boydti.fawe; +import static com.google.common.base.Preconditions.checkNotNull; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.beta.Trimable; import com.boydti.fawe.config.BBC; import com.boydti.fawe.config.Settings; @@ -27,10 +30,7 @@ import com.sk89q.jnbt.StringTag; import com.sk89q.jnbt.Tag; import com.sk89q.worldedit.math.MutableBlockVector3; import com.sk89q.worldedit.math.MutableVector3; -import com.sk89q.worldedit.world.block.BlockState; -import com.sk89q.worldedit.world.block.BlockTypes; import com.sk89q.worldedit.world.block.BlockTypesCache; - import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; @@ -50,8 +50,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; import java.util.function.Supplier; -import static com.google.common.base.Preconditions.checkNotNull; - public enum FaweCache implements Trimable { IMP ; // singleton @@ -141,7 +139,7 @@ public enum FaweCache implements Trimable { synchronized (this) { pool = REGISTERED_POOLS.get(clazz); if (pool == null) { - Fawe.debug("Not registered " + clazz); + getLogger(FaweCache.class).debug("Not registered " + clazz); Supplier supplier = IOUtil.supplier(clazz::newInstance); pool = supplier::get; REGISTERED_POOLS.put(clazz, pool); @@ -162,7 +160,7 @@ public enum FaweCache implements Trimable { synchronized (this) { cache = REGISTERED_SINGLETONS.get(clazz); if (cache == null) { - Fawe.debug("Not registered " + clazz); + getLogger(FaweCache.class).debug("Not registered " + clazz); cache = new CleanableThreadLocal<>(IOUtil.supplier(clazz::newInstance)); REGISTERED_SINGLETONS.put(clazz, cache); } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/Filter.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/Filter.java index 622d29b4e..44eea1977 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/Filter.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/Filter.java @@ -38,7 +38,7 @@ public interface Filter { } /** - * Make changes to the block here
- e.g. block.setId(...)
- Note: Performance is + * Make changes to the block here
- e.g., block.setId(...)
- Note: Performance is * critical here
* * @param block @@ -50,7 +50,6 @@ public interface Filter { * Do something with the IChunk after block filtering. * * @param chunk - * @return */ default void finishChunk(IChunk chunk) { } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/IBatchProcessor.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/IBatchProcessor.java index 826208570..b584d2a40 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/IBatchProcessor.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/IBatchProcessor.java @@ -6,8 +6,6 @@ import com.boydti.fawe.beta.implementation.processors.MultiBatchProcessor; import com.sk89q.jnbt.CompoundTag; import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.math.BlockVector3; - -import java.util.Iterator; import java.util.Map; import java.util.Set; import java.util.function.Function; @@ -84,20 +82,12 @@ public interface IBatchProcessor { default boolean trimNBT(IChunkSet set, Function contains) { Set ents = set.getEntities(); if (!ents.isEmpty()) { - for (Iterator iter = ents.iterator(); iter.hasNext();) { - CompoundTag ent = iter.next(); - if (!contains.apply(ent.getEntityPosition().toBlockPoint())) { - iter.remove(); - } - } + ents.removeIf(ent -> !contains.apply(ent.getEntityPosition().toBlockPoint())); } Map tiles = set.getTiles(); if (!tiles.isEmpty()) { - for (Iterator> iter = tiles.entrySet().iterator(); iter.hasNext();) { - if (!contains.apply(iter.next().getKey())) { - iter.remove(); - } - } + tiles.entrySet().removeIf(blockVector3CompoundTagEntry -> !contains + .apply(blockVector3CompoundTagEntry.getKey())); } return !tiles.isEmpty() || !ents.isEmpty(); } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunk.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunk.java index dee830bcd..97451fdda 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunk.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunk.java @@ -36,7 +36,7 @@ public interface IChunk extends Trimable, IChunkGet, IChunkSet { int getZ(); /** - * If the chunk is a delegate, returns it's parent's root + * If the chunk is a delegate, returns its parent's root * * @return root IChunk */ @@ -49,6 +49,7 @@ public interface IChunk extends Trimable, IChunkGet, IChunkSet { * * @return true if no changes are queued for this chunk */ + @Override boolean isEmpty(); /** @@ -56,7 +57,7 @@ public interface IChunk extends Trimable, IChunkGet, IChunkSet { * * @param filter the filter * @param block The filter block - * @param region The region allowed to filter (may be null) + * @param region The region allowed to filter (maybe null) */ void filterBlocks(Filter filter, ChunkFilterBlock block, @Nullable Region region, boolean full); @@ -70,10 +71,13 @@ public interface IChunk extends Trimable, IChunkGet, IChunkSet { // void flood(Flood flood, FilterBlockMask mask, ChunkFilterBlock block); /* set - queues a change */ + @Override boolean setBiome(int x, int y, int z, BiomeType biome); + @Override boolean setTile(int x, int y, int z, CompoundTag tag); + @Override boolean setBlock(int x, int y, int z, BlockStateHolder block); @Override diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkCache.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkCache.java index 480db7063..389b95ed4 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkCache.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkCache.java @@ -1,10 +1,8 @@ package com.boydti.fawe.beta; -import com.boydti.fawe.beta.Trimable; - /** * IGetBlocks may be cached by the WorldChunkCache so that it can be used between multiple - * IQueueExtents - avoids conversion between palette and raw data on every block get + * IQueueExtents - avoids conversion between a palette and raw data on every block get */ public interface IChunkCache extends Trimable { T get(int chunkX, int chunkZ); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkGet.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkGet.java index e41d5686a..73e993da2 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkGet.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/IChunkGet.java @@ -43,6 +43,7 @@ public interface IChunkGet extends IBlocks, Trimable, InputExtent { > T call(IChunkSet set, Runnable finalize); + @Override char[] load(int layer); CompoundTag getEntity(UUID uuid); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/IQueueExtent.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/IQueueExtent.java index 0bd286c2c..8a5a2c2e5 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/IQueueExtent.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/IQueueExtent.java @@ -4,22 +4,15 @@ import com.boydti.fawe.FaweCache; import com.boydti.fawe.beta.implementation.IChunkExtent; import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock; import com.boydti.fawe.beta.implementation.processors.IBatchProcessorHolder; -import com.sk89q.jnbt.CompoundTag; -import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.extent.Extent; import com.sk89q.worldedit.function.operation.Operation; import com.sk89q.worldedit.math.BlockVector2; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.regions.Region; -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 javax.annotation.Nullable; import java.io.Flushable; import java.util.Set; import java.util.concurrent.Future; +import javax.annotation.Nullable; /** * TODO: implement Extent (need to refactor Extent first) Interface for a queue based extent which @@ -58,7 +51,6 @@ public interface IQueueExtent extends Flushable, Trimable, ICh * - Faster than getting it using NMS and allows for wrapping * @param x * @param z - * @param supplier * @return */ IChunkGet getCachedGet(int x, int z); @@ -67,7 +59,6 @@ public interface IQueueExtent extends Flushable, Trimable, ICh * Get the cached chunk set object * @param x * @param z - * @param supplier * @return */ IChunkSet getCachedSet(int x, int z); @@ -101,7 +92,7 @@ public interface IQueueExtent extends Flushable, Trimable, ICh T create(boolean isFull); /** - * Wrap the chunk object (i.e. for region restrictions / limits etc.) + * Wrap the chunk object (i.e., for region restrictions / limits etc.) * * @param root * @return wrapped chunk diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/Trimable.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/Trimable.java index c40a4836f..c513a76f8 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/Trimable.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/Trimable.java @@ -1,15 +1,15 @@ package com.boydti.fawe.beta; /** - * Interface for objects that can be trimmed (memory related)
- Trimming will reduce it's memory + * Interface for objects that can be trimmed (memory related)
- Trimming will reduce its memory * footprint */ public interface Trimable { /** - * Trim the object, reducing it's memory footprint + * Trims the object, reducing its memory footprint * - * @param aggressive if trimming should be aggressive e.g. Not return early when the first + * @param aggressive if trimming should be aggressive e.g., Not return early when the first * element cannot be trimmed * @return if this object is empty at the end of the trim, and can therefore be deleted */ diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/chunk/ChunkHolder.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/chunk/ChunkHolder.java index 2defde4d1..b9923e42a 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/chunk/ChunkHolder.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/chunk/ChunkHolder.java @@ -386,7 +386,7 @@ public class ChunkHolder> implements IQueueChunk { /** * Create a wrapped set object * - The purpose of wrapping is to allow different extents to intercept / alter behavior - * - E.g. caching, optimizations, filtering + * - e.g., caching, optimizations, filtering * @return */ private IChunkSet newWrappedSet() { @@ -396,7 +396,7 @@ public class ChunkHolder> implements IQueueChunk { /** * Create a wrapped get object * - The purpose of wrapping is to allow different extents to intercept / alter behavior - * - E.g. caching, optimizations, filtering + * - e.g., caching, optimizations, filtering * @return */ private IChunkGet newWrappedGet() { diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/chunk/NullChunk.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/chunk/NullChunk.java index f2548c6e6..108c55fc4 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/chunk/NullChunk.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/chunk/NullChunk.java @@ -1,13 +1,9 @@ package com.boydti.fawe.beta.implementation.chunk; +import com.boydti.fawe.beta.Filter; +import com.boydti.fawe.beta.IChunkSet; import com.boydti.fawe.beta.IQueueChunk; import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock; -import com.boydti.fawe.beta.Filter; -import com.boydti.fawe.beta.FilterBlockMask; -import com.boydti.fawe.beta.Flood; -import com.boydti.fawe.beta.IChunk; -import com.boydti.fawe.beta.IChunkSet; -import com.boydti.fawe.beta.IQueueExtent; import com.sk89q.jnbt.CompoundTag; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.regions.Region; @@ -16,20 +12,16 @@ import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BlockState; import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.world.block.BlockTypes; - -import javax.annotation.Nullable; import java.util.Collections; import java.util.Map; import java.util.Set; import java.util.UUID; import java.util.concurrent.Future; +import javax.annotation.Nullable; public enum NullChunk implements IQueueChunk { INSTANCE; - @Override - public void init(IQueueExtent extent, int x, int z) {} - @Override public int getX() { return 0; diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/processors/LimitExtent.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/processors/LimitExtent.java index a1fa0cd6a..9dda5c80b 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/processors/LimitExtent.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/processors/LimitExtent.java @@ -54,6 +54,7 @@ public class LimitExtent extends PassthroughExtent { this.limit = limit; } + @Override public List getEntities(Region region) { limit.THROW_MAX_CHECKS(region.getArea()); try { @@ -66,6 +67,7 @@ public class LimitExtent extends PassthroughExtent { } } + @Override public List getEntities() { limit.THROW_MAX_CHECKS(); try { @@ -78,6 +80,7 @@ public class LimitExtent extends PassthroughExtent { } } + @Override @Nullable public Entity createEntity(Location location, BaseEntity entity) { limit.THROW_MAX_CHANGES(); @@ -507,6 +510,7 @@ public class LimitExtent extends PassthroughExtent { } } + @Override public BlockState getBlock(int x, int y, int z) { limit.THROW_MAX_CHECKS(); try { @@ -532,6 +536,7 @@ public class LimitExtent extends PassthroughExtent { } } + @Override public BaseBlock getFullBlock(int x, int y, int z) { limit.THROW_MAX_CHECKS(); try { @@ -544,6 +549,7 @@ public class LimitExtent extends PassthroughExtent { } } + @Override public BiomeType getBiome(BlockVector2 position) { limit.THROW_MAX_CHECKS(); try { @@ -556,6 +562,7 @@ public class LimitExtent extends PassthroughExtent { } } + @Override public BiomeType getBiomeType(int x, int z) { limit.THROW_MAX_CHECKS(); try { @@ -568,6 +575,7 @@ public class LimitExtent extends PassthroughExtent { } } + @Override @Deprecated public > boolean setBlock(BlockVector3 position, T block) throws WorldEditException { limit.THROW_MAX_CHANGES(); @@ -582,6 +590,7 @@ public class LimitExtent extends PassthroughExtent { } } + @Override public > boolean setBlock(int x, int y, int z, T block) throws WorldEditException { limit.THROW_MAX_CHANGES(); if (block.hasNbtData()) limit.MAX_BLOCKSTATES(); @@ -595,6 +604,7 @@ public class LimitExtent extends PassthroughExtent { } } + @Override public boolean setTile(int x, int y, int z, CompoundTag tile) throws WorldEditException { limit.THROW_MAX_CHANGES(); limit.MAX_BLOCKSTATES(); @@ -608,6 +618,7 @@ public class LimitExtent extends PassthroughExtent { } } + @Override public boolean setBiome(BlockVector2 position, BiomeType biome) { limit.THROW_MAX_CHANGES(); try { @@ -620,6 +631,7 @@ public class LimitExtent extends PassthroughExtent { } } + @Override public boolean setBiome(int x, int y, int z, BiomeType biome) { limit.THROW_MAX_CHANGES(); try { diff --git a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/SingleThreadQueueExtent.java b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/SingleThreadQueueExtent.java index 53c42cce5..d9a4d5a23 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/SingleThreadQueueExtent.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/beta/implementation/queue/SingleThreadQueueExtent.java @@ -1,37 +1,33 @@ package com.boydti.fawe.beta.implementation.queue; import com.boydti.fawe.Fawe; -import com.boydti.fawe.beta.IQueueChunk; -import com.boydti.fawe.beta.implementation.filter.block.CharFilterBlock; -import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock; -import com.boydti.fawe.beta.IBatchProcessor; import com.boydti.fawe.beta.IChunk; +import com.boydti.fawe.beta.IChunkCache; import com.boydti.fawe.beta.IChunkGet; import com.boydti.fawe.beta.IChunkSet; +import com.boydti.fawe.beta.IQueueChunk; import com.boydti.fawe.beta.IQueueExtent; -import com.boydti.fawe.beta.IChunkCache; -import com.boydti.fawe.beta.implementation.chunk.NullChunk; import com.boydti.fawe.beta.implementation.blocks.CharSetBlocks; import com.boydti.fawe.beta.implementation.chunk.ChunkHolder; +import com.boydti.fawe.beta.implementation.chunk.NullChunk; import com.boydti.fawe.beta.implementation.chunk.ReferenceChunk; -import com.boydti.fawe.beta.implementation.processors.BatchProcessorHolder; +import com.boydti.fawe.beta.implementation.filter.block.CharFilterBlock; +import com.boydti.fawe.beta.implementation.filter.block.ChunkFilterBlock; import com.boydti.fawe.beta.implementation.processors.EmptyBatchProcessor; import com.boydti.fawe.beta.implementation.processors.ExtentBatchProcessorHolder; import com.boydti.fawe.config.Settings; -import com.boydti.fawe.object.changeset.FaweChangeSet; import com.boydti.fawe.util.MathMan; import com.boydti.fawe.util.MemUtil; import com.google.common.util.concurrent.Futures; import com.sk89q.worldedit.extent.Extent; import it.unimi.dsi.fastutil.longs.Long2ObjectLinkedOpenHashMap; - import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; /** * Single threaded implementation for IQueueExtent (still abstract) - Does not implement creation of - * chunks (that has to implemented by the platform e.g. Bukkit) + * chunks (that has to implemented by the platform e.g., Bukkit) *

* This queue is reusable {@link #init(IChunkCache)} */ diff --git a/worldedit-core/src/main/java/com/boydti/fawe/command/AnvilCommands.java b/worldedit-core/src/main/java/com/boydti/fawe/command/AnvilCommands.java index 0401419d5..950237b4f 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/command/AnvilCommands.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/command/AnvilCommands.java @@ -163,7 +163,7 @@ public class AnvilCommands { "The auto-save interval is the recommended value for `file-duration` and `chunk-inactivity`" ) @CommandPermissions("worldedit.anvil.deleteallunvisited") - public void deleteAllUnvisited(Player player, String folder, int inhabitedTicks, @Arg(name = "filedurationmillis", desc = "int", def = "60000") int fileDurationMillis) throws WorldEditException { + public void deleteAllUnvisited(Player player, String folder, int inhabitedTicks, @Arg(desc = "int", def = "60000") int fileDurationMillis) throws WorldEditException { // DeleteUninhabitedFilter filter = new DeleteUninhabitedFilter(fileDurationMillis, inhabitedTicks, fileDurationMillis); TODO NOT IMPLEMENTED // DeleteUninhabitedFilter result = runWithWorld(player, folder, filter, true); // if (result != null) { @@ -182,7 +182,7 @@ public class AnvilCommands { "The auto-save interval is the recommended value for `file-duration` and `chunk-inactivity`" ) @CommandPermissions("worldedit.anvil.deleteallunclaimed") - public void deleteAllUnclaimed(Player player, int inhabitedTicks, @Arg(name = "filedurationmillis", desc = "int", def = "60000") int fileDurationMillis, @Switch(name = 'd', desc = "TODO") boolean debug) throws WorldEditException { + public void deleteAllUnclaimed(Player player, int inhabitedTicks, @Arg(desc = "int", def = "60000") int fileDurationMillis, @Switch(name = 'd', desc = "TODO") boolean debug) throws WorldEditException { // String folder = player.getWorld().getName(); TODO NOT IMPLEMENTED // DeleteUnclaimedFilter filter = new DeleteUnclaimedFilter(player.getWorld(), fileDurationMillis, inhabitedTicks, fileDurationMillis); // if (debug) { @@ -205,7 +205,7 @@ public class AnvilCommands { "The auto-save interval is the recommended value for `file-duration` and `chunk-inactivity`" ) @CommandPermissions("worldedit.anvil.deleteunclaimed") - public void deleteUnclaimed(Player player, EditSession editSession, @Selection Region selection, int inhabitedTicks, @Arg(name = "filedurationmillis", desc = "int", def = "60000") int fileDurationMillis, @Switch(name = 'd', desc = "TODO") boolean debug) throws WorldEditException { + public void deleteUnclaimed(Player player, EditSession editSession, @Selection Region selection, int inhabitedTicks, @Arg(desc = "int", def = "60000") int fileDurationMillis, @Switch(name = 'd', desc = "TODO") boolean debug) throws WorldEditException { // DeleteUnclaimedFilter filter = new DeleteUnclaimedFilter(player.getWorld(), fileDurationMillis, inhabitedTicks, fileDurationMillis); TODO NOT IMPLEMENTED // if (debug) { // filter.enableDebug(); @@ -221,7 +221,7 @@ public class AnvilCommands { aliases = {"deloldreg" }, desc = "Delete regions which haven't been accessed in a certain amount of time", descFooter = "You can use seconds (s), minutes (m), hours (h), days (d), weeks (w), years (y)\n" + - "(months are not a unit of time) E.g. 8h5m12s\n" + "(months are not a unit of time) e.g., 8h5m12s\n" ) @CommandPermissions("worldedit.anvil.deletealloldregions") public void deleteAllOldRegions(Player player, String folder, String time) throws WorldEditException { diff --git a/worldedit-core/src/main/java/com/boydti/fawe/command/CFICommands.java b/worldedit-core/src/main/java/com/boydti/fawe/command/CFICommands.java index 2b6c575ac..8da394401 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/command/CFICommands.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/command/CFICommands.java @@ -1,5 +1,9 @@ package com.boydti.fawe.command; +import static com.boydti.fawe.util.image.ImageUtil.load; +import static com.sk89q.worldedit.command.MethodCommands.getArguments; +import static com.sk89q.worldedit.util.formatting.text.TextComponent.newline; + import com.boydti.fawe.Fawe; import com.boydti.fawe.FaweAPI; import com.boydti.fawe.beta.implementation.filter.block.SingleFilterBlock; @@ -15,7 +19,6 @@ import com.boydti.fawe.util.StringMan; import com.boydti.fawe.util.TaskManager; import com.boydti.fawe.util.TextureUtil; import com.boydti.fawe.util.image.ImageUtil; -import com.google.common.collect.ImmutableSet; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.sk89q.minecraft.util.commands.CommandException; @@ -25,7 +28,6 @@ import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.command.util.CommandPermissions; import com.sk89q.worldedit.command.util.CommandPermissionsConditionGenerator; -import com.sk89q.worldedit.command.util.PermissionCondition; import com.sk89q.worldedit.entity.Player; import com.sk89q.worldedit.extension.input.InputParseException; import com.sk89q.worldedit.extension.input.ParserContext; @@ -37,7 +39,6 @@ import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats; import com.sk89q.worldedit.function.mask.Mask; import com.sk89q.worldedit.function.pattern.Pattern; -import com.sk89q.worldedit.internal.command.CommandRegistrationHandler; import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.Vector3; import com.sk89q.worldedit.registry.state.PropertyKey; @@ -47,7 +48,6 @@ import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.util.formatting.component.TextComponentProducer; import com.sk89q.worldedit.util.formatting.text.TextComponent; import com.sk89q.worldedit.util.formatting.text.TextComponent.Builder; -import com.sk89q.worldedit.util.formatting.text.TranslatableComponent; import com.sk89q.worldedit.util.formatting.text.event.ClickEvent; import com.sk89q.worldedit.util.formatting.text.event.HoverEvent; import com.sk89q.worldedit.util.formatting.text.format.TextColor; @@ -56,18 +56,6 @@ import com.sk89q.worldedit.world.biome.BiomeType; import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.world.block.BlockType; import com.sk89q.worldedit.world.block.BlockTypes; -import org.enginehub.piston.CommandManager; -import org.enginehub.piston.CommandManagerService; -import org.enginehub.piston.annotation.Command; -import org.enginehub.piston.annotation.CommandContainer; -import org.enginehub.piston.annotation.param.Arg; -import org.enginehub.piston.annotation.param.Switch; -import org.enginehub.piston.exception.StopExecutionException; -import org.enginehub.piston.inject.InjectedValueAccess; -import org.enginehub.piston.part.SubCommandPart; -import org.jetbrains.annotations.NotNull; - -import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.awt.image.DataBufferInt; import java.io.ByteArrayOutputStream; @@ -85,17 +73,22 @@ import java.util.List; import java.util.Set; import java.util.function.Consumer; import java.util.function.Function; -import java.util.stream.Collectors; import java.util.stream.IntStream; - -import static com.boydti.fawe.util.image.ImageUtil.load; -import static com.sk89q.worldedit.command.MethodCommands.getArguments; -import static com.sk89q.worldedit.util.formatting.text.TextComponent.newline; +import javax.imageio.ImageIO; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.enginehub.piston.annotation.Command; +import org.enginehub.piston.annotation.CommandContainer; +import org.enginehub.piston.annotation.param.Arg; +import org.enginehub.piston.annotation.param.Switch; +import org.enginehub.piston.exception.StopExecutionException; +import org.enginehub.piston.inject.InjectedValueAccess; +import org.jetbrains.annotations.NotNull; @CommandContainer(superTypes = CommandPermissionsConditionGenerator.Registration.class) public class CFICommands { private final WorldEdit worldEdit; + private final @NonNull TextComponent doubleNewLine = TextComponent.of("\n\n"); /** * Create a new instance. @@ -252,14 +245,14 @@ public class CFICommands { desc = "Set the floor and main block" ) @CommandPermissions("worldedit.anvil.cfi") - public void column(Player player, @Arg(name = "pattern", desc = "Pattern") Pattern patternArg, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ + public void column(Player player, @Arg(desc = "Pattern") Pattern pattern, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(desc = "Mask", def = "") Mask mask, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ HeightMapMCAGenerator gen = assertSettings(player).getGenerator(); if (image != null) { - gen.setColumn(load(image), patternArg, !disableWhiteOnly); - } else if (maskOpt != null) { - gen.setColumn(maskOpt, patternArg); + gen.setColumn(load(image), pattern, !disableWhiteOnly); + } else if (mask != null) { + gen.setColumn(mask, pattern); } else { - gen.setColumn(patternArg); + gen.setColumn(pattern); } player.print("Set column!"); assertSettings(player).resetComponent(); @@ -271,21 +264,21 @@ public class CFICommands { desc = "Set the floor (default: grass)" ) @CommandPermissions("worldedit.anvil.cfi") - public void floorCmd(Player player, @Arg(name = "pattern", desc = "Pattern") Pattern patternArg, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ - floor(player, patternArg, image, maskOpt, disableWhiteOnly); + public void floorCmd(Player player, @Arg(desc = "Pattern") Pattern pattern, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(desc = "Mask", def = "") Mask mask, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ + floor(player, pattern, image, mask, disableWhiteOnly); player.print("Set floor!"); assertSettings(player).resetComponent(); component(player); } - private void floor(Player player, @Arg(name = "pattern", desc = "Pattern") Pattern patternArg, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly) { + private void floor(Player player, @Arg(desc = "Pattern") Pattern pattern, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(desc = "Mask", def = "") Mask mask, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly) { HeightMapMCAGenerator gen = assertSettings(player).getGenerator(); if (image != null) { - gen.setFloor(load(image), patternArg, !disableWhiteOnly); - } else if (maskOpt != null) { - gen.setFloor(maskOpt, patternArg); + gen.setFloor(load(image), pattern, !disableWhiteOnly); + } else if (mask != null) { + gen.setFloor(mask, pattern); } else { - gen.setFloor(patternArg); + gen.setFloor(pattern); } } @@ -294,21 +287,21 @@ public class CFICommands { desc = "Set the main block (default: stone)" ) @CommandPermissions("worldedit.anvil.cfi") - public void mainCmd(Player player, @Arg(name = "pattern", desc = "Pattern") Pattern patternArg, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ - main(player, patternArg, image, maskOpt, disableWhiteOnly); + public void mainCmd(Player player, @Arg(desc = "Pattern") Pattern pattern, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ + main(player, pattern, image, maskOpt, disableWhiteOnly); player.print("Set main!"); assertSettings(player).resetComponent(); component(player); } - public void main(Player player, @Arg(name = "pattern", desc = "Pattern") Pattern patternArg, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ + public void main(Player player, @Arg(desc = "Pattern") Pattern pattern, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ HeightMapMCAGenerator gen = assertSettings(player).getGenerator(); if (image != null) { - gen.setMain(load(image), patternArg, !disableWhiteOnly); + gen.setMain(load(image), pattern, !disableWhiteOnly); } else if (maskOpt != null) { - gen.setMain(maskOpt, patternArg); + gen.setMain(maskOpt, pattern); } else { - gen.setMain(patternArg); + gen.setMain(pattern); } } @@ -317,17 +310,17 @@ public class CFICommands { aliases = {"setoverlay"}, desc = "Set the overlay block", descFooter = "Change the block directly above the floor (default: air)\n" + - "e.g. Tallgrass" + "e.g., Tallgrass" ) @CommandPermissions("worldedit.anvil.cfi") - public void overlay(Player player, @Arg(name = "pattern", desc = "Pattern") Pattern patternArg, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ + public void overlay(Player player, @Arg(desc = "Pattern") Pattern pattern, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(desc = "Mask", def = "") Mask mask, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ HeightMapMCAGenerator gen = assertSettings(player).getGenerator(); if (image != null) { - gen.setOverlay(load(image), patternArg, !disableWhiteOnly); - } else if (maskOpt != null) { - gen.setOverlay(maskOpt, patternArg); + gen.setOverlay(load(image), pattern, !disableWhiteOnly); + } else if (mask != null) { + gen.setOverlay(mask, pattern); } else { - gen.setOverlay(patternArg); + gen.setOverlay(pattern); } player.print("Set overlay!"); component(player); @@ -342,18 +335,18 @@ public class CFICommands { " - A good value for radius and iterations would be 1 8." ) @CommandPermissions("worldedit.anvil.cfi") - public void smoothCmd(Player player, int radius, int iterations, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ - smooth(player, radius, iterations, image, maskOpt, disableWhiteOnly); + public void smoothCmd(Player player, int radius, int iterations, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(desc = "Mask", def = "") Mask mask, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ + smooth(player, radius, iterations, image, mask, disableWhiteOnly); assertSettings(player).resetComponent(); component(player); } - private void smooth(Player player, int radius, int iterations, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ + private void smooth(Player player, int radius, int iterations, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(desc = "Mask", def = "") Mask mask, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ HeightMapMCAGenerator gen = assertSettings(player).getGenerator(); if (image != null) { gen.smooth(load(image), !disableWhiteOnly, radius, iterations); } else { - gen.smooth(maskOpt, radius, iterations); + gen.smooth(mask, radius, iterations); } } @@ -362,11 +355,11 @@ public class CFICommands { desc = "Create some snow" ) @CommandPermissions("worldedit.anvil.cfi") - public void snow(Player player, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ + public void snow(Player player, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(desc = "Mask", def = "") Mask mask, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ HeightMapMCAGenerator gen = assertSettings(player).getGenerator(); - floor(player, BlockTypes.SNOW.getDefaultState().with(PropertyKey.LAYERS, 7), image, maskOpt, disableWhiteOnly); - main(player, BlockTypes.SNOW_BLOCK, image, maskOpt, disableWhiteOnly); - smooth(player, 1, 8, image, maskOpt, disableWhiteOnly); + floor(player, BlockTypes.SNOW.getDefaultState().with(PropertyKey.LAYERS, 7), image, mask, disableWhiteOnly); + main(player, BlockTypes.SNOW_BLOCK, image, mask, disableWhiteOnly); + smooth(player, 1, 8, image, mask, disableWhiteOnly); player.print(TextComponent.of("Added snow!")); assertSettings(player).resetComponent(); component(player); @@ -390,7 +383,7 @@ public class CFICommands { name = "paletteblocks", desc = "Set the blocks used for coloring", descFooter = "Allow only specific blocks to be used for coloring\n" + - "`blocks` is a list of blocks e.g. stone,bedrock,wool\n" + + "`blocks` is a list of blocks e.g., stone,bedrock,wool\n" + "`#clipboard` will only use the blocks present in your clipboard." ) @CommandPermissions("worldedit.anvil.cfi") @@ -516,7 +509,7 @@ public class CFICommands { " - The distance is the spacing between each schematic" ) @CommandPermissions("worldedit.anvil.cfi") - public void schem(Player player, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri imageMask, @Arg(name = "mask", desc = "Mask") Mask mask, String schematic, int rarity, int distance, boolean rotate)throws IOException, WorldEditException { + public void schem(Player player, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri imageMask, @Arg(desc = "Mask") Mask mask, String schematic, int rarity, int distance, boolean rotate)throws IOException, WorldEditException { HeightMapMCAGenerator gen = assertSettings(player).getGenerator(); World world = player.getWorld(); @@ -542,14 +535,14 @@ public class CFICommands { " - If a mask is used, the biome will be set anywhere the mask applies" ) @CommandPermissions("worldedit.anvil.cfi") - public void biome(Player player, @Arg(name = "biome", desc = "Biome type") BiomeType biomeType, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ + public void biome(Player player, @Arg(desc = "Biome type") BiomeType biome, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(desc = "Mask", def = "") Mask mask, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly){ HeightMapMCAGenerator gen = assertSettings(player).getGenerator(); if (image != null) { - gen.setBiome(load(image), biomeType, !disableWhiteOnly); - } else if (maskOpt != null) { - gen.setBiome(maskOpt, biomeType); + gen.setBiome(load(image), biome, !disableWhiteOnly); + } else if (mask != null) { + gen.setBiome(mask, biome); } else { - gen.setBiome(biomeType); + gen.setBiome(biome); } player.print(TextComponent.of("Set biome!")); assertSettings(player).resetComponent(); @@ -573,8 +566,8 @@ public class CFICommands { descFooter = "Use a specific pattern and settings to generate ore" ) @CommandPermissions("worldedit.anvil.cfi") - public void ore(Player player, @Arg(name = "mask", desc = "Mask") Mask mask, @Arg(name = "pattern", desc = "Pattern") Pattern patternArg, int size, int frequency, int rariry, int minY, int maxY) throws WorldEditException { - assertSettings(player).getGenerator().addOre(mask, patternArg, size, frequency, rariry, minY, maxY); + public void ore(Player player, @Arg(desc = "Mask") Mask mask, @Arg(desc = "Pattern") Pattern pattern, int size, int frequency, int rarity, int minY, int maxY) throws WorldEditException { + assertSettings(player).getGenerator().addOre(mask, pattern, size, frequency, rarity, minY, maxY); player.print(TextComponent.of("Added ore!")); populate(player); } @@ -584,7 +577,7 @@ public class CFICommands { desc = "Generate the vanilla ores" ) @CommandPermissions("worldedit.anvil.cfi") - public void ores(Player player, @Arg(name = "mask", desc = "Mask") Mask mask) throws WorldEditException { + public void ores(Player player, @Arg(desc = "Mask") Mask mask) throws WorldEditException { assertSettings(player).getGenerator().addDefaultOres(mask); player.print(TextComponent.of("Added ores!")); populate(player); @@ -609,7 +602,7 @@ public class CFICommands { @Command( name = "water", - desc = "Change the block used for water\ne.g. Lava" + desc = "Change the block used for water\n e.g., Lava" ) @CommandPermissions("worldedit.anvil.cfi") public void waterId(Player player, @Arg(desc = "block") BlockStateHolder block) throws WorldEditException { @@ -642,8 +635,8 @@ public class CFICommands { " - A value of 0 is the default and will not modify the height" ) @CommandPermissions("worldedit.anvil.cfi") - public void worldthickness(Player player, @Arg(name = "height", desc = "brush height") int heightArg) throws WorldEditException { - assertSettings(player).getGenerator().setWorldThickness(heightArg); + public void worldthickness(Player player, @Arg(desc = "brush height") int height) throws WorldEditException { + assertSettings(player).getGenerator().setWorldThickness(height); player.print("Set world thickness!"); component(player); } @@ -655,8 +648,8 @@ public class CFICommands { " - A value of 0 is the default and will only set the top block" ) @CommandPermissions("worldedit.anvil.cfi") - public void floorthickness(Player player, @Arg(name = "height", desc = "brush height") int heightArg) throws WorldEditException { - assertSettings(player).getGenerator().setFloorThickness(heightArg); + public void floorthickness(Player player, @Arg( desc = "brush height") int height) throws WorldEditException { + assertSettings(player).getGenerator().setFloorThickness(height); player.print("Set floor thickness!"); component(player); } @@ -696,8 +689,8 @@ public class CFICommands { " - By default water is disabled (with a value of 0)" ) @CommandPermissions("worldedit.anvil.cfi") - public void waterheight(Player player, @Arg(name = "height", desc = "brush height") int heightArg) throws WorldEditException { - assertSettings(player).getGenerator().setWaterHeight(heightArg); + public void waterheight(Player player, @Arg(desc = "brush height") int height) throws WorldEditException { + assertSettings(player).getGenerator().setWaterHeight(height); player.print("Set water height!"); component(player); } @@ -709,7 +702,7 @@ public class CFICommands { ) // ![79,174,212,5:3,5:4,18,161,20] @CommandPermissions("worldedit.anvil.cfi") - public void glass(Player player, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri imageMask, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly) throws WorldEditException { + public void glass(Player player, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri imageMask, @Arg(desc = "Mask", def = "") Mask mask, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly) throws WorldEditException { CFISettings settings = assertSettings(player); settings.getGenerator().setColorWithGlass(load(image)); player.print("Set color with glass!"); @@ -726,13 +719,13 @@ public class CFICommands { "The -w (disableWhiteOnly) will randomly apply depending on the pixel luminance" ) @CommandPermissions("worldedit.anvil.cfi") - public void color(Player player, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri imageMask, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly) throws WorldEditException { + public void color(Player player, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri imageMask, @Arg(desc = "Mask", def = "") Mask mask, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly) throws WorldEditException { CFISettings settings = assertSettings(player); HeightMapMCAGenerator gen = settings.getGenerator(); if (imageMask != null) { gen.setColor(load(image), load(imageMask), !disableWhiteOnly); - } else if (maskOpt != null) { - gen.setColor(load(image), maskOpt); + } else if (mask != null) { + gen.setColor(load(image), mask); } else { gen.setColor(load(image)); } @@ -750,9 +743,9 @@ public class CFICommands { "The -w (disableWhiteOnly) will randomly apply depending on the pixel luminance" ) @CommandPermissions("worldedit.anvil.cfi") - public void blockbiome(Player player, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri imageMask, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly) throws WorldEditException { + public void blockbiome(Player player, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri imageMask, @Arg(desc = "Mask", def = "") Mask mask, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly) throws WorldEditException { CFISettings settings = assertSettings(player); - settings.getGenerator().setBlockAndBiomeColor(load(image), maskOpt, load(imageMask), !disableWhiteOnly); + settings.getGenerator().setBlockAndBiomeColor(load(image), mask, load(imageMask), !disableWhiteOnly); player.print(TextComponent.of("Set color with blocks and biomes!")); settings.resetColoring(); mainMenu(player); @@ -766,7 +759,7 @@ public class CFICommands { " - If you changed the block to something other than grass you will not see anything." ) @CommandPermissions("worldedit.anvil.cfi") - public void biomecolor(Player player, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri imageMask, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly) throws WorldEditException { + public void biomecolor(Player player, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri image, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri imageMask, @Arg(desc = "Mask", def = "") Mask mask, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly) throws WorldEditException { CFISettings settings = assertSettings(player); settings.getGenerator().setBiomeColor(load(image)); player.print(TextComponent.of("Set color with biomes!")); @@ -821,17 +814,28 @@ public class CFICommands { String blockList = materials.size() > 100 ? materials.size() + " blocks" : StringMan.join(materials, ','); int biomePriority = gen.getBiomePriority(); - - //TODO fix this so it can execute commands and show tooltips. - @NotNull Builder builder = TextComponent.builder(">> Current Settings <<").append(newline()) - .append("Randomization ").append("[" + Boolean.toString(rand).toUpperCase() + "]")//.cmdTip("/cfi randomization " + (!rand)) - .append(newline()) - .append("Mask ").append("[" + mask + "]")//.cmdTip("/cfi mask") - .append(newline()) - .append("Blocks ").append("[" + blocks + "]")//.tooltip(blockList).command("/cfi paletteBlocks") - .append(newline()) - .append("BiomePriority ").append("[" + biomePriority + "]")//.cmdTip("/cfi biomepriority") - .append(newline()); + TextComponent.empty().clickEvent(ClickEvent.runCommand( + "/cfi randomization " + !rand)).hoverEvent(HoverEvent.showText( + TextComponent.of("/cfi randomization " + !rand))); + @NotNull Builder builder = TextComponent.builder(">> Current Settings <<"); + builder.append(newline()); + builder.append(TextComponent.of("Randomization [" + Boolean.toString(rand).toUpperCase() + "]") + .clickEvent(ClickEvent.runCommand( + "/cfi randomization " + !rand)).hoverEvent(HoverEvent.showText( + TextComponent.of("/cfi randomization " + !rand)))); + builder.append(newline()); + builder.append(TextComponent.of("Mask [" + mask + "]").clickEvent(ClickEvent.runCommand( + "/cfi mask")).hoverEvent(HoverEvent.showText( + TextComponent.of("/cfi mask")))); + builder.append(newline()); + builder.append(TextComponent.of("Blocks [" + blocks + "]").clickEvent(ClickEvent.runCommand( + "/cfi mask")).hoverEvent(HoverEvent.showText( + TextComponent.of("/cfi mask")))); + builder.append(newline()); + builder.append(TextComponent.of("Biome Priority [" + biomePriority + "]").clickEvent(ClickEvent.runCommand( + "/cfi mask")).hoverEvent(HoverEvent.showText( + TextComponent.of("/cfi biomepriority")))); + builder.append(newline()); if (settings.image != null) { StringBuilder colorArgs = new StringBuilder(" " + settings.imageArg); @@ -845,6 +849,7 @@ public class CFICommands { colorArgs.append(" -w"); } + //TODO builder.append("Image: ") .append("[" + settings.imageArg + "]")//.cmdTip("/cfi " + Commands.getAlias(CFICommands.class, "image")) .append(newline()).append(newline()) @@ -857,7 +862,7 @@ public class CFICommands { .append("You MUST provide an image: ") .append("[None]");//.cmdTip("/cfi " + Commands.getAlias(Command.class, "image")).append(newline()); } - builder.append("< [Back]");//.cmdTip(alias()).send(fp); + builder.append("< [Back]");//.cmdTip(alias()).send(player); player.print(builder.build()); } @@ -866,14 +871,14 @@ public class CFICommands { desc = "Select a mask" ) @CommandPermissions("worldedit.anvil.cfi") - public void mask(Player player, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri imageMask, @Arg(name = "mask", desc = "Mask", def = "") Mask maskOpt, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly, InjectedValueAccess context){ + public void mask(Player player, @Arg(def = "", desc = "image url or filename") ProvideBindings.ImageUri imageMask, @Arg(desc = "Mask", def = "") Mask mask, @Switch(name = 'w', desc = "TODO") boolean disableWhiteOnly, InjectedValueAccess context){ CFISettings settings = assertSettings(player); String[] split = getArguments(context).split(" "); int index = 2; settings.imageMask = imageMask; settings.imageMaskArg = imageMask != null ? split[index++] : null; - settings.mask = maskOpt; - settings.maskArg = maskOpt != null ? split[index++] : null; + settings.mask = mask; + settings.maskArg = mask != null ? split[index++] : null; settings.whiteOnly = !disableWhiteOnly; String s = "/cfi mask http://"; @@ -901,16 +906,16 @@ public class CFICommands { desc = "Select a pattern" ) @CommandPermissions("worldedit.anvil.cfi") - public void pattern(Player player, @Arg(name = "pattern", desc = "Pattern", def = "") Pattern patternArg, InjectedValueAccess context)throws CommandException { + public void pattern(Player player, @Arg(desc = "Pattern", def = "") Pattern pattern, InjectedValueAccess context)throws CommandException { CFISettings settings = assertSettings(player); String[] split = getArguments(context).split(" "); int index = 2; - settings.pattern = patternArg; - settings.patternArg = patternArg == null ? null : split[index++]; + settings.pattern = pattern; + settings.patternArg = pattern == null ? null : split[index++]; StringBuilder cmd = new StringBuilder("/cfi pattern "); - if (patternArg != null) { + if (pattern != null) { settings.getCategory().accept(player); } else { String s = cmd + " stone"; @@ -1043,8 +1048,7 @@ public class CFICommands { .append("Pattern ").append(TextComponent.of("[" + pattern + "]") .hoverEvent(HoverEvent.showText(TextComponent.of("/cfi pattern"))) .clickEvent(ClickEvent.runCommand("/cfi pattern"))) - .append(newline()) - .append(newline()) + .append(doubleNewLine) .append(">> Components <<") .append(newline()) .append(TextComponent.of("[Height]") @@ -1067,39 +1071,58 @@ public class CFICommands { if (pattern != null) { String disabled = "You must specify a pattern"; - msg.append(TextComponent.of("[WaterId]", TextColor.RED).hoverEvent(HoverEvent.showText(TextComponent.of(disabled)))).append(newline()) - .append(TextComponent.of("[BedrockId]", TextColor.RED).hoverEvent(HoverEvent.showText(TextComponent.of(disabled)))).append(newline()).append(newline()) - .append(TextComponent.of("[Floor]", TextColor.RED).hoverEvent(HoverEvent.showText(TextComponent.of(disabled)))).append(newline()).append(newline()) - .append(TextComponent.of("[Main]", TextColor.RED).hoverEvent(HoverEvent.showText(TextComponent.of(disabled)))).append(newline()).append(newline()) - .append(TextComponent.of("[Column]", TextColor.RED).hoverEvent(HoverEvent.showText(TextComponent.of(disabled)))).append(newline()).append(newline()) - .append(TextComponent.of("[Overlay]", TextColor.RED).hoverEvent(HoverEvent.showText(TextComponent.of(disabled)))).append(newline()).append(newline()); + msg.append(TextComponent.of("[WaterId]", TextColor.RED) + .hoverEvent(HoverEvent.showText(TextComponent.of(disabled)))); + msg.append(newline()); + msg.append(TextComponent.of("[BedrockId]", TextColor.RED) + .hoverEvent(HoverEvent.showText(TextComponent.of(disabled)))); + msg.append(doubleNewLine); + msg.append(TextComponent.of("[Floor]", TextColor.RED) + .hoverEvent(HoverEvent.showText(TextComponent.of(disabled)))); + msg.append(doubleNewLine); + msg.append(TextComponent.of("[Main]", TextColor.RED) + .hoverEvent(HoverEvent.showText(TextComponent.of(disabled)))); + msg.append(doubleNewLine); + msg.append(TextComponent.of("[Column]", TextColor.RED) + .hoverEvent(HoverEvent.showText(TextComponent.of(disabled)))); + msg.append(doubleNewLine); + msg.append(TextComponent.of("[Overlay]", TextColor.RED) + .hoverEvent(HoverEvent.showText(TextComponent.of(disabled)))); + msg.append(doubleNewLine); } else { StringBuilder compArgs = new StringBuilder(); compArgs.append(" " + settings.patternArg + maskArgs); - msg - .append(TextComponent.of("[WaterId]") - .hoverEvent(HoverEvent.showText(TextComponent.of("/cfi waterId " + pattern))) - .clickEvent(ClickEvent.runCommand("/cfi waterId " + pattern))) - .append(" - Water id for whole map") - .append(newline()) - .append(TextComponent.of("[BedrockId]") - .hoverEvent(HoverEvent.showText(TextComponent.of("/cfi baseId " + pattern))) - .clickEvent(ClickEvent.runCommand("/cfi baseId " + pattern))) - .append(TextComponent.of(" - Bedrock id for whole map")) - .append(newline()) - .append(TextComponent.of("[Floor]") - .hoverEvent(HoverEvent.showText(TextComponent.of("/cfi floor " + compArgs))) - .clickEvent(ClickEvent.runCommand("/cfi floor " + compArgs))) - .append(TextComponent.of(" - Set the floor in the masked areas")).append(newline()) - .append(TextComponent.of("[Main]") - .hoverEvent(HoverEvent.showText(TextComponent.of("/cfi main " + compArgs))) - .clickEvent(ClickEvent.runCommand("/cfi main " + compArgs))) - .append(TextComponent.of(" - Set the main block in the masked areas")).append(newline()) - .append(TextComponent.of("[Column]").hoverEvent(HoverEvent.showText(TextComponent.of("/cfi column" + compArgs))) - .clickEvent(ClickEvent.runCommand("/cfi column" + compArgs))).append(" - Set the columns in the masked areas").append(newline()) - .append(TextComponent.of("[Overlay]").hoverEvent(HoverEvent.showText(TextComponent.of("/cfi overlay" + compArgs))) - .clickEvent(ClickEvent.runCommand("/cfi overlay" + compArgs))).append(" - Set the overlay in the masked areas").append(newline()); + msg.append(TextComponent.of("[WaterId]") + .hoverEvent(HoverEvent.showText(TextComponent.of("/cfi waterId " + pattern))) + .clickEvent(ClickEvent.runCommand("/cfi waterId " + pattern))); + msg.append(" - Water id for whole map"); + msg.append(newline()); + msg.append(TextComponent.of("[BedrockId]") + .hoverEvent(HoverEvent.showText(TextComponent.of("/cfi baseId " + pattern))) + .clickEvent(ClickEvent.runCommand("/cfi baseId " + pattern))); + msg.append(TextComponent.of(" - Bedrock id for whole map")); + msg.append(newline()); + msg.append(TextComponent.of("[Floor]") + .hoverEvent(HoverEvent.showText(TextComponent.of("/cfi floor " + compArgs))) + .clickEvent(ClickEvent.runCommand("/cfi floor " + compArgs))); + msg.append(TextComponent.of(" - Set the floor in the masked areas")); + msg.append(newline()); + msg.append(TextComponent.of("[Main]") + .hoverEvent(HoverEvent.showText(TextComponent.of("/cfi main " + compArgs))) + .clickEvent(ClickEvent.runCommand("/cfi main " + compArgs))); + msg.append(TextComponent.of(" - Set the main block in the masked areas")); + msg.append(newline()); + msg.append(TextComponent.of("[Column]") + .hoverEvent(HoverEvent.showText(TextComponent.of("/cfi column" + compArgs))) + .clickEvent(ClickEvent.runCommand("/cfi column" + compArgs))); + msg.append(" - Set the columns in the masked areas"); + msg.append(newline()); + msg.append(TextComponent.of("[Overlay]") + .hoverEvent(HoverEvent.showText(TextComponent.of("/cfi overlay" + compArgs))) + .clickEvent(ClickEvent.runCommand("/cfi overlay" + compArgs))); + msg.append(" - Set the overlay in the masked areas"); + msg.append(newline()); } msg.append(newline()) @@ -1263,17 +1286,19 @@ public class CFICommands { .hoverEvent(HoverEvent.of(HoverEvent.Action.SHOW_TEXT, TextComponent.of(option)))); } producer.newline(); - producer.newline().append(TextComponent.of("<> [View]", TextColor.DARK_AQUA) - .clickEvent(ClickEvent.of(ClickEvent.Action.RUN_COMMAND, prefix + "download")) - .hoverEvent(HoverEvent.of(HoverEvent.Action.SHOW_TEXT, TextComponent.of("View full res image")))); - - producer.newline().append(TextComponent.of(">< [Cancel]", TextColor.RED) - .clickEvent(ClickEvent.of(ClickEvent.Action.RUN_COMMAND, prefix + "cancel")) - .hoverEvent(HoverEvent.of(HoverEvent.Action.SHOW_TEXT, TextComponent.of("cancel")))); - - producer.newline().append(TextComponent.of(">> [Done]", TextColor.DARK_GREEN) - .clickEvent(ClickEvent.of(ClickEvent.Action.RUN_COMMAND, prefix + "done")) - .hoverEvent(HoverEvent.of(HoverEvent.Action.SHOW_TEXT, TextComponent.of("done")))); + producer.newline(); + producer.append(TextComponent.of("<> [View]", TextColor.DARK_AQUA) + .clickEvent(ClickEvent.of(ClickEvent.Action.RUN_COMMAND, prefix + "download")) + .hoverEvent(HoverEvent + .of(HoverEvent.Action.SHOW_TEXT, TextComponent.of("View full res image")))); + producer.newline(); + producer.append(TextComponent.of(">< [Cancel]", TextColor.RED) + .clickEvent(ClickEvent.of(ClickEvent.Action.RUN_COMMAND, prefix + "cancel")) + .hoverEvent(HoverEvent.of(HoverEvent.Action.SHOW_TEXT, TextComponent.of("cancel")))); + producer.newline(); + producer.append(TextComponent.of(">> [Done]", TextColor.DARK_GREEN) + .clickEvent(ClickEvent.of(ClickEvent.Action.RUN_COMMAND, prefix + "done")) + .hoverEvent(HoverEvent.of(HoverEvent.Action.SHOW_TEXT, TextComponent.of("done")))); actor.print(producer.create()); } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/config/BBC.java b/worldedit-core/src/main/java/com/boydti/fawe/config/BBC.java index 5d25d5aa5..2872fefb9 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/config/BBC.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/config/BBC.java @@ -1,6 +1,7 @@ package com.boydti.fawe.config; -import com.boydti.fawe.Fawe; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.configuration.MemorySection; import com.boydti.fawe.configuration.file.YamlConfiguration; import com.sk89q.worldedit.extension.platform.Actor; @@ -114,7 +115,7 @@ public enum BBC { BRUSH_TARGET_MASK_SET("Set target mask to %s0", "WorldEdit.Brush"), BRUSH_TARGET_OFFSET_SET("Set target offset to %s0", "WorldEdit.Brush"), BRUSH_EQUIPPED("Equipped brush %s0", "WorldEdit.Brush"), - BRUSH_TRY_OTHER("There are other more suitable brushes e.g.\n - //br height [radius=5] [#clipboard|file=null] [rotation=0] [yscale=1.00]", "WorldEdit.Brush"), + BRUSH_TRY_OTHER("There are other more suitable brushes e.g.,\n - //br height [radius=5] [#clipboard|file=null] [rotation=0] [yscale=1.00]", "WorldEdit.Brush"), BRUSH_COPY("Left click the base of an object to copy, right click to paste. Increase the brush radius if necessary.", "WorldEdit.Brush"), BRUSH_HEIGHT_INVALID("Invalid height map file (%s0)", "WorldEdit.Brush"), BRUSH_SMOOTH("Note: Use the blend brush if you want to smooth overhangs or caves.", "WorldEdit.Brush"), @@ -484,7 +485,7 @@ public enum BBC { return; } if (actor == null) { - Fawe.debug(this.format(args)); + getLogger(BBC.class).debug(this.format(args)); } else { try { Method method = actor.getClass().getMethod("print", String.class); @@ -501,7 +502,7 @@ public enum BBC { return; } if (player == null) { - Fawe.debug(this.format(args)); + getLogger(BBC.class).debug(this.format(args)); } else { player.print(this.format(args)); } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/config/Config.java b/worldedit-core/src/main/java/com/boydti/fawe/config/Config.java index 3576db493..7ac5196cb 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/config/Config.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/config/Config.java @@ -20,9 +20,13 @@ import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class Config { + private final Logger log = LoggerFactory.getLogger(Config.class); + public Config() { save(new PrintWriter(new ByteArrayOutputStream(0)), getClass(), this, 0); } @@ -48,7 +52,7 @@ public class Config { } } } - Fawe.debug("Failed to get config option: " + key); + log.debug("Failed to get config option: " + key); return null; } @@ -80,7 +84,7 @@ public class Config { } } } - Fawe.debug("Failed to set config option: " + key + ": " + value + " | " + instance + " | " + root.getSimpleName() + ".yml"); + log.debug("Failed to set config option: " + key + ": " + value + " | " + instance + " | " + root.getSimpleName() + ".yml"); } public boolean load(File file) { @@ -339,8 +343,8 @@ public class Config { Field field = instance.getClass().getField(toFieldName(split[split.length - 1])); setAccessible(field); return field; - } catch (Throwable e) { - Fawe.debug("Invalid config field: " + StringMan.join(split, ".") + " for " + toNodeName(instance.getClass().getSimpleName())); + } catch (Throwable ignored) { + log.debug("Invalid config field: " + StringMan.join(split, ".") + " for " + toNodeName(instance.getClass().getSimpleName())); return null; } } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/database/DBHandler.java b/worldedit-core/src/main/java/com/boydti/fawe/database/DBHandler.java index 097c9a63c..69bc90310 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/database/DBHandler.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/database/DBHandler.java @@ -1,11 +1,16 @@ package com.boydti.fawe.database; -import com.boydti.fawe.Fawe; +import com.boydti.fawe.config.Config; import com.sk89q.worldedit.world.World; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class DBHandler { + + private final Logger log = LoggerFactory.getLogger(Config.class); + public final static DBHandler IMP = new DBHandler(); private Map databases = new ConcurrentHashMap<>(8, 0.9f, 1); @@ -21,11 +26,7 @@ public class DBHandler { databases.put(worldName, database); return database; } catch (Throwable e) { - Fawe.debug("============ NO JDBC DRIVER! ============"); - Fawe.debug("TODO: Bundle driver with FAWE (or disable database)"); - Fawe.debug("========================================="); - e.printStackTrace(); - Fawe.debug("========================================="); + log.error("No JDBC driver found!\n TODO: Bundle driver with FAWE (or disable database)", e); return null; } } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/database/RollbackDatabase.java b/worldedit-core/src/main/java/com/boydti/fawe/database/RollbackDatabase.java index 970c31c20..e391c5763 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/database/RollbackDatabase.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/database/RollbackDatabase.java @@ -22,9 +22,14 @@ import java.sql.SQLException; import java.util.UUID; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.TimeUnit; +import java.util.stream.IntStream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class RollbackDatabase extends AsyncNotifyQueue { + private static final Logger log = LoggerFactory.getLogger(RollbackDatabase.class); + private final String prefix; private final File dbLocation; private final String worldName; @@ -113,27 +118,55 @@ public class RollbackDatabase extends AsyncNotifyQueue { public void purge(int diff) { long now = System.currentTimeMillis() / 1000; final int then = (int) (now - diff); - addTask(new Runnable() { - @Override - public void run() { - try (PreparedStatement stmt = connection.prepareStatement(PURGE)) { - stmt.setInt(1, then); - stmt.executeUpdate(); - } catch (SQLException e) { - e.printStackTrace(); - } + addTask(() -> { + try (PreparedStatement stmt = connection.prepareStatement(PURGE)) { + stmt.setInt(1, then); + stmt.executeUpdate(); + } catch (SQLException e) { + e.printStackTrace(); } }); } public void getPotentialEdits(UUID uuid, long minTime, BlockVector3 pos1, BlockVector3 pos2, RunnableVal onEach, Runnable whenDone, boolean delete, boolean ascending) { final World world = FaweAPI.getWorld(this.worldName); - addTask(new Runnable() { - @Override - public void run() { - String stmtStr = ascending ? uuid == null ? GET_EDITS_ASC : GET_EDITS_USER_ASC : - uuid == null ? GET_EDITS : GET_EDITS_USER; - try (PreparedStatement stmt = connection.prepareStatement(stmtStr)) { + addTask(() -> { + String stmtStr = ascending ? uuid == null ? GET_EDITS_ASC : GET_EDITS_USER_ASC : + uuid == null ? GET_EDITS : GET_EDITS_USER; + try (PreparedStatement stmt = connection.prepareStatement(stmtStr)) { + stmt.setInt(1, pos1.getBlockX()); + stmt.setInt(2, pos2.getBlockX()); + stmt.setByte(3, (byte) (pos1.getBlockY() - 128)); + stmt.setByte(4, (byte) (pos2.getBlockY() - 128)); + stmt.setInt(5, pos1.getBlockZ()); + stmt.setInt(6, pos2.getBlockZ()); + stmt.setInt(7, (int) (minTime / 1000)); + if (uuid != null) { + byte[] uuidBytes = ByteBuffer.allocate(16).putLong(uuid.getMostSignificantBits()).putLong(uuid.getLeastSignificantBits()).array(); + stmt.setBytes(8, uuidBytes); + } + ResultSet result = stmt.executeQuery(); + if (!result.next()) { + TaskManager.IMP.taskNow(whenDone, false); + return; + } + do { + byte[] uuidBytes = result.getBytes(1); + int index = result.getInt(2); + ByteBuffer bb = ByteBuffer.wrap(uuidBytes); + long high = bb.getLong(); + long low = bb.getLong(); + DiskStorageHistory history = new DiskStorageHistory(world, new UUID(high, low), index); + if (history.getBDFile().exists()) { + onEach.run(history); + } + } while (result.next()); + TaskManager.IMP.taskNow(whenDone, false); + } catch (SQLException e) { + e.printStackTrace(); + } + if (delete && uuid != null) { + try (PreparedStatement stmt = connection.prepareStatement(DELETE_EDITS_USER)) { stmt.setInt(1, pos1.getBlockX()); stmt.setInt(2, pos2.getBlockX()); stmt.setByte(3, (byte) (pos1.getBlockY() - 128)); @@ -141,45 +174,11 @@ public class RollbackDatabase extends AsyncNotifyQueue { stmt.setInt(5, pos1.getBlockZ()); stmt.setInt(6, pos2.getBlockZ()); stmt.setInt(7, (int) (minTime / 1000)); - if (uuid != null) { - byte[] uuidBytes = ByteBuffer.allocate(16).putLong(uuid.getMostSignificantBits()).putLong(uuid.getLeastSignificantBits()).array(); - stmt.setBytes(8, uuidBytes); - } - ResultSet result = stmt.executeQuery(); - if (!result.next()) { - TaskManager.IMP.taskNow(whenDone, false); - return; - } - do { - byte[] uuidBytes = result.getBytes(1); - int index = result.getInt(2); - ByteBuffer bb = ByteBuffer.wrap(uuidBytes); - long high = bb.getLong(); - long low = bb.getLong(); - DiskStorageHistory history = new DiskStorageHistory(world, new UUID(high, low), index); - if (history.getBDFile().exists()) { - onEach.run(history); - } - } while (result.next()); - TaskManager.IMP.taskNow(whenDone, false); + byte[] uuidBytes = ByteBuffer.allocate(16).putLong(uuid.getMostSignificantBits()).putLong(uuid.getLeastSignificantBits()).array(); + stmt.setBytes(8, uuidBytes); } catch (SQLException e) { e.printStackTrace(); } - if (delete && uuid != null) { - try (PreparedStatement stmt = connection.prepareStatement(DELETE_EDITS_USER)) { - stmt.setInt(1, pos1.getBlockX()); - stmt.setInt(2, pos2.getBlockX()); - stmt.setByte(3, (byte) (pos1.getBlockY() - 128)); - stmt.setByte(4, (byte) (pos2.getBlockY() - 128)); - stmt.setInt(5, pos1.getBlockZ()); - stmt.setInt(6, pos2.getBlockZ()); - stmt.setInt(7, (int) (minTime / 1000)); - byte[] uuidBytes = ByteBuffer.allocate(16).putLong(uuid.getMostSignificantBits()).putLong(uuid.getLeastSignificantBits()).array(); - stmt.setBytes(8, uuidBytes); - } catch (SQLException e) { - e.printStackTrace(); - } - } } }); } @@ -216,10 +215,8 @@ public class RollbackDatabase extends AsyncNotifyQueue { return false; } - RollbackOptimizedHistory[] copy = new RollbackOptimizedHistory[size]; - for (int i = 0; i < size; i++) { - copy[i] = historyChanges.poll(); - } + RollbackOptimizedHistory[] copy = IntStream.range(0, size) + .mapToObj(i -> historyChanges.poll()).toArray(RollbackOptimizedHistory[]::new); try (PreparedStatement stmt = connection.prepareStatement(INSERT_EDIT)) { for (RollbackOptimizedHistory change : copy) { @@ -276,7 +273,7 @@ public class RollbackDatabase extends AsyncNotifyQueue { dbLocation.createNewFile(); } catch (IOException e) { e.printStackTrace(); - Fawe.debug("&cUnable to create database!"); + log.debug("Unable to create the database!"); } } Class.forName("org.sqlite.JDBC"); @@ -330,7 +327,6 @@ public class RollbackDatabase extends AsyncNotifyQueue { * Checks if a connection is open with the database * * @return true if the connection is open - * @throws SQLException if the connection cannot be checked */ public boolean checkConnection() { try { diff --git a/worldedit-core/src/main/java/com/boydti/fawe/jnbt/CorruptSchematicStreamer.java b/worldedit-core/src/main/java/com/boydti/fawe/jnbt/CorruptSchematicStreamer.java index f20d9e8a8..2df358190 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/jnbt/CorruptSchematicStreamer.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/jnbt/CorruptSchematicStreamer.java @@ -18,9 +18,12 @@ import java.util.List; import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; import java.util.zip.GZIPInputStream; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class CorruptSchematicStreamer { + private final Logger log = LoggerFactory.getLogger(CorruptSchematicStreamer.class); private final InputStream stream; private final UUID uuid; private LinearClipboard fc; @@ -65,10 +68,9 @@ public class CorruptSchematicStreamer { matchIndex = 0; } } - Fawe.debug(" - Recover " + matchTag + " = success"); + log.debug(" - Recover " + matchTag + " = success"); } catch (Throwable e) { - Fawe.debug(" - Recover " + matchTag + " = partial failure"); - e.printStackTrace(); + log.error(" - Recover " + matchTag + " = partial failure", e); } } @@ -78,7 +80,7 @@ public class CorruptSchematicStreamer { } BlockVector3 dimensions = guessDimensions(volume.get(), width.get(), height.get(), length.get()); if (width.get() == 0 || height.get() == 0 || length.get() == 0) { - Fawe.debug("No dimensions found! Estimating based on factors:" + dimensions); + log.debug("No dimensions found! Estimating based on factors:" + dimensions); } if (Settings.IMP.CLIPBOARD.USE_DISK) { fc = new DiskOptimizedClipboard(dimensions, uuid); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAChunk.java b/worldedit-core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAChunk.java index 253ab1102..c89ef3b28 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAChunk.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAChunk.java @@ -173,10 +173,12 @@ public class MCAChunk implements IChunk { return root; } + @Override public int getX() { return chunkX; } + @Override public int getZ() { return chunkZ; } @@ -435,6 +437,7 @@ public class MCAChunk implements IChunk { return true; } + @Override public void setEntity(CompoundTag entityTag) { setModified(); long least = entityTag.getLong("UUIDLeast"); @@ -464,6 +467,7 @@ public class MCAChunk implements IChunk { return true; } + @Override public Set getEntities() { return new HashSet<>(entities.values()); } @@ -505,6 +509,7 @@ public class MCAChunk implements IChunk { return null; } + @Override public Set getEntityRemoves() { return new HashSet<>(); } @@ -542,6 +547,7 @@ public class MCAChunk implements IChunk { Arrays.fill(this.biomes, biome); } + @Override public void removeEntity(UUID uuid) { entities.remove(uuid); } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAFile.java b/worldedit-core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAFile.java index cb87a0575..db5aed22c 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAFile.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/jnbt/anvil/MCAFile.java @@ -1,6 +1,7 @@ package com.boydti.fawe.jnbt.anvil; -import com.boydti.fawe.Fawe; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.FaweCache; import com.boydti.fawe.beta.Trimable; import com.boydti.fawe.beta.implementation.IChunkExtent; @@ -18,7 +19,6 @@ import com.sk89q.worldedit.world.World; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream; - import java.io.BufferedInputStream; import java.io.File; import java.io.FileNotFoundException; @@ -40,7 +40,7 @@ import java.util.zip.InflaterInputStream; /** * Chunk format: http://minecraft.gamepedia.com/Chunk_format#Entity_format - * e.g.: `.Level.Entities.#` (Starts with a . as the root tag is unnamed) + * e.g., `.Level.Entities.#` (Starts with a . as the root tag is unnamed) * Note: This class isn't thread safe. You can use it in an async thread, but not multiple at the same time */ public class MCAFile extends ExtentBatchProcessorHolder implements Trimable, IChunkExtent { @@ -291,7 +291,7 @@ public class MCAFile extends ExtentBatchProcessorHolder implements Trimable, ICh if (offset < offsets.length) { offsets[offset] = i; } else { - Fawe.debug("Ignoring invalid offset " + offset); + getLogger(MCAFile.class).debug("Ignoring invalid offset " + offset); } } } @@ -707,4 +707,4 @@ public class MCAFile extends ExtentBatchProcessorHolder implements Trimable, ICh } } } -} \ No newline at end of file +} diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/brush/sweep/ClipboardSpline.java b/worldedit-core/src/main/java/com/boydti/fawe/object/brush/sweep/ClipboardSpline.java index 4dc8120ae..cfe5f99f9 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/brush/sweep/ClipboardSpline.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/brush/sweep/ClipboardSpline.java @@ -51,9 +51,9 @@ public class ClipboardSpline extends Spline { * to the first node, 0.25 to the second, 0.5 to the third, ... .
* By providing this method with the amount of nodes used by the interpolation implementation the distribution of the * nodes is converted to a proportional distribution based on the length between two adjacent nodes calculated by {@link Interpolation#arcLength(double, double)}.
- * This means that the distance between two positions used to paste the clipboard (e.g. 0.75 - 0.5 = 0.25) on the curve - * will always amount to that part of the length (e.g. 40 units) of the curve. In this example it would amount to - * 0.25 * 40 = 10 units of curve length between these two positions. + * This means that the distance between two positions used to paste the clipboard (e.g., 0.75 - 0.5 = 0.25) on the curve + * will always amount to that part of the length (e.g., 40 units) of the curve. In this example it would amount to + * 0.25 × 40 = 10 units of curve length between these two positions. *

* Be advised that currently subsequent changes to the interpolation parameters may not be supported. * @param editSession The EditSession which will be used when pasting the clipboard content @@ -115,4 +115,4 @@ public class ClipboardSpline extends Spline { return operation instanceof ForwardExtentCopy ? ((ForwardExtentCopy) operation).getAffected() : 0; } -} \ No newline at end of file +} diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/brush/sweep/Spline.java b/worldedit-core/src/main/java/com/boydti/fawe/object/brush/sweep/Spline.java index 68a3cee85..b7f2eafe4 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/brush/sweep/Spline.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/brush/sweep/Spline.java @@ -49,7 +49,7 @@ public abstract class Spline { * to the first node, 0.25 to the second, 0.5 to the third, ... .
* By providing this method with the amount of nodes used by the interpolation implementation the distribution of the * nodes is converted to a proportional distribution based on the length between two adjacent nodes calculated by {@link Interpolation#arcLength(double, double)}.
- * This means that the distance between two positions used to paste the clipboard (e.g. 0.75 - 0.5 = 0.25) on the curve + * This means that the distance between two positions used to paste the clipboard (e.g., 0.75 - 0.5 = 0.25) on the curve * will always amount to that part of the length (e.g. 40 units) of the curve. In this example it would amount to * 0.25 * 40 = 10 units of curve length between these two positions. *

@@ -73,7 +73,7 @@ public abstract class Spline { * Set the forward direction of the structure.
* This direction is used to determine the rotation of the clipboard to align to the curve. The horizontal slope * of the curve for a specific point is calculated by {@link Interpolation#get1stDerivative(double)}. - * Subsequently this angle between this vector and the gradient vector is calculated and the clipboard content + * Subsequently, this angle between this vector, and the gradient vector is calculated, and the clipboard content * is rotated by that angle to follow the curve slope. *

* The default direction is a (1;0) vector (pointing in the positive x-direction). @@ -87,7 +87,7 @@ public abstract class Spline { * Get the forward direction of the structure.
* This direction is used to determine the rotation of the clipboard to align to the curve. The horizontal slope * of the curve for a specific point is calculated by {@link Interpolation#get1stDerivative(double)}. - * Subsequently this angle between this vector and the gradient vector is calculated and the clipboard content + * Subsequently, this angle between this vector, and the gradient vector is calculated, and the clipboard content * is rotated by that angle to follow the curve slope. *

* The default direction is a (1;0) vector (pointing in the positive x-direction). @@ -192,4 +192,4 @@ public abstract class Spline { this.flexLength = flexLength; } } -} \ No newline at end of file +} diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/brush/visualization/cfi/HeightMapMCAGenerator.java b/worldedit-core/src/main/java/com/boydti/fawe/object/brush/visualization/cfi/HeightMapMCAGenerator.java index 5815b7228..9077ef0e3 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/brush/visualization/cfi/HeightMapMCAGenerator.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/brush/visualization/cfi/HeightMapMCAGenerator.java @@ -1,5 +1,7 @@ package com.boydti.fawe.object.brush.visualization.cfi; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.Fawe; import com.boydti.fawe.FaweCache; import com.boydti.fawe.beta.IBlocks; @@ -1982,7 +1984,7 @@ public class HeightMapMCAGenerator extends MCAWriter implements StreamChange, Dr @Override public IChunkGet get(int x, int z) { - Fawe.debug("Should not be using buffering with HMMG"); + getLogger(HeightMapMCAGenerator.class).debug("Should not be using buffering with HMMG"); return new FallbackChunkGet(this, x, z); } } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/change/CFIChange.java b/worldedit-core/src/main/java/com/boydti/fawe/object/change/CFIChange.java index fbb7c4b7c..7b263ef50 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/change/CFIChange.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/change/CFIChange.java @@ -1,6 +1,8 @@ package com.boydti.fawe.object.change; -import com.boydti.fawe.Fawe; +import static com.google.common.base.Preconditions.checkNotNull; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.object.brush.visualization.cfi.HeightMapMCAGenerator; import com.boydti.fawe.util.ExtentTraverser; import com.sk89q.worldedit.WorldEditException; @@ -9,9 +11,6 @@ import com.sk89q.worldedit.history.change.Change; import java.io.File; import java.io.IOException; - -import static com.google.common.base.Preconditions.checkNotNull; - public class CFIChange implements Change { private final File file; @@ -25,7 +24,7 @@ public class CFIChange implements Change { if (found != null) { return found.get(); } - Fawe.debug("FAWE does not support: " + context.getExtent() + " for " + getClass() + " (bug Empire92)"); + getLogger(CFIChange.class).debug("FAWE does not support: " + context.getExtent() + " for " + getClass() + " (bug Empire92)"); return null; } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/change/MutableEntityChange.java b/worldedit-core/src/main/java/com/boydti/fawe/object/change/MutableEntityChange.java index cfdadd8b5..bfab674e3 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/change/MutableEntityChange.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/change/MutableEntityChange.java @@ -1,6 +1,7 @@ package com.boydti.fawe.object.change; -import com.boydti.fawe.Fawe; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.beta.IQueueExtent; import com.boydti.fawe.util.MathMan; import com.sk89q.jnbt.CompoundTag; @@ -15,7 +16,6 @@ import com.sk89q.worldedit.history.change.Change; import com.sk89q.worldedit.util.Location; import com.sk89q.worldedit.world.entity.EntityType; import com.sk89q.worldedit.world.entity.EntityTypes; - import java.util.List; import java.util.Map; import java.util.UUID; @@ -59,7 +59,7 @@ public class MutableEntityChange implements Change { most = ((LongTag) map.get("PersistentIDMSB")).getValue(); least = ((LongTag) map.get("PersistentIDLSB")).getValue(); } else { - Fawe.debug("Skipping entity without uuid."); + getLogger(MutableEntityChange.class).debug("Skipping entity without uuid."); return; } List pos = (List) map.get("Pos").getValue(); @@ -74,7 +74,7 @@ public class MutableEntityChange implements Change { Map map = tag.getValue(); Tag posTag = map.get("Pos"); if (posTag == null) { - Fawe.debug("Missing pos tag: " + tag); + getLogger(MutableEntityChange.class).debug("Missing pos tag: " + tag); return; } List pos = (List) posTag.getValue(); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/FaweChangeSet.java b/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/FaweChangeSet.java index b640ab3cb..a7e8400fa 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/FaweChangeSet.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/changeset/FaweChangeSet.java @@ -1,5 +1,7 @@ package com.boydti.fawe.object.changeset; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.Fawe; import com.boydti.fawe.FaweAPI; import com.boydti.fawe.FaweCache; @@ -270,7 +272,7 @@ public abstract class FaweChangeSet implements ChangeSet, IBatchProcessor { } else if (change.getClass() == EntityRemove.class) { add((EntityRemove) change); } else { - Fawe.debug("Unknown change: " + change.getClass()); + getLogger(FaweChangeSet.class).debug("Unknown change: " + change.getClass()); } } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/io/BufferedRandomAccessFile.java b/worldedit-core/src/main/java/com/boydti/fawe/object/io/BufferedRandomAccessFile.java index 115f66bfd..1c81ede2e 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/io/BufferedRandomAccessFile.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/io/BufferedRandomAccessFile.java @@ -5,7 +5,7 @@ * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at + * with the License. You may obtain a copy of the License at *

* http://www.apache.org/licenses/LICENSE-2.0 *

diff --git a/worldedit-core/src/main/java/com/boydti/fawe/object/schematic/MinecraftStructure.java b/worldedit-core/src/main/java/com/boydti/fawe/object/schematic/MinecraftStructure.java index e207bea75..ef83c1285 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/object/schematic/MinecraftStructure.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/object/schematic/MinecraftStructure.java @@ -1,6 +1,7 @@ package com.boydti.fawe.object.schematic; -import com.boydti.fawe.Fawe; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.FaweCache; import com.boydti.fawe.util.ReflectionUtils; import com.sk89q.jnbt.CompoundTag; @@ -59,6 +60,7 @@ public class MinecraftStructure implements ClipboardReader, ClipboardWriter { return read(UUID.randomUUID()); } + @Override public Clipboard read(UUID clipboardId) throws IOException { NamedTag rootTag = inputStream.readNamedTag(); @@ -158,7 +160,7 @@ public class MinecraftStructure implements ClipboardReader, ClipboardWriter { int height = region.getHeight(); int length = region.getLength(); if (width > WARN_SIZE || height > WARN_SIZE || length > WARN_SIZE) { - Fawe.debug("A structure longer than 32 is unsupported by minecraft (but probably still works)"); + getLogger(MinecraftStructure.class).debug("A structure longer than 32 is unsupported by minecraft (but probably still works)"); } Map structure = FaweCache.IMP.asMap("version", 1, "author", owner); // ignored: version / owner diff --git a/worldedit-core/src/main/java/com/boydti/fawe/regions/general/integrations/plotquared/PlotSquaredFeature.java b/worldedit-core/src/main/java/com/boydti/fawe/regions/general/integrations/plotquared/PlotSquaredFeature.java index 71678cca7..0f3ae2684 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/regions/general/integrations/plotquared/PlotSquaredFeature.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/regions/general/integrations/plotquared/PlotSquaredFeature.java @@ -1,7 +1,7 @@ package com.boydti.fawe.regions.general.integrations.plotquared; -import com.boydti.fawe.Fawe; import com.boydti.fawe.FaweAPI; +import com.boydti.fawe.object.RegionWrapper; import com.boydti.fawe.regions.FaweMask; import com.boydti.fawe.regions.FaweMaskManager; import com.boydti.fawe.regions.general.RegionFilter; @@ -25,24 +25,31 @@ import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.regions.CuboidRegion; import com.sk89q.worldedit.regions.Region; import com.sk89q.worldedit.regions.RegionIntersection; - +import com.sk89q.worldedit.world.World; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors; - -import com.sk89q.worldedit.world.World; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class PlotSquaredFeature extends FaweMaskManager { + + private static final Logger log = LoggerFactory.getLogger(PlotSquaredFeature.class); + public PlotSquaredFeature() { super("PlotSquared"); - Fawe.debug("Optimizing PlotSquared"); + log.debug("Optimizing PlotSquared"); if (com.boydti.fawe.config.Settings.IMP.PLOTSQUARED_HOOK) { Settings.Enabled_Components.WORLDEDIT_RESTRICTIONS = false; - setupBlockQueue(); - setupSchematicHandler(); - setupChunkManager(); + try { + setupBlockQueue(); + setupSchematicHandler(); + setupChunkManager(); + } catch (Throwable ignored) { + log.debug("Please update PlotSquared: http://ci.athion.net/job/PlotSquared/"); + } if (Settings.PLATFORM.equalsIgnoreCase("bukkit")) { new FaweTrim(); } @@ -57,7 +64,7 @@ public class PlotSquaredFeature extends FaweMaskManager { new ReplaceAll(); } } catch (Throwable e) { - Fawe.debug("You need to update PlotSquared to access the CFI and REPLACEALL commands"); + log.debug("You need to update PlotSquared to access the CFI and REPLACEALL commands"); } */ } @@ -66,35 +73,23 @@ public class PlotSquaredFeature extends FaweMaskManager { return UUIDHandler.getName(uuid); } - private void setupBlockQueue() { - try { - // If it's going to fail, throw an error now rather than later - QueueProvider provider = QueueProvider.of(FaweLocalBlockQueue.class, null); - GlobalBlockQueue.IMP.setProvider(provider); - HybridPlotManager.REGENERATIVE_CLEAR = false; - Fawe.debug(" - QueueProvider: " + FaweLocalBlockQueue.class); - Fawe.debug(" - HybridPlotManager.REGENERATIVE_CLEAR: " + HybridPlotManager.REGENERATIVE_CLEAR); - } catch (Throwable e) { - Fawe.debug("Please update PlotSquared: http://ci.athion.net/job/PlotSquared/"); - } + private void setupBlockQueue() throws RuntimeException { + // If it's going to fail, throw an error now rather than later + QueueProvider provider = QueueProvider.of(FaweLocalBlockQueue.class, null); + GlobalBlockQueue.IMP.setProvider(provider); + HybridPlotManager.REGENERATIVE_CLEAR = false; + log.debug(" - QueueProvider: " + FaweLocalBlockQueue.class); + log.debug(" - HybridPlotManager.REGENERATIVE_CLEAR: " + HybridPlotManager.REGENERATIVE_CLEAR); } - private void setupChunkManager() { - try { - ChunkManager.manager = new FaweChunkManager(ChunkManager.manager); - Fawe.debug(" - ChunkManager: " + ChunkManager.manager); - } catch (Throwable e) { - Fawe.debug("Please update PlotSquared: http://ci.athion.net/job/PlotSquared/"); - } + private void setupChunkManager() throws RuntimeException { + ChunkManager.manager = new FaweChunkManager(ChunkManager.manager); + log.debug(" - ChunkManager: " + ChunkManager.manager); } - private void setupSchematicHandler() { - try { - SchematicHandler.manager = new FaweSchematicHandler(); - Fawe.debug(" - SchematicHandler: " + SchematicHandler.manager); - } catch (Throwable e) { - Fawe.debug("Please update PlotSquared: http://ci.athion.net/job/PlotSquared/"); - } + private void setupSchematicHandler() throws RuntimeException { + SchematicHandler.manager = new FaweSchematicHandler(); + log.debug(" - SchematicHandler: " + SchematicHandler.manager); } public boolean isAllowed(Player player, Plot plot, MaskType type) { @@ -128,9 +123,9 @@ public class PlotSquaredFeature extends FaweMaskManager { PlotArea area = pp.getApplicablePlotArea(); int min = area != null ? area.MIN_BUILD_HEIGHT : 0; int max = area != null ? Math.min(255, area.MAX_BUILD_HEIGHT) : 255; - final HashSet faweRegions = new HashSet<>(); + final HashSet faweRegions = new HashSet<>(); for (CuboidRegion current : regions) { - faweRegions.add(new com.boydti.fawe.object.RegionWrapper(current.getMinimumX(), current.getMaximumX(), min, max, current.getMinimumZ(), current.getMaximumZ())); + faweRegions.add(new RegionWrapper(current.getMinimumX(), current.getMaximumX(), min, max, current.getMinimumZ(), current.getMaximumZ())); } final CuboidRegion region = regions.iterator().next(); final BlockVector3 pos1 = BlockVector3.at(region.getMinimumX(), min, region.getMinimumZ()); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/BrushCache.java b/worldedit-core/src/main/java/com/boydti/fawe/util/BrushCache.java index 4d5e7ffba..8964a5ebe 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/util/BrushCache.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/util/BrushCache.java @@ -1,6 +1,7 @@ package com.boydti.fawe.util; -import com.boydti.fawe.Fawe; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.FaweCache; import com.boydti.fawe.object.brush.BrushSettings; import com.google.gson.Gson; @@ -12,7 +13,6 @@ import com.sk89q.worldedit.LocalSession; import com.sk89q.worldedit.blocks.BaseItem; import com.sk89q.worldedit.command.tool.BrushTool; import com.sk89q.worldedit.entity.Player; - import java.util.HashMap; import java.util.Map; import java.util.WeakHashMap; @@ -51,8 +51,7 @@ public final class BrushCache { brushCache.put(key, tool); return tool; } catch (Exception throwable) { - throwable.printStackTrace(); - Fawe.debug("Invalid brush for " + player + " holding " + item.getType() + ": " + json.getValue()); + getLogger(BrushCache.class).debug("Invalid brush for " + player + " holding " + item.getType() + ": " + json.getValue(), throwable); item.setNbtData(null); brushCache.remove(key); } finally { diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/DocumentationPrinter.java b/worldedit-core/src/main/java/com/boydti/fawe/util/DocumentationPrinter.java index 5d24d29ab..f86b28db0 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/util/DocumentationPrinter.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/util/DocumentationPrinter.java @@ -94,7 +94,7 @@ public final class DocumentationPrinter { stream.print(" - `[arg]` - An optional parameter \n"); stream.print(" - `` - Multiple parameters options \n"); stream.print(" - `` - Default or suggested value \n"); - stream.print(" - `-a` - A command flag e.g. `// -a [flag-value]`"); + stream.print(" - `-a` - A command flag e.g., `// -a [flag-value]`"); stream.println(); stream.print("## See also\n"); stream.print(" - [Masks](https://github.com/boy0001/FastAsyncWorldedit/wiki/WorldEdit---FAWE-mask-list)\n"); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/EditSessionBuilder.java b/worldedit-core/src/main/java/com/boydti/fawe/util/EditSessionBuilder.java index 790e2b36a..3a0d9008b 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/util/EditSessionBuilder.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/util/EditSessionBuilder.java @@ -242,16 +242,16 @@ public class EditSessionBuilder { return toReturn; } } - if (Settings.IMP.EXTENT.DEBUG) { - Fawe.debug("&cPotentially unsafe extent blocked: " + toReturn.getClass().getName()); - Fawe.debug("&8 - &7For area restrictions, it is recommended to use the FaweAPI"); - Fawe.debug("&8 - &7For block logging, it is recommended to use use BlocksHub"); - Fawe.debug("&8 - &7To allow this plugin add it to the FAWE `allowed-plugins` list"); - Fawe.debug("&8 - &7To hide this message set `debug` to false in the FAWE config.yml"); + if (Settings.IMP.EXTENT.DEBUG && event.getActor() != null) { + event.getActor().printDebug("Potentially unsafe extent blocked: " + toReturn.getClass().getName()); + event.getActor().printDebug(" - For area restrictions, it is recommended to use the FaweAPI"); + event.getActor().printDebug(" - For block logging, it is recommended to use use BlocksHub"); + event.getActor().printDebug(" - To allow this plugin add it to the FAWE `allowed-plugins` list"); + event.getActor().printDebug(" - To hide this message set `debug` to false in the FAWE config.yml"); if (toReturn.getClass().getName().contains("CoreProtect")) { - Fawe.debug("Note on CoreProtect: "); - Fawe.debug(" - If you disable CP's WE logger (CP config) and this still shows, please update CP"); - Fawe.debug(" - Use BlocksHub and set `debug` false in the FAWE config"); + event.getActor().printDebug("Note on CoreProtect: "); + event.getActor().printDebug(" - If you disable CP's WE logger (CP config) and this still shows, please update CP"); + event.getActor().printDebug(" - Use BlocksHub and set `debug` false in the FAWE config"); } } } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/Jars.java b/worldedit-core/src/main/java/com/boydti/fawe/util/Jars.java index e991ee747..fd5cb3434 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/util/Jars.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/util/Jars.java @@ -1,6 +1,7 @@ package com.boydti.fawe.util; -import com.boydti.fawe.Fawe; +import static org.slf4j.LoggerFactory.getLogger; + import java.io.DataInputStream; import java.io.IOException; import java.net.URL; @@ -10,35 +11,36 @@ import java.util.Base64; public enum Jars { - MM_v1_7_3("https://github.com/InventivetalentDev/MapManager/releases/download/1.7.3-SNAPSHOT/MapManager_v1.7.3-SNAPSHOT.jar", - "M3YLUQZZ66K2DMVDCYLEU38U3ZKRKHRAXQGGPVKFO6G=", 554831), + MM_v1_7_3( + "https://github.com/InventivetalentDev/MapManager/releases/download/1.7.3-SNAPSHOT/MapManager_v1.7.3-SNAPSHOT.jar", + "M3YLUQZZ66K2DMVDCYLEU38U3ZKRKHRAXQGGPVKFO6G=", 554831), - PL_v3_7_3("https://github.com/InventivetalentDev/PacketListenerAPI/releases/download/3.7.3-SNAPSHOT/PacketListenerAPI_v3.7.3-SNAPSHOT.jar", - "ETDBRZLN5PRVDFR/MSQDPM6JJER3WQOKHCN8FUXO5ZM=", 167205), + PL_v3_7_3( + "https://github.com/InventivetalentDev/PacketListenerAPI/releases/download/3.7.3-SNAPSHOT/PacketListenerAPI_v3.7.3-SNAPSHOT.jar", + "ETDBRZLN5PRVDFR/MSQDPM6JJER3WQOKHCN8FUXO5ZM=", 167205), ; public final String url; - public final int filesize; + public final int fileSize; public final String digest; /** - * @param url - * Where this jar can be found and downloaded - * @param digest - * The SHA-256 hexadecimal digest - * @param filesize - * Size of this jar in bytes + * @param url Where this jar can be found and downloaded + * @param digest The SHA-256 hexadecimal digest + * @param fileSize Size of this jar in bytes */ - Jars(String url, String digest, int filesize) { + Jars(String url, String digest, int fileSize) { this.url = url; this.digest = digest.toUpperCase(); - this.filesize = filesize; + this.fileSize = fileSize; } - /** download a jar, verify hash, return byte[] containing the jar */ + /** + * Download a jar, verify hash, return byte[] containing the jar + */ public byte[] download() throws IOException { - byte[] jarBytes = new byte[this.filesize]; + byte[] jarBytes = new byte[this.fileSize]; URL url = new URL(this.url); try (DataInputStream dis = new DataInputStream(url.openConnection().getInputStream())) { dis.readFully(jarBytes); @@ -51,14 +53,13 @@ public enum Jars { String jarDigest = Base64.getEncoder().encodeToString(jarDigestBytes).toUpperCase(); if (this.digest.equals(jarDigest)) { - Fawe.debug("++++ HASH CHECK ++++"); - Fawe.debug(this.url); - Fawe.debug(this.digest); + getLogger(Jars.class).debug("++++ HASH CHECK ++++"); + getLogger(Jars.class).debug(this.url); + getLogger(Jars.class).debug(this.digest); return jarBytes; } else { - - Fawe.debug(jarDigest + " | " + url); - throw new IllegalStateException("downloaded jar does not match the hash"); + getLogger(Jars.class).debug(jarDigest + " | " + url); + throw new IllegalStateException("The downloaded jar does not match the hash"); } } catch (NoSuchAlgorithmException e) { // Shouldn't ever happen, Minecraft won't even run on such a JRE diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/MainUtil.java b/worldedit-core/src/main/java/com/boydti/fawe/util/MainUtil.java index 56f8f972d..49e2d583f 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/util/MainUtil.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/util/MainUtil.java @@ -1,5 +1,8 @@ package com.boydti.fawe.util; +import static java.lang.System.arraycopy; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.Fawe; import com.boydti.fawe.config.BBC; import com.boydti.fawe.config.Settings; @@ -24,18 +27,7 @@ import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormat; import com.sk89q.worldedit.extent.clipboard.io.ClipboardFormats; import com.sk89q.worldedit.history.changeset.ChangeSet; import com.sk89q.worldedit.util.Location; -import it.unimi.dsi.fastutil.io.FastByteArrayOutputStream; -import net.jpountz.lz4.LZ4BlockInputStream; -import net.jpountz.lz4.LZ4BlockOutputStream; -import net.jpountz.lz4.LZ4Compressor; -import net.jpountz.lz4.LZ4Factory; -import net.jpountz.lz4.LZ4FastDecompressor; -import net.jpountz.lz4.LZ4InputStream; -import net.jpountz.lz4.LZ4Utils; - -import javax.annotation.Nullable; -import javax.imageio.ImageIO; -import java.awt.*; +import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; @@ -84,8 +76,15 @@ import java.util.zip.GZIPInputStream; import java.util.zip.Inflater; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; - -import static java.lang.System.arraycopy; +import javax.annotation.Nullable; +import javax.imageio.ImageIO; +import net.jpountz.lz4.LZ4BlockInputStream; +import net.jpountz.lz4.LZ4BlockOutputStream; +import net.jpountz.lz4.LZ4Compressor; +import net.jpountz.lz4.LZ4Factory; +import net.jpountz.lz4.LZ4FastDecompressor; +import net.jpountz.lz4.LZ4InputStream; +import net.jpountz.lz4.LZ4Utils; public class MainUtil { @@ -374,7 +373,7 @@ public class MainUtil { public static URL upload(String urlStr, boolean save, String uuid, String file, String extension, final RunnableVal writeTask) { if (writeTask == null) { - Fawe.debug("&cWrite task cannot be null"); + getLogger(MainUtil.class).debug("Write task cannot be null"); return null; } String filename = (file == null ? "plot" : file) + (extension != null ? "." + extension : ""); @@ -422,7 +421,7 @@ public class MainUtil { content = scanner.next().trim(); } if (!content.startsWith("<")) { - Fawe.debug(content); + getLogger(MainUtil.class).debug(content); } if (responseCode == 200) { return url; @@ -600,8 +599,7 @@ public class MainUtil { return newFile; } } catch (IOException e) { - e.printStackTrace(); - Fawe.debug("&cCould not save " + resource); + getLogger(MainUtil.class).debug("Could not save " + resource, e); } return null; } diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/TaskManager.java b/worldedit-core/src/main/java/com/boydti/fawe/util/TaskManager.java index 3e3a78fc8..7fb5e576a 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/util/TaskManager.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/util/TaskManager.java @@ -1,5 +1,7 @@ package com.boydti.fawe.util; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.Fawe; import com.boydti.fawe.beta.implementation.queue.QueueHandler; import com.boydti.fawe.config.Settings; @@ -66,7 +68,7 @@ public abstract class TaskManager { } /** - * Run a buch of tasks in parallel using the shared thread pool + * Run a bunch of tasks in parallel using the shared thread pool * * @param runnables */ @@ -80,8 +82,8 @@ public abstract class TaskManager { /** * Run a bunch of tasks in parallel * - * @param runnables The tasks to run - * @param numThreads Number of threads (null = config.yml parallel threads) + * @param runnables the tasks to run + * @param numThreads number of threads (null = config.yml parallel threads) */ @Deprecated public void parallel(Collection runnables, @Nullable Integer numThreads) { @@ -136,7 +138,6 @@ public abstract class TaskManager { /** * Disable async catching for a specific task * - * @param queue * @param run */ public void runUnsafe(Runnable run) { @@ -231,10 +232,9 @@ public abstract class TaskManager { * Break up a task and run it in fragments of 5ms.
* - Each task will run on the main thread.
* - * @param objects - The list of objects to run the task for - * @param task - The task to run on each object - * @param whenDone - When the object task completes - * @param + * @param objects the list of objects to run the task for + * @param task the task to run on each object + * @param whenDone when the object task completes */ public void objectTask(Collection objects, final RunnableVal task, final Runnable whenDone) { final Iterator iterator = objects.iterator(); @@ -264,7 +264,7 @@ public abstract class TaskManager { running.wait(timeout); if (running.get() && System.currentTimeMillis() - start > Settings.IMP.QUEUE.DISCARD_AFTER_MS) { new RuntimeException("FAWE is taking a long time to execute a task (might just be a symptom): ").printStackTrace(); - Fawe.debug("For full debug information use: /fawe threads"); + getLogger(TaskManager.class).debug("For full debug information use: /fawe threads"); } } } @@ -291,11 +291,9 @@ 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
+ * - Usually wait time is around 25ms
* * @param function - * @param timeout - How long to wait for execution - * @param * @return */ public T syncWhenFree(@NotNull final RunnableVal function) { @@ -313,11 +311,9 @@ public abstract class TaskManager { /** * 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
- * - Usualy wait time is around 25ms
+ * - Usually wait time is around 25ms
* * @param function - * @param timeout - How long to wait for execution - * @param * @return */ public T sync(@NotNull final RunnableVal function) { @@ -330,7 +326,6 @@ public abstract class TaskManager { * - Usually wait time is around 25ms
* * @param function - * @param * @return */ public T sync(final Supplier function) { diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/TextureUtil.java b/worldedit-core/src/main/java/com/boydti/fawe/util/TextureUtil.java index 0719e2005..d39442550 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/util/TextureUtil.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/util/TextureUtil.java @@ -1,5 +1,7 @@ package com.boydti.fawe.util; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.Fawe; import com.boydti.fawe.beta.implementation.filter.block.SingleFilterBlock; import com.boydti.fawe.config.Settings; @@ -18,8 +20,6 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.ints.IntArraySet; import it.unimi.dsi.fastutil.longs.LongArrayList; - -import java.awt.Color; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileNotFoundException; @@ -607,8 +607,8 @@ public class TextureUtil implements TextureHolder { } } if (files.length == 0) { - Fawe.debug( - "Please create a `FastAsyncWorldEdit/textures` folder with `.minecraft/versions/1.13.jar` jar or mods in it. If the file exists, please make sure the server has read access to the directory"); + getLogger(TextureUtil.class).debug( + "Please create a `FastAsyncWorldEdit/textures` folder with `.minecraft/versions/1.14.jar` jar or mods in it. If the file exists, please make sure the server has read access to the directory"); } else { for (File file : files) { ZipFile zipFile = new ZipFile(file); diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/image/ImageUtil.java b/worldedit-core/src/main/java/com/boydti/fawe/util/image/ImageUtil.java index 80685f39a..2a07dff0b 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/util/image/ImageUtil.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/util/image/ImageUtil.java @@ -33,9 +33,9 @@ public class ImageUtil { BufferedImage scaledImage = image; int width, height; if (higherQuality) { - // Use multi-step technique: start with original size, then - // scale down in multiple passes with drawImage() - // until the target size is reached + /* Use multi-step technique: start with original size, then + scale down in multiple passes with drawImage() + until the target size is reached. */ width = scaledImage.getWidth(); height = scaledImage.getHeight(); } else { diff --git a/worldedit-core/src/main/java/com/boydti/fawe/util/task/TaskBuilder.java b/worldedit-core/src/main/java/com/boydti/fawe/util/task/TaskBuilder.java index 9855bf49a..c9b0865cf 100644 --- a/worldedit-core/src/main/java/com/boydti/fawe/util/task/TaskBuilder.java +++ b/worldedit-core/src/main/java/com/boydti/fawe/util/task/TaskBuilder.java @@ -80,7 +80,7 @@ public class TaskBuilder extends Metadatable { /** * Run some sync tasks in parallel
- * - All sync parallel tasks which occur directly after each other will be run at the same time + * - All sync parallel tasks, which occur directly after each other will be run at the same time * * @param run * @return this @@ -200,7 +200,7 @@ public class TaskBuilder extends Metadatable { /** * Have all async tasks run on a new thread
- * - As opposed to trying to using the current thread + * - As opposed to trying to use the current thread */ public void buildAsync() { TaskManager.IMP.async(this::build); diff --git a/worldedit-core/src/main/java/com/sk89q/jnbt/CompoundTag.java b/worldedit-core/src/main/java/com/sk89q/jnbt/CompoundTag.java index ed75d9cef..8768a3b39 100644 --- a/worldedit-core/src/main/java/com/sk89q/jnbt/CompoundTag.java +++ b/worldedit-core/src/main/java/com/sk89q/jnbt/CompoundTag.java @@ -20,10 +20,8 @@ package com.sk89q.jnbt; import com.sk89q.worldedit.extent.Extent; -import com.sk89q.worldedit.math.BlockVector3; import com.sk89q.worldedit.math.Vector3; import com.sk89q.worldedit.util.Location; - import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -269,7 +267,7 @@ public class CompoundTag extends Tag { * *

If the key does not exist or its value is not a list tag, * then an empty list will be returned. If the given key references - * a list but the list of of a different type, then an empty + * a list but the list of a different type, then an empty * list will also be returned.

* * @param key the key @@ -295,7 +293,7 @@ public class CompoundTag extends Tag { /** * Get a {@code long[]} named with the given key. * - *

If the key does not exist or its value is not an long array tag, + *

If the key does not exist or its value is not a long array tag, * then an empty array will be returned.

* * @param key the key diff --git a/worldedit-core/src/main/java/com/sk89q/jnbt/NBTConstants.java b/worldedit-core/src/main/java/com/sk89q/jnbt/NBTConstants.java index 77fc3632e..02ec68789 100644 --- a/worldedit-core/src/main/java/com/sk89q/jnbt/NBTConstants.java +++ b/worldedit-core/src/main/java/com/sk89q/jnbt/NBTConstants.java @@ -19,8 +19,6 @@ package com.sk89q.jnbt; -import com.sk89q.worldedit.math.BlockVector3; - import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; diff --git a/worldedit-core/src/main/java/com/sk89q/minecraft/util/commands/CommandException.java b/worldedit-core/src/main/java/com/sk89q/minecraft/util/commands/CommandException.java index 4345793d1..e6834fdb8 100644 --- a/worldedit-core/src/main/java/com/sk89q/minecraft/util/commands/CommandException.java +++ b/worldedit-core/src/main/java/com/sk89q/minecraft/util/commands/CommandException.java @@ -53,7 +53,7 @@ public class CommandException extends Exception { /** * Gets the command that was called, which will include the sub-command - * (i.e. "/br sphere"). + * (i.e., "/br sphere"). * * @param prefix the command shebang character (such as "/") -- may be empty * @param spacedSuffix a suffix to put at the end (optional) -- may be null diff --git a/worldedit-core/src/main/java/com/sk89q/util/yaml/YAMLNode.java b/worldedit-core/src/main/java/com/sk89q/util/yaml/YAMLNode.java index 0742c9ceb..cca293ddf 100644 --- a/worldedit-core/src/main/java/com/sk89q/util/yaml/YAMLNode.java +++ b/worldedit-core/src/main/java/com/sk89q/util/yaml/YAMLNode.java @@ -62,11 +62,11 @@ public class YAMLNode { /** * Gets a property at a location. This will either return an Object - * or null, with null meaning that no configuration value exists at + * or null, with null meaning no configuration value exists at * that location. This could potentially return a default value (not yet * implemented) as defined by a plugin, if this is a plugin-tied * configuration. - * + * * @param path path to node (dot notation) * @return object or null */ @@ -107,7 +107,7 @@ public class YAMLNode { /** * Prepare a value for serialization, in case it's not a native type * (and we don't want to serialize objects as YAML objects). - * + * * @param value the value to serialize * @return the new object */ @@ -146,7 +146,7 @@ public class YAMLNode { /** * Set the property at a location. This will override existing * configuration data to have it conform to key/value mappings. - * + * * @param path the path * @param value the new value */ @@ -185,7 +185,7 @@ public class YAMLNode { * Adds a new node to the given path. The returned object is a reference * to the new node. This method will replace an existing node at * the same path. See {@code setProperty}. - * + * * @param path the path * @return a node for the path */ @@ -197,11 +197,11 @@ public class YAMLNode { } /** - * Gets a string at a location. This will either return an String + * Gets a string at a location. This will either return a String * or null, with null meaning that no configuration value exists at * that location. If the object at the particular location is not actually * a string, it will be converted to its string representation. - * + * * @param path path to node (dot notation) * @return string or null */ @@ -214,10 +214,10 @@ public class YAMLNode { } /** - * Gets a vector at a location. This will either return an Vector + * Gets a vector at a location. This will either return a Vector * or a null. If the object at the particular location is not * actually a string, it will be converted to its string representation. - * + * * @param path path to node (dot notation) * @return string or default */ @@ -239,10 +239,10 @@ public class YAMLNode { } /** - * Gets a 2D vector at a location. This will either return an Vector + * Gets a 2D vector at a location. This will either return a Vector * or a null. If the object at the particular location is not * actually a string, it will be converted to its string representation. - * + * * @param path path to node (dot notation) * @return string or default */ @@ -263,10 +263,10 @@ public class YAMLNode { } /** - * Gets a string at a location. This will either return an Vector + * Gets a string at a location. This will either return a Vector * or the default value. If the object at the particular location is not * actually a string, it will be converted to its string representation. - * + * * @param path path to node (dot notation) * @param def default value * @return string or default @@ -281,10 +281,10 @@ public class YAMLNode { } /** - * Gets a string at a location. This will either return an String + * Gets a string at a location. This will either return a String * or the default value. If the object at the particular location is not * actually a string, it will be converted to its string representation. - * + * * @param path path to node (dot notation) * @param def default value * @return string or default @@ -303,7 +303,7 @@ public class YAMLNode { * or null. If the object at the particular location is not * actually a integer, the default value will be returned. However, other * number types will be casted to an integer. - * + * * @param path path to node (dot notation) * @return integer or null */ @@ -321,7 +321,7 @@ public class YAMLNode { * or the default value. If the object at the particular location is not * actually a integer, the default value will be returned. However, other * number types will be casted to an integer. - * + * * @param path path to node (dot notation) * @param def default value * @return int or default @@ -337,11 +337,11 @@ public class YAMLNode { } /** - * Gets a double at a location. This will either return an double + * Gets a double at a location. This will either return a double * or null. If the object at the particular location is not * actually a double, the default value will be returned. However, other - * number types will be casted to an double. - * + * number types will be casted to a double. + * * @param path path to node (dot notation) * @return double or null */ @@ -355,11 +355,11 @@ public class YAMLNode { } /** - * Gets a double at a location. This will either return an double + * Gets a double at a location. This will either return a double * or the default value. If the object at the particular location is not * actually a double, the default value will be returned. However, other - * number types will be casted to an double. - * + * number types will be casted to a double. + * * @param path path to node (dot notation) * @param def default value * @return double or default @@ -375,10 +375,10 @@ public class YAMLNode { } /** - * Gets a boolean at a location. This will either return an boolean + * Gets a boolean at a location. This will either return a boolean * or null. If the object at the particular location is not * actually a boolean, the default value will be returned. - * + * * @param path path to node (dot notation) * @return boolean or null */ @@ -392,10 +392,10 @@ public class YAMLNode { } /** - * Gets a boolean at a location. This will either return an boolean + * Gets a boolean at a location. This will either return a boolean * or the default value. If the object at the particular location is not * actually a boolean, the default value will be returned. - * + * * @param path path to node (dot notation) * @param def default value * @return boolean or default @@ -413,7 +413,7 @@ public class YAMLNode { /** * Get a list of keys at a location. If the map at the particular location * does not exist or it is not a map, null will be returned. - * + * * @param path path to node (dot notation) * @return list of keys */ @@ -433,7 +433,7 @@ public class YAMLNode { /** * Gets a list of objects at a location. If the list is not defined, * null will be returned. The node must be an actual list. - * + * * @param path path to node (dot notation) * @return boolean or default */ @@ -456,7 +456,7 @@ public class YAMLNode { * and an empty list will be returned instead. If an item in the list * is not a string, it will be converted to a string. The node must be * an actual list and not just a string. - * + * * @param path path to node (dot notation) * @param def default value or null for an empty list as default * @return list of strings @@ -486,7 +486,7 @@ public class YAMLNode { * default will be returned. 'null' can be passed for the default * and an empty list will be returned instead. The node must be * an actual list and not just an integer. - * + * * @param path path to node (dot notation) * @param def default value or null for an empty list as default * @return list of integers @@ -515,7 +515,7 @@ public class YAMLNode { * default will be returned. 'null' can be passed for the default * and an empty list will be returned instead. The node must be * an actual list and cannot be just a double. - * + * * @param path path to node (dot notation) * @param def default value or null for an empty list as default * @return list of integers @@ -544,7 +544,7 @@ public class YAMLNode { * default will be returned. 'null' can be passed for the default * and an empty list will be returned instead. The node must be * an actual list and cannot be just a boolean, - * + * * @param path path to node (dot notation) * @param def default value or null for an empty list as default * @return list of integers @@ -573,7 +573,7 @@ public class YAMLNode { * default will be returned. 'null' can be passed for the default * and an empty list will be returned instead. The node must be * an actual node and cannot be just a vector, - * + * * @param path path to node (dot notation) * @param def default value or null for an empty list as default * @return list of integers @@ -603,7 +603,7 @@ public class YAMLNode { * default will be returned. 'null' can be passed for the default * and an empty list will be returned instead. The node must be * an actual node and cannot be just a vector, - * + * * @param path path to node (dot notation) * @param def default value or null for an empty list as default * @return list of integers @@ -633,7 +633,7 @@ public class YAMLNode { * default will be returned. 'null' can be passed for the default * and an empty list will be returned instead. The node must be * an actual node and cannot be just a vector, - * + * * @param path path to node (dot notation) * @param def default value or null for an empty list as default * @return list of integers @@ -663,7 +663,7 @@ public class YAMLNode { * default will be returned. 'null' can be passed for the default * and an empty list will be returned instead. The node must be * an actual node and cannot be just a boolean, - * + * * @param path path to node (dot notation) * @param def default value or null for an empty list as default * @return list of integers @@ -690,7 +690,7 @@ public class YAMLNode { * Get a configuration node at a path. If the node doesn't exist or the * path does not lead to a node, null will be returned. A node has * key/value mappings. - * + * * @param path the path * @return node or null */ @@ -708,7 +708,7 @@ public class YAMLNode { /** * Get a list of nodes at a location. If the map at the particular location * does not exist or it is not a map, null will be returned. - * + * * @param path path to node (dot notation) * @return map of nodes */ @@ -736,7 +736,7 @@ public class YAMLNode { /** * Casts a value to an integer. May return null. - * + * * @param o the object * @return an integer or null */ @@ -788,7 +788,7 @@ public class YAMLNode { /** * Remove the property at a location. This will override existing * configuration data to have it conform to key/value mappings. - * + * * @param path a path */ @SuppressWarnings("unchecked") diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java b/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java index 42c8f81f1..37dd8ea24 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/EditSession.java @@ -445,6 +445,7 @@ public class EditSession extends PassthroughExtent implements AutoCloseable { * @return whether the queue is enabled * @deprecated Use {@link EditSession#getReorderMode()} with MULTI_STAGE instead. */ + @Override @Deprecated public boolean isQueueEnabled() { return true; @@ -456,6 +457,7 @@ public class EditSession extends PassthroughExtent implements AutoCloseable { * Uses {@link ReorderMode#MULTI_STAGE} * @deprecated Use {@link EditSession#setReorderMode(ReorderMode)} with MULTI_STAGE instead. */ + @Override @Deprecated public void enableQueue() { super.enableQueue(); @@ -464,6 +466,7 @@ public class EditSession extends PassthroughExtent implements AutoCloseable { /** * Disable the queue. This will close the queue. */ + @Override @Deprecated public void disableQueue() { super.disableQueue(); @@ -1537,7 +1540,7 @@ public class EditSession extends PassthroughExtent implements AutoCloseable { /** * Drain nearby pools of water or lava, optionally removed waterlogged states from blocks. * - * @param origin the origin to drain from, which will search a 3x3 area + * @param origin the origin to drain from, which will search a 3×3 area * @param radius the radius of the removal, where a value should be 0 or greater * @param waterlogged true to make waterlogged blocks non-waterlogged as well * @return number of blocks affected @@ -1566,7 +1569,7 @@ public class EditSession extends PassthroughExtent implements AutoCloseable { } RecursiveVisitor visitor = new RecursiveVisitor(mask, replace, (int) (radius * 2 + 1)); - // Around the origin in a 3x3 block + // Around the origin in a 3×3 block for (BlockVector3 position : CuboidRegion.fromCenter(origin, 1)) { if (mask.test(position)) { visitor.visit(position); @@ -1607,7 +1610,7 @@ public class EditSession extends PassthroughExtent implements AutoCloseable { BlockReplace replace = new BlockReplace(this, fluid.getDefaultState()); NonRisingVisitor visitor = new NonRisingVisitor(mask, replace); - // Around the origin in a 3x3 block + // Around the origin in a 3×3 block for (BlockVector3 position : CuboidRegion.fromCenter(origin, 1)) { if (liquidMask.test(position)) { visitor.visit(position); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/LocalSession.java b/worldedit-core/src/main/java/com/sk89q/worldedit/LocalSession.java index 779a4aba8..eb473dfc0 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/LocalSession.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/LocalSession.java @@ -39,7 +39,6 @@ import com.boydti.fawe.util.StringMan; import com.boydti.fawe.util.TextureHolder; import com.boydti.fawe.util.TextureUtil; import com.boydti.fawe.wrappers.WorldWrapper; -import com.google.common.collect.Maps; import com.sk89q.jchronic.Chronic; import com.sk89q.jchronic.Options; import com.sk89q.jchronic.utils.Span; @@ -88,10 +87,8 @@ import java.io.FileOutputStream; import java.io.IOException; import java.time.ZoneId; import java.util.Calendar; -import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.IdentityHashMap; import java.util.LinkedList; import java.util.List; import java.util.ListIterator; @@ -889,7 +886,7 @@ public class LocalSession implements TextureHolder { /** * Get the position use for commands that take a center point - * (i.e. //forestgen, etc.). + * (i.e., //forestgen, etc.). * * @param actor the actor * @return the position to use diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/BrushCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/BrushCommands.java index 4be216a84..c7c5c14ef 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/BrushCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/BrushCommands.java @@ -157,7 +157,7 @@ public class BrushCommands { aliases = {"bb", "blend"}, desc = "Smooths and blends terrain", descFooter = "Smooths and blends terrain\n" + - "Pic: https://i.imgur.com/cNUQUkj.png -> https://i.imgur.com/hFOFsNf.png" + "Pic: https://i.imgur.com/cNUQUkj.png → https://i.imgur.com/hFOFsNf.png" ) @CommandPermissions("worldedit.brush.blendball") public void blendBallBrush(InjectedValueAccess context, @@ -203,7 +203,7 @@ public class BrushCommands { @Command( name = "circle", - desc = "Creates a circle which revolves around your facing direction" + desc = "Creates a circle, which revolves around your facing direction" ) @CommandPermissions("worldedit.brush.sphere") public void circleBrush(Player player, InjectedValueAccess context, @@ -285,7 +285,7 @@ public class BrushCommands { ) @CommandPermissions("worldedit.brush.sweep") public void sweepBrush(Player player, InjectedValueAccess context, - @Arg(name = "copies", desc = "int", def = "-1") int copies) throws WorldEditException { + @Arg(desc = "int", def = "-1") int copies) throws WorldEditException { player.print(BBC.BRUSH_SPLINE.s()); set(context, new SweepBrush(copies)); } @@ -324,10 +324,11 @@ public class BrushCommands { @CommandPermissions("worldedit.brush.surfacespline") // 0, 0, 0, 10, 0, public void surfaceSpline(Player player, InjectedValueAccess context, Pattern fill, @Arg(desc = "The radius to sample for blending", def = "0") - Expression radius, @Arg(name = "tension", desc = "double", def = "0") double tension, - @Arg(name = "bias", desc = "double", def = "0") double bias, - @Arg(name = "continuity", desc = "double", def = "0") double continuity, - @Arg(name = "quality", desc = "double", def = "10") double quality) throws WorldEditException { + Expression radius, + @Arg(desc = "double", def = "0") double tension, + @Arg(desc = "double", def = "0") double bias, + @Arg(desc = "double", def = "0") double continuity, + @Arg(desc = "double", def = "10") double quality) throws WorldEditException { player.print(BBC.BRUSH_SPLINE.format(radius)); worldEdit.checkMaxBrushRadius(radius); set(context, @@ -343,13 +344,13 @@ public class BrushCommands { ) @CommandPermissions("worldedit.brush.rock") public void blobBrush(InjectedValueAccess context, Pattern fill, - @Arg(name = "radius", desc = "Vector3", def = "10") + @Arg(desc = "Vector3", def = "10") Vector3 radius, - @Arg(name = "sphericity", desc = "double", def = "100") + @Arg(desc = "double", def = "100") double sphericity, - @Arg(name = "frequency", desc = "double", def = "30") + @Arg(desc = "double", def = "30") double frequency, - @Arg(name = "amplitude", desc = "double", def = "50") + @Arg(desc = "double", def = "50") double amplitude) throws WorldEditException { double max = MathMan.max(radius.getX(), radius.getY(), radius.getZ()); worldEdit.checkMaxBrushRadius(max); @@ -424,10 +425,10 @@ public class BrushCommands { ) @CommandPermissions("worldedit.brush.stencil") public void stencilBrush(LocalSession session, InjectedValueAccess context, Pattern fill, - @Arg(name = "radius", desc = "Expression", def = "5") Expression radius, - @Arg(name = "image", desc = "String", def = "") String image, + @Arg(desc = "Expression", def = "5") Expression radius, + @Arg(desc = "String", def = "") String image, @Arg(def = "0", desc = "rotation") @Range(min = 0, max = 360) int rotation, - @Arg(name = "yscale", desc = "double", def = "1") double yscale, + @Arg(desc = "double", def = "1") double yscale, @Switch(name = 'w', desc = "Apply at maximum saturation") boolean onlyWhite, @Switch(name = 'r', desc = "Apply random rotation") boolean randomRotate) throws WorldEditException, FileNotFoundException { worldEdit.checkMaxBrushRadius(radius); @@ -454,7 +455,7 @@ public class BrushCommands { descFooter = "Use a height map to paint any surface.\n") @CommandPermissions("worldedit.brush.stencil") public void imageBrush(LocalSession session, InjectedValueAccess context, - @Arg(name = "radius", desc = "Expression", def = "5") + @Arg(desc = "Expression", def = "5") Expression radius, ProvideBindings.ImageUri imageUri, @Arg(def = "1", desc = "scale height") @Range(min = Double.MIN_NORMAL) @@ -487,7 +488,7 @@ public class BrushCommands { ) @CommandPermissions("worldedit.brush.surface") public void surfaceBrush(InjectedValueAccess context, Pattern fill, - @Arg(name = "radius", desc = "Expression", def = "5") + @Arg(desc = "Expression", def = "5") Expression radius) throws WorldEditException { worldEdit.checkMaxBrushRadius(radius); set(context, new SurfaceSphereBrush()).setFill(fill).setSize(radius); @@ -501,16 +502,16 @@ public class BrushCommands { ) @CommandPermissions("worldedit.brush.scatter") public void scatterBrush(InjectedValueAccess context, Pattern fill, - @Arg(name = "radius", desc = "Expression", def = "5") Expression radius, - @Arg(name = "points", desc = "double", def = "5") double pointsOpt, - @Arg(name = "distance", desc = "double", def = "1") double distanceOpt, + @Arg(desc = "Expression", def = "5") Expression radius, + @Arg(desc = "double", def = "5") double points, + @Arg(desc = "double", def = "1") double distance, @Switch(name = 'o', desc = "Overlay the block") boolean overlay) throws WorldEditException { worldEdit.checkMaxBrushRadius(radius); Brush brush; if (overlay) { - brush = new ScatterOverlayBrush((int) pointsOpt, (int) distanceOpt); + brush = new ScatterOverlayBrush((int) points, (int) distance); } else { - brush = new ScatterBrush((int) pointsOpt, (int) distanceOpt); + brush = new ScatterBrush((int) points, (int) distance); } set(context, brush).setSize(radius).setFill(fill); } @@ -523,8 +524,8 @@ public class BrushCommands { @CommandPermissions("worldedit.brush.populateschematic") public void scatterSchemBrush(Player player, InjectedValueAccess context, Mask mask, @Arg(name = "clipboard", desc = "Clipboard uri") String clipboardStr, - @Arg(name = "radius", desc = "Expression", def = "30") Expression radius, - @Arg(name = "density", desc = "double", def = "50") double density, + @Arg(desc = "Expression", def = "30") Expression radius, + @Arg(desc = "double", def = "50") double density, @Switch(name = 'r', desc = "Apply random rotation") boolean rotate) throws WorldEditException { worldEdit.checkMaxBrushRadius(radius); try { @@ -555,7 +556,7 @@ public class BrushCommands { ) @CommandPermissions("worldedit.brush.layer") public void surfaceLayer(InjectedValueAccess context, - @Arg(name = "radius", desc = "Expression") Expression radius, List blockLayers) throws WorldEditException { + @Arg(desc = "Expression") Expression radius, List blockLayers) throws WorldEditException { worldEdit.checkMaxBrushRadius(radius); set(context, new LayerBrush(blockLayers.toArray(new BlockState[0]))).setSize(radius); } @@ -570,12 +571,12 @@ public class BrushCommands { ) @CommandPermissions("worldedit.brush.splatter") public void splatterBrush(InjectedValueAccess context, Pattern fill, - @Arg(name = "radius", desc = "Expression", def = "5") Expression radius, - @Arg(name = "points", desc = "double", def = "1") double pointsOpt, - @Arg(name = "recursion", desc = "double", def = "5") double recursion, - @Arg(name = "solid", desc = "boolean", def = "true") boolean solid) throws WorldEditException { + @Arg(desc = "Expression", def = "5") Expression radius, + @Arg(desc = "double", def = "1") double points, + @Arg(desc = "double", def = "5") double recursion, + @Arg(desc = "boolean", def = "true") boolean solid) throws WorldEditException { worldEdit.checkMaxBrushRadius(radius); - set(context, new SplatterBrush((int) pointsOpt, (int) recursion, solid)).setSize(radius).setFill(fill); + set(context, new SplatterBrush((int) points, (int) recursion, solid)).setSize(radius).setFill(fill); } @Command( @@ -590,7 +591,7 @@ public class BrushCommands { ) @CommandPermissions("worldedit.brush.scattercommand") public void scatterCommandBrush(Player player, InjectedValueAccess context, - @Arg(name = "radius", desc = "Expression") Expression radius, double points, + @Arg(desc = "Expression") Expression radius, double points, double distance, List commandStr) throws WorldEditException { worldEdit.checkMaxBrushRadius(radius); set(context, @@ -732,7 +733,7 @@ public class BrushCommands { "Snow Pic: https://i.imgur.com/Hrzn0I4.png" ) @CommandPermissions("worldedit.brush.height") - public void heightBrush(LocalSession session, @Arg(name = "radius", desc = "Expression", def = "5") Expression radius, @Arg(name = "image", desc = "String", def = "") String image, @Arg(def = "0", desc = "rotation") @Range(min = 0, max = 360) int rotation, @Arg(name = "yscale", desc = "double", def = "1") double yscale, @Switch(name = 'r', desc = "TODO") boolean randomRotate, @Switch(name = 'l', desc = "TODO") boolean layers, @Switch(name = 's', desc = "TODO") boolean dontSmooth, InjectedValueAccess context) throws WorldEditException, FileNotFoundException { + public void heightBrush(LocalSession session, @Arg(desc = "Expression", def = "5") Expression radius, @Arg(desc = "String", def = "") String image, @Arg(def = "0", desc = "rotation") @Range(min = 0, max = 360) int rotation, @Arg(desc = "double", def = "1") double yscale, @Switch(name = 'r', desc = "TODO") boolean randomRotate, @Switch(name = 'l', desc = "TODO") boolean layers, @Switch(name = 's', desc = "TODO") boolean dontSmooth, InjectedValueAccess context) throws WorldEditException, FileNotFoundException { terrainBrush(session, radius, image, rotation, yscale, false, randomRotate, layers, !dontSmooth, ScalableHeightMap.Shape.CONE, context); } @@ -744,13 +745,13 @@ public class BrushCommands { ) @CommandPermissions("worldedit.brush.height") public void cliffBrush(LocalSession session, - @Arg(name = "radius", desc = "Expression", def = "5") + @Arg(desc = "Expression", def = "5") Expression radius, - @Arg(name = "image", desc = "String", def = "") + @Arg(desc = "String", def = "") String image, @Arg(def = "0", desc = "rotation") @Step(90) @Range(min = 0, max = 360) int rotation, - @Arg(name = "yscale", desc = "double", def = "1") + @Arg(desc = "double", def = "1") double yscale, @Switch(name = 'r', desc = "Enables random off-axis rotation") boolean randomRotate, @@ -767,7 +768,7 @@ public class BrushCommands { desc = "This brush raises or lowers land towards the clicked point" ) @CommandPermissions("worldedit.brush.height") - public void flattenBrush(LocalSession session, @Arg(name = "radius", desc = "Expression", def = "5") Expression radius, @Arg(name = "image", desc = "String", def = "") String image, @Arg(def = "0", desc = "rotation") @Step(90) @Range(min = 0, max = 360) int rotation, @Arg(name = "yscale", desc = "double", def = "1") double yscale, + public void flattenBrush(LocalSession session, @Arg(desc = "Expression", def = "5") Expression radius, @Arg(desc = "String", def = "") String image, @Arg(def = "0", desc = "rotation") @Step(90) @Range(min = 0, max = 360) int rotation, @Arg(desc = "double", def = "1") double yscale, @Switch(name = 'r', desc = "Enables random off-axis rotation") boolean randomRotate, @Switch(name = 'l', desc = "Will work on snow layers") @@ -778,7 +779,7 @@ public class BrushCommands { } private void terrainBrush(LocalSession session, - @Arg(name = "radius", desc = "Expression") Expression radius, String image, int rotation, + @Arg(desc = "Expression") Expression radius, String image, int rotation, double yscale, boolean flat, boolean randomRotate, boolean layers, boolean smooth, Shape shape, InjectedValueAccess context) throws WorldEditException, FileNotFoundException { worldEdit.checkMaxBrushRadius(radius); @@ -826,7 +827,7 @@ public class BrushCommands { ) @CommandPermissions("worldedit.brush.copy") public void copy(Player player, LocalSession session, InjectedValueAccess context, - @Arg(name = "radius", desc = "Expression", def = "5") Expression radius, + @Arg(desc = "Expression", def = "5") Expression radius, @Switch(name = 'r', desc = "Apply random rotation on paste") boolean randomRotate, @Switch(name = 'a', desc = "Apply auto view based rotation on paste") boolean autoRotate) throws WorldEditException { worldEdit.checkMaxBrushRadius(radius); @@ -847,7 +848,7 @@ public class BrushCommands { ) @CommandPermissions("worldedit.brush.command") public void command(InjectedValueAccess context, - @Arg(name = "radius", desc = "Expression") Expression radius, + @Arg(desc = "Expression") Expression radius, @Arg(desc = "Command to run") List input) throws WorldEditException { worldEdit.checkMaxBrushRadius(radius); String cmd = StringMan.join(input, " "); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java index 9607d1646..21e0a8bad 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/GeneralCommands.java @@ -189,7 +189,7 @@ public class GeneralCommands { } else { session.setUseServerCUI(true); session.updateServerCUI(player); - player.print("Server CUI enabled. This only supports cuboid regions, with a maximum size of 32x32x32."); + player.print("Server CUI enabled. This only supports cuboid regions, with a maximum size of 32×32×32."); } } @@ -211,7 +211,7 @@ public class GeneralCommands { @Command( name = "gmask", aliases = {"/gmask"}, - descFooter = "The global destination mask applies to all edits you do and masks based on the destination blocks (i.e. the blocks in the world).", + descFooter = "The global destination mask applies to all edits you do and masks based on the destination blocks (i.e., the blocks in the world).", desc = "Set the global mask" ) @CommandPermissions({"worldedit.global-mask", "worldedit.mask.global"}) @@ -308,7 +308,7 @@ public class GeneralCommands { @Command( name = "/gtexture", aliases = {"gtexture"}, - descFooter = "The global destination mask applies to all edits you do and masks based on the destination blocks (i.e. the blocks in the world).", + descFooter = "The global destination mask applies to all edits you do and masks based on the destination blocks (i.e., the blocks in the world).", desc = "Set the global mask" ) @CommandPermissions("worldedit.global-texture") @@ -368,7 +368,7 @@ public class GeneralCommands { name = "/gsmask", aliases = {"gsmask", "globalsourcemask", "/globalsourcemask"}, desc = "Set the global source mask", - descFooter = "The global source mask applies to all edits you do and masks based on the source blocks (e.g. the blocks in your clipboard)" + descFooter = "The global source mask applies to all edits you do and masks based on the source blocks (e.g., the blocks in your clipboard)" ) @CommandPermissions({"worldedit.global-mask", "worldedit.mask.global"}) public void gsmask(Player player, LocalSession session, EditSession editSession, @Arg(desc = "The mask to set", def = "") Mask maskOpt) throws WorldEditException { diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/GenerationCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/GenerationCommands.java index 83e7d6dd7..3df9f9b76 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/GenerationCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/GenerationCommands.java @@ -130,8 +130,8 @@ public class GenerationCommands { ) @CommandPermissions("worldedit.generation.image") @Logging(PLACEMENT) - public void image(Actor actor, LocalSession session, EditSession editSession, String argStr, @Arg(name = "randomize", desc = "boolean", def = "true") boolean randomize, - @Arg(desc = "TODO", def = "100") int threshold, @Arg(name = "dimensions", desc = "BlockVector2", def = "") BlockVector2 dimensions) throws WorldEditException, IOException { + public void image(Actor actor, LocalSession session, EditSession editSession, String argStr, @Arg(desc = "boolean", def = "true") boolean randomize, + @Arg(desc = "TODO", def = "100") int threshold, @Arg(desc = "BlockVector2", def = "") BlockVector2 dimensions) throws WorldEditException, IOException { TextureUtil tu = Fawe.get().getCachedTextureUtil(randomize, 0, threshold); URL url = new URL(argStr); if (!url.getHost().equalsIgnoreCase("i.imgur.com") && !url.getHost().equalsIgnoreCase("empcraft.com")) { @@ -171,7 +171,7 @@ public class GenerationCommands { ) @CommandPermissions("worldedit.generation.ore") @Logging(PLACEMENT) - public void ore(Actor actor, LocalSession session, EditSession editSession, @Selection Region region, Mask mask, Pattern material, @Arg(name="size", desc="Ore vein size") @Range(min = 0) int size, int freq, @Range(min = 0, max = 100) int rarity, @Range(min = 0, max = 255) int minY, @Range(min = 0, max = 255) int maxY, InjectedValueAccess context) throws WorldEditException { + public void ore(Actor actor, LocalSession session, EditSession editSession, @Selection Region region, Mask mask, Pattern material, @Arg(desc="Ore vein size") @Range(min = 0) int size, int freq, @Range(min = 0, max = 100) int rarity, @Range(min = 0, max = 255) int minY, @Range(min = 0, max = 255) int maxY, InjectedValueAccess context) throws WorldEditException { actor.checkConfirmationRegion(() -> { editSession.addOre(region, mask, material, size, freq, rarity, minY, maxY); BBC.VISITOR_BLOCK.send(actor, editSession.getBlockChangeCount()); @@ -190,7 +190,7 @@ public class GenerationCommands { BlockVector2 radius, @Arg(desc = "The height of the cylinder", def = "1") int height, - @Range(min = 1) @Arg(name = "thickness", desc = "double", def = "1") double thickness, InjectedValueAccess context) throws WorldEditException { + @Range(min = 1) @Arg(desc = "double", def = "1") double thickness, InjectedValueAccess context) throws WorldEditException { double max = MathMan.max(radius.getBlockX(), radius.getBlockZ()); worldEdit.checkMaxRadius(max); BlockVector3 pos = session.getPlacementPosition(actor); @@ -274,15 +274,15 @@ public class GenerationCommands { @CommandPermissions("worldedit.generation.forest") @Logging(POSITION) public int forestGen(Actor actor, LocalSession session, EditSession editSession, - @Arg(name = "size", desc = "The size of the forest, in blocks", def = "10") - int sizeOpt, + @Arg(desc = "The size of the forest, in blocks", def = "10") + int size, @Arg(desc = "The type of forest", def = "tree") TreeType type, @Range(min = 0, max = 100) @Arg(desc = "The density of the forest, between 0 and 100", def = "5") double density) throws WorldEditException { checkCommandArgument(0 <= density && density <= 100, "Density must be between 0 and 100"); density /= 100; - int affected = editSession.makeForest(session.getPlacementPosition(actor), sizeOpt, density, type); + int affected = editSession.makeForest(session.getPlacementPosition(actor), size, density, type); actor.print(affected + " trees created."); return affected; } @@ -294,8 +294,8 @@ public class GenerationCommands { @CommandPermissions("worldedit.generation.pumpkins") @Logging(POSITION) public int pumpkins(Actor actor, LocalSession session, EditSession editSession, - @Arg(name = "size", desc = "The size of the patch", def = "10") - int sizeOpt, + @Arg(desc = "The size of the patch", def = "10") + int size, @Arg(desc = "//TODO", def = "10") int apothem, @Arg(desc = "//TODO ", def = "0.02") diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/PatternCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/PatternCommands.java index f1c81e4ac..5165cad84 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/PatternCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/PatternCommands.java @@ -67,7 +67,7 @@ import org.enginehub.piston.annotation.param.Arg; // descFooter = "Patterns determine what blocks are placed\n" + // " - Use [brackets] for arguments\n" + // " - Use , to OR multiple\n" + -// "e.g. #surfacespread[10][#existing],andesite\n" + +// "e.g., #surfacespread[10][#existing],andesite\n" + // "More Info: https://git.io/vSPmA" //) @CommandContainer//(superTypes = CommandPermissionsConditionGenerator.Registration.class) @@ -78,7 +78,7 @@ public class PatternCommands { aliases = {"#*", "*", ".*"}, desc = "Use the block that is already there" ) - public Pattern existing(Extent extent, @Arg(name = "properties", desc = "String", def = "") String properties) { // TODO FIXME , @Arg(name = "properties", desc = "String", def = "") String properties + public Pattern existing(Extent extent, @Arg(desc = "String", def = "") String properties) { // TODO FIXME , @Arg(name = "properties", desc = "String", def = "") String properties if (properties == null) return new ExistingPattern(extent); return new PropertyPattern(extent).addRegex(".*[" + properties + "]"); } @@ -119,16 +119,16 @@ public class PatternCommands { name = "#anglecolor", desc = "A darker block based on the existing terrain angle" ) - public Pattern anglecolor(Extent extent, LocalSession session, @Arg(name = "distance", desc = "int", def = "1") int distanceOpt) { - return new AngleColorPattern(extent, session, distanceOpt); + public Pattern anglecolor(Extent extent, LocalSession session, @Arg(desc = "int", def = "1") int distance) { + return new AngleColorPattern(extent, session, distance); } @Command( name = "#angledata", desc = "Block data based on the existing terrain angle" ) - public Pattern angledata(Extent extent, @Arg(name = "distance", desc = "int", def = "1") int distanceOpt) { - return new DataAnglePattern(extent, distanceOpt); + public Pattern angledata(Extent extent, @Arg(desc = "int", def = "1") int distance) { + return new DataAnglePattern(extent, distance); } @Command( @@ -153,7 +153,7 @@ public class PatternCommands { name = "#desaturate", desc = "Desaturated color of the existing block" ) - public Pattern desaturate(Extent extent, LocalSession session, @Arg(name = "percent", desc = "double", def = "100") double percent) { + public Pattern desaturate(Extent extent, LocalSession session, @Arg(desc = "double", def = "100") double percent) { return new DesaturatePattern(extent, percent / 100d, session); } @@ -177,7 +177,7 @@ public class PatternCommands { name = "#fullcopy", desc = "Places your full clipboard at each block" ) - public Pattern fullcopy(Player player, Extent extent, LocalSession session, @Arg(name = "location", desc = "String", def = "#copy") String location, @Arg(name = "rotate", desc = "boolean", def = "false") boolean rotate, @Arg(name = "flip", desc = "boolean", def = "false") boolean flip) throws EmptyClipboardException, InputParseException, IOException { + public Pattern fullcopy(Player player, Extent extent, LocalSession session, @Arg(desc = "String", def = "#copy") String location, @Arg(desc = "boolean", def = "false") boolean rotate, @Arg(desc = "boolean", def = "false") boolean flip) throws EmptyClipboardException, InputParseException, IOException { List clipboards; switch (location.toLowerCase()) { case "#copy": @@ -313,14 +313,14 @@ public class PatternCommands { name = "#offset", desc = "Offset a pattern" ) - public Pattern offset(@Arg(name = "x", desc = "x offset") double x, @Arg(name = "y", desc = "y offset") double y, @Arg(name = "z", desc = "z offset") double z, @Arg(desc = "Pattern")Pattern pattern) { + public Pattern offset(@Arg(desc = "x offset") double x, @Arg(desc = "y offset") double y, @Arg(desc = "z offset") double z, @Arg(desc = "Pattern")Pattern pattern) { return new OffsetPattern(pattern, (int) x, (int) y, (int) z); } @Command( name = "#surfacespread", - desc = "Applies to only blocks on a surface. Selects a block from provided pattern with a given ranomized offset `[0, )`. e.g. Use `#existing` to randomly offset blocks in the world, or `#copy` to offset blocks in your clipboard" + desc = "Applies to only blocks on a surface. Selects a block from provided pattern with a given randomized offset `[0, )`. e.g., Use `#existing` to randomly offset blocks in the world, or `#copy` to offset blocks in your clipboard" ) public Pattern surfacespread(@Arg(desc = "spread distance (blocks)") double distance, @Arg(desc = "Pattern")Pattern pattern) { @@ -331,7 +331,7 @@ public class PatternCommands { name = "#solidspread", desc = "Randomly spread solid blocks" ) - public Pattern solidspread(@Arg(name = "x", desc = "x offset") double x, @Arg(name = "y", desc = "y offset") double y, @Arg(name = "z", desc = "z offset") double z, @Arg(desc = "Pattern")Pattern pattern) { + public Pattern solidspread(@Arg(desc = "x offset") double x, @Arg(desc = "y offset") double y, @Arg(desc = "z offset") double z, @Arg(desc = "Pattern")Pattern pattern) { return new SolidRandomOffsetPattern(pattern, (int) x, (int) y, (int) z); } @@ -341,7 +341,7 @@ public class PatternCommands { aliases = {"#randomoffset"}, desc = "Randomly spread blocks" ) - public Pattern spread(@Arg(name = "x", desc = "x offset") double x, @Arg(name = "y", desc = "y offset") double y, @Arg(name = "z", desc = "z offset") double z, @Arg(desc = "Pattern")Pattern pattern) { + public Pattern spread(@Arg(desc = "x offset") double x, @Arg(desc = "y offset") double y, @Arg(desc = "z offset") double z, @Arg(desc = "Pattern")Pattern pattern) { return new RandomOffsetPattern(pattern, (int) x, (int) y, (int) z); } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java index 2b8bedb5c..0b6d44392 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/UtilityCommands.java @@ -221,7 +221,7 @@ public class UtilityCommands { descFooter = "Patterns determine what blocks are placed\n" + " - Use [brackets] for arguments\n" + " - Use , to OR multiple\n" + - "e.g. #surfacespread[10][#existing],andesite\n" + + "e.g., #surfacespread[10][#existing],andesite\n" + "More Info: https://git.io/vSPmA" ) @CommandQueued(false) @@ -237,7 +237,7 @@ public class UtilityCommands { " - Use [brackets] for arguments\n" + " - Use , to OR multiple\n" + " - Use & to AND multiple\n" + - "e.g. >[stone,dirt],#light[0][5],$jungle\n" + + "e.g., >[stone,dirt],#light[0][5],$jungle\n" + "More Info: https://git.io/v9r4K" ) @CommandQueued(false) diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BrushTool.java b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BrushTool.java index 16a1eab3f..4cb4188b9 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BrushTool.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/command/tool/BrushTool.java @@ -20,6 +20,7 @@ package com.sk89q.worldedit.command.tool; import static com.google.common.base.Preconditions.checkNotNull; +import static org.slf4j.LoggerFactory.getLogger; import com.boydti.fawe.Fawe; import com.boydti.fawe.config.BBC; @@ -83,7 +84,7 @@ public class BrushTool implements DoubleActionTraceTool, ScrollTool, MovableTool // TODO: // Serialize methods // serialize BrushSettings (primary and secondary only if different) - // set transient values e.g. context + // set transient values e.g., context public enum BrushAction { PRIMARY, @@ -126,7 +127,7 @@ public class BrushTool implements DoubleActionTraceTool, ScrollTool, MovableTool }.getType(); Map root = gson.fromJson(json, type); if (root == null) { - Fawe.debug("Failed to load " + json); + getLogger(BrushTool.class).debug("Failed to load " + json); return new BrushTool(); } Map primary = (Map) root.get("primary"); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/entity/Player.java b/worldedit-core/src/main/java/com/sk89q/worldedit/entity/Player.java index 40ce59e8d..4f3d0dc95 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/entity/Player.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/entity/Player.java @@ -354,7 +354,7 @@ public interface Player extends Entity, Actor { } /** - * Get the World the player is editing in (may not match the world they are in)
- e.g. If + * Get the World the player is editing in (may not match the world they are in)
- e.g., If * they are editing a CFI world.
* * @return Editing world @@ -439,12 +439,12 @@ public interface Player extends Entity, Actor { getSession().setClipboard(holder); } } catch (Exception event) { - Fawe.debug("====== INVALID CLIPBOARD ======"); + printError("====== INVALID CLIPBOARD ======"); event.printStackTrace(); - Fawe.debug("===============---============="); - Fawe.debug("This shouldn't result in any failure"); - Fawe.debug("File: " + file.getName() + " (len:" + file.length() + ")"); - Fawe.debug("===============---============="); + printError("===============---============="); + printError("This shouldn't result in any failure"); + printError("File: " + file.getName() + " (len:" + file.length() + ")"); + printError("===============---============="); } } } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/binding/Bindings.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/binding/Bindings.java index 3cd641b65..5be75cf5f 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/binding/Bindings.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extension/platform/binding/Bindings.java @@ -1,6 +1,9 @@ package com.sk89q.worldedit.extension.platform.binding; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.Fawe; +import com.boydti.fawe.util.MainUtil; import com.boydti.fawe.util.StringMan; import com.sk89q.worldedit.WorldEdit; import com.sk89q.worldedit.internal.annotation.Selection; @@ -56,7 +59,7 @@ public class Bindings { Annotation annotation = annotations[0] == binding ? annotations[1] : annotations[0]; key = Key.of(ret, annotation); } else { - Fawe.debug("Cannot annotate: " + method + " with " + StringMan.getString(annotations)); + getLogger(Bindings.class).debug("Cannot annotate: " + method + " with " + StringMan.getString(annotations)); return false; } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/AbstractDelegateExtent.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/AbstractDelegateExtent.java index bb2ee2019..bdc7d304c 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/AbstractDelegateExtent.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/AbstractDelegateExtent.java @@ -20,14 +20,15 @@ package com.sk89q.worldedit.extent; import static com.google.common.base.Preconditions.checkNotNull; +import static org.slf4j.LoggerFactory.getLogger; -import com.boydti.fawe.Fawe; import com.boydti.fawe.beta.IBatchProcessor; import com.boydti.fawe.object.HistoryExtent; import com.boydti.fawe.object.changeset.FaweChangeSet; import com.boydti.fawe.object.exception.FaweException; import com.boydti.fawe.object.extent.LightingExtent; import com.boydti.fawe.util.ExtentTraverser; +import com.boydti.fawe.util.MainUtil; import com.sk89q.jnbt.CompoundTag; import com.sk89q.worldedit.WorldEditException; import com.sk89q.worldedit.entity.BaseEntity; @@ -81,6 +82,7 @@ public class AbstractDelegateExtent implements Extent, LightingExtent { Queue based methods TODO NOT IMPLEMENTED: IQueueExtent and such need to implement these */ + @Override public boolean isQueueEnabled() { return extent.isQueueEnabled(); } @@ -97,7 +99,7 @@ public class AbstractDelegateExtent implements Extent, LightingExtent { Extent next = ((AbstractDelegateExtent) extent).getExtent(); new ExtentTraverser(this).setNext(next); } else { - Fawe.debug("Cannot disable queue"); + getLogger(AbstractDelegateExtent.class).debug("Cannot disable queue"); } } @@ -197,9 +199,7 @@ public class AbstractDelegateExtent implements Extent, LightingExtent { return extent.setBiome(position.getX(), 0, position.getZ(), biome); } - /* - Light - */ + @Override public int getSkyLight(int x, int y, int z) { if (extent instanceof LightingExtent) { return ((LightingExtent) extent).getSkyLight(x, y, z); @@ -207,12 +207,14 @@ public class AbstractDelegateExtent implements Extent, LightingExtent { return 0; } + @Override public int getBlockLight(int x, int y, int z) { if (extent instanceof LightingExtent) { return ((LightingExtent) extent).getBlockLight(x, y, z); } return getBrightness(x, y, z); } + @Override public int getOpacity(int x, int y, int z) { if (extent instanceof LightingExtent) { return ((LightingExtent) extent).getOpacity(x, y, z); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/PassthroughExtent.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/PassthroughExtent.java index bd56caa15..337c1f509 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/PassthroughExtent.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/PassthroughExtent.java @@ -211,6 +211,7 @@ public class PassthroughExtent extends AbstractDelegateExtent { } // special + @Override public Extent disableHistory() { return super.disableHistory(); } @@ -235,14 +236,17 @@ public class PassthroughExtent extends AbstractDelegateExtent { return getExtent().cancel(); } + @Override public boolean isQueueEnabled() { return getExtent().isQueueEnabled(); } + @Override public void enableQueue() { getExtent().enableQueue(); } + @Override public void disableQueue() { getExtent().disableQueue(); } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/ClipboardFormat.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/ClipboardFormat.java index 25e0ff743..cfbcd700b 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/ClipboardFormat.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/ClipboardFormat.java @@ -103,9 +103,9 @@ public interface ClipboardFormat { Set getFileExtensions(); /** - * Set the actor's clipboard + * Sets the actor's clipboard. * @param actor - * @param uri + * @param uri the URI of the schematic to hold * @param inputStream the input stream * @throws IOException thrown on I/O error */ diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/ClipboardReader.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/ClipboardReader.java index a1b893890..9fa1bb062 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/ClipboardReader.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/ClipboardReader.java @@ -20,11 +20,8 @@ package com.sk89q.worldedit.extent.clipboard.io; import com.boydti.fawe.object.clipboard.DiskOptimizedClipboard; -import com.sk89q.worldedit.extent.Extent; -import com.sk89q.worldedit.extent.clipboard.BlockArrayClipboard; import com.sk89q.worldedit.extent.clipboard.Clipboard; import com.sk89q.worldedit.math.BlockVector3; - import java.io.Closeable; import java.io.IOException; import java.util.UUID; @@ -48,12 +45,7 @@ public interface ClipboardReader extends Closeable { } default Clipboard read(UUID uuid) throws IOException { - return read(uuid, new Function() { - @Override - public Clipboard apply(BlockVector3 dimensions) { - return new DiskOptimizedClipboard(dimensions); - } - }); + return read(uuid, DiskOptimizedClipboard::new); } default Clipboard read(UUID uuid, Function createOutput) throws IOException { diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SchematicReader.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SchematicReader.java index 421a48874..2889cc637 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SchematicReader.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SchematicReader.java @@ -19,7 +19,9 @@ package com.sk89q.worldedit.extent.clipboard.io; -import com.boydti.fawe.Fawe; +import static com.google.common.base.Preconditions.checkNotNull; +import static org.slf4j.LoggerFactory.getLogger; + import com.boydti.fawe.FaweCache; import com.boydti.fawe.jnbt.streamer.InfoReader; import com.boydti.fawe.jnbt.streamer.IntValueReader; @@ -51,7 +53,6 @@ import com.sk89q.worldedit.world.block.BaseBlock; import com.sk89q.worldedit.world.block.BlockCategories; import com.sk89q.worldedit.world.block.BlockID; import com.sk89q.worldedit.world.block.BlockState; -import com.sk89q.worldedit.world.block.BlockStateHolder; import com.sk89q.worldedit.world.block.BlockType; import com.sk89q.worldedit.world.block.BlockTypeSwitch; import com.sk89q.worldedit.world.block.BlockTypeSwitchBuilder; @@ -59,9 +60,6 @@ import com.sk89q.worldedit.world.entity.EntityType; import com.sk89q.worldedit.world.entity.EntityTypes; import com.sk89q.worldedit.world.registry.BlockMaterial; import com.sk89q.worldedit.world.registry.LegacyMapper; -import net.jpountz.lz4.LZ4BlockInputStream; -import net.jpountz.lz4.LZ4BlockOutputStream; - import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; @@ -69,8 +67,8 @@ import java.util.List; import java.util.Map; import java.util.UUID; import java.util.function.Function; - -import static com.google.common.base.Preconditions.checkNotNull; +import net.jpountz.lz4.LZ4BlockInputStream; +import net.jpountz.lz4.LZ4BlockOutputStream; /** * Reads schematic files based that are compatible with MCEdit and other editors. @@ -180,21 +178,12 @@ public class SchematicReader implements ClipboardReader { StreamDelegate tilesDelegate = schematic.add("TileEntities"); tilesDelegate.withInfo((length, type) -> tiles = new ArrayList<>(length)); - tilesDelegate.withElem(new ValueReader>() { - @Override - public void apply(int index, Map tile) { - tiles.add(tile); - } - }); + tilesDelegate.withElem((ValueReader>) (index, tile) -> tiles.add(tile)); StreamDelegate entitiesDelegate = schematic.add("Entities"); entitiesDelegate.withInfo((length, type) -> entities = new ArrayList<>(length)); - entitiesDelegate.withElem(new ValueReader>() { - @Override - public void apply(int index, Map entity) { - entities.add(entity); - } - }); + entitiesDelegate.withElem( + (ValueReader>) (index, entity) -> entities.add(entity)); return root; } @@ -370,7 +359,7 @@ public class SchematicReader implements ClipboardReader { Location loc = ent.getEntityLocation(clipboard); clipboard.createEntity(loc, state); } else { - Fawe.debug("Invalid entity: " + id); + getLogger(SchematicReader.class).debug("Invalid entity: " + id); } } } @@ -396,10 +385,10 @@ public class SchematicReader implements ClipboardReader { Direction left = facing.getLeft(); Direction right = facing.getRight(); - BlockStateHolder forwardBlock = fc.getBlock(x + forward.getBlockX(), y + forward.getBlockY(), z + forward.getBlockZ()); + BlockState forwardBlock = fc.getBlock(x + forward.getBlockX(), y + forward.getBlockY(), z + forward.getBlockZ()); BlockType forwardType = forwardBlock.getBlockType(); if (forwardType.hasProperty(PropertyKey.SHAPE) && forwardType.hasProperty(PropertyKey.FACING)) { - Direction forwardFacing = (Direction) forwardBlock.getState(PropertyKey.FACING); + Direction forwardFacing = forwardBlock.getState(PropertyKey.FACING); if (forwardFacing == left) { BlockState rightBlock = fc.getBlock(x + right.toBlockVector().getBlockX(), y + right.toBlockVector().getBlockY(), z + right.toBlockVector().getBlockZ()); BlockType rightType = rightBlock.getBlockType(); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SpongeSchematicReader.java b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SpongeSchematicReader.java index a5a7a263b..e97f29be1 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SpongeSchematicReader.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/extent/clipboard/io/SpongeSchematicReader.java @@ -335,7 +335,7 @@ public class SpongeSchematicReader extends NBTSchematicReader { Location loc = ent.getEntityLocation(clipboard); clipboard.createEntity(loc, state); } else { - Fawe.debug("Invalid entity: " + id); + log.debug("Invalid entity: " + id); } } } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/MaskIntersection.java b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/MaskIntersection.java index 90c973c20..751ee073b 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/MaskIntersection.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/function/mask/MaskIntersection.java @@ -20,8 +20,8 @@ package com.sk89q.worldedit.function.mask; import static com.google.common.base.Preconditions.checkNotNull; +import static org.slf4j.LoggerFactory.getLogger; -import com.boydti.fawe.Fawe; import com.sk89q.worldedit.math.BlockVector3; import java.util.AbstractMap; import java.util.ArrayList; @@ -150,7 +150,7 @@ public class MaskIntersection extends AbstractMask { while (changed |= combineMasks(pairingFunction(), failedCombines) && --maxIteration > 0); if (maxIteration == 0) { - Fawe.debug("Failed optimize MaskIntersection"); + getLogger(MaskIntersection.class).debug("Failed optimize MaskIntersection"); for (Mask mask : masks) { System.out.println(mask.getClass() + " / " + mask); } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/math/geom/Polygons.java b/worldedit-core/src/main/java/com/sk89q/worldedit/math/geom/Polygons.java index 13bc259ba..388f26900 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/math/geom/Polygons.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/math/geom/Polygons.java @@ -31,12 +31,12 @@ import java.util.List; public final class Polygons { private Polygons() { - + } /** - * Calculates the polygon shape of a cylinder which can then be used for e.g. intersection detection. - * + * Calculates the polygon shape of a cylinder, which can then be used for e.g., intersection detection. + * * @param center the center point of the cylinder * @param radius the radius of the cylinder * @param maxPoints max points to be used for the calculation @@ -60,5 +60,5 @@ public final class Polygons { return points; } - + } diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/registry/state/PropertyKey.java b/worldedit-core/src/main/java/com/sk89q/worldedit/registry/state/PropertyKey.java index 6fe7cad5f..89f59a279 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/registry/state/PropertyKey.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/registry/state/PropertyKey.java @@ -1,10 +1,6 @@ package com.sk89q.worldedit.registry.state; -import com.boydti.fawe.Fawe; import com.boydti.fawe.util.ReflectionUtils; -import com.sk89q.util.ReflectionUtil; -import com.sk89q.worldedit.world.block.BlockTypes; - import java.util.HashMap; import java.util.Locale; import java.util.Map; @@ -102,19 +98,18 @@ public enum PropertyKey { /** * Get or create the property key - * @param id The name of the property (e.g. `waterlogged`) + * @param id The name of the property (e.g., `waterlogged`) * @return PropertyKey enum */ - public static final PropertyKey getOrCreate(String id) { + public static PropertyKey getOrCreate(String id) { PropertyKey property = PropertyKey.get(id); if (property == null) { - Fawe.debug("Registering property " + id); property = ReflectionUtils.addEnum(PropertyKey.class, id.toUpperCase(Locale.ROOT)); if (property.getId() == null) { try { ReflectionUtils.setFailsafeFieldValue(PropertyKey.class.getDeclaredField("id"), property, property.name().toLowerCase()); } catch (Throwable e) { - throw new RuntimeException(e); + throw new RuntimeException("Could not register property with an id of " + id , e); } } keys.put(property.name().toLowerCase(), property); diff --git a/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockState.java b/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockState.java index 7d50e0739..b33d956b8 100644 --- a/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockState.java +++ b/worldedit-core/src/main/java/com/sk89q/worldedit/world/block/BlockState.java @@ -82,7 +82,7 @@ public class BlockState implements BlockStateHolder, FawePattern { /** * Returns a temporary BlockState for a given type and string - * @param state String e.g. minecraft:water[level=4] + * @param state String e.g., minecraft:water[level=4] * @return BlockState */ public static BlockState get(String state) throws InputParseException { @@ -92,8 +92,8 @@ public class BlockState implements BlockStateHolder, FawePattern { /** * Returns a temporary BlockState for a given type and string * - It's faster if a BlockType is provided compared to parsing the string - * @param type BlockType e.g. BlockTypes.STONE (or null) - * @param state String e.g. minecraft:water[level=4] + * @param type BlockType e.g., BlockTypes.STONE (or null) + * @param state String e.g., minecraft:water[level=4] * @return BlockState */ public static BlockState get(@Nullable BlockType type, String state) throws InputParseException { @@ -103,8 +103,8 @@ public class BlockState implements BlockStateHolder, FawePattern { /** * Returns a temporary BlockState for a given type and string * - It's faster if a BlockType is provided compared to parsing the string - * @param type BlockType e.g. BlockTypes.STONE (or null) - * @param state String e.g. minecraft:water[level=4] + * @param type BlockType e.g., BlockTypes.STONE (or null) + * @param state String e.g., minecraft:water[level=4] * @return BlockState */ public static BlockState get(@Nullable BlockType type, String state, BlockState defaultState) throws InputParseException {