diff --git a/gradle.properties b/gradle.properties index f0edf7492..0d4474f78 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = org.purpurmc.purpur version = 1.21-R0.1-SNAPSHOT mcVersion = 1.21 -paperCommit = 44c3dd0d4c83cbfb8b41270c8d4ef0d1571e3925 +paperCommit = dd11ef84410f92af07f46adce198ef5078cb54b8 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0033-Lobotomize-stuck-villagers.patch b/patches/api/0033-Lobotomize-stuck-villagers.patch index 03b9bf50d..208f71b57 100644 --- a/patches/api/0033-Lobotomize-stuck-villagers.patch +++ b/patches/api/0033-Lobotomize-stuck-villagers.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Lobotomize stuck villagers diff --git a/src/main/java/org/bukkit/entity/Villager.java b/src/main/java/org/bukkit/entity/Villager.java -index 3bc24457d143449e6a338d79becf7c39b9f81054..4a5edf4e72e81b22c1abb2ade244f7f4292e993c 100644 +index 444744ea6f5921b0ae229995f8b15ea9d980c402..508bb3493e74a42ce8abf57bba05c08a715849dc 100644 --- a/src/main/java/org/bukkit/entity/Villager.java +++ b/src/main/java/org/bukkit/entity/Villager.java -@@ -328,4 +328,14 @@ public interface Villager extends AbstractVillager { +@@ -375,4 +375,14 @@ public interface Villager extends AbstractVillager { */ public void clearReputations(); // Paper end diff --git a/patches/api/0043-Add-PreExplodeEvents.patch b/patches/api/0043-Add-PreExplodeEvents.patch index db26aac79..1a5339fe9 100644 --- a/patches/api/0043-Add-PreExplodeEvents.patch +++ b/patches/api/0043-Add-PreExplodeEvents.patch @@ -6,12 +6,13 @@ Subject: [PATCH] Add PreExplodeEvents diff --git a/src/main/java/org/purpurmc/purpur/event/PreBlockExplodeEvent.java b/src/main/java/org/purpurmc/purpur/event/PreBlockExplodeEvent.java new file mode 100644 -index 0000000000000000000000000000000000000000..8ea97ddceedb7c719e8a50a0dd8f3f0919ca1647 +index 0000000000000000000000000000000000000000..b22f28357bec72256b1f5f96e97d228d5882b4e0 --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/event/PreBlockExplodeEvent.java -@@ -0,0 +1,53 @@ +@@ -0,0 +1,54 @@ +package org.purpurmc.purpur.event; + ++import org.bukkit.ExplosionResult; +import org.bukkit.block.Block; +import org.bukkit.block.BlockState; +import org.bukkit.event.Cancellable; @@ -28,8 +29,8 @@ index 0000000000000000000000000000000000000000..8ea97ddceedb7c719e8a50a0dd8f3f09 + private boolean cancelled; + private final float yield; + -+ public PreBlockExplodeEvent(@NotNull final Block what, final float yield, @NotNull BlockState explodedBlockState) { -+ super(what, explodedBlockState, Collections.emptyList(), yield); ++ public PreBlockExplodeEvent(@NotNull final Block what, final float yield, @NotNull BlockState explodedBlockState, @NotNull ExplosionResult result) { ++ super(what, explodedBlockState, Collections.emptyList(), yield, result); + this.yield = yield; + this.cancelled = false; + } @@ -65,12 +66,13 @@ index 0000000000000000000000000000000000000000..8ea97ddceedb7c719e8a50a0dd8f3f09 +} diff --git a/src/main/java/org/purpurmc/purpur/event/entity/PreEntityExplodeEvent.java b/src/main/java/org/purpurmc/purpur/event/entity/PreEntityExplodeEvent.java new file mode 100644 -index 0000000000000000000000000000000000000000..2d4f68228861492baaea0bcc604dfef623b337ba +index 0000000000000000000000000000000000000000..bd5e647d52b2c69da684bb246325e0d6ca81f96e --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/event/entity/PreEntityExplodeEvent.java -@@ -0,0 +1,64 @@ +@@ -0,0 +1,65 @@ +package org.purpurmc.purpur.event.entity; + ++import org.bukkit.ExplosionResult; +import org.bukkit.Location; +import org.bukkit.event.Cancellable; +import org.bukkit.event.HandlerList; @@ -87,8 +89,8 @@ index 0000000000000000000000000000000000000000..2d4f68228861492baaea0bcc604dfef6 + private final float yield; + private final Location location; + -+ public PreEntityExplodeEvent(@NotNull org.bukkit.entity.Entity what, @NotNull final Location location, final float yield) { -+ super(what, location, Collections.emptyList(), yield); ++ public PreEntityExplodeEvent(@NotNull org.bukkit.entity.Entity what, @NotNull final Location location, final float yield, @NotNull ExplosionResult result) { ++ super(what, location, Collections.emptyList(), yield, result); + this.cancelled = false; + this.yield = yield; + this.location = location; diff --git a/patches/server/0002-Purpur-config-files.patch b/patches/server/0002-Purpur-config-files.patch index 155935e0a..cfc660c84 100644 --- a/patches/server/0002-Purpur-config-files.patch +++ b/patches/server/0002-Purpur-config-files.patch @@ -92,7 +92,7 @@ index 7d82cc6b847124cf4225428ba310309544928148..04fd1172b47a74b16955cf93fc20f64f this.setPvpAllowed(dedicatedserverproperties.pvp); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index bbb0d543197001fe8bb5179dde7201327fec4274..88cc7146c44746f93edc8e17151521806e2d6482 100644 +index e2a0487089eb5a7bdc1433e4c75f69d8e9f9d5f9..04953d12a6aab561b9510adad145918aee7768c1 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -173,6 +173,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl @@ -112,10 +112,10 @@ index bbb0d543197001fe8bb5179dde7201327fec4274..88cc7146c44746f93edc8e1715152180 this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index caf6ff33b42472d30f28629470e12889f50490cc..2047354b757cb239b5bbf8dfd8cce284645ad5ce 100644 +index 3a91faeb6957e4e783b1de3e1145e7d1d164a857..3e22545aead92a6bd5eb4e0b67b658c18d965c8a 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1059,6 +1059,7 @@ public final class CraftServer implements Server { +@@ -1068,6 +1068,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); @@ -123,7 +123,7 @@ index caf6ff33b42472d30f28629470e12889f50490cc..2047354b757cb239b5bbf8dfd8cce284 for (ServerLevel world : this.console.getAllLevels()) { // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters, config.spawnAnimals); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) -@@ -1074,6 +1075,7 @@ public final class CraftServer implements Server { +@@ -1083,6 +1084,7 @@ public final class CraftServer implements Server { } } world.spigotConfig.init(); // Spigot @@ -131,7 +131,7 @@ index caf6ff33b42472d30f28629470e12889f50490cc..2047354b757cb239b5bbf8dfd8cce284 } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -1090,6 +1092,7 @@ public final class CraftServer implements Server { +@@ -1099,6 +1101,7 @@ public final class CraftServer implements Server { this.reloadData(); org.spigotmc.SpigotConfig.registerCommands(); // Spigot io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper @@ -139,7 +139,7 @@ index caf6ff33b42472d30f28629470e12889f50490cc..2047354b757cb239b5bbf8dfd8cce284 this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -2978,6 +2981,18 @@ public final class CraftServer implements Server { +@@ -2987,6 +2990,18 @@ public final class CraftServer implements Server { return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console); } @@ -159,7 +159,7 @@ index caf6ff33b42472d30f28629470e12889f50490cc..2047354b757cb239b5bbf8dfd8cce284 public void restart() { org.spigotmc.RestartCommand.restart(); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 1acc0a579804dee7bb3d0f755c24240413ed7540..e3d078a9675c78381f17ccb3d255d9adacbfb45e 100644 +index 38083fc6dc60673562f2d05aa354c365571baff8..98dd06878b76b0c1d70242afd49738b253cd0e80 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -176,6 +176,14 @@ public class Main { diff --git a/patches/server/0003-Purpur-client-support.patch b/patches/server/0003-Purpur-client-support.patch index f73b2200d..994e270c9 100644 --- a/patches/server/0003-Purpur-client-support.patch +++ b/patches/server/0003-Purpur-client-support.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Purpur client support diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 0b6ce3b157c8822c39c492161571c0887ab26262..5ac7bb764d7260c84c28142a50a36e941234e2d1 100644 +index 5980b70e2d7273239245237189b2debcbccfbac3..ce09c4900aee5a75c0d13a7bffd97a0711ead774 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -301,6 +301,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -302,6 +302,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent public @Nullable String clientBrandName = null; // Paper - Brand support public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event diff --git a/patches/server/0005-Component-related-conveniences.patch b/patches/server/0005-Component-related-conveniences.patch index 475110ee2..34dbeb222 100644 --- a/patches/server/0005-Component-related-conveniences.patch +++ b/patches/server/0005-Component-related-conveniences.patch @@ -5,10 +5,10 @@ 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 5ac7bb764d7260c84c28142a50a36e941234e2d1..7ac04a535678f6e2e4f6a91194ee98cba019e94d 100644 +index ce09c4900aee5a75c0d13a7bffd97a0711ead774..37adf5d3c6248547d830248714f32dbec653d653 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2004,6 +2004,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2005,6 +2005,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple this.lastSentExp = -1; // CraftBukkit - Added to reset } @@ -81,7 +81,7 @@ index bb1a60180e58c1333e7bb33e8acf1b0225eda8a8..c83e80ebdbbfb2d0e08561a44486a308 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 f0eb2fcbaadb5796cb48050d2f9f88a6100bdb4a..9c436812fce09a00ec7b2c010bb601923403977e 100644 +index 1f7594e22f0f08ae110ef9b42f15119358aa5723..78a218bf01609dffcd3741ddc7b27190af7f2731 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -4176,6 +4176,20 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index 1388575f5..d2ead0ac5 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -46,10 +46,10 @@ index 2766ec28f028c0bd672009928bf64c1a6e5d07d6..1d0f9fa24e8ead7710249575795951da 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 7ac04a535678f6e2e4f6a91194ee98cba019e94d..2dc4314b37be3f938baf5406338a040f56b05e73 100644 +index 37adf5d3c6248547d830248714f32dbec653d653..f21573f92d6703d74203b205aa2aebd0588a12e7 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -804,6 +804,15 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -805,6 +805,15 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple this.trackEnteredOrExitedLavaOnVehicle(); this.updatePlayerAttributes(); this.advancements.flushDirty(this); @@ -79,7 +79,7 @@ index 7796e191747be545e744564a2b0b65790f69114d..82f60de72bc0f9b01eb97dbc0e296e80 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 9c436812fce09a00ec7b2c010bb601923403977e..fc4a941bfce0cc0da2db48fc3d21904a6e91dcf0 100644 +index 78a218bf01609dffcd3741ddc7b27190af7f2731..9cc922a6b75dde1f73b6b1e823cf2918d975f3f4 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -384,7 +384,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -1966,7 +1966,7 @@ index 4bfa947531c4a67989e18032754dabf4c69e989c..960eaebcb12d32bc51026c48e4b5e09e this.turtle.setSpeed(Mth.lerp(0.125F, this.turtle.getSpeed(), f1)); this.turtle.setDeltaMovement(this.turtle.getDeltaMovement().add(0.0D, (double) this.turtle.getSpeed() * d1 * 0.1D, 0.0D)); 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 31d7beca9797ab1a26792c3e30171a751c3846b1..a643c9043c9685c01ff858bc6002686fa527bbfa 100644 +index 22024d79b566ad5d388ceb644605ada3123ca608..9f2d7ea463f663c0706ebaf73d140aa51ac307f0 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -127,9 +127,32 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder entitytypes, Level world) { super(EntityType.ENDER_DRAGON, world); -@@ -129,6 +130,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -130,6 +131,37 @@ public class EnderDragon extends Mob implements Enemy { this.noCulling = true; this.phaseManager = new EnderDragonPhaseManager(this); this.explosionSource = new Explosion(world, this, null, null, Double.NaN, Double.NaN, Double.NaN, Float.NaN, true, Explosion.BlockInteraction.DESTROY, ParticleTypes.EXPLOSION, ParticleTypes.EXPLOSION_EMITTER, SoundEvents.GENERIC_EXPLODE); // CraftBukkit @@ -2728,7 +2728,7 @@ index 4d2fbade3a01ca26ff107f1323ae23db6dad8ef8..bc2bcae9e18f76c2db1a75b4db9bd987 } public void setDragonFight(EndDragonFight fight) { -@@ -143,6 +175,17 @@ public class EnderDragon extends Mob implements Enemy { +@@ -144,6 +176,17 @@ public class EnderDragon extends Mob implements Enemy { return this.fightOrigin; } @@ -2746,7 +2746,7 @@ index 4d2fbade3a01ca26ff107f1323ae23db6dad8ef8..bc2bcae9e18f76c2db1a75b4db9bd987 public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0D); } -@@ -204,6 +247,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -205,6 +248,37 @@ public class EnderDragon extends Mob implements Enemy { @Override public void aiStep() { @@ -2784,7 +2784,7 @@ index 4d2fbade3a01ca26ff107f1323ae23db6dad8ef8..bc2bcae9e18f76c2db1a75b4db9bd987 this.processFlappingMovement(); if (this.level().isClientSide) { this.setHealth(this.getHealth()); -@@ -230,6 +304,8 @@ public class EnderDragon extends Mob implements Enemy { +@@ -231,6 +305,8 @@ public class EnderDragon extends Mob implements Enemy { float f; if (this.isDeadOrDying()) { @@ -2793,7 +2793,7 @@ index 4d2fbade3a01ca26ff107f1323ae23db6dad8ef8..bc2bcae9e18f76c2db1a75b4db9bd987 float f1 = (this.random.nextFloat() - 0.5F) * 8.0F; f = (this.random.nextFloat() - 0.5F) * 4.0F; -@@ -242,9 +318,9 @@ public class EnderDragon extends Mob implements Enemy { +@@ -243,9 +319,9 @@ public class EnderDragon extends Mob implements Enemy { f = 0.2F / ((float) vec3d.horizontalDistance() * 10.0F + 1.0F); f *= (float) Math.pow(2.0D, vec3d.y); @@ -2805,7 +2805,7 @@ index 4d2fbade3a01ca26ff107f1323ae23db6dad8ef8..bc2bcae9e18f76c2db1a75b4db9bd987 this.flapTime += f * 0.5F; } else { this.flapTime += f; -@@ -278,7 +354,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -279,7 +355,7 @@ public class EnderDragon extends Mob implements Enemy { } this.phaseManager.getCurrentPhase().doClientTick(); @@ -2814,7 +2814,7 @@ index 4d2fbade3a01ca26ff107f1323ae23db6dad8ef8..bc2bcae9e18f76c2db1a75b4db9bd987 DragonPhaseInstance idragoncontroller = this.phaseManager.getCurrentPhase(); idragoncontroller.doServerTick(); -@@ -352,7 +428,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -353,7 +429,7 @@ public class EnderDragon extends Mob implements Enemy { if (world1 instanceof ServerLevel) { ServerLevel worldserver1 = (ServerLevel) world1; @@ -2823,7 +2823,7 @@ index 4d2fbade3a01ca26ff107f1323ae23db6dad8ef8..bc2bcae9e18f76c2db1a75b4db9bd987 this.knockBack(worldserver1, worldserver1.getEntities((Entity) this, this.wing1.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); this.knockBack(worldserver1, worldserver1.getEntities((Entity) this, this.wing2.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); this.hurt(worldserver1.getEntities((Entity) this, this.head.getBoundingBox().inflate(1.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); -@@ -397,7 +473,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -398,7 +474,7 @@ public class EnderDragon extends Mob implements Enemy { } if (!this.level().isClientSide) { @@ -5117,10 +5117,10 @@ index 2cde808bfa797256409879505ba205a71f381981..84479dad6078a2a12e6b977185bdbbe7 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 9c7cd9387f90d061aec76f7f0451a1da8b42ea3d..40928d1b5b7c585a52c136a38de1f49a4b9d5322 100644 +index 0ab53d46f0b8f3f3791dd01766738522c86932e8..ba749cf277aad319709e3da550155488bb33591b 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -594,6 +594,15 @@ public class CraftEventFactory { +@@ -597,6 +597,15 @@ public class CraftEventFactory { // Paper end craftServer.getPluginManager().callEvent(event); @@ -5136,7 +5136,7 @@ index 9c7cd9387f90d061aec76f7f0451a1da8b42ea3d..40928d1b5b7c585a52c136a38de1f49a return event; } -@@ -1184,6 +1193,7 @@ public class CraftEventFactory { +@@ -1187,6 +1196,7 @@ public class CraftEventFactory { EntityDamageEvent event; if (damager != null) { event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions, critical); diff --git a/patches/server/0007-Configurable-entity-base-attributes.patch b/patches/server/0007-Configurable-entity-base-attributes.patch index 10c092692..28e41d86f 100644 --- a/patches/server/0007-Configurable-entity-base-attributes.patch +++ b/patches/server/0007-Configurable-entity-base-attributes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable entity base attributes diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 9fd500a438a96feadd51f35751061f7eec28d45c..fcd12b28408343dcacab8e2d93656dc384935c1b 100644 +index 9cc922a6b75dde1f73b6b1e823cf2918d975f3f4..10c06b32deb91dc4a65b501e57b395742ecda75b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -168,7 +168,7 @@ import org.bukkit.plugin.PluginManager; @@ -463,7 +463,7 @@ index 960eaebcb12d32bc51026c48e4b5e09effb66dda..41d47141bfd77b17cbf163bffdfeb002 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 a643c9043c9685c01ff858bc6002686fa527bbfa..133aa48278ca51c74b5eb8900202e7076119e445 100644 +index 9f2d7ea463f663c0706ebaf73d140aa51ac307f0..2985a7bcd4153798c347efa086120ed841770774 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -149,6 +149,12 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder transaction = new java.util.ArrayList(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 4298925b5c84eee506ccdb8e84bc14b9d6cfff2c..0efa97d026673aae4fc60f719e18a0ce342a6cab 100644 +index 860a24a6d3e80d9ff94743f46f6fa217c36f3614..cd3a0bd03956e0149089a90d997893d32d4afac3 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1598,6 +1598,19 @@ public final class CraftServer implements Server { +@@ -1607,6 +1607,19 @@ public final class CraftServer implements Server { return true; } diff --git a/patches/server/0213-Signs-allow-color-codes.patch b/patches/server/0213-Signs-allow-color-codes.patch index d6cf86778..653b4e550 100644 --- a/patches/server/0213-Signs-allow-color-codes.patch +++ b/patches/server/0213-Signs-allow-color-codes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Signs allow color codes diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index b6a0553a23f0ba155656b51fe2efb48e1602a4a5..69b57105a7c8dccf46fe7a09c204fcf490e2fda9 100644 +index c510bfcd9a49deb290fb8bc59e9eca51f719bb17..06dab25d9e42f057637f71b663908a33448f4a22 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1707,6 +1707,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1708,6 +1708,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @Override public void openTextEdit(SignBlockEntity sign, boolean front) { diff --git a/patches/server/0230-Lobotomize-stuck-villagers.patch b/patches/server/0230-Lobotomize-stuck-villagers.patch index 0bc727596..bf521a2fe 100644 --- a/patches/server/0230-Lobotomize-stuck-villagers.patch +++ b/patches/server/0230-Lobotomize-stuck-villagers.patch @@ -88,10 +88,10 @@ index d2cbc3707a04c9f6c1191cd279e8f26b7439d0b1..05c945ba584757f8b3ccba5073491718 if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) { // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel) this.level(), this); // Paper diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java -index 6c15d40979fd3e3d246a447c432b321fbf29ada3..6ace76a829c88e2e747dbbcce0a6582c615fc56d 100644 +index bd2987fa1fb194a581567134ed980e8fc043f435..bdd345595ed71a8018349e184afe8582a24f3622 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java -@@ -252,4 +252,11 @@ public class CraftVillager extends CraftAbstractVillager implements Villager { +@@ -374,4 +374,11 @@ public class CraftVillager extends CraftAbstractVillager implements Villager { getHandle().getGossips().gossips.clear(); } // Paper end diff --git a/patches/server/0239-Stonecutter-damage.patch b/patches/server/0239-Stonecutter-damage.patch index 9cddd9725..5cf3364db 100644 --- a/patches/server/0239-Stonecutter-damage.patch +++ b/patches/server/0239-Stonecutter-damage.patch @@ -115,10 +115,10 @@ index 31ae0f466ae522d767907ec5066b26695f327b96..f26383cf896785333dbd6f86348d5a5f } else if (blockState.is(Blocks.HONEY_BLOCK)) { return PathType.STICKY_HONEY; diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 9e5d4e8a70aec8619db68d75ef3447cf39e239b9..f6dfc393cc444a794dca891bf5a73c461d6ae4bc 100644 +index ba749cf277aad319709e3da550155488bb33591b..98891112f992978c97b21ab0d7d54228819b7536 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1133,7 +1133,7 @@ public class CraftEventFactory { +@@ -1136,7 +1136,7 @@ public class CraftEventFactory { return CraftEventFactory.callEntityDamageEvent(source.getDirectBlock(), source.getDirectBlockState(), entity, DamageCause.LAVA, bukkitDamageSource, modifiers, modifierFunctions, cancelled); } else if (source.getDirectBlock() != null) { DamageCause cause; diff --git a/patches/server/0251-Remove-Mojang-Profiler.patch b/patches/server/0251-Remove-Mojang-Profiler.patch index 646b2c036..ac6d768b6 100644 --- a/patches/server/0251-Remove-Mojang-Profiler.patch +++ b/patches/server/0251-Remove-Mojang-Profiler.patch @@ -809,10 +809,10 @@ index 270986af40f1f91448cb6d1ab1560d2efc0b3e99..a4ea3eca166510e05bc53504d2f1040e 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 69b57105a7c8dccf46fe7a09c204fcf490e2fda9..7d586111996a4f7ad9437cb45c41c5e01aa7c7d0 100644 +index 06dab25d9e42f057637f71b663908a33448f4a22..552c048dd483a3dd866961368633fe645efd7868 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1398,7 +1398,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1399,7 +1399,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple this.unsetRemoved(); */ // CraftBukkit end @@ -821,7 +821,7 @@ index 69b57105a7c8dccf46fe7a09c204fcf490e2fda9..7d586111996a4f7ad9437cb45c41c5e0 if (worldserver != null && resourcekey == LevelStem.OVERWORLD && worldserver.getTypeKey() == LevelStem.NETHER) { // CraftBukkit - empty to fall through to null to event this.enteredNetherPosition = this.position(); } -@@ -1414,8 +1414,8 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1415,8 +1415,8 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple worldserver = ((CraftWorld) exit.getWorld()).getHandle(); // CraftBukkit end @@ -832,7 +832,7 @@ index 69b57105a7c8dccf46fe7a09c204fcf490e2fda9..7d586111996a4f7ad9437cb45c41c5e0 // CraftBukkit start this.isChangingDimension = true; // CraftBukkit - Set teleport invulnerability only if player changing worlds LevelData worlddata = worldserver.getLevelData(); -@@ -1433,7 +1433,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1434,7 +1434,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple this.connection.teleport(exit); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); worldserver.addDuringTeleport(this); @@ -1068,7 +1068,7 @@ index a715ecf4a8ac91d3e5e5c6269d89e54b2c1cd279..223c3665126c576eddb1a8f7c9f5bc60 }; } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index bf4cfa2269769cbaf1fdd2189a877fd3558c8372..cc880364db02e0e648880b4d235572779c10cbf3 100644 +index ca6a05c47ba6064cc0febccf14705613479b727c..d261ac556c737be50e4ac214df10d7e711bea9b2 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -880,7 +880,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -1774,7 +1774,7 @@ index d4f64414a0351999a04308a3d26d15c9ddf266c7..88972d9f07eb9088c139d9dbc974b2e6 this.assignProfessionWhenSpawned = false; } diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index a248d859cbce48f4a34c4771a7acffc17d7edc84..4ce32603dcd691e018a3e1962311d2ac707439aa 100644 +index 6c66ee69beb55e5c5755bbf4d13c256541ce4468..28eafd9b22b745a940b4465aae01cb738a2d7002 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -646,7 +646,7 @@ public class Explosion { @@ -1786,7 +1786,7 @@ index a248d859cbce48f4a34c4771a7acffc17d7edc84..4ce32603dcd691e018a3e1962311d2ac List> list = new ArrayList(); Util.shuffle(this.toBlow, this.level.random); -@@ -724,7 +724,7 @@ public class Explosion { +@@ -721,7 +721,7 @@ public class Explosion { Block.popResource(this.level, (BlockPos) pair.getSecond(), (ItemStack) pair.getFirst()); } diff --git a/patches/server/0254-Debug-Marker-API.patch b/patches/server/0254-Debug-Marker-API.patch index 69e2378c2..a5ca3090c 100644 --- a/patches/server/0254-Debug-Marker-API.patch +++ b/patches/server/0254-Debug-Marker-API.patch @@ -5,10 +5,10 @@ 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 0efa97d026673aae4fc60f719e18a0ce342a6cab..8bd0bb8b9593347bd249312af3832a4c1a932a5c 100644 +index cd3a0bd03956e0149089a90d997893d32d4afac3..1bb18e2870db62102709f3c0176f2a76492c9e1d 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1609,6 +1609,42 @@ public final class CraftServer implements Server { +@@ -1618,6 +1618,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))); } @@ -52,7 +52,7 @@ index 0efa97d026673aae4fc60f719e18a0ce342a6cab..8bd0bb8b9593347bd249312af3832a4c @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 685d52605bb2cc8eb7a4065e0e7cf634a22a512a..0056843aabf3a46251eda8667ddb43da59c9d0ab 100644 +index e771af8e79f0a89bc88d3c573b062dc7321fb36b..baac0c373d337d4b68d4dc748ec8476510143273 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -2342,6 +2342,42 @@ public class CraftWorld extends CraftRegionAccessor implements World { @@ -99,7 +99,7 @@ index 685d52605bb2cc8eb7a4065e0e7cf634a22a512a..0056843aabf3a46251eda8667ddb43da @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index cda45d172f526098a40eaa624ad3a84ed1a888d1..afd7a48f6c85aa00fe53f8ee6a53d790f81a6048 100644 +index e5f7647b598cbfacc8840f548bfaa5ed45190e03..dfc15b03996a1a82918c85f3ebea59d54177092a 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -3603,5 +3603,43 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0258-Implement-ram-and-rambar-commands.patch b/patches/server/0258-Implement-ram-and-rambar-commands.patch index f64a8f673..fbc34271f 100644 --- a/patches/server/0258-Implement-ram-and-rambar-commands.patch +++ b/patches/server/0258-Implement-ram-and-rambar-commands.patch @@ -18,10 +18,10 @@ index 24cb04cd33cfe578286c85a892b20bbf3fc843e6..8468452ff61f226b65be1dad21b627f2 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 7d586111996a4f7ad9437cb45c41c5e01aa7c7d0..c43656cfe83132a5bda5a1a573f73cfe6be7160e 100644 +index 552c048dd483a3dd866961368633fe645efd7868..21dfca344a7b98dfd4e20bebde6c743e5cd8c932 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -304,6 +304,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -305,6 +305,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public boolean purpurClient = false; // Purpur private boolean tpsBar = false; // Purpur private boolean compassBar = false; // Purpur @@ -29,7 +29,7 @@ index 7d586111996a4f7ad9437cb45c41c5e01aa7c7d0..c43656cfe83132a5bda5a1a573f73cfe // Paper start - rewrite chunk system private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; -@@ -603,6 +604,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -604,6 +605,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur if (nbt.contains("Purpur.CompassBar")) { this.compassBar = nbt.getBoolean("Purpur.CompassBar"); } // Purpur @@ -37,7 +37,7 @@ index 7d586111996a4f7ad9437cb45c41c5e01aa7c7d0..c43656cfe83132a5bda5a1a573f73cfe } @Override -@@ -679,6 +681,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -680,6 +682,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple }); } @@ -45,7 +45,7 @@ index 7d586111996a4f7ad9437cb45c41c5e01aa7c7d0..c43656cfe83132a5bda5a1a573f73cfe nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur nbt.putBoolean("Purpur.CompassBar", this.compassBar); // Purpur } -@@ -3100,5 +3103,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -3101,5 +3104,13 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public void compassBar(boolean compassBar) { this.compassBar = compassBar; } diff --git a/patches/server/0276-Add-PreExplodeEvents.patch b/patches/server/0276-Add-PreExplodeEvents.patch index 0c82ef421..179a157e7 100644 --- a/patches/server/0276-Add-PreExplodeEvents.patch +++ b/patches/server/0276-Add-PreExplodeEvents.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add PreExplodeEvents diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index d7cd063240a2799996cf7efa3f766ee748702db1..5248e32e2109494904bc16839b2f202dab3d96c9 100644 +index 8dd513e3aa12bb5086d4eebe9a93c1f2ffb0b9eb..97e79b770f0d7273611db0e60ea14005b65fb7d2 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -407,6 +407,25 @@ public class Explosion { @@ -16,7 +16,7 @@ index d7cd063240a2799996cf7efa3f766ee748702db1..5248e32e2109494904bc16839b2f202d + // Purpur start - add PreExplodeEvents + if(this.source != null){ + Location location = new Location(this.level.getWorld(), this.x, this.y, this.z); -+ if(!new org.purpurmc.purpur.event.entity.PreEntityExplodeEvent(this.source.getBukkitEntity(), location, this.blockInteraction == Explosion.BlockInteraction.DESTROY_WITH_DECAY ? 1.0F / this.radius : 1.0F).callEvent()) { ++ if(!new org.purpurmc.purpur.event.entity.PreEntityExplodeEvent(this.source.getBukkitEntity(), location, this.blockInteraction == Explosion.BlockInteraction.DESTROY_WITH_DECAY ? 1.0F / this.radius : 1.0F, org.bukkit.craftbukkit.CraftExplosionResult.toBukkit(getBlockInteraction())).callEvent()) { + this.wasCanceled = true; + return; + } @@ -24,7 +24,7 @@ index d7cd063240a2799996cf7efa3f766ee748702db1..5248e32e2109494904bc16839b2f202d + Location location = new Location(this.level.getWorld(), this.x, this.y, this.z); + org.bukkit.block.Block block = location.getBlock(); + org.bukkit.block.BlockState blockState = (this.damageSource.getDirectBlockState() != null) ? this.damageSource.getDirectBlockState() : block.getState(); -+ if(!new org.purpurmc.purpur.event.PreBlockExplodeEvent(location.getBlock(), this.blockInteraction == Explosion.BlockInteraction.DESTROY_WITH_DECAY ? 1.0F / this.radius : 1.0F, blockState).callEvent()) { ++ if(!new org.purpurmc.purpur.event.PreBlockExplodeEvent(location.getBlock(), this.blockInteraction == Explosion.BlockInteraction.DESTROY_WITH_DECAY ? 1.0F / this.radius : 1.0F, blockState, org.bukkit.craftbukkit.CraftExplosionResult.toBukkit(getBlockInteraction())).callEvent()) { + this.wasCanceled = true; + return; + }