From 48131f7f204430a0ffc52c26cbc10356c7a26493 Mon Sep 17 00:00:00 2001 From: granny Date: Mon, 24 Mar 2025 22:23:34 -0700 Subject: [PATCH] update nms file patches --- .../stats/ServerRecipeBook.java.patch | 10 -- .../entity/ai/behavior/AcquirePoi.java.patch | 11 --- .../ai/sensing/NearestBedSensor.java.patch | 11 --- .../entity/monster/ZombifiedPiglin.java.patch | 20 ---- .../world/entity/npc/CatSpawner.java.patch | 39 -------- .../world/entity/raid/Raids.java.patch | 42 --------- .../minecraft/world/item/EggItem.java.patch | 11 --- .../level/block/BubbleColumnBlock.java.patch | 15 --- .../level/block/CampfireBlock.java.patch | 11 --- .../level/block/SculkShriekerBlock.java.patch | 11 --- .../level/levelgen/PhantomSpawner.java.patch | 32 ------- .../activation/ActivationRange.java.patch | 0 .../net/minecraft/CrashReport.java.patch | 0 .../commands/CommandSourceStack.java.patch | 2 +- .../minecraft/commands/Commands.java.patch | 8 +- .../selector/EntitySelector.java.patch | 0 .../net/minecraft/core/BlockPos.java.patch | 6 +- .../dispenser/DispenseItemBehavior.java.patch | 2 +- .../EquipmentDispenseItemBehavior.java.patch | 2 +- .../framework/GameTestHelper.java.patch | 8 +- .../minecraft/network/Connection.java.patch | 0 .../chat/SignedMessageChain.java.patch | 0 .../net/minecraft/server/Main.java.patch | 0 .../server/MinecraftServer.java.patch | 27 +++--- .../server/PlayerAdvancements.java.patch | 0 .../server/commands/EnchantCommand.java.patch | 2 +- .../commands/GameModeCommand.java.patch | 0 .../server/commands/GiveCommand.java.patch | 2 +- .../dedicated/DedicatedServer.java.patch | 16 ++-- .../DedicatedServerProperties.java.patch | 0 .../server/gui/MinecraftServerGui.java.patch | 0 .../server/gui/StatsComponent.java.patch | 0 .../server/level/ServerLevel.java.patch | 28 +++--- .../server/level/ServerPlayer.java.patch | 50 +++++----- .../level/ServerPlayerGameMode.java.patch | 8 +- .../server/level/WorldGenRegion.java.patch | 2 +- .../ServerCommonPacketListenerImpl.java.patch | 9 +- .../ServerGamePacketListenerImpl.java.patch | 92 +++++++++---------- .../ServerLoginPacketListenerImpl.java.patch | 2 +- .../ServerStatusPacketListenerImpl.java.patch | 0 .../server/players/PlayerList.java.patch | 12 +-- .../server/players/SleepStatus.java.patch | 0 .../stats/ServerRecipeBook.java.patch | 10 ++ .../net/minecraft/util/StringUtil.java.patch | 0 .../world/damagesource/CombatRules.java.patch | 0 .../damagesource/CombatTracker.java.patch | 4 +- .../damagesource/DamageSource.java.patch | 0 .../damagesource/DamageSources.java.patch | 0 .../world/effect/HungerMobEffect.java.patch | 0 .../world/effect/PoisonMobEffect.java.patch | 0 .../effect/RegenerationMobEffect.java.patch | 0 .../effect/SaturationMobEffect.java.patch | 0 .../world/effect/WitherMobEffect.java.patch | 0 .../minecraft/world/entity/Entity.java.patch | 58 ++++++------ .../world/entity/EntitySelector.java.patch | 0 .../world/entity/EntityType.java.patch | 21 ++--- .../world/entity/ExperienceOrb.java.patch | 10 +- .../world/entity/GlowSquid.java.patch | 2 +- .../world/entity/LivingEntity.java.patch | 74 +++++++-------- .../net/minecraft/world/entity/Mob.java.patch | 26 +++--- .../ai/attributes/RangedAttribute.java.patch | 0 .../entity/ai/behavior/AcquirePoi.java.patch | 11 +++ .../ai/behavior/InteractWithDoor.java.patch | 0 .../ai/behavior/ShowTradesToPlayer.java.patch | 0 .../ai/goal/LlamaFollowCaravanGoal.java.patch | 0 .../ai/goal/RangedBowAttackGoal.java.patch | 0 .../ai/goal/RunAroundLikeCrazyGoal.java.patch | 0 .../world/entity/ai/goal/SwellGoal.java.patch | 0 .../ai/sensing/NearestBedSensor.java.patch | 11 +++ .../targeting/TargetingConditions.java.patch | 0 .../world/entity/ambient/Bat.java.patch | 4 +- .../entity/animal/AbstractCow.java.patch} | 16 ++-- .../world/entity/animal/Animal.java.patch | 8 +- .../world/entity/animal/Bee.java.patch | 16 ++-- .../world/entity/animal/Cat.java.patch | 4 +- .../world/entity/animal/Dolphin.java.patch | 14 +-- .../world/entity/animal/Fox.java.patch | 10 +- .../world/entity/animal/IronGolem.java.patch | 14 +-- .../entity/animal/MushroomCow.java.patch | 14 +-- .../world/entity/animal/Ocelot.java.patch | 2 +- .../world/entity/animal/Parrot.java.patch | 10 +- .../world/entity/animal/Pig.java.patch | 2 +- .../world/entity/animal/PolarBear.java.patch | 0 .../world/entity/animal/Rabbit.java.patch | 2 +- .../world/entity/animal/SnowGolem.java.patch | 19 ++-- .../world/entity/animal/Squid.java.patch | 4 +- .../entity/animal/WaterAnimal.java.patch | 2 +- .../world/entity/animal/goat/Goat.java.patch | 2 +- .../entity/animal/horse/Llama.java.patch | 18 ++-- .../world/entity/animal/wolf}/Wolf.java.patch | 42 ++++----- .../boss/enderdragon/EndCrystal.java.patch | 2 +- .../boss/enderdragon/EnderDragon.java.patch | 6 +- .../entity/boss/wither/WitherBoss.java.patch | 18 ++-- .../entity/decoration/ArmorStand.java.patch | 6 +- .../world/entity/item/ItemEntity.java.patch | 6 +- .../world/entity/item/PrimedTnt.java.patch | 2 +- .../monster/AbstractSkeleton.java.patch | 2 +- .../world/entity/monster/Creeper.java.patch | 15 +-- .../world/entity/monster/Drowned.java.patch | 0 .../world/entity/monster/EnderMan.java.patch | 26 +++--- .../world/entity/monster/Endermite.java.patch | 12 +-- .../world/entity/monster/Monster.java.patch | 0 .../world/entity/monster/Phantom.java.patch | 2 +- .../world/entity/monster/Ravager.java.patch | 4 +- .../world/entity/monster/Shulker.java.patch | 12 +-- .../world/entity/monster/Skeleton.java.patch | 2 +- .../world/entity/monster/Strider.java.patch | 2 +- .../entity/monster/Vindicator.java.patch | 2 +- .../world/entity/monster/Zombie.java.patch | 6 +- .../entity/monster/ZombieVillager.java.patch | 2 +- .../entity/monster/ZombifiedPiglin.java.patch | 28 ++++++ .../entity/monster/piglin/PiglinAi.java.patch | 19 ++-- .../world/entity/npc/CatSpawner.java.patch | 41 +++++++++ .../world/entity/npc/Villager.java.patch | 20 ++-- .../entity/npc/WanderingTrader.java.patch | 10 +- .../npc/WanderingTraderSpawner.java.patch | 2 +- .../world/entity/player/Player.java.patch | 20 ++-- .../projectile/AbstractArrow.java.patch | 12 +-- .../entity/projectile/Snowball.java.patch | 0 .../projectile/ThrownEnderpearl.java.patch | 6 +- .../projectile/ThrownTrident.java.patch | 2 +- .../entity/projectile/WitherSkull.java.patch | 10 +- .../world/entity/raid/Raids.java.patch | 42 +++++++++ .../entity/vehicle/AbstractBoat.java.patch | 2 +- .../vehicle/NewMinecartBehavior.java.patch | 0 .../vehicle/OldMinecartBehavior.java.patch | 2 +- .../minecraft/world/food/FoodData.java.patch | 4 +- .../world/food/FoodProperties.java.patch | 0 .../AbstractContainerMenu.java.patch | 0 .../inventory/AbstractFurnaceMenu.java.patch | 0 .../world/inventory/AnvilMenu.java.patch | 16 ++-- .../world/inventory/ArmorSlot.java.patch | 2 +- .../inventory/EnchantmentMenu.java.patch | 2 +- .../world/inventory/GrindstoneMenu.java.patch | 0 .../inventory/ItemCombinerMenu.java.patch | 0 .../minecraft/world/item/AxeItem.java.patch | 6 +- .../minecraft/world/item/BlockItem.java.patch | 6 +- .../minecraft/world/item/BowItem.java.patch | 0 .../world/item/BucketItem.java.patch | 2 +- .../world/item/CrossbowItem.java.patch | 2 +- .../minecraft/world/item/DyeColor.java.patch | 2 +- .../minecraft/world/item/EggItem.java.patch | 11 +++ .../world/item/EndCrystalItem.java.patch | 2 +- .../world/item/EnderpearlItem.java.patch | 0 .../minecraft/world/item/HoeItem.java.patch | 2 +- .../minecraft/world/item/ItemStack.java.patch | 20 ++-- .../net/minecraft/world/item/Items.java.patch | 4 +- .../minecraft/world/item/MapItem.java.patch | 2 +- .../world/item/NameTagItem.java.patch | 0 .../item/ProjectileWeaponItem.java.patch | 0 .../world/item/ShovelItem.java.patch | 2 +- .../world/item/SnowballItem.java.patch | 0 .../world/item/SpawnEggItem.java.patch | 0 .../world/item/ThrowablePotionItem.java.patch | 6 +- .../world/item/TridentItem.java.patch | 18 ++-- ...arAllStatusEffectsConsumeEffect.java.patch | 0 .../world/item/crafting/Ingredient.java.patch | 8 +- .../enchantment/EnchantmentHelper.java.patch | 0 .../enchantment/ItemEnchantments.java.patch | 14 +-- .../item/trading/MerchantOffer.java.patch | 0 .../world/level/BaseSpawner.java.patch | 2 +- .../world/level/EntityGetter.java.patch | 2 +- .../minecraft/world/level/Level.java.patch | 18 ++-- .../world/level/NaturalSpawner.java.patch | 2 +- .../world/level/ServerExplosion.java.patch | 10 +- .../world/level/block/AnvilBlock.java.patch | 2 +- .../world/level/block/AzaleaBlock.java.patch | 0 .../block/BaseCoralPlantTypeBlock.java.patch | 0 .../world/level/block/BedBlock.java.patch | 10 +- .../level/block/BigDripleafBlock.java.patch | 2 +- .../world/level/block/Block.java.patch | 24 ++--- .../world/level/block/Blocks.java.patch | 4 +- .../level/block/BubbleColumnBlock.java.patch | 14 +++ .../world/level/block/BushBlock.java.patch | 6 +- .../world/level/block/CactusBlock.java.patch | 6 +- .../world/level/block/CakeBlock.java.patch | 2 +- .../level/block/CampfireBlock.java.patch | 11 +++ .../level/block/CarvedPumpkinBlock.java.patch | 6 +- .../level/block/CauldronBlock.java.patch | 0 .../level/block/CaveVinesBlock.java.patch | 2 +- .../block/ChangeOverTimeBlock.java.patch | 0 .../world/level/block/ChestBlock.java.patch | 2 +- .../level/block/ComposterBlock.java.patch | 2 +- .../world/level/block/CoralBlock.java.patch | 0 .../world/level/block/CropBlock.java.patch | 6 +- .../world/level/block/DoorBlock.java.patch | 4 +- .../level/block/DragonEggBlock.java.patch | 0 .../block/EnchantingTableBlock.java.patch | 0 .../world/level/block/FarmBlock.java.patch | 8 +- .../block/GrowingPlantHeadBlock.java.patch | 14 +-- .../world/level/block/HayBlock.java.patch | 2 +- .../world/level/block/IceBlock.java.patch | 0 .../world/level/block/KelpBlock.java.patch | 0 .../world/level/block/LiquidBlock.java.patch | 0 .../world/level/block/MagmaBlock.java.patch | 0 .../level/block/NetherPortalBlock.java.patch | 8 +- .../level/block/NetherWartBlock.java.patch | 6 +- .../world/level/block/NoteBlock.java.patch | 2 +- .../level/block/ObserverBlock.java.patch | 0 .../block/PointedDripstoneBlock.java.patch | 2 +- .../level/block/PoweredRailBlock.java.patch | 2 +- .../level/block/RespawnAnchorBlock.java.patch | 2 +- .../level/block/SculkShriekerBlock.java.patch | 11 +++ .../world/level/block/SlabBlock.java.patch | 2 +- .../level/block/SnowLayerBlock.java.patch | 2 +- .../world/level/block/SpawnerBlock.java.patch | 4 +- .../world/level/block/SpongeBlock.java.patch | 0 .../level/block/StonecutterBlock.java.patch | 0 .../level/block/SugarCaneBlock.java.patch | 4 +- .../level/block/TurtleEggBlock.java.patch | 4 +- .../level/block/TwistingVinesBlock.java.patch | 0 .../level/block/WeepingVinesBlock.java.patch | 0 .../level/block/WitherSkullBlock.java.patch | 0 .../AbstractFurnaceBlockEntity.java.patch | 4 +- .../block/entity/BeaconBlockEntity.java.patch | 10 +- .../entity/BeehiveBlockEntity.java.patch | 6 +- .../level/block/entity/BlockEntity.java.patch | 11 ++- .../entity/ConduitBlockEntity.java.patch | 8 +- .../EnchantingTableBlockEntity.java.patch | 17 ++-- .../block/entity/SignBlockEntity.java.patch | 4 +- .../piston/PistonStructureResolver.java.patch | 0 .../chunk/storage/EntityStorage.java.patch | 6 +- .../storage/RegionFileStorage.java.patch | 2 +- .../level/levelgen/PhantomSpawner.java.patch | 28 ++++++ .../level/material/FlowingFluid.java.patch | 4 +- .../world/level/material/LavaFluid.java.patch | 4 +- .../level/material/WaterFluid.java.patch | 5 +- .../pathfinder/WalkNodeEvaluator.java.patch | 0 .../world/level/portal/PortalShape.java.patch | 0 .../maps/MapItemSavedData.java.patch | 2 +- .../EnchantedCountIncreaseFunction.java.patch | 0 .../net/minecraft/world/phys/AABB.java.patch | 6 +- .../org/purpurmc/purpur/PurpurConfig.java | 4 +- .../purpurmc/purpur/PurpurWorldConfig.java | 5 +- 234 files changed, 856 insertions(+), 875 deletions(-) delete mode 100644 purpur-server/minecraft-patches/rejected/net/minecraft/stats/ServerRecipeBook.java.patch delete mode 100644 purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/behavior/AcquirePoi.java.patch delete mode 100644 purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java.patch delete mode 100644 purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/ZombifiedPiglin.java.patch delete mode 100644 purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/npc/CatSpawner.java.patch delete mode 100644 purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/raid/Raids.java.patch delete mode 100644 purpur-server/minecraft-patches/rejected/net/minecraft/world/item/EggItem.java.patch delete mode 100644 purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BubbleColumnBlock.java.patch delete mode 100644 purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CampfireBlock.java.patch delete mode 100644 purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SculkShriekerBlock.java.patch delete mode 100644 purpur-server/minecraft-patches/rejected/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch rename purpur-server/minecraft-patches/{rejected => sources}/io/papermc/paper/entity/activation/ActivationRange.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/CrashReport.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/commands/CommandSourceStack.java.patch (99%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/commands/Commands.java.patch (90%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/commands/arguments/selector/EntitySelector.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/core/BlockPos.java.patch (64%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/gametest/framework/GameTestHelper.java.patch (62%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/network/Connection.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/network/chat/SignedMessageChain.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/Main.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/MinecraftServer.java.patch (94%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/PlayerAdvancements.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/commands/EnchantCommand.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/commands/GameModeCommand.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/commands/GiveCommand.java.patch (87%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/dedicated/DedicatedServer.java.patch (90%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/dedicated/DedicatedServerProperties.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/gui/MinecraftServerGui.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/gui/StatsComponent.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/level/ServerLevel.java.patch (95%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/level/ServerPlayer.java.patch (87%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/level/ServerPlayerGameMode.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/level/WorldGenRegion.java.patch (96%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch (95%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch (78%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/players/PlayerList.java.patch (93%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/server/players/SleepStatus.java.patch (100%) create mode 100644 purpur-server/minecraft-patches/sources/net/minecraft/stats/ServerRecipeBook.java.patch rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/util/StringUtil.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/damagesource/CombatRules.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/damagesource/CombatTracker.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/damagesource/DamageSource.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/damagesource/DamageSources.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/effect/HungerMobEffect.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/effect/PoisonMobEffect.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/effect/RegenerationMobEffect.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/effect/SaturationMobEffect.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/effect/WitherMobEffect.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/Entity.java.patch (86%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/EntitySelector.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/EntityType.java.patch (74%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/ExperienceOrb.java.patch (64%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/GlowSquid.java.patch (96%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/LivingEntity.java.patch (78%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/Mob.java.patch (83%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/ai/attributes/RangedAttribute.java.patch (100%) create mode 100644 purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/behavior/AcquirePoi.java.patch rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/ai/behavior/ShowTradesToPlayer.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/ai/goal/LlamaFollowCaravanGoal.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/ai/goal/RangedBowAttackGoal.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/ai/goal/SwellGoal.java.patch (100%) create mode 100644 purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java.patch rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/ai/targeting/TargetingConditions.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/ambient/Bat.java.patch (96%) rename purpur-server/minecraft-patches/{rejected/net/minecraft/world/entity/animal/Cow.java.patch => sources/net/minecraft/world/entity/animal/AbstractCow.java.patch} (90%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/Animal.java.patch (90%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/Bee.java.patch (89%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/Cat.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/Dolphin.java.patch (89%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/Fox.java.patch (95%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/IronGolem.java.patch (83%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/MushroomCow.java.patch (75%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/Ocelot.java.patch (96%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/Parrot.java.patch (96%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/Pig.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/PolarBear.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/Rabbit.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/SnowGolem.java.patch (81%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/Squid.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/WaterAnimal.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/goat/Goat.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/animal/horse/Llama.java.patch (76%) rename purpur-server/minecraft-patches/{rejected/net/minecraft/world/entity/animal => sources/net/minecraft/world/entity/animal/wolf}/Wolf.java.patch (85%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java.patch (99%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch (85%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch (88%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/decoration/ArmorStand.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/item/ItemEntity.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/item/PrimedTnt.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/AbstractSkeleton.java.patch (95%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/Creeper.java.patch (93%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/Drowned.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/EnderMan.java.patch (80%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/Endermite.java.patch (81%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/Monster.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/Phantom.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/Ravager.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/Shulker.java.patch (96%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/Skeleton.java.patch (99%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/Strider.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/Vindicator.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/Zombie.java.patch (95%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/ZombieVillager.java.patch (98%) create mode 100644 purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombifiedPiglin.java.patch rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch (66%) create mode 100644 purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/CatSpawner.java.patch rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/npc/Villager.java.patch (95%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/npc/WanderingTrader.java.patch (82%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/npc/WanderingTraderSpawner.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/player/Player.java.patch (94%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/projectile/AbstractArrow.java.patch (86%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/projectile/Snowball.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/projectile/ThrownEnderpearl.java.patch (94%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/projectile/ThrownTrident.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/projectile/WitherSkull.java.patch (81%) create mode 100644 purpur-server/minecraft-patches/sources/net/minecraft/world/entity/raid/Raids.java.patch rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/vehicle/AbstractBoat.java.patch (96%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/vehicle/NewMinecartBehavior.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/entity/vehicle/OldMinecartBehavior.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/food/FoodData.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/food/FoodProperties.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/inventory/AbstractContainerMenu.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/inventory/AbstractFurnaceMenu.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/inventory/AnvilMenu.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/inventory/ArmorSlot.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/inventory/EnchantmentMenu.java.patch (99%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/inventory/GrindstoneMenu.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/inventory/ItemCombinerMenu.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/AxeItem.java.patch (95%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/BlockItem.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/BowItem.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/BucketItem.java.patch (85%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/CrossbowItem.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/DyeColor.java.patch (96%) create mode 100644 purpur-server/minecraft-patches/sources/net/minecraft/world/item/EggItem.java.patch rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/EndCrystalItem.java.patch (92%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/EnderpearlItem.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/HoeItem.java.patch (99%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/ItemStack.java.patch (76%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/Items.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/MapItem.java.patch (96%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/NameTagItem.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/ProjectileWeaponItem.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/ShovelItem.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/SnowballItem.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/SpawnEggItem.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/ThrowablePotionItem.java.patch (58%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/TridentItem.java.patch (66%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/consume_effects/ClearAllStatusEffectsConsumeEffect.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/crafting/Ingredient.java.patch (72%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/enchantment/ItemEnchantments.java.patch (81%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/item/trading/MerchantOffer.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/BaseSpawner.java.patch (96%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/EntityGetter.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/Level.java.patch (88%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/NaturalSpawner.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/ServerExplosion.java.patch (89%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/AnvilBlock.java.patch (99%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/AzaleaBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/BaseCoralPlantTypeBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/BedBlock.java.patch (94%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/BigDripleafBlock.java.patch (96%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/Block.java.patch (86%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/Blocks.java.patch (94%) create mode 100644 purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BubbleColumnBlock.java.patch rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/BushBlock.java.patch (84%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/CactusBlock.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/CakeBlock.java.patch (97%) create mode 100644 purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CampfireBlock.java.patch rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/CarvedPumpkinBlock.java.patch (84%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/CauldronBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/CaveVinesBlock.java.patch (86%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/ChangeOverTimeBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/ChestBlock.java.patch (96%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/ComposterBlock.java.patch (99%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/CoralBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/CropBlock.java.patch (95%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/DoorBlock.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/DragonEggBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/EnchantingTableBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/FarmBlock.java.patch (92%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/GrowingPlantHeadBlock.java.patch (83%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/HayBlock.java.patch (90%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/IceBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/KelpBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/LiquidBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/MagmaBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/NetherPortalBlock.java.patch (85%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/NetherWartBlock.java.patch (92%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/NoteBlock.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/ObserverBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/PointedDripstoneBlock.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/PoweredRailBlock.java.patch (96%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/RespawnAnchorBlock.java.patch (97%) create mode 100644 purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SculkShriekerBlock.java.patch rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/SlabBlock.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/SnowLayerBlock.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/SpawnerBlock.java.patch (99%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/SpongeBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/StonecutterBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/SugarCaneBlock.java.patch (95%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/TurtleEggBlock.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/TwistingVinesBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/WeepingVinesBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/WitherSkullBlock.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch (91%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java.patch (97%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/entity/BlockEntity.java.patch (93%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/entity/ConduitBlockEntity.java.patch (98%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/entity/EnchantingTableBlockEntity.java.patch (69%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch (99%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/block/piston/PistonStructureResolver.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch (77%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/chunk/storage/RegionFileStorage.java.patch (98%) create mode 100644 purpur-server/minecraft-patches/sources/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/material/FlowingFluid.java.patch (96%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/material/LavaFluid.java.patch (96%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/material/WaterFluid.java.patch (88%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/portal/PortalShape.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java.patch (96%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java.patch (100%) rename purpur-server/minecraft-patches/{rejected => sources}/net/minecraft/world/phys/AABB.java.patch (67%) diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/stats/ServerRecipeBook.java.patch b/purpur-server/minecraft-patches/rejected/net/minecraft/stats/ServerRecipeBook.java.patch deleted file mode 100644 index 384d2c33b..000000000 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/stats/ServerRecipeBook.java.patch +++ /dev/null @@ -1,10 +0,0 @@ ---- a/net/minecraft/stats/ServerRecipeBook.java -+++ b/net/minecraft/stats/ServerRecipeBook.java -@@ -138,6 +_,7 @@ - try { - ResourceKey> resourceKey = ResourceKey.create(Registries.RECIPE, ResourceLocation.parse(string)); - if (!isRecognized.test(resourceKey)) { -+ if (!org.purpurmc.purpur.PurpurConfig.loggerSuppressUnrecognizedRecipeErrors) // Purpur - Logger settings (suppressing pointless logs) - LOGGER.error("Tried to load unrecognized recipe: {} removed now.", resourceKey); - } else { - output.accept(resourceKey); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/behavior/AcquirePoi.java.patch b/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/behavior/AcquirePoi.java.patch deleted file mode 100644 index c457ae742..000000000 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/behavior/AcquirePoi.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/world/entity/ai/behavior/AcquirePoi.java -+++ b/net/minecraft/world/entity/ai/behavior/AcquirePoi.java -@@ -86,7 +_,7 @@ - }; - // Paper start - optimise POI access - final java.util.List, BlockPos>> poiposes = new java.util.ArrayList<>(); -- io.papermc.paper.util.PoiAccess.findNearestPoiPositions(poiManager, acquirablePois, predicate1, mob.blockPosition(), 48, 48*48, PoiManager.Occupancy.HAS_SPACE, false, 5, poiposes); -+ io.papermc.paper.util.PoiAccess.findNearestPoiPositions(poiManager, acquirablePois, predicate1, mob.blockPosition(), level.purpurConfig.villagerAcquirePoiSearchRadius, level.purpurConfig.villagerAcquirePoiSearchRadius*level.purpurConfig.villagerAcquirePoiSearchRadius, PoiManager.Occupancy.HAS_SPACE, false, 5, poiposes); // Purpur - Configurable villager search radius - final Set, BlockPos>> set = new java.util.HashSet<>(poiposes.size()); - for (final Pair, BlockPos> poiPose : poiposes) { - if (predicate.test(level, poiPose.getSecond())) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java.patch b/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java.patch deleted file mode 100644 index 7e2366a32..000000000 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java -+++ b/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java -@@ -56,7 +_,7 @@ - // Paper start - optimise POI access - java.util.List, BlockPos>> poiposes = new java.util.ArrayList<>(); - // don't ask me why it's unbounded. ask mojang. -- io.papermc.paper.util.PoiAccess.findAnyPoiPositions(poiManager, type -> type.is(PoiTypes.HOME), predicate, entity.blockPosition(), 48, PoiManager.Occupancy.ANY, false, Integer.MAX_VALUE, poiposes); -+ io.papermc.paper.util.PoiAccess.findAnyPoiPositions(poiManager, type -> type.is(PoiTypes.HOME), predicate, entity.blockPosition(), level.purpurConfig.villagerNearestBedSensorSearchRadius, PoiManager.Occupancy.ANY, false, Integer.MAX_VALUE, poiposes); // Purpur - Configurable villager search radius - Path path = AcquirePoi.findPathToPois(entity, new java.util.HashSet<>(poiposes)); - // Paper end - optimise POI access - if (path != null && path.canReach()) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/ZombifiedPiglin.java.patch b/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/ZombifiedPiglin.java.patch deleted file mode 100644 index e1a87265f..000000000 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/ZombifiedPiglin.java.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- a/net/minecraft/world/entity/monster/ZombifiedPiglin.java -+++ b/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -112,7 +_,7 @@ - this.maybeAlertOthers(); - } - -- if (this.isAngry()) { -+ if (this.isAngry() && this.level().purpurConfig.zombifiedPiglinCountAsPlayerKillWhenAngry) { // Purpur - Toggle for Zombified Piglin death always counting as player kill when angry - this.lastHurtByPlayerTime = this.tickCount; - } - -@@ -163,7 +_,7 @@ - this.ticksUntilNextAlert = ALERT_INTERVAL.sample(this.random); - } - -- if (livingEntity instanceof Player) { -+ if (livingEntity instanceof Player && this.level().purpurConfig.zombifiedPiglinCountAsPlayerKillWhenAngry) { // Purpur - Toggle for Zombified Piglin death always counting as player kill when angry - this.setLastHurtByPlayer((Player)livingEntity); - } - diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/npc/CatSpawner.java.patch b/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/npc/CatSpawner.java.patch deleted file mode 100644 index d5c870866..000000000 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/npc/CatSpawner.java.patch +++ /dev/null @@ -1,39 +0,0 @@ ---- a/net/minecraft/world/entity/npc/CatSpawner.java -+++ b/net/minecraft/world/entity/npc/CatSpawner.java -@@ -27,7 +_,7 @@ - if (this.nextTick > 0) { - return 0; - } else { -- this.nextTick = 1200; -+ this.nextTick = level.purpurConfig.catSpawnDelay; // Purpur - Cat spawning options - Player randomPlayer = level.getRandomPlayer(); - if (randomPlayer == null) { - return 0; -@@ -61,8 +_,12 @@ - - private int spawnInVillage(ServerLevel serverLevel, BlockPos pos) { - int i = 48; -- if (serverLevel.getPoiManager().getCountInRange(holder -> holder.is(PoiTypes.HOME), pos, 48, PoiManager.Occupancy.IS_OCCUPIED) > 4L) { -- List entitiesOfClass = serverLevel.getEntitiesOfClass(Cat.class, new AABB(pos).inflate(48.0, 8.0, 48.0)); -+ // Purpur start - Cat spawning options -+ int range = serverLevel.purpurConfig.catSpawnVillageScanRange; -+ if (range <= 0) return 0; -+ if (serverLevel.getPoiManager().getCountInRange(holder -> holder.is(PoiTypes.HOME), pos, range, PoiManager.Occupancy.IS_OCCUPIED) > 4L) { -+ List entitiesOfClass = serverLevel.getEntitiesOfClass(Cat.class, new AABB(pos).inflate(range, 8.0, range)); -+ // Purpur end - Cat spawning options - if (entitiesOfClass.size() < 5) { - return this.spawnCat(pos, serverLevel); - } -@@ -73,7 +_,11 @@ - - private int spawnInHut(ServerLevel serverLevel, BlockPos pos) { - int i = 16; -- List entitiesOfClass = serverLevel.getEntitiesOfClass(Cat.class, new AABB(pos).inflate(16.0, 8.0, 16.0)); -+ // Purpur start - Cat spawning options -+ int range = serverLevel.purpurConfig.catSpawnSwampHutScanRange; -+ if (range <= 0) return 0; -+ List entitiesOfClass = serverLevel.getEntitiesOfClass(Cat.class, new AABB(pos).inflate(range, 8.0, range)); -+ // Purpur end - Cat spawning options - return entitiesOfClass.size() < 1 ? this.spawnCat(pos, serverLevel) : 0; - } - diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/raid/Raids.java.patch b/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/raid/Raids.java.patch deleted file mode 100644 index de4dbac7a..000000000 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/raid/Raids.java.patch +++ /dev/null @@ -1,42 +0,0 @@ ---- a/net/minecraft/world/entity/raid/Raids.java -+++ b/net/minecraft/world/entity/raid/Raids.java -@@ -25,6 +_,7 @@ - - public class Raids extends SavedData { - private static final String RAID_FILE_ID = "raids"; -+ public final Map playerCooldowns = Maps.newHashMap(); // Purpur - Raid cooldown setting - public final Map raidMap = Maps.newHashMap(); - private final ServerLevel level; - private int nextAvailableID; -@@ -46,6 +_,17 @@ - - public void tick() { - this.tick++; -+ // Purpur start - Raid cooldown setting -+ 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); -+ } else { -+ playerCooldowns.put(uuid, i - 1); -+ } -+ }); -+ } -+ // Purpur end - Raid cooldown setting - Iterator iterator = this.raidMap.values().iterator(); - - while (iterator.hasNext()) { -@@ -119,11 +_,13 @@ - */ - - if (!raid.isStarted() || (raid.isInProgress() && raid.getRaidOmenLevel() < raid.getMaxRaidOmenLevel())) { // CraftBukkit - fixed a bug with raid: players could add up Bad Omen level even when the raid had finished -+ if (level.purpurConfig.raidCooldownSeconds != 0 && playerCooldowns.containsKey(player.getUUID())) return null; // Purpur - Raid cooldown setting - // CraftBukkit start - if (!org.bukkit.craftbukkit.event.CraftEventFactory.callRaidTriggerEvent(raid, player)) { - player.removeEffect(net.minecraft.world.effect.MobEffects.RAID_OMEN); - return null; - } -+ if (level.purpurConfig.raidCooldownSeconds != 0) playerCooldowns.put(player.getUUID(), level.purpurConfig.raidCooldownSeconds); // Purpur - Raid cooldown setting - - if (!raid.isStarted() && !this.raidMap.containsKey(raid.getId())) { - this.raidMap.put(raid.getId(), raid); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/EggItem.java.patch b/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/EggItem.java.patch deleted file mode 100644 index fe21990b3..000000000 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/EggItem.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/world/item/EggItem.java -+++ b/net/minecraft/world/item/EggItem.java -@@ -26,7 +_,7 @@ - if (level instanceof ServerLevel serverLevel) { - // CraftBukkit start - // Paper start - PlayerLaunchProjectileEvent -- final Projectile.Delayed thrownEgg = Projectile.spawnProjectileFromRotationDelayed(ThrownEgg::new, serverLevel, itemInHand, player, 0.0F, EggItem.PROJECTILE_SHOOT_POWER, 1.0F); -+ final Projectile.Delayed thrownEgg = Projectile.spawnProjectileFromRotationDelayed(ThrownEgg::new, serverLevel, itemInHand, player, 0.0F, EggItem.PROJECTILE_SHOOT_POWER, (float) serverLevel.purpurConfig.eggProjectileOffset); // Purpur - Projectile offset config - com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemInHand), (org.bukkit.entity.Projectile) thrownEgg.projectile().getBukkitEntity()); - if (event.callEvent() && thrownEgg.attemptSpawn()) { - if (event.shouldConsume()) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BubbleColumnBlock.java.patch b/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BubbleColumnBlock.java.patch deleted file mode 100644 index 5b62f1261..000000000 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BubbleColumnBlock.java.patch +++ /dev/null @@ -1,15 +0,0 @@ ---- a/net/minecraft/world/level/block/BubbleColumnBlock.java -+++ b/net/minecraft/world/level/block/BubbleColumnBlock.java -@@ -124,10 +_,10 @@ - if (blockState.is(Blocks.BUBBLE_COLUMN)) { - return blockState; - } else if (blockState.is(Blocks.SOUL_SAND)) { -- return Blocks.BUBBLE_COLUMN.defaultBlockState().setValue(DRAG_DOWN, Boolean.valueOf(false)); -+ return Blocks.BUBBLE_COLUMN.defaultBlockState().setValue(DRAG_DOWN, Boolean.valueOf(org.purpurmc.purpur.PurpurConfig.soulSandBlockReverseBubbleColumnFlow)); // Purpur - Config to reverse bubble column flow - } else { - return blockState.is(Blocks.MAGMA_BLOCK) -- ? Blocks.BUBBLE_COLUMN.defaultBlockState().setValue(DRAG_DOWN, Boolean.valueOf(true)) -+ ? Blocks.BUBBLE_COLUMN.defaultBlockState().setValue(DRAG_DOWN, Boolean.valueOf(!org.purpurmc.purpur.PurpurConfig.magmaBlockReverseBubbleColumnFlow)) // Purpur - Config to reverse bubble column flow - : Blocks.WATER.defaultBlockState(); - } - } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CampfireBlock.java.patch b/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CampfireBlock.java.patch deleted file mode 100644 index d15f9f5a9..000000000 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CampfireBlock.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/world/level/block/CampfireBlock.java -+++ b/net/minecraft/world/level/block/CampfireBlock.java -@@ -141,7 +_,7 @@ - return this.defaultBlockState() - .setValue(WATERLOGGED, Boolean.valueOf(flag)) - .setValue(SIGNAL_FIRE, Boolean.valueOf(this.isSmokeSource(level.getBlockState(clickedPos.below())))) -- .setValue(LIT, Boolean.valueOf(!flag)) -+ .setValue(LIT, Boolean.valueOf(level.getMinecraftWorld().purpurConfig.campFireLitWhenPlaced && !flag)) // Purpur - Campfire option for lit when placed - .setValue(FACING, context.getHorizontalDirection()); - } - diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SculkShriekerBlock.java.patch b/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SculkShriekerBlock.java.patch deleted file mode 100644 index db79f0f16..000000000 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SculkShriekerBlock.java.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- a/net/minecraft/world/level/block/SculkShriekerBlock.java -+++ b/net/minecraft/world/level/block/SculkShriekerBlock.java -@@ -134,7 +_,7 @@ - @Override - public BlockState getStateForPlacement(BlockPlaceContext context) { - return this.defaultBlockState() -- .setValue(WATERLOGGED, Boolean.valueOf(context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER)); -+ .setValue(WATERLOGGED, Boolean.valueOf(context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER)).setValue(SculkShriekerBlock.CAN_SUMMON, context.getLevel().purpurConfig.sculkShriekerCanSummonDefault); // Purpur - Config for sculk shrieker can_summon state - } - - @Override diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch b/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch deleted file mode 100644 index 8c587ee00..000000000 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch +++ /dev/null @@ -1,32 +0,0 @@ ---- a/net/minecraft/world/level/levelgen/PhantomSpawner.java -+++ b/net/minecraft/world/level/levelgen/PhantomSpawner.java -@@ -43,7 +_,7 @@ - int spawnAttemptMaxSeconds = level.paperConfig().entities.behavior.phantomsSpawnAttemptMaxSeconds; - this.nextTick += (spawnAttemptMinSeconds + randomSource.nextInt(spawnAttemptMaxSeconds - spawnAttemptMinSeconds + 1)) * 20; - // Paper end - Ability to control player's insomnia and phantoms -- if (level.getSkyDarken() < 5 && level.dimensionType().hasSkyLight()) { -+ if (level.getSkyDarken() < level.purpurConfig.phantomSpawnMinSkyDarkness && level.dimensionType().hasSkyLight()) { // Purpur - Add phantom spawning options - return 0; - } else { - int i = 0; -@@ -51,9 +_,9 @@ - for (ServerPlayer serverPlayer : level.players()) { - if (!serverPlayer.isSpectator() && (!level.paperConfig().entities.behavior.phantomsDoNotSpawnOnCreativePlayers || !serverPlayer.isCreative())) { // Paper - Add phantom creative and insomniac controls - BlockPos blockPos = serverPlayer.blockPosition(); -- if (!level.dimensionType().hasSkyLight() || blockPos.getY() >= level.getSeaLevel() && level.canSeeSky(blockPos)) { -+ if (!level.dimensionType().hasSkyLight() || (!level.purpurConfig.phantomSpawnOnlyAboveSeaLevel || blockPos.getY() >= level.getSeaLevel()) && (!level.purpurConfig.phantomSpawnOnlyWithVisibleSky || level.canSeeSky(blockPos))) { // Purpur - Add phantom spawning options - DifficultyInstance currentDifficultyAt = level.getCurrentDifficultyAt(blockPos); -- if (currentDifficultyAt.isHarderThan(randomSource.nextFloat() * 3.0F)) { -+ if (currentDifficultyAt.isHarderThan(randomSource.nextFloat() * (float) level.purpurConfig.phantomSpawnLocalDifficultyChance)) { // Purpur - Add phantom spawning options - ServerStatsCounter stats = serverPlayer.getStats(); - int i1 = Mth.clamp(stats.getValue(Stats.CUSTOM.get(Stats.TIME_SINCE_REST)), 1, Integer.MAX_VALUE); - int i2 = 24000; -@@ -65,7 +_,7 @@ - FluidState fluidState = level.getFluidState(blockPos1); - if (NaturalSpawner.isValidEmptySpawnBlock(level, blockPos1, blockState, fluidState, EntityType.PHANTOM)) { - SpawnGroupData spawnGroupData = null; -- int i3 = 1 + randomSource.nextInt(currentDifficultyAt.getDifficulty().getId() + 1); -+ int i3 = level.purpurConfig.phantomSpawnMinPerAttempt + level.random.nextInt((level.purpurConfig.phantomSpawnMaxPerAttempt < 0 ? currentDifficultyAt.getDifficulty().getId() : level.purpurConfig.phantomSpawnMaxPerAttempt - level.purpurConfig.phantomSpawnMinPerAttempt) + 1); // Purpur - Add phantom spawning options - - for (int i4 = 0; i4 < i3; i4++) { - // Paper start - PhantomPreSpawnEvent diff --git a/purpur-server/minecraft-patches/rejected/io/papermc/paper/entity/activation/ActivationRange.java.patch b/purpur-server/minecraft-patches/sources/io/papermc/paper/entity/activation/ActivationRange.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/io/papermc/paper/entity/activation/ActivationRange.java.patch rename to purpur-server/minecraft-patches/sources/io/papermc/paper/entity/activation/ActivationRange.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/CrashReport.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/CrashReport.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/CrashReport.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/CrashReport.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/commands/CommandSourceStack.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/commands/CommandSourceStack.java.patch similarity index 99% rename from purpur-server/minecraft-patches/rejected/net/minecraft/commands/CommandSourceStack.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/commands/CommandSourceStack.java.patch index 1a48edcf9..cfbdec120 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/commands/CommandSourceStack.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/commands/CommandSourceStack.java.patch @@ -20,7 +20,7 @@ public Vec3 getPosition() { return this.worldPosition; } -@@ -540,6 +_,30 @@ +@@ -539,6 +_,30 @@ } } } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/commands/Commands.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/commands/Commands.java.patch similarity index 90% rename from purpur-server/minecraft-patches/rejected/net/minecraft/commands/Commands.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/commands/Commands.java.patch index 911afeeed..bcd3caac9 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/commands/Commands.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/commands/Commands.java.patch @@ -1,13 +1,11 @@ --- a/net/minecraft/commands/Commands.java +++ b/net/minecraft/commands/Commands.java -@@ -221,8 +_,8 @@ +@@ -222,7 +_,7 @@ JfrCommand.register(this.dispatcher); } - if (SharedConstants.IS_RUNNING_IN_IDE) { -- TestCommand.register(this.dispatcher); + if (org.purpurmc.purpur.PurpurConfig.registerMinecraftDebugCommands || SharedConstants.IS_RUNNING_IN_IDE) { // Purpur - register minecraft debug commands -+ if (!org.purpurmc.purpur.PurpurConfig.registerMinecraftDebugCommands) TestCommand.register(this.dispatcher); // Purpur - register minecraft debug commands RaidCommand.register(this.dispatcher, context); DebugPathCommand.register(this.dispatcher); DebugMobSpawningCommand.register(this.dispatcher); @@ -26,7 +24,7 @@ } if (selection.includeIntegrated) { -@@ -503,6 +_,7 @@ +@@ -502,6 +_,7 @@ private void runSync(ServerPlayer player, java.util.Collection bukkit, RootCommandNode rootCommandNode) { // Paper end - Perf: Async command map building new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootCommandNode, true).callEvent(); // Paper - Brigadier API @@ -34,7 +32,7 @@ org.bukkit.event.player.PlayerCommandSendEvent event = new org.bukkit.event.player.PlayerCommandSendEvent(player.getBukkitEntity(), new java.util.LinkedHashSet<>(bukkit)); event.getPlayer().getServer().getPluginManager().callEvent(event); -@@ -513,6 +_,7 @@ +@@ -512,6 +_,7 @@ } } // CraftBukkit end diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/commands/arguments/selector/EntitySelector.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/commands/arguments/selector/EntitySelector.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/commands/arguments/selector/EntitySelector.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/commands/arguments/selector/EntitySelector.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/core/BlockPos.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/core/BlockPos.java.patch similarity index 64% rename from purpur-server/minecraft-patches/rejected/net/minecraft/core/BlockPos.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/core/BlockPos.java.patch index 8b669b1d6..50faf5263 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/core/BlockPos.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/core/BlockPos.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/core/BlockPos.java +++ b/net/minecraft/core/BlockPos.java -@@ -63,6 +_,12 @@ - public static final int MAX_HORIZONTAL_COORDINATE = 33554431; - // Paper end - Optimize Bit Operations by inlining +@@ -61,6 +_,12 @@ + private static final int X_OFFSET = PACKED_Y_LENGTH + PACKED_HORIZONTAL_LENGTH; + public static final int MAX_HORIZONTAL_COORDINATE = (1 << PACKED_HORIZONTAL_LENGTH) / 2 - 1; + // Purpur start - Ridables + public BlockPos(net.minecraft.world.entity.Entity entity) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch index 067298651..15ad30cf2 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/core/dispenser/DispenseItemBehavior.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/core/dispenser/DispenseItemBehavior.java +++ b/net/minecraft/core/dispenser/DispenseItemBehavior.java -@@ -892,5 +_,22 @@ +@@ -735,5 +_,22 @@ DispenserBlock.registerBehavior(Items.TNT_MINECART, new MinecartDispenseItemBehavior(EntityType.TNT_MINECART)); DispenserBlock.registerBehavior(Items.HOPPER_MINECART, new MinecartDispenseItemBehavior(EntityType.HOPPER_MINECART)); DispenserBlock.registerBehavior(Items.COMMAND_BLOCK_MINECART, new MinecartDispenseItemBehavior(EntityType.COMMAND_BLOCK_MINECART)); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java.patch index c0e69aa51..9a2c1e083 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java +++ b/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java -@@ -31,7 +_,7 @@ +@@ -32,7 +_,7 @@ return false; } else { LivingEntity livingEntity = entitiesOfClass.getFirst(); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/gametest/framework/GameTestHelper.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/gametest/framework/GameTestHelper.java.patch similarity index 62% rename from purpur-server/minecraft-patches/rejected/net/minecraft/gametest/framework/GameTestHelper.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/gametest/framework/GameTestHelper.java.patch index 2076037b3..870429942 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/gametest/framework/GameTestHelper.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/gametest/framework/GameTestHelper.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/gametest/framework/GameTestHelper.java +++ b/net/minecraft/gametest/framework/GameTestHelper.java -@@ -279,6 +_,8 @@ - return gameType.isCreative(); +@@ -292,6 +_,8 @@ + return gameType; } + public void setAfk(final boolean afk) {} // Purpur - AFK API + @Override - public boolean isLocalPlayer() { - return true; + public boolean isClientAuthoritative() { + return false; diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/network/Connection.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/network/Connection.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/network/Connection.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/network/Connection.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/network/chat/SignedMessageChain.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/network/chat/SignedMessageChain.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/network/chat/SignedMessageChain.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/network/chat/SignedMessageChain.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/Main.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/Main.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/Main.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/Main.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/MinecraftServer.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch similarity index 94% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/MinecraftServer.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch index a3769afc7..d8bcaa293 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/server/MinecraftServer.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/MinecraftServer.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -284,6 +_,7 @@ +@@ -283,6 +_,7 @@ public joptsimple.OptionSet options; public org.bukkit.command.ConsoleCommandSender console; public static int currentTick; // Paper - improve tick loop @@ -8,7 +8,7 @@ public java.util.Queue processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); public int autosavePeriod; // Paper - don't store the vanilla dispatcher -@@ -294,7 +_,7 @@ +@@ -293,7 +_,7 @@ public static final int TICK_TIME = 1000000000 / MinecraftServer.TPS; private static final int SAMPLE_INTERVAL = 20; // Paper - improve server tick loop @Deprecated(forRemoval = true) // Paper @@ -17,17 +17,16 @@ // Spigot end public volatile boolean hasFullyShutdown; // Paper - Improved watchdog support public volatile boolean abnormalExit; // Paper - Improved watchdog support -@@ -302,7 +_,9 @@ - public final io.papermc.paper.configuration.PaperConfigurations paperConfigurations; // Paper - add paper configuration files +@@ -302,6 +_,8 @@ public boolean isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked private final Set pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping -+ public boolean lagging = false; // Purpur - Lagging threshold public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation ++ public boolean lagging = false; // Purpur - Lagging threshold + protected boolean upnp = false; // Purpur - UPnP Port Forwarding public static S spin(Function threadFunction) { - ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.init(); // Paper - rewrite data converter system -@@ -1001,6 +_,15 @@ + AtomicReference atomicReference = new AtomicReference<>(); +@@ -917,6 +_,15 @@ LOGGER.info("Stopping server"); Commands.COMMAND_SENDING_POOL.shutdownNow(); // Paper - Perf: Async command map building; Shutdown and don't bother finishing @@ -43,7 +42,7 @@ // CraftBukkit start if (this.server != null) { this.server.spark.disable(); // Paper - spark -@@ -1093,6 +_,8 @@ +@@ -1011,6 +_,8 @@ this.safeShutdown(waitForServer, false); } public void safeShutdown(boolean waitForServer, boolean isRestarting) { @@ -52,7 +51,7 @@ this.isRestarting = isRestarting; this.hasLoggedStop = true; // Paper - Debugging if (isDebugging()) io.papermc.paper.util.TraceUtil.dumpTraceForThread("Server stopped"); // Paper - Debugging -@@ -1112,6 +_,7 @@ +@@ -1030,6 +_,7 @@ private static final long MAX_CATCHUP_BUFFER = TICK_TIME * TPS * 60L; private long lastTick = 0; private long catchupTime = 0; @@ -60,7 +59,7 @@ public final RollingAverage tps1 = new RollingAverage(60); public final RollingAverage tps5 = new RollingAverage(60 * 5); public final RollingAverage tps15 = new RollingAverage(60 * 15); -@@ -1197,6 +_,16 @@ +@@ -1115,6 +_,16 @@ } // Paper end - Add onboarding message for initial server start @@ -77,7 +76,7 @@ while (this.running) { long l; if (!this.isPaused() && this.tickRateManager.isSprinting() && this.tickRateManager.checkShouldSprintThisTick()) { -@@ -1221,14 +_,19 @@ +@@ -1139,14 +_,19 @@ if (++MinecraftServer.currentTick % MinecraftServer.SAMPLE_INTERVAL == 0) { final long diff = currentTime - tickSection; final java.math.BigDecimal currentTps = TPS_BASE.divide(new java.math.BigDecimal(diff), 30, java.math.RoundingMode.HALF_UP); @@ -100,7 +99,7 @@ tickSection = currentTime; } // Paper end - further improve server tick loop -@@ -1260,6 +_,12 @@ +@@ -1171,6 +_,12 @@ profilerFiller.popPush("nextTickWait"); this.mayHaveDelayedTasks = true; this.delayedTasksMaxNextTickTimeNanos = Math.max(Util.getNanos() + l, this.nextTickTimeNanos); @@ -113,7 +112,7 @@ this.startMeasuringTaskExecutionTime(); this.waitUntilNextTick(); this.finishMeasuringTaskExecutionTime(); -@@ -1690,7 +_,7 @@ +@@ -1580,7 +_,7 @@ long worldTime = level.getGameTime(); final ClientboundSetTimePacket worldPacket = new ClientboundSetTimePacket(worldTime, dayTime, doDaylight); for (Player entityhuman : level.players()) { @@ -122,7 +121,7 @@ continue; } ServerPlayer entityplayer = (ServerPlayer) entityhuman; -@@ -1855,7 +_,7 @@ +@@ -1744,7 +_,7 @@ @DontObfuscate public String getServerModName() { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/PlayerAdvancements.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/PlayerAdvancements.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/PlayerAdvancements.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/PlayerAdvancements.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/commands/EnchantCommand.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/commands/EnchantCommand.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/commands/EnchantCommand.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/commands/EnchantCommand.java.patch index 74bd1f710..6379c1d94 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/server/commands/EnchantCommand.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/commands/EnchantCommand.java.patch @@ -9,7 +9,7 @@ throw ERROR_LEVEL_TOO_HIGH.create(level, enchantment1.getMaxLevel()); } else { int i = 0; -@@ -81,7 +_,7 @@ +@@ -80,7 +_,7 @@ ItemStack mainHandItem = livingEntity.getMainHandItem(); if (!mainHandItem.isEmpty()) { if (enchantment1.canEnchant(mainHandItem) diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/commands/GameModeCommand.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/commands/GameModeCommand.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/commands/GameModeCommand.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/commands/GameModeCommand.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/commands/GiveCommand.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/commands/GiveCommand.java.patch similarity index 87% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/commands/GiveCommand.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/commands/GiveCommand.java.patch index 5cedf347f..557923162 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/server/commands/GiveCommand.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/commands/GiveCommand.java.patch @@ -6,5 +6,5 @@ boolean flag = serverPlayer.getInventory().add(itemStack1); + if (org.purpurmc.purpur.PurpurConfig.disableGiveCommandDrops) continue; // Purpur - add config option for toggling give command dropping if (flag && itemStack1.isEmpty()) { - ItemEntity itemEntity = serverPlayer.drop(itemStack, false, false, false); // CraftBukkit - SPIGOT-2942: Add boolean to call event + ItemEntity itemEntity = serverPlayer.drop(itemStack, false); if (itemEntity != null) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/dedicated/DedicatedServer.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch similarity index 90% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/dedicated/DedicatedServer.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch index af8b6989d..696d6b2f1 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/server/dedicated/DedicatedServer.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/dedicated/DedicatedServer.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/server/dedicated/DedicatedServer.java +++ b/net/minecraft/server/dedicated/DedicatedServer.java -@@ -106,6 +_,7 @@ - // CraftBukkit start - if (!org.bukkit.craftbukkit.Main.useConsole) return; +@@ -105,6 +_,7 @@ + public void run() { + if (!org.bukkit.craftbukkit.Main.useConsole) return; // CraftBukkit // Paper start - Use TerminalConsoleAppender + if (DedicatedServer.this.gui == null || System.console() != null) // Purpur - GUI Improvements - has no GUI or has console (did not double-click) new com.destroystokyo.paper.console.PaperConsole(DedicatedServer.this).start(); /* - jline.console.ConsoleReader bufferedreader = DedicatedServer.this.reader; -@@ -224,6 +_,15 @@ + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in, StandardCharsets.UTF_8)); +@@ -183,6 +_,15 @@ io.papermc.paper.command.PaperCommands.registerCommands(this); // Paper - setup /paper command this.server.spark.registerCommandBeforePlugins(this.server); // Paper - spark com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics @@ -24,7 +24,7 @@ com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now this.setPvpAllowed(properties.pvp); -@@ -271,6 +_,30 @@ +@@ -230,6 +_,30 @@ if (true) throw new IllegalStateException("Failed to bind to port", var10); // Paper - Propagate failed to bind to port error return false; } @@ -54,8 +54,8 @@ + // Purpur end - UPnP Port Forwarding // CraftBukkit start - // this.setPlayerList(new DedicatedPlayerList(this, this.registries(), this.playerDataStorage)); // Spigot - moved up -@@ -350,6 +_,8 @@ + this.server.loadPlugins(); +@@ -308,6 +_,8 @@ LOGGER.info("JMX monitoring enabled"); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/dedicated/DedicatedServerProperties.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/dedicated/DedicatedServerProperties.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/dedicated/DedicatedServerProperties.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/dedicated/DedicatedServerProperties.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/gui/MinecraftServerGui.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/gui/MinecraftServerGui.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/gui/MinecraftServerGui.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/gui/MinecraftServerGui.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/gui/StatsComponent.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/gui/StatsComponent.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/gui/StatsComponent.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/gui/StatsComponent.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/level/ServerLevel.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch similarity index 95% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/level/ServerLevel.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch index cced43f51..ce52c7d37 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/server/level/ServerLevel.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerLevel.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -207,6 +_,8 @@ +@@ -203,6 +_,8 @@ private final StructureManager structureManager; private final StructureCheck structureCheck; private final boolean tickTime; @@ -9,7 +9,7 @@ private final RandomSequences randomSequences; // CraftBukkit start -@@ -595,7 +_,24 @@ +@@ -350,7 +_,24 @@ // CraftBukkit end this.tickTime = tickTime; this.server = server; @@ -35,15 +35,15 @@ this.serverLevelData = serverLevelData; ChunkGenerator chunkGenerator = levelStem.generator(); // CraftBukkit start -@@ -681,6 +_,7 @@ - this.chunkDataController = new ca.spottedleaf.moonrise.patches.chunk_system.io.datacontroller.ChunkDataController((ServerLevel)(Object)this, this.chunkTaskScheduler); - // Paper end - rewrite chunk system +@@ -431,6 +_,7 @@ + this.gameEventDispatcher = new GameEventDispatcher(this); + this.randomSequences = Objects.requireNonNullElseGet(randomSequences, () -> this.getDataStorage().computeIfAbsent(RandomSequences.TYPE)); this.getCraftServer().addWorld(this.getWorld()); // CraftBukkit + this.preciseTime = this.serverLevelData.getDayTime(); // Purpur - Configurable daylight cycle } // Paper start -@@ -727,7 +_,7 @@ +@@ -477,7 +_,7 @@ } int _int = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); @@ -52,7 +52,7 @@ // Paper start - create time skip event - move up calculations final long newDayTime = this.levelData.getDayTime() + 24000L; org.bukkit.event.world.TimeSkipEvent event = new org.bukkit.event.world.TimeSkipEvent( -@@ -846,6 +_,13 @@ +@@ -594,6 +_,13 @@ this.serverLevelData.getScheduledEvents().tick(this.server, l); Profiler.get().pop(); if (this.serverLevelData.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) { @@ -66,7 +66,7 @@ this.setDayTime(this.levelData.getDayTime() + 1L); } } -@@ -853,7 +_,21 @@ +@@ -601,7 +_,21 @@ public void setDayTime(long time) { this.serverLevelData.setDayTime(time); @@ -89,7 +89,7 @@ public void tickCustomSpawners(boolean spawnEnemies, boolean spawnFriendlies) { for (CustomSpawner customSpawner : this.customSpawners) { -@@ -934,9 +_,17 @@ +@@ -678,9 +_,17 @@ && this.random.nextDouble() < currentDifficultyAt.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01) // Paper - Configurable spawn chances for skeleton horses && !this.getBlockState(blockPos.below()).is(Blocks.LIGHTNING_ROD); if (flag) { @@ -109,7 +109,7 @@ skeletonHorse.setAge(0); skeletonHorse.setPos(blockPos.getX(), blockPos.getY(), blockPos.getZ()); this.addFreshEntity(skeletonHorse, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit -@@ -1009,7 +_,7 @@ +@@ -738,7 +_,7 @@ pointOfInterestType -> pointOfInterestType.is(PoiTypes.LIGHTNING_ROD), blockPos -> blockPos.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, blockPos.getX(), blockPos.getZ()) - 1, pos, @@ -118,7 +118,7 @@ PoiManager.Occupancy.ANY ); return optional.map(blockPos -> blockPos.above(1)); -@@ -1057,8 +_,26 @@ +@@ -787,8 +_,26 @@ int _int = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); Component component; if (this.sleepStatus.areEnoughSleeping(_int)) { @@ -145,7 +145,7 @@ component = Component.translatable("sleep.players_sleeping", this.sleepStatus.amountSleeping(), this.sleepStatus.sleepersNeeded(_int)); } -@@ -1191,6 +_,7 @@ +@@ -921,6 +_,7 @@ @VisibleForTesting public void resetWeatherCycle() { // CraftBukkit start @@ -153,7 +153,7 @@ this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // If we stop due to everyone sleeping we should reset the weather duration to some other random value. // Not that everyone ever manages to get the whole server to sleep at the same time.... -@@ -1198,6 +_,7 @@ +@@ -928,6 +_,7 @@ this.serverLevelData.setRainTime(0); } // CraftBukkit end @@ -161,7 +161,7 @@ this.serverLevelData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // CraftBukkit start // If we stop due to everyone sleeping we should reset the weather duration to some other random value. -@@ -2679,7 +_,7 @@ +@@ -2331,7 +_,7 @@ // Spigot start if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message // Paper start - Fix merchant inventory not closing on entity removal diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/level/ServerPlayer.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch similarity index 87% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/level/ServerPlayer.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch index fdfe657ec..43e16e495 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/server/level/ServerPlayer.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayer.java.patch @@ -1,38 +1,38 @@ --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java -@@ -400,6 +_,10 @@ - public com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent +@@ -422,6 +_,10 @@ + public @Nullable com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - PlayerNaturallySpawnCreaturesEvent public @Nullable String clientBrandName = null; // Paper - Brand support - public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event + public @Nullable org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event + public boolean purpurClient = false; // Purpur - Purpur client support + private boolean tpsBar = false; // Purpur - Implement TPSBar + private boolean compassBar = false; // Purpur - Add compass command + private boolean ramBar = false; // Purpur - Implement rambar commands - // Paper start - rewrite chunk system - private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; -@@ -568,6 +_,10 @@ - if (tag != null) { - BlockPos.CODEC.parse(NbtOps.INSTANCE, tag).resultOrPartial(LOGGER::error).ifPresent(pos -> this.raidOmenPosition = pos); - } + public ServerPlayer(MinecraftServer server, ServerLevel level, GameProfile gameProfile, ClientInformation clientInformation) { + super(level, level.getSharedSpawnPos(), level.getSharedSpawnAngle(), gameProfile); +@@ -525,6 +_,10 @@ + this.respawnConfig = compound.read("respawn", ServerPlayer.RespawnConfig.CODEC).orElse(null); + this.spawnExtraParticlesOnFall = compound.getBooleanOr("spawn_extra_particles_on_fall", false); + this.raidOmenPosition = compound.read("raid_omen_position", BlockPos.CODEC).orElse(null); + -+ if (compound.contains("Purpur.TPSBar")) { this.tpsBar = compound.getBoolean("Purpur.TPSBar"); } // Purpur - Implement TPSBar -+ if (compound.contains("Purpur.CompassBar")) { this.compassBar = compound.getBoolean("Purpur.CompassBar"); } // Purpur - Add compass command -+ if (compound.contains("Purpur.RamBar")) { this.ramBar = compound.getBoolean("Purpur.RamBar"); } // Purpur - Implement rambar command ++ this.tpsBar = compound.getBooleanOr("Purpur.TPSBar", false); // Purpur - Implement TPSBar ++ this.compassBar = compound.getBooleanOr("Purpur.CompassBar", false); // Purpur - Add compass command ++ this.ramBar = compound.getBooleanOr("Purpur.RamBar", false); // Purpur - Implement rambar command } @Override -@@ -612,6 +_,9 @@ - } - +@@ -542,6 +_,9 @@ + compound.storeNullable("raid_omen_position", BlockPos.CODEC, this.raidOmenPosition); this.saveEnderPearls(compound); + this.getBukkitEntity().setExtraData(compound); // CraftBukkit + compound.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur - Implement TPSBar + compound.putBoolean("Purpur.CompassBar", this.compassBar); // Purpur - Add compass command + compound.putBoolean("Purpur.RamBar", this.ramBar); // Purpur - Add rambar command } private void saveParentVehicle(CompoundTag tag) { -@@ -1131,6 +_,7 @@ +@@ -1029,6 +_,7 @@ ) ); Team team = this.getTeam(); @@ -40,7 +40,7 @@ if (team == null || team.getDeathMessageVisibility() == Team.Visibility.ALWAYS) { this.server.getPlayerList().broadcastSystemMessage(deathMessage, false); } else if (team.getDeathMessageVisibility() == Team.Visibility.HIDE_FOR_OTHER_TEAMS) { -@@ -1224,6 +_,13 @@ +@@ -1126,6 +_,13 @@ if (this.isInvulnerableTo(level, damageSource)) { return false; } else { @@ -54,7 +54,7 @@ Entity entity = damageSource.getEntity(); if (!( // Paper - split the if statement. If below statement is false, hurtServer would not have been evaluated. Return false. !(entity instanceof Player player && !this.canHarmPlayer(player)) -@@ -1453,6 +_,7 @@ +@@ -1356,6 +_,7 @@ serverLevel.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); this.unsetRemoved(); // CraftBukkit end @@ -62,7 +62,7 @@ this.setServerLevel(level); this.connection.internalTeleport(PositionMoveRotation.of(teleportTransition), teleportTransition.relatives()); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); -@@ -1571,7 +_,7 @@ +@@ -1473,7 +_,7 @@ new AABB(vec3.x() - 8.0, vec3.y() - 5.0, vec3.z() - 8.0, vec3.x() + 8.0, vec3.y() + 5.0, vec3.z() + 8.0), monster -> monster.isPreventingPlayerRest(this.serverLevel(), this) ); @@ -71,7 +71,7 @@ return Either.left(Player.BedSleepingProblem.NOT_SAFE); } } -@@ -1608,7 +_,19 @@ +@@ -1510,7 +_,19 @@ CriteriaTriggers.SLEPT_IN_BED.trigger(this); }); if (!this.serverLevel().canSleepThroughNights()) { @@ -92,7 +92,7 @@ } ((ServerLevel)this.level()).updateSleepingPlayerList(); -@@ -1716,6 +_,7 @@ +@@ -1602,6 +_,7 @@ @Override public void openTextEdit(SignBlockEntity signEntity, boolean isFrontText) { @@ -100,7 +100,7 @@ this.connection.send(new ClientboundBlockUpdatePacket(this.level(), signEntity.getBlockPos())); this.connection.send(new ClientboundOpenSignEditorPacket(signEntity.getBlockPos(), isFrontText)); } -@@ -2021,6 +_,26 @@ +@@ -1904,6 +_,26 @@ this.lastSentExp = -1; // CraftBukkit - Added to reset } @@ -127,7 +127,7 @@ @Override public void displayClientMessage(Component chatComponent, boolean actionBar) { this.sendSystemMessage(chatComponent, actionBar); -@@ -2242,6 +_,20 @@ +@@ -2121,6 +_,20 @@ ); } @@ -148,7 +148,7 @@ public void sendSystemMessage(Component mesage) { this.sendSystemMessage(mesage, false); } -@@ -2380,7 +_,67 @@ +@@ -2259,7 +_,67 @@ public void resetLastActionTime() { this.lastActionTime = Util.getMillis(); @@ -217,7 +217,7 @@ public ServerStatsCounter getStats() { return this.stats; -@@ -3085,4 +_,56 @@ +@@ -2887,4 +_,56 @@ return (org.bukkit.craftbukkit.entity.CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/level/ServerPlayerGameMode.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayerGameMode.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/level/ServerPlayerGameMode.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayerGameMode.java.patch index 2586f46df..dade16acd 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/server/level/ServerPlayerGameMode.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/ServerPlayerGameMode.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -351,6 +_,7 @@ +@@ -347,6 +_,7 @@ } return false; } @@ -8,7 +8,7 @@ } // CraftBukkit end -@@ -464,6 +_,7 @@ +@@ -460,6 +_,7 @@ public InteractionHand interactHand; public ItemStack interactItemStack; public InteractionResult useItemOn(ServerPlayer player, Level level, ItemStack stack, InteractionHand hand, BlockHitResult hitResult) { @@ -16,7 +16,7 @@ BlockPos blockPos = hitResult.getBlockPos(); BlockState blockState = level.getBlockState(blockPos); boolean cancelledBlock = false; -@@ -506,7 +_,7 @@ +@@ -502,7 +_,7 @@ boolean flag = !player.getMainHandItem().isEmpty() || !player.getOffhandItem().isEmpty(); boolean flag1 = player.isSecondaryUseActive() && flag; ItemStack itemStack = stack.copy(); @@ -25,7 +25,7 @@ InteractionResult interactionResult = blockState.useItemOn(player.getItemInHand(hand), level, player, hand, hitResult); if (interactionResult.consumesAction()) { CriteriaTriggers.ITEM_USED_ON_BLOCK.trigger(player, blockPos, itemStack); -@@ -552,4 +_,18 @@ +@@ -548,4 +_,18 @@ public void setLevel(ServerLevel serverLevel) { this.level = serverLevel; } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/level/WorldGenRegion.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/WorldGenRegion.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/level/WorldGenRegion.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/level/WorldGenRegion.java.patch index fe8a95124..fb3d981ba 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/server/level/WorldGenRegion.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/level/WorldGenRegion.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/level/WorldGenRegion.java +++ b/net/minecraft/server/level/WorldGenRegion.java -@@ -312,6 +_,7 @@ +@@ -284,6 +_,7 @@ return true; } else { // Paper start - Buffer OOB setBlock calls diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch similarity index 95% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch index 4405b9245..4af510735 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerCommonPacketListenerImpl.java.patch @@ -33,20 +33,17 @@ if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) { int i = (int)(Util.getMillis() - this.keepAliveTime); this.latency = (this.latency * 3 + i) / 4; -@@ -159,6 +_,13 @@ +@@ -159,6 +_,10 @@ ServerGamePacketListenerImpl.LOGGER.error("Couldn't register custom payload", ex); this.disconnect(Component.literal("Invalid payload REGISTER!"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); // Paper - kick event cause } + // Purpur start - Purpur client support + } else if (identifier.equals(PURPUR_CLIENT)) { -+ try { -+ player.purpurClient = true; -+ } catch (Exception ignore) { -+ } ++ player.purpurClient = true; + // Purpur end - Purpur client support } else if (identifier.equals(ServerCommonPacketListenerImpl.CUSTOM_UNREGISTER)) { try { - String channels = payload.toString(com.google.common.base.Charsets.UTF_8); + String channels = payload.toString(java.nio.charset.StandardCharsets.UTF_8); @@ -238,6 +_,22 @@ // Paper start - give clients a longer time to respond to pings as per pre 1.12.2 timings // This should effectively place the keepalive handling back to "as it was" before 1.12.2 diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch similarity index 78% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch index b4401a637..d47e5e7b1 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerGamePacketListenerImpl.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -328,6 +_,20 @@ +@@ -321,6 +_,20 @@ this.tickEndEvent = new io.papermc.paper.event.packet.ClientTickEndEvent(player.getBukkitEntity()); // Paper - add client tick end event } @@ -21,7 +21,7 @@ @Override public void tick() { if (this.ackBlockChangesUpTo > -1) { -@@ -386,6 +_,12 @@ +@@ -379,6 +_,12 @@ if (this.player.getLastActionTime() > 0L && this.server.getPlayerIdleTimeout() > 0 && Util.getMillis() - this.player.getLastActionTime() > this.server.getPlayerIdleTimeout() * 1000L * 60L && !this.player.wonGame) { // Paper - Prevent AFK kick while watching end credits @@ -34,7 +34,7 @@ this.player.resetLastActionTime(); // CraftBukkit - SPIGOT-854 this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause } -@@ -631,6 +_,8 @@ +@@ -615,6 +_,8 @@ this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -43,7 +43,7 @@ Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -711,6 +_,7 @@ +@@ -671,6 +_,7 @@ PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); if (packet.getId() == this.awaitingTeleport) { if (this.awaitingPositionFromClient == null) { @@ -51,7 +51,7 @@ this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause return; } -@@ -1179,6 +_,10 @@ +@@ -1199,6 +_,10 @@ final int maxBookPageSize = pageMax.intValue(); final double multiplier = Math.clamp(io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier, 0.3D, 1D); long byteAllowed = maxBookPageSize; @@ -62,7 +62,7 @@ for (final String page : pageList) { final int byteLength = page.getBytes(java.nio.charset.StandardCharsets.UTF_8).length; byteTotal += byteLength; -@@ -1203,7 +_,8 @@ +@@ -1223,7 +_,8 @@ } if (byteTotal > byteAllowed) { @@ -72,7 +72,7 @@ this.disconnectAsync(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause // Paper - add proper async disconnect return; } -@@ -1222,31 +_,45 @@ +@@ -1242,31 +_,45 @@ Optional optional = packet.title(); optional.ifPresent(list::add); list.addAll(packet.pages()); @@ -82,9 +82,9 @@ + // Purpur end - Allow color codes in books Consumer> consumer = optional.isPresent() - ? texts -> this.signBook(texts.get(0), texts.subList(1, texts.size()), slot) -- : texts -> this.updateBookContents(texts, slot); +- : list1 -> this.updateBookContents(list1, slot); + ? texts -> this.signBook(texts.get(0), texts.subList(1, texts.size()), slot, hasSignPerm) // Purpur - Allow color codes in books -+ : texts -> this.updateBookContents(texts, slot, hasEditPerm); // Purpur - Allow color codes in books ++ : list1 -> this.updateBookContents(list1, slot, hasEditPerm); // Purpur - Allow color codes in books this.filterTextPacket(list).thenAcceptAsync(consumer, this.server); } } @@ -122,7 +122,7 @@ itemStack.set( DataComponents.WRITTEN_BOOK_CONTENT, new WrittenBookContent(this.filterableFromOutgoing(title), this.player.getName().getString(), 0, list, true) -@@ -1260,6 +_,16 @@ +@@ -1280,6 +_,16 @@ return this.player.isTextFilteringEnabled() ? Filterable.passThrough(filteredText.filteredOrEmpty()) : Filterable.from(filteredText); } @@ -139,7 +139,7 @@ @Override public void handleEntityTagQuery(ServerboundEntityTagQueryPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); -@@ -1295,7 +_,15 @@ +@@ -1315,7 +_,15 @@ @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); @@ -156,39 +156,39 @@ this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause } else { ServerLevel serverLevel = this.player.serverLevel(); -@@ -1470,7 +_,7 @@ - movedWrongly = true; - if (event.getLogWarning()) - // Paper end -- LOGGER.warn("{} moved wrongly!", this.player.getName().getString()); -+ LOGGER.warn("{} moved wrongly!, ({})", this.player.getName().getString(), verticalDelta); // Purpur - AFK API - } // Paper - } - -@@ -1536,6 +_,8 @@ - this.lastYaw = to.getYaw(); - this.lastPitch = to.getPitch(); - -+ if (!to.getWorld().getUID().equals(from.getWorld().getUID()) || to.getBlockX() != from.getBlockX() || to.getBlockY() != from.getBlockY() || to.getBlockZ() != from.getBlockZ() || to.getYaw() != from.getYaw() || to.getPitch() != from.getPitch()) this.player.resetLastActionTime(); // Purpur - AFK API -+ - Location oldTo = to.clone(); - PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); - this.cserver.getPluginManager().callEvent(event); -@@ -1592,6 +_,13 @@ - this.player.tryResetCurrentImpulseContext(); +@@ -1496,7 +_,7 @@ + movedWrongly = true; + if (event.getLogWarning()) + // Paper end +- LOGGER.warn("{} moved wrongly!", this.player.getName().getString()); ++ LOGGER.warn("{} moved wrongly!, ({})", this.player.getName().getString(), verticalDelta); // Purpur - AFK API + } // Paper } -+ // Purpur start - Dont run with scissors! -+ if (this.player.serverLevel().purpurConfig.dontRunWithScissors && this.player.isSprinting() && !(this.player.serverLevel().purpurConfig.ignoreScissorsInWater && this.player.isInWater()) && !(this.player.serverLevel().purpurConfig.ignoreScissorsInLava && this.player.isInLava()) && (isScissors(this.player.getItemInHand(InteractionHand.MAIN_HAND)) || isScissors(this.player.getItemInHand(InteractionHand.OFF_HAND))) && (int) (Math.random() * 10) == 0) { -+ this.player.hurtServer(this.player.serverLevel(), this.player.damageSources().scissors(), (float) this.player.serverLevel().purpurConfig.scissorsRunningDamage); -+ if (!org.purpurmc.purpur.PurpurConfig.dontRunWithScissors.isBlank()) this.player.sendActionBarMessage(org.purpurmc.purpur.PurpurConfig.dontRunWithScissors); -+ } -+ // Purpur end - Dont run with scissors! +@@ -1552,6 +_,8 @@ + this.lastYaw = to.getYaw(); + this.lastPitch = to.getPitch(); + ++ if (!to.getWorld().getUID().equals(from.getWorld().getUID()) || to.getBlockX() != from.getBlockX() || to.getBlockY() != from.getBlockY() || to.getBlockZ() != from.getBlockZ() || to.getYaw() != from.getYaw() || to.getPitch() != from.getPitch()) this.player.resetLastActionTime(); // Purpur - AFK API + - this.player.checkMovementStatistics(this.player.getX() - x, this.player.getY() - y, this.player.getZ() - z); - this.lastGoodX = this.player.getX(); - this.lastGoodY = this.player.getY(); -@@ -1640,6 +_,17 @@ + Location oldTo = to.clone(); + PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); + this.cserver.getPluginManager().callEvent(event); +@@ -1607,6 +_,13 @@ + this.player.tryResetCurrentImpulseContext(); + } + ++ // Purpur start - Dont run with scissors! ++ if (this.player.serverLevel().purpurConfig.dontRunWithScissors && this.player.isSprinting() && !(this.player.serverLevel().purpurConfig.ignoreScissorsInWater && this.player.isInWater()) && !(this.player.serverLevel().purpurConfig.ignoreScissorsInLava && this.player.isInLava()) && (isScissors(this.player.getItemInHand(InteractionHand.MAIN_HAND)) || isScissors(this.player.getItemInHand(InteractionHand.OFF_HAND))) && (int) (Math.random() * 10) == 0) { ++ this.player.hurtServer(this.player.serverLevel(), this.player.damageSources().scissors(), (float) this.player.serverLevel().purpurConfig.scissorsRunningDamage); ++ if (!org.purpurmc.purpur.PurpurConfig.dontRunWithScissors.isBlank()) this.player.sendActionBarMessage(org.purpurmc.purpur.PurpurConfig.dontRunWithScissors); ++ } ++ // Purpur end - Dont run with scissors! ++ + this.player.checkMovementStatistics(this.player.getX() - x, this.player.getY() - y, this.player.getZ() - z); + this.lastGoodX = this.player.getX(); + this.lastGoodY = this.player.getY(); +@@ -1657,6 +_,17 @@ } } @@ -203,10 +203,10 @@ + } + // Purpur end - Dont run with scissors! + - // Paper start - optimise out extra getCubes - private boolean hasNewCollision(final ServerLevel level, final Entity entity, final AABB oldBox, final AABB newBox) { - final List collisionsBB = new java.util.ArrayList<>(); -@@ -2010,6 +_,7 @@ + private boolean isPlayerCollidingWithAnythingNew(LevelReader level, AABB box, double x, double y, double z) { + AABB aabb = this.player.getBoundingBox().move(x - this.player.getX(), y - this.player.getY(), z - this.player.getZ()); + Iterable collisions = level.getCollisions(this.player, aabb.deflate(1.0E-5F)); +@@ -2000,6 +_,7 @@ boolean cancelled; if (hitResult == null || hitResult.getType() != HitResult.Type.BLOCK) { @@ -214,7 +214,7 @@ org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemInHand, hand); cancelled = event.useItemInHand() == Event.Result.DENY; } else { -@@ -2751,6 +_,7 @@ +@@ -2672,6 +_,7 @@ AABB boundingBox = target.getBoundingBox(); if (this.player.canInteractWithEntity(boundingBox, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(3.0))) { // Paper - configurable lenience value for interact range diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch index 5b3bc1b3f..06b474c18 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerLoginPacketListenerImpl.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -307,7 +_,7 @@ +@@ -308,7 +_,7 @@ ServerLoginPacketListenerImpl.LOGGER.warn("Failed to verify username but will let them in anyway!"); ServerLoginPacketListenerImpl.this.startClientVerification(ServerLoginPacketListenerImpl.this.createOfflineProfile(string1)); // Spigot } else { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/network/ServerStatusPacketListenerImpl.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/players/PlayerList.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch similarity index 93% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/players/PlayerList.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch index 1818a74df..4617cc721 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/server/players/PlayerList.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/server/players/PlayerList.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java -@@ -396,6 +_,7 @@ +@@ -400,6 +_,7 @@ scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam); } // Paper end - Configurable player collision @@ -8,15 +8,15 @@ PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", player.getName().getString(), loggableAddress, player.getId(), serverLevel.serverLevelData.getLevelName(), player.getX(), player.getY(), player.getZ()); // Paper start - Send empty chunk, so players aren't stuck in the world loading screen with our chunk system not sending chunks when dead if (player.isDeadOrDying()) { -@@ -501,6 +_,7 @@ +@@ -504,6 +_,7 @@ } - public net.kyori.adventure.text.Component remove(ServerPlayer player, net.kyori.adventure.text.Component leaveMessage) { + public @Nullable net.kyori.adventure.text.Component remove(ServerPlayer player, net.kyori.adventure.text.Component leaveMessage) { // Paper end - Fix kick event leave message not being sent + org.purpurmc.purpur.task.BossBarTask.removeFromAll(player.getBukkitEntity()); // Purpur - Implement TPSBar ServerLevel serverLevel = player.serverLevel(); player.awardStat(Stats.LEAVE_GAME); // CraftBukkit start - Quitting must be before we do final save of data, in case plugins need to modify it -@@ -665,7 +_,7 @@ +@@ -662,7 +_,7 @@ // return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameProfile) // ? Component.translatable("multiplayer.disconnect.server_full") // : null; @@ -25,7 +25,7 @@ event.disallow(org.bukkit.event.player.PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure } } -@@ -919,6 +_,20 @@ +@@ -920,6 +_,20 @@ } } @@ -46,7 +46,7 @@ public void broadcastAll(Packet packet, ResourceKey dimension) { for (ServerPlayer serverPlayer : this.players) { if (serverPlayer.level().dimension() == dimension) { -@@ -1002,6 +_,7 @@ +@@ -1004,6 +_,7 @@ } else { b = (byte)(24 + permLevel); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/server/players/SleepStatus.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/server/players/SleepStatus.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/server/players/SleepStatus.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/server/players/SleepStatus.java.patch diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/stats/ServerRecipeBook.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/stats/ServerRecipeBook.java.patch new file mode 100644 index 000000000..f4855d61c --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/stats/ServerRecipeBook.java.patch @@ -0,0 +1,10 @@ +--- a/net/minecraft/stats/ServerRecipeBook.java ++++ b/net/minecraft/stats/ServerRecipeBook.java +@@ -133,6 +_,7 @@ + private void loadRecipes(List>> recipes, Consumer>> output, Predicate>> isRecognized) { + for (ResourceKey> resourceKey : recipes) { + if (!isRecognized.test(resourceKey)) { ++ if (!org.purpurmc.purpur.PurpurConfig.loggerSuppressUnrecognizedRecipeErrors) // Purpur - Logger settings (suppressing pointless logs) + LOGGER.error("Tried to load unrecognized recipe: {} removed now.", resourceKey); + } else { + output.accept(resourceKey); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/util/StringUtil.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/util/StringUtil.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/util/StringUtil.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/util/StringUtil.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/damagesource/CombatRules.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/damagesource/CombatRules.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/damagesource/CombatRules.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/damagesource/CombatRules.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/damagesource/CombatTracker.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/damagesource/CombatTracker.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/damagesource/CombatTracker.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/damagesource/CombatTracker.java.patch index 0994f6fcd..fa544e5d2 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/damagesource/CombatTracker.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/damagesource/CombatTracker.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/damagesource/CombatTracker.java +++ b/net/minecraft/world/damagesource/CombatTracker.java -@@ -54,7 +_,7 @@ +@@ -55,7 +_,7 @@ private Component getMessageForAssistedFall(Entity entity, Component entityDisplayName, String hasWeaponTranslationKey, String noWeaponTranslationKey) { ItemStack itemStack = entity instanceof LivingEntity livingEntity ? livingEntity.getMainHandItem() : ItemStack.EMPTY; @@ -9,7 +9,7 @@ ? Component.translatable(hasWeaponTranslationKey, this.mob.getDisplayName(), entityDisplayName, itemStack.getDisplayName()) : Component.translatable(noWeaponTranslationKey, this.mob.getDisplayName(), entityDisplayName); } -@@ -98,6 +_,15 @@ +@@ -99,6 +_,15 @@ Component component = ComponentUtils.wrapInSquareBrackets(Component.translatable(string + ".link")).withStyle(INTENTIONAL_GAME_DESIGN_STYLE); return Component.translatable(string + ".message", this.mob.getDisplayName(), component); } else { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/damagesource/DamageSource.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/damagesource/DamageSource.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/damagesource/DamageSource.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/damagesource/DamageSource.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/damagesource/DamageSources.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/damagesource/DamageSources.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/damagesource/DamageSources.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/damagesource/DamageSources.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/effect/HungerMobEffect.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/effect/HungerMobEffect.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/effect/HungerMobEffect.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/effect/HungerMobEffect.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/effect/PoisonMobEffect.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/effect/PoisonMobEffect.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/effect/PoisonMobEffect.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/effect/PoisonMobEffect.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/effect/RegenerationMobEffect.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/effect/RegenerationMobEffect.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/effect/RegenerationMobEffect.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/effect/RegenerationMobEffect.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/effect/SaturationMobEffect.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/effect/SaturationMobEffect.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/effect/SaturationMobEffect.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/effect/SaturationMobEffect.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/effect/WitherMobEffect.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/effect/WitherMobEffect.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/effect/WitherMobEffect.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/effect/WitherMobEffect.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/Entity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/Entity.java.patch similarity index 86% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/Entity.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/Entity.java.patch index e6c4d0019..92eed85bd 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/Entity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/Entity.java.patch @@ -1,27 +1,25 @@ --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -136,7 +_,7 @@ - import org.slf4j.Logger; +@@ -141,6 +_,7 @@ + import org.jetbrains.annotations.Contract; - public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess, ScoreHolder, ca.spottedleaf.moonrise.patches.chunk_system.entity.ChunkSystemEntity, ca.spottedleaf.moonrise.patches.entity_tracker.EntityTrackerEntity { // Paper - rewrite chunk system // Paper - optimise entity tracker -- + public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess, ScoreHolder, DataComponentGetter { + public static javax.script.ScriptEngine scriptEngine = new javax.script.ScriptEngineManager().getEngineByName("rhino"); // Purpur - Configurable entity base attributes // CraftBukkit start + private static final org.slf4j.Logger LOGGER = com.mojang.logging.LogUtils.getLogger(); private static final int CURRENT_LEVEL = 2; - public boolean preserveMotion = true; // Paper - Fix Entity Teleportation and cancel velocity if teleported; keep initial motion on first setPositionRotation -@@ -253,9 +_,10 @@ +@@ -303,8 +_,9 @@ public double xOld; public double yOld; public double zOld; + public float maxUpStep; // Purpur - Add option to set armorstand step height public boolean noPhysics; - private boolean wasOnFire; - public final RandomSource random = SHARED_RANDOM; // Paper - Share random for entities to make them more random + public final RandomSource random; // Paper - Share random for entities to make them more random // Add toggle for RNG manipulation public int tickCount; private int remainingFireTicks = -this.getFireImmuneTicks(); public boolean wasTouchingWater; -@@ -289,8 +_,8 @@ +@@ -338,8 +_,8 @@ public PortalProcessor portalProcess; public int portalCooldown; private boolean invulnerable; @@ -32,7 +30,7 @@ private boolean hasGlowingTag; private final Set tags = new io.papermc.paper.util.SizeLimitedSet<>(new it.unimi.dsi.fastutil.objects.ObjectOpenHashSet<>(), MAX_ENTITY_TAG_COUNT); // Paper - fully limit tag size - replace set impl private final double[] pistonDeltas = new double[]{0.0, 0.0, 0.0}; -@@ -343,6 +_,7 @@ +@@ -393,6 +_,7 @@ public long activatedTick = Integer.MIN_VALUE; public boolean isTemporarilyActive; public long activatedImmunityTick = Integer.MIN_VALUE; @@ -40,9 +38,9 @@ public void inactiveTick() { } -@@ -523,10 +_,21 @@ +@@ -405,10 +_,21 @@ } - // Paper end - optimise entity tracker + // Paper end + // Purpur start - Add canSaveToDisk to Entity + public boolean canSaveToDisk() { @@ -62,7 +60,7 @@ this.position = Vec3.ZERO; this.blockPosition = BlockPos.ZERO; this.chunkPosition = ChunkPos.ZERO; -@@ -905,6 +_,7 @@ +@@ -778,6 +_,7 @@ && this.level.paperConfig().environment.netherCeilingVoidDamageHeight.test(v -> this.getY() >= v) && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end - Configurable nether ceiling damage @@ -70,7 +68,7 @@ this.onBelowWorld(); } } -@@ -1827,7 +_,7 @@ +@@ -1681,7 +_,7 @@ } public boolean fireImmune() { @@ -78,8 +76,8 @@ + return this.immuneToFire != null ? immuneToFire : this.getType().fireImmune(); // Purpur - add fire immune API } - public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { -@@ -1896,7 +_,7 @@ + public boolean causeFallDamage(double fallDistance, float damageMultiplier, DamageSource damageSource) { +@@ -1747,7 +_,7 @@ return this.isInWater() || flag; } @@ -88,7 +86,7 @@ if (this.getVehicle() instanceof AbstractBoat abstractBoat && !abstractBoat.isUnderWater()) { this.wasTouchingWater = false; } else if (this.updateFluidHeightAndDoFluidPushing(FluidTags.WATER, 0.014)) { -@@ -2522,6 +_,13 @@ +@@ -2369,6 +_,13 @@ compound.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -100,10 +98,10 @@ + // Purpur end - Fire immune API + return compound; - } catch (Throwable var9) { - CrashReport crashReport = CrashReport.forThrowable(var9, "Saving entity NBT"); -@@ -2671,6 +_,13 @@ - freezeLocked = compound.getBoolean("Paper.FreezeLock"); + } catch (Throwable var8) { + CrashReport crashReport = CrashReport.forThrowable(var8, "Saving entity NBT"); +@@ -2486,6 +_,13 @@ + freezeLocked = compound.getBooleanOr("Paper.FreezeLock", false); } // Paper end + @@ -113,10 +111,10 @@ + } + // Purpur end - Fire immune API + - } catch (Throwable var17) { - CrashReport crashReport = CrashReport.forThrowable(var17, "Loading entity NBT"); + } catch (Throwable var8) { + CrashReport crashReport = CrashReport.forThrowable(var8, "Loading entity NBT"); CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded"); -@@ -2917,6 +_,7 @@ +@@ -2625,6 +_,7 @@ if (this.isAlive() && this instanceof Leashable leashable) { if (leashable.getLeashHolder() == player) { if (!this.level().isClientSide()) { @@ -124,7 +122,7 @@ // CraftBukkit start - fire PlayerUnleashEntityEvent // Paper start - Expand EntityUnleashEvent org.bukkit.event.player.PlayerUnleashEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.hasInfiniteMaterials()); -@@ -3242,15 +_,18 @@ +@@ -2941,15 +_,18 @@ return Vec3.directionFromRotation(this.getRotationVector()); } @@ -144,7 +142,7 @@ } } } -@@ -3455,7 +_,7 @@ +@@ -3154,7 +_,7 @@ } public int getMaxAirSupply() { @@ -153,7 +151,7 @@ } public int getAirSupply() { -@@ -3950,7 +_,7 @@ +@@ -3682,7 +_,7 @@ // CraftBukkit end public boolean canUsePortal(boolean allowPassengers) { @@ -162,7 +160,7 @@ } public boolean canTeleport(Level fromLevel, Level toLevel) { -@@ -4482,6 +_,12 @@ +@@ -4217,6 +_,12 @@ return Mth.lerp(partialTick, this.yRotO, this.yRot); } @@ -172,10 +170,10 @@ + } + // Purpur end - Stop squids floating on top of water + - // Paper start - optimise collisions - public boolean updateFluidHeightAndDoFluidPushing(final TagKey fluid, final double flowScale) { + public boolean updateFluidHeightAndDoFluidPushing(TagKey fluidTag, double motionScale) { if (this.touchingUnloadedChunk()) { -@@ -4880,7 +_,7 @@ + return false; +@@ -4557,7 +_,7 @@ } public float maxUpStep() { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/EntitySelector.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/EntitySelector.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/EntitySelector.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/EntitySelector.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/EntityType.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/EntityType.java.patch similarity index 74% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/EntityType.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/EntityType.java.patch index 6b937ec99..5fb68cfd6 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/EntityType.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/EntityType.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/EntityType.java +++ b/net/minecraft/world/entity/EntityType.java -@@ -1083,6 +_,16 @@ +@@ -1095,6 +_,16 @@ return register(vanillaEntityId(key), builder); } @@ -17,7 +17,7 @@ public static ResourceLocation getKey(EntityType entityType) { return BuiltInRegistries.ENTITY_TYPE.getKey(entityType); } -@@ -1312,6 +_,16 @@ +@@ -1325,6 +_,16 @@ return this.category; } @@ -34,17 +34,14 @@ public String getDescriptionId() { return this.descriptionId; } -@@ -1370,7 +_,14 @@ - entity.load(tag); - }, - // Paper end - Don't fire sync event during generation -- () -> LOGGER.warn("Skipping Entity with id {}", tag.getString("id")) +@@ -1384,7 +_,11 @@ + entity.load(tag); + }, + // Paper end - Don't fire sync event during generation +- () -> LOGGER.warn("Skipping Entity with id {}", tag.getStringOr("id", "[invalid]")) + // Purpur start - log skipped entity's position -+ () -> {LOGGER.warn("Skipping Entity with id {}", tag.getString("id")); -+ try { -+ ListTag pos = tag.getList("Pos", 6); -+ EntityType.LOGGER.warn("Location: {} {},{},{}", level.getWorld().getName(), pos.getDouble(0), pos.getDouble(1), pos.getDouble(2)); -+ } catch (Throwable ignore) {} ++ () -> {LOGGER.warn("Skipping Entity with id {}", tag.getStringOr("id", "[invalid]")); ++ EntityType.LOGGER.warn("Location: {} {}", level.getWorld().getName(), tag.read("Pos", net.minecraft.world.phys.Vec3.CODEC).orElse(net.minecraft.world.phys.Vec3.ZERO)); + } + // Purpur end - log skipped entity's position ); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ExperienceOrb.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ExperienceOrb.java.patch similarity index 64% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ExperienceOrb.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ExperienceOrb.java.patch index a14e7f6a5..f77455e12 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ExperienceOrb.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ExperienceOrb.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/world/entity/ExperienceOrb.java +++ b/net/minecraft/world/entity/ExperienceOrb.java -@@ -323,7 +_,7 @@ +@@ -328,7 +_,7 @@ public void playerTouch(Player entity) { if (entity instanceof ServerPlayer serverPlayer) { if (entity.takeXpDelay == 0 && new com.destroystokyo.paper.event.player.PlayerPickupExperienceEvent(serverPlayer.getBukkitEntity(), (org.bukkit.entity.ExperienceOrb) this.getBukkitEntity()).callEvent()) { // Paper - PlayerPickupExperienceEvent -- entity.takeXpDelay = CraftEventFactory.callPlayerXpCooldownEvent(entity, 2, PlayerExpCooldownChangeEvent.ChangeReason.PICKUP_ORB).getNewCooldown(); // CraftBukkit - entityhuman.takeXpDelay = 2; -+ entity.takeXpDelay = CraftEventFactory.callPlayerXpCooldownEvent(entity, this.level().purpurConfig.playerExpPickupDelay, PlayerExpCooldownChangeEvent.ChangeReason.PICKUP_ORB).getNewCooldown(); // CraftBukkit - entityhuman.takeXpDelay = 2; // Purpur - Configurable player pickup exp delay +- entity.takeXpDelay = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerXpCooldownEvent(entity, 2, org.bukkit.event.player.PlayerExpCooldownChangeEvent.ChangeReason.PICKUP_ORB).getNewCooldown(); // CraftBukkit - entityhuman.takeXpDelay = 2; ++ entity.takeXpDelay = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerXpCooldownEvent(entity, this.level().purpurConfig.playerExpPickupDelay, org.bukkit.event.player.PlayerExpCooldownChangeEvent.ChangeReason.PICKUP_ORB).getNewCooldown(); // CraftBukkit - entityhuman.takeXpDelay = 2; // Purpur - Configurable player pickup exp delay entity.take(this, 1); - int i = this.repairPlayerItems(serverPlayer, this.value); + int i = this.repairPlayerItems(serverPlayer, this.getValue()); if (i > 0) { -@@ -339,7 +_,7 @@ +@@ -344,7 +_,7 @@ } private int repairPlayerItems(ServerPlayer player, int value) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/GlowSquid.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/GlowSquid.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/GlowSquid.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/GlowSquid.java.patch index 61c07231e..932024a00 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/GlowSquid.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/GlowSquid.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/GlowSquid.java +++ b/net/minecraft/world/entity/GlowSquid.java -@@ -25,6 +_,13 @@ +@@ -26,6 +_,13 @@ super(entityType, level); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/LivingEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch similarity index 78% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/LivingEntity.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch index 791b9b8ef..6a8ccadb8 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/LivingEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/LivingEntity.java.patch @@ -1,37 +1,32 @@ --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -459,6 +_,12 @@ - if (d < 0.0) { - double damagePerBlock = this.level().getWorldBorder().getDamagePerBlock(); - if (damagePerBlock > 0.0) { -+ // Purpur start - Add option to teleport to spawn if outside world border -+ if (this.level().purpurConfig.teleportIfOutsideBorder && this instanceof ServerPlayer serverPlayer) { -+ serverPlayer.teleport(io.papermc.paper.util.MCUtil.toLocation(this.level(), this.level().getSharedSpawnPos())); -+ return; -+ } -+ // Purpur end - Add option to teleport to spawn if outside world border - this.hurtServer(serverLevel1, this.damageSources().outOfBorder(), Math.max(1, Mth.floor(-d * damagePerBlock))); - } +@@ -430,6 +_,12 @@ + if (d < 0.0) { + double damagePerBlock = serverLevel1.getWorldBorder().getDamagePerBlock(); + if (damagePerBlock > 0.0) { ++ // Purpur start - Add option to teleport to spawn if outside world border ++ if (this.level().purpurConfig.teleportIfOutsideBorder && this instanceof ServerPlayer serverPlayer) { ++ serverPlayer.teleport(io.papermc.paper.util.MCUtil.toLocation(this.level(), this.level().getSharedSpawnPos())); ++ return; ++ } ++ // Purpur end - Add option to teleport to spawn if outside world border + this.hurtServer(serverLevel1, this.damageSources().outOfBorder(), Math.max(1, Mth.floor(-d * damagePerBlock))); } -@@ -472,7 +_,7 @@ + } +@@ -442,10 +_,10 @@ && (!flag || !((Player)this).getAbilities().invulnerable); if (flag1) { this.setAirSupply(this.decreaseAirSupply(this.getAirSupply())); - if (this.getAirSupply() == -20) { + if (this.getAirSupply() == -this.level().purpurConfig.drowningDamageInterval) { // Purpur - Drowning Settings this.setAirSupply(0); - Vec3 deltaMovement = this.getDeltaMovement(); - -@@ -492,7 +_,7 @@ - ); - } - -- this.hurt(this.damageSources().drown(), 2.0F); -+ this.hurt(this.damageSources().drown(), (float) this.level().purpurConfig.damageFromDrowning); // Purpur - Drowning Settings + serverLevel1.broadcastEntityEvent(this, (byte)67); +- this.hurtServer(serverLevel1, this.damageSources().drown(), 2.0F); ++ this.hurtServer(serverLevel1, this.damageSources().drown(), (float) this.level().purpurConfig.damageFromDrowning); // Purpur - Drowning Settings } } else if (this.getAirSupply() < this.getMaxAirSupply()) { this.setAirSupply(this.increaseAirSupply(this.getAirSupply())); -@@ -1009,14 +_,32 @@ +@@ -1014,14 +_,32 @@ if (lookingEntity != null) { ItemStack itemBySlot = this.getItemBySlot(EquipmentSlot.HEAD); EntityType type = lookingEntity.getType(); @@ -72,7 +67,7 @@ return d; } -@@ -1063,6 +_,7 @@ +@@ -1068,6 +_,7 @@ Iterator iterator = this.activeEffects.values().iterator(); while (iterator.hasNext()) { MobEffectInstance effect = iterator.next(); @@ -80,7 +75,7 @@ EntityPotionEffectEvent event = CraftEventFactory.callEntityPotionEffectChangeEvent(this, effect, null, cause, EntityPotionEffectEvent.Action.CLEARED); if (event.isCancelled()) { continue; -@@ -1372,6 +_,24 @@ +@@ -1385,6 +_,24 @@ this.stopSleeping(); } @@ -105,27 +100,26 @@ this.noActionTime = 0; if (amount < 0.0F) { amount = 0.0F; -@@ -1536,11 +_,11 @@ +@@ -1647,10 +_,10 @@ protected Player resolvePlayerResponsibleForDamage(DamageSource damageSource) { Entity entity = damageSource.getEntity(); if (entity instanceof Player player) { -- this.lastHurtByPlayerTime = 100; -+ this.lastHurtByPlayerTime = this.level().purpurConfig.mobLastHurtByPlayerTime; // Purpur - Config for mob last hurt by player time - this.lastHurtByPlayer = player; - return player; +- this.setLastHurtByPlayer(player, 100); ++ this.setLastHurtByPlayer(player, this.level().purpurConfig.mobLastHurtByPlayerTime); // Purpur - Config for mob last hurt by player time } else if (entity instanceof Wolf wolf && wolf.isTame()) { -- this.lastHurtByPlayerTime = 100; -+ this.lastHurtByPlayerTime = this.level().purpurConfig.mobLastHurtByPlayerTime; // Purpur - Config for mob last hurt by player time - if (wolf.getOwner() instanceof Player player1) { - this.lastHurtByPlayer = player1; + if (wolf.getOwnerReference() != null) { +- this.setLastHurtByPlayer(wolf.getOwnerReference().getUUID(), 100); ++ this.setLastHurtByPlayer(wolf.getOwnerReference().getUUID(), this.level().purpurConfig.mobLastHurtByPlayerTime); // Purpur - Config for mob last hurt by player time } else { -@@ -1594,6 +_,18 @@ + this.lastHurtByPlayer = null; + this.lastHurtByPlayerMemoryTime = 0; +@@ -1701,6 +_,18 @@ } } + // Purpur start - Totems work in inventory + if (level().purpurConfig.totemOfUndyingWorksInInventory && this instanceof ServerPlayer player && (itemStack == null || itemStack.getItem() != Items.TOTEM_OF_UNDYING) && player.getBukkitEntity().hasPermission("purpur.inventory_totem")) { -+ for (ItemStack item : player.getInventory().items) { ++ for (ItemStack item : player.getInventory().getNonEquipmentItems()) { + if (item.getItem() == Items.TOTEM_OF_UNDYING) { + itemInHand = item; + itemStack = item.copy(); @@ -138,15 +132,15 @@ final org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null; final EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot); event.setCancelled(itemStack == null); -@@ -1790,6 +_,7 @@ - boolean flag = this.lastHurtByPlayerTime > 0; +@@ -1876,6 +_,7 @@ + boolean flag = this.lastHurtByPlayerMemoryTime > 0; this.dropEquipment(level); // CraftBukkit - from below if (this.shouldDropLoot() && level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { + if (!(damageSource.is(net.minecraft.world.damagesource.DamageTypes.CRAMMING) && level().purpurConfig.disableDropsOnCrammingDeath)) { // Purpur - Disable loot drops on death by cramming this.dropFromLootTable(level, damageSource, flag); // Paper start final boolean prev = this.clearEquipmentSlots; -@@ -1798,6 +_,7 @@ +@@ -1884,6 +_,7 @@ // Paper end this.dropCustomDeathLoot(level, damageSource, flag); this.clearEquipmentSlots = prev; // Paper @@ -154,7 +148,7 @@ } // CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment -@@ -2996,6 +_,7 @@ +@@ -3058,6 +_,7 @@ float f = (float)(d * 10.0 - 3.0); if (f > 0.0F) { this.playSound(this.getFallDamageSound((int)f), 1.0F, 1.0F); @@ -162,7 +156,7 @@ this.hurt(this.damageSources().flyIntoWall(), f); } } -@@ -4423,6 +_,12 @@ +@@ -4452,6 +_,12 @@ ? slot == EquipmentSlot.MAINHAND && this.canUseSlot(EquipmentSlot.MAINHAND) : slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.getType()); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/Mob.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/Mob.java.patch similarity index 83% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/Mob.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/Mob.java.patch index 60238f3b2..453f49b1b 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/Mob.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/Mob.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java -@@ -145,6 +_,7 @@ +@@ -136,6 +_,7 @@ private BlockPos restrictCenter = BlockPos.ZERO; private float restrictRadius = -1.0F; public boolean aware = true; // CraftBukkit @@ -8,7 +8,7 @@ protected Mob(EntityType entityType, Level level) { super(entityType, level); -@@ -294,6 +_,7 @@ +@@ -281,6 +_,7 @@ target = null; } } @@ -16,7 +16,7 @@ this.target = target; return true; // CraftBukkit end -@@ -337,7 +_,27 @@ +@@ -324,7 +_,27 @@ } profilerFiller.pop(); @@ -45,7 +45,7 @@ @Override protected void playHurtSound(DamageSource source) { -@@ -486,6 +_,7 @@ +@@ -420,6 +_,7 @@ compound.putBoolean("NoAI", this.isNoAi()); } compound.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit @@ -53,19 +53,15 @@ } @Override -@@ -568,6 +_,11 @@ - this.aware = compound.getBoolean("Bukkit.Aware"); - } - // CraftBukkit end -+ // Purpur start - Entity lifespan -+ if (compound.contains("Purpur.ticksSinceLastInteraction")) { -+ this.ticksSinceLastInteraction = compound.getInt("Purpur.ticksSinceLastInteraction"); -+ } -+ // Purpur end - Entity lifespan +@@ -443,6 +_,7 @@ + this.lootTableSeed = compound.getLongOr("DeathLootTableSeed", 0L); + this.setNoAi(compound.getBooleanOr("NoAI", false)); + this.aware = compound.getBooleanOr("Bukkit.Aware", true); // CraftBukkit ++ this.ticksSinceLastInteraction = compound.getIntOr("Purpur.ticksSinceLastInteraction", 0); // Purpur- Entity lifespan } @Override -@@ -1282,7 +_,7 @@ +@@ -1167,7 +_,7 @@ ); } @@ -74,7 +70,7 @@ return spawnGroupData; } -@@ -1621,6 +_,7 @@ +@@ -1499,6 +_,7 @@ this.playAttackSound(); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/attributes/RangedAttribute.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/attributes/RangedAttribute.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/attributes/RangedAttribute.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/attributes/RangedAttribute.java.patch diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/behavior/AcquirePoi.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/behavior/AcquirePoi.java.patch new file mode 100644 index 000000000..6e83d6019 --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/behavior/AcquirePoi.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/world/entity/ai/behavior/AcquirePoi.java ++++ b/net/minecraft/world/entity/ai/behavior/AcquirePoi.java +@@ -85,7 +_,7 @@ + } + }; + Set, BlockPos>> set = poiManager.findAllClosestFirstWithType( +- acquirablePois, predicate1, mob.blockPosition(), 48, PoiManager.Occupancy.HAS_SPACE ++ acquirablePois, predicate1, mob.blockPosition(), level.purpurConfig.villagerAcquirePoiSearchRadius, PoiManager.Occupancy.HAS_SPACE // Purpur - Configurable villager search radius + ) + .limit(5L) + .filter(pair1 -> predicate.test(level, pair1.getSecond())) diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/behavior/InteractWithDoor.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/behavior/ShowTradesToPlayer.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/behavior/ShowTradesToPlayer.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/behavior/ShowTradesToPlayer.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/behavior/ShowTradesToPlayer.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/goal/LlamaFollowCaravanGoal.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/goal/LlamaFollowCaravanGoal.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/goal/LlamaFollowCaravanGoal.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/goal/LlamaFollowCaravanGoal.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/goal/RangedBowAttackGoal.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/goal/RangedBowAttackGoal.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/goal/RangedBowAttackGoal.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/goal/RangedBowAttackGoal.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/goal/RunAroundLikeCrazyGoal.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/goal/SwellGoal.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/goal/SwellGoal.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/goal/SwellGoal.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/goal/SwellGoal.java.patch diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java.patch new file mode 100644 index 000000000..c9bc9b7c9 --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java ++++ b/net/minecraft/world/entity/ai/sensing/NearestBedSensor.java +@@ -54,7 +_,7 @@ + } + }; + Set, BlockPos>> set = poiManager.findAllWithType( +- holder -> holder.is(PoiTypes.HOME), predicate, entity.blockPosition(), 48, PoiManager.Occupancy.ANY ++ holder -> holder.is(PoiTypes.HOME), predicate, entity.blockPosition(), level.purpurConfig.villagerNearestBedSensorSearchRadius, PoiManager.Occupancy.ANY // Purpur - Configurable villager search radius + ) + .collect(Collectors.toSet()); + Path path = AcquirePoi.findPathToPois(entity, set); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/targeting/TargetingConditions.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/targeting/TargetingConditions.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ai/targeting/TargetingConditions.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ai/targeting/TargetingConditions.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ambient/Bat.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ambient/Bat.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ambient/Bat.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ambient/Bat.java.patch index fc1ce3bb3..7c4eddca7 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/ambient/Bat.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/ambient/Bat.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/ambient/Bat.java +++ b/net/minecraft/world/entity/ambient/Bat.java -@@ -231,7 +_,7 @@ +@@ -232,7 +_,7 @@ } else { int maxLocalRawBrightness = level.getMaxLocalRawBrightness(pos); int i = 4; @@ -9,7 +9,7 @@ i = 7; } else if (randomSource.nextBoolean()) { return false; -@@ -243,6 +_,11 @@ +@@ -244,6 +_,11 @@ } } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Cow.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/AbstractCow.java.patch similarity index 90% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Cow.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/AbstractCow.java.patch index 61b3e9983..3c0826a05 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Cow.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/AbstractCow.java.patch @@ -1,6 +1,6 @@ ---- a/net/minecraft/world/entity/animal/Cow.java -+++ b/net/minecraft/world/entity/animal/Cow.java -@@ -43,7 +_,7 @@ +--- a/net/minecraft/world/entity/animal/AbstractCow.java ++++ b/net/minecraft/world/entity/animal/AbstractCow.java +@@ -39,7 +_,7 @@ this.goalSelector.addGoal(0, new FloatGoal(this)); this.goalSelector.addGoal(1, new PanicGoal(this, 2.0)); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0)); @@ -9,7 +9,7 @@ this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25)); this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); -@@ -99,6 +_,10 @@ +@@ -95,6 +_,10 @@ ItemStack itemStack = ItemUtils.createFilledResult(itemInHand, player, org.bukkit.craftbukkit.inventory.CraftItemStack.asNMSCopy(event.getItemStack())); // CraftBukkit player.setItemInHand(hand, itemStack); return InteractionResult.SUCCESS; @@ -20,7 +20,7 @@ } else { return super.mobInteract(player, hand); } -@@ -114,4 +_,67 @@ +@@ -104,4 +_,67 @@ public EntityDimensions getDefaultDimensions(Pose pose) { return this.isBaby() ? BABY_DIMENSIONS : super.getDefaultDimensions(pose); } @@ -50,7 +50,7 @@ + } + return InteractionResult.CONSUME; // require 5 mushrooms to transform (prevents mushroom duping) + } -+ MushroomCow mooshroom = EntityType.MOOSHROOM.create(level(), EntitySpawnReason.CONVERSION); ++ MushroomCow mooshroom = EntityType.MOOSHROOM.create(level(), net.minecraft.world.entity.EntitySpawnReason.CONVERSION); + if (mooshroom == null) { + return InteractionResult.PASS; + } @@ -59,7 +59,7 @@ + } else { + mooshroom.setVariant(MushroomCow.Variant.RED); + } -+ mooshroom.moveTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); ++ mooshroom.snapTo(this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); + mooshroom.setHealth(this.getHealth()); + mooshroom.setAge(getAge()); + mooshroom.copyPosition(this); @@ -79,7 +79,7 @@ + stack.shrink(1); + } + for (int i = 0; i < 15; ++i) { -+ ((ServerLevel) level()).sendParticlesSource(((ServerLevel) level()).players(), null, net.minecraft.core.particles.ParticleTypes.HAPPY_VILLAGER, ++ ((net.minecraft.server.level.ServerLevel) level()).sendParticlesSource(((net.minecraft.server.level.ServerLevel) level()).players(), null, net.minecraft.core.particles.ParticleTypes.HAPPY_VILLAGER, + false, true, + getX() + random.nextFloat(), getY() + (random.nextFloat() * 2), getZ() + random.nextFloat(), 1, + random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, random.nextGaussian() * 0.05D, 0); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Animal.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Animal.java.patch similarity index 90% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Animal.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Animal.java.patch index 56a99c436..0f2339b09 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Animal.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Animal.java.patch @@ -14,10 +14,10 @@ AgeableMob breedOffspring = this.getBreedOffspring(level, mate); if (breedOffspring != null) { - breedOffspring.setBaby(true); -- breedOffspring.moveTo(this.getX(), this.getY(), this.getZ(), 0.0F, 0.0F); +- breedOffspring.snapTo(this.getX(), this.getY(), this.getZ(), 0.0F, 0.0F); + //breedOffspring.setBaby(true); // Purpur - Add adjustable breeding cooldown to config - moved down -+ //breedOffspring.moveTo(this.getX(), this.getY(), this.getZ(), 0.0F, 0.0F); // Purpur - Add adjustable breeding cooldown to config - moved down - // CraftBukkit start - call EntityBreedEvent ++ //breedOffspring.snapTo(this.getX(), this.getY(), this.getZ(), 0.0F, 0.0F); // Purpur - Add adjustable breeding cooldown to config - moved down + // CraftBukkit start - Call EntityBreedEvent ServerPlayer breeder = Optional.ofNullable(this.getLoveCause()).or(() -> Optional.ofNullable(mate.getLoveCause())).orElse(null); + // Purpur start - Add adjustable breeding cooldown to config + if (breeder != null && level.purpurConfig.animalBreedingCooldownSeconds > 0) { @@ -27,7 +27,7 @@ + level.addBreedingCooldown(breeder.getUUID(), this.getClass()); + } + breedOffspring.setBaby(true); -+ breedOffspring.moveTo(this.getX(), this.getY(), this.getZ(), 0.0F, 0.0F); ++ breedOffspring.snapTo(this.getX(), this.getY(), this.getZ(), 0.0F, 0.0F); + // Purpur end - Add adjustable breeding cooldown to config int experience = this.getRandom().nextInt(7) + 1; org.bukkit.event.entity.EntityBreedEvent entityBreedEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityBreedEvent(breedOffspring, this, mate, breeder, this.breedItem, experience); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Bee.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Bee.java.patch similarity index 89% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Bee.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Bee.java.patch index 5ee311366..0dbf3c5dc 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Bee.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Bee.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Bee.java +++ b/net/minecraft/world/entity/animal/Bee.java -@@ -163,7 +_,7 @@ +@@ -167,7 +_,7 @@ // Paper end - Fix MC-167279 this.lookControl = new Bee.BeeLookControl(this); this.setPathfindingMalus(PathType.DANGER_FIRE, -1.0F); @@ -13,8 +13,8 @@ } public static boolean isNightOrRaining(Level level) { -- return level.dimensionType().hasSkyLight() && (level.isNight() || level.isRaining()); -+ return level.dimensionType().hasSkyLight() && (level.isNight() && !level.purpurConfig.beeCanWorkAtNight || level.isRaining() && !level.purpurConfig.beeCanWorkInRain); // Purpur - Bee can work when raining or at night +- return level.dimensionType().hasSkyLight() && (level.isDarkOutside() || level.isRaining()); ++ return level.dimensionType().hasSkyLight() && (level.isDarkOutside() && !level.purpurConfig.beeCanWorkAtNight || level.isRaining() && !level.purpurConfig.beeCanWorkInRain); // Purpur - Bee can work when raining or at night } public void setStayOutOfHiveCountdown(int stayOutOfHiveCountdown) { @@ -22,8 +22,8 @@ @Override protected void customServerAiStep(ServerLevel level) { boolean hasStung = this.hasStung(); -- if (this.isInWaterOrBubble()) { -+ if (this.level().purpurConfig.beeCanInstantlyStartDrowning && this.isInWaterOrBubble()) { // Purpur - bee can instantly start drowning in water option +- if (this.isInWater()) { ++ if (this.level().purpurConfig.beeCanInstantlyStartDrowning && this.isInWater()) { // Purpur - bee can instantly start drowning in water option this.underWaterTicks++; } else { this.underWaterTicks = 0; @@ -35,7 +35,7 @@ if (hasStung) { this.timeSinceSting++; if (this.timeSinceSting % 5 == 0 && this.random.nextInt(Mth.clamp(1200 - this.timeSinceSting, 1, 1200)) == 0) { -@@ -1136,6 +_,7 @@ +@@ -1135,6 +_,7 @@ Bee.this.savedFlowerPos = optional.get(); Bee.this.navigation .moveTo(Bee.this.savedFlowerPos.getX() + 0.5, Bee.this.savedFlowerPos.getY() + 0.5, Bee.this.savedFlowerPos.getZ() + 0.5, 1.2F); @@ -43,7 +43,7 @@ return true; } else { Bee.this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(Bee.this.random, 20, 60); -@@ -1182,6 +_,7 @@ +@@ -1181,6 +_,7 @@ this.pollinating = false; Bee.this.navigation.stop(); Bee.this.remainingCooldownBeforeLocatingNewFlower = 200; @@ -51,7 +51,7 @@ } @Override -@@ -1228,6 +_,7 @@ +@@ -1227,6 +_,7 @@ this.setWantedPos(); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Cat.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Cat.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Cat.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Cat.java.patch index 0a8781328..5bbb90ab9 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Cat.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Cat.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Cat.java +++ b/net/minecraft/world/entity/animal/Cat.java -@@ -332,6 +_,14 @@ +@@ -353,6 +_,14 @@ return this.isTame() && otherAnimal instanceof Cat cat && cat.isTame() && super.canMate(otherAnimal); } @@ -15,7 +15,7 @@ @Nullable @Override public SpawnGroupData finalizeSpawn( -@@ -438,7 +_,7 @@ +@@ -451,7 +_,7 @@ } private void tryToTame(Player player) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Dolphin.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Dolphin.java.patch similarity index 89% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Dolphin.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Dolphin.java.patch index 7a3ebe2c4..f5d03cb8f 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Dolphin.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Dolphin.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/world/entity/animal/Dolphin.java +++ b/net/minecraft/world/entity/animal/Dolphin.java -@@ -71,6 +_,7 @@ - private static final int TOTAL_MOISTNESS_LEVEL = 2400; - public static final Predicate ALLOWED_ITEMS = itemEntity -> !itemEntity.hasPickUpDelay() && itemEntity.isAlive() && itemEntity.isInWater(); - public static final float BABY_SCALE = 0.65F; +@@ -73,6 +_,7 @@ + private static final boolean DEFAULT_GOT_FISH = false; + @Nullable + public BlockPos treasurePos; + private boolean isNaturallyAggressiveToPlayers; // Purpur - Dolphins naturally aggressive to players chance public Dolphin(EntityType entityType, Level level) { super(entityType, level); -@@ -87,6 +_,7 @@ +@@ -89,6 +_,7 @@ this.setAirSupply(this.getMaxAirSupply()); this.setXRot(0.0F); SpawnGroupData spawnGroupData1 = Objects.requireNonNullElseGet(spawnGroupData, () -> new AgeableMob.AgeableMobGroupData(0.1F)); @@ -16,7 +16,7 @@ return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData1); } -@@ -169,17 +_,19 @@ +@@ -155,17 +_,19 @@ protected void registerGoals() { this.goalSelector.addGoal(0, new BreathAirGoal(this)); this.goalSelector.addGoal(0, new TryFindWaterGoal(this)); @@ -37,7 +37,7 @@ } public static AttributeSupplier.Builder createAttributes() { -@@ -412,6 +_,7 @@ +@@ -398,6 +_,7 @@ @Override public boolean canUse() { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Fox.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Fox.java.patch similarity index 95% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Fox.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Fox.java.patch index c0f401ee5..283e94dc0 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Fox.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Fox.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Fox.java +++ b/net/minecraft/world/entity/animal/Fox.java -@@ -335,6 +_,11 @@ +@@ -345,6 +_,11 @@ } private void setTargetGoals() { @@ -12,15 +12,15 @@ if (this.getVariant() == Fox.Variant.RED) { this.targetSelector.addGoal(4, this.landTargetGoal); this.targetSelector.addGoal(4, this.turtleEggTargetGoal); -@@ -364,6 +_,7 @@ - @Override +@@ -372,6 +_,7 @@ + public void setVariant(Fox.Variant variant) { this.entityData.set(DATA_TYPE_ID, variant.getId()); + this.setTargetGoals(); // Purpur - Tulips change fox type - fix API bug not updating pathfinders on type change } - List getTrustedUUIDs() { -@@ -684,6 +_,29 @@ + @Nullable +@@ -705,6 +_,29 @@ return slot == EquipmentSlot.MAINHAND; } // Paper end diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/IronGolem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/IronGolem.java.patch similarity index 83% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/IronGolem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/IronGolem.java.patch index 176e8f9bc..bf5dd4962 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/IronGolem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/IronGolem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/IronGolem.java +++ b/net/minecraft/world/entity/animal/IronGolem.java -@@ -56,13 +_,26 @@ +@@ -57,13 +_,26 @@ private int remainingPersistentAngerTime; @Nullable private UUID persistentAngerTarget; @@ -27,23 +27,23 @@ this.goalSelector.addGoal(1, new MeleeAttackGoal(this, 1.0, true)); this.goalSelector.addGoal(2, new MoveTowardsTargetGoal(this, 0.9, 32.0F)); this.goalSelector.addGoal(2, new MoveBackToVillageGoal(this, 0.6, false)); -@@ -140,6 +_,7 @@ +@@ -141,6 +_,7 @@ public void addAdditionalSaveData(CompoundTag compound) { super.addAdditionalSaveData(compound); compound.putBoolean("PlayerCreated", this.isPlayerCreated()); -+ if (getSummoner() != null) compound.putUUID("Purpur.Summoner", getSummoner()); // Purpur - Summoner API ++ compound.storeNullable("Purpur.Summoner", net.minecraft.core.UUIDUtil.CODEC, getSummoner()); // Purpur - Summoner API this.addPersistentAngerSaveData(compound); } -@@ -147,6 +_,7 @@ +@@ -148,6 +_,7 @@ public void readAdditionalSaveData(CompoundTag compound) { super.readAdditionalSaveData(compound); - this.setPlayerCreated(compound.getBoolean("PlayerCreated")); -+ if (compound.contains("Purpur.Summoner")) setSummoner(compound.getUUID("Purpur.Summoner")); // Purpur - Summoner API + this.setPlayerCreated(compound.getBooleanOr("PlayerCreated", false)); ++ this.setSummoner(compound.read("Purpur.Summoner", net.minecraft.core.UUIDUtil.CODEC).orElse(null)); // Purpur - Summoner API this.readPersistentAngerSaveData(this.level(), compound); } -@@ -266,6 +_,7 @@ +@@ -267,6 +_,7 @@ float f = 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F; this.playSound(SoundEvents.IRON_GOLEM_REPAIR, 1.0F, f); itemInHand.consume(1, player); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/MushroomCow.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/MushroomCow.java.patch similarity index 75% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/MushroomCow.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/MushroomCow.java.patch index 1d6651865..48673480a 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/MushroomCow.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/MushroomCow.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/world/entity/animal/MushroomCow.java +++ b/net/minecraft/world/entity/animal/MushroomCow.java -@@ -192,6 +_,13 @@ +@@ -198,6 +_,13 @@ level.playSound(null, this, SoundEvents.MOOSHROOM_SHEAR, soundSource, 1.0F, 1.0F); - this.convertTo(EntityType.COW, ConversionParams.single(this, false, false), mob -> { + this.convertTo(EntityType.COW, ConversionParams.single(this, false, false), cow -> { level.sendParticles(ParticleTypes.EXPLOSION, this.getX(), this.getY(0.5), this.getZ(), 1, 0.0, 0.0, 0.0, 0.0); + // Purpur start - Fix cow rotation when shearing mooshroom -+ mob.copyPosition(this); -+ mob.yBodyRot = this.yBodyRot; -+ mob.setYHeadRot(this.getYHeadRot()); -+ mob.yRotO = this.yRotO; -+ mob.xRotO = this.xRotO; ++ cow.copyPosition(this); ++ cow.yBodyRot = this.yBodyRot; ++ cow.setYHeadRot(this.getYHeadRot()); ++ cow.yRotO = this.yRotO; ++ cow.xRotO = this.xRotO; + // Purpur end - Fix cow rotation when shearing mooshroom // Paper start - custom shear drops; moved drop generation to separate method drops.forEach(drop -> { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Ocelot.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Ocelot.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Ocelot.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Ocelot.java.patch index 419638b78..c54cc0da1 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Ocelot.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Ocelot.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Ocelot.java +++ b/net/minecraft/world/entity/animal/Ocelot.java -@@ -232,7 +_,7 @@ +@@ -233,7 +_,7 @@ public boolean checkSpawnObstruction(LevelReader level) { if (level.isUnobstructed(this) && !level.containsAnyLiquid(this.getBoundingBox())) { BlockPos blockPos = this.blockPosition(); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Parrot.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Parrot.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Parrot.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Parrot.java.patch index 78e2b15e5..4425b62cb 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Parrot.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Parrot.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Parrot.java +++ b/net/minecraft/world/entity/animal/Parrot.java -@@ -152,6 +_,7 @@ +@@ -157,6 +_,7 @@ protected void registerGoals() { this.goalSelector.addGoal(0, new TamableAnimal.TamableAnimalPanicGoal(1.25)); this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -8,7 +8,7 @@ this.goalSelector.addGoal(1, new LookAtPlayerGoal(this, Player.class, 8.0F)); this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(2, new FollowOwnerGoal(this, 1.0, 5.0F, 1.0F)); -@@ -257,7 +_,7 @@ +@@ -262,7 +_,7 @@ } if (!this.level().isClientSide) { @@ -17,7 +17,7 @@ this.tame(player); this.level().broadcastEntityEvent(this, (byte)7); } else { -@@ -265,6 +_,7 @@ +@@ -270,6 +_,7 @@ } } @@ -25,7 +25,7 @@ return InteractionResult.SUCCESS; } else if (!itemInHand.is(ItemTags.PARROT_POISONOUS_FOOD)) { if (!this.isFlying() && this.isTame() && this.isOwnedBy(player)) { -@@ -289,7 +_,7 @@ +@@ -294,7 +_,7 @@ @Override public boolean isFood(ItemStack stack) { @@ -34,7 +34,7 @@ } public static boolean checkParrotSpawnRules( -@@ -304,13 +_,13 @@ +@@ -309,13 +_,13 @@ @Override public boolean canMate(Animal otherAnimal) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Pig.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Pig.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Pig.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Pig.java.patch index 7ae89deb5..7375398f0 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Pig.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Pig.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Pig.java +++ b/net/minecraft/world/entity/animal/Pig.java -@@ -132,6 +_,19 @@ +@@ -141,6 +_,19 @@ @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { boolean isFood = this.isFood(player.getItemInHand(hand)); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/PolarBear.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/PolarBear.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/PolarBear.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/PolarBear.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Rabbit.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Rabbit.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Rabbit.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Rabbit.java.patch index ed0b1c6aa..930cde3c7 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Rabbit.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Rabbit.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/Rabbit.java +++ b/net/minecraft/world/entity/animal/Rabbit.java -@@ -376,10 +_,23 @@ +@@ -403,10 +_,23 @@ } this.setVariant(randomRabbitVariant); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/SnowGolem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/SnowGolem.java.patch similarity index 81% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/SnowGolem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/SnowGolem.java.patch index b6401d764..b73653343 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/SnowGolem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/SnowGolem.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/world/entity/animal/SnowGolem.java +++ b/net/minecraft/world/entity/animal/SnowGolem.java -@@ -44,15 +_,27 @@ - public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackMob { +@@ -45,15 +_,27 @@ private static final EntityDataAccessor DATA_PUMPKIN_ID = SynchedEntityData.defineId(SnowGolem.class, EntityDataSerializers.BYTE); private static final byte PUMPKIN_FLAG = 16; + private static final boolean DEFAULT_PUMPKIN = true; + @Nullable private java.util.UUID summoner; // Purpur - Summoner API public SnowGolem(EntityType entityType, Level level) { @@ -30,23 +30,22 @@ this.goalSelector.addGoal(3, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(4, new RandomLookAroundGoal(this)); this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Mob.class, 10, true, false, (entity, level) -> entity instanceof Enemy)); -@@ -72,6 +_,7 @@ +@@ -73,12 +_,14 @@ public void addAdditionalSaveData(CompoundTag compound) { super.addAdditionalSaveData(compound); compound.putBoolean("Pumpkin", this.hasPumpkin()); -+ if (getSummoner() != null) compound.putUUID("Purpur.Summoner", getSummoner()); // Purpur - Summoner API ++ compound.storeNullable("Purpur.Summoner", net.minecraft.core.UUIDUtil.CODEC, getSummoner()); // Purpur - Summoner API } @Override -@@ -80,6 +_,7 @@ - if (compound.contains("Pumpkin")) { - this.setPumpkin(compound.getBoolean("Pumpkin")); - } -+ if (compound.contains("Purpur.Summoner")) setSummoner(compound.getUUID("Purpur.Summoner")); // Purpur - Summoner API + public void readAdditionalSaveData(CompoundTag compound) { + super.readAdditionalSaveData(compound); + this.setPumpkin(compound.getBooleanOr("Pumpkin", true)); ++ this.setSummoner(compound.read("Purpur.Summoner", net.minecraft.core.UUIDUtil.CODEC).orElse(null)); // Purpur - Summoner API } @Override -@@ -153,6 +_,14 @@ +@@ -152,6 +_,14 @@ } return InteractionResult.SUCCESS; diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Squid.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Squid.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Squid.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Squid.java.patch index af92a24dd..83c0aed86 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Squid.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/Squid.java.patch @@ -34,12 +34,12 @@ @@ -127,6 +_,7 @@ } - if (this.isInWaterOrBubble()) { + if (this.isInWater()) { + if (canFly()) setNoGravity(!wasTouchingWater); // Purpur - Flying squids! Oh my! if (this.tentacleMovement < (float) Math.PI) { float f = this.tentacleMovement / (float) Math.PI; this.tentacleAngle = Mth.sin(f * f * (float) Math.PI) * (float) Math.PI * 0.25F; -@@ -310,7 +_,7 @@ +@@ -308,7 +_,7 @@ int noActionTime = this.squid.getNoActionTime(); if (noActionTime > 100) { this.squid.movementVector = Vec3.ZERO; diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/WaterAnimal.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/WaterAnimal.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/WaterAnimal.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/WaterAnimal.java.patch index b42850fc8..3552d2bfc 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/WaterAnimal.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/WaterAnimal.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/WaterAnimal.java +++ b/net/minecraft/world/entity/animal/WaterAnimal.java -@@ -74,8 +_,7 @@ +@@ -76,8 +_,7 @@ seaLevel = level.getMinecraftWorld().paperConfig().entities.spawning.wateranimalSpawnHeight.maximum.or(seaLevel); i = level.getMinecraftWorld().paperConfig().entities.spawning.wateranimalSpawnHeight.minimum.or(i); // Paper end - Make water animal spawn height configurable diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/goat/Goat.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/goat/Goat.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/goat/Goat.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/goat/Goat.java.patch index 11559576e..4cd0aeca3 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/goat/Goat.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/goat/Goat.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java -@@ -392,6 +_,7 @@ +@@ -395,6 +_,7 @@ // Paper start - Goat ram API public void ram(net.minecraft.world.entity.LivingEntity entity) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/horse/Llama.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/horse/Llama.java.patch similarity index 76% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/horse/Llama.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/horse/Llama.java.patch index c0e613a83..ccbc13a99 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/horse/Llama.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/horse/Llama.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/animal/horse/Llama.java +++ b/net/minecraft/world/entity/animal/horse/Llama.java -@@ -72,6 +_,7 @@ +@@ -77,6 +_,7 @@ private Llama caravanHead; @Nullable public Llama caravanTail; // Paper @@ -8,23 +8,23 @@ public Llama(EntityType entityType, Level level) { super(entityType, level); -@@ -106,6 +_,7 @@ +@@ -111,6 +_,7 @@ super.addAdditionalSaveData(compound); - compound.putInt("Variant", this.getVariant().id); + compound.store("Variant", Llama.Variant.LEGACY_CODEC, this.getVariant()); compound.putInt("Strength", this.getStrength()); + compound.putBoolean("Purpur.ShouldJoinCaravan", shouldJoinCaravan); // Purpur - Llama API } @Override -@@ -113,6 +_,7 @@ - this.setStrength(compound.getInt("Strength")); +@@ -118,6 +_,7 @@ + this.setStrength(compound.getIntOr("Strength", 0)); super.readAdditionalSaveData(compound); - this.setVariant(Llama.Variant.byId(compound.getInt("Variant"))); -+ if (compound.contains("Purpur.ShouldJoinCaravan")) this.shouldJoinCaravan = compound.getBoolean("Purpur.ShouldJoinCaravan"); // Purpur - Llama API + this.setVariant(compound.read("Variant", Llama.Variant.LEGACY_CODEC).orElse(Llama.Variant.DEFAULT)); ++ this.shouldJoinCaravan = compound.getBooleanOr("Purpur.ShouldJoinCaravan", true); // Purpur - Llama API } @Override -@@ -386,6 +_,7 @@ +@@ -399,6 +_,7 @@ public void leaveCaravan() { if (this.caravanHead != null) { @@ -32,7 +32,7 @@ this.caravanHead.caravanTail = null; } -@@ -393,6 +_,7 @@ +@@ -406,6 +_,7 @@ } public void joinCaravan(Llama caravanHead) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Wolf.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/wolf/Wolf.java.patch similarity index 85% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Wolf.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/wolf/Wolf.java.patch index 224a6bae3..491dc4363 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/animal/Wolf.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/animal/wolf/Wolf.java.patch @@ -1,6 +1,6 @@ ---- a/net/minecraft/world/entity/animal/Wolf.java -+++ b/net/minecraft/world/entity/animal/Wolf.java -@@ -94,6 +_,37 @@ +--- a/net/minecraft/world/entity/animal/wolf/Wolf.java ++++ b/net/minecraft/world/entity/animal/wolf/Wolf.java +@@ -100,6 +_,37 @@ EntityType type = entity.getType(); return type == EntityType.SHEEP || type == EntityType.RABBIT || type == EntityType.FOX; }; @@ -38,7 +38,7 @@ private static final float START_HEALTH = 8.0F; private static final float TAME_HEALTH = 40.0F; private static final float ARMOR_REPAIR_UNIT = 0.125F; -@@ -115,12 +_,47 @@ +@@ -122,12 +_,47 @@ this.setPathfindingMalus(PathType.DANGER_POWDER_SNOW, -1.0F); } @@ -86,38 +86,38 @@ this.goalSelector.addGoal(4, new LeapAtTargetGoal(this, 0.4F)); this.goalSelector.addGoal(5, new MeleeAttackGoal(this, 1.0, true)); this.goalSelector.addGoal(6, new FollowOwnerGoal(this, 1.0, 10.0F, 2.0F)); -@@ -133,7 +_,7 @@ +@@ -140,7 +_,7 @@ this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this)); this.targetSelector.addGoal(3, new HurtByTargetGoal(this).setAlertOthers()); this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt)); - this.targetSelector.addGoal(5, new NonTameRandomTargetGoal<>(this, Animal.class, false, PREY_SELECTOR)); -+ // this.targetSelector.addGoal(5, new NonTameRandomTargetGoal<>(this, Animal.class, false, PREY_SELECTOR)); // Purpur - Configurable chance for wolves to spawn rabid - moved to updatePathfinders() ++ //this.targetSelector.addGoal(5, new NonTameRandomTargetGoal<>(this, Animal.class, false, PREY_SELECTOR)); // Purpur - Configurable chance for wolves to spawn rabid - moved to updatePathfinders() this.targetSelector.addGoal(6, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR)); this.targetSelector.addGoal(7, new NearestAttackableTargetGoal<>(this, AbstractSkeleton.class, false)); this.targetSelector.addGoal(8, new ResetUniversalAngerTargetGoal<>(this, true)); -@@ -182,6 +_,7 @@ +@@ -231,6 +_,7 @@ public void addAdditionalSaveData(CompoundTag compound) { super.addAdditionalSaveData(compound); - compound.putByte("CollarColor", (byte)this.getCollarColor().getId()); + compound.store("CollarColor", DyeColor.LEGACY_ID_CODEC, this.getCollarColor()); + compound.putBoolean("Purpur.IsRabid", this.isRabid); // Purpur - Configurable chance for wolves to spawn rabid - this.getVariant().unwrapKey().ifPresent(resourceKey -> compound.putString("variant", resourceKey.location().toString())); + VariantUtils.writeVariant(compound, this.getVariant()); this.addPersistentAngerSaveData(compound); - } -@@ -196,6 +_,10 @@ - if (compound.contains("CollarColor", 99)) { - this.setCollarColor(DyeColor.byId(compound.getInt("CollarColor"))); - } + this.getSoundVariant() +@@ -245,6 +_,10 @@ + super.readAdditionalSaveData(compound); + VariantUtils.readVariant(compound, this.registryAccess(), Registries.WOLF_VARIANT).ifPresent(this::setVariant); + this.setCollarColor(compound.read("CollarColor", DyeColor.LEGACY_ID_CODEC).orElse(DEFAULT_COLLAR_COLOR)); + // Purpur start - Configurable chance for wolves to spawn rabid -+ this.isRabid = compound.getBoolean("Purpur.IsRabid"); ++ this.isRabid = compound.getBooleanOr("Purpur.IsRabid", false); + this.updatePathfinders(false); + // Purpur end - Configurable chance for wolves to spawn rabid - this.readPersistentAngerSaveData(this.level(), compound); - } -@@ -215,6 +_,10 @@ + compound.read("sound_variant", ResourceKey.codec(Registries.WOLF_SOUND_VARIANT)) + .flatMap(resourceKey -> this.registryAccess().lookupOrThrow(Registries.WOLF_SOUND_VARIANT).get((ResourceKey)resourceKey)) +@@ -269,6 +_,10 @@ } - this.setVariant(holder); + this.setSoundVariant(WolfSoundVariants.pickRandomSoundVariant(this.registryAccess(), this.random)); + // Purpur start - Configurable chance for wolves to spawn rabid + this.isRabid = level.getLevel().purpurConfig.wolfNaturalRabid > 0.0D && random.nextDouble() <= level.getLevel().purpurConfig.wolfNaturalRabid; + this.updatePathfinders(false); @@ -125,7 +125,7 @@ return super.finalizeSpawn(level, difficulty, spawnReason, spawnGroupData); } -@@ -263,6 +_,11 @@ +@@ -319,6 +_,11 @@ public void tick() { super.tick(); if (this.isAlive()) { @@ -137,7 +137,7 @@ this.interestedAngleO = this.interestedAngle; if (this.isInterested()) { this.interestedAngle = this.interestedAngle + (1.0F - this.interestedAngle) * 0.4F; -@@ -481,13 +_,27 @@ +@@ -532,13 +_,27 @@ itemInHand.consume(1, player); this.tryToTame(player); return InteractionResult.SUCCESS_SERVER; diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java.patch similarity index 99% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java.patch index 5deaa74ba..607381a02 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java.patch @@ -34,7 +34,7 @@ } @Override -@@ -119,15 +_,17 @@ +@@ -114,15 +_,17 @@ } // CraftBukkit end if (!damageSource.is(DamageTypeTags.IS_EXPLOSION)) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch similarity index 85% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch index e07733ccf..6a075e024 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -@@ -974,6 +_,7 @@ +@@ -960,6 +_,7 @@ @Override protected boolean canRide(Entity entity) { @@ -8,8 +8,8 @@ return false; } -@@ -1009,7 +_,7 @@ - boolean flag = worldserver.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT); +@@ -995,7 +_,7 @@ + boolean flag = level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT); int i = 500; - if (this.dragonFight != null && !this.dragonFight.hasPreviouslyKilledDragon()) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch similarity index 88% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch index 30e1ffb25..a38519604 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/boss/wither/WitherBoss.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -77,6 +_,7 @@ +@@ -78,6 +_,7 @@ private static final TargetingConditions.Selector LIVING_ENTITY_SELECTOR = (entity, level) -> !entity.getType().is(EntityTypeTags.WITHER_FRIENDS) && entity.attackable(); private static final TargetingConditions TARGETING_CONDITIONS = TargetingConditions.forCombat().range(20.0).selector(LIVING_ENTITY_SELECTOR); @@ -8,7 +8,7 @@ public WitherBoss(EntityType entityType, Level level) { super(entityType, level); -@@ -85,6 +_,17 @@ +@@ -86,6 +_,17 @@ this.xpReward = 50; } @@ -26,23 +26,23 @@ @Override protected PathNavigation createNavigation(Level level) { FlyingPathNavigation flyingPathNavigation = new FlyingPathNavigation(this, level); -@@ -117,6 +_,7 @@ +@@ -118,6 +_,7 @@ public void addAdditionalSaveData(CompoundTag compound) { super.addAdditionalSaveData(compound); compound.putInt("Invul", this.getInvulnerableTicks()); -+ if (getSummoner() != null) compound.putUUID("Purpur.Summoner", getSummoner()); // Purpur - Summoner API ++ compound.storeNullable("Purpur.Summoner", net.minecraft.core.UUIDUtil.CODEC, getSummoner()); // Purpur - Summoner API } @Override -@@ -126,6 +_,7 @@ +@@ -127,6 +_,7 @@ if (this.hasCustomName()) { this.bossEvent.setName(this.getDisplayName()); } -+ if (compound.contains("Purpur.Summoner")) setSummoner(compound.getUUID("Purpur.Summoner")); // Purpur - Summoner API ++ this.setSummoner(compound.read("Purpur.Summoner", net.minecraft.core.UUIDUtil.CODEC).orElse(null)); // Purpur - Summoner API } @Override -@@ -269,7 +_,7 @@ +@@ -270,7 +_,7 @@ level.explode(this, this.getX(), this.getEyeY(), this.getZ(), event.getRadius(), event.getFire(), Level.ExplosionInteraction.MOB); } // CraftBukkit end @@ -51,7 +51,7 @@ // CraftBukkit start - Use relative location for far away sounds // level.globalLevelEvent(1023, this.blockPosition(), 0); int viewDistance = level.getCraftServer().getViewDistance() * 16; -@@ -376,8 +_,10 @@ +@@ -377,8 +_,10 @@ } } @@ -64,7 +64,7 @@ } this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); -@@ -574,6 +_,7 @@ +@@ -575,6 +_,7 @@ @Override protected boolean canRide(Entity entity) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/decoration/ArmorStand.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/decoration/ArmorStand.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/decoration/ArmorStand.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/decoration/ArmorStand.java.patch index 1ac4c29b0..4690f775c 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/decoration/ArmorStand.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/decoration/ArmorStand.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -93,10 +_,13 @@ +@@ -95,10 +_,13 @@ private boolean noTickPoseDirty = false; private boolean noTickEquipmentDirty = false; // Paper end - Allow ArmorStands not to tick @@ -14,7 +14,7 @@ } public ArmorStand(Level level, double x, double y, double z) { -@@ -620,6 +_,7 @@ +@@ -538,6 +_,7 @@ @Override public void tick() { @@ -22,7 +22,7 @@ // Paper start - Allow ArmorStands not to tick if (!this.canTick) { if (this.noTickPoseDirty) { -@@ -949,4 +_,18 @@ +@@ -867,4 +_,18 @@ } } // Paper end diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/item/ItemEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/item/ItemEntity.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/item/ItemEntity.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/item/ItemEntity.java.patch index 024469799..5f326c938 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/item/ItemEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/item/ItemEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/item/ItemEntity.java +++ b/net/minecraft/world/entity/item/ItemEntity.java -@@ -52,6 +_,12 @@ +@@ -59,6 +_,12 @@ public boolean canMobPickup = true; // Paper - Item#canEntityPickup private int despawnRate = -1; // Paper - Alternative item-despawn-rate public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API @@ -13,7 +13,7 @@ public ItemEntity(EntityType entityType, Level level) { super(entityType, level); -@@ -337,7 +_,16 @@ +@@ -344,7 +_,16 @@ @Override public final boolean hurtServer(ServerLevel level, DamageSource damageSource, float amount) { @@ -31,7 +31,7 @@ return false; } else if (!level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && damageSource.getEntity() instanceof Mob) { return false; -@@ -539,6 +_,12 @@ +@@ -528,6 +_,12 @@ public void setItem(ItemStack stack) { this.getEntityData().set(DATA_ITEM, stack); this.despawnRate = this.level().paperConfig().entities.spawning.altItemDespawnRate.enabled ? this.level().paperConfig().entities.spawning.altItemDespawnRate.items.getOrDefault(stack.getItem(), this.level().spigotConfig.itemDespawnRate) : this.level().spigotConfig.itemDespawnRate; // Paper - Alternative item-despawn-rate diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/item/PrimedTnt.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/item/PrimedTnt.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/item/PrimedTnt.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/item/PrimedTnt.java.patch index eb0ed35f3..052ef78b6 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/item/PrimedTnt.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/item/PrimedTnt.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/item/PrimedTnt.java +++ b/net/minecraft/world/entity/item/PrimedTnt.java -@@ -251,4 +_,32 @@ +@@ -253,4 +_,32 @@ return !this.level().paperConfig().fixes.preventTntFromMovingInWater && super.isPushedByFluid(); } // Paper end - Option to prevent TNT from moving in water diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/AbstractSkeleton.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/AbstractSkeleton.java.patch similarity index 95% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/AbstractSkeleton.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/AbstractSkeleton.java.patch index 37349cc6c..af806331a 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/AbstractSkeleton.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/AbstractSkeleton.java.patch @@ -10,7 +10,7 @@ - if (i1 == 10 && i == 31 && random.nextFloat() < 0.25F) { + if (net.minecraft.world.entity.ambient.Bat.isHalloweenSeason(level.getMinecraftWorld()) && this.random.nextFloat() < this.level().purpurConfig.chanceHeadHalloweenOnEntity) { // Purpur - Halloween options and optimizations this.setItemSlot(EquipmentSlot.HEAD, new ItemStack(random.nextFloat() < 0.1F ? Blocks.JACK_O_LANTERN : Blocks.CARVED_PUMPKIN)); - this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; + this.setDropChance(EquipmentSlot.HEAD, 0.0F); } @@ -217,7 +_,7 @@ if (event.getProjectile() == arrow.getBukkitEntity()) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Creeper.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Creeper.java.patch similarity index 93% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Creeper.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Creeper.java.patch index c3719371c..803176349 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Creeper.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Creeper.java.patch @@ -1,18 +1,19 @@ --- a/net/minecraft/world/entity/monster/Creeper.java +++ b/net/minecraft/world/entity/monster/Creeper.java -@@ -50,6 +_,7 @@ +@@ -54,6 +_,7 @@ public int explosionRadius = 3; private int droppedSkulls; - public Entity entityIgniter; // CraftBukkit + public @Nullable Entity entityIgniter; // CraftBukkit + private boolean exploding = false; // Purpur - Config to make Creepers explode on death public Creeper(EntityType entityType, Level level) { super(entityType, level); -@@ -161,6 +_,26 @@ - } +@@ -157,6 +_,27 @@ + return false; // CraftBukkit } + // Purpur start - Special mobs naturally spawn ++ @Override + public net.minecraft.world.entity.SpawnGroupData finalizeSpawn(net.minecraft.world.level.ServerLevelAccessor world, net.minecraft.world.DifficultyInstance difficulty, net.minecraft.world.entity.EntitySpawnReason spawnReason, @Nullable net.minecraft.world.entity.SpawnGroupData entityData) { + double chance = world.getLevel().purpurConfig.creeperChargedChance; + if (chance > 0D && random.nextDouble() <= chance) { @@ -33,9 +34,9 @@ + // Purpur end - Config to make Creepers explode on death + @Override - protected SoundEvent getHurtSound(DamageSource damageSource) { + public SoundEvent getHurtSound(DamageSource damageSource) { return SoundEvents.CREEPER_HURT; -@@ -243,14 +_,16 @@ +@@ -239,14 +_,16 @@ } public void explodeCreeper() { @@ -54,7 +55,7 @@ this.spawnLingeringCloud(); this.triggerOnDeathMobEffects(serverLevel, Entity.RemovalReason.KILLED); this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.EXPLODE); // CraftBukkit - add Bukkit remove cause -@@ -261,6 +_,7 @@ +@@ -257,6 +_,7 @@ } // CraftBukkit end } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Drowned.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Drowned.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Drowned.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Drowned.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/EnderMan.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/EnderMan.java.patch similarity index 80% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/EnderMan.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/EnderMan.java.patch index bac97afe7..4ae69d3a7 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/EnderMan.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/EnderMan.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java -@@ -102,7 +_,7 @@ +@@ -103,7 +_,7 @@ this.goalSelector.addGoal(11, new EnderMan.EndermanTakeBlockGoal(this)); this.targetSelector.addGoal(1, new EnderMan.EndermanLookForPlayerGoal(this, this::isAngryAt)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this)); @@ -9,32 +9,32 @@ this.targetSelector.addGoal(4, new ResetUniversalAngerTargetGoal<>(this, false)); } -@@ -230,7 +_,7 @@ +@@ -220,7 +_,7 @@ boolean isBeingStaredBy(Player player) { // Paper start - EndermanAttackPlayerEvent -- final boolean shouldAttack = isBeingStaredBy0(player); -+ final boolean shouldAttack = !this.level().purpurConfig.endermanDisableStareAggro && isBeingStaredBy0(player); // Purpur - Config to ignore Dragon Head wearers and stare aggro +- final boolean shouldAttack = this.isBeingStaredBy0(player); ++ final boolean shouldAttack = !this.level().purpurConfig.endermanDisableStareAggro && this.isBeingStaredBy0(player); // Purpur - Config to ignore Dragon Head wearers and stare aggro final com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent event = new com.destroystokyo.paper.event.entity.EndermanAttackPlayerEvent((org.bukkit.entity.Enderman) getBukkitEntity(), (org.bukkit.entity.Player) player.getBukkitEntity()); event.setCancelled(!shouldAttack); return event.callEvent(); -@@ -385,6 +_,7 @@ +@@ -376,6 +_,7 @@ public boolean hurtServer(ServerLevel level, DamageSource damageSource, float amount) { if (this.isInvulnerableTo(level, damageSource)) { return false; + } else if (org.purpurmc.purpur.PurpurConfig.endermanShortHeight && damageSource.is(net.minecraft.world.damagesource.DamageTypes.IN_WALL)) { return false; // Purpur - no suffocation damage if short height - Short enderman height } else { - boolean flag = damageSource.getDirectEntity() instanceof ThrownPotion; - if (!damageSource.is(DamageTypeTags.IS_PROJECTILE) && !flag) { -@@ -397,6 +_,7 @@ + AbstractThrownPotion abstractThrownPotion1 = damageSource.getDirectEntity() instanceof AbstractThrownPotion abstractThrownPotion + ? abstractThrownPotion +@@ -390,6 +_,7 @@ } else { - boolean flag1 = flag && this.hurtWithCleanWater(level, damageSource, (ThrownPotion)damageSource.getDirectEntity(), amount); + boolean flag = abstractThrownPotion1 != null && this.hurtWithCleanWater(level, damageSource, abstractThrownPotion1, amount); -+ if (!flag1 && level.purpurConfig.endermanIgnoreProjectiles) return super.hurtServer(level, damageSource, amount); // Purpur - Config to disable Enderman teleport on projectile hit ++ if (!flag && level.purpurConfig.endermanIgnoreProjectiles) return super.hurtServer(level, damageSource, amount); // Purpur - Config to disable Enderman teleport on projectile hit if (this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.INDIRECT)) { // Paper - EndermanEscapeEvent for (int i = 0; i < 64; i++) { if (this.teleport()) { -@@ -440,7 +_,7 @@ +@@ -433,7 +_,7 @@ @Override public boolean requiresCustomPersistence() { @@ -43,7 +43,7 @@ } static class EndermanFreezeWhenLookedAt extends Goal { -@@ -484,6 +_,7 @@ +@@ -477,6 +_,7 @@ @Override public boolean canUse() { @@ -51,7 +51,7 @@ return this.enderman.getCarriedBlock() != null && getServerLevel(this.enderman).getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && this.enderman.getRandom().nextInt(reducedTickDelay(2000)) == 0; -@@ -633,6 +_,7 @@ +@@ -626,6 +_,7 @@ @Override public boolean canUse() { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Endermite.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Endermite.java.patch similarity index 81% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Endermite.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Endermite.java.patch index 9965430e8..60b09997d 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Endermite.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Endermite.java.patch @@ -1,9 +1,9 @@ --- a/net/minecraft/world/entity/monster/Endermite.java +++ b/net/minecraft/world/entity/monster/Endermite.java -@@ -28,12 +_,23 @@ - public class Endermite extends Monster { +@@ -29,12 +_,23 @@ private static final int MAX_LIFE = 2400; - public int life; + private static final int DEFAULT_LIFE = 0; + public int life = 0; + private boolean isPlayerSpawned; // Purpur - Add back player spawned endermite API public Endermite(EntityType entityType, Level level) { @@ -24,11 +24,11 @@ @Override protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); -@@ -79,12 +_,14 @@ +@@ -80,12 +_,14 @@ public void readAdditionalSaveData(CompoundTag compound) { super.readAdditionalSaveData(compound); - this.life = compound.getInt("Lifetime"); -+ this.isPlayerSpawned = compound.getBoolean("PlayerSpawned"); // Purpur - Add back player spawned endermite API + this.life = compound.getIntOr("Lifetime", 0); ++ this.isPlayerSpawned = compound.getBooleanOr("PlayerSpawned", false); // Purpur - Add back player spawned endermite API } @Override diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Monster.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Monster.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Monster.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Monster.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Phantom.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Phantom.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Phantom.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Phantom.java.patch index acec89121..0374fac35 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Phantom.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Phantom.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Phantom.java +++ b/net/minecraft/world/entity/monster/Phantom.java -@@ -158,7 +_,11 @@ +@@ -159,7 +_,11 @@ ServerLevelAccessor level, DifficultyInstance difficulty, EntitySpawnReason spawnReason, @Nullable SpawnGroupData spawnGroupData ) { this.anchorPoint = this.blockPosition().above(5); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Ravager.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Ravager.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Ravager.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Ravager.java.patch index 6e2afb392..f593040b8 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Ravager.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Ravager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Ravager.java +++ b/net/minecraft/world/entity/monster/Ravager.java -@@ -70,6 +_,7 @@ +@@ -73,6 +_,7 @@ protected void registerGoals() { super.registerGoals(); this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -8,7 +8,7 @@ this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0, true)); this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.4)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); -@@ -150,7 +_,7 @@ +@@ -153,7 +_,7 @@ )) { BlockState blockState = serverLevel.getBlockState(blockPos); Block block = blockState.getBlock(); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Shulker.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Shulker.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Shulker.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Shulker.java.patch index eee30bbe5..5b9b6f4ed 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Shulker.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Shulker.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Shulker.java +++ b/net/minecraft/world/entity/monster/Shulker.java -@@ -50,6 +_,7 @@ +@@ -53,6 +_,7 @@ import net.minecraft.world.level.ServerLevelAccessor; import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; @@ -8,7 +8,7 @@ import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.Vec3; -@@ -88,6 +_,21 @@ +@@ -93,6 +_,21 @@ this.lookControl = new Shulker.ShulkerLookControl(this); } @@ -30,7 +30,7 @@ @Override protected void registerGoals() { this.goalSelector.addGoal(1, new LookAtPlayerGoal(this, Player.class, 8.0F, 0.02F, true)); -@@ -459,11 +_,21 @@ +@@ -460,11 +_,21 @@ private void hitByShulkerBullet() { Vec3 vec3 = this.position(); AABB boundingBox = this.getBoundingBox(); @@ -55,10 +55,10 @@ + // Purpur end - Shulker spawn from bullet options if (shulker != null) { shulker.setVariant(this.getVariant()); - shulker.moveTo(vec3); -@@ -573,7 +_,7 @@ + shulker.snapTo(vec3); +@@ -572,7 +_,7 @@ + } - @Override public Optional getVariant() { - return Optional.ofNullable(this.getColor()); + return Optional.ofNullable(this.level().purpurConfig.shulkerSpawnFromBulletRandomColor ? DyeColor.random(this.level().random) : this.getColor()); // Purpur - Shulker spawn from bullet options diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Skeleton.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Skeleton.java.patch similarity index 99% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Skeleton.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Skeleton.java.patch index bba419b18..aaa94033d 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Skeleton.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Skeleton.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Skeleton.java +++ b/net/minecraft/world/entity/monster/Skeleton.java -@@ -135,4 +_,64 @@ +@@ -139,4 +_,64 @@ this.spawnAtLocation(level, Items.SKELETON_SKULL); } } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Strider.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Strider.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Strider.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Strider.java.patch index efb04f5ac..5ae8300da 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Strider.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Strider.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Strider.java +++ b/net/minecraft/world/entity/monster/Strider.java -@@ -414,6 +_,19 @@ +@@ -392,6 +_,19 @@ @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { boolean isFood = this.isFood(player.getItemInHand(hand)); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Vindicator.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Vindicator.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Vindicator.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Vindicator.java.patch index fe07bf809..26ace8b3e 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Vindicator.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Vindicator.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Vindicator.java +++ b/net/minecraft/world/entity/monster/Vindicator.java -@@ -132,6 +_,11 @@ +@@ -131,6 +_,11 @@ RandomSource random = level.getRandom(); this.populateDefaultEquipmentSlots(random, difficulty); this.populateDefaultEquipmentEnchantments(level, random, difficulty); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Zombie.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Zombie.java.patch similarity index 95% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Zombie.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Zombie.java.patch index ba29551ef..ade69a8e9 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/Zombie.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/Zombie.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/Zombie.java +++ b/net/minecraft/world/entity/monster/Zombie.java -@@ -114,7 +_,19 @@ +@@ -118,7 +_,19 @@ this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0)); this.targetSelector.addGoal(1, new HurtByTargetGoal(this).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); @@ -21,7 +21,7 @@ this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); } -@@ -550,10 +_,7 @@ +@@ -552,10 +_,7 @@ } if (this.getItemBySlot(EquipmentSlot.HEAD).isEmpty()) { @@ -31,5 +31,5 @@ - if (i1 == 10 && i == 31 && random.nextFloat() < 0.25F) { + if (net.minecraft.world.entity.ambient.Bat.isHalloweenSeason(level.getMinecraftWorld()) && this.random.nextFloat() < this.level().purpurConfig.chanceHeadHalloweenOnEntity) { // Purpur - Halloween options and optimizations this.setItemSlot(EquipmentSlot.HEAD, new ItemStack(random.nextFloat() < 0.1F ? Blocks.JACK_O_LANTERN : Blocks.CARVED_PUMPKIN)); - this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; + this.setDropChance(EquipmentSlot.HEAD, 0.0F); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/ZombieVillager.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombieVillager.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/ZombieVillager.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombieVillager.java.patch index e5517a82e..0fd354794 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/ZombieVillager.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombieVillager.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -156,10 +_,10 @@ +@@ -130,10 +_,10 @@ public InteractionResult mobInteract(Player player, InteractionHand hand) { ItemStack itemInHand = player.getItemInHand(hand); if (itemInHand.is(Items.GOLDEN_APPLE)) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombifiedPiglin.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombifiedPiglin.java.patch new file mode 100644 index 000000000..7dbc3be98 --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/ZombifiedPiglin.java.patch @@ -0,0 +1,28 @@ +--- a/net/minecraft/world/entity/monster/ZombifiedPiglin.java ++++ b/net/minecraft/world/entity/monster/ZombifiedPiglin.java +@@ -112,6 +_,12 @@ + this.maybeAlertOthers(); + } + ++ // Purpur start - Toggle for Zombified Piglin death always counting as player kill when angry ++ if (this.isAngry() && this.level().purpurConfig.zombifiedPiglinCountAsPlayerKillWhenAngry) { ++ this.lastHurtByPlayerMemoryTime = this.tickCount; ++ } ++ // Purpur end - Toggle for Zombified Piglin death always counting as player kill when angry ++ + super.customServerAiStep(level); + } + +@@ -158,6 +_,12 @@ + this.playFirstAngerSoundIn = FIRST_ANGER_SOUND_DELAY.sample(this.random); + this.ticksUntilNextAlert = ALERT_INTERVAL.sample(this.random); + } ++ ++ // Purpur start - Toggle for Zombified Piglin death always counting as player kill when angry ++ if (livingEntity instanceof Player player && this.level().purpurConfig.zombifiedPiglinCountAsPlayerKillWhenAngry) { ++ this.setLastHurtByPlayer(player, this.tickCount); ++ } ++ // Purpur end - Toggle for Zombified Piglin death always counting as player kill when angry + + return super.setTarget(livingEntity, reason); // CraftBukkit + } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch similarity index 66% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch index c7ccb700d..1c6e7e4c3 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/monster/piglin/PiglinAi.java.patch @@ -1,19 +1,14 @@ --- a/net/minecraft/world/entity/monster/piglin/PiglinAi.java +++ b/net/minecraft/world/entity/monster/piglin/PiglinAi.java -@@ -4,6 +_,7 @@ - import com.google.common.collect.ImmutableSet; - import com.mojang.datafixers.util.Pair; - import java.util.Collections; -+import java.util.Iterator; - import java.util.List; - import java.util.Optional; - import net.minecraft.server.level.ServerLevel; -@@ -666,13 +_,20 @@ +@@ -661,13 +_,23 @@ public static boolean isWearingSafeArmor(LivingEntity entity) { - for (ItemStack itemStack : entity.getArmorAndBodyArmorSlots()) { -- if (itemStack.is(ItemTags.PIGLIN_SAFE_ARMOR)) { -+ if (itemStack.is(ItemTags.PIGLIN_SAFE_ARMOR) || (entity.level().purpurConfig.piglinIgnoresArmorWithGoldTrim && isWearingGoldTrim(itemStack.getItem()))) { // Purpur - piglins ignore gold-trimmed armor + for (EquipmentSlot equipmentSlot : EquipmentSlotGroup.ARMOR) { +- if (entity.getItemBySlot(equipmentSlot).is(ItemTags.PIGLIN_SAFE_ARMOR)) { ++ // Purpur start - piglins ignore gold-trimmed armor ++ net.minecraft.world.item.ItemStack itemStack = entity.getItemBySlot(equipmentSlot); ++ if (itemStack.is(ItemTags.PIGLIN_SAFE_ARMOR) || (entity.level().purpurConfig.piglinIgnoresArmorWithGoldTrim && isWearingGoldTrim(itemStack.getItem()))) { ++ // Purpur end - piglins ignore gold-trimmed armor return true; } } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/CatSpawner.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/CatSpawner.java.patch new file mode 100644 index 000000000..9df36fcd7 --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/CatSpawner.java.patch @@ -0,0 +1,41 @@ +--- a/net/minecraft/world/entity/npc/CatSpawner.java ++++ b/net/minecraft/world/entity/npc/CatSpawner.java +@@ -25,7 +_,7 @@ + if (spawnFriendlies && level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING)) { + this.nextTick--; + if (this.nextTick <= 0) { +- this.nextTick = 1200; ++ this.nextTick = level.purpurConfig.catSpawnDelay; // Purpur - Cat spawning options + Player randomPlayer = level.getRandomPlayer(); + if (randomPlayer != null) { + RandomSource randomSource = level.random; +@@ -48,9 +_,12 @@ + } + + private void spawnInVillage(ServerLevel level, BlockPos pos) { +- int i = 48; +- if (level.getPoiManager().getCountInRange(holder -> holder.is(PoiTypes.HOME), pos, 48, PoiManager.Occupancy.IS_OCCUPIED) > 4L) { +- List entitiesOfClass = level.getEntitiesOfClass(Cat.class, new AABB(pos).inflate(48.0, 8.0, 48.0)); ++ // Purpur start - Cat spawning options ++ int range = level.purpurConfig.catSpawnVillageScanRange; ++ if (range <= 0) return; ++ if (level.getPoiManager().getCountInRange(holder -> holder.is(PoiTypes.HOME), pos, range, PoiManager.Occupancy.IS_OCCUPIED) > 4L) { ++ List entitiesOfClass = level.getEntitiesOfClass(Cat.class, new AABB(pos).inflate(range, 8.0, range)); ++ // Purpur end - Cat spawning options + if (entitiesOfClass.size() < 5) { + this.spawnCat(pos, level, false); + } +@@ -58,8 +_,11 @@ + } + + private void spawnInHut(ServerLevel level, BlockPos pos) { +- int i = 16; +- List entitiesOfClass = level.getEntitiesOfClass(Cat.class, new AABB(pos).inflate(16.0, 8.0, 16.0)); ++ // Purpur start - Cat spawning options ++ int range = level.purpurConfig.catSpawnSwampHutScanRange; ++ if (range <= 0) return; ++ List entitiesOfClass = level.getEntitiesOfClass(Cat.class, new AABB(pos).inflate(range, 8.0, range)); ++ // Purpur end - Cat spawning options + if (entitiesOfClass.isEmpty()) { + this.spawnCat(pos, level, true); + } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/npc/Villager.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/Villager.java.patch similarity index 95% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/npc/Villager.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/Villager.java.patch index d475ebf09..71cb36d56 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/npc/Villager.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/Villager.java.patch @@ -1,16 +1,16 @@ --- a/net/minecraft/world/entity/npc/Villager.java +++ b/net/minecraft/world/entity/npc/Villager.java -@@ -179,6 +_,8 @@ +@@ -178,6 +_,8 @@ MemoryModuleType.MEETING_POINT, - (villager, holder) -> holder.is(PoiTypes.MEETING) + (villager, poiType) -> poiType.is(PoiTypes.MEETING) ); + private boolean isLobotomized = false; public boolean isLobotomized() { return this.isLobotomized; } // Purpur - Lobotomize stuck villagers + private int notLobotomizedCount = 0; // Purpur - Lobotomize stuck villagers public Villager(EntityType entityType, Level level) { this(entityType, level, VillagerType.PLAINS); -@@ -193,6 +_,57 @@ - this.setVillagerData(this.getVillagerData().setType(villagerType).setProfession(VillagerProfession.NONE)); +@@ -196,6 +_,57 @@ + this.setVillagerData(this.getVillagerData().withType(villagerType).withProfession(level.registryAccess(), VillagerProfession.NONE)); } + // Purpur start - Allow leashing villagers @@ -67,7 +67,7 @@ @Override public Brain getBrain() { return (Brain)super.getBrain(); -@@ -289,11 +_,24 @@ +@@ -292,11 +_,24 @@ // Paper start - EAR 2 this.customServerAiStep(level, false); } @@ -94,7 +94,7 @@ profilerFiller.pop(); if (this.assignProfessionWhenSpawned) { this.assignProfessionWhenSpawned = false; -@@ -365,6 +_,7 @@ +@@ -368,6 +_,7 @@ return InteractionResult.CONSUME; } @@ -102,7 +102,7 @@ this.startTrading(player); } -@@ -503,7 +_,7 @@ +@@ -504,7 +_,7 @@ private void updateDemand() { for (MerchantOffer merchantOffer : this.getOffers()) { @@ -111,7 +111,7 @@ } } -@@ -707,7 +_,7 @@ +@@ -697,7 +_,7 @@ @Override public boolean canBreed() { @@ -120,7 +120,7 @@ } private boolean hungry() { -@@ -928,6 +_,7 @@ +@@ -919,6 +_,7 @@ } public void spawnGolemIfNeeded(ServerLevel serverLevel, long gameTime, int minVillagerAmount) { @@ -128,7 +128,7 @@ if (this.wantsToSpawnGolem(gameTime)) { AABB aabb = this.getBoundingBox().inflate(10.0, 10.0, 10.0); List entitiesOfClass = serverLevel.getEntitiesOfClass(Villager.class, aabb); -@@ -1001,6 +_,12 @@ +@@ -992,6 +_,12 @@ @Override public void startSleeping(BlockPos pos) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/npc/WanderingTrader.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/WanderingTrader.java.patch similarity index 82% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/npc/WanderingTrader.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/WanderingTrader.java.patch index e1ca1ac52..29f09b163 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/npc/WanderingTrader.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/WanderingTrader.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -69,6 +_,13 @@ +@@ -59,6 +_,13 @@ super(entityType, level); } @@ -14,16 +14,16 @@ @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); -@@ -89,7 +_,7 @@ +@@ -79,7 +_,7 @@ this, new ItemStack(Items.MILK_BUCKET), SoundEvents.WANDERING_TRADER_REAPPEARED, -- wanderingTrader -> this.canDrinkMilk && this.level().isDay() && wanderingTrader.isInvisible() // Paper - Add more WanderingTrader API -+ wanderingTrader -> level().purpurConfig.milkClearsBeneficialEffects && this.canDrinkMilk && this.level().isDay() && wanderingTrader.isInvisible() // Paper - Add more WanderingTrader API // // Purpur - Milk Keeps Beneficial Effects +- wanderingTrader -> this.canDrinkMilk && this.level().isBrightOutside() && wanderingTrader.isInvisible() // Paper - Add more WanderingTrader API ++ wanderingTrader -> level().purpurConfig.milkClearsBeneficialEffects && this.canDrinkMilk && this.level().isBrightOutside() && wanderingTrader.isInvisible() // Paper - Add more WanderingTrader API // // Purpur - Milk Keeps Beneficial Effects ) ); this.goalSelector.addGoal(1, new TradeWithPlayerGoal(this)); -@@ -133,8 +_,10 @@ +@@ -123,8 +_,10 @@ return InteractionResult.CONSUME; } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/npc/WanderingTraderSpawner.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/WanderingTraderSpawner.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/npc/WanderingTraderSpawner.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/WanderingTraderSpawner.java.patch index f1ac7fc15..efaa61512 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/npc/WanderingTraderSpawner.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/npc/WanderingTraderSpawner.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/npc/WanderingTraderSpawner.java +++ b/net/minecraft/world/entity/npc/WanderingTraderSpawner.java -@@ -147,7 +_,17 @@ +@@ -137,7 +_,17 @@ int i1 = pos.getX() + this.random.nextInt(maxDistance * 2) - maxDistance; int i2 = pos.getZ() + this.random.nextInt(maxDistance * 2) - maxDistance; int height = level.getHeight(Heightmap.Types.WORLD_SURFACE, i1, i2); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/player/Player.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/player/Player.java.patch similarity index 94% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/player/Player.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/player/Player.java.patch index d2d014c50..fc57c7949 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/player/Player.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/player/Player.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java -@@ -200,11 +_,20 @@ - private int currentImpulseContextResetGraceTime; +@@ -210,11 +_,20 @@ + private int currentImpulseContextResetGraceTime = 0; public boolean affectsSpawning = true; // Paper - Affects Spawning API public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage + public int burpDelay = 0; // Purpur - Burp delay @@ -21,7 +21,7 @@ @Override public org.bukkit.craftbukkit.entity.CraftHumanEntity getBukkitEntity() { return (org.bukkit.craftbukkit.entity.CraftHumanEntity) super.getBukkitEntity(); -@@ -262,6 +_,12 @@ +@@ -277,6 +_,12 @@ @Override public void tick() { @@ -34,7 +34,7 @@ this.noPhysics = this.isSpectator(); if (this.isSpectator() || this.isPassenger()) { this.setOnGround(false); -@@ -340,6 +_,17 @@ +@@ -355,6 +_,17 @@ this.turtleHelmetTick(); } @@ -52,7 +52,7 @@ this.cooldowns.tick(); this.updatePlayerPose(); if (this.currentImpulseContextResetGraceTime > 0) { -@@ -610,7 +_,7 @@ +@@ -620,7 +_,7 @@ List list = Lists.newArrayList(); for (Entity entity : entities) { @@ -61,7 +61,7 @@ list.add(entity); } else if (!entity.isRemoved()) { this.touch(entity); -@@ -1269,7 +_,7 @@ +@@ -1214,7 +_,7 @@ flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits if (flag2) { damageSource = damageSource.critical(); // Paper - critical damage API @@ -70,7 +70,7 @@ } float f2 = f + f1; -@@ -1884,7 +_,23 @@ +@@ -1811,7 +_,23 @@ @Override protected int getBaseExperienceReward(ServerLevel level) { @@ -95,9 +95,9 @@ } @Override -@@ -1967,6 +_,13 @@ - public boolean canUseSlot(EquipmentSlot slot) { - return slot != EquipmentSlot.BODY; +@@ -1849,6 +_,13 @@ + public boolean addItem(ItemStack stack) { + return this.inventory.add(stack); } + + // Purpur start - Player ridable in water option diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/projectile/AbstractArrow.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/AbstractArrow.java.patch similarity index 86% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/projectile/AbstractArrow.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/AbstractArrow.java.patch index 1a88cefdc..48ac13449 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/projectile/AbstractArrow.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/AbstractArrow.java.patch @@ -1,14 +1,14 @@ --- a/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/net/minecraft/world/entity/projectile/AbstractArrow.java -@@ -74,6 +_,7 @@ - public ItemStack pickupItemStack = this.getDefaultPickupItem(); // Paper - private -> public +@@ -79,6 +_,7 @@ + public ItemStack pickupItemStack = this.getDefaultPickupItem(); @Nullable - public ItemStack firedFromWeapon = null; // Paper - private -> public + public ItemStack firedFromWeapon = null; + public net.minecraft.world.item.enchantment.ItemEnchantments actualEnchantments = net.minecraft.world.item.enchantment.ItemEnchantments.EMPTY; // Purpur - Add an option to fix MC-3304 projectile looting protected AbstractArrow(EntityType entityType, Level level) { super(entityType, level); -@@ -347,7 +_,7 @@ +@@ -352,7 +_,7 @@ this.setInGround(false); Vec3 deltaMovement = this.getDeltaMovement(); this.setDeltaMovement(deltaMovement.multiply(this.random.nextFloat() * 0.2F, this.random.nextFloat() * 0.2F, this.random.nextFloat() * 0.2F)); @@ -16,8 +16,8 @@ + if (this.level().purpurConfig.arrowMovementResetsDespawnCounter) this.life = 0; // Purpur - Arrows should not reset despawn counter } - public boolean isInGround() { // Paper - protected -> public -@@ -559,6 +_,12 @@ + public boolean isInGround() { +@@ -575,6 +_,12 @@ public ItemStack getWeaponItem() { return this.firedFromWeapon; } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/projectile/Snowball.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/Snowball.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/projectile/Snowball.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/Snowball.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/projectile/ThrownEnderpearl.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/ThrownEnderpearl.java.patch similarity index 94% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/projectile/ThrownEnderpearl.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/ThrownEnderpearl.java.patch index b2937f297..8efc70f2a 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/projectile/ThrownEnderpearl.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/ThrownEnderpearl.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -@@ -133,9 +_,10 @@ +@@ -129,9 +_,10 @@ return; } // CraftBukkit end @@ -9,10 +9,10 @@ Endermite endermite = EntityType.ENDERMITE.create(serverLevel, EntitySpawnReason.TRIGGERED); if (endermite != null) { + endermite.setPlayerSpawned(true); // Purpur - Add back player spawned endermite API - endermite.moveTo(owner.getX(), owner.getY(), owner.getZ(), owner.getYRot(), owner.getXRot()); + endermite.snapTo(owner.getX(), owner.getY(), owner.getZ(), owner.getYRot(), owner.getXRot()); serverLevel.addFreshEntity(endermite, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.ENDER_PEARL); } -@@ -155,7 +_,7 @@ +@@ -151,7 +_,7 @@ if (serverPlayer1 != null) { serverPlayer1.resetFallDistance(); serverPlayer1.resetCurrentImpulseContext(); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/projectile/ThrownTrident.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/ThrownTrident.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/projectile/ThrownTrident.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/ThrownTrident.java.patch index 982cc0205..b959fcd53 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/projectile/ThrownTrident.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/ThrownTrident.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/projectile/ThrownTrident.java +++ b/net/minecraft/world/entity/projectile/ThrownTrident.java -@@ -64,7 +_,7 @@ +@@ -65,7 +_,7 @@ Entity owner = this.getOwner(); int i = this.entityData.get(ID_LOYALTY); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/projectile/WitherSkull.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/WitherSkull.java.patch similarity index 81% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/projectile/WitherSkull.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/WitherSkull.java.patch index deea12ae5..87908eb1e 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/projectile/WitherSkull.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/projectile/WitherSkull.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/net/minecraft/world/entity/projectile/WitherSkull.java -@@ -92,7 +_,7 @@ +@@ -93,7 +_,7 @@ super.onHit(result); if (!this.level().isClientSide) { // CraftBukkit start - org.bukkit.event.entity.ExplosionPrimeEvent event = new org.bukkit.event.entity.ExplosionPrimeEvent(this.getBukkitEntity(), 1.0F, false); + org.bukkit.event.entity.ExplosionPrimeEvent event = new org.bukkit.event.entity.ExplosionPrimeEvent(this.getBukkitEntity(), this.level().purpurConfig.witherExplosionRadius, false); // Purpur - Config for wither explosion radius - this.level().getCraftServer().getPluginManager().callEvent(event); - - if (!event.isCancelled()) { -@@ -102,6 +_,13 @@ + if (event.callEvent()) { + this.level().explode(this, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), Level.ExplosionInteraction.MOB); + } +@@ -101,6 +_,13 @@ this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.HIT); // CraftBukkit - add Bukkit remove cause } } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/raid/Raids.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/raid/Raids.java.patch new file mode 100644 index 000000000..c0e2ddf74 --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/raid/Raids.java.patch @@ -0,0 +1,42 @@ +--- a/net/minecraft/world/entity/raid/Raids.java ++++ b/net/minecraft/world/entity/raid/Raids.java +@@ -29,6 +_,7 @@ + + public class Raids extends SavedData { + private static final String RAID_FILE_ID = "raids"; ++ public final java.util.Map playerCooldowns = com.google.common.collect.Maps.newHashMap(); // Purpur - Raid cooldown setting + public static final Codec CODEC = RecordCodecBuilder.create( + instance -> instance.group( + Raids.RaidWithId.CODEC +@@ -81,6 +_,17 @@ + + public void tick(ServerLevel level) { + this.tick++; ++ // Purpur start - Raid cooldown setting ++ 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); ++ } else { ++ playerCooldowns.put(uuid, i - 1); ++ } ++ }); ++ } ++ // Purpur end - Raid cooldown setting + Iterator iterator = this.raidMap.values().iterator(); + + while (iterator.hasNext()) { +@@ -148,11 +_,13 @@ + // } + + if (!raid.isStarted() || (raid.isInProgress() && raid.getRaidOmenLevel() < raid.getMaxRaidOmenLevel())) { // CraftBukkit - fixed a bug with raid: players could add up Bad Omen level even when the raid had finished ++ if (serverLevel.purpurConfig.raidCooldownSeconds != 0 && playerCooldowns.containsKey(player.getUUID())) return null; // Purpur - Raid cooldown setting + // CraftBukkit start + if (!org.bukkit.craftbukkit.event.CraftEventFactory.callRaidTriggerEvent(serverLevel, raid, player)) { + player.removeEffect(net.minecraft.world.effect.MobEffects.RAID_OMEN); + return null; + } ++ if (serverLevel.purpurConfig.raidCooldownSeconds != 0) playerCooldowns.put(player.getUUID(), serverLevel.purpurConfig.raidCooldownSeconds); // Purpur - Raid cooldown setting + + if (!raid.isStarted() && !this.raidMap.containsValue(raid)) { + this.raidMap.put(this.getUniqueId(), raid); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/vehicle/AbstractBoat.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/vehicle/AbstractBoat.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/vehicle/AbstractBoat.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/vehicle/AbstractBoat.java.patch index 430b15eb4..5b64f6835 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/vehicle/AbstractBoat.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/vehicle/AbstractBoat.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/vehicle/AbstractBoat.java +++ b/net/minecraft/world/entity/vehicle/AbstractBoat.java -@@ -483,6 +_,7 @@ +@@ -433,6 +_,7 @@ float groundFriction = this.getGroundFriction(); if (groundFriction > 0.0F) { this.landFriction = groundFriction; diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/vehicle/NewMinecartBehavior.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/vehicle/NewMinecartBehavior.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/vehicle/NewMinecartBehavior.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/vehicle/NewMinecartBehavior.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/vehicle/OldMinecartBehavior.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/vehicle/OldMinecartBehavior.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/vehicle/OldMinecartBehavior.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/entity/vehicle/OldMinecartBehavior.java.patch index c8ae0ce13..c8d066068 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/entity/vehicle/OldMinecartBehavior.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/entity/vehicle/OldMinecartBehavior.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/entity/vehicle/OldMinecartBehavior.java +++ b/net/minecraft/world/entity/vehicle/OldMinecartBehavior.java -@@ -279,8 +_,8 @@ +@@ -243,8 +_,8 @@ Vec3 deltaMovement1 = this.getDeltaMovement(); double d13 = deltaMovement1.horizontalDistance(); if (d13 > 0.01) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/food/FoodData.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/food/FoodData.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/food/FoodData.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/food/FoodData.java.patch index bca1c3085..f8e3d23f5 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/food/FoodData.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/food/FoodData.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/food/FoodData.java +++ b/net/minecraft/world/food/FoodData.java -@@ -36,6 +_,7 @@ +@@ -38,6 +_,7 @@ int oldFoodLevel = this.foodLevel; org.bukkit.event.entity.FoodLevelChangeEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callFoodLevelChangeEvent(serverPlayer, foodProperties.nutrition() + oldFoodLevel, stack); if (!event.isCancelled()) { @@ -8,7 +8,7 @@ this.add(event.getFoodLevel() - oldFoodLevel, foodProperties.saturation()); } serverPlayer.getBukkitEntity().sendHealthUpdate(); -@@ -84,7 +_,7 @@ +@@ -86,7 +_,7 @@ this.tickTimer++; if (this.tickTimer >= this.starvationRate) { // CraftBukkit - add regen rate manipulation if (player.getHealth() > 10.0F || difficulty == Difficulty.HARD || player.getHealth() > 1.0F && difficulty == Difficulty.NORMAL) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/food/FoodProperties.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/food/FoodProperties.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/food/FoodProperties.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/food/FoodProperties.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/AbstractContainerMenu.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AbstractContainerMenu.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/AbstractContainerMenu.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AbstractContainerMenu.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/AbstractFurnaceMenu.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AbstractFurnaceMenu.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/AbstractFurnaceMenu.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AbstractFurnaceMenu.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/AnvilMenu.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AnvilMenu.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/AnvilMenu.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AnvilMenu.java.patch index f97d7fb8e..910986692 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/AnvilMenu.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/AnvilMenu.java.patch @@ -38,7 +38,7 @@ + ItemStack itemstack = this.activeQuickItem != null ? this.activeQuickItem : stack; + if (org.purpurmc.purpur.event.inventory.AnvilTakeResultEvent.getHandlerList().getRegisteredListeners().length > 0) new org.purpurmc.purpur.event.inventory.AnvilTakeResultEvent(player.getBukkitEntity(), getBukkitView(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack)).callEvent(); + // Purpur end - Anvil API - if (!player.getAbilities().instabuild) { + if (!player.hasInfiniteMaterials()) { + if (this.bypassCost) ((ServerPlayer) player).lastSentExp = -1; else // Purpur - Anvil API player.giveExperienceLevels(-this.cost.get()); } @@ -64,7 +64,7 @@ ItemStack itemStack = item.copy(); ItemStack item1 = this.inputSlots.getItem(1); ItemEnchantments.Mutable mutable = new ItemEnchantments.Mutable(EnchantmentHelper.getEnchantmentsForCrafting(itemStack)); -@@ -191,23 +_,34 @@ +@@ -190,23 +_,34 @@ int intValue = entry.getIntValue(); intValue = level == intValue ? intValue + 1 : Math.max(intValue, level); Enchantment enchantment = holder.value(); @@ -73,7 +73,7 @@ + boolean canEnchant = this.canDoUnsafeEnchants || org.purpurmc.purpur.PurpurConfig.allowInapplicableEnchants || enchantment.canEnchant(item); // whether the enchantment can be applied on specific item type + boolean canEnchant1 = true; // whether two incompatible enchantments can be applied on a single item + // Purpur end - Config to allow unsafe enchants - if (this.player.getAbilities().instabuild || item.is(Items.ENCHANTED_BOOK)) { + if (this.player.hasInfiniteMaterials() || item.is(Items.ENCHANTED_BOOK)) { canEnchant = true; } @@ -103,7 +103,7 @@ intValue = enchantment.getMaxLevel(); } -@@ -236,6 +_,54 @@ +@@ -235,6 +_,54 @@ if (!this.itemName.equals(item.getHoverName().getString())) { i1 = 1; i += i1; @@ -158,7 +158,7 @@ itemStack.set(DataComponents.CUSTOM_NAME, Component.literal(this.itemName)); } } else if (item.has(DataComponents.CUSTOM_NAME)) { -@@ -260,6 +_,12 @@ +@@ -259,6 +_,12 @@ this.onlyRenaming = true; } @@ -168,10 +168,10 @@ + } + // Purpur end - Anvil API + - if (this.cost.get() >= this.maximumRepairCost && !this.player.getAbilities().instabuild) { // CraftBukkit + if (this.cost.get() >= this.maximumRepairCost && !this.player.hasInfiniteMaterials()) { // CraftBukkit itemStack = ItemStack.EMPTY; } -@@ -280,6 +_,13 @@ +@@ -279,6 +_,13 @@ org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareAnvilEvent(this.getBukkitView(), itemStack); // CraftBukkit this.broadcastChanges(); @@ -185,7 +185,7 @@ } else { org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareAnvilEvent(this.getBukkitView(), ItemStack.EMPTY); // CraftBukkit this.cost.set(AnvilMenu.DEFAULT_DENIED_COST); // CraftBukkit - use a variable for set a cost for denied item -@@ -288,7 +_,7 @@ +@@ -287,7 +_,7 @@ } public static int calculateIncreasedRepairCost(int oldRepairCost) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/ArmorSlot.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/ArmorSlot.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/ArmorSlot.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/ArmorSlot.java.patch index c7b2ace18..2b2579163 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/ArmorSlot.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/ArmorSlot.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/inventory/ArmorSlot.java +++ b/net/minecraft/world/inventory/ArmorSlot.java -@@ -42,7 +_,7 @@ +@@ -47,7 +_,7 @@ @Override public boolean mayPickup(Player player) { ItemStack item = this.getItem(); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/EnchantmentMenu.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/EnchantmentMenu.java.patch similarity index 99% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/EnchantmentMenu.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/EnchantmentMenu.java.patch index 8f9902689..b6a6515d1 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/EnchantmentMenu.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/EnchantmentMenu.java.patch @@ -40,7 +40,7 @@ this.addStandardInventorySlots(playerInventory, 8, 84); this.addDataSlot(DataSlot.shared(this.costs, 0)); this.addDataSlot(DataSlot.shared(this.costs, 1)); -@@ -294,7 +_,7 @@ +@@ -299,7 +_,7 @@ @Override public void removed(Player player) { super.removed(player); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/GrindstoneMenu.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/GrindstoneMenu.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/GrindstoneMenu.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/GrindstoneMenu.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/ItemCombinerMenu.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/ItemCombinerMenu.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/inventory/ItemCombinerMenu.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/inventory/ItemCombinerMenu.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/AxeItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/AxeItem.java.patch similarity index 95% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/AxeItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/AxeItem.java.patch index c50f80b33..c87b129e2 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/AxeItem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/AxeItem.java.patch @@ -1,7 +1,7 @@ --- a/net/minecraft/world/item/AxeItem.java +++ b/net/minecraft/world/item/AxeItem.java @@ -62,13 +_,15 @@ - if (playerHasShieldUseIntent(context)) { + if (playerHasBlockingItemUseIntent(context)) { return InteractionResult.PASS; } else { - Optional optional = this.evaluateNewBlockState(level, clickedPos, player, level.getBlockState(clickedPos)); @@ -36,8 +36,8 @@ if (player != null) { itemInHand.hurtAndBreak(1, player, LivingEntity.getSlotForHand(context.getHand())); } -@@ -92,22 +_,24 @@ - return context.getHand().equals(InteractionHand.MAIN_HAND) && player.getOffhandItem().is(Items.SHIELD) && !player.isSecondaryUseActive(); +@@ -94,22 +_,24 @@ + && !player.isSecondaryUseActive(); } - private Optional evaluateNewBlockState(Level level, BlockPos pos, @Nullable Player player, BlockState state) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/BlockItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/BlockItem.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/BlockItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/BlockItem.java.patch index 855b75b34..76068462e 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/BlockItem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/BlockItem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/BlockItem.java +++ b/net/minecraft/world/item/BlockItem.java -@@ -152,7 +_,16 @@ +@@ -145,7 +_,16 @@ } protected boolean updateCustomBlockEntityTag(BlockPos pos, Level level, @Nullable Player player, ItemStack stack, BlockState state) { @@ -18,7 +18,7 @@ } @Nullable -@@ -217,6 +_,7 @@ +@@ -212,6 +_,7 @@ } if (!type.onlyOpCanSetNbt() || player != null && (player.canUseGameMasterBlocks() || (player.getAbilities().instabuild && player.getBukkitEntity().hasPermission("minecraft.nbt.place")))) { // Spigot - add permission @@ -26,7 +26,7 @@ return customData.loadInto(blockEntity, level.registryAccess()); } -@@ -264,6 +_,7 @@ +@@ -253,6 +_,7 @@ public void onDestroyed(ItemEntity itemEntity) { ItemContainerContents itemContainerContents = itemEntity.getItem().set(DataComponents.CONTAINER, ItemContainerContents.EMPTY); if (itemContainerContents != null) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/BowItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/BowItem.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/BowItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/BowItem.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/BucketItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/BucketItem.java.patch similarity index 85% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/BucketItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/BucketItem.java.patch index a784ee1c9..a0e1bb7ac 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/BucketItem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/BucketItem.java.patch @@ -3,7 +3,7 @@ @@ -147,7 +_,7 @@ // CraftBukkit end if (!flag) { - return result != null && this.emptyContents(player, level, result.getBlockPos().relative(result.getDirection()), null, enumdirection, clicked, itemstack, enumhand); // CraftBukkit + return hitResult != null && this.emptyContents(entity, level, hitResult.getBlockPos().relative(hitResult.getDirection()), null, direction, clicked, itemstack, hand); // CraftBukkit - } else if (level.dimensionType().ultraWarm() && this.content.is(FluidTags.WATER)) { + } else if ((level.dimensionType().ultraWarm() || (level.isTheEnd() && !org.purpurmc.purpur.PurpurConfig.allowWaterPlacementInTheEnd)) && this.content.is(FluidTags.WATER)) { // Purpur - Add allow water in end world option int x = pos.getX(); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/CrossbowItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/CrossbowItem.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/CrossbowItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/CrossbowItem.java.patch index bcb821757..c2e3f0e41 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/CrossbowItem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/CrossbowItem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/CrossbowItem.java +++ b/net/minecraft/world/item/CrossbowItem.java -@@ -70,7 +_,7 @@ +@@ -66,7 +_,7 @@ ItemStack itemInHand = player.getItemInHand(hand); ChargedProjectiles chargedProjectiles = itemInHand.get(DataComponents.CHARGED_PROJECTILES); if (chargedProjectiles != null && !chargedProjectiles.isEmpty()) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/DyeColor.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/DyeColor.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/DyeColor.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/DyeColor.java.patch index f18d71793..e53cc098b 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/DyeColor.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/DyeColor.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/DyeColor.java +++ b/net/minecraft/world/item/DyeColor.java -@@ -123,4 +_,10 @@ +@@ -126,4 +_,10 @@ private static CraftingInput makeCraftColorInput(DyeColor first, DyeColor second) { return CraftingInput.of(2, 1, List.of(new ItemStack(DyeItem.byColor(first)), new ItemStack(DyeItem.byColor(second)))); } diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/item/EggItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/EggItem.java.patch new file mode 100644 index 000000000..7bd1d11bf --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/EggItem.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/world/item/EggItem.java ++++ b/net/minecraft/world/item/EggItem.java +@@ -24,7 +_,7 @@ + public InteractionResult use(Level level, Player player, InteractionHand hand) { + ItemStack itemInHand = player.getItemInHand(hand); + // Paper start +- final Projectile.Delayed thrownEgg = Projectile.spawnProjectileFromRotationDelayed(ThrownEgg::new, (ServerLevel) level, itemInHand, player, 0.0F, EggItem.PROJECTILE_SHOOT_POWER, 1.0F); ++ final Projectile.Delayed thrownEgg = Projectile.spawnProjectileFromRotationDelayed(ThrownEgg::new, (ServerLevel) level, itemInHand, player, 0.0F, EggItem.PROJECTILE_SHOOT_POWER, (float) level.purpurConfig.eggProjectileOffset); // Purpur - Projectile offset config + com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemInHand), (org.bukkit.entity.Projectile) thrownEgg.projectile().getBukkitEntity()); + if (event.callEvent() && thrownEgg.attemptSpawn()) { + if (event.shouldConsume()) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/EndCrystalItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/EndCrystalItem.java.patch similarity index 92% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/EndCrystalItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/EndCrystalItem.java.patch index d46e5ccc9..baee5e0ab 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/EndCrystalItem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/EndCrystalItem.java.patch @@ -8,4 +8,4 @@ + if (!level.purpurConfig.endCrystalPlaceAnywhere && !blockState.is(Blocks.OBSIDIAN) && !blockState.is(Blocks.BEDROCK)) { // Purpur - place end crystal on any block return InteractionResult.FAIL; } else { - BlockPos blockPos = clickedPos.above(); final BlockPos aboveBlockPosition = blockPos; // Paper - OBFHELPER + BlockPos blockPos = clickedPos.above(); final BlockPos aboveBlockPos = blockPos; // Paper - OBFHELPER diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/EnderpearlItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/EnderpearlItem.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/EnderpearlItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/EnderpearlItem.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/HoeItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/HoeItem.java.patch similarity index 99% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/HoeItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/HoeItem.java.patch index 4e6e9ca20..cebe3180e 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/HoeItem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/HoeItem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/HoeItem.java +++ b/net/minecraft/world/item/HoeItem.java -@@ -46,15 +_,25 @@ +@@ -45,15 +_,25 @@ public InteractionResult useOn(UseOnContext context) { Level level = context.getLevel(); BlockPos clickedPos = context.getClickedPos(); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/ItemStack.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ItemStack.java.patch similarity index 76% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/ItemStack.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/ItemStack.java.patch index d8595672c..c40077a55 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/ItemStack.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ItemStack.java.patch @@ -1,22 +1,22 @@ --- a/net/minecraft/world/item/ItemStack.java +++ b/net/minecraft/world/item/ItemStack.java -@@ -461,6 +_,7 @@ - serverLevel.isBlockPlaceCancelled = true; // Paper - prevent calling cleanup logic when undoing a block place upon a cancelled BlockPlaceEvent +@@ -458,6 +_,7 @@ + // revert back all captured blocks for (org.bukkit.block.BlockState blockstate : blocks) { - blockstate.update(true, false); + ((org.bukkit.craftbukkit.block.CraftBlockState) blockstate).revertPlace(); + ((org.bukkit.craftbukkit.block.CraftBlock) blockstate.getBlock()).getNMS().getBlock().forgetPlacer(); // Purpur - Store placer on Block when placed } - serverLevel.isBlockPlaceCancelled = false; // Paper - prevent calling cleanup logic when undoing a block place upon a cancelled BlockPlaceEvent - serverLevel.preventPoiUpdated = false; -@@ -486,6 +_,7 @@ + + SignItem.openSign = null; // SPIGOT-6758 - Reset on early return +@@ -481,6 +_,7 @@ if (!(block.getBlock() instanceof net.minecraft.world.level.block.BaseEntityBlock)) { // Containers get placed automatically block.onPlace(serverLevel, newPos, oldBlock, true, context); } + block.getBlock().forgetPlacer(); // Purpur - Store placer on Block when placed - serverLevel.notifyAndUpdatePhysics(newPos, null, oldBlock, block, serverLevel.getBlockState(newPos), updateFlag, net.minecraft.world.level.block.Block.UPDATE_LIMIT); // send null chunk as chunk.k() returns false by this point + serverLevel.notifyAndUpdatePhysics(newPos, null, oldBlock, block, serverLevel.getBlockState(newPos), updateFlags, net.minecraft.world.level.block.Block.UPDATE_LIMIT); // send null chunk as chunk.k() returns false by this point } -@@ -627,6 +_,26 @@ +@@ -618,6 +_,26 @@ return this.isDamageableItem() && this.getDamageValue() > 0; } @@ -41,9 +41,9 @@ + // Purpur end - Add option to mend the most damaged equipment first + public int getDamageValue() { - return Mth.clamp(this.getOrDefault(DataComponents.DAMAGE, Integer.valueOf(0)), 0, this.getMaxDamage()); + return Mth.clamp(this.getOrDefault(DataComponents.DAMAGE, 0), 0, this.getMaxDamage()); } -@@ -1251,6 +_,12 @@ +@@ -1274,6 +_,12 @@ public boolean isEnchanted() { return !this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY).isEmpty(); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/Items.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/Items.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/Items.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/Items.java.patch index 618da92d7..a5dd1c128 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/Items.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/Items.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/Items.java +++ b/net/minecraft/world/item/Items.java -@@ -367,7 +_,7 @@ +@@ -382,7 +_,7 @@ public static final Item PURPUR_BLOCK = registerBlock(Blocks.PURPUR_BLOCK); public static final Item PURPUR_PILLAR = registerBlock(Blocks.PURPUR_PILLAR); public static final Item PURPUR_STAIRS = registerBlock(Blocks.PURPUR_STAIRS); @@ -9,7 +9,7 @@ public static final Item CREAKING_HEART = registerBlock(Blocks.CREAKING_HEART); public static final Item CHEST = registerBlock(Blocks.CHEST, properties -> properties.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY)); public static final Item CRAFTING_TABLE = registerBlock(Blocks.CRAFTING_TABLE); -@@ -2010,7 +_,7 @@ +@@ -2034,7 +_,7 @@ "sweet_berries", createBlockItemWithCustomItemName(Blocks.SWEET_BERRY_BUSH), new Item.Properties().food(Foods.SWEET_BERRIES) ); public static final Item GLOW_BERRIES = registerItem( diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/MapItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/MapItem.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/MapItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/MapItem.java.patch index c7332498c..e4abe0ae9 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/MapItem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/MapItem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/MapItem.java +++ b/net/minecraft/world/item/MapItem.java -@@ -196,6 +_,7 @@ +@@ -194,6 +_,7 @@ public static void renderBiomePreviewMap(ServerLevel serverLevel, ItemStack stack) { MapItemSavedData savedData = getSavedData(stack, serverLevel); if (savedData != null) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/NameTagItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/NameTagItem.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/NameTagItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/NameTagItem.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/ProjectileWeaponItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ProjectileWeaponItem.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/ProjectileWeaponItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/ProjectileWeaponItem.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/ShovelItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ShovelItem.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/ShovelItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/ShovelItem.java.patch index 2a462f3a6..c583f3853 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/ShovelItem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ShovelItem.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/item/ShovelItem.java +++ b/net/minecraft/world/item/ShovelItem.java -@@ -47,9 +_,12 @@ +@@ -46,9 +_,12 @@ BlockState blockState1 = FLATTENABLES.get(blockState.getBlock()); BlockState blockState2 = null; Runnable afterAction = null; // Paper diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/SnowballItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/SnowballItem.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/SnowballItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/SnowballItem.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/SpawnEggItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/SpawnEggItem.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/SpawnEggItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/SpawnEggItem.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/ThrowablePotionItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ThrowablePotionItem.java.patch similarity index 58% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/ThrowablePotionItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/ThrowablePotionItem.java.patch index e2154c3b8..5cf5ead6e 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/ThrowablePotionItem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/ThrowablePotionItem.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/item/ThrowablePotionItem.java +++ b/net/minecraft/world/item/ThrowablePotionItem.java -@@ -23,7 +_,7 @@ +@@ -24,7 +_,7 @@ ItemStack itemInHand = player.getItemInHand(hand); if (level instanceof ServerLevel serverLevel) { // Paper start - PlayerLaunchProjectileEvent -- final Projectile.Delayed thrownPotion = Projectile.spawnProjectileFromRotationDelayed(ThrownPotion::new, serverLevel, itemInHand, player, -20.0F, PROJECTILE_SHOOT_POWER, 1.0F); -+ final Projectile.Delayed thrownPotion = Projectile.spawnProjectileFromRotationDelayed(ThrownPotion::new, serverLevel, itemInHand, player, -20.0F, PROJECTILE_SHOOT_POWER, (float) serverLevel.purpurConfig.throwablePotionProjectileOffset); // Purpur - Projectile offset config +- final Projectile.Delayed thrownPotion = Projectile.spawnProjectileFromRotationDelayed(this::createPotion, serverLevel, itemInHand, player, -20.0F, PROJECTILE_SHOOT_POWER, 1.0F); ++ final Projectile.Delayed thrownPotion = Projectile.spawnProjectileFromRotationDelayed(this::createPotion, serverLevel, itemInHand, player, -20.0F, PROJECTILE_SHOOT_POWER, (float) serverLevel.purpurConfig.throwablePotionProjectileOffset); // Purpur - Projectile offset config com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemInHand), (org.bukkit.entity.Projectile) thrownPotion.projectile().getBukkitEntity()); if (event.callEvent() && thrownPotion.attemptSpawn()) { if (event.shouldConsume()) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/TridentItem.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/TridentItem.java.patch similarity index 66% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/TridentItem.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/TridentItem.java.patch index 3f37caa58..93a0a726e 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/TridentItem.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/TridentItem.java.patch @@ -1,21 +1,21 @@ --- a/net/minecraft/world/item/TridentItem.java +++ b/net/minecraft/world/item/TridentItem.java -@@ -90,7 +_,7 @@ - // stack.hurtWithoutBreaking(1, player); // CraftBukkit - moved down +@@ -83,7 +_,7 @@ if (tridentSpinAttackStrength == 0.0F) { - Projectile.Delayed tridentDelayed = Projectile.spawnProjectileFromRotationDelayed( // Paper - PlayerLaunchProjectileEvent -- ThrownTrident::new, serverLevel, stack, player, 0.0F, 2.5F, 1.0F -+ ThrownTrident::new, serverLevel, stack, player, 0.0F, 2.5F, (float) serverLevel.purpurConfig.tridentProjectileOffset // Purpur - Projectile offset config + ItemStack itemStack = stack.copyWithCount(1); // Paper + Projectile.Delayed tridentDelayed = Projectile.spawnProjectileFromRotationDelayed( // Paper - PlayerLaunchProjectileEvent( +- ThrownTrident::new, serverLevel, itemStack, player, 0.0F, 2.5F, 1.0F ++ ThrownTrident::new, serverLevel, itemStack, player, 0.0F, 2.5F, (float) serverLevel.purpurConfig.tridentProjectileOffset // Purpur - Projectile offset config ); // Paper start - PlayerLaunchProjectileEvent com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) player.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(stack), (org.bukkit.entity.Projectile) tridentDelayed.projectile().getBukkitEntity()); -@@ -101,6 +_,9 @@ +@@ -94,6 +_,9 @@ return false; } ThrownTrident thrownTrident = tridentDelayed.projectile(); // Paper - PlayerLaunchProjectileEvent + + thrownTrident.setActualEnchantments(stack.getEnchantments()); // Purpur - Add an option to fix MC-3304 projectile looting + - if (event.shouldConsume()) stack.hurtWithoutBreaking(1, player); // Paper - PlayerLaunchProjectileEvent - thrownTrident.pickupItemStack = stack.copy(); // SPIGOT-4511 update since damage call moved - // CraftBukkit end + if (event.shouldConsume()) { + stack.consume(1, player); + stack.hurtWithoutBreaking(1, player); // Paper - PlayerLaunchProjectileEvent diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/consume_effects/ClearAllStatusEffectsConsumeEffect.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/consume_effects/ClearAllStatusEffectsConsumeEffect.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/consume_effects/ClearAllStatusEffectsConsumeEffect.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/consume_effects/ClearAllStatusEffectsConsumeEffect.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/crafting/Ingredient.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/crafting/Ingredient.java.patch similarity index 72% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/crafting/Ingredient.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/crafting/Ingredient.java.patch index 188d2cfb2..b42a8f0ea 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/crafting/Ingredient.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/crafting/Ingredient.java.patch @@ -3,14 +3,14 @@ @@ -36,6 +_,7 @@ // CraftBukkit start @javax.annotation.Nullable - private java.util.Set itemStacks; // Paper - Improve exact choice recipe ingredients + private java.util.List itemStacks; + public Predicate predicate; // Purpur - Add predicate to recipe's ExactChoice ingredient public boolean isExact() { return this.itemStacks != null; -@@ -87,6 +_,11 @@ - if (this.isExact()) { - return this.itemStacks.contains(stack); // Paper - Improve exact choice recipe ingredients (hashing FTW!) +@@ -89,6 +_,11 @@ + + return false; } + // Purpur start - Add predicate to recipe's ExactChoice ingredient + if (predicate != null) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/enchantment/EnchantmentHelper.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/enchantment/ItemEnchantments.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/enchantment/ItemEnchantments.java.patch similarity index 81% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/enchantment/ItemEnchantments.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/enchantment/ItemEnchantments.java.patch index acab23bbb..9671562b1 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/enchantment/ItemEnchantments.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/enchantment/ItemEnchantments.java.patch @@ -2,14 +2,14 @@ +++ b/net/minecraft/world/item/enchantment/ItemEnchantments.java @@ -32,7 +_,7 @@ private static final java.util.Comparator> ENCHANTMENT_ORDER = java.util.Comparator.comparing(Holder::getRegisteredName); - public static final ItemEnchantments EMPTY = new ItemEnchantments(new it.unimi.dsi.fastutil.objects.Object2IntAVLTreeMap<>(ENCHANTMENT_ORDER), true); - // Paper end + public static final ItemEnchantments EMPTY = new ItemEnchantments(new it.unimi.dsi.fastutil.objects.Object2IntAVLTreeMap<>(ENCHANTMENT_ORDER)); + // Paper end - sort enchantments - private static final Codec LEVEL_CODEC = Codec.intRange(1, 255); + private static final Codec LEVEL_CODEC = Codec.intRange(1, (org.purpurmc.purpur.PurpurConfig.clampEnchantLevels ? 255 : 32767)); // Purpur - Add toggle for enchant level clamping - // Paper start - sort enchantments - private static final Codec>> LEVELS_CODEC = Codec.unboundedMap(Enchantment.CODEC, LEVEL_CODEC) - .xmap(m -> { -@@ -65,7 +_,7 @@ + public static final Codec CODEC = Codec.unboundedMap(Enchantment.CODEC, LEVEL_CODEC) + .xmap( + map -> new net.minecraft.world.item.enchantment.ItemEnchantments(net.minecraft.Util.make(new it.unimi.dsi.fastutil.objects.Object2IntAVLTreeMap<>(ENCHANTMENT_ORDER), m -> m.putAll(map))), // Paper - sort enchantments +@@ -50,7 +_,7 @@ for (Entry> entry : enchantments.object2IntEntrySet()) { int intValue = entry.getIntValue(); @@ -18,7 +18,7 @@ throw new IllegalArgumentException("Enchantment " + entry.getKey() + " has invalid level " + intValue); } } -@@ -160,13 +_,13 @@ +@@ -133,13 +_,13 @@ if (level <= 0) { this.enchantments.removeInt(enchantment); } else { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/item/trading/MerchantOffer.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/item/trading/MerchantOffer.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/item/trading/MerchantOffer.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/item/trading/MerchantOffer.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/BaseSpawner.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/BaseSpawner.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/BaseSpawner.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/BaseSpawner.java.patch index 99446bb5a..ad89287e0 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/BaseSpawner.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/BaseSpawner.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/BaseSpawner.java +++ b/net/minecraft/world/level/BaseSpawner.java -@@ -52,6 +_,7 @@ +@@ -54,6 +_,7 @@ } public boolean isNearPlayer(Level level, BlockPos pos) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/EntityGetter.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/EntityGetter.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/EntityGetter.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/EntityGetter.java.patch index 73e6f74b1..e1a0fd757 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/EntityGetter.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/EntityGetter.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/EntityGetter.java +++ b/net/minecraft/world/level/EntityGetter.java -@@ -185,7 +_,7 @@ +@@ -144,7 +_,7 @@ default boolean hasNearbyAlivePlayer(double x, double y, double z, double distance) { for (Player player : this.players()) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/Level.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch similarity index 88% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/Level.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch index cfd4c384e..8e696920d 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/Level.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/Level.java.patch @@ -1,15 +1,13 @@ --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java -@@ -170,6 +_,7 @@ +@@ -158,11 +_,55 @@ + } // Paper end - add paper world config - public final io.papermc.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray + public final org.purpurmc.purpur.PurpurWorldConfig purpurConfig; // Purpur - Purpur config files - public static BlockPos lastPhysicsProblem; // Spigot - private org.spigotmc.TickLimiter entityLimiter; - private org.spigotmc.TickLimiter tileLimiter; -@@ -177,6 +_,49 @@ - public final Map explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions + public static @Nullable BlockPos lastPhysicsProblem; // Spigot + private int tileTickPosition; + public final Map explosionDensityCache = new java.util.HashMap<>(); // Paper - Optimize explosions public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here + // Purpur start - Add adjustable breeding cooldown to config @@ -58,8 +56,8 @@ public CraftWorld getWorld() { return this.world; } -@@ -853,6 +_,8 @@ - // Paper end - getblock optimisations - cache world height/sections +@@ -205,6 +_,8 @@ + ) { this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config + this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) levelData).getLevelName(), env); // Purpur - Purpur config files @@ -67,7 +65,7 @@ this.generator = gen; this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); -@@ -2130,4 +_,14 @@ +@@ -1409,4 +_,14 @@ return this.id; } } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/NaturalSpawner.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/NaturalSpawner.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/NaturalSpawner.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/NaturalSpawner.java.patch index 958b8eb2a..67708c82c 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/NaturalSpawner.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/NaturalSpawner.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/NaturalSpawner.java +++ b/net/minecraft/world/level/NaturalSpawner.java -@@ -267,7 +_,7 @@ +@@ -206,7 +_,7 @@ mutableBlockPos.set(x, y, z); double d = x + 0.5; double d1 = z + 0.5; diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/ServerExplosion.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/ServerExplosion.java.patch similarity index 89% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/ServerExplosion.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/ServerExplosion.java.patch index 6cda2a29e..21310800e 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/ServerExplosion.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/ServerExplosion.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/ServerExplosion.java +++ b/net/minecraft/world/level/ServerExplosion.java -@@ -319,7 +_,7 @@ +@@ -73,7 +_,7 @@ ) { this.level = level; this.source = source; @@ -9,7 +9,7 @@ this.center = center; this.fire = fire; this.blockInteraction = blockInteraction; -@@ -649,10 +_,27 @@ +@@ -356,10 +_,27 @@ public void explode() { // CraftBukkit start @@ -35,6 +35,6 @@ + } + } + // Purpur end - Add PreExplodeEvents - // Paper start - collision optimisations - this.blockCache = new it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap<>(); - this.chunkPosCache = new long[CHUNK_CACHE_WIDTH * CHUNK_CACHE_WIDTH]; + this.level.gameEvent(this.source, GameEvent.EXPLODE, this.center); + List list = this.calculateExplodedPositions(); + this.hurtEntities(); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/AnvilBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/AnvilBlock.java.patch similarity index 99% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/AnvilBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/AnvilBlock.java.patch index 7522ef907..a21b8a6a3 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/AnvilBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/AnvilBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/AnvilBlock.java +++ b/net/minecraft/world/level/block/AnvilBlock.java -@@ -59,6 +_,53 @@ +@@ -54,6 +_,53 @@ return this.defaultBlockState().setValue(FACING, context.getHorizontalDirection().getClockWise()); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/AzaleaBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/AzaleaBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/AzaleaBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/AzaleaBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BaseCoralPlantTypeBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BaseCoralPlantTypeBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BaseCoralPlantTypeBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BaseCoralPlantTypeBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BedBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BedBlock.java.patch similarity index 94% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BedBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BedBlock.java.patch index fdd4594ec..e0980cdaf 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BedBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BedBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/BedBlock.java +++ b/net/minecraft/world/level/block/BedBlock.java -@@ -100,7 +_,7 @@ +@@ -98,7 +_,7 @@ } Vec3 center = pos.getCenter(); @@ -9,7 +9,7 @@ return InteractionResult.SUCCESS_SERVER; } else if (state.getValue(OCCUPIED)) { if (!BedBlock.canSetSpawn(level)) return this.explodeBed(state, level, pos); // Paper - check explode first -@@ -148,7 +_,7 @@ +@@ -146,7 +_,7 @@ } Vec3 center = pos.getCenter(); @@ -18,11 +18,11 @@ return InteractionResult.SUCCESS_SERVER; } // CraftBukkit end -@@ -169,7 +_,7 @@ +@@ -167,7 +_,7 @@ @Override - public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { -- super.fallOn(level, state, pos, entity, fallDistance * 0.5F); + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, double fallDistance) { +- super.fallOn(level, state, pos, entity, fallDistance * 0.5); + super.fallOn(level, state, pos, entity, fallDistance); // Purpur - Configurable block fall damage modifiers } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BigDripleafBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BigDripleafBlock.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BigDripleafBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BigDripleafBlock.java.patch index 45532dcb8..20fb7e9e1 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BigDripleafBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BigDripleafBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/BigDripleafBlock.java +++ b/net/minecraft/world/level/block/BigDripleafBlock.java -@@ -261,7 +_,7 @@ +@@ -254,7 +_,7 @@ playTiltSound(level, pos, sound); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/Block.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/Block.java.patch similarity index 86% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/Block.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/Block.java.patch index 7b348e9e6..aee7753ae 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/Block.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/Block.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/Block.java +++ b/net/minecraft/world/level/block/Block.java -@@ -90,6 +_,10 @@ +@@ -99,6 +_,10 @@ public static final int UPDATE_LIMIT = 512; protected final StateDefinition stateDefinition; private BlockState defaultBlockState; @@ -11,7 +11,7 @@ // Paper start - Protect Bedrock and End Portal/Frames from being destroyed public final boolean isDestroyable() { return io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.allowPermanentBlockBreakExploits || -@@ -299,7 +_,7 @@ +@@ -345,7 +_,7 @@ event.setExpToDrop(block.getExpDrop(state, serverLevel, pos, net.minecraft.world.item.ItemStack.EMPTY, true)); // Paper - Properly handle xp dropping event.callEvent(); for (org.bukkit.inventory.ItemStack drop : event.getDrops()) { @@ -20,22 +20,22 @@ } state.spawnAfterBreak(serverLevel, pos, ItemStack.EMPTY, false); // Paper - Properly handle xp dropping block.popExperience(serverLevel, pos, event.getExpToDrop()); // Paper - Properly handle xp dropping -@@ -317,7 +_,7 @@ +@@ -363,7 +_,7 @@ public static void dropResources(BlockState state, LevelAccessor level, BlockPos pos, @Nullable BlockEntity blockEntity) { if (level instanceof ServerLevel) { -- getDrops(state, (ServerLevel)level, pos, blockEntity).forEach(itemStack -> popResource((ServerLevel)level, pos, itemStack)); -+ getDrops(state, (ServerLevel)level, pos, blockEntity).forEach(itemStack -> popResource((ServerLevel)level, pos, applyLoreFromTile(itemStack, blockEntity))); // Purpur - Persistent BlockEntity Lore and DisplayName +- getDrops(state, (ServerLevel)level, pos, blockEntity).forEach(stack -> popResource((ServerLevel)level, pos, stack)); ++ getDrops(state, (ServerLevel)level, pos, blockEntity).forEach(stack -> popResource((ServerLevel)level, pos, applyLoreFromTile(stack, blockEntity))); // Purpur - Persistent BlockEntity Lore and DisplayName state.spawnAfterBreak((ServerLevel)level, pos, ItemStack.EMPTY, true); } } -@@ -329,11 +_,30 @@ +@@ -375,11 +_,30 @@ public static void dropResources(BlockState state, Level level, BlockPos pos, @Nullable BlockEntity blockEntity, @Nullable Entity entity, ItemStack tool, boolean dropExperience) { // Paper end - Properly handle xp dropping if (level instanceof ServerLevel) { -- getDrops(state, (ServerLevel)level, pos, blockEntity, entity, tool).forEach(itemStack -> popResource(level, pos, itemStack)); -+ getDrops(state, (ServerLevel)level, pos, blockEntity, entity, tool).forEach(itemStack -> popResource(level, pos, applyLoreFromTile(itemStack, blockEntity))); // Purpur - Persistent BlockEntity Lore and DisplayName - state.spawnAfterBreak((ServerLevel) level, pos, tool, dropExperience); // Paper - Properly handle xp dropping +- getDrops(state, (ServerLevel)level, pos, blockEntity, entity, tool).forEach(stack -> popResource(level, pos, stack)); ++ getDrops(state, (ServerLevel)level, pos, blockEntity, entity, tool).forEach(stack -> popResource(level, pos, applyLoreFromTile(stack, blockEntity))); // Purpur - Persistent BlockEntity Lore and DisplayName + state.spawnAfterBreak((ServerLevel)level, pos, tool, dropExperience); // Paper - Properly handle xp dropping } } @@ -61,7 +61,7 @@ public static void popResource(Level level, BlockPos pos, ItemStack stack) { double d = EntityType.ITEM.getHeight() / 2.0; double d1 = pos.getX() + 0.5 + Mth.nextDouble(level.random, -0.25, 0.25); -@@ -412,7 +_,15 @@ +@@ -460,7 +_,15 @@ } public void setPlacedBy(Level level, BlockPos pos, BlockState state, @Nullable LivingEntity placer, ItemStack stack) { @@ -78,10 +78,10 @@ public boolean isPossibleToRespawnInThis(BlockState state) { return !state.isSolid() && !state.liquid(); -@@ -423,7 +_,7 @@ +@@ -471,7 +_,7 @@ } - public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, double fallDistance) { - entity.causeFallDamage(fallDistance, 1.0F, entity.damageSources().fall()); + entity.causeFallDamage(fallDistance * fallDistanceMultiplier, fallDamageMultiplier, entity.damageSources().fall()); // Purpur - Configurable block fall damage modifiers } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/Blocks.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/Blocks.java.patch similarity index 94% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/Blocks.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/Blocks.java.patch index be0a86f42..56ad25eb5 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/Blocks.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/Blocks.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/Blocks.java +++ b/net/minecraft/world/level/block/Blocks.java -@@ -6486,6 +_,7 @@ +@@ -6583,6 +_,7 @@ BlockBehaviour.Properties.of() .mapColor(MapColor.PLANT) .forceSolidOff() @@ -8,7 +8,7 @@ .instabreak() .sound(SoundType.AZALEA) .noOcclusion() -@@ -6497,6 +_,7 @@ +@@ -6594,6 +_,7 @@ BlockBehaviour.Properties.of() .mapColor(MapColor.PLANT) .forceSolidOff() diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BubbleColumnBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BubbleColumnBlock.java.patch new file mode 100644 index 000000000..86ef53933 --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BubbleColumnBlock.java.patch @@ -0,0 +1,14 @@ +--- a/net/minecraft/world/level/block/BubbleColumnBlock.java ++++ b/net/minecraft/world/level/block/BubbleColumnBlock.java +@@ -98,9 +_,9 @@ + if (blockState.is(Blocks.BUBBLE_COLUMN)) { + return blockState; + } else if (blockState.is(Blocks.SOUL_SAND)) { +- return Blocks.BUBBLE_COLUMN.defaultBlockState().setValue(DRAG_DOWN, false); ++ return Blocks.BUBBLE_COLUMN.defaultBlockState().setValue(DRAG_DOWN, org.purpurmc.purpur.PurpurConfig.soulSandBlockReverseBubbleColumnFlow); // Purpur - Config to reverse bubble column flow + } else { +- return blockState.is(Blocks.MAGMA_BLOCK) ? Blocks.BUBBLE_COLUMN.defaultBlockState().setValue(DRAG_DOWN, true) : Blocks.WATER.defaultBlockState(); ++ return blockState.is(Blocks.MAGMA_BLOCK) ? Blocks.BUBBLE_COLUMN.defaultBlockState().setValue(DRAG_DOWN, !org.purpurmc.purpur.PurpurConfig.magmaBlockReverseBubbleColumnFlow) : Blocks.WATER.defaultBlockState(); // Purpur - Config to reverse bubble column flow + } + } + diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BushBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BushBlock.java.patch similarity index 84% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BushBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BushBlock.java.patch index b166eb72a..86f13f0eb 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/BushBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/BushBlock.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/world/level/block/BushBlock.java +++ b/net/minecraft/world/level/block/BushBlock.java -@@ -61,4 +_,24 @@ - protected boolean isPathfindable(BlockState state, PathComputationType pathComputationType) { - return pathComputationType == PathComputationType.AIR && !this.hasCollision || super.isPathfindable(state, pathComputationType); +@@ -44,4 +_,24 @@ + public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { + BonemealableBlock.findSpreadableNeighbourPos(level, pos, state).ifPresent(blockPos -> level.setBlockAndUpdate(blockPos, this.defaultBlockState())); } + + // Purpur start - Ability for hoe to replant crops diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CactusBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CactusBlock.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CactusBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CactusBlock.java.patch index 64fecea91..4fec7e3b9 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CactusBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CactusBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/CactusBlock.java +++ b/net/minecraft/world/level/block/CactusBlock.java -@@ -21,7 +_,7 @@ +@@ -22,7 +_,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; @@ -9,7 +9,7 @@ public static final MapCodec CODEC = simpleCodec(CactusBlock::new); public static final IntegerProperty AGE = BlockStateProperties.AGE_15; public static final int MAX_AGE = 15; -@@ -104,7 +_,7 @@ +@@ -117,7 +_,7 @@ protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { for (Direction direction : Direction.Plane.HORIZONTAL) { BlockState blockState = level.getBlockState(pos.relative(direction)); @@ -18,7 +18,7 @@ return false; } } -@@ -128,4 +_,34 @@ +@@ -141,4 +_,34 @@ protected boolean isPathfindable(BlockState state, PathComputationType pathComputationType) { return false; } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CakeBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CakeBlock.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CakeBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CakeBlock.java.patch index f0b3fec97..c78b443f8 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CakeBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CakeBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/CakeBlock.java +++ b/net/minecraft/world/level/block/CakeBlock.java -@@ -119,6 +_,7 @@ +@@ -109,6 +_,7 @@ org.bukkit.event.entity.FoodLevelChangeEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callFoodLevelChangeEvent(player, 2 + oldFoodLevel); if (!event.isCancelled()) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CampfireBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CampfireBlock.java.patch new file mode 100644 index 000000000..6557f2a69 --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CampfireBlock.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/world/level/block/CampfireBlock.java ++++ b/net/minecraft/world/level/block/CampfireBlock.java +@@ -124,7 +_,7 @@ + return this.defaultBlockState() + .setValue(WATERLOGGED, flag) + .setValue(SIGNAL_FIRE, this.isSmokeSource(level.getBlockState(clickedPos.below()))) +- .setValue(LIT, !flag) ++ .setValue(LIT, level.getMinecraftWorld().purpurConfig.campFireLitWhenPlaced && !flag) // Purpur - Campfire option for lit when placed + .setValue(FACING, context.getHorizontalDirection()); + } + diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CarvedPumpkinBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CarvedPumpkinBlock.java.patch similarity index 84% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CarvedPumpkinBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CarvedPumpkinBlock.java.patch index ba95ddd13..3ab8cbc0e 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CarvedPumpkinBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CarvedPumpkinBlock.java.patch @@ -31,6 +31,6 @@ + ironGolem.setSummoner(placer == null ? null : placer.getUUID()); + } + // Purpur end - Summoner API - // clearPatternBlocks(level, patternMatch); // CraftBukkit - moved down - golem.moveTo(pos.getX() + 0.5, pos.getY() + 0.05, pos.getZ() + 0.5, 0.0F, 0.0F); - if (!level.addFreshEntity(golem, (golem.getType() == EntityType.SNOW_GOLEM) ? org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BUILD_SNOWMAN : org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BUILD_IRONGOLEM)) { + // clearPatternBlocks(level, patternMatch); // Paper - moved down + golem.snapTo(pos.getX() + 0.5, pos.getY() + 0.05, pos.getZ() + 0.5, 0.0F, 0.0F); + // Paper start diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CauldronBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CauldronBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CauldronBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CauldronBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CaveVinesBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CaveVinesBlock.java.patch similarity index 86% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CaveVinesBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CaveVinesBlock.java.patch index 829a79ee6..631c2fafe 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CaveVinesBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CaveVinesBlock.java.patch @@ -2,7 +2,7 @@ +++ b/net/minecraft/world/level/block/CaveVinesBlock.java @@ -92,4 +_,11 @@ public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { - level.setBlock(pos, state.setValue(BERRIES, Boolean.valueOf(true)), 2); + level.setBlock(pos, state.setValue(BERRIES, true), 2); } + + // Purpur start - cave vines configurable max growth age diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/ChangeOverTimeBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ChangeOverTimeBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/ChangeOverTimeBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ChangeOverTimeBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/ChestBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ChestBlock.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/ChestBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ChestBlock.java.patch index c2e63ab56..92f2abf28 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/ChestBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ChestBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/ChestBlock.java +++ b/net/minecraft/world/level/block/ChestBlock.java -@@ -357,6 +_,7 @@ +@@ -337,6 +_,7 @@ } public static boolean isBlockedChestByBlock(BlockGetter level, BlockPos pos) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/ComposterBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ComposterBlock.java.patch similarity index 99% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/ComposterBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ComposterBlock.java.patch index 2be94eb48..8ee18624a 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/ComposterBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ComposterBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/ComposterBlock.java +++ b/net/minecraft/world/level/block/ComposterBlock.java -@@ -241,23 +_,52 @@ +@@ -250,23 +_,52 @@ ) { int levelValue = state.getValue(LEVEL); if (levelValue < 8 && COMPOSTABLES.containsKey(stack.getItem())) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CoralBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CoralBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CoralBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CoralBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CropBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CropBlock.java.patch similarity index 95% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CropBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CropBlock.java.patch index f1bbca32a..667d7f96f 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/CropBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/CropBlock.java.patch @@ -1,15 +1,15 @@ --- a/net/minecraft/world/level/block/CropBlock.java +++ b/net/minecraft/world/level/block/CropBlock.java -@@ -182,7 +_,7 @@ +@@ -169,7 +_,7 @@ @Override - protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity) { + protected void entityInside(BlockState state, Level level, BlockPos pos, Entity entity, InsideBlockEffectApplier effectApplier) { if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(level, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent - if (level instanceof ServerLevel serverLevel && entity instanceof Ravager && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit + if (level instanceof ServerLevel serverLevel && entity instanceof Ravager && serverLevel.purpurConfig.ravagerGriefableBlocks.contains(serverLevel.getBlockState(pos).getBlock()) && org.bukkit.craftbukkit.event.CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit // Purpur - Configurable ravager griefable blocks list serverLevel.destroyBlock(pos, true, entity); } -@@ -217,4 +_,15 @@ +@@ -204,4 +_,15 @@ protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(AGE); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/DoorBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/DoorBlock.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/DoorBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/DoorBlock.java.patch index e2733acaa..235a738f9 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/DoorBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/DoorBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/DoorBlock.java +++ b/net/minecraft/world/level/block/DoorBlock.java -@@ -206,6 +_,7 @@ +@@ -199,6 +_,7 @@ protected InteractionResult useWithoutItem(BlockState state, Level level, BlockPos pos, Player player, BlockHitResult hitResult) { if (!this.type.canOpenByHand()) { return InteractionResult.PASS; @@ -8,7 +8,7 @@ } else { state = state.cycle(OPEN); level.setBlock(pos, state, 10); -@@ -294,4 +_,18 @@ +@@ -287,4 +_,18 @@ public static boolean isWoodenDoor(BlockState state) { return state.getBlock() instanceof DoorBlock doorBlock && doorBlock.type().canOpenByHand(); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/DragonEggBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/DragonEggBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/DragonEggBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/DragonEggBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/EnchantingTableBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/EnchantingTableBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/EnchantingTableBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/EnchantingTableBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/FarmBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/FarmBlock.java.patch similarity index 92% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/FarmBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/FarmBlock.java.patch index 960c0f50f..097ec96b1 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/FarmBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/FarmBlock.java.patch @@ -1,11 +1,11 @@ --- a/net/minecraft/world/level/block/FarmBlock.java +++ b/net/minecraft/world/level/block/FarmBlock.java @@ -112,7 +_,7 @@ - public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, double fallDistance) { super.fallOn(level, state, pos, entity, fallDistance); // CraftBukkit - moved here as game rules / events shouldn't affect fall damage. if (level instanceof ServerLevel serverLevel -- && level.random.nextFloat() < fallDistance - 0.5F -+ && (serverLevel.purpurConfig.farmlandTrampleHeight >= 0D ? fallDistance >= serverLevel.purpurConfig.farmlandTrampleHeight : level.random.nextFloat() < fallDistance - 0.5F) // // Purpur - Configurable farmland trample height +- && level.random.nextFloat() < fallDistance - 0.5 ++ && (serverLevel.purpurConfig.farmlandTrampleHeight >= 0D ? fallDistance >= serverLevel.purpurConfig.farmlandTrampleHeight : level.random.nextFloat() < fallDistance - 0.5) // Purpur - Configurable farmland trample height && entity instanceof LivingEntity && (entity instanceof Player || serverLevel.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)) && entity.getBbWidth() * entity.getBbWidth() * entity.getBbHeight() > 0.512F) { @@ -15,7 +15,7 @@ + if (level.purpurConfig.farmlandTramplingDisabled) return; // Purpur - Farmland trampling changes + if (level.purpurConfig.farmlandTramplingOnlyPlayers && !(entity instanceof Player)) return; // Purpur - Farmland trampling changes -+ ++ + // Purpur start - Ability to re-add farmland mechanics from Alpha + if (level.purpurConfig.farmlandAlpha) { + Block block = level.getBlockState(pos.below()).getBlock(); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/GrowingPlantHeadBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/GrowingPlantHeadBlock.java.patch similarity index 83% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/GrowingPlantHeadBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/GrowingPlantHeadBlock.java.patch index f9b8e4aac..e8b905a8b 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/GrowingPlantHeadBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/GrowingPlantHeadBlock.java.patch @@ -4,8 +4,8 @@ @Override public BlockState getStateForPlacement(RandomSource random) { -- return this.defaultBlockState().setValue(AGE, Integer.valueOf(random.nextInt(25))); -+ return this.defaultBlockState().setValue(AGE, Integer.valueOf(random.nextInt(getMaxGrowthAge()))); // Purpur - kelp, cave, weeping, and twisting configurable max growth age +- return this.defaultBlockState().setValue(AGE, random.nextInt(25)); ++ return this.defaultBlockState().setValue(AGE, random.nextInt(getMaxGrowthAge())); // Purpur - kelp, cave, weeping, and twisting configurable max growth age } @Override @@ -28,8 +28,8 @@ } public BlockState getMaxAgeState(BlockState state) { -- return state.setValue(AGE, Integer.valueOf(25)); -+ return state.setValue(AGE, Integer.valueOf(getMaxGrowthAge())); // Purpur - kelp, cave, weeping, and twisting configurable max growth age +- return state.setValue(AGE, 25); ++ return state.setValue(AGE, getMaxGrowthAge()); // Purpur - kelp, cave, weeping, and twisting configurable max growth age } public boolean isMaxAge(BlockState state) { @@ -38,7 +38,7 @@ } protected BlockState updateBodyAfterConvertedFromHead(BlockState head, BlockState body) { -@@ -130,13 +_,13 @@ +@@ -137,13 +_,13 @@ @Override public void performBonemeal(ServerLevel level, RandomSource random, BlockPos pos, BlockState state) { BlockPos blockPos = pos.relative(this.growthDirection); @@ -47,14 +47,14 @@ int blocksToGrowWhenBonemealed = this.getBlocksToGrowWhenBonemealed(random); for (int i = 0; i < blocksToGrowWhenBonemealed && this.canGrowInto(level.getBlockState(blockPos)); i++) { - level.setBlockAndUpdate(blockPos, state.setValue(AGE, Integer.valueOf(min))); + level.setBlockAndUpdate(blockPos, state.setValue(AGE, min)); blockPos = blockPos.relative(this.growthDirection); - min = Math.min(min + 1, 25); + min = Math.min(min + 1, getMaxGrowthAge()); // Purpur - kelp, cave, weeping, and twisting configurable max growth age } } -@@ -148,4 +_,6 @@ +@@ -155,4 +_,6 @@ protected GrowingPlantHeadBlock getHeadBlock() { return this; } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/HayBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/HayBlock.java.patch similarity index 90% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/HayBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/HayBlock.java.patch index d8013d2da..1b21c6e0a 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/HayBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/HayBlock.java.patch @@ -3,7 +3,7 @@ @@ -23,6 +_,6 @@ @Override - public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, float fallDistance) { + public void fallOn(Level level, BlockState state, BlockPos pos, Entity entity, double fallDistance) { - entity.causeFallDamage(fallDistance, 0.2F, level.damageSources().fall()); + super.fallOn(level, state, pos, entity, fallDistance); // Purpur - Configurable block fall damage modifiers } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/IceBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/IceBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/IceBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/IceBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/KelpBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/KelpBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/KelpBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/KelpBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/LiquidBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/LiquidBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/LiquidBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/LiquidBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/MagmaBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/MagmaBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/MagmaBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/MagmaBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/NetherPortalBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/NetherPortalBlock.java.patch similarity index 85% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/NetherPortalBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/NetherPortalBlock.java.patch index 282b160de..b4259d9d3 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/NetherPortalBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/NetherPortalBlock.java.patch @@ -4,12 +4,12 @@ protected void randomTick(BlockState state, ServerLevel level, BlockPos pos, RandomSource random) { if (level.spigotConfig.enableZombiePigmenPortalSpawns && level.dimensionType().natural() // Spigot && level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) -- && random.nextInt(2000) < level.getDifficulty().getId()) { -+ && random.nextInt(level.purpurConfig.piglinPortalSpawnModifier) < level.getDifficulty().getId()) { // Purpur - Piglin portal spawn modifier +- && random.nextInt(2000) < level.getDifficulty().getId() ++ && random.nextInt(level.purpurConfig.piglinPortalSpawnModifier) < level.getDifficulty().getId() // Purpur - Piglin portal spawn modifier + && level.anyPlayerCloseEnoughForSpawning(pos)) { while (level.getBlockState(pos).is(this)) { pos = pos.below(); - } -@@ -129,7 +_,7 @@ +@@ -130,7 +_,7 @@ @Override public int getPortalTransitionTime(ServerLevel level, Entity entity) { return entity instanceof Player player diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/NetherWartBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/NetherWartBlock.java.patch similarity index 92% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/NetherWartBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/NetherWartBlock.java.patch index 95b1bb2c1..362dae20a 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/NetherWartBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/NetherWartBlock.java.patch @@ -4,12 +4,12 @@ import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraft.world.phys.shapes.VoxelShape; --public class NetherWartBlock extends BushBlock { -+public class NetherWartBlock extends BushBlock implements BonemealableBlock { // Purpur - bonemealable netherwart +-public class NetherWartBlock extends VegetationBlock { ++public class NetherWartBlock extends VegetationBlock implements BonemealableBlock { // Purpur - bonemealable netherwart public static final MapCodec CODEC = simpleCodec(NetherWartBlock::new); public static final int MAX_AGE = 3; public static final IntegerProperty AGE = BlockStateProperties.AGE_3; -@@ -70,4 +_,34 @@ +@@ -65,4 +_,34 @@ protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(AGE); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/NoteBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/NoteBlock.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/NoteBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/NoteBlock.java.patch index b9260673f..42c3d0b22 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/NoteBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/NoteBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/NoteBlock.java +++ b/net/minecraft/world/level/block/NoteBlock.java -@@ -107,7 +_,7 @@ +@@ -101,7 +_,7 @@ } private void playNote(@Nullable Entity entity, BlockState state, Level level, BlockPos pos) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/ObserverBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ObserverBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/ObserverBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/ObserverBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/PointedDripstoneBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/PointedDripstoneBlock.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/PointedDripstoneBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/PointedDripstoneBlock.java.patch index 853ec1c3a..cad7d9a3c 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/PointedDripstoneBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/PointedDripstoneBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/PointedDripstoneBlock.java +++ b/net/minecraft/world/level/block/PointedDripstoneBlock.java -@@ -197,20 +_,20 @@ +@@ -193,20 +_,20 @@ @VisibleForTesting public static void maybeTransferFluid(BlockState state, ServerLevel level, BlockPos pos, float randChance) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/PoweredRailBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/PoweredRailBlock.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/PoweredRailBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/PoweredRailBlock.java.patch index 2b31f8cfb..f6c12cc4c 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/PoweredRailBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/PoweredRailBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/PoweredRailBlock.java +++ b/net/minecraft/world/level/block/PoweredRailBlock.java -@@ -34,7 +_,7 @@ +@@ -28,7 +_,7 @@ } protected boolean findPoweredRailSignal(Level level, BlockPos pos, BlockState state, boolean searchForward, int recursionCount) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/RespawnAnchorBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/RespawnAnchorBlock.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/RespawnAnchorBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/RespawnAnchorBlock.java.patch index 661923a83..c5ac40711 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/RespawnAnchorBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/RespawnAnchorBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/RespawnAnchorBlock.java +++ b/net/minecraft/world/level/block/RespawnAnchorBlock.java -@@ -159,7 +_,7 @@ +@@ -160,7 +_,7 @@ }; Vec3 center = pos2.getCenter(); level.explode( diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SculkShriekerBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SculkShriekerBlock.java.patch new file mode 100644 index 000000000..aa23616be --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SculkShriekerBlock.java.patch @@ -0,0 +1,11 @@ +--- a/net/minecraft/world/level/block/SculkShriekerBlock.java ++++ b/net/minecraft/world/level/block/SculkShriekerBlock.java +@@ -118,7 +_,7 @@ + @Nullable + @Override + public BlockState getStateForPlacement(BlockPlaceContext context) { +- return this.defaultBlockState().setValue(WATERLOGGED, context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER); ++ return this.defaultBlockState().setValue(WATERLOGGED, context.getLevel().getFluidState(context.getClickedPos()).getType() == Fluids.WATER).setValue(SculkShriekerBlock.CAN_SUMMON, context.getLevel().purpurConfig.sculkShriekerCanSummonDefault); // Purpur - Config for sculk shrieker can_summon state + } + + @Override diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SlabBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SlabBlock.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SlabBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SlabBlock.java.patch index ec93007cc..9e9c9b817 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SlabBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SlabBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/SlabBlock.java +++ b/net/minecraft/world/level/block/SlabBlock.java -@@ -150,4 +_,25 @@ +@@ -144,4 +_,25 @@ return false; } } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SnowLayerBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SnowLayerBlock.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SnowLayerBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SnowLayerBlock.java.patch index f6406d510..ca87324a4 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SnowLayerBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SnowLayerBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/SnowLayerBlock.java +++ b/net/minecraft/world/level/block/SnowLayerBlock.java -@@ -96,6 +_,7 @@ +@@ -76,6 +_,7 @@ @Override protected boolean canSurvive(BlockState state, LevelReader level, BlockPos pos) { BlockState blockState = level.getBlockState(pos.below()); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SpawnerBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SpawnerBlock.java.patch similarity index 99% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SpawnerBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SpawnerBlock.java.patch index cf68daf1b..be5975798 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SpawnerBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SpawnerBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/SpawnerBlock.java +++ b/net/minecraft/world/level/block/SpawnerBlock.java -@@ -43,6 +_,57 @@ +@@ -38,6 +_,57 @@ ); } @@ -58,7 +58,7 @@ @Override protected void spawnAfterBreak(BlockState state, ServerLevel level, BlockPos pos, ItemStack stack, boolean dropExperience) { super.spawnAfterBreak(state, level, pos, stack, dropExperience); -@@ -51,6 +_,7 @@ +@@ -46,6 +_,7 @@ @Override public int getExpDrop(BlockState state, ServerLevel level, BlockPos pos, ItemStack stack, boolean dropExperience) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SpongeBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SpongeBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SpongeBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SpongeBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/StonecutterBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/StonecutterBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/StonecutterBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/StonecutterBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SugarCaneBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SugarCaneBlock.java.patch similarity index 95% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SugarCaneBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SugarCaneBlock.java.patch index b39dc02a3..f388f13ce 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/SugarCaneBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/SugarCaneBlock.java.patch @@ -8,8 +8,8 @@ +public class SugarCaneBlock extends Block implements BonemealableBlock { // Purpur - bonemealable sugarcane public static final MapCodec CODEC = simpleCodec(SugarCaneBlock::new); public static final IntegerProperty AGE = BlockStateProperties.AGE_15; - protected static final float AABB_OFFSET = 6.0F; -@@ -113,4 +_,34 @@ + private static final VoxelShape SHAPE = Block.column(12.0, 0.0, 16.0); +@@ -112,4 +_,34 @@ protected void createBlockStateDefinition(StateDefinition.Builder builder) { builder.add(AGE); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/TurtleEggBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/TurtleEggBlock.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/TurtleEggBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/TurtleEggBlock.java.patch index d6e5654f9..118021357 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/TurtleEggBlock.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/TurtleEggBlock.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/TurtleEggBlock.java +++ b/net/minecraft/world/level/block/TurtleEggBlock.java -@@ -157,7 +_,7 @@ +@@ -156,7 +_,7 @@ private boolean shouldUpdateHatchLevel(Level level) { float timeOfDay = level.getTimeOfDay(1.0F); @@ -9,7 +9,7 @@ } @Override -@@ -192,9 +_,31 @@ +@@ -189,9 +_,31 @@ } private boolean canDestroyEgg(ServerLevel level, Entity entity) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/TwistingVinesBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/TwistingVinesBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/TwistingVinesBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/TwistingVinesBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/WeepingVinesBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/WeepingVinesBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/WeepingVinesBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/WeepingVinesBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/WitherSkullBlock.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/WitherSkullBlock.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/WitherSkullBlock.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/WitherSkullBlock.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch index 71426f386..4cb4b65da 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +++ b/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java -@@ -191,6 +_,21 @@ +@@ -186,6 +_,21 @@ } ItemStack itemStack = furnace.items.get(1); @@ -22,7 +22,7 @@ ItemStack itemStack1 = furnace.items.get(0); boolean flag1 = !itemStack1.isEmpty(); boolean flag2 = !itemStack.isEmpty(); -@@ -274,6 +_,8 @@ +@@ -269,6 +_,8 @@ if (flag) { setChanged(level, pos, state); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch similarity index 91% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch index 8987119ae..8de0db582 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BeaconBlockEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/entity/BeaconBlockEntity.java +++ b/net/minecraft/world/level/block/entity/BeaconBlockEntity.java -@@ -139,6 +_,16 @@ +@@ -142,6 +_,16 @@ public double getEffectRange() { if (this.effectRange < 0) { @@ -17,7 +17,7 @@ return this.levels * 10 + 10; } else { return effectRange; -@@ -168,6 +_,7 @@ +@@ -171,6 +_,7 @@ int y = pos.getY(); int z = pos.getZ(); BlockPos blockPos; @@ -25,15 +25,15 @@ if (blockEntity.lastCheckY < y) { blockPos = pos; blockEntity.checkingBeamSections = Lists.newArrayList(); -@@ -197,6 +_,7 @@ +@@ -200,6 +_,7 @@ } } } else { + if (level.purpurConfig.beaconAllowEffectsWithTintedGlass && blockState.getBlock().equals(Blocks.TINTED_GLASS)) {isTintedGlass = true;} // Purpur - allow beacon effects when covered by tinted glass - if (beaconBeamSection == null || blockState.getLightBlock() >= 15 && !blockState.is(Blocks.BEDROCK)) { + if (section == null || blockState.getLightBlock() >= 15 && !blockState.is(Blocks.BEDROCK)) { blockEntity.checkingBeamSections.clear(); blockEntity.lastCheckY = height; -@@ -216,7 +_,7 @@ +@@ -219,7 +_,7 @@ blockEntity.levels = updateBase(level, x, y, z); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java.patch similarity index 97% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java.patch index 091db9f55..c78bf7ee8 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java +++ b/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -@@ -76,7 +_,7 @@ +@@ -72,7 +_,7 @@ "leash", "UUID" ); @@ -9,7 +9,7 @@ private static final int MIN_TICKS_BEFORE_REENTERING_HIVE = 400; private static final int MIN_OCCUPATION_TICKS_NECTAR = 2400; public static final int MIN_OCCUPATION_TICKS_NECTARLESS = 600; -@@ -154,11 +_,33 @@ +@@ -147,11 +_,33 @@ return list; } @@ -43,7 +43,7 @@ // Paper start - Add EntityBlockStorage clearEntities public void clearBees() { this.stored.clear(); -@@ -408,8 +_,8 @@ +@@ -389,8 +_,8 @@ return this.stored.stream().map(BeehiveBlockEntity.BeeData::toOccupant).toList(); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/BlockEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch similarity index 93% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/BlockEntity.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch index 49b53bf98..b95caba81 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/BlockEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/BlockEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/entity/BlockEntity.java +++ b/net/minecraft/world/level/block/entity/BlockEntity.java -@@ -84,6 +_,14 @@ +@@ -104,6 +_,14 @@ this.persistentDataContainer.putAll((CompoundTag) persistentDataTag); } // Paper end - read persistent data container @@ -15,7 +15,7 @@ } public final void loadWithComponents(CompoundTag tag, HolderLookup.Provider registries) { -@@ -98,6 +_,15 @@ +@@ -116,6 +_,15 @@ this.loadAdditional(tag, registries); } @@ -31,10 +31,11 @@ protected void saveAdditional(CompoundTag tag, HolderLookup.Provider registries) { } -@@ -378,4 +_,16 @@ - - T getOrDefault(DataComponentType component, T defaultValue); +@@ -377,4 +_,17 @@ + private ComponentHelper() { + } } ++ + // Purpur start - Persistent BlockEntity Lore and DisplayName + @Nullable + private net.minecraft.world.item.component.ItemLore persistentLore = null; diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/ConduitBlockEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/ConduitBlockEntity.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/ConduitBlockEntity.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/ConduitBlockEntity.java.patch index fde6e3fb4..2b9fe8924 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/ConduitBlockEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/ConduitBlockEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/entity/ConduitBlockEntity.java +++ b/net/minecraft/world/level/block/entity/ConduitBlockEntity.java -@@ -155,7 +_,7 @@ +@@ -151,7 +_,7 @@ BlockPos blockPos1 = pos.offset(i, i1, i2x); BlockState blockState = level.getBlockState(blockPos1); @@ -9,7 +9,7 @@ if (blockState.is(block)) { positions.add(blockPos1); } -@@ -170,13 +_,13 @@ +@@ -166,13 +_,13 @@ private static void applyEffects(Level level, BlockPos pos, List positions) { // CraftBukkit start @@ -26,7 +26,7 @@ // CraftBukkit start return i; } -@@ -213,17 +_,17 @@ +@@ -209,17 +_,17 @@ blockEntity.destroyTargetUUID = null; } else if (blockEntity.destroyTarget == null) { List entitiesOfClass = level.getEntitiesOfClass( @@ -47,7 +47,7 @@ level.playSound( null, blockEntity.destroyTarget.getX(), -@@ -253,16 +_,22 @@ +@@ -249,16 +_,22 @@ } public static AABB getDestroyRangeAABB(BlockPos pos) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/EnchantingTableBlockEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/EnchantingTableBlockEntity.java.patch similarity index 69% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/EnchantingTableBlockEntity.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/EnchantingTableBlockEntity.java.patch index 5f6a1f407..1f4ddb733 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/EnchantingTableBlockEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/EnchantingTableBlockEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/entity/EnchantingTableBlockEntity.java +++ b/net/minecraft/world/level/block/entity/EnchantingTableBlockEntity.java -@@ -28,6 +_,7 @@ +@@ -31,6 +_,7 @@ private static final RandomSource RANDOM = RandomSource.create(); @Nullable private Component name; @@ -8,23 +8,22 @@ public EnchantingTableBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityType.ENCHANTING_TABLE, pos, state); -@@ -39,6 +_,7 @@ +@@ -42,12 +_,14 @@ if (this.hasCustomName()) { - tag.putString("CustomName", Component.Serializer.toJson(this.name, registries)); + tag.store("CustomName", ComponentSerialization.CODEC, registries.createSerializationContext(NbtOps.INSTANCE), this.name); } + tag.putInt("Purpur.Lapis", this.lapis); // Purpur - Enchantment Table Persists Lapis } @Override -@@ -47,6 +_,7 @@ - if (tag.contains("CustomName", 8)) { - this.name = parseCustomNameSafe(tag.getString("CustomName"), registries); - } -+ this.lapis = tag.getInt("Purpur.Lapis"); // Purpur - Enchantment Table Persists Lapis + protected void loadAdditional(CompoundTag tag, HolderLookup.Provider registries) { + super.loadAdditional(tag, registries); + this.name = parseCustomNameSafe(tag.get("CustomName"), registries); ++ this.lapis = tag.getIntOr("Purpur.Lapis", 0); // Purpur - Enchantment Table Persists Lapis } public static void bookAnimationTick(Level level, BlockPos pos, BlockState state, EnchantingTableBlockEntity enchantingTable) { -@@ -138,4 +_,14 @@ +@@ -139,4 +_,14 @@ public void removeComponentsFromTag(CompoundTag tag) { tag.remove("CustomName"); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch similarity index 99% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch index 96784944d..5577c229c 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/entity/SignBlockEntity.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/block/entity/SignBlockEntity.java +++ b/net/minecraft/world/level/block/entity/SignBlockEntity.java -@@ -163,16 +_,32 @@ +@@ -151,16 +_,32 @@ return this.setText(updater.apply(text), isFrontText); } @@ -35,7 +35,7 @@ ); } } -@@ -310,6 +_,28 @@ +@@ -297,6 +_,28 @@ // CraftBukkit - this return new CommandSourceStack(commandSource, Vec3.atCenterOf(pos), Vec2.ZERO, (ServerLevel)level, 2, string, component, level.getServer(), player); // Paper - Fix commands from signs not firing command events } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/piston/PistonStructureResolver.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/piston/PistonStructureResolver.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/block/piston/PistonStructureResolver.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/block/piston/PistonStructureResolver.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch similarity index 77% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch index 262a755d6..41c642131 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/EntityStorage.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/world/level/chunk/storage/EntityStorage.java +++ b/net/minecraft/world/level/chunk/storage/EntityStorage.java -@@ -106,6 +_,7 @@ - } - // Paper end - Entity load/save limit per chunk +@@ -89,6 +_,7 @@ + ListTag listTag = new ListTag(); + entities.getEntities().forEach(entity -> { CompoundTag compoundTag1 = new CompoundTag(); + if (!entity.canSaveToDisk()) return; // Purpur - Add canSaveToDisk to Entity if (entity.save(compoundTag1)) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/chunk/storage/RegionFileStorage.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/RegionFileStorage.java.patch similarity index 98% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/chunk/storage/RegionFileStorage.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/RegionFileStorage.java.patch index aa1888597..f9e571450 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/chunk/storage/RegionFileStorage.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/chunk/storage/RegionFileStorage.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/chunk/storage/RegionFileStorage.java +++ b/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -@@ -283,7 +_,7 @@ +@@ -49,7 +_,7 @@ // Paper start private static void printOversizedLog(String msg, Path file, int x, int z) { diff --git a/purpur-server/minecraft-patches/sources/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch new file mode 100644 index 000000000..5652d79c6 --- /dev/null +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/levelgen/PhantomSpawner.java.patch @@ -0,0 +1,28 @@ +--- a/net/minecraft/world/level/levelgen/PhantomSpawner.java ++++ b/net/minecraft/world/level/levelgen/PhantomSpawner.java +@@ -38,13 +_,13 @@ + int spawnAttemptMaxSeconds = level.paperConfig().entities.behavior.phantomsSpawnAttemptMaxSeconds; + this.nextTick += (spawnAttemptMinSeconds + randomSource.nextInt(spawnAttemptMaxSeconds - spawnAttemptMinSeconds + 1)) * 20; + // Paper end - Ability to control player's insomnia and phantoms +- if (level.getSkyDarken() >= 5 || !level.dimensionType().hasSkyLight()) { ++ if (level.getSkyDarken() >= level.purpurConfig.phantomSpawnMinSkyDarkness || !level.dimensionType().hasSkyLight()) { // Purpur - Add phantom spawning options + for (ServerPlayer serverPlayer : level.players()) { + if (!serverPlayer.isSpectator() && (!level.paperConfig().entities.behavior.phantomsDoNotSpawnOnCreativePlayers || !serverPlayer.isCreative())) { // Paper - Add phantom creative and insomniac controls + BlockPos blockPos = serverPlayer.blockPosition(); +- if (!level.dimensionType().hasSkyLight() || blockPos.getY() >= level.getSeaLevel() && level.canSeeSky(blockPos)) { ++ if (!level.dimensionType().hasSkyLight() || (!level.purpurConfig.phantomSpawnOnlyAboveSeaLevel || blockPos.getY() >= level.getSeaLevel()) && (!level.purpurConfig.phantomSpawnOnlyWithVisibleSky || level.canSeeSky(blockPos))) { // Purpur - Add phantom spawning options + DifficultyInstance currentDifficultyAt = level.getCurrentDifficultyAt(blockPos); +- if (currentDifficultyAt.isHarderThan(randomSource.nextFloat() * 3.0F)) { ++ if (currentDifficultyAt.isHarderThan(randomSource.nextFloat() * (float) level.purpurConfig.phantomSpawnLocalDifficultyChance)) { // Purpur - Add phantom spawning options + ServerStatsCounter stats = serverPlayer.getStats(); + int i = Mth.clamp(stats.getValue(Stats.CUSTOM.get(Stats.TIME_SINCE_REST)), 1, Integer.MAX_VALUE); + int i1 = 24000; +@@ -56,7 +_,7 @@ + FluidState fluidState = level.getFluidState(blockPos1); + if (NaturalSpawner.isValidEmptySpawnBlock(level, blockPos1, blockState, fluidState, EntityType.PHANTOM)) { + SpawnGroupData spawnGroupData = null; +- int i2 = 1 + randomSource.nextInt(currentDifficultyAt.getDifficulty().getId() + 1); ++ int i2 = level.purpurConfig.phantomSpawnMinPerAttempt + randomSource.nextInt((level.purpurConfig.phantomSpawnMaxPerAttempt < 0 ? currentDifficultyAt.getDifficulty().getId() : level.purpurConfig.phantomSpawnMaxPerAttempt - level.purpurConfig.phantomSpawnMinPerAttempt) + 1); // Purpur - Add phantom spawning options + + for (int i3 = 0; i3 < i2; i3++) { + // Paper start - PhantomPreSpawnEvent diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/material/FlowingFluid.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/material/FlowingFluid.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/material/FlowingFluid.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/material/FlowingFluid.java.patch index 78e131bae..a2b76868b 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/material/FlowingFluid.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/material/FlowingFluid.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/material/FlowingFluid.java +++ b/net/minecraft/world/level/material/FlowingFluid.java -@@ -232,7 +_,7 @@ +@@ -190,7 +_,7 @@ } } @@ -9,7 +9,7 @@ BlockState blockState1 = level.getBlockState(mutableBlockPos.setWithOffset(pos, Direction.DOWN)); FluidState fluidState1 = blockState1.getFluidState(); if (blockState1.isSolid() || this.isSourceBlockOfThisType(fluidState1)) { -@@ -319,6 +_,12 @@ +@@ -267,6 +_,12 @@ } protected abstract boolean canConvertToSource(ServerLevel level); diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/material/LavaFluid.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/material/LavaFluid.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/material/LavaFluid.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/material/LavaFluid.java.patch index 2d7d530ae..502b87bdc 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/material/LavaFluid.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/material/LavaFluid.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/material/LavaFluid.java +++ b/net/minecraft/world/level/material/LavaFluid.java -@@ -177,7 +_,7 @@ +@@ -189,7 +_,7 @@ @Override public int getTickDelay(LevelReader level) { @@ -9,7 +9,7 @@ } @Override -@@ -198,6 +_,13 @@ +@@ -210,6 +_,13 @@ private void fizz(LevelAccessor level, BlockPos pos) { level.levelEvent(1501, pos, 0); } diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/material/WaterFluid.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/material/WaterFluid.java.patch similarity index 88% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/material/WaterFluid.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/material/WaterFluid.java.patch index 88d21ec4e..3bc14791b 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/material/WaterFluid.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/material/WaterFluid.java.patch @@ -1,15 +1,16 @@ --- a/net/minecraft/world/level/material/WaterFluid.java +++ b/net/minecraft/world/level/material/WaterFluid.java -@@ -74,6 +_,12 @@ - protected boolean canConvertToSource(ServerLevel level) { +@@ -78,6 +_,13 @@ return level.getGameRules().getBoolean(GameRules.RULE_WATER_SOURCE_CONVERSION); } + + // Purpur start - Implement infinite liquids + @Override + protected int getRequiredSources(Level level) { + return level.purpurConfig.waterInfiniteRequiredSources; + } + // Purpur end - Implement infinite liquids ++ // Paper start - Add BlockBreakBlockEvent @Override protected void beforeDestroyingBlock(LevelAccessor level, BlockPos pos, BlockState state, BlockPos source) { diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/portal/PortalShape.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/portal/PortalShape.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/portal/PortalShape.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/portal/PortalShape.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java.patch similarity index 96% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java.patch index 1260ca9e5..138758dfe 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java.patch @@ -1,6 +1,6 @@ --- a/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java +++ b/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java -@@ -68,6 +_,7 @@ +@@ -81,6 +_,7 @@ public final Map decorations = Maps.newLinkedHashMap(); private final Map frameMarkers = Maps.newHashMap(); private int trackedDecorationCount; diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java.patch similarity index 100% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/level/storage/loot/functions/EnchantedCountIncreaseFunction.java.patch diff --git a/purpur-server/minecraft-patches/rejected/net/minecraft/world/phys/AABB.java.patch b/purpur-server/minecraft-patches/sources/net/minecraft/world/phys/AABB.java.patch similarity index 67% rename from purpur-server/minecraft-patches/rejected/net/minecraft/world/phys/AABB.java.patch rename to purpur-server/minecraft-patches/sources/net/minecraft/world/phys/AABB.java.patch index db94aa724..df49f561e 100644 --- a/purpur-server/minecraft-patches/rejected/net/minecraft/world/phys/AABB.java.patch +++ b/purpur-server/minecraft-patches/sources/net/minecraft/world/phys/AABB.java.patch @@ -1,8 +1,8 @@ --- a/net/minecraft/world/phys/AABB.java +++ b/net/minecraft/world/phys/AABB.java -@@ -442,4 +_,10 @@ - center.x - xSize / 2.0, center.y - ySize / 2.0, center.z - zSize / 2.0, center.x + xSize / 2.0, center.y + ySize / 2.0, center.z + zSize / 2.0 - ); +@@ -465,4 +_,10 @@ + return new AABB(this.minX, this.minY, this.minZ, this.maxX, this.maxY, this.maxZ); + } } + + // Purpur start - Stop squids floating on top of water - tuinity added method diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurConfig.java index c4cce5eb0..f5adfffd2 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -74,8 +74,8 @@ public class PurpurConfig { commands = new HashMap<>(); commands.put("purpur", new PurpurCommand("purpur")); - version = getInt("config-version", 41); - set("config-version", 41); + version = getInt("config-version", 42); + set("config-version", 42); readConfig(PurpurConfig.class, null); diff --git a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 1dd74216e..a1f895bb9 100644 --- a/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/purpur-server/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -3404,7 +3404,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyOnlyBaby = true; public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; - public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; + public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = false; public boolean zombifiedPiglinTakeDamageFromWater = false; public boolean zombifiedPiglinAlwaysDropExp = false; private void zombifiedPiglinSettings() { @@ -3416,6 +3416,9 @@ public class PurpurWorldConfig { set("mobs.zombified_piglin.attributes.max-health", null); set("mobs.zombified_piglin.attributes.max_health", oldValue); } + if (PurpurConfig.version < 42) { + set("mobs.zombified_piglin.count-as-player-kill-when-angry", false); + } zombifiedPiglinMaxHealth = getDouble("mobs.zombified_piglin.attributes.max_health", zombifiedPiglinMaxHealth); zombifiedPiglinScale = Mth.clamp(getDouble("mobs.zombified_piglin.attributes.scale", zombifiedPiglinScale), 0.0625D, 16.0D); zombifiedPiglinSpawnReinforcements = getDouble("mobs.zombified_piglin.attributes.spawn_reinforcements", zombifiedPiglinSpawnReinforcements);