diff --git a/gradle.properties b/gradle.properties index 2bf2d4cc2..263fe8271 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.20-R0.1-SNAPSHOT mcVersion = 1.20 -paperCommit = 4b5f84712ba3afab4ab9184de91d85d070584e60 +paperCommit = 648c000fb2330ca1f9b7833a275e70f06c1fce83 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0045-Add-death-screen-API.patch b/patches/api/0045-Add-death-screen-API.patch index 0f2ed3882..48e824c37 100644 --- a/patches/api/0045-Add-death-screen-API.patch +++ b/patches/api/0045-Add-death-screen-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add death screen API diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index bb62037ea111f27bed78001ec2e179cc69e0084e..949bacc06d06d90980243dfc14360599a8030e03 100644 +index ca7a9098db4eb7ddcb72f1e14a81626de2c75811..7d54129ef393583df2fb2a4af81649be82eebdbe 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3192,5 +3192,21 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3192,5 +3192,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * Clears all debug block highlights */ void clearBlockHighlights(); @@ -26,7 +26,11 @@ index bb62037ea111f27bed78001ec2e179cc69e0084e..949bacc06d06d90980243dfc14360599 + * + * @param message The death message to show the player + * @param killer The entity that killed the player ++ * @deprecated Use {@link #sendDeathScreen(net.kyori.adventure.text.Component)} instead, as 1.20 removed the killer ID from the packet. + */ -+ void sendDeathScreen(@NotNull net.kyori.adventure.text.Component message, @Nullable Entity killer); ++ @Deprecated(since = "1.20") ++ default void sendDeathScreen(@NotNull net.kyori.adventure.text.Component message, @Nullable Entity killer) { ++ sendDeathScreen(message); ++ } // Purpur end } diff --git a/patches/server/0002-Purpur-config-files.patch b/patches/server/0002-Purpur-config-files.patch index 0f4ab92d7..db342e409 100644 --- a/patches/server/0002-Purpur-config-files.patch +++ b/patches/server/0002-Purpur-config-files.patch @@ -460,7 +460,7 @@ index 0000000000000000000000000000000000000000..2b7f1dedb3289efc7e42a138f4483f49 +} diff --git a/src/main/java/org/purpurmc/purpur/command/PurpurCommand.java b/src/main/java/org/purpurmc/purpur/command/PurpurCommand.java new file mode 100644 -index 0000000000000000000000000000000000000000..173b6bba1c8eb4c6c6ab55cad478db7c4c91fd75 +index 0000000000000000000000000000000000000000..afdf04f8b22ad0b7c0b41675e44687b49c2f86d6 --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/command/PurpurCommand.java @@ -0,0 +1,65 @@ @@ -514,7 +514,7 @@ index 0000000000000000000000000000000000000000..173b6bba1c8eb4c6c6ab55cad478db7c + MinecraftServer console = MinecraftServer.getServer(); + PurpurConfig.init((File) console.options.valueOf("purpur-settings")); + for (ServerLevel level : console.getAllLevels()) { -+ level().purpurConfig.init(); ++ level.purpurConfig.init(); + } + console.server.reloadCount++; + diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index 292cedfcb..cd10ba80b 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -6316,7 +6316,7 @@ index 0000000000000000000000000000000000000000..ba2a37dad43e238e54632975abea8ee6 +} diff --git a/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java new file mode 100644 -index 0000000000000000000000000000000000000000..b436fd92e2db17f6a2ee4118a7a51e324b567b46 +index 0000000000000000000000000000000000000000..af057c1d7fd74f3dd806c5ce7f8b0ad06cab7b8e --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java @@ -0,0 +1,99 @@ @@ -6361,7 +6361,7 @@ index 0000000000000000000000000000000000000000..b436fd92e2db17f6a2ee4118a7a51e32 + super_tick(); + + Vec3 mot = this.getDeltaMovement(); -+ HitResult hitResult = ProjectileUtil.getHitResult(this, this::canHitEntity); ++ HitResult hitResult = ProjectileUtil.getHitResult(this.position(), this, this::canHitEntity, mot, level()); + + this.preOnHit(hitResult); + @@ -6373,7 +6373,7 @@ index 0000000000000000000000000000000000000000..b436fd92e2db17f6a2ee4118a7a51e32 + + Vec3 motDouble = mot.scale(2.0); + for (int i = 0; i < 5; i++) { -+ ((ServerLevel) level).sendParticles(null, ParticleTypes.BUBBLE, ++ ((ServerLevel) level()).sendParticles(null, ParticleTypes.BUBBLE, + getX() + random.nextFloat() / 2 - 0.25F, + getY() + random.nextFloat() / 2 - 0.25F, + getZ() + random.nextFloat() / 2 - 0.25F, @@ -6415,7 +6415,7 @@ index 0000000000000000000000000000000000000000..b436fd92e2db17f6a2ee4118a7a51e32 + return; + } + BlockState state = this.level().getBlockState(blockHitResult.getBlockPos()); -+ state.onProjectileHit(this.level, state, blockHitResult, this); ++ state.onProjectileHit(this.level(), state, blockHitResult, this); + this.discard(); + } +} diff --git a/patches/server/0065-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/server/0065-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index edc2262a0..7716133b8 100644 --- a/patches/server/0065-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/patches/server/0065-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -73,7 +73,7 @@ index 5465711d486e5f265a26042031e895fb09e30608..e73446de9a58643609fedcbd0a503d95 @Override protected void addAdditionalSaveData(CompoundTag nbt) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 961300cb8bcc7b0aff476a435aa33e713bd520a6..a72dc02aaed018df9172f9c322b27c3e6399d0a3 100644 +index 961300cb8bcc7b0aff476a435aa33e713bd520a6..86df67578334a4743909c748213c2e1ed5d19bd9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -49,6 +49,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -84,23 +84,22 @@ index 961300cb8bcc7b0aff476a435aa33e713bd520a6..a72dc02aaed018df9172f9c322b27c3e public Phantom(EntityType type, Level world) { super(type, world); -@@ -116,6 +117,24 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -116,6 +117,23 @@ public class Phantom extends FlyingMob implements Enemy { level().addFreshEntity(flames); return true; } + + @Override -+ protected net.minecraft.world.level.storage.loot.LootContext.Builder createLootContext(boolean causedByPlayer, DamageSource source) { ++ protected void dropFromLootTable(DamageSource damageSource, boolean causedByPlayer) { + boolean dropped = false; -+ if (lastHurtByPlayer == null && source.getEntity() instanceof net.minecraft.world.entity.boss.enderdragon.EndCrystal) { ++ if (lastHurtByPlayer == null && damageSource.getEntity() instanceof net.minecraft.world.entity.boss.enderdragon.EndCrystal) { + if (random.nextInt(5) < 1) { + dropped = spawnAtLocation(new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.PHANTOM_MEMBRANE)) != null; + } + } + if (!dropped) { -+ return super.createLootContext(causedByPlayer, source); ++ super.dropFromLootTable(damageSource, causedByPlayer); + } -+ return new net.minecraft.world.level.storage.loot.LootContext.Builder((net.minecraft.server.level.ServerLevel) level); + } + + public boolean isCirclingCrystal() { @@ -109,7 +108,7 @@ index 961300cb8bcc7b0aff476a435aa33e713bd520a6..a72dc02aaed018df9172f9c322b27c3e // Purpur end @Override -@@ -130,11 +149,17 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -130,11 +148,17 @@ public class Phantom extends FlyingMob implements Enemy { @Override protected void registerGoals() { @@ -132,7 +131,7 @@ index 961300cb8bcc7b0aff476a435aa33e713bd520a6..a72dc02aaed018df9172f9c322b27c3e this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -348,6 +373,124 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -348,6 +372,124 @@ public class Phantom extends FlyingMob implements Enemy { private AttackPhase() {} } @@ -151,7 +150,7 @@ index 961300cb8bcc7b0aff476a435aa33e713bd520a6..a72dc02aaed018df9172f9c322b27c3e + @Override + public boolean canUse() { + double range = maxTargetRange(); -+ List crystals = level.getEntitiesOfClass(net.minecraft.world.entity.boss.enderdragon.EndCrystal.class, phantom.getBoundingBox().inflate(range)); ++ List crystals = level().getEntitiesOfClass(net.minecraft.world.entity.boss.enderdragon.EndCrystal.class, phantom.getBoundingBox().inflate(range)); + if (crystals.isEmpty()) { + return false; + } @@ -234,11 +233,11 @@ index 961300cb8bcc7b0aff476a435aa33e713bd520a6..a72dc02aaed018df9172f9c322b27c3e + if (phantom.moveTargetPoint.distanceToSqr(phantom.getX(), phantom.getY(), phantom.getZ()) < 4.0D) { + updateOffset(); + } -+ if (phantom.moveTargetPoint.y < phantom.getY() && !phantom.level.isEmptyBlock(new BlockPos(phantom).below(1))) { ++ if (phantom.moveTargetPoint.y < phantom.getY() && !phantom.level().isEmptyBlock(new BlockPos(phantom).below(1))) { + this.verticalChange = Math.max(1.0F, this.verticalChange); + updateOffset(); + } -+ if (phantom.moveTargetPoint.y > phantom.getY() && !phantom.level.isEmptyBlock(new BlockPos(phantom).above(1))) { ++ if (phantom.moveTargetPoint.y > phantom.getY() && !phantom.level().isEmptyBlock(new BlockPos(phantom).above(1))) { + this.verticalChange = Math.min(-1.0F, this.verticalChange); + updateOffset(); + } diff --git a/patches/server/0074-Phantoms-burn-in-light.patch b/patches/server/0074-Phantoms-burn-in-light.patch index 9010d57ec..b1e8aca94 100644 --- a/patches/server/0074-Phantoms-burn-in-light.patch +++ b/patches/server/0074-Phantoms-burn-in-light.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Phantoms burn in light diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index b0aad0632ed2c6004222a4715c2643eff13f030c..776602b545f5ee3b566787befb0f43075ce02a29 100644 +index 86df67578334a4743909c748213c2e1ed5d19bd9..899a7d3989b51456600787ae09b1736f83bf9a65 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -49,6 +49,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -16,7 +16,7 @@ index b0aad0632ed2c6004222a4715c2643eff13f030c..776602b545f5ee3b566787befb0f4307 Vec3 crystalPosition; // Purpur public Phantom(EntityType type, Level world) { -@@ -247,7 +248,12 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -246,7 +247,12 @@ public class Phantom extends FlyingMob implements Enemy { @Override public void aiStep() { @@ -30,7 +30,7 @@ index b0aad0632ed2c6004222a4715c2643eff13f030c..776602b545f5ee3b566787befb0f4307 if (getRider() == null || !this.isControllable()) // Purpur this.setSecondsOnFire(8); } -@@ -657,6 +663,12 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -656,6 +662,12 @@ public class Phantom extends FlyingMob implements Enemy { return false; } else if (!entityliving.isAlive()) { return false; @@ -43,7 +43,7 @@ index b0aad0632ed2c6004222a4715c2643eff13f030c..776602b545f5ee3b566787befb0f4307 } else { if (entityliving instanceof Player) { Player entityhuman = (Player) entityliving; -@@ -802,6 +814,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -801,6 +813,7 @@ public class Phantom extends FlyingMob implements Enemy { this.nextScanTick = reducedTickDelay(60); List list = Phantom.this.level().getNearbyPlayers(this.attackTargeting, Phantom.this, Phantom.this.getBoundingBox().inflate(16.0D, 64.0D, 16.0D)); diff --git a/patches/server/0101-Add-adjustable-breeding-cooldown-to-config.patch b/patches/server/0101-Add-adjustable-breeding-cooldown-to-config.patch index 0f5a1c45b..aa15dc864 100644 --- a/patches/server/0101-Add-adjustable-breeding-cooldown-to-config.patch +++ b/patches/server/0101-Add-adjustable-breeding-cooldown-to-config.patch @@ -124,13 +124,13 @@ index 27f499f7a6924f9d3ca923c5c57d8770228c3c38..79f951f6275612234a26bff758ef3b0a public int daytimeTicks = 12000; diff --git a/src/main/java/org/purpurmc/purpur/command/PurpurCommand.java b/src/main/java/org/purpurmc/purpur/command/PurpurCommand.java -index 173b6bba1c8eb4c6c6ab55cad478db7c4c91fd75..e1e2a010bb741110aff43690e3aa6be84a5e1bb8 100644 +index afdf04f8b22ad0b7c0b41675e44687b49c2f86d6..2621e54879e9ab0029a875f1d09eee67878b90d5 100644 --- a/src/main/java/org/purpurmc/purpur/command/PurpurCommand.java +++ b/src/main/java/org/purpurmc/purpur/command/PurpurCommand.java @@ -49,6 +49,7 @@ public class PurpurCommand extends Command { PurpurConfig.init((File) console.options.valueOf("purpur-settings")); for (ServerLevel level : console.getAllLevels()) { - level().purpurConfig.init(); + level.purpurConfig.init(); + level.resetBreedingCooldowns(); } console.server.reloadCount++; diff --git a/patches/server/0115-Phantom-flames-on-swoop.patch b/patches/server/0115-Phantom-flames-on-swoop.patch index 38133d092..5cb4031bd 100644 --- a/patches/server/0115-Phantom-flames-on-swoop.patch +++ b/patches/server/0115-Phantom-flames-on-swoop.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Phantom flames on swoop diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 776602b545f5ee3b566787befb0f43075ce02a29..29167ec21bc68e43c6505b6b1ee376d75a43c1ef 100644 +index 899a7d3989b51456600787ae09b1736f83bf9a65..076a881412d40ce6a8f5e5f83f7598bfa08f199c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -244,6 +244,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -243,6 +243,7 @@ public class Phantom extends FlyingMob implements Enemy { this.level().addParticle(ParticleTypes.MYCELIUM, this.getX() - (double) f2, this.getY() + (double) f4, this.getZ() - (double) f3, 0.0D, 0.0D, 0.0D); } diff --git a/patches/server/0128-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0128-Toggle-for-water-sensitive-mob-damage.patch index 232b0c7a9..395545b7b 100644 --- a/patches/server/0128-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0128-Toggle-for-water-sensitive-mob-damage.patch @@ -823,10 +823,10 @@ index b472309f97b24f1d7b97d8b6d464c479c2d602d5..e0ebc4c2d8dd718ce78d981a1d099e74 return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, (double)0.2F); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 5511075728e3a2db213d9c4faf90f0fba255044c..7a5429bc117137989efe322eca092ad26869bb82 100644 +index 076a881412d40ce6a8f5e5f83f7598bfa08f199c..7c9f6076f68de295e882e69137ac573db8d9698b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -138,6 +138,11 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -137,6 +137,11 @@ public class Phantom extends FlyingMob implements Enemy { } // Purpur end diff --git a/patches/server/0146-Allow-infinity-on-crossbows.patch b/patches/server/0146-Allow-infinity-on-crossbows.patch index 62898eba1..38d1f0b21 100644 --- a/patches/server/0146-Allow-infinity-on-crossbows.patch +++ b/patches/server/0146-Allow-infinity-on-crossbows.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Allow infinity on crossbows diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java -index a433910fb4d0bd8d7b6b0d66c8fc88d62a0e4879..795803bbb89e8f19a308ece7b5d1359da1538519 100644 +index a433910fb4d0bd8d7b6b0d66c8fc88d62a0e4879..ae6ba3c0a7722674b304291f643960b0a58fca57 100644 --- a/src/main/java/net/minecraft/world/item/CrossbowItem.java +++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java @@ -114,7 +114,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { @@ -13,7 +13,7 @@ index a433910fb4d0bd8d7b6b0d66c8fc88d62a0e4879..795803bbb89e8f19a308ece7b5d1359d int i = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.MULTISHOT, crossbow); int j = i == 0 ? 1 : 3; - boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild; // Paper - add consume -+ boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild || (org.purpurmc.purpur.PurpurConfig.allowCrossbowInfinity && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.INFINITY_ARROWS, projectile) > 0); // Paper - add consume // Purpur ++ boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild || (org.purpurmc.purpur.PurpurConfig.allowCrossbowInfinity && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.INFINITY_ARROWS, crossbow) > 0); // Paper - add consume // Purpur ItemStack itemstack1 = shooter.getProjectile(crossbow); ItemStack itemstack2 = itemstack1.copy(); diff --git a/patches/server/0166-Iron-golem-calm-anger-options.patch b/patches/server/0166-Iron-golem-calm-anger-options.patch index 4a268cebf..88636c856 100644 --- a/patches/server/0166-Iron-golem-calm-anger-options.patch +++ b/patches/server/0166-Iron-golem-calm-anger-options.patch @@ -48,7 +48,7 @@ index 6b4f6866d075d52ca9a8fe024b070a6183591cdd..e93a619dcd06a2cb65c0d6c4bb4ef36a public boolean llamaRidable = false; diff --git a/src/main/java/org/purpurmc/purpur/entity/ai/ReceiveFlower.java b/src/main/java/org/purpurmc/purpur/entity/ai/ReceiveFlower.java new file mode 100644 -index 0000000000000000000000000000000000000000..115a3b36cbb7716b28ef940a29ca97ac42a8a521 +index 0000000000000000000000000000000000000000..9660716f4162a4441c6e1b0baddef8f5086566c5 --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/entity/ai/ReceiveFlower.java @@ -0,0 +1,91 @@ @@ -88,7 +88,7 @@ index 0000000000000000000000000000000000000000..115a3b36cbb7716b28ef940a29ca97ac + if (uuid == null) { + return false; + } -+ Entity target = ((ServerLevel) this.irongolem.level).getEntity(uuid); ++ Entity target = ((ServerLevel) this.irongolem.level()).getEntity(uuid); + if (!(target instanceof ServerPlayer player)) { + return false; + } diff --git a/patches/server/0175-API-for-any-mob-to-burn-daylight.patch b/patches/server/0175-API-for-any-mob-to-burn-daylight.patch index d83274c5f..00711d2af 100644 --- a/patches/server/0175-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0175-API-for-any-mob-to-burn-daylight.patch @@ -212,7 +212,7 @@ index 31706620960f5f153565f3cf64e32d0f4d10feb8..1df39e11d4fe3146fba9a0605c623384 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 0894335fd9057184bb4f3ba5765ceec9d02828f7..85026b498f25c38653bf3b52061497419c9512d0 100644 +index 7c9f6076f68de295e882e69137ac573db8d9698b..8605dfe152a09f31492226b1eb2a5eb39db9fcbc 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -60,6 +60,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -223,7 +223,7 @@ index 0894335fd9057184bb4f3ba5765ceec9d02828f7..85026b498f25c38653bf3b5206149741 } // Purpur start -@@ -254,16 +255,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -253,16 +254,7 @@ public class Phantom extends FlyingMob implements Enemy { @Override public void aiStep() { @@ -241,7 +241,7 @@ index 0894335fd9057184bb4f3ba5765ceec9d02828f7..85026b498f25c38653bf3b5206149741 super.aiStep(); } -@@ -291,7 +283,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -290,7 +282,7 @@ public class Phantom extends FlyingMob implements Enemy { if (nbt.hasUUID("Paper.SpawningEntity")) { this.spawningEntity = nbt.getUUID("Paper.SpawningEntity"); } @@ -250,7 +250,7 @@ index 0894335fd9057184bb4f3ba5765ceec9d02828f7..85026b498f25c38653bf3b5206149741 this.shouldBurnInDay = nbt.getBoolean("Paper.ShouldBurnInDay"); } // Paper end -@@ -308,7 +300,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -307,7 +299,7 @@ public class Phantom extends FlyingMob implements Enemy { if (this.spawningEntity != null) { nbt.putUUID("Paper.SpawningEntity", this.spawningEntity); } @@ -259,7 +259,7 @@ index 0894335fd9057184bb4f3ba5765ceec9d02828f7..85026b498f25c38653bf3b5206149741 // Paper end } -@@ -374,8 +366,14 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -373,8 +365,14 @@ public class Phantom extends FlyingMob implements Enemy { } public void setSpawningEntity(java.util.UUID entity) { this.spawningEntity = entity; } @@ -269,7 +269,7 @@ index 0894335fd9057184bb4f3ba5765ceec9d02828f7..85026b498f25c38653bf3b5206149741 + // Purpur start + public boolean shouldBurnInDay() { + boolean burnFromDaylight = this.shouldBurnInDay && this.level().purpurConfig.phantomBurnInDaylight; -+ boolean burnFromLightSource = this.level().purpurConfig.phantomBurnInLight > 0 && this.level.getMaxLocalRawBrightness(blockPosition()) >= this.level().purpurConfig.phantomBurnInLight; ++ boolean burnFromLightSource = this.level().purpurConfig.phantomBurnInLight > 0 && this.level().getMaxLocalRawBrightness(blockPosition()) >= this.level().purpurConfig.phantomBurnInLight; + return burnFromDaylight || burnFromLightSource; + } + // Purpur End diff --git a/patches/server/0199-Add-compass-command.patch b/patches/server/0199-Add-compass-command.patch index f3d99edd3..04eb3fc14 100644 --- a/patches/server/0199-Add-compass-command.patch +++ b/patches/server/0199-Add-compass-command.patch @@ -174,7 +174,7 @@ index d38b3c4a722396cc3b61a9a8ed7e39cea4ae65cb..d333334f323049ca97e756324cff0b23 } diff --git a/src/main/java/org/purpurmc/purpur/task/CompassTask.java b/src/main/java/org/purpurmc/purpur/task/CompassTask.java new file mode 100644 -index 0000000000000000000000000000000000000000..d7bc40f8f678c75c964d26ac98689c7866a2ef9d +index 0000000000000000000000000000000000000000..bece7eefc8ba8822b433835526251d2fb916c025 --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/task/CompassTask.java @@ -0,0 +1,68 @@ @@ -207,7 +207,7 @@ index 0000000000000000000000000000000000000000..d7bc40f8f678c75c964d26ac98689c78 + tick = 0; + + MinecraftServer.getServer().getAllLevels().forEach((level) -> { -+ if (level().purpurConfig.compassItemShowsBossBar) { ++ if (level.purpurConfig.compassItemShowsBossBar) { + level.players().forEach(player -> { + if (!player.compassBar()) { + if (player.getMainHandItem().getItem() != Items.COMPASS && player.getOffhandItem().getItem() != Items.COMPASS) { diff --git a/patches/server/0228-Mobs-always-drop-experience.patch b/patches/server/0228-Mobs-always-drop-experience.patch index c2bd6a678..18113d091 100644 --- a/patches/server/0228-Mobs-always-drop-experience.patch +++ b/patches/server/0228-Mobs-always-drop-experience.patch @@ -373,7 +373,7 @@ index b16d075581a352714f86f1b87805f24c9e336aa3..87b6f6b10ba6e3d9c6a42298a2019a52 return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index 5c2fc833dac13dd8b959f035abb74432ec6c82c9..bcc6d50aed60d1255fbdbfb7b9494b52300a7e3a 100644 +index 9f8891a3eacf461071ce7ad2a277c78048171d51..7787b121def6525642672dfd67fae9ac0e010f52 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java @@ -115,6 +115,11 @@ public class Turtle extends Animal { @@ -645,7 +645,7 @@ index b494d5689beb19d621f5d7c9c22d84e12d303fa0..b30f13d2a7198f568bc36c0d974fd6dc return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D); } diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index f9bc9e2d57111b6260b5303fa2dbc405ef9835a2..10b2708a1067cba489aca17c5e8713139c623cdc 100644 +index 8db82eaa2355b15aa78fc9500368acf2c7f75ffc..1cb816cee305969d4215ef2baa1a255b1c88d6e5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -114,6 +114,11 @@ public class EnderMan extends Monster implements NeutralMob { @@ -789,10 +789,10 @@ index e0ebc4c2d8dd718ce78d981a1d099e7482221f1f..1ad97267394d3717b1871336193cdc91 return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, (double)0.2F); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 85026b498f25c38653bf3b52061497419c9512d0..c3b9878de5ac74b9a1aaa77030edb4a2b53586c3 100644 +index 8605dfe152a09f31492226b1eb2a5eb39db9fcbc..f71cbaabfff370f019f124203fb947ea7a817d95 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -144,6 +144,11 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -143,6 +143,11 @@ public class Phantom extends FlyingMob implements Enemy { return this.level().purpurConfig.phantomTakeDamageFromWater; } diff --git a/patches/server/0238-Give-bee-counts-in-beehives-to-Purpur-clients.patch b/patches/server/0238-Give-bee-counts-in-beehives-to-Purpur-clients.patch index 05eb6dbd2..af16352c9 100644 --- a/patches/server/0238-Give-bee-counts-in-beehives-to-Purpur-clients.patch +++ b/patches/server/0238-Give-bee-counts-in-beehives-to-Purpur-clients.patch @@ -17,7 +17,7 @@ index c4a88ef1cc23b0f7b3fe50019441535bae1a1b64..1041e8e24e03ce46824f6b0f4fca6fc0 this.hasLoggedStop = true; // Paper if (isDebugging()) io.papermc.paper.util.TraceUtil.dumpTraceForThread("Server stopped"); // Paper diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index cd663643c38e787b06e7bc9cf74d9f78431ca988..9eeda0276b4a6f444e7fd2afee7a2c62ad58e0cd 100644 +index 0b2c90fc95889502636e7a4f95aa62bd11c89e7a..4b9cf94e24bc583f7bef593e6e8fd70e5564ca38 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -373,6 +373,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -30,7 +30,7 @@ index cd663643c38e787b06e7bc9cf74d9f78431ca988..9eeda0276b4a6f444e7fd2afee7a2c62 } diff --git a/src/main/java/org/purpurmc/purpur/task/BeehiveTask.java b/src/main/java/org/purpurmc/purpur/task/BeehiveTask.java new file mode 100644 -index 0000000000000000000000000000000000000000..055dd307e9d5ac0d4623c961164c84bab1edd3bd +index 0000000000000000000000000000000000000000..2ebbaf5faa92a88bfb4d61298951e5b74157d1e1 --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/task/BeehiveTask.java @@ -0,0 +1,81 @@ @@ -91,7 +91,7 @@ index 0000000000000000000000000000000000000000..055dd307e9d5ac0d4623c961164c84ba + + ServerPlayer serverPlayer = ((CraftPlayer) player).getHandle(); + -+ BlockEntity blockEntity = serverPlayer.level.getBlockEntity(pos); ++ BlockEntity blockEntity = serverPlayer.level().getBlockEntity(pos); + if (!(blockEntity instanceof BeehiveBlockEntity beehive)) { + return; + } diff --git a/patches/server/0243-Configurable-phantom-size.patch b/patches/server/0243-Configurable-phantom-size.patch index 2d2ce61ff..1691e5608 100644 --- a/patches/server/0243-Configurable-phantom-size.patch +++ b/patches/server/0243-Configurable-phantom-size.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable phantom size diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index c3b9878de5ac74b9a1aaa77030edb4a2b53586c3..85adeb1c4061d95c53359331256dbbd19670524e 100644 +index f71cbaabfff370f019f124203fb947ea7a817d95..17638b9d3340c86528a8ae597712c7590b98dba6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -272,7 +272,11 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -271,7 +271,11 @@ public class Phantom extends FlyingMob implements Enemy { @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { this.anchorPoint = this.blockPosition().above(5); diff --git a/patches/server/0244-Configurable-food-attributes.patch b/patches/server/0244-Configurable-food-attributes.patch index c498223ee..3f5466b3b 100644 --- a/patches/server/0244-Configurable-food-attributes.patch +++ b/patches/server/0244-Configurable-food-attributes.patch @@ -51,7 +51,7 @@ index b16d9e2eaa589f19c563ee70b1a56d67dbcdecb0..71beab673f04cd051c46ea37f8c84731 public static final FoodProperties BAKED_POTATO = (new FoodProperties.Builder()).nutrition(5).saturationMod(0.6F).build(); public static final FoodProperties BEEF = (new FoodProperties.Builder()).nutrition(3).saturationMod(0.3F).meat().build(); diff --git a/src/main/java/net/minecraft/world/item/Items.java b/src/main/java/net/minecraft/world/item/Items.java -index 31f5ed9dd1727eee24804a384817d2b76a45676b..6e25f5765f169f9b3f48bf5ca3f7e6eb31e1af82 100644 +index 31f5ed9dd1727eee24804a384817d2b76a45676b..5fbb13ebef0ca66419f3e5006d19e4a5918a038a 100644 --- a/src/main/java/net/minecraft/world/item/Items.java +++ b/src/main/java/net/minecraft/world/item/Items.java @@ -1309,6 +1309,13 @@ public class Items { @@ -60,8 +60,8 @@ index 31f5ed9dd1727eee24804a384817d2b76a45676b..6e25f5765f169f9b3f48bf5ca3f7e6eb + // Purpur start + if (item.getFoodProperties() != null) { -+ Foods.ALL_PROPERTIES.put(key.location().toString(), item.getFoodProperties()); -+ Foods.DEFAULT_PROPERTIES.put(key.location().toString(), item.getFoodProperties().copy()); ++ Foods.ALL_PROPERTIES.put(key.location().getPath(), item.getFoodProperties()); ++ Foods.DEFAULT_PROPERTIES.put(key.location().getPath(), item.getFoodProperties().copy()); + } + // Purpur end + diff --git a/patches/server/0272-Remove-Timings.patch b/patches/server/0272-Remove-Timings.patch index 79bd5ddfc..5c705da53 100644 --- a/patches/server/0272-Remove-Timings.patch +++ b/patches/server/0272-Remove-Timings.patch @@ -244,7 +244,7 @@ index 4b9cf94e24bc583f7bef593e6e8fd70e5564ca38..f7238261f9797d127ff6e5dcdd62dd20 @Override diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 3bf565ce5110e38366523e0a383ac00cc6c4351a..f60c8dbe8d6e04a19450a6cc1f3b2a27ca3ba2db 100644 +index 3bf565ce5110e38366523e0a383ac00cc6c4351a..914c75bb1fb761d93a43b5f80ba0831afcaf0668 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -620,15 +620,15 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -267,6 +267,35 @@ index 3bf565ce5110e38366523e0a383ac00cc6c4351a..f60c8dbe8d6e04a19450a6cc1f3b2a27 } gameprofilerfiller.pop(); +@@ -1250,24 +1250,24 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + + // Paper start - optimised tracker + private final void processTrackQueue() { +- this.level.timings.tracker1.startTiming(); ++ //this.level.timings.tracker1.startTiming(); // Purpur + try { + for (TrackedEntity tracker : this.entityMap.values()) { + // update tracker entry + tracker.updatePlayers(tracker.entity.getPlayersInTrackRange()); + } + } finally { +- this.level.timings.tracker1.stopTiming(); ++ //this.level.timings.tracker1.stopTiming(); // Purpur + } + + +- this.level.timings.tracker2.startTiming(); ++ //this.level.timings.tracker2.startTiming(); // Purpur + try { + for (TrackedEntity tracker : this.entityMap.values()) { + tracker.serverEntity.sendChanges(); + } + } finally { +- this.level.timings.tracker2.stopTiming(); ++ //this.level.timings.tracker2.stopTiming(); Purpur + } + } + // Paper end - optimised tracker @@ -1282,7 +1282,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider List list = Lists.newArrayList(); List list1 = this.level.players(); diff --git a/patches/server/0273-Remove-Mojang-Profiler.patch b/patches/server/0273-Remove-Mojang-Profiler.patch index 4aa0c0b43..9a308310b 100644 --- a/patches/server/0273-Remove-Mojang-Profiler.patch +++ b/patches/server/0273-Remove-Mojang-Profiler.patch @@ -388,7 +388,7 @@ index aa3f4ca3be843616d34897e41909255f512f8963..426ac5faa9344472560fb20bdea8bdc3 ++j; diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index f60c8dbe8d6e04a19450a6cc1f3b2a27ca3ba2db..7fb00407b75603cf6ff63f1fd1f3e020524caf82 100644 +index 914c75bb1fb761d93a43b5f80ba0831afcaf0668..3a29bccd7c203de904f041b6469e990fbbdd0ad4 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -618,20 +618,20 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -1792,9 +1792,24 @@ index 4e2611c9a7df8343f76e3be3f01f2f828cdf8a1d..03fc9c6ef0fb320924038f2730c6f084 // Paper start diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 5de3b6cd73a45348d0feba858d96a500bf236ce7..d7b8b8250564831ab3e84043292e48f058698a93 100644 +index 5de3b6cd73a45348d0feba858d96a500bf236ce7..f4849ed39a7da7454a611d0d9f1a828286121c1c 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +@@ -538,11 +538,11 @@ public class LevelChunk extends ChunkAccess { + if (LightEngine.hasDifferentLightProperties(this, blockposition, iblockdata1, iblockdata)) { + ProfilerFiller gameprofilerfiller = this.level.getProfiler(); + +- gameprofilerfiller.push("updateSkyLightSources"); ++ //gameprofilerfiller.push("updateSkyLightSources"); // Purpur + this.skyLightSources.update(this, j, i, l); +- gameprofilerfiller.popPush("queueCheckLight"); ++ //gameprofilerfiller.popPush("queueCheckLight"); // Purpur + this.level.getChunkSource().getLightEngine().checkBlock(blockposition); +- gameprofilerfiller.pop(); ++ //gameprofilerfiller.pop(); // Purpur + } + + boolean flag3 = iblockdata1.hasBlockEntity(); @@ -1256,9 +1256,9 @@ public class LevelChunk extends ChunkAccess { if (LevelChunk.this.isTicking(blockposition)) { diff --git a/patches/server/0280-Add-death-screen-API.patch b/patches/server/0280-Add-death-screen-API.patch index 8119496a4..df67ad322 100644 --- a/patches/server/0280-Add-death-screen-API.patch +++ b/patches/server/0280-Add-death-screen-API.patch @@ -4,51 +4,19 @@ Date: Fri, 23 Sep 2022 18:41:05 -0700 Subject: [PATCH] Add death screen API -diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerCombatKillPacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerCombatKillPacket.java -index 76a62d872bc2ad12efd9522d8dd445b8d2342525..075a891413d072998e6d468e76d839e1a3bf7da9 100644 ---- a/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerCombatKillPacket.java -+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundPlayerCombatKillPacket.java -@@ -7,6 +7,7 @@ import net.minecraft.network.protocol.Packet; - public class ClientboundPlayerCombatKillPacket implements Packet { - private final int playerId; - private final Component message; -+ public net.kyori.adventure.text.Component adventure$message; // Purpur - - public ClientboundPlayerCombatKillPacket(int entityId, Component message) { - this.playerId = entityId; -@@ -21,6 +22,12 @@ public class ClientboundPlayerCombatKillPacket implements Packet { + CommandSourceStack sender = context.getSource(); + RamBarTask ramBar = RamBarTask.instance(); -+ sender.sendSuccess(PaperAdventure.asVanilla(MiniMessage.miniMessage().deserialize(PurpurConfig.ramCommandOutput, ++ sender.sendSuccess(() -> PaperAdventure.asVanilla(MiniMessage.miniMessage().deserialize(PurpurConfig.ramCommandOutput, + Placeholder.component("allocated", ramBar.format(ramBar.getAllocated())), + Placeholder.component("used", ramBar.format(ramBar.getUsed())), + Placeholder.component("xmx", ramBar.format(ramBar.getXmx())), diff --git a/todo.txt b/todo.txt index e1d4707d0..a325be8c5 100644 --- a/todo.txt +++ b/todo.txt @@ -1,5 +1,2 @@ * make sure that all mobs are in entity attributes and ridables (some from previous updates weren't added to attributes) -* check sulker spawn from bullet options matches original design -* configurable food atributes check `key.location().toString()` still works * merge pufferfish fixes into one -* test allow transparent blocks in enchanting box