diff --git a/patches/unapplied-server/0051-Implement-infinite-liquids.patch b/patches/server/0049-Implement-infinite-liquids.patch similarity index 95% rename from patches/unapplied-server/0051-Implement-infinite-liquids.patch rename to patches/server/0049-Implement-infinite-liquids.patch index 8b4792eff..e52ee6bdf 100644 --- a/patches/unapplied-server/0051-Implement-infinite-liquids.patch +++ b/patches/server/0049-Implement-infinite-liquids.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement infinite liquids diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -index 6411aa4ff6bd4cabb25c426fa8f4a7eedb969c03..0fe597d32a0e15ea67b32925c1a62e8c143ff81d 100644 +index c2943d892b067b3f1fb3b93301a092e912d71f08..a091c51476214977d7a9729b5c72e8478fe4a391 100644 --- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java +++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -@@ -227,7 +227,7 @@ public abstract class FlowingFluid extends Fluid { +@@ -217,7 +217,7 @@ public abstract class FlowingFluid extends Fluid { } } @@ -17,7 +17,7 @@ index 6411aa4ff6bd4cabb25c426fa8f4a7eedb969c03..0fe597d32a0e15ea67b32925c1a62e8c BlockState iblockdata2 = world.getBlockState(pos.below()); FluidState fluid1 = iblockdata2.getFluidState(); -@@ -336,6 +336,12 @@ public abstract class FlowingFluid extends Fluid { +@@ -301,6 +301,12 @@ public abstract class FlowingFluid extends Fluid { protected abstract boolean canConvertToSource(Level world); diff --git a/patches/unapplied-server/0052-Make-lava-flow-speed-configurable.patch b/patches/server/0050-Make-lava-flow-speed-configurable.patch similarity index 100% rename from patches/unapplied-server/0052-Make-lava-flow-speed-configurable.patch rename to patches/server/0050-Make-lava-flow-speed-configurable.patch diff --git a/patches/unapplied-server/0053-Add-player-death-exp-control-options.patch b/patches/server/0051-Add-player-death-exp-control-options.patch similarity index 95% rename from patches/unapplied-server/0053-Add-player-death-exp-control-options.patch rename to patches/server/0051-Add-player-death-exp-control-options.patch index 10f253acf..ae4a16619 100644 --- a/patches/unapplied-server/0053-Add-player-death-exp-control-options.patch +++ b/patches/server/0051-Add-player-death-exp-control-options.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add player death exp control options diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 97805659af862213e9217c408519563de2be5b35..e68ed7339d8aed2b97e310edeee3960611ed7bf1 100644 +index d5383e9cbbee2f9d4223319ae38abed41a13cfb3..a838f339dd0085660164b0eb1597e0a14e4de6f4 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -1944,9 +1944,19 @@ public abstract class Player extends LivingEntity { +@@ -1962,9 +1962,19 @@ public abstract class Player extends LivingEntity { @Override public int getExperienceReward() { if (!this.level().getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY) && !this.isSpectator()) { diff --git a/patches/unapplied-server/0054-Configurable-void-damage-height-and-damage.patch b/patches/server/0052-Configurable-void-damage-height-and-damage.patch similarity index 89% rename from patches/unapplied-server/0054-Configurable-void-damage-height-and-damage.patch rename to patches/server/0052-Configurable-void-damage-height-and-damage.patch index ebba07669..8adbee6ec 100644 --- a/patches/unapplied-server/0054-Configurable-void-damage-height-and-damage.patch +++ b/patches/server/0052-Configurable-void-damage-height-and-damage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable void damage height and damage diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index f8db28b15e551fc0e0c7f37c355237685c637529..7fe6f44d25790cd222b700cf5ce1d5f36d89e650 100644 +index 429d1a3fd7a75fe3dc8eb8d467ad4f2bd99e0212..f0ba7603795eb1fde01dc86cd3d8b02d73a55869 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -912,7 +912,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -948,7 +948,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public void checkBelowWorld() { // Paper start - Configurable nether ceiling damage @@ -18,10 +18,10 @@ index f8db28b15e551fc0e0c7f37c355237685c637529..7fe6f44d25790cd222b700cf5ce1d5f3 && (!(this instanceof Player player) || !player.getAbilities().invulnerable))) { // Paper end - Configurable nether ceiling damage diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index a065009d01a5e28a3054241f30e5bedf21350cb5..c80e2c400f264d7d195dbf87f5dec95ba5df7444 100644 +index 7b210484fd10e6e994c66afb45f8a28ffb5812f1..ed8833ed95584cdf9be2b931915277c04beac6ee 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2563,7 +2563,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2592,7 +2592,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @Override protected void onBelowWorld() { diff --git a/patches/unapplied-server/0055-Add-canSaveToDisk-to-Entity.patch b/patches/server/0053-Add-canSaveToDisk-to-Entity.patch similarity index 87% rename from patches/unapplied-server/0055-Add-canSaveToDisk-to-Entity.patch rename to patches/server/0053-Add-canSaveToDisk-to-Entity.patch index e20c9a2b9..cd30c40fc 100644 --- a/patches/unapplied-server/0055-Add-canSaveToDisk-to-Entity.patch +++ b/patches/server/0053-Add-canSaveToDisk-to-Entity.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add canSaveToDisk to Entity diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index a01d19ab227621ffa36e9c1bb840f452a856eaa8..10a0f2b4968600f088677103b0bfbe5f69aa4428 100644 +index f0ba7603795eb1fde01dc86cd3d8b02d73a55869..a99d04b820c230422bc82a3e0e094a79ab0c5c33 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -558,6 +558,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -558,6 +558,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } @@ -20,26 +20,26 @@ index a01d19ab227621ffa36e9c1bb840f452a856eaa8..10a0f2b4968600f088677103b0bfbe5f return this.hardCollides; } diff --git a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java -index f5e1aa316a90bf2cd9c997b76830096d4fbbee42..c37b3486dcc75c5c78d605afeff2e3f723940636 100644 +index 4117260538e47c978ea31c76f439d43369ebedfb..c753f715710ec4bb8337e035ac5a4c11371a84a0 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java @@ -117,6 +117,11 @@ public class WitherSkull extends AbstractHurtingProjectile { + // do not hit rider return target != this.getRider() && super.canHitEntity(target); } - ++ + @Override + public boolean canSaveToDisk() { + return false; + } -+ + // Purpur end + @Override - public boolean isPickable() { - return false; diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java -index 995fbfa225efe40274c20608b9b30b8afa847698..c70f04cdee1e8ba6f8a15c9e38edbe0023b5ab96 100644 +index bee39dee1b96023c907407877aedf3aafaf5e1b8..5b6bc200381a486c99061f9f5b7121c2c355b477 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java -@@ -111,6 +111,7 @@ public class EntityStorage implements EntityPersistentStorage { +@@ -107,6 +107,7 @@ public class EntityStorage implements EntityPersistentStorage { ListTag listTag = new ListTag(); final java.util.Map, Integer> savedEntityCounts = new java.util.HashMap<>(); // Paper - Entity load/save limit per chunk entities.forEach((entity) -> { // diff here: use entities parameter diff --git a/patches/unapplied-server/0056-Dispenser-curse-of-binding-protection.patch b/patches/server/0054-Dispenser-curse-of-binding-protection.patch similarity index 85% rename from patches/unapplied-server/0056-Dispenser-curse-of-binding-protection.patch rename to patches/server/0054-Dispenser-curse-of-binding-protection.patch index dc3c4f0a3..9ceca7396 100644 --- a/patches/unapplied-server/0056-Dispenser-curse-of-binding-protection.patch +++ b/patches/server/0054-Dispenser-curse-of-binding-protection.patch @@ -5,18 +5,18 @@ Subject: [PATCH] Dispenser curse of binding protection diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 43f2654eb0a396bce98e0840bdc8a8b16f00b2ba..b30292dcc9bbfc0ded94ee8a0f4a5e949327da54 100644 +index 3d5f08d673f6b95c8f87070345f1fb200b5f4bde..c4392a997061aa4939e5ad7dcacf5e39cbecc55a 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -66,6 +66,7 @@ import net.minecraft.world.item.ProjectileWeaponItem; - import net.minecraft.world.item.SpawnEggItem; +@@ -75,6 +75,7 @@ import net.minecraft.world.item.SpawnEggItem; import net.minecraft.world.item.SwordItem; + import net.minecraft.world.item.component.ItemAttributeModifiers; import net.minecraft.world.item.enchantment.EnchantmentHelper; +import net.minecraft.world.item.enchantment.Enchantments; import net.minecraft.world.level.GameRules; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.Level; -@@ -1183,6 +1184,12 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1309,6 +1310,12 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti } @@ -30,10 +30,10 @@ index 43f2654eb0a396bce98e0840bdc8a8b16f00b2ba..b30292dcc9bbfc0ded94ee8a0f4a5e94 public static Item getEquipmentForSlot(EquipmentSlot equipmentSlot, int equipmentLevel) { switch (equipmentSlot) { diff --git a/src/main/java/net/minecraft/world/item/ArmorItem.java b/src/main/java/net/minecraft/world/item/ArmorItem.java -index 6b81be03f87967124b046708557e05d519aa79e4..b47cc957f9e4936b15b80a6f685ddddb5b289298 100644 +index 786e4a8700cb84b16dd9b8892a0d1d5803924d81..b108ca4c7900ccf6a14ebea01c21c103459054f8 100644 --- a/src/main/java/net/minecraft/world/item/ArmorItem.java +++ b/src/main/java/net/minecraft/world/item/ArmorItem.java -@@ -67,7 +67,7 @@ public class ArmorItem extends Item implements Equipable { +@@ -69,7 +69,7 @@ public class ArmorItem extends Item implements Equipable { return false; } else { LivingEntity entityliving = (LivingEntity) list.get(0); diff --git a/patches/unapplied-server/0057-Add-option-for-boats-to-eject-players-on-land.patch b/patches/server/0055-Add-option-for-boats-to-eject-players-on-land.patch similarity index 89% rename from patches/unapplied-server/0057-Add-option-for-boats-to-eject-players-on-land.patch rename to patches/server/0055-Add-option-for-boats-to-eject-players-on-land.patch index 150a08f9c..dfbc74be0 100644 --- a/patches/unapplied-server/0057-Add-option-for-boats-to-eject-players-on-land.patch +++ b/patches/server/0055-Add-option-for-boats-to-eject-players-on-land.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option for boats to eject players on land diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -index c041c0b81be41cfd128c2f5ba56a5329d50b2efc..960bada23cb89a7f270d1ee24d62f2bc108522af 100644 +index b068cff9b5aa457d65b679529956e8210296d799..0b23e05f936cab7a9867828c2d69417cfde1d2ce 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -@@ -521,6 +521,7 @@ public class Boat extends VehicleEntity implements VariantHolder { +@@ -514,6 +514,7 @@ public class Boat extends VehicleEntity implements VariantHolder { if (f > 0.0F) { this.landFriction = f; @@ -17,7 +17,7 @@ index c041c0b81be41cfd128c2f5ba56a5329d50b2efc..960bada23cb89a7f270d1ee24d62f2bc } else { return Boat.Status.IN_AIR; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4240c9ce3fec8ae6883fa5762e01349136fe4067..cc373c386ca72c3c6cfd69dc26be6ccdfaae1738 100644 +index 27c1f09be7d664073263a02a8854ff1e8c6f9ab1..76c1cfc35b598eab2ca27656feeb17f79dde7e00 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -95,12 +95,14 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0058-Mending-mends-most-damages-equipment-first.patch b/patches/server/0056-Mending-mends-most-damages-equipment-first.patch similarity index 86% rename from patches/unapplied-server/0058-Mending-mends-most-damages-equipment-first.patch rename to patches/server/0056-Mending-mends-most-damages-equipment-first.patch index 21a17932f..d93d2cf9b 100644 --- a/patches/unapplied-server/0058-Mending-mends-most-damages-equipment-first.patch +++ b/patches/server/0056-Mending-mends-most-damages-equipment-first.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Mending mends most damages equipment first diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java -index 36422fb394a158f36c84ba0ee03cc704956c91b2..c8671996f07f1daafe48448f4a5b837ca2f658c6 100644 +index a207a31d80a302dbdfe80f8727222542d3a78da2..7ca70e9ddda24e2fe661c7b13fa439a6c19726dd 100644 --- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java +++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java -@@ -332,7 +332,7 @@ public class ExperienceOrb extends Entity { +@@ -338,7 +338,7 @@ public class ExperienceOrb extends Entity { } private int repairPlayerItems(Player player, int amount) { @@ -18,10 +18,10 @@ index 36422fb394a158f36c84ba0ee03cc704956c91b2..c8671996f07f1daafe48448f4a5b837c if (entry != null) { ItemStack itemstack = (ItemStack) entry.getValue(); diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 1ad126d992d95062a3db08374db7a927f23a0cac..38e097807c5034c077a10d3af08bf348a008d229 100644 +index 36e3415b9312d3a80c9f5e1c36b42b7ea30c31c5..f47575bb8cc5e31ef3583cf6ed94604c1da60932 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -613,6 +613,16 @@ public final class ItemStack { +@@ -636,6 +636,16 @@ public final class ItemStack implements DataComponentHolder { return this.isDamageableItem() && this.getDamageValue() > 0; } @@ -36,13 +36,13 @@ index 1ad126d992d95062a3db08374db7a927f23a0cac..38e097807c5034c077a10d3af08bf348 + // Purpur end + public int getDamageValue() { - return this.tag == null ? 0 : this.tag.getInt("Damage"); + return Mth.clamp((Integer) this.getOrDefault(DataComponents.DAMAGE, 0), 0, this.getMaxDamage()); } diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java -index 0d89e2f944e7017cfdac96f8c91f4568e481ff02..496c47eb3b13ba620fde1a2bc96f886c5b01e1de 100644 +index d2f0463b0e74983eb2e3dfca9a268e9502b86257..6d0363cec691996be416ab22ef9d825196399158 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java +++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java -@@ -266,6 +266,29 @@ public class EnchantmentHelper { +@@ -237,6 +237,29 @@ public class EnchantmentHelper { return getItemEnchantmentLevel(Enchantments.CHANNELING, stack) > 0; } @@ -70,7 +70,7 @@ index 0d89e2f944e7017cfdac96f8c91f4568e481ff02..496c47eb3b13ba620fde1a2bc96f886c + // Purpur end + @Nullable - public static Entry getRandomItemWith(Enchantment enchantment, LivingEntity entity) { + public static java.util.Map.Entry getRandomItemWith(Enchantment enchantment, LivingEntity entity) { return getRandomItemWith(enchantment, entity, stack -> true); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 76c1cfc35b598eab2ca27656feeb17f79dde7e00..6705d722e1abe678a5cb90503904dc7888bf55ee 100644 diff --git a/patches/unapplied-server/0059-Add-5-second-tps-average-in-tps.patch b/patches/server/0057-Add-5-second-tps-average-in-tps.patch similarity index 93% rename from patches/unapplied-server/0059-Add-5-second-tps-average-in-tps.patch rename to patches/server/0057-Add-5-second-tps-average-in-tps.patch index 98a1625ec..9623dcb7d 100644 --- a/patches/unapplied-server/0059-Add-5-second-tps-average-in-tps.patch +++ b/patches/server/0057-Add-5-second-tps-average-in-tps.patch @@ -18,10 +18,10 @@ index 039a86034928a5eb7aaa2d7ca76a7bddcca346bd..308f67d0616e2d6bb135258f1fda53cc } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 62e715755137426ed2bc7abae148fadc247da239..14c349464970f8f9486e62c26854b87833d3df04 100644 +index f3ad4ee45ba48a10bbae1084f291ae0bcccdf624..3a622f5274f036608950702291c1e624488a6faa 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -303,7 +303,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { +- itemstack.hurtAndBreak(1, this, EquipmentSlot.CHEST); + // Purpur start + int damage = level().purpurConfig.elytraDamagePerSecond; + if (level().purpurConfig.elytraDamageMultiplyBySpeed > 0) { @@ -21,43 +21,35 @@ index 2ebe8c165c8b425d437e0b359e3f2ad851b84273..56ffc7ae9bf9dabcbe6e993475a9bf5c + damage *= (int) speed; + } + } -+ itemstack.hurtAndBreak(damage, this, (entityliving) -> { ++ itemstack.hurtAndBreak(damage, this, EquipmentSlot.CHEST); + // Purpur end - entityliving.broadcastBreakEvent(EquipmentSlot.CHEST); - }); } + + this.gameEvent(GameEvent.ELYTRA_GLIDE); diff --git a/src/main/java/net/minecraft/world/item/FireworkRocketItem.java b/src/main/java/net/minecraft/world/item/FireworkRocketItem.java -index 409c6d5820d4ab3a84e64a3837a83d3ef28a38c7..b70ed576b304bcc383a3d67f36be6575b39b1280 100644 +index 218f2f085309f04438f8b07bc41cf242583db2dc..c6e8ce19fde69316d9523c90105660992f728cfb 100644 --- a/src/main/java/net/minecraft/world/item/FireworkRocketItem.java +++ b/src/main/java/net/minecraft/world/item/FireworkRocketItem.java -@@ -15,6 +15,7 @@ import net.minecraft.util.ByIdMap; - import net.minecraft.world.InteractionHand; - import net.minecraft.world.InteractionResult; - import net.minecraft.world.InteractionResultHolder; -+import net.minecraft.world.entity.EquipmentSlot; - import net.minecraft.world.entity.player.Player; - import net.minecraft.world.entity.projectile.FireworkRocketEntity; - import net.minecraft.world.item.context.UseOnContext; -@@ -76,6 +77,14 @@ public class FireworkRocketItem extends Item { +@@ -65,6 +65,14 @@ public class FireworkRocketItem extends Item implements ProjectileItem { com.destroystokyo.paper.event.player.PlayerElytraBoostEvent event = new com.destroystokyo.paper.event.player.PlayerElytraBoostEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack), (org.bukkit.entity.Firework) fireworkRocketEntity.getBukkitEntity(), org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand)); if (event.callEvent() && world.addFreshEntity(fireworkRocketEntity)) { user.awardStat(Stats.ITEM_USED.get(this)); + // Purpur start + if (world.purpurConfig.elytraDamagePerFireworkBoost > 0) { -+ ItemStack chestItem = user.getItemBySlot(EquipmentSlot.CHEST); ++ ItemStack chestItem = user.getItemBySlot(net.minecraft.world.entity.EquipmentSlot.CHEST); + if (chestItem.getItem() == Items.ELYTRA) { -+ chestItem.hurtAndBreak(world.purpurConfig.elytraDamagePerFireworkBoost, user, (entityliving) -> entityliving.broadcastBreakEvent(EquipmentSlot.CHEST)); ++ chestItem.hurtAndBreak(world.purpurConfig.elytraDamagePerFireworkBoost, user, (entityliving) -> entityliving.broadcastBreakEvent(net.minecraft.world.entity.EquipmentSlot.CHEST)); + } + } + // Purpur end - if (event.shouldConsume() && !user.getAbilities().instabuild) { - itemStack.shrink(1); + if (event.shouldConsume() && !user.hasInfiniteMaterials()) { + itemStack.shrink(1); } else ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory(); diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 38e097807c5034c077a10d3af08bf348a008d229..5b0816b6c01912c41e588559597edf8b5902fcd3 100644 +index f47575bb8cc5e31ef3583cf6ed94604c1da60932..206f6409a17eb0db1ced8c7a90127ed375329a44 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -642,7 +642,7 @@ public final class ItemStack { +@@ -663,7 +663,7 @@ public final class ItemStack implements DataComponentHolder { int j; if (amount > 0) { @@ -66,24 +58,24 @@ index 38e097807c5034c077a10d3af08bf348a008d229..5b0816b6c01912c41e588559597edf8b int k = 0; for (int l = 0; j > 0 && l < amount; ++l) { -@@ -697,6 +697,12 @@ public final class ItemStack { - if (this.hurt(amount, entity.getRandom(), entity /*instanceof ServerPlayer ? (ServerPlayer) entity : null*/)) { // Paper - Add EntityDamageItemEvent - breakCallback.accept(entity); - Item item = this.getItem(); -+ // Purpur start -+ if (item == Items.ELYTRA) { -+ setDamageValue(item.getMaxDamage() - 1); -+ return; -+ } -+ // Purpur end - // CraftBukkit start - Check for item breaking - if (this.count == 1 && entity instanceof net.minecraft.world.entity.player.Player) { - org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent((net.minecraft.world.entity.player.Player) entity, this); +@@ -739,6 +739,12 @@ public final class ItemStack implements DataComponentHolder { + this.hurtAndBreak(amount, randomsource, entity, () -> { // Paper - Add EntityDamageItemEvent + entity.broadcastBreakEvent(slot); + Item item = this.getItem(); ++ // Purpur start ++ if (item == Items.ELYTRA) { ++ setDamageValue(item.getMaxDamage() - 1); ++ return; ++ } ++ // Purpur end + // CraftBukkit start - Check for item breaking + if (this.count == 1 && entity instanceof net.minecraft.world.entity.player.Player) { + org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent((net.minecraft.world.entity.player.Player) entity, this); diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java -index a792c7b7a6179aa88fc473b27ef0ca13bd91a395..c2218c2dd46641ebb4c9278fa0d6015122b1905c 100644 +index 47de500fddb0716d142f8f5876a82a95afaa06fa..129f829cc238ff2f6586511f80eb6da2e8c7ece4 100644 --- a/src/main/java/net/minecraft/world/item/TridentItem.java +++ b/src/main/java/net/minecraft/world/item/TridentItem.java -@@ -128,6 +128,14 @@ public class TridentItem extends Item implements Vanishable { +@@ -123,6 +123,14 @@ public class TridentItem extends Item implements ProjectileItem { f3 *= f6 / f5; f4 *= f6 / f5; org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerRiptideEvent(entityhuman, stack, f2, f3, f4); // CraftBukkit diff --git a/patches/unapplied-server/0061-Item-entity-immunities.patch b/patches/server/0059-Item-entity-immunities.patch similarity index 95% rename from patches/unapplied-server/0061-Item-entity-immunities.patch rename to patches/server/0059-Item-entity-immunities.patch index 77de6ba12..c45cb2d67 100644 --- a/patches/unapplied-server/0061-Item-entity-immunities.patch +++ b/patches/server/0059-Item-entity-immunities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Item entity immunities diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index db55ad9aaabfa1ea998754f3ac352d1698936696..04b98e23eed926d8473cc2464e04a5b9f18f1140 100644 +index 4f103f731623a8570238a6867fda1c5f83fca4e4..39e7dcf3c92c9203c190782be401c00c010b8aeb 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -73,7 +73,7 @@ public class ServerEntity { +@@ -77,7 +77,7 @@ public class ServerEntity { @Nullable private List> trackedDataValues; // CraftBukkit start @@ -18,10 +18,10 @@ index db55ad9aaabfa1ea998754f3ac352d1698936696..04b98e23eed926d8473cc2464e04a5b9 public ServerEntity(ServerLevel worldserver, Entity entity, int i, boolean flag, Consumer> consumer, Set trackedPlayers) { this.trackedPlayers = trackedPlayers; diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -index c7f06c3cfb737bd17a706798bf9cf0e1af5f0cc0..3cac817351a149935df75ef23d9f9417f6502016 100644 +index 8fd3845c4965843be9c37498760d93f1ebdff541..7dae2a7c759fc3e004f806c59e083f52c3a460b2 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -@@ -59,6 +59,12 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -63,6 +63,12 @@ public class ItemEntity extends Entity implements TraceableEntity { 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 @@ -34,7 +34,7 @@ index c7f06c3cfb737bd17a706798bf9cf0e1af5f0cc0..3cac817351a149935df75ef23d9f9417 public ItemEntity(EntityType type, Level world) { super(type, world); -@@ -365,7 +371,16 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -371,7 +377,16 @@ public class ItemEntity extends Entity implements TraceableEntity { @Override public boolean hurt(DamageSource source, float amount) { @@ -52,7 +52,7 @@ index c7f06c3cfb737bd17a706798bf9cf0e1af5f0cc0..3cac817351a149935df75ef23d9f9417 return false; } else if (!this.getItem().isEmpty() && this.getItem().is(Items.NETHER_STAR) && source.is(DamageTypeTags.IS_EXPLOSION)) { return false; -@@ -568,6 +583,12 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -579,6 +594,12 @@ public class ItemEntity extends Entity implements TraceableEntity { public void setItem(ItemStack stack) { this.getEntityData().set(ItemEntity.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/patches/unapplied-server/0062-Add-ping-command.patch b/patches/server/0060-Add-ping-command.patch similarity index 95% rename from patches/unapplied-server/0062-Add-ping-command.patch rename to patches/server/0060-Add-ping-command.patch index 664f718b3..2c351459d 100644 --- a/patches/unapplied-server/0062-Add-ping-command.patch +++ b/patches/server/0060-Add-ping-command.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Add ping command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 471270f302cbfaf81500976fcc5a02eaed4120f3..0aeee502c60a81e6a9ca765e57ab27f5c588ac1d 100644 +index 5c7287ef8c2d59215aff81cb138a55676bfa6356..a5f1bfd8a6a6c374fbb72ea7957dd7d05073b93d 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -250,6 +250,7 @@ public class Commands { - SetPlayerIdleTimeoutCommand.register(this.dispatcher); +@@ -252,6 +252,7 @@ public class Commands { StopCommand.register(this.dispatcher); + TransferCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); + org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur } diff --git a/patches/unapplied-server/0063-Add-demo-command.patch b/patches/server/0061-Add-demo-command.patch similarity index 95% rename from patches/unapplied-server/0063-Add-demo-command.patch rename to patches/server/0061-Add-demo-command.patch index d463bd3a8..0b3873fc7 100644 --- a/patches/unapplied-server/0063-Add-demo-command.patch +++ b/patches/server/0061-Add-demo-command.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Add demo command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 0aeee502c60a81e6a9ca765e57ab27f5c588ac1d..2bfcd4222daa7c5b5cc8cfa0545241afd3cb8d15 100644 +index a5f1bfd8a6a6c374fbb72ea7957dd7d05073b93d..4568c4b02a87deb299ffd77b8e76329bb2b1dd70 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -250,6 +250,7 @@ public class Commands { - SetPlayerIdleTimeoutCommand.register(this.dispatcher); +@@ -252,6 +252,7 @@ public class Commands { StopCommand.register(this.dispatcher); + TransferCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); + org.purpurmc.purpur.command.DemoCommand.register(this.dispatcher); // Purpur org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur diff --git a/patches/unapplied-server/0064-Add-credits-command.patch b/patches/server/0062-Add-credits-command.patch similarity index 95% rename from patches/unapplied-server/0064-Add-credits-command.patch rename to patches/server/0062-Add-credits-command.patch index e43ae0828..9f08a380f 100644 --- a/patches/unapplied-server/0064-Add-credits-command.patch +++ b/patches/server/0062-Add-credits-command.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Add credits command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 2bfcd4222daa7c5b5cc8cfa0545241afd3cb8d15..575f026c086e24663b5d38222915460923937723 100644 +index 4568c4b02a87deb299ffd77b8e76329bb2b1dd70..6af3e1e08048869ac28ab4a93e03d086872f866b 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -250,6 +250,7 @@ public class Commands { - SetPlayerIdleTimeoutCommand.register(this.dispatcher); +@@ -252,6 +252,7 @@ public class Commands { StopCommand.register(this.dispatcher); + TransferCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); + org.purpurmc.purpur.command.CreditsCommand.register(this.dispatcher); // Purpur org.purpurmc.purpur.command.DemoCommand.register(this.dispatcher); // Purpur diff --git a/patches/unapplied-server/0065-Configurable-jockey-options.patch b/patches/server/0063-Configurable-jockey-options.patch similarity index 91% rename from patches/unapplied-server/0065-Configurable-jockey-options.patch rename to patches/server/0063-Configurable-jockey-options.patch index 5544f83cf..8b8ec6285 100644 --- a/patches/unapplied-server/0065-Configurable-jockey-options.patch +++ b/patches/server/0063-Configurable-jockey-options.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable jockey options diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index e9f14e8d207c99a60a4802b3412048cd1481b9f7..ebfbf67d65dc5a54e9235f44ab391147c23ddd0f 100644 +index 02bceb31c517b94653573380ed29d9401a6b9ce8..1d283484be270497859e23e3bb4ab38c09af23e6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -@@ -95,6 +95,21 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -98,6 +98,21 @@ public class Drowned extends Zombie implements RangedAttackMob { this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.drownedSpawnReinforcements); } @@ -31,10 +31,10 @@ index e9f14e8d207c99a60a4802b3412048cd1481b9f7..ebfbf67d65dc5a54e9235f44ab391147 protected void addBehaviourGoals() { this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0D)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java -index 4ba01ebfc93d10cd0077e32c30349afda2093fb2..a6d827b39ce9ca13103fb2f9940974e8aaaea037 100644 +index 805bfee8b061445de5b5d8aeb13c792178e25f7b..6673c0bff3a4e3d11a09e9dc8aeb0c2418dc7f59 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Husk.java +++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java -@@ -51,6 +51,21 @@ public class Husk extends Zombie { +@@ -49,6 +49,21 @@ public class Husk extends Zombie { this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.huskSpawnReinforcements); } @@ -57,10 +57,10 @@ index 4ba01ebfc93d10cd0077e32c30349afda2093fb2..a6d827b39ce9ca13103fb2f9940974e8 return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (MobSpawnType.isSpawner(spawnReason) || world.canSeeSky(pos)); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index f75900e33a08bd6eb13fd480fe62b49346f47bac..52f2d2df03314c8ddf70b240dca82cafa44c6b07 100644 +index 9af1c4b794ddaf8640076f172cf0317acad6bcb2..555b86925b8d848fad40a838dd98607db8741e3b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -129,6 +129,18 @@ public class Zombie extends Monster { +@@ -126,6 +126,18 @@ public class Zombie extends Monster { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombieMaxHealth); } @@ -79,10 +79,10 @@ index f75900e33a08bd6eb13fd480fe62b49346f47bac..52f2d2df03314c8ddf70b240dca82caf @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur -@@ -544,19 +556,20 @@ public class Zombie extends Monster { - if (object instanceof Zombie.ZombieGroupData) { - Zombie.ZombieGroupData entityzombie_groupdatazombie = (Zombie.ZombieGroupData) object; +@@ -533,19 +545,20 @@ public class Zombie extends Monster { + } + if (object instanceof Zombie.ZombieGroupData entityzombie_groupdatazombie) { - if (entityzombie_groupdatazombie.isBaby) { - this.setBaby(true); + // Purpur start @@ -106,7 +106,7 @@ index f75900e33a08bd6eb13fd480fe62b49346f47bac..52f2d2df03314c8ddf70b240dca82caf Chicken entitychicken1 = (Chicken) EntityType.CHICKEN.create(this.level()); if (entitychicken1 != null) { -@@ -566,6 +579,7 @@ public class Zombie extends Monster { +@@ -555,6 +568,7 @@ public class Zombie extends Monster { this.startRiding(entitychicken1); world.addFreshEntity(entitychicken1, CreatureSpawnEvent.SpawnReason.MOUNT); // CraftBukkit } @@ -115,10 +115,10 @@ index f75900e33a08bd6eb13fd480fe62b49346f47bac..52f2d2df03314c8ddf70b240dca82caf } } diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index 6c96ca4bb3f94aaeaff87ae44500e87516fbf54f..b71c47c275a3726eb5028c9524013ebc608a21ea 100644 +index 8e7f0f2069c3382f3a7b08b80f829398e62377f7..ffe2144e307acebd4a8bed043db0ee0bb6bf611c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -109,6 +109,21 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -107,6 +107,21 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.zombieVillagerSpawnReinforcements); } @@ -138,13 +138,13 @@ index 6c96ca4bb3f94aaeaff87ae44500e87516fbf54f..b71c47c275a3726eb5028c9524013ebc + } + @Override - protected void defineSynchedData() { - super.defineSynchedData(); + protected void defineSynchedData(SynchedEntityData.Builder builder) { + super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index fa5fa58ee03243054a38475634a6aa67815ca77d..764477c39e690d6373e17c77687809418e0de884 100644 +index 138f3f6a9b0754d54e5f8000962bb52b224f677d..75c34d9fcc4b33d30b18f1ce4c8749a068744abc 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -86,6 +86,21 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -84,6 +84,21 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.zombifiedPiglinMaxHealth); } @@ -167,7 +167,7 @@ index fa5fa58ee03243054a38475634a6aa67815ca77d..764477c39e690d6373e17c7768780941 public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b5599360a524a55183b3a21f822b5cb24f59dc67..5c83d5b665bfccd7c54c18012d4bec7d975de3f2 100644 +index 62074152a0a494bbde4c39074942425a8b850ffd..7fabef36d3f9a5294a62ed956010d7ef853e00ab 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -588,6 +588,9 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0066-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/server/0064-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch similarity index 96% rename from patches/unapplied-server/0066-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch rename to patches/server/0064-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index bdc70fd0b..b8b783a89 100644 --- a/patches/unapplied-server/0066-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/patches/server/0064-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -index 036640d49a5e891e9a0f767abe33f1f51d6d4cde..c0c8bdfbab17d8a10d616e2625ebfa7babf5fab3 100644 +index d8e440e14b72dc48ae97244f1bed2c06abd997ab..2bac39e5ba09e08d23d2a4be37f7fe0da0ce71a6 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java @@ -31,6 +31,12 @@ public class EndCrystal extends Entity { @@ -72,10 +72,10 @@ index 036640d49a5e891e9a0f767abe33f1f51d6d4cde..c0c8bdfbab17d8a10d616e2625ebfa7b @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 6819acda60e783ee57dd8b9b5d27bc1e105425c3..4153b621c04168f1f78c526f31a46d9b1fecf3a7 100644 +index 01e8eaecec61e664838b5d7f18a9c3e730f00ddf..e0b1b0106fd3bbb6764d1b0a58ab2810181cac02 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -50,6 +50,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -48,6 +48,7 @@ public class Phantom extends FlyingMob implements Enemy { Vec3 moveTargetPoint; public BlockPos anchorPoint; Phantom.AttackPhase attackPhase; @@ -83,7 +83,7 @@ index 6819acda60e783ee57dd8b9b5d27bc1e105425c3..4153b621c04168f1f78c526f31a46d9b public Phantom(EntityType type, Level world) { super(type, world); -@@ -117,6 +118,23 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -115,6 +116,23 @@ public class Phantom extends FlyingMob implements Enemy { level().addFreshEntity(flames); return true; } @@ -107,7 +107,7 @@ index 6819acda60e783ee57dd8b9b5d27bc1e105425c3..4153b621c04168f1f78c526f31a46d9b // Purpur end @Override -@@ -131,11 +149,17 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -129,11 +147,17 @@ public class Phantom extends FlyingMob implements Enemy { @Override protected void registerGoals() { @@ -130,7 +130,7 @@ index 6819acda60e783ee57dd8b9b5d27bc1e105425c3..4153b621c04168f1f78c526f31a46d9b this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -352,6 +376,124 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -333,6 +357,124 @@ public class Phantom extends FlyingMob implements Enemy { private AttackPhase() {} } diff --git a/patches/unapplied-server/0067-Add-phantom-spawning-options.patch b/patches/server/0065-Add-phantom-spawning-options.patch similarity index 93% rename from patches/unapplied-server/0067-Add-phantom-spawning-options.patch rename to patches/server/0065-Add-phantom-spawning-options.patch index 72e52ca6c..3bd99a5d7 100644 --- a/patches/unapplied-server/0067-Add-phantom-spawning-options.patch +++ b/patches/server/0065-Add-phantom-spawning-options.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add phantom spawning options diff --git a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java -index ed80960777b18faca2d6a99783e53daf5fa19e09..0847aef56d8608cb1403485f231f30b2527f35ab 100644 +index 1b1b475ca27e799e251d6f8a8c9fe1a4fd8bae83..04f67f7b43d2f461c776c76614dc3e5f060aea63 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java +++ b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java -@@ -49,7 +49,7 @@ public class PhantomSpawner implements CustomSpawner { +@@ -48,7 +48,7 @@ public class PhantomSpawner implements CustomSpawner { int spawnAttemptMaxSeconds = world.paperConfig().entities.behavior.phantomsSpawnAttemptMaxSeconds; this.nextTick += (spawnAttemptMinSeconds + randomsource.nextInt(spawnAttemptMaxSeconds - spawnAttemptMinSeconds + 1)) * 20; // Paper end - Ability to control player's insomnia and phantoms @@ -17,7 +17,7 @@ index ed80960777b18faca2d6a99783e53daf5fa19e09..0847aef56d8608cb1403485f231f30b2 return 0; } else { int i = 0; -@@ -61,10 +61,10 @@ public class PhantomSpawner implements CustomSpawner { +@@ -60,10 +60,10 @@ public class PhantomSpawner implements CustomSpawner { if (!entityplayer.isSpectator() && (!world.paperConfig().entities.behavior.phantomsDoNotSpawnOnCreativePlayers || !entityplayer.isCreative())) { // Paper - Add phantom creative and insomniac controls BlockPos blockposition = entityplayer.blockPosition(); @@ -30,7 +30,7 @@ index ed80960777b18faca2d6a99783e53daf5fa19e09..0847aef56d8608cb1403485f231f30b2 ServerStatsCounter serverstatisticmanager = entityplayer.getStats(); int j = Mth.clamp(serverstatisticmanager.getValue(Stats.CUSTOM.get(Stats.TIME_SINCE_REST)), 1, Integer.MAX_VALUE); boolean flag2 = true; -@@ -76,7 +76,7 @@ public class PhantomSpawner implements CustomSpawner { +@@ -75,7 +75,7 @@ public class PhantomSpawner implements CustomSpawner { if (NaturalSpawner.isValidEmptySpawnBlock(world, blockposition1, iblockdata, fluid, EntityType.PHANTOM)) { SpawnGroupData groupdataentity = null; @@ -40,7 +40,7 @@ index ed80960777b18faca2d6a99783e53daf5fa19e09..0847aef56d8608cb1403485f231f30b2 for (int l = 0; l < k; ++l) { // Paper start - PhantomPreSpawnEvent diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 522ffc7b0d7a028436c385da4809070fb6095c4c..28c92b79be65b35b691661f6d63c2f66c9a3a337 100644 +index e1652079b92a5c951b5191997803e9d486892c61..10de2140aa89f75e7f67b38f6c1286f4330d127b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1068,6 +1068,12 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0068-Implement-bed-explosion-options.patch b/patches/server/0066-Implement-bed-explosion-options.patch similarity index 92% rename from patches/unapplied-server/0068-Implement-bed-explosion-options.patch rename to patches/server/0066-Implement-bed-explosion-options.patch index a9e82b654..2ff47c399 100644 --- a/patches/unapplied-server/0068-Implement-bed-explosion-options.patch +++ b/patches/server/0066-Implement-bed-explosion-options.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement bed explosion options diff --git a/src/main/java/net/minecraft/world/level/block/BedBlock.java b/src/main/java/net/minecraft/world/level/block/BedBlock.java -index 2c1d03237d5b24b93807c7e97d969ace13d6a917..fc46e324f36ce4de4f3868a98ad9dd2c99b428af 100644 +index e9f8949267208b93f0c56c36ada38274ed4280f5..9084e11df829fb24489773d15435a3a3570135fe 100644 --- a/src/main/java/net/minecraft/world/level/block/BedBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java -@@ -106,7 +106,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock +@@ -105,7 +105,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock Vec3 vec3d = pos.getCenter(); @@ -17,7 +17,7 @@ index 2c1d03237d5b24b93807c7e97d969ace13d6a917..fc46e324f36ce4de4f3868a98ad9dd2c return InteractionResult.SUCCESS; } else if ((Boolean) state.getValue(BedBlock.OCCUPIED)) { if (!BedBlock.canSetSpawn(world)) return this.explodeBed(state, world, pos); // Paper - check explode first -@@ -159,7 +159,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock +@@ -158,7 +158,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock Vec3 vec3d = blockposition.getCenter(); @@ -27,7 +27,7 @@ index 2c1d03237d5b24b93807c7e97d969ace13d6a917..fc46e324f36ce4de4f3868a98ad9dd2c } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 28c92b79be65b35b691661f6d63c2f66c9a3a337..813d942b4edf3d4143565c694b444092fd577cc8 100644 +index 10de2140aa89f75e7f67b38f6c1286f4330d127b..95f016b7c127129b71e266a3daefd55502fdb299 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -284,6 +284,27 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0069-Implement-respawn-anchor-explosion-options.patch b/patches/server/0067-Implement-respawn-anchor-explosion-options.patch similarity index 95% rename from patches/unapplied-server/0069-Implement-respawn-anchor-explosion-options.patch rename to patches/server/0067-Implement-respawn-anchor-explosion-options.patch index 344c2cb38..1cf02a3c0 100644 --- a/patches/unapplied-server/0069-Implement-respawn-anchor-explosion-options.patch +++ b/patches/server/0067-Implement-respawn-anchor-explosion-options.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement respawn anchor explosion options diff --git a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java -index 088262f306755a9cb785c7a0cf0a9c66ed0965a8..a3621a126a286a2789d069382940e8aa24c4caf2 100644 +index 4e2fad1f234356ada6f29445038e43b9a8406cf9..6f3f53940431afc7a22b262d9d34bc0abf2f0e7a 100644 --- a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java +++ b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java -@@ -148,7 +148,7 @@ public class RespawnAnchorBlock extends Block { +@@ -150,7 +150,7 @@ public class RespawnAnchorBlock extends Block { }; Vec3 vec3d = explodedPos.getCenter(); diff --git a/patches/unapplied-server/0070-Add-allow-water-in-end-world-option.patch b/patches/server/0068-Add-allow-water-in-end-world-option.patch similarity index 91% rename from patches/unapplied-server/0070-Add-allow-water-in-end-world-option.patch rename to patches/server/0068-Add-allow-water-in-end-world-option.patch index 11259bf74..6cc34bdc5 100644 --- a/patches/unapplied-server/0070-Add-allow-water-in-end-world-option.patch +++ b/patches/server/0068-Add-allow-water-in-end-world-option.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add allow water in end world option diff --git a/src/main/java/net/minecraft/world/item/BucketItem.java b/src/main/java/net/minecraft/world/item/BucketItem.java -index 6371f326fc86cfc53e39bf8ed13b646f7705fbbc..3dec0c5fc8dece5341634eaf8e94fe1964bf4038 100644 +index 49557d6f22c5725c663a231deab019d4f6fe95fa..046652e8f9c5dcdf7c90acb9391214cac46bd7d8 100644 --- a/src/main/java/net/minecraft/world/item/BucketItem.java +++ b/src/main/java/net/minecraft/world/item/BucketItem.java -@@ -195,7 +195,7 @@ public class BucketItem extends Item implements DispensibleContainerItem { +@@ -194,7 +194,7 @@ public class BucketItem extends Item implements DispensibleContainerItem { // CraftBukkit end if (!flag2) { return movingobjectpositionblock != null && this.emptyContents(entityhuman, world, movingobjectpositionblock.getBlockPos().relative(movingobjectpositionblock.getDirection()), (BlockHitResult) null, enumdirection, clicked, itemstack, enumhand); // CraftBukkit @@ -17,7 +17,7 @@ index 6371f326fc86cfc53e39bf8ed13b646f7705fbbc..3dec0c5fc8dece5341634eaf8e94fe19 int i = blockposition.getX(); int j = blockposition.getY(); int k = blockposition.getZ(); -@@ -203,7 +203,7 @@ public class BucketItem extends Item implements DispensibleContainerItem { +@@ -202,7 +202,7 @@ public class BucketItem extends Item implements DispensibleContainerItem { world.playSound(entityhuman, blockposition, SoundEvents.FIRE_EXTINGUISH, SoundSource.BLOCKS, 0.5F, 2.6F + (world.random.nextFloat() - world.random.nextFloat()) * 0.8F); for (int l = 0; l < 8; ++l) { @@ -27,10 +27,10 @@ index 6371f326fc86cfc53e39bf8ed13b646f7705fbbc..3dec0c5fc8dece5341634eaf8e94fe19 return true; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 1513300064314a761adf4a08cc72782ec93947d1..1e55c024a8dd7f1a5f324937bbd3f13b3ac8f076 100644 +index 04f7f6743aabdca54892b2b155386f86032cf807..2e44e9ea9558ebc1456d9bbf53561988e33ce845 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1911,4 +1911,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1902,4 +1902,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return null; } // Paper end - optimize redstone (Alternate Current) @@ -45,7 +45,7 @@ index 1513300064314a761adf4a08cc72782ec93947d1..1e55c024a8dd7f1a5f324937bbd3f13b + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/block/IceBlock.java b/src/main/java/net/minecraft/world/level/block/IceBlock.java -index 9c8c1df5187daefb1c8098b4d4a0976c71a7bbfd..cf4c1097d54c84b309ab02e9892d1b9e39d57490 100644 +index 013302623d3ca3ff88f242d740af935dcf4844a6..13dd8bc7d2f6b71a5f1779dde53c5c84d83538ce 100644 --- a/src/main/java/net/minecraft/world/level/block/IceBlock.java +++ b/src/main/java/net/minecraft/world/level/block/IceBlock.java @@ -41,7 +41,7 @@ public class IceBlock extends HalfTransparentBlock { diff --git a/patches/unapplied-server/0072-Entity-lifespan.patch b/patches/server/0069-Entity-lifespan.patch similarity index 81% rename from patches/unapplied-server/0072-Entity-lifespan.patch rename to patches/server/0069-Entity-lifespan.patch index 17c4bafd2..5e9facec0 100644 --- a/patches/unapplied-server/0072-Entity-lifespan.patch +++ b/patches/server/0069-Entity-lifespan.patch @@ -5,22 +5,22 @@ Subject: [PATCH] Entity lifespan diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 4e403c3738844374de3f6e40fbadbbaf88d9d231..104070f091b5aab94af2378ca7acb796799f869b 100644 +index eb7b15a234eaf64b399fe2572d5e75dce3437b1a..e467ad2abcc32d86821ee3f99c82460095b40fba 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2749,6 +2749,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2798,6 +2798,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl AABB axisalignedbb = entity.getBoundingBox(); - if (axisalignedbb.distanceToSqr(this.player.getEyePosition()) < ServerGamePacketListenerImpl.MAX_INTERACTION_DISTANCE) { + if (this.player.canInteractWithEntity(axisalignedbb, 1.0D)) { + if (entity instanceof Mob mob) mob.ticksSinceLastInteraction = 0; // Purpur packet.dispatch(new ServerboundInteractPacket.Handler() { private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 04d7d3193c9380769b0043c53eac579cca88f72a..0d1e4099548a907375ef1b225cfe646bfbe3073f 100644 +index c4392a997061aa4939e5ad7dcacf5e39cbecc55a..e7251ac940b49564c83b4b603e49c3990fc85db1 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -137,6 +137,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -152,6 +152,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti private BlockPos restrictCenter; private float restrictRadius; @@ -28,7 +28,7 @@ index 04d7d3193c9380769b0043c53eac579cca88f72a..0d1e4099548a907375ef1b225cfe646b public boolean aware = true; // CraftBukkit protected Mob(EntityType type, Level world) { -@@ -326,6 +327,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -339,6 +340,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti entityliving = null; } } @@ -36,7 +36,7 @@ index 04d7d3193c9380769b0043c53eac579cca88f72a..0d1e4099548a907375ef1b225cfe646b this.target = entityliving; return true; // CraftBukkit end -@@ -373,8 +375,28 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -381,8 +383,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti } this.level().getProfiler().pop(); @@ -63,9 +63,9 @@ index 04d7d3193c9380769b0043c53eac579cca88f72a..0d1e4099548a907375ef1b225cfe646b + // Purpur end + @Override - protected void playHurtSound(DamageSource source) { + protected void playHurtSound(DamageSource damageSource) { this.resetAmbientSoundTime(); -@@ -564,6 +586,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -585,6 +607,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti } nbt.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit @@ -73,7 +73,7 @@ index 04d7d3193c9380769b0043c53eac579cca88f72a..0d1e4099548a907375ef1b225cfe646b } @Override -@@ -634,6 +657,11 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -669,6 +692,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti this.aware = nbt.getBoolean("Bukkit.Aware"); } // CraftBukkit end @@ -85,7 +85,7 @@ index 04d7d3193c9380769b0043c53eac579cca88f72a..0d1e4099548a907375ef1b225cfe646b } @Override -@@ -1718,6 +1746,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1848,6 +1876,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti this.setLastHurtMob(target); } diff --git a/patches/unapplied-server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch similarity index 92% rename from patches/unapplied-server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch rename to patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index a7b78f144..21154237b 100644 --- a/patches/unapplied-server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to teleport to spawn if outside world border diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 8b2550bada2cca8cb9875580133ce0ee6cc19325..498c60a8669b867101f030b5735deffe5252ebbd 100644 +index a17de781053a2c2caf615e5ac48a45c14386b0af..03b206289d103a36d19dcf3154f10ad98f976ba2 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2848,4 +2848,26 @@ public class ServerPlayer extends Player { +@@ -2956,4 +2956,26 @@ public class ServerPlayer extends Player { return (CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end @@ -36,10 +36,10 @@ index 8b2550bada2cca8cb9875580133ce0ee6cc19325..498c60a8669b867101f030b5735deffe + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 40a22471b7828d660b1d8aa3f16af060694a86e3..dea777da2b5cb5182fd165d070dd90d579f99bea 100644 +index 9a2725e3f61a7d37943518cc760b17859a0938bb..9a912752b12730a8fb09f5a6ab5a8638b555e3e3 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -427,6 +427,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -440,6 +440,7 @@ public abstract class LivingEntity extends Entity implements Attackable { double d1 = this.level().getWorldBorder().getDamagePerBlock(); if (d1 > 0.0D) { diff --git a/patches/unapplied-server/0074-Squid-EAR-immunity.patch b/patches/server/0071-Squid-EAR-immunity.patch similarity index 94% rename from patches/unapplied-server/0074-Squid-EAR-immunity.patch rename to patches/server/0071-Squid-EAR-immunity.patch index 3ec9e1084..6e6183b7a 100644 --- a/patches/unapplied-server/0074-Squid-EAR-immunity.patch +++ b/patches/server/0071-Squid-EAR-immunity.patch @@ -25,7 +25,7 @@ index 98e6faaeeaf8a983f9d730591a9d85c314c112d3..27d279d76fd3632fd023edded3b10630 public boolean spiderRidable = false; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 88bac31994679c6a1b65e237fd44b239817fa2cf..c63b7d5b442f2be5dadd529a2f4f65302e44e792 100644 +index a9a39f0da7b09410d8171172a4219c7d509fdb99..a8fc07e06039e1418e020f7c1ad2cd36b9b94eb4 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -15,6 +15,7 @@ import net.minecraft.world.entity.ambient.AmbientCreature; @@ -36,7 +36,7 @@ index 88bac31994679c6a1b65e237fd44b239817fa2cf..c63b7d5b442f2be5dadd529a2f4f6530 import net.minecraft.world.entity.animal.WaterAnimal; import net.minecraft.world.entity.animal.horse.Llama; import net.minecraft.world.entity.boss.EnderDragonPart; -@@ -403,6 +404,7 @@ public class ActivationRange +@@ -380,6 +381,7 @@ public class ActivationRange */ public static boolean checkIfActive(Entity entity) { diff --git a/patches/unapplied-server/0075-Phantoms-burn-in-light.patch b/patches/server/0072-Phantoms-burn-in-light.patch similarity index 86% rename from patches/unapplied-server/0075-Phantoms-burn-in-light.patch rename to patches/server/0072-Phantoms-burn-in-light.patch index 38a37551d..d35474462 100644 --- a/patches/unapplied-server/0075-Phantoms-burn-in-light.patch +++ b/patches/server/0072-Phantoms-burn-in-light.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Phantoms burn in light diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 4153b621c04168f1f78c526f31a46d9b1fecf3a7..fd9cb719c0380993a506bd803128cb2d7f0c37cb 100644 +index e0b1b0106fd3bbb6764d1b0a58ab2810181cac02..1ddccb9fa438682c2ebad7c071c7a4f8dd00b463 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -50,6 +50,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -48,6 +48,7 @@ public class Phantom extends FlyingMob implements Enemy { Vec3 moveTargetPoint; public BlockPos anchorPoint; Phantom.AttackPhase attackPhase; @@ -16,21 +16,20 @@ index 4153b621c04168f1f78c526f31a46d9b1fecf3a7..fd9cb719c0380993a506bd803128cb2d Vec3 crystalPosition; // Purpur public Phantom(EntityType type, Level world) { -@@ -247,7 +248,12 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -240,7 +241,11 @@ public class Phantom extends FlyingMob implements Enemy { @Override public void aiStep() { -- if (this.isAlive() && shouldBurnInDay && this.isSunBurnTick()) { // Paper - shouldBurnInDay API +- if (this.isAlive() && this.shouldBurnInDay && this.isSunBurnTick()) { // Paper - shouldBurnInDay API + // Purpur start -+ boolean burnFromDaylight = this.shouldBurnInDay && this.level().purpurConfig.phantomBurnInDaylight; ++ boolean burnFromDaylight = this.shouldBurnInDay && this.isSunBurnTick() && this.level().purpurConfig.phantomBurnInDaylight; + boolean burnFromLightSource = this.level().purpurConfig.phantomBurnInLight > 0 && this.level().getMaxLocalRawBrightness(blockPosition()) >= this.level().purpurConfig.phantomBurnInLight; + if (this.isAlive() && (burnFromDaylight || burnFromLightSource)) { // Paper - shouldBurnInDay API -+ if (getRider() == null || !this.isControllable()) + // Purpur end if (getRider() == null || !this.isControllable()) // Purpur - this.setSecondsOnFire(8); + this.igniteForSeconds(8); } -@@ -660,6 +666,12 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -641,6 +646,12 @@ public class Phantom extends FlyingMob implements Enemy { return false; } else if (!entityliving.isAlive()) { return false; @@ -43,7 +42,7 @@ index 4153b621c04168f1f78c526f31a46d9b1fecf3a7..fd9cb719c0380993a506bd803128cb2d } else { if (entityliving instanceof Player) { Player entityhuman = (Player) entityliving; -@@ -805,6 +817,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -786,6 +797,7 @@ public class Phantom extends FlyingMob implements Enemy { this.nextScanTick = reducedTickDelay(60); List list = Phantom.this.level().getNearbyPlayers(this.attackTargeting, Phantom.this, Phantom.this.getBoundingBox().inflate(16.0D, 64.0D, 16.0D)); @@ -52,7 +51,7 @@ index 4153b621c04168f1f78c526f31a46d9b1fecf3a7..fd9cb719c0380993a506bd803128cb2d list.sort(Comparator.comparing((Entity e) -> { return e.getY(); }).reversed()); // CraftBukkit - decompile error Iterator iterator = list.iterator(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c87c7feb140864771cbef3dcee1f89319c9a1f83..a0477b47563214152483423121523f836827306b 100644 +index 27d279d76fd3632fd023edded3b10630629ec132..dcd9f80eb69e34b514f57158568e4cb59e9860ec 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1123,6 +1123,9 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0076-Configurable-villager-breeding.patch b/patches/server/0073-Configurable-villager-breeding.patch similarity index 93% rename from patches/unapplied-server/0076-Configurable-villager-breeding.patch rename to patches/server/0073-Configurable-villager-breeding.patch index dae08b084..71c318976 100644 --- a/patches/unapplied-server/0076-Configurable-villager-breeding.patch +++ b/patches/server/0073-Configurable-villager-breeding.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable villager breeding diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 451443c942285b0553c87c3456e140e69586b77c..976388612d64cd137b18870119928cbd45dfd2a4 100644 +index 051940da69567274f48485f060cbc3ac21a0907f..6de74d992bd8b2845ab98d56201e7eeabd1dfc6b 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -787,7 +787,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -777,7 +777,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public boolean canBreed() { diff --git a/patches/unapplied-server/0077-Redstone-deactivates-spawners.patch b/patches/server/0074-Redstone-deactivates-spawners.patch similarity index 91% rename from patches/unapplied-server/0077-Redstone-deactivates-spawners.patch rename to patches/server/0074-Redstone-deactivates-spawners.patch index a8235a100..41653f9a7 100644 --- a/patches/unapplied-server/0077-Redstone-deactivates-spawners.patch +++ b/patches/server/0074-Redstone-deactivates-spawners.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Redstone deactivates spawners diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main/java/net/minecraft/world/level/BaseSpawner.java -index 65c3e91ac4541c0150057dc9f012eb1ee566516e..40c199812ecf7b16fe5a17c18cb0d6d3ce258910 100644 +index f57e1b78204dff661ad5d3ee93a88a00330af2dc..967af8771ff8564c715d89f4b4b69b16c25add59 100644 --- a/src/main/java/net/minecraft/world/level/BaseSpawner.java +++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java -@@ -57,6 +57,7 @@ public abstract class BaseSpawner { +@@ -59,6 +59,7 @@ public abstract class BaseSpawner { } public boolean isNearPlayer(Level world, BlockPos pos) { diff --git a/patches/unapplied-server/0078-Totems-work-in-inventory.patch b/patches/server/0075-Totems-work-in-inventory.patch similarity index 94% rename from patches/unapplied-server/0078-Totems-work-in-inventory.patch rename to patches/server/0075-Totems-work-in-inventory.patch index 9f0a2c81f..1babbff8a 100644 --- a/patches/unapplied-server/0078-Totems-work-in-inventory.patch +++ b/patches/server/0075-Totems-work-in-inventory.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Totems work in inventory diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index dea777da2b5cb5182fd165d070dd90d579f99bea..02be3c960bc89464b589a557d4269fce8fb88766 100644 +index 9a912752b12730a8fb09f5a6ab5a8638b555e3e3..2ea60043f3bbf6cce77799f6c74ffe1f4b226374 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1640,6 +1640,18 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1653,6 +1653,18 @@ public abstract class LivingEntity extends Entity implements Attackable { } } diff --git a/patches/unapplied-server/0079-Add-vindicator-johnny-spawn-chance.patch b/patches/server/0076-Add-vindicator-johnny-spawn-chance.patch similarity index 93% rename from patches/unapplied-server/0079-Add-vindicator-johnny-spawn-chance.patch rename to patches/server/0076-Add-vindicator-johnny-spawn-chance.patch index 080868766..34abb4304 100644 --- a/patches/unapplied-server/0079-Add-vindicator-johnny-spawn-chance.patch +++ b/patches/server/0076-Add-vindicator-johnny-spawn-chance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add vindicator johnny spawn chance diff --git a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -index c5f21eeec60e77167970ed68eec0348912a62e0e..f1acdeb3a851c0d622c5ba8ab760a70a6f97f90e 100644 +index e270da29fdab5060b6a936bba67c433a78c54b5b..61f1778d454cebaab5580179614ff48ab67b8fe6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -@@ -160,6 +160,12 @@ public class Vindicator extends AbstractIllager { +@@ -148,6 +148,12 @@ public class Vindicator extends AbstractIllager { RandomSource randomSource = world.getRandom(); this.populateDefaultEquipmentSlots(randomSource, difficulty); this.populateDefaultEquipmentEnchantments(randomSource, difficulty); diff --git a/patches/unapplied-server/0080-Dispensers-place-anvils-option.patch b/patches/server/0077-Dispensers-place-anvils-option.patch similarity index 89% rename from patches/unapplied-server/0080-Dispensers-place-anvils-option.patch rename to patches/server/0077-Dispensers-place-anvils-option.patch index 05fd1999c..50544d0c1 100644 --- a/patches/unapplied-server/0080-Dispensers-place-anvils-option.patch +++ b/patches/server/0077-Dispensers-place-anvils-option.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Dispensers place anvils option diff --git a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java -index e2e1273d787536d2fe1bdbbf8af36eb5ac220599..a3fe92e1db6755a9111ab58e84d61f429d72010f 100644 +index 5dab1e10303177e5a4d97a91ee46ede66f30ae35..c15f3430e767e54c4953e18bb9e8dcb6283caadf 100644 --- a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java +++ b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java -@@ -1203,6 +1203,23 @@ public interface DispenseItemBehavior { +@@ -1048,5 +1048,22 @@ public interface DispenseItemBehavior { } } }); @@ -30,8 +30,7 @@ index e2e1273d787536d2fe1bdbbf8af36eb5ac220599..a3fe92e1db6755a9111ab58e84d61f42 + })); + // Purpur end } - - static Vec3 getEntityPokingOutOfBlockPos(BlockSource pointer, EntityType entityType, Direction direction) { + } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 7b584d5c8460e90dfea250591e4ca36cb1db004a..00c4cda4ca21195c4fbfeb47f92e197be18aa4c6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/unapplied-server/0081-Allow-anvil-colors.patch b/patches/server/0078-Allow-anvil-colors.patch similarity index 88% rename from patches/unapplied-server/0081-Allow-anvil-colors.patch rename to patches/server/0078-Allow-anvil-colors.patch index 37d7e9d06..2197690e8 100644 --- a/patches/unapplied-server/0081-Allow-anvil-colors.patch +++ b/patches/server/0078-Allow-anvil-colors.patch @@ -5,13 +5,13 @@ Subject: [PATCH] Allow anvil colors diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -index 9cc9925cd43c4b1b742acde9cf4fb5fe46619d24..cccd34370d76d96eddeba3de1cfc41d47f9d1f60 100644 +index 3d0a4380de7885c85d85f4ec1d4cf8a5044e93de..62a69dc13406bb0144948bf4bd265c3a28bfe14b 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -@@ -294,6 +294,54 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -279,6 +279,54 @@ public class AnvilMenu extends ItemCombinerMenu { if (!this.itemName.equals(itemstack.getHoverName().getString())) { - b1 = 1; - i += b1; + b0 = 1; + i += b0; + // Purpur start + if (this.player != null) { + org.bukkit.craftbukkit.entity.CraftHumanEntity player = this.player.getBukkitEntity(); @@ -56,15 +56,15 @@ index 9cc9925cd43c4b1b742acde9cf4fb5fe46619d24..cccd34370d76d96eddeba3de1cfc41d4 + if (removeItalics) { + component = component.decoration(net.kyori.adventure.text.format.TextDecoration.ITALIC, false); + } -+ itemstack1.setHoverName(io.papermc.paper.adventure.PaperAdventure.asVanilla(component)); ++ itemstack1.set(DataComponents.CUSTOM_NAME, io.papermc.paper.adventure.PaperAdventure.asVanilla(component)); + } + else + // Purpur end - itemstack1.setHoverName(Component.literal(this.itemName)); + itemstack1.set(DataComponents.CUSTOM_NAME, Component.literal(this.itemName)); } - } else if (itemstack.hasCustomHoverName()) { + } else if (itemstack.has(DataComponents.CUSTOM_NAME)) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d943ae4f0a3d6deda1596ed4c5b8c01e3653f8a1..1f22aae24973fc8f6464c0de0188d01c8171546f 100644 +index 00c4cda4ca21195c4fbfeb47f92e197be18aa4c6..4c80796777c5a90c5e7a9e8ef0beedfcb49f0aa9 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -293,6 +293,13 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0082-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch similarity index 92% rename from patches/unapplied-server/0082-Add-option-to-disable-dolphin-treasure-searching.patch rename to patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch index 8651cd48d..23dbd04de 100644 --- a/patches/unapplied-server/0082-Add-option-to-disable-dolphin-treasure-searching.patch +++ b/patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to disable dolphin treasure searching diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -index df6306572f11762ec0d54b738c1a8a30269c9224..3e32787cc7e96e83dc408e556a92b25607d487a9 100644 +index 4f294b3ecf061f34046b52bf2b6a3d0ff1ed347b..366d583926e7e33a8c1e5a803bb75a456b4838d0 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -@@ -481,6 +481,7 @@ public class Dolphin extends WaterAnimal { +@@ -471,6 +471,7 @@ public class Dolphin extends WaterAnimal { @Override public boolean canUse() { diff --git a/patches/unapplied-server/0083-Short-enderman-height.patch b/patches/server/0080-Short-enderman-height.patch similarity index 84% rename from patches/unapplied-server/0083-Short-enderman-height.patch rename to patches/server/0080-Short-enderman-height.patch index 3359afa18..bd0c0369b 100644 --- a/patches/unapplied-server/0083-Short-enderman-height.patch +++ b/patches/server/0080-Short-enderman-height.patch @@ -5,24 +5,24 @@ Subject: [PATCH] Short enderman height diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 44aa32b49fa32fbaf86625c0eed7c2e01d8f212c..e5aa1bac908f947f2ed70a05194bf30b4cb55115 100644 +index 9b3bf5ac043262c6cd00d83b750c3313122d92a9..3097529a9066841a58c899ce55b3bc0cd6af7e88 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -313,7 +313,8 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -322,7 +322,8 @@ public class EntityType implements FeatureElement, EntityTypeT private Component description; @Nullable - private ResourceLocation lootTable; + private ResourceKey lootTable; - private final EntityDimensions dimensions; + private EntityDimensions dimensions; // Purpur - remove final + public void setDimensions(EntityDimensions dimensions) { this.dimensions = dimensions; } // Purpur + private final float spawnDimensionsScale; private final FeatureFlagSet requiredFeatures; - private static EntityType register(String id, EntityType.Builder type) { // CraftBukkit - decompile error diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 2af9b2334a4baa15620b06ffddfbc60833bd4187..760a26722144da3f547802975484b01c377afe17 100644 +index 89275ac02fcfab963b520efae6135d6f5ac13465..cb307a9419399e33a895376a584456f084691965 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -440,6 +440,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -419,6 +419,7 @@ public class EnderMan extends Monster implements NeutralMob { if (this.isInvulnerableTo(source)) { return false; } else if (getRider() != null && this.isControllable()) { return super.hurt(source, amount); // Purpur - no teleporting on damage diff --git a/patches/unapplied-server/0084-Stop-squids-floating-on-top-of-water.patch b/patches/server/0081-Stop-squids-floating-on-top-of-water.patch similarity index 87% rename from patches/unapplied-server/0084-Stop-squids-floating-on-top-of-water.patch rename to patches/server/0081-Stop-squids-floating-on-top-of-water.patch index ffdc78a93..0ce118bf6 100644 --- a/patches/unapplied-server/0084-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0081-Stop-squids-floating-on-top-of-water.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Stop squids floating on top of water diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 10a0f2b4968600f088677103b0bfbe5f69aa4428..c02c75620e256e4c129a7966a73f2d5a383fb9e2 100644 +index a99d04b820c230422bc82a3e0e094a79ab0c5c33..9a3796a69dd8745a498be5f2bb06c50355af44ce 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4462,6 +4462,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4511,6 +4511,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.yRotO = this.getYRot(); } @@ -19,13 +19,13 @@ index 10a0f2b4968600f088677103b0bfbe5f69aa4428..c02c75620e256e4c129a7966a73f2d5a + // Purpur end + public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { - if (false && this.touchingUnloadedChunk()) { // Pufferfish - cost of a lookup here is the same cost as below, so skip + if (this.touchingUnloadedChunk()) { return false; diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 9f598ff84b836d10e215c7e8fe79735f7f41e32b..bed42fe33d3788151188075f8969442555263492 100644 +index e38416189d9dc72f0b5951a1f6430dbc4578c422..c562eeb5e865a57fbc595de47c5d4e2b90430026 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -75,6 +75,12 @@ public class Squid extends WaterAnimal { +@@ -73,6 +73,12 @@ public class Squid extends WaterAnimal { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.squidMaxHealth); } diff --git a/patches/unapplied-server/0085-Crying-obsidian-valid-for-portal-frames.patch b/patches/server/0082-Crying-obsidian-valid-for-portal-frames.patch similarity index 96% rename from patches/unapplied-server/0085-Crying-obsidian-valid-for-portal-frames.patch rename to patches/server/0082-Crying-obsidian-valid-for-portal-frames.patch index f3310fe8a..50348dfe0 100644 --- a/patches/unapplied-server/0085-Crying-obsidian-valid-for-portal-frames.patch +++ b/patches/server/0082-Crying-obsidian-valid-for-portal-frames.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Crying obsidian valid for portal frames diff --git a/src/main/java/net/minecraft/world/level/portal/PortalShape.java b/src/main/java/net/minecraft/world/level/portal/PortalShape.java -index 912cee9ec45876f831ca230b59a1be3b48ce6aa5..46910a3bdacc9df1835e16b300f9e107744d2660 100644 +index af24467ee37cfc06f692b3b02e68f6cfbaaa8d59..afe6b2170846273b41b694aa53dca4c31bf78b3f 100644 --- a/src/main/java/net/minecraft/world/level/portal/PortalShape.java +++ b/src/main/java/net/minecraft/world/level/portal/PortalShape.java @@ -33,7 +33,7 @@ public class PortalShape { diff --git a/patches/unapplied-server/0086-Entities-can-use-portals-configuration.patch b/patches/server/0083-Entities-can-use-portals-configuration.patch similarity index 91% rename from patches/unapplied-server/0086-Entities-can-use-portals-configuration.patch rename to patches/server/0083-Entities-can-use-portals-configuration.patch index 23cc463f3..571526817 100644 --- a/patches/unapplied-server/0086-Entities-can-use-portals-configuration.patch +++ b/patches/server/0083-Entities-can-use-portals-configuration.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entities can use portals configuration diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 8307646d2ff06ae8cde245c8d1aec259df2330a2..ca0719307e4d50b3dcfe13195f1c1e680b00350c 100644 +index 9a3796a69dd8745a498be5f2bb06c50355af44ce..a93ae9de698ce97e8603deb1075e6dc5aeaab274 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3167,7 +3167,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3220,7 +3220,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public void handleInsidePortal(BlockPos pos) { if (this.isOnPortalCooldown()) { this.setPortalCooldown(); @@ -17,7 +17,7 @@ index 8307646d2ff06ae8cde245c8d1aec259df2330a2..ca0719307e4d50b3dcfe13195f1c1e68 if (!this.level().isClientSide && !pos.equals(this.portalEntrancePos)) { this.portalEntrancePos = pos.immutable(); } -@@ -3873,7 +3873,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3914,7 +3914,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean canChangeDimensions() { diff --git a/patches/unapplied-server/0087-LivingEntity-broadcastItemBreak.patch b/patches/server/0084-LivingEntity-broadcastItemBreak.patch similarity index 77% rename from patches/unapplied-server/0087-LivingEntity-broadcastItemBreak.patch rename to patches/server/0084-LivingEntity-broadcastItemBreak.patch index 671e9bd02..6596842e4 100644 --- a/patches/unapplied-server/0087-LivingEntity-broadcastItemBreak.patch +++ b/patches/server/0084-LivingEntity-broadcastItemBreak.patch @@ -5,12 +5,12 @@ Subject: [PATCH] LivingEntity#broadcastItemBreak diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index e25c95a904820a84ba18976a30faff289682a47f..17fc6efc988bd74fc50c340eb62f8a7def2167cb 100644 +index 39c2a9f732b8e2452fd2dca07193a173d0c2ba1c..4fd98b8c39c3a989e5bf5682b936cade78a8c404 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -1221,5 +1221,11 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -1184,5 +1184,11 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { public void setSafeFallDistance(float safeFallDistance) { - getHandle().safeFallDistance = safeFallDistance; + getHandle().getAttribute(Attributes.SAFE_FALL_DISTANCE).setBaseValue(safeFallDistance); } + + @Override diff --git a/patches/unapplied-server/0088-Customizable-wither-health-and-healing.patch b/patches/server/0085-Customizable-wither-health-and-healing.patch similarity index 94% rename from patches/unapplied-server/0088-Customizable-wither-health-and-healing.patch rename to patches/server/0085-Customizable-wither-health-and-healing.patch index 6ad148bf8..0ce62c319 100644 --- a/patches/unapplied-server/0088-Customizable-wither-health-and-healing.patch +++ b/patches/server/0085-Customizable-wither-health-and-healing.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Customizable wither health and healing Adds the ability to customize the health of the wither, as well as the amount that it heals, and how often. diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 51ccbf3bd77bbcf77833b39fadc6c01fd28f2131..0c7623cc87c534cf02ee78a1ffb6928a31758f6f 100644 +index 0cc32342cf6c65466dd1e45f9097ca89b01036e4..8d2894bb1ae70f63c8fa67de3e9f7c6a9c940f3e 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -527,8 +527,10 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -520,8 +520,10 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } } diff --git a/patches/unapplied-server/0089-Allow-toggling-special-MobSpawners-per-world.patch b/patches/server/0086-Allow-toggling-special-MobSpawners-per-world.patch similarity index 90% rename from patches/unapplied-server/0089-Allow-toggling-special-MobSpawners-per-world.patch rename to patches/server/0086-Allow-toggling-special-MobSpawners-per-world.patch index 21b109b70..a123bfffa 100644 --- a/patches/unapplied-server/0089-Allow-toggling-special-MobSpawners-per-world.patch +++ b/patches/server/0086-Allow-toggling-special-MobSpawners-per-world.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Allow toggling special MobSpawners per world In vanilla, these are all hardcoded on for world type 0 (overworld) and hardcoded off for every other world type. Default config behaviour matches this. diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index a89a84f0955c5f3bee8abf529b585f04d5349de2..cd54fd87fc48ee0423263c4365ac7660a9ece741 100644 +index b02d9db8442b209a9df27e417be71b11d426878b..1c74802577e056b9023dcc2cbec5885d02fe2c92 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -708,7 +708,24 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -714,7 +714,24 @@ public class ServerLevel extends Level implements WorldGenLevel { this.dragonParts = new Int2ObjectOpenHashMap(); this.tickTime = flag1; this.server = minecraftserver; @@ -36,10 +36,10 @@ index a89a84f0955c5f3bee8abf529b585f04d5349de2..cd54fd87fc48ee0423263c4365ac7660 ChunkGenerator chunkgenerator = worlddimension.generator(); // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java -index d7bddedb19c10f62fd1f7d3128453ad706ed16be..752b38d45d59d8b3cd492246e5aa4f378a78734d 100644 +index c72b6ea5530e54fc373c701028e1c147cea34b59..96e9fce5f9084737d2fcf4deb83305733b480179 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java -@@ -159,7 +159,17 @@ public class WanderingTraderSpawner implements CustomSpawner { +@@ -160,7 +160,17 @@ public class WanderingTraderSpawner implements CustomSpawner { int k = pos.getX() + this.random.nextInt(range * 2) - range; int l = pos.getZ() + this.random.nextInt(range * 2) - range; int i1 = world.getHeight(Heightmap.Types.WORLD_SURFACE, k, l); @@ -56,10 +56,10 @@ index d7bddedb19c10f62fd1f7d3128453ad706ed16be..752b38d45d59d8b3cd492246e5aa4f37 + } + // Purpur end - if (NaturalSpawner.isSpawnPositionOk(SpawnPlacements.Type.ON_GROUND, world, blockposition2, EntityType.WANDERING_TRADER)) { + if (spawnplacementtype.isSpawnPositionOk(world, blockposition2, EntityType.WANDERING_TRADER)) { blockposition1 = blockposition2; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6b7602954de34a114893e49e8f93665ba30ed494..283c14b3a3a7e9ec200718d6f2df7c9b1f3764a0 100644 +index beea39d7cdbca783de7248a5c40ea2c7ab02e5b5..ce5db64c233bac3800a715e66aada4740bdad95b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -69,6 +69,12 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0090-Raid-cooldown-setting.patch b/patches/server/0087-Raid-cooldown-setting.patch similarity index 78% rename from patches/unapplied-server/0090-Raid-cooldown-setting.patch rename to patches/server/0087-Raid-cooldown-setting.patch index 160b701ef..439cbff14 100644 --- a/patches/unapplied-server/0090-Raid-cooldown-setting.patch +++ b/patches/server/0087-Raid-cooldown-setting.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Raid cooldown setting diff --git a/src/main/java/net/minecraft/world/entity/raid/Raids.java b/src/main/java/net/minecraft/world/entity/raid/Raids.java -index 31831811ce16265e9828fa34d9e67d8ac195d723..a1f74718240da3dfb0fc53f337ec3bf1636def75 100644 +index 8c60f71270d909c10e6617eb64b8fdb42deb73e9..eedce2a3d67d875d5174ee125e2679480d4d412c 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raids.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raids.java -@@ -29,6 +29,7 @@ import net.minecraft.world.phys.Vec3; +@@ -26,6 +26,7 @@ import net.minecraft.world.phys.Vec3; public class Raids extends SavedData { private static final String RAID_FILE_ID = "raids"; @@ -16,7 +16,7 @@ index 31831811ce16265e9828fa34d9e67d8ac195d723..a1f74718240da3dfb0fc53f337ec3bf1 public final Map raidMap = Maps.newHashMap(); private final ServerLevel level; private int nextAvailableID; -@@ -54,6 +55,17 @@ public class Raids extends SavedData { +@@ -51,6 +52,17 @@ public class Raids extends SavedData { public void tick() { ++this.tick; @@ -31,25 +31,25 @@ index 31831811ce16265e9828fa34d9e67d8ac195d723..a1f74718240da3dfb0fc53f337ec3bf1 + }); + } + // Purpur end - Iterator iterator = this.raidMap.values().iterator(); + Iterator iterator = this.raidMap.values().iterator(); while (iterator.hasNext()) { -@@ -138,11 +150,13 @@ public class Raids extends SavedData { - } +@@ -122,11 +134,13 @@ public class Raids extends SavedData { + */ - if (flag) { + 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 // CraftBukkit start if (!org.bukkit.craftbukkit.event.CraftEventFactory.callRaidTriggerEvent(raid, player)) { - player.removeEffect(MobEffects.BAD_OMEN); + player.removeEffect(net.minecraft.world.effect.MobEffects.RAID_OMEN); return null; } + if (level.purpurConfig.raidCooldownSeconds != 0) playerCooldowns.put(player.getUUID(), level.purpurConfig.raidCooldownSeconds); // Purpur - if (!this.raidMap.containsKey(raid.getId())) { + if (!raid.isStarted() && !this.raidMap.containsKey(raid.getId())) { this.raidMap.put(raid.getId(), raid); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 320c04ee1423b5964f8ee023fc1bf76913c745e4..4bc033a3ce290b9bb64412042c642eabce2a0a5d 100644 +index ce5db64c233bac3800a715e66aada4740bdad95b..9654023afbb0569d5d814368b93b74dedda905a4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -109,6 +109,7 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0091-Despawn-rate-config-options-per-projectile-type.patch b/patches/server/0088-Despawn-rate-config-options-per-projectile-type.patch similarity index 96% rename from patches/unapplied-server/0091-Despawn-rate-config-options-per-projectile-type.patch rename to patches/server/0088-Despawn-rate-config-options-per-projectile-type.patch index 2fa3f7291..f165920ab 100644 --- a/patches/unapplied-server/0091-Despawn-rate-config-options-per-projectile-type.patch +++ b/patches/server/0088-Despawn-rate-config-options-per-projectile-type.patch @@ -7,7 +7,7 @@ This patch's implementation has been removed in favor of Pufferfish's entity-tim The config remains for migration purposes. diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4bc033a3ce290b9bb64412042c642eabce2a0a5d..ba055361b27c83fd27e5347c26752e8f88d35793 100644 +index 9654023afbb0569d5d814368b93b74dedda905a4..8fd3f4a95dd53ace40d76be248b2dbc54806533e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -286,6 +286,39 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0092-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch similarity index 92% rename from patches/unapplied-server/0092-Add-option-to-disable-zombie-aggressiveness-towards-.patch rename to patches/server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch index d380f267c..e666b9ce9 100644 --- a/patches/unapplied-server/0092-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/server/0089-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add option to disable zombie aggressiveness towards villagers diff --git a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java -index cfe6a6f6bcfd7a3b29ab25f5a6745d31c18f338d..c168658d4d4ec1ddd80425e786d4435fd6576637 100644 +index c72d6bccf7d72d08d388c65936a89c92261c7860..ee746753515c9cea8dd246f4f56e6781956726c1 100644 --- a/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java +++ b/src/main/java/com/destroystokyo/paper/entity/ai/MobGoalHelper.java @@ -137,6 +137,10 @@ public class MobGoalHelper { @@ -20,10 +20,10 @@ index cfe6a6f6bcfd7a3b29ab25f5a6745d31c18f338d..c168658d4d4ec1ddd80425e786d4435f ignored.add("goal_selector_1"); ignored.add("goal_selector_2"); diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index cb9bc542ae73950c56fd883787f026d92dda4834..e6751c1a834453be66e891d7eb94bbb66f36008c 100644 +index 1d283484be270497859e23e3bb4ab38c09af23e6..b02cdbaa0455319b1e8a7e777e64ff4a56590388 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -@@ -120,7 +120,19 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -123,7 +123,19 @@ public class Drowned extends Zombie implements RangedAttackMob { this.goalSelector.addGoal(7, new RandomStrollGoal(this, 1.0D)); this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Drowned.class})).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::okTarget)); @@ -45,10 +45,10 @@ index cb9bc542ae73950c56fd883787f026d92dda4834..e6751c1a834453be66e891d7eb94bbb6 this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Axolotl.class, true, false)); this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index 9c49b930d80a97ad76f0b93cb883f832974c76fd..1bb5eb0f75dc4509377cf54054eba34e4ffd02a9 100644 +index 555b86925b8d848fad40a838dd98607db8741e3b..3d42b2ea26217243dba96174ff0eadbcdd81a6cd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -157,7 +157,19 @@ public class Zombie extends Monster { +@@ -154,7 +154,19 @@ public class Zombie extends Monster { this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0D)); this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); @@ -70,7 +70,7 @@ index 9c49b930d80a97ad76f0b93cb883f832974c76fd..1bb5eb0f75dc4509377cf54054eba34e this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 79ba22306cde4e5b6a119cb81d8029d828da7bbe..6950c4f5b1b0fd203c9b7adf92d13a321a8c5af1 100644 +index 8fd3f4a95dd53ace40d76be248b2dbc54806533e..462af0111df5e245bf705f46585924e57a7217cc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1850,6 +1850,7 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0093-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch similarity index 90% rename from patches/unapplied-server/0093-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch rename to patches/server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch index 6cbb0a3b8..4358026f2 100644 --- a/patches/unapplied-server/0093-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch +++ b/patches/server/0090-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add predicate to recipe's ExactChoice ingredient diff --git a/src/main/java/net/minecraft/world/item/crafting/Ingredient.java b/src/main/java/net/minecraft/world/item/crafting/Ingredient.java -index 7c29750e534eae4266bf7a63c50e3827401d6569..e8e9a3370ba07dc0ca47c8352f6f04a449f2268f 100644 +index e314f36951e9ac15c57137e24fce8c410373130a..21dfb8e91c5427ac12133de2c05d923d87adf5ba 100644 --- a/src/main/java/net/minecraft/world/item/crafting/Ingredient.java +++ b/src/main/java/net/minecraft/world/item/crafting/Ingredient.java -@@ -36,6 +36,7 @@ public final class Ingredient implements Predicate { +@@ -41,6 +41,7 @@ public final class Ingredient implements Predicate { @Nullable private IntList stackingIds; public boolean exact; // CraftBukkit @@ -16,7 +16,7 @@ index 7c29750e534eae4266bf7a63c50e3827401d6569..e8e9a3370ba07dc0ca47c8352f6f04a4 public static final Codec CODEC = Ingredient.codec(true); public static final Codec CODEC_NONEMPTY = Ingredient.codec(false); -@@ -67,6 +68,12 @@ public final class Ingredient implements Predicate { +@@ -72,6 +73,12 @@ public final class Ingredient implements Predicate { } else if (this.isEmpty()) { return itemstack.isEmpty(); } else { diff --git a/patches/unapplied-server/0094-Flying-squids-Oh-my.patch b/patches/server/0091-Flying-squids-Oh-my.patch similarity index 92% rename from patches/unapplied-server/0094-Flying-squids-Oh-my.patch rename to patches/server/0091-Flying-squids-Oh-my.patch index e38d41e3d..866d81961 100644 --- a/patches/unapplied-server/0094-Flying-squids-Oh-my.patch +++ b/patches/server/0091-Flying-squids-Oh-my.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Flying squids! Oh my! diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java -index bf47cf511b5e3c0107354f289b740bd804b5f978..1330c4a4d9ff347e62a284eb8b71c107d87baf83 100644 +index 8211c152e6f4232e82e452b08047e4579465d770..4cd57672c548950cb4e0aa97af75ecca84be6823 100644 --- a/src/main/java/net/minecraft/world/entity/GlowSquid.java +++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java @@ -41,6 +41,11 @@ public class GlowSquid extends Squid { @@ -21,10 +21,10 @@ index bf47cf511b5e3c0107354f289b740bd804b5f978..1330c4a4d9ff347e62a284eb8b71c107 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 8d5f5e5ed5bc3d0d8c9403a473dff03f2b8e724f..65d0e602a9cab5d51d1a27f690524ddad72bd2a5 100644 +index c562eeb5e865a57fbc595de47c5d4e2b90430026..f0261117a4f8ae240b3b991053deaf8d6419b5b4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -81,6 +81,15 @@ public class Squid extends WaterAnimal { +@@ -79,6 +79,15 @@ public class Squid extends WaterAnimal { return super.getAxisForFluidCheck().offsetY(level().purpurConfig.squidOffsetWaterCheck); } @@ -40,7 +40,7 @@ index 8d5f5e5ed5bc3d0d8c9403a473dff03f2b8e724f..65d0e602a9cab5d51d1a27f690524dda @Override protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); -@@ -153,6 +162,7 @@ public class Squid extends WaterAnimal { +@@ -151,6 +160,7 @@ public class Squid extends WaterAnimal { } if (this.isInWaterOrBubble()) { @@ -48,7 +48,7 @@ index 8d5f5e5ed5bc3d0d8c9403a473dff03f2b8e724f..65d0e602a9cab5d51d1a27f690524dda 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; -@@ -360,7 +370,7 @@ public class Squid extends WaterAnimal { +@@ -358,7 +368,7 @@ public class Squid extends WaterAnimal { int i = this.squid.getNoActionTime(); if (i > 100) { this.squid.setMovementVector(0.0F, 0.0F, 0.0F); diff --git a/patches/unapplied-server/0095-Infinity-bow-settings.patch b/patches/server/0092-Infinity-bow-settings.patch similarity index 54% rename from patches/unapplied-server/0095-Infinity-bow-settings.patch rename to patches/server/0092-Infinity-bow-settings.patch index e4d138d9d..320c752c7 100644 --- a/patches/unapplied-server/0095-Infinity-bow-settings.patch +++ b/patches/server/0092-Infinity-bow-settings.patch @@ -5,29 +5,29 @@ Subject: [PATCH] Infinity bow settings diff --git a/src/main/java/net/minecraft/world/item/BowItem.java b/src/main/java/net/minecraft/world/item/BowItem.java -index 08d597db1a5345a343777a01427655e6bf2c926b..33df0ca406dc8321b76b393f317bbd1c8ebe6366 100644 +index 5ca843df5b4caa668953e5e36a9b20fabeb35046..9553e68f0e34de41a3f337dd4fa45d5103def8bb 100644 --- a/src/main/java/net/minecraft/world/item/BowItem.java +++ b/src/main/java/net/minecraft/world/item/BowItem.java -@@ -38,7 +38,7 @@ public class BowItem extends ProjectileWeaponItem implements Vanishable { - float f = BowItem.getPowerForTime(j); - - if ((double) f >= 0.1D) { -- boolean flag1 = flag && itemstack1.is(Items.ARROW); -+ boolean flag1 = flag && ((itemstack1.is(Items.ARROW) && world.purpurConfig.infinityWorksWithNormalArrows) || (itemstack1.is(Items.TIPPED_ARROW) && world.purpurConfig.infinityWorksWithTippedArrows) || (itemstack1.is(Items.SPECTRAL_ARROW) && world.purpurConfig.infinityWorksWithSpectralArrows)); // Purpur if (!world.isClientSide) { - - if (!world.isClientSide) { - ArrowItem itemarrow = (ArrowItem) (itemstack1.getItem() instanceof ArrowItem ? itemstack1.getItem() : Items.ARROW); -@@ -132,7 +132,7 @@ public class BowItem extends ProjectileWeaponItem implements Vanishable { - ItemStack itemstack = user.getItemInHand(hand); - boolean flag = !user.getProjectile(itemstack).isEmpty(); - -- if (!user.getAbilities().instabuild && !flag) { -+ if (!(world.purpurConfig.infinityWorksWithoutArrows && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.INFINITY_ARROWS, itemstack) > 0) && !user.getAbilities().instabuild && !flag) { // Purpur - return InteractionResultHolder.fail(itemstack); +@@ -29,7 +29,7 @@ public class BowItem extends ProjectileWeaponItem { + int i = this.getUseDuration(stack) - remainingUseTicks; + float f = getPowerForTime(i); + if (!((double)f < 0.1)) { +- List list = draw(stack, itemStack, player); ++ List list = draw(stack, itemStack, player, !((itemStack.is(Items.ARROW) && world.purpurConfig.infinityWorksWithNormalArrows) || (itemStack.is(Items.TIPPED_ARROW) && world.purpurConfig.infinityWorksWithTippedArrows) || (itemStack.is(Items.SPECTRAL_ARROW) && world.purpurConfig.infinityWorksWithSpectralArrows))); + if (!world.isClientSide() && !list.isEmpty()) { + this.shoot(world, player, player.getUsedItemHand(), stack, list, f * 3.0F, 1.0F, f == 1.0F, null); + } +@@ -81,7 +81,7 @@ public class BowItem extends ProjectileWeaponItem { + public InteractionResultHolder use(Level world, Player user, InteractionHand hand) { + ItemStack itemStack = user.getItemInHand(hand); + boolean bl = !user.getProjectile(itemStack).isEmpty(); +- if (!user.hasInfiniteMaterials() && !bl) { ++ if (!(world.purpurConfig.infinityWorksWithoutArrows && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.INFINITY_ARROWS, itemStack) > 0) && !user.hasInfiniteMaterials() && !bl) { + return InteractionResultHolder.fail(itemStack); } else { user.startUsingItem(hand); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8af34a04370ebb0b62137387c7eb082443f68c5b..2122658e5f5b6d0d9019f79f6c53717f7094abc0 100644 +index 7fe8d50f7cf314477d3877826deaed07feabb4b5..848292e607c7977aec8bd81d8bc42398fdffd3dd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -140,6 +140,17 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0096-Configurable-daylight-cycle.patch b/patches/server/0093-Configurable-daylight-cycle.patch similarity index 86% rename from patches/unapplied-server/0096-Configurable-daylight-cycle.patch rename to patches/server/0093-Configurable-daylight-cycle.patch index bb0a3861a..a3b53e602 100644 --- a/patches/unapplied-server/0096-Configurable-daylight-cycle.patch +++ b/patches/server/0093-Configurable-daylight-cycle.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Configurable daylight cycle diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetTimePacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetTimePacket.java -index 9ec6145fe04ec64bbee8ec6a837719caebdbc6f5..358d610ad020cada1bb83e393deeeaaec05a2791 100644 +index 76ef195a5074006b009acd9cc1744667c6aecbb9..659577549e132754281df76a7a1bfd884443c56a 100644 --- a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetTimePacket.java +++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetTimePacket.java -@@ -5,7 +5,7 @@ import net.minecraft.network.protocol.Packet; - - public class ClientboundSetTimePacket implements Packet { +@@ -10,7 +10,7 @@ public class ClientboundSetTimePacket implements Packet