Updated Upstream (Paper)

Upstream has released updates that appear to apply and compile correctly

Paper Changes:
PaperMC/Paper@fa0dd15d add missed nullability annotations
PaperMC/Paper@b6d70a9c Generators
PaperMC/Paper@b92137c1 load the PDC for new block entities
PaperMC/Paper@06a26ec2 update legacy test
PaperMC/Paper@c4f0b2b0 update more test
PaperMC/Paper@77382fcb fix unbreakable shields
PaperMC/Paper@9e08de6e Re-add old SmithingTrimRecipe constructors
PaperMC/Paper@d2afd149 Bump some more numbers to 1.21.5
PaperMC/Paper@cf1455e5 Ignore private methods in MaterialReroutingTest
PaperMC/Paper@ce91a8ca Move out unapplied feature patches
This commit is contained in:
granny
2025-03-27 16:40:47 -07:00
parent 73e0e17b6d
commit 4907125796
18 changed files with 74 additions and 72 deletions

View File

@@ -2,7 +2,7 @@ group = org.purpurmc.purpur
version = 1.21.5-R0.1-SNAPSHOT version = 1.21.5-R0.1-SNAPSHOT
mcVersion = 1.21.5 mcVersion = 1.21.5
paperCommit = 95beb8c0bc785cf6bdd8ce9de097666cb572deb9 paperCommit = ce91a8ca123f4e853629d08705e4ece3a09a5a4d
org.gradle.configuration-cache = true org.gradle.configuration-cache = true
org.gradle.caching = true org.gradle.caching = true

View File

