mirror of
https://github.com/PaperMC/Folia.git
synced 2025-08-06 10:41:53 +00:00
4001 lines
238 KiB
Diff
4001 lines
238 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
|
Date: Sun, 20 Apr 1997 05:37:42 -0800
|
|
Subject: [PATCH] Region Threading Base
|
|
|
|
|
|
diff --git a/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java b/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java
|
|
index 69cdd304d255d52c9b7dc9b6a33ffdb630b79abe..c95769a4e64fabd7acdff6c5f6f349107e1cf5c0 100644
|
|
--- a/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java
|
|
+++ b/src/main/java/ca/spottedleaf/moonrise/common/util/TickThread.java
|
|
@@ -1,5 +1,11 @@
|
|
package ca.spottedleaf.moonrise.common.util;
|
|
|
|
+import io.papermc.paper.threadedregions.RegionShutdownThread;
|
|
+import io.papermc.paper.threadedregions.RegionizedServer;
|
|
+import io.papermc.paper.threadedregions.RegionizedWorldData;
|
|
+import io.papermc.paper.threadedregions.ThreadedRegionizer;
|
|
+import io.papermc.paper.threadedregions.TickRegionScheduler;
|
|
+import io.papermc.paper.threadedregions.TickRegions;
|
|
import net.minecraft.core.BlockPos;
|
|
import net.minecraft.world.entity.Entity;
|
|
import net.minecraft.world.level.ChunkPos;
|
|
@@ -15,8 +21,26 @@ public class TickThread extends Thread {
|
|
|
|
private static final Logger LOGGER = LoggerFactory.getLogger(TickThread.class);
|
|
|
|
+ private static String getRegionInfo(final ThreadedRegionizer.ThreadedRegion<TickRegions.TickRegionData, TickRegions.TickRegionSectionData> region) {
|
|
+ if (region == null) {
|
|
+ return "{null}";
|
|
+ }
|
|
+
|
|
+ final ChunkPos center = region.getCenterChunk();
|
|
+ final net.minecraft.server.level.ServerLevel world = region.regioniser.world;
|
|
+
|
|
+ return "{center=" + center + ",world=" + (world == null ? "null" : WorldUtil.getWorldName(world)) + "}";
|
|
+ }
|
|
+
|
|
private static String getThreadContext() {
|
|
- return "thread=" + Thread.currentThread().getName();
|
|
+ final Thread thread = Thread.currentThread();
|
|
+
|
|
+ if (!(thread instanceof TickThread)) {
|
|
+ return "[thread=" + thread + ",class=" + thread.getClass().getName() + "]";
|
|
+ }
|
|
+
|
|
+ return "[thread=" + thread.getName() + ",class=" + thread.getClass().getName() + ",region=" + getRegionInfo(TickRegionScheduler.getCurrentRegion()) + "]";
|
|
+
|
|
}
|
|
|
|
/**
|
|
@@ -123,50 +147,157 @@ public class TickThread extends Thread {
|
|
}
|
|
|
|
public static boolean isShutdownThread() {
|
|
- return false;
|
|
+ return Thread.currentThread().getClass() == RegionShutdownThread.class;
|
|
}
|
|
|
|
public static boolean isTickThreadFor(final Level world, final BlockPos pos) {
|
|
- return isTickThread();
|
|
+ return isTickThreadFor(world, pos.getX() >> 4, pos.getZ() >> 4);
|
|
}
|
|
|
|
public static boolean isTickThreadFor(final Level world, final BlockPos pos, final int blockRadius) {
|
|
- return isTickThread();
|
|
+ return isTickThreadFor(
|
|
+ world,
|
|
+ (pos.getX() - blockRadius) >> 4, (pos.getZ() - blockRadius) >> 4,
|
|
+ (pos.getX() + blockRadius) >> 4, (pos.getZ() + blockRadius) >> 4
|
|
+ );
|
|
}
|
|
|
|
public static boolean isTickThreadFor(final Level world, final ChunkPos pos) {
|
|
- return isTickThread();
|
|
+ return isTickThreadFor(world, pos.x, pos.z);
|
|
}
|
|
|
|
public static boolean isTickThreadFor(final Level world, final Vec3 pos) {
|
|
- return isTickThread();
|
|
+ return isTickThreadFor(world, net.minecraft.util.Mth.floor(pos.x) >> 4, net.minecraft.util.Mth.floor(pos.z) >> 4);
|
|
}
|
|
|
|
public static boolean isTickThreadFor(final Level world, final int chunkX, final int chunkZ) {
|
|
- return isTickThread();
|
|
+ final ThreadedRegionizer.ThreadedRegion<TickRegions.TickRegionData, TickRegions.TickRegionSectionData> region =
|
|
+ TickRegionScheduler.getCurrentRegion();
|
|
+ if (region == null) {
|
|
+ return isShutdownThread();
|
|
+ }
|
|
+ return ((net.minecraft.server.level.ServerLevel)world).regioniser.getRegionAtUnsynchronised(chunkX, chunkZ) == region;
|
|
}
|
|
|
|
public static boolean isTickThreadFor(final Level world, final AABB aabb) {
|
|
- return isTickThread();
|
|
+ return isTickThreadFor(
|
|
+ world,
|
|
+ CoordinateUtils.getChunkCoordinate(aabb.minX), CoordinateUtils.getChunkCoordinate(aabb.minZ),
|
|
+ CoordinateUtils.getChunkCoordinate(aabb.maxX), CoordinateUtils.getChunkCoordinate(aabb.maxZ)
|
|
+ );
|
|
}
|
|
|
|
public static boolean isTickThreadFor(final Level world, final double blockX, final double blockZ) {
|
|
- return isTickThread();
|
|
+ return isTickThreadFor(world, CoordinateUtils.getChunkCoordinate(blockX), CoordinateUtils.getChunkCoordinate(blockZ));
|
|
}
|
|
|
|
public static boolean isTickThreadFor(final Level world, final Vec3 position, final Vec3 deltaMovement, final int buffer) {
|
|
- return isTickThread();
|
|
+ final int fromChunkX = CoordinateUtils.getChunkX(position);
|
|
+ final int fromChunkZ = CoordinateUtils.getChunkZ(position);
|
|
+
|
|
+ final int toChunkX = CoordinateUtils.getChunkCoordinate(position.x + deltaMovement.x);
|
|
+ final int toChunkZ = CoordinateUtils.getChunkCoordinate(position.z + deltaMovement.z);
|
|
+
|
|
+ // expect from < to, but that may not be the case
|
|
+ return isTickThreadFor(
|
|
+ world,
|
|
+ Math.min(fromChunkX, toChunkX) - buffer,
|
|
+ Math.min(fromChunkZ, toChunkZ) - buffer,
|
|
+ Math.max(fromChunkX, toChunkX) + buffer,
|
|
+ Math.max(fromChunkZ, toChunkZ) + buffer
|
|
+ );
|
|
}
|
|
|
|
public static boolean isTickThreadFor(final Level world, final int fromChunkX, final int fromChunkZ, final int toChunkX, final int toChunkZ) {
|
|
- return isTickThread();
|
|
+ final ThreadedRegionizer.ThreadedRegion<TickRegions.TickRegionData, TickRegions.TickRegionSectionData> region =
|
|
+ TickRegionScheduler.getCurrentRegion();
|
|
+ if (region == null) {
|
|
+ return isShutdownThread();
|
|
+ }
|
|
+
|
|
+ final int shift = ((net.minecraft.server.level.ServerLevel)world).regioniser.sectionChunkShift;
|
|
+
|
|
+ final int minSectionX = fromChunkX >> shift;
|
|
+ final int maxSectionX = toChunkX >> shift;
|
|
+ final int minSectionZ = fromChunkZ >> shift;
|
|
+ final int maxSectionZ = toChunkZ >> shift;
|
|
+
|
|
+ for (int secZ = minSectionZ; secZ <= maxSectionZ; ++secZ) {
|
|
+ for (int secX = minSectionX; secX <= maxSectionX; ++secX) {
|
|
+ final int lowerLeftCX = secX << shift;
|
|
+ final int lowerLeftCZ = secZ << shift;
|
|
+ if (((net.minecraft.server.level.ServerLevel)world).regioniser.getRegionAtUnsynchronised(lowerLeftCX, lowerLeftCZ) != region) {
|
|
+ return false;
|
|
+ }
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return true;
|
|
}
|
|
|
|
public static boolean isTickThreadFor(final Level world, final int chunkX, final int chunkZ, final int radius) {
|
|
- return isTickThread();
|
|
+ return isTickThreadFor(world, chunkX - radius, chunkZ - radius, chunkX + radius, chunkZ + radius);
|
|
}
|
|
|
|
public static boolean isTickThreadFor(final Entity entity) {
|
|
- return isTickThread();
|
|
+ if (entity == null) {
|
|
+ return true;
|
|
+ }
|
|
+ final ThreadedRegionizer.ThreadedRegion<TickRegions.TickRegionData, TickRegions.TickRegionSectionData> region =
|
|
+ TickRegionScheduler.getCurrentRegion();
|
|
+ if (region == null) {
|
|
+ if (RegionizedServer.isGlobalTickThread()) {
|
|
+ if (entity instanceof net.minecraft.server.level.ServerPlayer serverPlayer) {
|
|
+ final net.minecraft.server.network.ServerGamePacketListenerImpl possibleBad = serverPlayer.connection;
|
|
+ if (possibleBad == null) {
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ final net.minecraft.network.PacketListener packetListener = possibleBad.connection.getPacketListener();
|
|
+ if (packetListener instanceof net.minecraft.server.network.ServerGamePacketListenerImpl gamePacketListener) {
|
|
+ return gamePacketListener.waitingForSwitchToConfig;
|
|
+ }
|
|
+ if (packetListener instanceof net.minecraft.server.network.ServerConfigurationPacketListenerImpl configurationPacketListener) {
|
|
+ return !configurationPacketListener.switchToMain;
|
|
+ }
|
|
+ return true;
|
|
+ } else {
|
|
+ return false;
|
|
+ }
|
|
+ }
|
|
+ if (isShutdownThread()) {
|
|
+ return true;
|
|
+ }
|
|
+ if (entity instanceof net.minecraft.server.level.ServerPlayer serverPlayer) {
|
|
+ // off-main access to server player is never ok, server player is owned by one of global context or region context always
|
|
+ return false;
|
|
+ }
|
|
+ // only own entities that have not yet been added to the world
|
|
+
|
|
+ // if the entity is removed, then it was in the world previously - which means that a region containing its location
|
|
+ // owns it
|
|
+ // if the entity has a callback, then it is contained in a world
|
|
+ return entity.hasNullCallback() && !entity.isRemoved();
|
|
+ }
|
|
+
|
|
+ final Level world = entity.level();
|
|
+ if (world != region.regioniser.world) {
|
|
+ // world mismatch
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ final RegionizedWorldData worldData = io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentRegionizedWorldData();
|
|
+
|
|
+ // pass through the check if the entity is removed and we own its chunk
|
|
+ if (worldData.hasEntity(entity)) {
|
|
+ return true;
|
|
+ }
|
|
+
|
|
+ if (entity instanceof net.minecraft.server.level.ServerPlayer serverPlayer) {
|
|
+ net.minecraft.server.network.ServerGamePacketListenerImpl conn = serverPlayer.connection;
|
|
+ return conn != null && worldData.connections.contains(conn.connection);
|
|
+ } else {
|
|
+ return ((entity.hasNullCallback() || entity.isRemoved())) && isTickThreadFor((net.minecraft.server.level.ServerLevel)world, entity.chunkPosition());
|
|
+ }
|
|
}
|
|
}
|
|
diff --git a/src/main/java/io/papermc/paper/SparksFly.java b/src/main/java/io/papermc/paper/SparksFly.java
|
|
index 62e2d5704c348955bc8284dc2d54c933b7bcdd06..b332645ed65928100f580221d8a9948bc77e362e 100644
|
|
--- a/src/main/java/io/papermc/paper/SparksFly.java
|
|
+++ b/src/main/java/io/papermc/paper/SparksFly.java
|
|
@@ -33,13 +33,13 @@ public final class SparksFly {
|
|
|
|
private final Logger logger;
|
|
private final PaperSparkModule spark;
|
|
- private final ConcurrentLinkedQueue<Runnable> mainThreadTaskQueue;
|
|
+ // Folia - region threading
|
|
|
|
private boolean enabled;
|
|
private boolean disabledInConfigurationWarningLogged;
|
|
|
|
public SparksFly(final Server server) {
|
|
- this.mainThreadTaskQueue = new ConcurrentLinkedQueue<>();
|
|
+ // Folia - region threading
|
|
this.logger = Logger.getLogger(ID);
|
|
this.logger.log(Level.INFO, "This server bundles the spark profiler. For more information please visit https://docs.papermc.io/paper/profiling");
|
|
this.spark = PaperSparkModule.create(Compatibility.VERSION_1_0, server, this.logger, new PaperScheduler() {
|
|
@@ -50,7 +50,7 @@ public final class SparksFly {
|
|
|
|
@Override
|
|
public void executeSync(final Runnable runnable) {
|
|
- SparksFly.this.mainThreadTaskQueue.offer(this.catching(runnable, "synchronous"));
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(this.catching(runnable, "synchronous")); // Folia - region threading
|
|
}
|
|
|
|
private Runnable catching(final Runnable runnable, final String type) {
|
|
@@ -88,10 +88,7 @@ public final class SparksFly {
|
|
}
|
|
|
|
public void executeMainThreadTasks() {
|
|
- Runnable task;
|
|
- while ((task = this.mainThreadTaskQueue.poll()) != null) {
|
|
- task.run();
|
|
- }
|
|
+ throw new UnsupportedOperationException(); // Folia - region threading
|
|
}
|
|
|
|
public void enableEarlyIfRequested() {
|
|
@@ -119,7 +116,7 @@ public final class SparksFly {
|
|
|
|
private void enable() {
|
|
if (!this.enabled) {
|
|
- if (GlobalConfiguration.get().spark.enabled) {
|
|
+ if (false) { // Folia - disable in-built spark profiler
|
|
this.enabled = true;
|
|
this.spark.enable();
|
|
} else {
|
|
@@ -171,7 +168,7 @@ public final class SparksFly {
|
|
}
|
|
|
|
public static boolean isPluginPreferred() {
|
|
- return Boolean.getBoolean(PREFER_SPARK_PLUGIN_PROPERTY);
|
|
+ return true; // Folia - disable in-built spark profiler
|
|
}
|
|
|
|
private static boolean isPluginEnabled(final Server server) {
|
|
diff --git a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java
|
|
index f6266b3ca9c031ef9e96df23e0413c7db5211bd8..388bad4fb53bb4046e7f616557e933339821a0a3 100644
|
|
--- a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java
|
|
+++ b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java
|
|
@@ -83,7 +83,7 @@ public final class ChatProcessor {
|
|
final CraftPlayer player = this.player.getBukkitEntity();
|
|
final AsyncPlayerChatEvent asyncChatEvent = new AsyncPlayerChatEvent(this.async, player, this.craftbukkit$originalMessage, new LazyPlayerSet(this.server));
|
|
this.post(asyncChatEvent);
|
|
- if (listenersOnSyncEvent) {
|
|
+ if (false && listenersOnSyncEvent) { // Folia - region threading
|
|
final PlayerChatEvent chatEvent = new PlayerChatEvent(player, asyncChatEvent.getMessage(), asyncChatEvent.getFormat(), asyncChatEvent.getRecipients());
|
|
chatEvent.setCancelled(asyncChatEvent.isCancelled()); // propagate cancelled state
|
|
this.queueIfAsyncOrRunImmediately(new Waitable<>() {
|
|
@@ -150,7 +150,7 @@ public final class ChatProcessor {
|
|
ae.setCancelled(cancelled); // propagate cancelled state
|
|
this.post(ae);
|
|
final boolean listenersOnSyncEvent = canYouHearMe(ChatEvent.getHandlerList());
|
|
- if (listenersOnSyncEvent) {
|
|
+ if (false && listenersOnSyncEvent) { // Folia - region threading
|
|
this.queueIfAsyncOrRunImmediately(new Waitable<>() {
|
|
@Override
|
|
protected Void evaluate() {
|
|
diff --git a/src/main/java/io/papermc/paper/adventure/providers/ClickCallbackProviderImpl.java b/src/main/java/io/papermc/paper/adventure/providers/ClickCallbackProviderImpl.java
|
|
index 23432eea862c6df716d7726a32da3a0612a3fb77..f59e8bb72c5233f26a8a0d506ac64bb37fef97a5 100644
|
|
--- a/src/main/java/io/papermc/paper/adventure/providers/ClickCallbackProviderImpl.java
|
|
+++ b/src/main/java/io/papermc/paper/adventure/providers/ClickCallbackProviderImpl.java
|
|
@@ -23,35 +23,42 @@ public class ClickCallbackProviderImpl implements ClickCallback.Provider {
|
|
|
|
public static final class CallbackManager {
|
|
|
|
- private final Map<UUID, StoredCallback> callbacks = new HashMap<>();
|
|
- private final Queue<StoredCallback> queue = new ConcurrentLinkedQueue<>();
|
|
+ private final java.util.concurrent.ConcurrentHashMap<UUID, StoredCallback> callbacks = new java.util.concurrent.ConcurrentHashMap<>(); // Folia - region threading
|
|
+ // Folia - region threading
|
|
|
|
private CallbackManager() {
|
|
}
|
|
|
|
public UUID addCallback(final @NotNull ClickCallback<Audience> callback, final ClickCallback.@NotNull Options options) {
|
|
final UUID id = UUID.randomUUID();
|
|
- this.queue.add(new StoredCallback(callback, options, id));
|
|
+ final StoredCallback scb = new StoredCallback(callback, options, id); // Folia - region threading
|
|
+ this.callbacks.put(scb.id(), scb); // Folia - region threading
|
|
return id;
|
|
}
|
|
|
|
public void handleQueue(final int currentTick) {
|
|
// Evict expired entries
|
|
if (currentTick % 100 == 0) {
|
|
- this.callbacks.values().removeIf(callback -> !callback.valid());
|
|
+ this.callbacks.values().removeIf(StoredCallback::expired); // Folia - region threading - don't read uses field
|
|
}
|
|
|
|
- // Add entries from queue
|
|
- StoredCallback callback;
|
|
- while ((callback = this.queue.poll()) != null) {
|
|
- this.callbacks.put(callback.id(), callback);
|
|
- }
|
|
+ // Folia - region threading
|
|
}
|
|
|
|
public void runCallback(final @NotNull Audience audience, final UUID id) {
|
|
- final StoredCallback callback = this.callbacks.get(id);
|
|
- if (callback != null && callback.valid()) { //TODO Message if expired/invalid?
|
|
- callback.takeUse();
|
|
+ // Folia start - region threading
|
|
+ final StoredCallback[] use = new StoredCallback[1];
|
|
+ this.callbacks.computeIfPresent(id, (final UUID keyInMap, final StoredCallback value) -> {
|
|
+ if (!value.valid()) {
|
|
+ return null;
|
|
+ }
|
|
+ use[0] = value;
|
|
+ value.takeUse();
|
|
+ return value.valid() ? value : null;
|
|
+ });
|
|
+ final StoredCallback callback = use[0];
|
|
+ if (callback != null) { //TODO Message if expired/invalid?
|
|
+ // Folia end - region threading
|
|
callback.callback.accept(audience);
|
|
}
|
|
}
|
|
diff --git a/src/main/java/io/papermc/paper/command/PaperCommands.java b/src/main/java/io/papermc/paper/command/PaperCommands.java
|
|
index f3f466ee58a2d90dcdbdf2b44f77bfb012ddd293..2c88740df6b9f20464fb89dccc169a96a7943936 100644
|
|
--- a/src/main/java/io/papermc/paper/command/PaperCommands.java
|
|
+++ b/src/main/java/io/papermc/paper/command/PaperCommands.java
|
|
@@ -25,6 +25,7 @@ public final class PaperCommands {
|
|
COMMANDS.put("paper", new PaperCommand("paper"));
|
|
COMMANDS.put("callback", new CallbackCommand("callback"));
|
|
COMMANDS.put("mspt", new MSPTCommand("mspt"));
|
|
+ COMMANDS.put("tps", new io.papermc.paper.threadedregions.commands.CommandServerHealth()); // Folia - region threading
|
|
|
|
COMMANDS.forEach((s, command) -> {
|
|
server.server.getCommandMap().register(s, "Paper", command);
|
|
diff --git a/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java
|
|
index bbd29bcca94a81ad2603afa9ddcb160e925b405e..6284384299000480e9d5c0b62e8d88b2c922e776 100644
|
|
--- a/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java
|
|
+++ b/src/main/java/io/papermc/paper/command/subcommands/EntityCommand.java
|
|
@@ -129,7 +129,7 @@ public final class EntityCommand implements PaperSubcommand {
|
|
final int z = (e.getKey().z << 4) + 8;
|
|
final Component message = text(" " + e.getValue() + ": " + e.getKey().x + ", " + e.getKey().z + (chunkProviderServer.isPositionTicking(e.getKey().toLong()) ? " (Ticking)" : " (Non-Ticking)"))
|
|
.hoverEvent(HoverEvent.showText(text("Click to teleport to chunk", GREEN)))
|
|
- .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/minecraft:execute as @s in " + world.getWorld().getKey() + " run tp " + x + " " + (world.getWorld().getHighestBlockYAt(x, z, HeightMap.MOTION_BLOCKING) + 1) + " " + z));
|
|
+ .clickEvent(ClickEvent.clickEvent(ClickEvent.Action.RUN_COMMAND, "/minecraft:execute as @s in " + world.getWorld().getKey() + " run tp " + x + " " + (128) + " " + z)); // Folia - region threading - avoid sync load here
|
|
sender.sendMessage(message);
|
|
});
|
|
} else {
|
|
diff --git a/src/main/java/io/papermc/paper/command/subcommands/HeapDumpCommand.java b/src/main/java/io/papermc/paper/command/subcommands/HeapDumpCommand.java
|
|
index cd2e4d792e972b8bf1e07b8961594a670ae949cf..3ab8dbf2768a4ef8fb53af6f5431f7f6afe6d168 100644
|
|
--- a/src/main/java/io/papermc/paper/command/subcommands/HeapDumpCommand.java
|
|
+++ b/src/main/java/io/papermc/paper/command/subcommands/HeapDumpCommand.java
|
|
@@ -18,7 +18,9 @@ import static net.kyori.adventure.text.format.NamedTextColor.YELLOW;
|
|
public final class HeapDumpCommand implements PaperSubcommand {
|
|
@Override
|
|
public boolean execute(final CommandSender sender, final String subCommand, final String[] args) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> { // Folia - region threading
|
|
this.dumpHeap(sender);
|
|
+ }); // Folia - region threading
|
|
return true;
|
|
}
|
|
|
|
diff --git a/src/main/java/io/papermc/paper/command/subcommands/ReloadCommand.java b/src/main/java/io/papermc/paper/command/subcommands/ReloadCommand.java
|
|
index bd68139ae635f2ad7ec8e7a21e0056a139c4c62e..48a43341b17247355a531164019d5cc9c5555f26 100644
|
|
--- a/src/main/java/io/papermc/paper/command/subcommands/ReloadCommand.java
|
|
+++ b/src/main/java/io/papermc/paper/command/subcommands/ReloadCommand.java
|
|
@@ -16,7 +16,9 @@ import static net.kyori.adventure.text.format.NamedTextColor.RED;
|
|
public final class ReloadCommand implements PaperSubcommand {
|
|
@Override
|
|
public boolean execute(final CommandSender sender, final String subCommand, final String[] args) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> { // Folia - region threading
|
|
this.doReload(sender);
|
|
+ }); // Folia - region threading
|
|
return true;
|
|
}
|
|
|
|
diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
|
index c2b53adb5f0fd8207cf13cb6f7249385b1c30f34..3b99884a92a886b75a6502851d86704b919bf02a 100644
|
|
--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
|
+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
|
@@ -404,4 +404,17 @@ public class GlobalConfiguration extends ConfigurationPart {
|
|
}
|
|
}
|
|
}
|
|
+ // Folia start - threaded regions
|
|
+ public ThreadedRegions threadedRegions;
|
|
+ public class ThreadedRegions extends ConfigurationPart {
|
|
+
|
|
+ public int threads = -1;
|
|
+ public int gridExponent = 4;
|
|
+
|
|
+ @PostProcess
|
|
+ public void postProcess() {
|
|
+ io.papermc.paper.threadedregions.TickRegions.init(this);
|
|
+ }
|
|
+ }
|
|
+ // Folia end - threaded regions
|
|
}
|
|
diff --git a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java
|
|
index 9511f978f6c7da506f67928f5a5a92ecf28e5930..7dced6d3d63aa9d96caa5bcab59f6e03dc4d2703 100644
|
|
--- a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java
|
|
+++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java
|
|
@@ -497,6 +497,14 @@ public class WorldConfiguration extends ConfigurationPart {
|
|
public Chunks chunks;
|
|
|
|
public class Chunks extends ConfigurationPart {
|
|
+
|
|
+ // Folia start - region threading - force prevent moving into unloaded chunks
|
|
+ @PostProcess
|
|
+ public void postProcess() {
|
|
+ this.preventMovingIntoUnloadedChunks = true;
|
|
+ }
|
|
+ // Folia end - region threading - force prevent moving into unloaded chunks
|
|
+
|
|
public AutosavePeriod autoSaveInterval = AutosavePeriod.def();
|
|
public int maxAutoSaveChunksPerTick = 24;
|
|
public int fixedChunkInhabitedTime = -1;
|
|
diff --git a/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java b/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java
|
|
index 04c8213ae6f38902e88f8dcdc77ad70dbcd36afa..b663b38529f25756cc6f8130e2e4e02fe36caa21 100644
|
|
--- a/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java
|
|
+++ b/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java
|
|
@@ -13,6 +13,7 @@ public class PaperSchoolableFish extends CraftFish implements SchoolableFish {
|
|
|
|
@Override
|
|
public AbstractSchoolingFish getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (AbstractSchoolingFish) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/io/papermc/paper/entity/activation/ActivationType.java b/src/main/java/io/papermc/paper/entity/activation/ActivationType.java
|
|
index bed83c5897ff2ca52e97738832bd4cc08e36d762..5f8e59377bfe34f5abc9172ae24327dab3531e0a 100644
|
|
--- a/src/main/java/io/papermc/paper/entity/activation/ActivationType.java
|
|
+++ b/src/main/java/io/papermc/paper/entity/activation/ActivationType.java
|
|
@@ -20,7 +20,7 @@ public enum ActivationType {
|
|
RAIDER,
|
|
MISC;
|
|
|
|
- AABB boundingBox = new AABB(0, 0, 0, 0, 0, 0);
|
|
+ //AABB boundingBox = new AABB(0, 0, 0, 0, 0, 0); // Folia - threaded regions - replaced by local variable
|
|
|
|
/**
|
|
* Returns the activation type for the given entity.
|
|
diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperPermissionManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperPermissionManager.java
|
|
index afe793c35f05a80058e80bcaee76ac45a40b04a2..9ddbb2d72e11c6abbbdb866f3010f276efceda41 100644
|
|
--- a/src/main/java/io/papermc/paper/plugin/manager/PaperPermissionManager.java
|
|
+++ b/src/main/java/io/papermc/paper/plugin/manager/PaperPermissionManager.java
|
|
@@ -32,7 +32,9 @@ abstract class PaperPermissionManager implements PermissionManager {
|
|
@Override
|
|
@Nullable
|
|
public Permission getPermission(@NotNull String name) {
|
|
+ synchronized (this) { // Folia - synchronized
|
|
return this.permissions().get(name.toLowerCase(java.util.Locale.ENGLISH));
|
|
+ } // Folia - synchronized
|
|
}
|
|
|
|
@Override
|
|
@@ -52,12 +54,24 @@ abstract class PaperPermissionManager implements PermissionManager {
|
|
private void addPermission(@NotNull Permission perm, boolean dirty) {
|
|
String name = perm.getName().toLowerCase(java.util.Locale.ENGLISH);
|
|
|
|
+ Boolean recalc; // Folia - synchronized
|
|
+ synchronized (this) { // Folia - synchronized
|
|
if (this.permissions().containsKey(name)) {
|
|
throw new IllegalArgumentException("The permission " + name + " is already defined!");
|
|
}
|
|
|
|
this.permissions().put(name, perm);
|
|
- this.calculatePermissionDefault(perm, dirty);
|
|
+ recalc = this.calculatePermissionDefault(perm, dirty);
|
|
+ } // Folia - synchronized
|
|
+ // Folia start - synchronize this class - we hold a lock now, prevent deadlock by moving this out
|
|
+ if (recalc != null) {
|
|
+ if (recalc.booleanValue()) {
|
|
+ this.dirtyPermissibles(true);
|
|
+ } else {
|
|
+ this.dirtyPermissibles(false);
|
|
+ }
|
|
+ }
|
|
+ // Folia end - synchronize this class - we hold a lock now, prevent deadlock by moving this out
|
|
}
|
|
|
|
@Override
|
|
@@ -80,42 +94,58 @@ abstract class PaperPermissionManager implements PermissionManager {
|
|
|
|
@Override
|
|
public void recalculatePermissionDefaults(@NotNull Permission perm) {
|
|
+ Boolean recalc = null; // Folia - synchronized
|
|
+ synchronized (this) { // Folia - synchronized
|
|
// we need a null check here because some plugins for some unknown reason pass null into this?
|
|
if (perm != null && this.permissions().containsKey(perm.getName().toLowerCase(Locale.ROOT))) {
|
|
this.defaultPerms().get(true).remove(perm);
|
|
this.defaultPerms().get(false).remove(perm);
|
|
|
|
- this.calculatePermissionDefault(perm, true);
|
|
+ recalc = this.calculatePermissionDefault(perm, true); // Folia - synchronized
|
|
+ }
|
|
+ } // Folia - synchronized
|
|
+ // Folia start - synchronize this class - we hold a lock now, prevent deadlock by moving this out
|
|
+ if (recalc != null) {
|
|
+ if (recalc.booleanValue()) {
|
|
+ this.dirtyPermissibles(true);
|
|
+ } else {
|
|
+ this.dirtyPermissibles(false);
|
|
+ }
|
|
}
|
|
+ // Folia end - synchronize this class - we hold a lock now, prevent deadlock by moving this out
|
|
}
|
|
|
|
- private void calculatePermissionDefault(@NotNull Permission perm, boolean dirty) {
|
|
+ private Boolean calculatePermissionDefault(@NotNull Permission perm, boolean dirty) { // Folia - synchronize this class
|
|
if ((perm.getDefault() == PermissionDefault.OP) || (perm.getDefault() == PermissionDefault.TRUE)) {
|
|
this.defaultPerms().get(true).add(perm);
|
|
if (dirty) {
|
|
- this.dirtyPermissibles(true);
|
|
+ return Boolean.TRUE; // Folia - synchronize this class - we hold a lock now, prevent deadlock by moving this out
|
|
}
|
|
}
|
|
if ((perm.getDefault() == PermissionDefault.NOT_OP) || (perm.getDefault() == PermissionDefault.TRUE)) {
|
|
this.defaultPerms().get(false).add(perm);
|
|
if (dirty) {
|
|
- this.dirtyPermissibles(false);
|
|
+ return Boolean.FALSE; // Folia - synchronize this class - we hold a lock now, prevent deadlock by moving this out
|
|
}
|
|
}
|
|
+ return null; // Folia - synchronize this class
|
|
}
|
|
|
|
|
|
@Override
|
|
public void subscribeToPermission(@NotNull String permission, @NotNull Permissible permissible) {
|
|
+ synchronized (this) { // Folia - synchronized
|
|
String name = permission.toLowerCase(java.util.Locale.ENGLISH);
|
|
Map<Permissible, Boolean> map = this.permSubs().computeIfAbsent(name, k -> new WeakHashMap<>());
|
|
|
|
map.put(permissible, true);
|
|
+ } // Folia - synchronized
|
|
}
|
|
|
|
@Override
|
|
public void unsubscribeFromPermission(@NotNull String permission, @NotNull Permissible permissible) {
|
|
String name = permission.toLowerCase(java.util.Locale.ENGLISH);
|
|
+ synchronized (this) { // Folia - synchronized
|
|
Map<Permissible, Boolean> map = this.permSubs().get(name);
|
|
|
|
if (map != null) {
|
|
@@ -125,11 +155,13 @@ abstract class PaperPermissionManager implements PermissionManager {
|
|
this.permSubs().remove(name);
|
|
}
|
|
}
|
|
+ } // Folia - synchronized
|
|
}
|
|
|
|
@Override
|
|
@NotNull
|
|
public Set<Permissible> getPermissionSubscriptions(@NotNull String permission) {
|
|
+ synchronized (this) { // Folia - synchronized
|
|
String name = permission.toLowerCase(java.util.Locale.ENGLISH);
|
|
Map<Permissible, Boolean> map = this.permSubs().get(name);
|
|
|
|
@@ -138,17 +170,21 @@ abstract class PaperPermissionManager implements PermissionManager {
|
|
} else {
|
|
return ImmutableSet.copyOf(map.keySet());
|
|
}
|
|
+ } // Folia - synchronized
|
|
}
|
|
|
|
@Override
|
|
public void subscribeToDefaultPerms(boolean op, @NotNull Permissible permissible) {
|
|
+ synchronized (this) { // Folia - synchronized
|
|
Map<Permissible, Boolean> map = this.defSubs().computeIfAbsent(op, k -> new WeakHashMap<>());
|
|
|
|
map.put(permissible, true);
|
|
+ } // Folia - synchronized
|
|
}
|
|
|
|
@Override
|
|
public void unsubscribeFromDefaultPerms(boolean op, @NotNull Permissible permissible) {
|
|
+ synchronized (this) { // Folia - synchronized
|
|
Map<Permissible, Boolean> map = this.defSubs().get(op);
|
|
|
|
if (map != null) {
|
|
@@ -158,11 +194,13 @@ abstract class PaperPermissionManager implements PermissionManager {
|
|
this.defSubs().remove(op);
|
|
}
|
|
}
|
|
+ } // Folia - synchronized
|
|
}
|
|
|
|
@Override
|
|
@NotNull
|
|
public Set<Permissible> getDefaultPermSubscriptions(boolean op) {
|
|
+ synchronized (this) { // Folia - synchronized
|
|
Map<Permissible, Boolean> map = this.defSubs().get(op);
|
|
|
|
if (map == null) {
|
|
@@ -170,19 +208,24 @@ abstract class PaperPermissionManager implements PermissionManager {
|
|
} else {
|
|
return ImmutableSet.copyOf(map.keySet());
|
|
}
|
|
+ } // Folia - synchronized
|
|
}
|
|
|
|
@Override
|
|
@NotNull
|
|
public Set<Permission> getPermissions() {
|
|
+ synchronized (this) { // Folia - synchronized
|
|
return new HashSet<>(this.permissions().values());
|
|
+ } // Folia - synchronized
|
|
}
|
|
|
|
@Override
|
|
public void clearPermissions() {
|
|
+ synchronized (this) { // Folia - synchronized
|
|
this.permissions().clear();
|
|
this.defaultPerms().get(true).clear();
|
|
this.defaultPerms().get(false).clear();
|
|
+ } // Folia - synchronized
|
|
}
|
|
|
|
|
|
diff --git a/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java b/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java
|
|
index 3e82ea07ca4194844c5528446e2c4a46ff4acee5..adfd4c16809f6ddd9cc73e4bd845d7aed4925068 100644
|
|
--- a/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java
|
|
+++ b/src/main/java/io/papermc/paper/plugin/manager/PaperPluginInstanceManager.java
|
|
@@ -256,12 +256,7 @@ class PaperPluginInstanceManager {
|
|
+ pluginName + " (Is it up to date?)", ex, plugin); // Paper
|
|
}
|
|
|
|
- try {
|
|
- this.server.getScheduler().cancelTasks(plugin);
|
|
- } catch (Throwable ex) {
|
|
- this.handlePluginException("Error occurred (in the plugin loader) while cancelling tasks for "
|
|
- + pluginName + " (Is it up to date?)", ex, plugin); // Paper
|
|
- }
|
|
+ // Folia - region threading
|
|
|
|
// Paper start - Folia schedulers
|
|
try {
|
|
diff --git a/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java b/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java
|
|
index d3b3a8baca013909fa9c6204d964d7d7efeb2719..fb7c6621e2805f4339c255f6c2e02c55ff4c502e 100644
|
|
--- a/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java
|
|
+++ b/src/main/java/io/papermc/paper/plugin/provider/configuration/PaperPluginMeta.java
|
|
@@ -64,6 +64,7 @@ public class PaperPluginMeta implements PluginMeta {
|
|
private PermissionConfiguration permissionConfiguration = new PermissionConfiguration(PermissionDefault.OP, List.of());
|
|
@Required
|
|
private ApiVersion apiVersion;
|
|
+ private boolean foliaSupported = false; // Folia
|
|
|
|
private Map<PluginDependencyLifeCycle, Map<String, DependencyConfiguration>> dependencies = new EnumMap<>(PluginDependencyLifeCycle.class);
|
|
|
|
@@ -251,6 +252,13 @@ public class PaperPluginMeta implements PluginMeta {
|
|
return this.apiVersion.getVersionString();
|
|
}
|
|
|
|
+ // Folia start
|
|
+ @Override
|
|
+ public boolean isFoliaSupported() {
|
|
+ return this.foliaSupported;
|
|
+ }
|
|
+ // Folia end
|
|
+
|
|
@Override
|
|
public @NotNull List<String> getProvidedPlugins() {
|
|
return this.provides;
|
|
diff --git a/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java b/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java
|
|
index 0a27b468560ccf4b9588cd12d50c02e442f3024f..6369b13e1fcdbdb25dd9d6e4d3bffdedbee4f739 100644
|
|
--- a/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java
|
|
+++ b/src/main/java/io/papermc/paper/plugin/provider/type/paper/PaperPluginProviderFactory.java
|
|
@@ -24,6 +24,11 @@ class PaperPluginProviderFactory implements PluginTypeFactory<PaperPluginParent,
|
|
|
|
@Override
|
|
public PaperPluginParent build(JarFile file, PaperPluginMeta configuration, Path source) {
|
|
+ // Folia start - block plugins not marked as supported
|
|
+ if (!configuration.isFoliaSupported()) {
|
|
+ throw new RuntimeException("Could not load plugin '" + configuration.getDisplayName() + "' as it is not marked as supporting Folia!");
|
|
+ }
|
|
+ // Folia end - block plugins not marked as supported
|
|
Logger jul = PaperPluginLogger.getLogger(configuration);
|
|
ComponentLogger logger = ComponentLogger.logger(jul.getName());
|
|
PluginProviderContext context = PluginProviderContextImpl.create(configuration, logger, source);
|
|
diff --git a/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProviderFactory.java b/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProviderFactory.java
|
|
index 9edf79dffd2836b40d41da4437c18d6145853f89..335058589eeba934105bea31a0c3aea2293a5597 100644
|
|
--- a/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProviderFactory.java
|
|
+++ b/src/main/java/io/papermc/paper/plugin/provider/type/spigot/SpigotPluginProviderFactory.java
|
|
@@ -35,6 +35,11 @@ class SpigotPluginProviderFactory implements PluginTypeFactory<SpigotPluginProvi
|
|
|
|
@Override
|
|
public SpigotPluginProvider build(JarFile file, PluginDescriptionFile configuration, Path source) throws InvalidDescriptionException {
|
|
+ // Folia start - block plugins not marked as supported
|
|
+ if (!configuration.isFoliaSupported()) {
|
|
+ throw new RuntimeException("Could not load plugin '" + configuration.getDisplayName() + "' as it is not marked as supporting Folia!");
|
|
+ }
|
|
+ // Folia end - block plugins not marked as supported
|
|
// Copied from SimplePluginManager#loadPlugins
|
|
// Spigot doesn't validate the name when the config is created, and instead when the plugin is loaded.
|
|
// Paper plugin configuration will do these checks in config serializer instead of when this is created.
|
|
@@ -81,4 +86,3 @@ class SpigotPluginProviderFactory implements PluginTypeFactory<SpigotPluginProvi
|
|
return descriptionFile;
|
|
}
|
|
}
|
|
-
|
|
diff --git a/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java b/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java
|
|
index c03608fec96b51e1867f43d8f42e5aefb1520e46..127d96280cad2d4e5db574a089d67ad68977b34e 100644
|
|
--- a/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java
|
|
+++ b/src/main/java/io/papermc/paper/threadedregions/EntityScheduler.java
|
|
@@ -50,6 +50,14 @@ public final class EntityScheduler {
|
|
this.entity = Validate.notNull(entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ public boolean isRetired() {
|
|
+ synchronized (this.stateLock) {
|
|
+ return this.tickCount == RETIRED_TICK_COUNT;
|
|
+ }
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
/**
|
|
* Retires the scheduler, preventing new tasks from being scheduled and invoking the retired callback
|
|
* on all currently scheduled tasks.
|
|
diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java
|
|
index 8492a06883e2ff597bbbdaa74fe5e5cdd0a0a1b1..ff6d200c3c3ecb958086f11dff39357dc0bf70fc 100644
|
|
--- a/src/main/java/io/papermc/paper/util/MCUtil.java
|
|
+++ b/src/main/java/io/papermc/paper/util/MCUtil.java
|
|
@@ -94,6 +94,7 @@ public final class MCUtil {
|
|
*/
|
|
public static void ensureMain(String reason, Runnable run) {
|
|
if (!isMainThread()) {
|
|
+ if (true) throw new UnsupportedOperationException(); // Folia - region threading
|
|
if (reason != null) {
|
|
MinecraftServer.LOGGER.warn("Asynchronous " + reason + "!", new IllegalStateException());
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
index 1da86b25e3b89c79d4f3920c8d2ef10ee2757f65..1e605345b2911193b4500a7f84ea8ace318842e5 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
@@ -318,7 +318,7 @@ public final class CraftServer implements Server {
|
|
private final ServerConfiguration serverConfig = new PaperServerConfiguration();
|
|
|
|
// Paper start - Folia region threading API
|
|
- private final io.papermc.paper.threadedregions.scheduler.FallbackRegionScheduler regionizedScheduler = new io.papermc.paper.threadedregions.scheduler.FallbackRegionScheduler();
|
|
+ private final io.papermc.paper.threadedregions.scheduler.FoliaRegionScheduler regionizedScheduler = new io.papermc.paper.threadedregions.scheduler.FoliaRegionScheduler(); // Folia - region threading
|
|
private final io.papermc.paper.threadedregions.scheduler.FoliaAsyncScheduler asyncScheduler = new io.papermc.paper.threadedregions.scheduler.FoliaAsyncScheduler();
|
|
private final io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler globalRegionScheduler = new io.papermc.paper.threadedregions.scheduler.FoliaGlobalRegionScheduler();
|
|
|
|
@@ -395,7 +395,7 @@ public final class CraftServer implements Server {
|
|
|
|
@Override
|
|
public final boolean isGlobalTickThread() {
|
|
- return ca.spottedleaf.moonrise.common.util.TickThread.isTickThread();
|
|
+ return io.papermc.paper.threadedregions.RegionizedServer.isGlobalTickThread(); // Folia - region threading API
|
|
}
|
|
// Paper end - Folia reagion threading API
|
|
|
|
@@ -976,6 +976,9 @@ public final class CraftServer implements Server {
|
|
|
|
// NOTE: Should only be called from DedicatedServer.ah()
|
|
public boolean dispatchServerCommand(CommandSender sender, ConsoleInput serverCommand) {
|
|
+ // Folia start - region threading
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("May not dispatch server commands async");
|
|
+ // Folia end - region threading
|
|
if (sender instanceof Conversable) {
|
|
Conversable conversable = (Conversable) sender;
|
|
|
|
@@ -995,12 +998,46 @@ public final class CraftServer implements Server {
|
|
}
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ public void dispatchCmdAsync(CommandSender sender, String commandLine) {
|
|
+ if ((sender instanceof Entity entity)) {
|
|
+ ((org.bukkit.craftbukkit.entity.CraftEntity)entity).taskScheduler.schedule(
|
|
+ (nmsEntity) -> {
|
|
+ CraftServer.this.dispatchCommand(nmsEntity.getBukkitEntity(), commandLine);
|
|
+ },
|
|
+ null,
|
|
+ 1L
|
|
+ );
|
|
+ } else if (sender instanceof ConsoleCommandSender || sender instanceof io.papermc.paper.commands.FeedbackForwardingSender) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> {
|
|
+ CraftServer.this.dispatchCommand(sender, commandLine);
|
|
+ });
|
|
+ } else {
|
|
+ // huh?
|
|
+ throw new UnsupportedOperationException("Dispatching command for " + sender);
|
|
+ }
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@Override
|
|
public boolean dispatchCommand(CommandSender sender, String commandLine) {
|
|
Preconditions.checkArgument(sender != null, "sender cannot be null");
|
|
Preconditions.checkArgument(commandLine != null, "commandLine cannot be null");
|
|
org.spigotmc.AsyncCatcher.catchOp("Command Dispatched Async: " + commandLine); // Spigot // Paper - Include command in error message
|
|
|
|
+ // Folia start - region threading
|
|
+ if ((sender instanceof Entity entity)) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(((org.bukkit.craftbukkit.entity.CraftEntity)entity).getHandle(), "Dispatching command async");
|
|
+ } else if (sender instanceof ConsoleCommandSender || sender instanceof net.minecraft.server.rcon.RconConsoleSource
|
|
+ || sender instanceof org.bukkit.craftbukkit.command.CraftRemoteConsoleCommandSender
|
|
+ || sender instanceof io.papermc.paper.commands.FeedbackForwardingSender) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Dispatching command async");
|
|
+ } else {
|
|
+ // huh?
|
|
+ throw new UnsupportedOperationException("Dispatching command for " + sender);
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
if (this.commandMap.dispatch(sender, commandLine)) {
|
|
return true;
|
|
}
|
|
@@ -1254,6 +1291,7 @@ public final class CraftServer implements Server {
|
|
|
|
@Override
|
|
public World createWorld(WorldCreator creator) {
|
|
+ if (true) throw new UnsupportedOperationException(); // Folia - not implemented properly yet
|
|
Preconditions.checkState(this.console.getAllLevels().iterator().hasNext(), "Cannot create additional worlds on STARTUP");
|
|
//Preconditions.checkState(!this.console.isIteratingOverLevels, "Cannot create a world while worlds are being ticked"); // Paper - Cat - Temp disable. We'll see how this goes.
|
|
Preconditions.checkArgument(creator != null, "WorldCreator cannot be null");
|
|
@@ -1451,6 +1489,7 @@ public final class CraftServer implements Server {
|
|
|
|
@Override
|
|
public boolean unloadWorld(World world, boolean save) {
|
|
+ if (true) throw new UnsupportedOperationException(); // Folia - not implemented properly yet
|
|
//Preconditions.checkState(!this.console.isIteratingOverLevels, "Cannot unload a world while worlds are being ticked"); // Paper - Cat - Temp disable. We'll see how this goes.
|
|
if (world == null) {
|
|
return false;
|
|
@@ -2941,7 +2980,23 @@ public final class CraftServer implements Server {
|
|
|
|
@Override
|
|
public double getAverageTickTime() {
|
|
- return this.getServer().tickTimes5s.getAverage();
|
|
+ // Folia start - region threading
|
|
+ ca.spottedleaf.concurrentutil.scheduler.SchedulerThreadPool.SchedulableTick task = io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentTickingTask();
|
|
+ if (task == null) {
|
|
+ // might be on the shutdown thread, try retrieving the current region
|
|
+ if (io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentRegion() != null) {
|
|
+ // we are on the shutdown thread
|
|
+ task = io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentRegion().getData().getRegionSchedulingHandle();
|
|
+ }
|
|
+ }
|
|
+ if (!(task instanceof io.papermc.paper.threadedregions.TickRegionScheduler.RegionScheduleHandle tickHandle)) {
|
|
+ throw new UnsupportedOperationException("Not on any region");
|
|
+ }
|
|
+
|
|
+
|
|
+ long currTime = System.nanoTime();
|
|
+ return tickHandle.getTickReport5s(currTime).timePerTickData().segmentAll().average() / 1.0E6;
|
|
+ // Folia end - region threading
|
|
}
|
|
|
|
private final org.bukkit.Server.Spigot spigot = new org.bukkit.Server.Spigot() {
|
|
@@ -2998,11 +3053,27 @@ public final class CraftServer implements Server {
|
|
|
|
@Override
|
|
public double[] getTPS() {
|
|
+ // Folia start - region threading
|
|
+ ca.spottedleaf.concurrentutil.scheduler.SchedulerThreadPool.SchedulableTick task = io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentTickingTask();
|
|
+ if (task == null) {
|
|
+ // might be on the shutdown thread, try retrieving the current region
|
|
+ if (io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentRegion() != null) {
|
|
+ // we are on the shutdown thread
|
|
+ task = io.papermc.paper.threadedregions.TickRegionScheduler.getCurrentRegion().getData().getRegionSchedulingHandle();
|
|
+ }
|
|
+ }
|
|
+ if (!(task instanceof io.papermc.paper.threadedregions.TickRegionScheduler.RegionScheduleHandle tickHandle)) {
|
|
+ throw new UnsupportedOperationException("Not on any region");
|
|
+ }
|
|
+
|
|
+ // 1m, 5m, 15m
|
|
+ long currTime = System.nanoTime();
|
|
return new double[] {
|
|
- net.minecraft.server.MinecraftServer.getServer().tps1.getAverage(),
|
|
- net.minecraft.server.MinecraftServer.getServer().tps5.getAverage(),
|
|
- net.minecraft.server.MinecraftServer.getServer().tps15.getAverage()
|
|
+ tickHandle.getTickReport1m(currTime).tpsData().segmentAll().average(),
|
|
+ tickHandle.getTickReport5m(currTime).tpsData().segmentAll().average(),
|
|
+ tickHandle.getTickReport15m(currTime).tpsData().segmentAll().average(),
|
|
};
|
|
+ // Folia end - region threading
|
|
}
|
|
|
|
@Override
|
|
@@ -3172,7 +3243,7 @@ public final class CraftServer implements Server {
|
|
|
|
@Override
|
|
public int getCurrentTick() {
|
|
- return net.minecraft.server.MinecraftServer.currentTick;
|
|
+ return (int)io.papermc.paper.threadedregions.RegionizedServer.getCurrentTick(); // Folia - region threading
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
index aae378697b2f2e388d2a5dfaca24c9197b8abf3e..85953b02763b4dfddfc00c095f1ec4a019a1a30f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -228,7 +228,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public int getTickableTileEntityCount() {
|
|
- return world.blockEntityTickers.size();
|
|
+ throw new UnsupportedOperationException(); // Folia - region threading - TODO fix this?
|
|
}
|
|
|
|
@Override
|
|
@@ -295,7 +295,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
// Paper start - per world spawn limits
|
|
for (SpawnCategory spawnCategory : SpawnCategory.values()) {
|
|
if (CraftSpawnCategory.isValidForLimits(spawnCategory)) {
|
|
- setSpawnLimit(spawnCategory, this.world.paperConfig().entities.spawning.spawnLimits.getInt(CraftSpawnCategory.toNMS(spawnCategory)));
|
|
+ this.spawnCategoryLimit.put(spawnCategory, this.world.paperConfig().entities.spawning.spawnLimits.getInt(CraftSpawnCategory.toNMS(spawnCategory))); // Folia - region threading
|
|
}
|
|
}
|
|
// Paper end - per world spawn limits
|
|
@@ -366,6 +366,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public Chunk getChunkAt(int x, int z) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.getHandle(), x, z, "Async chunk retrieval"); // Folia - region threading
|
|
warnUnsafeChunk("getting a faraway chunk", x, z); // Paper
|
|
net.minecraft.world.level.chunk.LevelChunk chunk = (net.minecraft.world.level.chunk.LevelChunk) this.world.getChunk(x, z, ChunkStatus.FULL, true);
|
|
return new CraftChunk(chunk);
|
|
@@ -396,10 +397,10 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
@Override
|
|
public boolean isChunkGenerated(int x, int z) {
|
|
// Paper start - Fix this method
|
|
- if (!Bukkit.isPrimaryThread()) {
|
|
+ if (!ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.getHandle(), x, z)) { // Folia - region threading
|
|
return java.util.concurrent.CompletableFuture.supplyAsync(() -> {
|
|
return CraftWorld.this.isChunkGenerated(x, z);
|
|
- }, world.getChunkSource().mainThreadProcessor).join();
|
|
+ }, (run) -> { io.papermc.paper.threadedregions.RegionizedServer.getInstance().taskQueue.queueChunkTask(this.getHandle(), x, z, run);}).join(); // Folia - region threading
|
|
}
|
|
ChunkAccess chunk = world.getChunkSource().getChunkAtImmediately(x, z);
|
|
if (chunk != null) {
|
|
@@ -456,7 +457,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
}
|
|
|
|
private boolean unloadChunk0(int x, int z, boolean save) {
|
|
- org.spigotmc.AsyncCatcher.catchOp("chunk unload"); // Spigot
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x, z, "Cannot unload chunk asynchronously"); // Folia - region threading
|
|
if (!this.isChunkLoaded(x, z)) {
|
|
return true;
|
|
}
|
|
@@ -473,6 +474,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public boolean refreshChunk(int x, int z) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x, z, "Cannot refresh chunk asynchronously"); // Folia - region threading
|
|
ChunkHolder playerChunk = this.world.getChunkSource().chunkMap.getVisibleChunkIfPresent(ChunkPos.asLong(x, z));
|
|
if (playerChunk == null) return false;
|
|
|
|
@@ -523,7 +525,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public boolean loadChunk(int x, int z, boolean generate) {
|
|
- org.spigotmc.AsyncCatcher.catchOp("chunk load"); // Spigot
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.getHandle(), x, z, "May not sync load chunks asynchronously"); // Folia - region threading
|
|
warnUnsafeChunk("loading a faraway chunk", x, z); // Paper
|
|
ChunkAccess chunk = this.world.getChunkSource().getChunk(x, z, generate || isChunkGenerated(x, z) ? ChunkStatus.FULL : ChunkStatus.EMPTY, true); // Paper
|
|
|
|
@@ -563,7 +565,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
final DistanceManager distanceManager = this.world.getChunkSource().chunkMap.distanceManager;
|
|
if (distanceManager.ticketStorage.addPluginRegionTicket(new ChunkPos(x, z), plugin)) {
|
|
- this.getChunkAt(x, z); // ensure it's loaded
|
|
+ //this.getChunkAt(x, z); // ensure it's loaded // Folia - region threading - do not load chunks for tickets anymore to make this mt-safe
|
|
return true;
|
|
}
|
|
|
|
@@ -617,21 +619,24 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public boolean isChunkForceLoaded(int x, int z) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot read force-loaded chunk off global region"); // Folia - region threading
|
|
return this.getHandle().getForceLoadedChunks().contains(ChunkPos.asLong(x, z));
|
|
}
|
|
|
|
@Override
|
|
public void setChunkForceLoaded(int x, int z, boolean forced) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify force-loaded chunks off global region"); // Folia - region threading
|
|
warnUnsafeChunk("forceloading a faraway chunk", x, z); // Paper
|
|
this.getHandle().setChunkForced(x, z, forced);
|
|
}
|
|
|
|
@Override
|
|
public Collection<Chunk> getForceLoadedChunks() {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot read force-loaded chunks off global region"); // Folia - region threading
|
|
Set<Chunk> chunks = new HashSet<>();
|
|
|
|
for (long coord : this.getHandle().getForceLoadedChunks()) {
|
|
- chunks.add(this.getChunkAt(ChunkPos.getX(coord), ChunkPos.getZ(coord)));
|
|
+ chunks.add(new org.bukkit.craftbukkit.CraftChunk(this.world, ChunkPos.getX(coord), ChunkPos.getZ(coord))); // Folia - region threading
|
|
}
|
|
|
|
return Collections.unmodifiableCollection(chunks);
|
|
@@ -751,13 +756,15 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public boolean generateTree(Location loc, TreeType type, BlockChangeDelegate delegate) {
|
|
- this.world.captureTreeGeneration = true;
|
|
- this.world.captureBlockStates = true;
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, loc.getX(), loc.getZ(), "Cannot generate tree asynchronously"); // Folia - region threading
|
|
+ io.papermc.paper.threadedregions.RegionizedWorldData worldData = world.getCurrentWorldData(); // Folia - region threading
|
|
+ worldData.captureTreeGeneration = true; // Folia - region threading
|
|
+ worldData.captureBlockStates = true; // Folia - region threading
|
|
boolean grownTree = this.generateTree(loc, type);
|
|
- this.world.captureBlockStates = false;
|
|
- this.world.captureTreeGeneration = false;
|
|
+ worldData.captureBlockStates = false; // Folia - region threading
|
|
+ worldData.captureTreeGeneration = false; // Folia - region threading
|
|
if (grownTree) { // Copy block data to delegate
|
|
- for (BlockState blockstate : this.world.capturedBlockStates.values()) {
|
|
+ for (BlockState blockstate : worldData.capturedBlockStates.values()) { // Folia - region threading
|
|
BlockPos position = ((CraftBlockState) blockstate).getPosition();
|
|
net.minecraft.world.level.block.state.BlockState oldBlock = this.world.getBlockState(position);
|
|
int flags = ((CraftBlockState) blockstate).getFlags();
|
|
@@ -765,10 +772,10 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
net.minecraft.world.level.block.state.BlockState newBlock = this.world.getBlockState(position);
|
|
this.world.notifyAndUpdatePhysics(position, null, oldBlock, newBlock, newBlock, flags, net.minecraft.world.level.block.Block.UPDATE_LIMIT);
|
|
}
|
|
- this.world.capturedBlockStates.clear();
|
|
+ worldData.capturedBlockStates.clear(); // Folia - region threading
|
|
return true;
|
|
} else {
|
|
- this.world.capturedBlockStates.clear();
|
|
+ worldData.capturedBlockStates.clear(); // Folia - region threading
|
|
return false;
|
|
}
|
|
}
|
|
@@ -802,6 +809,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public void setTime(long time) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify time off of the global region"); // Folia - region threading
|
|
long margin = (time - this.getFullTime()) % Level.TICKS_PER_DAY;
|
|
if (margin < 0) margin += Level.TICKS_PER_DAY;
|
|
this.setFullTime(this.getFullTime() + margin);
|
|
@@ -814,6 +822,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public void setFullTime(long time) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify time off of the global region"); // Folia - region threading
|
|
// Notify anyone who's listening
|
|
TimeSkipEvent event = new TimeSkipEvent(this, TimeSkipEvent.SkipReason.CUSTOM, time - this.world.getDayTime());
|
|
this.server.getPluginManager().callEvent(event);
|
|
@@ -841,7 +850,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public long getGameTime() {
|
|
- return this.world.levelData.getGameTime();
|
|
+ return this.getHandle().getGameTime(); // Folia - region threading
|
|
}
|
|
|
|
@Override
|
|
@@ -866,6 +875,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
}
|
|
public boolean createExplosion(double x, double y, double z, float power, boolean setFire, boolean breakBlocks, Entity source, Consumer<net.minecraft.world.level.ServerExplosion> configurator) {
|
|
// Paper end - expand explosion API
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x, z, "Cannot create explosion asynchronously"); // Folia - region threading
|
|
net.minecraft.world.level.Level.ExplosionInteraction explosionType;
|
|
if (!breakBlocks) {
|
|
explosionType = net.minecraft.world.level.Level.ExplosionInteraction.NONE; // Don't break blocks
|
|
@@ -875,6 +885,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
explosionType = net.minecraft.world.level.Level.ExplosionInteraction.MOB; // Respect mobGriefing gamerule
|
|
}
|
|
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x, z, "Cannot create explosion asynchronously"); // Folia - region threading
|
|
net.minecraft.world.entity.Entity entity = (source == null) ? null : ((CraftEntity) source).getHandle();
|
|
return !this.world.explode0(entity, Explosion.getDefaultDamageSource(this.world, entity), null, x, y, z, power, setFire, explosionType, ParticleTypes.EXPLOSION, ParticleTypes.EXPLOSION_EMITTER, SoundEvents.GENERIC_EXPLODE, configurator).wasCanceled; // Paper - expand explosion API
|
|
}
|
|
@@ -957,6 +968,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public int getHighestBlockYAt(int x, int z, org.bukkit.HeightMap heightMap) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, x >> 4, z >> 4, "Cannot retrieve chunk asynchronously"); // Folia - region threading
|
|
warnUnsafeChunk("getting a faraway chunk", x >> 4, z >> 4); // Paper
|
|
// Transient load for this tick
|
|
return this.world.getChunk(x >> 4, z >> 4).getHeight(CraftHeightMap.toNMS(heightMap), x, z);
|
|
@@ -987,6 +999,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
@Override
|
|
public void setBiome(int x, int y, int z, Holder<net.minecraft.world.level.biome.Biome> bb) {
|
|
BlockPos pos = new BlockPos(x, 0, z);
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, pos, "Cannot retrieve chunk asynchronously"); // Folia - region threading
|
|
if (this.world.hasChunkAt(pos)) {
|
|
net.minecraft.world.level.chunk.LevelChunk chunk = this.world.getChunkAt(pos);
|
|
|
|
@@ -1317,6 +1330,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public void setStorm(boolean hasStorm) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading
|
|
this.world.serverLevelData.setRaining(hasStorm, org.bukkit.event.weather.WeatherChangeEvent.Cause.PLUGIN); // Paper - Add cause to Weather/ThunderChangeEvents
|
|
this.setWeatherDuration(0); // Reset weather duration (legacy behaviour)
|
|
this.setClearWeatherDuration(0); // Reset clear weather duration (reset "/weather clear" commands)
|
|
@@ -1329,6 +1343,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public void setWeatherDuration(int duration) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading
|
|
this.world.serverLevelData.setRainTime(duration);
|
|
}
|
|
|
|
@@ -1339,6 +1354,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public void setThundering(boolean thundering) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading
|
|
this.world.serverLevelData.setThundering(thundering, org.bukkit.event.weather.ThunderChangeEvent.Cause.PLUGIN); // Paper - Add cause to Weather/ThunderChangeEvents
|
|
this.setThunderDuration(0); // Reset weather duration (legacy behaviour)
|
|
this.setClearWeatherDuration(0); // Reset clear weather duration (reset "/weather clear" commands)
|
|
@@ -1351,6 +1367,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public void setThunderDuration(int duration) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading
|
|
this.world.serverLevelData.setThunderTime(duration);
|
|
}
|
|
|
|
@@ -1361,6 +1378,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public void setClearWeatherDuration(int duration) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify weather off of the global region"); // Folia - region threading
|
|
this.world.serverLevelData.setClearWeatherTime(duration);
|
|
}
|
|
|
|
@@ -1559,6 +1577,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public void setKeepSpawnInMemory(boolean keepLoaded) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify keep spawn in memory off of the global region"); // Folia - region threading
|
|
if (keepLoaded) {
|
|
this.setGameRule(GameRule.SPAWN_CHUNK_RADIUS, this.getGameRuleDefault(GameRule.SPAWN_CHUNK_RADIUS));
|
|
} else {
|
|
@@ -1632,6 +1651,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public void setHardcore(boolean hardcore) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
this.world.serverLevelData.settings.hardcore = hardcore;
|
|
}
|
|
|
|
@@ -1644,6 +1664,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
@Override
|
|
@Deprecated
|
|
public void setTicksPerAnimalSpawns(int ticksPerAnimalSpawns) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
this.setTicksPerSpawns(SpawnCategory.ANIMAL, ticksPerAnimalSpawns);
|
|
}
|
|
|
|
@@ -1656,6 +1677,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
@Override
|
|
@Deprecated
|
|
public void setTicksPerMonsterSpawns(int ticksPerMonsterSpawns) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
this.setTicksPerSpawns(SpawnCategory.MONSTER, ticksPerMonsterSpawns);
|
|
}
|
|
|
|
@@ -1668,6 +1690,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
@Override
|
|
@Deprecated
|
|
public void setTicksPerWaterSpawns(int ticksPerWaterSpawns) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
this.setTicksPerSpawns(SpawnCategory.WATER_ANIMAL, ticksPerWaterSpawns);
|
|
}
|
|
|
|
@@ -1680,6 +1703,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
@Override
|
|
@Deprecated
|
|
public void setTicksPerWaterAmbientSpawns(int ticksPerWaterAmbientSpawns) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
this.setTicksPerSpawns(SpawnCategory.WATER_AMBIENT, ticksPerWaterAmbientSpawns);
|
|
}
|
|
|
|
@@ -1692,6 +1716,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
@Override
|
|
@Deprecated
|
|
public void setTicksPerWaterUndergroundCreatureSpawns(int ticksPerWaterUndergroundCreatureSpawns) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
this.setTicksPerSpawns(SpawnCategory.WATER_UNDERGROUND_CREATURE, ticksPerWaterUndergroundCreatureSpawns);
|
|
}
|
|
|
|
@@ -1704,11 +1729,13 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
@Override
|
|
@Deprecated
|
|
public void setTicksPerAmbientSpawns(int ticksPerAmbientSpawns) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
this.setTicksPerSpawns(SpawnCategory.AMBIENT, ticksPerAmbientSpawns);
|
|
}
|
|
|
|
@Override
|
|
public void setTicksPerSpawns(SpawnCategory spawnCategory, int ticksPerCategorySpawn) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
Preconditions.checkArgument(spawnCategory != null, "SpawnCategory cannot be null");
|
|
Preconditions.checkArgument(CraftSpawnCategory.isValidForLimits(spawnCategory), "SpawnCategory.%s are not supported", spawnCategory);
|
|
|
|
@@ -1725,21 +1752,25 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public void setMetadata(String metadataKey, MetadataValue newMetadataValue) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify metadata off of the global region"); // Folia - region threading
|
|
this.server.getWorldMetadata().setMetadata(this, metadataKey, newMetadataValue);
|
|
}
|
|
|
|
@Override
|
|
public List<MetadataValue> getMetadata(String metadataKey) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot retrieve metadata off of the global region"); // Folia - region threading
|
|
return this.server.getWorldMetadata().getMetadata(this, metadataKey);
|
|
}
|
|
|
|
@Override
|
|
public boolean hasMetadata(String metadataKey) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot retrieve metadata off of the global region"); // Folia - region threading
|
|
return this.server.getWorldMetadata().hasMetadata(this, metadataKey);
|
|
}
|
|
|
|
@Override
|
|
public void removeMetadata(String metadataKey, Plugin owningPlugin) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify metadata off of the global region"); // Folia - region threading
|
|
this.server.getWorldMetadata().removeMetadata(this, metadataKey, owningPlugin);
|
|
}
|
|
|
|
@@ -1752,6 +1783,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
@Override
|
|
@Deprecated
|
|
public void setMonsterSpawnLimit(int limit) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
this.setSpawnLimit(SpawnCategory.MONSTER, limit);
|
|
}
|
|
|
|
@@ -1764,6 +1796,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
@Override
|
|
@Deprecated
|
|
public void setAnimalSpawnLimit(int limit) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
this.setSpawnLimit(SpawnCategory.ANIMAL, limit);
|
|
}
|
|
|
|
@@ -1776,6 +1809,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
@Override
|
|
@Deprecated
|
|
public void setWaterAnimalSpawnLimit(int limit) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
this.setSpawnLimit(SpawnCategory.WATER_ANIMAL, limit);
|
|
}
|
|
|
|
@@ -1788,6 +1822,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
@Override
|
|
@Deprecated
|
|
public void setWaterAmbientSpawnLimit(int limit) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
this.setSpawnLimit(SpawnCategory.WATER_AMBIENT, limit);
|
|
}
|
|
|
|
@@ -1800,6 +1835,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
@Override
|
|
@Deprecated
|
|
public void setWaterUndergroundCreatureSpawnLimit(int limit) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
this.setSpawnLimit(SpawnCategory.WATER_UNDERGROUND_CREATURE, limit);
|
|
}
|
|
|
|
@@ -1812,6 +1848,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
@Override
|
|
@Deprecated
|
|
public void setAmbientSpawnLimit(int limit) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
this.setSpawnLimit(SpawnCategory.AMBIENT, limit);
|
|
}
|
|
|
|
@@ -1834,6 +1871,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public void setSpawnLimit(SpawnCategory spawnCategory, int limit) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
Preconditions.checkArgument(spawnCategory != null, "SpawnCategory cannot be null");
|
|
Preconditions.checkArgument(CraftSpawnCategory.isValidForLimits(spawnCategory), "SpawnCategory.%s are not supported", spawnCategory);
|
|
|
|
@@ -1916,7 +1954,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
if (!(entity instanceof CraftEntity craftEntity) || entity.getWorld() != this || sound == null || category == null) return;
|
|
|
|
ClientboundSoundEntityPacket packet = new ClientboundSoundEntityPacket(CraftSound.bukkitToMinecraftHolder(sound), net.minecraft.sounds.SoundSource.valueOf(category.name()), craftEntity.getHandle(), volume, pitch, seed);
|
|
- ChunkMap.TrackedEntity entityTracker = this.getHandle().getChunkSource().chunkMap.entityMap.get(entity.getEntityId());
|
|
+ ChunkMap.TrackedEntity entityTracker = ((CraftEntity) entity).getHandle().moonrise$getTrackedEntity(); // Folia - region threading
|
|
if (entityTracker != null) {
|
|
entityTracker.broadcastAndSend(packet);
|
|
}
|
|
@@ -1937,7 +1975,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
if (!(entity instanceof CraftEntity craftEntity) || entity.getWorld() != this || sound == null || category == null) return;
|
|
|
|
ClientboundSoundEntityPacket packet = new ClientboundSoundEntityPacket(Holder.direct(SoundEvent.createVariableRangeEvent(ResourceLocation.parse(sound))), net.minecraft.sounds.SoundSource.valueOf(category.name()), craftEntity.getHandle(), volume, pitch, seed);
|
|
- ChunkMap.TrackedEntity entityTracker = this.getHandle().getChunkSource().chunkMap.entityMap.get(entity.getEntityId());
|
|
+ ChunkMap.TrackedEntity entityTracker = ((CraftEntity)entity).getHandle().moonrise$getTrackedEntity(); // Folia - region threading
|
|
if (entityTracker != null) {
|
|
entityTracker.broadcastAndSend(packet);
|
|
}
|
|
@@ -2020,6 +2058,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public boolean setGameRuleValue(String rule, String value) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
// No null values allowed
|
|
if (rule == null || value == null) return false;
|
|
|
|
@@ -2068,6 +2107,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public <T> boolean setGameRule(GameRule<T> rule, T newValue) {
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.ensureGlobalTickThread("Cannot modify server settings off of the global region"); // Folia - region threading
|
|
Preconditions.checkArgument(rule != null, "GameRule cannot be null");
|
|
Preconditions.checkArgument(newValue != null, "GameRule value cannot be null");
|
|
|
|
@@ -2295,6 +2335,12 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
@Override
|
|
public void sendGameEvent(Entity sourceEntity, org.bukkit.GameEvent gameEvent, Vector position) {
|
|
+ // Folia start - region threading
|
|
+ if (sourceEntity != null && !Bukkit.isOwnedByCurrentRegion(sourceEntity)) {
|
|
+ throw new IllegalStateException("Cannot send game event asynchronously");
|
|
+ }
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.world, position.getX(), position.getZ(), "Cannot send game event asynchronously");
|
|
+ // Folia end - region threading
|
|
getHandle().gameEvent(sourceEntity != null ? ((CraftEntity) sourceEntity).getHandle(): null, net.minecraft.core.registries.BuiltInRegistries.GAME_EVENT.get(org.bukkit.craftbukkit.util.CraftNamespacedKey.toMinecraft(gameEvent.getKey())).orElseThrow(), org.bukkit.craftbukkit.util.CraftVector.toBlockPos(position));
|
|
}
|
|
// Paper end
|
|
@@ -2329,7 +2375,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
Preconditions.checkArgument(radius >= 0, "Radius value (%s) cannot be negative", radius);
|
|
|
|
Raids persistentRaid = this.world.getRaids();
|
|
- net.minecraft.world.entity.raid.Raid raid = persistentRaid.getNearbyRaid(CraftLocation.toBlockPosition(location), radius * radius);
|
|
+ net.minecraft.world.entity.raid.Raid raid = persistentRaid.getNearbyRaid(this.world, CraftLocation.toBlockPosition(location), radius * radius); // Folia - make raids thread-safe - add ServerLevel param
|
|
return (raid == null) ? null : new CraftRaid(raid, this.world);
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
|
index a4d5c65edc1db59f3486ce5d3757cc306211a54b..97faf66a3d0e0e2158830ed0d787fdca6d5b8f7e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
|
@@ -75,6 +75,11 @@ public class CraftBlock implements Block {
|
|
}
|
|
|
|
public net.minecraft.world.level.block.state.BlockState getNMS() {
|
|
+ // Folia start - region threading
|
|
+ if (this.world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
return this.world.getBlockState(this.position);
|
|
}
|
|
|
|
@@ -155,6 +160,11 @@ public class CraftBlock implements Block {
|
|
}
|
|
|
|
private void setData(final byte data, int flags) {
|
|
+ // Folia start - region threading
|
|
+ if (this.world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
this.world.setBlock(this.position, CraftMagicNumbers.getBlock(this.getType(), data), flags);
|
|
}
|
|
|
|
@@ -196,6 +206,11 @@ public class CraftBlock implements Block {
|
|
}
|
|
|
|
public static boolean setBlockState(LevelAccessor world, BlockPos pos, net.minecraft.world.level.block.state.BlockState oldState, net.minecraft.world.level.block.state.BlockState newState, boolean applyPhysics) {
|
|
+ // Folia start - region threading
|
|
+ if (world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, pos, "Cannot modify world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
// SPIGOT-611: need to do this to prevent glitchiness. Easier to handle this here (like /setblock) than to fix weirdness in block entity cleanup
|
|
if (oldState.hasBlockEntity() && newState.getBlock() != oldState.getBlock()) { // SPIGOT-3725 remove old block entity if block changes
|
|
// SPIGOT-4612: faster - just clear tile
|
|
@@ -344,18 +359,33 @@ public class CraftBlock implements Block {
|
|
|
|
@Override
|
|
public Biome getBiome() {
|
|
+ // Folia start - region threading
|
|
+ if (this.world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
return this.getWorld().getBiome(this.getX(), this.getY(), this.getZ());
|
|
}
|
|
|
|
// Paper start
|
|
@Override
|
|
public Biome getComputedBiome() {
|
|
+ // Folia start - region threading
|
|
+ if (this.world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
return this.getWorld().getComputedBiome(this.getX(), this.getY(), this.getZ());
|
|
}
|
|
// Paper end
|
|
|
|
@Override
|
|
public void setBiome(Biome bio) {
|
|
+ // Folia start - region threading
|
|
+ if (this.world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
this.getWorld().setBiome(this.getX(), this.getY(), this.getZ(), bio);
|
|
}
|
|
|
|
@@ -403,6 +433,11 @@ public class CraftBlock implements Block {
|
|
|
|
@Override
|
|
public boolean isBlockFaceIndirectlyPowered(BlockFace face) {
|
|
+ // Folia start - region threading
|
|
+ if (this.world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
int power = this.world.getMinecraftWorld().getSignal(this.position, CraftBlock.blockFaceToNotch(face));
|
|
|
|
Block relative = this.getRelative(face);
|
|
@@ -415,6 +450,11 @@ public class CraftBlock implements Block {
|
|
|
|
@Override
|
|
public int getBlockPower(BlockFace face) {
|
|
+ // Folia start - region threading
|
|
+ if (this.world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
int power = 0;
|
|
net.minecraft.world.level.Level world = this.world.getMinecraftWorld();
|
|
int x = this.getX();
|
|
@@ -499,6 +539,11 @@ public class CraftBlock implements Block {
|
|
|
|
@Override
|
|
public boolean breakNaturally(ItemStack item, boolean triggerEffect, boolean dropExperience) {
|
|
+ // Folia start - region threading
|
|
+ if (this.world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
// Paper end
|
|
// Order matters here, need to drop before setting to air so skulls can get their data
|
|
net.minecraft.world.level.block.state.BlockState state = this.getNMS();
|
|
@@ -542,21 +587,27 @@ public class CraftBlock implements Block {
|
|
|
|
@Override
|
|
public boolean applyBoneMeal(BlockFace face) {
|
|
+ // Folia start - region threading
|
|
+ if (this.world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
Direction direction = CraftBlock.blockFaceToNotch(face);
|
|
BlockFertilizeEvent event = null;
|
|
ServerLevel world = this.getCraftWorld().getHandle();
|
|
UseOnContext context = new UseOnContext(world, null, InteractionHand.MAIN_HAND, Items.BONE_MEAL.getDefaultInstance(), new BlockHitResult(Vec3.ZERO, direction, this.getPosition(), false));
|
|
|
|
+ io.papermc.paper.threadedregions.RegionizedWorldData worldData = world.getCurrentWorldData(); // Folia - region threading
|
|
// SPIGOT-6895: Call StructureGrowEvent and BlockFertilizeEvent
|
|
- world.captureTreeGeneration = true;
|
|
+ worldData.captureTreeGeneration = true; // Folia - region threading
|
|
InteractionResult result = BoneMealItem.applyBonemeal(context);
|
|
- world.captureTreeGeneration = false;
|
|
+ worldData.captureTreeGeneration = false; // Folia - region threading
|
|
|
|
- if (!world.capturedBlockStates.isEmpty()) {
|
|
- TreeType treeType = SaplingBlock.treeType;
|
|
- SaplingBlock.treeType = null;
|
|
- List<BlockState> states = new ArrayList<>(world.capturedBlockStates.values());
|
|
- world.capturedBlockStates.clear();
|
|
+ if (!worldData.capturedBlockStates.isEmpty()) { // Folia - region threading
|
|
+ TreeType treeType = SaplingBlock.treeTypeRT.get(); // Folia - region threading
|
|
+ SaplingBlock.treeTypeRT.set(null); // Folia - region threading
|
|
+ List<BlockState> states = new ArrayList<>(worldData.capturedBlockStates.values()); // Folia - region threading
|
|
+ worldData.capturedBlockStates.clear(); // Folia - region threading
|
|
StructureGrowEvent structureEvent = null;
|
|
|
|
if (treeType != null) {
|
|
@@ -644,6 +695,11 @@ public class CraftBlock implements Block {
|
|
|
|
@Override
|
|
public RayTraceResult rayTrace(Location start, Vector direction, double maxDistance, FluidCollisionMode fluidCollisionMode) {
|
|
+ // Folia start - region threading
|
|
+ if (this.world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
Preconditions.checkArgument(start != null, "Location start cannot be null");
|
|
Preconditions.checkArgument(this.getWorld().equals(start.getWorld()), "Location start cannot be a different world");
|
|
start.checkFinite();
|
|
@@ -685,6 +741,11 @@ public class CraftBlock implements Block {
|
|
|
|
@Override
|
|
public boolean canPlace(BlockData data) {
|
|
+ // Folia start - region threading
|
|
+ if (this.world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
Preconditions.checkArgument(data != null, "BlockData cannot be null");
|
|
net.minecraft.world.level.block.state.BlockState iblockdata = ((CraftBlockData) data).getState();
|
|
net.minecraft.world.level.Level world = this.world.getMinecraftWorld();
|
|
@@ -724,18 +785,32 @@ public class CraftBlock implements Block {
|
|
|
|
@Override
|
|
public void tick() {
|
|
+ // Folia start - region threading
|
|
+ if (this.world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
final ServerLevel level = this.world.getMinecraftWorld();
|
|
this.getNMS().tick(level, this.position, level.random);
|
|
}
|
|
|
|
-
|
|
@Override
|
|
public void fluidTick() {
|
|
+ // Folia start - region threading
|
|
+ if (this.world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
this.getNMSFluid().tick(this.world.getMinecraftWorld(), this.position, this.getNMS());
|
|
}
|
|
|
|
@Override
|
|
public void randomTick() {
|
|
+ // Folia start - region threading
|
|
+ if (this.world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, this.position, "Cannot read world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
final ServerLevel level = this.world.getMinecraftWorld();
|
|
this.getNMS().randomTick(level, this.position, level.random);
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java
|
|
index 3422970353dcd886934b9ee906467769d39abbde..26763221757f1077a61234dd1a814d9225ecf98f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockEntityState.java
|
|
@@ -25,7 +25,7 @@ public abstract class CraftBlockEntityState<T extends BlockEntity> extends Craft
|
|
private final T blockEntity;
|
|
private final T snapshot;
|
|
public boolean snapshotDisabled; // Paper
|
|
- public static boolean DISABLE_SNAPSHOT = false; // Paper
|
|
+ public static final ThreadLocal<Boolean> DISABLE_SNAPSHOT = ThreadLocal.withInitial(() -> Boolean.FALSE); // Paper // Folia - region threading
|
|
|
|
public CraftBlockEntityState(World world, T blockEntity) {
|
|
super(world, blockEntity.getBlockPos(), blockEntity.getBlockState());
|
|
@@ -34,8 +34,8 @@ public abstract class CraftBlockEntityState<T extends BlockEntity> extends Craft
|
|
|
|
try { // Paper - Show blockstate location if we failed to read it
|
|
// Paper start
|
|
- this.snapshotDisabled = DISABLE_SNAPSHOT;
|
|
- if (DISABLE_SNAPSHOT) {
|
|
+ this.snapshotDisabled = DISABLE_SNAPSHOT.get().booleanValue(); // Folia - region threading
|
|
+ if (snapshotDisabled) { // Folia - region threading
|
|
this.snapshot = this.blockEntity;
|
|
} else {
|
|
this.snapshot = this.createSnapshot(blockEntity);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
|
|
index 196835bdf95ba0e149b2977e9ef41698971f501f..846b0d6c79ad9c6885ceb8e572323667e67db4aa 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
|
|
@@ -218,6 +218,12 @@ public class CraftBlockState implements BlockState {
|
|
LevelAccessor access = this.getWorldHandle();
|
|
CraftBlock block = this.getBlock();
|
|
|
|
+ // Folia start - region threading
|
|
+ if (access instanceof net.minecraft.server.level.ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, position, "Cannot modify world asynchronously");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
if (block.getType() != this.getType()) {
|
|
if (!force) {
|
|
return false;
|
|
@@ -365,6 +371,9 @@ public class CraftBlockState implements BlockState {
|
|
|
|
@Override
|
|
public java.util.Collection<org.bukkit.inventory.ItemStack> getDrops(org.bukkit.inventory.ItemStack item, org.bukkit.entity.Entity entity) {
|
|
+ // Folia start - region threading
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(world.getHandle(), position, "Cannot modify world asynchronously");
|
|
+ // Folia end - region threading
|
|
this.requirePlaced();
|
|
net.minecraft.world.item.ItemStack nms = org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(item);
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java
|
|
index 2338e7c115037430cefae26a571ded71f77983c4..a4c3d8cd5b2143951f0c57b6f0e05ff222300451 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java
|
|
@@ -195,14 +195,14 @@ public final class CraftBlockStates {
|
|
BlockPos pos = craftBlock.getPosition();
|
|
net.minecraft.world.level.block.state.BlockState state = craftBlock.getNMS();
|
|
BlockEntity blockEntity = craftBlock.getHandle().getBlockEntity(pos);
|
|
- boolean prev = CraftBlockEntityState.DISABLE_SNAPSHOT;
|
|
- CraftBlockEntityState.DISABLE_SNAPSHOT = !useSnapshot;
|
|
+ boolean prev = CraftBlockEntityState.DISABLE_SNAPSHOT.get().booleanValue(); // Folia - region threading
|
|
+ CraftBlockEntityState.DISABLE_SNAPSHOT.set(Boolean.valueOf(!useSnapshot)); // Folia - region threading
|
|
try {
|
|
CraftBlockState blockState = CraftBlockStates.getBlockState(world, pos, state, blockEntity);
|
|
blockState.setWorldHandle(craftBlock.getHandle()); // Inject the block's generator access
|
|
return blockState;
|
|
} finally {
|
|
- CraftBlockEntityState.DISABLE_SNAPSHOT = prev;
|
|
+ CraftBlockEntityState.DISABLE_SNAPSHOT.set(Boolean.valueOf(prev)); // Folia - region threading
|
|
}
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java
|
|
index 13c7992e48264bcbf93f577a21d89dcc1126f625..b81545f8e8a2c1e3fd0db293481ca0b1759fff00 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java
|
|
@@ -48,7 +48,7 @@ public class ConsoleCommandCompleter implements Completer {
|
|
return syncEvent.callEvent() ? syncEvent.getCompletions() : com.google.common.collect.ImmutableList.of();
|
|
}
|
|
};
|
|
- server.getServer().processQueue.add(syncCompletions);
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(syncCompletions); // Folia - region threading
|
|
try {
|
|
final List<String> legacyCompletions = syncCompletions.get();
|
|
completions.removeIf(it -> !legacyCompletions.contains(it.suggestion())); // remove any suggestions that were removed
|
|
@@ -80,7 +80,7 @@ public class ConsoleCommandCompleter implements Completer {
|
|
return tabEvent.isCancelled() ? Collections.emptyList() : tabEvent.getCompletions();
|
|
}
|
|
};
|
|
- server.getServer().processQueue.add(waitable); // Paper - Remove "this."
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(waitable); // Folia - region threading
|
|
try {
|
|
List<String> offers = waitable.get();
|
|
if (offers == null) {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java b/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java
|
|
index 8244b7eaca615bd13050b7104851dd2a618f8b75..8cf93eb9d06facfc84a4c8b8ddffd84d0b49139b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/AbstractProjectile.java
|
|
@@ -1,5 +1,6 @@
|
|
package org.bukkit.craftbukkit.entity;
|
|
|
|
+import net.minecraft.world.entity.Entity;
|
|
import org.bukkit.craftbukkit.CraftServer;
|
|
import org.bukkit.entity.Projectile;
|
|
|
|
@@ -11,6 +12,7 @@ public abstract class AbstractProjectile extends CraftEntity implements Projecti
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.Projectile getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.Projectile) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java
|
|
index b8bfb6636bca7167b02e5b793b2045de2d8c0251..6877fbe99fcdcc45443d38f12add1975bdaae54f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java
|
|
@@ -23,6 +23,7 @@ public abstract class CraftAbstractArrow extends AbstractProjectile implements A
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.AbstractArrow getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.AbstractArrow) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractCow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractCow.java
|
|
index 4ee1cc51e9c92dd33b9ed49e8e1e0a8281aaf3d4..7ed3fa9d57fe49d129522ef50f74ba5e828e1f98 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractCow.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractCow.java
|
|
@@ -13,6 +13,7 @@ public abstract class CraftAbstractCow extends CraftAnimals implements AbstractC
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.AbstractCow getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.AbstractCow) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java
|
|
index 1249a5324e2b4c9d9103ee3918194505280ca5b1..f4a68900572958481c314724c77fc37ec255e6b3 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java
|
|
@@ -21,6 +21,7 @@ public abstract class CraftAbstractHorse extends CraftAnimals implements Abstrac
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.horse.AbstractHorse getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.horse.AbstractHorse) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java
|
|
index f59fdd04d991ba31b2715ed68699c9f21074346e..591978cc05625c4dc2ff822a7cf822135f1c9c4c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java
|
|
@@ -12,6 +12,7 @@ public abstract class CraftAbstractSkeleton extends CraftMonster implements Abst
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.AbstractSkeleton getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.AbstractSkeleton) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java
|
|
index 11a72607c4843463028fb1977d041ce7fc89324e..8c424b7da6af7460a78662772db595b9fc0898d7 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java
|
|
@@ -17,6 +17,7 @@ public abstract class CraftAbstractVillager extends CraftAgeable implements Craf
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.npc.AbstractVillager getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (Villager) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java
|
|
index df1e31c60f3dd3f5a319751f61935d26af25a37a..304951c79eccd0db19143c4e0ec44f71845886ff 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java
|
|
@@ -11,6 +11,7 @@ public abstract class CraftAbstractWindCharge extends CraftFireball implements A
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.windcharge.AbstractWindCharge getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.windcharge.AbstractWindCharge) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java
|
|
index 809639b79db4824524ac09575108e2134e920795..3658c75c87f22542f40049d81b3d950de17f9fde 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java
|
|
@@ -11,6 +11,7 @@ public class CraftAgeable extends CraftCreature implements Ageable {
|
|
|
|
@Override
|
|
public AgeableMob getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (AgeableMob) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java
|
|
index 3c1f25507b50d20d0ff8885a939ad800445985f5..38f926e87b9c2ea400106af28255a9d49a458ce1 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java
|
|
@@ -18,6 +18,7 @@ public class CraftAllay extends CraftCreature implements org.bukkit.entity.Allay
|
|
|
|
@Override
|
|
public Allay getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (Allay) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java
|
|
index 2cf667d8faf98e429621707703c9e5a73bf3b25f..25dd9f7b9272324690cc0df6ed13379fae1b1228 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java
|
|
@@ -11,6 +11,7 @@ public class CraftAmbient extends CraftMob implements Ambient {
|
|
|
|
@Override
|
|
public AmbientCreature getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (AmbientCreature) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java
|
|
index 9bd90d05891d0dd0353f8ea4be3bb1c9836a5f66..293380fe2e342e868facc6c231590fdb7c807d45 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java
|
|
@@ -17,6 +17,7 @@ public class CraftAnimals extends CraftAgeable implements Animals {
|
|
|
|
@Override
|
|
public Animal getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (Animal) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java
|
|
index 30dea480db4028ce7ce30f5abef93cbbf4fda9b4..7057ae473d26b70a9834d2a9ea323bbb6782a108 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java
|
|
@@ -30,6 +30,7 @@ public class CraftAreaEffectCloud extends CraftEntity implements AreaEffectCloud
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.AreaEffectCloud getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.AreaEffectCloud) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java
|
|
index 2b52654e8f1f553caf2880ac45c2fb232cfe00e9..71d3772f1dc202e330c78c537c670bc53125fe66 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java
|
|
@@ -13,6 +13,7 @@ public class CraftArmadillo extends CraftAnimals implements Armadillo {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.armadillo.Armadillo getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.armadillo.Armadillo) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
|
|
index e8371e5153f886449b6e1433e2148457f8ff25c7..7b90ff27c17a87e505645792a170f0644a61dc0b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
|
|
@@ -17,6 +17,7 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.decoration.ArmorStand getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.decoration.ArmorStand) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java
|
|
index 7926dca4e40f7df06debdfadd55eafb98cae4da3..9d06151e7c6384f6e5ea62e4acb1b066cc0dafe9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java
|
|
@@ -26,6 +26,7 @@ public class CraftArrow extends CraftAbstractArrow implements Arrow {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.Arrow getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.Arrow) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java
|
|
index a77124dfb9816981b87bdd88cdf03ecbca9b504f..f1b1e07bff6a605184c86d2277886910037692c2 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java
|
|
@@ -12,6 +12,7 @@ public class CraftAxolotl extends CraftAnimals implements Axolotl, io.papermc.pa
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.axolotl.Axolotl getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.axolotl.Axolotl) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java
|
|
index 7b29d31272ac6fc497016a1e40194081c6aa6db7..2aeb5c0bf7e44426eb0e9bdca5bbff813fc45b5e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java
|
|
@@ -11,6 +11,7 @@ public class CraftBat extends CraftAmbient implements Bat {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.ambient.Bat getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.ambient.Bat) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java
|
|
index 820564c88d5dfefcbc741795bc0cf006528001e3..1556456d6736b8d100943a372f386950eef4717c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java
|
|
@@ -15,6 +15,7 @@ public class CraftBee extends CraftAnimals implements Bee {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Bee getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Bee) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java
|
|
index afd698a2f700b8de6bbc22971f67f1f57cbfb9a6..7028f683d4a7a61ef4f62d33cae728306c680191 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java
|
|
@@ -10,6 +10,7 @@ public class CraftBlaze extends CraftMonster implements Blaze {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Blaze getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Blaze) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java
|
|
index 1ccb370e7bfb94ace9e574484c7917ef6d7fe8e7..9045e048cf3a90085f57e5ef119b971511496d69 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java
|
|
@@ -10,6 +10,7 @@ public class CraftBlockAttachedEntity extends CraftEntity {
|
|
|
|
@Override
|
|
public BlockAttachedEntity getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (BlockAttachedEntity) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java
|
|
index 6502c0622e6e34f48cfe41675428f118c6bcac49..1e7fc1256c47124ba9c2fd1a9829c27e8f13a0a3 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java
|
|
@@ -14,6 +14,7 @@ public class CraftBlockDisplay extends CraftDisplay implements BlockDisplay {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.Display.BlockDisplay getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.Display.BlockDisplay) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java
|
|
index aba0a70af9081545d214119e16cde9f749bb9914..d745b5e2bd21f6213eaa1bfbf0dadd1488d12aba 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java
|
|
@@ -14,6 +14,7 @@ public abstract class CraftBoat extends CraftVehicle implements Boat, io.papermc
|
|
|
|
@Override
|
|
public AbstractBoat getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (AbstractBoat) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBogged.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBogged.java
|
|
index 3db0be03f46ddd07c8f0b79529fa58552b707853..59781fb3253f33fd7f8a39075e84e3db2263b3ab 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBogged.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBogged.java
|
|
@@ -12,6 +12,7 @@ public class CraftBogged extends CraftAbstractSkeleton implements Bogged, io.pap
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Bogged getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Bogged) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBreeze.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBreeze.java
|
|
index f71864abb9ef825a37af3ed7b0cae33144c98c28..7e5955f2f748840b3e6b7d5b82c335829e794805 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBreeze.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBreeze.java
|
|
@@ -13,6 +13,7 @@ public class CraftBreeze extends CraftMonster implements Breeze {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.breeze.Breeze getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.breeze.Breeze) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBreezeWindCharge.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBreezeWindCharge.java
|
|
index 59dd96368973beaf3c5cd782f6d86e6151889849..1a02bbd6ad953594e992b06d17aaa0fc7d1ee6aa 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBreezeWindCharge.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBreezeWindCharge.java
|
|
@@ -10,6 +10,7 @@ public class CraftBreezeWindCharge extends CraftAbstractWindCharge implements Br
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.windcharge.BreezeWindCharge getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.windcharge.BreezeWindCharge) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java
|
|
index 93d7fde68469cb015e22779b83ded336be849dde..6325ea46e0f7707ab607157a9a8fbbb28e8bc6bd 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java
|
|
@@ -13,6 +13,7 @@ public class CraftCamel extends CraftAbstractHorse implements Camel {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.camel.Camel getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.camel.Camel) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java
|
|
index 60265974792422c8fe2d6661d564464cd81a3a14..6af42b550ef3b2f44c224c49898988e59edb50b0 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java
|
|
@@ -20,6 +20,7 @@ public class CraftCat extends CraftTameableAnimal implements Cat {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Cat getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Cat) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java
|
|
index 79907f902734ca495affc1c62376d79c18c38416..945bcde02773a9f327ee2fd132f9f08a5707ab9b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java
|
|
@@ -10,6 +10,7 @@ public class CraftCaveSpider extends CraftSpider implements CaveSpider {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.CaveSpider getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.CaveSpider) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java
|
|
index 22ea11d7ada3b296389d98d6096d5bc49d085dd7..d00e4bf0c94b87d9eeb42936cab1815f3301da78 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java
|
|
@@ -15,6 +15,7 @@ public abstract class CraftChestBoat extends CraftBoat implements org.bukkit.ent
|
|
|
|
@Override
|
|
public AbstractChestBoat getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (AbstractChestBoat) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java
|
|
index d05897695fc3cb06fa1bfffff3a0142f651caf34..d572fe3855dd05523e1f8cdb619c138844c73ad1 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java
|
|
@@ -12,6 +12,7 @@ public abstract class CraftChestedHorse extends CraftAbstractHorse implements Ch
|
|
|
|
@Override
|
|
public AbstractChestedHorse getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (AbstractChestedHorse) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java
|
|
index ec6e42a6172f679b588ee8dd5b651cce470a48f2..44969d28ca742ea57496c0f9ae4c75e6a697e1ef 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java
|
|
@@ -19,6 +19,7 @@ public class CraftChicken extends CraftAnimals implements Chicken {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Chicken getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Chicken) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java
|
|
index ca8c10cca87d2536926ac6c75aeaf856bb83dfb0..dc4f0b9143d4c8ea6f3d34a8a78fabf23925cba5 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java
|
|
@@ -11,6 +11,7 @@ public class CraftCod extends io.papermc.paper.entity.PaperSchoolableFish implem
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Cod getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Cod) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java
|
|
index 178cadf023bf516b93625c124fbf1a06b0131c58..bf9a8efbaf7b77edac1dc1280de713b01c4c386a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java
|
|
@@ -14,6 +14,7 @@ public class CraftComplexPart extends CraftEntity implements ComplexEntityPart {
|
|
|
|
@Override
|
|
public EnderDragonPart getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (EnderDragonPart) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java
|
|
index d21aa1b8b1b5b6b2183a576893cf8ddb36203e28..2863d46ccf67fa127cb97c33c5af578900624e4b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java
|
|
@@ -19,6 +19,7 @@ public class CraftCow extends CraftAbstractCow implements Cow {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Cow getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Cow) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java
|
|
index ebdf5c7df9ce8d56463820a04d9768c6c3a2dce6..94e1d3096655819d93a6cccc96968db52ee37de8 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java
|
|
@@ -19,6 +19,7 @@ public class CraftCreaking extends CraftMonster implements org.bukkit.entity.Cre
|
|
|
|
@Override
|
|
public Creaking getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (Creaking) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java
|
|
index c99c1d36ebaa7bb69d578bff29cacbb12a3ad7ed..c78999fd85f34905ef7bfd999b1dfd85fd3db8a8 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java
|
|
@@ -11,6 +11,7 @@ public class CraftCreature extends CraftMob implements Creature {
|
|
|
|
@Override
|
|
public PathfinderMob getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (PathfinderMob) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java
|
|
index 2fa2811c3a0afd19ae5ab0b86c679c5062a58ee8..9d721d23e6993a064ae4f6ee6facdd6b38c6b75d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java
|
|
@@ -14,6 +14,7 @@ public class CraftCreeper extends CraftMonster implements Creeper {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Creeper getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Creeper) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java
|
|
index 90dcaf8e600db2567b6bb00cf50279c42451ba46..8270b6c1c64d3ac33af8ffff89f426266facf190 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java
|
|
@@ -14,6 +14,7 @@ public class CraftDisplay extends CraftEntity implements Display {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.Display getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.Display) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java
|
|
index 0400e181e4cb32267ef9e4ddaa13654ca563953b..f707a4f2425789eec2fa7a01593e556b97a03b4e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java
|
|
@@ -13,6 +13,7 @@ public class CraftDolphin extends CraftAgeable implements Dolphin {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Dolphin getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Dolphin) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java
|
|
index 4dfed6e60ce37cbea44a3682ba1eaa611f4a144e..b04333c57797d0d5469a8a6aa0cf4b9c32d6f41d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java
|
|
@@ -11,6 +11,7 @@ public class CraftDrowned extends CraftZombie implements Drowned, com.destroysto
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Drowned getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Drowned) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java
|
|
index 6b1c6e0239fc5f40016b8434e85abc1238121fa8..9f23bd1ba97fd779cca36efca067633167b533ae 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java
|
|
@@ -12,6 +12,7 @@ public class CraftEgg extends CraftThrowableProjectile implements Egg {
|
|
|
|
@Override
|
|
public ThrownEgg getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (ThrownEgg) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java
|
|
index 2229a03fda7e6a5bbec38ba4778cde8de6881c10..f37e8d5169760de675469a9aea66f61380c7e69d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java
|
|
@@ -15,6 +15,7 @@ public class CraftEnderCrystal extends CraftEntity implements EnderCrystal {
|
|
|
|
@Override
|
|
public EndCrystal getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (EndCrystal) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java
|
|
index a716433db42e46029623777bd4c4ba5ce0509056..d3228234af0ba37daa84946eb6ec7f3fe0605c37 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java
|
|
@@ -22,6 +22,7 @@ public class CraftEnderDragon extends CraftMob implements EnderDragon, CraftEnem
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.boss.enderdragon.EnderDragon getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.boss.enderdragon.EnderDragon) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java
|
|
index 9d7268b6b4e9c9a9a1c8b4112e6d66dc26b99f49..60420045190cb424d319d3f9d333201658ad6994 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java
|
|
@@ -11,6 +11,14 @@ public class CraftEnderDragonPart extends CraftComplexPart implements EnderDrago
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.boss.EnderDragonPart getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread");
|
|
+ return (net.minecraft.world.entity.boss.EnderDragonPart)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@Override
|
|
public EnderDragon getParent() {
|
|
return (EnderDragon) super.getParent();
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java
|
|
index eb7e63d5697d97357b1319406c81ed3721a13f5e..80312931ec81a0b20fa0a384ce87fcc5ceb8bfe9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java
|
|
@@ -11,6 +11,7 @@ public class CraftEnderPearl extends CraftThrowableProjectile implements EnderPe
|
|
|
|
@Override
|
|
public ThrownEnderpearl getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (ThrownEnderpearl) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java
|
|
index 7feea819b2cae656a3d62cfcfc1a5567ef95786f..1b8b863058abc9f5db94f36c53c34f25dfc78ed1 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java
|
|
@@ -17,6 +17,7 @@ public class CraftEnderSignal extends CraftEntity implements EnderSignal {
|
|
|
|
@Override
|
|
public EyeOfEnder getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (EyeOfEnder) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java
|
|
index 52a5240b7a6996d7af77e2a3bfcbf18b38539266..798038361a15231263370aff2b0baf94964e28e0 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java
|
|
@@ -20,6 +20,7 @@ public class CraftEnderman extends CraftMonster implements Enderman {
|
|
|
|
@Override
|
|
public EnderMan getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (EnderMan) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java
|
|
index 000c5ea5d39d5ab6e5592012ab1cc7ee547505dc..ab2ee478c53923be85f5a6d4971bed5b5fc64393 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java
|
|
@@ -11,6 +11,7 @@ public class CraftEndermite extends CraftMonster implements Endermite {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Endermite getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Endermite) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
|
index 3b41a37f852c3b494b158e447eade9b030f26556..255eef45cb4e41a6936fafa225cbc75387327e7b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
|
@@ -93,6 +93,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
|
return this.apiScheduler;
|
|
};
|
|
// Paper end - Folia schedulers
|
|
+ // Folia start - region threading
|
|
+ public boolean isPurged() {
|
|
+ return this.taskScheduler.isRetired();
|
|
+ }
|
|
+ // Folia end - region threading
|
|
|
|
public CraftEntity(final CraftServer server, final Entity entity) {
|
|
this.server = server;
|
|
@@ -127,6 +132,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
|
}
|
|
|
|
public Entity getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return this.entity;
|
|
}
|
|
|
|
@@ -280,6 +286,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
|
|
|
@Override
|
|
public boolean teleport(Location location, TeleportCause cause, io.papermc.paper.entity.TeleportFlag... flags) {
|
|
+ // Folia start - region threading
|
|
+ if (true) {
|
|
+ throw new UnsupportedOperationException("Must use teleportAsync while in region threading");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
// Paper end
|
|
Preconditions.checkArgument(location != null, "location cannot be null");
|
|
location.checkFinite();
|
|
@@ -734,7 +745,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
|
ImmutableSet.Builder<Player> players = ImmutableSet.builder();
|
|
|
|
ServerLevel world = ((CraftWorld) this.getWorld()).getHandle();
|
|
- ChunkMap.TrackedEntity entityTracker = world.getChunkSource().chunkMap.entityMap.get(this.getEntityId());
|
|
+ ChunkMap.TrackedEntity entityTracker = this.getHandle().moonrise$getTrackedEntity(); // Folia - region threading
|
|
|
|
if (entityTracker != null) {
|
|
for (ServerPlayerConnection connection : entityTracker.seenBy) {
|
|
@@ -751,7 +762,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
|
Preconditions.checkArgument(player != null, "Player cannot be null");
|
|
|
|
ServerLevel world = ((CraftWorld) this.getWorld()).getHandle();
|
|
- ChunkMap.TrackedEntity entityTracker = world.getChunkSource().chunkMap.entityMap.get(this.getEntityId());
|
|
+ ChunkMap.TrackedEntity entityTracker = this.getHandle().moonrise$getTrackedEntity(); // Folia - region threading
|
|
if (entityTracker == null) return false;
|
|
|
|
return entityTracker.seenBy.contains(((CraftPlayer) player).getHandle().connection);
|
|
@@ -1047,7 +1058,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
|
}
|
|
|
|
ServerLevel world = ((CraftWorld) this.getWorld()).getHandle();
|
|
- ChunkMap.TrackedEntity entityTracker = world.getChunkSource().chunkMap.entityMap.get(this.getEntityId());
|
|
+ ChunkMap.TrackedEntity entityTracker = this.getHandle().moonrise$getTrackedEntity(); // Folia - region threading
|
|
|
|
if (entityTracker == null) {
|
|
return;
|
|
@@ -1064,7 +1075,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
|
}
|
|
|
|
ServerLevel world = ((CraftWorld) this.getWorld()).getHandle();
|
|
- ChunkMap.TrackedEntity entityTracker = world.getChunkSource().chunkMap.entityMap.get(this.getEntityId());
|
|
+ ChunkMap.TrackedEntity entityTracker = this.entity.moonrise$getTrackedEntity(); // Folia - region threading
|
|
|
|
if (entityTracker == null) {
|
|
return;
|
|
@@ -1098,29 +1109,43 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
|
location.checkFinite();
|
|
Location locationClone = location.clone(); // clone so we don't need to worry about mutations after this call.
|
|
|
|
- ServerLevel world = ((CraftWorld)locationClone.getWorld()).getHandle();
|
|
- CompletableFuture<Boolean> ret = new java.util.concurrent.CompletableFuture<>();
|
|
-
|
|
- world.loadChunksForMoveAsync(this.getHandle().getBoundingBoxAt(locationClone.getX(), locationClone.getY(), locationClone.getZ()),
|
|
- this instanceof CraftPlayer ? ca.spottedleaf.concurrentutil.util.Priority.HIGHER : ca.spottedleaf.concurrentutil.util.Priority.NORMAL, (list) -> {
|
|
- MinecraftServer.getServer().scheduleOnMain(() -> {
|
|
- final ServerChunkCache chunkCache = world.getChunkSource();
|
|
- for (final net.minecraft.world.level.chunk.ChunkAccess chunk : list) {
|
|
- chunkCache.addTicketAtLevel(TicketType.POST_TELEPORT, chunk.getPos(), 33);
|
|
- }
|
|
- try {
|
|
- ret.complete(CraftEntity.this.teleport(locationClone, cause, teleportFlags) ? Boolean.TRUE : Boolean.FALSE);
|
|
- } catch (Throwable throwable) {
|
|
- if (throwable instanceof ThreadDeath) {
|
|
- throw (ThreadDeath)throwable;
|
|
- }
|
|
- MinecraftServer.LOGGER.error("Failed to teleport entity " + CraftEntity.this, throwable);
|
|
- ret.completeExceptionally(throwable);
|
|
- }
|
|
- });
|
|
- });
|
|
+ // Folia start - region threading
|
|
+ java.util.concurrent.CompletableFuture<Boolean> ret = new java.util.concurrent.CompletableFuture<>();
|
|
+ java.util.function.Consumer<Entity> run = (Entity nmsEntity) -> {
|
|
+ boolean success = nmsEntity.teleportAsync(
|
|
+ ((CraftWorld)locationClone.getWorld()).getHandle(),
|
|
+ new net.minecraft.world.phys.Vec3(locationClone.getX(), locationClone.getY(), locationClone.getZ()),
|
|
+ locationClone.getYaw(), locationClone.getPitch(), net.minecraft.world.phys.Vec3.ZERO,
|
|
+ cause == null ? TeleportCause.UNKNOWN : cause,
|
|
+ Entity.TELEPORT_FLAG_LOAD_CHUNK | Entity.TELEPORT_FLAG_TELEPORT_PASSENGERS, // preserve behavior with old API: dismount the entity so it can teleport
|
|
+ (Entity entityTp) -> {
|
|
+ ret.complete(Boolean.TRUE);
|
|
+ }
|
|
+ );
|
|
+ if (!success) {
|
|
+ ret.complete(Boolean.FALSE);
|
|
+ }
|
|
+ };
|
|
+ if (org.bukkit.Bukkit.isOwnedByCurrentRegion(this)) {
|
|
+ run.accept(this.getHandle());
|
|
+ return ret;
|
|
+ }
|
|
+ boolean scheduled = this.taskScheduler.schedule(
|
|
+ // success
|
|
+ run,
|
|
+ // retired
|
|
+ (Entity nmsEntity) -> {
|
|
+ ret.complete(Boolean.FALSE);
|
|
+ },
|
|
+ 1L
|
|
+ );
|
|
+
|
|
+ if (!scheduled) {
|
|
+ ret.complete(Boolean.FALSE);
|
|
+ }
|
|
|
|
return ret;
|
|
+ // Folia end - region threading
|
|
}
|
|
// Paper end - more teleport API / async chunk API
|
|
|
|
@@ -1193,8 +1218,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
|
|
|
@Override
|
|
public Set<org.bukkit.entity.Player> getTrackedPlayers() {
|
|
- ServerLevel world = (net.minecraft.server.level.ServerLevel)this.entity.level();
|
|
- ChunkMap.TrackedEntity tracker = world == null ? null : world.getChunkSource().chunkMap.entityMap.get(this.entity.getId());
|
|
+ ChunkMap.TrackedEntity tracker = this.entity.moonrise$getTrackedEntity(); // Folia - region threading
|
|
if (tracker == null) {
|
|
return java.util.Collections.emptySet();
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java
|
|
index 73b50136708d61c71606a212640d11d8bfe1b4cf..7275c172769bfbefd003469bd74d31264a6ce4bb 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java
|
|
@@ -13,6 +13,7 @@ public class CraftEvoker extends CraftSpellcaster implements Evoker {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Evoker getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Evoker) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java
|
|
index 5bf6f079a1fb9c21146cd99ee447bb3c37d969be..44b51c8d47a12a995f5c0ca4ee14816e4fb4eb8e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java
|
|
@@ -13,6 +13,7 @@ public class CraftEvokerFangs extends CraftEntity implements EvokerFangs {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.EvokerFangs getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.EvokerFangs) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java
|
|
index 8cd7ba2f4b7ceaebd2ef698b5de80ca4bf1f1569..e2735c6e486783a85408bbd68d38ed5c6693c296 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java
|
|
@@ -12,6 +12,7 @@ public class CraftExperienceOrb extends CraftEntity implements ExperienceOrb {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.ExperienceOrb getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.ExperienceOrb) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java
|
|
index eacdc2467fae5ef7e853012329e69ceb9c514c84..3d045111440ce0d5a7b87828ee0e7e10d3f53d94 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java
|
|
@@ -16,6 +16,7 @@ public class CraftFallingBlock extends CraftEntity implements FallingBlock {
|
|
|
|
@Override
|
|
public FallingBlockEntity getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (FallingBlockEntity) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java
|
|
index 7e53e12c8ec5e7a2f6eeb78b1fa53cae853859dc..b2b14ee16d8902d10abc17f006a9360451ddb026 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java
|
|
@@ -16,6 +16,7 @@ public class CraftFireball extends AbstractProjectile implements Fireball {
|
|
|
|
@Override
|
|
public AbstractHurtingProjectile getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (AbstractHurtingProjectile) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java
|
|
index c64e78d548d42eff013582a72bf1f85beedbdea4..f0d27d32517607f8e77039a5292cc23056934ec1 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java
|
|
@@ -20,6 +20,7 @@ public class CraftFirework extends CraftProjectile implements Firework {
|
|
|
|
@Override
|
|
public FireworkRocketEntity getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (FireworkRocketEntity) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java
|
|
index 207f06a854d28cb836900da73d75be8d0ac01150..c219cdfc0c168d849a63d63c2dd47c279cf5b05f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java
|
|
@@ -12,6 +12,7 @@ public class CraftFish extends CraftWaterMob implements Fish, io.papermc.paper.e
|
|
|
|
@Override
|
|
public AbstractFish getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (AbstractFish) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java
|
|
index 327a686a20d86deeb6090dc9747e8367b57ba139..0720ae77e85a2f8dec4a926ed8583ccfef32a0ab 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java
|
|
@@ -23,6 +23,7 @@ public class CraftFishHook extends CraftProjectile implements FishHook {
|
|
|
|
@Override
|
|
public FishingHook getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (FishingHook) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java
|
|
index 974ed7be3f5b1b00c0f9e58b189370a8ddaeab55..08386d6448206356067c662e0153feecf666ed1c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java
|
|
@@ -12,6 +12,7 @@ public class CraftFlying extends CraftMob implements Flying {
|
|
|
|
@Override
|
|
public FlyingMob getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (FlyingMob) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java
|
|
index 8084bd6788658b485046910d711d399be25089e3..053c594c4fab97a3b6abc2852530490251a89481 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java
|
|
@@ -17,6 +17,7 @@ public class CraftFox extends CraftAnimals implements Fox {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Fox getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Fox) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java
|
|
index f4de532f280853d5a3dcf91d7ca14d552f7c297b..dc70e0a1b623166ccf97ff437712339854ecb983 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java
|
|
@@ -20,6 +20,7 @@ public class CraftFrog extends CraftAnimals implements org.bukkit.entity.Frog {
|
|
|
|
@Override
|
|
public Frog getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (Frog) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java
|
|
index 7ae83ee68faa8b8c18a8439d5c09361d4e86af27..49a1fc97dc7e02173b16cb16c616a62fa0142d29 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java
|
|
@@ -11,6 +11,7 @@ public class CraftGhast extends CraftFlying implements Ghast, CraftEnemy {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Ghast getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Ghast) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java
|
|
index 84c1dc9bc126a7afa4af69d3c9faf5483aee2d30..3fceb66f0c1c62cdb2ff59b76f5b3639ebf83c49 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java
|
|
@@ -11,6 +11,7 @@ public class CraftGiant extends CraftMonster implements Giant {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Giant getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Giant) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java
|
|
index b41bd0515849b18812fd878dd91a1537a1e41687..7e28b50e1e5dc50c064d4e2f72b97b317c3dae63 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java
|
|
@@ -11,6 +11,7 @@ public class CraftGlowItemFrame extends CraftItemFrame implements GlowItemFrame
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.decoration.GlowItemFrame getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.decoration.GlowItemFrame) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java
|
|
index dac2ac14a170dcb6994adefe85011b0b6ebdd2b2..4030c165e657b1bff55e3bbc870eb0de6bdf3e15 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java
|
|
@@ -12,6 +12,7 @@ public class CraftGlowSquid extends CraftSquid implements GlowSquid {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.GlowSquid getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.GlowSquid) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java
|
|
index 1fcab60ca6bd0ed390fd8b6eefa8da7ee33196c2..f06e8524c83a2a2e9bb16d629649f7a09cdaa6f9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java
|
|
@@ -11,6 +11,7 @@ public class CraftGoat extends CraftAnimals implements Goat {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.goat.Goat getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.goat.Goat) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java
|
|
index 9cb3dd093f7cca53dced95f3a6823a8ad33644e1..b828e387fc765f51a5de1e55b3fc63f9c9f49c38 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java
|
|
@@ -12,6 +12,7 @@ public class CraftGolem extends CraftCreature implements Golem {
|
|
|
|
@Override
|
|
public AbstractGolem getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (AbstractGolem) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java
|
|
index 2f68d8708150fd5d2ec662c4c5bcebcc1a0e378f..4d18df27a176007fb83fb7fabc9d468ca5fa1c66 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java
|
|
@@ -15,6 +15,7 @@ public class CraftGuardian extends CraftMonster implements Guardian {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Guardian getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Guardian) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java
|
|
index 49f5d3113ce912b95da7fccfadcfeb565172ab7f..599a672b1f70c5e333ed9a5ad80e1299bbb42c1b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java
|
|
@@ -60,6 +60,7 @@ public class CraftHanging extends CraftBlockAttachedEntity implements Hanging {
|
|
|
|
@Override
|
|
public HangingEntity getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (HangingEntity) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java
|
|
index 9565572393d616477a252e3449cc2bdd76f5a6b7..3cd54754745bb3a8d0729bc1cd55e9a3093a2860 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java
|
|
@@ -12,6 +12,7 @@ public class CraftHoglin extends CraftAnimals implements Hoglin, CraftEnemy {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.hoglin.Hoglin getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.hoglin.Hoglin) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java
|
|
index ef8073dfd4c5057a889099d62eaad51158e9ad44..4b062bffcd28904bed9259d28fd72d5253ccd8ba 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java
|
|
@@ -16,6 +16,7 @@ public class CraftHorse extends CraftAbstractHorse implements Horse {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.horse.Horse getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.horse.Horse) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
|
|
index 934eb5c668b09d871c62a17c8d0916723fa25695..5451d5fdbb947d63f1a2d116ac855608a0698308 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
|
|
@@ -96,6 +96,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
|
|
|
@Override
|
|
public Player getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (Player) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java
|
|
index fdc42e00b23eb4b37440745e00205b2e8952864d..a307ca3dae4c6327b107e57e8ac0b0abb5a159ef 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java
|
|
@@ -12,6 +12,7 @@ public class CraftIllager extends CraftRaider implements Illager {
|
|
|
|
@Override
|
|
public AbstractIllager getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (AbstractIllager) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java
|
|
index ed158e3a1167785e61b62d88f27d57bfad8b0878..fca6716be65aa1637559f9be953c0c090fede590 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java
|
|
@@ -11,6 +11,7 @@ public class CraftIllusioner extends CraftSpellcaster implements Illusioner, com
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Illusioner getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Illusioner) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java
|
|
index c4f2be2c47890853e4fa8e4e2953f245b42182f5..f23d03a68c1aa1fe06c10c8561b7af9a6aa62526 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java
|
|
@@ -14,6 +14,7 @@ public class CraftInteraction extends CraftEntity implements Interaction {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.Interaction getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.Interaction) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java
|
|
index 2d7be6f2afe32fd7555640989313052d37973e61..2401342da336e226b1b5ac86edf880b0e3aa4b5a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java
|
|
@@ -10,6 +10,7 @@ public class CraftIronGolem extends CraftGolem implements IronGolem {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.IronGolem getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.IronGolem) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
|
|
index ca656d97a00eef86773be9833fd908283002c885..2d47971a064582a9febfb33b4adb6d9a448f51e4 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
|
|
@@ -19,6 +19,7 @@ public class CraftItem extends CraftEntity implements Item {
|
|
|
|
@Override
|
|
public ItemEntity getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (ItemEntity) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java
|
|
index 41c3e5182e83552170e0573cbbed461db7e382fd..93921f15d64fe3d7d52cb38de8e1782144fe24ce 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java
|
|
@@ -15,6 +15,7 @@ public class CraftItemDisplay extends CraftDisplay implements ItemDisplay {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.Display.ItemDisplay getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.Display.ItemDisplay) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java
|
|
index 31aa6d0c2d727aaa0c26ec421eb5cd78c6d98ca2..1da6259bc7d7b9d6fd78256aa68e153c10217533 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java
|
|
@@ -19,6 +19,7 @@ public class CraftItemFrame extends CraftHanging implements ItemFrame {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.decoration.ItemFrame getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.decoration.ItemFrame) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java
|
|
index 742c0227962903fe7b1f86361886dbdfe2a3f2cd..ad960d6580ef93a0fcd623c01dcd90b09746f1a9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java
|
|
@@ -11,6 +11,7 @@ public class CraftLargeFireball extends CraftSizedFireball implements LargeFireb
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.LargeFireball getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.LargeFireball) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java
|
|
index 9022661233912809373b975cbf3ae169d38c0d9b..5f94d03c02db50084b419ee0771c6b35c5cc2224 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java
|
|
@@ -14,6 +14,7 @@ public class CraftLeash extends CraftBlockAttachedEntity implements LeashHitch {
|
|
|
|
@Override
|
|
public LeashFenceKnotEntity getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (LeashFenceKnotEntity) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java
|
|
index 32e426513f3e710abeda3363a4e2a08fe902c703..2655d6c0c58c27bd532d13fab723863c22d1f535 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java
|
|
@@ -14,6 +14,7 @@ public class CraftLightningStrike extends CraftEntity implements LightningStrike
|
|
|
|
@Override
|
|
public LightningBolt getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (LightningBolt) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
|
index 6b4e74b808b4fb6ac0143d5c82571657b2c49683..eca27a179edfd7a78767bd53d87665e981efb2c2 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
|
@@ -105,6 +105,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.LivingEntity getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.LivingEntity) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java
|
|
index 02deb9c37250144be9afa0fe55df2a49017a7070..620cdc4ca5234bc3214ac76f1c6acbc33fb89b5d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java
|
|
@@ -16,6 +16,7 @@ public class CraftLlama extends CraftChestedHorse implements Llama, com.destroys
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.horse.Llama getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.horse.Llama) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java
|
|
index 1425190d510f517d47c4cae85a50350e6556619a..540704b7cff12b103abe7568896ecf3533ed1a18 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java
|
|
@@ -11,6 +11,7 @@ public class CraftLlamaSpit extends AbstractProjectile implements LlamaSpit {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.LlamaSpit getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.LlamaSpit) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java
|
|
index 8720425ea9f9f31e43b505b7384e6add6c22c360..3b937e14bbc53308e80bcea3a8dde67afc06cc11 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java
|
|
@@ -11,6 +11,7 @@ public class CraftMagmaCube extends CraftSlime implements MagmaCube {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.MagmaCube getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.MagmaCube) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java
|
|
index 9a9302fe5694ca67d96b463462521c82ae71673c..65a4468ba70dac615ff8e2114707d258b01085fd 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java
|
|
@@ -11,6 +11,7 @@ public class CraftMarker extends CraftEntity implements Marker {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.Marker getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.Marker) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java
|
|
index 9c5caa4b9c11b265df6bafce72f43b633b6cc751..63d1bb9cc7c9527dde14b3c7dac4f666d0d2a92a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java
|
|
@@ -22,6 +22,7 @@ public abstract class CraftMinecart extends CraftVehicle implements Minecart {
|
|
|
|
@Override
|
|
public AbstractMinecart getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (AbstractMinecart) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java
|
|
index 4279824f8a0e06322a7d6110875513db01c7a826..19dbe0ff207b0647185bb5650a614b25bc9f133e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java
|
|
@@ -23,6 +23,7 @@ public class CraftMinecartCommand extends CraftMinecart implements CommandMineca
|
|
|
|
@Override
|
|
public MinecartCommandBlock getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (MinecartCommandBlock) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java
|
|
index a1f27890787b8d47dda99403f3198e6d69653488..da1914617a53eb1d8da0a09a3cd3e99cb8257fee 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java
|
|
@@ -12,6 +12,7 @@ public abstract class CraftMinecartContainer extends CraftMinecart implements co
|
|
|
|
@Override
|
|
public AbstractMinecartContainer getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (AbstractMinecartContainer) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java
|
|
index 65d808c2b088ff827de4292ac50af2d2595c7a29..486e52c9ecb4d96ce9cef98cf5cc484f559bb122 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java
|
|
@@ -13,6 +13,7 @@ public class CraftMinecartFurnace extends CraftMinecart implements PoweredMineca
|
|
|
|
@Override
|
|
public MinecartFurnace getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (MinecartFurnace) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java
|
|
index 7933ee5f732736d844726f61ad2e073a717168ec..6736e0e1dbce5c47e48df50d4d9832ded6a4cc5b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java
|
|
@@ -17,6 +17,7 @@ public class CraftMinecartHopper extends CraftMinecartContainer implements Hoppe
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.vehicle.MinecartHopper getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.vehicle.MinecartHopper) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java
|
|
index 704635f2023f23e9de6f4319afb50a670283b533..097efd43aea47bd0c3b66096fc02a15be6e1f43b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java
|
|
@@ -24,6 +24,7 @@ public class CraftMinecartMobSpawner extends CraftMinecart implements SpawnerMin
|
|
|
|
@Override
|
|
public MinecartSpawner getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (MinecartSpawner) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java
|
|
index bbe67e82a29a4bde87c3d988f778c2f2b70b5011..17c6f7533ba7f32010100bdcd37e07bf6b1e9c5d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java
|
|
@@ -14,6 +14,7 @@ public class CraftMinecartTNT extends CraftMinecart implements ExplosiveMinecart
|
|
|
|
@Override
|
|
public MinecartTNT getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (MinecartTNT) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
|
|
index e2e7743bdebbdc7ada2e08bfddc8c238ac94ee5c..54863f1c6b4c7a7cccbdc5127bea36188e55e1db 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
|
|
@@ -22,13 +22,14 @@ public abstract class CraftMob extends CraftLivingEntity implements Mob, io.pape
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.Mob getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.Mob) this.entity;
|
|
}
|
|
|
|
@Override
|
|
public void setHandle(net.minecraft.world.entity.Entity entity) {
|
|
super.setHandle(entity);
|
|
- this.paperPathfinder.setHandle(getHandle());
|
|
+ this.paperPathfinder.setHandle((net.minecraft.world.entity.Mob)getHandleRaw()); // Folia - region threading
|
|
}
|
|
|
|
@Override
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java
|
|
index 52c165714af356490988edfaf8e14d16dfa25da8..f1a6a22e1175b29a4236eac958f825846ded41d6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java
|
|
@@ -11,6 +11,7 @@ public class CraftMonster extends CraftCreature implements Monster, CraftEnemy {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Monster getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Monster) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java
|
|
index fb25c0f554a577ef43fbbe8cecf87735ad298e67..5ae8464f1c2ac29b86df900c55909d43bc84145e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java
|
|
@@ -21,6 +21,7 @@ public class CraftMushroomCow extends CraftAbstractCow implements MushroomCow, i
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.MushroomCow getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.MushroomCow) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java
|
|
index b4685c9773eed067879835f1ca8fdf26a256f13a..1b6dd649be7da144bb4d14d5ce0b544a4f9c97e6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java
|
|
@@ -11,6 +11,7 @@ public class CraftOcelot extends CraftAnimals implements Ocelot {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Ocelot getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Ocelot) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftOminousItemSpawner.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftOminousItemSpawner.java
|
|
index c8cc8a6956b607d0ca27fde9745f54730f1e55f3..39fc0acef1ea2fa90d00fc7a361d225c6e9a65fe 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftOminousItemSpawner.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftOminousItemSpawner.java
|
|
@@ -13,6 +13,7 @@ public class CraftOminousItemSpawner extends CraftEntity implements OminousItemS
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.OminousItemSpawner getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.OminousItemSpawner) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java
|
|
index 614a17330020b3f3dbabba1708838941a99a452f..265abf0042d28895075a4cd8e2b08e2d7d9da91b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java
|
|
@@ -16,6 +16,7 @@ public class CraftPainting extends CraftHanging implements Painting {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.decoration.Painting getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.decoration.Painting) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java
|
|
index df2877d055feab59506373775f4ca03e288d8c1f..0cf872287d52f4b1b700ee4a4798290d3f4aaa48 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java
|
|
@@ -12,6 +12,7 @@ public class CraftPanda extends CraftAnimals implements Panda {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Panda getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Panda) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java
|
|
index 60e1da70c682aed693bbecffcf8ef90ab70ae420..76d2c0ef6e4d1cff1d8841ffedaf94f8953e3687 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java
|
|
@@ -12,6 +12,7 @@ public class CraftParrot extends CraftTameableAnimal implements Parrot {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Parrot getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Parrot) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java
|
|
index ffeb5adc0c7fd78d19c3621c1b4e196969cd451a..46226e46aefb1b777245fe57875a956ff9366fe5 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java
|
|
@@ -15,6 +15,7 @@ public class CraftPhantom extends CraftFlying implements Phantom, CraftEnemy {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Phantom getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Phantom) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java
|
|
index 91f1e61e37ef8ab766cea8f9bb62f8e8e8d4a5f9..b163d8c779e8a561cf8606a0110c61ee0fcbaf69 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java
|
|
@@ -23,6 +23,7 @@ public class CraftPig extends CraftAnimals implements Pig {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Pig getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Pig) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java
|
|
index fa9d7a532e9a552c4839a5b4f86864304d30927c..20ca79530c5180be1036b0ab3b0d3fac2ad58017 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java
|
|
@@ -12,6 +12,7 @@ public class CraftPigZombie extends CraftZombie implements PigZombie {
|
|
|
|
@Override
|
|
public ZombifiedPiglin getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (ZombifiedPiglin) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java
|
|
index 849873a9f5c50a350c7fee499440e7cdef2bb719..24e54fc3bc263eec6b7a8c2aa48e638a55779025 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java
|
|
@@ -20,6 +20,7 @@ public class CraftPiglin extends CraftPiglinAbstract implements Piglin, com.dest
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.piglin.Piglin getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.piglin.Piglin) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java
|
|
index a30bbedafdbfb7463966291ee9b73c2f73b9fb51..e0841e4f90c5c300a19b31c60e104c19eb18c15a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java
|
|
@@ -13,6 +13,7 @@ public class CraftPiglinAbstract extends CraftMonster implements PiglinAbstract
|
|
|
|
@Override
|
|
public AbstractPiglin getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (AbstractPiglin) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java
|
|
index 2fa281466e63f75bb838bfe1f2433eebca2da397..6c403cade870cfed21f333aefb5c22da1064c6d3 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java
|
|
@@ -11,6 +11,7 @@ public class CraftPiglinBrute extends CraftPiglinAbstract implements PiglinBrute
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.piglin.PiglinBrute getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.piglin.PiglinBrute) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java
|
|
index d927938df4ac2b5de7ef2d26a3f0056b8310ddcd..2778d675b436642667780758c2e09d609c2442ec 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java
|
|
@@ -13,6 +13,7 @@ public class CraftPillager extends CraftIllager implements Pillager, com.destroy
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Pillager getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Pillager) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index 1db6276ae7a547860cf2c6f85b37ec4d6b33655a..0e32a9ad852e521ce9618acc1642d3748995b4bf 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -237,7 +237,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
|
|
@Override
|
|
public ServerPlayer getHandle() {
|
|
- return (ServerPlayer) this.entity;
|
|
+ return (ServerPlayer) this.entity; // Folia - region threading - no checks for players, as it's a total mess
|
|
}
|
|
|
|
@Override
|
|
@@ -687,7 +687,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
|
|
@Override
|
|
public void kickPlayer(String message) {
|
|
- org.spigotmc.AsyncCatcher.catchOp("player kick"); // Spigot
|
|
+ //org.spigotmc.AsyncCatcher.catchOp("player kick"); // Spigot // Folia - thread-safe now, as it will simply delay the kick
|
|
this.getHandle().transferCookieConnection.kickPlayer(CraftChatMessage.fromStringOrEmpty(message, true), org.bukkit.event.player.PlayerKickEvent.Cause.PLUGIN); // Paper - kick event cause
|
|
}
|
|
|
|
@@ -700,7 +700,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
|
|
@Override
|
|
public void kick(net.kyori.adventure.text.Component message, org.bukkit.event.player.PlayerKickEvent.Cause cause) {
|
|
- org.spigotmc.AsyncCatcher.catchOp("player kick");
|
|
+ //org.spigotmc.AsyncCatcher.catchOp("player kick"); // Folia - region threading - no longer needed
|
|
final ServerGamePacketListenerImpl connection = this.getHandle().connection;
|
|
if (connection != null) {
|
|
connection.disconnect(message == null ? net.kyori.adventure.text.Component.empty() : message, cause);
|
|
@@ -1408,6 +1408,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
|
|
@Override
|
|
public boolean teleport(Location location, org.bukkit.event.player.PlayerTeleportEvent.TeleportCause cause, io.papermc.paper.entity.TeleportFlag... flags) {
|
|
+ // Folia start - region threading
|
|
+ if (true) {
|
|
+ throw new UnsupportedOperationException("Must use teleportAsync while in region threading");
|
|
+ }
|
|
+ // Folia end - region threading
|
|
Set<io.papermc.paper.entity.TeleportFlag.Relative> relativeArguments;
|
|
Set<io.papermc.paper.entity.TeleportFlag> allFlags;
|
|
if (flags.length == 0) {
|
|
@@ -2075,7 +2080,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
private void unregisterEntity(Entity other) {
|
|
// Paper end
|
|
ChunkMap tracker = ((ServerLevel) this.getHandle().level()).getChunkSource().chunkMap;
|
|
- ChunkMap.TrackedEntity entry = tracker.entityMap.get(other.getId());
|
|
+ ChunkMap.TrackedEntity entry = other.moonrise$getTrackedEntity(); // Folia - region threading
|
|
if (entry != null) {
|
|
entry.removePlayer(this.getHandle());
|
|
}
|
|
@@ -2172,7 +2177,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
if (original != null) otherPlayer.setUUID(original); // Paper - uuid override
|
|
}
|
|
|
|
- ChunkMap.TrackedEntity entry = tracker.entityMap.get(other.getId());
|
|
+ ChunkMap.TrackedEntity entry = other.moonrise$getTrackedEntity(); // Folia - region threading
|
|
if (entry != null && !entry.seenBy.contains(this.getHandle().connection)) {
|
|
entry.updatePlayer(this.getHandle());
|
|
}
|
|
@@ -3327,7 +3332,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
@Override
|
|
public void respawn() {
|
|
if (CraftPlayer.this.getHealth() <= 0 && CraftPlayer.this.isOnline()) {
|
|
- CraftPlayer.this.server.getServer().getPlayerList().respawn(CraftPlayer.this.getHandle(), false, Entity.RemovalReason.KILLED, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason.PLUGIN);
|
|
+ CraftPlayer.this.getHandle().respawn(null, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason.PLUGIN); // Folia - region threading
|
|
}
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java
|
|
index 1e3b8eb597f6e72f9ce286dcb8be589d3e0e6a8c..a4876bbfc1b934b86706a83600658a7f563b2036 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java
|
|
@@ -11,6 +11,7 @@ public class CraftPolarBear extends CraftAnimals implements PolarBear {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.PolarBear getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.PolarBear) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java
|
|
index 94ae0f20772053379e5de86c9147bd43b01cbb84..396e48a6254788a25faeb12ed1bc9927aebceddf 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java
|
|
@@ -11,6 +11,7 @@ public abstract class CraftProjectile extends AbstractProjectile implements Proj
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.Projectile getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.Projectile) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java
|
|
index e63c3bdd1b9f244597489e65b5c36f4ec0f54fcb..6e6e052e3cbaf1457b1506d6d44f5bf75c1e2217 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java
|
|
@@ -12,6 +12,7 @@ public class CraftPufferFish extends CraftFish implements PufferFish {
|
|
|
|
@Override
|
|
public Pufferfish getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (Pufferfish) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java
|
|
index 994eb2d881fd3aa202f4893fd44ce50e83ebf6d9..65ba9b17f9066d69e7ac58a0bfa10b0e8e778c52 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java
|
|
@@ -11,6 +11,7 @@ public class CraftRabbit extends CraftAnimals implements Rabbit {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Rabbit getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Rabbit) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java
|
|
index 42d89992c82983cf4d9af3d681e568e6155f2743..0023b7bc73760b0e49c7d1702b2fab14fd4d0c47 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java
|
|
@@ -18,6 +18,7 @@ public abstract class CraftRaider extends CraftMonster implements Raider {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.raid.Raider getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.raid.Raider) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java
|
|
index ec2b5fbeca06534ea94f52f15970f64eea00c2c8..6df1bec46d06f3d402fad053b542dad65056c8de 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java
|
|
@@ -11,6 +11,7 @@ public class CraftRavager extends CraftRaider implements Ravager {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Ravager getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Ravager) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java
|
|
index 8b2c8924f66f0d958c6b07df3a643bc791da4f9a..2c130bfa7c48004aa503089def3d1d6612f82ab2 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java
|
|
@@ -12,6 +12,7 @@ public class CraftSalmon extends io.papermc.paper.entity.PaperSchoolableFish imp
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Salmon getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Salmon) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java
|
|
index 95c1535a1c6ca14281e3cdd264cd37bf5da9e9b3..29a080568d738cbffd003f32226094bc65ca2d10 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java
|
|
@@ -12,6 +12,7 @@ public class CraftSheep extends CraftAnimals implements Sheep, io.papermc.paper.
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.sheep.Sheep getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.sheep.Sheep) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java
|
|
index c23b88cada096a768c5cf8cfac484c7a9c0b4f1f..fac35a20720b8e0d0e3b2215e863be61af2ab2fc 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java
|
|
@@ -15,6 +15,7 @@ public class CraftShulker extends CraftGolem implements Shulker, CraftEnemy {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Shulker getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Shulker) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java
|
|
index 9a1a581e523d2ec0b8450546bc9ca6fd34127ede..9cd4ddbed036fa67c78f0d55d7103390832f6cd9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java
|
|
@@ -12,6 +12,7 @@ public class CraftShulkerBullet extends AbstractProjectile implements ShulkerBul
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.ShulkerBullet getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.ShulkerBullet) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java
|
|
index d5acee3d7b9e7085f05cb7355575a8551434ba1a..36e170881c88ea0df31175abc3c0cef033d594a4 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java
|
|
@@ -11,6 +11,7 @@ public class CraftSilverfish extends CraftMonster implements Silverfish {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Silverfish getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Silverfish) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java
|
|
index 579ec54530786c08a82e6875b80305b236a089e6..49eaddcb13a3bcffa88a69be10f15820aadc2a5c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java
|
|
@@ -15,6 +15,7 @@ public class CraftSizedFireball extends CraftFireball implements SizedFireball {
|
|
|
|
@Override
|
|
public Fireball getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (Fireball) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java
|
|
index af73ee0ce87d508387d385c706786855378c3a7e..8f12a2129d5c205b34a5db518d2f1780e7ea1ea9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java
|
|
@@ -12,6 +12,7 @@ public class CraftSkeleton extends CraftAbstractSkeleton implements Skeleton {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Skeleton getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Skeleton) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java
|
|
index f40729e9cf8cc5e9210a3165df980221429824f3..5d660c4f8095adc9821b8031d65bec6e1033f225 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java
|
|
@@ -12,6 +12,7 @@ public class CraftSkeletonHorse extends CraftAbstractHorse implements SkeletonHo
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.horse.SkeletonHorse getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.horse.SkeletonHorse) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
|
|
index 214e636701a51029e46cfaf4d374d1d21f92cf3d..1715cf16f400a432b3c19d2810d01590af46cff9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
|
|
@@ -11,6 +11,7 @@ public class CraftSlime extends CraftMob implements Slime, CraftEnemy {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Slime getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Slime) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java
|
|
index fbd3f86bfd0488efa3c642457b24b42dd90547db..481e2063f043f5dda19a345baf6406d9327660e2 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java
|
|
@@ -11,6 +11,7 @@ public class CraftSmallFireball extends CraftSizedFireball implements SmallFireb
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.SmallFireball getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.SmallFireball) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java
|
|
index 808b037b660e5ca3fc88f7bff700390f69208a6d..3917553ac82df4bd153994ae74b390183d1ca619 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java
|
|
@@ -18,6 +18,7 @@ public class CraftSniffer extends CraftAnimals implements Sniffer {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.sniffer.Sniffer getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.sniffer.Sniffer) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java
|
|
index b31f2a939e95bdc91e7fdaa53dfdb7ce45d05fde..8050313efa2473fa6118c62e14db3ff3023750fe 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java
|
|
@@ -11,6 +11,7 @@ public class CraftSnowball extends CraftThrowableProjectile implements Snowball
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.Snowball getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.Snowball) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java
|
|
index f03f9f94c51ef2f2eb24e4f65ec69b542b1c0a07..4bc3fd92cf0dd821438e72a4256c945a5fba6107 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java
|
|
@@ -12,6 +12,7 @@ public class CraftSnowman extends CraftGolem implements Snowman, com.destroystok
|
|
|
|
@Override
|
|
public SnowGolem getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (SnowGolem) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java
|
|
index 4afd6e013ac79c5afcbfb278c277424429ce4656..b8b40773cc42359d94b25e28d3632e48e80b2b1f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java
|
|
@@ -11,6 +11,7 @@ public class CraftSpectralArrow extends CraftAbstractArrow implements SpectralAr
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.SpectralArrow getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.SpectralArrow) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java
|
|
index b28ef9d0003c3adbeaa6866008506ab52b8f45a4..5e7a9f8808ff5a2452d3f21c5601a14f9ba4f402 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java
|
|
@@ -13,6 +13,7 @@ public class CraftSpellcaster extends CraftIllager implements Spellcaster {
|
|
|
|
@Override
|
|
public SpellcasterIllager getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (SpellcasterIllager) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java
|
|
index 90be754d6aa09290d915d5ea6aa6bd69047755f0..6bddbb2ae47ffe8b347a0804e71bc30a9dc70d34 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java
|
|
@@ -11,6 +11,7 @@ public class CraftSpider extends CraftMonster implements Spider {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Spider getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Spider) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java
|
|
index d1a49aaa259caf4a50bb2612020729c46fb1f81e..85dbd9da11d8d911ed4b1d2666bd2cfd1853c0b6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java
|
|
@@ -11,6 +11,7 @@ public class CraftSquid extends CraftAgeable implements Squid {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Squid getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Squid) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java
|
|
index 6c03adc7b0dd6b8491d408fc2728c84a52ec13b4..f98c6df5ddcd7641ea0a974c7967fd2b04ac62f6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java
|
|
@@ -16,6 +16,7 @@ public class CraftStrider extends CraftAnimals implements Strider {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Strider getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Strider) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java
|
|
index eea78db7f12f5976077663a9ff0c0e188ffa8849..b4851db732d5ddf2ce114952ad6f2b5c9cfd0a4a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java
|
|
@@ -14,6 +14,7 @@ public class CraftTNTPrimed extends CraftEntity implements TNTPrimed {
|
|
|
|
@Override
|
|
public PrimedTnt getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (PrimedTnt) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java
|
|
index 1efb6f720f34fc6995ad7babcf13498062a175d1..c9d3dfe24b9d2d1447cee22c9f31b12ba6a10096 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java
|
|
@@ -11,6 +11,7 @@ public class CraftTadpole extends CraftFish implements org.bukkit.entity.Tadpole
|
|
|
|
@Override
|
|
public Tadpole getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (Tadpole) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java
|
|
index d41b159e33fd09b892146b174b2c042a70e0c75c..1129cfdacaf508f70a13061aab463f38cb335b1d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java
|
|
@@ -17,6 +17,7 @@ public class CraftTameableAnimal extends CraftAnimals implements Tameable, Creat
|
|
|
|
@Override
|
|
public TamableAnimal getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (TamableAnimal) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java
|
|
index 36b40c84787aaa9df4eae4c88001c3b180132c26..bbbf2f7772db52eb21a7b687204143d933c648f6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java
|
|
@@ -15,6 +15,7 @@ public class CraftTextDisplay extends CraftDisplay implements TextDisplay {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.Display.TextDisplay getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.Display.TextDisplay) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java
|
|
index f34b81ac5a1aade7f2ccc3b0df9cce2f8a06f4ea..75a25c4b297a2f74e5aad403ec76866616634fd1 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java
|
|
@@ -14,6 +14,7 @@ public abstract class CraftThrowableProjectile extends CraftProjectile implement
|
|
|
|
@Override
|
|
public ThrowableItemProjectile getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (ThrowableItemProjectile) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java
|
|
index 9e4b555450d456b6d3f38d2df9a6434f458fb307..376a6e36b2b4c2d363f06c3575f16669538c42dd 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java
|
|
@@ -12,6 +12,7 @@ public class CraftThrownExpBottle extends CraftThrowableProjectile implements Th
|
|
|
|
@Override
|
|
public ThrownExperienceBottle getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (ThrownExperienceBottle) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownLingeringPotion.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownLingeringPotion.java
|
|
index 8be9f69889cd7033c4165a29b8a2ca9cfa15ce44..c0a5e1c4d2879fe94ba14387b68870b13b7594ea 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownLingeringPotion.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownLingeringPotion.java
|
|
@@ -18,6 +18,7 @@ public class CraftThrownLingeringPotion extends CraftThrownPotion implements Lin
|
|
|
|
@Override
|
|
public ThrownLingeringPotion getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (ThrownLingeringPotion) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java
|
|
index 61becdf5c4addd04e67b46d59ad4ad660f5c829a..4f0adba892966975cfd82bcc3a90ae548f139ff8 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java
|
|
@@ -21,6 +21,7 @@ public abstract class CraftThrownPotion extends CraftThrowableProjectile impleme
|
|
|
|
@Override
|
|
public AbstractThrownPotion getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (AbstractThrownPotion) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownSplashPotion.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownSplashPotion.java
|
|
index 8e7078878b625674f39119eacc636d9d7670e3da..1b354e3a63f664faf14086eaf14787e40a7d0015 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownSplashPotion.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownSplashPotion.java
|
|
@@ -18,6 +18,7 @@ public class CraftThrownSplashPotion extends CraftThrownPotion implements Splash
|
|
|
|
@Override
|
|
public ThrownSplashPotion getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (ThrownSplashPotion) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java
|
|
index 174332208a0e286c874b5672e0da8ed9d42d5909..9bcd108f6983a60ce732e0882fabdb726a90058c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java
|
|
@@ -11,6 +11,7 @@ public class CraftTraderLlama extends CraftLlama implements TraderLlama {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.horse.TraderLlama getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.horse.TraderLlama) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java
|
|
index 6d4f7d5164ebd3e8d7ad1f10165e05f6df85aade..c77ba416178dcd1c15ef0d0713899697c3421040 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java
|
|
@@ -14,6 +14,7 @@ public class CraftTrident extends CraftAbstractArrow implements Trident {
|
|
|
|
@Override
|
|
public ThrownTrident getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (ThrownTrident) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java
|
|
index 6ec2e173c58fd4fb84c06fe84f67eb3ecc054e38..e68952de02771c6f31faac7540f129650499e201 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java
|
|
@@ -12,6 +12,7 @@ public class CraftTropicalFish extends io.papermc.paper.entity.PaperSchoolableFi
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.TropicalFish getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.TropicalFish) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java
|
|
index 3aae36e3bd039dd44d99bd47e921784f954c0992..fab9b68355636d82bd305307d2de14e7f51c2f3c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java
|
|
@@ -12,6 +12,7 @@ public class CraftTurtle extends CraftAnimals implements Turtle {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.Turtle getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.Turtle) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java
|
|
index 227640d34df8d700264196444c4db00fff2f08a9..a46d06e2598e3b6bc594059e35d979824ecbf6df 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java
|
|
@@ -15,6 +15,7 @@ public class CraftVex extends CraftMonster implements Vex {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Vex getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Vex) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
|
index 8523cadccc67fa172041be0316b979a34fac6b26..2ec652c1675a999d7cf157a5a002aba9d58afa0d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
|
@@ -32,6 +32,7 @@ public class CraftVillager extends CraftAbstractVillager implements Villager {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.npc.Villager getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.npc.Villager) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java
|
|
index c09a3e065bbbc3d922a3727d5dde3866a6eaae2a..40d253f958cdeb980e1c4b3a4e5b3c3eedca9158 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java
|
|
@@ -16,6 +16,7 @@ public class CraftVillagerZombie extends CraftZombie implements ZombieVillager {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.ZombieVillager getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.ZombieVillager) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java
|
|
index 4207a1cd7572b6156f73d98a7ed8ff12e93d54ce..559a10d9211542e9679126f3f52b5ade03c7d487 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java
|
|
@@ -11,6 +11,7 @@ public class CraftVindicator extends CraftIllager implements Vindicator {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Vindicator getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Vindicator) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java
|
|
index e698cbf4f1e7733cac05ea9737e32dbef305b660..7ce7f3c183b22019b62671a056c19add6652fd7a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java
|
|
@@ -12,6 +12,7 @@ public class CraftWanderingTrader extends CraftAbstractVillager implements Wande
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.npc.WanderingTrader getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.npc.WanderingTrader) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
|
|
index 7a8f524e0c0dc3aae64f4ff21f2ef48e29848a29..356bb66a4b0b970ee0aacf3a8d90f93a4e28b969 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
|
|
@@ -17,6 +17,7 @@ public class CraftWarden extends CraftMonster implements org.bukkit.entity.Warde
|
|
|
|
@Override
|
|
public Warden getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (Warden) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java
|
|
index be249743cb53d022ef74d5454b6656f0250ecba3..cc3c16de45f5e2040d8bd310432bd949c0bf47b6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java
|
|
@@ -12,6 +12,7 @@ public class CraftWaterMob extends CraftCreature implements WaterMob {
|
|
|
|
@Override
|
|
public WaterAnimal getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (WaterAnimal) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java
|
|
index bb3301ff6a9305008a650824f4063699b2341bcc..2050ce6404683ec96949c41ed429f25abc50037b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java
|
|
@@ -11,6 +11,7 @@ public class CraftWindCharge extends CraftAbstractWindCharge implements WindChar
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.windcharge.WindCharge getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.windcharge.WindCharge) this.entity;
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java
|
|
index 007a11e4d617f7629b60230349fec8d5e8c169a6..a5c5cbdf8e825ae1afc9323267d9ccff9cfa854e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java
|
|
@@ -15,6 +15,7 @@ public class CraftWitch extends CraftRaider implements Witch, com.destroystokyo.
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Witch getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Witch) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java
|
|
index 2e11df97e5c8ff5fbf22ba87946d6018ac8bbbed..52d50e0a83218957caf1eb64f9cd0ac204bf325f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java
|
|
@@ -23,6 +23,7 @@ public class CraftWither extends CraftMonster implements Wither, com.destroystok
|
|
|
|
@Override
|
|
public WitherBoss getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (WitherBoss) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java
|
|
index 027849368189d1f28b26fe87c717b7a775b58dcb..54ff8cd5acd6b25b09c2ad1d54e8d6fce5ec8a32 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java
|
|
@@ -11,6 +11,7 @@ public class CraftWitherSkull extends CraftFireball implements WitherSkull {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.WitherSkull getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.projectile.WitherSkull) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java
|
|
index c3bd4cc1458bf62639d43854c2fdd0b479993b22..4bee15b6fde47d787d2bcebb863a60a98fcdac78 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java
|
|
@@ -20,6 +20,7 @@ public class CraftWolf extends CraftTameableAnimal implements Wolf {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.animal.wolf.Wolf getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.animal.wolf.Wolf) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java
|
|
index 583af956161dab331b14735a7bbf255d0d8c9588..475894ea8c13eb8b2e6bac4d711fce8b9a5b8f1f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java
|
|
@@ -11,6 +11,7 @@ public class CraftZoglin extends CraftMonster implements Zoglin {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Zoglin getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Zoglin) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java
|
|
index 9851c3890c9377d9fd1813f82766c2841ae48fd4..034b210ca024dcb3d9f59f1cdeef8c16c2cadccf 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java
|
|
@@ -14,6 +14,7 @@ public class CraftZombie extends CraftMonster implements Zombie {
|
|
|
|
@Override
|
|
public net.minecraft.world.entity.monster.Zombie getHandle() {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(this.entity, "Accessing entity state off owning region's thread"); // Folia - region threading
|
|
return (net.minecraft.world.entity.monster.Zombie) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
index 9774c9c72a910ccd919b903d92f4068c06d199d7..77871ce6d0eb0005893ea10b17e711ce87d7bfdd 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
@@ -808,7 +808,7 @@ public class CraftEventFactory {
|
|
return false;
|
|
}
|
|
|
|
- public static BlockPos sourceBlockOverride = null; // SPIGOT-7068: Add source block override, not the most elegant way but better than passing down a BlockPos up to five methods deep.
|
|
+ public static final ThreadLocal<BlockPos> sourceBlockOverrideRT = new ThreadLocal<>(); // SPIGOT-7068: Add source block override, not the most elegant way but better than passing down a BlockPos up to five methods deep. // Folia - region threading
|
|
|
|
public static boolean handleBlockSpreadEvent(LevelAccessor world, BlockPos source, BlockPos target, net.minecraft.world.level.block.state.BlockState state, int flags) {
|
|
return handleBlockSpreadEvent(world, source, target, state, flags, false);
|
|
@@ -824,7 +824,7 @@ public class CraftEventFactory {
|
|
CraftBlockState snapshot = CraftBlockStates.getBlockState(world, target);
|
|
snapshot.setData(state);
|
|
|
|
- BlockSpreadEvent event = new BlockSpreadEvent(snapshot.getBlock(), CraftBlock.at(world, CraftEventFactory.sourceBlockOverride != null ? CraftEventFactory.sourceBlockOverride : source), snapshot);
|
|
+ BlockSpreadEvent event = new BlockSpreadEvent(snapshot.getBlock(), CraftBlock.at(world, CraftEventFactory.sourceBlockOverrideRT.get() != null ? CraftEventFactory.sourceBlockOverrideRT.get() : source), snapshot); // Folia - region threading
|
|
if (event.callEvent()) {
|
|
boolean result = snapshot.place(flags);
|
|
return !checkSetResult || result;
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
|
|
index 1354ccfbf525e5e64483ac5f443cc2325ba63850..fad85bea8643a3a88ec5c4194de7a5060e81c136 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java
|
|
@@ -514,6 +514,7 @@ public class CraftScheduler implements BukkitScheduler {
|
|
}
|
|
|
|
protected CraftTask handle(final CraftTask task, final long delay) { // Paper
|
|
+ if (true) throw new UnsupportedOperationException(); // Folia - region threading
|
|
// Paper start
|
|
if (!this.isAsyncScheduler && !task.isSync()) {
|
|
this.asyncScheduler.handle(task, delay);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java
|
|
index f2878a49fdca9725854bc6ce88031f8a611c96e4..b959fe4311fc6cbae3dcc052ef4710f8c8aefec6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java
|
|
@@ -32,6 +32,7 @@ public final class CraftScoreboard implements org.bukkit.scoreboard.Scoreboard {
|
|
|
|
@Override
|
|
public Objective registerNewObjective(String name, Criteria criteria, net.kyori.adventure.text.Component displayName, RenderType renderType) throws IllegalArgumentException {
|
|
+ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet
|
|
if (displayName == null) {
|
|
displayName = net.kyori.adventure.text.Component.empty();
|
|
}
|
|
@@ -177,6 +178,7 @@ public final class CraftScoreboard implements org.bukkit.scoreboard.Scoreboard {
|
|
|
|
@Override
|
|
public Team registerNewTeam(String name) {
|
|
+ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet
|
|
Preconditions.checkArgument(name != null, "Team name cannot be null");
|
|
Preconditions.checkArgument(name.length() <= Short.MAX_VALUE, "Team name '%s' is longer than the limit of 32767 characters (%s)", name, name.length());
|
|
Preconditions.checkArgument(this.getHandle().getPlayerTeam(name) == null, "Team name '%s' is already in use", name);
|
|
@@ -204,6 +206,7 @@ public final class CraftScoreboard implements org.bukkit.scoreboard.Scoreboard {
|
|
|
|
@Override
|
|
public void clearSlot(DisplaySlot slot) {
|
|
+ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet
|
|
Preconditions.checkArgument(slot != null, "Slot cannot be null");
|
|
this.getHandle().setDisplayObjective(CraftScoreboardTranslations.fromBukkitSlot(slot), null);
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java
|
|
index 582cdc9e028c882dad0504fef4afd5a86f0f8431..c4a5769bd3d27a7d56e0fd29856d824794aa6c2e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java
|
|
@@ -39,6 +39,7 @@ public final class CraftScoreboardManager implements ScoreboardManager {
|
|
|
|
@Override
|
|
public CraftScoreboard getNewScoreboard() {
|
|
+ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet
|
|
org.spigotmc.AsyncCatcher.catchOp("scoreboard creation"); // Spigot
|
|
CraftScoreboard scoreboard = new CraftScoreboard(new ServerScoreboard(this.server));
|
|
if (io.papermc.paper.configuration.GlobalConfiguration.get().scoreboards.trackPluginScoreboards) {
|
|
@@ -59,6 +60,7 @@ public final class CraftScoreboardManager implements ScoreboardManager {
|
|
}
|
|
|
|
public void setPlayerBoard(CraftPlayer player, CraftScoreboard scoreboard) {
|
|
+ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet
|
|
net.minecraft.world.scores.Scoreboard oldBoard = this.getPlayerBoard(player).getHandle();
|
|
net.minecraft.world.scores.Scoreboard newBoard = scoreboard.getHandle();
|
|
if (oldBoard == newBoard) {
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
|
|
index a287ad5cce532229f2a514956d34a9358175bc45..c9fa6339f4821319b942b443fbe26d6b9b94ecb8 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
|
|
@@ -370,6 +370,12 @@ public final class CraftMagicNumbers implements UnsafeValues {
|
|
throw new InvalidPluginException("Unsupported API version " + descriptionFile.getAPIVersion());
|
|
}
|
|
|
|
+ // Folia start - block plugins not marked as supported
|
|
+ if (!descriptionFile.isFoliaSupported()) {
|
|
+ throw new InvalidPluginException("Plugin " + descriptionFile.getFullName() + " is not marked as supporting regionised multithreading");
|
|
+ }
|
|
+ // Folia end - block plugins not marked as supported
|
|
+
|
|
if (toCheck.isOlderThan(minimumVersion)) {
|
|
// Older than supported
|
|
throw new InvalidPluginException("Plugin API version " + descriptionFile.getAPIVersion() + " is lower than the minimum allowed version. Please update or replace it.");
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/util/DelegatedGeneratorAccess.java b/src/main/java/org/bukkit/craftbukkit/util/DelegatedGeneratorAccess.java
|
|
index 0e14f962b26823e49b192a4f97ec6c1f477ef0ff..4c01cff04b48ae93081f72558b71f9f695b97c59 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/util/DelegatedGeneratorAccess.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/util/DelegatedGeneratorAccess.java
|
|
@@ -66,6 +66,13 @@ public abstract class DelegatedGeneratorAccess implements WorldGenLevel {
|
|
this.delegate = delegate;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.level.StructureManager structureManager() {
|
|
+ return this.delegate.structureManager();
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
public WorldGenLevel getDelegate() {
|
|
return this.delegate;
|
|
}
|
|
@@ -793,4 +800,3 @@ public abstract class DelegatedGeneratorAccess implements WorldGenLevel {
|
|
return this.delegate.getChunkIfLoadedImmediately(x, z);
|
|
}
|
|
}
|
|
-
|
|
diff --git a/src/main/java/org/spigotmc/SpigotCommand.java b/src/main/java/org/spigotmc/SpigotCommand.java
|
|
index 1b60abf5f5951288f6d54f522621472673eada6e..4ea06cb7a9e9db0d7feb0981de90015320c092d4 100644
|
|
--- a/src/main/java/org/spigotmc/SpigotCommand.java
|
|
+++ b/src/main/java/org/spigotmc/SpigotCommand.java
|
|
@@ -35,6 +35,7 @@ public class SpigotCommand extends Command {
|
|
.build()
|
|
);
|
|
|
|
+ io.papermc.paper.threadedregions.RegionizedServer.getInstance().addTask(() -> { // Folia - region threading
|
|
MinecraftServer console = MinecraftServer.getServer();
|
|
org.spigotmc.SpigotConfig.init((File) console.options.valueOf("spigot-settings"));
|
|
for (ServerLevel world : console.getAllLevels()) {
|
|
@@ -43,6 +44,7 @@ public class SpigotCommand extends Command {
|
|
console.server.reloadCount++;
|
|
|
|
Command.broadcastCommandMessage(sender, text("Reload complete.", NamedTextColor.GREEN));
|
|
+ }); // Folia - region threading
|
|
}
|
|
|
|
return true;
|
|
diff --git a/src/main/java/org/spigotmc/SpigotConfig.java b/src/main/java/org/spigotmc/SpigotConfig.java
|
|
index ba539e6a37eba4bcee5061b6012829027102d740..d6661b132a2363761f06a8b8d6561dcb6d3ecd5e 100644
|
|
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
|
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
|
@@ -183,7 +183,7 @@ public class SpigotConfig {
|
|
SpigotConfig.restartOnCrash = SpigotConfig.getBoolean("settings.restart-on-crash", SpigotConfig.restartOnCrash);
|
|
SpigotConfig.restartScript = SpigotConfig.getString("settings.restart-script", SpigotConfig.restartScript);
|
|
SpigotConfig.restartMessage = SpigotConfig.transform(SpigotConfig.getString("messages.restart", "Server is restarting"));
|
|
- SpigotConfig.commands.put("restart", new RestartCommand("restart"));
|
|
+ //SpigotConfig.commands.put("restart", new RestartCommand("restart")); // Folia - region threading
|
|
}
|
|
|
|
public static boolean bungee;
|
|
@@ -229,7 +229,7 @@ public class SpigotConfig {
|
|
}
|
|
|
|
private static void tpsCommand() {
|
|
- SpigotConfig.commands.put("tps", new TicksPerSecondCommand("tps"));
|
|
+ //SpigotConfig.commands.put("tps", new TicksPerSecondCommand("tps")); // Folia - region threading
|
|
}
|
|
|
|
public static int playerSample;
|
|
diff --git a/src/main/java/org/spigotmc/SpigotWorldConfig.java b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
index 43c6240ec2855c0f668ce04de29d22a223d2612f..db90ec10300a0541162d456566479299a7eec3a4 100644
|
|
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
@@ -393,7 +393,7 @@ public class SpigotWorldConfig {
|
|
this.otherMultiplier = (float) this.getDouble("hunger.other-multiplier", 0.0);
|
|
}
|
|
|
|
- public int currentPrimedTnt = 0;
|
|
+ //public int currentPrimedTnt = 0; // Folia - region threading - moved to regionised world data
|
|
public int maxTntTicksPerTick;
|
|
private void maxTntPerTick() {
|
|
if (SpigotConfig.version < 7) {
|
|
diff --git a/src/test/java/io/papermc/paper/plugin/TestPluginMeta.java b/src/test/java/io/papermc/paper/plugin/TestPluginMeta.java
|
|
index ba271c35eb2804f94cfc893bf94affb9ae13d3ba..db9285c2ff0c805f5d9564b6e8520c33ea5bb65a 100644
|
|
--- a/src/test/java/io/papermc/paper/plugin/TestPluginMeta.java
|
|
+++ b/src/test/java/io/papermc/paper/plugin/TestPluginMeta.java
|
|
@@ -20,6 +20,13 @@ public class TestPluginMeta implements PluginMeta {
|
|
this.identifier = identifier;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public boolean isFoliaSupported() {
|
|
+ return true;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@Override
|
|
public @NotNull String getName() {
|
|
return this.identifier;
|