mirror of
https://github.com/PaperMC/Folia.git
synced 2025-05-06 02:59:19 +08:00
This is to assist in updating upstream, as the current file patch system is brittle and fails to handle conflicts well.
5333 lines
276 KiB
Diff
5333 lines
276 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 14e412ebf75b0e06ab53a1c8f9dd1be6ad1e2680..3f733319482fedcf7461f4b7466e84afeae1fc2b 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 ae = new AsyncPlayerChatEvent(this.async, player, this.craftbukkit$originalMessage, new LazyPlayerSet(this.server));
|
|
this.post(ae);
|
|
- if (listenersOnSyncEvent) {
|
|
+ if (false && listenersOnSyncEvent) { // Folia - region threading
|
|
final PlayerChatEvent se = new PlayerChatEvent(player, ae.getMessage(), ae.getFormat(), ae.getRecipients());
|
|
se.setCancelled(ae.isCancelled()); // propagate cancelled state
|
|
this.queueIfAsyncOrRunImmediately(new Waitable<Void>() {
|
|
@@ -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<Void>() {
|
|
@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 7b58b2d6297800c2dcdbf7539e5ab8e7703f39f1..5ca37a31d97a0fd068bf4ca3804456c91a6059f4 100644
|
|
--- a/src/main/java/io/papermc/paper/command/PaperCommands.java
|
|
+++ b/src/main/java/io/papermc/paper/command/PaperCommands.java
|
|
@@ -18,7 +18,7 @@ public final class PaperCommands {
|
|
static {
|
|
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
|
|
}
|
|
|
|
public static void registerCommands(final MinecraftServer server) {
|
|
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 42777adb028fe282c1619aeb5431c442ad5df0d0..de88c3d9d3523a7bd3f3dcbfc62d72658192521d 100644
|
|
--- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
|
+++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java
|
|
@@ -398,4 +398,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 d7c9acaffdcff5e35e026ae90a3e521bab13b074..321c4cad4f84c57f56e5bec3bcdbbef8823f70fe 100644
|
|
--- a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java
|
|
+++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java
|
|
@@ -493,6 +493,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 41bf71d116ffc5431586ce54abba7f8def6c1dcf..1cf9a7677449ab8f03fb23d835e3fadce61542db 100644
|
|
--- a/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java
|
|
+++ b/src/main/java/io/papermc/paper/entity/PaperSchoolableFish.java
|
|
@@ -11,8 +11,16 @@ public class PaperSchoolableFish extends CraftFish implements SchoolableFish {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public AbstractSchoolingFish getHandleRaw() {
|
|
+ return (AbstractSchoolingFish)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
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 a4ac34ebb58a404f4fca7e763e61d4ab05ee3af4..4dcec640f5870d713bd3b98389a45dbef8a4ea8a 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());
|
|
}
|
|
@@ -148,6 +149,30 @@ public final class MCUtil {
|
|
return new Location(world.getWorld(), pos.getX(), pos.getY(), pos.getZ());
|
|
}
|
|
|
|
+ // Folia start - TODO MERGE INTO MCUTIL
|
|
+ /**
|
|
+ * Converts a NMS World/Vector to Bukkit Location
|
|
+ * @param world
|
|
+ * @param pos
|
|
+ * @return
|
|
+ */
|
|
+ public static Location toLocation(Level world, Vec3 pos) {
|
|
+ return new Location(world.getWorld(), pos.x(), pos.y(), pos.z());
|
|
+ }
|
|
+
|
|
+ /**
|
|
+ * Converts a NMS World/Vector to Bukkit Location
|
|
+ * @param world
|
|
+ * @param pos
|
|
+ * @param yaw
|
|
+ * @param pitch
|
|
+ * @return
|
|
+ */
|
|
+ public static Location toLocation(Level world, Vec3 pos, float yaw, float pitch) {
|
|
+ return new Location(world.getWorld(), pos.x(), pos.y(), pos.z(), yaw, pitch);
|
|
+ }
|
|
+ // Folia end - TODO MERGE INTO MCUTIL
|
|
+
|
|
public static BlockPos toBlockPosition(Location loc) {
|
|
return new BlockPos(loc.getBlockX(), loc.getBlockY(), loc.getBlockZ());
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
index cf5bcb0ebc79c318d106695e39ad2883a5734aa1..d1d7f1fe4fa20355af40e5d77d2c3fa55bdd0ecd 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java
|
|
@@ -317,7 +317,7 @@ public final class CraftServer implements Server {
|
|
public final io.papermc.paper.SparksFly spark; // Paper - spark
|
|
|
|
// 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();
|
|
|
|
@@ -394,7 +394,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
|
|
|
|
@@ -989,6 +989,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;
|
|
|
|
@@ -1008,12 +1011,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;
|
|
}
|
|
@@ -1285,6 +1322,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");
|
|
@@ -1482,6 +1520,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;
|
|
@@ -3079,11 +3118,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
|
|
}
|
|
|
|
// Paper start - adventure sounds
|
|
@@ -3254,7 +3309,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 1439d282167dc8a2e66f4896849153b810112988..82d26889661a944e057be0c450fb5a296122ea8e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java
|
|
@@ -227,7 +227,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
|
|
@@ -294,7 +294,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
|
|
@@ -365,6 +365,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);
|
|
@@ -395,10 +396,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) {
|
|
@@ -455,7 +456,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;
|
|
}
|
|
@@ -472,6 +473,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;
|
|
|
|
@@ -522,7 +524,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
|
|
|
|
@@ -562,7 +564,7 @@ public class CraftWorld extends CraftRegionAccessor implements World {
|
|
|
|
final DistanceManager distanceManager = this.world.getChunkSource().chunkMap.distanceManager;
|
|
if (distanceManager.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;
|
|
}
|
|
|
|
@@ -616,21 +618,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().getForcedChunks().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().getForcedChunks()) {
|
|
- 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);
|
|
@@ -750,13 +755,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 flag = ((CraftBlockState) blockstate).getFlag();
|
|
@@ -764,10 +771,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, flag, 512);
|
|
}
|
|
- 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;
|
|
}
|
|
}
|
|
@@ -801,6 +808,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()) % 24000;
|
|
if (margin < 0) margin += 24000;
|
|
this.setFullTime(this.getFullTime() + margin);
|
|
@@ -813,6 +821,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);
|
|
@@ -840,7 +849,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
|
|
@@ -865,6 +874,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
|
|
@@ -874,6 +884,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
|
|
}
|
|
@@ -956,6 +967,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);
|
|
@@ -986,6 +998,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);
|
|
|
|
@@ -1316,6 +1329,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)
|
|
@@ -1328,6 +1342,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);
|
|
}
|
|
|
|
@@ -1338,6 +1353,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)
|
|
@@ -1350,6 +1366,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);
|
|
}
|
|
|
|
@@ -1360,6 +1377,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);
|
|
}
|
|
|
|
@@ -1558,6 +1576,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 {
|
|
@@ -1626,6 +1645,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;
|
|
}
|
|
|
|
@@ -1638,6 +1658,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);
|
|
}
|
|
|
|
@@ -1650,6 +1671,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);
|
|
}
|
|
|
|
@@ -1662,6 +1684,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);
|
|
}
|
|
|
|
@@ -1674,6 +1697,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);
|
|
}
|
|
|
|
@@ -1686,6 +1710,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);
|
|
}
|
|
|
|
@@ -1698,11 +1723,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);
|
|
|
|
@@ -1719,21 +1746,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);
|
|
}
|
|
|
|
@@ -1746,6 +1777,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);
|
|
}
|
|
|
|
@@ -1758,6 +1790,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);
|
|
}
|
|
|
|
@@ -1770,6 +1803,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);
|
|
}
|
|
|
|
@@ -1782,6 +1816,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);
|
|
}
|
|
|
|
@@ -1794,6 +1829,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);
|
|
}
|
|
|
|
@@ -1806,6 +1842,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);
|
|
}
|
|
|
|
@@ -1828,6 +1865,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);
|
|
|
|
@@ -1910,7 +1948,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);
|
|
}
|
|
@@ -1931,7 +1969,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);
|
|
}
|
|
@@ -2014,6 +2052,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;
|
|
|
|
@@ -2062,6 +2101,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");
|
|
|
|
@@ -2289,6 +2329,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
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlock.java
|
|
index 5cb69d0b822e11a99a96aef4f59986d083b079f4..a2f35f6d057b098a016a40094d84c54cb5e174fd 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);
|
|
}
|
|
|
|
@@ -157,6 +162,11 @@ public class CraftBlock implements Block {
|
|
}
|
|
|
|
private void setData(final byte data, int flag) {
|
|
+ // 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), flag);
|
|
}
|
|
|
|
@@ -198,6 +208,11 @@ public class CraftBlock implements Block {
|
|
}
|
|
|
|
public static boolean setTypeAndData(LevelAccessor world, BlockPos position, net.minecraft.world.level.block.state.BlockState old, net.minecraft.world.level.block.state.BlockState blockData, boolean applyPhysics) {
|
|
+ // Folia start - region threading
|
|
+ if (world instanceof ServerLevel serverWorld) {
|
|
+ ca.spottedleaf.moonrise.common.util.TickThread.ensureTickThread(serverWorld, position, "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 tile entity cleanup
|
|
if (old.hasBlockEntity() && blockData.getBlock() != old.getBlock()) { // SPIGOT-3725 remove old tile entity if block changes
|
|
// SPIGOT-4612: faster - just clear tile
|
|
@@ -343,18 +358,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);
|
|
}
|
|
|
|
@@ -402,6 +432,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);
|
|
@@ -414,6 +449,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();
|
|
@@ -500,6 +540,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 iblockdata = this.getNMS();
|
|
@@ -543,21 +588,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.size() > 0) {
|
|
- TreeType treeType = SaplingBlock.treeType;
|
|
- SaplingBlock.treeType = null;
|
|
- List<BlockState> blocks = new ArrayList<>(world.capturedBlockStates.values());
|
|
- world.capturedBlockStates.clear();
|
|
+ if (worldData.capturedBlockStates.size() > 0) { // Folia - region threading
|
|
+ TreeType treeType = SaplingBlock.treeTypeRT.get(); // Folia - region threading
|
|
+ SaplingBlock.treeTypeRT.set(null); // Folia - region threading
|
|
+ List<BlockState> blocks = 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();
|
|
@@ -719,18 +780,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 768d3f93da2522d467183654260a8bd8653588b1..7a6b24f10debaaf6426c752958886f78f3bfe573 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 tileEntity;
|
|
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 tileEntity) {
|
|
super(world, tileEntity.getBlockPos(), tileEntity.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 (this.snapshotDisabled) { // Folia - region threading
|
|
this.snapshot = this.tileEntity;
|
|
} else {
|
|
this.snapshot = this.createSnapshot(tileEntity);
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
|
|
index fa63a6cfcfcc4eee4503a82d85333c139c8c8b2b..def7749e6dc4ae8351b72deefc75936629c33d7f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockState.java
|
|
@@ -215,6 +215,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;
|
|
@@ -350,6 +356,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 56453454cbd4b9e9270fc833f8ab38d5fa7a3763..69e8a170a80c2fde79bc015cd54879896c110d9d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBlockStates.java
|
|
@@ -249,8 +249,8 @@ public final class CraftBlockStates {
|
|
net.minecraft.world.level.block.state.BlockState blockData = craftBlock.getNMS();
|
|
BlockEntity tileEntity = craftBlock.getHandle().getBlockEntity(blockPosition);
|
|
// Paper start - block state snapshots
|
|
- 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 {
|
|
// Paper end
|
|
CraftBlockState blockState = CraftBlockStates.getBlockState(world, blockPosition, blockData, tileEntity);
|
|
@@ -258,7 +258,7 @@ public final class CraftBlockStates {
|
|
return blockState;
|
|
// Paper start
|
|
} finally {
|
|
- CraftBlockEntityState.DISABLE_SNAPSHOT = prev;
|
|
+ CraftBlockEntityState.DISABLE_SNAPSHOT.set(Boolean.valueOf(prev)); // Folia - region threading
|
|
}
|
|
// Paper end
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java
|
|
index a45e658996e483e9a21cfd8178153ddb7b87ae69..25303f144422469350fdc6f84320b16bcc9f6e0c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/command/ConsoleCommandCompleter.java
|
|
@@ -50,7 +50,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
|
|
@@ -98,7 +98,7 @@ public class ConsoleCommandCompleter implements Completer {
|
|
return tabEvent.isCancelled() ? Collections.EMPTY_LIST : 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 e8d82054d17ef1859eb57f3871043b3fe3de22b9..6fae4697512e6e1ded15938d4cdce93e7e2eef39 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;
|
|
|
|
@@ -38,6 +39,13 @@ public abstract class AbstractProjectile extends CraftEntity implements Projecti
|
|
this.getHandle().hasBeenShot = beenShot;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.projectile.Projectile getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.projectile.Projectile)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@Override
|
|
public boolean canHitEntity(org.bukkit.entity.Entity entity) {
|
|
return this.getHandle().canHitEntityPublic(((CraftEntity) entity).getHandle());
|
|
@@ -55,6 +63,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) entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java
|
|
index e7fe8afd1171783ccef891c59413c57d09493509..f9a0b1ffa9fd356b7764ae78cde0c6d1dad3f75f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractArrow.java
|
|
@@ -142,6 +142,7 @@ public class CraftAbstractArrow extends AbstractProjectile implements AbstractAr
|
|
|
|
@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/CraftAbstractHorse.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java
|
|
index 467693a60786688b753cebac3b0a88898e332eee..5c6bd9186e47d1414c5e7bd4fa46a8e305390908 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractHorse.java
|
|
@@ -17,8 +17,16 @@ public abstract class CraftAbstractHorse extends CraftAnimals implements Abstrac
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.horse.AbstractHorse getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.horse.AbstractHorse)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 5beaa2bb0d58fe477ce8d2de8b77600d3b416d8c..c8406f2d83f4c8b60efec0de546f45760c759a2a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractSkeleton.java
|
|
@@ -15,8 +15,17 @@ public abstract class CraftAbstractSkeleton extends CraftMonster implements Abst
|
|
throw new UnsupportedOperationException("Not supported.");
|
|
}
|
|
// Paper start
|
|
+
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.AbstractSkeleton getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.AbstractSkeleton)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
// Paper end
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java
|
|
index 3199f04d00836a0a51547c679f3f3c80d00da502..a1959919109fe04d4b829dcd2d244842ab05fe13 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractVillager.java
|
|
@@ -15,8 +15,16 @@ public class CraftAbstractVillager extends CraftAgeable implements CraftMerchant
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.npc.AbstractVillager getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.npc.AbstractVillager)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 59df9031e8b4466c8687671d745318e7ee83d271..b91b11c2e1ed5df27e6ff99eb5cc25b931e0b79d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAbstractWindCharge.java
|
|
@@ -17,6 +17,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 ae16e8d1bfe8e9315391510eddb367a3fbdc9e03..2b165c209f65de06f55ed51817e33b92463a2987 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAgeable.java
|
|
@@ -63,8 +63,16 @@ public class CraftAgeable extends CraftCreature implements Ageable {
|
|
}
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public AgeableMob getHandleRaw() {
|
|
+ return (AgeableMob)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 c64918175ec08d20cde2bda9e0cac8b474385fe0..0df0824d56d62f7b82fcca8f0b9a6175f012e8d3 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAllay.java
|
|
@@ -16,8 +16,16 @@ public class CraftAllay extends CraftCreature implements org.bukkit.entity.Allay
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public Allay getHandleRaw() {
|
|
+ return (Allay)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 2a2f9f0907eafcabef26a41d20f64a0aa953d181..9d56293083aac5c14e8333366fd4cf6148486585 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAmbient.java
|
|
@@ -9,8 +9,16 @@ public class CraftAmbient extends CraftMob implements Ambient {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public AmbientCreature getHandleRaw() {
|
|
+ return (AmbientCreature)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 ab42bc721d5b6c17c2ca6c7153b757571aea05e8..e48528689d49c01aa2b0c1599c66f3c1e94c9cd6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAnimals.java
|
|
@@ -15,8 +15,16 @@ public class CraftAnimals extends CraftAgeable implements Animals {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public Animal getHandleRaw() {
|
|
+ return (Animal)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 f9c113dc018702159345240d6d0de85767afa0c3..0872943dc4e5895728d12289cb23682c9bef290c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAreaEffectCloud.java
|
|
@@ -28,8 +28,16 @@ public class CraftAreaEffectCloud extends CraftEntity implements AreaEffectCloud
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.AreaEffectCloud getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.AreaEffectCloud)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java
|
|
index e7f2d8de25a489d7f52c78c750e6f7f9b8fee177..75191dd32bba12b5742702a2af151b1079a6b48f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmadillo.java
|
|
@@ -11,6 +11,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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
|
|
index 184fe8257e5ffb0ef090ffa2833786a4db8b59ea..6c5358f77be3e46860b0c3c49d36b25286af6851 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftArmorStand.java
|
|
@@ -20,8 +20,16 @@ public class CraftArmorStand extends CraftLivingEntity implements ArmorStand {
|
|
return "CraftArmorStand";
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.decoration.ArmorStand getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.decoration.ArmorStand)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftArrow.java
|
|
index 5661d72e70c082672e22f3ddbd67b88eb57a3c18..f814660be50fdfbf3866bd5d59a62ea4ce0d5c6c 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;
|
|
}
|
|
|
|
@@ -90,6 +91,13 @@ public class CraftArrow extends CraftAbstractArrow implements Arrow {
|
|
return true;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.projectile.AbstractArrow getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.projectile.AbstractArrow)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@Override
|
|
public void setBasePotionData(PotionData data) {
|
|
this.setBasePotionType(CraftPotionUtil.fromBukkit(data));
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java
|
|
index cbfca242f820d238b112f8ce64e9de8398c48a1c..efbfc8480bddf901fe0acebc06408ee625b57418 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftAxolotl.java
|
|
@@ -10,8 +10,16 @@ public class CraftAxolotl extends CraftAnimals implements Axolotl, io.papermc.pa
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.axolotl.Axolotl getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.axolotl.Axolotl)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java
|
|
index 1bb72f28085f3885bec068b586ec222111044884..cb56b6690a385e76197cfc0667ebdec72f0cd096 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBat.java
|
|
@@ -8,8 +8,16 @@ public class CraftBat extends CraftAmbient implements Bat {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.ambient.Bat getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.ambient.Bat)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 3dac93b0ab5d5acf5b33dc4b0efed60319eb657b..6ade6ca1a32f824271b7deeabc4dd154ae5a67b6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBee.java
|
|
@@ -13,8 +13,16 @@ public class CraftBee extends CraftAnimals implements Bee {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Bee getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Bee)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 a4c9c73691300880777483b0beb17e1bd6779d06..05951297aaed63c22f038703ad6fb68dfcec5227 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlaze.java
|
|
@@ -8,8 +8,16 @@ public class CraftBlaze extends CraftMonster implements Blaze {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Blaze getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Blaze)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 5b0dd9aae3fbd9257d0375a37a07c812199d64a2..d22538ecda7685093f400ee560ae53c206ed62b2 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockAttachedEntity.java
|
|
@@ -8,8 +8,16 @@ public class CraftBlockAttachedEntity extends CraftEntity {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public BlockAttachedEntity getHandleRaw() {
|
|
+ return (BlockAttachedEntity)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 dd91de8f24c27b9318c2a898a49991d74c100bff..b951571eda47da97ee73ba7d9b71b4f6cf0373d6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBlockDisplay.java
|
|
@@ -12,8 +12,16 @@ public class CraftBlockDisplay extends CraftDisplay implements BlockDisplay {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.Display.BlockDisplay getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.Display.BlockDisplay)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java
|
|
index 2a2839c31989d127739d829159a8b6e5b9a5210b..fb87800c02d5ff9bcb197170c11e305273cea083 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftBoat.java
|
|
@@ -101,8 +101,16 @@ public abstract class CraftBoat extends CraftVehicle implements Boat, io.papermc
|
|
return CraftBoat.boatStatusFromNms(this.getHandle().status);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public AbstractBoat getHandleRaw() {
|
|
+ return (AbstractBoat)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 e8e4704304504e69c7964dcd4df8ce5db9e92bf6..20630858d00fa23e911ec38788df971a12f98c6a 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 7648e2c700a55f9c0b3539dc720903238d138d54..b21f1654ddd2a4d7c85baae44fef10842905fbf9 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 e88e52a9b8a4d2d750101b0529cbe2a9976e91dd..0eadb421cc505c4639f68c932d284e8ef56f7f57 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 80e571c977db5cdf43bfbfce035f37a3fa325c95..562ac40645f98452d0d923146d4e95c59b029f5b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCamel.java
|
|
@@ -11,8 +11,16 @@ public class CraftCamel extends CraftAbstractHorse implements Camel {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.camel.Camel getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.camel.Camel)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java
|
|
index 1a09082fcde81e3834c98903bda47aef90391870..ab36b4283e3fbccca491ff3ba93ce4d9d89c1ba8 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCat.java
|
|
@@ -18,8 +18,16 @@ public class CraftCat extends CraftTameableAnimal implements Cat {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Cat getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Cat)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java
|
|
index 4f661fbdb860cf550da0d952b775fe6f990b43b3..2dfbfbbe98815a303516d88e6ea96b9fba9b7f39 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCaveSpider.java
|
|
@@ -8,8 +8,16 @@ public class CraftCaveSpider extends CraftSpider implements CaveSpider {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.CaveSpider getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.CaveSpider)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 a1e04bb965f18ffd07e2f5bf827c5e4ddd6aeeda..8ba8189ddff9f35a60c31015cccf6480246cf21c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChestBoat.java
|
|
@@ -15,8 +15,16 @@ public abstract class CraftChestBoat extends CraftBoat implements org.bukkit.ent
|
|
this.inventory = new CraftInventory(entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public AbstractChestBoat getHandleRaw() {
|
|
+ return (AbstractChestBoat)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 40ee96e31dea64ab3a77553dbb6daad001736f2e..9cdb7e5ce6883709b709e88037e70a1953d755a0 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChestedHorse.java
|
|
@@ -10,8 +10,16 @@ public abstract class CraftChestedHorse extends CraftAbstractHorse implements Ch
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public AbstractChestedHorse getHandleRaw() {
|
|
+ return (AbstractChestedHorse)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java
|
|
index 96f6e2fd9c6b20d34122abfe5c7fba732502d5a0..2546ce4d7a25bfe6be1533bfbc770726815e8148 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftChicken.java
|
|
@@ -9,8 +9,16 @@ public class CraftChicken extends CraftAnimals implements Chicken {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Chicken getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Chicken)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 63e6b07e3b159c74d9ef17be20b5ab43d07f0f5f..44fa01798eed8368fa0187cecb88de830d7d2e16 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCod.java
|
|
@@ -9,8 +9,16 @@ public class CraftCod extends io.papermc.paper.entity.PaperSchoolableFish implem
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Cod getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Cod)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java
|
|
index c2583982d84c736639eec511daba594d7806a628..d31bba789c51bc344d21a357f54dd8ef55b88873 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftComplexPart.java
|
|
@@ -32,8 +32,16 @@ public class CraftComplexPart extends CraftEntity implements ComplexEntityPart {
|
|
return this.getParent().isValid();
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public EnderDragonPart getHandleRaw() {
|
|
+ return (EnderDragonPart)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 7babc404e4920cd264206d4e83b1be6f841cdb8c..7a5312ab0fe3a21907a1d6b82fab9b4dce15c44e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCow.java
|
|
@@ -9,8 +9,16 @@ public class CraftCow extends CraftAnimals implements Cow {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Cow getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Cow)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 267f3c85058ef7c73e372c04493cfa6c907e44bb..df838d551fa08895e390eb793506e2f3697555f4 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreaking.java
|
|
@@ -9,8 +9,16 @@ public class CraftCreaking extends CraftMonster implements org.bukkit.entity.Cre
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public Creaking getHandleRaw() {
|
|
+ return (Creaking)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 664d9c1793b823ed03f198a936f2ebd9b7695898..6cbe6b6438296b6137ceea01b21ab6a69da2cc9c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreature.java
|
|
@@ -9,8 +9,16 @@ public class CraftCreature extends CraftMob implements Creature {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public PathfinderMob getHandleRaw() {
|
|
+ return (PathfinderMob)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 42dd26b9170f7d217d73f725a6b8440b45ac2190..e59a29ee70e8b1f525c370bb711fa77a5732c500 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftCreeper.java
|
|
@@ -87,6 +87,13 @@ public class CraftCreeper extends CraftMonster implements Creeper {
|
|
this.getHandle().ignite();
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Creeper getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Creeper)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@Override
|
|
public Entity getIgniter() {
|
|
return (this.getHandle().entityIgniter != null) ? this.getHandle().entityIgniter.getBukkitEntity() : null;
|
|
@@ -94,6 +101,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 48eeb1d9ba0ad6f895bfe507a6fbe4b9c9530e47..65301b94dc8d813c487deff24cd04b379e666e98 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDisplay.java
|
|
@@ -12,8 +12,16 @@ public class CraftDisplay extends CraftEntity implements Display {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.Display getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.Display)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java
|
|
index 83867b9c5497e6e793b21c482646cc419587e182..55dfb073e4355e68855580f26464af6cf1c6ac33 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDolphin.java
|
|
@@ -9,8 +9,16 @@ public class CraftDolphin extends CraftAgeable implements Dolphin {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Dolphin getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Dolphin)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java
|
|
index 51fc4acae9f20e8891069704e4a27f212b870766..2b27d3e685ee1882dc6ecc1ceaee2fb52f1b548f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftDrowned.java
|
|
@@ -9,8 +9,16 @@ public class CraftDrowned extends CraftZombie implements Drowned, com.destroysto
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Drowned getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Drowned)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 010e9e922a6e30df4e40da151cfd398d1062633e..8f36a715a5fdf1595cdfdad3d9971cca39279777 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEgg.java
|
|
@@ -9,8 +9,16 @@ public class CraftEgg extends CraftThrowableProjectile implements Egg {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public ThrownEgg getHandleRaw() {
|
|
+ return (ThrownEgg)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 676dd5331bec75407a74aea2a89e78ab72d69724..4f876511b116dd6e7704f1f047af6fab2c3a3e47 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderCrystal.java
|
|
@@ -39,8 +39,16 @@ public class CraftEnderCrystal extends CraftEntity implements EnderCrystal {
|
|
}
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public EndCrystal getHandleRaw() {
|
|
+ return (EndCrystal)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 1ef0ec7ed3b13c25d76c03c7013c8e2eaba4d66a..9f37334ba0e2358f583df5a6d3e347909cfe681e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragon.java
|
|
@@ -30,8 +30,16 @@ public class CraftEnderDragon extends CraftMob implements EnderDragon, CraftEnem
|
|
return builder.build();
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.boss.enderdragon.EnderDragon getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.boss.enderdragon.EnderDragon)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 33ae03b78b01c005a291a343b42507fb539e81a6..36aec95539044edd429c17833338638262b9db00 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderDragonPart.java
|
|
@@ -16,8 +16,16 @@ public class CraftEnderDragonPart extends CraftComplexPart implements EnderDrago
|
|
return (EnderDragon) super.getParent();
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.boss.EnderDragonPart getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.boss.EnderDragonPart)this.entity;
|
|
+ }
|
|
+ // Folia end - 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"); // Folia - region threading
|
|
return (net.minecraft.world.entity.boss.EnderDragonPart) this.entity;
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java
|
|
index 3bb8d74f2b59c7f0c7c1cbde47a570d628ceceb2..25d7577d17d52dc00a355a684f1493efb2e88584 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderPearl.java
|
|
@@ -9,8 +9,16 @@ public class CraftEnderPearl extends CraftThrowableProjectile implements EnderPe
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public ThrownEnderpearl getHandleRaw() {
|
|
+ return (ThrownEnderpearl)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 27f56fa4b7ef92a9a4dfa6b782350424b88210f2..e76390fe22e2e846313c9a5b2c7f5492f798ca3e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderSignal.java
|
|
@@ -15,8 +15,16 @@ public class CraftEnderSignal extends CraftEntity implements EnderSignal {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public EyeOfEnder getHandleRaw() {
|
|
+ return (EyeOfEnder)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 983b9d6ddb58eff297e96e5c8b28ec427efa267d..16e33e302f8a60f1f9ff67929dc7c63cd5192a37 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEnderman.java
|
|
@@ -62,8 +62,16 @@ public class CraftEnderman extends CraftMonster implements Enderman {
|
|
}
|
|
// Paper end
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public EnderMan getHandleRaw() {
|
|
+ return (EnderMan)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 d657fd2c507a5b215aeab0a5f3e9c2ee892a27c8..399ef60ab5f1bf02b638c8c46a72d297932f6b38 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEndermite.java
|
|
@@ -9,8 +9,16 @@ public class CraftEndermite extends CraftMonster implements Endermite {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Endermite getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Endermite)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
|
index f8762064e0f377740688932c62145f7c789ea7ed..6919fbc5c432d510d965bb3fb2ea7537c87b3ea6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java
|
|
@@ -83,6 +83,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;
|
|
@@ -240,6 +245,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();
|
|
@@ -529,6 +539,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;
|
|
}
|
|
|
|
@@ -722,7 +733,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) {
|
|
@@ -1026,7 +1037,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;
|
|
@@ -1045,7 +1056,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;
|
|
@@ -1079,29 +1090,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.
|
|
|
|
- net.minecraft.server.level.ServerLevel world = ((CraftWorld)locationClone.getWorld()).getHandle();
|
|
+ // Folia start - region threading
|
|
java.util.concurrent.CompletableFuture<Boolean> ret = new java.util.concurrent.CompletableFuture<>();
|
|
-
|
|
- world.loadChunksForMoveAsync(getHandle().getBoundingBoxAt(locationClone.getX(), locationClone.getY(), locationClone.getZ()),
|
|
- this instanceof CraftPlayer ? ca.spottedleaf.concurrentutil.util.Priority.HIGHER : ca.spottedleaf.concurrentutil.util.Priority.NORMAL, (list) -> {
|
|
- net.minecraft.server.MinecraftServer.getServer().scheduleOnMain(() -> {
|
|
- final net.minecraft.server.level.ServerChunkCache chunkCache = world.getChunkSource();
|
|
- for (final net.minecraft.world.level.chunk.ChunkAccess chunk : list) {
|
|
- chunkCache.addTicketAtLevel(net.minecraft.server.level.TicketType.POST_TELEPORT, chunk.getPos(), 33, CraftEntity.this.getEntityId());
|
|
- }
|
|
- try {
|
|
- ret.complete(CraftEntity.this.teleport(locationClone, cause, teleportFlags) ? Boolean.TRUE : Boolean.FALSE);
|
|
- } catch (Throwable throwable) {
|
|
- if (throwable instanceof ThreadDeath) {
|
|
- throw (ThreadDeath)throwable;
|
|
- }
|
|
- net.minecraft.server.MinecraftServer.LOGGER.error("Failed to teleport entity " + CraftEntity.this, throwable);
|
|
- ret.completeExceptionally(throwable);
|
|
- }
|
|
- });
|
|
- });
|
|
+ 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
|
|
|
|
@@ -1214,8 +1239,7 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity {
|
|
// Paper start - tracked players API
|
|
@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 3a890cccf1766758794f3a3b5d31428f42590049..8c148db1b84c65b89fb2779e5b96a71ea4900083 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvoker.java
|
|
@@ -11,8 +11,16 @@ public class CraftEvoker extends CraftSpellcaster implements Evoker {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Evoker getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Evoker)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java
|
|
index 19b368cc862cd7e3e1f0e89401a7d099e3eaefa3..4a1c1af06719ff75f6ec2ac27198858b549b0302 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEvokerFangs.java
|
|
@@ -11,8 +11,16 @@ public class CraftEvokerFangs extends CraftEntity implements EvokerFangs {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.projectile.EvokerFangs getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.projectile.EvokerFangs)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java
|
|
index 650e4a01cecc4cc08e7ff9ebcc4c367084351f21..81b2b850dd7d08f2fae7baf56733d753b68d294c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftExperienceOrb.java
|
|
@@ -42,8 +42,16 @@ public class CraftExperienceOrb extends CraftEntity implements ExperienceOrb {
|
|
}
|
|
// Paper end
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.ExperienceOrb getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.ExperienceOrb)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 1359d25a32b4a5d5e8e68ce737bd19f7b5afaf69..4c6ac7f2531311d24081b397c60b2f8b183fad34 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFallingBlock.java
|
|
@@ -14,8 +14,16 @@ public class CraftFallingBlock extends CraftEntity implements FallingBlock {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public FallingBlockEntity getHandleRaw() {
|
|
+ return (FallingBlockEntity)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 43d7bea201a52cfeacf60c75caa28dfd2c4ff164..ac7237e8c28377d5f9abf38b628215ac865c9709 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFireball.java
|
|
@@ -83,8 +83,16 @@ public class CraftFireball extends AbstractProjectile implements Fireball {
|
|
}
|
|
// Paper end - Expose power on fireball projectiles
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public AbstractHurtingProjectile getHandleRaw() {
|
|
+ return (AbstractHurtingProjectile)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 759b6e54db93792c9862b1f1625118ac6fa49d7a..6fdd39c78a2f7c1c53d5de16e09e0f271c42039e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java
|
|
@@ -37,8 +37,16 @@ public class CraftFirework extends CraftProjectile implements Firework {
|
|
// Paper end - Expose firework item directly
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public FireworkRocketEntity getHandleRaw() {
|
|
+ return (FireworkRocketEntity)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 eb10f94d5ed8ca89d3786138647dd43357609a6c..f4d92fb44fd7cee7debe3e283e8b672021e3e23f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFish.java
|
|
@@ -10,8 +10,16 @@ public class CraftFish extends CraftWaterMob implements Fish, io.papermc.paper.e
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public AbstractFish getHandleRaw() {
|
|
+ return (AbstractFish)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 e0d65df2e5b4c14abeb89a5f72cc2d9fa034dcf5..bd8f1925cb3eee30a5b5ea83225b6d94c80bc69a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFishHook.java
|
|
@@ -14,8 +14,16 @@ public class CraftFishHook extends CraftProjectile implements FishHook {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public FishingHook getHandleRaw() {
|
|
+ return (FishingHook)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 8117faa0c89a966d057f4bf251c03a09d1e8797e..7c3827e6ef608ff15be9bced4788b09f1572aecb 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFlying.java
|
|
@@ -10,8 +10,16 @@ public class CraftFlying extends CraftMob implements Flying {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public FlyingMob getHandleRaw() {
|
|
+ return (FlyingMob)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 bb2b59ce9775a0d1dd9828885e57c14cf40d9f04..90dcbf746c5effa98c09059552674a3e428ac1b9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFox.java
|
|
@@ -14,8 +14,16 @@ public class CraftFox extends CraftAnimals implements Fox {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Fox getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Fox)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java
|
|
index 58cacdc8f37420be6fac280a5fd295d1da40dba8..9bff52b31b3e8ef10707822685e194c3cd2f11ad 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFrog.java
|
|
@@ -18,8 +18,16 @@ public class CraftFrog extends CraftAnimals implements org.bukkit.entity.Frog {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public Frog getHandleRaw() {
|
|
+ return (Frog)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 97fa4e1e70203194bd939618b2fad92665af6d59..27b309c9ce10798e3c3a7a9d39b8c300e471e177 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGhast.java
|
|
@@ -9,8 +9,16 @@ public class CraftGhast extends CraftFlying implements Ghast, CraftEnemy {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Ghast getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Ghast)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 5826205339e99e2536b93c8589d95917749f8417..9bb22fc146012310bca849fccb0a1e7e987875e9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGiant.java
|
|
@@ -9,8 +9,16 @@ public class CraftGiant extends CraftMonster implements Giant {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Giant getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Giant)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 b9a7576d2481b64b7e5b46d66c1f55d1dc28c540..00c95313a233a032518e2435922d4044a9d67aee 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowItemFrame.java
|
|
@@ -9,8 +9,16 @@ public class CraftGlowItemFrame extends CraftItemFrame implements GlowItemFrame
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.decoration.GlowItemFrame getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.decoration.GlowItemFrame)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java
|
|
index 253a0d2f987163cbbb28d261674b47137cbbcbe2..1ed09d2aa4077165e9f88dd9db34f4083a2953c2 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGlowSquid.java
|
|
@@ -10,8 +10,16 @@ public class CraftGlowSquid extends CraftSquid implements GlowSquid {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.GlowSquid getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.GlowSquid)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java
|
|
index 2c21de478bff9cdf13ba46cd041831d54c11e924..e64d7c4cfe65d34bdab13496741645f808f43dc6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGoat.java
|
|
@@ -9,8 +9,16 @@ public class CraftGoat extends CraftAnimals implements Goat {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.goat.Goat getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.goat.Goat)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java
|
|
index e27e469894bdd17cf7a004a85fdf0eaa746111a6..bbb8ff66580e62b5fb66aac22de72b9b9eafd3ef 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGolem.java
|
|
@@ -9,8 +9,16 @@ public class CraftGolem extends CraftCreature implements Golem {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public AbstractGolem getHandleRaw() {
|
|
+ return (AbstractGolem)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 e232350f2c6ef1900b05fda4d3f94099057d10e5..2c411b569cc4b222ed3cdfb95237c86cd6a0fabb 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftGuardian.java
|
|
@@ -13,8 +13,16 @@ public class CraftGuardian extends CraftMonster implements Guardian {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Guardian getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Guardian)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java
|
|
index f1e3f2b89bcd969f3c80548e165881a9b290eb53..2e4b86b44ace5eecefc9ab09c6e1f0a31247ad2f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHanging.java
|
|
@@ -57,8 +57,16 @@ public class CraftHanging extends CraftBlockAttachedEntity implements Hanging {
|
|
return CraftBlock.notchToBlockFace(direction);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public HangingEntity getHandleRaw() {
|
|
+ return (HangingEntity)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 37007775d27598e319c0c78929c6a808b697724a..b9819fc2c2ffc1a21a6e0973bb0d3595ee9c565d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHoglin.java
|
|
@@ -51,8 +51,16 @@ public class CraftHoglin extends CraftAnimals implements Hoglin, CraftEnemy {
|
|
return this.getHandle().isConverting();
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.hoglin.Hoglin getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.hoglin.Hoglin)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 9b6ff0f64966c78a3233860bb0840182b52f01bc..fb34651a9e4ed0cb05721d15524a26f89333d5e7 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHorse.java
|
|
@@ -13,8 +13,16 @@ public class CraftHorse extends CraftAbstractHorse implements Horse {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.horse.Horse getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.horse.Horse)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
|
|
index a396157548a5b3c3e86206c35789bb40346c701c..6e0290c3bce61465f1938263617ae1c90082852d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java
|
|
@@ -306,8 +306,16 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity {
|
|
this.mode = mode;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public Player getHandleRaw() {
|
|
+ return (Player)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 fb3c518f02cb4c428f022523d2f838625841332b..846a429493236f5002f0fae85c6cd7d20169dbe0 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllager.java
|
|
@@ -10,8 +10,16 @@ public class CraftIllager extends CraftRaider implements Illager {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public AbstractIllager getHandleRaw() {
|
|
+ return (AbstractIllager)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java
|
|
index 5b2af80e584977683cd39e6f440e65a76e929be9..789191168f74b3272e8da2131e0311853033c938 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIllusioner.java
|
|
@@ -9,8 +9,16 @@ public class CraftIllusioner extends CraftSpellcaster implements Illusioner, com
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Illusioner getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Illusioner)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java
|
|
index caa3016bf9742222205e3ea9a327fad3c4f912bb..2e00c7fe8dadd4c57c83a51cdfce165b6bfd6807 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftInteraction.java
|
|
@@ -12,8 +12,16 @@ public class CraftInteraction extends CraftEntity implements Interaction {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.Interaction getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.Interaction)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java
|
|
index 63cae1a2e95d8da17c45c4404a8dd0ca6a413c39..e417ff87b047dcffa6121835af6f4e713526e16b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java
|
|
@@ -8,8 +8,16 @@ public class CraftIronGolem extends CraftGolem implements IronGolem {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.IronGolem getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.IronGolem)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 7a3d982b133f8cdaeb936cf40f92565f0f7f6dd0..9216543d8f9c25221abb510b35c6bd504e2ccfeb 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java
|
|
@@ -18,8 +18,16 @@ public class CraftItem extends CraftEntity implements Item {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public ItemEntity getHandleRaw() {
|
|
+ return (ItemEntity)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 787f91566fc53c2b4aeba1ec10d8f46ccf15cbe6..04a73a31ba09557e901ff1985dc5d5e53f18d99a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemDisplay.java
|
|
@@ -13,8 +13,16 @@ public class CraftItemDisplay extends CraftDisplay implements ItemDisplay {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.Display.ItemDisplay getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.Display.ItemDisplay)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java
|
|
index 350ad61ab3fe66abd528e353b431a4a6dac17506..332f209980d3e645ad469fcebb93cc09253ebc20 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItemFrame.java
|
|
@@ -157,8 +157,16 @@ public class CraftItemFrame extends CraftHanging implements ItemFrame {
|
|
this.getHandle().fixed = fixed;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.decoration.ItemFrame getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.decoration.ItemFrame)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 0848963e61e03aa2a1740208ee372fd9edb7fc11..de2236f0106330ebe9d76bd308f9eee8751db826 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLargeFireball.java
|
|
@@ -14,8 +14,16 @@ public class CraftLargeFireball extends CraftSizedFireball implements LargeFireb
|
|
this.getHandle().explosionPower = (int) yield;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.projectile.LargeFireball getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.projectile.LargeFireball)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 76a7fc3d6c561d12bde17b9f93cae03a6cbb84b3..cd1ba99a75da644d06c4eb2f2c1ff91bfa5afa01 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLeash.java
|
|
@@ -24,6 +24,13 @@ public class CraftLeash extends CraftBlockAttachedEntity implements LeashHitch {
|
|
return BlockFace.SELF;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public LeashFenceKnotEntity getHandleRaw() {
|
|
+ return (LeashFenceKnotEntity)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@Override
|
|
public BlockFace getAttachedFace() {
|
|
// Leash hitch has no facing direction, so we return self
|
|
@@ -37,6 +44,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 e9f471e60af0725ec34e2985d63ae9ea9f88590a..cd824fc65ac2b1fe55710da4700f7c31f820f205 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLightningStrike.java
|
|
@@ -41,8 +41,16 @@ public class CraftLightningStrike extends CraftEntity implements LightningStrike
|
|
this.getHandle().setCause((player != null) ? ((CraftPlayer) player).getHandle() : null);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public LightningBolt getHandleRaw() {
|
|
+ return (LightningBolt)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 4f98d138a275a6c34528b7a5148ef265bc38d6b5..228f7fbce72b7828905e21f21525371a92ec07d4 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java
|
|
@@ -487,6 +487,13 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity {
|
|
this.getHandle().invulnerableTime = ticks;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.LivingEntity getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.LivingEntity)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@Override
|
|
public int getNoActionTicks() {
|
|
return this.getHandle().getNoActionTime();
|
|
@@ -500,6 +507,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 351f42842b780d053cd2e5bad9ae299449141b10..63513eff9b849f240b16ea28060b78c774e23934 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlama.java
|
|
@@ -14,8 +14,16 @@ public class CraftLlama extends CraftChestedHorse implements Llama, com.destroys
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.horse.Llama getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.horse.Llama)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java
|
|
index 47633f05b4fab1dcabc2117e7645fe6d6949622a..5e51d6eeda2abdc5df9c9a280a191ca1cbf615b9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLlamaSpit.java
|
|
@@ -10,8 +10,16 @@ public class CraftLlamaSpit extends AbstractProjectile implements LlamaSpit {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.projectile.LlamaSpit getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.projectile.LlamaSpit)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java
|
|
index 58b638ffd338e1b0f4962490c665c1eebcf33dcc..9f1b4d0561c10fbbfe0daec3d9dabfdaca9cf70b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMagmaCube.java
|
|
@@ -9,8 +9,16 @@ public class CraftMagmaCube extends CraftSlime implements MagmaCube {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.MagmaCube getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.MagmaCube)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 e6782a48d22ba1e683e3fe463e970e8a5ed60fbd..afaa4570c1991cd4260ffcdba823ba2452ad156a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMarker.java
|
|
@@ -9,8 +9,16 @@ public class CraftMarker extends CraftEntity implements Marker {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.Marker getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.Marker)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java
|
|
index b42bce0c4f4b3aac2729cfdad392d863245ed693..d3ffa2b4402fdd005104d07d92e4066c6170615e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecart.java
|
|
@@ -77,8 +77,16 @@ public abstract class CraftMinecart extends CraftVehicle implements Minecart {
|
|
}
|
|
// Paper end
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public AbstractMinecart getHandleRaw() {
|
|
+ return (AbstractMinecart)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 f34fa6715e477936097367a7aefd1a2bf87d3d90..e5310b138b13d54448072c15f6768acc1c33a45c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartCommand.java
|
|
@@ -20,8 +20,16 @@ public class CraftMinecartCommand extends CraftMinecart implements CommandMineca
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public MinecartCommandBlock getHandleRaw() {
|
|
+ return (MinecartCommandBlock)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 451f3a6f0b47493da3af3f5d6baced6a8c97f350..d4f98fe5eb5e463679ebc5b82b077c98e4448203 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartContainer.java
|
|
@@ -13,8 +13,16 @@ public abstract class CraftMinecartContainer extends CraftMinecart implements co
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public AbstractMinecartContainer getHandleRaw() {
|
|
+ return (AbstractMinecartContainer)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 1be1f6d23f2224d4d8720d40f2e530736b1bae81..eee08d53714b485bffd1398506ed0cb3b7002d2c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartFurnace.java
|
|
@@ -11,8 +11,16 @@ public class CraftMinecartFurnace extends CraftMinecart implements PoweredMineca
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public MinecartFurnace getHandleRaw() {
|
|
+ return (MinecartFurnace)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 3a3563a1bdbc0d84d973b3a04b50b78b4bc3d379..1e86ce7c1a3fc1f4eae2d8136fc0d879fbde5301 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartHopper.java
|
|
@@ -34,8 +34,17 @@ public final class CraftMinecartHopper extends CraftMinecartContainer implements
|
|
((MinecartHopper) this.getHandle()).setEnabled(enabled);
|
|
}
|
|
// Paper start
|
|
+
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.vehicle.MinecartHopper getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.vehicle.MinecartHopper)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java
|
|
index e8ece01669373ecf6552d33b2ed72668524e2650..fbb5c2e2a136cd03eb1f4b4b5ef289d6a6c39173 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartMobSpawner.java
|
|
@@ -162,8 +162,16 @@ final class CraftMinecartMobSpawner extends CraftMinecart implements SpawnerMine
|
|
this.getHandle().getSpawner().spawnRange = spawnRange;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public MinecartSpawner getHandleRaw() {
|
|
+ return (MinecartSpawner)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 15184e7fc3aeb388fb9de6be2ad72f98fee52044..f18093c5ccacfb55e7c6133cf5212c464e41ead4 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMinecartTNT.java
|
|
@@ -72,8 +72,16 @@ public final class CraftMinecartTNT extends CraftMinecart implements ExplosiveMi
|
|
this.getHandle().explode(power);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.vehicle.MinecartTNT getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.vehicle.MinecartTNT)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
|
|
index 778a9d3f8bfe5dba59e1e655e4eeb8822678b8cf..b4ec6c1f8ea5d5c34f2ecb2b066e49993ae79dc7 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMob.java
|
|
@@ -54,8 +54,16 @@ public abstract class CraftMob extends CraftLivingEntity implements Mob, io.pape
|
|
return (sound != null) ? CraftSound.minecraftToBukkit(sound) : null;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.Mob getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.Mob)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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;
|
|
}
|
|
|
|
@@ -63,7 +71,7 @@ public abstract class CraftMob extends CraftLivingEntity implements Mob, io.pape
|
|
@Override
|
|
public void setHandle(net.minecraft.world.entity.Entity entity) {
|
|
super.setHandle(entity);
|
|
- paperPathfinder.setHandle(getHandle());
|
|
+ paperPathfinder.setHandle((net.minecraft.world.entity.Mob)entity); // Folia - region threading
|
|
}
|
|
// Paper end - Mob Pathfinding API
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java
|
|
index 706c74c832f6893df3797023f68add31139c7d57..1cf155fc23f13691f86673eac3084d7530d69ab5 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMonster.java
|
|
@@ -9,8 +9,16 @@ public class CraftMonster extends CraftCreature implements Monster, CraftEnemy {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Monster getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Monster)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 596146ad7899c21645df8834ce5f0afd6c1b0604..78f6e16a745924419d5aad53f95d767d87bdf5d0 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftMushroomCow.java
|
|
@@ -19,6 +19,13 @@ public class CraftMushroomCow extends CraftCow implements MushroomCow, io.paperm
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.MushroomCow getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.MushroomCow)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@Override
|
|
public boolean hasEffectsForNextStew() {
|
|
SuspiciousStewEffects stewEffects = this.getHandle().stewEffects;
|
|
@@ -94,6 +101,7 @@ public class CraftMushroomCow extends CraftCow implements MushroomCow, io.paperm
|
|
|
|
@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 5c60a30e80448fbf04b5fa4b1ef12fb2ee99bfd5..4ba52939450c0a89e5ba1fa57a84b3ceccb9fef0 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftOcelot.java
|
|
@@ -9,8 +9,16 @@ public class CraftOcelot extends CraftAnimals implements Ocelot {
|
|
super(server, ocelot);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Ocelot getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Ocelot)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 ecdac2cf74e99f0d69e053dece11ab891973dc2b..fa365c38c9e0f671df1481c8b36bc993eee42afd 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 bcac1359c667ef1ee46384f9c7a5adf4010d2b08..e740abd53d99f549acb5048d748241560dfeddd1 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPainting.java
|
|
@@ -50,8 +50,16 @@ public class CraftPainting extends CraftHanging implements Painting {
|
|
return false;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.decoration.Painting getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.decoration.Painting)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 01d104d91de9e1319d27e39d3f474318c7809486..c298b263175dc82097c0ad2c35194f3e326c6658 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPanda.java
|
|
@@ -11,8 +11,16 @@ public class CraftPanda extends CraftAnimals implements Panda {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Panda getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Panda)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java
|
|
index 04d6cf6a1f3ae8316e3b2862c2d1b04e84a3b20a..4ed79610b50be635a7a7c8a8f7d7af8f91ce2d0d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftParrot.java
|
|
@@ -11,8 +11,16 @@ public class CraftParrot extends CraftTameableAnimal implements Parrot {
|
|
super(server, parrot);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Parrot getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Parrot)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 429200b0b06cc0f71db03924228240b8b5f22a55..634a95a5d89821d3464e2ae8bd86b3b574f0ef17 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPhantom.java
|
|
@@ -9,8 +9,16 @@ public class CraftPhantom extends CraftFlying implements Phantom, CraftEnemy {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Phantom getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Phantom)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java
|
|
index fd4f13e8ea000eb38efd77bfb197855db8816744..7f049e504cf7af7c5c5ee247bccb4f6e01b80121 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPig.java
|
|
@@ -55,8 +55,16 @@ public class CraftPig extends CraftAnimals implements Pig {
|
|
return Material.CARROT_ON_A_STICK;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Pig getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Pig)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 49beb836d2801aadf869feefa602616daebe633f..d220874f678649acfae549691262c370f0228908 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPigZombie.java
|
|
@@ -30,8 +30,16 @@ public class CraftPigZombie extends CraftZombie implements PigZombie {
|
|
return this.getAnger() > 0;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public ZombifiedPiglin getHandleRaw() {
|
|
+ return (ZombifiedPiglin)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 5124a383b60b2c8de89fa992547d0c61db760c21..d75230de45102434660b3b7926a804d26e10ab2c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglin.java
|
|
@@ -75,8 +75,16 @@ public class CraftPiglin extends CraftPiglinAbstract implements Piglin, com.dest
|
|
return new CraftInventory(this.getHandle().inventory);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.piglin.Piglin getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.piglin.Piglin)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java
|
|
index e7957d6051244ba410f8633f9c16eeb8c5ac3ce0..f8465f75c15d96ccd82ee394c9e658966837ad07 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinAbstract.java
|
|
@@ -95,8 +95,16 @@ public class CraftPiglinAbstract extends CraftMonster implements PiglinAbstract
|
|
public void setBreed(boolean b) {
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public AbstractPiglin getHandleRaw() {
|
|
+ return (AbstractPiglin)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
}
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java
|
|
index be874dc973fe632e8ace86041392ca69beaefd16..efb64160089eeb6be8faf7790989909145c22a4b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPiglinBrute.java
|
|
@@ -9,8 +9,16 @@ public class CraftPiglinBrute extends CraftPiglinAbstract implements PiglinBrute
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.piglin.PiglinBrute getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.piglin.PiglinBrute)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java
|
|
index 2638c341bc02f201f7ab17fdebcdbdf3a7ec05bf..074b2919be2b5544b0a46e6cd32f6c57dad6bfdc 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPillager.java
|
|
@@ -11,8 +11,16 @@ public class CraftPillager extends CraftIllager implements Pillager, com.destroy
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Pillager getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Pillager)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
index 3260f20b667918dd7cd641d5d96688721fce2f9c..7723b2fbc8a1d1907ded37d7530e34d3cac8bdce 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
|
@@ -673,7 +673,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
|
|
}
|
|
|
|
@@ -691,7 +691,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);
|
|
@@ -1411,6 +1411,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());
|
|
}
|
|
@@ -2321,9 +2326,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
return this;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public ServerPlayer getHandleRaw() {
|
|
+ return (ServerPlayer)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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
|
|
}
|
|
|
|
public void setHandle(final ServerPlayer entity) {
|
|
@@ -3355,7 +3367,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
|
{
|
|
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 fe075cfdf3097d6cb768e71b8cc360abb8eaf367..657886dfb8e152ed4a64a64878da23526dad0160 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPolarBear.java
|
|
@@ -8,8 +8,17 @@ public class CraftPolarBear extends CraftAnimals implements PolarBear {
|
|
public CraftPolarBear(CraftServer server, net.minecraft.world.entity.animal.PolarBear entity) {
|
|
super(server, entity);
|
|
}
|
|
+
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.PolarBear getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.PolarBear)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 4f1fa7dec78970bdfc184d3c1f1632dc9d75a574..99fd39c60d1b0a50bddf7b9b9f45f22c189a2f25 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftProjectile.java
|
|
@@ -12,8 +12,16 @@ public abstract class CraftProjectile extends AbstractProjectile implements Proj
|
|
|
|
// Paper - moved to AbstractProjectile
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.projectile.Projectile getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.projectile.Projectile)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 35a8219734633529325430810e88755b2dd23125..7ba16121cb1828cf5c0ff8f027fa05e9c1814ffa 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPufferFish.java
|
|
@@ -10,8 +10,16 @@ public class CraftPufferFish extends CraftFish implements PufferFish {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public Pufferfish getHandleRaw() {
|
|
+ return (Pufferfish)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java
|
|
index 519ef701a7d6534f7cb516f6296b95ee521f661d..6407b4e6ca793a676e7d669920ae90b762207970 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRabbit.java
|
|
@@ -10,8 +10,16 @@ public class CraftRabbit extends CraftAnimals implements Rabbit {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Rabbit getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Rabbit)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 763c368e299588f9a0e085a8a5e04e97e1f33428..3e85638f3941c2085a7ddb102d0ccc23446cc1d6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRaider.java
|
|
@@ -16,8 +16,16 @@ public abstract class CraftRaider extends CraftMonster implements Raider {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.raid.Raider getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.raid.Raider)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java
|
|
index 09796ce15658e3f7c223a265a547a51ee729ed40..bfca2951d18f7451787877b5a6503b0572945447 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftRavager.java
|
|
@@ -9,8 +9,16 @@ public class CraftRavager extends CraftRaider implements Ravager {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Ravager getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Ravager)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java
|
|
index 7660cc21e936002ebb23510f0ec2b58d71e5157d..a13976b2712413ef9fdeecd1e3ca762238d4efd9 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSalmon.java
|
|
@@ -10,8 +10,16 @@ public class CraftSalmon extends io.papermc.paper.entity.PaperSchoolableFish imp
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Salmon getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Salmon)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java
|
|
index 37291d7ad9fdf0fe78894f82a418f40bb581f58b..6c7e54a929b46fd160726e41bf63023a8622d044 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSheep.java
|
|
@@ -29,8 +29,16 @@ public class CraftSheep extends CraftAnimals implements Sheep, io.papermc.paper.
|
|
this.getHandle().setSheared(flag);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Sheep getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Sheep)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@Override
|
|
public net.minecraft.world.entity.animal.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) 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 05ec06b71642ab1ef03829039f7ac1e4c527ee50..1e1e908cbc08df06996128e3dd6d277a19f9a2df 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulker.java
|
|
@@ -18,8 +18,16 @@ public class CraftShulker extends CraftGolem implements Shulker, CraftEnemy {
|
|
return "CraftShulker";
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Shulker getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Shulker)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 b3797a43eeee11cb7ae0774d61bd5f195d0aa3ad..d045d50d1cfccb696153b8c33e86e193194271fc 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftShulkerBullet.java
|
|
@@ -69,8 +69,16 @@ public class CraftShulkerBullet extends AbstractProjectile implements ShulkerBul
|
|
return "CraftShulkerBullet";
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.projectile.ShulkerBullet getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.projectile.ShulkerBullet)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 7c75d78e5e28d7320c6dbe979bcd576658fb310b..a25ca7fa49a3bb213f6af5804079b2efe43ef0e4 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSilverfish.java
|
|
@@ -8,8 +8,16 @@ public class CraftSilverfish extends CraftMonster implements Silverfish {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Silverfish getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Silverfish)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 de3327812c08b3bb8f5907ae657f67962d1e4e8b..c479f4adb945e8bb6ea2279ad23d679ca0dee606 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSizedFireball.java
|
|
@@ -27,8 +27,16 @@ public class CraftSizedFireball extends CraftFireball implements SizedFireball {
|
|
this.getHandle().setItem(CraftItemStack.asNMSCopy(item));
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public Fireball getHandleRaw() {
|
|
+ return (Fireball)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 6f98da9be6aef35e3b5c940188b872459a383c8e..dc93b8aaf48671d66d3bb3fb413b83fc4b4b26cf 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeleton.java
|
|
@@ -31,8 +31,16 @@ public class CraftSkeleton extends CraftAbstractSkeleton implements Skeleton {
|
|
}
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Skeleton getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Skeleton)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 fbb47491dcc75f8247dee9f123f946f99ef1467f..6cc1ea31340298037c2a00d64d70928f31278a4a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSkeletonHorse.java
|
|
@@ -20,8 +20,16 @@ public class CraftSkeletonHorse extends CraftAbstractHorse implements SkeletonHo
|
|
return Variant.SKELETON_HORSE;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.horse.SkeletonHorse getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.horse.SkeletonHorse)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 e48f7d1cbec4a2319745ba48a5d44ab9925214e2..27b07865edfa659d9cdfcf2d84935ad313472e87 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java
|
|
@@ -19,8 +19,16 @@ public class CraftSlime extends CraftMob implements Slime, CraftEnemy {
|
|
this.getHandle().setSize(size, /* true */ getHandle().isAlive()); // Paper - fix dead slime setSize invincibility
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Slime getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Slime)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 072df206858944ef78179b0a6d61ed990a844d2b..71625cc4e4b2fd3773baf1b2c1ea7e463b854ffa 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSmallFireball.java
|
|
@@ -8,8 +8,16 @@ public class CraftSmallFireball extends CraftSizedFireball implements SmallFireb
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.projectile.SmallFireball getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.projectile.SmallFireball)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 555337018fe218ac5a296a5e6a1d82720fee05e1..873b7e7a05b3465b79a82ed583ce16bb245ebcbf 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSniffer.java
|
|
@@ -16,8 +16,16 @@ public class CraftSniffer extends CraftAnimals implements Sniffer {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.sniffer.Sniffer getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.sniffer.Sniffer)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java
|
|
index d959825fd11a94aba175934cd7739544a23958fc..9f53ba11a2adabdebd70eee5a811fec7dccd7b10 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowball.java
|
|
@@ -8,8 +8,16 @@ public class CraftSnowball extends CraftThrowableProjectile implements Snowball
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.projectile.Snowball getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.projectile.Snowball)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 4ce2373ff71c3c1b8951646e057587a3ab09e145..6f88f18fc23cb793d4394b80201e40b09a0a7f9d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java
|
|
@@ -19,8 +19,16 @@ public class CraftSnowman extends CraftGolem implements Snowman, com.destroystok
|
|
this.getHandle().setPumpkin(!derpMode);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public SnowGolem getHandleRaw() {
|
|
+ return (SnowGolem)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 70f1f8740091d5a3d5983227ef2e6e166bb6ce7e..4886c9ba4bf952415ee4b1395adfeca8d928cdf5 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpectralArrow.java
|
|
@@ -9,8 +9,16 @@ public class CraftSpectralArrow extends CraftAbstractArrow implements SpectralAr
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.projectile.SpectralArrow getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.projectile.SpectralArrow)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 525827f1747631fa108be7e1b7395b47d33aa397..3ec5d458a895300da462f63bae683980a741e477 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpellcaster.java
|
|
@@ -12,8 +12,16 @@ public class CraftSpellcaster extends CraftIllager implements Spellcaster {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public SpellcasterIllager getHandleRaw() {
|
|
+ return (SpellcasterIllager)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java
|
|
index b4afc37c21fc478df44fca7ec3fbc33d337dc6b7..bf3236f673118539d7cfb883bcdf84de7ae5bd73 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSpider.java
|
|
@@ -9,8 +9,16 @@ public class CraftSpider extends CraftMonster implements Spider {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Spider getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Spider)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 067a95ea50418601acfb8b9453d1291161bb706a..3a41ef5fdecee262f3e8899deec360c35ddf1b6f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSquid.java
|
|
@@ -9,8 +9,16 @@ public class CraftSquid extends CraftAgeable implements Squid {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Squid getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Squid)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 74fac97231d4d89d1b941a1b5295afc2dafc6007..27992471bb7727a17f5fee61046cc0718994403a 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftStrider.java
|
|
@@ -65,8 +65,16 @@ public class CraftStrider extends CraftAnimals implements Strider {
|
|
return Material.WARPED_FUNGUS_ON_A_STICK;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Strider getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Strider)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 a61aec087fa7cec27a803668bdc1b9e6eb336755..1c3826dc868a78402531b6abdddd017c83dae853 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTNTPrimed.java
|
|
@@ -42,8 +42,16 @@ public class CraftTNTPrimed extends CraftEntity implements TNTPrimed {
|
|
this.getHandle().setFuse(fuseTicks);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public PrimedTnt getHandleRaw() {
|
|
+ return (PrimedTnt)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 d7c6a0bbc5671ea8f2488230c94df5146a1e98b9..ea001c3e91478cde59eb6b7663013d43554e5fb5 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTadpole.java
|
|
@@ -9,8 +9,16 @@ public class CraftTadpole extends CraftFish implements org.bukkit.entity.Tadpole
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public Tadpole getHandleRaw() {
|
|
+ return (Tadpole)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 cedb8e67e208cdf954d052a4f0a100c1c07a962b..8bf3936ad7a42a98a14e82fcabd238712e8532c8 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTameableAnimal.java
|
|
@@ -12,8 +12,16 @@ public class CraftTameableAnimal extends CraftAnimals implements Tameable, Creat
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public TamableAnimal getHandleRaw() {
|
|
+ return (TamableAnimal)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java
|
|
index 3dd5009a9e484dc3f3a6ddea95aab96e0f2f67df..ebd5576b467b94bbaae467ad06c86afbe28fad36 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTextDisplay.java
|
|
@@ -13,8 +13,16 @@ public class CraftTextDisplay extends CraftDisplay implements TextDisplay {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.Display.TextDisplay getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.Display.TextDisplay)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java
|
|
index bf7b111abdf42969218a3608d86a3313432bc0a0..b2b1b7ad56d0adc452b32a866fa0c6682fcd4882 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrowableProjectile.java
|
|
@@ -26,8 +26,16 @@ public abstract class CraftThrowableProjectile extends CraftProjectile implement
|
|
this.getHandle().setItem(CraftItemStack.asNMSCopy(item));
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public ThrowableItemProjectile getHandleRaw() {
|
|
+ return (ThrowableItemProjectile)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 5e7fef664c56d6087502e56a0eb4fc07d34ade9f..00d578700c09cab5b5ae99bcb27fa17048ac24b1 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownExpBottle.java
|
|
@@ -9,8 +9,16 @@ public class CraftThrownExpBottle extends CraftThrowableProjectile implements Th
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public ThrownExperienceBottle getHandleRaw() {
|
|
+ return (ThrownExperienceBottle)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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/CraftThrownPotion.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java
|
|
index 65b6de9d21da6843d7c7087f0dea98d3b75f24cf..8988f2a1e3fe6a296c245e893ddb927da1d59167 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftThrownPotion.java
|
|
@@ -61,8 +61,17 @@ public class CraftThrownPotion extends CraftThrowableProjectile implements Throw
|
|
this.getHandle().splash(null);
|
|
}
|
|
// Paper end
|
|
+
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.projectile.ThrownPotion getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.projectile.ThrownPotion)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@Override
|
|
public net.minecraft.world.entity.projectile.ThrownPotion 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.ThrownPotion) 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 4b3a764114c8372e1549dadeeced26dc7727f2d1..b800efe68124c27f97114a69a096fca2d66e671e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTraderLlama.java
|
|
@@ -9,8 +9,16 @@ public class CraftTraderLlama extends CraftLlama implements TraderLlama {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.horse.TraderLlama getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.horse.TraderLlama)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java
|
|
index 4fc893378fb0568ddcffc7593d66df6bfe23f659..5ddc96b17ddbd152929b0548bfedc802bd6dd7ca 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTrident.java
|
|
@@ -12,8 +12,16 @@ public class CraftTrident extends CraftAbstractArrow implements Trident {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public ThrownTrident getHandleRaw() {
|
|
+ return (ThrownTrident)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java
|
|
index 9e53c30801c700719c78c0fd521fd615c94e02c8..11884c20e73846ec95288edcb514d3ae638eb803 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTropicalFish.java
|
|
@@ -13,8 +13,16 @@ public class CraftTropicalFish extends io.papermc.paper.entity.PaperSchoolableFi
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.TropicalFish getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.TropicalFish)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 00e59cdc8c0b954eed84c611e91d00dfd5676ec1..c9589005410925cb88955314eb4c5e1c9ea78a8e 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftTurtle.java
|
|
@@ -9,8 +9,16 @@ public class CraftTurtle extends CraftAnimals implements Turtle {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Turtle getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Turtle)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java
|
|
index e9ec3455eabc473e104b5342a615a38c1ac25a4f..3a65ae7e6ac1894855e4eafecc9c2bb87476298f 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVex.java
|
|
@@ -13,8 +13,16 @@ public class CraftVex extends CraftMonster implements Vex {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Vex getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Vex)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
|
index aaddce10e1d41531939d1e7f3d717b458ec1b7ab..bd515cdfbcc6fb0d17f70150d8b0bab60949db49 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java
|
|
@@ -32,8 +32,16 @@ public class CraftVillager extends CraftAbstractVillager implements Villager {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.npc.Villager getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.npc.Villager)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 3aa23d9f22d5cd22231293fd7d1ca4cb79eb7cb3..e705d49eafcf1def6e849bfc0ded4b7269a40ffb 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillagerZombie.java
|
|
@@ -14,8 +14,16 @@ public class CraftVillagerZombie extends CraftZombie implements ZombieVillager {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.ZombieVillager getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.ZombieVillager)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java
|
|
index bcd3370bc48520ea4bb53af25b892131d6ca0b33..8be282b028bc30056afc8852e8f47b287b238e73 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVindicator.java
|
|
@@ -9,8 +9,16 @@ public class CraftVindicator extends CraftIllager implements Vindicator {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Vindicator getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Vindicator)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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) super.getHandle();
|
|
}
|
|
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java
|
|
index 3cceefa0d6278924a19641a49bdf16bcdacb2233..07d6b1296aeee0de3455380a8aeaedc8a9344735 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWanderingTrader.java
|
|
@@ -9,8 +9,16 @@ public class CraftWanderingTrader extends CraftAbstractVillager implements Wande
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.npc.WanderingTrader getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.npc.WanderingTrader)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 c284eb96a1e330078076cbe61f0f6e2ff4ed89bd..a53dee61a4669ac9c1d051ad9f881230a186e92c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWarden.java
|
|
@@ -15,8 +15,16 @@ public class CraftWarden extends CraftMonster implements org.bukkit.entity.Warde
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public Warden getHandleRaw() {
|
|
+ return (Warden)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 1b347deb6eb0b39c4a23936f7cd387421f06350d..4f26f0caca8a97d7770a569a65c1addaf6e9512c 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWaterMob.java
|
|
@@ -10,8 +10,16 @@ public class CraftWaterMob extends CraftCreature implements WaterMob {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public WaterAnimal getHandleRaw() {
|
|
+ return (WaterAnimal)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 46447b9651dc48181916ce1306ee5deec397be12..c26120711251a17b558a97ae0e20789d5c33b104 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWindCharge.java
|
|
@@ -10,6 +10,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 4b3d783cabcb2de1a67d7fbfb6f525bfb493aed1..216c97fb1d611b84322927c6eb97871dd05cf600 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitch.java
|
|
@@ -15,8 +15,16 @@ public class CraftWitch extends CraftRaider implements Witch, com.destroystokyo.
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Witch getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Witch)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 7881c6253c1d652c0c0d54a9a8accdf0a1ff0f3e..077b5685ccd1b5972ef92aa759ebabe5ec6d23c6 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java
|
|
@@ -21,8 +21,16 @@ public class CraftWither extends CraftMonster implements Wither, com.destroystok
|
|
}
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public WitherBoss getHandleRaw() {
|
|
+ return (WitherBoss)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 bc978391255c9414e06ff393f2e6707d329d020a..8d436a1453c8a66422c2a735764273176a6a4545 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWitherSkull.java
|
|
@@ -18,8 +18,16 @@ public class CraftWitherSkull extends CraftFireball implements WitherSkull {
|
|
return this.getHandle().isDangerous();
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.projectile.WitherSkull getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.projectile.WitherSkull)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 c1b7f1281fbd41e765d2c1881763ca25b20e924d..913f68be4bf6c8af2765c2f6eddda88bdefe3382 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java
|
|
@@ -30,8 +30,16 @@ public class CraftWolf extends CraftTameableAnimal implements Wolf {
|
|
}
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.animal.Wolf getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.animal.Wolf)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@Override
|
|
public net.minecraft.world.entity.animal.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) 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 c134c4bb8c0377ceb7f8a5c40c94fd6312a9e448..d334e4a3ea075670e0aa7ea1429ffe4231eb0559 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftZoglin.java
|
|
@@ -19,8 +19,16 @@ public class CraftZoglin extends CraftMonster implements Zoglin {
|
|
this.getHandle().setBaby(flag);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Zoglin getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Zoglin)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 dfc2b40e20069705f92d86a6898e3e8348bf4dcd..9e158d32dc13f8890511de1496d9d5b4c1956e3b 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftZombie.java
|
|
@@ -12,8 +12,16 @@ public class CraftZombie extends CraftMonster implements Zombie {
|
|
super(server, entity);
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.entity.monster.Zombie getHandleRaw() {
|
|
+ return (net.minecraft.world.entity.monster.Zombie)this.entity;
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
@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 57c3f8531bf85b53af3a4aad6e9e369d5cff0ce3..b1504bc0f06f930669a8d0787eb420416f7c2671 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java
|
|
@@ -951,7 +951,7 @@ public class CraftEventFactory {
|
|
return CraftEventFactory.handleBlockSpreadEvent(world, source, target, block, 2);
|
|
}
|
|
|
|
- public static BlockPos sourceBlockOverride = null; // SPIGOT-7068: Add source block override, not the most elegant way but better than passing down a BlockPosition 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 BlockPosition 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 block, int flag) {
|
|
// Suppress during worldgen
|
|
@@ -963,7 +963,7 @@ public class CraftEventFactory {
|
|
CraftBlockState state = CraftBlockStates.getBlockState(world, target, flag);
|
|
state.setData(block);
|
|
|
|
- BlockSpreadEvent event = new BlockSpreadEvent(state.getBlock(), CraftBlock.at(world, CraftEventFactory.sourceBlockOverride != null ? CraftEventFactory.sourceBlockOverride : source), state);
|
|
+ BlockSpreadEvent event = new BlockSpreadEvent(state.getBlock(), CraftBlock.at(world, CraftEventFactory.sourceBlockOverrideRT.get() != null ? CraftEventFactory.sourceBlockOverrideRT.get() : source), state); // Folia - region threading
|
|
Bukkit.getPluginManager().callEvent(event);
|
|
|
|
if (!event.isCancelled()) {
|
|
@@ -2232,7 +2232,7 @@ public class CraftEventFactory {
|
|
CraftItemStack craftItem = CraftItemStack.asCraftMirror(itemStack.copyWithCount(1));
|
|
|
|
org.bukkit.event.block.BlockDispenseEvent event = new org.bukkit.event.block.BlockDispenseEvent(bukkitBlock, craftItem.clone(), CraftVector.toBukkit(to));
|
|
- if (!net.minecraft.world.level.block.DispenserBlock.eventFired) {
|
|
+ if (!net.minecraft.world.level.block.DispenserBlock.eventFired.get().booleanValue()) { // Folia - region threading
|
|
if (!event.callEvent()) {
|
|
return itemStack;
|
|
}
|
|
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 253574890a9ed23d38a84680ba1eb221dc72b310..ce8b91f00f925960ad17f381162a11294e8b511d 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboard.java
|
|
@@ -45,6 +45,7 @@ public final class CraftScoreboard implements org.bukkit.scoreboard.Scoreboard {
|
|
}
|
|
@Override
|
|
public CraftObjective 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();
|
|
}
|
|
@@ -204,6 +205,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.board.getPlayerTeam(name) == null, "Team name '%s' is already in use", name);
|
|
@@ -231,6 +233,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.board.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 f3184be3853dfc4df4ae4b8af764dfef07628ef4..99ba4d19b72a66ea1fc83fda16d37aaa0f154abb 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java
|
|
@@ -42,6 +42,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));
|
|
// Paper start
|
|
@@ -68,6 +69,7 @@ public final class CraftScoreboardManager implements ScoreboardManager {
|
|
|
|
// CraftBukkit method
|
|
public void setPlayerBoard(CraftPlayer player, org.bukkit.scoreboard.Scoreboard bukkitScoreboard) {
|
|
+ if (true) throw new UnsupportedOperationException(); // Folia - not supported yet
|
|
Preconditions.checkArgument(bukkitScoreboard instanceof CraftScoreboard, "Cannot set player scoreboard to an unregistered Scoreboard");
|
|
|
|
CraftScoreboard scoreboard = (CraftScoreboard) bukkitScoreboard;
|
|
diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
|
|
index 59c0e8dbe2d0d1155487de33c680e41c0b61acac..68cc7eb8d7357d357d9d57d6391bf5a4a09221de 100644
|
|
--- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
|
|
+++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java
|
|
@@ -379,6 +379,12 @@ public final class CraftMagicNumbers implements UnsafeValues {
|
|
throw new InvalidPluginException("Unsupported API version " + pdf.getAPIVersion());
|
|
}
|
|
|
|
+ // Folia start - block plugins not marked as supported
|
|
+ if (!pdf.isFoliaSupported()) {
|
|
+ throw new InvalidPluginException("Plugin " + pdf.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 " + pdf.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 09e87552159e24603aa9a4f658ab4449d7eaeb0a..28ff4859ce2591e206013f4b0f116f3cfd024a3b 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.handle = worldAccess;
|
|
}
|
|
|
|
+ // Folia start - region threading
|
|
+ @Override
|
|
+ public net.minecraft.world.level.StructureManager structureManager() {
|
|
+ return this.handle.structureManager();
|
|
+ }
|
|
+ // Folia end - region threading
|
|
+
|
|
public WorldGenLevel getHandle() {
|
|
return this.handle;
|
|
}
|
|
@@ -812,4 +819,3 @@ public abstract class DelegatedGeneratorAccess implements WorldGenLevel {
|
|
}
|
|
// Paper end
|
|
}
|
|
-
|
|
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 e0d4222a99f22d7130d95cf29b034a98f2f3b76e..48432a7c9df33bae8aa72991843ed61545c64814 100644
|
|
--- a/src/main/java/org/spigotmc/SpigotConfig.java
|
|
+++ b/src/main/java/org/spigotmc/SpigotConfig.java
|
|
@@ -182,7 +182,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;
|
|
@@ -228,7 +228,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 89e2adbc1e1a0709d03e151e3ffcdbff10a44098..3476d639141c15ddb96fe0da1f11569e1e4b5bec 100644
|
|
--- a/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
+++ b/src/main/java/org/spigotmc/SpigotWorldConfig.java
|
|
@@ -401,7 +401,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;
|