mirror of
https://github.com/IntellectualSites/PlotSquared.git
synced 2024-11-22 13:16:45 +01:00
Extract TaskManager lambdas for better debugging
This commit is contained in:
parent
7fdb7961ce
commit
0d4af3023d
@ -8,9 +8,7 @@ import com.github.intellectualsites.plotsquared.plot.config.Settings;
|
||||
import com.github.intellectualsites.plotsquared.plot.database.DBFunc;
|
||||
import com.github.intellectualsites.plotsquared.plot.events.PlayerAutoPlotEvent;
|
||||
import com.github.intellectualsites.plotsquared.plot.events.PlotAutoMergeEvent;
|
||||
import com.github.intellectualsites.plotsquared.plot.events.PlotMergeEvent;
|
||||
import com.github.intellectualsites.plotsquared.plot.events.Result;
|
||||
import com.github.intellectualsites.plotsquared.plot.object.Direction;
|
||||
import com.github.intellectualsites.plotsquared.plot.object.Expression;
|
||||
import com.github.intellectualsites.plotsquared.plot.object.Plot;
|
||||
import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
|
||||
@ -19,6 +17,7 @@ import com.github.intellectualsites.plotsquared.plot.object.PlotId;
|
||||
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
|
||||
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal;
|
||||
import com.github.intellectualsites.plotsquared.plot.object.TeleportCause;
|
||||
import com.github.intellectualsites.plotsquared.plot.util.AutoClaimFinishTask;
|
||||
import com.github.intellectualsites.plotsquared.plot.util.EconHandler;
|
||||
import com.github.intellectualsites.plotsquared.plot.util.MainUtil;
|
||||
import com.github.intellectualsites.plotsquared.plot.util.Permissions;
|
||||
@ -42,7 +41,7 @@ public class Auto extends SubCommand {
|
||||
return id.getNextId(step);
|
||||
}
|
||||
|
||||
private static boolean checkAllowedPlots(PlotPlayer player, PlotArea plotarea,
|
||||
public static boolean checkAllowedPlots(PlotPlayer player, PlotArea plotarea,
|
||||
@Nullable Integer allowedPlots, int sizeX, int sizeZ) {
|
||||
if (allowedPlots == null) {
|
||||
allowedPlots = player.getAllowedPlots();
|
||||
@ -126,31 +125,7 @@ public class Auto extends SubCommand {
|
||||
player.setMeta(Auto.class.getName(), true);
|
||||
autoClaimFromDatabase(player, area, start, new RunnableVal<Plot>() {
|
||||
@Override public void run(final Plot plot) {
|
||||
TaskManager.IMP.sync(new RunnableVal<Object>() {
|
||||
@Override public void run(Object ignore) {
|
||||
player.deleteMeta(Auto.class.getName());
|
||||
if (plot == null) {
|
||||
MainUtil.sendMessage(player, Captions.NO_FREE_PLOTS);
|
||||
return;
|
||||
}
|
||||
|
||||
if (checkAllowedPlots(player, area, allowedPlots, 1, 1)) {
|
||||
plot.claim(player, true, schematic, false);
|
||||
if (area.isAutoMerge()) {
|
||||
PlotMergeEvent event = PlotSquared.get().getEventDispatcher()
|
||||
.callMerge(plot, Direction.ALL, Integer.MAX_VALUE, player);
|
||||
if (event.getEventResult() == Result.DENY) {
|
||||
sendMessage(player, Captions.EVENT_DENIED, "Auto merge");
|
||||
} else {
|
||||
plot.autoMerge(event.getDir(), event.getMax(), player.getUUID(),
|
||||
true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
DBFunc.delete(plot);
|
||||
}
|
||||
}
|
||||
});
|
||||
TaskManager.IMP.sync(new AutoClaimFinishTask(player, plot, area, allowedPlots, schematic));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -1042,10 +1042,6 @@ public class Plot {
|
||||
if (!isLoaded()) {
|
||||
return;
|
||||
}
|
||||
if (!PlotSquared.get().isMainThread(Thread.currentThread())) {
|
||||
TaskManager.runTask(() -> Plot.this.setSign(name));
|
||||
return;
|
||||
}
|
||||
PlotManager manager = this.area.getPlotManager();
|
||||
if (this.area.allowSigns()) {
|
||||
Location location = manager.getSignLoc(this);
|
||||
@ -1058,9 +1054,7 @@ public class Plot {
|
||||
"%plr%", name),
|
||||
Captions.OWNER_SIGN_LINE_4.formatted().replaceAll("%id%", id).replaceAll(
|
||||
"%plr%", name)};
|
||||
WorldUtil.IMP
|
||||
.setSign(this.getWorldName(), location.getX(), location.getY(), location.getZ(),
|
||||
lines);
|
||||
WorldUtil.IMP.setSign(this.getWorldName(), location.getX(), location.getY(), location.getZ(), lines);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -0,0 +1,50 @@
|
||||
package com.github.intellectualsites.plotsquared.plot.util;
|
||||
|
||||
import com.github.intellectualsites.plotsquared.plot.PlotSquared;
|
||||
import com.github.intellectualsites.plotsquared.plot.commands.Auto;
|
||||
import com.github.intellectualsites.plotsquared.plot.config.Captions;
|
||||
import com.github.intellectualsites.plotsquared.plot.database.DBFunc;
|
||||
import com.github.intellectualsites.plotsquared.plot.events.PlotMergeEvent;
|
||||
import com.github.intellectualsites.plotsquared.plot.events.Result;
|
||||
import com.github.intellectualsites.plotsquared.plot.object.Direction;
|
||||
import com.github.intellectualsites.plotsquared.plot.object.Plot;
|
||||
import com.github.intellectualsites.plotsquared.plot.object.PlotArea;
|
||||
import com.github.intellectualsites.plotsquared.plot.object.PlotPlayer;
|
||||
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import static com.github.intellectualsites.plotsquared.plot.util.MainUtil.sendMessage;
|
||||
|
||||
@RequiredArgsConstructor public final class AutoClaimFinishTask extends RunnableVal<Object> {
|
||||
|
||||
private final PlotPlayer player;
|
||||
private final Plot plot;
|
||||
private final PlotArea area;
|
||||
private final int allowedPlots;
|
||||
private final String schematic;
|
||||
|
||||
@Override public void run(Object value) {
|
||||
player.deleteMeta(Auto.class.getName());
|
||||
if (plot == null) {
|
||||
sendMessage(player, Captions.NO_FREE_PLOTS);
|
||||
return;
|
||||
}
|
||||
|
||||
if (Auto.checkAllowedPlots(player, area, allowedPlots, 1, 1)) {
|
||||
plot.claim(player, true, schematic, false);
|
||||
if (area.isAutoMerge()) {
|
||||
PlotMergeEvent event = PlotSquared.get().getEventDispatcher()
|
||||
.callMerge(plot, Direction.ALL, Integer.MAX_VALUE, player);
|
||||
if (event.getEventResult() == Result.DENY) {
|
||||
sendMessage(player, Captions.EVENT_DENIED, "Auto merge");
|
||||
} else {
|
||||
plot.autoMerge(event.getDir(), event.getMax(), player.getUUID(),
|
||||
true);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
DBFunc.delete(plot);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.github.intellectualsites.plotsquared.plot.util;
|
||||
|
||||
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
@RequiredArgsConstructor public class ObjectTaskRunnable<T> implements Runnable {
|
||||
|
||||
private final Iterator<T> iterator;
|
||||
private final RunnableVal<T> task;
|
||||
private final Runnable whenDone;
|
||||
|
||||
@Override public void run() {
|
||||
long start = System.currentTimeMillis();
|
||||
boolean hasNext;
|
||||
while ((hasNext = iterator.hasNext()) && System.currentTimeMillis() - start < 5) {
|
||||
task.value = iterator.next();
|
||||
task.run();
|
||||
}
|
||||
if (!hasNext) {
|
||||
TaskManager.runTaskLater(whenDone, 1);
|
||||
} else {
|
||||
TaskManager.runTaskLater(this, 1);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
package com.github.intellectualsites.plotsquared.plot.util;
|
||||
|
||||
import com.github.intellectualsites.plotsquared.plot.object.RunnableVal;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
||||
import java.util.concurrent.atomic.AtomicBoolean;
|
||||
|
||||
@RequiredArgsConstructor public class RuntimeExceptionRunnableVal<T> extends RunnableVal<RuntimeException> {
|
||||
|
||||
private final RunnableVal<T> function;
|
||||
private final AtomicBoolean running;
|
||||
|
||||
@Override public void run(RuntimeException value) {
|
||||
try {
|
||||
function.run();
|
||||
} catch (RuntimeException e) {
|
||||
this.value = e;
|
||||
} catch (Throwable neverHappens) {
|
||||
neverHappens.printStackTrace();
|
||||
} finally {
|
||||
running.set(false);
|
||||
}
|
||||
synchronized (function) {
|
||||
function.notifyAll();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
@ -93,21 +93,7 @@ public abstract class TaskManager {
|
||||
public static <T> void objectTask(Collection<T> objects, final RunnableVal<T> task,
|
||||
final Runnable whenDone) {
|
||||
final Iterator<T> iterator = objects.iterator();
|
||||
TaskManager.runTask(new Runnable() {
|
||||
@Override public void run() {
|
||||
long start = System.currentTimeMillis();
|
||||
boolean hasNext;
|
||||
while ((hasNext = iterator.hasNext()) && System.currentTimeMillis() - start < 5) {
|
||||
task.value = iterator.next();
|
||||
task.run();
|
||||
}
|
||||
if (!hasNext) {
|
||||
TaskManager.runTaskLater(whenDone, 1);
|
||||
} else {
|
||||
TaskManager.runTaskLater(this, 1);
|
||||
}
|
||||
}
|
||||
});
|
||||
TaskManager.runTask(new ObjectTaskRunnable<>(iterator, task, whenDone));
|
||||
}
|
||||
|
||||
public <T> T sync(final RunnableVal<T> function) {
|
||||
@ -120,22 +106,7 @@ public abstract class TaskManager {
|
||||
return function.value;
|
||||
}
|
||||
final AtomicBoolean running = new AtomicBoolean(true);
|
||||
RunnableVal<RuntimeException> run = new RunnableVal<RuntimeException>() {
|
||||
@Override public void run(RuntimeException value) {
|
||||
try {
|
||||
function.run();
|
||||
} catch (RuntimeException e) {
|
||||
this.value = e;
|
||||
} catch (Throwable neverHappens) {
|
||||
neverHappens.printStackTrace();
|
||||
} finally {
|
||||
running.set(false);
|
||||
}
|
||||
synchronized (function) {
|
||||
function.notifyAll();
|
||||
}
|
||||
}
|
||||
};
|
||||
final RuntimeExceptionRunnableVal<T> run = new RuntimeExceptionRunnableVal<>(function, running);
|
||||
TaskManager.IMP.task(run);
|
||||
try {
|
||||
synchronized (function) {
|
||||
|
Loading…
Reference in New Issue
Block a user