Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
a6248a5
Simulate fishing rod attachment bug across regions.
BaconCat1 Mar 2, 2026
5b32c1f
Fix comments
BaconCat1 Mar 2, 2026
8b0c886
Use per world simulation distance.
BaconCat1 Mar 14, 2026
cc57375
Refactor to use a helper to shorten
BaconCat1 Mar 14, 2026
76c9b0b
Convert to base patch
BaconCat1 Mar 20, 2026
307ea2e
Convert to base patch
BaconCat1 Mar 20, 2026
1aa53a6
Fix strangeness (i suck at patches)
BaconCat1 Mar 20, 2026
4764547
Drop redundant generated source patch diffs
BaconCat1 Mar 20, 2026
1cdce5d
Remove stray entity velocity config
BaconCat1 Mar 20, 2026
8473a36
Remove stray blank line from config
BaconCat1 Mar 20, 2026
5a46f56
Merge branch 'CraftCanvasMC:ver/1.21.11' into feat/fishing-rod-stasis
BaconCat1 Mar 20, 2026
9e8dbce
Fixup patches
BaconCat1 Mar 21, 2026
c4694b4
Remove uselss comment
BaconCat1 Mar 21, 2026
d149122
Update canvas-server/src/main/java/io/canvasmc/canvas/Config.java
BaconCat1 Mar 23, 2026
1000981
Cache chunk state for detached hooks, preserve them based on external…
BaconCat1 Mar 23, 2026
cbdbfc1
Fix patches
BaconCat1 Mar 23, 2026
ffca99f
Prevent cross-thread access so player affecting work only runs on the…
BaconCat1 Mar 23, 2026
d2e5022
Fix behaviour edge case
BaconCat1 Mar 25, 2026
1dc5017
Fix patches
BaconCat1 Mar 25, 2026
743ddc9
Fix patches
BaconCat1 Mar 25, 2026
1f9949c
Fix patches
BaconCat1 Mar 25, 2026
f2f486a
Fix patches
BaconCat1 Mar 25, 2026
0927036
Fix patches
BaconCat1 Mar 25, 2026
7d235d5
Remove leaked source patch churn
BaconCat1 Mar 25, 2026
1a24b5d
Fix patch apply
BaconCat1 Mar 26, 2026
ef49a01
Merge remote-tracking branch 'origin/ver/1.21.11' into feat/fishing-r…
BaconCat1 Mar 26, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ index 702ed101f2345bcdc99612bddce70d4e5566f6bb..9d86118655dd3b0ef349770280ad3e91
//this.updateSkyBrightness(); // Folia - region threading - delay until first tick
// Paper start - rewrite chunk system
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
index aca88b9ec53debc85387fcd5920eef1d0292b769..3777c81fb5123cae478af94048e6b843c207b5c0 100644
index e1860e6bc6e4fbfc9f06b086cd84fabd221cc184..3ba030012809f789356f58bb2919eb0aa6b76949 100644
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -435,6 +435,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc
Expand Down Expand Up @@ -136,7 +136,7 @@ index 1cbc46e480cc7d109c6128f109a1a9e38bf1a193..ed9cba657d336b4577c4c1f3b808ae9d
}
}
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 1caba4a4ec839ac20d00f8efd7af501c5af279db..b19db8806c21ef526cfa30cb64885f47d598dbb8 100644
index bcf011f010e2483a6af320eeda9fc32ddebd9546..5af2a7238df00840ab41fccd245b50704dd9b2f7 100644
--- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java
@@ -4378,7 +4378,9 @@ public abstract class Entity implements SyncedDataHolder, DebugValueSource, Name
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,32 @@
--- a/net/minecraft/server/level/ServerPlayer.java
+++ b/net/minecraft/server/level/ServerPlayer.java
@@ -266,7 +_,7 @@
@@ -265,7 +_,7 @@
private @Nullable BlockPos raidOmenPosition;
private Vec3 lastKnownClientMovement = Vec3.ZERO;
private Input lastClientInput = Input.EMPTY;
- private final Set<ThrownEnderpearl> enderPearls = new HashSet<>();
- private final Set<ThrownEnderpearl> enderPearls = java.util.concurrent.ConcurrentHashMap.newKeySet(); // Canvas - restore vanilla ender pearl behavior
+ private final Set<ThrownEnderpearl> enderPearls = java.util.concurrent.ConcurrentHashMap.newKeySet(); // Canvas - region threading
private final java.util.concurrent.ConcurrentMap<java.util.UUID, CanvasEnderPearlSnapshot> canvas$enderPearlSnapshots = new java.util.concurrent.ConcurrentHashMap<>(); // Canvas - restore detached fishing hook portal behavior
private long timeEntitySatOnShoulder;
private CompoundTag shoulderEntityLeft = new CompoundTag();
private CompoundTag shoulderEntityRight = new CompoundTag();
@@ -428,6 +_,8 @@
@@ -428,6 +_,9 @@
public boolean sentListPacket = false;
public boolean suppressTrackerForLogin = false; // Paper - Fire PlayerJoinEvent when Player is actually ready
// CraftBukkit end
+ public final io.canvasmc.canvas.RegionizedTpsBar.DisplayManager canvas$tpsBarDisplay = io.canvasmc.canvas.RegionizedTpsBar.DisplayManager.createNew(this); // Canvas - tpsbar
+ public final int canvas$infoBucketIndex; // Canvas - optimize playerlist tick
+ public final it.unimi.dsi.fastutil.objects.Object2ObjectMap<net.minecraft.world.waypoints.WaypointTransmitter, net.minecraft.world.waypoints.WaypointTransmitter.Connection> canvas$activeWaypoints = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(); // Canvas - region threading
public boolean isRealPlayer; // Paper
public com.destroystokyo.paper.event.entity.@Nullable PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent
public org.bukkit.event.player.PlayerQuitEvent.@Nullable 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
@@ -435,7 +_,6 @@
// Paper start - rewrite chunk system
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();
- public final it.unimi.dsi.fastutil.objects.Object2ObjectMap<net.minecraft.world.waypoints.WaypointTransmitter, net.minecraft.world.waypoints.WaypointTransmitter.Connection> canvas$activeWaypoints = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(); // Canvas - region threading

