39 lines
1.3 KiB
Java
39 lines
1.3 KiB
Java
package com.destroystokyo.paper;
|
|
|
|
import com.google.common.base.Preconditions;
|
|
import org.bukkit.craftbukkit.scheduler.CraftTask;
|
|
import com.destroystokyo.paper.event.server.ServerExceptionEvent;
|
|
import com.destroystokyo.paper.exception.ServerSchedulerException;
|
|
|
|
/**
|
|
* Reporting wrapper to catch exceptions not natively
|
|
*/
|
|
public class ServerSchedulerReportingWrapper implements Runnable {
|
|
|
|
private final CraftTask internalTask;
|
|
|
|
public ServerSchedulerReportingWrapper(CraftTask internalTask) {
|
|
this.internalTask = Preconditions.checkNotNull(internalTask, "internalTask");
|
|
}
|
|
|
|
@Override
|
|
public void run() {
|
|
try {
|
|
internalTask.run();
|
|
} catch (RuntimeException e) {
|
|
internalTask.getOwner().getServer().getPluginManager().callEvent(
|
|
new ServerExceptionEvent(new ServerSchedulerException(e, internalTask))
|
|
);
|
|
throw e;
|
|
} catch (Throwable t) {
|
|
internalTask.getOwner().getServer().getPluginManager().callEvent(
|
|
new ServerExceptionEvent(new ServerSchedulerException(t, internalTask))
|
|
); //Do not rethrow, since it is not permitted with Runnable#run
|
|
}
|
|
}
|
|
|
|
public CraftTask getInternalTask() {
|
|
return internalTask;
|
|
}
|
|
}
|