mirror of
https://github.com/DRE2N/DungeonsXL.git
synced 2024-11-28 05:26:29 +01:00
Add InstanceWorldPostUnloadEvent (#705)
This commit is contained in:
parent
ab514e4938
commit
b28423fa58
@ -23,7 +23,7 @@ import org.bukkit.event.HandlerList;
|
|||||||
* Fired when a group finishs a {@link Dungeon}, which means the end floor of a dungeon.
|
* Fired when a group finishs a {@link Dungeon}, which means the end floor of a dungeon.
|
||||||
* <p>
|
* <p>
|
||||||
* Do not confuse this with {@link de.erethon.dungeonsxl.api.event.player.GamePlayerFinishEvent}. GamePlayerFinishEvent is fired when a player triggers an end
|
* Do not confuse this with {@link de.erethon.dungeonsxl.api.event.player.GamePlayerFinishEvent}. GamePlayerFinishEvent is fired when a player triggers an end
|
||||||
* sign, while GroupFinishDungeonEvent is triggered when all group members have triggered the ready sign and the game actually ends.
|
* sign, while GroupFinishDungeonEvent is triggered when all group members have triggered the end sign and the game actually ends.
|
||||||
*
|
*
|
||||||
* @author Daniel Saukel
|
* @author Daniel Saukel
|
||||||
*/
|
*/
|
||||||
|
@ -0,0 +1,62 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2014-2020 Daniel Saukel
|
||||||
|
*
|
||||||
|
* This library is free software: you can redistribute it and/or modify it under the
|
||||||
|
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||||
|
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE. See the GNULesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package de.erethon.dungeonsxl.api.event.world;
|
||||||
|
|
||||||
|
import de.erethon.dungeonsxl.api.world.ResourceWorld;
|
||||||
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fired after an instance world is unloaded.
|
||||||
|
*
|
||||||
|
* @author Daniel Saukel
|
||||||
|
*/
|
||||||
|
public class InstanceWorldPostUnloadEvent extends ResourceWorldEvent {
|
||||||
|
|
||||||
|
private static final HandlerList handlers = new HandlerList();
|
||||||
|
private String instanceWorldName;
|
||||||
|
|
||||||
|
public InstanceWorldPostUnloadEvent(ResourceWorld resource, String instanceWorldName) {
|
||||||
|
super(resource);
|
||||||
|
this.instanceWorldName = instanceWorldName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the name the instance world had.
|
||||||
|
*
|
||||||
|
* @return the name the instance world had
|
||||||
|
*/
|
||||||
|
public String getInstanceWorldName() {
|
||||||
|
return instanceWorldName;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns if the unloaded instance was an edit world.
|
||||||
|
*
|
||||||
|
* @return if the unloaded instance was an edit world
|
||||||
|
*/
|
||||||
|
public boolean wasEditInstance() {
|
||||||
|
return instanceWorldName.startsWith("DXL_Edit_");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public HandlerList getHandlers() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static HandlerList getHandlerList() {
|
||||||
|
return handlers;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2014-2020 Daniel Saukel
|
||||||
|
*
|
||||||
|
* This library is free software: you can redistribute it and/or modify it under the
|
||||||
|
* terms of the GNU Lesser General Public License as published by the Free Software
|
||||||
|
* Foundation, either version 3 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
* WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||||
|
* PARTICULAR PURPOSE. See the GNULesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License along with
|
||||||
|
* this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package de.erethon.dungeonsxl.api.event.world;
|
||||||
|
|
||||||
|
import de.erethon.dungeonsxl.api.world.ResourceWorld;
|
||||||
|
import org.bukkit.event.Event;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Superclass for events involving DungeonsXL resource worlds.
|
||||||
|
*
|
||||||
|
* @author Daniel Saukel
|
||||||
|
*/
|
||||||
|
public abstract class ResourceWorldEvent extends Event {
|
||||||
|
|
||||||
|
protected ResourceWorld resource;
|
||||||
|
|
||||||
|
protected ResourceWorldEvent(ResourceWorld resource) {
|
||||||
|
this.resource = resource;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the resource world involved in this event.
|
||||||
|
*
|
||||||
|
* @return the resource world involved in this event.
|
||||||
|
*/
|
||||||
|
public ResourceWorld getResource() {
|
||||||
|
return resource;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -17,7 +17,6 @@ package de.erethon.dungeonsxl.api.event.world;
|
|||||||
import de.erethon.dungeonsxl.api.dungeon.Dungeon;
|
import de.erethon.dungeonsxl.api.dungeon.Dungeon;
|
||||||
import de.erethon.dungeonsxl.api.world.ResourceWorld;
|
import de.erethon.dungeonsxl.api.world.ResourceWorld;
|
||||||
import org.bukkit.event.Cancellable;
|
import org.bukkit.event.Cancellable;
|
||||||
import org.bukkit.event.Event;
|
|
||||||
import org.bukkit.event.HandlerList;
|
import org.bukkit.event.HandlerList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -25,28 +24,18 @@ import org.bukkit.event.HandlerList;
|
|||||||
*
|
*
|
||||||
* @author Daniel Saukel
|
* @author Daniel Saukel
|
||||||
*/
|
*/
|
||||||
public class ResourceWorldInstantiateEvent extends Event implements Cancellable {
|
public class ResourceWorldInstantiateEvent extends ResourceWorldEvent implements Cancellable {
|
||||||
|
|
||||||
private static final HandlerList handlers = new HandlerList();
|
private static final HandlerList handlers = new HandlerList();
|
||||||
private boolean cancelled;
|
private boolean cancelled;
|
||||||
|
|
||||||
private ResourceWorld resourceWorld;
|
|
||||||
private Dungeon dungeon;
|
private Dungeon dungeon;
|
||||||
|
|
||||||
public ResourceWorldInstantiateEvent(ResourceWorld resourceWorld, Dungeon dungeon) {
|
public ResourceWorldInstantiateEvent(ResourceWorld resource, Dungeon dungeon) {
|
||||||
this.resourceWorld = resourceWorld;
|
super(resource);
|
||||||
this.dungeon = dungeon;
|
this.dungeon = dungeon;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the resource world that is to be instantiated.
|
|
||||||
*
|
|
||||||
* @return the resource world that is to be instantiated
|
|
||||||
*/
|
|
||||||
public ResourceWorld getResourceWorld() {
|
|
||||||
return resourceWorld;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the dungeon as a part of which the instance is loaded.
|
* Returns the dungeon as a part of which the instance is loaded.
|
||||||
*
|
*
|
||||||
|
@ -22,6 +22,7 @@ import de.erethon.commons.misc.ProgressBar;
|
|||||||
import de.erethon.dungeonsxl.DungeonsXL;
|
import de.erethon.dungeonsxl.DungeonsXL;
|
||||||
import de.erethon.dungeonsxl.api.event.world.EditWorldSaveEvent;
|
import de.erethon.dungeonsxl.api.event.world.EditWorldSaveEvent;
|
||||||
import de.erethon.dungeonsxl.api.event.world.EditWorldUnloadEvent;
|
import de.erethon.dungeonsxl.api.event.world.EditWorldUnloadEvent;
|
||||||
|
import de.erethon.dungeonsxl.api.event.world.InstanceWorldPostUnloadEvent;
|
||||||
import de.erethon.dungeonsxl.api.world.EditWorld;
|
import de.erethon.dungeonsxl.api.world.EditWorld;
|
||||||
import de.erethon.dungeonsxl.mob.CitizensMobProvider;
|
import de.erethon.dungeonsxl.mob.CitizensMobProvider;
|
||||||
import de.erethon.dungeonsxl.player.DEditPlayer;
|
import de.erethon.dungeonsxl.player.DEditPlayer;
|
||||||
@ -165,6 +166,7 @@ public class DEditWorld extends DInstanceWorld implements EditWorld {
|
|||||||
|
|
||||||
kickAllPlayers();
|
kickAllPlayers();
|
||||||
|
|
||||||
|
String name = getWorld().getName();
|
||||||
if (save) {
|
if (save) {
|
||||||
getResource().getSignData().serializeSigns(signs.values());
|
getResource().getSignData().serializeSigns(signs.values());
|
||||||
Bukkit.unloadWorld(getWorld(), true);
|
Bukkit.unloadWorld(getWorld(), true);
|
||||||
@ -175,8 +177,9 @@ public class DEditWorld extends DInstanceWorld implements EditWorld {
|
|||||||
FileUtil.copyDir(getFolder(), getResource().getFolder(), DungeonsXL.EXCLUDED_FILES);
|
FileUtil.copyDir(getFolder(), getResource().getFolder(), DungeonsXL.EXCLUDED_FILES);
|
||||||
DResourceWorld.deleteUnusedFiles(getResource().getFolder());
|
DResourceWorld.deleteUnusedFiles(getResource().getFolder());
|
||||||
FileUtil.removeDir(getFolder());
|
FileUtil.removeDir(getFolder());
|
||||||
|
Bukkit.getPluginManager().callEvent(new InstanceWorldPostUnloadEvent(getResource(), name));
|
||||||
}
|
}
|
||||||
}.runTaskLaterAsynchronously(plugin, plugin.getMainConfig().getEditInstanceRemovalDelay() * 20L);
|
}.runTaskLater(plugin, plugin.getMainConfig().getEditInstanceRemovalDelay() * 20L);
|
||||||
}
|
}
|
||||||
if (!save) {
|
if (!save) {
|
||||||
Bukkit.unloadWorld(getWorld(), /* SPIGOT-5225 */ !Version.isAtLeast(Version.MC1_14_4));
|
Bukkit.unloadWorld(getWorld(), /* SPIGOT-5225 */ !Version.isAtLeast(Version.MC1_14_4));
|
||||||
@ -184,8 +187,9 @@ public class DEditWorld extends DInstanceWorld implements EditWorld {
|
|||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
FileUtil.removeDir(getFolder());
|
FileUtil.removeDir(getFolder());
|
||||||
|
Bukkit.getPluginManager().callEvent(new InstanceWorldPostUnloadEvent(getResource(), name));
|
||||||
}
|
}
|
||||||
}.runTaskLaterAsynchronously(plugin, plugin.getMainConfig().getEditInstanceRemovalDelay() * 20L);
|
}.runTaskLater(plugin, plugin.getMainConfig().getEditInstanceRemovalDelay() * 20L);
|
||||||
}
|
}
|
||||||
|
|
||||||
getResource().editWorld = null;
|
getResource().editWorld = null;
|
||||||
|
@ -29,6 +29,7 @@ import de.erethon.dungeonsxl.api.dungeon.Game;
|
|||||||
import de.erethon.dungeonsxl.api.dungeon.GameRule;
|
import de.erethon.dungeonsxl.api.dungeon.GameRule;
|
||||||
import de.erethon.dungeonsxl.api.dungeon.GameRuleContainer;
|
import de.erethon.dungeonsxl.api.dungeon.GameRuleContainer;
|
||||||
import de.erethon.dungeonsxl.api.event.world.GameWorldStartGameEvent;
|
import de.erethon.dungeonsxl.api.event.world.GameWorldStartGameEvent;
|
||||||
|
import de.erethon.dungeonsxl.api.event.world.InstanceWorldPostUnloadEvent;
|
||||||
import de.erethon.dungeonsxl.api.event.world.InstanceWorldUnloadEvent;
|
import de.erethon.dungeonsxl.api.event.world.InstanceWorldUnloadEvent;
|
||||||
import de.erethon.dungeonsxl.api.mob.DungeonMob;
|
import de.erethon.dungeonsxl.api.mob.DungeonMob;
|
||||||
import de.erethon.dungeonsxl.api.player.PlayerGroup;
|
import de.erethon.dungeonsxl.api.player.PlayerGroup;
|
||||||
@ -474,9 +475,11 @@ public class DGameWorld extends DInstanceWorld implements GameWorld {
|
|||||||
|
|
||||||
kickAllPlayers();
|
kickAllPlayers();
|
||||||
|
|
||||||
|
String name = getWorld().getName();
|
||||||
Bukkit.unloadWorld(getWorld(), /* SPIGOT-5225 */ !Version.isAtLeast(Version.MC1_14_4));
|
Bukkit.unloadWorld(getWorld(), /* SPIGOT-5225 */ !Version.isAtLeast(Version.MC1_14_4));
|
||||||
FileUtil.removeDir(getFolder());
|
FileUtil.removeDir(getFolder());
|
||||||
plugin.getInstanceCache().remove(this);
|
plugin.getInstanceCache().remove(this);
|
||||||
|
Bukkit.getPluginManager().callEvent(new InstanceWorldPostUnloadEvent(getResource(), name));
|
||||||
}
|
}
|
||||||
|
|
||||||
private GameRuleContainer getRules() {
|
private GameRuleContainer getRules() {
|
||||||
|
Loading…
Reference in New Issue
Block a user