Plex-FAWE/worldedit-bukkit/src/main/java/com/boydti/fawe/bukkit/adapter/BukkitQueueHandler.java

65 lines
2.0 KiB
Java

package com.boydti.fawe.bukkit.adapter;
import co.aikar.timings.Timings;
import com.boydti.fawe.beta.implementation.queue.QueueHandler;
import com.boydti.fawe.bukkit.listener.ChunkListener;
import com.sk89q.worldedit.internal.util.LogManagerCompat;
import org.apache.logging.log4j.Logger;
import org.spigotmc.AsyncCatcher;
import java.lang.reflect.Method;
public class BukkitQueueHandler extends QueueHandler {
private static final Logger LOGGER = LogManagerCompat.getLogger();
private volatile boolean timingsEnabled;
private static boolean alertTimingsChange = true;
private static Method methodCheck;
static {
try {
methodCheck = Class.forName("co.aikar.timings.TimingsManager").getDeclaredMethod("recheckEnabled");
methodCheck.setAccessible(true);
} catch (Throwable ignored) {
}
}
@Override
public void startSet(boolean parallel) {
ChunkListener.physicsFreeze = true;
if (parallel) {
try {
AsyncCatcher.enabled = false;
timingsEnabled = Timings.isTimingsEnabled();
if (timingsEnabled) {
if (alertTimingsChange) {
alertTimingsChange = false;
LOGGER.debug("Having `parallel-threads` > 1 interferes with the timings.");
}
Timings.setTimingsEnabled(false);
methodCheck.invoke(null);
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}
@Override
public void endSet(boolean parallel) {
ChunkListener.physicsFreeze = false;
if (parallel) {
try {
AsyncCatcher.enabled = true;
if (timingsEnabled) {
Timings.setTimingsEnabled(true);
methodCheck.invoke(null);
}
} catch (Throwable e) {
e.printStackTrace();
}
}
}
}