diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/inject/BukkitModule.java b/Bukkit/src/main/java/com/plotsquared/bukkit/inject/BukkitModule.java index 8f2dd0796..02c3e7176 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/inject/BukkitModule.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/inject/BukkitModule.java @@ -29,6 +29,7 @@ import com.google.inject.AbstractModule; import com.google.inject.Provides; import com.google.inject.Singleton; import com.google.inject.assistedinject.FactoryModuleBuilder; +import com.google.inject.assistedinject.FactoryProvider; import com.plotsquared.bukkit.BukkitPlatform; import com.plotsquared.bukkit.player.BukkitPlayerManager; import com.plotsquared.bukkit.queue.BukkitChunkCoordinator; @@ -96,6 +97,7 @@ public class BukkitModule extends AbstractModule { bind(InventoryUtil.class).to(BukkitInventoryUtil.class); bind(SetupUtils.class).to(BukkitSetupUtils.class); bind(WorldUtil.class).to(BukkitUtil.class); + install(new FactoryModuleBuilder().implement(ProgressSubscriber.class, DefaultProgressSubscriber.class).build(ProgressSubscriberFactory.class)); bind(GlobalBlockQueue.class).toInstance(new GlobalBlockQueue(QueueProvider.of(BukkitQueueCoordinator.class))); bind(ChunkManager.class).to(BukkitChunkManager.class); bind(RegionManager.class).to(BukkitRegionManager.class); @@ -108,7 +110,6 @@ public class BukkitModule extends AbstractModule { install(new FactoryModuleBuilder().build(HybridPlotWorldFactory.class)); install(new FactoryModuleBuilder().implement(ChunkCoordinator.class, BukkitChunkCoordinator.class).build(ChunkCoordinatorFactory.class)); install(new FactoryModuleBuilder().build(ChunkCoordinatorBuilderFactory.class)); - install(new FactoryModuleBuilder().implement(ProgressSubscriber.class, DefaultProgressSubscriber.class).build(ProgressSubscriberFactory.class)); } @Provides @Singleton @Nonnull EconHandler provideEconHandler() { diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/schematic/BukkitSchematicHandler.java b/Bukkit/src/main/java/com/plotsquared/bukkit/schematic/BukkitSchematicHandler.java index 4d10fc316..6c988d52d 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/schematic/BukkitSchematicHandler.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/schematic/BukkitSchematicHandler.java @@ -27,6 +27,7 @@ package com.plotsquared.bukkit.schematic; import com.google.inject.Inject; import com.google.inject.Singleton; +import com.plotsquared.core.inject.factory.ProgressSubscriberFactory; import com.plotsquared.core.queue.QueueCoordinator; import com.plotsquared.core.util.SchematicHandler; import com.plotsquared.core.util.WorldUtil; @@ -39,8 +40,8 @@ import javax.annotation.Nonnull; */ @Singleton public class BukkitSchematicHandler extends SchematicHandler { - @Inject public BukkitSchematicHandler(@Nonnull final WorldUtil worldUtil) { - super(worldUtil); + @Inject public BukkitSchematicHandler(@Nonnull final WorldUtil worldUtil, @Nonnull ProgressSubscriberFactory subscriberFactory) { + super(worldUtil, subscriberFactory); } @Override diff --git a/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitRegionManager.java b/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitRegionManager.java index f0d14d772..c7420f0a4 100644 --- a/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitRegionManager.java +++ b/Bukkit/src/main/java/com/plotsquared/bukkit/util/BukkitRegionManager.java @@ -28,6 +28,7 @@ package com.plotsquared.bukkit.util; import com.google.inject.Inject; import com.google.inject.Singleton; import com.plotsquared.core.generator.AugmentedUtils; +import com.plotsquared.core.inject.factory.ProgressSubscriberFactory; import com.plotsquared.core.location.Location; import com.plotsquared.core.location.PlotLoc; import com.plotsquared.core.player.PlotPlayer; @@ -74,8 +75,9 @@ public class BukkitRegionManager extends RegionManager { private final GlobalBlockQueue blockQueue; - @Inject public BukkitRegionManager(@Nonnull WorldUtil worldUtil, @Nonnull GlobalBlockQueue blockQueue) { - super(worldUtil, blockQueue); + @Inject public BukkitRegionManager(@Nonnull WorldUtil worldUtil, @Nonnull GlobalBlockQueue blockQueue, @Nonnull + ProgressSubscriberFactory subscriberFactory) { + super(worldUtil, blockQueue, subscriberFactory); this.blockQueue = blockQueue; } diff --git a/Core/src/main/java/com/plotsquared/core/generator/ClassicPlotManager.java b/Core/src/main/java/com/plotsquared/core/generator/ClassicPlotManager.java index 14d10b6fa..9ef766465 100644 --- a/Core/src/main/java/com/plotsquared/core/generator/ClassicPlotManager.java +++ b/Core/src/main/java/com/plotsquared/core/generator/ClassicPlotManager.java @@ -26,6 +26,7 @@ package com.plotsquared.core.generator; import com.google.inject.Inject; +import com.plotsquared.core.PlotSquared; import com.plotsquared.core.configuration.Settings; import com.plotsquared.core.inject.factory.ProgressSubscriberFactory; import com.plotsquared.core.location.Direction; @@ -56,12 +57,13 @@ public class ClassicPlotManager extends SquarePlotManager { private final ClassicPlotWorld classicPlotWorld; private final RegionManager regionManager; - @Inject private ProgressSubscriberFactory subscriberFactory; + private final ProgressSubscriberFactory subscriberFactory; @Inject public ClassicPlotManager(@Nonnull final ClassicPlotWorld classicPlotWorld, @Nonnull final RegionManager regionManager) { super(classicPlotWorld, regionManager); this.classicPlotWorld = classicPlotWorld; this.regionManager = regionManager; + this.subscriberFactory = PlotSquared.platform().getInjector().getInstance(ProgressSubscriberFactory.class); } @Override public boolean setComponent(@Nonnull PlotId plotId, @@ -232,7 +234,7 @@ public class ClassicPlotManager extends SquarePlotManager { queue = classicPlotWorld.getQueue(); enqueue = true; if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { - queue.addProgressSubscriber(subscriberFactory.create(actor)); + queue.addProgressSubscriber(subscriberFactory.createWithActor(actor)); } } @@ -311,7 +313,7 @@ public class ClassicPlotManager extends SquarePlotManager { queue = classicPlotWorld.getQueue(); enqueue = true; if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { - queue.addProgressSubscriber(subscriberFactory.create(actor)); + queue.addProgressSubscriber(subscriberFactory.createWithActor(actor)); } } @@ -381,7 +383,7 @@ public class ClassicPlotManager extends SquarePlotManager { enqueue = true; queue = classicPlotWorld.getQueue(); if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { - queue.addProgressSubscriber(subscriberFactory.create(actor)); + queue.addProgressSubscriber(subscriberFactory.createWithActor(actor)); } } diff --git a/Core/src/main/java/com/plotsquared/core/inject/factory/ProgressSubscriberFactory.java b/Core/src/main/java/com/plotsquared/core/inject/factory/ProgressSubscriberFactory.java index 1ac6ca17f..7abc60daa 100644 --- a/Core/src/main/java/com/plotsquared/core/inject/factory/ProgressSubscriberFactory.java +++ b/Core/src/main/java/com/plotsquared/core/inject/factory/ProgressSubscriberFactory.java @@ -29,19 +29,19 @@ import com.google.inject.assistedinject.Assisted; import com.plotsquared.core.configuration.caption.Caption; import com.plotsquared.core.player.PlotPlayer; import com.plotsquared.core.queue.subscriber.ProgressSubscriber; -import com.plotsquared.core.util.task.TaskManager; import javax.annotation.Nonnull; import javax.annotation.Nullable; public interface ProgressSubscriberFactory { - @Nonnull ProgressSubscriber create(@Nonnull @Assisted("subscriber") PlotPlayer actor); + @Nonnull ProgressSubscriber create(); - @Nonnull ProgressSubscriber create(@Nonnull @Assisted("subscriber") PlotPlayer actor, - @Nonnull TaskManager taskManager, + @Nonnull ProgressSubscriber createWithActor(@Nullable @Assisted("subscriber") PlotPlayer actor); + + @Nonnull ProgressSubscriber createFull(@Nullable @Assisted("subscriber") PlotPlayer actor, @Assisted("progressInterval") final long interval, - @Assisted("progressInterval") final long wait, + @Assisted("waitBeforeStarting") final long wait, @Nullable @Assisted("caption") Caption caption); } diff --git a/Core/src/main/java/com/plotsquared/core/inject/modules/PlotSquaredModule.java b/Core/src/main/java/com/plotsquared/core/inject/modules/PlotSquaredModule.java index 82c5549c3..af22b5ffc 100644 --- a/Core/src/main/java/com/plotsquared/core/inject/modules/PlotSquaredModule.java +++ b/Core/src/main/java/com/plotsquared/core/inject/modules/PlotSquaredModule.java @@ -26,6 +26,7 @@ package com.plotsquared.core.inject.modules; import com.google.inject.AbstractModule; +import com.google.inject.assistedinject.FactoryModuleBuilder; import com.intellectualsites.services.ServicePipeline; import com.plotsquared.core.PlotSquared; import com.plotsquared.core.configuration.file.YamlConfiguration; @@ -34,7 +35,10 @@ import com.plotsquared.core.inject.annotations.ConfigFile; import com.plotsquared.core.inject.annotations.ImpromptuPipeline; import com.plotsquared.core.inject.annotations.WorldConfig; import com.plotsquared.core.inject.annotations.WorldFile; +import com.plotsquared.core.inject.factory.ProgressSubscriberFactory; import com.plotsquared.core.listener.PlotListener; +import com.plotsquared.core.queue.subscriber.DefaultProgressSubscriber; +import com.plotsquared.core.queue.subscriber.ProgressSubscriber; import com.plotsquared.core.util.EventDispatcher; import com.plotsquared.core.uuid.UUIDPipeline; import com.sk89q.worldedit.WorldEdit; diff --git a/Core/src/main/java/com/plotsquared/core/plot/PlotModificationManager.java b/Core/src/main/java/com/plotsquared/core/plot/PlotModificationManager.java index 2db54b448..b8c569cbe 100644 --- a/Core/src/main/java/com/plotsquared/core/plot/PlotModificationManager.java +++ b/Core/src/main/java/com/plotsquared/core/plot/PlotModificationManager.java @@ -78,10 +78,11 @@ public final class PlotModificationManager { private static final Logger logger = LoggerFactory.getLogger("P2/" + PlotModificationManager.class.getSimpleName()); private final Plot plot; - @Inject private ProgressSubscriberFactory subscriberFactory; + private final ProgressSubscriberFactory subscriberFactory; @Inject PlotModificationManager(@Nonnull final Plot plot) { this.plot = plot; + this.subscriberFactory = PlotSquared.platform().getInjector().getInstance(ProgressSubscriberFactory.class); } @@ -239,7 +240,7 @@ public final class PlotModificationManager { } } if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { - queue.addProgressSubscriber(subscriberFactory.create(actor)); + queue.addProgressSubscriber(subscriberFactory.createWithActor(actor)); } if (queue.size() > 0) { queue.enqueue(); @@ -597,7 +598,7 @@ public final class PlotModificationManager { } } if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { - queue.addProgressSubscriber(subscriberFactory.create(actor)); + queue.addProgressSubscriber(subscriberFactory.createWithActor(actor)); } if (queue.size() > 0) { queue.enqueue(); diff --git a/Core/src/main/java/com/plotsquared/core/queue/subscriber/DefaultProgressSubscriber.java b/Core/src/main/java/com/plotsquared/core/queue/subscriber/DefaultProgressSubscriber.java index a87ff79c8..68dee34e9 100644 --- a/Core/src/main/java/com/plotsquared/core/queue/subscriber/DefaultProgressSubscriber.java +++ b/Core/src/main/java/com/plotsquared/core/queue/subscriber/DefaultProgressSubscriber.java @@ -28,6 +28,8 @@ package com.plotsquared.core.queue.subscriber; import com.google.common.base.Preconditions; import com.google.common.util.concurrent.AtomicDouble; import com.google.inject.Inject; +import com.google.inject.assistedinject.Assisted; +import com.google.inject.assistedinject.AssistedInject; import com.plotsquared.core.configuration.Settings; import com.plotsquared.core.configuration.caption.Caption; import com.plotsquared.core.configuration.caption.TranslatableCaption; @@ -55,10 +57,15 @@ public class DefaultProgressSubscriber implements ProgressSubscriber { @Nonnull private final TaskTime wait; @Nonnull private final PlotPlayer actor; @Nonnull private final Caption caption; - @Inject @Nonnull private TaskManager taskManager; private PlotSquaredTask task; - @Inject public DefaultProgressSubscriber(@Nonnull final PlotPlayer actor) { + @AssistedInject + public DefaultProgressSubscriber() { + throw new UnsupportedOperationException("DefaultProgressSubscriber cannot be used without an actor."); + } + + @AssistedInject + public DefaultProgressSubscriber(@Nullable @Assisted("subscriber") final PlotPlayer actor) { Preconditions.checkNotNull(actor, "Actor cannot be null when using DefaultProgressSubscriber! Make sure if attempting to use custom Subscribers it is correctly parsed to the queue!"); this.actor = actor; @@ -67,17 +74,16 @@ public class DefaultProgressSubscriber implements ProgressSubscriber { this.caption = TranslatableCaption.of("working.progress"); } - public DefaultProgressSubscriber(@Nonnull final PlotPlayer actor, - @Nonnull final TaskManager taskManager, - final long interval, - final long wait, - @Nullable final Caption caption) { + @AssistedInject + public DefaultProgressSubscriber(@Nullable @Assisted("subscriber") final PlotPlayer actor, + @Assisted("progressInterval") final long interval, + @Assisted("waitBeforeStarting") final long wait, + @Nullable @Assisted("caption") final Caption caption) { Preconditions.checkNotNull(actor, "Actor cannot be null when using DefaultProgressSubscriber! Make sure if attempting to use custom Subscribers it is correctly parsed to the queue!"); this.actor = actor; this.interval = TaskTime.ms(interval); this.wait = TaskTime.ms(wait); - this.taskManager = taskManager; if (caption == null) { this.caption = TranslatableCaption.of("working.progress"); } else { @@ -92,7 +98,7 @@ public class DefaultProgressSubscriber implements ProgressSubscriber { task.cancel(); } } else if (started.compareAndSet(false, true)) { - taskManager.taskLater(() -> task = taskManager.taskRepeat(() -> { + TaskManager.getPlatformImplementation().taskLater(() -> task = TaskManager.getPlatformImplementation().taskRepeat(() -> { if (!started.get()) { return; } diff --git a/Core/src/main/java/com/plotsquared/core/util/RegionManager.java b/Core/src/main/java/com/plotsquared/core/util/RegionManager.java index c51e8b19e..c64472121 100644 --- a/Core/src/main/java/com/plotsquared/core/util/RegionManager.java +++ b/Core/src/main/java/com/plotsquared/core/util/RegionManager.java @@ -63,12 +63,12 @@ public abstract class RegionManager { public static RegionManager manager = null; private final WorldUtil worldUtil; private final GlobalBlockQueue blockQueue; - @Inject private ProgressSubscriberFactory subscriberFactory; - @Inject private TaskManager taskManager; + private final ProgressSubscriberFactory subscriberFactory; - @Inject public RegionManager(@Nonnull WorldUtil worldUtil, @Nonnull GlobalBlockQueue blockQueue) { + @Inject public RegionManager(@Nonnull WorldUtil worldUtil, @Nonnull GlobalBlockQueue blockQueue, @Nonnull ProgressSubscriberFactory subscriberFactory) { this.worldUtil = worldUtil; this.blockQueue = blockQueue; + this.subscriberFactory = subscriberFactory; } public static BlockVector2 getRegion(Location location) { @@ -129,7 +129,7 @@ public abstract class RegionManager { queue = area.getQueue(); enqueue = true; if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { - queue.addProgressSubscriber(subscriberFactory.create(actor)); + queue.addProgressSubscriber(subscriberFactory.createWithActor(actor)); } } for (CuboidRegion region : regions) { @@ -188,14 +188,14 @@ public abstract class RegionManager { copyFromTo(pos1, pos2, relX, relZ, oldWorld, copyFrom, copyTo, false); copyFrom.setCompleteTask(copyTo::enqueue); if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { - copyFrom.addProgressSubscriber(subscriberFactory.create(actor, taskManager, Settings.QUEUE.NOTIFY_INTERVAL, Settings.QUEUE.NOTIFY_WAIT, + copyFrom.addProgressSubscriber(subscriberFactory.createFull(actor, Settings.QUEUE.NOTIFY_INTERVAL, Settings.QUEUE.NOTIFY_WAIT, StaticCaption.of("Current copy progress: %"))); } copyFrom .addReadChunks(new CuboidRegion(BlockVector3.at(pos1.getX(), 0, pos1.getZ()), BlockVector3.at(pos2.getX(), 0, pos2.getZ())).getChunks()); copyTo.setCompleteTask(whenDone); if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { - copyTo.addProgressSubscriber(subscriberFactory.create(actor, taskManager, Settings.QUEUE.NOTIFY_INTERVAL, Settings.QUEUE.NOTIFY_WAIT, + copyTo.addProgressSubscriber(subscriberFactory.createFull(actor, Settings.QUEUE.NOTIFY_INTERVAL, Settings.QUEUE.NOTIFY_WAIT, StaticCaption.of("Current paste progress: %"))); } return copyFrom.enqueue(); @@ -246,22 +246,22 @@ public abstract class RegionManager { copyFromTo(pos1, pos2, relX, relZ, world1, fromQueue2, toQueue1, true); fromQueue1.setCompleteTask(fromQueue2::enqueue); if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { - fromQueue1.addProgressSubscriber(subscriberFactory.create(actor, taskManager, Settings.QUEUE.NOTIFY_INTERVAL, Settings.QUEUE.NOTIFY_WAIT, + fromQueue1.addProgressSubscriber(subscriberFactory.createFull(actor, Settings.QUEUE.NOTIFY_INTERVAL, Settings.QUEUE.NOTIFY_WAIT, StaticCaption.of("Current region 1 copy progress: %"))); } fromQueue2.setCompleteTask(toQueue1::enqueue); if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { - fromQueue2.addProgressSubscriber(subscriberFactory.create(actor, taskManager, Settings.QUEUE.NOTIFY_INTERVAL, Settings.QUEUE.NOTIFY_WAIT, + fromQueue2.addProgressSubscriber(subscriberFactory.createFull(actor, Settings.QUEUE.NOTIFY_INTERVAL, Settings.QUEUE.NOTIFY_WAIT, StaticCaption.of("Current region 2 copy progress: %"))); } toQueue1.setCompleteTask(toQueue2::enqueue); if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { - toQueue1.addProgressSubscriber(subscriberFactory.create(actor, taskManager, Settings.QUEUE.NOTIFY_INTERVAL, Settings.QUEUE.NOTIFY_WAIT, + toQueue1.addProgressSubscriber(subscriberFactory.createFull(actor, Settings.QUEUE.NOTIFY_INTERVAL, Settings.QUEUE.NOTIFY_WAIT, StaticCaption.of("Current region 1 paste progress: %"))); } toQueue2.setCompleteTask(whenDone); if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { - toQueue2.addProgressSubscriber(subscriberFactory.create(actor, taskManager, Settings.QUEUE.NOTIFY_INTERVAL, Settings.QUEUE.NOTIFY_WAIT, + toQueue2.addProgressSubscriber(subscriberFactory.createFull(actor, Settings.QUEUE.NOTIFY_INTERVAL, Settings.QUEUE.NOTIFY_WAIT, StaticCaption.of("Current region 2 paste progress: %"))); } fromQueue1.enqueue(); diff --git a/Core/src/main/java/com/plotsquared/core/util/SchematicHandler.java b/Core/src/main/java/com/plotsquared/core/util/SchematicHandler.java index 3ee907cb5..bc9581ea4 100644 --- a/Core/src/main/java/com/plotsquared/core/util/SchematicHandler.java +++ b/Core/src/main/java/com/plotsquared/core/util/SchematicHandler.java @@ -114,10 +114,11 @@ public abstract class SchematicHandler { public static SchematicHandler manager; private final WorldUtil worldUtil; private boolean exportAll = false; - @Inject private ProgressSubscriberFactory subscriberFactory; + private final ProgressSubscriberFactory subscriberFactory; - @Inject public SchematicHandler(@Nonnull final WorldUtil worldUtil) { + @Inject public SchematicHandler(@Nonnull final WorldUtil worldUtil, @Nonnull ProgressSubscriberFactory subscriberFactory) { this.worldUtil = worldUtil; + this.subscriberFactory = subscriberFactory; } public static void upload(@Nullable UUID uuid, @@ -353,7 +354,7 @@ public abstract class SchematicHandler { whenDone.value = true; } if (actor != null && Settings.QUEUE.NOTIFY_PROGRESS) { - queue.addProgressSubscriber(subscriberFactory.create(actor)); + queue.addProgressSubscriber(subscriberFactory.createWithActor(actor)); } queue.setCompleteTask(whenDone); queue.enqueue();