From 76614d2235df4e7327a5cc606e00040fe0750108 Mon Sep 17 00:00:00 2001 From: granny Date: Sat, 26 Oct 2024 23:46:33 -0700 Subject: [PATCH] it compiles \o/ --- patches/server/0002-Purpur-config-files.patch | 7 +- .../0006-Component-related-conveniences.patch | 48 +++++------ patches/server/0007-Ridables.patch | 82 +++++++++++-------- .../0009-Barrels-and-enderchests-6-rows.patch | 6 +- patches/server/0011-AFK-API.patch | 12 +-- .../0013-Configurable-server-mod-name.patch | 4 +- patches/server/0014-Lagging-threshold.patch | 4 +- ...015-PlayerSetSpawnerTypeWithEggEvent.patch | 4 +- .../0017-Alternative-Keepalive-Handling.patch | 4 +- patches/server/0019-Silk-touch-spawners.patch | 4 +- ...-settings-suppressing-pointless-logs.patch | 4 +- patches/server/0023-Giants-AI-settings.patch | 6 +- ...0025-Charged-creeper-naturally-spawn.patch | 6 +- .../server/0028-Tulips-change-fox-type.patch | 14 ++-- .../server/0029-Breedable-Polar-Bears.patch | 4 +- ...option-to-set-armorstand-step-height.patch | 6 +- patches/server/0033-Cows-eat-mushrooms.patch | 10 +-- ...-Minecart-settings-and-WASD-controls.patch | 6 +- .../0043-Configurable-TPS-Catchup.patch | 4 +- ...derman-and-creeper-griefing-controls.patch | 8 +- .../server/0058-Item-entity-immunities.patch | 16 ++-- patches/server/0059-Add-ping-command.patch | 6 +- patches/server/0060-Add-demo-command.patch | 6 +- patches/server/0061-Add-credits-command.patch | 6 +- ...ed-to-crystals-and-crystals-shoot-ph.patch | 10 +-- ...-Add-allow-water-in-end-world-option.patch | 4 +- ...leport-to-spawn-if-outside-world-bor.patch | 8 +- .../server/0080-Short-enderman-height.patch | 10 +-- ...Stop-squids-floating-on-top-of-water.patch | 8 +- ...ing-obsidian-valid-for-portal-frames.patch | 6 +- ...e-entity-breeding-times-configurable.patch | 10 +-- ...C-Configurable-disable-give-dropping.patch | 4 +- ...ble-chance-for-wolves-to-spawn-rabid.patch | 6 +- patches/server/0110-Implement-TPSBar.patch | 12 +-- ...therite-armor-grants-fire-resistance.patch | 23 +++--- ...iefing-bypass-to-everything-affected.patch | 12 +-- ...oggle-for-water-sensitive-mob-damage.patch | 24 +++--- .../server/0124-Dont-run-with-scissors.patch | 10 +-- ...an-aggressiveness-towards-Endermites.patch | 6 +- ...urable-ravager-griefable-blocks-list.patch | 4 +- ...ption-to-make-doors-require-redstone.patch | 4 +- ...0143-Config-to-allow-unsafe-enchants.patch | 4 +- ...-Config-to-change-max-number-of-bees.patch | 6 +- .../0150-Gamemode-extra-permissions.patch | 6 +- ...0152-Configurable-broadcast-settings.patch | 6 +- ...-hidden-players-from-entity-selector.patch | 6 +- ...h-to-impact-Creeper-explosion-radius.patch | 6 +- patches/server/0157-Breedable-parrots.patch | 6 +- ...nge-multiplier-critical-damage-value.patch | 6 +- ...nfig-for-unverified-username-message.patch | 6 +- ...e-anvil-cumulative-cost-configurable.patch | 6 +- ...ake-lightning-rod-range-configurable.patch | 8 +- ...after-eating-food-fills-hunger-bar-c.patch | 45 +++++++--- ...Eating-glow-berries-adds-glow-effect.patch | 8 +- ...onfigurable-hunger-starvation-damage.patch | 6 +- patches/server/0176-Add-uptime-command.patch | 12 +-- .../server/0177-Tool-actionable-options.patch | 32 ++++---- ...omizable-sleeping-actionbar-messages.patch | 10 +-- .../0183-Player-ridable-in-water-option.patch | 6 +- ...e-Enderman-teleport-on-projectile-hi.patch | 6 +- patches/server/0185-Add-compass-command.patch | 12 +-- .../0193-Conduit-behavior-configuration.patch | 4 +- ...the-ability-to-add-combustible-items.patch | 49 +++++------ ...turally-aggressive-to-players-chance.patch | 6 +- ...turally-aggressive-to-players-chance.patch | 8 +- .../server/0206-Config-for-grindstones.patch | 10 +-- .../server/0207-UPnP-Port-Forwarding.patch | 4 +- ...g-and-twisting-vines-configurable-ma.patch | 6 +- ...rable-valid-characters-for-usernames.patch | 4 +- ...counts-in-beehives-to-Purpur-clients.patch | 4 +- ...Configurable-player-pickup-exp-delay.patch | 6 +- .../server/0226-Max-joins-per-second.patch | 6 +- ...awner-not-spawning-water-animals-cor.patch | 6 +- .../0232-Anvil-repair-damage-options.patch | 18 ++-- ...dd-toggle-for-enchant-level-clamping.patch | 6 +- patches/server/0237-Stonecutter-damage.patch | 6 +- .../0240-Skeletons-eat-wither-roses.patch | 6 +- ...o-disable-kick-for-out-of-order-chat.patch | 4 +- .../server/0248-Remove-Mojang-Profiler.patch | 33 ++++++-- patches/server/0251-Debug-Marker-API.patch | 8 +- ...55-Implement-ram-and-rambar-commands.patch | 14 ++-- ...-Configurable-block-blast-resistance.patch | 6 +- ...igurable-block-fall-damage-modifiers.patch | 6 +- ...dd-log-suppression-for-LibraryLoader.patch | 4 +- ...on-to-fix-MC-3304-projectile-looting.patch | 10 +-- ...bute-clamping-and-armor-limit-config.patch | 6 +- .../server/0277-Shears-can-defuse-TNT.patch | 18 ++-- ...r-piglins-to-ignore-gold-trimmed-arm.patch | 10 +-- ...lways-showing-item-in-player-death-m.patch | 4 +- ...84-register-minecraft-debug-commands.patch | 4 +- .../0287-config-for-startup-commands.patch | 4 +- ...Config-to-reverse-bubble-column-flow.patch | 6 +- 92 files changed, 484 insertions(+), 443 deletions(-) diff --git a/patches/server/0002-Purpur-config-files.patch b/patches/server/0002-Purpur-config-files.patch index a49591d05..924e6e717 100644 --- a/patches/server/0002-Purpur-config-files.patch +++ b/patches/server/0002-Purpur-config-files.patch @@ -179,10 +179,10 @@ index a7524d3853d5b67b6385d2b74832b9267503dfe6..bc0353e4f41680d04f4d5e2dd85640d9 .withRequiredArg() diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..6176bc84e6896d2e60bb219e92e1d668bfbe8eac +index 0000000000000000000000000000000000000000..ceb45f313869ac3a0f650a4ee43ecff782c1be5f --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -0,0 +1,177 @@ +@@ -0,0 +1,178 @@ +package org.purpurmc.purpur; + +import com.google.common.base.Throwables; @@ -204,6 +204,7 @@ index 0000000000000000000000000000000000000000..6176bc84e6896d2e60bb219e92e1d668 +import net.minecraft.world.item.enchantment.Enchantment; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; ++import net.minecraft.world.level.block.state.BlockBehaviour; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.configuration.ConfigurationSection; @@ -267,7 +268,7 @@ index 0000000000000000000000000000000000000000..6176bc84e6896d2e60bb219e92e1d668 + + readConfig(PurpurConfig.class, null); + -+ Blocks.rebuildCache(); ++ Block.BLOCK_STATE_REGISTRY.forEach(BlockBehaviour.BlockStateBase::initCache); + } + + protected static void log(String s) { diff --git a/patches/server/0006-Component-related-conveniences.patch b/patches/server/0006-Component-related-conveniences.patch index 8910028b6..8945cc0cd 100644 --- a/patches/server/0006-Component-related-conveniences.patch +++ b/patches/server/0006-Component-related-conveniences.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Component related conveniences diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index eb6f95a37b26ac077423accc93492d9957456a1a..f00e708fe38454e228cf126199651b8104375891 100644 +index eb6f95a37b26ac077423accc93492d9957456a1a..894f330399282c9db0b5c5dadc1d8502a06bac3e 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -2246,6 +2246,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -35,6 +35,27 @@ index eb6f95a37b26ac077423accc93492d9957456a1a..f00e708fe38454e228cf126199651b81 @Override public void displayClientMessage(Component message, boolean overlay) { this.sendSystemMessage(message, overlay); +@@ -2470,6 +2490,20 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple + return new CommandSourceStack(this.commandSource(), this.position(), this.getRotationVector(), this.serverLevel(), this.getPermissionLevel(), this.getName().getString(), this.getDisplayName(), this.server, this); + } + ++ // Purpur Start ++ public void sendMiniMessage(@Nullable String message) { ++ if (message != null && !message.isEmpty()) { ++ this.sendMessage(net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(message)); ++ } ++ } ++ ++ public void sendMessage(@Nullable net.kyori.adventure.text.Component message) { ++ if (message != null) { ++ this.sendSystemMessage(io.papermc.paper.adventure.PaperAdventure.asVanilla(message)); ++ } ++ } ++ // Purpur end ++ + public void sendSystemMessage(Component message) { + this.sendSystemMessage(message, false); + } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java index 511e7254d938733aca508efd5de82e61678c7620..75e5e540f03d28b64fa5fef1f342a157598c3fa7 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java @@ -80,28 +101,3 @@ index bb1a60180e58c1333e7bb33e8acf1b0225eda8a8..c83e80ebdbbfb2d0e08561a44486a308 public String getMsgId() { return this.type().msgId(); } -diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 6817015f0cf39df03029e36cd845d590618031dc..62af796b2b883856a904647f504ff064a5fed463 100644 ---- a/src/main/java/net/minecraft/world/entity/Entity.java -+++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4468,6 +4468,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess - return SlotAccess.NULL; - } - -+ // Purpur Start -+ public void sendMiniMessage(@Nullable String message) { -+ if (message != null && !message.isEmpty()) { -+ this.sendMessage(net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(message)); -+ } -+ } -+ -+ public void sendMessage(@Nullable net.kyori.adventure.text.Component message) { -+ if (message != null) { -+ this.sendSystemMessage(io.papermc.paper.adventure.PaperAdventure.asVanilla(message)); -+ } -+ } -+ // Purpur end -+ - public Level getCommandSenderWorld() { - return this.level(); - } diff --git a/patches/server/0007-Ridables.patch b/patches/server/0007-Ridables.patch index 06a105064..2b73fc367 100644 --- a/patches/server/0007-Ridables.patch +++ b/patches/server/0007-Ridables.patch @@ -46,7 +46,7 @@ index a7420e4522e0dff72ce7f8a791b9cd4bfa270106..0fa5e0c80ad09e03452c4d412390cb8f public LevelChunk getChunkIfLoaded(int x, int z) { return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index f00e708fe38454e228cf126199651b8104375891..7e796655dec9eb48d0c29c9ed06d30ebf67c25a5 100644 +index 894f330399282c9db0b5c5dadc1d8502a06bac3e..d7b828937e58eea5f095863129a0844f25a25336 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1026,6 +1026,15 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -79,7 +79,7 @@ index eef96e946b80064fe211039a65db4192ea7a52d3..352ade7acc9052e4d74ef840e085a86f if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { entity.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 62af796b2b883856a904647f504ff064a5fed463..49a8b0d4f4a18c91a48291c316c420bd78428ca5 100644 +index 6817015f0cf39df03029e36cd845d590618031dc..aa73875d8cb701d233ffa79c9bda4b7b474ba667 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -383,7 +383,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -120,7 +120,7 @@ index 62af796b2b883856a904647f504ff064a5fed463..49a8b0d4f4a18c91a48291c316c420bd if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -5343,4 +5358,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5329,4 +5344,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end - Expose entity id counter @@ -259,7 +259,7 @@ index 22b3d3d945cbddae25abfca7d900324c79d32293..7f896777fcff72230142fbe231471782 // Paper end - Add EntityMoveEvent world = this.level(); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index dbd321f3dc3cc80737830db63aed47a6935e8e89..cd456edd2caf087d1dbeb97d3373bd2bf9112fc2 100644 +index dbd321f3dc3cc80737830db63aed47a6935e8e89..bc2380a71aa65c40f326c1f6bdf15ee25346ffee 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -163,8 +163,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -282,7 +282,7 @@ index dbd321f3dc3cc80737830db63aed47a6935e8e89..cd456edd2caf087d1dbeb97d3373bd2b } public boolean isWithinRestriction() { -@@ -1813,4 +1813,56 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1813,4 +1813,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab public float[] getArmorDropChances() { return this.armorDropChances; } @@ -326,7 +326,9 @@ index dbd321f3dc3cc80737830db63aed47a6935e8e89..cd456edd2caf087d1dbeb97d3373bd2b + } + } + if (!player.getBukkitEntity().hasPermission("allow.ride." + net.minecraft.core.registries.BuiltInRegistries.ENTITY_TYPE.getKey(getType()).getPath())) { -+ player.sendMiniMessage(org.purpurmc.purpur.PurpurConfig.cannotRideMob); ++ if (player instanceof net.minecraft.server.level.ServerPlayer serverPlayer) { ++ serverPlayer.sendMiniMessage(org.purpurmc.purpur.PurpurConfig.cannotRideMob); ++ } + return InteractionResult.PASS; + } + player.setYRot(this.getYRot()); @@ -1792,7 +1794,7 @@ index fd9f6c17448a4d87f940eb8f544ecb9669068582..3a0b71cad2c68e972c5989bd37de8395 } diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index f9fdc600dc680c55219fcbf9bc8f151a733a093c..93c16d7522d76f35de2c87cab0e7db3d6f7ab6c7 100644 +index f9fdc600dc680c55219fcbf9bc8f151a733a093c..4144d82ca0a9c5b5384d4ab080013ad76014199b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -50,9 +50,32 @@ public class Squid extends AgeableWaterCreature { @@ -1856,9 +1858,9 @@ index f9fdc600dc680c55219fcbf9bc8f151a733a093c..93c16d7522d76f35de2c87cab0e7db3d + } + } + if (forward != 0.0F || strafe != 0.0F) { -+ squid.setMovementVector((float) dir.getX(), (float) dir.getY(), (float) dir.getZ()); ++ squid.movementVector = new Vec3((float) dir.getX(), (float) dir.getY(), (float) dir.getZ()); + } else { -+ squid.setMovementVector(0.0F, 0.0F, 0.0F); ++ squid.movementVector = Vec3.ZERO; + } + return; + } @@ -2445,7 +2447,7 @@ index b5ec7c8ad0e482930d1a54b590b26093f4e477ea..0ec18aecb7774db219a8ca5ed60ae999 protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -index 18bd483fe46de3d9dc129bffbccfba9d4cab9550..f373728d357faf68a576dc2f6363e36f5ac2a4b4 100644 +index 18bd483fe46de3d9dc129bffbccfba9d4cab9550..29b4c4ba7e80fe58a005064da4b0479e367d90b0 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java @@ -77,7 +77,51 @@ public class Llama extends AbstractChestedHorse implements VariantHolder 0) { + powerToggleDelay--; + } @@ -3216,7 +3218,7 @@ index 1906dfc22af208d6e801ad4a8f2f9e9702432691..6d5ad18bc85769737060b5dff520fc4a + } + prevSpacebarCharge = spacebarCharge; + } -+ super.customServerAiStep(); ++ super.customServerAiStep(world); + } + + @Override @@ -3365,7 +3367,7 @@ index 378694a38115c012978e1fea59d049d1ebd04110..4364ac531826524fc3c099b9900406b2 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 48dcd2bc12ce1d08cc5195bff5460dc0dd9902d3..9e90b2c3474bb6c4ea6caf3f060dcb668c4bd15b 100644 +index 48dcd2bc12ce1d08cc5195bff5460dc0dd9902d3..bd08a90aa9128d7d31dbbe7e075d32a8b8aad724 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -95,9 +95,27 @@ public class EnderMan extends Monster implements NeutralMob { @@ -3417,7 +3419,7 @@ index 48dcd2bc12ce1d08cc5195bff5460dc0dd9902d3..9e90b2c3474bb6c4ea6caf3f060dcb66 public boolean hurtServer(ServerLevel world, DamageSource source, float amount) { if (this.isInvulnerableTo(world, source)) { return false; -+ } else if (getRider() != null && this.isControllable()) { return super.hurt(source, amount); // Purpur - no teleporting on damage ++ } else if (getRider() != null && this.isControllable()) { return super.hurtServer(world, source, amount); // Purpur - no teleporting on damage } else { boolean flag = source.getDirectEntity() instanceof ThrownPotion; boolean flag1; @@ -4403,7 +4405,7 @@ index 711b7eb8e9fdedbc87965828e573fe8d5c357d53..2214e3e473214a8e8340c4ded0e2c797 if (flag && !this.isSilent()) { this.level().playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.STRIDER_EAT, this.getSoundSource(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F); diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java -index 183a33b7d666d652b455baa7e8339e9c4a870a58..06269780121424129be777e83e2ad4ca3e616b23 100644 +index 183a33b7d666d652b455baa7e8339e9c4a870a58..3452623771ba6856e5c4049a0c932440b93db412 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vex.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java @@ -59,6 +59,50 @@ public class Vex extends Monster implements TraceableEntity { @@ -4443,7 +4445,7 @@ index 183a33b7d666d652b455baa7e8339e9c4a870a58..06269780121424129be777e83e2ad4ca + } + setSpeed(speed); + Vec3 mot = getDeltaMovement(); -+ move(MoverType.SELF, mot.multiply(speed, 1.0, speed)); ++ move(net.minecraft.world.entity.MoverType.SELF, mot.multiply(speed, 1.0, speed)); + setDeltaMovement(mot.scale(0.9D)); + } + } @@ -5138,10 +5140,10 @@ index 6c60bb4f4d1133844a4232df518c062216847fdc..c9f5047bfa48c12a9090cb8da4bb9045 event = new EntityDamageEvent(damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 6176bc84e6896d2e60bb219e92e1d668bfbe8eac..f34d12ea5681a944ae2c08fb2cb69b8f662fcdf6 100644 +index ceb45f313869ac3a0f650a4ee43ecff782c1be5f..09e7a11a241b6e306d5043fe66f14fd4f2aae963 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -174,4 +174,9 @@ public class PurpurConfig { +@@ -175,4 +175,9 @@ public class PurpurConfig { } return builder.build(); } @@ -6390,10 +6392,10 @@ index 0000000000000000000000000000000000000000..89c476c740b4efb4f44c1dcd384b9086 +} diff --git a/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java new file mode 100644 -index 0000000000000000000000000000000000000000..c0b7e0eeffdf31b88662232b07944bf3e6fa2148 +index 0000000000000000000000000000000000000000..d7f5686fe897f3c2424b146c8e7d2862223d1eaf --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java -@@ -0,0 +1,114 @@ +@@ -0,0 +1,122 @@ +package org.purpurmc.purpur.entity; + +import net.minecraft.core.particles.ParticleTypes; @@ -6484,13 +6486,17 @@ index 0000000000000000000000000000000000000000..c0b7e0eeffdf31b88662232b07944bf3 + + @Override + protected void onHitEntity(EntityHitResult entityHitResult) { -+ Entity shooter = this.getOwner(); -+ if (shooter instanceof LivingEntity) { -+ Entity target = entityHitResult.getEntity(); -+ if (canGrief || (target instanceof LivingEntity && !(target instanceof ArmorStand))) { -+ boolean hurt = target.hurt(target.damageSources().mobProjectile(this, (LivingEntity) shooter), level().purpurConfig.phantomFlameDamage); -+ if (hurt && level().purpurConfig.phantomFlameFireTime > 0) { -+ target.igniteForSeconds(level().purpurConfig.phantomFlameFireTime); ++ Level world = this.level(); ++ ++ if (world instanceof ServerLevel worldserver) { ++ Entity shooter = this.getOwner(); ++ if (shooter instanceof LivingEntity) { ++ Entity target = entityHitResult.getEntity(); ++ if (canGrief || (target instanceof LivingEntity && !(target instanceof ArmorStand))) { ++ boolean hurt = target.hurtServer(worldserver, target.damageSources().mobProjectile(this, (LivingEntity) shooter), worldserver.purpurConfig.phantomFlameDamage); ++ if (hurt && worldserver.purpurConfig.phantomFlameFireTime > 0) { ++ target.igniteForSeconds(worldserver.purpurConfig.phantomFlameFireTime); ++ } + } + } + } @@ -6498,14 +6504,18 @@ index 0000000000000000000000000000000000000000..c0b7e0eeffdf31b88662232b07944bf3 + + @Override + protected void onHitBlock(BlockHitResult blockHitResult) { -+ if (this.hitCancelled) { -+ return; ++ Level world = this.level(); ++ ++ if (world instanceof ServerLevel worldserver) { ++ if (this.hitCancelled) { ++ return; ++ } ++ if (this.canGrief) { ++ BlockState state = worldserver.getBlockState(blockHitResult.getBlockPos()); ++ state.onProjectileHit(worldserver, state, blockHitResult, this); ++ } ++ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); + } -+ if (this.canGrief) { -+ BlockState state = this.level().getBlockState(blockHitResult.getBlockPos()); -+ state.onProjectileHit(this.level(), state, blockHitResult, this); -+ } -+ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); + } +} diff --git a/src/main/java/org/purpurmc/purpur/entity/ai/HasRider.java b/src/main/java/org/purpurmc/purpur/entity/ai/HasRider.java diff --git a/patches/server/0009-Barrels-and-enderchests-6-rows.patch b/patches/server/0009-Barrels-and-enderchests-6-rows.patch index 683502521..63a606b48 100644 --- a/patches/server/0009-Barrels-and-enderchests-6-rows.patch +++ b/patches/server/0009-Barrels-and-enderchests-6-rows.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Barrels and enderchests 6 rows diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index a4454289fb92cf7b97ee77db422c328f008521f1..7ec26117aa6d98140e994567fd0ded33d308e3d4 100644 +index 75e5e540f03d28b64fa5fef1f342a157598c3fa7..0dace6f1e1377c9eb5ae70524edf1e3aae2cfc91 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1110,6 +1110,27 @@ public abstract class PlayerList { @@ -253,10 +253,10 @@ index af1ae3dacb628da23f7d2988c6e76d3fb2d64103..4ee2d501f882279b48edb4b8bf082458 for (int i = 0; i < this.getSize(); i++) { if (i >= items.length) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index f34d12ea5681a944ae2c08fb2cb69b8f662fcdf6..db93b3aa3883707c0e16745a9afee532fed9379f 100644 +index 09e7a11a241b6e306d5043fe66f14fd4f2aae963..a83117ed0a0c98d7ae18e925338b58930946c96a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -179,4 +179,39 @@ public class PurpurConfig { +@@ -180,4 +180,39 @@ public class PurpurConfig { private static void messages() { cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); } diff --git a/patches/server/0011-AFK-API.patch b/patches/server/0011-AFK-API.patch index 504d6ecf2..9d94b9728 100644 --- a/patches/server/0011-AFK-API.patch +++ b/patches/server/0011-AFK-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] AFK API diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 7e796655dec9eb48d0c29c9ed06d30ebf67c25a5..00a768a9bef0f60ee43e6e1becc6ba9424ba6dda 100644 +index d7b828937e58eea5f095863129a0844f25a25336..f0a2c618fb2040282406af90ff0d2ac5a63b0c35 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2623,8 +2623,68 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2637,8 +2637,68 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public void resetLastActionTime() { this.lastActionTime = Util.getMillis(); @@ -177,7 +177,7 @@ index 6bf691fcc6486bde73bae30eff09142802c29eda..59c4d3753c7084e92402608b7fb3c4ad private EntitySelector() {} // Paper start - Affects Spawning API diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java -index 52982c1e6a4da36392569c791853279f5f9ac31a..9817bc392146b93707291fe69eaab20a8a43235c 100644 +index 52982c1e6a4da36392569c791853279f5f9ac31a..b3d4c61b1769b6fcc98b7af854f774d24bf39d98 100644 --- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java +++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java @@ -64,6 +64,10 @@ public class TargetingConditions { @@ -185,7 +185,7 @@ index 52982c1e6a4da36392569c791853279f5f9ac31a..9817bc392146b93707291fe69eaab20a } else if (this.selector != null && !this.selector.test(target, world)) { return false; + // Purpur start -+ } else if (!targetEntity.level().purpurConfig.idleTimeoutTargetPlayer && targetEntity instanceof net.minecraft.server.level.ServerPlayer player && player.isAfk()) { ++ } else if (!world.purpurConfig.idleTimeoutTargetPlayer && target instanceof net.minecraft.server.level.ServerPlayer player && player.isAfk()) { + return false; + // Purpur end } else { @@ -265,10 +265,10 @@ index e4b41edc7c08c00f4411812a20944507a5b674c7..dc698d64ff3b5ab3b65b91159ce26d7c // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index db93b3aa3883707c0e16745a9afee532fed9379f..490793e1344a6ca475e2d9ada406fa96522c92d1 100644 +index a83117ed0a0c98d7ae18e925338b58930946c96a..a6728ce7ac27512676cfa06fdfbfb8652f8ff6a5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -176,8 +176,18 @@ public class PurpurConfig { +@@ -177,8 +177,18 @@ public class PurpurConfig { } public static String cannotRideMob = "You cannot mount that mob"; diff --git a/patches/server/0013-Configurable-server-mod-name.patch b/patches/server/0013-Configurable-server-mod-name.patch index b2235b71f..7e1fa5ad0 100644 --- a/patches/server/0013-Configurable-server-mod-name.patch +++ b/patches/server/0013-Configurable-server-mod-name.patch @@ -18,10 +18,10 @@ index dc9e3f798bc8a9a6968a588a09122a08dc9b9774..99b1c6f239a85eb82019a1bae9e91391 public SystemReport fillSystemReport(SystemReport details) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 490793e1344a6ca475e2d9ada406fa96522c92d1..cea00dc7478ef73984747992b2a8efc28677e2cb 100644 +index a6728ce7ac27512676cfa06fdfbfb8652f8ff6a5..df2be3351bcaaf1ffb73261da6c840314f5c11a1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -190,6 +190,11 @@ public class PurpurConfig { +@@ -191,6 +191,11 @@ public class PurpurConfig { afkTabListSuffix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-suffix", afkTabListSuffix))); } diff --git a/patches/server/0014-Lagging-threshold.patch b/patches/server/0014-Lagging-threshold.patch index 8619eb557..630a01510 100644 --- a/patches/server/0014-Lagging-threshold.patch +++ b/patches/server/0014-Lagging-threshold.patch @@ -40,10 +40,10 @@ index b9aee2a00b35e8f53240d5854ba05785e9688b22..febd5dc39cbe96054d21d13b14947bdf // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index cea00dc7478ef73984747992b2a8efc28677e2cb..b4d43c293084b808d167dd02f2d6cf865ac17983 100644 +index df2be3351bcaaf1ffb73261da6c840314f5c11a1..a6c90de7726a264ca44c3e795e9b6a4e1c313bc3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -195,6 +195,11 @@ public class PurpurConfig { +@@ -196,6 +196,11 @@ public class PurpurConfig { serverModName = getString("settings.server-mod-name", serverModName); } diff --git a/patches/server/0015-PlayerSetSpawnerTypeWithEggEvent.patch b/patches/server/0015-PlayerSetSpawnerTypeWithEggEvent.patch index 826738033..c26622a2a 100644 --- a/patches/server/0015-PlayerSetSpawnerTypeWithEggEvent.patch +++ b/patches/server/0015-PlayerSetSpawnerTypeWithEggEvent.patch @@ -5,7 +5,7 @@ Subject: [PATCH] PlayerSetSpawnerTypeWithEggEvent diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index e56050bef4a5aaa0fca17192dab4cf5e6a55fbae..9eebe70e8ce80620b68635c9048e8e5c1083e27e 100644 +index e56050bef4a5aaa0fca17192dab4cf5e6a55fbae..d0efef43b71298491b2e03b9ce5505729c3c4afc 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java @@ -404,6 +404,16 @@ public class EntityType implements FeatureElement, EntityTypeT @@ -18,7 +18,7 @@ index e56050bef4a5aaa0fca17192dab4cf5e6a55fbae..9eebe70e8ce80620b68635c9048e8e5c + } + + public static EntityType getFromKey(ResourceLocation location) { -+ return BuiltInRegistries.ENTITY_TYPE.get(location); ++ return BuiltInRegistries.ENTITY_TYPE.getValue(location); + } + // Purpur end + diff --git a/patches/server/0017-Alternative-Keepalive-Handling.patch b/patches/server/0017-Alternative-Keepalive-Handling.patch index 0b17b3445..fa77ffc8a 100644 --- a/patches/server/0017-Alternative-Keepalive-Handling.patch +++ b/patches/server/0017-Alternative-Keepalive-Handling.patch @@ -56,10 +56,10 @@ index b6dd6bde947ac7502f25d3160399596130e8064f..7d276c191b391bca24948ddb36b8b7d0 if (this.keepAlivePending && !this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // Paper - check keepalive limit, don't fire if already disconnected this.disconnect(ServerCommonPacketListenerImpl.TIMEOUT_DISCONNECTION_MESSAGE, PlayerKickEvent.Cause.TIMEOUT); // Paper - kick event cause diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index b4d43c293084b808d167dd02f2d6cf865ac17983..6bbd0021032d1979fc0133f6f859dddcf22c5708 100644 +index a6c90de7726a264ca44c3e795e9b6a4e1c313bc3..3b4a8c9d5a60de94ad79a781414de8de44973e6f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -200,6 +200,11 @@ public class PurpurConfig { +@@ -201,6 +201,11 @@ public class PurpurConfig { laggingThreshold = getDouble("settings.lagging-threshold", laggingThreshold); } diff --git a/patches/server/0019-Silk-touch-spawners.patch b/patches/server/0019-Silk-touch-spawners.patch index fcf6ab4c8..1bcddb1d2 100644 --- a/patches/server/0019-Silk-touch-spawners.patch +++ b/patches/server/0019-Silk-touch-spawners.patch @@ -100,7 +100,7 @@ index 4f190a40b8474aa06a92c8afcc06d0044120ff7b..80ee7a6f010cc838625674007a3ea908 int i = 15 + worldserver.random.nextInt(15) + worldserver.random.nextInt(15); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 42bff6f2d864a31dcb1c0087a4e0c9027ece001e..65c41d9c757819f3da4c0549f4e5fe002992b4d4 100644 +index 42bff6f2d864a31dcb1c0087a4e0c9027ece001e..9d6a90b11ef09900de9405cd3233e1ee5dd6e31e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -109,6 +109,38 @@ public class PurpurWorldConfig { @@ -134,7 +134,7 @@ index 42bff6f2d864a31dcb1c0087a4e0c9027ece001e..65c41d9c757819f3da4c0549f4e5fe00 + "minecraft:diamond_pickaxe", + "minecraft:netherite_pickaxe" + )).forEach(key -> { -+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(key.toString())); ++ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(key.toString())); + if (item != Items.AIR) silkTouchTools.add(item); + }); + } diff --git a/patches/server/0021-Logger-settings-suppressing-pointless-logs.patch b/patches/server/0021-Logger-settings-suppressing-pointless-logs.patch index 54439f347..6045c044d 100644 --- a/patches/server/0021-Logger-settings-suppressing-pointless-logs.patch +++ b/patches/server/0021-Logger-settings-suppressing-pointless-logs.patch @@ -53,10 +53,10 @@ index 51ae8eddadc87b143b93521a3cef374f1e3a24dc..a7b45602d9d86aec235eef06d252fb62 if (MinecraftServer.getServer() != null && MinecraftServer.getServer().isDebugging()) { new Exception().printStackTrace(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 6bbd0021032d1979fc0133f6f859dddcf22c5708..87821e766afe8fa18f9f61a877669068a5f8220a 100644 +index 3b4a8c9d5a60de94ad79a781414de8de44973e6f..1103935e49081c560b024b87f872e9b8c788bad2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -239,4 +239,15 @@ public class PurpurConfig { +@@ -240,4 +240,15 @@ public class PurpurConfig { org.bukkit.event.inventory.InventoryType.ENDER_CHEST.setDefaultSize(enderChestSixRows ? 54 : 27); enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows); } diff --git a/patches/server/0023-Giants-AI-settings.patch b/patches/server/0023-Giants-AI-settings.patch index 8d9a34364..d05456586 100644 --- a/patches/server/0023-Giants-AI-settings.patch +++ b/patches/server/0023-Giants-AI-settings.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Giants AI settings diff --git a/src/main/java/net/minecraft/world/entity/monster/Giant.java b/src/main/java/net/minecraft/world/entity/monster/Giant.java -index 48035556b0743f7641d77ec3a42c860f1e1ee6c3..39367523621c330eda59905d1f2c129288a1026c 100644 +index 48035556b0743f7641d77ec3a42c860f1e1ee6c3..642342592788226999efcb453542f55af71cf193 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Giant.java +++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java @@ -30,8 +30,23 @@ public class Giant extends Monster { @@ -39,7 +39,7 @@ index 48035556b0743f7641d77ec3a42c860f1e1ee6c3..39367523621c330eda59905d1f2c1292 } + @Override -+ public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, @javax.annotation.Nullable net.minecraft.world.entity.SpawnGroupData entityData) { ++ public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.EntitySpawnReason spawnReason, @org.jetbrains.annotations.Nullable net.minecraft.world.entity.SpawnGroupData entityData) { + net.minecraft.world.entity.SpawnGroupData groupData = super.finalizeSpawn(world, difficulty, spawnReason, entityData); + if (groupData == null) { + populateDefaultEquipmentSlots(this.random, difficulty); @@ -71,7 +71,7 @@ index 48035556b0743f7641d77ec3a42c860f1e1ee6c3..39367523621c330eda59905d1f2c1292 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index cdef3af8a48d640a8180b5a5658b0ef46087095f..22248cd0752812739df8e7ab911ef04b3d2ed458 100644 +index d23aba01ce2b109fd011130e2847107b26266b7f..0fe6b4e57a57388df51893f22c8e8cb1be633623 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -622,6 +622,10 @@ public class PurpurWorldConfig { diff --git a/patches/server/0025-Charged-creeper-naturally-spawn.patch b/patches/server/0025-Charged-creeper-naturally-spawn.patch index e219f31be..60fa9c7a0 100644 --- a/patches/server/0025-Charged-creeper-naturally-spawn.patch +++ b/patches/server/0025-Charged-creeper-naturally-spawn.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Charged creeper naturally spawn diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index d985f86d320770e73be32740f8f2e874ab08666f..44a3fbaedd0fdb480cde4e2f8a9106965bd5c59d 100644 +index 3ea4763a34447761e73d8643dce8c386fa7501c3..e95afb70fa13f7f2617cbd42b7f5d17b9bc1ec4f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -257,6 +257,14 @@ public class Creeper extends Monster { this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.creeperScale); } -+ public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, @Nullable net.minecraft.world.entity.SpawnGroupData entityData) { ++ public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.EntitySpawnReason spawnReason, @Nullable net.minecraft.world.entity.SpawnGroupData entityData) { + double chance = world.getLevel().purpurConfig.creeperChargedChance; + if (chance > 0D && random.nextDouble() <= chance) { + setPowered(true); @@ -24,7 +24,7 @@ index d985f86d320770e73be32740f8f2e874ab08666f..44a3fbaedd0fdb480cde4e2f8a910696 protected SoundEvent getHurtSound(DamageSource source) { return SoundEvents.CREEPER_HURT; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3b6089eaf8a9af932c7bcc9a37fc7c077eb79870..6722c1bd54c28844c853d477180692a85732e631 100644 +index 80eb2df74d226f7419354e73b6350f5444c8ae0b..d56ac793066bca186614e93204bf41fa6aa15719 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -395,6 +395,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0028-Tulips-change-fox-type.patch b/patches/server/0028-Tulips-change-fox-type.patch index 655f1556a..470b589da 100644 --- a/patches/server/0028-Tulips-change-fox-type.patch +++ b/patches/server/0028-Tulips-change-fox-type.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Tulips change fox type diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index bb98caa1e5ca711293e50ac82a5cad2fa5972db9..7fe665d9c623fd98a1fd4259a759297de46fe96e 100644 +index bb98caa1e5ca711293e50ac82a5cad2fa5972db9..355965d88d5ef008111cc72f39e4f8d35741fdfd 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java @@ -384,6 +384,11 @@ public class Fox extends Animal implements VariantHolder { @@ -34,17 +34,17 @@ index bb98caa1e5ca711293e50ac82a5cad2fa5972db9..7fe665d9c623fd98a1fd4259a759297d + // Purpur start + @Override -+ public net.minecraft.world.InteractionResult mobInteract(Player player, InteractionHand hand) { ++ public net.minecraft.world.InteractionResult mobInteract(Player player, net.minecraft.world.InteractionHand hand) { + if (level().purpurConfig.foxTypeChangesWithTulips) { + ItemStack itemstack = player.getItemInHand(hand); -+ if (getVariant() == Type.RED && itemstack.getItem() == Items.WHITE_TULIP) { -+ setVariant(Type.SNOW); ++ if (getVariant() == Variant.RED && itemstack.getItem() == Items.WHITE_TULIP) { ++ setVariant(Variant.SNOW); + if (!player.getAbilities().instabuild) { + itemstack.shrink(1); + } + return net.minecraft.world.InteractionResult.SUCCESS; -+ } else if (getVariant() == Type.SNOW && itemstack.getItem() == Items.ORANGE_TULIP) { -+ setVariant(Type.RED); ++ } else if (getVariant() == Variant.SNOW && itemstack.getItem() == Items.ORANGE_TULIP) { ++ setVariant(Variant.RED); + if (!player.getAbilities().instabuild) { + itemstack.shrink(1); + } @@ -59,7 +59,7 @@ index bb98caa1e5ca711293e50ac82a5cad2fa5972db9..7fe665d9c623fd98a1fd4259a759297d // Paper start - Cancellable death event protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(ServerLevel world, DamageSource damageSource) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 141c96566773d4cce0423e186d346043c8f65fad..d6e3ab58756bd8e0c3d2a7aa651a22545db6749e 100644 +index ec1b35ed76b365c76366e147c2d8b68690c1c5ff..78316af29f238ec61c73e0a82b677ae91feaa623 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -573,6 +573,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0029-Breedable-Polar-Bears.patch b/patches/server/0029-Breedable-Polar-Bears.patch index 072dd62ca..e29e4df8c 100644 --- a/patches/server/0029-Breedable-Polar-Bears.patch +++ b/patches/server/0029-Breedable-Polar-Bears.patch @@ -59,7 +59,7 @@ index f2e205b05213f137ce84b9c5185118f437eec6ff..511d0559743655ed7b43a948fccc2621 this.goalSelector.addGoal(5, new RandomStrollGoal(this, 1.0)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d6e3ab58756bd8e0c3d2a7aa651a22545db6749e..fe9b0ff2a73dc0f49b46738f07a7c58b622399d6 100644 +index 78316af29f238ec61c73e0a82b677ae91feaa623..ab11497337ff25ddd6c87dd7a842adea039aa75e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1060,6 +1060,8 @@ public class PurpurWorldConfig { @@ -76,7 +76,7 @@ index d6e3ab58756bd8e0c3d2a7aa651a22545db6749e..fe9b0ff2a73dc0f49b46738f07a7c58b polarBearMaxHealth = getDouble("mobs.polar_bear.attributes.max_health", polarBearMaxHealth); polarBearScale = Mth.clamp(getDouble("mobs.polar_bear.attributes.scale", polarBearScale), 0.0625D, 16.0D); + polarBearBreedableItemString = getString("mobs.polar_bear.breedable-item", polarBearBreedableItemString); -+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(polarBearBreedableItemString)); ++ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(polarBearBreedableItemString)); + if (item != Items.AIR) polarBearBreedableItem = item; } diff --git a/patches/server/0031-Add-option-to-set-armorstand-step-height.patch b/patches/server/0031-Add-option-to-set-armorstand-step-height.patch index c64532ac2..00899e13d 100644 --- a/patches/server/0031-Add-option-to-set-armorstand-step-height.patch +++ b/patches/server/0031-Add-option-to-set-armorstand-step-height.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add option to set armorstand step height diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 01ee2cecacd9309d2eb5dd47b76b825db8d52d80..809ab6aaf50e573099dfb4ef839e3c2825cb7793 100644 +index 90434afec7a896473624901c6b00bf7c81572930..3fe570317c0790b48db42f40e55f9cdb131fcc48 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -343,6 +343,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -16,7 +16,7 @@ index 01ee2cecacd9309d2eb5dd47b76b825db8d52d80..809ab6aaf50e573099dfb4ef839e3c28 public boolean noPhysics; private boolean wasOnFire; public final RandomSource random; -@@ -5157,7 +5158,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5143,7 +5144,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public float maxUpStep() { @@ -38,7 +38,7 @@ index 70b8023c3badc745f342d5b0ab54699e3923826a..edb0cd90e28016c44b0aaf5c9ed5d7bd if (!this.canTick) { if (this.noTickPoseDirty) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6d3b41da6210699869839826e037a038a637c4c3..e5c4ca83392f398e24be193a0ed77daa85db9913 100644 +index 924a7269883e57f4ae4fc97b6f2ba24a922515c0..e3eb27c4be24ed01b3d86be7b8160f47893ca44c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -91,6 +91,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0033-Cows-eat-mushrooms.patch b/patches/server/0033-Cows-eat-mushrooms.patch index 150454a0b..ecc92d909 100644 --- a/patches/server/0033-Cows-eat-mushrooms.patch +++ b/patches/server/0033-Cows-eat-mushrooms.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Cows eat mushrooms diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index 8229a99d4454df64def52bbf686183284d62c900..7f7d68d09b070c24ba1567967c5d228c73fd14b9 100644 +index 8229a99d4454df64def52bbf686183284d62c900..e6fa66a8c88d4f20a7383e8fd5b3df44718478fa 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -74,7 +74,7 @@ public class Cow extends Animal { @@ -58,14 +58,14 @@ index 8229a99d4454df64def52bbf686183284d62c900..7f7d68d09b070c24ba1567967c5d228c + } + return InteractionResult.CONSUME; // require 5 mushrooms to transform (prevents mushroom duping) + } -+ MushroomCow mooshroom = EntityType.MOOSHROOM.create(level()); ++ MushroomCow mooshroom = EntityType.MOOSHROOM.create(level(), EntitySpawnReason.CONVERSION); + if (mooshroom == null) { + return InteractionResult.PASS; + } + if (stack.getItem() == net.minecraft.world.level.block.Blocks.BROWN_MUSHROOM.asItem()) { -+ mooshroom.setVariant(MushroomCow.MushroomType.BROWN); ++ mooshroom.setVariant(MushroomCow.Variant.BROWN); + } else { -+ mooshroom.setVariant(MushroomCow.MushroomType.RED); ++ mooshroom.setVariant(MushroomCow.Variant.RED); + } + mooshroom.moveTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); + mooshroom.setHealth(this.getHealth()); @@ -96,7 +96,7 @@ index 8229a99d4454df64def52bbf686183284d62c900..7f7d68d09b070c24ba1567967c5d228c + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7da688e575a1c4ca35c0d23401bf52f3bbbed6ae..4d85d928c05d488b5fc6efa96e65a5e31455d261 100644 +index 026593b70b3311c8427d8157225dbc0988b82d4c..15e730fd73a9ceb25a4635a59c0b7b35c99a2da7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -390,6 +390,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0039-Minecart-settings-and-WASD-controls.patch b/patches/server/0039-Minecart-settings-and-WASD-controls.patch index 179cf11c9..ae3388dab 100644 --- a/patches/server/0039-Minecart-settings-and-WASD-controls.patch +++ b/patches/server/0039-Minecart-settings-and-WASD-controls.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Minecart settings and WASD controls diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 00a768a9bef0f60ee43e6e1becc6ba9424ba6dda..badcca42c771bf39b128c2e123be3c0aeb6b8e76 100644 +index f0a2c618fb2040282406af90ff0d2ac5a63b0c35..9b7cbd9ece37d7a5f5532861c1b226ca75eb2345 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1435,6 +1435,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -150,7 +150,7 @@ index 99fd67a78539133adf78d65e2c520ff3dd260301..6b987ee220d94b482d2aeb4ff6bf2718 protected final String descriptionId; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c5b3a04d81834d6bdf7c4acd06ce4929d7a25769..2591b4f0d0e4e4d9e77efb821c9ae775182713b6 100644 +index b70a0bdb06a0fa930b525cac44b5bd62e318367b..a97dadd4c0b04833282f9fc484ef760da712974d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -96,6 +96,68 @@ public class PurpurWorldConfig { @@ -208,7 +208,7 @@ index c5b3a04d81834d6bdf7c4acd06ce4929d7a25769..2591b4f0d0e4e4d9e77efb821c9ae775 + ConfigurationSection section = getConfigurationSection("gameplay-mechanics.minecart.controllable.block-speed"); + if (section != null) { + for (String key : section.getKeys(false)) { -+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(key)); ++ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(key)); + if (block != Blocks.AIR) { + minecartControllableBlockSpeeds.put(block, section.getDouble(key, minecartControllableBaseSpeed)); + } diff --git a/patches/server/0043-Configurable-TPS-Catchup.patch b/patches/server/0043-Configurable-TPS-Catchup.patch index 91ee089b5..cdc2ee276 100644 --- a/patches/server/0043-Configurable-TPS-Catchup.patch +++ b/patches/server/0043-Configurable-TPS-Catchup.patch @@ -20,10 +20,10 @@ index a0bcb0fccadbf946e4c4bc0bbb8a1460532c636b..fd37f9256c1b2d396e855e1167a1f2ca this.waitUntilNextTick(); this.finishMeasuringTaskExecutionTime(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 87821e766afe8fa18f9f61a877669068a5f8220a..ed49a5131ca86b60a4d7f5c8ee61a7868dddc179 100644 +index 1103935e49081c560b024b87f872e9b8c788bad2..c8e7e6333d20ca976ed74d839ccfaebdc02e5167 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -250,4 +250,9 @@ public class PurpurConfig { +@@ -251,4 +251,9 @@ public class PurpurConfig { loggerSuppressUnrecognizedRecipeErrors = getBoolean("settings.logger.suppress-unrecognized-recipe-errors", loggerSuppressUnrecognizedRecipeErrors); loggerSuppressSetBlockFarChunk = getBoolean("settings.logger.suppress-setblock-in-far-chunk-errors", loggerSuppressSetBlockFarChunk); } diff --git a/patches/server/0045-Add-enderman-and-creeper-griefing-controls.patch b/patches/server/0045-Add-enderman-and-creeper-griefing-controls.patch index 390b3c61d..895354c7b 100644 --- a/patches/server/0045-Add-enderman-and-creeper-griefing-controls.patch +++ b/patches/server/0045-Add-enderman-and-creeper-griefing-controls.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add enderman and creeper griefing controls diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index 44a3fbaedd0fdb480cde4e2f8a9106965bd5c59d..397509198ab1e7ee275d86fac57ba52445276284 100644 +index e95afb70fa13f7f2617cbd42b7f5d17b9bc1ec4f..54225cfd13e7b62e80f24b4885c720d6e6ce8700 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -362,7 +362,7 @@ public class Creeper extends Monster { @@ -13,12 +13,12 @@ index 44a3fbaedd0fdb480cde4e2f8a9106965bd5c59d..397509198ab1e7ee275d86fac57ba524 // CraftBukkit end this.dead = true; - worldserver.explode(this, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), Level.ExplosionInteraction.MOB); // CraftBukkit // Paper - fix DamageSource API (revert to vanilla, no, just no, don't change this) -+ worldserver.explode(this, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), this.level().getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_MOBGRIEFING) && level().purpurConfig.creeperAllowGriefing ? Level.ExplosionInteraction.MOB : Level.ExplosionInteraction.NONE); // CraftBukkit // Paper - fix DamageSource API (revert to vanilla, no, just no, don't change this) // Purpur ++ worldserver.explode(this, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), worldserver.getGameRules().getBoolean(net.minecraft.world.level.GameRules.RULE_MOBGRIEFING) && level().purpurConfig.creeperAllowGriefing ? Level.ExplosionInteraction.MOB : Level.ExplosionInteraction.NONE); // CraftBukkit // Paper - fix DamageSource API (revert to vanilla, no, just no, don't change this) // Purpur this.spawnLingeringCloud(); this.triggerOnDeathMobEffects(worldserver, Entity.RemovalReason.KILLED); this.discard(EntityRemoveEvent.Cause.EXPLODE); // CraftBukkit - add Bukkit remove cause 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 5caee77e2516afa4edc463e5a8a6b6e610cc04c5..437368100f6205b4c42234713044be47fda7082d 100644 +index 4265dc40f7337e565d236eb3c04847a87494fc86..a356e7ac34aca1d14cb922565206304d14e90c8b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -514,6 +514,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -38,7 +38,7 @@ index 5caee77e2516afa4edc463e5a8a6b6e610cc04c5..437368100f6205b4c42234713044be47 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 68e417cbe0c633528b1a064d64a061c0576ef3f8..e9e999d06fec2918fc2ee0fed05f8fb88b9675c1 100644 +index 79e0d1b547668c006ff4d23722be99f69b4636fe..492c2a897368cc1477bc5b8fc776e5a6272e8a90 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -485,6 +485,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0058-Item-entity-immunities.patch b/patches/server/0058-Item-entity-immunities.patch index baf59f3b5..e6795d234 100644 --- a/patches/server/0058-Item-entity-immunities.patch +++ b/patches/server/0058-Item-entity-immunities.patch @@ -18,7 +18,7 @@ index 5bbc7ceaafc163f12344e5d5d355ad2ff30ddca2..af54b621f04de40b1539494f30bb95f0 public ServerEntity(ServerLevel worldserver, Entity entity, int i, boolean flag, Consumer> consumer, Set trackedPlayers) { this.trackedPlayers = trackedPlayers; diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -index 5d8885bca55503bf7e1a2a4e1bb9b3bd86d55391..9e69c225a331bfce3455fc0c013a19e3c607e0c4 100644 +index 5d8885bca55503bf7e1a2a4e1bb9b3bd86d55391..89d89a1b07231f3f009a8fa66374af3fcc3e2549 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java @@ -64,6 +64,12 @@ public class ItemEntity extends Entity implements TraceableEntity { @@ -42,9 +42,9 @@ index 5d8885bca55503bf7e1a2a4e1bb9b3bd86d55391..9e69c225a331bfce3455fc0c013a19e3 + // Purpur start + if ( + (immuneToCactus && source.is(net.minecraft.world.damagesource.DamageTypes.CACTUS)) || -+ (immuneToFire && (source.is(DamageTypeTags.IS_FIRE) || source.is(net.minecraft.world.damagesource.DamageTypes.ON_FIRE) || source.is(net.minecraft.world.damagesource.DamageTypes.IN_FIRE))) || ++ (immuneToFire && (source.is(net.minecraft.tags.DamageTypeTags.IS_FIRE) || source.is(net.minecraft.world.damagesource.DamageTypes.ON_FIRE) || source.is(net.minecraft.world.damagesource.DamageTypes.IN_FIRE))) || + (immuneToLightning && source.is(net.minecraft.world.damagesource.DamageTypes.LIGHTNING_BOLT)) || -+ (immuneToExplosion && source.is(DamageTypeTags.IS_EXPLOSION)) ++ (immuneToExplosion && source.is(net.minecraft.tags.DamageTypeTags.IS_EXPLOSION)) + ) { + return false; + } else if (this.isInvulnerableToBase(source)) { @@ -117,7 +117,7 @@ index 30d62ee4d5cd2ddacb8783b5bbbf475d592b3e02..01e4395f1669d21c30465aa1366bd2f1 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 33aa446dc0cb834e027c45e8392cf007f62f629d..75e969ed3887fe2c57ca080e4f4b56dc53e295cb 100644 +index 95a7e0870e45004523278ae78c25b9db80882630..2a566e9eec02cf19d409dadff3ffaabc7715e05a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -118,6 +118,49 @@ public class PurpurWorldConfig { @@ -135,7 +135,7 @@ index 33aa446dc0cb834e027c45e8392cf007f62f629d..75e969ed3887fe2c57ca080e4f4b56dc + BuiltInRegistries.ITEM.stream().filter(item -> item != Items.AIR).forEach((item) -> itemImmuneToCactus.add(item)); + return; + } -+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(key.toString())); ++ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(key.toString())); + if (item != Items.AIR) itemImmuneToCactus.add(item); + }); + itemImmuneToExplosion.clear(); @@ -144,7 +144,7 @@ index 33aa446dc0cb834e027c45e8392cf007f62f629d..75e969ed3887fe2c57ca080e4f4b56dc + BuiltInRegistries.ITEM.stream().filter(item -> item != Items.AIR).forEach((item) -> itemImmuneToExplosion.add(item)); + return; + } -+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(key.toString())); ++ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(key.toString())); + if (item != Items.AIR) itemImmuneToExplosion.add(item); + }); + itemImmuneToFire.clear(); @@ -153,7 +153,7 @@ index 33aa446dc0cb834e027c45e8392cf007f62f629d..75e969ed3887fe2c57ca080e4f4b56dc + BuiltInRegistries.ITEM.stream().filter(item -> item != Items.AIR).forEach((item) -> itemImmuneToFire.add(item)); + return; + } -+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(key.toString())); ++ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(key.toString())); + if (item != Items.AIR) itemImmuneToFire.add(item); + }); + itemImmuneToLightning.clear(); @@ -162,7 +162,7 @@ index 33aa446dc0cb834e027c45e8392cf007f62f629d..75e969ed3887fe2c57ca080e4f4b56dc + BuiltInRegistries.ITEM.stream().filter(item -> item != Items.AIR).forEach((item) -> itemImmuneToLightning.add(item)); + return; + } -+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(key.toString())); ++ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(key.toString())); + if (item != Items.AIR) itemImmuneToLightning.add(item); + }); + } diff --git a/patches/server/0059-Add-ping-command.patch b/patches/server/0059-Add-ping-command.patch index 9380de7cf..b1dfce0e5 100644 --- a/patches/server/0059-Add-ping-command.patch +++ b/patches/server/0059-Add-ping-command.patch @@ -17,10 +17,10 @@ index b7783480cc6a51a1f18789b7f3fc35faf5573f8d..abf33de1c20b031a684daedbc880a6f4 if (environment.includeIntegrated) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index ed49a5131ca86b60a4d7f5c8ee61a7868dddc179..d0873724bf081e577fd42455f427a765e1db0f59 100644 +index c8e7e6333d20ca976ed74d839ccfaebdc02e5167..0cad1ea803e4882601fcd05cfa575d03ffd77b04 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -181,6 +181,7 @@ public class PurpurConfig { +@@ -182,6 +182,7 @@ public class PurpurConfig { public static boolean afkBroadcastUseDisplayName = false; public static String afkTabListPrefix = "[AFK] "; public static String afkTabListSuffix = ""; @@ -28,7 +28,7 @@ index ed49a5131ca86b60a4d7f5c8ee61a7868dddc179..d0873724bf081e577fd42455f427a765 private static void messages() { cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway); -@@ -188,6 +189,7 @@ public class PurpurConfig { +@@ -189,6 +190,7 @@ public class PurpurConfig { afkBroadcastUseDisplayName = getBoolean("settings.messages.afk-broadcast-use-display-name", afkBroadcastUseDisplayName); afkTabListPrefix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-prefix", afkTabListPrefix))); afkTabListSuffix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-suffix", afkTabListSuffix))); diff --git a/patches/server/0060-Add-demo-command.patch b/patches/server/0060-Add-demo-command.patch index 237def8c1..32559f85d 100644 --- a/patches/server/0060-Add-demo-command.patch +++ b/patches/server/0060-Add-demo-command.patch @@ -17,10 +17,10 @@ index abf33de1c20b031a684daedbc880a6f4eff869f4..a52d20dcc9b3dfaecc3325bce3140dbd } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index d0873724bf081e577fd42455f427a765e1db0f59..e65552be2b8348e2751ea088809c090f6b029e43 100644 +index 0cad1ea803e4882601fcd05cfa575d03ffd77b04..438a60ae155f05c667ae887a2ae44b05df7977e2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -181,6 +181,7 @@ public class PurpurConfig { +@@ -182,6 +182,7 @@ public class PurpurConfig { public static boolean afkBroadcastUseDisplayName = false; public static String afkTabListPrefix = "[AFK] "; public static String afkTabListSuffix = ""; @@ -28,7 +28,7 @@ index d0873724bf081e577fd42455f427a765e1db0f59..e65552be2b8348e2751ea088809c090f public static String pingCommandOutput = "%s's ping is %sms"; private static void messages() { cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); -@@ -189,6 +190,7 @@ public class PurpurConfig { +@@ -190,6 +191,7 @@ public class PurpurConfig { afkBroadcastUseDisplayName = getBoolean("settings.messages.afk-broadcast-use-display-name", afkBroadcastUseDisplayName); afkTabListPrefix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-prefix", afkTabListPrefix))); afkTabListSuffix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-suffix", afkTabListSuffix))); diff --git a/patches/server/0061-Add-credits-command.patch b/patches/server/0061-Add-credits-command.patch index 315b34a26..65d9da915 100644 --- a/patches/server/0061-Add-credits-command.patch +++ b/patches/server/0061-Add-credits-command.patch @@ -17,10 +17,10 @@ index a52d20dcc9b3dfaecc3325bce3140dbd7bee8c4c..24c2568db30f970aed1a4897cfbc7d07 org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index e65552be2b8348e2751ea088809c090f6b029e43..a3a699881e6b96d0fb507ef69e4dbc181fe5fbbc 100644 +index 438a60ae155f05c667ae887a2ae44b05df7977e2..6228d23bd84e59a9e1f01414cc9f00c33cc64cd0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -181,6 +181,7 @@ public class PurpurConfig { +@@ -182,6 +182,7 @@ public class PurpurConfig { public static boolean afkBroadcastUseDisplayName = false; public static String afkTabListPrefix = "[AFK] "; public static String afkTabListSuffix = ""; @@ -28,7 +28,7 @@ index e65552be2b8348e2751ea088809c090f6b029e43..a3a699881e6b96d0fb507ef69e4dbc18 public static String demoCommandOutput = "%s has been shown the demo screen"; public static String pingCommandOutput = "%s's ping is %sms"; private static void messages() { -@@ -190,6 +191,7 @@ public class PurpurConfig { +@@ -191,6 +192,7 @@ public class PurpurConfig { afkBroadcastUseDisplayName = getBoolean("settings.messages.afk-broadcast-use-display-name", afkBroadcastUseDisplayName); afkTabListPrefix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-prefix", afkTabListPrefix))); afkTabListSuffix = MiniMessage.miniMessage().serialize(MiniMessage.miniMessage().deserialize(getString("settings.messages.afk-tab-list-suffix", afkTabListSuffix))); diff --git a/patches/server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index 0eeb572c0..ce29528d9 100644 --- a/patches/server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/patches/server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -72,7 +72,7 @@ index 7cb3d69a69e0e3ef4b7f9f9c8b1eb67edb5d116d..4c9709e680b585316978b6a410600a8a @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 e44d6d02ceaf1f133705efcd58b94e36014389ec..5d62be4ae4561262820d011f5e7318411d749bbb 100644 +index e44d6d02ceaf1f133705efcd58b94e36014389ec..bd1c23d849269df504c94da9d0ca0a6846b22c41 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 { @@ -89,15 +89,15 @@ index e44d6d02ceaf1f133705efcd58b94e36014389ec..5d62be4ae4561262820d011f5e731841 } + + @Override -+ protected void dropFromLootTable(DamageSource damageSource, boolean causedByPlayer) { ++ protected void dropFromLootTable(ServerLevel world, DamageSource damageSource, boolean causedByPlayer) { + boolean dropped = false; + 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; ++ dropped = spawnAtLocation(world, new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.PHANTOM_MEMBRANE)) != null; + } + } + if (!dropped) { -+ super.dropFromLootTable(damageSource, causedByPlayer); ++ super.dropFromLootTable(world, damageSource, causedByPlayer); + } + } + @@ -256,7 +256,7 @@ index e44d6d02ceaf1f133705efcd58b94e36014389ec..5d62be4ae4561262820d011f5e731841 private float speed = 0.1F; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6c5729b86a0540aa1ced33640170b4145efa08ba..65c8b2e76677b92fee94e1149a9ce3803b3f1737 100644 +index 247f476b060221daaec64b975ebce74b458c5ec2..cfdb01c51909ac44a952fcd720af4b88157835b8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1148,6 +1148,9 @@ public class PurpurWorldConfig { diff --git a/patches/server/0067-Add-allow-water-in-end-world-option.patch b/patches/server/0067-Add-allow-water-in-end-world-option.patch index c08b52f48..19650f61e 100644 --- a/patches/server/0067-Add-allow-water-in-end-world-option.patch +++ b/patches/server/0067-Add-allow-water-in-end-world-option.patch @@ -68,10 +68,10 @@ index a94762e65853ccad38cf90b0049ca256106c0c9f..38633e168a9b36e37feea00964d53e65 } else { world.setBlockAndUpdate(pos, IceBlock.meltsInto()); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index a3a699881e6b96d0fb507ef69e4dbc181fe5fbbc..580eb4f8cc88cda9df78868b373ba22eb319f75f 100644 +index 6228d23bd84e59a9e1f01414cc9f00c33cc64cd0..9f98b87ccc60db9a531180de1ed649de118db56f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -246,6 +246,11 @@ public class PurpurConfig { +@@ -247,6 +247,11 @@ public class PurpurConfig { enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows); } diff --git a/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index 4d2421d44..663a55e78 100644 --- a/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to teleport to spawn if outside world border diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index badcca42c771bf39b128c2e123be3c0aeb6b8e76..5f86f0b46e91ac41820931a9d64a7240d3ddd8d4 100644 +index 9b7cbd9ece37d7a5f5532861c1b226ca75eb2345..76a4ccf07791a16abdc4396e8a91a93957e0b293 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -3392,4 +3392,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -3406,4 +3406,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple return (CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end @@ -28,7 +28,7 @@ index badcca42c771bf39b128c2e123be3c0aeb6b8e76..5f86f0b46e91ac41820931a9d64a7240 + + ServerLevel toLevel = ((CraftWorld) to.getWorld()).getHandle(); + if (this.level() == toLevel) { -+ this.connection.internalTeleport(to.getX(), to.getY(), to.getZ(), to.getYaw(), to.getPitch(), java.util.EnumSet.noneOf(net.minecraft.world.entity.RelativeMovement.class)); ++ this.connection.teleport(to); + } else { + this.server.getPlayerList().respawn(this, true, RemovalReason.KILLED, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason.DEATH, to); + } @@ -48,7 +48,7 @@ index a58c8ed64eab56c4a4a0688e0731a232fb5f7269..c0ac2801321ca1813804214cc0ceecc1 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8832a5491303d4189155ec56f81e37f99efaa28e..20242b58cc3af8d58c51919d637ec258df308a60 100644 +index 1bf4fa7b9652347a48010a0713190aec9a5fc166..0111b9e3484df5958ed5dee55a9b510ef4a1f35e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -235,6 +235,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0080-Short-enderman-height.patch b/patches/server/0080-Short-enderman-height.patch index e589565df..86cdb723a 100644 --- a/patches/server/0080-Short-enderman-height.patch +++ b/patches/server/0080-Short-enderman-height.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Short enderman height diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 9eebe70e8ce80620b68635c9048e8e5c1083e27e..663dde75a9fc4fd7323ae9abe73cdb83aa74f2b3 100644 +index d0efef43b71298491b2e03b9ce5505729c3c4afc..5752388a5013a3054c3f453db844a6b4ca285bda 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java @@ -388,7 +388,8 @@ public class EntityType implements FeatureElement, EntityTypeT @@ -19,22 +19,22 @@ index 9eebe70e8ce80620b68635c9048e8e5c1083e27e..663dde75a9fc4fd7323ae9abe73cdb83 private final FeatureFlagSet requiredFeatures; 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 437368100f6205b4c42234713044be47fda7082d..1a33a41f79f9d661cb958a6ecee2ab7e8a819877 100644 +index a356e7ac34aca1d14cb922565206304d14e90c8b..8933b1f16617f0373cc99f93254533cc7d1e923f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -409,6 +409,7 @@ public class EnderMan extends Monster implements NeutralMob { if (this.isInvulnerableTo(world, source)) { return false; - } else if (getRider() != null && this.isControllable()) { return super.hurt(source, amount); // Purpur - no teleporting on damage + } else if (getRider() != null && this.isControllable()) { return super.hurtServer(world, source, amount); // Purpur - no teleporting on damage + } else if (org.purpurmc.purpur.PurpurConfig.endermanShortHeight && source.is(net.minecraft.world.damagesource.DamageTypes.IN_WALL)) { return false; // Purpur - no suffocation damage if short height } else { boolean flag = source.getDirectEntity() instanceof ThrownPotion; boolean flag1; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 580eb4f8cc88cda9df78868b373ba22eb319f75f..230606116a3f5a00cf0fa0b075c65aac7806c647 100644 +index 9f98b87ccc60db9a531180de1ed649de118db56f..0cafa4bbc530a80277cbf323f8d62dee9b08a426 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -246,6 +246,12 @@ public class PurpurConfig { +@@ -247,6 +247,12 @@ public class PurpurConfig { enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows); } diff --git a/patches/server/0081-Stop-squids-floating-on-top-of-water.patch b/patches/server/0081-Stop-squids-floating-on-top-of-water.patch index dfd9f4489..3a8ef3e0f 100644 --- a/patches/server/0081-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0081-Stop-squids-floating-on-top-of-water.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Stop squids floating on top of water diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index b9b058c29ba53c780d578a434f2b5002030f391d..e4ce84d4374e27afc79591d4ee2e7a696e0b64cf 100644 +index a52ea836951da04b8ff15581c7e9323cfed53a92..99ea97ba45c488e49c51b18ffe5022437c24134b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4763,6 +4763,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4749,6 +4749,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Mth.lerp(delta, this.yRotO, this.yRot); } @@ -22,7 +22,7 @@ index b9b058c29ba53c780d578a434f2b5002030f391d..e4ce84d4374e27afc79591d4ee2e7a69 public boolean updateFluidHeightAndDoFluidPushing(final TagKey fluid, final double flowScale) { if (this.touchingUnloadedChunk()) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index db0d03fe2d2891efb3284d5c597d7c8279f2db94..a0aa4ac61de870a374152018ebdeab47dc5b5a85 100644 +index 6275cb4ca2b06d8b1b3d53a2b79115bd36da4129..7891d015d2f8dadcff8f457145574ea8ba48fe8d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -78,6 +78,12 @@ public class Squid extends AgeableWaterCreature { @@ -54,7 +54,7 @@ index 6cf6d4ec7b9e43c7b2b4c0e2fb080964ff588130..e74866e5195a5eeae7666ad7be750eda + // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c1302e6cd7db386c94d95e03b901c65b3aca1887..918923d1d95b68a99b52750974647df03070f910 100644 +index 9bf9fe0fa23f24e097e21584da8526dd10993bb6..9f2192a5a22827a6d453fc326fffe161ff42aac1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1596,6 +1596,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0082-Crying-obsidian-valid-for-portal-frames.patch b/patches/server/0082-Crying-obsidian-valid-for-portal-frames.patch index ff8784548..10c156423 100644 --- a/patches/server/0082-Crying-obsidian-valid-for-portal-frames.patch +++ b/patches/server/0082-Crying-obsidian-valid-for-portal-frames.patch @@ -18,10 +18,10 @@ index 90056822cd17f3d33d14b3f94b34750ee522a0a9..acdff7b4a00d563739fd301c3633a266 private static final float SAFE_TRAVEL_MAX_ENTITY_XY = 4.0F; private static final double SAFE_TRAVEL_MAX_VERTICAL_DELTA = 1.0D; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 230606116a3f5a00cf0fa0b075c65aac7806c647..d4371bebdcb3b55c412334491959835e2d52220f 100644 +index 0cafa4bbc530a80277cbf323f8d62dee9b08a426..80335c5915da347cc779dfd2c44d87e8329ad336 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -214,6 +214,7 @@ public class PurpurConfig { +@@ -215,6 +215,7 @@ public class PurpurConfig { public static int barrelRows = 3; public static boolean enderChestSixRows = false; public static boolean enderChestPermissionRows = false; @@ -29,7 +29,7 @@ index 230606116a3f5a00cf0fa0b075c65aac7806c647..d4371bebdcb3b55c412334491959835e private static void blockSettings() { if (version < 3) { boolean oldValue = getBoolean("settings.barrel.packed-barrels", true); -@@ -244,6 +245,7 @@ public class PurpurConfig { +@@ -245,6 +246,7 @@ public class PurpurConfig { enderChestSixRows = getBoolean("settings.blocks.ender_chest.six-rows", enderChestSixRows); org.bukkit.event.inventory.InventoryType.ENDER_CHEST.setDefaultSize(enderChestSixRows ? 54 : 27); enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows); diff --git a/patches/server/0095-Make-entity-breeding-times-configurable.patch b/patches/server/0095-Make-entity-breeding-times-configurable.patch index f9e777ed3..4b992085c 100644 --- a/patches/server/0095-Make-entity-breeding-times-configurable.patch +++ b/patches/server/0095-Make-entity-breeding-times-configurable.patch @@ -95,7 +95,7 @@ index 798a59046c3ac9a3838f7bcaf7bb21e738b76e44..16cc3fdf412bfb46e766b56d25a92bdf protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index 7f7d68d09b070c24ba1567967c5d228c73fd14b9..f14707692217a753db3062a3bda7c08b71eb95e9 100644 +index e6fa66a8c88d4f20a7383e8fd5b3df44718478fa..826927ec3d3ace50fb353333a666e35502a96171 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -67,6 +67,11 @@ public class Cow extends Animal { @@ -111,7 +111,7 @@ index 7f7d68d09b070c24ba1567967c5d228c73fd14b9..f14707692217a753db3062a3bda7c08b protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index 7fe665d9c623fd98a1fd4259a759297de46fe96e..56b2e83285f02581d03746246f370f18fc0f3c3f 100644 +index 355965d88d5ef008111cc72f39e4f8d35741fdfd..0024345d1906e6fb6bbdb189f6d4dbc631b90f9f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java @@ -188,6 +188,11 @@ public class Fox extends Animal implements VariantHolder { @@ -410,7 +410,7 @@ index b0392780b35866bf1903f49cb16c4ab79335882d..b9a406cd4e317c663a12d897b8cf1f4f protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -index 7ff446ea2163d3b3b9f7fd826939dda21e07c99f..1a992d4c867ebe65b56be724fb54b9bc389cd8ec 100644 +index 4a412a8a582e092a920029791a48c085527cbbd0..7ad4285f820360cf5ccff1ea564afac81eb24e35 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java @@ -139,6 +139,11 @@ public class Llama extends AbstractChestedHorse implements VariantHolder RABID_PREDICATE = entity -> entity instanceof net.minecraft.server.level.ServerPlayer || entity instanceof Mob; ++ private static final TargetingConditions.Selector RABID_PREDICATE = (entity, ignored) -> entity instanceof net.minecraft.server.level.ServerPlayer || entity instanceof net.minecraft.world.entity.Mob; + private final net.minecraft.world.entity.ai.goal.Goal PATHFINDER_VANILLA = new NonTameRandomTargetGoal<>(this, Animal.class, false, PREY_SELECTOR); + private final net.minecraft.world.entity.ai.goal.Goal PATHFINDER_RABID = new NonTameRandomTargetGoal<>(this, LivingEntity.class, false, RABID_PREDICATE); + private static final class AvoidRabidWolfGoal extends AvoidEntityGoal { @@ -182,7 +182,7 @@ index ecd33b4add46acbe4e4f8879c0601220423d66ca..1506a8c0fa490726eb4a4ae14f3aa194 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 71b5f351c539584ccb1d215b7d4dce3e4541ac41..bb30d75feae68fdf2714fe51c8ddc8ef71fc647c 100644 +index 14fe426bac1cc6711b264a03e472f3b48b8f9b07..8f2f978dbd10b742c6bfad36fb0e0aaf37e4deeb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2045,6 +2045,8 @@ public class PurpurWorldConfig { diff --git a/patches/server/0110-Implement-TPSBar.patch b/patches/server/0110-Implement-TPSBar.patch index b310d370d..c9a25d386 100644 --- a/patches/server/0110-Implement-TPSBar.patch +++ b/patches/server/0110-Implement-TPSBar.patch @@ -41,7 +41,7 @@ index c8a575b1823c53d6caf121b77607c703a061834d..de85340fe0a0e057c527cc1fa91ae6be } } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 14640ed95dbbf99150ef1f41ff1046c2c034e552..d1a4eca112ad8698aa9025cec1b38bca01805e3f 100644 +index 60641d8810514aca09b2854e9254b18c07df9ce6..f375f32a323d6f4a540da566fe25b47cc6658791 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -324,6 +324,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -68,7 +68,7 @@ index 14640ed95dbbf99150ef1f41ff1046c2c034e552..d1a4eca112ad8698aa9025cec1b38bca } private void saveParentVehicle(CompoundTag nbt) { -@@ -3422,5 +3425,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -3436,5 +3439,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple this.server.getPlayerList().respawn(this, true, RemovalReason.KILLED, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason.DEATH, to); } } @@ -103,10 +103,10 @@ index ca11a05c0ba7f963c7d848a11557fd81baf6b34f..78a061dc5d7141ce4e4efca5a478e559 entityplayer.awardStat(Stats.LEAVE_GAME); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index e86e3ceb8c93b89a37aeb3829fea65430b387941..2685a3e5e4d0a1559f2d28152bab73b8982362fd 100644 +index b1be848bbc617968fbf1d1babbbf1a6e2bee6ec4..64c84cb6cc647ca37a0664b83eb24e7202aeb1e2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -184,6 +184,7 @@ public class PurpurConfig { +@@ -185,6 +185,7 @@ public class PurpurConfig { public static String creditsCommandOutput = "%s has been shown the end credits"; public static String demoCommandOutput = "%s has been shown the demo screen"; public static String pingCommandOutput = "%s's ping is %sms"; @@ -114,7 +114,7 @@ index e86e3ceb8c93b89a37aeb3829fea65430b387941..2685a3e5e4d0a1559f2d28152bab73b8 private static void messages() { cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway); -@@ -194,6 +195,7 @@ public class PurpurConfig { +@@ -195,6 +196,7 @@ public class PurpurConfig { creditsCommandOutput = getString("settings.messages.credits-command-output", creditsCommandOutput); demoCommandOutput = getString("settings.messages.demo-command-output", demoCommandOutput); pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput); @@ -122,7 +122,7 @@ index e86e3ceb8c93b89a37aeb3829fea65430b387941..2685a3e5e4d0a1559f2d28152bab73b8 } public static String serverModName = io.papermc.paper.ServerBuildInfo.buildInfo().brandName(); -@@ -216,6 +218,29 @@ public class PurpurConfig { +@@ -217,6 +219,29 @@ public class PurpurConfig { disableGiveCommandDrops = getBoolean("settings.disable-give-dropping", disableGiveCommandDrops); } diff --git a/patches/server/0113-Full-netherite-armor-grants-fire-resistance.patch b/patches/server/0113-Full-netherite-armor-grants-fire-resistance.patch index c3f0820ce..232cc7d9f 100644 --- a/patches/server/0113-Full-netherite-armor-grants-fire-resistance.patch +++ b/patches/server/0113-Full-netherite-armor-grants-fire-resistance.patch @@ -5,28 +5,29 @@ Subject: [PATCH] Full netherite armor grants fire resistance diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 773be9c116a664e4d0349c58c00df34f203f8ebf..00b3e300c0d43f7791c9d5f83a7901304f6464f5 100644 +index 773be9c116a664e4d0349c58c00df34f203f8ebf..ae5f7c275003b6fb9f6c5a0277482b4fddf8e74c 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -397,6 +397,16 @@ public abstract class Player extends LivingEntity { - super.onInsideBubbleColumn(drag); +@@ -353,6 +353,17 @@ public abstract class Player extends LivingEntity { + this.turtleHelmetTick(); } + // Purpur start + if (this.level().purpurConfig.playerNetheriteFireResistanceDuration > 0 && this.level().getGameTime() % 20 == 0) { -+ if (itemstack.is(Items.NETHERITE_HELMET) -+ && this.getItemBySlot(EquipmentSlot.CHEST).is(Items.NETHERITE_CHESTPLATE) -+ && this.getItemBySlot(EquipmentSlot.LEGS).is(Items.NETHERITE_LEGGINGS) -+ && this.getItemBySlot(EquipmentSlot.FEET).is(Items.NETHERITE_BOOTS)) { ++ if (this.getItemBySlot(EquipmentSlot.HEAD).is(Items.NETHERITE_HELMET) ++ && this.getItemBySlot(EquipmentSlot.CHEST).is(Items.NETHERITE_CHESTPLATE) ++ && this.getItemBySlot(EquipmentSlot.LEGS).is(Items.NETHERITE_LEGGINGS) ++ && this.getItemBySlot(EquipmentSlot.FEET).is(Items.NETHERITE_BOOTS)) { + this.addEffect(new MobEffectInstance(MobEffects.FIRE_RESISTANCE, this.level().purpurConfig.playerNetheriteFireResistanceDuration, this.level().purpurConfig.playerNetheriteFireResistanceAmplifier, this.level().purpurConfig.playerNetheriteFireResistanceAmbient, this.level().purpurConfig.playerNetheriteFireResistanceShowParticles, this.level().purpurConfig.playerNetheriteFireResistanceShowIcon), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.NETHERITE_ARMOR); + } + } + // Purpur end - } - - private void turtleHelmetTick() { ++ + this.cooldowns.tick(); + this.updatePlayerPose(); + if (this.currentImpulseContextResetGraceTime > 0) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b02c2aa15bbfd3b917476f0fd296612d548d450f..b236fdc1f7cfcf9be6ab2486e53025123b950106 100644 +index 9775eda4e445a29852cbf12db43282cf8ac9a118..f218c12634f40a171a5022cb3d2956236d9a4d20 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -283,6 +283,19 @@ public class PurpurWorldConfig { diff --git a/patches/server/0114-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/server/0114-Add-mobGriefing-bypass-to-everything-affected.patch index 067595236..f1a19476a 100644 --- a/patches/server/0114-Add-mobGriefing-bypass-to-everything-affected.patch +++ b/patches/server/0114-Add-mobGriefing-bypass-to-everything-affected.patch @@ -18,7 +18,7 @@ index 06ccf6daaf5e7affe505c75cdbf85c1c29c3ebf9..7c60a938850e5db62022217168a075e2 BlockState iblockdata = Blocks.WITHER_ROSE.defaultBlockState(); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 7b0cb3f4d8d810b32cda964c20437fea5ea00e24..bc2beee267f535e23bd804d415019bab5ee2fd88 100644 +index 43a37611c046c70833349c2ff5313f312bebf25b..2ececba4f225589c5a38eaa24daf2481ad44a648 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -704,7 +704,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -92,7 +92,7 @@ index 9d245d08be61d7edee9138196ae3bf52023e3993..d002acdac893e2744cde5f1145d29ac2 } else if (this.nextStartTick > 0) { --this.nextStartTick; diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index 56b2e83285f02581d03746246f370f18fc0f3c3f..dfff1b51544476dffccfd6bfa016cf57b9c1c081 100644 +index 0024345d1906e6fb6bbdb189f6d4dbc631b90f9f..f78d3ef0913f90fb275a8067c4b0b8523a0eb964 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java @@ -1370,7 +1370,7 @@ public class Fox extends Animal implements VariantHolder { @@ -157,7 +157,7 @@ index 2ec12ec298446b556132785d4d376130594a7cb6..6b499d59ab27869a74ee1e3b3f777cbd j = Mth.floor(this.getBbWidth() / 2.0F + 1.0F); 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 3a37ff8bd8ca792393fa10fed4d38eb72559d4db..262350aaed5070a9353ba15726bba197df3b9de0 100644 +index 02336ee7a002a620cd76570c84d1d53194a23668..fb55f4c2523fb1573b6dcb7dc6c8f769b7e770a2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -516,7 +516,15 @@ public class EnderMan extends Monster implements NeutralMob { @@ -350,7 +350,7 @@ index e744a117d2f25ad24c87263ba2ab7f760b6e594d..e1abec46177887a92726de80f66226fe org.bukkit.event.Cancellable cancellable; if (entity instanceof Player) { diff --git a/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java b/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java -index 53f1a7ed6b4bd6e2d8460531226aabf249994c02..19a403ac19695ed6984c42f83c4698ffcc6ac2b7 100644 +index 53f1a7ed6b4bd6e2d8460531226aabf249994c02..3e1dddab0500bb805e5accd0ece69c450bad478f 100644 --- a/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java +++ b/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java @@ -76,7 +76,7 @@ public class PowderSnowBlock extends Block implements BucketPickup { @@ -358,7 +358,7 @@ index 53f1a7ed6b4bd6e2d8460531226aabf249994c02..19a403ac19695ed6984c42f83c4698ff // CraftBukkit start if (entity.isOnFire() && entity.mayInteract(worldserver, pos)) { - if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !(worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) || entity instanceof Player))) { -+ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !((worldserver.purpurConfig.powderSnowBypassMobGriefing || world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) || entity instanceof Player))) { // Purpur ++ if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !((worldserver.purpurConfig.powderSnowBypassMobGriefing || worldserver.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) || entity instanceof Player))) { // Purpur return; } // CraftBukkit end @@ -376,7 +376,7 @@ index bae4931fff0db56aa125248e17b29f7c2557221f..4eb0f7a9cf6b12c02d0bd42980ae302d } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b236fdc1f7cfcf9be6ab2486e53025123b950106..b1d63425dc952c0ee0b3bd371a0910787ce628b7 100644 +index f218c12634f40a171a5022cb3d2956236d9a4d20..f0d8e44aee5cd3b0e4012e41e622d89a8c2f8034 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -120,6 +120,9 @@ public class PurpurWorldConfig { diff --git a/patches/server/0120-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0120-Toggle-for-water-sensitive-mob-damage.patch index 15f049c1a..eb9f8c12a 100644 --- a/patches/server/0120-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0120-Toggle-for-water-sensitive-mob-damage.patch @@ -110,7 +110,7 @@ index 3d61c2d5da103de68242c16d85c703813979d179..2343325fa9a771de7b9445cda24a2bcd public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index f14707692217a753db3062a3bda7c08b71eb95e9..9c3bdf70c70328df4bfc13cb09aeef4b190cd77e 100644 +index 826927ec3d3ace50fb353333a666e35502a96171..4ad3571403ee8044d17f53987bd47b6c43d42f0e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -72,6 +72,11 @@ public class Cow extends Animal { @@ -142,7 +142,7 @@ index be74a5732bc24eb3c909d28b4ef46d5175d999d2..bcc6435c177189aa59a3fbe67795ae50 @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData entityData) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index dfff1b51544476dffccfd6bfa016cf57b9c1c081..cd100063ae1cb62a1bc59bfa07042a7591173a7b 100644 +index f78d3ef0913f90fb275a8067c4b0b8523a0eb964..c442b119f699449bdac73cb1b4c139f093ec2a96 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java @@ -193,6 +193,11 @@ public class Fox extends Animal implements VariantHolder { @@ -347,7 +347,7 @@ index 59fe12a265523f3f1e3568216b703abcff27f4cc..0d6eca127532cf0bc2a4495df1fcd50e @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 548f140c56277d46a3381b48d6f0b660c6e8feeb..87ed43001ca86336ad23ffcf8c0c5b1b6036e50a 100644 +index 4d2992a16865fa60dd38d0ff6dc341f9c5f6bd00..3cf9a511ae819ec92aac402c01c37c9015939d19 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java @@ -93,6 +93,11 @@ public class Squid extends AgeableWaterCreature { @@ -395,7 +395,7 @@ index 6b2e27e2f8aeccfc4d84c73be0fa5a04f5a962e2..96a6f13fe6ea02412974fd4c8cf01546 this.entityData.set(Turtle.HOME_POS, pos); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index e8f825288aaa6f513f1ac25689a9669e3cfc015f..ec8dc3d02920580103e534f3102063c80bfab5f0 100644 +index 7343c5a81ddf7db1e9e434796489fd8a98b9a70c..91474a8a795a278493c07002bd99ec75effa659c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -218,6 +218,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder()).forEach(key -> { @@ -226,6 +230,10 @@ public class PurpurWorldConfig { - Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(key.toString())); + Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(key.toString())); if (item != Items.AIR) itemImmuneToLightning.add(item); }); + dontRunWithScissors = getBoolean("gameplay-mechanics.item.shears.damage-if-sprinting", dontRunWithScissors); diff --git a/patches/server/0129-Config-Enderman-aggressiveness-towards-Endermites.patch b/patches/server/0129-Config-Enderman-aggressiveness-towards-Endermites.patch index d7e5ce56d..6e790d8f0 100644 --- a/patches/server/0129-Config-Enderman-aggressiveness-towards-Endermites.patch +++ b/patches/server/0129-Config-Enderman-aggressiveness-towards-Endermites.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config Enderman aggressiveness towards Endermites 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 d48be9b5ac329bddd1eb3c26d35421b32d87f547..4a223113757320610eddd89d5404dd54e38fc87d 100644 +index 491d63bd648c0f0a82c2e9f8a899b352b553a697..a3cf68f3a43fb525112eaa669f2766b562bda535 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -132,7 +132,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -13,12 +13,12 @@ index d48be9b5ac329bddd1eb3c26d35421b32d87f547..4a223113757320610eddd89d5404dd54 this.targetSelector.addGoal(1, new EnderMan.EndermanLookForPlayerGoal(this, this::isAngryAt)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); - this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Endermite.class, true, false)); -+ this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Endermite.class, 10, true, false, (entityliving) -> entityliving.level().purpurConfig.endermanAggroEndermites && entityliving instanceof Endermite endermite && (!entityliving.level().purpurConfig.endermanAggroEndermitesOnlyIfPlayerSpawned || endermite.isPlayerSpawned()))); // Purpur ++ this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Endermite.class, 10, true, false, (entityliving, ignored) -> entityliving.level().purpurConfig.endermanAggroEndermites && entityliving instanceof Endermite endermite && (!entityliving.level().purpurConfig.endermanAggroEndermitesOnlyIfPlayerSpawned || endermite.isPlayerSpawned()))); // Purpur this.targetSelector.addGoal(4, new ResetUniversalAngerTargetGoal<>(this, false)); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f032d27542b26797126a9b060fa52237349dbca5..2b0984f7a2dd0d2f42f59b85a5b6e8d7b09319c2 100644 +index c3343c0ffcee58b8dffeef4f6ff14be2701df443..e05b261fb0b81469ba707ad200f57d01cf29671f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1015,6 +1015,8 @@ public class PurpurWorldConfig { diff --git a/patches/server/0134-Configurable-ravager-griefable-blocks-list.patch b/patches/server/0134-Configurable-ravager-griefable-blocks-list.patch index e62f56ce3..0c4faf02f 100644 --- a/patches/server/0134-Configurable-ravager-griefable-blocks-list.patch +++ b/patches/server/0134-Configurable-ravager-griefable-blocks-list.patch @@ -31,7 +31,7 @@ index d1efd728f0660b77361fa4f9c2bf5f2e654be0d2..ab58c4dbe9deb8807478a8e66e01f81a } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b1ce0257e3cad9d37f6ab998a7ff6e41060fc3ed..f99d1df0358804862f2d98cd39d1aaf1369081c5 100644 +index 5ebf1265a7815e2c774e2b60cd36e075a5bb5427..1986e7a98fdfda443fa7b375786c836bc0f09fbf 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1766,6 +1766,7 @@ public class PurpurWorldConfig { @@ -58,7 +58,7 @@ index b1ce0257e3cad9d37f6ab998a7ff6e41060fc3ed..f99d1df0358804862f2d98cd39d1aaf1 + add("minecraft:potatoes"); + add("minecraft:wheat"); + }}).forEach(key -> { -+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(key.toString())); ++ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(key.toString())); + if (!block.defaultBlockState().isAir()) { + ravagerGriefableBlocks.add(block); + } diff --git a/patches/server/0142-Option-to-make-doors-require-redstone.patch b/patches/server/0142-Option-to-make-doors-require-redstone.patch index 243eb1e12..71e3edb43 100644 --- a/patches/server/0142-Option-to-make-doors-require-redstone.patch +++ b/patches/server/0142-Option-to-make-doors-require-redstone.patch @@ -82,7 +82,7 @@ index 077b99caf0ec0ee098786d23194d88e1dc4481ce..daf865c20cc193a12db0d98e3c0472ee + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4c751f6b66536ad976c9b8fc936bda38ea12f6e5..c11e68ba894df3e21d499920585df8128bf7429f 100644 +index e3381a8ae94168a14f0da7daa896817f8fc1cc7d..eed57224720e26e588a6604f8d96a3d1090b2a0c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -462,6 +462,16 @@ public class PurpurWorldConfig { @@ -92,7 +92,7 @@ index 4c751f6b66536ad976c9b8fc936bda38ea12f6e5..c11e68ba894df3e21d499920585df812 + public List doorRequiresRedstone = new ArrayList<>(); + private void doorSettings() { + getList("blocks.door.requires-redstone", new ArrayList()).forEach(key -> { -+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(key.toString())); ++ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(key.toString())); + if (!block.defaultBlockState().isAir()) { + doorRequiresRedstone.add(block); + } diff --git a/patches/server/0143-Config-to-allow-unsafe-enchants.patch b/patches/server/0143-Config-to-allow-unsafe-enchants.patch index 15f909b0c..7d8f8db73 100644 --- a/patches/server/0143-Config-to-allow-unsafe-enchants.patch +++ b/patches/server/0143-Config-to-allow-unsafe-enchants.patch @@ -95,10 +95,10 @@ index dcb656be3d37f29bdbe7d25ace05c6dd1889e252..d644d02b039ca918391a32a04549f7a3 return (ItemEnchantments) this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 6fcb2db92a38e862da288518ce34d16aa4b856e0..b37daca2ca99d79210ec5e8e9d589e27702a57e5 100644 +index 28800c519ab8a6648d632a577ffbecae175f3844..ebeb7e756f8d8b499f0ad1a0948264cfe376a69a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -285,6 +285,36 @@ public class PurpurConfig { +@@ -286,6 +286,36 @@ public class PurpurConfig { cryingObsidianValidForPortalFrame = getBoolean("settings.blocks.crying_obsidian.valid-for-portal-frame", cryingObsidianValidForPortalFrame); } diff --git a/patches/server/0148-Config-to-change-max-number-of-bees.patch b/patches/server/0148-Config-to-change-max-number-of-bees.patch index 6fa24e630..6942ebdc5 100644 --- a/patches/server/0148-Config-to-change-max-number-of-bees.patch +++ b/patches/server/0148-Config-to-change-max-number-of-bees.patch @@ -18,10 +18,10 @@ index 83ad45aed0894e90825d22e078632352c3a06816..b7ad467d7d7f50bcb90e50f00f905873 public BeehiveBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityType.BEEHIVE, pos, state); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index b37daca2ca99d79210ec5e8e9d589e27702a57e5..24e3148c51c3d558a3945827842c414d9cdc2e40 100644 +index ebeb7e756f8d8b499f0ad1a0948264cfe376a69a..13dd4689491ca760be7451e5d4e721a240094664 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -252,6 +252,7 @@ public class PurpurConfig { +@@ -253,6 +253,7 @@ public class PurpurConfig { public static boolean enderChestSixRows = false; public static boolean enderChestPermissionRows = false; public static boolean cryingObsidianValidForPortalFrame = false; @@ -29,7 +29,7 @@ index b37daca2ca99d79210ec5e8e9d589e27702a57e5..24e3148c51c3d558a3945827842c414d private static void blockSettings() { if (version < 3) { boolean oldValue = getBoolean("settings.barrel.packed-barrels", true); -@@ -283,6 +284,7 @@ public class PurpurConfig { +@@ -284,6 +285,7 @@ public class PurpurConfig { org.bukkit.event.inventory.InventoryType.ENDER_CHEST.setDefaultSize(enderChestSixRows ? 54 : 27); enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows); cryingObsidianValidForPortalFrame = getBoolean("settings.blocks.crying_obsidian.valid-for-portal-frame", cryingObsidianValidForPortalFrame); diff --git a/patches/server/0150-Gamemode-extra-permissions.patch b/patches/server/0150-Gamemode-extra-permissions.patch index d342e1977..28c6c3f6f 100644 --- a/patches/server/0150-Gamemode-extra-permissions.patch +++ b/patches/server/0150-Gamemode-extra-permissions.patch @@ -73,10 +73,10 @@ index 52649f82351ab4f675c3cc3cd6640956b0f76b91..eb51c88c7a0658190d3a8bfd5d18dca7 DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "defaultgamemode", "Allows the user to change the default gamemode of the server", PermissionDefault.OP, commands); DefaultPermissions.registerPermission(CommandPermissions.PREFIX + "seed", "Allows the user to view the seed of the world", PermissionDefault.OP, commands); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 24e3148c51c3d558a3945827842c414d9cdc2e40..6f06956825003ff55604c2e4aea66099ece2470c 100644 +index 13dd4689491ca760be7451e5d4e721a240094664..8f242ff15731e0bb0c9d95a6b52a39b6141b0fb9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -235,6 +235,7 @@ public class PurpurConfig { +@@ -236,6 +236,7 @@ public class PurpurConfig { public static String commandTPSBarTextColorMedium = ""; public static String commandTPSBarTextColorLow = ""; public static int commandTPSBarTickInterval = 20; @@ -84,7 +84,7 @@ index 24e3148c51c3d558a3945827842c414d9cdc2e40..6f06956825003ff55604c2e4aea66099 private static void commandSettings() { commandTPSBarTitle = getString("settings.command.tpsbar.title", commandTPSBarTitle); commandTPSBarProgressOverlay = BossBar.Overlay.valueOf(getString("settings.command.tpsbar.overlay", commandTPSBarProgressOverlay.name())); -@@ -246,6 +247,7 @@ public class PurpurConfig { +@@ -247,6 +248,7 @@ public class PurpurConfig { commandTPSBarTextColorMedium = getString("settings.command.tpsbar.text-color.medium", commandTPSBarTextColorMedium); commandTPSBarTextColorLow = getString("settings.command.tpsbar.text-color.low", commandTPSBarTextColorLow); commandTPSBarTickInterval = getInt("settings.command.tpsbar.tick-interval", commandTPSBarTickInterval); diff --git a/patches/server/0152-Configurable-broadcast-settings.patch b/patches/server/0152-Configurable-broadcast-settings.patch index 2da4e8eed..d170e4afa 100644 --- a/patches/server/0152-Configurable-broadcast-settings.patch +++ b/patches/server/0152-Configurable-broadcast-settings.patch @@ -17,7 +17,7 @@ index 0a16aa193ef24aa8f1716f9e089b8027fa3c0a3c..1e85c9318ede93b8e9fe548a8945324b // Paper end } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 8d4e50aade704403cd713506268a1711080f72a3..5d611f5d8ccd635b376bded93bd0278323a585ba 100644 +index a706fd393962973af8f0a88edd98deea235b8404..a3074c439b3255d2cfc174dbc7c5b01ef418a602 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1335,6 +1335,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -29,10 +29,10 @@ index 8d4e50aade704403cd713506268a1711080f72a3..5d611f5d8ccd635b376bded93bd02783 if (scoreboardteam.getDeathMessageVisibility() == Team.Visibility.HIDE_FOR_OTHER_TEAMS) { this.server.getPlayerList().broadcastSystemToTeam(this, ichatbasecomponent); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 6f06956825003ff55604c2e4aea66099ece2470c..feeaae5b0a8881ce5faf46940ad22b299a33d5eb 100644 +index 8f242ff15731e0bb0c9d95a6b52a39b6141b0fb9..66fba2c7e3b0b75d5d6c1aebc031f77010cb73d9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -205,6 +205,18 @@ public class PurpurConfig { +@@ -206,6 +206,18 @@ public class PurpurConfig { deathMsgRunWithScissors = getString("settings.messages.death-message.run-with-scissors", deathMsgRunWithScissors); } diff --git a/patches/server/0154-Hide-hidden-players-from-entity-selector.patch b/patches/server/0154-Hide-hidden-players-from-entity-selector.patch index 9b0c7c583..f5bda1d7d 100644 --- a/patches/server/0154-Hide-hidden-players-from-entity-selector.patch +++ b/patches/server/0154-Hide-hidden-players-from-entity-selector.patch @@ -59,10 +59,10 @@ index c8d39e6e1c570c9219f6066da273dc0130920519..b455c7e9d18bac3654daa8510f85cc21 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index feeaae5b0a8881ce5faf46940ad22b299a33d5eb..881f3621233834aca8c8d5381e41d2a3fc9237da 100644 +index 66fba2c7e3b0b75d5d6c1aebc031f77010cb73d9..9654f422b3e23d10151eb447b990ba5d4cf70671 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -248,6 +248,7 @@ public class PurpurConfig { +@@ -249,6 +249,7 @@ public class PurpurConfig { public static String commandTPSBarTextColorLow = ""; public static int commandTPSBarTickInterval = 20; public static boolean commandGamemodeRequiresPermission = false; @@ -70,7 +70,7 @@ index feeaae5b0a8881ce5faf46940ad22b299a33d5eb..881f3621233834aca8c8d5381e41d2a3 private static void commandSettings() { commandTPSBarTitle = getString("settings.command.tpsbar.title", commandTPSBarTitle); commandTPSBarProgressOverlay = BossBar.Overlay.valueOf(getString("settings.command.tpsbar.overlay", commandTPSBarProgressOverlay.name())); -@@ -260,6 +261,7 @@ public class PurpurConfig { +@@ -261,6 +262,7 @@ public class PurpurConfig { commandTPSBarTextColorLow = getString("settings.command.tpsbar.text-color.low", commandTPSBarTextColorLow); commandTPSBarTickInterval = getInt("settings.command.tpsbar.tick-interval", commandTPSBarTickInterval); commandGamemodeRequiresPermission = getBoolean("settings.command.gamemode.requires-specific-permission", commandGamemodeRequiresPermission); diff --git a/patches/server/0155-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/server/0155-Config-for-health-to-impact-Creeper-explosion-radius.patch index ca2ba8ca4..9d0fa10d1 100644 --- a/patches/server/0155-Config-for-health-to-impact-Creeper-explosion-radius.patch +++ b/patches/server/0155-Config-for-health-to-impact-Creeper-explosion-radius.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Config for health to impact Creeper explosion radius diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index ad3a3d8e7ab660be5afb8e00948b87387196ebb7..941eb2b4264f620500347b012c0d9f448133ed78 100644 +index 0bce10c1cbf9f1788817a2834ec0efa04dd17752..d2de324f024d0a83790e2b86dc765b0115081461 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -373,9 +373,10 @@ public class Creeper extends Monster { if (world instanceof ServerLevel worldserver) { float f = this.isPowered() ? 2.0F : 1.0F; -+ float multiplier = this.level().purpurConfig.creeperHealthRadius ? this.getHealth() / this.getMaxHealth() : 1; // Purpur ++ float multiplier = worldserver.purpurConfig.creeperHealthRadius ? this.getHealth() / this.getMaxHealth() : 1; // Purpur // CraftBukkit start - ExplosionPrimeEvent event = CraftEventFactory.callExplosionPrimeEvent(this, this.explosionRadius * f, false); @@ -21,7 +21,7 @@ index ad3a3d8e7ab660be5afb8e00948b87387196ebb7..941eb2b4264f620500347b012c0d9f44 // CraftBukkit end this.dead = true; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9ba71358ef10fcaf5339b7341483b037537a0f01..9ab90bac6c13a063fa851be0e55a81fed8b71492 100644 +index 8be5ff1862e6681161d865a54addb1bdd9bd0425..3e8a41cc671491d2b3fed6919e280720160d61eb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -937,6 +937,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0157-Breedable-parrots.patch b/patches/server/0157-Breedable-parrots.patch index 2fa6e0d83..b7e077a2f 100644 --- a/patches/server/0157-Breedable-parrots.patch +++ b/patches/server/0157-Breedable-parrots.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Breedable parrots diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index 9c7e29307b811d859a0d743b232463e18391b5f0..0afa483c6436c4f51955b04a4fe6920a27092284 100644 +index 9c7e29307b811d859a0d743b232463e18391b5f0..00759f484cab0d7c8d4e8914dd9f27061c8b7d45 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -224,6 +224,7 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { return blockposition1.above(1); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index ebbaa21dbaff140818fad10accd05721451b37cb..e654169f6a290aa52a4e0f647dc7ec6698489729 100644 +index 711e63f2101e5a52ca3a3963fa9b0a976b4946a7..fe548c474113d6fa5b605557026e86a542bb03c9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -272,6 +272,7 @@ public class PurpurConfig { +@@ -273,6 +273,7 @@ public class PurpurConfig { public static boolean cryingObsidianValidForPortalFrame = false; public static int beeInsideBeeHive = 3; public static boolean anvilCumulativeCost = true; @@ -29,7 +29,7 @@ index ebbaa21dbaff140818fad10accd05721451b37cb..e654169f6a290aa52a4e0f647dc7ec66 private static void blockSettings() { if (version < 3) { boolean oldValue = getBoolean("settings.barrel.packed-barrels", true); -@@ -305,6 +306,7 @@ public class PurpurConfig { +@@ -306,6 +307,7 @@ public class PurpurConfig { cryingObsidianValidForPortalFrame = getBoolean("settings.blocks.crying_obsidian.valid-for-portal-frame", cryingObsidianValidForPortalFrame); beeInsideBeeHive = getInt("settings.blocks.beehive.max-bees-inside", beeInsideBeeHive); anvilCumulativeCost = getBoolean("settings.blocks.anvil.cumulative-cost", anvilCumulativeCost); diff --git a/patches/server/0168-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch b/patches/server/0168-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch index 14fecae65..9229d113e 100644 --- a/patches/server/0168-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch +++ b/patches/server/0168-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch @@ -5,8 +5,20 @@ Subject: [PATCH] Burp delay, burp after eating food fills hunger bar completely +diff --git a/src/main/java/net/minecraft/world/effect/SaturationMobEffect.java b/src/main/java/net/minecraft/world/effect/SaturationMobEffect.java +index 837bdc7d6bd4e05b0deded829c678c86ae3d79d5..0c7c0524e487ff32e16dd9939d92bc6441602747 100644 +--- a/src/main/java/net/minecraft/world/effect/SaturationMobEffect.java ++++ b/src/main/java/net/minecraft/world/effect/SaturationMobEffect.java +@@ -21,6 +21,7 @@ class SaturationMobEffect extends InstantenousMobEffect { + int oldFoodLevel = entityhuman.getFoodData().foodLevel; + org.bukkit.event.entity.FoodLevelChangeEvent event = CraftEventFactory.callFoodLevelChangeEvent(entityhuman, amplifier + 1 + oldFoodLevel); + if (!event.isCancelled()) { ++ if (entityhuman.level().purpurConfig.playerBurpWhenFull && event.getFoodLevel() == 20 && oldFoodLevel < 20) entityhuman.burpDelay = entityhuman.level().purpurConfig.playerBurpDelay; // Purpur + entityhuman.getFoodData().eat(event.getFoodLevel() - oldFoodLevel, entity.level().purpurConfig.humanSaturationRegenAmount); // Purpur + } + diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index e755a472385fcc699ae8fa1e56370c4176152ff6..8852740d584ad4bafe14787572c2e238ddf2f584 100644 +index 4c42ad7e43ab1f19456a89f1b0e82b7a1f6e4108..c7393d9c8cb2bc4583cd3715a154f9411cc223e1 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -198,6 +198,7 @@ public abstract class Player extends LivingEntity { @@ -31,20 +43,17 @@ index e755a472385fcc699ae8fa1e56370c4176152ff6..8852740d584ad4bafe14787572c2e238 if (this.isSpectator()) { this.setOnGround(false); diff --git a/src/main/java/net/minecraft/world/food/FoodData.java b/src/main/java/net/minecraft/world/food/FoodData.java -index 6a686be6a69ae890d519a54ca099d4ba14e5b9e1..a1c2dfb9e2a6efe05389b0716c4d1d0f95311eea 100644 +index 6a686be6a69ae890d519a54ca099d4ba14e5b9e1..4f8ee2e5db3352306f3c035052866d95630f4aaf 100644 --- a/src/main/java/net/minecraft/world/food/FoodData.java +++ b/src/main/java/net/minecraft/world/food/FoodData.java -@@ -25,8 +25,10 @@ public class FoodData { - public FoodData() {} +@@ -44,6 +44,7 @@ public class FoodData { + org.bukkit.event.entity.FoodLevelChangeEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callFoodLevelChangeEvent(entityplayer, foodinfo.nutrition() + oldFoodLevel, itemstack); - private void add(int nutrition, float saturation) { -+ int oldValue = this.foodLevel; // Purpur - this.foodLevel = Mth.clamp(nutrition + this.foodLevel, 0, 20); - this.saturationLevel = Mth.clamp(saturation + this.saturationLevel, 0.0F, (float) this.foodLevel); -+ if (this.entityhuman.level().purpurConfig.playerBurpWhenFull && this.foodLevel == 20 && oldValue < 20) this.entityhuman.burpDelay = this.entityhuman.level().purpurConfig.playerBurpDelay; // Purpur - } + if (!event.isCancelled()) { ++ if (entityplayer.level().purpurConfig.playerBurpWhenFull && event.getFoodLevel() == 20 && oldFoodLevel < 20) entityplayer.burpDelay = entityplayer.level().purpurConfig.playerBurpDelay; // Purpur + this.add(event.getFoodLevel() - oldFoodLevel, foodinfo.saturation()); + } - public void eat(int food, float saturationModifier) { diff --git a/src/main/java/net/minecraft/world/food/FoodProperties.java b/src/main/java/net/minecraft/world/food/FoodProperties.java index 882b72799ae532f4e181214d5756ec024af223e2..9a3f2a95debcf8b94f7deb375922ea09b30aabab 100644 --- a/src/main/java/net/minecraft/world/food/FoodProperties.java @@ -58,8 +67,20 @@ index 882b72799ae532f4e181214d5756ec024af223e2..9a3f2a95debcf8b94f7deb375922ea09 } } +diff --git a/src/main/java/net/minecraft/world/level/block/CakeBlock.java b/src/main/java/net/minecraft/world/level/block/CakeBlock.java +index 648c2510beb162e73aed236a3169d0bbb8fc5050..3563a241c0b697dc0167cf7b1aa73fef7d1e7934 100644 +--- a/src/main/java/net/minecraft/world/level/block/CakeBlock.java ++++ b/src/main/java/net/minecraft/world/level/block/CakeBlock.java +@@ -119,6 +119,7 @@ public class CakeBlock extends Block { + org.bukkit.event.entity.FoodLevelChangeEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callFoodLevelChangeEvent(player, 2 + oldFoodLevel); + + if (!event.isCancelled()) { ++ if (player.level().purpurConfig.playerBurpWhenFull && event.getFoodLevel() == 20 && oldFoodLevel < 20) player.burpDelay = player.level().purpurConfig.playerBurpDelay; // Purpur + player.getFoodData().eat(event.getFoodLevel() - oldFoodLevel, 0.1F); + } + diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0adfc605365b5671dadebdd7143ba92417e5bb22..b94017de09e67afbf5778867025d57e2cdf8efb8 100644 +index 5f6ae1b46df321ac1ec73007091dec4260732552..faf54de4d563d1cc7d8d5b5b6090ade2801c390b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -379,6 +379,8 @@ public class PurpurWorldConfig { diff --git a/patches/server/0172-Eating-glow-berries-adds-glow-effect.patch b/patches/server/0172-Eating-glow-berries-adds-glow-effect.patch index 9e10ff826..3b9c1f7d9 100644 --- a/patches/server/0172-Eating-glow-berries-adds-glow-effect.patch +++ b/patches/server/0172-Eating-glow-berries-adds-glow-effect.patch @@ -18,7 +18,7 @@ index bf7d12594375d5b252db540a6d669a6e6aca7de8..580bd63fdbf9555f867362d3c1f39f41 public static final Item CAMPFIRE = registerBlock(Blocks.CAMPFIRE, settings -> settings.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY)); public static final Item SOUL_CAMPFIRE = registerBlock( diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 798160f40deb31511d7d120e66a3464c68203ff3..f9df0bc403a19f4ddedf95907928d9f3003804ab 100644 +index 4d37fdd48a36e2608e192ca115f3a15c7fc9064b..b43e6fe2556595ab05e69c17eae3cca628462ed8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -211,6 +211,7 @@ public class PurpurWorldConfig { @@ -39,7 +39,7 @@ index 798160f40deb31511d7d120e66a3464c68203ff3..f9df0bc403a19f4ddedf95907928d9f3 public double minecartMaxSpeed = 0.4D; diff --git a/src/main/java/org/purpurmc/purpur/item/GlowBerryItem.java b/src/main/java/org/purpurmc/purpur/item/GlowBerryItem.java new file mode 100644 -index 0000000000000000000000000000000000000000..7f526883495b3222746de3d0442e9e4fb5107036 +index 0000000000000000000000000000000000000000..b257f35caa13b660854cf17f41fd8fba1d56c458 --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/item/GlowBerryItem.java @@ -0,0 +1,26 @@ @@ -49,13 +49,13 @@ index 0000000000000000000000000000000000000000..7f526883495b3222746de3d0442e9e4f +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; +import net.minecraft.world.entity.LivingEntity; -+import net.minecraft.world.item.ItemNameBlockItem; ++import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import org.bukkit.event.entity.EntityPotionEffectEvent; + -+public class GlowBerryItem extends ItemNameBlockItem { ++public class GlowBerryItem extends BlockItem { + public GlowBerryItem(Block block, Properties settings) { + super(block, settings); + } diff --git a/patches/server/0174-Configurable-hunger-starvation-damage.patch b/patches/server/0174-Configurable-hunger-starvation-damage.patch index f2d1e0a3e..289a59df7 100644 --- a/patches/server/0174-Configurable-hunger-starvation-damage.patch +++ b/patches/server/0174-Configurable-hunger-starvation-damage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable hunger starvation damage diff --git a/src/main/java/net/minecraft/world/food/FoodData.java b/src/main/java/net/minecraft/world/food/FoodData.java -index a1c2dfb9e2a6efe05389b0716c4d1d0f95311eea..8a43bb4d73ac3c6df892c977cecb2c10a82ef8cd 100644 +index 4f8ee2e5db3352306f3c035052866d95630f4aaf..b8b0b89b7f0a21ecff4ab6286f8a114e2d6b6b39 100644 --- a/src/main/java/net/minecraft/world/food/FoodData.java +++ b/src/main/java/net/minecraft/world/food/FoodData.java -@@ -98,7 +98,7 @@ public class FoodData { +@@ -97,7 +97,7 @@ public class FoodData { ++this.tickTimer; if (this.tickTimer >= this.starvationRate) { // CraftBukkit - add regen rate manipulation if (player.getHealth() > 10.0F || enumdifficulty == Difficulty.HARD || player.getHealth() > 1.0F && enumdifficulty == Difficulty.NORMAL) { @@ -18,7 +18,7 @@ index a1c2dfb9e2a6efe05389b0716c4d1d0f95311eea..8a43bb4d73ac3c6df892c977cecb2c10 this.tickTimer = 0; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c5bcf86c2fcbcb5048ee73f9aba848867eb3c3c1..93e9cbefce01fc905fad95947673bca2cf8d29f2 100644 +index dceae3b39f761a6e34dbcfb316cfa1704ada7729..a67cc3a25596e01e12b83ee6269f00a5e2e33324 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2684,4 +2684,9 @@ public class PurpurWorldConfig { diff --git a/patches/server/0176-Add-uptime-command.patch b/patches/server/0176-Add-uptime-command.patch index 01236a450..c297b2d0d 100644 --- a/patches/server/0176-Add-uptime-command.patch +++ b/patches/server/0176-Add-uptime-command.patch @@ -17,7 +17,7 @@ index 5d94b71bd54f99040b76cca74964a32d55339767..0090243f7e1a966534e489cebb88d71d } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6bc6d24022c4f5ea3b7da7074725737fae341fcf..76f31bf31f77c8347b9436779c3701f8a87045e6 100644 +index 874535bf55b76ca2df482a191d66924f8f228c97..e1cabc6af43e4342e8215a774483d5cd0db0aba8 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -315,6 +315,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { // Paper if (!level.isClientSide()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 93e9cbefce01fc905fad95947673bca2cf8d29f2..8e19b5e1611a78c8dbd614797d8949c329f507e6 100644 +index a67cc3a25596e01e12b83ee6269f00a5e2e33324..94ef6f963ecd749b3b69e74559edc0c9cd0e1e45 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -461,6 +461,280 @@ public class PurpurWorldConfig { @@ -247,17 +247,17 @@ index 93e9cbefce01fc905fad95947673bca2cf8d29f2..8e19b5e1611a78c8dbd614797d8949c3 + Map.entry("minecraft:crimson_stem", Map.of("into", "minecraft:stripped_crimson_stem", "drops", new HashMap())), + Map.entry("minecraft:crimson_hyphae", Map.of("into", "minecraft:stripped_crimson_hyphae", "drops", new HashMap()))) + ).forEach((blockId, obj) -> { -+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId)); ++ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId)); + if (block == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.axe.strippables`: " + blockId); return; } + if (!(obj instanceof Map map)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.axe.strippables." + blockId + "`"); return; } + String intoId = (String) map.get("into"); -+ Block into = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(intoId)); ++ Block into = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(intoId)); + if (into == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.axe.strippables." + blockId + ".into`: " + intoId); return; } + Object dropsObj = map.get("drops"); + if (!(dropsObj instanceof Map dropsMap)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.axe.strippables." + blockId + ".drops`"); return; } + Map drops = new HashMap<>(); + dropsMap.forEach((itemId, chance) -> { -+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(itemId.toString())); ++ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(itemId.toString())); + if (item == Items.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid item for `tools.axe.strippables." + blockId + ".drops`: " + itemId); return; } + drops.put(item, (double) chance); + }); @@ -301,17 +301,17 @@ index 93e9cbefce01fc905fad95947673bca2cf8d29f2..8e19b5e1611a78c8dbd614797d8949c3 + Map.entry("minecraft:waxed_weathered_copper_bulb", Map.of("into", "minecraft:weathered_copper_bulb", "drops", new HashMap())), + Map.entry("minecraft:waxed_oxidized_copper_bulb", Map.of("into", "minecraft:oxidized_copper_bulb", "drops", new HashMap()))) + ).forEach((blockId, obj) -> { -+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId)); ++ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId)); + if (block == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.axe.waxables`: " + blockId); return; } + if (!(obj instanceof Map map)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.axe.waxables." + blockId + "`"); return; } + String intoId = (String) map.get("into"); -+ Block into = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(intoId)); ++ Block into = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(intoId)); + if (into == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.axe.waxables." + blockId + ".into`: " + intoId); return; } + Object dropsObj = map.get("drops"); + if (!(dropsObj instanceof Map dropsMap)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.axe.waxables." + blockId + ".drops`"); return; } + Map drops = new HashMap<>(); + dropsMap.forEach((itemId, chance) -> { -+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(itemId.toString())); ++ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(itemId.toString())); + if (item == Items.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid item for `tools.axe.waxables." + blockId + ".drops`: " + itemId); return; } + drops.put(item, (double) chance); + }); @@ -346,17 +346,17 @@ index 93e9cbefce01fc905fad95947673bca2cf8d29f2..8e19b5e1611a78c8dbd614797d8949c3 + Map.entry("minecraft:weathered_copper_bulb", Map.of("into", "minecraft:exposed_copper_bulb", "drops", new HashMap())), + Map.entry("minecraft:oxidized_copper_bulb", Map.of("into", "minecraft:weathered_copper_bulb", "drops", new HashMap()))) + ).forEach((blockId, obj) -> { -+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId)); ++ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId)); + if (block == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.axe.weatherables`: " + blockId); return; } + if (!(obj instanceof Map map)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.axe.weatherables." + blockId + "`"); return; } + String intoId = (String) map.get("into"); -+ Block into = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(intoId)); ++ Block into = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(intoId)); + if (into == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.axe.weatherables." + blockId + ".into`: " + intoId); return; } + Object dropsObj = map.get("drops"); + if (!(dropsObj instanceof Map dropsMap)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.axe.weatherables." + blockId + ".drops`"); return; } + Map drops = new HashMap<>(); + dropsMap.forEach((itemId, chance) -> { -+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(itemId.toString())); ++ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(itemId.toString())); + if (item == Items.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid item for `tools.axe.weatherables." + blockId + ".drops`: " + itemId); return; } + drops.put(item, (double) chance); + }); @@ -369,20 +369,20 @@ index 93e9cbefce01fc905fad95947673bca2cf8d29f2..8e19b5e1611a78c8dbd614797d8949c3 + Map.entry("minecraft:coarse_dirt", Map.of("condition", "air_above", "into", "minecraft:dirt", "drops", new HashMap())), + Map.entry("minecraft:rooted_dirt", Map.of("condition", "always", "into", "minecraft:dirt", "drops", Map.of("minecraft:hanging_roots", 1.0D)))) + ).forEach((blockId, obj) -> { -+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId)); ++ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId)); + if (block == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.hoe.tillables`: " + blockId); return; } + if (!(obj instanceof Map map)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.hoe.tillables." + blockId + "`"); return; } + String conditionId = (String) map.get("condition"); + Tillable.Condition condition = Tillable.Condition.get(conditionId); + if (condition == null) { PurpurConfig.log(Level.SEVERE, "Invalid condition for `tools.hoe.tillables." + blockId + ".condition`: " + conditionId); return; } + String intoId = (String) map.get("into"); -+ Block into = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(intoId)); ++ Block into = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(intoId)); + if (into == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.hoe.tillables." + blockId + ".into`: " + intoId); return; } + Object dropsObj = map.get("drops"); + if (!(dropsObj instanceof Map dropsMap)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.hoe.tillables." + blockId + ".drops`"); return; } + Map drops = new HashMap<>(); + dropsMap.forEach((itemId, chance) -> { -+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(itemId.toString())); ++ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(itemId.toString())); + if (item == Items.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid item for `tools.hoe.tillables." + blockId + ".drops`: " + itemId); return; } + drops.put(item, (double) chance); + }); @@ -396,17 +396,17 @@ index 93e9cbefce01fc905fad95947673bca2cf8d29f2..8e19b5e1611a78c8dbd614797d8949c3 + Map.entry("minecraft:mycelium", Map.of("into", "minecraft:dirt_path", "drops", new HashMap())), + Map.entry("minecraft:rooted_dirt", Map.of("into", "minecraft:dirt_path", "drops", new HashMap()))) + ).forEach((blockId, obj) -> { -+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId)); ++ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId)); + if (block == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.shovel.flattenables`: " + blockId); return; } + if (!(obj instanceof Map map)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.shovel.flattenables." + blockId + "`"); return; } + String intoId = (String) map.get("into"); -+ Block into = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(intoId)); ++ Block into = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(intoId)); + if (into == Blocks.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid block for `tools.shovel.flattenables." + blockId + ".into`: " + intoId); return; } + Object dropsObj = map.get("drops"); + if (!(dropsObj instanceof Map dropsMap)) { PurpurConfig.log(Level.SEVERE, "Invalid yaml for `tools.shovel.flattenables." + blockId + ".drops`"); return; } + Map drops = new HashMap<>(); + dropsMap.forEach((itemId, chance) -> { -+ Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(itemId.toString())); ++ Item item = BuiltInRegistries.ITEM.getValue(ResourceLocation.parse(itemId.toString())); + if (item == Items.AIR) { PurpurConfig.log(Level.SEVERE, "Invalid item for `tools.shovel.flattenables." + blockId + ".drops`: " + itemId); return; } + drops.put(item, (double) chance); + }); diff --git a/patches/server/0180-Customizable-sleeping-actionbar-messages.patch b/patches/server/0180-Customizable-sleeping-actionbar-messages.patch index 2388f5a96..995fed773 100644 --- a/patches/server/0180-Customizable-sleeping-actionbar-messages.patch +++ b/patches/server/0180-Customizable-sleeping-actionbar-messages.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Customizable sleeping actionbar messages diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 8680572c838dbad0ea13afe041e43f58b2deebc2..c70a1ca4ed978df1b54363e966a8344a2fe6f277 100644 +index 8d6a3309b6d20e51b056fbf030f27aa4f92640d7..be11f61e35bccd87ce627c16a520ef8986fdb28e 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1118,11 +1118,27 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -38,7 +38,7 @@ index 8680572c838dbad0ea13afe041e43f58b2deebc2..c70a1ca4ed978df1b54363e966a8344a } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 5d611f5d8ccd635b376bded93bd0278323a585ba..cf922e34824be0d5de3e15c969b7c32f1ed8264a 100644 +index a3074c439b3255d2cfc174dbc7c5b01ef418a602..77f81e323c6aa805ed30ef171d20f05d0597b3d5 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1832,7 +1832,19 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -63,10 +63,10 @@ index 5d611f5d8ccd635b376bded93bd0278323a585ba..cf922e34824be0d5de3e15c969b7c32f ((ServerLevel) this.level()).updateSleepingPlayerList(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index a605b6221f3331093b8eb133e9cb4ac5cd54aaae..0051145e950544ad9bb5aceb2043e98060aa11f2 100644 +index 862e8fbe3d115799874d2eb6475d97d5fa0db0df..8d41d9a8a2b5b7946c13b8c3ce961fea1a2bc728 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -188,6 +188,9 @@ public class PurpurConfig { +@@ -189,6 +189,9 @@ public class PurpurConfig { public static String dontRunWithScissors = "Don't run with scissors!"; public static String uptimeCommandOutput = "Server uptime is "; public static String unverifiedUsername = "default"; @@ -76,7 +76,7 @@ index a605b6221f3331093b8eb133e9cb4ac5cd54aaae..0051145e950544ad9bb5aceb2043e980 private static void messages() { cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway); -@@ -202,6 +205,9 @@ public class PurpurConfig { +@@ -203,6 +206,9 @@ public class PurpurConfig { dontRunWithScissors = getString("settings.messages.dont-run-with-scissors", dontRunWithScissors); uptimeCommandOutput = getString("settings.messages.uptime-command-output", uptimeCommandOutput); unverifiedUsername = getString("settings.messages.unverified-username", unverifiedUsername); diff --git a/patches/server/0183-Player-ridable-in-water-option.patch b/patches/server/0183-Player-ridable-in-water-option.patch index 70137d04e..c1d6703ca 100644 --- a/patches/server/0183-Player-ridable-in-water-option.patch +++ b/patches/server/0183-Player-ridable-in-water-option.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player ridable in water option diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 098256932c2e637726e77bbfcd329f1a329c9969..90998ee1671dc115428102e67a3b07c377133e6e 100644 +index 81f88c838f35860fdb7d7f62ed1b98f5734c766e..d7d5ce7ea223248ebda0a3e4b104baed47378ce1 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -2033,6 +2033,13 @@ public abstract class Player extends LivingEntity { +@@ -2034,6 +2034,13 @@ public abstract class Player extends LivingEntity { return slot != EquipmentSlot.BODY; } @@ -23,7 +23,7 @@ index 098256932c2e637726e77bbfcd329f1a329c9969..90998ee1671dc115428102e67a3b07c3 if (!this.isPassenger() && this.onGround() && !this.isInWater() && !this.isInPowderSnow) { if (this.getShoulderEntityLeft().isEmpty()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c2ba7e7e6d927635979531f6ef08643bcbac5bc0..ccc692652bc26a696abd5debfa825ed9759691a7 100644 +index 6bb5b805a3f35a07607b6766e3ca4a1abe9c3f06..07688502620716592971226105149f55a7489758 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -385,6 +385,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0184-Config-to-disable-Enderman-teleport-on-projectile-hi.patch b/patches/server/0184-Config-to-disable-Enderman-teleport-on-projectile-hi.patch index 99d692a08..53b99cd62 100644 --- a/patches/server/0184-Config-to-disable-Enderman-teleport-on-projectile-hi.patch +++ b/patches/server/0184-Config-to-disable-Enderman-teleport-on-projectile-hi.patch @@ -5,19 +5,19 @@ Subject: [PATCH] Config to disable Enderman teleport on projectile hit 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 27a4b47ad46700b595dd829e6aab558d170c0a8f..1ef3a5c4a99213a87021232d4bc3f8cb3dd101bb 100644 +index 737c3367faee2286984c8e7d161b128d7b6632a5..b8fe9665bed428e8e97d1b8a6527cbefc9b9fbcb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -424,6 +424,7 @@ public class EnderMan extends Monster implements NeutralMob { } else { flag1 = flag && this.hurtWithCleanWater(world, source, (ThrownPotion) source.getDirectEntity(), amount); -+ if (!flag1 && this.level().purpurConfig.endermanIgnoreProjectiles) return super.hurt(source, amount); // Purpur ++ if (!flag1 && world.purpurConfig.endermanIgnoreProjectiles) return super.hurtServer(world, source, amount); // Purpur if (this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.INDIRECT)) { // Paper - EndermanEscapeEvent for (int i = 0; i < 64; ++i) { if (this.teleport()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ccc692652bc26a696abd5debfa825ed9759691a7..e2152fa2977d1761a399fd3b2d1362b2a805b962 100644 +index 07688502620716592971226105149f55a7489758..12da1422d9a5fe4a742856d2cac8e77aa3a59818 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1440,6 +1440,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0185-Add-compass-command.patch b/patches/server/0185-Add-compass-command.patch index e9387ffd8..e55e0add4 100644 --- a/patches/server/0185-Add-compass-command.patch +++ b/patches/server/0185-Add-compass-command.patch @@ -17,7 +17,7 @@ index 0090243f7e1a966534e489cebb88d71d9cbab7bb..d8ee4422a13c7f09b84e9bbe8b57f0c1 if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index cf922e34824be0d5de3e15c969b7c32f1ed8264a..101f2db7d6e7eec85b21c576768224d6c3bba7e7 100644 +index 77f81e323c6aa805ed30ef171d20f05d0597b3d5..9a84a81891dc48fa7c005c13cab0eb6effaa624e 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -325,6 +325,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -44,7 +44,7 @@ index cf922e34824be0d5de3e15c969b7c32f1ed8264a..101f2db7d6e7eec85b21c576768224d6 } private void saveParentVehicle(CompoundTag nbt) { -@@ -3447,5 +3450,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -3461,5 +3464,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public void tpsBar(boolean tpsBar) { this.tpsBar = tpsBar; } @@ -59,10 +59,10 @@ index cf922e34824be0d5de3e15c969b7c32f1ed8264a..101f2db7d6e7eec85b21c576768224d6 // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 0051145e950544ad9bb5aceb2043e98060aa11f2..275078b6b4940fbc771fb1aad0990135d37b51f3 100644 +index 8d41d9a8a2b5b7946c13b8c3ce961fea1a2bc728..e8dc97694f59cfce67e2fe061868a9f080ef3004 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -257,6 +257,11 @@ public class PurpurConfig { +@@ -258,6 +258,11 @@ public class PurpurConfig { public static String commandTPSBarTextColorMedium = ""; public static String commandTPSBarTextColorLow = ""; public static int commandTPSBarTickInterval = 20; @@ -74,7 +74,7 @@ index 0051145e950544ad9bb5aceb2043e98060aa11f2..275078b6b4940fbc771fb1aad0990135 public static boolean commandGamemodeRequiresPermission = false; public static boolean hideHiddenPlayersFromEntitySelector = false; public static String uptimeFormat = ""; -@@ -279,6 +284,13 @@ public class PurpurConfig { +@@ -280,6 +285,13 @@ public class PurpurConfig { commandTPSBarTextColorMedium = getString("settings.command.tpsbar.text-color.medium", commandTPSBarTextColorMedium); commandTPSBarTextColorLow = getString("settings.command.tpsbar.text-color.low", commandTPSBarTextColorLow); commandTPSBarTickInterval = getInt("settings.command.tpsbar.tick-interval", commandTPSBarTickInterval); @@ -89,7 +89,7 @@ index 0051145e950544ad9bb5aceb2043e98060aa11f2..275078b6b4940fbc771fb1aad0990135 hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector); uptimeFormat = getString("settings.command.uptime.format", uptimeFormat); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e2152fa2977d1761a399fd3b2d1362b2a805b962..75d5e129e9fb74181aed9d5bd57f19aea67dcfd2 100644 +index 12da1422d9a5fe4a742856d2cac8e77aa3a59818..a563b33677d3067030d733aa5d66fc3f39eab782 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -213,6 +213,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0193-Conduit-behavior-configuration.patch b/patches/server/0193-Conduit-behavior-configuration.patch index dfb54e5e5..de289d503 100644 --- a/patches/server/0193-Conduit-behavior-configuration.patch +++ b/patches/server/0193-Conduit-behavior-configuration.patch @@ -97,7 +97,7 @@ index c1759aeb3e6ad0e4eb66cba3da1b120dd1dce812..1a91bc2e422db0eba65694ac046f1b36 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c85acd8ceaa2b36a7fcf298076016c682c987871..fc6ebb8ee607b8d54d5b66c119161e59c11b9ea8 100644 +index 0d86c8a35219291c20ad8128a3e9316a4d8ca772..1df14efb834bb2f434e16549c43b48eb2a195b22 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -3011,4 +3011,27 @@ public class PurpurWorldConfig { @@ -120,7 +120,7 @@ index c85acd8ceaa2b36a7fcf298076016c682c987871..fc6ebb8ee607b8d54d5b66c119161e59 + add("minecraft:sea_lantern"); + add("minecraft:dark_prismarine"); + }}).forEach(key -> { -+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(key.toString())); ++ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(key.toString())); + if (!block.defaultBlockState().isAir()) { + conduitBlockList.add(block); + } diff --git a/patches/server/0198-Added-the-ability-to-add-combustible-items.patch b/patches/server/0198-Added-the-ability-to-add-combustible-items.patch index 5ca0b8a73..12e0a9d17 100644 --- a/patches/server/0198-Added-the-ability-to-add-combustible-items.patch +++ b/patches/server/0198-Added-the-ability-to-add-combustible-items.patch @@ -23,38 +23,24 @@ index 1240df9368855f836412b06cf564926a18bfe90d..e559eabed82d2f402908e5b80d150507 } } else if (this.isFuel(itemstack1)) { if (!this.moveItemStackTo(itemstack1, 1, 2, false)) { -diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java -index 91a158ed90b7ce3eac7277fd962682a0226c08ed..658893b06a994c7b927ae40db2c1284d606c35c2 100644 ---- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java -+++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java -@@ -131,6 +131,22 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit - this.recipeType = recipeType; // Paper - cook speed multiplier API - } +diff --git a/src/main/java/net/minecraft/world/level/block/entity/FuelValues.java b/src/main/java/net/minecraft/world/level/block/entity/FuelValues.java +index 61ef08ac941b1e8988d001241780d3a1582f7a2d..2eab5b43ab654966d26424597c1f3baa919e8434 100644 +--- a/src/main/java/net/minecraft/world/level/block/entity/FuelValues.java ++++ b/src/main/java/net/minecraft/world/level/block/entity/FuelValues.java +@@ -17,7 +17,7 @@ import net.minecraft.world.level.ItemLike; + import net.minecraft.world.level.block.Blocks; -+ // Purpur start -+ public static void addFuel(ItemStack itemStack, Integer burnTime) { -+ Map map = Maps.newLinkedHashMap(); -+ map.putAll(getFuel()); -+ map.put(itemStack.getItem(), burnTime); -+ AbstractFurnaceBlockEntity.fuelCache = com.google.common.collect.ImmutableMap.copyOf(map); -+ } -+ -+ public static void removeFuel(ItemStack itemStack) { -+ Map map = Maps.newLinkedHashMap(); -+ map.putAll(getFuel()); -+ map.remove(itemStack.getItem()); -+ AbstractFurnaceBlockEntity.fuelCache = com.google.common.collect.ImmutableMap.copyOf(map); -+ } -+ // Purpur End -+ - // CraftBukkit start - add fields and methods - private int maxStack = MAX_STACK; - public List transaction = new java.util.ArrayList(); + public class FuelValues { +- private final Object2IntSortedMap values; ++ public final Object2IntSortedMap values; // Purpur - private -> public + + FuelValues(Object2IntSortedMap fuelValues) { + this.values = fuelValues; diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index ac0dd26ecaa3d6a4ef0ebd271ec5c328f5320399..4eb332ed95fd0ca196f3712037deb7637bfa4d8b 100644 +index ac0dd26ecaa3d6a4ef0ebd271ec5c328f5320399..6bb44716544e0c3dd3fce8d20e351cb5d4010e4c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1590,6 +1590,19 @@ public final class CraftServer implements Server { +@@ -1590,6 +1590,22 @@ public final class CraftServer implements Server { return true; } @@ -62,12 +48,15 @@ index ac0dd26ecaa3d6a4ef0ebd271ec5c328f5320399..4eb332ed95fd0ca196f3712037deb763 + @Override + public void addFuel(org.bukkit.Material material, int burnTime) { + Preconditions.checkArgument(burnTime > 0, "BurnTime must be greater than 0"); -+ net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity.addFuel(net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material)), burnTime); ++ ++ net.minecraft.world.item.ItemStack itemStack = net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material)); ++ MinecraftServer.getServer().fuelValues().values.put(itemStack.getItem(), burnTime); + } + + @Override + public void removeFuel(org.bukkit.Material material) { -+ net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity.removeFuel(net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material))); ++ net.minecraft.world.item.ItemStack itemStack = net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material)); ++ MinecraftServer.getServer().fuelValues().values.keySet().removeIf(itemStack::is); + } + // Purpur End + diff --git a/patches/server/0202-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/server/0202-Dolphins-naturally-aggressive-to-players-chance.patch index c515c4b82..650f62a0c 100644 --- a/patches/server/0202-Dolphins-naturally-aggressive-to-players-chance.patch +++ b/patches/server/0202-Dolphins-naturally-aggressive-to-players-chance.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Dolphins naturally aggressive to players chance diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -index bcc6435c177189aa59a3fbe67795ae5092685133..515fa6120554d9b2aad32257c48577e6458cd2ff 100644 +index bcc6435c177189aa59a3fbe67795ae5092685133..fad0b8157a9c30a0e9b35fe32b6a9f2e8a6dd43e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java @@ -85,6 +85,7 @@ public class Dolphin extends AgeableWaterCreature { @@ -43,12 +43,12 @@ index bcc6435c177189aa59a3fbe67795ae5092685133..515fa6120554d9b2aad32257c48577e6 this.goalSelector.addGoal(9, new AvoidEntityGoal<>(this, Guardian.class, 8.0F, 1.0D, 1.0D)); this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Guardian.class})).setAlertOthers()); -+ this.targetSelector.addGoal(2, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, target -> isNaturallyAggressiveToPlayers)); // Purpur ++ this.targetSelector.addGoal(2, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (ignored, ignored2) -> isNaturallyAggressiveToPlayers)); // Purpur } public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 025982aac35116320ff41203645e606504640940..3f10fe595960a69ed372f80c1b28acd9e956516b 100644 +index 7f9b948191a2160b8e1b11ff04468f47bf1a498e..93be2146696ec724cca8017708265953ee4f25b3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1343,6 +1343,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0203-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0203-Cows-naturally-aggressive-to-players-chance.patch index 88e47055e..4a1b0df2b 100644 --- a/patches/server/0203-Cows-naturally-aggressive-to-players-chance.patch +++ b/patches/server/0203-Cows-naturally-aggressive-to-players-chance.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Cows naturally aggressive to players chance diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index 9c3bdf70c70328df4bfc13cb09aeef4b190cd77e..234785a387f445b3e40978978a647140b3490072 100644 +index 4ad3571403ee8044d17f53987bd47b6c43d42f0e..380bd41336d8d24bffd4e10885e46c95e5bb71fd 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -37,6 +37,7 @@ import org.bukkit.event.player.PlayerBucketFillEvent; @@ -29,7 +29,7 @@ index 9c3bdf70c70328df4bfc13cb09aeef4b190cd77e..234785a387f445b3e40978978a647140 } + @Override -+ public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.MobSpawnType spawnReason, net.minecraft.world.entity.SpawnGroupData entityData) { ++ public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.EntitySpawnReason spawnReason, net.minecraft.world.entity.SpawnGroupData entityData) { + this.isNaturallyAggressiveToPlayers = world.getLevel().purpurConfig.cowNaturallyAggressiveToPlayersChance > 0.0D && random.nextDouble() <= world.getLevel().purpurConfig.cowNaturallyAggressiveToPlayersChance; + return super.finalizeSpawn(world, difficulty, spawnReason, entityData); + } @@ -47,7 +47,7 @@ index 9c3bdf70c70328df4bfc13cb09aeef4b190cd77e..234785a387f445b3e40978978a647140 this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); -+ this.targetSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, target -> isNaturallyAggressiveToPlayers)); // Purpur ++ this.targetSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (ignored, ignored2) -> isNaturallyAggressiveToPlayers)); // Purpur } @Override @@ -61,7 +61,7 @@ index 9c3bdf70c70328df4bfc13cb09aeef4b190cd77e..234785a387f445b3e40978978a647140 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3f10fe595960a69ed372f80c1b28acd9e956516b..09465c479f1074d76be88713f727c648be61bf06 100644 +index 93be2146696ec724cca8017708265953ee4f25b3..bbb0cfa4bbb36c6833785633ee6e616d6355894c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1288,7 +1288,14 @@ public class PurpurWorldConfig { diff --git a/patches/server/0206-Config-for-grindstones.patch b/patches/server/0206-Config-for-grindstones.patch index 8cb61951c..ce708ec80 100644 --- a/patches/server/0206-Config-for-grindstones.patch +++ b/patches/server/0206-Config-for-grindstones.patch @@ -123,10 +123,10 @@ index 5687f492fc76f699e2a388790ca5380d9b8c8d0a..cc229f3e1e9527cbedf929e326731943 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 275078b6b4940fbc771fb1aad0990135d37b51f3..9c5348fd18c2943ce39346dd19fa194d9c31d7ea 100644 +index e8dc97694f59cfce67e2fe061868a9f080ef3004..a1e1aad7a1b845e2efd381da0221559443808cf7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -311,6 +311,9 @@ public class PurpurConfig { +@@ -312,6 +312,9 @@ public class PurpurConfig { public static int beeInsideBeeHive = 3; public static boolean anvilCumulativeCost = true; public static int lightningRodRange = 128; @@ -136,7 +136,7 @@ index 275078b6b4940fbc771fb1aad0990135d37b51f3..9c5348fd18c2943ce39346dd19fa194d private static void blockSettings() { if (version < 3) { boolean oldValue = getBoolean("settings.barrel.packed-barrels", true); -@@ -345,6 +348,21 @@ public class PurpurConfig { +@@ -346,6 +349,21 @@ public class PurpurConfig { beeInsideBeeHive = getInt("settings.blocks.beehive.max-bees-inside", beeInsideBeeHive); anvilCumulativeCost = getBoolean("settings.blocks.anvil.cumulative-cost", anvilCumulativeCost); lightningRodRange = getInt("settings.blocks.lightning_rod.range", lightningRodRange); @@ -148,8 +148,8 @@ index 275078b6b4940fbc771fb1aad0990135d37b51f3..9c5348fd18c2943ce39346dd19fa194d + defaultCurses.clear(); + } + getList("settings.blocks.grindstone.ignored-enchants", defaultCurses).forEach(key -> { -+ Registry registry = MinecraftServer.getServer().registryAccess().registryOrThrow(Registries.ENCHANTMENT); -+ Enchantment enchantment = registry.get(ResourceLocation.parse(key.toString())); ++ Registry registry = MinecraftServer.getServer().registryAccess().lookupOrThrow(Registries.ENCHANTMENT); ++ Enchantment enchantment = registry.getValue(ResourceLocation.parse(key.toString())); + if (enchantment == null) return; + grindstoneIgnoredEnchants.add(enchantment); + }); diff --git a/patches/server/0207-UPnP-Port-Forwarding.patch b/patches/server/0207-UPnP-Port-Forwarding.patch index c4366707c..772874b81 100644 --- a/patches/server/0207-UPnP-Port-Forwarding.patch +++ b/patches/server/0207-UPnP-Port-Forwarding.patch @@ -68,10 +68,10 @@ index de85340fe0a0e057c527cc1fa91ae6bec558228a..e73c07257395198e123019811b20fec6 // CraftBukkit start // this.setPlayerList(new DedicatedPlayerList(this, this.registries(), this.playerDataStorage)); // Spigot - moved up diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 9c5348fd18c2943ce39346dd19fa194d9c31d7ea..ce8181b0527406a54569779d453b227f6b693f0d 100644 +index a1e1aad7a1b845e2efd381da0221559443808cf7..d8930c57a867a63a4a8149136eb8a7a9ab96e11b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -421,4 +421,9 @@ public class PurpurConfig { +@@ -422,4 +422,9 @@ public class PurpurConfig { private static void tpsCatchup() { tpsCatchup = getBoolean("settings.tps-catchup", tpsCatchup); } diff --git a/patches/server/0213-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch b/patches/server/0213-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch index 6170992ab..ff140d74f 100644 --- a/patches/server/0213-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch +++ b/patches/server/0213-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch @@ -135,10 +135,10 @@ index 3dec5a082606ee35a8c8d7f746480262d6a189c5..b2f6ccae9576c176263e51a232e17a08 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index ce8181b0527406a54569779d453b227f6b693f0d..0d899125bd89b23d6b5f1fa6bdb25d3b76a62783 100644 +index d8930c57a867a63a4a8149136eb8a7a9ab96e11b..4aac9004892030772eb4791209d3de71e9e480cc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -314,6 +314,10 @@ public class PurpurConfig { +@@ -315,6 +315,10 @@ public class PurpurConfig { public static Set grindstoneIgnoredEnchants = new HashSet<>(); public static boolean grindstoneRemoveAttributes = false; public static boolean grindstoneRemoveDisplay = false; @@ -149,7 +149,7 @@ index ce8181b0527406a54569779d453b227f6b693f0d..0d899125bd89b23d6b5f1fa6bdb25d3b private static void blockSettings() { if (version < 3) { boolean oldValue = getBoolean("settings.barrel.packed-barrels", true); -@@ -363,6 +367,30 @@ public class PurpurConfig { +@@ -364,6 +368,30 @@ public class PurpurConfig { }); grindstoneRemoveAttributes = getBoolean("settings.blocks.grindstone.remove-attributes", grindstoneRemoveAttributes); grindstoneRemoveDisplay = getBoolean("settings.blocks.grindstone.remove-name-and-lore", grindstoneRemoveDisplay); diff --git a/patches/server/0219-Configurable-valid-characters-for-usernames.patch b/patches/server/0219-Configurable-valid-characters-for-usernames.patch index b01378668..4aef457d7 100644 --- a/patches/server/0219-Configurable-valid-characters-for-usernames.patch +++ b/patches/server/0219-Configurable-valid-characters-for-usernames.patch @@ -17,10 +17,10 @@ index 6c33002dc8bbb3759c3156302ab7d1f26ce5e8ee..c89fc375aff548a2b03eaf4da3b6a075 return false; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 0d899125bd89b23d6b5f1fa6bdb25d3b76a62783..7ad309e81ec61a6f2553e9ffeb9a986f4d569b37 100644 +index 4aac9004892030772eb4791209d3de71e9e480cc..b3eba9f3d15ff94dd9044e135f5b304916e17c72 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -454,4 +454,11 @@ public class PurpurConfig { +@@ -455,4 +455,11 @@ public class PurpurConfig { private static void networkSettings() { useUPnP = getBoolean("settings.network.upnp-port-forwarding", useUPnP); } diff --git a/patches/server/0221-Give-bee-counts-in-beehives-to-Purpur-clients.patch b/patches/server/0221-Give-bee-counts-in-beehives-to-Purpur-clients.patch index 955e2c753..08c23d561 100644 --- a/patches/server/0221-Give-bee-counts-in-beehives-to-Purpur-clients.patch +++ b/patches/server/0221-Give-bee-counts-in-beehives-to-Purpur-clients.patch @@ -29,10 +29,10 @@ index e73c07257395198e123019811b20fec6adf8f0ef..b18ed9645dfda3a7a12500533394fcd1 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 7ad309e81ec61a6f2553e9ffeb9a986f4d569b37..357b5080b6d3651c8f913081de283576a0a17cec 100644 +index b3eba9f3d15ff94dd9044e135f5b304916e17c72..c677345c6d632aa92c3b6c395d3b5db11f933d8f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -434,6 +434,11 @@ public class PurpurConfig { +@@ -435,6 +435,11 @@ public class PurpurConfig { allowWaterPlacementInTheEnd = getBoolean("settings.allow-water-placement-in-the-end", allowWaterPlacementInTheEnd); } diff --git a/patches/server/0223-Configurable-player-pickup-exp-delay.patch b/patches/server/0223-Configurable-player-pickup-exp-delay.patch index 171ff0a2f..ccbd614aa 100644 --- a/patches/server/0223-Configurable-player-pickup-exp-delay.patch +++ b/patches/server/0223-Configurable-player-pickup-exp-delay.patch @@ -22,10 +22,10 @@ index 6db9a3ea4c0dc1f0629bc8bf6466aeab00c498f6..32a0db7e8f974712bd8a05f16f3bd48a int i = this.repairPlayerItems(entityplayer, this.value); diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 90998ee1671dc115428102e67a3b07c377133e6e..05d30d2ba3ea7daebe40ddfaa9ce38d99f943038 100644 +index d7d5ce7ea223248ebda0a3e4b104baed47378ce1..c1d068fa99ec0fd5685bbb627a775e4d1587feab 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -661,7 +661,7 @@ public abstract class Player extends LivingEntity { +@@ -662,7 +662,7 @@ public abstract class Player extends LivingEntity { while (iterator.hasNext()) { Entity entity = (Entity) iterator.next(); @@ -35,7 +35,7 @@ index 90998ee1671dc115428102e67a3b07c377133e6e..05d30d2ba3ea7daebe40ddfaa9ce38d9 } else if (!entity.isRemoved()) { this.touch(entity); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b3382f2383f546ef53b4dd4c2187f39d8f027c01..74b5d04cf6880f30f8f36ea0414e0ae5542c34b7 100644 +index 4c54ef064e3284830a14a8ff56be56e2170b7b3d..d7f8bf20eba76b8eea60e6483308e8b76430dd56 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -419,6 +419,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0226-Max-joins-per-second.patch b/patches/server/0226-Max-joins-per-second.patch index 0cc91e1bc..838dba848 100644 --- a/patches/server/0226-Max-joins-per-second.patch +++ b/patches/server/0226-Max-joins-per-second.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Max joins per second When this option is set to true the `max-joins-per-tick` setting in paper.yml will be used per second instead of per tick diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index fff8d15d44613a075b9793c2a41520212166eb3b..4b0e41b5e26ecf632dff512aac6660fff5264072 100644 +index 4a8356a714ed50d4a32bcf046a2e16491bef014b..56e47c5709c765943407d2065b25bd512d1f9388 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -617,11 +617,20 @@ public class Connection extends SimpleChannelInboundHandler> { @@ -31,10 +31,10 @@ index fff8d15d44613a075b9793c2a41520212166eb3b..4b0e41b5e26ecf632dff512aac6660ff } // Paper end - Buffer joins to world diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 357b5080b6d3651c8f913081de283576a0a17cec..f8179f8b7a57a66705d51f30ab528307e3a84b32 100644 +index c677345c6d632aa92c3b6c395d3b5db11f933d8f..1763db5af790f590e047ddccd8ecc3220fb361ed 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -456,8 +456,10 @@ public class PurpurConfig { +@@ -457,8 +457,10 @@ public class PurpurConfig { } public static boolean useUPnP = false; diff --git a/patches/server/0230-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch b/patches/server/0230-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch index d39f977e6..be2f10f95 100644 --- a/patches/server/0230-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch +++ b/patches/server/0230-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch @@ -5,7 +5,7 @@ Subject: [PATCH] MC-238526 - Fix spawner not spawning water animals correctly diff --git a/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java b/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java -index 8c4532a250f8679d729a35c17e9b5bd339264450..16518ade3b0c355e6002801d88eb92cc82dc7b56 100644 +index 8c4532a250f8679d729a35c17e9b5bd339264450..2b8336bd88641cfb29e94c8f01abfbdb39938bf3 100644 --- a/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java +++ b/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java @@ -74,6 +74,6 @@ public abstract class WaterAnimal extends PathfinderMob { @@ -13,11 +13,11 @@ index 8c4532a250f8679d729a35c17e9b5bd339264450..16518ade3b0c355e6002801d88eb92cc j = world.getMinecraftWorld().paperConfig().entities.spawning.wateranimalSpawnHeight.minimum.or(j); // Paper end - Make water animal spawn height configurable - return pos.getY() >= j && pos.getY() <= i && world.getFluidState(pos.below()).is(FluidTags.WATER) && world.getBlockState(pos.above()).is(Blocks.WATER); -+ return ((reason == MobSpawnType.SPAWNER && world.getMinecraftWorld().purpurConfig.spawnerFixMC238526) || (pos.getY() >= j && pos.getY() <= i)) && world.getFluidState(pos.below()).is(FluidTags.WATER) && world.getBlockState(pos.above()).is(Blocks.WATER); // Purpur ++ return ((reason == EntitySpawnReason.SPAWNER && world.getMinecraftWorld().purpurConfig.spawnerFixMC238526) || (pos.getY() >= j && pos.getY() <= i)) && world.getFluidState(pos.below()).is(FluidTags.WATER) && world.getBlockState(pos.above()).is(Blocks.WATER); // Purpur } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ac3042705a8ef4154b6feac9115bac19f7fdead3..1426f0f6246c4e57a66e25365609c36991a72059 100644 +index a2c202fdc7cc0352e940d08751e958c7516bff75..1a4a756943a1ba888b85b8896db0942dce19ab8d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1019,8 +1019,10 @@ public class PurpurWorldConfig { diff --git a/patches/server/0232-Anvil-repair-damage-options.patch b/patches/server/0232-Anvil-repair-damage-options.patch index ac2b090ad..1de4d3502 100644 --- a/patches/server/0232-Anvil-repair-damage-options.patch +++ b/patches/server/0232-Anvil-repair-damage-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Anvil repair/damage options diff --git a/src/main/java/net/minecraft/world/level/block/AnvilBlock.java b/src/main/java/net/minecraft/world/level/block/AnvilBlock.java -index 50c907c962f936d2035bb7550750cdbd220b29c2..7f07a38553325056ab4ae65895c8c5c12cb41a1f 100644 +index 50c907c962f936d2035bb7550750cdbd220b29c2..f9a2d2d4f798efa0d691996ec5ff7fe00260b36c 100644 --- a/src/main/java/net/minecraft/world/level/block/AnvilBlock.java +++ b/src/main/java/net/minecraft/world/level/block/AnvilBlock.java @@ -59,6 +59,53 @@ public class AnvilBlock extends FallingBlock { @@ -14,12 +14,12 @@ index 50c907c962f936d2035bb7550750cdbd220b29c2..7f07a38553325056ab4ae65895c8c5c1 + // Purpur start - repairable/damageable anvils + @Override -+ protected net.minecraft.world.ItemInteractionResult useItemOn(final net.minecraft.world.item.ItemStack stack, final BlockState state, final Level world, final BlockPos pos, final Player player, final net.minecraft.world.InteractionHand hand, final BlockHitResult hit) { ++ protected net.minecraft.world.InteractionResult useItemOn(final net.minecraft.world.item.ItemStack stack, final BlockState state, final Level world, final BlockPos pos, final Player player, final net.minecraft.world.InteractionHand hand, final BlockHitResult hit) { + if (world.purpurConfig.anvilRepairIngotsAmount > 0 && stack.is(net.minecraft.world.item.Items.IRON_INGOT)) { + if (stack.getCount() < world.purpurConfig.anvilRepairIngotsAmount) { + // not enough iron ingots, play "error" sound and consume + world.playSound(null, pos, net.minecraft.sounds.SoundEvents.ANVIL_HIT, net.minecraft.sounds.SoundSource.BLOCKS, 1.0F, 1.0F); -+ return net.minecraft.world.ItemInteractionResult.CONSUME; ++ return net.minecraft.world.InteractionResult.CONSUME; + } + if (state.is(Blocks.DAMAGED_ANVIL)) { + world.setBlock(pos, Blocks.CHIPPED_ANVIL.defaultBlockState().setValue(FACING, state.getValue(FACING)), 3); @@ -28,19 +28,19 @@ index 50c907c962f936d2035bb7550750cdbd220b29c2..7f07a38553325056ab4ae65895c8c5c1 + } else if (state.is(Blocks.ANVIL)) { + // anvil is already fully repaired, play "error" sound and consume + world.playSound(null, pos, net.minecraft.sounds.SoundEvents.ANVIL_HIT, net.minecraft.sounds.SoundSource.BLOCKS, 1.0F, 1.0F); -+ return net.minecraft.world.ItemInteractionResult.CONSUME; ++ return net.minecraft.world.InteractionResult.CONSUME; + } + if (!player.getAbilities().instabuild) { + stack.shrink(world.purpurConfig.anvilRepairIngotsAmount); + } + world.playSound(null, pos, net.minecraft.sounds.SoundEvents.ANVIL_PLACE, net.minecraft.sounds.SoundSource.BLOCKS, 1.0F, 1.0F); -+ return net.minecraft.world.ItemInteractionResult.CONSUME; ++ return net.minecraft.world.InteractionResult.CONSUME; + } + if (world.purpurConfig.anvilDamageObsidianAmount > 0 && stack.is(net.minecraft.world.item.Items.OBSIDIAN)) { + if (stack.getCount() < world.purpurConfig.anvilDamageObsidianAmount) { + // not enough obsidian, play "error" sound and consume + world.playSound(null, pos, net.minecraft.sounds.SoundEvents.ANVIL_HIT, net.minecraft.sounds.SoundSource.BLOCKS, 1.0F, 1.0F); -+ return net.minecraft.world.ItemInteractionResult.CONSUME; ++ return net.minecraft.world.InteractionResult.CONSUME; + } + if (state.is(Blocks.DAMAGED_ANVIL)) { + world.destroyBlock(pos, false); @@ -53,9 +53,9 @@ index 50c907c962f936d2035bb7550750cdbd220b29c2..7f07a38553325056ab4ae65895c8c5c1 + stack.shrink(world.purpurConfig.anvilDamageObsidianAmount); + } + world.playSound(null, pos, net.minecraft.sounds.SoundEvents.ANVIL_LAND, net.minecraft.sounds.SoundSource.BLOCKS, 1.0F, 1.0F); -+ return net.minecraft.world.ItemInteractionResult.CONSUME; ++ return net.minecraft.world.InteractionResult.CONSUME; + } -+ return net.minecraft.world.ItemInteractionResult.PASS_TO_DEFAULT_BLOCK_INTERACTION; ++ return net.minecraft.world.InteractionResult.TRY_WITH_EMPTY_HAND; + } + // Purpur end + @@ -63,7 +63,7 @@ index 50c907c962f936d2035bb7550750cdbd220b29c2..7f07a38553325056ab4ae65895c8c5c1 protected InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult hit) { if (!world.isClientSide) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index bd48ba4acf41ec77f542ca7e8dfe6280bb2fbed1..9f4f3d94e6790b29cfda030780d95caf48eee0e5 100644 +index 9fd228060bd31deee69c0b76aba11883140a7d0b..71d8d33d31584aa9bb0d3b0c868d1b2028ba1e18 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -786,9 +786,13 @@ public class PurpurWorldConfig { diff --git a/patches/server/0234-Add-toggle-for-enchant-level-clamping.patch b/patches/server/0234-Add-toggle-for-enchant-level-clamping.patch index 4322b79c6..9c5c2a13c 100644 --- a/patches/server/0234-Add-toggle-for-enchant-level-clamping.patch +++ b/patches/server/0234-Add-toggle-for-enchant-level-clamping.patch @@ -59,10 +59,10 @@ index cfc6a657cae92c68868a76c1b7b1febe2a16e9f4..a12c08da793139e39dc11c213c94796b } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index f8179f8b7a57a66705d51f30ab528307e3a84b32..5b509058cda0e0b5f923f669b5dd3d9e67e3e148 100644 +index 1763db5af790f590e047ddccd8ecc3220fb361ed..2090ecfebe8bc164239d198c1c50b134c7bc60c5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -398,6 +398,7 @@ public class PurpurConfig { +@@ -399,6 +399,7 @@ public class PurpurConfig { public static boolean allowHigherEnchantsLevels = false; public static boolean allowUnsafeEnchantCommand = false; public static boolean replaceIncompatibleEnchants = false; @@ -70,7 +70,7 @@ index f8179f8b7a57a66705d51f30ab528307e3a84b32..5b509058cda0e0b5f923f669b5dd3d9e private static void enchantmentSettings() { if (version < 30) { boolean oldValue = getBoolean("settings.enchantment.allow-unsafe-enchants", false); -@@ -421,6 +422,7 @@ public class PurpurConfig { +@@ -422,6 +423,7 @@ public class PurpurConfig { allowHigherEnchantsLevels = getBoolean("settings.enchantment.anvil.allow-higher-enchants-levels", allowHigherEnchantsLevels); allowUnsafeEnchantCommand = getBoolean("settings.enchantment.allow-unsafe-enchant-command", allowUnsafeEnchantCommand); replaceIncompatibleEnchants = getBoolean("settings.enchantment.anvil.replace-incompatible-enchants", replaceIncompatibleEnchants); diff --git a/patches/server/0237-Stonecutter-damage.patch b/patches/server/0237-Stonecutter-damage.patch index cca84b3d3..c097758f7 100644 --- a/patches/server/0237-Stonecutter-damage.patch +++ b/patches/server/0237-Stonecutter-damage.patch @@ -128,10 +128,10 @@ index c9f5047bfa48c12a9090cb8da4bb9045e38e8f89..483b2fa71df29e064e35694a6017286b } else if (source.is(DamageTypes.HOT_FLOOR)) { cause = DamageCause.HOT_FLOOR; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 5b509058cda0e0b5f923f669b5dd3d9e67e3e148..5475a8c622c4090e994f87f6a28febdccecbf973 100644 +index 2090ecfebe8bc164239d198c1c50b134c7bc60c5..dba6a69891f50ba057187a8138ff227ad7501eaa 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -211,8 +211,10 @@ public class PurpurConfig { +@@ -212,8 +212,10 @@ public class PurpurConfig { } public static String deathMsgRunWithScissors = " slipped and fell on their shears"; @@ -143,7 +143,7 @@ index 5b509058cda0e0b5f923f669b5dd3d9e67e3e148..5475a8c622c4090e994f87f6a28febdc public static boolean advancementOnlyBroadcastToAffectedPlayer = false; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index cc6b3d249cd63a4cf9f1888f21f251199cdccde4..c1b269ebd90be16888f7fcace9efc0e0c08a4448 100644 +index 369e63acfae5cc5fe1981b4750c4272ccec8f595..7218fa676a3f15b04282ad85098d4131c8464b78 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1042,6 +1042,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0240-Skeletons-eat-wither-roses.patch b/patches/server/0240-Skeletons-eat-wither-roses.patch index c6806fd30..03eb14920 100644 --- a/patches/server/0240-Skeletons-eat-wither-roses.patch +++ b/patches/server/0240-Skeletons-eat-wither-roses.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Skeletons eat wither roses diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java -index 61b5f27c1125ed1b183dd3b86b44a10b7098f91c..b1158967400815b90687dddcc482846c70e03658 100644 +index 61b5f27c1125ed1b183dd3b86b44a10b7098f91c..3cbe4c1ed514936a00e0181cb1e647fbb58032bb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java @@ -17,6 +17,16 @@ import net.minecraft.world.item.Items; @@ -52,7 +52,7 @@ index 61b5f27c1125ed1b183dd3b86b44a10b7098f91c..b1158967400815b90687dddcc482846c + return InteractionResult.CONSUME; + } + -+ WitherSkeleton skeleton = EntityType.WITHER_SKELETON.create(level()); ++ WitherSkeleton skeleton = EntityType.WITHER_SKELETON.create(level(), net.minecraft.world.entity.EntitySpawnReason.CONVERSION); + if (skeleton == null) { + return InteractionResult.PASS; + } @@ -90,7 +90,7 @@ index 61b5f27c1125ed1b183dd3b86b44a10b7098f91c..b1158967400815b90687dddcc482846c + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ac183cb85490adc2312f5ec674a515826e540ae4..a7f750506e03cae0e965dfd874e92d3157576fb0 100644 +index 823be371f4678bfe324db1a261c27361f22a7108..4dd70114e6d1b17cfddbeedf5f16751bfc36c8ef 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2565,6 +2565,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0242-Option-to-disable-kick-for-out-of-order-chat.patch b/patches/server/0242-Option-to-disable-kick-for-out-of-order-chat.patch index 21aee3a9f..9e92ecb28 100644 --- a/patches/server/0242-Option-to-disable-kick-for-out-of-order-chat.patch +++ b/patches/server/0242-Option-to-disable-kick-for-out-of-order-chat.patch @@ -18,10 +18,10 @@ index 300929a406905f5ff1ede664d5b99fb0938d4d2e..a4e9ac0e07f08e0b6aa682e8c1587d9c throw new SignedMessageChain.DecodeException(SignedMessageChain.DecodeException.OUT_OF_ORDER_CHAT, org.bukkit.event.player.PlayerKickEvent.Cause.OUT_OF_ORDER_CHAT); // Paper - kick event causes } else { diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 5475a8c622c4090e994f87f6a28febdccecbf973..afb165af34f365210fdfa6542cf7a81435096738 100644 +index dba6a69891f50ba057187a8138ff227ad7501eaa..32e44e47cc6b5e6ed6e13f41dd8b4ba29459d7f0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -461,9 +461,11 @@ public class PurpurConfig { +@@ -462,9 +462,11 @@ public class PurpurConfig { public static boolean useUPnP = false; public static boolean maxJoinsPerSecond = false; diff --git a/patches/server/0248-Remove-Mojang-Profiler.patch b/patches/server/0248-Remove-Mojang-Profiler.patch index 920e2db3f..fad87a143 100644 --- a/patches/server/0248-Remove-Mojang-Profiler.patch +++ b/patches/server/0248-Remove-Mojang-Profiler.patch @@ -660,10 +660,10 @@ index 96f9d18eb22380cccd35b486713583d6dfa46646..1961b18a2b5e5985181f0ca930ab14ba } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 47ae7af2a0ff8ab4181cf447c58410ccb0f37371..b3e51add828d46fc182f6ffccc7e9e8df2b5ee36 100644 +index 47ae7af2a0ff8ab4181cf447c58410ccb0f37371..3083f3e0a17efc3a1dc7f50493ec646d9884cbd8 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -714,16 +714,16 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -714,18 +714,18 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe } public void tick(BooleanSupplier shouldKeepTicking) { @@ -681,8 +681,11 @@ index 47ae7af2a0ff8ab4181cf447c58410ccb0f37371..b3e51add828d46fc182f6ffccc7e9e8d - gameprofilerfiller.popPush("weather"); + //gameprofilerfiller.popPush("weather"); // Purpur this.advanceWeatherCycle(); - gameprofilerfiller.pop(); +- gameprofilerfiller.pop(); ++ //gameprofilerfiller.pop(); // Purpur } + + int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); @@ -756,30 +756,30 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe this.tickTime(); } @@ -875,7 +878,7 @@ index 47ae7af2a0ff8ab4181cf447c58410ccb0f37371..b3e51add828d46fc182f6ffccc7e9e8d while (iterator.hasNext()) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 3f804ddb25aa03bdd964d390a1a1aab4d09abfde..5b4edb2386bb624d3633385106472070868acccc 100644 +index ce8b5dd01359344300d1a1a06e8207a768a846ce..2518ad5af51b944393e53508010a18df111c5c83 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1663,15 +1663,15 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -1180,7 +1183,7 @@ index bc5c8879befe849ce81becf5e3fba6757b01cb70..ce81d6bd87f688a24003f2fbf6d5010a } } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 5b1b34dbc2841ddf6789c47b6e055ef6647a2ba9..e5eadc68c1e1b0fe2b7d638d2630ab22c332b381 100644 +index cb123001b08c0772bacce87d022d236bc7eaa1d1..6474b375c05eebc1fa3468f2963770dfff8dec5c 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -946,9 +946,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -1245,6 +1248,15 @@ index 5b1b34dbc2841ddf6789c47b6e055ef6647a2ba9..e5eadc68c1e1b0fe2b7d638d2630ab22 } else { if (this.horizontalCollision) { Vec3 vec3d2 = this.getDeltaMovement(); +@@ -1347,7 +1347,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + float f = this.getBlockSpeedFactor(); + + this.setDeltaMovement(this.getDeltaMovement().multiply((double) f, 1.0D, (double) f)); +- gameprofilerfiller.pop(); ++ //gameprofilerfiller.pop(); // Purpur + } + } + // Paper start - detailed watchdog information @@ -3512,9 +3512,9 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.processPortalCooldown(); if (this.portalProcess != null) { @@ -1282,6 +1294,15 @@ index 5b1b34dbc2841ddf6789c47b6e055ef6647a2ba9..e5eadc68c1e1b0fe2b7d638d2630ab22 return null; } else { // Paper start - Fix item duplication and teleport issues +@@ -4108,7 +4108,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + + world.resetEmptyTime(); + teleportTarget.postTeleportTransition().onTransition(entity); +- gameprofilerfiller.pop(); ++ //gameprofilerfiller.pop(); // Purpur + return entity; + } + } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java index 60b0cf7cd5e4bcbe882590b79a70dafb23e6772f..38a7bde1bc2836352a62dfe1dd3b9a60877c20e2 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1403,7 +1424,7 @@ index 60b0cf7cd5e4bcbe882590b79a70dafb23e6772f..38a7bde1bc2836352a62dfe1dd3b9a60 // Purpur start if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index da1aefc4cdf2bca8e91c6c7833c24f3f0923f552..1fd6990fdf16283aab956c36daaafeb64aa5358b 100644 +index 7978e307e7bb7f80993c49dcc5ada319a907c648..ff9d23aef4658922692b43a859bd83632fe23612 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -371,15 +371,15 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab diff --git a/patches/server/0251-Debug-Marker-API.patch b/patches/server/0251-Debug-Marker-API.patch index ef87df975..a664af346 100644 --- a/patches/server/0251-Debug-Marker-API.patch +++ b/patches/server/0251-Debug-Marker-API.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Debug Marker API diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 4eb332ed95fd0ca196f3712037deb7637bfa4d8b..da3c89bc037c42268987c5923ca58c93adace80d 100644 +index 6bb44716544e0c3dd3fce8d20e351cb5d4010e4c..8e1bf5e86ee517408b1fad6a23f666d897de77ee 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1601,6 +1601,42 @@ public final class CraftServer implements Server { - public void removeFuel(org.bukkit.Material material) { - net.minecraft.world.level.block.entity.AbstractFurnaceBlockEntity.removeFuel(net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material))); +@@ -1604,6 +1604,42 @@ public final class CraftServer implements Server { + net.minecraft.world.item.ItemStack itemStack = net.minecraft.world.item.ItemStack.fromBukkitCopy(new ItemStack(material)); + MinecraftServer.getServer().fuelValues().values.keySet().removeIf(itemStack::is); } + + @Override diff --git a/patches/server/0255-Implement-ram-and-rambar-commands.patch b/patches/server/0255-Implement-ram-and-rambar-commands.patch index aa9527ab1..fdc889116 100644 --- a/patches/server/0255-Implement-ram-and-rambar-commands.patch +++ b/patches/server/0255-Implement-ram-and-rambar-commands.patch @@ -18,7 +18,7 @@ index 0ba926b6ff0bd54159765cc7f37d1753ded89dee..cbbddb924f46203bd600b838fc22902c if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 5b4edb2386bb624d3633385106472070868acccc..b7ba01f174aa8a4c43684866f62fbeadbdf24a2f 100644 +index 2518ad5af51b944393e53508010a18df111c5c83..f0414dd16a97461f65c2965c035da811a0d65c01 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -326,6 +326,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -45,7 +45,7 @@ index 5b4edb2386bb624d3633385106472070868acccc..b7ba01f174aa8a4c43684866f62fbead nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur nbt.putBoolean("Purpur.CompassBar", this.compassBar); // Purpur } -@@ -3459,5 +3462,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -3473,5 +3476,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public void compassBar(boolean compassBar) { this.compassBar = compassBar; } @@ -60,10 +60,10 @@ index 5b4edb2386bb624d3633385106472070868acccc..b7ba01f174aa8a4c43684866f62fbead // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index afb165af34f365210fdfa6542cf7a81435096738..7ce9115c4a90e22befdd6b82c2e6588f2be3a07c 100644 +index 32e44e47cc6b5e6ed6e13f41dd8b4ba29459d7f0..7164788c20483a78a92ccdcf480bd95651d84825 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -184,6 +184,8 @@ public class PurpurConfig { +@@ -185,6 +185,8 @@ public class PurpurConfig { public static String creditsCommandOutput = "%s has been shown the end credits"; public static String demoCommandOutput = "%s has been shown the demo screen"; public static String pingCommandOutput = "%s's ping is %sms"; @@ -72,7 +72,7 @@ index afb165af34f365210fdfa6542cf7a81435096738..7ce9115c4a90e22befdd6b82c2e6588f public static String tpsbarCommandOutput = "Tpsbar toggled for "; public static String dontRunWithScissors = "Don't run with scissors!"; public static String uptimeCommandOutput = "Server uptime is "; -@@ -201,6 +203,8 @@ public class PurpurConfig { +@@ -202,6 +204,8 @@ public class PurpurConfig { creditsCommandOutput = getString("settings.messages.credits-command-output", creditsCommandOutput); demoCommandOutput = getString("settings.messages.demo-command-output", demoCommandOutput); pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput); @@ -81,7 +81,7 @@ index afb165af34f365210fdfa6542cf7a81435096738..7ce9115c4a90e22befdd6b82c2e6588f tpsbarCommandOutput = getString("settings.messages.tpsbar-command-output", tpsbarCommandOutput); dontRunWithScissors = getString("settings.messages.dont-run-with-scissors", dontRunWithScissors); uptimeCommandOutput = getString("settings.messages.uptime-command-output", uptimeCommandOutput); -@@ -249,6 +253,15 @@ public class PurpurConfig { +@@ -250,6 +254,15 @@ public class PurpurConfig { disableGiveCommandDrops = getBoolean("settings.disable-give-dropping", disableGiveCommandDrops); } @@ -97,7 +97,7 @@ index afb165af34f365210fdfa6542cf7a81435096738..7ce9115c4a90e22befdd6b82c2e6588f public static String commandTPSBarTitle = "TPS: MSPT: Ping: ms"; public static BossBar.Overlay commandTPSBarProgressOverlay = BossBar.Overlay.NOTCHED_20; public static TPSBarTask.FillMode commandTPSBarProgressFillMode = TPSBarTask.FillMode.MSPT; -@@ -276,6 +289,16 @@ public class PurpurConfig { +@@ -277,6 +290,16 @@ public class PurpurConfig { public static String uptimeSecond = "%02d second"; public static String uptimeSeconds = "%02d seconds"; private static void commandSettings() { diff --git a/patches/server/0256-Configurable-block-blast-resistance.patch b/patches/server/0256-Configurable-block-blast-resistance.patch index 56c131598..632aa1f53 100644 --- a/patches/server/0256-Configurable-block-blast-resistance.patch +++ b/patches/server/0256-Configurable-block-blast-resistance.patch @@ -18,17 +18,17 @@ index 6b987ee220d94b482d2aeb4ff6bf271853605dc1..852bfe68ab722a5cbdd90dbd70501b75 protected final SoundType soundType; protected final float friction; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 7ce9115c4a90e22befdd6b82c2e6588f2be3a07c..60f522926b5c8dada7720142573d03af34e5a330 100644 +index 7164788c20483a78a92ccdcf480bd95651d84825..a282e1a0c832174a70c7b317f547c5d250fe37ad 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -497,4 +497,19 @@ public class PurpurConfig { +@@ -498,4 +498,19 @@ public class PurpurConfig { String setPattern = getString("settings.username-valid-characters", defaultPattern); usernameValidCharactersPattern = java.util.regex.Pattern.compile(setPattern == null || setPattern.isBlank() ? defaultPattern : setPattern); } + + private static void blastResistanceSettings() { + getMap("settings.blast-resistance-overrides", Collections.emptyMap()).forEach((blockId, value) -> { -+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId)); ++ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId)); + if (block == Blocks.AIR) { + log(Level.SEVERE, "Invalid block for `settings.blast-resistance-overrides`: " + blockId); + return; diff --git a/patches/server/0257-Configurable-block-fall-damage-modifiers.patch b/patches/server/0257-Configurable-block-fall-damage-modifiers.patch index 9be8ba33c..958f6de27 100644 --- a/patches/server/0257-Configurable-block-fall-damage-modifiers.patch +++ b/patches/server/0257-Configurable-block-fall-damage-modifiers.patch @@ -54,10 +54,10 @@ index ef364aa171a48482a45bc18cfe730ec20c3f7be6..74971d90506aa253d5ee821b5390fb25 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 60f522926b5c8dada7720142573d03af34e5a330..0304e57559d6791cf4ddbec1a8dd2c2b6caa2d8e 100644 +index a282e1a0c832174a70c7b317f547c5d250fe37ad..1d4fb426bfba5f572785c5a904d01be8edf23f24 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -512,4 +512,50 @@ public class PurpurConfig { +@@ -513,4 +513,50 @@ public class PurpurConfig { block.explosionResistance = blastResistance.floatValue(); }); } @@ -81,7 +81,7 @@ index 60f522926b5c8dada7720142573d03af34e5a330..0304e57559d6791cf4ddbec1a8dd2c2b + Map.entry("minecraft:purple_bed", Map.of("distance", 0.5F)), + Map.entry("minecraft:magenta_bed", Map.of("distance", 0.5F)) + )).forEach((blockId, value) -> { -+ Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId)); ++ Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId)); + if (block == Blocks.AIR) { + log(Level.SEVERE, "Invalid block for `settings.block-fall-multipliers`: " + blockId); + return; diff --git a/patches/server/0261-Add-log-suppression-for-LibraryLoader.patch b/patches/server/0261-Add-log-suppression-for-LibraryLoader.patch index 955c232dd..9ca459559 100644 --- a/patches/server/0261-Add-log-suppression-for-LibraryLoader.patch +++ b/patches/server/0261-Add-log-suppression-for-LibraryLoader.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add log suppression for LibraryLoader diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 0304e57559d6791cf4ddbec1a8dd2c2b6caa2d8e..e13ec4125047db4edc9dc5de3a2adcdde51bce12 100644 +index 1d4fb426bfba5f572785c5a904d01be8edf23f24..4e47c24adb808feee415ee3e1c159955a7be5c71 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -470,11 +470,14 @@ public class PurpurConfig { +@@ -471,11 +471,14 @@ public class PurpurConfig { public static boolean loggerSuppressIgnoredAdvancementWarnings = false; public static boolean loggerSuppressUnrecognizedRecipeErrors = false; public static boolean loggerSuppressSetBlockFarChunk = false; diff --git a/patches/server/0262-Add-an-option-to-fix-MC-3304-projectile-looting.patch b/patches/server/0262-Add-an-option-to-fix-MC-3304-projectile-looting.patch index 1ea21d23d..8a7fa6705 100644 --- a/patches/server/0262-Add-an-option-to-fix-MC-3304-projectile-looting.patch +++ b/patches/server/0262-Add-an-option-to-fix-MC-3304-projectile-looting.patch @@ -57,7 +57,7 @@ index 4e863ae1f94291b391a142e04e0c41e83417ab70..d7eb680b977656556a618431b1511c10 entitythrowntrident.pickupItemStack = stack.copy(); // SPIGOT-4511 update since damage call moved // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java b/src/main/java/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java -index 5f27e1ce23f2ed68e4c8af1986fafce940dbf826..3eff81e1e83e8f4fa4b91ea5d472407e6081f01b 100644 +index 5f27e1ce23f2ed68e4c8af1986fafce940dbf826..d8cf49cbd82ed12d23fa10a81a88cc4bcf1c0f10 100644 --- a/src/main/java/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java +++ b/src/main/java/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java @@ -66,6 +66,11 @@ public class EnchantedCountIncreaseFunction extends LootItemConditionalFunction @@ -65,7 +65,7 @@ index 5f27e1ce23f2ed68e4c8af1986fafce940dbf826..3eff81e1e83e8f4fa4b91ea5d472407e if (entity instanceof LivingEntity livingEntity) { int i = EnchantmentHelper.getEnchantmentLevel(this.enchantment, livingEntity); + // Purpur start - Add an option to fix MC-3304 projectile looting -+ if (org.purpurmc.purpur.PurpurConfig.fixProjectileLootingTransfer && context.getParamOrNull(LootContextParams.DIRECT_ATTACKING_ENTITY) instanceof net.minecraft.world.entity.projectile.AbstractArrow arrow) { ++ if (org.purpurmc.purpur.PurpurConfig.fixProjectileLootingTransfer && context.getOptionalParameter(LootContextParams.DIRECT_ATTACKING_ENTITY) instanceof net.minecraft.world.entity.projectile.AbstractArrow arrow) { + i = arrow.actualEnchantments.getLevel(this.enchantment); + } + // Purpur end - Add an option to fix MC-3304 projectile looting @@ -73,10 +73,10 @@ index 5f27e1ce23f2ed68e4c8af1986fafce940dbf826..3eff81e1e83e8f4fa4b91ea5d472407e return stack; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index e13ec4125047db4edc9dc5de3a2adcdde51bce12..b881bfac6c8204bfe7ccd38583daf48013c5f639 100644 +index 4e47c24adb808feee415ee3e1c159955a7be5c71..b5724a0646f2194591d0c8539b87a850ad1bb5db 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -501,6 +501,11 @@ public class PurpurConfig { +@@ -502,6 +502,11 @@ public class PurpurConfig { usernameValidCharactersPattern = java.util.regex.Pattern.compile(setPattern == null || setPattern.isBlank() ? defaultPattern : setPattern); } @@ -87,4 +87,4 @@ index e13ec4125047db4edc9dc5de3a2adcdde51bce12..b881bfac6c8204bfe7ccd38583daf480 + private static void blastResistanceSettings() { getMap("settings.blast-resistance-overrides", Collections.emptyMap()).forEach((blockId, value) -> { - Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId)); + Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId)); diff --git a/patches/server/0270-Add-attribute-clamping-and-armor-limit-config.patch b/patches/server/0270-Add-attribute-clamping-and-armor-limit-config.patch index dd577e894..2c3085cd6 100644 --- a/patches/server/0270-Add-attribute-clamping-and-armor-limit-config.patch +++ b/patches/server/0270-Add-attribute-clamping-and-armor-limit-config.patch @@ -39,10 +39,10 @@ index f0703302e7dbbda88de8c648d20d87c55ed9b1e0..a913ebabaa5f443afa987b972355a8f8 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index b881bfac6c8204bfe7ccd38583daf48013c5f639..569d178584ddafd38c476e56ed1809da0ddc3b1f 100644 +index b5724a0646f2194591d0c8539b87a850ad1bb5db..334bcf9f24c6b658664424fd960dad6fb9e28c7d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -506,6 +506,16 @@ public class PurpurConfig { +@@ -507,6 +507,16 @@ public class PurpurConfig { fixProjectileLootingTransfer = getBoolean("settings.fix-projectile-looting-transfer", fixProjectileLootingTransfer); } @@ -58,4 +58,4 @@ index b881bfac6c8204bfe7ccd38583daf48013c5f639..569d178584ddafd38c476e56ed1809da + private static void blastResistanceSettings() { getMap("settings.blast-resistance-overrides", Collections.emptyMap()).forEach((blockId, value) -> { - Block block = BuiltInRegistries.BLOCK.get(ResourceLocation.parse(blockId)); + Block block = BuiltInRegistries.BLOCK.getValue(ResourceLocation.parse(blockId)); diff --git a/patches/server/0277-Shears-can-defuse-TNT.patch b/patches/server/0277-Shears-can-defuse-TNT.patch index 8a90fc0ea..7c1a80749 100644 --- a/patches/server/0277-Shears-can-defuse-TNT.patch +++ b/patches/server/0277-Shears-can-defuse-TNT.patch @@ -8,32 +8,34 @@ Shears can now defuse TNT. Each world can have a configured chance for the TNT t By default the option is disabled to avoid breaking any possible vanilla mechanics. diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index de87483600e55d88176fe25db621bbd3e464729f..5d3002ae9f8e73851c65c2131343b2762dc9eae8 100644 +index de87483600e55d88176fe25db621bbd3e464729f..287ba483614e79e78022e703ef891f59f41ac455 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -@@ -249,4 +249,29 @@ public class PrimedTnt extends Entity implements TraceableEntity { +@@ -249,4 +249,31 @@ public class PrimedTnt extends Entity implements TraceableEntity { return !level().paperConfig().fixes.preventTntFromMovingInWater && super.isPushedByFluid(); } // Paper end - Option to prevent TNT from moving in water + // Purpur start - Shears can defuse TNT + @Override + public net.minecraft.world.InteractionResult interact(net.minecraft.world.entity.player.Player player, net.minecraft.world.InteractionHand hand) { -+ if (!level().isClientSide && level().purpurConfig.shearsCanDefuseTnt) { ++ Level world = this.level(); ++ ++ if (world instanceof ServerLevel serverWorld && level().purpurConfig.shearsCanDefuseTnt) { + final net.minecraft.world.item.ItemStack inHand = player.getItemInHand(hand); + + if (!inHand.is(net.minecraft.world.item.Items.SHEARS) || !player.getBukkitEntity().hasPermission("purpur.tnt.defuse") || -+ level().random.nextFloat() > level().purpurConfig.shearsCanDefuseTntChance) return net.minecraft.world.InteractionResult.PASS; ++ serverWorld.random.nextFloat() > serverWorld.purpurConfig.shearsCanDefuseTntChance) return net.minecraft.world.InteractionResult.PASS; + -+ net.minecraft.world.entity.item.ItemEntity tntItem = new net.minecraft.world.entity.item.ItemEntity(level(), getX(), getY(), getZ(), ++ net.minecraft.world.entity.item.ItemEntity tntItem = new net.minecraft.world.entity.item.ItemEntity(serverWorld, getX(), getY(), getZ(), + new net.minecraft.world.item.ItemStack(net.minecraft.world.item.Items.TNT)); + tntItem.setPickUpDelay(10); + + inHand.hurtAndBreak(1, player, LivingEntity.getSlotForHand(hand)); -+ level().addFreshEntity(tntItem, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.CUSTOM); ++ serverWorld.addFreshEntity(tntItem, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.CUSTOM); + + this.playSound(net.minecraft.sounds.SoundEvents.SHEEP_SHEAR); + -+ this.kill(); ++ this.kill(serverWorld); + return net.minecraft.world.InteractionResult.SUCCESS; + } + @@ -42,7 +44,7 @@ index de87483600e55d88176fe25db621bbd3e464729f..5d3002ae9f8e73851c65c2131343b276 + // Purpur end - Shears can defuse TNT } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 44f6d8b1b4653bf4398f914045deadb9c34a3d35..1e561d12f4b04a536cc891e6a6d123c90e77266c 100644 +index 777139fb7098a9df8877cfe2e74329685a6389e0..463c8873ba1fcc8f081a1909c1fc8967589f4d4f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -3395,4 +3395,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0280-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch b/patches/server/0280-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch index e4017c47f..b3e473bbb 100644 --- a/patches/server/0280-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch +++ b/patches/server/0280-add-an-option-for-piglins-to-ignore-gold-trimmed-arm.patch @@ -5,7 +5,7 @@ Subject: [PATCH] add an option for piglins to ignore gold-trimmed armor diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java -index e283b1296c1e831376bfe9491cbf02ed4b3fffe4..49e57d9fb96cab6ee8204600d86430b04e3b4861 100644 +index e283b1296c1e831376bfe9491cbf02ed4b3fffe4..27a6de70530c2a1cbe2f77a7fb493038121710ea 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java @@ -605,11 +605,18 @@ public class PiglinAi { @@ -13,15 +13,15 @@ index e283b1296c1e831376bfe9491cbf02ed4b3fffe4..49e57d9fb96cab6ee8204600d86430b0 itemstack = (ItemStack) iterator.next(); - } while (!itemstack.is(ItemTags.PIGLIN_SAFE_ARMOR)); -+ } while (!itemstack.is(ItemTags.PIGLIN_SAFE_ARMOR) && (!entity.level().purpurConfig.piglinIgnoresArmorWithGoldTrim || !isWearingGoldTrim(item))); // Purpur ++ } while (!itemstack.is(ItemTags.PIGLIN_SAFE_ARMOR) && (!entity.level().purpurConfig.piglinIgnoresArmorWithGoldTrim || !isWearingGoldTrim(itemstack.getItem()))); // Purpur return true; } + // Purpur start + private static boolean isWearingGoldTrim(Item itemstack) { -+ net.minecraft.world.item.armortrim.ArmorTrim armorTrim = itemstack.components().get(net.minecraft.core.component.DataComponents.TRIM); -+ return armorTrim != null && armorTrim.material().is(net.minecraft.world.item.armortrim.TrimMaterials.GOLD); ++ net.minecraft.world.item.equipment.trim.ArmorTrim armorTrim = itemstack.components().get(net.minecraft.core.component.DataComponents.TRIM); ++ return armorTrim != null && armorTrim.material().is(net.minecraft.world.item.equipment.trim.TrimMaterials.GOLD); + } + // Purpur end + @@ -29,7 +29,7 @@ index e283b1296c1e831376bfe9491cbf02ed4b3fffe4..49e57d9fb96cab6ee8204600d86430b0 piglin.getBrain().eraseMemory(MemoryModuleType.WALK_TARGET); piglin.getNavigation().stop(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a433ca73bdc61aed436743daadaa58e818d54f50..10b7fabd0c04a62b328dfd8cf0ad6797e3d5e4ee 100644 +index 2f9a512a8e4162385ca1b28c91e805112c11949b..341397cdf45be30cffbc65453dc643868ce51bcc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2312,6 +2312,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0281-Add-option-for-always-showing-item-in-player-death-m.patch b/patches/server/0281-Add-option-for-always-showing-item-in-player-death-m.patch index 1fb63c3fb..7bca73493 100644 --- a/patches/server/0281-Add-option-for-always-showing-item-in-player-death-m.patch +++ b/patches/server/0281-Add-option-for-always-showing-item-in-player-death-m.patch @@ -31,10 +31,10 @@ index d95d122601dd47a27e8d82a13b071919c360fe68..4a96d914f8aa6f0c5f13fc85369a311f } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 569d178584ddafd38c476e56ed1809da0ddc3b1f..6d7b5a84ac541c92747d4154298c5e62c9987199 100644 +index 334bcf9f24c6b658664424fd960dad6fb9e28c7d..e2b2eb66907f3a35792a59d68509abda1dd34ccb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -576,4 +576,9 @@ public class PurpurConfig { +@@ -577,4 +577,9 @@ public class PurpurConfig { block.fallDistanceMultiplier = fallDistanceMultiplier.floatValue(); }); } diff --git a/patches/server/0284-register-minecraft-debug-commands.patch b/patches/server/0284-register-minecraft-debug-commands.patch index 99199f12a..112f59508 100644 --- a/patches/server/0284-register-minecraft-debug-commands.patch +++ b/patches/server/0284-register-minecraft-debug-commands.patch @@ -32,10 +32,10 @@ index 5e9a2838335179566bdcd79bca0cb849c725b73b..f0d762bd140fad27ae73bcf3e61b640b io.papermc.paper.plugin.PluginInitializerManager.load(optionset); // Paper diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 6d7b5a84ac541c92747d4154298c5e62c9987199..c1f14b11dbd472bc84993156d41a777167ec9ad7 100644 +index e2b2eb66907f3a35792a59d68509abda1dd34ccb..8ceec24eeb4b441bcc37e75d4b6a778cc6184f31 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -581,4 +581,9 @@ public class PurpurConfig { +@@ -582,4 +582,9 @@ public class PurpurConfig { private static void playerDeathsAlwaysShowItem() { playerDeathsAlwaysShowItem = getBoolean("settings.player-deaths-always-show-item", playerDeathsAlwaysShowItem); } diff --git a/patches/server/0287-config-for-startup-commands.patch b/patches/server/0287-config-for-startup-commands.patch index 6c9b842be..af2f56d9e 100644 --- a/patches/server/0287-config-for-startup-commands.patch +++ b/patches/server/0287-config-for-startup-commands.patch @@ -27,10 +27,10 @@ index 13f29051f55b5628d91b4dca06051e41097badcd..f6b6231c32afb4e1838deec5b2f86130 long i; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index c1f14b11dbd472bc84993156d41a777167ec9ad7..86e3983ff899bebbdc14493ac6b37b2371134e13 100644 +index 8ceec24eeb4b441bcc37e75d4b6a778cc6184f31..ed54fc4104ac5e38490bc5390f8351eb5a9c039d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -586,4 +586,16 @@ public class PurpurConfig { +@@ -587,4 +587,16 @@ public class PurpurConfig { private static void registerMinecraftDebugCommands() { registerMinecraftDebugCommands = getBoolean("settings.register-minecraft-debug-commands", registerMinecraftDebugCommands); } diff --git a/patches/server/0288-Config-to-reverse-bubble-column-flow.patch b/patches/server/0288-Config-to-reverse-bubble-column-flow.patch index 37eed9320..e4e680e42 100644 --- a/patches/server/0288-Config-to-reverse-bubble-column-flow.patch +++ b/patches/server/0288-Config-to-reverse-bubble-column-flow.patch @@ -22,10 +22,10 @@ index 385da0585f409ee453f10d45f5837cdc09adc21b..c65016cba376a41c267fb4b6499ec0a2 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 86e3983ff899bebbdc14493ac6b37b2371134e13..aa23302af702f422b8686c5dbdb29cba5e44e3d5 100644 +index ed54fc4104ac5e38490bc5390f8351eb5a9c039d..95cd1156766895546ef5574b33a60806bff08fa2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -343,6 +343,8 @@ public class PurpurConfig { +@@ -344,6 +344,8 @@ public class PurpurConfig { public static int kelpMaxGrowthAge = 25; public static int twistingVinesMaxGrowthAge = 25; public static int weepingVinesMaxGrowthAge = 25; @@ -34,7 +34,7 @@ index 86e3983ff899bebbdc14493ac6b37b2371134e13..aa23302af702f422b8686c5dbdb29cba private static void blockSettings() { if (version < 3) { boolean oldValue = getBoolean("settings.barrel.packed-barrels", true); -@@ -416,6 +418,8 @@ public class PurpurConfig { +@@ -417,6 +419,8 @@ public class PurpurConfig { log(Level.WARNING, "blocks.weeping_vines.max-growth-age is set to above maximum allowed value of 25"); log(Level.WARNING, "Using value of 25 to prevent issues"); }