mirror of
https://github.com/PaperMC/Folia.git
synced 2025-04-29 07:39:18 +08:00
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;
|