[BREAKING] Rename the new DisableListener to IDisableListener.

(Plus call in reverse order of registration.)
This commit is contained in:
asofold 2016-06-19 12:15:30 +02:00
parent d4acad924a
commit 92252a9dc4
9 changed files with 65 additions and 57 deletions

View File

@ -40,7 +40,7 @@ import fr.neatmonster.nocheatplus.checks.net.NetData;
import fr.neatmonster.nocheatplus.checks.net.NetDataFactory;
import fr.neatmonster.nocheatplus.compat.versions.ServerVersion;
import fr.neatmonster.nocheatplus.components.NoCheatPlusAPI;
import fr.neatmonster.nocheatplus.components.registry.feature.DisableListener;
import fr.neatmonster.nocheatplus.components.registry.feature.IDisableListener;
import fr.neatmonster.nocheatplus.components.registry.feature.INotifyReload;
import fr.neatmonster.nocheatplus.components.registry.feature.JoinLeaveListener;
import fr.neatmonster.nocheatplus.config.ConfPaths;
@ -52,10 +52,11 @@ import fr.neatmonster.nocheatplus.utilities.StringUtil;
/**
* Quick and dirty ProtocolLib setup.
* @author dev1mc
*
* @author asofold
*
*/
public class ProtocolLibComponent implements DisableListener, INotifyReload, JoinLeaveListener, Listener {
public class ProtocolLibComponent implements IDisableListener, INotifyReload, JoinLeaveListener, Listener {
// TODO: Static reference is problematic (needs a static and accessible Counters instance?).
public static final int idNullPlayer = NCPAPIProvider.getNoCheatPlusAPI().getGenericInstance(Counters.class).registerKey("packet.flying.nullplayer");

View File

@ -20,7 +20,7 @@ import fr.neatmonster.nocheatplus.actions.ParameterName;
import fr.neatmonster.nocheatplus.checks.Check;
import fr.neatmonster.nocheatplus.checks.CheckType;
import fr.neatmonster.nocheatplus.checks.ViolationData;
import fr.neatmonster.nocheatplus.components.registry.feature.DisableListener;
import fr.neatmonster.nocheatplus.components.registry.feature.IDisableListener;
import fr.neatmonster.nocheatplus.utilities.TickTask;
/**
@ -30,7 +30,7 @@ import fr.neatmonster.nocheatplus.utilities.TickTask;
* @author mc_dev
*
*/
public class Improbable extends Check implements DisableListener{
public class Improbable extends Check implements IDisableListener{
private static Improbable instance = null;

View File

@ -20,7 +20,7 @@ import org.bukkit.entity.Player;
import fr.neatmonster.nocheatplus.checks.Check;
import fr.neatmonster.nocheatplus.checks.CheckType;
import fr.neatmonster.nocheatplus.components.registry.feature.DisableListener;
import fr.neatmonster.nocheatplus.components.registry.feature.IDisableListener;
import fr.neatmonster.nocheatplus.utilities.InventoryUtil;
/**
@ -28,7 +28,7 @@ import fr.neatmonster.nocheatplus.utilities.InventoryUtil;
* @author mc_dev
*
*/
public class Open extends Check implements DisableListener{
public class Open extends Check implements IDisableListener{
private static Open instance = null;

View File

@ -16,11 +16,11 @@ package fr.neatmonster.nocheatplus.components;
/**
* @deprecated To be removed, use instead:
* fr.neatmonster.nocheatplus.components.registry.feature.DisableListener
* fr.neatmonster.nocheatplus.components.registry.feature.IDisableListener
* @author asofold
*
*/
@Deprecated
public interface DisableListener extends fr.neatmonster.nocheatplus.components.registry.feature.DisableListener {
public interface DisableListener extends fr.neatmonster.nocheatplus.components.registry.feature.IDisableListener {
}

View File

@ -31,7 +31,7 @@ import fr.neatmonster.nocheatplus.logging.LogManager;
* ComponentRegistry:
* <li>Supported components: Listener, TickListener, PermStateReceiver,
* INotifyReload, INeedConfig, IRemoveData, MCAccessHolder, ConsistencyChecker,
* JoinLeaveListener, DisableListener</li>
* JoinLeaveListener, IDisableListener</li>
* <li>ComponentRegistry instances will be registered as sub registries unless
* you use the addComponent(Object, boolean) method appropriately.</li>
* <li>IHoldSubComponents instances will be registered in the next tick

View File

@ -20,12 +20,13 @@ package fr.neatmonster.nocheatplus.components.registry.feature;
* @author asofold
*
*/
public interface DisableListener {
public interface IDisableListener {
/**
* Called in the plugin in onDisable, before all components get
* unregistered. This is meant for general data cleanup, there may be extra
* registry cleanup stages for data sources and checks later on.
* Called in the plugin in onDisable in reversed order of registration,
* before all components get unregistered. This is meant for general data
* cleanup, there may be extra registry cleanup stages for data sources and
* checks later on.
*/
public void onDisable();

View File

@ -18,36 +18,37 @@ import java.util.Comparator;
/**
* Utilities for sorting out order.
* @author mc_dev
* @author asofold
*
*/
public class Order {
/**
* Comparator for sorting SetupOrder.
*/
public static Comparator<Object> cmpSetupOrder = new Comparator<Object>() {
@Override
public int compare(final Object obj1, final Object obj2) {
int prio1 = 0;
int prio2 = 0;
final SetupOrder order1 = obj1.getClass().getAnnotation(SetupOrder.class);
if (order1 != null) {
prio1 = order1.priority();
}
final SetupOrder order2 = obj2.getClass().getAnnotation(SetupOrder.class);
if (order2 != null) {
prio2 = order2.priority();
}
if (prio1 < prio2) {
return -1;
}
else if (prio1 == prio2){
return 0;
}
else {
return 1;
}
}
};
/**
* Comparator for sorting SetupOrder.
*/
public static Comparator<Object> cmpSetupOrder = new Comparator<Object>() {
@Override
public int compare(final Object obj1, final Object obj2) {
int prio1 = 0;
int prio2 = 0;
final SetupOrder order1 = obj1.getClass().getAnnotation(SetupOrder.class);
if (order1 != null) {
prio1 = order1.priority();
}
final SetupOrder order2 = obj2.getClass().getAnnotation(SetupOrder.class);
if (order2 != null) {
prio2 = order2.priority();
}
if (prio1 < prio2) {
return -1;
}
else if (prio1 == prio2){
return 0;
}
else {
return 1;
}
}
};
}

View File

@ -50,7 +50,7 @@ import fr.neatmonster.nocheatplus.compat.versions.ServerVersion;
import fr.neatmonster.nocheatplus.components.registry.ComponentRegistry;
import fr.neatmonster.nocheatplus.components.registry.feature.ComponentWithName;
import fr.neatmonster.nocheatplus.components.registry.feature.ConsistencyChecker;
import fr.neatmonster.nocheatplus.components.registry.feature.DisableListener;
import fr.neatmonster.nocheatplus.components.registry.feature.IDisableListener;
import fr.neatmonster.nocheatplus.components.registry.feature.ICanHandleTimeRunningBackwards;
import fr.neatmonster.nocheatplus.components.registry.feature.IHaveCheckType;
import fr.neatmonster.nocheatplus.components.registry.feature.INeedConfig;
@ -77,7 +77,7 @@ import fr.neatmonster.nocheatplus.utilities.StringUtil;
*
*/
@SetupOrder(priority = -80)
public class DataManager implements Listener, INotifyReload, INeedConfig, ComponentRegistry<IRemoveData>, ComponentWithName, ConsistencyChecker, DisableListener{
public class DataManager implements Listener, INotifyReload, INeedConfig, ComponentRegistry<IRemoveData>, ComponentWithName, ConsistencyChecker, IDisableListener{
private static DataManager instance = null;

View File

@ -86,7 +86,7 @@ import fr.neatmonster.nocheatplus.components.registry.DefaultGenericInstanceRegi
import fr.neatmonster.nocheatplus.components.registry.event.IGenericInstanceHandle;
import fr.neatmonster.nocheatplus.components.registry.feature.ComponentWithName;
import fr.neatmonster.nocheatplus.components.registry.feature.ConsistencyChecker;
import fr.neatmonster.nocheatplus.components.registry.feature.DisableListener;
import fr.neatmonster.nocheatplus.components.registry.feature.IDisableListener;
import fr.neatmonster.nocheatplus.components.registry.feature.IHoldSubComponents;
import fr.neatmonster.nocheatplus.components.registry.feature.INeedConfig;
import fr.neatmonster.nocheatplus.components.registry.feature.INotifyReload;
@ -215,7 +215,7 @@ public class NoCheatPlus extends JavaPlugin implements NoCheatPlusAPI {
/** Queued sub component holders, emptied on the next tick usually. */
protected final List<IHoldSubComponents> subComponentholders = new ArrayList<IHoldSubComponents>(20);
private final List<DisableListener> disableListeners = new ArrayList<DisableListener>();
private final List<IDisableListener> disableListeners = new ArrayList<IDisableListener>();
/** All registered components. */
protected Set<Object> allComponents = new LinkedHashSet<Object>(50);
@ -521,8 +521,8 @@ public class NoCheatPlus extends JavaPlugin implements NoCheatPlusAPI {
joinLeaveListeners.add((JoinLeaveListener) obj);
added = true;
}
if (obj instanceof DisableListener) {
disableListeners.add((DisableListener) obj);
if (obj instanceof IDisableListener) {
disableListeners.add((IDisableListener) obj);
added = true;
}
@ -613,8 +613,8 @@ public class NoCheatPlus extends JavaPlugin implements NoCheatPlusAPI {
if (obj instanceof JoinLeaveListener) {
joinLeaveListeners.remove((JoinLeaveListener) obj);
}
if (obj instanceof DisableListener) {
disableListeners.remove((DisableListener) obj);
if (obj instanceof IDisableListener) {
disableListeners.remove((IDisableListener) obj);
}
// Remove sub registries.
@ -636,9 +636,9 @@ public class NoCheatPlus extends JavaPlugin implements NoCheatPlusAPI {
* <ul>
* <li>Prevent further registration. For now also disable listeners, though
* this might get shifted still.</li>
* <li><b>Call onDisable for DisableListener instances.</b> This includes
* clearing all data (Needs extensions for sorting by priority for
* DisableListener instances.).</li>
* <li><b>Call onDisable for IDisableListener instances, in reversed
* order of registration.</b> This includes clearing all data (Needs extensions for sorting
* by priority for IDisableListener instances.).</li>
* <li>Random sequence of cleanup calls for other registries and logging
* statistics.</li>
* <li>Call removeComponent for all registered components.</li>
@ -702,15 +702,18 @@ public class NoCheatPlus extends JavaPlugin implements NoCheatPlusAPI {
if (verbose) {
logManager.info(Streams.INIT, "onDisable calls (include DataManager cleanup)...");
}
// TODO: Sorting order + sort now (checks and data cleanup late, data manager last, allow plugins to access stuff before data is reset).
for (final DisableListener dl : disableListeners) {
// TODO: Reliable sorting order + sort now (checks and data cleanup late, data manager last, allow plugins to access stuff before data is reset).
final ArrayList<IDisableListener> disableListeners = new ArrayList<IDisableListener>(this.disableListeners);
Collections.reverse(disableListeners);
for (final IDisableListener dl : disableListeners) {
try {
dl.onDisable();
} catch (Throwable t) {
logManager.severe(Streams.INIT, "DisableListener (" + dl.getClass().getName() + "): " + t.getClass().getSimpleName() + " / " + t.getMessage());
logManager.severe(Streams.INIT, "IDisableListener (" + dl.getClass().getName() + "): " + t.getClass().getSimpleName() + " / " + t.getMessage());
logManager.severe(Streams.INIT, t);
}
}
// (Component removal will clear the list, rather.)
// ExemptionManager cleanup.
if (verbose) {
@ -755,6 +758,8 @@ public class NoCheatPlus extends JavaPlugin implements NoCheatPlusAPI {
if (verbose) {
logManager.info(Streams.INIT, "Cleanup some mappings...");
}
// Remove IDisableListener instances.
disableListeners.clear(); // Just in case.
// Remove listeners.
listeners.clear();
// Remove config listeners.