mirror of
https://github.com/Winds-Studio/Leaf.git
synced 2025-12-23 17:09:29 +00:00
Slice: Add Smooth Teleports
This commit is contained in:
306
patches/server/0045-MikuServer-Code-error-fix.patch
Normal file
306
patches/server/0045-MikuServer-Code-error-fix.patch
Normal file
@@ -0,0 +1,306 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: wangxyper <wangxyper@163.com>
|
||||
Date: Fri, 27 Jan 2023 19:55:14 +0800
|
||||
Subject: [PATCH] MikuServer: Code error fix
|
||||
|
||||
Original license: MIT
|
||||
Original project: https://github.com/MikuMC/MikuServer
|
||||
|
||||
diff --git a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java
|
||||
index 15eeea40bb7a44470f6f3f0e2473cb451812eec1..c256b6175f8b859883b849c6cd623f680b78be32 100644
|
||||
--- a/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java
|
||||
+++ b/src/main/java/io/papermc/paper/chunk/system/scheduling/ChunkHolderManager.java
|
||||
@@ -2,7 +2,6 @@ package io.papermc.paper.chunk.system.scheduling;
|
||||
|
||||
import ca.spottedleaf.concurrentutil.executor.standard.PrioritisedExecutor;
|
||||
import ca.spottedleaf.concurrentutil.map.SWMRLong2ObjectHashTable;
|
||||
-import co.aikar.timings.Timing;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.gson.JsonArray;
|
||||
import com.google.gson.JsonObject;
|
||||
@@ -29,8 +28,6 @@ import net.minecraft.server.level.TicketType;
|
||||
import net.minecraft.util.SortedArraySet;
|
||||
import net.minecraft.util.Unit;
|
||||
import net.minecraft.world.level.ChunkPos;
|
||||
-import net.minecraft.world.level.chunk.ChunkAccess;
|
||||
-import net.minecraft.world.level.chunk.ChunkStatus;
|
||||
import org.bukkit.plugin.Plugin;
|
||||
import org.slf4j.Logger;
|
||||
import java.io.IOException;
|
||||
diff --git a/src/main/java/io/papermc/paper/util/misc/Delayed26WayDistancePropagator3D.java b/src/main/java/io/papermc/paper/util/misc/Delayed26WayDistancePropagator3D.java
|
||||
index 470402573bc31106d5a63e415b958fb7f9c36aa9..e831738a2988746fe4e065f6ded811a8bdf5dabe 100644
|
||||
--- a/src/main/java/io/papermc/paper/util/misc/Delayed26WayDistancePropagator3D.java
|
||||
+++ b/src/main/java/io/papermc/paper/util/misc/Delayed26WayDistancePropagator3D.java
|
||||
@@ -94,24 +94,42 @@ public final class Delayed26WayDistancePropagator3D {
|
||||
|
||||
protected final void addToIncreaseWorkQueue(final long coordinate, final byte level) {
|
||||
final Delayed8WayDistancePropagator2D.WorkQueue queue = this.levelIncreaseWorkQueues[level];
|
||||
- queue.queuedCoordinates.enqueue(coordinate);
|
||||
- queue.queuedLevels.enqueue(level);
|
||||
+
|
||||
+ final long id = queue.lock.writeLock();
|
||||
+ try {
|
||||
+ queue.queuedCoordinates.add(coordinate);
|
||||
+ queue.queuedLevels.add(level);
|
||||
+ }finally {
|
||||
+ queue.lock.unlockWrite(id);
|
||||
+ }
|
||||
|
||||
this.levelIncreaseWorkQueueBitset |= (1L << level);
|
||||
}
|
||||
|
||||
protected final void addToIncreaseWorkQueue(final long coordinate, final byte index, final byte level) {
|
||||
final Delayed8WayDistancePropagator2D.WorkQueue queue = this.levelIncreaseWorkQueues[index];
|
||||
- queue.queuedCoordinates.enqueue(coordinate);
|
||||
- queue.queuedLevels.enqueue(level);
|
||||
+
|
||||
+ final long id = queue.lock.writeLock();
|
||||
+ try {
|
||||
+ queue.queuedCoordinates.add(coordinate);
|
||||
+ queue.queuedLevels.add(level);
|
||||
+ }finally {
|
||||
+ queue.lock.unlockWrite(id);
|
||||
+ }
|
||||
|
||||
this.levelIncreaseWorkQueueBitset |= (1L << index);
|
||||
}
|
||||
|
||||
protected final void addToRemoveWorkQueue(final long coordinate, final byte level) {
|
||||
final Delayed8WayDistancePropagator2D.WorkQueue queue = this.levelRemoveWorkQueues[level];
|
||||
- queue.queuedCoordinates.enqueue(coordinate);
|
||||
- queue.queuedLevels.enqueue(level);
|
||||
+
|
||||
+ final long id = queue.lock.writeLock();
|
||||
+ try {
|
||||
+ queue.queuedCoordinates.add(coordinate);
|
||||
+ queue.queuedLevels.add(level);
|
||||
+ }finally {
|
||||
+ queue.lock.unlockWrite(id);
|
||||
+ }
|
||||
|
||||
this.levelRemoveWorkQueueBitset |= (1L << level);
|
||||
}
|
||||
@@ -163,9 +181,20 @@ public final class Delayed26WayDistancePropagator3D {
|
||||
this.levelIncreaseWorkQueueBitset ^= (1L << queueIndex), queueIndex = 63 ^ Long.numberOfLeadingZeros(this.levelIncreaseWorkQueueBitset)) {
|
||||
|
||||
final Delayed8WayDistancePropagator2D.WorkQueue queue = this.levelIncreaseWorkQueues[queueIndex];
|
||||
- while (!queue.queuedLevels.isEmpty()) {
|
||||
- final long coordinate = queue.queuedCoordinates.removeFirstLong();
|
||||
- byte level = queue.queuedLevels.removeFirstByte();
|
||||
+ while (true) {
|
||||
+
|
||||
+ long coordinate;
|
||||
+ byte level;
|
||||
+ final long id = queue.lock.writeLock();
|
||||
+ try {
|
||||
+ if (queue.queuedLevels.isEmpty()){
|
||||
+ break;
|
||||
+ }
|
||||
+ coordinate = queue.queuedCoordinates.removeFirst();
|
||||
+ level = queue.queuedLevels.removeFirst();
|
||||
+ }finally {
|
||||
+ queue.lock.unlockWrite(id);
|
||||
+ }
|
||||
|
||||
final boolean neighbourCheck = level < 0;
|
||||
|
||||
@@ -232,9 +261,19 @@ public final class Delayed26WayDistancePropagator3D {
|
||||
this.levelRemoveWorkQueueBitset ^= (1L << queueIndex), queueIndex = 63 ^ Long.numberOfLeadingZeros(this.levelRemoveWorkQueueBitset)) {
|
||||
|
||||
final Delayed8WayDistancePropagator2D.WorkQueue queue = this.levelRemoveWorkQueues[queueIndex];
|
||||
- while (!queue.queuedLevels.isEmpty()) {
|
||||
- final long coordinate = queue.queuedCoordinates.removeFirstLong();
|
||||
- final byte level = queue.queuedLevels.removeFirstByte();
|
||||
+ while (true) {
|
||||
+ long coordinate;
|
||||
+ byte level;
|
||||
+ final long id = queue.lock.writeLock();
|
||||
+ try {
|
||||
+ if (queue.queuedLevels.isEmpty()){
|
||||
+ break;
|
||||
+ }
|
||||
+ coordinate = queue.queuedCoordinates.removeFirst();
|
||||
+ level = queue.queuedLevels.removeFirst();
|
||||
+ }finally {
|
||||
+ queue.lock.unlockWrite(id);
|
||||
+ }
|
||||
|
||||
final byte currentLevel = this.levels.removeIfGreaterOrEqual(coordinate, level);
|
||||
if (currentLevel == 0) {
|
||||
diff --git a/src/main/java/io/papermc/paper/util/misc/Delayed8WayDistancePropagator2D.java b/src/main/java/io/papermc/paper/util/misc/Delayed8WayDistancePropagator2D.java
|
||||
index 808d1449ac44ae86a650932365081fbaf178d141..0fa95d81bafc7fe5c1bede7a0608b54795a78fa0 100644
|
||||
--- a/src/main/java/io/papermc/paper/util/misc/Delayed8WayDistancePropagator2D.java
|
||||
+++ b/src/main/java/io/papermc/paper/util/misc/Delayed8WayDistancePropagator2D.java
|
||||
@@ -1,12 +1,14 @@
|
||||
package io.papermc.paper.util.misc;
|
||||
|
||||
+import io.papermc.paper.util.MCUtil;
|
||||
import it.unimi.dsi.fastutil.HashCommon;
|
||||
-import it.unimi.dsi.fastutil.bytes.ByteArrayFIFOQueue;
|
||||
import it.unimi.dsi.fastutil.longs.Long2ByteOpenHashMap;
|
||||
-import it.unimi.dsi.fastutil.longs.LongArrayFIFOQueue;
|
||||
import it.unimi.dsi.fastutil.longs.LongIterator;
|
||||
import it.unimi.dsi.fastutil.longs.LongLinkedOpenHashSet;
|
||||
-import io.papermc.paper.util.MCUtil;
|
||||
+
|
||||
+import java.util.Deque;
|
||||
+import java.util.concurrent.ConcurrentLinkedDeque;
|
||||
+import java.util.concurrent.locks.StampedLock;
|
||||
|
||||
public final class Delayed8WayDistancePropagator2D {
|
||||
|
||||
@@ -356,24 +358,42 @@ public final class Delayed8WayDistancePropagator2D {
|
||||
|
||||
protected final void addToIncreaseWorkQueue(final long coordinate, final byte level) {
|
||||
final WorkQueue queue = this.levelIncreaseWorkQueues[level];
|
||||
- queue.queuedCoordinates.enqueue(coordinate);
|
||||
- queue.queuedLevels.enqueue(level);
|
||||
+
|
||||
+ final long id = queue.lock.writeLock();
|
||||
+ try {
|
||||
+ queue.queuedCoordinates.add(coordinate);
|
||||
+ queue.queuedLevels.add(level);
|
||||
+ }finally {
|
||||
+ queue.lock.unlockWrite(id);
|
||||
+ }
|
||||
|
||||
this.levelIncreaseWorkQueueBitset |= (1L << level);
|
||||
}
|
||||
|
||||
protected final void addToIncreaseWorkQueue(final long coordinate, final byte index, final byte level) {
|
||||
final WorkQueue queue = this.levelIncreaseWorkQueues[index];
|
||||
- queue.queuedCoordinates.enqueue(coordinate);
|
||||
- queue.queuedLevels.enqueue(level);
|
||||
+
|
||||
+ final long id = queue.lock.writeLock();
|
||||
+ try {
|
||||
+ queue.queuedCoordinates.add(coordinate);
|
||||
+ queue.queuedLevels.add(level);
|
||||
+ }finally {
|
||||
+ queue.lock.unlockWrite(id);
|
||||
+ }
|
||||
|
||||
this.levelIncreaseWorkQueueBitset |= (1L << index);
|
||||
}
|
||||
|
||||
protected final void addToRemoveWorkQueue(final long coordinate, final byte level) {
|
||||
final WorkQueue queue = this.levelRemoveWorkQueues[level];
|
||||
- queue.queuedCoordinates.enqueue(coordinate);
|
||||
- queue.queuedLevels.enqueue(level);
|
||||
+
|
||||
+ final long id = queue.lock.writeLock();
|
||||
+ try {
|
||||
+ queue.queuedCoordinates.add(coordinate);
|
||||
+ queue.queuedLevels.add(level);
|
||||
+ }finally {
|
||||
+ queue.lock.unlockWrite(id);
|
||||
+ }
|
||||
|
||||
this.levelRemoveWorkQueueBitset |= (1L << level);
|
||||
}
|
||||
@@ -425,9 +445,19 @@ public final class Delayed8WayDistancePropagator2D {
|
||||
this.levelIncreaseWorkQueueBitset ^= (1L << queueIndex), queueIndex = 63 ^ Long.numberOfLeadingZeros(this.levelIncreaseWorkQueueBitset)) {
|
||||
|
||||
final WorkQueue queue = this.levelIncreaseWorkQueues[queueIndex];
|
||||
- while (!queue.queuedLevels.isEmpty()) {
|
||||
- final long coordinate = queue.queuedCoordinates.removeFirstLong();
|
||||
- byte level = queue.queuedLevels.removeFirstByte();
|
||||
+ while (true) {
|
||||
+ byte level;
|
||||
+ long coordinate;
|
||||
+ final long id = queue.lock.writeLock();
|
||||
+ try {
|
||||
+ if (queue.queuedLevels.isEmpty()){
|
||||
+ break;
|
||||
+ }
|
||||
+ coordinate = queue.queuedCoordinates.removeFirst();
|
||||
+ level = queue.queuedLevels.removeFirst();
|
||||
+ }finally {
|
||||
+ queue.lock.unlockWrite(id);
|
||||
+ }
|
||||
|
||||
final boolean neighbourCheck = level < 0;
|
||||
|
||||
@@ -491,9 +521,20 @@ public final class Delayed8WayDistancePropagator2D {
|
||||
this.levelRemoveWorkQueueBitset ^= (1L << queueIndex), queueIndex = 63 ^ Long.numberOfLeadingZeros(this.levelRemoveWorkQueueBitset)) {
|
||||
|
||||
final WorkQueue queue = this.levelRemoveWorkQueues[queueIndex];
|
||||
- while (!queue.queuedLevels.isEmpty()) {
|
||||
- final long coordinate = queue.queuedCoordinates.removeFirstLong();
|
||||
- final byte level = queue.queuedLevels.removeFirstByte();
|
||||
+ while (true) {
|
||||
+ long coordinate;
|
||||
+ byte level;
|
||||
+
|
||||
+ final long id = queue.lock.writeLock();
|
||||
+ try {
|
||||
+ if (queue.queuedLevels.isEmpty()){
|
||||
+ break;
|
||||
+ }
|
||||
+ coordinate = queue.queuedCoordinates.removeFirst();
|
||||
+ level = queue.queuedLevels.removeFirst();
|
||||
+ }finally {
|
||||
+ queue.lock.unlockWrite(id);
|
||||
+ }
|
||||
|
||||
final byte currentLevel = this.levels.removeIfGreaterOrEqual(coordinate, level);
|
||||
if (currentLevel == 0) {
|
||||
@@ -678,41 +719,9 @@ public final class Delayed8WayDistancePropagator2D {
|
||||
}
|
||||
|
||||
protected static final class WorkQueue {
|
||||
-
|
||||
- public final NoResizeLongArrayFIFODeque queuedCoordinates = new NoResizeLongArrayFIFODeque();
|
||||
- public final NoResizeByteArrayFIFODeque queuedLevels = new NoResizeByteArrayFIFODeque();
|
||||
-
|
||||
+ public final Deque<Long> queuedCoordinates = new ConcurrentLinkedDeque<>();
|
||||
+ public final Deque<Byte> queuedLevels = new ConcurrentLinkedDeque<>();
|
||||
+ public final StampedLock lock = new StampedLock();
|
||||
}
|
||||
|
||||
- protected static final class NoResizeLongArrayFIFODeque extends LongArrayFIFOQueue {
|
||||
-
|
||||
- /**
|
||||
- * Assumes non-empty. If empty, undefined behaviour.
|
||||
- */
|
||||
- public long removeFirstLong() {
|
||||
- // copied from superclass
|
||||
- long t = this.array[this.start];
|
||||
- if (++this.start == this.length) {
|
||||
- this.start = 0;
|
||||
- }
|
||||
-
|
||||
- return t;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- protected static final class NoResizeByteArrayFIFODeque extends ByteArrayFIFOQueue {
|
||||
-
|
||||
- /**
|
||||
- * Assumes non-empty. If empty, undefined behaviour.
|
||||
- */
|
||||
- public byte removeFirstByte() {
|
||||
- // copied from superclass
|
||||
- byte t = this.array[this.start];
|
||||
- if (++this.start == this.length) {
|
||||
- this.start = 0;
|
||||
- }
|
||||
-
|
||||
- return t;
|
||||
- }
|
||||
- }
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/ai/village/poi/PoiManager.java b/src/main/java/net/minecraft/world/entity/ai/village/poi/PoiManager.java
|
||||
index 8950b220b9a3512cd4667beb7bdec0e82e07edc6..91fe5898270495aa89586b74ebfd649ef1e0b342 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/ai/village/poi/PoiManager.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/ai/village/poi/PoiManager.java
|
||||
@@ -4,8 +4,7 @@ import com.mojang.datafixers.DataFixer;
|
||||
import com.mojang.datafixers.util.Pair;
|
||||
import it.unimi.dsi.fastutil.longs.Long2ByteMap;
|
||||
import it.unimi.dsi.fastutil.longs.Long2ByteOpenHashMap;
|
||||
-import it.unimi.dsi.fastutil.longs.LongOpenHashSet;
|
||||
-import it.unimi.dsi.fastutil.longs.LongSet;
|
||||
+
|
||||
import java.nio.file.Path;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
Reference in New Issue
Block a user