@@ -4,15 +4,15 @@
testRuntimeOnly("org.junit.platform:junit-platform-launcher") testRuntimeOnly("org.junit.platform:junit-platform-launcher")
} }
-val generatedApiPath: java.nio.file.Path = layout.projectDirectory.dir("src/generated/java").asFile.toPath() -val generatedDir: java.nio.file.Path = layout.projectDirectory.dir("src/generated/java").asFile.toPath()
+val generatedApiPath: java.nio.file.Path = rootProject.layout.projectDirectory.dir("paper-api/src/generated/java").asFile.toPath() +val generatedDir: java.nio.file.Path = rootProject.layout.projectDirectory.dir("paper-api/src/generated/java").asFile.toPath()
idea { idea {
module { module {
generatedSourceDirs.add(generatedApiPath.toFile()) generatedSourceDirs.add(generatedDir.toFile())
@@ -103,6 +_,18 @@ @@ -103,6 +_,18 @@
main { main {
java { java {
srcDir(generatedApiPath) srcDir(generatedDir)
+ srcDir(file("../paper-api/src/main/java")) + srcDir(file("../paper-api/src/main/java"))
+ } + }
+ resources { + resources {

View File

@@ -1,6 +1,6 @@
--- a/src/main/java/org/bukkit/Material.java --- a/src/main/java/org/bukkit/Material.java
+++ b/src/main/java/org/bukkit/Material.java +++ b/src/main/java/org/bukkit/Material.java
@@ -5812,4 +_,40 @@ @@ -3632,4 +_,40 @@
return this.asItemType().getDefaultDataTypes(); return this.asItemType().getDefaultDataTypes();
} }
// Paper end - data component API // Paper end - data component API

View File

@@ -1,6 +1,6 @@
--- a/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java --- a/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java
+++ b/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java +++ b/src/main/java/org/bukkit/enchantments/EnchantmentTarget.java
@@ -227,6 +_,30 @@ @@ -230,6 +_,30 @@
public boolean includes(@NotNull Material item) { public boolean includes(@NotNull Material item) {
return BREAKABLE.includes(item) || (WEARABLE.includes(item) && !item.equals(Material.ELYTRA)) || item.equals(Material.COMPASS); return BREAKABLE.includes(item) || (WEARABLE.includes(item) && !item.equals(Material.ELYTRA)) || item.equals(Material.COMPASS);
} }

View File

@@ -1,6 +1,6 @@
--- a/src/main/java/org/bukkit/entity/Villager.java --- a/src/main/java/org/bukkit/entity/Villager.java
+++ b/src/main/java/org/bukkit/entity/Villager.java +++ b/src/main/java/org/bukkit/entity/Villager.java
@@ -365,4 +_,13 @@ @@ -391,4 +_,13 @@
* reputation regardless of its impact and the player associated. * reputation regardless of its impact and the player associated.
*/ */
public void clearReputations(); public void clearReputations();

View File

@@ -1,6 +1,6 @@
--- a/src/main/java/org/bukkit/entity/Wolf.java --- a/src/main/java/org/bukkit/entity/Wolf.java
+++ b/src/main/java/org/bukkit/entity/Wolf.java +++ b/src/main/java/org/bukkit/entity/Wolf.java
@@ -138,4 +_,20 @@ @@ -164,4 +_,20 @@
return RegistryAccess.registryAccess().getRegistry(RegistryKey.WOLF_SOUND_VARIANT).getOrThrow(NamespacedKey.minecraft(key)); return RegistryAccess.registryAccess().getRegistry(RegistryKey.WOLF_SOUND_VARIANT).getOrThrow(NamespacedKey.minecraft(key));
} }
} }

View File

@@ -1,9 +1,10 @@
--- a/paper-server/build.gradle.kts --- a/paper-server/build.gradle.kts
+++ b/paper-server/build.gradle.kts +++ b/paper-server/build.gradle.kts
@@ -24,6 +_,16 @@ @@ -28,6 +_,18 @@
// oldPaperCommit = "f4f275519f7c1fbe9db173b7144a4fe81440e365" // oldPaperCommit = "f4f275519f7c1fbe9db173b7144a4fe81440e365"
//} //}
+ // Purpur start - Rebrand
+ val purpur = forks.register("purpur") { + val purpur = forks.register("purpur") {
+ upstream.patchDir("paperServer") { + upstream.patchDir("paperServer") {
+ upstreamPath = "paper-server" + upstreamPath = "paper-server"
@@ -13,16 +14,17 @@
+ } + }
+ } + }
+ activeFork = purpur + activeFork = purpur
+ // Purpur end - Rebrand
+ +
spigot { spigot {
buildDataRef = "702e1a0a5072b2c4082371d5228cb30525687efc" buildDataRef = "702e1a0a5072b2c4082371d5228cb30525687efc"
packageVersion = "v1_21_R3" // also needs to be updated in MappingEnvironment packageVersion = "v1_21_R4" // also needs to be updated in MappingEnvironment
@@ -104,7 +_,21 @@ @@ -108,7 +_,21 @@
} }
} }
-val log4jPlugins = sourceSets.create("log4jPlugins") -val log4jPlugins = sourceSets.create("log4jPlugins")
+ +// Purpur start - Rebrand
+sourceSets { +sourceSets {
+ main { + main {
+ java { srcDir("../paper-server/src/main/java") } + java { srcDir("../paper-server/src/main/java") }
@@ -33,23 +35,23 @@
+ resources { srcDir("../paper-server/src/test/resources") } + resources { srcDir("../paper-server/src/test/resources") }
+ } + }
+} +}
+
+val log4jPlugins = sourceSets.create("log4jPlugins") { +val log4jPlugins = sourceSets.create("log4jPlugins") {
+ java { srcDir("../paper-server/src/log4jPlugins/java") } + java { srcDir("../paper-server/src/log4jPlugins/java") }
+} +}
+// Purpur end - Rebrand
configurations.named(log4jPlugins.compileClasspathConfigurationName) { configurations.named(log4jPlugins.compileClasspathConfigurationName) {
extendsFrom(configurations.compileClasspath.get()) extendsFrom(configurations.compileClasspath.get())
} }
@@ -122,7 +_,7 @@ @@ -130,7 +_,7 @@
} }
dependencies { dependencies {
- implementation(project(":paper-api")) - implementation(project(":paper-api"))
+ implementation(project(":purpur-api")) + implementation(project(":purpur-api")) // Purpur
implementation("ca.spottedleaf:concurrentutil:0.0.3") implementation("ca.spottedleaf:concurrentutil:0.0.3")
implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+ implementation("org.jline:jline-terminal-ffm:3.27.1") // use ffm on java 22+
implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21 implementation("org.jline:jline-terminal-jni:3.27.1") // fall back to jni on java 21
@@ -153,6 +_,10 @@ @@ -162,6 +_,10 @@
runtimeOnly("com.mysql:mysql-connector-j:9.1.0") runtimeOnly("com.mysql:mysql-connector-j:9.1.0")
runtimeOnly("com.lmax:disruptor:3.4.4") runtimeOnly("com.lmax:disruptor:3.4.4")
@@ -60,23 +62,23 @@
runtimeOnly("org.apache.maven:maven-resolver-provider:3.9.6") runtimeOnly("org.apache.maven:maven-resolver-provider:3.9.6")
runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18") runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18")
runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18") runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18")
@@ -192,14 +_,14 @@ @@ -201,14 +_,14 @@
val gitBranch = git.exec(providers, "rev-parse", "--abbrev-ref", "HEAD").get().trim() val gitBranch = git.exec(providers, "rev-parse", "--abbrev-ref", "HEAD").get().trim()
attributes( attributes(
"Main-Class" to "org.bukkit.craftbukkit.Main", "Main-Class" to "org.bukkit.craftbukkit.Main",
- "Implementation-Title" to "Paper", - "Implementation-Title" to "Paper",
+ "Implementation-Title" to "Purpur", + "Implementation-Title" to "Purpur", // Purpur
"Implementation-Version" to implementationVersion, "Implementation-Version" to implementationVersion,
"Implementation-Vendor" to date, "Implementation-Vendor" to date,
- "Specification-Title" to "Paper", - "Specification-Title" to "Paper",
+ "Specification-Title" to "Purpur", + "Specification-Title" to "Purpur", // Purpur
"Specification-Version" to project.version, "Specification-Version" to project.version,
- "Specification-Vendor" to "Paper Team", - "Specification-Vendor" to "Paper Team",
- "Brand-Id" to "papermc:paper", - "Brand-Id" to "papermc:paper",
- "Brand-Name" to "Paper", - "Brand-Name" to "Paper",
+ "Specification-Vendor" to "Purpur Team", + "Specification-Vendor" to "Purpur Team", // Purpur
+ "Brand-Id" to "purpurmc:purpur", + "Brand-Id" to "purpurmc:purpur", // Purpur
+ "Brand-Name" to "Purpur", + "Brand-Name" to "Purpur", // Purpur
"Build-Number" to (build ?: ""), "Build-Number" to (build ?: ""),
"Build-Time" to buildTime.toString(), "Build-Time" to buildTime.toString(),
"Git-Branch" to gitBranch, "Git-Branch" to gitBranch,

View File

@@ -30,7 +30,7 @@ index f34bc75f324454bf48f0ebf79111706bb027a54b..6ad266592c16bdeccfb689fb2ef2ee37
/* Drop global time updates /* Drop global time updates
if (this.tickCount % 20 == 0) { if (this.tickCount % 20 == 0) {
diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java
index fae2e1af2ea59b82b552bfc33c853e0e33ec90bc..f681d0766a3fec9e05396fe82111e9e99f751823 100644 index 0e7405a480bffa81493ef2f2078c36ccda542cde..bc5c30430e79e2feb69c165d9e3e9b6a899b66ea 100644
--- a/net/minecraft/server/level/ServerLevel.java --- a/net/minecraft/server/level/ServerLevel.java
+++ b/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java
@@ -212,6 +212,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -212,6 +212,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe
@@ -75,10 +75,10 @@ index 63e01ec7e4ab04bb7d389bff485dfedca344bfa2..84b1570d0d88f57f33ff8179f0a78d37
if ((target instanceof net.minecraft.world.entity.animal.Bucketable && target instanceof LivingEntity && origItem != null && origItem == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelectedItem().isEmpty() || !ServerGamePacketListenerImpl.this.player.getInventory().getSelectedItem().is(origItem))) { if ((target instanceof net.minecraft.world.entity.animal.Bucketable && target instanceof LivingEntity && origItem != null && origItem == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelectedItem().isEmpty() || !ServerGamePacketListenerImpl.this.player.getInventory().getSelectedItem().is(origItem))) {
target.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it target.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index 7b48f633223cc5e760c5c80d40424e04d791c43a..fc8fbfa5709895456f5aa0c480acedb8707b2ff5 100644 index d1899b2411e90b4641dcbc58760e4a19b62846c5..1335a04edd053c06e290c070e3c03d02598d97e7 100644
--- a/net/minecraft/world/entity/Entity.java --- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java
@@ -2855,6 +2855,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -2856,6 +2856,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
this.passengers = ImmutableList.copyOf(list); this.passengers = ImmutableList.copyOf(list);
} }
@@ -92,7 +92,7 @@ index 7b48f633223cc5e760c5c80d40424e04d791c43a..fc8fbfa5709895456f5aa0c480acedb8
this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); this.gameEvent(GameEvent.ENTITY_MOUNT, passenger);
} }
} }
@@ -2896,6 +2903,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -2897,6 +2904,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return false; return false;
} }
// CraftBukkit end // CraftBukkit end
@@ -107,7 +107,7 @@ index 7b48f633223cc5e760c5c80d40424e04d791c43a..fc8fbfa5709895456f5aa0c480acedb8
if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) { if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) {
this.passengers = ImmutableList.of(); this.passengers = ImmutableList.of();
} else { } else {
@@ -4822,4 +4837,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -4823,4 +4838,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
return ((ServerLevel) this.level()).isPositionEntityTicking(this.blockPosition()); return ((ServerLevel) this.level()).isPositionEntityTicking(this.blockPosition());
} }
// Paper end - Expose entity id counter // Paper end - Expose entity id counter
@@ -177,7 +177,7 @@ index bda521cca91f070139f5e9bdef6a50e1497f53ff..351f92e1627f465a9a292d4a5e5c256a
protected ParticleOptions getInkParticle() { protected ParticleOptions getInkParticle() {
return ParticleTypes.GLOW_SQUID_INK; return ParticleTypes.GLOW_SQUID_INK;
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 4d65d88c59a8536d27ec61c65373ab21fa534b3b..e5f296bf3671afd82ab76493646938783b53eef6 100644 index a077e2f518be39bbdba4919ed7161bb28547e56b..a4a19d962bc4665e9368b97cae4b2534da33de91 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -226,9 +226,9 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -226,9 +226,9 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -210,7 +210,7 @@ index 4d65d88c59a8536d27ec61c65373ab21fa534b3b..e5f296bf3671afd82ab7649364693878
@Override @Override
protected void checkFallDamage(double y, boolean onGround, BlockState state, BlockPos pos) { protected void checkFallDamage(double y, boolean onGround, BlockState state, BlockPos pos) {
@@ -3578,8 +3579,10 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -3577,8 +3578,10 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.pushEntities(); this.pushEntities();
profilerFiller.pop(); profilerFiller.pop();
// Paper start - Add EntityMoveEvent // Paper start - Add EntityMoveEvent
@@ -223,7 +223,7 @@ index 4d65d88c59a8536d27ec61c65373ab21fa534b3b..e5f296bf3671afd82ab7649364693878
Location from = new Location(this.level().getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO); Location from = new Location(this.level().getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO);
Location to = new Location(this.level().getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); Location to = new Location(this.level().getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot());
io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone()); io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone());
@@ -3589,6 +3592,21 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -3588,6 +3591,21 @@ public abstract class LivingEntity extends Entity implements Attackable {
this.absSnapTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); this.absSnapTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch());
} }
} }

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Implement elytra settings
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index af03e75f445bff6dfe56f89fb422b5662a21c962..3ec3e89b0b53ebde5e1eaa49e28b6bacfe781085 100644 index df244fa0eb463aa80da39c930eb16c85481e014a..bdae20191d2e5765761442eb06924968e710b189 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -3644,7 +3644,18 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -3643,7 +3643,18 @@ public abstract class LivingEntity extends Entity implements Attackable {
.filter(equipmentSlot1 -> canGlideUsing(this.getItemBySlot(equipmentSlot1), equipmentSlot1)) .filter(equipmentSlot1 -> canGlideUsing(this.getItemBySlot(equipmentSlot1), equipmentSlot1))
.toList(); .toList();
EquipmentSlot equipmentSlot = Util.getRandom(list, this.random); EquipmentSlot equipmentSlot = Util.getRandom(list, this.random);

View File

@@ -5,10 +5,10 @@ Subject: [PATCH] Add mobGriefing bypass to everything affected
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 3ec3e89b0b53ebde5e1eaa49e28b6bacfe781085..36636e35cfb3751d448ee330b51e5ab7c44c6014 100644 index bdae20191d2e5765761442eb06924968e710b189..476b570ffe9d2df173bd57b57fe65372cb35fa1d 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -1905,7 +1905,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -1904,7 +1904,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
if (this.level() instanceof ServerLevel serverLevel) { if (this.level() instanceof ServerLevel serverLevel) {
boolean var6 = false; boolean var6 = false;
if (this.dead && entitySource instanceof WitherBoss) { // Paper if (this.dead && entitySource instanceof WitherBoss) { // Paper

View File

@@ -6,10 +6,10 @@ Subject: [PATCH] API for any mob to burn daylight
Co-authored by: Encode42 <me@encode42.dev> Co-authored by: Encode42 <me@encode42.dev>
diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java
index d4e989889ed21e3900062eed142f26a9bdaaa8d9..66c4047a35be22803b38a9249b74ae32dcb98748 100644 index 1335a04edd053c06e290c070e3c03d02598d97e7..7148e8c6deeb1e5f99eb6d2fe6c0fc9583e44934 100644
--- a/net/minecraft/world/entity/Entity.java --- a/net/minecraft/world/entity/Entity.java
+++ b/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java
@@ -414,6 +414,24 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -415,6 +415,24 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess
} }
// Purpur end - Add canSaveToDisk to Entity // Purpur end - Add canSaveToDisk to Entity
@@ -35,7 +35,7 @@ index d4e989889ed21e3900062eed142f26a9bdaaa8d9..66c4047a35be22803b38a9249b74ae32
this.type = entityType; this.type = entityType;
this.level = level; this.level = level;
diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java
index 2a7434872472b950fe09bfe8f5f334d9964b51d6..a92ef9269b59305334ed1a8f1b253493e2223306 100644 index 476b570ffe9d2df173bd57b57fe65372cb35fa1d..4586d7afb4f0a27c7d61abb80af24205d46cb83f 100644
--- a/net/minecraft/world/entity/LivingEntity.java --- a/net/minecraft/world/entity/LivingEntity.java
+++ b/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java
@@ -273,6 +273,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -273,6 +273,7 @@ public abstract class LivingEntity extends Entity implements Attackable {
@@ -62,7 +62,7 @@ index 2a7434872472b950fe09bfe8f5f334d9964b51d6..a92ef9269b59305334ed1a8f1b253493
this.lastHurtByPlayer = EntityReference.read(compound, "last_hurt_by_player"); this.lastHurtByPlayer = EntityReference.read(compound, "last_hurt_by_player");
this.lastHurtByPlayerMemoryTime = compound.getIntOr("last_hurt_by_player_memory_time", 0); this.lastHurtByPlayerMemoryTime = compound.getIntOr("last_hurt_by_player_memory_time", 0);
this.lastHurtByMob = EntityReference.read(compound, "last_hurt_by_mob"); this.lastHurtByMob = EntityReference.read(compound, "last_hurt_by_mob");
@@ -3615,6 +3618,32 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -3614,6 +3617,32 @@ public abstract class LivingEntity extends Entity implements Attackable {
if (this.level() instanceof ServerLevel serverLevel && this.isSensitiveToWater() && this.isInWaterOrRain()) { if (this.level() instanceof ServerLevel serverLevel && this.isSensitiveToWater() && this.isInWaterOrRain()) {
this.hurtServer(serverLevel, this.damageSources().drown(), 1.0F); this.hurtServer(serverLevel, this.damageSources().drown(), 1.0F);
} }

View File

@@ -1,8 +1,8 @@
--- a/net/minecraft/core/BlockPos.java --- a/net/minecraft/core/BlockPos.java
+++ b/net/minecraft/core/BlockPos.java +++ b/net/minecraft/core/BlockPos.java
@@ -61,6 +_,12 @@ @@ -63,6 +_,12 @@
private static final int X_OFFSET = PACKED_Y_LENGTH + PACKED_HORIZONTAL_LENGTH; public static final int MAX_HORIZONTAL_COORDINATE = 33554431;
public static final int MAX_HORIZONTAL_COORDINATE = (1 << PACKED_HORIZONTAL_LENGTH) / 2 - 1; // Paper end - Optimize Bit Operations by inlining
+ // Purpur start - Ridables + // Purpur start - Ridables
+ public BlockPos(net.minecraft.world.entity.Entity entity) { + public BlockPos(net.minecraft.world.entity.Entity entity) {

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/server/level/ServerPlayerGameMode.java --- a/net/minecraft/server/level/ServerPlayerGameMode.java
+++ b/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/net/minecraft/server/level/ServerPlayerGameMode.java
@@ -347,6 +_,7 @@ @@ -348,6 +_,7 @@
} }
return false; return false;
} }
@@ -8,7 +8,7 @@
} }
// CraftBukkit end // CraftBukkit end
@@ -460,6 +_,7 @@ @@ -461,6 +_,7 @@
public InteractionHand interactHand; public InteractionHand interactHand;
public ItemStack interactItemStack; public ItemStack interactItemStack;
public InteractionResult useItemOn(ServerPlayer player, Level level, ItemStack stack, InteractionHand hand, BlockHitResult hitResult) { public InteractionResult useItemOn(ServerPlayer player, Level level, ItemStack stack, InteractionHand hand, BlockHitResult hitResult) {
@@ -16,7 +16,7 @@
BlockPos blockPos = hitResult.getBlockPos(); BlockPos blockPos = hitResult.getBlockPos();
BlockState blockState = level.getBlockState(blockPos); BlockState blockState = level.getBlockState(blockPos);
boolean cancelledBlock = false; boolean cancelledBlock = false;
@@ -502,7 +_,7 @@ @@ -503,7 +_,7 @@
boolean flag = !player.getMainHandItem().isEmpty() || !player.getOffhandItem().isEmpty(); boolean flag = !player.getMainHandItem().isEmpty() || !player.getOffhandItem().isEmpty();
boolean flag1 = player.isSecondaryUseActive() && flag; boolean flag1 = player.isSecondaryUseActive() && flag;
ItemStack itemStack = stack.copy(); ItemStack itemStack = stack.copy();
@@ -25,7 +25,7 @@
InteractionResult interactionResult = blockState.useItemOn(player.getItemInHand(hand), level, player, hand, hitResult); InteractionResult interactionResult = blockState.useItemOn(player.getItemInHand(hand), level, player, hand, hitResult);
if (interactionResult.consumesAction()) { if (interactionResult.consumesAction()) {
CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(player, blockPos, itemStack); CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(player, blockPos, itemStack);
@@ -548,4 +_,18 @@ @@ -549,4 +_,18 @@
public void setLevel(ServerLevel serverLevel) { public void setLevel(ServerLevel serverLevel) {
this.level = serverLevel; this.level = serverLevel;
} }

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
+++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java
@@ -308,7 +_,7 @@ @@ -306,7 +_,7 @@
ServerLoginPacketListenerImpl.LOGGER.warn("Failed to verify username but will let them in anyway!"); ServerLoginPacketListenerImpl.LOGGER.warn("Failed to verify username but will let them in anyway!");
ServerLoginPacketListenerImpl.this.startClientVerification(ServerLoginPacketListenerImpl.this.createOfflineProfile(string1)); // Spigot ServerLoginPacketListenerImpl.this.startClientVerification(ServerLoginPacketListenerImpl.this.createOfflineProfile(string1)); // Spigot
} else { } else {

View File

@@ -8,7 +8,7 @@
// CraftBukkit start // CraftBukkit start
private static final org.slf4j.Logger LOGGER = com.mojang.logging.LogUtils.getLogger(); private static final org.slf4j.Logger LOGGER = com.mojang.logging.LogUtils.getLogger();
private static final int CURRENT_LEVEL = 2; private static final int CURRENT_LEVEL = 2;
@@ -303,8 +_,9 @@ @@ -304,8 +_,9 @@
public double xOld; public double xOld;
public double yOld; public double yOld;
public double zOld; public double zOld;
@@ -19,7 +19,7 @@
public int tickCount; public int tickCount;
private int remainingFireTicks = -this.getFireImmuneTicks(); private int remainingFireTicks = -this.getFireImmuneTicks();
public boolean wasTouchingWater; public boolean wasTouchingWater;
@@ -338,8 +_,8 @@ @@ -339,8 +_,8 @@
public PortalProcessor portalProcess; public PortalProcessor portalProcess;
public int portalCooldown; public int portalCooldown;
private boolean invulnerable; private boolean invulnerable;
@@ -30,7 +30,7 @@
private boolean hasGlowingTag; private boolean hasGlowingTag;
private final Set<String> tags = new io.papermc.paper.util.SizeLimitedSet<>(new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(), MAX_ENTITY_TAG_COUNT); // Paper - fully limit tag size - replace set impl private final Set<String> tags = new io.papermc.paper.util.SizeLimitedSet<>(new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(), MAX_ENTITY_TAG_COUNT); // Paper - fully limit tag size - replace set impl
private final double[] pistonDeltas = new double[]{0.0, 0.0, 0.0}; private final double[] pistonDeltas = new double[]{0.0, 0.0, 0.0};
@@ -393,6 +_,7 @@ @@ -394,6 +_,7 @@
public long activatedTick = Integer.MIN_VALUE; public long activatedTick = Integer.MIN_VALUE;
public boolean isTemporarilyActive; public boolean isTemporarilyActive;
public long activatedImmunityTick = Integer.MIN_VALUE; public long activatedImmunityTick = Integer.MIN_VALUE;
@@ -38,7 +38,7 @@
public void inactiveTick() { public void inactiveTick() {
} }
@@ -405,10 +_,21 @@ @@ -406,10 +_,21 @@
} }
// Paper end // Paper end
@@ -60,7 +60,7 @@
this.position = Vec3.ZERO; this.position = Vec3.ZERO;
this.blockPosition = BlockPos.ZERO; this.blockPosition = BlockPos.ZERO;
this.chunkPosition = ChunkPos.ZERO; this.chunkPosition = ChunkPos.ZERO;
@@ -778,6 +_,7 @@ @@ -779,6 +_,7 @@
&& this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v) && this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v)
&& (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) {
// Paper end - Configurable nether ceiling damage // Paper end - Configurable nether ceiling damage
@@ -68,7 +68,7 @@
this.onBelowWorld(); this.onBelowWorld();
} }
} }
@@ -1681,7 +_,7 @@ @@ -1682,7 +_,7 @@
} }
public boolean fireImmune() { public boolean fireImmune() {
@@ -77,7 +77,7 @@
} }
public boolean causeFallDamage(double fallDistance, float damageMultiplier, DamageSource damageSource) { public boolean causeFallDamage(double fallDistance, float damageMultiplier, DamageSource damageSource) {
@@ -1741,7 +_,7 @@ @@ -1742,7 +_,7 @@
return this.isInWater() || flag; return this.isInWater() || flag;
} }
@@ -86,7 +86,7 @@
if (this.getVehicle() instanceof AbstractBoat abstractBoat && !abstractBoat.isUnderWater()) { if (this.getVehicle() instanceof AbstractBoat abstractBoat && !abstractBoat.isUnderWater()) {
this.wasTouchingWater = false; this.wasTouchingWater = false;
} else if (this.updateFluidHeightAndDoFluidPushing(FluidTags.WATER, 0.014)) { } else if (this.updateFluidHeightAndDoFluidPushing(FluidTags.WATER, 0.014)) {
@@ -2363,6 +_,13 @@ @@ -2364,6 +_,13 @@
compound.putBoolean("Paper.FreezeLock", true); compound.putBoolean("Paper.FreezeLock", true);
} }
// Paper end // Paper end
@@ -100,7 +100,7 @@
return compound; return compound;
} catch (Throwable var8) { } catch (Throwable var8) {
CrashReport crashReport = CrashReport.forThrowable(var8, "Saving entity NBT"); CrashReport crashReport = CrashReport.forThrowable(var8, "Saving entity NBT");
@@ -2480,6 +_,13 @@ @@ -2481,6 +_,13 @@
freezeLocked = compound.getBooleanOr("Paper.FreezeLock", false); freezeLocked = compound.getBooleanOr("Paper.FreezeLock", false);
} }
// Paper end // Paper end
@@ -114,7 +114,7 @@
} catch (Throwable var8) { } catch (Throwable var8) {
CrashReport crashReport = CrashReport.forThrowable(var8, "Loading entity NBT"); CrashReport crashReport = CrashReport.forThrowable(var8, "Loading entity NBT");
CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded"); CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded");
@@ -2619,6 +_,7 @@ @@ -2620,6 +_,7 @@
if (this.isAlive() && this instanceof Leashable leashable) { if (this.isAlive() && this instanceof Leashable leashable) {
if (leashable.getLeashHolder() == player) { if (leashable.getLeashHolder() == player) {
if (!this.level().isClientSide()) { if (!this.level().isClientSide()) {
@@ -122,7 +122,7 @@
// CraftBukkit start - fire PlayerUnleashEntityEvent // CraftBukkit start - fire PlayerUnleashEntityEvent
// Paper start - Expand EntityUnleashEvent // Paper start - Expand EntityUnleashEvent
org.bukkit.event.player.PlayerUnleashEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.hasInfiniteMaterials()); org.bukkit.event.player.PlayerUnleashEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.hasInfiniteMaterials());
@@ -2935,15 +_,18 @@ @@ -2936,15 +_,18 @@
return Vec3.directionFromRotation(this.getRotationVector()); return Vec3.directionFromRotation(this.getRotationVector());
} }
@@ -142,7 +142,7 @@
} }
} }
} }
@@ -3148,7 +_,7 @@ @@ -3149,7 +_,7 @@
} }
public int getMaxAirSupply() { public int getMaxAirSupply() {
@@ -151,7 +151,7 @@
} }
public int getAirSupply() { public int getAirSupply() {
@@ -3676,7 +_,7 @@ @@ -3677,7 +_,7 @@
// CraftBukkit end // CraftBukkit end
public boolean canUsePortal(boolean allowPassengers) { public boolean canUsePortal(boolean allowPassengers) {
@@ -160,7 +160,7 @@
} }
public boolean canTeleport(Level fromLevel, Level toLevel) { public boolean canTeleport(Level fromLevel, Level toLevel) {
@@ -4211,6 +_,12 @@ @@ -4212,6 +_,12 @@
return Mth.lerp(partialTick, this.yRotO, this.yRot); return Mth.lerp(partialTick, this.yRotO, this.yRot);
} }
@@ -173,7 +173,7 @@
public boolean updateFluidHeightAndDoFluidPushing(TagKey<Fluid> fluidTag, double motionScale) { public boolean updateFluidHeightAndDoFluidPushing(TagKey<Fluid> fluidTag, double motionScale) {
if (this.touchingUnloadedChunk()) { if (this.touchingUnloadedChunk()) {
return false; return false;
@@ -4551,7 +_,7 @@ @@ -4552,7 +_,7 @@
} }
public float maxUpStep() { public float maxUpStep() {

View File

@@ -100,7 +100,7 @@
this.noActionTime = 0; this.noActionTime = 0;
if (amount < 0.0F) { if (amount < 0.0F) {
amount = 0.0F; amount = 0.0F;
@@ -1647,10 +_,10 @@ @@ -1646,10 +_,10 @@
protected Player resolvePlayerResponsibleForDamage(DamageSource damageSource) { protected Player resolvePlayerResponsibleForDamage(DamageSource damageSource) {
Entity entity = damageSource.getEntity(); Entity entity = damageSource.getEntity();
if (entity instanceof Player player) { if (entity instanceof Player player) {
@@ -113,7 +113,7 @@
} else { } else {
this.lastHurtByPlayer = null; this.lastHurtByPlayer = null;
this.lastHurtByPlayerMemoryTime = 0; this.lastHurtByPlayerMemoryTime = 0;
@@ -1701,6 +_,18 @@ @@ -1700,6 +_,18 @@
} }
} }
@@ -132,7 +132,7 @@
final org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null; final org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null;
final EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot); final EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot);
event.setCancelled(itemStack == null); event.setCancelled(itemStack == null);
@@ -1876,6 +_,7 @@ @@ -1875,6 +_,7 @@
boolean flag = this.lastHurtByPlayerMemoryTime > 0; boolean flag = this.lastHurtByPlayerMemoryTime > 0;
this.dropEquipment(level); // CraftBukkit - from below this.dropEquipment(level); // CraftBukkit - from below
if (this.shouldDropLoot() && level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { if (this.shouldDropLoot() && level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) {
@@ -140,7 +140,7 @@
this.dropFromLootTable(level, damageSource, flag); this.dropFromLootTable(level, damageSource, flag);
// Paper start // Paper start
final boolean prev = this.clearEquipmentSlots; final boolean prev = this.clearEquipmentSlots;
@@ -1884,6 +_,7 @@ @@ -1883,6 +_,7 @@
// Paper end // Paper end
this.dropCustomDeathLoot(level, damageSource, flag); this.dropCustomDeathLoot(level, damageSource, flag);
this.clearEquipmentSlots = prev; // Paper this.clearEquipmentSlots = prev; // Paper
@@ -148,7 +148,7 @@
} }
// CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment // CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment
@@ -3058,6 +_,7 @@ @@ -3057,6 +_,7 @@
float f = (float)(d * 10.0 - 3.0); float f = (float)(d * 10.0 - 3.0);
if (f > 0.0F) { if (f > 0.0F) {
this.playSound(this.getFallDamageSound((int)f), 1.0F, 1.0F); this.playSound(this.getFallDamageSound((int)f), 1.0F, 1.0F);
@@ -156,7 +156,7 @@
this.hurt(this.damageSources().flyIntoWall(), f); this.hurt(this.damageSources().flyIntoWall(), f);
} }
} }
@@ -4452,6 +_,12 @@ @@ -4451,6 +_,12 @@
? slot == EquipmentSlot.MAINHAND && this.canUseSlot(EquipmentSlot.MAINHAND) ? slot == EquipmentSlot.MAINHAND && this.canUseSlot(EquipmentSlot.MAINHAND)
: slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.getType()); : slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.getType());
} }

View File

@@ -1,6 +1,6 @@
--- a/net/minecraft/world/level/Level.java --- a/net/minecraft/world/level/Level.java
+++ b/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java
@@ -158,11 +_,55 @@ @@ -159,11 +_,55 @@
} }
// Paper end - add paper world config // Paper end - add paper world config
@@ -56,7 +56,7 @@
public CraftWorld getWorld() { public CraftWorld getWorld() {
return this.world; return this.world;
} }
@@ -205,6 +_,8 @@ @@ -207,6 +_,8 @@
) { ) {
this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName()); // Spigot this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName()); // Spigot
this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config
@@ -65,7 +65,7 @@
this.generator = gen; this.generator = gen;
this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env);
@@ -1409,4 +_,14 @@ @@ -1413,4 +_,14 @@
return this.id; return this.id;
} }
} }

View File

@@ -1,6 +1,6 @@
--- a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java --- a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java
+++ b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java +++ b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java
@@ -136,6 +_,10 @@ @@ -27,6 +_,10 @@
static { static {
// TODO these kinda should be checked on each release, in case obfuscation changes // TODO these kinda should be checked on each release, in case obfuscation changes
deobfuscationMap.put("abstract_skeleton_1", "abstract_skeleton_melee"); deobfuscationMap.put("abstract_skeleton_1", "abstract_skeleton_melee");