PlotSquared/Core/src/main/java/com/plotsquared/core/util/ChunkManager.java

97 lines
4.1 KiB
Java
Raw Normal View History

/*
* _____ _ _ _____ _
* | __ \| | | | / ____| | |
* | |__) | | ___ | |_| (___ __ _ _ _ __ _ _ __ ___ __| |
* | ___/| |/ _ \| __|\___ \ / _` | | | |/ _` | '__/ _ \/ _` |
* | | | | (_) | |_ ____) | (_| | |_| | (_| | | | __/ (_| |
* |_| |_|\___/ \__|_____/ \__, |\__,_|\__,_|_| \___|\__,_|
* | |
* |_|
* PlotSquared plot management system for Minecraft
* Copyright (C) 2021 IntellectualSites
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU 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
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
2020-08-15 14:59:29 +02:00
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
2020-04-15 21:26:54 +02:00
package com.plotsquared.core.util;
2015-02-23 06:29:45 +01:00
2020-04-15 21:26:54 +02:00
import com.plotsquared.core.PlotSquared;
import com.plotsquared.core.location.Location;
import com.plotsquared.core.queue.QueueCoordinator;
import com.plotsquared.core.queue.ScopedQueueCoordinator;
2020-04-30 12:01:52 +02:00
import com.plotsquared.core.util.task.RunnableVal;
2019-11-04 18:44:23 +01:00
import com.sk89q.worldedit.math.BlockVector2;
2018-08-10 17:01:10 +02:00
2019-05-17 21:32:05 +02:00
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ConcurrentHashMap;
2016-03-23 02:41:37 +01:00
2015-09-13 06:04:31 +02:00
public abstract class ChunkManager {
2018-08-10 17:01:10 +02:00
2020-07-24 17:24:53 +02:00
private static final Map<BlockVector2, RunnableVal<ScopedQueueCoordinator>> forceChunks = new ConcurrentHashMap<>();
private static final Map<BlockVector2, RunnableVal<ScopedQueueCoordinator>> addChunks = new ConcurrentHashMap<>();
public static void setChunkInPlotArea(RunnableVal<ScopedQueueCoordinator> force,
2020-07-24 17:24:53 +02:00
RunnableVal<ScopedQueueCoordinator> add,
String world,
BlockVector2 loc) {
QueueCoordinator queue = PlotSquared.platform().globalBlockQueue().getNewQueue(PlotSquared.platform().worldUtil().getWeWorld(world));
2020-07-24 17:24:53 +02:00
if (PlotSquared.get().getPlotAreaManager().isAugmented(world) && PlotSquared.get().isNonStandardGeneration(world, loc)) {
2019-11-04 18:44:23 +01:00
int blockX = loc.getX() << 4;
int blockZ = loc.getZ() << 4;
ScopedQueueCoordinator scoped =
2020-07-24 17:24:53 +02:00
new ScopedQueueCoordinator(queue, Location.at(world, blockX, 0, blockZ), Location.at(world, blockX + 15, 255, blockZ + 15));
2016-02-10 19:59:51 +01:00
if (force != null) {
2016-06-13 06:47:50 +02:00
force.run(scoped);
} else {
2019-11-04 18:44:23 +01:00
scoped.regenChunk(loc.getX(), loc.getZ());
2016-06-13 06:47:50 +02:00
if (add != null) {
add.run(scoped);
}
2016-02-10 19:59:51 +01:00
}
queue.enqueue();
2016-02-10 19:59:51 +01:00
} else {
if (force != null) {
forceChunks.put(loc, force);
}
addChunks.put(loc, add);
2019-11-04 18:44:23 +01:00
queue.regenChunk(loc.getX(), loc.getZ());
forceChunks.remove(loc);
addChunks.remove(loc);
2016-02-10 19:59:51 +01:00
}
}
2018-08-10 17:01:10 +02:00
public static boolean preProcessChunk(BlockVector2 loc, ScopedQueueCoordinator queue) {
final RunnableVal<ScopedQueueCoordinator> forceChunk = forceChunks.get(loc);
if (forceChunk != null) {
forceChunk.run(queue);
forceChunks.remove(loc);
return true;
2016-02-10 19:59:51 +01:00
}
return false;
2016-02-10 19:59:51 +01:00
}
2018-08-10 17:01:10 +02:00
public static boolean postProcessChunk(BlockVector2 loc, ScopedQueueCoordinator queue) {
final RunnableVal<ScopedQueueCoordinator> addChunk = forceChunks.get(loc);
if (addChunk != null) {
addChunk.run(queue);
addChunks.remove(loc);
return true;
2016-02-10 19:59:51 +01:00
}
return false;
2016-02-10 19:59:51 +01:00
}
2020-07-24 17:24:53 +02:00
@Deprecated public abstract CompletableFuture loadChunk(String world, BlockVector2 loc, boolean force);
2016-03-23 02:41:37 +01:00
2015-02-23 06:29:45 +01:00
}