Compare commits
7 Commits
1.21.4-c20
...
1.21.4-2e0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2aaa180a4e | ||
|
|
c4af5b30dc | ||
|
|
56990d8dc3 | ||
|
|
b1f19647e3 | ||
|
|
dcfdff1a0b | ||
|
|
7b76c3dbaf | ||
|
|
adbdf9c29c |
12
.github/dependabot.yml
vendored
Normal file
12
.github/dependabot.yml
vendored
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# To get started with Dependabot version updates, you'll need to specify which
|
||||||
|
# package ecosystems to update and where the package manifests are located.
|
||||||
|
# Please see the documentation for all configuration options:
|
||||||
|
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file
|
||||||
|
|
||||||
|
version: 2
|
||||||
|
updates:
|
||||||
|
# Enable version updates for github actions
|
||||||
|
- package-ecosystem: "github-actions" # See documentation for possible values
|
||||||
|
directory: "/" # Location of package manifests
|
||||||
|
schedule:
|
||||||
|
interval: "weekly"
|
||||||
3
.github/workflows/build_1.21.4.yml
vendored
3
.github/workflows/build_1.21.4.yml
vendored
@@ -41,7 +41,7 @@ jobs:
|
|||||||
uses: "actions/upload-artifact@v4"
|
uses: "actions/upload-artifact@v4"
|
||||||
with:
|
with:
|
||||||
name: "${{ env.project_id_b }} CI Artifacts"
|
name: "${{ env.project_id_b }} CI Artifacts"
|
||||||
path: "luminol-server/build/libs/*.jar"
|
path: "luminol-server/build/libs/*-paperclip.jar"
|
||||||
- name: SetENV
|
- name: SetENV
|
||||||
if: github.event_name != 'pull_request'
|
if: github.event_name != 'pull_request'
|
||||||
run: sh scripts/SetENV.sh
|
run: sh scripts/SetENV.sh
|
||||||
@@ -58,7 +58,6 @@ jobs:
|
|||||||
${{ env.commit_msg }}
|
${{ env.commit_msg }}
|
||||||
artifacts: |
|
artifacts: |
|
||||||
${{ env.jar_dir }}
|
${{ env.jar_dir }}
|
||||||
${{ env.jar_dir_bundler }}
|
|
||||||
generateReleaseNotes: true
|
generateReleaseNotes: true
|
||||||
prerelease: ${{ env.pre }}
|
prerelease: ${{ env.pre }}
|
||||||
makeLatest: ${{ env.make_latest }}
|
makeLatest: ${{ env.make_latest }}
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ group = me.earthme.luminol
|
|||||||
version=1.21.4-R0.1-SNAPSHOT
|
version=1.21.4-R0.1-SNAPSHOT
|
||||||
mcVersion=1.21.4
|
mcVersion=1.21.4
|
||||||
|
|
||||||
foliaRef=d3969cdc419b84e2d94c13854d4eb94ae2e0b7be
|
foliaRef=29867414449cede8010bac42dc9bf31dd21eb278
|
||||||
|
|
||||||
org.gradle.configuration-cache=true
|
org.gradle.configuration-cache=true
|
||||||
org.gradle.caching=true
|
org.gradle.caching=true
|
||||||
|
|||||||
@@ -118,10 +118,10 @@ index f2d2ddfd964bff914e41c0b4150fe1aad7866ebf..7defcd15c44601bfd2f7f55046038693
|
|||||||
}
|
}
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
|
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
|
||||||
index 423534a1ff02bd0d0f9baacfe2428f45c7d9acb9..9fd3fe181df2ce6dbe695f6463d3940ac4c01167 100644
|
index dbf9231b1f01576906b90a3ddf0bf2cbbeb4590a..b17ace9118c94a756fa2901621c6b2b9bd9e5764 100644
|
||||||
--- a/net/minecraft/server/level/ServerPlayer.java
|
--- a/net/minecraft/server/level/ServerPlayer.java
|
||||||
+++ b/net/minecraft/server/level/ServerPlayer.java
|
+++ b/net/minecraft/server/level/ServerPlayer.java
|
||||||
@@ -393,7 +393,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
@@ -400,7 +400,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||||
public com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent
|
public com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent
|
||||||
public @Nullable String clientBrandName = null; // Paper - Brand support
|
public @Nullable String clientBrandName = null; // Paper - Brand support
|
||||||
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event
|
public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event
|
||||||
@@ -132,7 +132,7 @@ index 423534a1ff02bd0d0f9baacfe2428f45c7d9acb9..9fd3fe181df2ce6dbe695f6463d3940a
|
|||||||
// Paper start - rewrite chunk system
|
// Paper start - rewrite chunk system
|
||||||
private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader;
|
private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader;
|
||||||
private final ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.ViewDistanceHolder viewDistanceHolder = new ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.ViewDistanceHolder();
|
private final ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.ViewDistanceHolder viewDistanceHolder = new ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.ViewDistanceHolder();
|
||||||
@@ -1006,8 +1008,35 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
@@ -1013,8 +1015,35 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||||
this.trackEnteredOrExitedLavaOnVehicle();
|
this.trackEnteredOrExitedLavaOnVehicle();
|
||||||
this.updatePlayerAttributes();
|
this.updatePlayerAttributes();
|
||||||
this.advancements.flushDirty(this);
|
this.advancements.flushDirty(this);
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Fix uncorrected death check of folia
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
diff --git a/net/minecraft/world/inventory/AbstractContainerMenu.java b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||||
index 50af953a4698a3c6e16b840fab764dd733b3fbc9..a9c058238819f3631d94ac306185e909821caf35 100644
|
index acca8c51d2030c675c157b10d0bbc6af631afe61..d0b688e69979c5e7b8267ac96bd71bcd33444c41 100644
|
||||||
--- a/net/minecraft/world/inventory/AbstractContainerMenu.java
|
--- a/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||||
+++ b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
+++ b/net/minecraft/world/inventory/AbstractContainerMenu.java
|
||||||
@@ -679,7 +679,7 @@ public abstract class AbstractContainerMenu {
|
@@ -689,7 +689,7 @@ public abstract class AbstractContainerMenu {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void dropOrPlaceInInventory(Player player, ItemStack stack) {
|
private static void dropOrPlaceInInventory(Player player, ItemStack stack) {
|
||||||
|
|||||||
@@ -1,381 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: MrHua269 <mrhua269@gmail.com>
|
|
||||||
Date: Thu, 20 Mar 2025 23:12:30 +0800
|
|
||||||
Subject: [PATCH] Revert RegionizedTaskQueue referent counter changes
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/io/papermc/paper/threadedregions/RegionizedTaskQueue.java b/io/papermc/paper/threadedregions/RegionizedTaskQueue.java
|
|
||||||
index 745ab870310733b569681f5280895bb9798620a4..9b8d06c77aa71acbe25151d82777e5dfa4e4a5f7 100644
|
|
||||||
--- a/io/papermc/paper/threadedregions/RegionizedTaskQueue.java
|
|
||||||
+++ b/io/papermc/paper/threadedregions/RegionizedTaskQueue.java
|
|
||||||
@@ -24,7 +24,7 @@ public final class RegionizedTaskQueue {
|
|
||||||
|
|
||||||
public PrioritisedExecutor.PrioritisedTask createChunkTask(final ServerLevel world, final int chunkX, final int chunkZ,
|
|
||||||
final Runnable run) {
|
|
||||||
- return this.createChunkTask(world, chunkX, chunkZ, run, Priority.NORMAL);
|
|
||||||
+ return new PrioritisedQueue.ChunkBasedPriorityTask(world.taskQueueRegionData, chunkX, chunkZ, true, run, Priority.NORMAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PrioritisedExecutor.PrioritisedTask createChunkTask(final ServerLevel world, final int chunkX, final int chunkZ,
|
|
||||||
@@ -34,7 +34,7 @@ public final class RegionizedTaskQueue {
|
|
||||||
|
|
||||||
public PrioritisedExecutor.PrioritisedTask createTickTaskQueue(final ServerLevel world, final int chunkX, final int chunkZ,
|
|
||||||
final Runnable run) {
|
|
||||||
- return this.createTickTaskQueue(world, chunkX, chunkZ, run, Priority.NORMAL);
|
|
||||||
+ return new PrioritisedQueue.ChunkBasedPriorityTask(world.taskQueueRegionData, chunkX, chunkZ, false, run, Priority.NORMAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
public PrioritisedExecutor.PrioritisedTask createTickTaskQueue(final ServerLevel world, final int chunkX, final int chunkZ,
|
|
||||||
@@ -73,7 +73,7 @@ public final class RegionizedTaskQueue {
|
|
||||||
public static final class WorldRegionTaskData {
|
|
||||||
private final ServerLevel world;
|
|
||||||
private final MultiThreadedQueue<Runnable> globalChunkTask = new MultiThreadedQueue<>();
|
|
||||||
- private final ConcurrentLong2ReferenceChainedHashTable<ReferenceCountData> referenceCounters = new ConcurrentLong2ReferenceChainedHashTable<>();
|
|
||||||
+ private final ConcurrentLong2ReferenceChainedHashTable<AtomicLong> referenceCounters = new ConcurrentLong2ReferenceChainedHashTable<>();
|
|
||||||
|
|
||||||
public WorldRegionTaskData(final ServerLevel world) {
|
|
||||||
this.world = world;
|
|
||||||
@@ -99,7 +99,7 @@ public final class RegionizedTaskQueue {
|
|
||||||
private PrioritisedQueue getQueue(final boolean synchronise, final int chunkX, final int chunkZ, final boolean isChunkTask) {
|
|
||||||
final ThreadedRegionizer<TickRegions.TickRegionData, TickRegions.TickRegionSectionData> regioniser = this.world.regioniser;
|
|
||||||
final ThreadedRegionizer.ThreadedRegion<TickRegions.TickRegionData, TickRegions.TickRegionSectionData> region
|
|
||||||
- = synchronise ? regioniser.getRegionAtSynchronised(chunkX, chunkZ) : regioniser.getRegionAtUnsynchronised(chunkX, chunkZ);
|
|
||||||
+ = synchronise ? regioniser.getRegionAtSynchronised(chunkX, chunkZ) : regioniser.getRegionAtUnsynchronised(chunkX, chunkZ);
|
|
||||||
if (region == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
@@ -109,13 +109,13 @@ public final class RegionizedTaskQueue {
|
|
||||||
|
|
||||||
private void removeTicket(final long coord) {
|
|
||||||
this.world.moonrise$getChunkTaskScheduler().chunkHolderManager.removeTicketAtLevel(
|
|
||||||
- TASK_QUEUE_TICKET, coord, ChunkHolderManager.MAX_TICKET_LEVEL, Unit.INSTANCE
|
|
||||||
+ TASK_QUEUE_TICKET, coord, ChunkHolderManager.MAX_TICKET_LEVEL, Unit.INSTANCE
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void addTicket(final long coord) {
|
|
||||||
this.world.moonrise$getChunkTaskScheduler().chunkHolderManager.addTicketAtLevel(
|
|
||||||
- TASK_QUEUE_TICKET, coord, ChunkHolderManager.MAX_TICKET_LEVEL, Unit.INSTANCE
|
|
||||||
+ TASK_QUEUE_TICKET, coord, ChunkHolderManager.MAX_TICKET_LEVEL, Unit.INSTANCE
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -123,95 +123,96 @@ public final class RegionizedTaskQueue {
|
|
||||||
this.world.moonrise$getChunkTaskScheduler().chunkHolderManager.processTicketUpdates(CoordinateUtils.getChunkX(coord), CoordinateUtils.getChunkZ(coord));
|
|
||||||
}
|
|
||||||
|
|
||||||
- // note: only call on acquired referenceCountData
|
|
||||||
- private void ensureTicketAdded(final long coord, final ReferenceCountData referenceCountData) {
|
|
||||||
- if (!referenceCountData.addedTicket) {
|
|
||||||
- // fine if multiple threads do this, no removeTicket may be called for this coord due to reference count inc
|
|
||||||
- this.addTicket(coord);
|
|
||||||
- this.processTicketUpdates(coord);
|
|
||||||
- referenceCountData.addedTicket = true;
|
|
||||||
+ private void decrementReference(final AtomicLong reference, final long coord) {
|
|
||||||
+ final long val = reference.decrementAndGet();
|
|
||||||
+ if (val == 0L) {
|
|
||||||
+ final int chunkX = CoordinateUtils.getChunkX(coord);
|
|
||||||
+ final int chunkZ = CoordinateUtils.getChunkZ(coord);
|
|
||||||
+ final ca.spottedleaf.concurrentutil.lock.ReentrantAreaLock.Node ticketLock = this.world.moonrise$getChunkTaskScheduler().chunkHolderManager.ticketLockArea.lock(chunkX, chunkZ);
|
|
||||||
+ try {
|
|
||||||
+ if (this.referenceCounters.remove(coord, reference) == reference) {
|
|
||||||
+ WorldRegionTaskData.this.removeTicket(coord);
|
|
||||||
+ } // else: race condition, something replaced our reference - not our issue anymore
|
|
||||||
+ } finally {
|
|
||||||
+ this.world.moonrise$getChunkTaskScheduler().chunkHolderManager.ticketLockArea.unlock(ticketLock);
|
|
||||||
+ }
|
|
||||||
+ } else if (val < 0L) {
|
|
||||||
+ throw new IllegalStateException("Reference count < 0: " + val);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- private void decrementReference(final ReferenceCountData referenceCountData, final long coord) {
|
|
||||||
- if (!referenceCountData.decreaseReferenceCount()) {
|
|
||||||
- return;
|
|
||||||
- } // else: need to remove ticket
|
|
||||||
-
|
|
||||||
- // note: it is possible that another thread increments and then removes the reference before we can, so
|
|
||||||
- // use ifPresent
|
|
||||||
- this.referenceCounters.computeIfPresent(coord, (final long keyInMap, final ReferenceCountData valueInMap) -> {
|
|
||||||
- if (valueInMap.referenceCount.get() != 0L) {
|
|
||||||
- return valueInMap;
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- // note: valueInMap may not be referenceCountData
|
|
||||||
-
|
|
||||||
- // possible to invoke this outside of the compute call, but not required and requires additional logic
|
|
||||||
- WorldRegionTaskData.this.removeTicket(keyInMap);
|
|
||||||
+ private AtomicLong incrementReference(final long coord) {
|
|
||||||
+ final AtomicLong ret = this.referenceCounters.get(coord);
|
|
||||||
+ if (ret != null) {
|
|
||||||
+ // try to fast acquire counter
|
|
||||||
+ int failures = 0;
|
|
||||||
+ for (long curr = ret.get();;) {
|
|
||||||
+ if (curr == 0L) {
|
|
||||||
+ // failed to fast acquire as reference expired
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- return null;
|
|
||||||
- });
|
|
||||||
- }
|
|
||||||
+ for (int i = 0; i < failures; ++i) {
|
|
||||||
+ ConcurrentUtil.backoff();
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- private ReferenceCountData incrementReference(final long coord) {
|
|
||||||
- ReferenceCountData referenceCountData = this.referenceCounters.get(coord);
|
|
||||||
+ if (curr == (curr = ret.compareAndExchange(curr, curr + 1L))) {
|
|
||||||
+ return ret;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (referenceCountData != null && referenceCountData.addCount()) {
|
|
||||||
- this.ensureTicketAdded(coord, referenceCountData);
|
|
||||||
- return referenceCountData;
|
|
||||||
+ ++failures;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
- referenceCountData = this.referenceCounters.compute(coord, (final long keyInMap, final ReferenceCountData valueInMap) -> {
|
|
||||||
+ // slow acquire
|
|
||||||
+ final int chunkX = CoordinateUtils.getChunkX(coord);
|
|
||||||
+ final int chunkZ = CoordinateUtils.getChunkZ(coord);
|
|
||||||
+ final ca.spottedleaf.concurrentutil.lock.ReentrantAreaLock.Node ticketLock = this.world.moonrise$getChunkTaskScheduler().chunkHolderManager.ticketLockArea.lock(chunkX, chunkZ);
|
|
||||||
+ final AtomicLong ret2;
|
|
||||||
+ final boolean processTicketUpdates;
|
|
||||||
+ try {
|
|
||||||
+ final AtomicLong replace = new AtomicLong(1L);
|
|
||||||
+ final AtomicLong valueInMap = this.referenceCounters.putIfAbsent(coord, replace);
|
|
||||||
if (valueInMap == null) {
|
|
||||||
- // sets reference count to 1
|
|
||||||
- return new ReferenceCountData();
|
|
||||||
- }
|
|
||||||
- // OK if we add from 0, the remove call will use compute() and catch this race condition
|
|
||||||
- valueInMap.referenceCount.getAndIncrement();
|
|
||||||
-
|
|
||||||
- return valueInMap;
|
|
||||||
- });
|
|
||||||
-
|
|
||||||
- this.ensureTicketAdded(coord, referenceCountData);
|
|
||||||
-
|
|
||||||
- return referenceCountData;
|
|
||||||
- }
|
|
||||||
- }
|
|
||||||
-
|
|
||||||
- private static final class ReferenceCountData {
|
|
||||||
-
|
|
||||||
- public final AtomicLong referenceCount = new AtomicLong(1L);
|
|
||||||
- public volatile boolean addedTicket;
|
|
||||||
+ // replaced, we should usually be here
|
|
||||||
+ this.addTicket(coord);
|
|
||||||
+ ret2 = replace;
|
|
||||||
+ processTicketUpdates = true;
|
|
||||||
+ } else {
|
|
||||||
+ processTicketUpdates = false;
|
|
||||||
+ int failures = 0;
|
|
||||||
+ for (long curr = valueInMap.get();;) {
|
|
||||||
+ if (curr == 0L) {
|
|
||||||
+ // don't need to add ticket here, since ticket is only removed during the lock
|
|
||||||
+ // we just need to replace the value in the map so that the thread removing fails and doesn't
|
|
||||||
+ // remove the ticket (see decrementReference)
|
|
||||||
+ this.referenceCounters.put(coord, replace);
|
|
||||||
+ ret2 = replace;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- // returns false if reference count is 0, otherwise increments ref count
|
|
||||||
- public boolean addCount() {
|
|
||||||
- int failures = 0;
|
|
||||||
- for (long curr = this.referenceCount.get();;) {
|
|
||||||
- for (int i = 0; i < failures; ++i) {
|
|
||||||
- Thread.onSpinWait();
|
|
||||||
- }
|
|
||||||
+ for (int i = 0; i < failures; ++i) {
|
|
||||||
+ ConcurrentUtil.backoff();
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (curr == 0L) {
|
|
||||||
- return false;
|
|
||||||
- }
|
|
||||||
+ if (curr == (curr = valueInMap.compareAndExchange(curr, curr + 1L))) {
|
|
||||||
+ // acquired
|
|
||||||
+ ret2 = valueInMap;
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- if (curr == (curr = this.referenceCount.compareAndExchange(curr, curr + 1L))) {
|
|
||||||
- return true;
|
|
||||||
+ ++failures;
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
-
|
|
||||||
- ++failures;
|
|
||||||
+ } finally {
|
|
||||||
+ this.world.moonrise$getChunkTaskScheduler().chunkHolderManager.ticketLockArea.unlock(ticketLock);
|
|
||||||
}
|
|
||||||
- }
|
|
||||||
|
|
||||||
- // returns true if new reference count is 0
|
|
||||||
- public boolean decreaseReferenceCount() {
|
|
||||||
- final long res = this.referenceCount.decrementAndGet();
|
|
||||||
- if (res >= 0L) {
|
|
||||||
- return res == 0L;
|
|
||||||
- } else {
|
|
||||||
- throw new IllegalStateException("Negative reference count");
|
|
||||||
+ if (processTicketUpdates) {
|
|
||||||
+ this.processTicketUpdates(coord);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ return ret2;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -240,10 +241,10 @@ public final class RegionizedTaskQueue {
|
|
||||||
void split(final ThreadedRegionizer<TickRegions.TickRegionData, TickRegions.TickRegionSectionData> regioniser,
|
|
||||||
final Long2ReferenceOpenHashMap<ThreadedRegionizer.ThreadedRegion<TickRegions.TickRegionData, TickRegions.TickRegionSectionData>> into) {
|
|
||||||
this.tickTaskQueue.split(
|
|
||||||
- false, regioniser, into
|
|
||||||
+ false, regioniser, into
|
|
||||||
);
|
|
||||||
this.chunkQueue.split(
|
|
||||||
- true, regioniser, into
|
|
||||||
+ true, regioniser, into
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -340,7 +341,7 @@ public final class RegionizedTaskQueue {
|
|
||||||
final ThreadedRegionizer<TickRegions.TickRegionData, TickRegions.TickRegionSectionData> regioniser,
|
|
||||||
final Long2ReferenceOpenHashMap<ThreadedRegionizer.ThreadedRegion<TickRegions.TickRegionData, TickRegions.TickRegionSectionData>> into) {
|
|
||||||
final Reference2ReferenceOpenHashMap<ThreadedRegionizer.ThreadedRegion<TickRegions.TickRegionData, TickRegions.TickRegionSectionData>, ArrayDeque<ChunkBasedPriorityTask>[]>
|
|
||||||
- split = new Reference2ReferenceOpenHashMap<>();
|
|
||||||
+ split = new Reference2ReferenceOpenHashMap<>();
|
|
||||||
final int shift = regioniser.sectionChunkShift;
|
|
||||||
synchronized (this) {
|
|
||||||
this.isDestroyed = true;
|
|
||||||
@@ -356,7 +357,7 @@ public final class RegionizedTaskQueue {
|
|
||||||
final int sectionZ = task.chunkZ >> shift;
|
|
||||||
final long sectionKey = CoordinateUtils.getChunkKey(sectionX, sectionZ);
|
|
||||||
final ThreadedRegionizer.ThreadedRegion<TickRegions.TickRegionData, TickRegions.TickRegionSectionData>
|
|
||||||
- region = into.get(sectionKey);
|
|
||||||
+ region = into.get(sectionKey);
|
|
||||||
if (region == null) {
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
@@ -378,7 +379,7 @@ public final class RegionizedTaskQueue {
|
|
||||||
iterator = split.reference2ReferenceEntrySet().fastIterator();
|
|
||||||
iterator.hasNext();) {
|
|
||||||
final Reference2ReferenceMap.Entry<ThreadedRegionizer.ThreadedRegion<TickRegions.TickRegionData, TickRegions.TickRegionSectionData>, ArrayDeque<ChunkBasedPriorityTask>[]>
|
|
||||||
- entry = iterator.next();
|
|
||||||
+ entry = iterator.next();
|
|
||||||
final RegionTaskQueueData taskQueueData = entry.getKey().getData().getTaskQueueData();
|
|
||||||
mergeInto(isChunkData ? taskQueueData.chunkQueue : taskQueueData.tickTaskQueue, entry.getValue());
|
|
||||||
}
|
|
||||||
@@ -408,7 +409,7 @@ public final class RegionizedTaskQueue {
|
|
||||||
final ArrayDeque<ChunkBasedPriorityTask>[] queues = this.queues;
|
|
||||||
final int max = Priority.IDLE.priority;
|
|
||||||
ChunkBasedPriorityTask task = null;
|
|
||||||
- ReferenceCountData referenceCounter = null;
|
|
||||||
+ AtomicLong referenceCounter = null;
|
|
||||||
synchronized (this) {
|
|
||||||
if (this.isDestroyed) {
|
|
||||||
throw new IllegalStateException("Attempting to poll from dead queue");
|
|
||||||
@@ -440,10 +441,9 @@ public final class RegionizedTaskQueue {
|
|
||||||
|
|
||||||
private static final class ChunkBasedPriorityTask implements PrioritisedExecutor.PrioritisedTask {
|
|
||||||
|
|
||||||
- private static final ReferenceCountData REFERENCE_COUNTER_NOT_SET = new ReferenceCountData();
|
|
||||||
- static {
|
|
||||||
- REFERENCE_COUNTER_NOT_SET.referenceCount.set((long)Integer.MIN_VALUE);
|
|
||||||
- }
|
|
||||||
+ private static final AtomicLong REFERENCE_COUNTER_NOT_SET = new AtomicLong(-1L);
|
|
||||||
+
|
|
||||||
+
|
|
||||||
|
|
||||||
private final WorldRegionTaskData world;
|
|
||||||
private final int chunkX;
|
|
||||||
@@ -451,8 +451,8 @@ public final class RegionizedTaskQueue {
|
|
||||||
private final long sectionLowerLeftCoord; // chunk coordinate
|
|
||||||
private final boolean isChunkTask;
|
|
||||||
|
|
||||||
- private volatile ReferenceCountData referenceCounter;
|
|
||||||
- private static final VarHandle REFERENCE_COUNTER_HANDLE = ConcurrentUtil.getVarHandle(ChunkBasedPriorityTask.class, "referenceCounter", ReferenceCountData.class);
|
|
||||||
+ private volatile AtomicLong referenceCounter;
|
|
||||||
+ private static final VarHandle REFERENCE_COUNTER_HANDLE = ConcurrentUtil.getVarHandle(ChunkBasedPriorityTask.class, "referenceCounter", AtomicLong.class);
|
|
||||||
private Runnable run;
|
|
||||||
private volatile Priority priority;
|
|
||||||
private static final VarHandle PRIORITY_HANDLE = ConcurrentUtil.getVarHandle(ChunkBasedPriorityTask.class, "priority", Priority.class);
|
|
||||||
@@ -489,16 +489,16 @@ public final class RegionizedTaskQueue {
|
|
||||||
return (Priority)PRIORITY_HANDLE.compareAndExchange(this, expect, update);
|
|
||||||
}
|
|
||||||
|
|
||||||
- private void setReferenceCounterPlain(final ReferenceCountData value) {
|
|
||||||
+ private void setReferenceCounterPlain(final AtomicLong value) {
|
|
||||||
REFERENCE_COUNTER_HANDLE.set(this, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
- private ReferenceCountData getReferenceCounterVolatile() {
|
|
||||||
- return (ReferenceCountData)REFERENCE_COUNTER_HANDLE.get(this);
|
|
||||||
+ private AtomicLong getReferenceCounterVolatile() {
|
|
||||||
+ return (AtomicLong)REFERENCE_COUNTER_HANDLE.get(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
- private ReferenceCountData compareAndExchangeReferenceCounter(final ReferenceCountData expect, final ReferenceCountData update) {
|
|
||||||
- return (ReferenceCountData)REFERENCE_COUNTER_HANDLE.compareAndExchange(this, expect, update);
|
|
||||||
+ private AtomicLong compareAndExchangeReferenceCounter(final AtomicLong expect, final AtomicLong update) {
|
|
||||||
+ return (AtomicLong)REFERENCE_COUNTER_HANDLE.compareAndExchange(this, expect, update);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void executeInternal() {
|
|
||||||
@@ -515,7 +515,7 @@ public final class RegionizedTaskQueue {
|
|
||||||
|
|
||||||
private boolean tryComplete(final boolean cancel) {
|
|
||||||
int failures = 0;
|
|
||||||
- for (ReferenceCountData curr = this.getReferenceCounterVolatile();;) {
|
|
||||||
+ for (AtomicLong curr = this.getReferenceCounterVolatile();;) {
|
|
||||||
if (curr == null) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
@@ -564,7 +564,7 @@ public final class RegionizedTaskQueue {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
- final ReferenceCountData referenceCounter = this.world.incrementReference(this.sectionLowerLeftCoord);
|
|
||||||
+ final AtomicLong referenceCounter = this.world.incrementReference(this.sectionLowerLeftCoord);
|
|
||||||
if (this.compareAndExchangeReferenceCounter(REFERENCE_COUNTER_NOT_SET, referenceCounter) != REFERENCE_COUNTER_NOT_SET) {
|
|
||||||
// we don't expect race conditions here, so it is OK if we have to needlessly reference count
|
|
||||||
this.world.decrementReference(referenceCounter, this.sectionLowerLeftCoord);
|
|
||||||
@@ -614,7 +614,7 @@ public final class RegionizedTaskQueue {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- private ReferenceCountData trySetCompleting(final int minPriority) {
|
|
||||||
+ private AtomicLong trySetCompleting(final int minPriority) {
|
|
||||||
// first, try to set priority to EXECUTING
|
|
||||||
for (Priority curr = this.getPriorityVolatile();;) {
|
|
||||||
if (curr.isLowerPriority(minPriority)) {
|
|
||||||
@@ -626,7 +626,7 @@ public final class RegionizedTaskQueue {
|
|
||||||
} // else: continue
|
|
||||||
}
|
|
||||||
|
|
||||||
- for (ReferenceCountData curr = this.getReferenceCounterVolatile();;) {
|
|
||||||
+ for (AtomicLong curr = this.getReferenceCounterVolatile();;) {
|
|
||||||
if (curr == null) {
|
|
||||||
// something acquired before us
|
|
||||||
return null;
|
|
||||||
@@ -639,7 +639,6 @@ public final class RegionizedTaskQueue {
|
|
||||||
if (curr != (curr = this.compareAndExchangeReferenceCounter(curr, null))) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
-
|
|
||||||
return curr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -647,7 +646,7 @@ public final class RegionizedTaskQueue {
|
|
||||||
private void updatePriorityInQueue() {
|
|
||||||
boolean synchronise = false;
|
|
||||||
for (;;) {
|
|
||||||
- final ReferenceCountData referenceCount = this.getReferenceCounterVolatile();
|
|
||||||
+ final AtomicLong referenceCount = this.getReferenceCounterVolatile();
|
|
||||||
if (referenceCount == REFERENCE_COUNTER_NOT_SET || referenceCount == null) {
|
|
||||||
// cancelled or not queued
|
|
||||||
return;
|
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Purpur Use alternative keep alive
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
|
diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
|
||||||
index 6eca15223b92aedac74233db886e2c1248750e2c..7507f32b5f0f7fbbf35eeaaf03bf9d99694c1683 100644
|
index 79fe336adf35f4f007461ed050e6301764fe7fc3..a5b805b98cf138eabfb06f4ff202462be60c2995 100644
|
||||||
--- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
|
--- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
|
||||||
+++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
|
+++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java
|
||||||
@@ -41,6 +41,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
|
@@ -41,6 +41,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
|
||||||
@@ -33,7 +33,7 @@ index 6eca15223b92aedac74233db886e2c1248750e2c..7507f32b5f0f7fbbf35eeaaf03bf9d99
|
|||||||
if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) {
|
if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) {
|
||||||
int i = (int)(Util.getMillis() - this.keepAliveTime);
|
int i = (int)(Util.getMillis() - this.keepAliveTime);
|
||||||
this.latency = (this.latency * 3 + i) / 4;
|
this.latency = (this.latency * 3 + i) / 4;
|
||||||
@@ -250,7 +261,22 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
|
@@ -254,7 +265,22 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
|
||||||
// Paper start - give clients a longer time to respond to pings as per pre 1.12.2 timings
|
// Paper start - give clients a longer time to respond to pings as per pre 1.12.2 timings
|
||||||
// This should effectively place the keepalive handling back to "as it was" before 1.12.2
|
// This should effectively place the keepalive handling back to "as it was" before 1.12.2
|
||||||
final long elapsedTime = millis - this.keepAliveTime;
|
final long elapsedTime = millis - this.keepAliveTime;
|
||||||
@@ -57,7 +57,7 @@ index 6eca15223b92aedac74233db886e2c1248750e2c..7507f32b5f0f7fbbf35eeaaf03bf9d99
|
|||||||
if (this.keepAlivePending) {
|
if (this.keepAlivePending) {
|
||||||
if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected
|
if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected
|
||||||
this.disconnect(TIMEOUT_DISCONNECTION_MESSAGE, org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); // Paper - kick event cause
|
this.disconnect(TIMEOUT_DISCONNECTION_MESSAGE, org.bukkit.event.player.PlayerKickEvent.Cause.TIMEOUT); // Paper - kick event cause
|
||||||
@@ -263,6 +289,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
|
@@ -267,6 +293,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack
|
||||||
this.send(new ClientboundKeepAlivePacket(this.keepAliveChallenge));
|
this.send(new ClientboundKeepAlivePacket(this.keepAliveChallenge));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,10 +6,10 @@ Subject: [PATCH] Leaf Remove useless creating stats json bases on player name
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
||||||
index 548f7a2b0b020ff7fff27396942cc0bc9e755afe..9bf6e8240bf15f08b037b18cfeae15ebb8ea934d 100644
|
index 751b011701d6ae373099226ea63ffbafcd24ce6a..27478c973dc2e9ea2495f5b27127ef085bc5cdf3 100644
|
||||||
--- a/net/minecraft/server/players/PlayerList.java
|
--- a/net/minecraft/server/players/PlayerList.java
|
||||||
+++ b/net/minecraft/server/players/PlayerList.java
|
+++ b/net/minecraft/server/players/PlayerList.java
|
||||||
@@ -1411,6 +1411,8 @@ public abstract class PlayerList {
|
@@ -1416,6 +1416,8 @@ public abstract class PlayerList {
|
||||||
if (serverStatsCounter == null) {
|
if (serverStatsCounter == null) {
|
||||||
File file = this.server.getWorldPath(LevelResource.PLAYER_STATS_DIR).toFile();
|
File file = this.server.getWorldPath(LevelResource.PLAYER_STATS_DIR).toFile();
|
||||||
File file1 = new File(file, uuid + ".json");
|
File file1 = new File(file, uuid + ".json");
|
||||||
@@ -18,7 +18,7 @@ index 548f7a2b0b020ff7fff27396942cc0bc9e755afe..9bf6e8240bf15f08b037b18cfeae15eb
|
|||||||
if (!file1.exists()) {
|
if (!file1.exists()) {
|
||||||
File file2 = new File(file, displayName + ".json"); // CraftBukkit
|
File file2 = new File(file, displayName + ".json"); // CraftBukkit
|
||||||
Path path = file2.toPath();
|
Path path = file2.toPath();
|
||||||
@@ -1418,6 +1420,8 @@ public abstract class PlayerList {
|
@@ -1423,6 +1425,8 @@ public abstract class PlayerList {
|
||||||
file2.renameTo(file1);
|
file2.renameTo(file1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5,10 +5,10 @@ Subject: [PATCH] Add missing teleportation apis for folia
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
|
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
|
||||||
index 9fd3fe181df2ce6dbe695f6463d3940ac4c01167..822d401150d3764004b2570da828b4f69f19dcec 100644
|
index b17ace9118c94a756fa2901621c6b2b9bd9e5764..8a728a3af515da522cd5fab1e731bbc0607f0596 100644
|
||||||
--- a/net/minecraft/server/level/ServerPlayer.java
|
--- a/net/minecraft/server/level/ServerPlayer.java
|
||||||
+++ b/net/minecraft/server/level/ServerPlayer.java
|
+++ b/net/minecraft/server/level/ServerPlayer.java
|
||||||
@@ -1653,6 +1653,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
@@ -1660,6 +1660,9 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
|
||||||
if (respawnComplete != null) {
|
if (respawnComplete != null) {
|
||||||
respawnComplete.accept(ServerPlayer.this);
|
respawnComplete.accept(ServerPlayer.this);
|
||||||
}
|
}
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Leaves Disable moved wrongly threshold
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
index a2fe9286d432909ba0cb3731a166514af768dc37..d60721767f94336eaba09b9bdb12a1420c264e49 100644
|
index a107d9ee24d0e39ce3e3e09bf27af1ea4ae35b96..225045400f152a9a8f030d6fe367764b00d99b24 100644
|
||||||
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
--- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
+++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java
|
||||||
@@ -581,7 +581,7 @@ public class ServerGamePacketListenerImpl
|
@@ -581,7 +581,7 @@ public class ServerGamePacketListenerImpl
|
||||||
@@ -1,70 +0,0 @@
|
|||||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Suisuroru <qwertyuiop14077@qq.com>
|
|
||||||
Date: Thu, 20 Feb 2025 23:56:44 +0800
|
|
||||||
Subject: [PATCH] Leaves-Revert-raid-changes
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/world/effect/BadOmenMobEffect.java b/net/minecraft/world/effect/BadOmenMobEffect.java
|
|
||||||
index 80f17f33f670018240c854df589cf90cdeab6e70..7976b9ae6688b9a07b2ad19d1af3670fe06a0b63 100644
|
|
||||||
--- a/net/minecraft/world/effect/BadOmenMobEffect.java
|
|
||||||
+++ b/net/minecraft/world/effect/BadOmenMobEffect.java
|
|
||||||
@@ -22,6 +22,11 @@ class BadOmenMobEffect extends MobEffect {
|
|
||||||
&& !serverPlayer.isSpectator()
|
|
||||||
&& level.getDifficulty() != Difficulty.PEACEFUL
|
|
||||||
&& level.isVillage(serverPlayer.blockPosition())) {
|
|
||||||
+ // Leaves start - Revert raid changes
|
|
||||||
+ if (me.earthme.luminol.config.modules.misc.RaidChangesConfig.trigger) {
|
|
||||||
+ return level.getRaids().createOrExtendRaid(serverPlayer, serverPlayer.blockPosition()) != null;
|
|
||||||
+ }
|
|
||||||
+ // Leaves end - Revert raid changes
|
|
||||||
Raid raidAt = level.getRaidAt(serverPlayer.blockPosition());
|
|
||||||
if (raidAt == null || raidAt.getRaidOmenLevel() < raidAt.getMaxRaidOmenLevel()) {
|
|
||||||
serverPlayer.addEffect(new MobEffectInstance(MobEffects.RAID_OMEN, 600, amplifier));
|
|
||||||
diff --git a/net/minecraft/world/entity/raid/Raider.java b/net/minecraft/world/entity/raid/Raider.java
|
|
||||||
index 7c385baae81b9a987c0e1e4deb017884600331bc..c2afe945d6a9780ba5f8ac5d6f0b4b2d692fdd51 100644
|
|
||||||
--- a/net/minecraft/world/entity/raid/Raider.java
|
|
||||||
+++ b/net/minecraft/world/entity/raid/Raider.java
|
|
||||||
@@ -125,6 +125,43 @@ public abstract class Raider extends PatrollingMonster {
|
|
||||||
|
|
||||||
currentRaid.removeFromRaid(this, false);
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ // Leaves start - Revert raid changes
|
|
||||||
+ if (this.level() instanceof ServerLevel serverLevel) {
|
|
||||||
+ if (me.earthme.luminol.config.modules.misc.RaidChangesConfig.effect && raid == null && serverLevel.getRaidAt(this.blockPosition()) == null) {
|
|
||||||
+ ItemStack itemstack = this.getItemBySlot(EquipmentSlot.HEAD);
|
|
||||||
+ net.minecraft.world.entity.player.Player entityhuman = null;
|
|
||||||
+ if (entity instanceof net.minecraft.world.entity.player.Player player) {
|
|
||||||
+ entityhuman = player;
|
|
||||||
+ } else if (entity instanceof net.minecraft.world.entity.animal.Wolf wolf) {
|
|
||||||
+ LivingEntity entityliving = wolf.getOwner();
|
|
||||||
+ if (wolf.isTame() && entityliving instanceof net.minecraft.world.entity.player.Player player) {
|
|
||||||
+ entityhuman = player;
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ if (entityhuman != null && !itemstack.isEmpty() && this.isCaptain()) {
|
|
||||||
+ net.minecraft.world.effect.MobEffectInstance mobeffect = entityhuman.getEffect(net.minecraft.world.effect.MobEffects.BAD_OMEN);
|
|
||||||
+ int i = 1;
|
|
||||||
+
|
|
||||||
+ if (mobeffect != null) {
|
|
||||||
+ i += mobeffect.getAmplifier();
|
|
||||||
+ entityhuman.removeEffectNoUpdate(net.minecraft.world.effect.MobEffects.BAD_OMEN);
|
|
||||||
+ } else {
|
|
||||||
+ --i;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ i = net.minecraft.util.Mth.clamp(i, 0, 4);
|
|
||||||
+ net.minecraft.world.effect.MobEffectInstance mobeffect1 = new net.minecraft.world.effect.MobEffectInstance(net.minecraft.world.effect.MobEffects.BAD_OMEN, 120000, i, false, false, true);
|
|
||||||
+
|
|
||||||
+ if (!serverLevel.getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_DISABLE_RAIDS)) {
|
|
||||||
+ entityhuman.addEffect(mobeffect1, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.PATROL_CAPTAIN); // CraftBukkit
|
|
||||||
+ }
|
|
||||||
+ this.setPatrolLeader(false);
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+ // Leaves end - Revert raid changes
|
|
||||||
}
|
|
||||||
|
|
||||||
super.die(cause);
|
|
||||||
@@ -5,7 +5,7 @@ Subject: [PATCH] Purpur-Barrels-and-enderchests-6-rows
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java
|
||||||
index 9bf6e8240bf15f08b037b18cfeae15ebb8ea934d..79e7fcb7949fbc8e3794d481e41d5164dea0b273 100644
|
index 27478c973dc2e9ea2495f5b27127ef085bc5cdf3..9777a5b7ba9916e426ba87d6ee7cd56f0e43c195 100644
|
||||||
--- a/net/minecraft/server/players/PlayerList.java
|
--- a/net/minecraft/server/players/PlayerList.java
|
||||||
+++ b/net/minecraft/server/players/PlayerList.java
|
+++ b/net/minecraft/server/players/PlayerList.java
|
||||||
@@ -1103,6 +1103,10 @@ public abstract class PlayerList {
|
@@ -1103,6 +1103,10 @@ public abstract class PlayerList {
|
||||||
@@ -0,0 +1,105 @@
|
|||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Helvetica Volubi <suisuroru@blue-millennium.fun>
|
||||||
|
Date: Fri, 11 Apr 2025 16:53:57 +0800
|
||||||
|
Subject: [PATCH] Leaves-Revert-raid-changes
|
||||||
|
|
||||||
|
|
||||||
|
diff --git a/net/minecraft/world/effect/BadOmenMobEffect.java b/net/minecraft/world/effect/BadOmenMobEffect.java
|
||||||
|
index 80f17f33f670018240c854df589cf90cdeab6e70..8672757a4d5fb5c247599782fece6b8d7d6ec921 100644
|
||||||
|
--- a/net/minecraft/world/effect/BadOmenMobEffect.java
|
||||||
|
+++ b/net/minecraft/world/effect/BadOmenMobEffect.java
|
||||||
|
@@ -22,6 +22,11 @@ class BadOmenMobEffect extends MobEffect {
|
||||||
|
&& !serverPlayer.isSpectator()
|
||||||
|
&& level.getDifficulty() != Difficulty.PEACEFUL
|
||||||
|
&& level.isVillage(serverPlayer.blockPosition())) {
|
||||||
|
+ // Leaves start - Revert raid changes
|
||||||
|
+ if (me.earthme.luminol.config.modules.misc.RaidChangesConfig.trigger) {
|
||||||
|
+ return level.getRaids().createOrExtendRaid(serverPlayer, serverPlayer.blockPosition()) == null;
|
||||||
|
+ }
|
||||||
|
+ // Leaves end - Revert raid changes
|
||||||
|
Raid raidAt = level.getRaidAt(serverPlayer.blockPosition());
|
||||||
|
if (raidAt == null || raidAt.getRaidOmenLevel() < raidAt.getMaxRaidOmenLevel()) {
|
||||||
|
serverPlayer.addEffect(new MobEffectInstance(MobEffects.RAID_OMEN, 600, amplifier));
|
||||||
|
diff --git a/net/minecraft/world/entity/raid/Raid.java b/net/minecraft/world/entity/raid/Raid.java
|
||||||
|
index 2f45befbb50645f1bfb5961ad725f3670ff0d592..84c6eb2c27510938f590f6c6baa5a94c4c08c4ad 100644
|
||||||
|
--- a/net/minecraft/world/entity/raid/Raid.java
|
||||||
|
+++ b/net/minecraft/world/entity/raid/Raid.java
|
||||||
|
@@ -674,7 +674,7 @@ public class Raid {
|
||||||
|
int i2 = this.center.getX() + Mth.floor(Mth.cos(f2) * 32.0F * f) + this.level.random.nextInt(3) * Mth.floor(f);
|
||||||
|
int i3 = this.center.getZ() + Mth.floor(Mth.sin(f2) * 32.0F * f) + this.level.random.nextInt(3) * Mth.floor(f);
|
||||||
|
int height = this.level.getHeight(Heightmap.Types.WORLD_SURFACE, i2, i3);
|
||||||
|
- if (Mth.abs(height - this.center.getY()) <= 96) {
|
||||||
|
+ if (me.earthme.luminol.config.modules.misc.RaidChangesConfig.height_check || Mth.abs(height - this.center.getY()) <= 96) { // Disable height check
|
||||||
|
mutableBlockPos.set(i2, height, i3);
|
||||||
|
if (!this.level.isVillage(mutableBlockPos) || i <= 7) {
|
||||||
|
int i4 = 10;
|
||||||
|
diff --git a/net/minecraft/world/entity/raid/Raider.java b/net/minecraft/world/entity/raid/Raider.java
|
||||||
|
index 7c385baae81b9a987c0e1e4deb017884600331bc..a0d86c3cc86da734a3cd10d554aaecb5c0b82e59 100644
|
||||||
|
--- a/net/minecraft/world/entity/raid/Raider.java
|
||||||
|
+++ b/net/minecraft/world/entity/raid/Raider.java
|
||||||
|
@@ -125,6 +125,43 @@ public abstract class Raider extends PatrollingMonster {
|
||||||
|
|
||||||
|
currentRaid.removeFromRaid(this, false);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ // Leaves start - Revert raid changes
|
||||||
|
+ if (this.level() instanceof ServerLevel serverLevel) {
|
||||||
|
+ if (me.earthme.luminol.config.modules.misc.RaidChangesConfig.effect && !this.hasRaid()) {
|
||||||
|
+ ItemStack itemstack = this.getItemBySlot(EquipmentSlot.HEAD);
|
||||||
|
+ net.minecraft.world.entity.player.Player entityhuman = null;
|
||||||
|
+ if (entity instanceof net.minecraft.world.entity.player.Player player) {
|
||||||
|
+ entityhuman = player;
|
||||||
|
+ } else if (entity instanceof net.minecraft.world.entity.animal.Wolf wolf) {
|
||||||
|
+ LivingEntity entityliving = wolf.getOwner();
|
||||||
|
+ if (wolf.isTame() && entityliving instanceof net.minecraft.world.entity.player.Player player) {
|
||||||
|
+ entityhuman = player;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (entityhuman != null && !itemstack.isEmpty() && this.isCaptain()) {
|
||||||
|
+ net.minecraft.world.effect.MobEffectInstance mobeffect = entityhuman.getEffect(net.minecraft.world.effect.MobEffects.BAD_OMEN);
|
||||||
|
+ int i = 1;
|
||||||
|
+
|
||||||
|
+ if (mobeffect != null) {
|
||||||
|
+ i += mobeffect.getAmplifier();
|
||||||
|
+ entityhuman.removeEffectNoUpdate(net.minecraft.world.effect.MobEffects.BAD_OMEN);
|
||||||
|
+ } else {
|
||||||
|
+ --i;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ i = net.minecraft.util.Mth.clamp(i, 0, 4);
|
||||||
|
+ net.minecraft.world.effect.MobEffectInstance mobeffect1 = new net.minecraft.world.effect.MobEffectInstance(net.minecraft.world.effect.MobEffects.BAD_OMEN, me.earthme.luminol.config.modules.misc.RaidChangesConfig.infinite ? net.minecraft.world.effect.MobEffectInstance.INFINITE_DURATION : 120000, i, false, false, true);
|
||||||
|
+
|
||||||
|
+ if (!serverLevel.getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_DISABLE_RAIDS)) {
|
||||||
|
+ entityhuman.addEffect(mobeffect1, org.bukkit.event.entity.EntityPotionEffectEvent.Cause.PATROL_CAPTAIN); // CraftBukkit
|
||||||
|
+ }
|
||||||
|
+ this.setPatrolLeader(false);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ // Leaves end - Revert raid changes
|
||||||
|
}
|
||||||
|
|
||||||
|
super.die(cause);
|
||||||
|
diff --git a/net/minecraft/world/item/component/OminousBottleAmplifier.java b/net/minecraft/world/item/component/OminousBottleAmplifier.java
|
||||||
|
index 318f24d67be4daf6993ba547da0540be9c221a75..9a6820fce3977419fd81d802720c318ac15d07c4 100644
|
||||||
|
--- a/net/minecraft/world/item/component/OminousBottleAmplifier.java
|
||||||
|
+++ b/net/minecraft/world/item/component/OminousBottleAmplifier.java
|
||||||
|
@@ -28,7 +28,7 @@ public record OminousBottleAmplifier(int value) implements ConsumableListener, T
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConsume(Level level, LivingEntity entity, ItemStack stack, Consumable consumable) {
|
||||||
|
- entity.addEffect(new MobEffectInstance(MobEffects.BAD_OMEN, 120000, this.value, false, false, true)); // Paper - properly resend entities - diff on change for below
|
||||||
|
+ entity.addEffect(new MobEffectInstance(MobEffects.BAD_OMEN, me.earthme.luminol.config.modules.misc.RaidChangesConfig.infinite ? net.minecraft.world.effect.MobEffectInstance.INFINITE_DURATION : 120000, this.value, false, false, true)); // Paper - properly resend entities - diff on change for below
|
||||||
|
}
|
||||||
|
|
||||||
|
// Paper start - properly resend entities - collect packets for bundle
|
||||||
|
@@ -40,7 +40,7 @@ public record OminousBottleAmplifier(int value) implements ConsumableListener, T
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addToTooltip(Item.TooltipContext context, Consumer<Component> tooltipAdder, TooltipFlag tooltipFlag) {
|
||||||
|
- List<MobEffectInstance> list = List.of(new MobEffectInstance(MobEffects.BAD_OMEN, 120000, this.value, false, false, true));
|
||||||
|
+ List<MobEffectInstance> list = List.of(new MobEffectInstance(MobEffects.BAD_OMEN, me.earthme.luminol.config.modules.misc.RaidChangesConfig.infinite ? net.minecraft.world.effect.MobEffectInstance.INFINITE_DURATION : 120000, this.value, false, false, true));
|
||||||
|
PotionContents.addPotionTooltip(list, tooltipAdder, 1.0F, context.tickRate());
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -22,10 +22,10 @@ index de8b9048c8395c05b8688bc9d984b8ad680f15b3..f42692cd4f0154705c3d5b030d281cfc
|
|||||||
+ // KioCG end
|
+ // KioCG end
|
||||||
}
|
}
|
||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||||
index c9afcd46f6a1b74b82ed68f1df6188369cf53a73..7cb95021f547c94eae7cef0bf5b2d8dff0a04937 100644
|
index ac878520dc4aaa0e6a1ce8de0982d60a8397bc15..af20bc3b9cfb056beca0a341e209a4cc5e869da3 100644
|
||||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||||
@@ -2404,6 +2404,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
@@ -2401,6 +2401,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||||
handle.expToDrop = data.getInt("expToDrop");
|
handle.expToDrop = data.getInt("expToDrop");
|
||||||
handle.keepLevel = data.getBoolean("keepLevel");
|
handle.keepLevel = data.getBoolean("keepLevel");
|
||||||
}
|
}
|
||||||
@@ -41,7 +41,7 @@ index c9afcd46f6a1b74b82ed68f1df6188369cf53a73..7cb95021f547c94eae7cef0bf5b2d8df
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2425,6 +2434,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
@@ -2422,6 +2431,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||||
data.putLong("lastPlayed", System.currentTimeMillis());
|
data.putLong("lastPlayed", System.currentTimeMillis());
|
||||||
data.putString("lastKnownName", handle.getScoreboardName());
|
data.putString("lastKnownName", handle.getScoreboardName());
|
||||||
|
|
||||||
@@ -57,9 +57,9 @@ index c9afcd46f6a1b74b82ed68f1df6188369cf53a73..7cb95021f547c94eae7cef0bf5b2d8df
|
|||||||
// Paper start - persist for use in offline save data
|
// Paper start - persist for use in offline save data
|
||||||
if (!nbttagcompound.contains("Paper")) {
|
if (!nbttagcompound.contains("Paper")) {
|
||||||
nbttagcompound.put("Paper", new CompoundTag());
|
nbttagcompound.put("Paper", new CompoundTag());
|
||||||
@@ -3618,4 +3636,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
@@ -3631,4 +3649,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||||
public void setDeathScreenScore(final int score) {
|
public void setSimplifyContainerDesyncCheck(final boolean simplifyContainerDesyncCheck) {
|
||||||
getHandle().setScore(score);
|
this.simplifyContainerDesyncCheck = simplifyContainerDesyncCheck;
|
||||||
}
|
}
|
||||||
+
|
+
|
||||||
+ // KioCG start - ChunkHot
|
+ // KioCG start - ChunkHot
|
||||||
|
|||||||
@@ -5,10 +5,10 @@ Subject: [PATCH] SparklyPaper Optimize canSee checks
|
|||||||
|
|
||||||
|
|
||||||
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||||
index 7cb95021f547c94eae7cef0bf5b2d8dff0a04937..b80795605a61cb0d7aa9fa7eec960d9a13d8c030 100644
|
index af20bc3b9cfb056beca0a341e209a4cc5e869da3..91dd18a874ea83bed83983ecfa52decce2b163a5 100644
|
||||||
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||||
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java
|
||||||
@@ -214,7 +214,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
@@ -210,7 +210,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||||
private boolean hasPlayedBefore = false;
|
private boolean hasPlayedBefore = false;
|
||||||
private final ConversationTracker conversationTracker = new ConversationTracker();
|
private final ConversationTracker conversationTracker = new ConversationTracker();
|
||||||
private final Set<String> channels = new HashSet<String>();
|
private final Set<String> channels = new HashSet<String>();
|
||||||
@@ -17,7 +17,7 @@ index 7cb95021f547c94eae7cef0bf5b2d8dff0a04937..b80795605a61cb0d7aa9fa7eec960d9a
|
|||||||
private final Set<UUID> unlistedEntities = new HashSet<>(); // Paper - Add Listing API for Player
|
private final Set<UUID> unlistedEntities = new HashSet<>(); // Paper - Add Listing API for Player
|
||||||
private static final WeakHashMap<Plugin, WeakReference<Plugin>> pluginWeakReferences = new WeakHashMap<>();
|
private static final WeakHashMap<Plugin, WeakReference<Plugin>> pluginWeakReferences = new WeakHashMap<>();
|
||||||
private int hash = 0;
|
private int hash = 0;
|
||||||
@@ -2268,9 +2268,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
@@ -2265,9 +2265,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canSee(org.bukkit.entity.Entity entity) {
|
public boolean canSee(org.bukkit.entity.Entity entity) {
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/src/main/java/me/earthme/luminol/config/modules/misc/RaidChangesConfig.java
|
+++ b/src/main/java/me/earthme/luminol/config/modules/misc/RaidChangesConfig.java
|
||||||
@@ -1,0 +_,31 @@
|
@@ -1,0 +_,41 @@
|
||||||
+package me.earthme.luminol.config.modules.misc;
|
+package me.earthme.luminol.config.modules.misc;
|
||||||
+
|
+
|
||||||
+import me.earthme.luminol.config.ConfigInfo;
|
+import me.earthme.luminol.config.ConfigInfo;
|
||||||
@@ -11,7 +11,7 @@
|
|||||||
+ @ConfigInfo(baseName = "allow-bad-omen-trigger-raid", comments =
|
+ @ConfigInfo(baseName = "allow-bad-omen-trigger-raid", comments =
|
||||||
+ """
|
+ """
|
||||||
+ Allow players with ominous signs to\s
|
+ Allow players with ominous signs to\s
|
||||||
+ skip a 30 second cooldown and trigger\s
|
+ skip a 30-second cooldown and trigger\s
|
||||||
+ attacks directly""")
|
+ attacks directly""")
|
||||||
+ public static boolean trigger = false;
|
+ public static boolean trigger = false;
|
||||||
+
|
+
|
||||||
@@ -20,7 +20,17 @@
|
|||||||
+ Enable players to obtain an ominous\s
|
+ Enable players to obtain an ominous\s
|
||||||
+ omen effect when killing the patrol\s
|
+ omen effect when killing the patrol\s
|
||||||
+ team captain""")
|
+ team captain""")
|
||||||
+ public static boolean effect = false;;
|
+ public static boolean effect = false;
|
||||||
|
+
|
||||||
|
+ @ConfigInfo(baseName = "bad-omen-infinite", comments =
|
||||||
|
+ """
|
||||||
|
+ Enable bad omen effect infinite time.""")
|
||||||
|
+ public static boolean infinite = false;
|
||||||
|
+
|
||||||
|
+ @ConfigInfo(baseName = "skip-height-check", comments =
|
||||||
|
+ """
|
||||||
|
+ disable y <= 96 check.""")
|
||||||
|
+ public static boolean height_check = false;
|
||||||
+
|
+
|
||||||
+ @Override
|
+ @Override
|
||||||
+ public EnumConfigCategory getCategory() {
|
+ public EnumConfigCategory getCategory() {
|
||||||
|
|||||||
@@ -11,13 +11,10 @@ grdversion=$(prop version)
|
|||||||
preVersion=$(prop preVersion)
|
preVersion=$(prop preVersion)
|
||||||
release_tag="$mcversion-$commitid"
|
release_tag="$mcversion-$commitid"
|
||||||
jarName="$project_id-$mcversion-paperclip.jar"
|
jarName="$project_id-$mcversion-paperclip.jar"
|
||||||
jarName_bundler="$project_id-$mcversion-bundler.jar"
|
|
||||||
jarName_dir="luminol-server/build/libs/$jarName"
|
jarName_dir="luminol-server/build/libs/$jarName"
|
||||||
jarName_bundler_dir="luminol-server/build/libs/$jarName_bundler"
|
|
||||||
make_latest=$([ $preVersion = "true" ] && echo "false" || echo "true")
|
make_latest=$([ $preVersion = "true" ] && echo "false" || echo "true")
|
||||||
|
|
||||||
mv luminol-server/build/libs/$project_id-paperclip-$grdversion-mojmap.jar $jarName_dir
|
mv luminol-server/build/libs/$project_id-paperclip-$grdversion-mojmap.jar $jarName_dir
|
||||||
mv luminol-server/build/libs/$project_id-bundler-$grdversion-mojmap.jar $jarName_bundler_dir
|
|
||||||
|
|
||||||
echo "project_id=$project_id" >> $GITHUB_ENV
|
echo "project_id=$project_id" >> $GITHUB_ENV
|
||||||
echo "project_id_b=$project_id_b" >> $GITHUB_ENV
|
echo "project_id_b=$project_id_b" >> $GITHUB_ENV
|
||||||
@@ -28,5 +25,4 @@ echo "pre=$preVersion" >> $GITHUB_ENV
|
|||||||
echo "tag=$release_tag" >> $GITHUB_ENV
|
echo "tag=$release_tag" >> $GITHUB_ENV
|
||||||
echo "jar=$jarName" >> $GITHUB_ENV
|
echo "jar=$jarName" >> $GITHUB_ENV
|
||||||
echo "jar_dir=$jarName_dir" >> $GITHUB_ENV
|
echo "jar_dir=$jarName_dir" >> $GITHUB_ENV
|
||||||
echo "jar_dir_bundler=$jarName_bundler_dir" >> $GITHUB_ENV
|
|
||||||
echo "make_latest=$make_latest" >> $GITHUB_ENV
|
echo "make_latest=$make_latest" >> $GITHUB_ENV
|
||||||
|
|||||||
Reference in New Issue
Block a user