@Override
public final boolean moonrise$isRealPlayer() {
@@ -480,6 +_,7 @@
this.bukkitPickUpLoot = true;
this.maxHealthCache = this.getMaxHealth();
Expand Down Expand Up @@ -351,23 +360,29 @@
this.ejectPassengers();

// Paper start - Workaround vehicle not tracking the passenger disconnection dismount
@@ -3404,11 +_,13 @@
}
@@ -3405,17 +_,15 @@

public void registerEnderPearl(ThrownEnderpearl enderPearl) {
- //this.enderPearls.add(enderPearl); // Folia - region threading - do not track ender pearls
//this.enderPearls.add(enderPearl); // Folia - region threading - do not track ender pearls
- if (io.canvasmc.canvas.Config.INSTANCE.restoreVanillaEnderPearlBehavior) { // Canvas - restore vanilla ender pearl behavior
- this.enderPearls.add(enderPearl);
- }
+ if (!io.canvasmc.canvas.Config.INSTANCE.restoreVanillaEnderPearlBehavior) return; // Canvas - restore vanilla ender pearl behavior
+ this.enderPearls.add(enderPearl);
this.canvas$updateEnderPearlSnapshot(enderPearl); // Canvas - restore detached fishing hook portal behavior
}

public void deregisterEnderPearl(ThrownEnderpearl enderPearl) {
- //this.enderPearls.remove(enderPearl); // Folia - region threading - do not track ender pearls
//this.enderPearls.remove(enderPearl); // Folia - region threading - do not track ender pearls
- if (io.canvasmc.canvas.Config.INSTANCE.restoreVanillaEnderPearlBehavior) { // Canvas - restore vanilla ender pearl behavior
- this.enderPearls.remove(enderPearl);
- }
+ if (!io.canvasmc.canvas.Config.INSTANCE.restoreVanillaEnderPearlBehavior) return; // Canvas - restore vanilla ender pearl behavior
+ this.enderPearls.remove(enderPearl);
this.canvas$enderPearlSnapshots.remove(enderPearl.getUUID()); // Canvas - restore detached fishing hook portal behavior
}

public Set<ThrownEnderpearl> getEnderPearls() {
@@ -3454,7 +_,7 @@
@@ -3490,7 +_,7 @@
}

public Set<DebugSubscription<?>> debugSubscriptions() {
Expand All @@ -376,7 +391,7 @@
}

public record RespawnConfig(LevelData.RespawnData respawnData, boolean forced) {
@@ -3467,7 +_,7 @@
@@ -3503,7 +_,7 @@
);

