From 1cfcb9f28e37961bef35d282a107c1942ebd9c84 Mon Sep 17 00:00:00 2001 From: Ben Kerllenevich Date: Fri, 9 Jun 2023 00:49:22 -0400 Subject: [PATCH] fix lots of levels --- patches/server/0006-Ridables.patch | 59 +++++++++++------- patches/server/0010-AFK-API.patch | 6 +- patches/server/0019-Silk-touch-spawners.patch | 16 ++--- patches/server/0023-Giants-AI-settings.patch | 25 ++++---- ...bit-naturally-spawn-toast-and-killer.patch | 6 +- patches/server/0033-Cows-eat-mushrooms.patch | 10 ++-- ...-Minecart-settings-and-WASD-controls.patch | 8 +-- .../0050-Implement-infinite-liquids.patch | 10 ++-- .../0054-Add-canSaveToDisk-to-Entity.patch | 60 +++++++++++++++---- ...leport-to-spawn-if-outside-world-bor.patch | 8 +-- .../0079-Dispensers-place-anvils-option.patch | 6 +- .../server/0089-Raid-cooldown-setting.patch | 10 ++-- .../0095-Configurable-daylight-cycle.patch | 6 +- ...ble-chance-for-wolves-to-spawn-rabid.patch | 37 ++++++------ ...therite-armor-grants-fire-resistance.patch | 6 +- ...iefing-bypass-to-everything-affected.patch | 12 ++-- ...24-Movement-options-for-armor-stands.patch | 6 +- ...oggle-for-water-sensitive-mob-damage.patch | 28 ++++----- ...Break-individual-slabs-when-sneaking.patch | 10 ++-- ...ption-to-make-doors-require-redstone.patch | 14 ++--- ...ing-the-blocks-that-turn-into-dirt-p.patch | 6 +- .../0158-Configurable-piston-push-limit.patch | 10 ++-- ...70-ShulkerBox-allow-oversized-stacks.patch | 6 +- ...Beacon-Activation-Range-Configurable.patch | 12 ++-- .../server/0187-Tool-actionable-options.patch | 14 ++--- patches/server/0189-Summoner-API.patch | 6 +- ...0192-Silk-touchable-budding-amethyst.patch | 6 +- .../0204-Conduit-behavior-configuration.patch | 6 +- ...t-right-click-to-use-exp-for-mending.patch | 6 +- ...or-beds-to-explode-on-villager-sleep.patch | 8 +-- ...-Halloween-options-and-optimizations.patch | 6 +- ...xtinguish-fire-blocks-with-snowballs.patch | 20 +++---- .../0224-Mobs-always-drop-experience.patch | 28 ++++----- ...aring-jeb-produces-random-color-wool.patch | 6 +- ...ont-eat-blocks-in-non-ticking-chunks.patch | 6 +- patches/server/0253-Stonecutter-damage.patch | 8 +-- .../0256-Skeletons-eat-wither-roses.patch | 10 ++-- ...257-Enchantment-Table-Persists-Lapis.patch | 12 ++-- ...-Fix-exact-choice-recipe-book-clicks.patch | 6 +- patches/server/0269-Add-Bee-API.patch | 8 +-- ...low-creeper-to-encircle-target-when-.patch | 4 +- .../server/0292-End-Crystal-Cramming.patch | 6 +- ...fig-to-remove-explosion-radius-clamp.patch | 6 +- 43 files changed, 301 insertions(+), 248 deletions(-) diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index ebe372f5e..7215598c4 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -46,7 +46,7 @@ index 42d5b4ffc51da90a8f3bbec84e44ac2b0cb7b5ee..9168a02ede5b2fc924dbcf0063109f8e final Throwable thr = new Throwable(entity + " Added to world at " + new java.util.Date()); io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(thr); diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 15539499b5a0f16ad2d44c39c5b824876fdf0951..d33eb475a41791b298c3300a14cf2af17e200c6c 100644 +index 15539499b5a0f16ad2d44c39c5b824876fdf0951..632af791c9c4c9d2fa84f46b0c28bb8089930ebe 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -751,6 +751,15 @@ public class ServerPlayer extends Player { @@ -55,7 +55,7 @@ index 15539499b5a0f16ad2d44c39c5b824876fdf0951..d33eb475a41791b298c3300a14cf2af1 this.advancements.flushDirty(this); + + // Purpur start -+ if (this.level().purpurConfig.useNightVisionWhenRiding && this.getVehicle() != null && this.getVehicle().getRider() == this && this.level.getGameTime() % 100 == 0) { // 5 seconds ++ if (this.level().purpurConfig.useNightVisionWhenRiding && this.getVehicle() != null && this.getVehicle().getRider() == this && this.level().getGameTime() % 100 == 0) { // 5 seconds + MobEffectInstance nightVision = this.getEffect(MobEffects.NIGHT_VISION); + if (nightVision == null || nightVision.getDuration() <= 300) { // 15 seconds + this.addEffect(new MobEffectInstance(MobEffects.NIGHT_VISION, 400, 0)); // 20 seconds @@ -269,7 +269,7 @@ index a6d730eaee1df1c5c61aa0f8731b8c055080a9a6..218eaf5f18162422b3376335e32f25d0 // Paper end if (!this.level().isClientSide && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index e2a25c29ec74147b3e66aa0b3deb85a8f6ee53a5..89ea4208bc30bcf3ed59b3a28384c0796b9204c4 100644 +index e2a25c29ec74147b3e66aa0b3deb85a8f6ee53a5..d2ae293a23f8d02b3a2f0a60e4389497be77b60d 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -145,8 +145,8 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -299,7 +299,7 @@ index e2a25c29ec74147b3e66aa0b3deb85a8f6ee53a5..89ea4208bc30bcf3ed59b3a28384c079 + + // Purpur start + public double getMaxY() { -+ return level.getHeight(); ++ return level().getHeight(); + } + + public InteractionResult tryRide(Player player, InteractionHand hand) { @@ -526,7 +526,7 @@ index 7df56705a4a0de2dc4ff7ab133fc26612c219162..384bed4505b6cabb1ae151cd2c4eb5e5 --this.lookAtCooldown; this.getYRotD().ifPresent((yaw) -> { diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index 940cd932e74bc2e6754186731d7aa6f10d56eb68..7798e8df6156d71878b7c1f60c5636be64a25591 100644 +index 940cd932e74bc2e6754186731d7aa6f10d56eb68..2ac0c8a7335450c192352da9c34151a70a2645dd 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -18,6 +18,7 @@ import net.minecraft.world.entity.EntityDimensions; @@ -577,7 +577,7 @@ index 940cd932e74bc2e6754186731d7aa6f10d56eb68..7798e8df6156d71878b7c1f60c5636be + super.onMount(rider); + if (isResting()) { + setResting(false); -+ level.levelEvent(null, 1025, new BlockPos(this).above(), 0); ++ level().levelEvent(null, 1025, new BlockPos(this).above(), 0); + } + } + @@ -964,7 +964,7 @@ index 4b63f6aa3d19cc4f47b05d531df3a43bf398c9ea..3ac30ed0a411384be5102de498815561 // CraftBukkit end 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 501e6cb4aa83f81c1f657e41f4e7f11d19d46831..057ebdba945caa27db8982fe140d858bdb84fa39 100644 +index 501e6cb4aa83f81c1f657e41f4e7f11d19d46831..b9a2064fd3a08aa21f1a25d3f367342852185974 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java @@ -78,14 +78,82 @@ public class Dolphin extends WaterAnimal { @@ -1037,10 +1037,10 @@ index 501e6cb4aa83f81c1f657e41f4e7f11d19d46831..057ebdba945caa27db8982fe140d858b + loc.setPitch(loc.getPitch() - 10); + org.bukkit.util.Vector target = loc.getDirection().normalize().multiply(10).add(loc.toVector()); + -+ org.purpurmc.purpur.entity.DolphinSpit spit = new org.purpurmc.purpur.entity.DolphinSpit(level, this); ++ org.purpurmc.purpur.entity.DolphinSpit spit = new org.purpurmc.purpur.entity.DolphinSpit(level(), this); + spit.shoot(target.getX() - getX(), target.getY() - getY(), target.getZ() - getZ(), level().purpurConfig.dolphinSpitSpeed, 5.0F); + -+ level.addFreshEntity(spit); ++ level().addFreshEntity(spit); + playSound(SoundEvents.DOLPHIN_ATTACK, 1.0F, 1.0F + (random.nextFloat() - random.nextFloat()) * 0.2F); + return true; + } @@ -2894,7 +2894,7 @@ index 92666c48620078623a451fbf68f673cb9f81c4b5..5a2eb6775ecb3b01fd136c796258395b this.dragonFight.updateDragon(this); } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index f69e0b11be74ac83694f59999b3f07a318410c19..cfde1cde09112251410495203f7daa457c5ed728 100644 +index f69e0b11be74ac83694f59999b3f07a318410c19..2a8f6b1fb7f3aac3100e5dc9ee64c53c0edd165b 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -84,16 +84,30 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -3021,11 +3021,11 @@ index f69e0b11be74ac83694f59999b3f07a318410c19..cfde1cde09112251410495203f7daa45 + } + + public void shoot(int head, double x, double y, double z, Player rider) { -+ level.levelEvent(null, 1024, blockPosition(), 0); ++ level().levelEvent(null, 1024, blockPosition(), 0); + double headX = getHeadX(head); + double headY = getHeadY(head); + double headZ = getHeadZ(head); -+ WitherSkull skull = new WitherSkull(level, this, x - headX, y - headY, z - headZ) { ++ WitherSkull skull = new WitherSkull(level(), this, x - headX, y - headY, z - headZ) { + @Override + public boolean canHitEntity(Entity target) { + // do not hit rider @@ -3033,7 +3033,7 @@ index f69e0b11be74ac83694f59999b3f07a318410c19..cfde1cde09112251410495203f7daa45 + } + }; + skull.setPosRaw(headX, headY, headZ); -+ level.addFreshEntity(skull); ++ level().addFreshEntity(skull); + } + // Purpur end + @@ -3871,7 +3871,7 @@ index 2858ea5562d06c11e5c7337a2b123f9be7a3f62e..aad51022eac584fbc058c2b25e2bf192 @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 4a132c3eff6978e927bcd4df56b9ce0306af6d19..ea613fe67fcd977aebaae891f95272970ba23698 100644 +index 4a132c3eff6978e927bcd4df56b9ce0306af6d19..519d7667e6a8bcb39c200546af5ebbf74e0e9368 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -60,6 +60,64 @@ public class Phantom extends FlyingMob implements Enemy { @@ -3931,7 +3931,7 @@ index 4a132c3eff6978e927bcd4df56b9ce0306af6d19..ea613fe67fcd977aebaae891f9527297 + org.purpurmc.purpur.entity.PhantomFlames flames = new org.purpurmc.purpur.entity.PhantomFlames(level, this); + flames.canGrief = level().purpurConfig.phantomAllowGriefing; + flames.shoot(target.getX() - getX(), target.getY() - getY(), target.getZ() - getZ(), 1.0F, 5.0F); -+ level.addFreshEntity(flames); ++ level().addFreshEntity(flames); + return true; + } + // Purpur end @@ -5110,6 +5110,19 @@ index 0bbe853f7df93f9dcd2b21d762939f8b6be069aa..7db9844083703944f59e112c6dc5e1a5 @Override public void tick() { super.tick(); +diff --git a/src/main/java/net/minecraft/world/entity/projectile/ProjectileUtil.java b/src/main/java/net/minecraft/world/entity/projectile/ProjectileUtil.java +index cc0a3d9794d05b6bc6ab05f4f2ab8d83134b181d..e1f918d0bd2a70db1aba8bda8717149f58766825 100644 +--- a/src/main/java/net/minecraft/world/entity/projectile/ProjectileUtil.java ++++ b/src/main/java/net/minecraft/world/entity/projectile/ProjectileUtil.java +@@ -33,7 +33,7 @@ public final class ProjectileUtil { + return getHitResult(vec32, entity, predicate, vec3, level); + } + +- private static HitResult getHitResult(Vec3 pos, Entity entity, Predicate predicate, Vec3 velocity, Level world) { ++ public static HitResult getHitResult(Vec3 pos, Entity entity, Predicate predicate, Vec3 velocity, Level world) { // Purpur - private -> public + Vec3 vec3 = pos.add(velocity); + HitResult hitResult = world.clip(new ClipContext(pos, vec3, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, entity)); + if (hitResult.getType() != HitResult.Type.MISS) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java index ea056babe2f8123f20dc608d8a636da1de634b8c..a820a00440510d77fa1839eef485f8ea2de9ff84 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -6303,7 +6316,7 @@ index 0000000000000000000000000000000000000000..ba2a37dad43e238e54632975abea8ee6 +} diff --git a/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java new file mode 100644 -index 0000000000000000000000000000000000000000..a3512b14ecc5b855831e44e7a34d6eba37851e76 +index 0000000000000000000000000000000000000000..b436fd92e2db17f6a2ee4118a7a51e324b567b46 --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java @@ -0,0 +1,99 @@ @@ -6401,14 +6414,14 @@ index 0000000000000000000000000000000000000000..a3512b14ecc5b855831e44e7a34d6eba + if (this.hitCancelled) { + return; + } -+ BlockState state = this.level.getBlockState(blockHitResult.getBlockPos()); ++ BlockState state = this.level().getBlockState(blockHitResult.getBlockPos()); + state.onProjectileHit(this.level, state, blockHitResult, this); + this.discard(); + } +} 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..c99c7d296126dc36641d2d391092fa1f383a62bf +index 0000000000000000000000000000000000000000..1fd6412e332ea8ee82b19c108e113624e51d764b --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java @@ -0,0 +1,114 @@ @@ -6456,7 +6469,7 @@ index 0000000000000000000000000000000000000000..c99c7d296126dc36641d2d391092fa1f + super_tick(); + + Vec3 mot = this.getDeltaMovement(); -+ HitResult hitResult = ProjectileUtil.getHitResult(this, this::canHitEntity); ++ HitResult hitResult = ProjectileUtil.getHitResult(this.position(), this, this::canHitEntity, mot, level()); + + this.preOnHit(hitResult); + @@ -6468,7 +6481,7 @@ index 0000000000000000000000000000000000000000..c99c7d296126dc36641d2d391092fa1f + + Vec3 motDouble = mot.scale(2.0); + for (int i = 0; i < 5; i++) { -+ ((ServerLevel) level).sendParticles(null, ParticleTypes.FLAME, ++ ((ServerLevel) level()).sendParticles(null, ParticleTypes.FLAME, + getX() + random.nextFloat() / 2 - 0.25F, + getY() + random.nextFloat() / 2 - 0.25F, + getZ() + random.nextFloat() / 2 - 0.25F, @@ -6477,7 +6490,7 @@ index 0000000000000000000000000000000000000000..c99c7d296126dc36641d2d391092fa1f + + if (++ticksLived > 20) { + this.discard(); -+ } else if (this.level.getBlockStates(this.getBoundingBox()).noneMatch(BlockBehaviour.BlockStateBase::isAir)) { ++ } else if (this.level().getBlockStates(this.getBoundingBox()).noneMatch(BlockBehaviour.BlockStateBase::isAir)) { + this.discard(); + } else if (this.isInWaterOrBubble()) { + this.discard(); @@ -6520,8 +6533,8 @@ index 0000000000000000000000000000000000000000..c99c7d296126dc36641d2d391092fa1f + return; + } + if (this.canGrief) { -+ BlockState state = this.level.getBlockState(blockHitResult.getBlockPos()); -+ state.onProjectileHit(this.level, state, blockHitResult, this); ++ BlockState state = this.level().getBlockState(blockHitResult.getBlockPos()); ++ state.onProjectileHit(this.level(), state, blockHitResult, this); + } + this.discard(); + } diff --git a/patches/server/0010-AFK-API.patch b/patches/server/0010-AFK-API.patch index fdddbf5fb..32c1d48b6 100644 --- a/patches/server/0010-AFK-API.patch +++ b/patches/server/0010-AFK-API.patch @@ -6,7 +6,7 @@ Subject: [PATCH] AFK API Adds the option for display names to be used in the afk broadcast diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index d33eb475a41791b298c3300a14cf2af17e200c6c..68c163b6817ba4dd6ecd6b1fc82e37e5549d9569 100644 +index 632af791c9c4c9d2fa84f46b0c28bb8089930ebe..62fb638dc4d1f88ff6ddb48bad891b77baf5443c 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -2116,8 +2116,68 @@ public class ServerPlayer extends Player { @@ -61,7 +61,7 @@ index d33eb475a41791b298c3300a14cf2af17e200c6c..68c163b6817ba4dd6ecd6b1fc82e37e5 + } + } + -+ ((ServerLevel) this.level).updateSleepingPlayerList(); ++ ((ServerLevel) this.level()).updateSleepingPlayerList(); + } + + @Override @@ -290,7 +290,7 @@ index 687710a138edd8492e58aa026872851d00466508..d11442476371fefe6549654c97825a01 public static boolean enderChestSixRows = false; public static boolean enderChestPermissionRows = false; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b51c96e3f09d303f28675fc440ad402fca3db654..7052ca0128562fb59c3acc2ef354092e349cbffb 100644 +index 2bd21bcd94e63048f29bf7e833fabb0751308447..835795fda996469b365f7513a393593af3792d77 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -92,6 +92,24 @@ public class PurpurWorldConfig { diff --git a/patches/server/0019-Silk-touch-spawners.patch b/patches/server/0019-Silk-touch-spawners.patch index de7c0f75b..33e7312a7 100644 --- a/patches/server/0019-Silk-touch-spawners.patch +++ b/patches/server/0019-Silk-touch-spawners.patch @@ -18,7 +18,7 @@ index 5f20e075c532f0f1d413242949d1738c0c152bf7..e6f8cb165f7e3da5f0edfc952d140595 public static final Item CRAFTING_TABLE = registerBlock(Blocks.CRAFTING_TABLE); public static final Item FARMLAND = registerBlock(Blocks.FARMLAND); diff --git a/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java b/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java -index 936d844a5a246138c9f9ae4ae6e318242b8f1420..3bacb283befd396b757aef54008d89ca029ae52c 100644 +index 936d844a5a246138c9f9ae4ae6e318242b8f1420..d58dc4aa02fe371deaf879df8692dbe93c648f9b 100644 --- a/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java @@ -40,6 +40,58 @@ public class SpawnerBlock extends BaseEntityBlock { @@ -28,7 +28,7 @@ index 936d844a5a246138c9f9ae4ae6e318242b8f1420..3bacb283befd396b757aef54008d89ca + // Purpur start + @Override + public void playerDestroy(Level level, net.minecraft.world.entity.player.Player player, BlockPos pos, BlockState state, BlockEntity blockEntity, ItemStack stack) { -+ if (level().purpurConfig.silkTouchEnabled && player.getBukkitEntity().hasPermission("purpur.drop.spawners") && isSilkTouch(level, stack)) { ++ if (level.purpurConfig.silkTouchEnabled && player.getBukkitEntity().hasPermission("purpur.drop.spawners") && isSilkTouch(level, stack)) { + Optional> type = net.minecraft.world.entity.EntityType.by(((SpawnerBlockEntity) blockEntity).getSpawner().nextSpawnData.getEntityToSpawn()); + + net.minecraft.world.entity.EntityType entityType = type.orElse(null); @@ -36,7 +36,7 @@ index 936d844a5a246138c9f9ae4ae6e318242b8f1420..3bacb283befd396b757aef54008d89ca + CompoundTag display = new CompoundTag(); + CompoundTag tag = new CompoundTag(); + -+ String name = level().purpurConfig.silkTouchSpawnerName; ++ String name = level.purpurConfig.silkTouchSpawnerName; + if (name != null && !name.isEmpty() && !name.equals("Monster Spawner")) { + net.kyori.adventure.text.Component displayName = net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(name, net.kyori.adventure.text.minimessage.tag.resolver.Placeholder.component("mob", mobName)); + if (name.startsWith("")) { @@ -46,7 +46,7 @@ index 936d844a5a246138c9f9ae4ae6e318242b8f1420..3bacb283befd396b757aef54008d89ca + tag.put("display", display); + } + -+ List lore = level().purpurConfig.silkTouchSpawnerLore; ++ List lore = level.purpurConfig.silkTouchSpawnerLore; + if (lore != null && !lore.isEmpty()) { + net.minecraft.nbt.ListTag list = new net.minecraft.nbt.ListTag(); + for (String line : lore) { @@ -73,7 +73,7 @@ index 936d844a5a246138c9f9ae4ae6e318242b8f1420..3bacb283befd396b757aef54008d89ca + } + + private boolean isSilkTouch(Level level, ItemStack stack) { -+ return stack != null && level().purpurConfig.silkTouchTools.contains(stack.getItem()) && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.SILK_TOUCH, stack) >= level().purpurConfig.minimumSilkTouchSpawnerRequire; ++ return stack != null && level.purpurConfig.silkTouchTools.contains(stack.getItem()) && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.SILK_TOUCH, stack) >= level.purpurConfig.minimumSilkTouchSpawnerRequire; + } + // Purpur end + @@ -89,7 +89,7 @@ index 936d844a5a246138c9f9ae4ae6e318242b8f1420..3bacb283befd396b757aef54008d89ca 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 724ceea7198e540c391e0c5ad02817033bec694c..67468fde7d4a670bb5b85ef07648cb7ffec6fc74 100644 +index 9c2a8b9c56e1dbd79573740d8c16ba8e01c43f4b..1d33fed2bd6702ea68ebd0b6bebb642151fd2e52 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -114,6 +114,38 @@ public class PurpurWorldConfig { @@ -133,7 +133,7 @@ index 724ceea7198e540c391e0c5ad02817033bec694c..67468fde7d4a670bb5b85ef07648cb7f public boolean useNightVisionWhenRiding = false; diff --git a/src/main/java/org/purpurmc/purpur/item/SpawnerItem.java b/src/main/java/org/purpurmc/purpur/item/SpawnerItem.java new file mode 100644 -index 0000000000000000000000000000000000000000..bc59969740ea3518874e1be9f566804c1b518dcd +index 0000000000000000000000000000000000000000..c038fb2bbb0f0e78380bc24bbd6348b869669a90 --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/item/SpawnerItem.java @@ -0,0 +1,36 @@ @@ -160,7 +160,7 @@ index 0000000000000000000000000000000000000000..bc59969740ea3518874e1be9f566804c + @Override + protected boolean updateCustomBlockEntityTag(BlockPos pos, Level level, Player player, ItemStack stack, BlockState state) { + boolean handled = super.updateCustomBlockEntityTag(pos, level, player, stack, state); -+ if (level().purpurConfig.silkTouchEnabled && player.getBukkitEntity().hasPermission("purpur.place.spawners")) { ++ if (level.purpurConfig.silkTouchEnabled && player.getBukkitEntity().hasPermission("purpur.place.spawners")) { + BlockEntity spawner = level.getBlockEntity(pos); + if (spawner instanceof SpawnerBlockEntity && stack.hasTag()) { + CompoundTag tag = stack.getTag(); diff --git a/patches/server/0023-Giants-AI-settings.patch b/patches/server/0023-Giants-AI-settings.patch index ccaeb8e43..e8b1609f9 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 db95323da1aef267aa4fbe56aaff63cb8684e15b..29491be5f607477acd336fcff8cc472ad740ed50 100644 +index db95323da1aef267aa4fbe56aaff63cb8684e15b..12e27b36b3f9949eb644175dd346c487277b2d39 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Giant.java +++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java @@ -1,13 +1,36 @@ @@ -45,12 +45,12 @@ index db95323da1aef267aa4fbe56aaff63cb8684e15b..29491be5f607477acd336fcff8cc472a public class Giant extends Monster { public Giant(EntityType type, Level world) { -@@ -45,6 +68,53 @@ public class Giant extends Monster { - this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(this.level().purpurConfig.giantAttackDamage); - } +@@ -33,8 +56,23 @@ public class Giant extends Monster { -+ @Override -+ protected void registerGoals() { + @Override + protected void registerGoals() { +- this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); +- this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); + if (level().purpurConfig.giantHaveAI) { + this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); @@ -68,8 +68,13 @@ index db95323da1aef267aa4fbe56aaff63cb8684e15b..29491be5f607477acd336fcff8cc472a + this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, true)); + } + } -+ } -+ + } + // Purpur end + +@@ -45,6 +83,32 @@ public class Giant extends Monster { + this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(this.level().purpurConfig.giantAttackDamage); + } + + @Override + public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { + SpawnGroupData groupData = super.finalizeSpawn(world, difficulty, spawnReason, entityData, entityNbt); @@ -99,7 +104,7 @@ index db95323da1aef267aa4fbe56aaff63cb8684e15b..29491be5f607477acd336fcff8cc472a @Override protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { return 10.440001F; -@@ -56,6 +126,6 @@ public class Giant extends Monster { +@@ -56,6 +120,6 @@ public class Giant extends Monster { @Override public float getWalkTargetValue(BlockPos pos, LevelReader world) { @@ -108,7 +113,7 @@ index db95323da1aef267aa4fbe56aaff63cb8684e15b..29491be5f607477acd336fcff8cc472a } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index cd259a48b86fa257fc0ec748e667ba17e26e98a5..940ff156a42369656b919bef3dbadfc98d7dce01 100644 +index d4d7a0543953a02305348f4744a3467a8b2f02d2..c1996047ebfb4f515a037bf4b8d7872eb8363739 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -558,6 +558,10 @@ public class PurpurWorldConfig { diff --git a/patches/server/0026-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/server/0026-Rabbit-naturally-spawn-toast-and-killer.patch index 9cbe2aef4..9d0715314 100644 --- a/patches/server/0026-Rabbit-naturally-spawn-toast-and-killer.patch +++ b/patches/server/0026-Rabbit-naturally-spawn-toast-and-killer.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Rabbit naturally spawn toast and killer diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index db37932e56d88717a61eb8608b44c6911513aa35..48864c6f720be9132840e05ff4e7eb394ce3ad1d 100644 +index db37932e56d88717a61eb8608b44c6911513aa35..2f373666e982a8c4e769168b565ca26e75fe59e9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java @@ -472,10 +472,23 @@ public class Rabbit extends Animal implements VariantHolder { @@ -25,7 +25,7 @@ index db37932e56d88717a61eb8608b44c6911513aa35..48864c6f720be9132840e05ff4e7eb39 private static Rabbit.Variant getRandomRabbitVariant(LevelAccessor world, BlockPos pos) { + // Purpur start + Level level = world.getMinecraftWorld(); -+ if (level().purpurConfig.rabbitNaturalKiller > 0D && world.getRandom().nextDouble() <= level().purpurConfig.rabbitNaturalKiller) { ++ if (level.purpurConfig.rabbitNaturalKiller > 0D && world.getRandom().nextDouble() <= level.purpurConfig.rabbitNaturalKiller) { + return Rabbit.Variant.EVIL; + } + // Purpur end @@ -33,7 +33,7 @@ index db37932e56d88717a61eb8608b44c6911513aa35..48864c6f720be9132840e05ff4e7eb39 int i = world.getRandom().nextInt(100); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c42ae175742c4072d43dd04bd25a1338004e198a..62937cdd2e6cc83a28bf96550b9ea4558f522c67 100644 +index e9fbb9f7aeadd2860491a8afdc200de40b51320b..81d72372bc205796f55a742655ef2b01d53db24a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -995,6 +995,8 @@ public class PurpurWorldConfig { diff --git a/patches/server/0033-Cows-eat-mushrooms.patch b/patches/server/0033-Cows-eat-mushrooms.patch index 32a59786f..5d232df1e 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 d26a44d634fe02e595654e573d02243b5eb66086..e5e84c85d2b1c84c7612392bb060f713bd03ddcf 100644 +index d26a44d634fe02e595654e573d02243b5eb66086..b94ec05ffa0a6f9e7368731d360319ffe1b10e3f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -2,6 +2,7 @@ package net.minecraft.world.entity.animal; @@ -65,7 +65,7 @@ index d26a44d634fe02e595654e573d02243b5eb66086..e5e84c85d2b1c84c7612392bb060f713 + } + + private InteractionResult feedMushroom(Player player, ItemStack stack) { -+ level.broadcastEntityEvent(this, (byte) 18); // hearts ++ level().broadcastEntityEvent(this, (byte) 18); // hearts + playSound(SoundEvents.COW_MILK, 1.0F, 1.0F); + if (incrementFeedCount(stack) < level().purpurConfig.cowFeedMushrooms) { + if (!player.getAbilities().instabuild) { @@ -73,7 +73,7 @@ index d26a44d634fe02e595654e573d02243b5eb66086..e5e84c85d2b1c84c7612392bb060f713 + } + return InteractionResult.CONSUME; // require 5 mushrooms to transform (prevents mushroom duping) + } -+ MushroomCow mooshroom = EntityType.MOOSHROOM.create(level); ++ MushroomCow mooshroom = EntityType.MOOSHROOM.create(level()); + if (mooshroom == null) { + return InteractionResult.PASS; + } @@ -99,13 +99,13 @@ index d26a44d634fe02e595654e573d02243b5eb66086..e5e84c85d2b1c84c7612392bb060f713 + if (!new com.destroystokyo.paper.event.entity.EntityTransformedEvent(this.getBukkitEntity(), mooshroom.getBukkitEntity(), com.destroystokyo.paper.event.entity.EntityTransformedEvent.TransformedReason.INFECTED).callEvent()) { + return InteractionResult.PASS; + } -+ this.level.addFreshEntity(mooshroom); ++ this.level().addFreshEntity(mooshroom); + this.remove(RemovalReason.DISCARDED); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + for (int i = 0; i < 15; ++i) { -+ ((ServerLevel) level).sendParticles(((ServerLevel) level).players(), null, ParticleTypes.HAPPY_VILLAGER, ++ ((ServerLevel) level()).sendParticles(((ServerLevel) level()).players(), null, ParticleTypes.HAPPY_VILLAGER, + getX() + random.nextFloat(), getY() + (random.nextFloat() * 2), getZ() + random.nextFloat(), 1, + random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, 0, true); + } diff --git a/patches/server/0039-Minecart-settings-and-WASD-controls.patch b/patches/server/0039-Minecart-settings-and-WASD-controls.patch index d520630a3..20ea9231c 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 dcc4a25a8c7a7809222cf585901f057c64946a68..d97eec4118983794b49018882f4cf1f2629bf0a7 100644 +index 29f4b1142269675a76401ba2d3ae965839db4e3f..c28a819ea5bb93914dda4b94be42506e9492f9f2 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1112,6 +1112,7 @@ public class ServerPlayer extends Player { @@ -111,7 +111,7 @@ index 9948a28dae4edba877c13ef0156be5ff58df3fa2..5cdcc5792f19766d2d55d16859f8e0f6 this.move(MoverType.SELF, this.getDeltaMovement()); if (!this.onGround()) { diff --git a/src/main/java/net/minecraft/world/item/MinecartItem.java b/src/main/java/net/minecraft/world/item/MinecartItem.java -index c6d2f764efa9b8bec730bbe757d480e365b25ccc..33a30d26da2401535f0a72acb2bbffec1aef151e 100644 +index c6d2f764efa9b8bec730bbe757d480e365b25ccc..cef98413d25dcc2def82775bbae71f92b096d905 100644 --- a/src/main/java/net/minecraft/world/item/MinecartItem.java +++ b/src/main/java/net/minecraft/world/item/MinecartItem.java @@ -120,8 +120,9 @@ public class MinecartItem extends Item { @@ -121,7 +121,7 @@ index c6d2f764efa9b8bec730bbe757d480e365b25ccc..33a30d26da2401535f0a72acb2bbffec - return InteractionResult.FAIL; - } else { + if (!world.purpurConfig.minecartPlaceAnywhere) return InteractionResult.FAIL; -+ if (iblockdata.getMaterial().isSolid()) blockposition = blockposition.relative(context.getClickedFace()); ++ if (iblockdata.isSolid()) blockposition = blockposition.relative(context.getClickedFace()); + } // else { // Purpur - place minecarts anywhere ItemStack itemstack = context.getItemInHand(); @@ -148,7 +148,7 @@ index de4c1e4701236e7d5ec77339c51ad6a9d8288bb6..5ac102afde62c08f36886b466010ccfe protected ResourceLocation drops; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e4f5b63162423a4d8fe0704746bd18f6a6134b2c..60f5f27583e57105bbc95ce72138d2b530669c56 100644 +index fc0ac2a2531080f98fea4b620dd3f310146b5567..88cfcd838262b553ebb78bd5398472e0b44a0c4f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -97,6 +97,68 @@ public class PurpurWorldConfig { diff --git a/patches/server/0050-Implement-infinite-liquids.patch b/patches/server/0050-Implement-infinite-liquids.patch index 2a906d49a..6c5303949 100644 --- a/patches/server/0050-Implement-infinite-liquids.patch +++ b/patches/server/0050-Implement-infinite-liquids.patch @@ -31,7 +31,7 @@ index 5502ad143fd2575f1346334b5b4fe7846628f54e..37f6de6166fbede2d216e462cf7b1672 if (state.getBlock() instanceof LiquidBlockContainer) { ((LiquidBlockContainer) state.getBlock()).placeLiquid(world, pos, state, fluidState); diff --git a/src/main/java/net/minecraft/world/level/material/LavaFluid.java b/src/main/java/net/minecraft/world/level/material/LavaFluid.java -index 72f8b72c6436ca3b8eaeb39c7d3efe2c1462ae1d..c0c072898226710f7e2e12b37838f7cfdfb0dde0 100644 +index 72f8b72c6436ca3b8eaeb39c7d3efe2c1462ae1d..3706ebc551413401b0e6a9a0b1c2e3257d1337c1 100644 --- a/src/main/java/net/minecraft/world/level/material/LavaFluid.java +++ b/src/main/java/net/minecraft/world/level/material/LavaFluid.java @@ -198,6 +198,13 @@ public abstract class LavaFluid extends FlowingFluid { @@ -41,7 +41,7 @@ index 72f8b72c6436ca3b8eaeb39c7d3efe2c1462ae1d..c0c072898226710f7e2e12b37838f7cf + // Purpur start + @Override + protected int getRequiredSources(Level level) { -+ return level().purpurConfig.lavaInfiniteRequiredSources; ++ return level.purpurConfig.lavaInfiniteRequiredSources; + } + // Purpur end + @@ -49,7 +49,7 @@ index 72f8b72c6436ca3b8eaeb39c7d3efe2c1462ae1d..c0c072898226710f7e2e12b37838f7cf protected boolean canConvertToSource(Level world) { return world.getGameRules().getBoolean(GameRules.RULE_LAVA_SOURCE_CONVERSION); diff --git a/src/main/java/net/minecraft/world/level/material/WaterFluid.java b/src/main/java/net/minecraft/world/level/material/WaterFluid.java -index 82e85fbbd45244d02df90fa00c9046e7f51275a2..472dbf007468c39cfaa74e837e2df1cef9a8d1bf 100644 +index 82e85fbbd45244d02df90fa00c9046e7f51275a2..ec6c63075306f9e5389e83641d2c8a82369ddc6b 100644 --- a/src/main/java/net/minecraft/world/level/material/WaterFluid.java +++ b/src/main/java/net/minecraft/world/level/material/WaterFluid.java @@ -64,6 +64,13 @@ public abstract class WaterFluid extends FlowingFluid { @@ -59,7 +59,7 @@ index 82e85fbbd45244d02df90fa00c9046e7f51275a2..472dbf007468c39cfaa74e837e2df1ce + // Purpur start + @Override + protected int getRequiredSources(Level level) { -+ return level().purpurConfig.waterInfiniteRequiredSources; ++ return level.purpurConfig.waterInfiniteRequiredSources; + } + // Purpur end + @@ -67,7 +67,7 @@ index 82e85fbbd45244d02df90fa00c9046e7f51275a2..472dbf007468c39cfaa74e837e2df1ce @Override protected void beforeDestroyingBlock(LevelAccessor world, BlockPos pos, BlockState state, BlockPos source) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 97710a3988ead1049b35de2a9be89cec738ed149..b99bd530802a3212cc42438b607d1aa46587acef 100644 +index 47b1152efa1f5ab2f1a0a4d34be3c8e6644457fb..0124b074f936a4e68b539deb9625d153a076d999 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -227,6 +227,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0054-Add-canSaveToDisk-to-Entity.patch b/patches/server/0054-Add-canSaveToDisk-to-Entity.patch index add0535dd..13e769a1c 100644 --- a/patches/server/0054-Add-canSaveToDisk-to-Entity.patch +++ b/patches/server/0054-Add-canSaveToDisk-to-Entity.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add canSaveToDisk to Entity diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index f5ae3d265fa190af4d8205ffa45ce053fe0c7ddc..cfef8dec1a96c97bd087ed6dc55eadae4feae079 100644 +index ba7901f72f97275ffac8d30e7b6c39f1f31dad37..0447ed23dd3e09fb887b7d7911846030a4e7fb45 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -473,6 +473,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { @@ -20,21 +20,21 @@ index f5ae3d265fa190af4d8205ffa45ce053fe0c7ddc..cfef8dec1a96c97bd087ed6dc55eadae return this.hardCollides; } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 1fcf73cfe789bfe89c5ac01d4bd260e8d7dc0fc0..0ecbee51a48171cad95cc80bd26644774064fead 100644 +index 38800a318f675ab11eeba17cb1966e9a294c69e1..a20017a6086421061ee13df9cf37e08eeb515a5b 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -314,6 +314,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob - vec3d = vec3d.add(vec3d2.x * 0.3D - vec3d.x * 0.6D, 0.0D, vec3d2.z * 0.3D - vec3d.z * 0.6D); - } - } +@@ -229,6 +229,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob + skull.setPosRaw(headX, headY, headZ); + level().addFreshEntity(skull); + } + -+ @Override -+ public boolean canSaveToDisk() { -+ return false; -+ } - } ++ @Override ++ public boolean canSaveToDisk() { ++ return false; ++ } + // Purpur end - this.setDeltaMovement(vec3d); + @Override diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java index 0ec0be22f7292d57c40da6f1f4575bdebf8dbd09..f1d19cbe165a190cac325e646c7e8080b59cdd54 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java @@ -47,3 +47,39 @@ index 0ec0be22f7292d57c40da6f1f4575bdebf8dbd09..f1d19cbe165a190cac325e646c7e8080 CompoundTag compoundTag = new CompoundTag(); if (entity.save(compoundTag)) { listTag.add(compoundTag); +diff --git a/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java +index b436fd92e2db17f6a2ee4118a7a51e324b567b46..fe14721ac16e702850a778b7481e306ed4bdfd74 100644 +--- a/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java ++++ b/src/main/java/org/purpurmc/purpur/entity/DolphinSpit.java +@@ -35,6 +35,13 @@ public class DolphinSpit extends LlamaSpit { + dolphin.getZ() + (double) (dolphin.getBbWidth() + 1.0F) * 0.5D * (double) Mth.cos(dolphin.yBodyRot * 0.017453292F)); + } + ++ // Purpur start ++ @Override ++ public boolean canSaveToDisk() { ++ return false; ++ } ++ // Purpur end ++ + public void tick() { + super_tick(); + +diff --git a/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java +index 1fd6412e332ea8ee82b19c108e113624e51d764b..ea8b928b6d82689e71bbcc39ab497491072dfba6 100644 +--- a/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java ++++ b/src/main/java/org/purpurmc/purpur/entity/PhantomFlames.java +@@ -38,6 +38,13 @@ public class PhantomFlames extends LlamaSpit { + phantom.getZ() + (double) (phantom.getBbWidth() + 1.0F) * 0.5D * (double) Mth.cos(phantom.yBodyRot * 0.017453292F)); + } + ++ // Purpur start ++ @Override ++ public boolean canSaveToDisk() { ++ return false; ++ } ++ // Purpur end ++ + public void tick() { + super_tick(); + diff --git a/patches/server/0071-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0071-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index 01f6f0649..48c9a1239 100644 --- a/patches/server/0071-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0071-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -5,7 +5,7 @@ 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 b0eab4e73c85e4c18301978daac91a4b862617b0..375a6a12cabfdc798792166a60e3b18e8cbd7480 100644 +index c28a819ea5bb93914dda4b94be42506e9492f9f2..14d5af88fb39af6bc6a8461972de3a96ad4f0de8 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -2758,4 +2758,26 @@ public class ServerPlayer extends Player { @@ -27,7 +27,7 @@ index b0eab4e73c85e4c18301978daac91a4b862617b0..375a6a12cabfdc798792166a60e3b18e + } + + ServerLevel toLevel = ((CraftWorld) to.getWorld()).getHandle(); -+ if (this.level == toLevel) { ++ 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)); + } else { + this.server.getPlayerList().respawn(this, toLevel, true, to, !toLevel.paperConfig().environment.disableTeleportationSuffocationCheck, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason.DEATH); @@ -36,7 +36,7 @@ index b0eab4e73c85e4c18301978daac91a4b862617b0..375a6a12cabfdc798792166a60e3b18e + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 7126ce61f58079d924bb86ff9257d75612bcc704..637d90f2f5e9f8807516a757ef82d5b2014c752b 100644 +index 851bffca44dce8680a34bd5e862c1c0794806021..20b3b2deae7b72cc16f5e47ad73fab4d9779d047 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -429,6 +429,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -48,7 +48,7 @@ index 7126ce61f58079d924bb86ff9257d75612bcc704..637d90f2f5e9f8807516a757ef82d5b2 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f553c681956dc6d93c0bf864d054a25ce6236115..e62c71804a0595574e49cd08ce11eee52eab7479 100644 +index 0b3b845ba43c8f78424cd843cf3ac69dda5a5bad..082a97f808aba17b03d67e939e282781a4793cf2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -246,6 +246,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0079-Dispensers-place-anvils-option.patch b/patches/server/0079-Dispensers-place-anvils-option.patch index 631054912..1c8b9a743 100644 --- a/patches/server/0079-Dispensers-place-anvils-option.patch +++ b/patches/server/0079-Dispensers-place-anvils-option.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Dispensers place anvils option diff --git a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java -index b4f5dbe9022dd20437c15c4f6fbe2ac06dacbadb..58ee591dc4c5ae6e02dcff3d49d6a82f68e1ceb7 100644 +index b4f5dbe9022dd20437c15c4f6fbe2ac06dacbadb..b52a9f05ada86f2d3767dd0d5ba8705e22f105d6 100644 --- a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java +++ b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java @@ -52,6 +52,7 @@ import net.minecraft.world.item.SpawnEggItem; @@ -25,7 +25,7 @@ index b4f5dbe9022dd20437c15c4f6fbe2ac06dacbadb..58ee591dc4c5ae6e02dcff3d49d6a82f + @Override + public ItemStack execute(BlockSource dispenser, ItemStack stack) { + Level level = dispenser.getLevel(); -+ if (!level().purpurConfig.dispenserPlaceAnvils) return super.execute(dispenser, stack); ++ if (!level.purpurConfig.dispenserPlaceAnvils) return super.execute(dispenser, stack); + Direction facing = dispenser.getBlockState().getValue(DispenserBlock.FACING); + BlockPos pos = dispenser.getPos().relative(facing); + BlockState state = level.getBlockState(pos); @@ -41,7 +41,7 @@ index b4f5dbe9022dd20437c15c4f6fbe2ac06dacbadb..58ee591dc4c5ae6e02dcff3d49d6a82f static void setEntityPokingOutOfBlock(BlockSource pointer, Entity entity, Direction direction) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 66162ef0ed12cd0bc4c705758dbbca19c3952d19..4c04982da44f13600a0410981754ab8fcdad6b7c 100644 +index 6fc8425ad4a2053fb7769e7f579d7ae226070511..93b2e578a44132c92cb8152edb49a55f048a03bf 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -321,8 +321,10 @@ public class PurpurWorldConfig { diff --git a/patches/server/0089-Raid-cooldown-setting.patch b/patches/server/0089-Raid-cooldown-setting.patch index b48ee558f..f825075ab 100644 --- a/patches/server/0089-Raid-cooldown-setting.patch +++ b/patches/server/0089-Raid-cooldown-setting.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Raid cooldown setting diff --git a/src/main/java/net/minecraft/world/entity/raid/Raids.java b/src/main/java/net/minecraft/world/entity/raid/Raids.java -index 41457c9f27b18fa2734a6cca297ec5186470e82f..aa095686746ecc252b66670ba541cd243b6f7061 100644 +index 41457c9f27b18fa2734a6cca297ec5186470e82f..94356e0541f8f4da68211fa533347cc97d4f3518 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raids.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raids.java @@ -28,6 +28,7 @@ import net.minecraft.world.phys.Vec3; @@ -21,7 +21,7 @@ index 41457c9f27b18fa2734a6cca297ec5186470e82f..aa095686746ecc252b66670ba541cd24 public void tick() { ++this.tick; + // Purpur start -+ if (level().purpurConfig.raidCooldownSeconds != 0 && this.tick % 20 == 0) { ++ if (level.purpurConfig.raidCooldownSeconds != 0 && this.tick % 20 == 0) { + com.google.common.collect.ImmutableMap.copyOf(playerCooldowns).forEach((uuid, i) -> { + if (i < 1) { + playerCooldowns.remove(uuid); @@ -38,18 +38,18 @@ index 41457c9f27b18fa2734a6cca297ec5186470e82f..aa095686746ecc252b66670ba541cd24 } if (flag) { -+ if (level().purpurConfig.raidCooldownSeconds != 0 && playerCooldowns.containsKey(player.getUUID())) return null; // Purpur ++ if (level.purpurConfig.raidCooldownSeconds != 0 && playerCooldowns.containsKey(player.getUUID())) return null; // Purpur // CraftBukkit start if (!org.bukkit.craftbukkit.event.CraftEventFactory.callRaidTriggerEvent(raid, player)) { player.removeEffect(MobEffects.BAD_OMEN); return null; } -+ if (level().purpurConfig.raidCooldownSeconds != 0) playerCooldowns.put(player.getUUID(), level().purpurConfig.raidCooldownSeconds); // Purpur ++ if (level.purpurConfig.raidCooldownSeconds != 0) playerCooldowns.put(player.getUUID(), level.purpurConfig.raidCooldownSeconds); // Purpur if (!this.raidMap.containsKey(raid.getId())) { this.raidMap.put(raid.getId(), raid); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8eed1a2de61066137c8f7404e9156b0c204b4581..917ea564edcf27b727901028f5035a6caddfb08e 100644 +index c97375f60d10121f738f0f162b15c3f25d7d0eeb..7ae9b221c851139be2e289a5baca644b7d19a8c5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -111,6 +111,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0095-Configurable-daylight-cycle.patch b/patches/server/0095-Configurable-daylight-cycle.patch index 5fb54e2bc..d3b7d9bb4 100644 --- a/patches/server/0095-Configurable-daylight-cycle.patch +++ b/patches/server/0095-Configurable-daylight-cycle.patch @@ -18,7 +18,7 @@ index 9ec6145fe04ec64bbee8ec6a837719caebdbc6f5..358d610ad020cada1bb83e393deeeaae public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) { this.gameTime = time; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6e5bfabe11da547f28b1d56e5a279ae5d9bb3c54..1b24b67437b1a677bbd6ea30b32c703fd7eda2a2 100644 +index 6e5bfabe11da547f28b1d56e5a279ae5d9bb3c54..12a5a8c06dc636fbd5008b8f71d05cfae00a52c2 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1519,7 +1519,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0 && this.level.getGameTime() % 20 == 0) { ++ 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) @@ -26,7 +26,7 @@ index fa2a0cc24bbe31abd49ce0f3f41bab2aa5d9c81f..ca16f896ede5cfb957849ef3ad1f90f6 protected ItemCooldowns createItemCooldowns() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b3697cffbf9e0ef637c547167b5b9091a3b9bf40..63b8d72db812f29fbd82bc62fd21d0d53413bd79 100644 +index bc897dce38ab2baf33e23239fa908e025a7641bb..c471635681dd4a2da85568fb214d997ba1724556 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -297,6 +297,19 @@ public class PurpurWorldConfig { diff --git a/patches/server/0120-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/server/0120-Add-mobGriefing-bypass-to-everything-affected.patch index 56b525cfe..ee3dfb8c8 100644 --- a/patches/server/0120-Add-mobGriefing-bypass-to-everything-affected.patch +++ b/patches/server/0120-Add-mobGriefing-bypass-to-everything-affected.patch @@ -18,7 +18,7 @@ index 27df4e881e850a73947651ce7ad98df5159f4c1c..182436020d2376101f5863f80b4b6d3d 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 0bdd8bcb37a899c1a4191ba13c0922f3385f020f..b0ce2885a304cb15964a1d3bf047c49f95ab594d 100644 +index c8e394ebd6d2393ef77b95d6f20fcbf6040a1dc5..16bb50d154622073d017fa350ec4610c1de7046e 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -701,7 +701,7 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -57,7 +57,7 @@ index 4253b3b1263a7ae5a2f5f3a34674dfea615a81ea..a987c94fd321f51241c405659d6a0b23 @Override diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java -index abf796c3369da6b73c8587dfc05f56d0b8933fde..f169bb0ca0d1f7bd1507436beca806a790d6b7d2 100644 +index abf796c3369da6b73c8587dfc05f56d0b8933fde..95dc62687d10e5c6f54baadda4a725094c52c07f 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java @@ -69,7 +69,7 @@ public class EatBlockGoal extends Goal { @@ -65,7 +65,7 @@ index abf796c3369da6b73c8587dfc05f56d0b8933fde..f169bb0ca0d1f7bd1507436beca806a7 if (EatBlockGoal.IS_TALL_GRASS.test(this.level.getBlockState(blockposition))) { // CraftBukkit - if (!CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition, Blocks.AIR.defaultBlockState(), !this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)).isCancelled()) { -+ if (!CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition, Blocks.AIR.defaultBlockState(), !this.level().purpurConfig.sheepBypassMobGriefing && !this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)).isCancelled()) { // Purpur ++ if (!CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition, Blocks.AIR.defaultBlockState(), !this.level.purpurConfig.sheepBypassMobGriefing && !this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)).isCancelled()) { // Purpur this.level.destroyBlock(blockposition, false); } @@ -74,7 +74,7 @@ index abf796c3369da6b73c8587dfc05f56d0b8933fde..f169bb0ca0d1f7bd1507436beca806a7 if (this.level.getBlockState(blockposition1).is(Blocks.GRASS_BLOCK)) { // CraftBukkit - if (!CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition1, Blocks.DIRT.defaultBlockState(), !this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)).isCancelled()) { // Paper - Fix wrong block state -+ if (!CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition1, Blocks.DIRT.defaultBlockState(), !this.level().purpurConfig.sheepBypassMobGriefing && !this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)).isCancelled()) { // Paper - Fix wrong block state // Purpur ++ if (!CraftEventFactory.callEntityChangeBlockEvent(this.mob, blockposition1, Blocks.DIRT.defaultBlockState(), !this.level.purpurConfig.sheepBypassMobGriefing && !this.level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)).isCancelled()) { // Paper - Fix wrong block state // Purpur this.level.levelEvent(2001, blockposition1, Block.getId(Blocks.GRASS_BLOCK.defaultBlockState())); this.level.setBlock(blockposition1, Blocks.DIRT.defaultBlockState(), 2); } @@ -105,7 +105,7 @@ index 989dc460d8a21b8e54ff4464998c2b02a6a9dd37..aa190c36d32aef0413e6bf89621fa9b4 if (iblockdata.is(Blocks.SWEET_BERRY_BUSH)) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index c21d48eb213dac6c932edfe7c4161e76510450a4..c5de6e469030615d9afc64f24cc50f901a557840 100644 +index 5443affd9dd8d27e32768c2df5a624b5cd7b1bec..e66a3860e4a14a5a50e95eb53ff67e8d6e6f0db7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java @@ -637,7 +637,7 @@ public class Rabbit extends Animal implements VariantHolder { @@ -144,7 +144,7 @@ index 81cf89bc57af0f43d05ba93256255155bf0c4d53..2b0aac1e4291549efa6391cb3b414921 // flag1 = this.level().removeBlock(blockposition, false) || flag1; flag1 = true; diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index b39a7dfb910e99f04275fa8e246581f5ccc27afa..f68f330e5a36f1c3cbf956a39b5b2886e30a37d2 100644 +index c2f4ae412684cc2f8d3cc2206003be5c9e3b2769..d5f0636053fa0ed246ae2413a5b04f7016cb8b77 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -496,7 +496,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob diff --git a/patches/server/0124-Movement-options-for-armor-stands.patch b/patches/server/0124-Movement-options-for-armor-stands.patch index 1af06131d..d8c498113 100644 --- a/patches/server/0124-Movement-options-for-armor-stands.patch +++ b/patches/server/0124-Movement-options-for-armor-stands.patch @@ -30,7 +30,7 @@ index 68233db015138b0a615a65eac8c11afc42f7a1c6..8c2327fa0af4c2148cf6bab7f5960f81 if (entity instanceof Boat) { diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -index 9eb196ee4061bb4c5713f33e8b16d91ec52711cd..59257815c1a3ec30e2c00f63a557c0555db77ef2 100644 +index 9eb196ee4061bb4c5713f33e8b16d91ec52711cd..ffb3ae1d36dda5f521cf3b292d819cb354844806 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java @@ -99,10 +99,12 @@ public class ArmorStand extends LivingEntity { @@ -55,7 +55,7 @@ index 9eb196ee4061bb4c5713f33e8b16d91ec52711cd..59257815c1a3ec30e2c00f63a557c055 + @Override + public void updateInWaterStateAndDoWaterCurrentPushing() { + if (this.level().purpurConfig.armorstandWaterMovement && -+ (this.level().purpurConfig.armorstandWaterFence || !(level.getBlockState(blockPosition().below()).getBlock() instanceof net.minecraft.world.level.block.FenceBlock))) ++ (this.level().purpurConfig.armorstandWaterFence || !(level().getBlockState(blockPosition().below()).getBlock() instanceof net.minecraft.world.level.block.FenceBlock))) + super.updateInWaterStateAndDoWaterCurrentPushing(); + } + @@ -66,7 +66,7 @@ index 9eb196ee4061bb4c5713f33e8b16d91ec52711cd..59257815c1a3ec30e2c00f63a557c055 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9e10f9f5299f0e56ccc50692e11f20605182a2c4..4b8514a938a9029ab9b1af8698beb12e1b33e039 100644 +index 2ce13a7437dd7e879bb237e012c15159703b472a..b7c72e3cf37c99ca991138eef07479ac06a731b3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -101,10 +101,16 @@ public class PurpurWorldConfig { diff --git a/patches/server/0126-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0126-Toggle-for-water-sensitive-mob-damage.patch index cba78f20a..0db3ef0b5 100644 --- a/patches/server/0126-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0126-Toggle-for-water-sensitive-mob-damage.patch @@ -21,7 +21,7 @@ index b1ba0f24dd6f1ec4c60208564e4eb84bdcd457f4..1a67f46b57e398d23fbc495ee81ae62e protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index 0dc811f18724d3142561c0dddf840dbbb28bb12e..81bf59b7b41835dc034f2880c8eac89ff396b695 100644 +index 45297abb703c82f13cc206896758458afcfb3b51..98221b38722e5cc009b12c1bc57fd63dc9418706 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -290,6 +290,11 @@ public class Bat extends AmbientCreature { @@ -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 1d17a9fcf80278779703e5cdd390ef0e52f9e437..008ce5fed911484b6207eb711f5d1dfcc6348984 100644 +index 371cab208ee0a31a90248272f88249eceaf9eb59..c6e5278641fb4a246a8df988fdf5068a044e2c4e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -70,6 +70,11 @@ public class Cow extends Animal { @@ -126,7 +126,7 @@ index 1d17a9fcf80278779703e5cdd390ef0e52f9e437..008ce5fed911484b6207eb711f5d1dfc protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); 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 c9bc4eec14f40a31dbbe928f14277b12044c3089..d7f1a0ddad919fe87be29c16d6ef442cb5692fde 100644 +index 7b2674233d0b8582243448c49d1c47271544d0b8..6006b9c996a8070336c4471f2a915d70c6371c76 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java @@ -159,6 +159,11 @@ public class Dolphin extends WaterAnimal { @@ -286,7 +286,7 @@ index 8b5bf8ef4481ccc829d1a39c0921941581b2f045..ef3d0bbbeb6aa736f35c26066a1473c7 protected void defineSynchedData() { super.defineSynchedData(); diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index c5de6e469030615d9afc64f24cc50f901a557840..5e935f0b8980a65eb139b9b17fe4f969018b48b2 100644 +index e66a3860e4a14a5a50e95eb53ff67e8d6e6f0db7..a91cef9b519b9d7330c40de9988f0463ce8aa20b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java @@ -147,6 +147,11 @@ public class Rabbit extends Animal implements VariantHolder { @@ -395,7 +395,7 @@ index c04e77f8c5c1c8c038a9c8f76546b683691c6b2a..5c2fc833dac13dd8b959f035abb74432 this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... } 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 6b270c1aa37096443701d7f4fbdab006afe2556c..4cd58a67c0af8019e802812c1e2ff893591d4c5f 100644 +index 89627025c0b5464900a5ea818c7aaf5d676f7a5f..0ab3e4a854fd1c5369fc734981d16fa6b844807f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -209,6 +209,11 @@ public class Wolf extends TamableAnimal implements NeutralMob { @@ -571,7 +571,7 @@ index 2b0aac1e4291549efa6391cb3b41492184c9aeda..f90b0ae4678da2ffa7d0a693003e0519 return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0D); } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index f68f330e5a36f1c3cbf956a39b5b2886e30a37d2..17e44da8b4419ae19f0205e7208b450e68607c79 100644 +index d5f0636053fa0ed246ae2413a5b04f7016cb8b77..94027ef3f833c7170a99a8437740b7f99f30ab81 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -117,6 +117,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -743,21 +743,21 @@ index 61068ae356a9ffc26c5fabc0b2561fda9540ff94..ab6bfdb50ee1bb13a213a2093287f5c2 protected void defineSynchedData() { super.defineSynchedData(); 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 29491be5f607477acd336fcff8cc472ad740ed50..494439d60138f1b7bfe5d596c9ab97321400e4b4 100644 +index 12e27b36b3f9949eb644175dd346c487277b2d39..6340d8641770110d61dc9337942bc233e6fb49c6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Giant.java +++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java -@@ -61,6 +61,11 @@ public class Giant extends Monster { +@@ -74,6 +74,11 @@ public class Giant extends Monster { + } + } } - // Purpur end - ++ + @Override + public boolean isSensitiveToWater() { + return this.level().purpurConfig.giantTakeDamageFromWater; + } -+ + // Purpur end + @Override - protected void initAttributes() { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.giantMaxHealth); diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java index b3a8e98c6c094654a283387d5bf78fc9db93a85a..41b080c1fd44c93009908fcfd20180e0d11fca8a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java @@ -823,7 +823,7 @@ index b472309f97b24f1d7b97d8b6d464c479c2d602d5..e0ebc4c2d8dd718ce78d981a1d099e74 return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, (double)0.2F); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index a9a942896dd428cd974970cac16857c27d08a7ec..6ae67916366ebdc5eed859c4c821e852781c5441 100644 +index f1dfda45fc0e44a4e92b3e2f01718e9ef5c7fc06..c2d708f4f7b0fa340dc159c50fc9883b7c49ff67 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -119,6 +119,11 @@ public class Phantom extends FlyingMob implements Enemy { diff --git a/patches/server/0146-Break-individual-slabs-when-sneaking.patch b/patches/server/0146-Break-individual-slabs-when-sneaking.patch index 682145af5..8f98d4b54 100644 --- a/patches/server/0146-Break-individual-slabs-when-sneaking.patch +++ b/patches/server/0146-Break-individual-slabs-when-sneaking.patch @@ -17,7 +17,7 @@ index 2a923b575fa2e3393f6f667e2ce8adf38fc03afe..2a18d9b7ab5d28458e53ccad29edc6f9 // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/level/block/SlabBlock.java b/src/main/java/net/minecraft/world/level/block/SlabBlock.java -index 18b603d646081926343dea108b55d641df1c2c34..03ad3e45fc6d48091ac0c0ba5dc3d014b1d4ddfa 100644 +index 18b603d646081926343dea108b55d641df1c2c34..370772b1297b78bcc7419684015830a87c4d9a17 100644 --- a/src/main/java/net/minecraft/world/level/block/SlabBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SlabBlock.java @@ -130,4 +130,25 @@ public class SlabBlock extends Block implements SimpleWaterloggedBlock { @@ -36,18 +36,18 @@ index 18b603d646081926343dea108b55d641df1c2c34..03ad3e45fc6d48091ac0c0ba5dc3d014 + } + double hitY = result.getLocation().y(); + int blockY = org.bukkit.util.NumberConversions.floor(hitY); -+ player.level.setBlock(pos, state.setValue(SlabBlock.TYPE, (hitY - blockY > 0.5 || blockY - pos.getY() == 1) ? SlabType.BOTTOM : SlabType.TOP), 3); ++ player.level().setBlock(pos, state.setValue(SlabBlock.TYPE, (hitY - blockY > 0.5 || blockY - pos.getY() == 1) ? SlabType.BOTTOM : SlabType.TOP), 3); + if (!player.getAbilities().instabuild) { -+ net.minecraft.world.entity.item.ItemEntity item = new net.minecraft.world.entity.item.ItemEntity(player.level, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(asItem())); ++ net.minecraft.world.entity.item.ItemEntity item = new net.minecraft.world.entity.item.ItemEntity(player.level(), pos.getX(), pos.getY(), pos.getZ(), new ItemStack(asItem())); + item.setDefaultPickUpDelay(); -+ player.level.addFreshEntity(item); ++ player.level().addFreshEntity(item); + } + return true; + } + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 60841d2da5b3ad0912fb7931d238afa4a574dfc3..ddfa196494b8e4d61dcaf064cc1fd97127638dc7 100644 +index 0b3c5a3bf1b9d784b20a5a0fa2cefda22b92dab5..99e1b77a0160507022af41168853fd993fcd2ba4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -606,6 +606,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0149-Option-to-make-doors-require-redstone.patch b/patches/server/0149-Option-to-make-doors-require-redstone.patch index 20c7d2d0f..8b11ee7fb 100644 --- a/patches/server/0149-Option-to-make-doors-require-redstone.patch +++ b/patches/server/0149-Option-to-make-doors-require-redstone.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Option to make doors require redstone diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java b/src/main/java/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java -index 42ae4d293a420f0b8eb476df6389b2e7a693895f..fa1a2483c24d95ca03c269cde68c335e248810c9 100644 +index 42ae4d293a420f0b8eb476df6389b2e7a693895f..97c20c5b89e6d7e4ed844eff39ee55dfa8988d37 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java +++ b/src/main/java/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java @@ -57,7 +57,7 @@ public class InteractWithDoor { @@ -13,7 +13,7 @@ index 42ae4d293a420f0b8eb476df6389b2e7a693895f..fa1a2483c24d95ca03c269cde68c335e if (iblockdata.is(BlockTags.WOODEN_DOORS, (blockbase_blockdata) -> { return blockbase_blockdata.getBlock() instanceof DoorBlock; - })) { -+ }) && !DoorBlock.requiresRedstone(entityliving.level, iblockdata, blockposition)) { // Purpur ++ }) && !DoorBlock.requiresRedstone(entityliving.level(), iblockdata, blockposition)) { // Purpur DoorBlock blockdoor = (DoorBlock) iblockdata.getBlock(); if (!blockdoor.isOpen(iblockdata)) { @@ -22,7 +22,7 @@ index 42ae4d293a420f0b8eb476df6389b2e7a693895f..fa1a2483c24d95ca03c269cde68c335e if (iblockdata1.is(BlockTags.WOODEN_DOORS, (blockbase_blockdata) -> { return blockbase_blockdata.getBlock() instanceof DoorBlock; - })) { -+ }) && !DoorBlock.requiresRedstone(entityliving.level, iblockdata, blockposition1)) { // Purpur ++ }) && !DoorBlock.requiresRedstone(entityliving.level(), iblockdata, blockposition1)) { // Purpur DoorBlock blockdoor1 = (DoorBlock) iblockdata1.getBlock(); if (!blockdoor1.isOpen(iblockdata1)) { @@ -31,12 +31,12 @@ index 42ae4d293a420f0b8eb476df6389b2e7a693895f..fa1a2483c24d95ca03c269cde68c335e if (!iblockdata.is(BlockTags.WOODEN_DOORS, (blockbase_blockdata) -> { return blockbase_blockdata.getBlock() instanceof DoorBlock; - })) { -+ }) || DoorBlock.requiresRedstone(entity.level, iblockdata, blockposition)) { // Purpur ++ }) || DoorBlock.requiresRedstone(entity.level(), iblockdata, blockposition)) { // Purpur iterator.remove(); } else { DoorBlock blockdoor = (DoorBlock) iblockdata.getBlock(); diff --git a/src/main/java/net/minecraft/world/level/block/DoorBlock.java b/src/main/java/net/minecraft/world/level/block/DoorBlock.java -index c028a7158e41a0754abb8e24dcd647633fbf3fe8..bfd90aa35dce7f8843f7331907a446332db5fade 100644 +index c028a7158e41a0754abb8e24dcd647633fbf3fe8..cd65d32f4af016d4937e598c71386a3072f4c490 100644 --- a/src/main/java/net/minecraft/world/level/block/DoorBlock.java +++ b/src/main/java/net/minecraft/world/level/block/DoorBlock.java @@ -167,6 +167,7 @@ public class DoorBlock extends Block { @@ -54,7 +54,7 @@ index c028a7158e41a0754abb8e24dcd647633fbf3fe8..bfd90aa35dce7f8843f7331907a44633 + + // Purpur start + public static boolean requiresRedstone(Level level, BlockState state, BlockPos pos) { -+ if (level().purpurConfig.doorRequiresRedstone.contains(state.getBlock())) { ++ if (level.purpurConfig.doorRequiresRedstone.contains(state.getBlock())) { + // force update client + BlockPos otherPos = pos.relative(state.getValue(DoorBlock.HALF) == DoubleBlockHalf.LOWER ? Direction.UP : Direction.DOWN); + BlockState otherState = level.getBlockState(otherPos); @@ -67,7 +67,7 @@ index c028a7158e41a0754abb8e24dcd647633fbf3fe8..bfd90aa35dce7f8843f7331907a44633 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e3ee434dcca8edafcca3c8f9a28349dccad23617..c0485f0fc5ec96ff709d95c0b5981e6d7e8d6c6f 100644 +index 76a7627d45da058437aa397161a3a6d2276bb631..e6a80597801bd0633c880b4470cda6bbec788646 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -510,6 +510,16 @@ public class PurpurWorldConfig { diff --git a/patches/server/0157-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch b/patches/server/0157-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch index c9c5585ad..e93da4f79 100644 --- a/patches/server/0157-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch +++ b/patches/server/0157-Config-for-changing-the-blocks-that-turn-into-dirt-p.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config for changing the blocks that turn into dirt paths diff --git a/src/main/java/net/minecraft/world/item/ShovelItem.java b/src/main/java/net/minecraft/world/item/ShovelItem.java -index c7195f2e12bbd6545f7bffcc2b4ba5cc3d48df20..0f4ad7d12b2a3beb7f013c64da3ab4f0ef2c535e 100644 +index c7195f2e12bbd6545f7bffcc2b4ba5cc3d48df20..5e730bc9c8ff94b16ac2bf8567dda8aea2ee4b2a 100644 --- a/src/main/java/net/minecraft/world/item/ShovelItem.java +++ b/src/main/java/net/minecraft/world/item/ShovelItem.java @@ -34,7 +34,7 @@ public class ShovelItem extends DiggerItem { @@ -13,12 +13,12 @@ index c7195f2e12bbd6545f7bffcc2b4ba5cc3d48df20..0f4ad7d12b2a3beb7f013c64da3ab4f0 } else { Player player = context.getPlayer(); - BlockState blockState2 = FLATTENABLES.get(blockState.getBlock()); -+ BlockState blockState2 = level().purpurConfig.shovelTurnsBlockToGrassPath.contains(blockState.getBlock()) ? Blocks.DIRT_PATH.defaultBlockState() : null; // Purpur ++ BlockState blockState2 = level.purpurConfig.shovelTurnsBlockToGrassPath.contains(blockState.getBlock()) ? Blocks.DIRT_PATH.defaultBlockState() : null; // Purpur BlockState blockState3 = null; Runnable afterAction = null; // Paper if (blockState2 != null && level.getBlockState(blockPos.above()).isAir()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index dbfe6549a0fcc6acd7b1ffb6385dc228b834ab8b..4d8696198ad30f283e91bec76d392d6a825aaeb0 100644 +index 3243cf715d7f8a7d871d61a1308d09e8c543f8a3..6cb6d57c374cc11c9624d721e7309004852e1a6a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -450,6 +450,21 @@ public class PurpurWorldConfig { diff --git a/patches/server/0158-Configurable-piston-push-limit.patch b/patches/server/0158-Configurable-piston-push-limit.patch index de6b14e82..0f4494141 100644 --- a/patches/server/0158-Configurable-piston-push-limit.patch +++ b/patches/server/0158-Configurable-piston-push-limit.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable piston push limit diff --git a/src/main/java/net/minecraft/world/level/block/piston/PistonStructureResolver.java b/src/main/java/net/minecraft/world/level/block/piston/PistonStructureResolver.java -index 744d91546d1a810f60a43c15ed74b4158f341a4a..943bb156bfc215fee1e2a4a65c88ff37208f9044 100644 +index 744d91546d1a810f60a43c15ed74b4158f341a4a..354538daefa603f6df5a139b6bff87dbb4cef178 100644 --- a/src/main/java/net/minecraft/world/level/block/piston/PistonStructureResolver.java +++ b/src/main/java/net/minecraft/world/level/block/piston/PistonStructureResolver.java @@ -86,7 +86,7 @@ public class PistonStructureResolver { @@ -13,7 +13,7 @@ index 744d91546d1a810f60a43c15ed74b4158f341a4a..943bb156bfc215fee1e2a4a65c88ff37 } else { int i = 1; - if (i + this.toPush.size() > 12) { -+ if (i + this.toPush.size() > this.level().purpurConfig.pistonBlockPushLimit) { // Purpur ++ if (i + this.toPush.size() > this.level.purpurConfig.pistonBlockPushLimit) { // Purpur return false; } else { while(isSticky(blockState)) { @@ -22,7 +22,7 @@ index 744d91546d1a810f60a43c15ed74b4158f341a4a..943bb156bfc215fee1e2a4a65c88ff37 ++i; - if (i + this.toPush.size() > 12) { -+ if (i + this.toPush.size() > this.level().purpurConfig.pistonBlockPushLimit) { // Purpur ++ if (i + this.toPush.size() > this.level.purpurConfig.pistonBlockPushLimit) { // Purpur return false; } } @@ -31,12 +31,12 @@ index 744d91546d1a810f60a43c15ed74b4158f341a4a..943bb156bfc215fee1e2a4a65c88ff37 } - if (this.toPush.size() >= 12) { -+ if (this.toPush.size() >= this.level().purpurConfig.pistonBlockPushLimit) { // Purpur ++ if (this.toPush.size() >= this.level.purpurConfig.pistonBlockPushLimit) { // Purpur return false; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4d8696198ad30f283e91bec76d392d6a825aaeb0..a8f5a3c7a756cb74cf065f1797b4a1e47b595236 100644 +index 6cb6d57c374cc11c9624d721e7309004852e1a6a..9c2c7ea17baa08165c9683853ebc7877d02c7464 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -631,6 +631,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0170-ShulkerBox-allow-oversized-stacks.patch b/patches/server/0170-ShulkerBox-allow-oversized-stacks.patch index a3c2da5bc..df2c9ae17 100644 --- a/patches/server/0170-ShulkerBox-allow-oversized-stacks.patch +++ b/patches/server/0170-ShulkerBox-allow-oversized-stacks.patch @@ -9,7 +9,7 @@ creating an itemstack using the TileEntity's NBT data (how it handles it for creative players) instead of routing it through the LootableBuilder. diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index 2a18d9b7ab5d28458e53ccad29edc6f9c2c3099c..76a025d74c577ca2a55659c1426d40a746b034dd 100644 +index 2a18d9b7ab5d28458e53ccad29edc6f9c2c3099c..2f0c5df784d5847c59826c3d7930b5d707a5f1aa 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -427,7 +427,7 @@ public class ServerPlayerGameMode { @@ -17,7 +17,7 @@ index 2a18d9b7ab5d28458e53ccad29edc6f9c2c3099c..76a025d74c577ca2a55659c1426d40a7 ItemStack mainHandStack = null; // Paper boolean isCorrectTool = false; // Paper - if (this.isCreative()) { -+ if (this.isCreative() || (this.level().purpurConfig.shulkerBoxAllowOversizedStacks && block instanceof net.minecraft.world.level.block.ShulkerBoxBlock)) { // Purpur ++ if (this.isCreative() || (this.level.purpurConfig.shulkerBoxAllowOversizedStacks && block instanceof net.minecraft.world.level.block.ShulkerBoxBlock)) { // Purpur // return true; // CraftBukkit } else { ItemStack itemstack = this.player.getMainHandItem(); @@ -35,7 +35,7 @@ index b51155ad12515b2d0dd0f202580b9f455c114d9a..dd6c82a418ee299d7a5614cb0260949c blockEntity.saveToItem(itemStack); if (shulkerBoxBlockEntity.hasCustomName()) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a0e58a27c70ec7e65a3fef917b0ba4a894252ef8..38f619bb9570fae9a2ded41db262a1e087c6f615 100644 +index 2fe9231fbc7f21cc6c6724c075916292bc31b68a..f5ab6850362f00dd44472ad42bd06ee112cc6647 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -688,6 +688,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0174-Beacon-Activation-Range-Configurable.patch b/patches/server/0174-Beacon-Activation-Range-Configurable.patch index 5fa28b96f..07bc2cf16 100644 --- a/patches/server/0174-Beacon-Activation-Range-Configurable.patch +++ b/patches/server/0174-Beacon-Activation-Range-Configurable.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Beacon Activation Range Configurable diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java -index 59246e24558569f7f50b4d4d508616798091c888..69e28b65a4a47dc61bae17b65f3f34a8cc3ef6f6 100644 +index 59246e24558569f7f50b4d4d508616798091c888..cc03c02f290ee8d58a2fea54b1f977f49a2cec6e 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java @@ -84,6 +84,16 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name @@ -15,10 +15,10 @@ index 59246e24558569f7f50b4d4d508616798091c888..69e28b65a4a47dc61bae17b65f3f34a8 + // Purpur Start + if (this.level != null) { + switch (this.levels) { -+ case 1: return this.level().purpurConfig.beaconLevelOne; -+ case 2: return this.level().purpurConfig.beaconLevelTwo; -+ case 3: return this.level().purpurConfig.beaconLevelThree; -+ case 4: return this.level().purpurConfig.beaconLevelFour; ++ case 1: return this.level.purpurConfig.beaconLevelOne; ++ case 2: return this.level.purpurConfig.beaconLevelTwo; ++ case 3: return this.level.purpurConfig.beaconLevelThree; ++ case 4: return this.level.purpurConfig.beaconLevelFour; + } + } + // Purpur End @@ -26,7 +26,7 @@ index 59246e24558569f7f50b4d4d508616798091c888..69e28b65a4a47dc61bae17b65f3f34a8 } else { return effectRange; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9102c90bbc52bd5323cce4cfb5eb40e7e8b086ed..1a2474db319cd9b2a1ecc3cd87d48aed156a773f 100644 +index 1510dea6daa49e0bb83a27cec965f2a0cf186274..4a5551dbf79870876b3a8d18284e4fa317ef1837 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -525,6 +525,17 @@ public class PurpurWorldConfig { diff --git a/patches/server/0187-Tool-actionable-options.patch b/patches/server/0187-Tool-actionable-options.patch index ad6d68cde..e4b5adf2b 100644 --- a/patches/server/0187-Tool-actionable-options.patch +++ b/patches/server/0187-Tool-actionable-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Tool actionable options diff --git a/src/main/java/net/minecraft/world/item/AxeItem.java b/src/main/java/net/minecraft/world/item/AxeItem.java -index 9c7d0b9cc2fa98d5785c914c0183f7d4b5b1c1ea..9f0ccd3f44a095940a9eba8d4de44db0593fae39 100644 +index 9c7d0b9cc2fa98d5785c914c0183f7d4b5b1c1ea..89a4ab17ca8d2aa1f52b041c610d7de19bf55e66 100644 --- a/src/main/java/net/minecraft/world/item/AxeItem.java +++ b/src/main/java/net/minecraft/world/item/AxeItem.java @@ -33,29 +33,32 @@ public class AxeItem extends DiggerItem { @@ -19,9 +19,9 @@ index 9c7d0b9cc2fa98d5785c914c0183f7d4b5b1c1ea..9f0ccd3f44a095940a9eba8d4de44db0 - }); + // Purpur start + Block clickedBlock = level.getBlockState(blockPos).getBlock(); -+ Optional optional = Optional.ofNullable(level().purpurConfig.axeStrippables.get(blockState.getBlock())); -+ Optional optional2 = Optional.ofNullable(level().purpurConfig.axeWeatherables.get(blockState.getBlock())); -+ Optional optional3 = Optional.ofNullable(level().purpurConfig.axeWaxables.get(blockState.getBlock())); ++ Optional optional = Optional.ofNullable(level.purpurConfig.axeStrippables.get(blockState.getBlock())); ++ Optional optional2 = Optional.ofNullable(level.purpurConfig.axeWeatherables.get(blockState.getBlock())); ++ Optional optional3 = Optional.ofNullable(level.purpurConfig.axeWaxables.get(blockState.getBlock())); + // Purpur end ItemStack itemStack = context.getItemInHand(); - Optional optional4 = Optional.empty(); @@ -78,7 +78,7 @@ index 9c7d0b9cc2fa98d5785c914c0183f7d4b5b1c1ea..9f0ccd3f44a095940a9eba8d4de44db0 return InteractionResult.PASS; } diff --git a/src/main/java/net/minecraft/world/item/HoeItem.java b/src/main/java/net/minecraft/world/item/HoeItem.java -index 180aec596110309aade13d2080f8824d152b07cb..23ecfc9937e21f391b51ea8f4545241a797f6439 100644 +index 180aec596110309aade13d2080f8824d152b07cb..c4aec1e5135a79837918b692e75a7b55d5cffeb0 100644 --- a/src/main/java/net/minecraft/world/item/HoeItem.java +++ b/src/main/java/net/minecraft/world/item/HoeItem.java @@ -34,15 +34,23 @@ public class HoeItem extends DiggerItem { @@ -93,7 +93,7 @@ index 180aec596110309aade13d2080f8824d152b07cb..23ecfc9937e21f391b51ea8f4545241a - Consumer consumer = pair.getSecond(); + // Purpur start + Block clickedBlock = level.getBlockState(blockPos).getBlock(); -+ var tillable = level().purpurConfig.hoeTillables.get(level.getBlockState(blockPos).getBlock()); ++ var tillable = level.purpurConfig.hoeTillables.get(level.getBlockState(blockPos).getBlock()); + if (tillable == null) { return InteractionResult.PASS; } else { + Predicate predicate = tillable.condition().predicate(); + Consumer consumer = (ctx) -> { @@ -122,7 +122,7 @@ index 180aec596110309aade13d2080f8824d152b07cb..23ecfc9937e21f391b51ea8f4545241a return InteractionResult.PASS; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6683a4fc4746b28d9b3d898258265874ed3e54e1..2905ac9c8ee0555e5aeaeed480454e8463c753b1 100644 +index 979c364c4329f5dfc11ab88e00ef7aa7aa17c00e..36f570c2a46384d83d91b118593d369c32db1c9a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -528,6 +528,167 @@ public class PurpurWorldConfig { diff --git a/patches/server/0189-Summoner-API.patch b/patches/server/0189-Summoner-API.patch index 4e98fddf3..5ab3a0bda 100644 --- a/patches/server/0189-Summoner-API.patch +++ b/patches/server/0189-Summoner-API.patch @@ -93,7 +93,7 @@ index 2acd9fdd1b311f00cc5fae7d879427ededdeecec..e33364beff36e255989520d5d076729c } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index faa77256f116d2b9c9ad931238d10a994c63c484..7fc5562ef55809d864392f05599c2380b32f1fdd 100644 +index 1f9a57c4fd251e2969b49a883ee12d3cf8ac5914..24fc4934f2193806fa38c8c3b0ad4cbfc53650a6 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -84,6 +84,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -120,7 +120,7 @@ index faa77256f116d2b9c9ad931238d10a994c63c484..7fc5562ef55809d864392f05599c2380 @Override protected PathNavigation createNavigation(Level world) { FlyingPathNavigation navigationflying = new FlyingPathNavigation(this, world); -@@ -262,6 +272,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -267,6 +277,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); nbt.putInt("Invul", this.getInvulnerableTicks()); @@ -128,7 +128,7 @@ index faa77256f116d2b9c9ad931238d10a994c63c484..7fc5562ef55809d864392f05599c2380 } @Override -@@ -271,6 +282,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -276,6 +287,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob if (this.hasCustomName()) { this.bossEvent.setName(this.getDisplayName()); } diff --git a/patches/server/0192-Silk-touchable-budding-amethyst.patch b/patches/server/0192-Silk-touchable-budding-amethyst.patch index 2d9594b34..656041d65 100644 --- a/patches/server/0192-Silk-touchable-budding-amethyst.patch +++ b/patches/server/0192-Silk-touchable-budding-amethyst.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Silk touchable budding amethyst diff --git a/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java b/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java -index 4dae2a98070affd84bc4523a927dc9cbfe7379c6..c16781ec765c234468b13a0b0cb478c6082b62a7 100644 +index 4dae2a98070affd84bc4523a927dc9cbfe7379c6..51faa4cfda3d36f2e3bc7cbc47cacf57d3ca716e 100644 --- a/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BuddingAmethystBlock.java @@ -47,4 +47,14 @@ public class BuddingAmethystBlock extends AmethystBlock { @@ -16,7 +16,7 @@ index 4dae2a98070affd84bc4523a927dc9cbfe7379c6..c16781ec765c234468b13a0b0cb478c6 + // Purpur start + @Override + public void playerDestroy(net.minecraft.world.level.Level level, net.minecraft.world.entity.player.Player player, BlockPos pos, BlockState state, net.minecraft.world.level.block.entity.BlockEntity blockEntity, net.minecraft.world.item.ItemStack stack) { -+ if (level().purpurConfig.buddingAmethystSilkTouch && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.SILK_TOUCH, stack) > 0) { ++ if (level.purpurConfig.buddingAmethystSilkTouch && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.SILK_TOUCH, stack) > 0) { + popResource(level, pos, net.minecraft.world.item.Items.BUDDING_AMETHYST.getDefaultInstance()); + } + super.playerDestroy(level, player, pos, state, blockEntity, stack); @@ -24,7 +24,7 @@ index 4dae2a98070affd84bc4523a927dc9cbfe7379c6..c16781ec765c234468b13a0b0cb478c6 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 177678b320e79eef9ec2c3b77935ef59ffa1b63d..2c6743485c22fc914006ba1ed1aede61f845be0f 100644 +index 8cc4d71f4ca13fe8c192f4483101d3fee3b878f3..cdf05c679d7ab1005076251370a8bb53cfcc1306 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -730,6 +730,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0204-Conduit-behavior-configuration.patch b/patches/server/0204-Conduit-behavior-configuration.patch index d04698198..1b93d078d 100644 --- a/patches/server/0204-Conduit-behavior-configuration.patch +++ b/patches/server/0204-Conduit-behavior-configuration.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Conduit behavior configuration diff --git a/src/main/java/net/minecraft/world/level/block/entity/ConduitBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ConduitBlockEntity.java -index 963a596154091b79ca139af6274aa323518ad1ad..e93f96d0ba193cceae2f2140fb8f678dc47de40b 100644 +index 963a596154091b79ca139af6274aa323518ad1ad..4dcac3899a500d8586580bcfd5b4516e1dcdcd4a 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/ConduitBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/ConduitBlockEntity.java @@ -171,7 +171,7 @@ public class ConduitBlockEntity extends BlockEntity { @@ -66,7 +66,7 @@ index 963a596154091b79ca139af6274aa323518ad1ad..e93f96d0ba193cceae2f2140fb8f678d int k = pos.getZ(); - return (new AABB((double) i, (double) j, (double) k, (double) (i + 1), (double) (j + 1), (double) (k + 1))).inflate(8.0D); -+ return (new AABB((double) i, (double) j, (double) k, (double) (i + 1), (double) (j + 1), (double) (k + 1))).inflate(level == null ? 8.0D : level().purpurConfig.conduitDamageDistance); // Purpur ++ return (new AABB((double) i, (double) j, (double) k, (double) (i + 1), (double) (j + 1), (double) (k + 1))).inflate(level == null ? 8.0D : level.purpurConfig.conduitDamageDistance); // Purpur } @Nullable @@ -77,7 +77,7 @@ index 963a596154091b79ca139af6274aa323518ad1ad..e93f96d0ba193cceae2f2140fb8f678d }); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0b3c58cfc0cf13aa7d0ba6541a581113b4c01691..1715b39e35b578f8bf554dcd9ee6af1d829f63d1 100644 +index e98db1878dd3ec8d7f38fcd213c8d39241479e26..7a56fdad1aca67b89d08cbeebb1fdf2ad02edd84 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -962,6 +962,29 @@ public class PurpurWorldConfig { diff --git a/patches/server/0212-Shift-right-click-to-use-exp-for-mending.patch b/patches/server/0212-Shift-right-click-to-use-exp-for-mending.patch index 44ca31283..01079141f 100644 --- a/patches/server/0212-Shift-right-click-to-use-exp-for-mending.patch +++ b/patches/server/0212-Shift-right-click-to-use-exp-for-mending.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Shift right click to use exp for mending diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index 76a025d74c577ca2a55659c1426d40a746b034dd..4fbcd452a500d258fa7248e8a98979cbea867a89 100644 +index 2f0c5df784d5847c59826c3d7930b5d707a5f1aa..5cc5bf4305a6e91c303841e752aeece9a1d03502 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -516,6 +516,7 @@ public class ServerPlayerGameMode { @@ -27,7 +27,7 @@ index 76a025d74c577ca2a55659c1426d40a746b034dd..4fbcd452a500d258fa7248e8a98979cb + int points = Math.min(this.player.totalExperience, this.player.level().purpurConfig.shiftRightClickRepairsMendingPoints); + if (points > 0 && itemstack.isDamaged() && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.MENDING, itemstack) > 0) { + this.player.giveExperiencePoints(-points); -+ this.player.level.addFreshEntity(new net.minecraft.world.entity.ExperienceOrb(this.player.level, this.player.getX(), this.player.getY(), this.player.getZ(), points, org.bukkit.entity.ExperienceOrb.SpawnReason.UNKNOWN, this.player, this.player)); ++ this.player.level().addFreshEntity(new net.minecraft.world.entity.ExperienceOrb(this.player.level(), this.player.getX(), this.player.getY(), this.player.getZ(), points, org.bukkit.entity.ExperienceOrb.SpawnReason.UNKNOWN, this.player, this.player)); + return true; + } + } @@ -48,7 +48,7 @@ index 4ac0941974e6e8aeaea88ce0fc589381f3c0eaad..f3210aa312af48a77129962fe483e65e cancelled = event.useItemInHand() == Event.Result.DENY; } else { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 224857d1ae9657d11cc646218f8480e5a24e34f7..c8a4056779c86cab41e6d0ac5e24254d256abafe 100644 +index 7acdc672137575ebc3164e808a09f153d6c05ab6..41e77c1d3719c14ddb5c542f589e84cd5a8066b2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -417,6 +417,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0215-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0215-Option-for-beds-to-explode-on-villager-sleep.patch index 19eee377e..3d4165135 100644 --- a/patches/server/0215-Option-for-beds-to-explode-on-villager-sleep.patch +++ b/patches/server/0215-Option-for-beds-to-explode-on-villager-sleep.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Option for beds to explode on villager sleep diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index b71013a6dd5a713543c042199273ddae1feda4b9..87fa0181e6e9c819c3b5abd95f75231dfeb12be2 100644 +index b71013a6dd5a713543c042199273ddae1feda4b9..1ed712f5ba4e77582393806fc1bd49553b9ea8d1 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -1099,6 +1099,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -13,8 +13,8 @@ index b71013a6dd5a713543c042199273ddae1feda4b9..87fa0181e6e9c819c3b5abd95f75231d @Override public void startSleeping(BlockPos pos) { + // Purpur start -+ if (level().purpurConfig.bedExplodeOnVillagerSleep && this.level.getBlockState(pos).getBlock() instanceof net.minecraft.world.level.block.BedBlock) { -+ this.level.explode(null, (double) pos.getX() + 0.5D, (double) pos.getY() + 0.5D, (double) pos.getZ() + 0.5D, (float) this.level().purpurConfig.bedExplosionPower, this.level().purpurConfig.bedExplosionFire, this.level().purpurConfig.bedExplosionEffect); ++ if (level().purpurConfig.bedExplodeOnVillagerSleep && this.level().getBlockState(pos).getBlock() instanceof net.minecraft.world.level.block.BedBlock) { ++ this.level().explode(null, (double) pos.getX() + 0.5D, (double) pos.getY() + 0.5D, (double) pos.getZ() + 0.5D, (float) this.level().purpurConfig.bedExplosionPower, this.level().purpurConfig.bedExplosionFire, this.level().purpurConfig.bedExplosionEffect); + return; + } + // Purpur end @@ -22,7 +22,7 @@ index b71013a6dd5a713543c042199273ddae1feda4b9..87fa0181e6e9c819c3b5abd95f75231d this.brain.setMemory(MemoryModuleType.LAST_SLEPT, this.level().getGameTime()); // CraftBukkit - decompile error this.brain.eraseMemory(MemoryModuleType.WALK_TARGET); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5dc7d311fde305a8a5b3860d6d7e1f1cd02dffb1..3d05d4e5d8e934a07d7957df3dfdf45bb8e22d5e 100644 +index 3a80c2901c688a7ef9fbe97fbe3524e773c0b394..33a60222a2ba142ace742a0410ae48e4ae871f51 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -736,6 +736,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0216-Halloween-options-and-optimizations.patch b/patches/server/0216-Halloween-options-and-optimizations.patch index d59c33fd5..2a933c232 100644 --- a/patches/server/0216-Halloween-options-and-optimizations.patch +++ b/patches/server/0216-Halloween-options-and-optimizations.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Halloween options and optimizations diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index 81bf59b7b41835dc034f2880c8eac89ff396b695..a38b90e1d306a4926f473cdd38b6f719b4ce4252 100644 +index 98221b38722e5cc009b12c1bc57fd63dc9418706..c61700a0f1055ee8fe290646814c3e71d917e338 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -314,7 +314,7 @@ public class Bat extends AmbientCreature { @@ -21,7 +21,7 @@ index 81bf59b7b41835dc034f2880c8eac89ff396b695..a38b90e1d306a4926f473cdd38b6f719 } } -+ public static boolean isHalloweenSeason(Level level) { return level().purpurConfig.forceHalloweenSeason || isHalloween(); } // Purpur ++ public static boolean isHalloweenSeason(Level level) { return level.purpurConfig.forceHalloweenSeason || isHalloween(); } // Purpur private static boolean isHalloween() { LocalDate localdate = LocalDate.now(); int i = localdate.get(ChronoField.DAY_OF_MONTH); @@ -60,7 +60,7 @@ index 0bc90b6d5c5a3cb3477d41336a9bb1130ff32fa1..a8d2f8654ee370e98bb1c4e7e1111deb this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3d05d4e5d8e934a07d7957df3dfdf45bb8e22d5e..30e150a4d6580c86e5118467c2c43e2b2538deeb 100644 +index 33a60222a2ba142ace742a0410ae48e4ae871f51..17c26886f7bf5b684989c00f0ff874d248f1d7f3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -143,6 +143,8 @@ public class PurpurWorldConfig { diff --git a/patches/server/0220-options-to-extinguish-fire-blocks-with-snowballs.patch b/patches/server/0220-options-to-extinguish-fire-blocks-with-snowballs.patch index 1e95bb314..6a53eeb74 100644 --- a/patches/server/0220-options-to-extinguish-fire-blocks-with-snowballs.patch +++ b/patches/server/0220-options-to-extinguish-fire-blocks-with-snowballs.patch @@ -5,7 +5,7 @@ Subject: [PATCH] options to extinguish fire blocks with snowballs diff --git a/src/main/java/net/minecraft/world/entity/projectile/Snowball.java b/src/main/java/net/minecraft/world/entity/projectile/Snowball.java -index b90cedad282e95a067aca176fafa9f72a726f520..c29c849d6b61d23e86e8af949561c00e889d2e9d 100644 +index b90cedad282e95a067aca176fafa9f72a726f520..9a8a1e773f247f4c4af4e9789deb70cd5b7889c5 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Snowball.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Snowball.java @@ -57,6 +57,36 @@ public class Snowball extends ThrowableItemProjectile { @@ -17,25 +17,25 @@ index b90cedad282e95a067aca176fafa9f72a726f520..c29c849d6b61d23e86e8af949561c00e + protected void onHitBlock(net.minecraft.world.phys.BlockHitResult blockHitResult) { + super.onHitBlock(blockHitResult); + -+ if (!this.level.isClientSide) { ++ if (!this.level().isClientSide) { + net.minecraft.core.BlockPos blockposition = blockHitResult.getBlockPos(); + net.minecraft.core.BlockPos blockposition1 = blockposition.relative(blockHitResult.getDirection()); + -+ net.minecraft.world.level.block.state.BlockState iblockdata = this.level.getBlockState(blockposition); ++ net.minecraft.world.level.block.state.BlockState iblockdata = this.level().getBlockState(blockposition); + -+ if (this.level().purpurConfig.snowballExtinguishesFire && this.level.getBlockState(blockposition1).is(net.minecraft.world.level.block.Blocks.FIRE)) { ++ if (this.level().purpurConfig.snowballExtinguishesFire && this.level().getBlockState(blockposition1).is(net.minecraft.world.level.block.Blocks.FIRE)) { + if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this, blockposition1, net.minecraft.world.level.block.Blocks.AIR.defaultBlockState()).isCancelled()) { -+ this.level.removeBlock(blockposition1, false); ++ this.level().removeBlock(blockposition1, false); + } + } else if (this.level().purpurConfig.snowballExtinguishesCandles && net.minecraft.world.level.block.AbstractCandleBlock.isLit(iblockdata)) { + if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.setValue(net.minecraft.world.level.block.AbstractCandleBlock.LIT, false)).isCancelled()) { -+ net.minecraft.world.level.block.AbstractCandleBlock.extinguish(null, iblockdata, this.level, blockposition); ++ net.minecraft.world.level.block.AbstractCandleBlock.extinguish(null, iblockdata, this.level(), blockposition); + } + } else if (this.level().purpurConfig.snowballExtinguishesCampfires && net.minecraft.world.level.block.CampfireBlock.isLitCampfire(iblockdata)) { + if (!org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(this, blockposition, iblockdata.setValue(net.minecraft.world.level.block.CampfireBlock.LIT, false)).isCancelled()) { -+ this.level.levelEvent(null, 1009, blockposition, 0); -+ net.minecraft.world.level.block.CampfireBlock.dowse(this.getOwner(), this.level, blockposition, iblockdata); -+ this.level.setBlockAndUpdate(blockposition, iblockdata.setValue(net.minecraft.world.level.block.CampfireBlock.LIT, false)); ++ this.level().levelEvent(null, 1009, blockposition, 0); ++ net.minecraft.world.level.block.CampfireBlock.dowse(this.getOwner(), this.level(), blockposition, iblockdata); ++ this.level().setBlockAndUpdate(blockposition, iblockdata.setValue(net.minecraft.world.level.block.CampfireBlock.LIT, false)); + } + } + } @@ -46,7 +46,7 @@ index b90cedad282e95a067aca176fafa9f72a726f520..c29c849d6b61d23e86e8af949561c00e protected void onHit(HitResult hitResult) { super.onHit(hitResult); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a1151c789644d992fa1ee7ddd967a45b5426c1dd..3d73b18ca2c06250839982ccda9d30c5350a14eb 100644 +index e2120e4b3872067f1559c558d3af31c03f0305fc..c04957b14a4e1c2397bedfeeefab7306f94529c1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -237,6 +237,9 @@ public class PurpurWorldConfig { diff --git a/patches/server/0224-Mobs-always-drop-experience.patch b/patches/server/0224-Mobs-always-drop-experience.patch index 62460bf5f..f36bb0fd5 100644 --- a/patches/server/0224-Mobs-always-drop-experience.patch +++ b/patches/server/0224-Mobs-always-drop-experience.patch @@ -21,7 +21,7 @@ index 1a67f46b57e398d23fbc495ee81ae62e0d84d3dc..43cdda0cb26c5d5cc9025199eb71673d protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index a38b90e1d306a4926f473cdd38b6f719b4ce4252..2b24f9015a6ae9693ce844fc78d635de45199832 100644 +index c61700a0f1055ee8fe290646814c3e71d917e338..9973c3525953c5a37bbe997a11718d1635276a7b 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -295,6 +295,11 @@ public class Bat extends AmbientCreature { @@ -101,7 +101,7 @@ index 2343325fa9a771de7b9445cda24a2bcd7a7c1761..f0b6118a9995bb41836685bbf94d2e7f 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 5c99065d8f097920e440980313fd75a040c2cc66..3147c51a76f70a732fdc0fc53b8376821c4e2034 100644 +index 30e87b71ad237d76ec5adb4976edeca909e429ef..6aeb3a6ac9665a0c4b929d0f034f177df88109e0 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -83,6 +83,11 @@ public class Cow extends Animal { @@ -117,7 +117,7 @@ index 5c99065d8f097920e440980313fd75a040c2cc66..3147c51a76f70a732fdc0fc53b837682 protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); 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 a3585d3c4331138bdd029c6fd8723c5c5dc23a16..7f71ba27e6794d592e74686b9d404340b1bd9d5b 100644 +index 3755ffc395ec4644a2263c59cdacfdbab258d4c8..dcb23409b8492200771c515a83d086b39777972f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java @@ -165,6 +165,11 @@ public class Dolphin extends WaterAnimal { @@ -277,7 +277,7 @@ index ef3d0bbbeb6aa736f35c26066a1473c70ef028a2..54f5206b686c3cf4d2e5b470c07047a5 protected void defineSynchedData() { super.defineSynchedData(); diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index 5e935f0b8980a65eb139b9b17fe4f969018b48b2..69333778f311312df6cb65f046740cbdc770257b 100644 +index a91cef9b519b9d7330c40de9988f0463ce8aa20b..2bd8f6d05728b48e184f4835d6acb3a00cf66153 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java @@ -152,6 +152,11 @@ public class Rabbit extends Animal implements VariantHolder { @@ -389,7 +389,7 @@ index 5c2fc833dac13dd8b959f035abb74432ec6c82c9..bcc6d50aed60d1255fbdbfb7b9494b52 this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... } 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 79e67987f8077133f447ba5c7e1d5edb676e18e8..179d6131a8bac2fa031c33810227d9bc036c241d 100644 +index b2902e01ff2e9add8258bfd0b32d000209208f52..e7558511e0690d80ff444e71b7524d564d68842b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -214,6 +214,11 @@ public class Wolf extends TamableAnimal implements NeutralMob { @@ -549,7 +549,7 @@ index 063cdf8202af060b64a52b6af6fdf8fd477df0ed..1dbe73dda3fb3f32b354c416908d37ae return createBaseHorseAttributes().add(Attributes.MAX_HEALTH, 15.0D).add(Attributes.MOVEMENT_SPEED, (double)0.2F); } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 98945bc8d2fee8d491bf04d2c488775a09117ca4..db5a925dbf84d1a5aca1096ef2c76f0edbdd1d9a 100644 +index bd38dad0a38a60a0421ee62e52ef7009672de28d..f4596e90d2a569eb1118455b2eeec2036d806533 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -132,6 +132,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -709,21 +709,21 @@ index ab6bfdb50ee1bb13a213a2093287f5c2465b2d1b..b0aad5778a12d3f0f2ef806f856064c4 protected void defineSynchedData() { super.defineSynchedData(); 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 494439d60138f1b7bfe5d596c9ab97321400e4b4..da37eb47704368c6975003532f17ba7678588ad2 100644 +index 6340d8641770110d61dc9337942bc233e6fb49c6..88b0dffe2c2b4da1406f218186d28f018ee879a3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Giant.java +++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java -@@ -66,6 +66,11 @@ public class Giant extends Monster { +@@ -79,6 +79,11 @@ public class Giant extends Monster { + public boolean isSensitiveToWater() { return this.level().purpurConfig.giantTakeDamageFromWater; } - ++ + @Override + protected boolean isAlwaysExperienceDropper() { + return this.level().purpurConfig.giantAlwaysDropExp; + } -+ + // Purpur end + @Override - protected void initAttributes() { - this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.giantMaxHealth); diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java index 41b080c1fd44c93009908fcfd20180e0d11fca8a..96338ed7952683f56d9a406d0956ce230581f146 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java @@ -789,7 +789,7 @@ index e0ebc4c2d8dd718ce78d981a1d099e7482221f1f..1ad97267394d3717b1871336193cdc91 return Monster.createMonsterAttributes().add(Attributes.MOVEMENT_SPEED, (double)0.2F); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 7897d72dacc787b027306911eea4d59e31d06142..d6eda14f1735a8d8a6b7aa1afb6afeff4397fb1b 100644 +index 6b618c134dc90847e83b49f4de5332cf8c1bd69c..9de8612f0b21dc7e6dfd45efa9b82a8f864ea6cb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -125,6 +125,11 @@ public class Phantom extends FlyingMob implements Enemy { @@ -1125,7 +1125,7 @@ index b63d87df0f48dd63c89118f91b31dc4e3622e3b8..61e8f2d030fc50840c3f80dfb6fc8107 return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0D).add(Attributes.MOVEMENT_SPEED, (double)0.35F).add(Attributes.ATTACK_DAMAGE, 7.0D); } diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 87fa0181e6e9c819c3b5abd95f75231dfeb12be2..00a62f48961f6909488b040d75457633d47809ec 100644 +index 1ed712f5ba4e77582393806fc1bd49553b9ea8d1..30dc65d9af328cc462dfda531eba7215e732d13b 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -192,6 +192,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler diff --git a/patches/server/0228-Shearing-jeb-produces-random-color-wool.patch b/patches/server/0228-Shearing-jeb-produces-random-color-wool.patch index 7830ba89b..440ff6a81 100644 --- a/patches/server/0228-Shearing-jeb-produces-random-color-wool.patch +++ b/patches/server/0228-Shearing-jeb-produces-random-color-wool.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Shearing jeb produces random color wool diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index a1b323ecba25910e97f154e487acc94943117e0c..f3d17ace7273c0678870d6730a1986175642c03a 100644 +index a1b323ecba25910e97f154e487acc94943117e0c..62d8ae4c689170420c7850fbbb402be85b565882 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java @@ -315,7 +315,7 @@ public class Sheep extends Animal implements Shearable { @@ -13,12 +13,12 @@ index a1b323ecba25910e97f154e487acc94943117e0c..f3d17ace7273c0678870d6730a198617 for (int j = 0; j < i; ++j) { this.forceDrops = true; // CraftBukkit - ItemEntity entityitem = this.spawnAtLocation((ItemLike) Sheep.ITEM_BY_DYE.get(this.getColor()), 1); -+ ItemEntity entityitem = this.spawnAtLocation((ItemLike) Sheep.ITEM_BY_DYE.get(this.level().purpurConfig.sheepShearJebRandomColor && hasCustomName() && getCustomName().getString().equals("jeb_") ? DyeColor.random(this.level.random) : this.getColor()), 1); // Purpur ++ ItemEntity entityitem = this.spawnAtLocation((ItemLike) Sheep.ITEM_BY_DYE.get(this.level().purpurConfig.sheepShearJebRandomColor && hasCustomName() && getCustomName().getString().equals("jeb_") ? DyeColor.random(this.level().random) : this.getColor()), 1); // Purpur this.forceDrops = false; // CraftBukkit if (entityitem != null) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4f50b9d2fb35502fd1a787e547cab4cb88142438..b49b6b2558d18565d5a222360c7865a09c1ab026 100644 +index cbfac77db19cda4c34ddd8ae353bdea9be2a6407..96b7a1e4573d7ee989a0cc95c6527bf5b9211028 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2305,6 +2305,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0238-Dont-eat-blocks-in-non-ticking-chunks.patch b/patches/server/0238-Dont-eat-blocks-in-non-ticking-chunks.patch index 1e2dd8c7b..b5a84c875 100644 --- a/patches/server/0238-Dont-eat-blocks-in-non-ticking-chunks.patch +++ b/patches/server/0238-Dont-eat-blocks-in-non-ticking-chunks.patch @@ -18,7 +18,7 @@ index c2dec99102fa4c64c3c874f725cdc65845cd98d2..90828993a9dffdc27dbdbcb9fcf2fa86 // tested and confirmed via System.nanoTime() com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet playersInRange = reducedRange ? playerchunk.playersInMobSpawnRange : playerchunk.playersInChunkTickRange; diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java -index 95dc62687d10e5c6f54baadda4a725094c52c07f..2b600546990a1d564a218f3c1290e42a62175f7f 100644 +index 95dc62687d10e5c6f54baadda4a725094c52c07f..84a7fb84ce97f582a898dab4982ff8e317f40e82 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/EatBlockGoal.java @@ -31,6 +31,12 @@ public class EatBlockGoal extends Goal { @@ -26,8 +26,8 @@ index 95dc62687d10e5c6f54baadda4a725094c52c07f..2b600546990a1d564a218f3c1290e42a @Override public boolean canUse() { + // Purpur start -+ net.minecraft.world.level.chunk.LevelChunk chunk = this.mob.level.getChunkIfLoaded(this.mob.blockPosition()); -+ if (chunk == null || chunk.playerChunk == null || !((net.minecraft.server.level.ServerLevel) this.mob.level).getChunkSource().chunkMap.anyPlayerCloseEnoughForSpawning(chunk.playerChunk, this.mob.chunkPosition(), false)) { ++ net.minecraft.world.level.chunk.LevelChunk chunk = this.mob.level().getChunkIfLoaded(this.mob.blockPosition()); ++ if (chunk == null || chunk.playerChunk == null || !((net.minecraft.server.level.ServerLevel) this.mob.level()).getChunkSource().chunkMap.anyPlayerCloseEnoughForSpawning(chunk.playerChunk, this.mob.chunkPosition(), false)) { + return false; + } + // Purpur end diff --git a/patches/server/0253-Stonecutter-damage.patch b/patches/server/0253-Stonecutter-damage.patch index 060f66a69..bf7667288 100644 --- a/patches/server/0253-Stonecutter-damage.patch +++ b/patches/server/0253-Stonecutter-damage.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Stonecutter damage diff --git a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java b/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java -index 0a95842c53a9d0286c57bcb42db97e468e30fb7d..b2e4dd9ed599156f517d38eca3b71c8d1e6dc1b6 100644 +index 0a95842c53a9d0286c57bcb42db97e468e30fb7d..e2d42e7947a237dd060ec1b9b63ac6ca4f37241a 100644 --- a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java +++ b/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java @@ -92,4 +92,16 @@ public class StonecutterBlock extends Block { @@ -16,9 +16,9 @@ index 0a95842c53a9d0286c57bcb42db97e468e30fb7d..b2e4dd9ed599156f517d38eca3b71c8d + // Purpur start + @Override + public void stepOn(Level level, BlockPos pos, BlockState state, net.minecraft.world.entity.Entity entity) { -+ if (level().purpurConfig.stonecutterDamage > 0.0F && entity instanceof net.minecraft.world.entity.LivingEntity) { ++ if (level.purpurConfig.stonecutterDamage > 0.0F && entity instanceof net.minecraft.world.entity.LivingEntity) { + org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = level.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ()); -+ entity.hurt(entity.damageSources().magic(), level().purpurConfig.stonecutterDamage); ++ entity.hurt(entity.damageSources().magic(), level.purpurConfig.stonecutterDamage); + org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = null; + } + super.stepOn(level, pos, state, entity); @@ -63,7 +63,7 @@ index 3de2e7a17e1234367e4ec6d944b1145781aefeba..15ed564a579237dd1f5d6ce56ccb473f 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 e0cfd29988ec58e0f1328b9b2d131ff6f5f5fa8c..2d52019aa041956827156e5e511f1533f1ff4c96 100644 +index 8b24a35bbf003bac3615acd80d7a08751f6f0036..ec1220d874cec48fc538348865b80c27d37ac300 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1001,6 +1001,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0256-Skeletons-eat-wither-roses.patch b/patches/server/0256-Skeletons-eat-wither-roses.patch index 7a5487ad3..e05e1a257 100644 --- a/patches/server/0256-Skeletons-eat-wither-roses.patch +++ b/patches/server/0256-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 9b43150a00d7fac85aa69f5a2dbffd0dfdae4b86..65d97a2c4b3fcdfa4800787ab1ef5b77f49229c8 100644 +index 9b43150a00d7fac85aa69f5a2dbffd0dfdae4b86..f4a47ac2c86cc95178922cce7320ba1ef5121b57 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java @@ -14,6 +14,16 @@ import net.minecraft.world.item.Items; @@ -52,7 +52,7 @@ index 9b43150a00d7fac85aa69f5a2dbffd0dfdae4b86..65d97a2c4b3fcdfa4800787ab1ef5b77 + return InteractionResult.CONSUME; + } + -+ WitherSkeleton skeleton = EntityType.WITHER_SKELETON.create(level); ++ WitherSkeleton skeleton = EntityType.WITHER_SKELETON.create(level()); + if (skeleton == null) { + return InteractionResult.PASS; + } @@ -78,14 +78,14 @@ index 9b43150a00d7fac85aa69f5a2dbffd0dfdae4b86..65d97a2c4b3fcdfa4800787ab1ef5b77 + return InteractionResult.PASS; + } + -+ this.level.addFreshEntity(skeleton); ++ this.level().addFreshEntity(skeleton); + this.remove(RemovalReason.DISCARDED); + if (!player.getAbilities().instabuild) { + stack.shrink(1); + } + + for (int i = 0; i < 15; ++i) { -+ ((ServerLevel) level).sendParticles(((ServerLevel) level).players(), null, ParticleTypes.HAPPY_VILLAGER, ++ ((ServerLevel) level()).sendParticles(((ServerLevel) level()).players(), null, ParticleTypes.HAPPY_VILLAGER, + getX() + random.nextFloat(), getY() + (random.nextFloat() * 2), getZ() + random.nextFloat(), 1, + random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, 0, true); + } @@ -94,7 +94,7 @@ index 9b43150a00d7fac85aa69f5a2dbffd0dfdae4b86..65d97a2c4b3fcdfa4800787ab1ef5b77 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 24377bf7a10a758bd2049031983b9d9347ccd0c4..fac5a929dec9df57217a9b835910769958d39351 100644 +index 1f56cddafaca20b8a4f173bc6e60ddd03cdf87e3..96db7651b416e0654586ddd6bdc46222466accf9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -2431,6 +2431,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0257-Enchantment-Table-Persists-Lapis.patch b/patches/server/0257-Enchantment-Table-Persists-Lapis.patch index ec98030b9..199de6695 100644 --- a/patches/server/0257-Enchantment-Table-Persists-Lapis.patch +++ b/patches/server/0257-Enchantment-Table-Persists-Lapis.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Enchantment Table Persists Lapis diff --git a/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java b/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java -index 0c3c3902e84010684ef703545c1377d8a6f32580..fa3ecf3ca6514dcf957b07c787946cc5d626e15a 100644 +index 0c3c3902e84010684ef703545c1377d8a6f32580..dbf825836727a50a7b8dda48c97df8d846e4fd80 100644 --- a/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java +++ b/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java @@ -38,6 +38,12 @@ import org.bukkit.event.enchantment.PrepareItemEnchantEvent; @@ -31,7 +31,7 @@ index 0c3c3902e84010684ef703545c1377d8a6f32580..fa3ecf3ca6514dcf957b07c787946cc5 + public void onClose(CraftHumanEntity who) { + super.onClose(who); + -+ if (who.getHandle().getLevel().purpurConfig.enchantmentTableLapisPersists) { ++ if (who.getHandle().level().purpurConfig.enchantmentTableLapisPersists) { + access.execute((level, pos) -> { + BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof EnchantmentTableBlockEntity enchantmentTable) { @@ -50,7 +50,7 @@ index 0c3c3902e84010684ef703545c1377d8a6f32580..fa3ecf3ca6514dcf957b07c787946cc5 + // Purpur start + access.execute((level, pos) -> { -+ if (level().purpurConfig.enchantmentTableLapisPersists) { ++ if (level.purpurConfig.enchantmentTableLapisPersists) { + BlockEntity blockEntity = level.getBlockEntity(pos); + if (blockEntity instanceof EnchantmentTableBlockEntity enchantmentTable) { + this.getSlot(1).set(new ItemStack(Items.LAPIS_LAZULI, enchantmentTable.getLapis())); @@ -71,7 +71,7 @@ index 0c3c3902e84010684ef703545c1377d8a6f32580..fa3ecf3ca6514dcf957b07c787946cc5 }); } diff --git a/src/main/java/net/minecraft/world/level/block/EnchantmentTableBlock.java b/src/main/java/net/minecraft/world/level/block/EnchantmentTableBlock.java -index 839b7bc9392906dca384003468746963631fe095..cc065545723c118b454acd91ef9044af36aa3f1b 100644 +index 839b7bc9392906dca384003468746963631fe095..286f34eef22a85be3fe9747dc3c3f9a7d51f437c 100644 --- a/src/main/java/net/minecraft/world/level/block/EnchantmentTableBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EnchantmentTableBlock.java @@ -29,6 +29,8 @@ import net.minecraft.world.level.pathfinder.PathComputationType; @@ -93,7 +93,7 @@ index 839b7bc9392906dca384003468746963631fe095..cc065545723c118b454acd91ef9044af + public void onRemove(BlockState state, Level level, BlockPos pos, BlockState newState, boolean moved) { + BlockEntity blockEntity = level.getBlockEntity(pos); + -+ if (level().purpurConfig.enchantmentTableLapisPersists && blockEntity instanceof EnchantmentTableBlockEntity enchantmentTable) { ++ if (level.purpurConfig.enchantmentTableLapisPersists && blockEntity instanceof EnchantmentTableBlockEntity enchantmentTable) { + Containers.dropItemStack(level, pos.getX(), pos.getY(), pos.getZ(), new ItemStack(Items.LAPIS_LAZULI, enchantmentTable.getLapis())); + level.updateNeighbourForOutputSignal(pos, this); + } @@ -146,7 +146,7 @@ index 65e1381bb2d10bd212463feb602c60f8fdb9ade1..b7370e64fd0d50e8725d7d5afc30af2e + // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fac5a929dec9df57217a9b835910769958d39351..26586904990f39298f7e2a6e1be657a13808fd6d 100644 +index 96db7651b416e0654586ddd6bdc46222466accf9..e6da680bca4b9a1ace5229f4c7cd08abb90c4364 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -745,6 +745,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0265-PaperPR-7822-Fix-exact-choice-recipe-book-clicks.patch b/patches/server/0265-PaperPR-7822-Fix-exact-choice-recipe-book-clicks.patch index f857deebc..aed6e762c 100644 --- a/patches/server/0265-PaperPR-7822-Fix-exact-choice-recipe-book-clicks.patch +++ b/patches/server/0265-PaperPR-7822-Fix-exact-choice-recipe-book-clicks.patch @@ -5,7 +5,7 @@ Subject: [PATCH] PaperPR #7822 Fix exact choice recipe book clicks diff --git a/src/main/java/net/minecraft/world/entity/player/StackedContents.java b/src/main/java/net/minecraft/world/entity/player/StackedContents.java -index 574ebb3a2fcd0e4e426a8a7ee88d722ed3b9c3f5..842b921799111789b37a34b76644c9217bc85794 100644 +index 574ebb3a2fcd0e4e426a8a7ee88d722ed3b9c3f5..862972afa333422592a25b854cec191e02c10734 100644 --- a/src/main/java/net/minecraft/world/entity/player/StackedContents.java +++ b/src/main/java/net/minecraft/world/entity/player/StackedContents.java @@ -37,8 +37,62 @@ public class StackedContents { @@ -32,7 +32,7 @@ index 574ebb3a2fcd0e4e426a8a7ee88d722ed3b9c3f5..842b921799111789b37a34b76644c921 + if (a == null || b == null) { + return false; + } -+ return ItemStack.tagMatches(a, b); ++ return ItemStack.matches(a, b); + } + }); + private final it.unimi.dsi.fastutil.ints.Int2ObjectMap idToItemstack = new it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap<>(); @@ -85,7 +85,7 @@ index 574ebb3a2fcd0e4e426a8a7ee88d722ed3b9c3f5..842b921799111789b37a34b76644c921 } diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 0f6f14f3ddf18ef111d37434b8c2659c9a6484b9..57bdbfd436feb2004f8c1a45f4a1658e7167582b 100644 +index c6bd785382fcd0097c0cfc60ed9b5241cd1b2250..16e051084bb4e9efc3bd009b76f5cd88d62f4fa3 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -113,6 +113,7 @@ import org.bukkit.event.world.StructureGrowEvent; diff --git a/patches/server/0269-Add-Bee-API.patch b/patches/server/0269-Add-Bee-API.patch index 09be91841..63ccebb40 100644 --- a/patches/server/0269-Add-Bee-API.patch +++ b/patches/server/0269-Add-Bee-API.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Add Bee API diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index ca977a8f3d3e7925b3abc78d2dd1a7f57771eee8..fefd8890729f90fc271c5b4ff48482ed18d1d5ec 100644 +index 2afe5a4f3abaa3f9883b13fa3895e1e15ed68d3a..2677e7899aa98fc04070f5bbbc40da6117d89efa 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -803,6 +803,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { if (optional.isPresent()) { Bee.this.savedFlowerPos = (BlockPos) optional.get(); Bee.this.navigation.moveTo((double) Bee.this.savedFlowerPos.getX() + 0.5D, (double) Bee.this.savedFlowerPos.getY() + 0.5D, (double) Bee.this.savedFlowerPos.getZ() + 0.5D, 1.2000000476837158D); -+ new org.purpurmc.purpur.event.entity.BeeFoundFlowerEvent((org.bukkit.entity.Bee) Bee.this.getBukkitEntity(), io.papermc.paper.util.MCUtil.toLocation(Bee.this.level, Bee.this.savedFlowerPos)).callEvent(); // Purpur ++ new org.purpurmc.purpur.event.entity.BeeFoundFlowerEvent((org.bukkit.entity.Bee) Bee.this.getBukkitEntity(), io.papermc.paper.util.MCUtil.toLocation(Bee.this.level(), Bee.this.savedFlowerPos)).callEvent(); // Purpur return true; } else { Bee.this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(Bee.this.random, 20, 60); @@ -20,7 +20,7 @@ index ca977a8f3d3e7925b3abc78d2dd1a7f57771eee8..fefd8890729f90fc271c5b4ff48482ed this.pollinating = false; Bee.this.navigation.stop(); Bee.this.remainingCooldownBeforeLocatingNewFlower = 200; -+ new org.purpurmc.purpur.event.entity.BeeStopPollinatingEvent((org.bukkit.entity.Bee) Bee.this.getBukkitEntity(), Bee.this.savedFlowerPos == null ? null : io.papermc.paper.util.MCUtil.toLocation(Bee.this.level, Bee.this.savedFlowerPos), Bee.this.hasNectar()).callEvent(); // Purpur ++ new org.purpurmc.purpur.event.entity.BeeStopPollinatingEvent((org.bukkit.entity.Bee) Bee.this.getBukkitEntity(), Bee.this.savedFlowerPos == null ? null : io.papermc.paper.util.MCUtil.toLocation(Bee.this.level(), Bee.this.savedFlowerPos), Bee.this.hasNectar()).callEvent(); // Purpur } @Override @@ -28,7 +28,7 @@ index ca977a8f3d3e7925b3abc78d2dd1a7f57771eee8..fefd8890729f90fc271c5b4ff48482ed this.setWantedPos(); } -+ if (this.successfulPollinatingTicks == 0) new org.purpurmc.purpur.event.entity.BeeStartedPollinatingEvent((org.bukkit.entity.Bee) Bee.this.getBukkitEntity(), io.papermc.paper.util.MCUtil.toLocation(Bee.this.level, Bee.this.savedFlowerPos)).callEvent(); // Purpur ++ if (this.successfulPollinatingTicks == 0) new org.purpurmc.purpur.event.entity.BeeStartedPollinatingEvent((org.bukkit.entity.Bee) Bee.this.getBukkitEntity(), io.papermc.paper.util.MCUtil.toLocation(Bee.this.level(), Bee.this.savedFlowerPos)).callEvent(); // Purpur ++this.successfulPollinatingTicks; if (Bee.this.random.nextFloat() < 0.05F && this.successfulPollinatingTicks > this.lastSoundPlayedTick + 60) { this.lastSoundPlayedTick = this.successfulPollinatingTicks; diff --git a/patches/server/0287-Add-option-to-allow-creeper-to-encircle-target-when-.patch b/patches/server/0287-Add-option-to-allow-creeper-to-encircle-target-when-.patch index b26f7bf2f..b67d4a062 100644 --- a/patches/server/0287-Add-option-to-allow-creeper-to-encircle-target-when-.patch +++ b/patches/server/0287-Add-option-to-allow-creeper-to-encircle-target-when-.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add option to allow creeper to encircle target when fusing. diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/SwellGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/SwellGoal.java -index e241ae250f4f04a17ef2c583d00b065a4ca56a4c..02b567e4e808e1a809d285ef39e1abc54e1e6ad2 100644 +index e241ae250f4f04a17ef2c583d00b065a4ca56a4c..7b99c3446b50939241d3e220d93e05649f72a6df 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/SwellGoal.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/SwellGoal.java @@ -54,6 +54,14 @@ public class SwellGoal extends Goal { @@ -13,7 +13,7 @@ index e241ae250f4f04a17ef2c583d00b065a4ca56a4c..02b567e4e808e1a809d285ef39e1abc5 } else { this.creeper.setSwellDir(1); + // Purpur start -+ if (this.creeper.getLevel().purpurConfig.creeperEncircleTarget) { ++ if (this.creeper.level().purpurConfig.creeperEncircleTarget) { + net.minecraft.world.phys.Vec3 relative = this.creeper.position().subtract(this.target.position()); + relative = relative.yRot((float) Math.PI / 3).normalize().multiply(2, 2, 2); + net.minecraft.world.phys.Vec3 destination = this.target.position().add(relative); diff --git a/patches/server/0292-End-Crystal-Cramming.patch b/patches/server/0292-End-Crystal-Cramming.patch index 0cfb79655..d26503dca 100644 --- a/patches/server/0292-End-Crystal-Cramming.patch +++ b/patches/server/0292-End-Crystal-Cramming.patch @@ -5,19 +5,19 @@ Subject: [PATCH] End Crystal Cramming diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -index ada7eba2beca5b0897fa2eb3567a639573f4e18d..db513ae4b1427ceba7f1a5878ba692ea42fa12ea 100644 +index ada7eba2beca5b0897fa2eb3567a639573f4e18d..dac59bb206f197f8c51535f8c0bd7b98c9f34235 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java @@ -93,6 +93,7 @@ public class EndCrystal extends Entity { } } // Paper end -+ if (this.level().purpurConfig.endCrystalCramming > 0 && this.level.getEntitiesOfClass(EndCrystal.class, getBoundingBox()).size() > this.level().purpurConfig.endCrystalCramming) this.hurt(this.damageSources().cramming(), 6.0F); // Purpur ++ if (this.level().purpurConfig.endCrystalCramming > 0 && this.level().getEntitiesOfClass(EndCrystal.class, getBoundingBox()).size() > this.level().purpurConfig.endCrystalCramming) this.hurt(this.damageSources().cramming(), 6.0F); // Purpur } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4c359f653e7beb0c1e162ebb53dcf1332e334bd6..68690f120e4586defa87de6be1b485e904eb21ff 100644 +index 84a14af05556296f40d188bc77b973884681cad6..5bbf2ad0fe37a6f5211fec9dbc854546776482aa 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -873,6 +873,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0295-Config-to-remove-explosion-radius-clamp.patch b/patches/server/0295-Config-to-remove-explosion-radius-clamp.patch index 591e3a790..df22b90d5 100644 --- a/patches/server/0295-Config-to-remove-explosion-radius-clamp.patch +++ b/patches/server/0295-Config-to-remove-explosion-radius-clamp.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config to remove explosion radius clamp diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 8f97c9df726ac20cfce7bdddd5dd4f8c5aa76c35..6fed8a6f4e633cda367e9ee9a0065690bb65a8dc 100644 +index 8f97c9df726ac20cfce7bdddd5dd4f8c5aa76c35..93e7e2fe1f4184719736e698563f493b1d31e8c0 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -86,7 +86,7 @@ public class Explosion { @@ -22,12 +22,12 @@ index 8f97c9df726ac20cfce7bdddd5dd4f8c5aa76c35..6fed8a6f4e633cda367e9ee9a0065690 public void explode() { // CraftBukkit start - if (this.radius < 0.1F) { -+ if ((this.level == null || this.level().purpurConfig.explosionClampRadius) && this.radius < 0.1F) { // Purpur ++ if ((this.level == null || this.level.purpurConfig.explosionClampRadius) && this.radius < 0.1F) { // Purpur return; } // CraftBukkit end diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 18f1f53ba9084b2d1ed8edbddb19e8253b0b79a4..365c2f9fa912d902fe12ec647ba0193513f4cc92 100644 +index 15b35bac4264d436c6226d5868fa4a9eab51dbe4..44532abb382a0536204d6d561ea39c1b46b178b3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -219,6 +219,11 @@ public class PurpurWorldConfig {