mirror of
https://github.com/Multiverse/Multiverse-Core.git
synced 2024-11-28 13:36:21 +01:00
Implement MVWorldDeleteEvent event
This commit is contained in:
parent
07ed9fbc48
commit
e93e2aa5f4
@ -4,8 +4,8 @@ import org.bukkit.event.Cancellable;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.mvplugins.multiverse.core.world.LoadedMultiverseWorld;
|
||||
import org.mvplugins.multiverse.core.world.MultiverseWorld;
|
||||
|
||||
/**
|
||||
* Called when a world is about to be deleted by Multiverse.
|
||||
@ -14,14 +14,9 @@ public class MVWorldDeleteEvent extends Event implements Cancellable {
|
||||
private boolean cancelled = false;
|
||||
|
||||
private final LoadedMultiverseWorld world;
|
||||
private final boolean removeFromConfig;
|
||||
|
||||
public MVWorldDeleteEvent(LoadedMultiverseWorld world, boolean removeFromConfig) {
|
||||
if (world == null) {
|
||||
throw new IllegalArgumentException("world can't be null!");
|
||||
}
|
||||
public MVWorldDeleteEvent(@NotNull LoadedMultiverseWorld world) {
|
||||
this.world = world;
|
||||
this.removeFromConfig = removeFromConfig;
|
||||
}
|
||||
|
||||
private static final HandlerList HANDLERS = new HandlerList();
|
||||
@ -61,19 +56,9 @@ public class MVWorldDeleteEvent extends Event implements Cancellable {
|
||||
/**
|
||||
* Gets the world that's about to be deleted.
|
||||
*
|
||||
* @return That {@link MultiverseWorld}.
|
||||
* @return That {@link LoadedMultiverseWorld}.
|
||||
*/
|
||||
public LoadedMultiverseWorld getWorld() {
|
||||
return world;
|
||||
}
|
||||
|
||||
/**
|
||||
* Is the world about to be removed from the config?
|
||||
*
|
||||
* @return True if yes, false if no.
|
||||
*/
|
||||
public boolean removeWorldFromConfig() {
|
||||
return removeFromConfig;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -20,13 +20,14 @@ import org.bukkit.Location;
|
||||
import org.bukkit.World;
|
||||
import org.bukkit.WorldCreator;
|
||||
import org.bukkit.WorldType;
|
||||
import org.bukkit.entity.Player;
|
||||
import org.bukkit.plugin.PluginManager;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jvnet.hk2.annotations.Service;
|
||||
|
||||
import org.mvplugins.multiverse.core.api.BlockSafety;
|
||||
import org.mvplugins.multiverse.core.api.LocationManipulation;
|
||||
import org.mvplugins.multiverse.core.event.MVWorldDeleteEvent;
|
||||
import org.mvplugins.multiverse.core.utils.message.MessageReplacement;
|
||||
import org.mvplugins.multiverse.core.utils.result.Attempt;
|
||||
import org.mvplugins.multiverse.core.utils.result.FailureReason;
|
||||
@ -75,6 +76,7 @@ public class WorldManager {
|
||||
private final FilesManipulator filesManipulator;
|
||||
private final BlockSafety blockSafety;
|
||||
private final LocationManipulation locationManipulation;
|
||||
private final PluginManager pluginManager;
|
||||
|
||||
@Inject
|
||||
WorldManager(
|
||||
@ -84,7 +86,9 @@ public class WorldManager {
|
||||
@NotNull PlayerWorldTeleporter playerWorldActions,
|
||||
@NotNull FilesManipulator filesManipulator,
|
||||
@NotNull BlockSafety blockSafety,
|
||||
@NotNull LocationManipulation locationManipulation) {
|
||||
@NotNull LocationManipulation locationManipulation,
|
||||
@NotNull PluginManager pluginManager) {
|
||||
this.pluginManager = pluginManager;
|
||||
this.worldsMap = new HashMap<>();
|
||||
this.loadedWorldsMap = new HashMap<>();
|
||||
this.unloadTracker = new ArrayList<>();
|
||||
@ -476,6 +480,13 @@ public class WorldManager {
|
||||
AtomicReference<File> worldFolder = new AtomicReference<>();
|
||||
return validateWorldToDelete(world)
|
||||
.peek(worldFolder::set)
|
||||
.mapAttempt(() -> {
|
||||
MVWorldDeleteEvent event = new MVWorldDeleteEvent(world);
|
||||
pluginManager.callEvent(event);
|
||||
return event.isCancelled()
|
||||
? Attempt.failure(DeleteFailureReason.EVENT_CANCELLED)
|
||||
: Attempt.success(null);
|
||||
})
|
||||
.mapAttempt(() -> removeWorld(world).transform(DeleteFailureReason.REMOVE_FAILED))
|
||||
.mapAttempt(() -> filesManipulator.deleteFolder(worldFolder.get()).fold(
|
||||
exception -> worldActionResult(DeleteFailureReason.FAILED_TO_DELETE_FOLDER,
|
||||
|
@ -3,6 +3,7 @@ package org.mvplugins.multiverse.core.world.reasons;
|
||||
import co.aikar.locales.MessageKey;
|
||||
import co.aikar.locales.MessageKeyProvider;
|
||||
|
||||
import org.mvplugins.multiverse.core.event.MVWorldDeleteEvent;
|
||||
import org.mvplugins.multiverse.core.utils.MVCorei18n;
|
||||
import org.mvplugins.multiverse.core.utils.result.FailureReason;
|
||||
|
||||
@ -33,7 +34,12 @@ public enum DeleteFailureReason implements FailureReason {
|
||||
/**
|
||||
* The world folder could not be deleted.
|
||||
*/
|
||||
FAILED_TO_DELETE_FOLDER(MVCorei18n.DELETEWORLD_FAILEDTODELETEFOLDER);
|
||||
FAILED_TO_DELETE_FOLDER(MVCorei18n.DELETEWORLD_FAILEDTODELETEFOLDER),
|
||||
|
||||
/**
|
||||
* The {@link MVWorldDeleteEvent} was cancelled.
|
||||
*/
|
||||
EVENT_CANCELLED(MVCorei18n.GENERIC_FAILURE); // todo: messaging
|
||||
|
||||
private final MessageKeyProvider message;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user