diff --git a/build.gradle.kts b/build.gradle.kts index 71c002d9..8977c306 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,7 +9,7 @@ plugins { } group = "de.eldoria" -version = "2.5.6" +version = "2.6.0" var publishModules = setOf("schematicbrushreborn-api", "schematicbrushreborn-core", diff --git a/schematicbrushreborn-api/src/main/java/de/eldoria/schematicbrush/storage/Storage.java b/schematicbrushreborn-api/src/main/java/de/eldoria/schematicbrush/storage/Storage.java index 84910197..c170a73f 100644 --- a/schematicbrushreborn-api/src/main/java/de/eldoria/schematicbrush/storage/Storage.java +++ b/schematicbrushreborn-api/src/main/java/de/eldoria/schematicbrush/storage/Storage.java @@ -54,6 +54,11 @@ default void save() { * Called when the plugin shuts down and the storages get unregistered. */ default void shutdown() { + } + /** + * Reload the data for that storage from disk + */ + default void reload(){ } } diff --git a/schematicbrushreborn-api/src/main/java/de/eldoria/schematicbrush/storage/StorageRegistry.java b/schematicbrushreborn-api/src/main/java/de/eldoria/schematicbrush/storage/StorageRegistry.java index d9df2aba..6b7573b6 100644 --- a/schematicbrushreborn-api/src/main/java/de/eldoria/schematicbrush/storage/StorageRegistry.java +++ b/schematicbrushreborn-api/src/main/java/de/eldoria/schematicbrush/storage/StorageRegistry.java @@ -37,4 +37,8 @@ public interface StorageRegistry extends Registry { * @return Returns a future which completes once all underlying processes complete */ CompletableFuture migrate(Nameable source, Nameable target); + + default void reload() { + registry().values().forEach(Storage::reload); + } } diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/SchematicBrushRebornImpl.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/SchematicBrushRebornImpl.java index c616cd47..ac1645f3 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/SchematicBrushRebornImpl.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/SchematicBrushRebornImpl.java @@ -102,7 +102,6 @@ public class SchematicBrushRebornImpl extends SchematicBrushReborn { private JacksonConfiguration configuration; private RenderService renderService; private StorageRegistryImpl storageRegistry; - private Storage storage; private SimpleModule sbrModule; public SchematicBrushRebornImpl() { @@ -147,7 +146,6 @@ public void onPluginEnable() { ILocalizer.create(this, "en_US").setLocale("en_US"); schematics.register(SchematicCache.STORAGE, new SchematicBrushCache(this, configuration)); - storage = storageRegistry.activeStorage(); var notifyListener = new NotifyListener(this, configuration); renderService = new RenderService(this, configuration); @@ -161,11 +159,11 @@ public void onPluginEnable() { messageBlocker = MessageBlocker.dummy(this); } - var brushCommand = new Brush(this, schematics, storage, settingsRegistry, messageBlocker); - var presetCommand = new de.eldoria.schematicbrush.commands.Preset(this, storage, messageBlocker); + var brushCommand = new Brush(this, schematics, storageRegistry, settingsRegistry, messageBlocker); + var presetCommand = new de.eldoria.schematicbrush.commands.Preset(this, storageRegistry, messageBlocker); var adminCommand = new Admin(this, schematics, storageRegistry); var settingsCommand = new Settings(this, configuration, renderService, notifyListener, messageBlocker); - var brushPresetsCommand = new BrushPresets(this, storage, messageBlocker, settingsRegistry); + var brushPresetsCommand = new BrushPresets(this, storageRegistry, messageBlocker, settingsRegistry); var modifyCommand = new Modify(this, settingsRegistry); enableMetrics(); @@ -261,6 +259,7 @@ public void onPostStart() throws Throwable { public void reload() { schematics.reload(); + storageRegistry.reload(); configuration.reload(); renderService.restart(); } @@ -290,10 +289,10 @@ private void enableMetrics() { () -> reduceMetricValue(schematics.directoryCount(), 100, 10, 50, 100))); metrics.addCustomChart(new SimplePie("preset_count", - () -> reduceMetricValue(storage.presets().count().join(), 100, 10, 50, 100))); + () -> reduceMetricValue(storageRegistry.activeStorage().presets().count().join(), 100, 10, 50, 100))); metrics.addCustomChart(new SimplePie("brush_count", - () -> reduceMetricValue(storage.brushes().count().join(), 100, 10, 50, 100))); + () -> reduceMetricValue(storageRegistry.activeStorage().brushes().count().join(), 100, 10, 50, 100))); metrics.addCustomChart(new SimplePie("premium", () -> String.valueOf(UserData.get(this).isPremium()))); diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/Brush.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/Brush.java index 2cb73f4b..7837b820 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/Brush.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/Brush.java @@ -32,6 +32,7 @@ import de.eldoria.schematicbrush.commands.brush.ShowSets; import de.eldoria.schematicbrush.schematics.SchematicRegistry; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import de.eldoria.schematicbrush.util.Permissions; import org.bukkit.plugin.Plugin; @@ -39,7 +40,7 @@ * Command which is used to create a new brush. Rewrite of old schbr command. */ public class Brush extends AdvancedCommand { - public Brush(Plugin plugin, SchematicRegistry schematics, Storage storage, BrushSettingsRegistry setting, MessageBlocker messageBlocker) { + public Brush(Plugin plugin, SchematicRegistry schematics, StorageRegistry storage, BrushSettingsRegistry setting, MessageBlocker messageBlocker) { super(plugin, CommandMeta.builder("sbr") .withPermission(Permissions.Brush.USE) .buildSubCommands((cmds, self) -> { diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/BrushPresets.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/BrushPresets.java index 04757959..50d41064 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/BrushPresets.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/BrushPresets.java @@ -15,6 +15,7 @@ import de.eldoria.schematicbrush.commands.brushpresets.List; import de.eldoria.schematicbrush.commands.brushpresets.Remove; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import de.eldoria.schematicbrush.util.Permissions; import org.bukkit.plugin.Plugin; @@ -23,17 +24,17 @@ * Brush to create and modify brush presets. */ public class BrushPresets extends AdvancedCommand { - public BrushPresets(Plugin plugin, Storage config, MessageBlocker messageBlocker, BrushSettingsRegistry registry) { + public BrushPresets(Plugin plugin, StorageRegistry storage, MessageBlocker messageBlocker, BrushSettingsRegistry registry) { super(plugin); meta(CommandMeta.builder("sbrbp") .withPermission(Permissions.BrushPreset.USE) .buildSubCommands((cmds, builder) -> { - var list = new List(plugin, config, messageBlocker, registry); + var list = new List(plugin, storage, messageBlocker, registry); builder.withDefaultCommand(list); - cmds.add(new Descr(plugin, config)); - cmds.add(new Info(plugin, config, messageBlocker, registry)); + cmds.add(new Descr(plugin, storage)); + cmds.add(new Info(plugin, storage, messageBlocker, registry)); cmds.add(list); - cmds.add(new Remove(plugin, config)); + cmds.add(new Remove(plugin, storage)); }).build()); } } diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/Preset.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/Preset.java index f628448f..32fbe336 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/Preset.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/Preset.java @@ -14,6 +14,7 @@ import de.eldoria.schematicbrush.commands.preset.List; import de.eldoria.schematicbrush.commands.preset.Remove; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import de.eldoria.schematicbrush.util.Permissions; import org.bukkit.plugin.Plugin; @@ -22,17 +23,17 @@ * Brush to create and modify brush presets. */ public class Preset extends AdvancedCommand { - public Preset(Plugin plugin, Storage config, MessageBlocker messageBlocker) { + public Preset(Plugin plugin, StorageRegistry storage, MessageBlocker messageBlocker) { super(plugin); meta(CommandMeta.builder("sbrp") .withPermission(Permissions.Preset.USE) .buildSubCommands((cmds, builder) -> { - var list = new List(plugin, config, messageBlocker); + var list = new List(plugin, storage, messageBlocker); builder.withDefaultCommand(list); - cmds.add(new Descr(plugin, config)); - cmds.add(new Info(plugin, config, messageBlocker)); + cmds.add(new Descr(plugin, storage)); + cmds.add(new Info(plugin, storage, messageBlocker)); cmds.add(list); - cmds.add(new Remove(plugin, config)); + cmds.add(new Remove(plugin, storage)); }).build()); } } diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/AddPreset.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/AddPreset.java index e6d532f7..425dfb0b 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/AddPreset.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/AddPreset.java @@ -15,6 +15,7 @@ import de.eldoria.eldoutilities.utils.Consumers; import de.eldoria.eldoutilities.utils.Futures; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; @@ -25,9 +26,9 @@ public class AddPreset extends AdvancedCommand implements IPlayerTabExecutor { private final Sessions sessions; - private final Storage storage; + private final StorageRegistry storage; - public AddPreset(Plugin plugin, Sessions sessions, Storage storage) { + public AddPreset(Plugin plugin, Sessions sessions, StorageRegistry storage) { super(plugin, CommandMeta.builder("addpreset") .addUnlocalizedArgument("name", true) .hidden() @@ -41,10 +42,10 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar var session = sessions.getOrCreateSession(player); var name = args.asString(0); var strippedName = name.replaceAll("^g:", ""); - storage.presets().containerByName(player, name) + storage.activeStorage().presets().containerByName(player, name) .get(strippedName) .whenComplete(Futures.whenComplete(preset -> { - CommandAssertions.isTrue(preset.isPresent(), "Unkown preset."); + CommandAssertions.isTrue(preset.isPresent(), "Unknown preset."); for (var builder : preset.get().schematicSetsCopy()) { session.addSchematicSet(builder.copy()); @@ -57,7 +58,7 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar @Override public @Nullable List onTabComplete(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) { if (args.size() == 1) { - return storage.presets().complete(player, args.asString(0)); + return storage.activeStorage().presets().complete(player, args.asString(0)); } return Collections.emptyList(); } diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/LoadBrush.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/LoadBrush.java index bb3d5688..cc85ef72 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/LoadBrush.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/LoadBrush.java @@ -17,6 +17,7 @@ import de.eldoria.schematicbrush.brush.config.BrushSettingsRegistry; import de.eldoria.schematicbrush.schematics.SchematicRegistry; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; @@ -27,11 +28,11 @@ public class LoadBrush extends AdvancedCommand implements IPlayerTabExecutor { private final Sessions sessions; - private final Storage storage; + private final StorageRegistry storage; private final BrushSettingsRegistry settingsRegistry; private final SchematicRegistry schematicRegistry; - public LoadBrush(Plugin plugin, Sessions sessions, Storage storage, BrushSettingsRegistry settingsRegistry, SchematicRegistry schematicRegistry) { + public LoadBrush(Plugin plugin, Sessions sessions, StorageRegistry storage, BrushSettingsRegistry settingsRegistry, SchematicRegistry schematicRegistry) { super(plugin, CommandMeta.builder("loadbrush") .addUnlocalizedArgument("name", true) .build()); @@ -45,7 +46,7 @@ public LoadBrush(Plugin plugin, Sessions sessions, Storage storage, BrushSetting public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) throws CommandException { var name = args.asString(0); var strippedName = name.replaceAll("^g:", ""); - storage.brushes().containerByName(player, name) + storage.activeStorage().brushes().containerByName(player, name) .get(strippedName) .whenComplete(Futures.whenComplete(brush -> { CommandAssertions.isTrue(brush.isPresent(), "Unkown brush."); @@ -59,7 +60,7 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar @Override public @Nullable List onTabComplete(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) { if (args.size() == 1) { - return storage.brushes().complete(player, args.asString(0)); + return storage.activeStorage().brushes().complete(player, args.asString(0)); } return Collections.emptyList(); } diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/SaveBrush.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/SaveBrush.java index aae17ed8..f8e88e8c 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/SaveBrush.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/SaveBrush.java @@ -14,6 +14,7 @@ import de.eldoria.eldoutilities.commands.executor.IPlayerTabExecutor; import de.eldoria.eldoutilities.utils.Futures; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import de.eldoria.schematicbrush.storage.brush.Brush; import de.eldoria.schematicbrush.util.Permissions; import org.bukkit.entity.Player; @@ -28,10 +29,10 @@ public class SaveBrush extends AdvancedCommand implements IPlayerTabExecutor { - private final Storage storage; + private final StorageRegistry storage; private final Sessions sessions; - public SaveBrush(Plugin plugin, Sessions sessions, Storage storage) { + public SaveBrush(Plugin plugin, Sessions sessions, StorageRegistry storage) { super(plugin, CommandMeta.builder("saveBrush") .addUnlocalizedArgument("name", true) .withPermission(Permissions.BrushPreset.USE) @@ -49,24 +50,24 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar CompletableFuture> addition; if (args.flags().has("g")) { CommandAssertions.permission(player, false, Permissions.BrushPreset.GLOBAL); - addition = storage.brushes().globalContainer().get(brush.name()) + addition = storage.activeStorage().brushes().globalContainer().get(brush.name()) .whenComplete(Futures.whenComplete(succ -> { if (succ.isPresent()) { CommandAssertions.isTrue(args.flags().has("f"), "Brush already exists. Use -f to override"); } - storage.brushes().globalContainer().add(brush).join(); + storage.activeStorage().brushes().globalContainer().add(brush).join(); }, err -> handleCommandError(player, err))); } else { - addition = storage.brushes().playerContainer(player).get(brush.name()) + addition = storage.activeStorage().brushes().playerContainer(player).get(brush.name()) .whenComplete(Futures.whenComplete(succ -> { if (succ.isPresent()) { CommandAssertions.isTrue(args.flags().has("f"), "Brush already exists. Use -f to override"); } - storage.brushes().playerContainer(player).add(brush).join(); + storage.activeStorage().brushes().playerContainer(player).add(brush).join(); }, err -> handleCommandError(player, err))); } addition.whenComplete(Futures.whenComplete(res -> { - storage.save(); + storage.activeStorage().save(); messageSender().sendMessage(player, "Brush saved."); }, err -> handleCommandError(player, err))); } diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/SavePreset.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/SavePreset.java index 4f48bbd7..59a2648f 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/SavePreset.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brush/SavePreset.java @@ -15,6 +15,7 @@ import de.eldoria.eldoutilities.utils.Futures; import de.eldoria.schematicbrush.brush.config.builder.SchematicSetBuilder; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import de.eldoria.schematicbrush.storage.preset.Preset; import de.eldoria.schematicbrush.util.Permissions; import org.bukkit.entity.Player; @@ -29,10 +30,10 @@ public class SavePreset extends AdvancedCommand implements IPlayerTabExecutor { - private final Storage storage; + private final StorageRegistry storage; private final Sessions sessions; - public SavePreset(Plugin plugin, Sessions sessions, Storage storage) { + public SavePreset(Plugin plugin, Sessions sessions, StorageRegistry storage) { super(plugin, CommandMeta.builder("savePreset") .addUnlocalizedArgument("name", true) .withPermission(Permissions.Preset.USE) @@ -52,25 +53,25 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar CompletableFuture> addition; if (args.flags().has("g")) { CommandAssertions.permission(player, false, Permissions.Preset.GLOBAL); - addition = storage.presets().globalContainer().get(preset.name()) + addition = storage.activeStorage().presets().globalContainer().get(preset.name()) .whenComplete(Futures.whenComplete(succ -> { if (succ.isPresent()) { CommandAssertions.isTrue(args.flags().has("f"), "Preset already exists. Use -f to override"); } - storage.presets().globalContainer().add(preset).join(); + storage.activeStorage().presets().globalContainer().add(preset).join(); }, err -> handleCommandError(player, err))); } else { - addition = storage.presets().playerContainer(player).get(preset.name()) + addition = storage.activeStorage().presets().playerContainer(player).get(preset.name()) .whenComplete(Futures.whenComplete(succ -> { if (succ.isPresent()) { CommandAssertions.isTrue(args.flags().has("f"), "Preset already exists. Use -f to override"); } - storage.presets().playerContainer(player).add(preset).join(); + storage.activeStorage().presets().playerContainer(player).add(preset).join(); }, err -> handleCommandError(player, err))); } addition.whenComplete(Futures.whenComplete(res -> { //TODO: Think about storage saving - storage.save(); + storage.activeStorage().save(); messageSender().sendMessage(player, "Preset saved."); }, err -> handleCommandError(player, err))); } diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/Descr.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/Descr.java index a71d118a..e8af0099 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/Descr.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/Descr.java @@ -15,6 +15,7 @@ import de.eldoria.eldoutilities.localization.Replacement; import de.eldoria.eldoutilities.utils.Futures; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import de.eldoria.schematicbrush.util.Permissions; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -25,9 +26,9 @@ import java.util.List; public class Descr extends AdvancedCommand implements IPlayerTabExecutor { - private final Storage storage; + private final StorageRegistry storage; - public Descr(Plugin plugin, Storage storage) { + public Descr(Plugin plugin, StorageRegistry storage) { super(plugin, CommandMeta.builder("descr") .addUnlocalizedArgument("name", true) .addUnlocalizedArgument("descr", true) @@ -43,7 +44,7 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar if (name.startsWith("g:")) CommandAssertions.permission(player, false, Permissions.Preset.GLOBAL); var strippedName = name.replaceAll("^g:", ""); - var container = storage.brushes().containerByName(player, name); + var container = storage.activeStorage().brushes().containerByName(player, name); container.get(strippedName) .whenComplete(Futures.whenComplete(brush -> { CommandAssertions.isTrue(brush.isPresent(), "error.unkownBrush", Replacement.create("name", name).addFormatting('b')); @@ -57,7 +58,7 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar @Override public @Nullable List onTabComplete(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) { if (args.size() == 1) { - return storage.brushes().complete(player, args.asString(0)); + return storage.activeStorage().brushes().complete(player, args.asString(0)); } return Collections.emptyList(); } diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/Info.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/Info.java index 869ccfe0..d660b32b 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/Info.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/Info.java @@ -19,6 +19,7 @@ import de.eldoria.messageblocker.blocker.MessageBlocker; import de.eldoria.schematicbrush.brush.config.BrushSettingsRegistry; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import de.eldoria.schematicbrush.util.Colors; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -31,13 +32,13 @@ import java.util.List; public class Info extends AdvancedCommand implements IPlayerTabExecutor { - private final Storage storage; + private final StorageRegistry storage; private final MiniMessage miniMessage = MiniMessage.miniMessage(); private final BukkitAudiences audiences; private final MessageBlocker messageBlocker; private final BrushSettingsRegistry registry; - public Info(Plugin plugin, Storage storage, MessageBlocker messageBlocker, BrushSettingsRegistry settingsRegistry) { + public Info(Plugin plugin, StorageRegistry storage, MessageBlocker messageBlocker, BrushSettingsRegistry settingsRegistry) { super(plugin, CommandMeta.builder("info") .addUnlocalizedArgument("name", true) .hidden() @@ -52,7 +53,7 @@ public Info(Plugin plugin, Storage storage, MessageBlocker messageBlocker, Brush public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) throws CommandException { var name = args.asString(0); var strippedName = name.replaceAll("^g:", ""); - storage.brushes().containerByName(player, name).get(strippedName) + storage.activeStorage().brushes().containerByName(player, name).get(strippedName) .whenComplete(Futures.whenComplete(res -> { CommandAssertions.isTrue(res.isPresent(), "error.unkownBrush", Replacement.create("name", strippedName).addFormatting('b')); var preset = res.get(); @@ -73,7 +74,7 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar @Override public @Nullable List onTabComplete(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) { if (args.size() == 1) { - return storage.brushes().complete(player, args.asString(0)); + return storage.activeStorage().brushes().complete(player, args.asString(0)); } return Collections.emptyList(); } diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/List.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/List.java index f22619b4..9e6030fa 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/List.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/List.java @@ -12,12 +12,12 @@ import de.eldoria.schematicbrush.brush.config.BrushSettingsRegistry; import de.eldoria.schematicbrush.commands.brushpresets.info.Global; import de.eldoria.schematicbrush.commands.brushpresets.info.Private; -import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import org.bukkit.plugin.Plugin; public class List extends AdvancedCommand { - public List(Plugin plugin, Storage storage, MessageBlocker messageBlocker, BrushSettingsRegistry registry) { + public List(Plugin plugin, StorageRegistry storage, MessageBlocker messageBlocker, BrushSettingsRegistry registry) { super(plugin, CommandMeta.builder("list") .buildSubCommands((cmds, builder) ->{ var privateList = new Private(plugin, storage, messageBlocker, registry); diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/Remove.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/Remove.java index 9b6a1fd4..6e231323 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/Remove.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/Remove.java @@ -15,6 +15,7 @@ import de.eldoria.eldoutilities.localization.Replacement; import de.eldoria.eldoutilities.utils.Futures; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import de.eldoria.schematicbrush.util.Permissions; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -26,9 +27,9 @@ import java.util.concurrent.CompletableFuture; public class Remove extends AdvancedCommand implements IPlayerTabExecutor { - private final Storage storage; + private final StorageRegistry storage; - public Remove(Plugin plugin, Storage storage) { + public Remove(Plugin plugin, StorageRegistry storage) { super(plugin, CommandMeta.builder("remove") .addUnlocalizedArgument("name", true) .hidden() @@ -42,12 +43,12 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar CompletableFuture removal; if (args.flags().has("g")) { CommandAssertions.permission(player, false, Permissions.Preset.GLOBAL); - removal = storage.brushes().globalContainer().remove(name) + removal = storage.activeStorage().brushes().globalContainer().remove(name) .whenComplete(Futures.whenComplete( success -> CommandAssertions.isTrue(success, "error.unkownBrush", Replacement.create("name", name).addFormatting('b')), err -> handleCommandError(player, err))); } else { - removal = storage.brushes().playerContainer(player).remove(name) + removal = storage.activeStorage().brushes().playerContainer(player).remove(name) .whenComplete(Futures.whenComplete( success -> CommandAssertions.isTrue(success, "error.unkownBrush", Replacement.create("name", name).addFormatting('b')), err -> handleCommandError(player, err))); @@ -60,7 +61,7 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar @Override public @Nullable List onTabComplete(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) { if (args.size() == 1) { - return storage.brushes().complete(player, args.asString(0)); + return storage.activeStorage().brushes().complete(player, args.asString(0)); } return Collections.emptyList(); } diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/info/Global.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/info/Global.java index bfed05c3..12b6890a 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/info/Global.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/info/Global.java @@ -16,6 +16,7 @@ import de.eldoria.schematicbrush.brush.config.BrushSettingsRegistry; import de.eldoria.schematicbrush.commands.util.BasePageCommand; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import de.eldoria.schematicbrush.util.Permissions; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -23,10 +24,10 @@ public class Global extends BasePageCommand implements IPlayerTabExecutor { - private final Storage storage; + private final StorageRegistry storage; private final BrushSettingsRegistry registry; - public Global(Plugin plugin, Storage storage, MessageBlocker messageBlocker, BrushSettingsRegistry registry) { + public Global(Plugin plugin, StorageRegistry storage, MessageBlocker messageBlocker, BrushSettingsRegistry registry) { super(plugin, CommandMeta.builder("global") .addUnlocalizedArgument("page", false) .build(), messageBlocker); @@ -37,7 +38,7 @@ public Global(Plugin plugin, Storage storage, MessageBlocker messageBlocker, Bru @Override public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) throws CommandException { int index = args.asInt(0, 0); - storage.brushes().globalContainer().paged().whenComplete(Futures.whenComplete(paged -> { + storage.activeStorage().brushes().globalContainer().paged().whenComplete(Futures.whenComplete(paged -> { paged.page(index, PAGE_SIZE).whenComplete(Futures.whenComplete(entries -> { boolean delete = player.hasPermission(Permissions.Preset.GLOBAL); var composer = MessageComposer.create(); diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/info/Private.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/info/Private.java index def940bc..e2c54161 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/info/Private.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/brushpresets/info/Private.java @@ -16,16 +16,17 @@ import de.eldoria.schematicbrush.brush.config.BrushSettingsRegistry; import de.eldoria.schematicbrush.commands.util.BasePageCommand; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; public class Private extends BasePageCommand implements IPlayerTabExecutor { - private final Storage storage; + private final StorageRegistry storage; private final BrushSettingsRegistry registry; - public Private(Plugin plugin, Storage storage, MessageBlocker messageBlocker, BrushSettingsRegistry registry) { + public Private(Plugin plugin, StorageRegistry storage, MessageBlocker messageBlocker, BrushSettingsRegistry registry) { super(plugin, CommandMeta.builder("private") .addUnlocalizedArgument("page", false) .build(), messageBlocker); @@ -36,7 +37,7 @@ public Private(Plugin plugin, Storage storage, MessageBlocker messageBlocker, Br @Override public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) throws CommandException { int index = args.asInt(0, 0); - storage.brushes().playerContainer(player).paged().whenComplete(Futures.whenComplete(paged -> { + storage.activeStorage().brushes().playerContainer(player).paged().whenComplete(Futures.whenComplete(paged -> { paged.page(index, PAGE_SIZE).whenComplete(Futures.whenComplete(entries -> { var composer = MessageComposer.create(); addPageHeader(composer, "Brush Presets", false); diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/Descr.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/Descr.java index 54d2e196..470c609e 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/Descr.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/Descr.java @@ -15,7 +15,7 @@ import de.eldoria.eldoutilities.localization.Replacement; import de.eldoria.eldoutilities.utils.Futures; import de.eldoria.schematicbrush.storage.Storage; -import de.eldoria.schematicbrush.storage.preset.PresetContainer; +import de.eldoria.schematicbrush.storage.StorageRegistry; import de.eldoria.schematicbrush.util.Permissions; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -26,9 +26,9 @@ import java.util.List; public class Descr extends AdvancedCommand implements IPlayerTabExecutor { - private final Storage storage; + private final StorageRegistry storage; - public Descr(Plugin plugin, Storage storage) { + public Descr(Plugin plugin, StorageRegistry storage) { super(plugin, CommandMeta.builder("descr") .addUnlocalizedArgument("name", true) .addUnlocalizedArgument("descr", true) @@ -44,7 +44,7 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar if (name.startsWith("g:")) CommandAssertions.permission(player, false, Permissions.Preset.GLOBAL); var strippedName = name.replaceAll("^g:", ""); - var container = storage.presets().containerByName(player, name); + var container = storage.activeStorage().presets().containerByName(player, name); container.get(strippedName) .whenComplete(Futures.whenComplete(preset -> { CommandAssertions.isTrue(preset.isPresent(), "error.unkownPreset", Replacement.create("name", name).addFormatting('b')); @@ -58,7 +58,7 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar @Override public @Nullable List onTabComplete(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) { if (args.size() == 1) { - return storage.presets().complete(player, args.asString(0)); + return storage.activeStorage().presets().complete(player, args.asString(0)); } return Collections.emptyList(); } diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/Info.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/Info.java index 6d237596..cb367c19 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/Info.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/Info.java @@ -18,6 +18,7 @@ import de.eldoria.eldoutilities.utils.Futures; import de.eldoria.messageblocker.blocker.MessageBlocker; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import de.eldoria.schematicbrush.util.Colors; import net.kyori.adventure.platform.bukkit.BukkitAudiences; import net.kyori.adventure.text.minimessage.MiniMessage; @@ -30,12 +31,12 @@ import java.util.List; public class Info extends AdvancedCommand implements IPlayerTabExecutor { - private final Storage storage; + private final StorageRegistry storage; private final MiniMessage miniMessage = MiniMessage.miniMessage(); private final BukkitAudiences audiences; private final MessageBlocker messageBlocker; - public Info(Plugin plugin, Storage storage, MessageBlocker messageBlocker) { + public Info(Plugin plugin, StorageRegistry storage, MessageBlocker messageBlocker) { super(plugin, CommandMeta.builder("info") .addUnlocalizedArgument("name", true) .hidden() @@ -49,7 +50,7 @@ public Info(Plugin plugin, Storage storage, MessageBlocker messageBlocker) { public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) throws CommandException { var name = args.asString(0); var strippedName = name.replaceAll("^g:", ""); - storage.presets().containerByName(player, name).get(strippedName) + storage.activeStorage().presets().containerByName(player, name).get(strippedName) .whenComplete(Futures.whenComplete(res -> { CommandAssertions.isTrue(res.isPresent(), "error.unkownPreset", Replacement.create("name", strippedName).addFormatting('b')); var preset = res.get(); @@ -70,7 +71,7 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar @Override public @Nullable List onTabComplete(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) { if (args.size() == 1) { - return storage.presets().complete(player, args.asString(0)); + return storage.activeStorage().presets().complete(player, args.asString(0)); } return Collections.emptyList(); } diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/List.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/List.java index db7f6d79..6282e9fd 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/List.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/List.java @@ -8,27 +8,15 @@ import de.eldoria.eldoutilities.commands.command.AdvancedCommand; import de.eldoria.eldoutilities.commands.command.CommandMeta; -import de.eldoria.eldoutilities.commands.command.util.Arguments; -import de.eldoria.eldoutilities.commands.executor.IPlayerTabExecutor; -import de.eldoria.eldoutilities.utils.Consumers; -import de.eldoria.eldoutilities.utils.Futures; import de.eldoria.messageblocker.blocker.MessageBlocker; import de.eldoria.schematicbrush.commands.preset.info.Global; import de.eldoria.schematicbrush.commands.preset.info.Private; -import de.eldoria.schematicbrush.storage.Storage; -import de.eldoria.schematicbrush.util.Colors; -import de.eldoria.schematicbrush.util.Permissions; -import net.kyori.adventure.platform.bukkit.BukkitAudiences; -import net.kyori.adventure.text.minimessage.MiniMessage; -import org.bukkit.entity.Player; +import de.eldoria.schematicbrush.storage.StorageRegistry; import org.bukkit.plugin.Plugin; -import org.jetbrains.annotations.NotNull; - -import java.util.stream.Collectors; public class List extends AdvancedCommand { - public List(Plugin plugin, Storage storage, MessageBlocker messageBlocker) { + public List(Plugin plugin, StorageRegistry storage, MessageBlocker messageBlocker) { super(plugin, CommandMeta.builder("list") .buildSubCommands((cmds, builder) ->{ var privateList = new Private(plugin, storage, messageBlocker); diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/Remove.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/Remove.java index 6f7f3ca4..69204c6b 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/Remove.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/Remove.java @@ -15,6 +15,7 @@ import de.eldoria.eldoutilities.localization.Replacement; import de.eldoria.eldoutilities.utils.Futures; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import de.eldoria.schematicbrush.util.Permissions; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -26,9 +27,9 @@ import java.util.concurrent.CompletableFuture; public class Remove extends AdvancedCommand implements IPlayerTabExecutor { - private final Storage storage; + private final StorageRegistry storage; - public Remove(Plugin plugin, Storage storage) { + public Remove(Plugin plugin, StorageRegistry storage) { super(plugin, CommandMeta.builder("remove") .addUnlocalizedArgument("name", true) .hidden() @@ -42,12 +43,12 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar CompletableFuture removal; if (args.flags().has("g")) { CommandAssertions.permission(player, false, Permissions.Preset.GLOBAL); - removal = storage.presets().globalContainer().remove(name) + removal = storage.activeStorage().presets().globalContainer().remove(name) .whenComplete(Futures.whenComplete( success -> CommandAssertions.isTrue(success, "error.unkownPreset", Replacement.create("name", name).addFormatting('b')), err -> handleCommandError(player, err))); } else { - removal = storage.presets().playerContainer(player).remove(name) + removal = storage.activeStorage().presets().playerContainer(player).remove(name) .whenComplete(Futures.whenComplete( success -> CommandAssertions.isTrue(success, "error.unkownPreset", Replacement.create("name", name).addFormatting('b')), err -> handleCommandError(player, err))); @@ -60,7 +61,7 @@ public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Ar @Override public @Nullable List onTabComplete(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) { if (args.size() == 1) { - return storage.presets().complete(player, args.asString(0)); + return storage.activeStorage().presets().complete(player, args.asString(0)); } return Collections.emptyList(); } diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/info/Global.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/info/Global.java index 1d7d1229..07afe0c6 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/info/Global.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/info/Global.java @@ -15,6 +15,7 @@ import de.eldoria.messageblocker.blocker.MessageBlocker; import de.eldoria.schematicbrush.commands.util.BasePageCommand; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import de.eldoria.schematicbrush.util.Permissions; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -22,9 +23,9 @@ public class Global extends BasePageCommand implements IPlayerTabExecutor { - private final Storage storage; + private final StorageRegistry storage; - public Global(Plugin plugin, Storage storage, MessageBlocker messageBlocker) { + public Global(Plugin plugin, StorageRegistry storage, MessageBlocker messageBlocker) { super(plugin, CommandMeta.builder("global") .addUnlocalizedArgument("page", false) .build(), messageBlocker); @@ -34,7 +35,7 @@ public Global(Plugin plugin, Storage storage, MessageBlocker messageBlocker) { @Override public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) throws CommandException { int index = args.asInt(0, 0); - storage.presets().globalContainer().paged().whenComplete(Futures.whenComplete(paged -> { + storage.activeStorage().presets().globalContainer().paged().whenComplete(Futures.whenComplete(paged -> { paged.page(index, PAGE_SIZE).whenComplete(Futures.whenComplete(entries -> { var delete = player.hasPermission(Permissions.Preset.GLOBAL); var composer = MessageComposer.create(); diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/info/Private.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/info/Private.java index f231bebf..11dbf55b 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/info/Private.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/commands/preset/info/Private.java @@ -15,15 +15,16 @@ import de.eldoria.messageblocker.blocker.MessageBlocker; import de.eldoria.schematicbrush.commands.util.BasePageCommand; import de.eldoria.schematicbrush.storage.Storage; +import de.eldoria.schematicbrush.storage.StorageRegistry; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; import org.jetbrains.annotations.NotNull; public class Private extends BasePageCommand implements IPlayerTabExecutor { - private final Storage storage; + private final StorageRegistry storage; - public Private(Plugin plugin, Storage storage, MessageBlocker messageBlocker) { + public Private(Plugin plugin, StorageRegistry storage, MessageBlocker messageBlocker) { super(plugin, CommandMeta.builder("private") .addUnlocalizedArgument("page", false) .build(), messageBlocker); @@ -33,7 +34,7 @@ public Private(Plugin plugin, Storage storage, MessageBlocker messageBlocker) { @Override public void onCommand(@NotNull Player player, @NotNull String alias, @NotNull Arguments args) throws CommandException { int index = args.asInt(0, 0); - storage.presets().playerContainer(player).paged().whenComplete(Futures.whenComplete(paged -> { + storage.activeStorage().presets().playerContainer(player).paged().whenComplete(Futures.whenComplete(paged -> { paged.page(index, PAGE_SIZE).whenComplete(Futures.whenComplete(entries -> { var composer = MessageComposer.create(); addPageHeader(composer, "Presets", false); diff --git a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/rendering/PacketWorker.java b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/rendering/PacketWorker.java index 64311776..302c0a11 100644 --- a/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/rendering/PacketWorker.java +++ b/schematicbrushreborn-core/src/main/java/de/eldoria/schematicbrush/rendering/PacketWorker.java @@ -12,6 +12,8 @@ import org.bukkit.entity.Player; import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Objects; import java.util.Queue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; @@ -95,7 +97,7 @@ public void process(Player player) { public int packetQueueCount() { // We copy the queue to avoid modification during counting. // Synchronizing the queue would stop the worker from working properly - return new ArrayDeque<>(queue).stream().mapToInt(RenderSink::size).sum(); + return new ArrayList<>(queue).stream().filter(Objects::nonNull).mapToInt(RenderSink::size).sum(); } public int size() { diff --git a/settings.gradle.kts b/settings.gradle.kts index d5d256fc..d49f4050 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -51,8 +51,8 @@ dependencyResolutionManagement { library("fawe-bukkit", "com.fastasyncworldedit","FastAsyncWorldEdit-Bukkit").versionRef("fawe") // plugins - plugin("publishdata", "de.chojo.publishdata").version("1.2.5") - plugin("spotless", "com.diffplug.spotless").version("6.23.3") + plugin("publishdata", "de.chojo.publishdata").version("1.3.0") + plugin("spotless", "com.diffplug.spotless").version("6.24.0") plugin("shadow", "com.github.johnrengelman.shadow").version("8.1.1") plugin("pluginyml-bukkit", "net.minecrell.plugin-yml.bukkit").version("0.6.0") //plugin("pluginyml-paper","net.minecrell.plugin-yml.paper").version( "0.5.3")