static ResourceKey<Level> getDimensionOrDefault(ServerPlayer.@Nullable RespawnConfig respawnConfig) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -74,15 +74,15 @@
int i = (int)(f * 0.5);
((ServerLevel)this.level())
.sendParticles(ParticleTypes.DAMAGE_INDICATOR, target.getX(), target.getY(0.5), target.getZ(), i, 0.1, 0.0, 0.1, 0.2);
@@ -1960,6 +_,7 @@
@@ -1975,6 +_,7 @@
}

public float getCurrentItemAttackStrengthDelay() {
+ if (io.canvasmc.canvas.Config.INSTANCE.combat.disableAttackHitDelay) return 0.0F; // Canvas - combat configs
return (float)(1.0 / this.getAttributeValue(Attributes.ATTACK_SPEED) * 20.0);
}

@@ -1970,6 +_,7 @@
@@ -1985,6 +_,7 @@
}

public float getAttackStrengthScale(float adjustTicks) {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,26 @@
--- a/net/minecraft/world/entity/projectile/FishingHook.java
+++ b/net/minecraft/world/entity/projectile/FishingHook.java
@@ -207,7 +_,7 @@
@@ -239,14 +_,15 @@
} else {
if (this.currentState == FishingHook.FishHookState.HOOKED_IN_ENTITY) {
if (this.hookedIn != null) {
- if (!this.hookedIn.isRemoved() && this.hookedIn.canInteractWithLevel() && this.hookedIn.level().dimension() == this.level().dimension()
+ if (!this.hookedIn.isRemoved() && this.hookedIn.canInteractWithLevel() && this.hookedIn.level().dimension() == this.level().dimension() && ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.hookedIn) // Canvas - region threading
- if (io.canvasmc.canvas.Config.INSTANCE.combat.restoreDetachedFishingHookPortalBug
- && !ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.hookedIn)) {
- return;
- }
if (!this.hookedIn.isRemoved() && this.hookedIn.canInteractWithLevel() && this.hookedIn.level().dimension() == this.level().dimension()
+ && (!io.canvasmc.canvas.Config.INSTANCE.combat.restoreDetachedFishingHookPortalBug
+ || ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.hookedIn))
)
{
this.setPos(this.hookedIn.getX(), this.hookedIn.getY(0.8), this.hookedIn.getZ());
@@ -516,6 +_,11 @@
+ } else if (io.canvasmc.canvas.Config.INSTANCE.combat.restoreDetachedFishingHookPortalBug
+ && !ca.spottedleaf.moonrise.common.util.TickThread.isTickThreadFor(this.hookedIn)) {
+ return;
} else {
this.setHookedEntity(null);
new io.papermc.paper.event.entity.FishHookStateChangeEvent((org.bukkit.entity.FishHook) getBukkitEntity(), org.bukkit.entity.FishHook.HookState.UNHOOKED).callEvent(); // Paper - Add FishHookStateChangeEvent. #UNHOOKED
@@ -609,6 +_,11 @@
if (!this.level().isClientSide() && playerOwner != null && !this.shouldStopFishing(playerOwner)) {
int i = 0;
if (this.hookedIn != null) {
Expand All @@ -21,7 +32,7 @@
// CraftBukkit start
org.bukkit.event.player.PlayerFishEvent playerFishEvent = new org.bukkit.event.player.PlayerFishEvent((org.bukkit.entity.Player) playerOwner.getBukkitEntity(), this.hookedIn.getBukkitEntity(), (org.bukkit.entity.FishHook) this.getBukkitEntity(), org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand), org.bukkit.event.player.PlayerFishEvent.State.CAUGHT_ENTITY); // Paper - Add hand parameter to PlayerFishEvent
if (!playerFishEvent.callEvent()) {
@@ -609,6 +_,14 @@
@@ -725,6 +_,14 @@
if (owner != null) {
Vec3 vec3 = new Vec3(owner.getX() - this.getX(), owner.getY() - this.getY(), owner.getZ() - this.getZ()).scale(0.1);
entity.setDeltaMovement(entity.getDeltaMovement().add(vec3));
Expand Down
6 changes: 6 additions & 0 deletions canvas-server/src/main/java/io/canvasmc/canvas/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -627,6 +627,12 @@ public static class Mace {
@Comment("Allows toggling if a fishing rod can pull entities")
public boolean fishingRodPulls = true;

@Comment({
"Restores vanilla detached fishing-hook behavior used by wireless redstone setups.",
"When enabled, hooks keep their attached state while owner or target are on another region thread."
})
public boolean restoreDetachedFishingHookPortalBug = false;

@Comment("Configures the damage modifier per critical hit")
public float criticalHitMultiplier = 1.5F;

Expand Down