diff --git a/patches/unapplied-server/0151-Config-to-allow-for-unsafe-enchants.patch b/patches/server/0148-Config-to-allow-for-unsafe-enchants.patch similarity index 67% rename from patches/unapplied-server/0151-Config-to-allow-for-unsafe-enchants.patch rename to patches/server/0148-Config-to-allow-for-unsafe-enchants.patch index e83576a0a..1c0bc29d9 100644 --- a/patches/unapplied-server/0151-Config-to-allow-for-unsafe-enchants.patch +++ b/patches/server/0148-Config-to-allow-for-unsafe-enchants.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config to allow for unsafe enchants diff --git a/src/main/java/net/minecraft/server/commands/EnchantCommand.java b/src/main/java/net/minecraft/server/commands/EnchantCommand.java -index 15bfe2e58d16864af29b04c17181ebf45fa21eba..8b0c61bcdb8e00dda6fb8f43e6d74711361eba9c 100644 +index 84f1ba6275f04624f46ccd772924b5e075e7b205..bfb455fb74f0a9645212f90acb54f68d1c7d9772 100644 --- a/src/main/java/net/minecraft/server/commands/EnchantCommand.java +++ b/src/main/java/net/minecraft/server/commands/EnchantCommand.java @@ -70,7 +70,7 @@ public class EnchantCommand { @@ -21,50 +21,50 @@ index 15bfe2e58d16864af29b04c17181ebf45fa21eba..8b0c61bcdb8e00dda6fb8f43e6d74711 ItemStack itemStack = livingEntity.getMainHandItem(); if (!itemStack.isEmpty()) { if (enchantment2.canEnchant(itemStack) -- && EnchantmentHelper.isEnchantmentCompatible(EnchantmentHelper.getEnchantments(itemStack).keySet(), enchantment2)) { -+ && EnchantmentHelper.isEnchantmentCompatible(EnchantmentHelper.getEnchantments(itemStack).keySet(), enchantment2) || (org.purpurmc.purpur.PurpurConfig.allowUnsafeEnchantCommand && !itemStack.hasEnchantment(enchantment2))) { // Purpur +- && EnchantmentHelper.isEnchantmentCompatible(EnchantmentHelper.getEnchantmentsForCrafting(itemStack).keySet(), enchantment2)) { ++ && EnchantmentHelper.isEnchantmentCompatible(EnchantmentHelper.getEnchantmentsForCrafting(itemStack).keySet(), enchantment2) || (org.purpurmc.purpur.PurpurConfig.allowUnsafeEnchantCommand && !itemStack.hasEnchantment(enchantment2))) { // Purpur itemStack.enchant(enchantment2, level); i++; } else if (targets.size() == 1) { diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -index fc71e25bb657581db5b79623c4ea6adc5f9e2b12..3f13c6fb479db34c0c4d1e0f9241919f2e62cd53 100644 +index 62a69dc13406bb0144948bf4bd265c3a28bfe14b..128c2c6f1b94d934d4d306f70c8ace08e4dc48d1 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java @@ -228,7 +228,8 @@ public class AnvilMenu extends ItemCombinerMenu { - int i2 = (Integer) map1.get(enchantment); + int i2 = entry.getIntValue(); - i2 = l1 == i2 ? i2 + 1 : Math.max(i2, l1); -- boolean flag3 = canDoUnsafeEnchants || enchantment.canEnchant(itemstack); // Purpur -+ boolean flag3 = canDoUnsafeEnchants || (org.purpurmc.purpur.PurpurConfig.allowUnsafeEnchants && org.purpurmc.purpur.PurpurConfig.allowInapplicableEnchants) || enchantment.canEnchant(itemstack); // Purpur -+ boolean flag4 = true; // Purpur + i2 = l1 == i2 ? i2 + 1 : Math.max(i2, l1); +- boolean flag3 = enchantment.canEnchant(itemstack); ++ boolean flag3 = canDoUnsafeEnchants || (org.purpurmc.purpur.PurpurConfig.allowUnsafeEnchants && org.purpurmc.purpur.PurpurConfig.allowInapplicableEnchants) || enchantment.canEnchant(itemstack); // Purpur ++ boolean flag4 = true; // Purpur - if (this.player.getAbilities().instabuild || itemstack.is(Items.ENCHANTED_BOOK)) { - flag3 = true; + if (this.player.getAbilities().instabuild || itemstack.is(Items.ENCHANTED_BOOK)) { + flag3 = true; @@ -240,16 +241,20 @@ public class AnvilMenu extends ItemCombinerMenu { - Enchantment enchantment1 = (Enchantment) iterator1.next(); + Holder holder1 = (Holder) iterator1.next(); - if (enchantment1 != enchantment && !enchantment.isCompatibleWith(enchantment1)) { -- flag3 = canDoUnsafeEnchants; // Purpur -+ flag4 = canDoUnsafeEnchants || (org.purpurmc.purpur.PurpurConfig.allowUnsafeEnchants && org.purpurmc.purpur.PurpurConfig.allowIncompatibleEnchants); // Purpur flag3 -> flag4 + if (!holder1.equals(holder) && !enchantment.isCompatibleWith((Enchantment) holder1.value())) { +- flag3 = canDoUnsafeEnchants; // Purpur ++ flag4 = canDoUnsafeEnchants || (org.purpurmc.purpur.PurpurConfig.allowUnsafeEnchants && org.purpurmc.purpur.PurpurConfig.allowIncompatibleEnchants); // Purpur flag3 -> flag4 + if (!flag4 && org.purpurmc.purpur.PurpurConfig.replaceIncompatibleEnchants) { + iterator1.remove(); + flag4 = true; + } - ++i; - } + ++i; + } + } + +- if (!flag3) { ++ if (!flag3 || !flag4) { // Purpur + flag2 = true; + } else { + flag1 = true; +- if (i2 > enchantment.getMaxLevel()) { ++ if ((!org.purpurmc.purpur.PurpurConfig.allowUnsafeEnchants || !org.purpurmc.purpur.PurpurConfig.allowHigherEnchantsLevels) && i2 > enchantment.getMaxLevel()) { // Purpur + i2 = enchantment.getMaxLevel(); } -- if (!flag3) { -+ if (!flag3 || !flag4) { // Purpur - flag2 = true; - } else { - flag1 = true; -- if (i2 > enchantment.getMaxLevel()) { -+ if ((!org.purpurmc.purpur.PurpurConfig.allowUnsafeEnchants || !org.purpurmc.purpur.PurpurConfig.allowHigherEnchantsLevels) && i2 > enchantment.getMaxLevel()) { // Purpur - i2 = enchantment.getMaxLevel(); - } - -@@ -389,7 +394,7 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -375,7 +380,7 @@ public class AnvilMenu extends ItemCombinerMenu { this.sendAllDataToRemote(); // CraftBukkit - SPIGOT-6686: Always send completed inventory to stay in sync with client this.broadcastChanges(); // Purpur start @@ -74,11 +74,11 @@ index fc71e25bb657581db5b79623c4ea6adc5f9e2b12..3f13c6fb479db34c0c4d1e0f9241919f ((ServerPlayer) player).connection.send(new ClientboundContainerSetDataPacket(containerId, 0, cost.get())); } diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 5b0816b6c01912c41e588559597edf8b5902fcd3..b4b1ffe875a18bcb72b7f1d87f6ddbea436bbb66 100644 +index 206f6409a17eb0db1ced8c7a90127ed375329a44..7e6c231a50c7fd2297e1ab404a743e1aece9913b 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -1241,6 +1241,12 @@ public final class ItemStack { - return this.tag != null && this.tag.contains("Enchantments", 9) ? !this.tag.getList("Enchantments", 10).isEmpty() : false; +@@ -1226,6 +1226,12 @@ public final class ItemStack implements DataComponentHolder { + return !((ItemEnchantments) this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY)).isEmpty(); } + // Purpur start @@ -87,17 +87,17 @@ index 5b0816b6c01912c41e588559597edf8b5902fcd3..b4b1ffe875a18bcb72b7f1d87f6ddbea + } + // Purpur end + - public void addTagElement(String key, Tag element) { - this.getOrCreateTag().put(key, element); + public ItemEnchantments getEnchantments() { + return (ItemEnchantments) this.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 0e254b7b1709f745a7d7c0e3cefda96d726de556..1b7aad41427a945ae4309d95f6371ca8aba1149a 100644 +index 11b8f16a39011500d28f72e9c40fc3ca4b0f0fad..f725b560313aaee505708c835499d340e04217e4 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -285,14 +285,34 @@ public class PurpurConfig { public static boolean allowInfinityMending = false; - public static boolean allowCrossbowInfinity = false; + public static boolean allowCrossbowInfinity = true; + public static boolean allowUnsafeEnchants = false; + public static boolean allowInapplicableEnchants = true; + public static boolean allowIncompatibleEnchants = true; diff --git a/patches/unapplied-server/0152-Configurable-sponge-absorption.patch b/patches/server/0149-Configurable-sponge-absorption.patch similarity index 95% rename from patches/unapplied-server/0152-Configurable-sponge-absorption.patch rename to patches/server/0149-Configurable-sponge-absorption.patch index 54ea09654..1264ccce3 100644 --- a/patches/unapplied-server/0152-Configurable-sponge-absorption.patch +++ b/patches/server/0149-Configurable-sponge-absorption.patch @@ -8,7 +8,7 @@ Allows the total area and radius of water blocks the sponge can absorb to be cha Co-authored by: granny diff --git a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java -index 8f3cca228f8ec1ea9379fa43af4baa7b18012dd2..1737a670aa81c17233f8e9a8632f0e0876be367c 100644 +index 902825ec9ea05f4418b45f56a008d73f217bd178..a676ccfa6b02e8986df6f6a2e04cbb06b3edd0ff 100644 --- a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java @@ -58,7 +58,7 @@ public class SpongeBlock extends Block { diff --git a/patches/unapplied-server/0153-Projectile-offset-config.patch b/patches/server/0150-Projectile-offset-config.patch similarity index 74% rename from patches/unapplied-server/0153-Projectile-offset-config.patch rename to patches/server/0150-Projectile-offset-config.patch index ae3f02b03..8f778ac23 100644 --- a/patches/unapplied-server/0153-Projectile-offset-config.patch +++ b/patches/server/0150-Projectile-offset-config.patch @@ -5,36 +5,36 @@ Subject: [PATCH] Projectile offset config diff --git a/src/main/java/net/minecraft/world/item/BowItem.java b/src/main/java/net/minecraft/world/item/BowItem.java -index 33df0ca406dc8321b76b393f317bbd1c8ebe6366..220513d3fd5645322886522ea4f6b8c55d043b3c 100644 +index 9553e68f0e34de41a3f337dd4fa45d5103def8bb..bfb3fe40eb215ceab338ed92a2372cd34ff8486c 100644 --- a/src/main/java/net/minecraft/world/item/BowItem.java +++ b/src/main/java/net/minecraft/world/item/BowItem.java -@@ -44,7 +44,7 @@ public class BowItem extends ProjectileWeaponItem implements Vanishable { - ArrowItem itemarrow = (ArrowItem) (itemstack1.getItem() instanceof ArrowItem ? itemstack1.getItem() : Items.ARROW); - AbstractArrow entityarrow = itemarrow.createArrow(world, itemstack1, entityhuman); +@@ -31,7 +31,7 @@ public class BowItem extends ProjectileWeaponItem { + if (!((double)f < 0.1)) { + 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); ++ this.shoot(world, player, player.getUsedItemHand(), stack, list, f * 3.0F, (float) world.purpurConfig.bowProjectileOffset, f == 1.0F, null); // Purpur + } -- entityarrow.shootFromRotation(entityhuman, entityhuman.getXRot(), entityhuman.getYRot(), 0.0F, f * 3.0F, 1.0F); -+ entityarrow.shootFromRotation(entityhuman, entityhuman.getXRot(), entityhuman.getYRot(), 0.0F, f * 3.0F, (float) world.purpurConfig.bowProjectileOffset); // Purpur - if (f == 1.0F) { - entityarrow.setCritArrow(true); - } + world.playSound( diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java -index f9a9bc27670bb7ec82a609f202edbde6b5a4fd46..05d3a7c077df1b92819655790230cd22028f6893 100644 +index a3614405a92f26f19fb1df24f685cb7c081333db..aaa1055013dea97bed35390b55b90dc6029b59a3 100644 --- a/src/main/java/net/minecraft/world/item/CrossbowItem.java +++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java -@@ -64,7 +64,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { - ItemStack itemstack = user.getItemInHand(hand); - - if (CrossbowItem.isCharged(itemstack)) { -- CrossbowItem.performShooting(world, user, hand, itemstack, CrossbowItem.getShootingPower(itemstack), 1.0F); -+ CrossbowItem.performShooting(world, user, hand, itemstack, CrossbowItem.getShootingPower(itemstack), (float) world.purpurConfig.crossbowProjectileOffset); // Purpur - CrossbowItem.setCharged(itemstack, false); - return InteractionResultHolder.consume(itemstack); - } else if (!user.getProjectile(itemstack).isEmpty()) { +@@ -60,7 +60,7 @@ public class CrossbowItem extends ProjectileWeaponItem { + ItemStack itemStack = user.getItemInHand(hand); + ChargedProjectiles chargedProjectiles = itemStack.get(DataComponents.CHARGED_PROJECTILES); + if (chargedProjectiles != null && !chargedProjectiles.isEmpty()) { +- this.performShooting(world, user, hand, itemStack, getShootingPower(chargedProjectiles), 1.0F, null); ++ this.performShooting(world, user, hand, itemStack, getShootingPower(chargedProjectiles), (float) world.purpurConfig.crossbowProjectileOffset, null); // Purpur + return InteractionResultHolder.consume(itemStack); + } else if (!user.getProjectile(itemStack).isEmpty()) { + this.startSoundPlayed = false; diff --git a/src/main/java/net/minecraft/world/item/EggItem.java b/src/main/java/net/minecraft/world/item/EggItem.java -index a3bd507793994e9cc87a956871a8afbb8ca9460d..ef2197a23aef0a4215fae09bd4618e449e14c64e 100644 +index 4ebd634cff286b10868e26eeb3ecf34abdcab22e..7dc811335caa46870d1d895899a1e6c21980382d 100644 --- a/src/main/java/net/minecraft/world/item/EggItem.java +++ b/src/main/java/net/minecraft/world/item/EggItem.java -@@ -24,7 +24,7 @@ public class EggItem extends Item { +@@ -27,7 +27,7 @@ public class EggItem extends Item implements ProjectileItem { ThrownEgg entityegg = new ThrownEgg(world, user); entityegg.setItem(itemstack); @@ -44,7 +44,7 @@ index a3bd507793994e9cc87a956871a8afbb8ca9460d..ef2197a23aef0a4215fae09bd4618e44 com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entityegg.getBukkitEntity()); if (event.callEvent() && world.addFreshEntity(entityegg)) { diff --git a/src/main/java/net/minecraft/world/item/EnderpearlItem.java b/src/main/java/net/minecraft/world/item/EnderpearlItem.java -index a0c2650678848416829c7185a530fcd63bb68039..8031e38c66468676b3b4a7443d6678eec6b1e8a4 100644 +index fc62754f93bd11a10c28b8b7b116e9fff70a5c7b..11b04455f09d8bfdf44499bb8359dc715c2daffd 100644 --- a/src/main/java/net/minecraft/world/item/EnderpearlItem.java +++ b/src/main/java/net/minecraft/world/item/EnderpearlItem.java @@ -24,7 +24,7 @@ public class EnderpearlItem extends Item { @@ -57,10 +57,10 @@ index a0c2650678848416829c7185a530fcd63bb68039..8031e38c66468676b3b4a7443d6678ee com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entityenderpearl.getBukkitEntity()); if (event.callEvent() && world.addFreshEntity(entityenderpearl)) { diff --git a/src/main/java/net/minecraft/world/item/SnowballItem.java b/src/main/java/net/minecraft/world/item/SnowballItem.java -index bc8186a5bc3a98b35fad570729dd4ba52efab238..caab0c1e2bc5696080750797cbf1c93f57799f7d 100644 +index 32b170551a2f5bdc88d29f4d03750bfe3974e71b..a41fb0dd26af367fc2470a7913a84d864bc505f7 100644 --- a/src/main/java/net/minecraft/world/item/SnowballItem.java +++ b/src/main/java/net/minecraft/world/item/SnowballItem.java -@@ -25,7 +25,7 @@ public class SnowballItem extends Item { +@@ -28,7 +28,7 @@ public class SnowballItem extends Item implements ProjectileItem { Snowball entitysnowball = new Snowball(world, user); entitysnowball.setItem(itemstack); @@ -70,10 +70,10 @@ index bc8186a5bc3a98b35fad570729dd4ba52efab238..caab0c1e2bc5696080750797cbf1c93f com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entitysnowball.getBukkitEntity()); if (event.callEvent() && world.addFreshEntity(entitysnowball)) { diff --git a/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java b/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java -index f47f793c62a919fb65c081ddb82d597a978d3b20..3bbb44ae3da68afbd6012df68dee277a7dbf98c0 100644 +index 369955746f4b51f69fa01103e3771dd74fc6c8f0..e6edd3a0fa2578900cdbe8bd588219dc3fd3af5f 100644 --- a/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java +++ b/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java -@@ -18,7 +18,7 @@ public class ThrowablePotionItem extends PotionItem { +@@ -21,7 +21,7 @@ public class ThrowablePotionItem extends PotionItem implements ProjectileItem { if (!world.isClientSide) { ThrownPotion thrownPotion = new ThrownPotion(world, user); thrownPotion.setItem(itemStack); @@ -83,16 +83,16 @@ index f47f793c62a919fb65c081ddb82d597a978d3b20..3bbb44ae3da68afbd6012df68dee277a com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack), (org.bukkit.entity.Projectile) thrownPotion.getBukkitEntity()); if (event.callEvent() && world.addFreshEntity(thrownPotion)) { diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java -index c2218c2dd46641ebb4c9278fa0d6015122b1905c..7030d94ba14ecacc1e5cd6d6432b1bcb59c8b646 100644 +index 129f829cc238ff2f6586511f80eb6da2e8c7ece4..1c278e92ca3307e93456073ca9581da56c22bca3 100644 --- a/src/main/java/net/minecraft/world/item/TridentItem.java +++ b/src/main/java/net/minecraft/world/item/TridentItem.java -@@ -77,7 +77,7 @@ public class TridentItem extends Item implements Vanishable { +@@ -76,7 +76,7 @@ public class TridentItem extends Item implements ProjectileItem { if (k == 0) { ThrownTrident entitythrowntrident = new ThrownTrident(world, entityhuman, stack); - entitythrowntrident.shootFromRotation(entityhuman, entityhuman.getXRot(), entityhuman.getYRot(), 0.0F, 2.5F + (float) k * 0.5F, 1.0F); + entitythrowntrident.shootFromRotation(entityhuman, entityhuman.getXRot(), entityhuman.getYRot(), 0.0F, 2.5F + (float) k * 0.5F, (float) world.purpurConfig.tridentProjectileOffset); // Purpur - if (entityhuman.getAbilities().instabuild) { + if (entityhuman.hasInfiniteMaterials()) { entitythrowntrident.pickup = AbstractArrow.Pickup.CREATIVE_ONLY; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/unapplied-server/0154-Config-for-powered-rail-activation-distance.patch b/patches/server/0151-Config-for-powered-rail-activation-distance.patch similarity index 94% rename from patches/unapplied-server/0154-Config-for-powered-rail-activation-distance.patch rename to patches/server/0151-Config-for-powered-rail-activation-distance.patch index 3af01e202..984cbac46 100644 --- a/patches/unapplied-server/0154-Config-for-powered-rail-activation-distance.patch +++ b/patches/server/0151-Config-for-powered-rail-activation-distance.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config for powered rail activation distance diff --git a/src/main/java/net/minecraft/world/level/block/PoweredRailBlock.java b/src/main/java/net/minecraft/world/level/block/PoweredRailBlock.java -index b84c48902ef24fdae17578a304e6c93dc20c5dce..e03125281767845564c48c98c3e6b6bbd269ade1 100644 +index 9603d8c84ff483030dc08e82d3579b89e5c1f6e9..8fc65c32a3c6e6842a76b36f45e1b1c23abbc480 100644 --- a/src/main/java/net/minecraft/world/level/block/PoweredRailBlock.java +++ b/src/main/java/net/minecraft/world/level/block/PoweredRailBlock.java @@ -30,7 +30,7 @@ public class PoweredRailBlock extends BaseRailBlock { diff --git a/patches/unapplied-server/0155-Piglin-portal-spawn-modifier.patch b/patches/server/0152-Piglin-portal-spawn-modifier.patch similarity index 93% rename from patches/unapplied-server/0155-Piglin-portal-spawn-modifier.patch rename to patches/server/0152-Piglin-portal-spawn-modifier.patch index 2d7fe4792..2a4bfefb2 100644 --- a/patches/unapplied-server/0155-Piglin-portal-spawn-modifier.patch +++ b/patches/server/0152-Piglin-portal-spawn-modifier.patch @@ -18,13 +18,13 @@ Difficulties: 3 - hard diff --git a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java -index 613df7b174ba4cb87314a631ebc7dfeda8ede58f..f7b724696151b73343feac1ce406fca9377f2508 100644 +index 67060b7446535fc352d221d9fe3928d1d6ffcf54..8d5e841d8cc69bf09a9f1b6248633a72ce5fe1d7 100644 --- a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java @@ -60,7 +60,7 @@ public class NetherPortalBlock extends Block { @Override - public void randomTick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) { + protected void randomTick(BlockState state, ServerLevel world, BlockPos pos, RandomSource random) { - if (world.spigotConfig.enableZombiePigmenPortalSpawns && world.dimensionType().natural() && world.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && random.nextInt(2000) < world.getDifficulty().getId()) { // Spigot + if (world.spigotConfig.enableZombiePigmenPortalSpawns && world.dimensionType().natural() && world.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && random.nextInt(world.purpurConfig.piglinPortalSpawnModifier) < world.getDifficulty().getId()) { // Spigot // Purpur while (world.getBlockState(pos).is((Block) this)) { diff --git a/patches/unapplied-server/0156-Config-to-change-max-number-of-bees.patch b/patches/server/0153-Config-to-change-max-number-of-bees.patch similarity index 90% rename from patches/unapplied-server/0156-Config-to-change-max-number-of-bees.patch rename to patches/server/0153-Config-to-change-max-number-of-bees.patch index 3cfaa7a2f..2722455c3 100644 --- a/patches/unapplied-server/0156-Config-to-change-max-number-of-bees.patch +++ b/patches/server/0153-Config-to-change-max-number-of-bees.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to change max number of bees diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -index d445ed0895293dd45c36226051f5809be8587ebe..2b12596ee7ea1a40120c60c6f43e9e42cc6dfae9 100644 +index 7b263fab4f0014400b3b8e7e33db32f9a125f6ba..f52823146944d333f2d050e90261b570ba66f5dd 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -@@ -47,7 +47,7 @@ public class BeehiveBlockEntity extends BlockEntity { +@@ -59,7 +59,7 @@ public class BeehiveBlockEntity extends BlockEntity { private final List stored = Lists.newArrayList(); @Nullable public BlockPos savedFlowerPos; @@ -18,7 +18,7 @@ index d445ed0895293dd45c36226051f5809be8587ebe..2b12596ee7ea1a40120c60c6f43e9e42 public BeehiveBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityType.BEEHIVE, pos, state); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 1b7aad41427a945ae4309d95f6371ca8aba1149a..d0e3dceec5f7c1d3fed1d6dc0f2a5c1ca2ed09f5 100644 +index f725b560313aaee505708c835499d340e04217e4..198fb9815449fb0043703d480def0633974266f3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -250,6 +250,7 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0157-Config-for-wither-explosion-radius.patch b/patches/server/0154-Config-for-wither-explosion-radius.patch similarity index 96% rename from patches/unapplied-server/0157-Config-for-wither-explosion-radius.patch rename to patches/server/0154-Config-for-wither-explosion-radius.patch index 498db5917..59d2648bb 100644 --- a/patches/unapplied-server/0157-Config-for-wither-explosion-radius.patch +++ b/patches/server/0154-Config-for-wither-explosion-radius.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config for wither explosion radius 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 c37b3486dcc75c5c78d605afeff2e3f723940636..b4a38621b58e16b2bf48b3d45d85130e8883b477 100644 +index c753f715710ec4bb8337e035ac5a4c11371a84a0..a60d7f7baab005afc532ecec7aa22c53db4f51e0 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java @@ -99,7 +99,7 @@ public class WitherSkull extends AbstractHurtingProjectile { diff --git a/patches/unapplied-server/0158-Gamemode-extra-permissions.patch b/patches/server/0155-Gamemode-extra-permissions.patch similarity index 95% rename from patches/unapplied-server/0158-Gamemode-extra-permissions.patch rename to patches/server/0155-Gamemode-extra-permissions.patch index d5cad804d..5640fb7ad 100644 --- a/patches/unapplied-server/0158-Gamemode-extra-permissions.patch +++ b/patches/server/0155-Gamemode-extra-permissions.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Gamemode extra permissions diff --git a/src/main/java/net/minecraft/commands/CommandSourceStack.java b/src/main/java/net/minecraft/commands/CommandSourceStack.java -index b0d96ae08959cdca9177eb875faa99f4a8e92632..546ff84046856ecfe0f2a07d3ba3f886f8df4dca 100644 +index edb94e5601acc38994dac20a167b145de778d426..7475aaac2673729091eabc741c8ebb561aeec8f1 100644 --- a/src/main/java/net/minecraft/commands/CommandSourceStack.java +++ b/src/main/java/net/minecraft/commands/CommandSourceStack.java @@ -230,6 +230,19 @@ public class CommandSourceStack implements ExecutionCommandSource type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { -@@ -381,13 +383,13 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder 0.01D) { double d20 = 0.06D; diff --git a/patches/unapplied-server/0167-Add-config-change-multiplier-critical-damage-value.patch b/patches/server/0164-Add-config-change-multiplier-critical-damage-value.patch similarity index 76% rename from patches/unapplied-server/0167-Add-config-change-multiplier-critical-damage-value.patch rename to patches/server/0164-Add-config-change-multiplier-critical-damage-value.patch index d1a32db26..96d2d3aab 100644 --- a/patches/unapplied-server/0167-Add-config-change-multiplier-critical-damage-value.patch +++ b/patches/server/0164-Add-config-change-multiplier-critical-damage-value.patch @@ -5,18 +5,18 @@ Subject: [PATCH] Add config change multiplier critical damage value diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 73f8aeb1b5253cfd7d5502d506677a3ef906625e..28dca8464a75487566e5d2efac1ec3fe42e6c410 100644 +index e7f45fe435f679afb4fabe657922d7354183c6fb..f45794bf2b418f94961681bac8b0f39fbf6578de 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -1316,7 +1316,7 @@ public abstract class Player extends LivingEntity { - flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits - flag2 = flag2 && !this.isSprinting(); - if (flag2) { -- f *= 1.5F; -+ f *= this.level().purpurConfig.playerCriticalDamageMultiplier; // Purpur - } +@@ -1332,7 +1332,7 @@ public abstract class Player extends LivingEntity { - f += f1; + flag2 = flag2 && !this.level().paperConfig().entities.behavior.disablePlayerCrits; // Paper - Toggleable player crits + if (flag2) { +- f *= 1.5F; ++ f *= this.level().purpurConfig.playerCriticalDamageMultiplier; // Purpur + } + + f += f1; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 8e5faebee176a1ff625bb46b9dddd5391bc80a34..97f2212ca175ad6152acc3fab35dd6d1c2e83a8b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/unapplied-server/0168-Option-to-disable-dragon-egg-teleporting.patch b/patches/server/0165-Option-to-disable-dragon-egg-teleporting.patch similarity index 91% rename from patches/unapplied-server/0168-Option-to-disable-dragon-egg-teleporting.patch rename to patches/server/0165-Option-to-disable-dragon-egg-teleporting.patch index b414f7e04..97e587b05 100644 --- a/patches/unapplied-server/0168-Option-to-disable-dragon-egg-teleporting.patch +++ b/patches/server/0165-Option-to-disable-dragon-egg-teleporting.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option to disable dragon egg teleporting diff --git a/src/main/java/net/minecraft/world/level/block/DragonEggBlock.java b/src/main/java/net/minecraft/world/level/block/DragonEggBlock.java -index 7f365143ce5c62e734eceb855ba0a02ab3a99b27..bbb266cbe23da2573d3dfb3a6edd57461988d3c5 100644 +index fbe15cdd5b9bca2ab4b1e871abbbdbff49ade8a4..23d113842bf774bdc74e0dffcc97b642bc8684f1 100644 --- a/src/main/java/net/minecraft/world/level/block/DragonEggBlock.java +++ b/src/main/java/net/minecraft/world/level/block/DragonEggBlock.java -@@ -49,8 +49,8 @@ public class DragonEggBlock extends FallingBlock { +@@ -48,8 +48,8 @@ public class DragonEggBlock extends FallingBlock { } private void teleport(BlockState state, Level world, BlockPos pos) { diff --git a/patches/unapplied-server/0169-Config-for-unverified-username-message.patch b/patches/server/0166-Config-for-unverified-username-message.patch similarity index 92% rename from patches/unapplied-server/0169-Config-for-unverified-username-message.patch rename to patches/server/0166-Config-for-unverified-username-message.patch index 2181698b6..63fd2b717 100644 --- a/patches/unapplied-server/0169-Config-for-unverified-username-message.patch +++ b/patches/server/0166-Config-for-unverified-username-message.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config for unverified username message diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index c5fa9f4d28f9a7f64a50a902ee5e631bfc00119c..8b62f992ec61d0a66a3856b4928ee2d705548291 100644 +index 765cf12c1558afd9686793b18388fc229c55d2d8..ad674e1be146614ba20e1f184b0f5cc30339593e 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -270,7 +270,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -309,7 +309,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, ServerLoginPacketListenerImpl.LOGGER.warn("Failed to verify username but will let them in anyway!"); ServerLoginPacketListenerImpl.this.startClientVerification(ServerLoginPacketListenerImpl.this.createOfflineProfile(s1)); // Spigot } else { @@ -18,7 +18,7 @@ index c5fa9f4d28f9a7f64a50a902ee5e631bfc00119c..8b62f992ec61d0a66a3856b4928ee2d7 } } catch (AuthenticationUnavailableException authenticationunavailableexception) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 7fe47715413f6a1c21f9b4afb93a6dee4e0f0fe2..23d131fa6b91ba62475dd3f825711f7c0796e3c7 100644 +index a15c0086376a9c0bec8dff6ae8cb97e26ef4731e..0318a324bd59a627114ed031589441c317cf5bcc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -184,6 +184,7 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0170-Make-anvil-cumulative-cost-configurable.patch b/patches/server/0167-Make-anvil-cumulative-cost-configurable.patch similarity index 83% rename from patches/unapplied-server/0170-Make-anvil-cumulative-cost-configurable.patch rename to patches/server/0167-Make-anvil-cumulative-cost-configurable.patch index 7dfeb6446..829be282e 100644 --- a/patches/unapplied-server/0170-Make-anvil-cumulative-cost-configurable.patch +++ b/patches/server/0167-Make-anvil-cumulative-cost-configurable.patch @@ -5,20 +5,20 @@ Subject: [PATCH] Make anvil cumulative cost configurable diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -index 3f13c6fb479db34c0c4d1e0f9241919f2e62cd53..2913d69fcff4b6df68586146b7323cea33eba74b 100644 +index 128c2c6f1b94d934d4d306f70c8ace08e4dc48d1..581d784316a07594570374c1a03e5174c0f91580 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -@@ -403,7 +403,7 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -392,7 +392,7 @@ public class AnvilMenu extends ItemCombinerMenu { } public static int calculateIncreasedRepairCost(int cost) { -- return cost * 2 + 1; -+ return org.purpurmc.purpur.PurpurConfig.anvilCumulativeCost ? cost * 2 + 1 : 0; +- return (int) Math.min((long) cost * 2L + 1L, 2147483647L); ++ return org.purpurmc.purpur.PurpurConfig.anvilCumulativeCost ? (int) Math.min((long) cost * 2L + 1L, 2147483647L) : 0; } public boolean setItemName(String newItemName) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 23d131fa6b91ba62475dd3f825711f7c0796e3c7..09c777f83a74501d76f6e15a61d7c433599cf6cc 100644 +index 0318a324bd59a627114ed031589441c317cf5bcc..18e8a4a062eb57be001c38dbcddef74b0d5583cd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -269,6 +269,7 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0171-Bee-can-work-when-raining-or-at-night.patch b/patches/server/0168-Bee-can-work-when-raining-or-at-night.patch similarity index 87% rename from patches/unapplied-server/0171-Bee-can-work-when-raining-or-at-night.patch rename to patches/server/0168-Bee-can-work-when-raining-or-at-night.patch index 66368d66a..60d07cfc7 100644 --- a/patches/unapplied-server/0171-Bee-can-work-when-raining-or-at-night.patch +++ b/patches/server/0168-Bee-can-work-when-raining-or-at-night.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Bee can work when raining or at night diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 52a7a8b35cf0f7b52d5de253b21f7713ab261544..8d80055253008bb1b2ed77e91a1c51c995208dac 100644 +index 0978f519177ce2f0991402dafb9a22c5a8686168..91c013f7ab58f570d0ebe2773932fcdb49344b3c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -406,7 +406,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -395,7 +395,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { boolean wantsToEnterHive() { if (this.stayOutOfHiveCountdown <= 0 && !this.beePollinateGoal.isPollinating() && !this.hasStung() && this.getTarget() == null) { @@ -18,13 +18,13 @@ index 52a7a8b35cf0f7b52d5de253b21f7713ab261544..8d80055253008bb1b2ed77e91a1c51c9 return flag && !this.isHiveNearFire(); } else { diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -index 2b12596ee7ea1a40120c60c6f43e9e42cc6dfae9..ba610e05806ad020d439d59d30b820bc9cd3fbff 100644 +index f52823146944d333f2d050e90261b570ba66f5dd..d8efb00c325448d566c59418fe22268c6eb4cfce 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -@@ -207,7 +207,7 @@ public class BeehiveBlockEntity extends BlockEntity { +@@ -212,7 +212,7 @@ public class BeehiveBlockEntity extends BlockEntity { } - private static boolean releaseBee(Level world, BlockPos blockposition, BlockState iblockdata, BeehiveBlockEntity.BeeData tileentitybeehive_hivebee, @Nullable List list, BeehiveBlockEntity.BeeReleaseStatus tileentitybeehive_releasestatus, @Nullable BlockPos blockposition1, boolean force) { + private static boolean releaseOccupant(Level world, BlockPos blockposition, BlockState iblockdata, BeehiveBlockEntity.Occupant tileentitybeehive_c, @Nullable List list, BeehiveBlockEntity.BeeReleaseStatus tileentitybeehive_releasestatus, @Nullable BlockPos blockposition1, boolean force) { - if (!force && (world.isNight() || world.isRaining()) && tileentitybeehive_releasestatus != BeehiveBlockEntity.BeeReleaseStatus.EMERGENCY) { + if (!force && ((world.isNight() && !world.purpurConfig.beeCanWorkAtNight) || (world.isRaining() && !world.purpurConfig.beeCanWorkInRain)) && tileentitybeehive_releasestatus != BeehiveBlockEntity.BeeReleaseStatus.EMERGENCY) { // Purpur // CraftBukkit end diff --git a/patches/unapplied-server/0172-API-for-any-mob-to-burn-daylight.patch b/patches/server/0169-API-for-any-mob-to-burn-daylight.patch similarity index 83% rename from patches/unapplied-server/0172-API-for-any-mob-to-burn-daylight.patch rename to patches/server/0169-API-for-any-mob-to-burn-daylight.patch index f5ee53f14..ff533af17 100644 --- a/patches/unapplied-server/0172-API-for-any-mob-to-burn-daylight.patch +++ b/patches/server/0169-API-for-any-mob-to-burn-daylight.patch @@ -6,10 +6,10 @@ Subject: [PATCH] API for any mob to burn daylight Co-authored by: Encode42 diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 53c20b7e1e8d27b4a13e18ae8fa437e83b208c78..2cac12d2b788b0962b719a83b43dc23177b76ac6 100644 +index 5f19cc285efac25b56a29242b41c2823020f170e..2d1fc8734f440c284710c71abc6789e8185ec909 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -562,6 +562,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -562,6 +562,21 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return true; } @@ -32,10 +32,10 @@ index 53c20b7e1e8d27b4a13e18ae8fa437e83b208c78..2cac12d2b788b0962b719a83b43dc231 return this.hardCollides; } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index ef830481a816c743aa3b0feee5c0f2cf51fea7fa..cd87e7c52b75c6ba40343557ba12c7891da88e07 100644 +index 58a57a1cf8b8a3e885346f1fd1f7dd54a0277867..20433981a866b46a2ccedec70d5ee01079c2797c 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -263,6 +263,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -274,6 +274,7 @@ public abstract class LivingEntity extends Entity implements Attackable { public org.bukkit.craftbukkit.entity.CraftLivingEntity getBukkitLivingEntity() { return (org.bukkit.craftbukkit.entity.CraftLivingEntity) super.getBukkitEntity(); } // Paper public boolean silentDeath = false; // Paper - mark entity as dying silently for cancellable death event public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API @@ -43,7 +43,7 @@ index ef830481a816c743aa3b0feee5c0f2cf51fea7fa..cd87e7c52b75c6ba40343557ba12c789 @Override public float getBukkitYaw() { -@@ -811,6 +812,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -842,6 +843,7 @@ public abstract class LivingEntity extends Entity implements Attackable { dataresult.resultOrPartial(logger::error).ifPresent((nbtbase) -> { nbt.put("Brain", nbtbase); }); @@ -51,7 +51,7 @@ index ef830481a816c743aa3b0feee5c0f2cf51fea7fa..cd87e7c52b75c6ba40343557ba12c789 } @Override -@@ -897,6 +899,11 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -929,6 +931,11 @@ public abstract class LivingEntity extends Entity implements Attackable { this.brain = this.makeBrain(new Dynamic(NbtOps.INSTANCE, nbt.get("Brain"))); } @@ -63,7 +63,7 @@ index ef830481a816c743aa3b0feee5c0f2cf51fea7fa..cd87e7c52b75c6ba40343557ba12c789 } // CraftBukkit start -@@ -3607,6 +3614,27 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3572,6 +3579,27 @@ public abstract class LivingEntity extends Entity implements Attackable { this.hurt(this.damageSources().drown(), 1.0F); } @@ -83,7 +83,7 @@ index ef830481a816c743aa3b0feee5c0f2cf51fea7fa..cd87e7c52b75c6ba40343557ba12c789 + flag = false; + } + if (flag) { -+ this.setSecondsOnFire(8); ++ this.igniteForSeconds(8); + } + } + } @@ -92,10 +92,10 @@ index ef830481a816c743aa3b0feee5c0f2cf51fea7fa..cd87e7c52b75c6ba40343557ba12c789 public boolean isSensitiveToWater() { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index a7d475b69bc9f15cf32f297f808246ff69402fb5..4182a146dcad83d141cd5bacdbfc39d912360c40 100644 +index 77cf0d92212d11b9036f9f9cf23b23f71f1d590d..ee98efa69d67cd22eb5722cf68f3b7063e2595c8 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -1767,17 +1767,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1881,17 +1881,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti } public boolean isSunBurnTick() { @@ -115,10 +115,10 @@ index a7d475b69bc9f15cf32f297f808246ff69402fb5..4182a146dcad83d141cd5bacdbfc39d9 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -index 9d259d7e2aa3e44e350eb5927314cfceaffaf3f3..3f9e81c0bdd85bec24a1209ad3fd3dc43d988a4f 100644 +index 8f71739a4b23bc53994f1cbff8500b6bad288a42..919767affe2ede755cf83398436fbf1581ad508f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -66,6 +66,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -65,6 +65,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo protected AbstractSkeleton(EntityType type, Level world) { super(type, world); this.reassessWeaponGoal(); @@ -126,8 +126,8 @@ index 9d259d7e2aa3e44e350eb5927314cfceaffaf3f3..3f9e81c0bdd85bec24a1209ad3fd3dc4 } @Override -@@ -101,35 +102,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo - } +@@ -95,35 +96,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo + abstract SoundEvent getStepSound(); // Paper start - shouldBurnInDay API - private boolean shouldBurnInDay = true; @@ -156,7 +156,7 @@ index 9d259d7e2aa3e44e350eb5927314cfceaffaf3f3..3f9e81c0bdd85bec24a1209ad3fd3dc4 - } - - if (flag) { -- this.setSecondsOnFire(8); +- this.igniteForSeconds(8); - } - } - @@ -164,15 +164,7 @@ index 9d259d7e2aa3e44e350eb5927314cfceaffaf3f3..3f9e81c0bdd85bec24a1209ad3fd3dc4 super.aiStep(); } -@@ -194,7 +174,6 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo - } else { - this.goalSelector.addGoal(4, this.meleeGoal); - } -- - } - } - -@@ -238,7 +217,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -238,7 +218,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo this.reassessWeaponGoal(); // Paper start - shouldBurnInDay API if (nbt.contains("Paper.ShouldBurnInDay")) { @@ -181,7 +173,7 @@ index 9d259d7e2aa3e44e350eb5927314cfceaffaf3f3..3f9e81c0bdd85bec24a1209ad3fd3dc4 } // Paper end - shouldBurnInDay API } -@@ -247,7 +226,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -247,7 +227,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @Override public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); @@ -191,10 +183,10 @@ index 9d259d7e2aa3e44e350eb5927314cfceaffaf3f3..3f9e81c0bdd85bec24a1209ad3fd3dc4 // Paper end - shouldBurnInDay API 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 f6d6df27c2ca7a33ed3ca8e299725b6a5c4aafc3..5ac87650e357f3ac48e37713b9b0b18ad4d6feb6 100644 +index cb96bd5769159e6c25968673ea07cd6d107cff46..440c90feeae3a55c98e2011ecb27c28d58f11e6e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Husk.java +++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java -@@ -22,6 +22,7 @@ public class Husk extends Zombie { +@@ -20,6 +20,7 @@ public class Husk extends Zombie { public Husk(EntityType type, Level world) { super(type, world); @@ -202,7 +194,7 @@ index f6d6df27c2ca7a33ed3ca8e299725b6a5c4aafc3..5ac87650e357f3ac48e37713b9b0b18a } // Purpur start -@@ -77,7 +78,7 @@ public class Husk extends Zombie { +@@ -75,7 +76,7 @@ public class Husk extends Zombie { @Override public boolean isSunSensitive() { @@ -212,36 +204,35 @@ index f6d6df27c2ca7a33ed3ca8e299725b6a5c4aafc3..5ac87650e357f3ac48e37713b9b0b18a @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 637b229817f9f2c3ad224f300b56a6bee4c8a341..bcb1912ea218fbb4b849ab84a7025202100b82c3 100644 +index c52d40eb33a16e428c016a902faeb62aea0fd727..bebc6f9f7e49e9dd34fa295d9ce3e8397feb280c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -61,6 +61,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -59,6 +59,7 @@ public class Phantom extends FlyingMob implements Enemy { this.xpReward = 5; this.moveControl = new Phantom.PhantomMoveControl(this); - this.lookControl = new Phantom.PhantomLookControl(this); + this.lookControl = new Phantom.PhantomLookControl(this, this); + this.setShouldBurnInDay(true); // Purpur } // Purpur start -@@ -254,16 +255,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -247,15 +248,7 @@ public class Phantom extends FlyingMob implements Enemy { @Override public void aiStep() { - // 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); - } - + // Purpur - moved down to shouldBurnInDay() super.aiStep(); } -@@ -291,7 +283,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -283,7 +276,7 @@ public class Phantom extends FlyingMob implements Enemy { if (nbt.hasUUID("Paper.SpawningEntity")) { this.spawningEntity = nbt.getUUID("Paper.SpawningEntity"); } @@ -250,7 +241,7 @@ index 637b229817f9f2c3ad224f300b56a6bee4c8a341..bcb1912ea218fbb4b849ab84a7025202 this.shouldBurnInDay = nbt.getBoolean("Paper.ShouldBurnInDay"); } // Paper end -@@ -308,7 +300,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -300,7 +293,7 @@ public class Phantom extends FlyingMob implements Enemy { if (this.spawningEntity != null) { nbt.putUUID("Paper.SpawningEntity", this.spawningEntity); } @@ -259,8 +250,8 @@ index 637b229817f9f2c3ad224f300b56a6bee4c8a341..bcb1912ea218fbb4b849ab84a7025202 // Paper end } -@@ -377,8 +369,15 @@ public class Phantom extends FlyingMob implements Enemy { - return spawningEntity; +@@ -356,8 +349,15 @@ public class Phantom extends FlyingMob implements Enemy { + return this.spawningEntity; } public void setSpawningEntity(java.util.UUID entity) { this.spawningEntity = entity; } - private boolean shouldBurnInDay = true; @@ -276,12 +267,12 @@ index 637b229817f9f2c3ad224f300b56a6bee4c8a341..bcb1912ea218fbb4b849ab84a7025202 + // Purpur End public void setShouldBurnInDay(boolean shouldBurnInDay) { this.shouldBurnInDay = shouldBurnInDay; } // Paper end - private static enum AttackPhase { + 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 94b92c6e588f871d4b0d86bb8f860a99e473a4ea..e568d014f577ab705645152446156dc04895b3bf 100644 +index de7a74f1e5181373da8dcc639245f35f77f4f09b..53f7659aed2378b36f1923a0208c7f86048eb85b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -96,11 +96,12 @@ public class Zombie extends Monster { +@@ -93,11 +93,12 @@ public class Zombie extends Monster { private int inWaterTime; public int conversionTime; private int lastTick = MinecraftServer.currentTick; // CraftBukkit - add field @@ -295,7 +286,7 @@ index 94b92c6e588f871d4b0d86bb8f860a99e473a4ea..e568d014f577ab705645152446156dc0 } public Zombie(Level world) { -@@ -296,30 +297,7 @@ public class Zombie extends Monster { +@@ -293,30 +294,7 @@ public class Zombie extends Monster { @Override public void aiStep() { @@ -318,7 +309,7 @@ index 94b92c6e588f871d4b0d86bb8f860a99e473a4ea..e568d014f577ab705645152446156dc0 - } - - if (flag) { -- this.setSecondsOnFire(8); +- this.igniteForSeconds(8); - } - } - } @@ -327,7 +318,7 @@ index 94b92c6e588f871d4b0d86bb8f860a99e473a4ea..e568d014f577ab705645152446156dc0 super.aiStep(); } -@@ -357,6 +335,7 @@ public class Zombie extends Monster { +@@ -354,6 +332,7 @@ public class Zombie extends Monster { } @@ -335,7 +326,7 @@ index 94b92c6e588f871d4b0d86bb8f860a99e473a4ea..e568d014f577ab705645152446156dc0 public boolean isSunSensitive() { return this.shouldBurnInDay; // Paper - Add more Zombie API } -@@ -486,7 +465,7 @@ public class Zombie extends Monster { +@@ -477,7 +456,7 @@ public class Zombie extends Monster { nbt.putBoolean("CanBreakDoors", this.canBreakDoors()); nbt.putInt("InWaterTime", this.isInWater() ? this.inWaterTime : -1); nbt.putInt("DrownedConversionTime", this.isUnderWaterConverting() ? this.conversionTime : -1); @@ -344,7 +335,7 @@ index 94b92c6e588f871d4b0d86bb8f860a99e473a4ea..e568d014f577ab705645152446156dc0 } @Override -@@ -500,7 +479,7 @@ public class Zombie extends Monster { +@@ -491,7 +470,7 @@ public class Zombie extends Monster { } // Paper start - Add more Zombie API if (nbt.contains("Paper.ShouldBurnInDay")) { @@ -354,7 +345,7 @@ index 94b92c6e588f871d4b0d86bb8f860a99e473a4ea..e568d014f577ab705645152446156dc0 // Paper end - Add more Zombie API diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index cac42202295b16de0466216f64be4fdf30929a7e..b6ecb58718b7de7ba9c90236f3dc11715652daa9 100644 +index befe3372d5f1550b7bde3b63b5e7aef9035c5379..3c674ecd3b80501047b4593e8872034287defd2e 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -84,6 +84,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -370,10 +361,10 @@ index cac42202295b16de0466216f64be4fdf30929a7e..b6ecb58718b7de7ba9c90236f3dc1171 Preconditions.checkArgument(entity != null, "Unknown entity"); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 17fc6efc988bd74fc50c340eb62f8a7def2167cb..210040aa3f810c03cadf38df9d10da336dffaaa1 100644 +index 4fd98b8c39c3a989e5bf5682b936cade78a8c404..d08f86f2122441d661e7693ad7dcb9854921a767 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -1227,5 +1227,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -1190,5 +1190,15 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { if (slot == null) return; getHandle().broadcastBreakEvent(org.bukkit.craftbukkit.CraftEquipmentSlot.getNMS(slot)); } diff --git a/patches/unapplied-server/0173-Config-MobEffect-by-world.patch b/patches/server/0170-Config-MobEffect-by-world.patch similarity index 81% rename from patches/unapplied-server/0173-Config-MobEffect-by-world.patch rename to patches/server/0170-Config-MobEffect-by-world.patch index 5f4391dd6..3c3567bac 100644 --- a/patches/unapplied-server/0173-Config-MobEffect-by-world.patch +++ b/patches/server/0170-Config-MobEffect-by-world.patch @@ -5,51 +5,51 @@ Subject: [PATCH] Config MobEffect by world diff --git a/src/main/java/net/minecraft/world/effect/HungerMobEffect.java b/src/main/java/net/minecraft/world/effect/HungerMobEffect.java -index 3aad6bd0a1fb7bb3f9b7dab2c10c875864900750..31bd845130e363dd11c225dfd1e9dd896aea8aac 100644 +index a476b56ed98d0a1afc6a396ce29424df78f24ada..5119ff3414fbd9a1ae0a8db0fd15bd3c57c8e148 100644 --- a/src/main/java/net/minecraft/world/effect/HungerMobEffect.java +++ b/src/main/java/net/minecraft/world/effect/HungerMobEffect.java -@@ -15,7 +15,7 @@ class HungerMobEffect extends MobEffect { - if (entity instanceof Player) { - Player entityhuman = (Player) entity; - +@@ -12,7 +12,7 @@ class HungerMobEffect extends MobEffect { + @Override + public boolean applyEffectTick(LivingEntity entity, int amplifier) { + if (entity instanceof Player entityhuman) { - entityhuman.causeFoodExhaustion(0.005F * (float) (amplifier + 1), org.bukkit.event.entity.EntityExhaustionEvent.ExhaustionReason.HUNGER_EFFECT); // CraftBukkit - EntityExhaustionEvent + entityhuman.causeFoodExhaustion(entity.level().purpurConfig.humanHungerExhaustionAmount * (float) (amplifier + 1), org.bukkit.event.entity.EntityExhaustionEvent.ExhaustionReason.HUNGER_EFFECT); // CraftBukkit - EntityExhaustionEvent // Purpur } - } + return true; diff --git a/src/main/java/net/minecraft/world/effect/PoisonMobEffect.java b/src/main/java/net/minecraft/world/effect/PoisonMobEffect.java -index 196204a8661c7750408997e052ec706f44161fc6..393cd9fac5b2fd39e4248d0abd4930e6b2ff73a4 100644 +index 3e7a703632251e0a5234259e3702b58b332e5ef0..f2cc43fbccb5d2ba012b350268065c2cfe014faf 100644 --- a/src/main/java/net/minecraft/world/effect/PoisonMobEffect.java +++ b/src/main/java/net/minecraft/world/effect/PoisonMobEffect.java -@@ -11,8 +11,8 @@ class PoisonMobEffect extends MobEffect { +@@ -10,8 +10,8 @@ class PoisonMobEffect extends MobEffect { + @Override - public void applyEffectTick(LivingEntity entity, int amplifier) { - super.applyEffectTick(entity, amplifier); + public boolean applyEffectTick(LivingEntity entity, int amplifier) { - if (entity.getHealth() > 1.0F) { - entity.hurt(entity.damageSources().poison(), 1.0F); // CraftBukkit - DamageSource.MAGIC -> CraftEventFactory.POISON + if (entity.getHealth() > entity.level().purpurConfig.entityMinimalHealthPoison) { // Purpur + entity.hurt(entity.damageSources().poison(), entity.level().purpurConfig.entityPoisonDegenerationAmount); // CraftBukkit - DamageSource.MAGIC -> CraftEventFactory.POISON // Purpur } - } + return true; diff --git a/src/main/java/net/minecraft/world/effect/RegenerationMobEffect.java b/src/main/java/net/minecraft/world/effect/RegenerationMobEffect.java -index 551b20f86347aeca4824b7a424ad7de7c0ff072e..06bb4ad98aa9ca38b8d423681b1ad4b821f5e47d 100644 +index 4dba3e813e054951cbfbe0b323c1f5d973469cc0..426f61d55b9692cf085368df4e4df6f6997aa420 100644 --- a/src/main/java/net/minecraft/world/effect/RegenerationMobEffect.java +++ b/src/main/java/net/minecraft/world/effect/RegenerationMobEffect.java -@@ -12,7 +12,7 @@ class RegenerationMobEffect extends MobEffect { - public void applyEffectTick(LivingEntity entity, int amplifier) { - super.applyEffectTick(entity, amplifier); +@@ -11,7 +11,7 @@ class RegenerationMobEffect extends MobEffect { + @Override + public boolean applyEffectTick(LivingEntity entity, int amplifier) { if (entity.getHealth() < entity.getMaxHealth()) { - entity.heal(1.0F, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.MAGIC_REGEN); // CraftBukkit + entity.heal(entity.level().purpurConfig.entityHealthRegenAmount, org.bukkit.event.entity.EntityRegainHealthEvent.RegainReason.MAGIC_REGEN); // CraftBukkit // Purpur } - } + return true; diff --git a/src/main/java/net/minecraft/world/effect/SaturationMobEffect.java b/src/main/java/net/minecraft/world/effect/SaturationMobEffect.java -index b994ae09621934df2cdd6a83a7d8ecb44649fb16..c2b812c992db1ac9cd391da902c8d819a6ec2e6d 100644 +index 7b415dca88f50dc472fe4be96e5ef0996f117913..2bb872f29350d15db46b32c686aef78fc1b6fa29 100644 --- a/src/main/java/net/minecraft/world/effect/SaturationMobEffect.java +++ b/src/main/java/net/minecraft/world/effect/SaturationMobEffect.java -@@ -23,7 +23,7 @@ class SaturationMobEffect extends InstantenousMobEffect { +@@ -20,7 +20,7 @@ class SaturationMobEffect extends InstantenousMobEffect { int oldFoodLevel = entityhuman.getFoodData().foodLevel; org.bukkit.event.entity.FoodLevelChangeEvent event = CraftEventFactory.callFoodLevelChangeEvent(entityhuman, amplifier + 1 + oldFoodLevel); if (!event.isCancelled()) { @@ -59,18 +59,18 @@ index b994ae09621934df2cdd6a83a7d8ecb44649fb16..c2b812c992db1ac9cd391da902c8d819 ((CraftPlayer) entityhuman.getBukkitEntity()).sendHealthUpdate(); diff --git a/src/main/java/net/minecraft/world/effect/WitherMobEffect.java b/src/main/java/net/minecraft/world/effect/WitherMobEffect.java -index cc45fd864185a7842c465e26304b36f7c744bb93..434390a6b88eac7bd41ad6b05d223c78571885fb 100644 +index f43bf280999ff3860cc702def50cc62b131eb1bd..66d9e99a351f5fc6cf58be3bee4397d92c932d64 100644 --- a/src/main/java/net/minecraft/world/effect/WitherMobEffect.java +++ b/src/main/java/net/minecraft/world/effect/WitherMobEffect.java -@@ -10,7 +10,7 @@ class WitherMobEffect extends MobEffect { - @Override - public void applyEffectTick(LivingEntity entity, int amplifier) { - super.applyEffectTick(entity, amplifier); -- entity.hurt(entity.damageSources().wither(), 1.0F); -+ entity.hurt(entity.damageSources().wither(), entity.level().purpurConfig.entityWitherDegenerationAmount); // Purpur - } +@@ -9,7 +9,7 @@ class WitherMobEffect extends MobEffect { @Override + public boolean applyEffectTick(LivingEntity entity, int amplifier) { +- entity.hurt(entity.damageSources().wither(), 1.0F); ++ entity.hurt(entity.damageSources().wither(), entity.level().purpurConfig.entityWitherDegenerationAmount); // Purpur + return true; + } + diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 7d89fc67d4f9b58697ff317a0c526be8e612e37a..515c15d6d8f87a1aa677db0cdf7605bbd2421fe0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/unapplied-server/0174-Beacon-Activation-Range-Configurable.patch b/patches/server/0171-Beacon-Activation-Range-Configurable.patch similarity index 93% rename from patches/unapplied-server/0174-Beacon-Activation-Range-Configurable.patch rename to patches/server/0171-Beacon-Activation-Range-Configurable.patch index 62c4d09e4..2100d9037 100644 --- a/patches/unapplied-server/0174-Beacon-Activation-Range-Configurable.patch +++ b/patches/server/0171-Beacon-Activation-Range-Configurable.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Beacon Activation Range Configurable diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java -index 4b81b0180dfc96fc6a88646838a886ca5b5d301b..4a0bca08585fae3620da108f6a4cc07e500e5e03 100644 +index dd1fe8357ccf084880a7f3d4d9e499bde672c787..37ce2605c8803d8d87770bf6a95a83aa975b99fe 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java -@@ -88,6 +88,16 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name +@@ -92,6 +92,16 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name public double getEffectRange() { if (this.effectRange < 0) { diff --git a/patches/unapplied-server/0175-Make-lightning-rod-range-configurable.patch b/patches/server/0172-Make-lightning-rod-range-configurable.patch similarity index 89% rename from patches/unapplied-server/0175-Make-lightning-rod-range-configurable.patch rename to patches/server/0172-Make-lightning-rod-range-configurable.patch index 37655644b..cfde56b4d 100644 --- a/patches/unapplied-server/0175-Make-lightning-rod-range-configurable.patch +++ b/patches/server/0172-Make-lightning-rod-range-configurable.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Make lightning rod range configurable diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 74f9b208b822ef3c53113004b40366e44fdb8201..d3340055cf5c79b1f7430dc64516118bbb707086 100644 +index bcdef2c9bb116409445a4ef65c5e407c1003a55d..1dc58b41d3963c2adc58e79cd6db7e146ac049ad 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1192,7 +1192,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1182,7 +1182,7 @@ public class ServerLevel extends Level implements WorldGenLevel { return holder.is(PoiTypes.LIGHTNING_ROD); }, (blockposition1) -> { return blockposition1.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, blockposition1.getX(), blockposition1.getZ()) - 1; @@ -18,7 +18,7 @@ index 74f9b208b822ef3c53113004b40366e44fdb8201..d3340055cf5c79b1f7430dc64516118b return optional.map((blockposition1) -> { return blockposition1.above(1); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 09c777f83a74501d76f6e15a61d7c433599cf6cc..a268dcb3a0465425bb3c59edfc0f7897ea6626c1 100644 +index 18e8a4a062eb57be001c38dbcddef74b0d5583cd..8b7d38e85f9b094dc6c421464b9385fbc8570d2c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -270,6 +270,7 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0176-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch b/patches/server/0173-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch similarity index 84% rename from patches/unapplied-server/0176-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch rename to patches/server/0173-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch index 07aaf4015..a8dea9b8f 100644 --- a/patches/unapplied-server/0176-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch +++ b/patches/server/0173-Burp-delay-burp-after-eating-food-fills-hunger-bar-c.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Burp delay, burp after eating food fills hunger bar 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 28dca8464a75487566e5d2efac1ec3fe42e6c410..f8b444583cc48a18a68c860ba933c0c1834578be 100644 +index f45794bf2b418f94961681bac8b0f39fbf6578de..b17b76eedf681f06e4db78a7117a6af9e3915c62 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -184,6 +184,7 @@ public abstract class Player extends LivingEntity { +@@ -196,6 +196,7 @@ public abstract class Player extends LivingEntity { public boolean affectsSpawning = true; // Paper - Affects Spawning API public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage public int sixRowEnderchestSlotCount = -1; // Purpur @@ -17,7 +17,7 @@ index 28dca8464a75487566e5d2efac1ec3fe42e6c410..f8b444583cc48a18a68c860ba933c0c1 // CraftBukkit start public boolean fauxSleeping; -@@ -259,6 +260,12 @@ public abstract class Player extends LivingEntity { +@@ -271,6 +272,12 @@ public abstract class Player extends LivingEntity { @Override public void tick() { @@ -30,9 +30,9 @@ index 28dca8464a75487566e5d2efac1ec3fe42e6c410..f8b444583cc48a18a68c860ba933c0c1 this.noPhysics = this.isSpectator(); if (this.isSpectator()) { this.setOnGround(false); -@@ -2322,7 +2329,7 @@ public abstract class Player extends LivingEntity { +@@ -2362,7 +2369,7 @@ public abstract class Player extends LivingEntity { public ItemStack eat(Level world, ItemStack stack) { - this.getFoodData().eat(stack.getItem(), stack); + this.getFoodData().eat(stack); this.awardStat(Stats.ITEM_USED.get(stack.getItem())); - world.playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.PLAYER_BURP, SoundSource.PLAYERS, 0.5F, world.random.nextFloat() * 0.1F + 0.9F); + // world.playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.PLAYER_BURP, SoundSource.PLAYERS, 0.5F, world.random.nextFloat() * 0.1F + 0.9F); // Purpur - moved to tick() @@ -40,20 +40,19 @@ index 28dca8464a75487566e5d2efac1ec3fe42e6c410..f8b444583cc48a18a68c860ba933c0c1 CriteriaTriggers.CONSUME_ITEM.trigger((ServerPlayer) this, stack); } diff --git a/src/main/java/net/minecraft/world/food/FoodData.java b/src/main/java/net/minecraft/world/food/FoodData.java -index c3448707fd8a632b457cc97b35d08a9c6933d5ee..2840c0b16d9b8147703f34bac5a8aa21f82e6e44 100644 +index b89860d451d92ddda64b7e4144542b7fc5fd86f0..08a6cca64ddd49826a0bbddd7711187c73bb4997 100644 --- a/src/main/java/net/minecraft/world/food/FoodData.java +++ b/src/main/java/net/minecraft/world/food/FoodData.java -@@ -33,8 +33,10 @@ public class FoodData { - // CraftBukkit end +@@ -38,7 +38,9 @@ public class FoodData { + } public void eat(int food, float saturationModifier) { + int oldValue = this.foodLevel; // Purpur - this.foodLevel = Math.min(food + this.foodLevel, 20); - this.saturationLevel = Math.min(this.saturationLevel + (float) food * saturationModifier * 2.0F, (float) this.foodLevel); + this.add(food, FoodConstants.saturationByModifier(food, saturationModifier)); + if (this.entityhuman.level().purpurConfig.playerBurpWhenFull && this.foodLevel == 20 && oldValue < 20) this.entityhuman.burpDelay = this.entityhuman.level().purpurConfig.playerBurpDelay; // Purpur } - public void eat(Item item, ItemStack stack) { + public void eat(ItemStack stack) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 991e8491c5bc254eb2ba0cbdcd06cb410d286fbb..ee94f8f165428072ae2f27d2f70a15b6aa3b242a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/unapplied-server/0177-Allow-player-join-full-server-by-permission.patch b/patches/server/0174-Allow-player-join-full-server-by-permission.patch similarity index 90% rename from patches/unapplied-server/0177-Allow-player-join-full-server-by-permission.patch rename to patches/server/0174-Allow-player-join-full-server-by-permission.patch index 3b366ffbe..6b634e729 100644 --- a/patches/unapplied-server/0177-Allow-player-join-full-server-by-permission.patch +++ b/patches/server/0174-Allow-player-join-full-server-by-permission.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow player join full server by permission diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 89ba5789c6d6e4fe8360a854f0a6123036a5a792..1b8b0bafce3352bd65d570ac7cb4ea3acdfe991d 100644 +index f2a7eba2618ea9c1acaf93c0ef8f6f5f737de6fe..d20a7a79e27db1092ff78910df5d45982971cc3e 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -755,7 +755,7 @@ public abstract class PlayerList { +@@ -754,7 +754,7 @@ public abstract class PlayerList { event.disallow(PlayerLoginEvent.Result.KICK_BANNED, io.papermc.paper.adventure.PaperAdventure.asAdventure(ichatmutablecomponent)); // Paper - Adventure } else { // return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameprofile) ? IChatBaseComponent.translatable("multiplayer.disconnect.server_full") : null; diff --git a/patches/unapplied-server/0178-Add-portal-permission-bypass.patch b/patches/server/0175-Add-portal-permission-bypass.patch similarity index 83% rename from patches/unapplied-server/0178-Add-portal-permission-bypass.patch rename to patches/server/0175-Add-portal-permission-bypass.patch index ef28c017e..e3910c754 100644 --- a/patches/unapplied-server/0178-Add-portal-permission-bypass.patch +++ b/patches/server/0175-Add-portal-permission-bypass.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add portal permission bypass 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 f8b444583cc48a18a68c860ba933c0c1834578be..992ac6cfba700839259b973fa1eabb5ce6c301af 100644 +index b17b76eedf681f06e4db78a7117a6af9e3915c62..df33ad8ef6394042c2b617606c7c792fe3801632 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -185,6 +185,7 @@ public abstract class Player extends LivingEntity { +@@ -197,6 +197,7 @@ public abstract class Player extends LivingEntity { public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper - flying fall damage public int sixRowEnderchestSlotCount = -1; // Purpur public int burpDelay = 0; // Purpur @@ -16,7 +16,7 @@ index f8b444583cc48a18a68c860ba933c0c1834578be..992ac6cfba700839259b973fa1eabb5c // CraftBukkit start public boolean fauxSleeping; -@@ -476,7 +477,7 @@ public abstract class Player extends LivingEntity { +@@ -488,7 +489,7 @@ public abstract class Player extends LivingEntity { @Override public int getPortalWaitTime() { @@ -26,10 +26,10 @@ index f8b444583cc48a18a68c860ba933c0c1834578be..992ac6cfba700839259b973fa1eabb5c @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -index 7984365c8290ac9e526a413b56e1c8c0841e330c..a8b30fa294e088c0b604a5d8ac5667e32ed1b287 100644 +index 41f3cdec7deabf34358b8087df77169f85a5b919..90265b6f2acd43713b61e277799dd31311b6b7e2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -@@ -267,6 +267,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { +@@ -265,6 +265,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { @Override public void recalculatePermissions() { this.perm.recalculatePermissions(); diff --git a/patches/unapplied-server/0179-Shulker-spawn-from-bullet-options.patch b/patches/server/0176-Shulker-spawn-from-bullet-options.patch similarity index 93% rename from patches/unapplied-server/0179-Shulker-spawn-from-bullet-options.patch rename to patches/server/0176-Shulker-spawn-from-bullet-options.patch index 9b83cc979..8aba1f071 100644 --- a/patches/unapplied-server/0179-Shulker-spawn-from-bullet-options.patch +++ b/patches/server/0176-Shulker-spawn-from-bullet-options.patch @@ -13,10 +13,10 @@ Subject: [PATCH] Shulker spawn from bullet options (7 - 1) / 5.0 = 1.2 1.0 - 1.2 = -0.2 0% (6 other shulkers) diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index 31284660a9718503a1ce474c56d993de3126a1ea..df944e733ca589d407af3709e0ff025f568600b7 100644 +index 5b4ad4f64488ca5a21312caa3d13318f429401ea..73063abbd051f1d044a8b2c0530cc8d2a96a6331 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -503,12 +503,21 @@ public class Shulker extends AbstractGolem implements VariantHolder getVariant() { @@ -53,10 +53,10 @@ index 31284660a9718503a1ce474c56d993de3126a1ea..df944e733ca589d407af3709e0ff025f @Nullable diff --git a/src/main/java/net/minecraft/world/item/DyeColor.java b/src/main/java/net/minecraft/world/item/DyeColor.java -index c7e36bd598090b7d9f818ac1f6b39e13e64e8bf7..e2a960e2dc5414c731feeb5444792d6b26487c9f 100644 +index 2202798612cad53aff28c499b8909a7292a37ad5..5ed2b7d15686fc9aa6dc7c03c337433cb3ee2cbd 100644 --- a/src/main/java/net/minecraft/world/item/DyeColor.java +++ b/src/main/java/net/minecraft/world/item/DyeColor.java -@@ -101,4 +101,10 @@ public enum DyeColor implements StringRepresentable { +@@ -105,4 +105,10 @@ public enum DyeColor implements StringRepresentable { public String getSerializedName() { return this.name; } diff --git a/patches/unapplied-server/0180-Eating-glow-berries-adds-glow-effect.patch b/patches/server/0177-Eating-glow-berries-adds-glow-effect.patch similarity index 92% rename from patches/unapplied-server/0180-Eating-glow-berries-adds-glow-effect.patch rename to patches/server/0177-Eating-glow-berries-adds-glow-effect.patch index ab0b85ffa..7b11d8d14 100644 --- a/patches/unapplied-server/0180-Eating-glow-berries-adds-glow-effect.patch +++ b/patches/server/0177-Eating-glow-berries-adds-glow-effect.patch @@ -5,18 +5,18 @@ Subject: [PATCH] Eating glow berries adds glow effect diff --git a/src/main/java/net/minecraft/world/item/Items.java b/src/main/java/net/minecraft/world/item/Items.java -index c157e7f6fa28f713fcfb699daa329abed0b32cd5..bb2103a488964f25335393fa91e8ae5749eca333 100644 +index 6467358f5fdf4cd4f7c1e2cc65c834a9da39596a..42b322879629afb2d2fc64a215f010f5d5ce9e02 100644 --- a/src/main/java/net/minecraft/world/item/Items.java +++ b/src/main/java/net/minecraft/world/item/Items.java -@@ -1535,7 +1535,7 @@ public class Items { +@@ -1909,7 +1909,7 @@ public class Items { "sweet_berries", new ItemNameBlockItem(Blocks.SWEET_BERRY_BUSH, new Item.Properties().food(Foods.SWEET_BERRIES)) ); public static final Item GLOW_BERRIES = registerItem( - "glow_berries", new ItemNameBlockItem(Blocks.CAVE_VINES, new Item.Properties().food(Foods.GLOW_BERRIES)) + "glow_berries", new org.purpurmc.purpur.item.GlowBerryItem(Blocks.CAVE_VINES, new Item.Properties().food(Foods.GLOW_BERRIES)) // Purpur ); - public static final Item CAMPFIRE = registerBlock(Blocks.CAMPFIRE); - public static final Item SOUL_CAMPFIRE = registerBlock(Blocks.SOUL_CAMPFIRE); + public static final Item CAMPFIRE = registerBlock(Blocks.CAMPFIRE, settings -> settings.component(DataComponents.CONTAINER, ItemContainerContents.EMPTY)); + public static final Item SOUL_CAMPFIRE = registerBlock( diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index cc612f8328abfa27d784181c5aebbcd9e0b10c05..b21d288f62f473cd9d1057d3d2a452f16b0291d0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/unapplied-server/0181-Option-to-make-drowned-break-doors.patch b/patches/server/0178-Option-to-make-drowned-break-doors.patch similarity index 93% rename from patches/unapplied-server/0181-Option-to-make-drowned-break-doors.patch rename to patches/server/0178-Option-to-make-drowned-break-doors.patch index 335400a6f..e15f078e0 100644 --- a/patches/unapplied-server/0181-Option-to-make-drowned-break-doors.patch +++ b/patches/server/0178-Option-to-make-drowned-break-doors.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Option to make drowned break doors 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 8850d8fc54d7025d323bc273a87a609baacea174..13427d23f1e614c0d83e9ccd68944ea4e1993c73 100644 +index f037d50f26f7532f11a71790448de7a71644b6ca..2547ac49721e2840da2845076d5e62a1465a4ea3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -29,6 +29,7 @@ import net.minecraft.world.entity.ai.goal.MoveToBlockGoal; @@ -16,7 +16,7 @@ index 8850d8fc54d7025d323bc273a87a609baacea174..13427d23f1e614c0d83e9ccd68944ea4 import net.minecraft.world.entity.ai.goal.target.HurtByTargetGoal; import net.minecraft.world.entity.ai.goal.target.NearestAttackableTargetGoal; import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; -@@ -122,6 +123,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -125,6 +126,7 @@ public class Drowned extends Zombie implements RangedAttackMob { this.goalSelector.addGoal(2, new Drowned.DrownedAttackGoal(this, 1.0D, false)); this.goalSelector.addGoal(5, new Drowned.DrownedGoToBeachGoal(this, 1.0D)); this.goalSelector.addGoal(6, new Drowned.DrownedSwimUpGoal(this, 1.0D, this.level().getSeaLevel())); @@ -24,7 +24,7 @@ index 8850d8fc54d7025d323bc273a87a609baacea174..13427d23f1e614c0d83e9ccd68944ea4 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)); -@@ -171,7 +173,7 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -174,7 +176,7 @@ public class Drowned extends Zombie implements RangedAttackMob { @Override public boolean supportsBreakDoorGoal() { diff --git a/patches/unapplied-server/0182-Configurable-hunger-starvation-damage.patch b/patches/server/0179-Configurable-hunger-starvation-damage.patch similarity index 93% rename from patches/unapplied-server/0182-Configurable-hunger-starvation-damage.patch rename to patches/server/0179-Configurable-hunger-starvation-damage.patch index 3108d3c43..df13b853c 100644 --- a/patches/unapplied-server/0182-Configurable-hunger-starvation-damage.patch +++ b/patches/server/0179-Configurable-hunger-starvation-damage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable hunger starvation damage diff --git a/src/main/java/net/minecraft/world/food/FoodData.java b/src/main/java/net/minecraft/world/food/FoodData.java -index 2840c0b16d9b8147703f34bac5a8aa21f82e6e44..e8079d126e6c0cf0b15c01afb6498922ee05964c 100644 +index 08a6cca64ddd49826a0bbddd7711187c73bb4997..dd72d6a79139ff33f26a32b71283ce0b8d084ecc 100644 --- a/src/main/java/net/minecraft/world/food/FoodData.java +++ b/src/main/java/net/minecraft/world/food/FoodData.java -@@ -102,7 +102,7 @@ public class FoodData { +@@ -107,7 +107,7 @@ public class FoodData { ++this.tickTimer; if (this.tickTimer >= this.starvationRate) { // CraftBukkit - add regen rate manipulation if (player.getHealth() > 10.0F || enumdifficulty == Difficulty.HARD || player.getHealth() > 1.0F && enumdifficulty == Difficulty.NORMAL) { diff --git a/patches/unapplied-server/0183-Enhance-SysoutCatcher.patch b/patches/server/0180-Enhance-SysoutCatcher.patch similarity index 100% rename from patches/unapplied-server/0183-Enhance-SysoutCatcher.patch rename to patches/server/0180-Enhance-SysoutCatcher.patch diff --git a/patches/unapplied-server/0184-Add-uptime-command.patch b/patches/server/0181-Add-uptime-command.patch similarity index 95% rename from patches/unapplied-server/0184-Add-uptime-command.patch rename to patches/server/0181-Add-uptime-command.patch index 7b2b009f4..6c0c3dfa7 100644 --- a/patches/unapplied-server/0184-Add-uptime-command.patch +++ b/patches/server/0181-Add-uptime-command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add uptime command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 9c335df92b0a6c7705c9def89ba5c320d2c8ed03..c2b8a653b01aa3e0856afa3e96555f5e8f0e81bd 100644 +index d0a81669ac20dc86e888aa34e246c251b8886ba2..26c9254cef922a78deac3053f93c60037f19d31f 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -253,6 +253,7 @@ public class Commands { +@@ -255,6 +255,7 @@ public class Commands { org.purpurmc.purpur.command.CreditsCommand.register(this.dispatcher); // Purpur org.purpurmc.purpur.command.DemoCommand.register(this.dispatcher); // Purpur org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur @@ -17,10 +17,10 @@ index 9c335df92b0a6c7705c9def89ba5c320d2c8ed03..c2b8a653b01aa3e0856afa3e96555f5e } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 9d6424c79b10e76685de55a9d0d05653ac3e3c5f..0e9cf9f9ad81363cdeacd3da3a776aaad39045f9 100644 +index b68db217c8765fa029244bf2701757bd31a5db2b..6d84eb68e3160f772d6832513df2bc4db87b594e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -293,6 +293,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop p.broadcastBreakEvent(context.getHand())); + itemStack.hurtAndBreak(1, player, LivingEntity.getSlotForHand(context.getHand())); } - return InteractionResult.sidedSuccess(level.isClientSide); @@ -80,10 +80,10 @@ index 4f8689e8cbc8b6b9f44168126b95cc864a383c9e..b05bb4caf57965b82d841f52d6ea2798 return optional3; } else { diff --git a/src/main/java/net/minecraft/world/item/HoeItem.java b/src/main/java/net/minecraft/world/item/HoeItem.java -index 704cbc775c9f7663c57c431e8a7651d7684ccc34..26a73f3982db764c4793326b41a541dffc416559 100644 +index 06497b5141e611cc7a1b6030a7b9c54b5c4eda06..28df1b3230762e52b5458ac93a85c9a5d41eb6a6 100644 --- a/src/main/java/net/minecraft/world/item/HoeItem.java +++ b/src/main/java/net/minecraft/world/item/HoeItem.java -@@ -45,15 +45,23 @@ public class HoeItem extends DiggerItem { +@@ -46,15 +46,23 @@ public class HoeItem extends DiggerItem { public InteractionResult useOn(UseOnContext context) { Level level = context.getLevel(); BlockPos blockPos = context.getClickedPos(); @@ -114,7 +114,7 @@ index 704cbc775c9f7663c57c431e8a7651d7684ccc34..26a73f3982db764c4793326b41a541df if (!level.isClientSide) { consumer.accept(context); if (player != null) { -@@ -61,7 +69,7 @@ public class HoeItem extends DiggerItem { +@@ -62,7 +70,7 @@ public class HoeItem extends DiggerItem { } } @@ -124,10 +124,10 @@ index 704cbc775c9f7663c57c431e8a7651d7684ccc34..26a73f3982db764c4793326b41a541df return InteractionResult.PASS; } diff --git a/src/main/java/net/minecraft/world/item/ShovelItem.java b/src/main/java/net/minecraft/world/item/ShovelItem.java -index 9aba0211f37501bbd19b583d22fa83eae32390d9..f44e28bf44b9d39267d21eaf6a025b5f28f3cd72 100644 +index 24f6a158e4759aac3be8da4cf5e0d40bd295355b..6b7dbb570f8a698c87c6bce992d84d87b55176e6 100644 --- a/src/main/java/net/minecraft/world/item/ShovelItem.java +++ b/src/main/java/net/minecraft/world/item/ShovelItem.java -@@ -46,9 +46,12 @@ public class ShovelItem extends DiggerItem { +@@ -47,9 +47,12 @@ public class ShovelItem extends DiggerItem { BlockState blockState2 = FLATTENABLES.get(blockState.getBlock()); BlockState blockState3 = null; Runnable afterAction = null; // Paper @@ -143,7 +143,7 @@ index 9aba0211f37501bbd19b583d22fa83eae32390d9..f44e28bf44b9d39267d21eaf6a025b5f } else if (blockState.getBlock() instanceof CampfireBlock && blockState.getValue(CampfireBlock.LIT)) { afterAction = () -> { // Paper if (!level.isClientSide()) { -@@ -75,7 +78,7 @@ public class ShovelItem extends DiggerItem { +@@ -76,7 +79,7 @@ public class ShovelItem extends DiggerItem { } } diff --git a/patches/unapplied-server/0186-Store-placer-on-Block-when-placed.patch b/patches/server/0183-Store-placer-on-Block-when-placed.patch similarity index 80% rename from patches/unapplied-server/0186-Store-placer-on-Block-when-placed.patch rename to patches/server/0183-Store-placer-on-Block-when-placed.patch index c16d1d773..c6f5d3a96 100644 --- a/patches/unapplied-server/0186-Store-placer-on-Block-when-placed.patch +++ b/patches/server/0183-Store-placer-on-Block-when-placed.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Store placer on Block when placed diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index b4b1ffe875a18bcb72b7f1d87f6ddbea436bbb66..829d84f48c7149ec1ba0b71b0f43ef19fed99380 100644 +index 7e6c231a50c7fd2297e1ab404a743e1aece9913b..0bc6edf82d77ae88d64bd6ca0a5294c2143f2f5c 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -454,6 +454,7 @@ public final class ItemStack { +@@ -475,6 +475,7 @@ public final class ItemStack implements DataComponentHolder { world.preventPoiUpdated = true; // CraftBukkit - SPIGOT-5710 for (BlockState blockstate : blocks) { blockstate.update(true, false); @@ -16,19 +16,19 @@ index b4b1ffe875a18bcb72b7f1d87f6ddbea436bbb66..829d84f48c7149ec1ba0b71b0f43ef19 } world.preventPoiUpdated = false; -@@ -485,6 +486,7 @@ public final class ItemStack { +@@ -506,6 +507,7 @@ public final class ItemStack implements DataComponentHolder { if (!(block.getBlock() instanceof BaseEntityBlock)) { // Containers get placed automatically - block.getBlock().onPlace(block, world, newblockposition, oldBlock, true, context); // Paper - pass context + block.onPlace(world, newblockposition, oldBlock, true, context); // Paper - pass context } + block.getBlock().forgetPlacer(); // Purpur world.notifyAndUpdatePhysics(newblockposition, null, oldBlock, block, world.getBlockState(newblockposition), updateFlag, 512); // send null chunk as chunk.k() returns false by this point } diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index 22036ed3ea0629bc12981a8d91a03e55cc2117d6..3dc71c4ee8fc9846e49e659c6b5e7b55ea084f14 100644 +index cf8b8c8efd1c9c81eb5f02d75bd75875eb66771f..6f7e90d406b088fee0eb254f8042bd404d8f36fa 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java -@@ -446,7 +446,17 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -438,7 +438,17 @@ public class Block extends BlockBehaviour implements ItemLike { } // Paper - fix drops not preventing stats/food exhaustion } diff --git a/patches/unapplied-server/0187-Summoner-API.patch b/patches/server/0184-Summoner-API.patch similarity index 89% rename from patches/unapplied-server/0187-Summoner-API.patch rename to patches/server/0184-Summoner-API.patch index 42edefcb0..a269522e4 100644 --- a/patches/unapplied-server/0187-Summoner-API.patch +++ b/patches/server/0184-Summoner-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Summoner API diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index 75a44fdb1228233ac2abe1d33bde8d978a8a994b..02506902ca7e6f4e4c0fea47499cb8766e33960f 100644 +index fa81b12fc38a20b8ec39155259fb75c18ff9f0ae..8b08476457a6ead1a3c3e2ab35d08a8e0625c43e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -@@ -60,6 +60,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -56,6 +56,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { private int remainingPersistentAngerTime; @Nullable private UUID persistentAngerTarget; @@ -16,7 +16,7 @@ index 75a44fdb1228233ac2abe1d33bde8d978a8a994b..02506902ca7e6f4e4c0fea47499cb876 public IronGolem(EntityType type, Level world) { super(type, world); -@@ -93,6 +94,15 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -88,6 +89,15 @@ public class IronGolem extends AbstractGolem implements NeutralMob { return this.level().purpurConfig.ironGolemTakeDamageFromWater; } @@ -32,7 +32,7 @@ index 75a44fdb1228233ac2abe1d33bde8d978a8a994b..02506902ca7e6f4e4c0fea47499cb876 @Override protected void registerGoals() { if (level().purpurConfig.ironGolemCanSwim) this.goalSelector.addGoal(0, new net.minecraft.world.entity.ai.goal.FloatGoal(this)); // Purpur -@@ -170,6 +180,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -165,6 +175,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); nbt.putBoolean("PlayerCreated", this.isPlayerCreated()); @@ -40,7 +40,7 @@ index 75a44fdb1228233ac2abe1d33bde8d978a8a994b..02506902ca7e6f4e4c0fea47499cb876 this.addPersistentAngerSaveData(nbt); } -@@ -177,6 +188,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -172,6 +183,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); this.setPlayerCreated(nbt.getBoolean("PlayerCreated")); @@ -49,18 +49,18 @@ index 75a44fdb1228233ac2abe1d33bde8d978a8a994b..02506902ca7e6f4e4c0fea47499cb876 } diff --git a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -index d46ab4d56e4c34b4dbe7a3df0785ab8745fcd3b9..81a88d510d7f52ca6a1c9cca991c22c3bdaf6b0d 100644 +index 9f20eae7449c670b913cc3bbe1a89254a1d8cde2..8f2348a7fe830a85985ce2b19cb2a9159bca711f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/SnowGolem.java -@@ -49,6 +49,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -47,6 +47,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM + private static final EntityDataAccessor DATA_PUMPKIN_ID = SynchedEntityData.defineId(SnowGolem.class, EntityDataSerializers.BYTE); private static final byte PUMPKIN_FLAG = 16; - private static final float EYE_HEIGHT = 1.7F; + @Nullable private java.util.UUID summoner; // Purpur public SnowGolem(EntityType type, Level world) { super(type, world); -@@ -76,6 +77,15 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -74,6 +75,15 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.snowGolemMaxHealth); } @@ -76,7 +76,7 @@ index d46ab4d56e4c34b4dbe7a3df0785ab8745fcd3b9..81a88d510d7f52ca6a1c9cca991c22c3 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur -@@ -103,6 +113,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -101,6 +111,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); nbt.putBoolean("Pumpkin", this.hasPumpkin()); @@ -84,7 +84,7 @@ index d46ab4d56e4c34b4dbe7a3df0785ab8745fcd3b9..81a88d510d7f52ca6a1c9cca991c22c3 } @Override -@@ -111,6 +122,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM +@@ -109,6 +120,7 @@ public class SnowGolem extends AbstractGolem implements Shearable, RangedAttackM if (nbt.contains("Pumpkin")) { this.setPumpkin(nbt.getBoolean("Pumpkin")); } @@ -93,18 +93,18 @@ index d46ab4d56e4c34b4dbe7a3df0785ab8745fcd3b9..81a88d510d7f52ca6a1c9cca991c22c3 } 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 06f4bbbbdf3a3c49035df9edc258e6bda87b53fc..b5ce9576ce7e91204f981c86fe70abb4cd0f267f 100644 +index 6752a0039fac041e9bdd25327cdf20d3f1922bd6..01d193d2584b62897687bd088fb590de8a4ab279 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 -@@ -85,6 +85,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob - return entityliving.getMobType() != MobType.UNDEAD && entityliving.attackable(); +@@ -88,6 +88,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob + return !entityliving.getType().is(EntityTypeTags.WITHER_FRIENDS) && entityliving.attackable(); }; private static final TargetingConditions TARGETING_CONDITIONS = TargetingConditions.forCombat().range(20.0D).selector(WitherBoss.LIVING_ENTITY_SELECTOR); + @Nullable private java.util.UUID summoner; // Purpur private int shootCooldown = 0; // Purpur // Paper start private boolean canPortal = false; -@@ -123,6 +124,15 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -126,6 +127,15 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob return this.level().purpurConfig.witherTakeDamageFromWater; } @@ -120,7 +120,7 @@ index 06f4bbbbdf3a3c49035df9edc258e6bda87b53fc..b5ce9576ce7e91204f981c86fe70abb4 @Override protected PathNavigation createNavigation(Level world) { FlyingPathNavigation navigationflying = new FlyingPathNavigation(this, world); -@@ -257,6 +267,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -260,6 +270,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); nbt.putInt("Invul", this.getInvulnerableTicks()); @@ -128,7 +128,7 @@ index 06f4bbbbdf3a3c49035df9edc258e6bda87b53fc..b5ce9576ce7e91204f981c86fe70abb4 } @Override -@@ -266,6 +277,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -269,6 +280,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob if (this.hasCustomName()) { this.bossEvent.setName(this.getDisplayName()); } @@ -137,7 +137,7 @@ index 06f4bbbbdf3a3c49035df9edc258e6bda87b53fc..b5ce9576ce7e91204f981c86fe70abb4 } diff --git a/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java b/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java -index cdd7ab3fe589d089c0c03508721f46f6c136fc8a..6f148028c0fe503e9f6b327596d0954ce9e53269 100644 +index 655f51902e5d24643d41c4ec981743543c0890a5..e6a299eeda5d18274fa3b1fb542b217a074c1d83 100644 --- a/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CarvedPumpkinBlock.java @@ -71,7 +71,7 @@ public class CarvedPumpkinBlock extends HorizontalDirectionalBlock { @@ -176,10 +176,10 @@ index cdd7ab3fe589d089c0c03508721f46f6c136fc8a..6f148028c0fe503e9f6b327596d0954c entity.moveTo((double) pos.getX() + 0.5D, (double) pos.getY() + 0.05D, (double) pos.getZ() + 0.5D, 0.0F, 0.0F); // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/level/block/WitherSkullBlock.java b/src/main/java/net/minecraft/world/level/block/WitherSkullBlock.java -index fb180f0bcd20e51d41cfc924029c0b23d3d26258..688d161cd6725f494366c23668ebd6ff709b1587 100644 +index bbf59b2577812e74ffd45f694b83a42e043273c0..5cb06959aeaceeb98cfee34b1df804e6642f305f 100644 --- a/src/main/java/net/minecraft/world/level/block/WitherSkullBlock.java +++ b/src/main/java/net/minecraft/world/level/block/WitherSkullBlock.java -@@ -76,6 +76,7 @@ public class WitherSkullBlock extends SkullBlock { +@@ -79,6 +79,7 @@ public class WitherSkullBlock extends SkullBlock { entitywither.moveTo((double) blockposition1.getX() + 0.5D, (double) blockposition1.getY() + 0.55D, (double) blockposition1.getZ() + 0.5D, shapedetector_shapedetectorcollection.getForwards().getAxis() == Direction.Axis.X ? 0.0F : 90.0F, 0.0F); entitywither.yBodyRot = shapedetector_shapedetectorcollection.getForwards().getAxis() == Direction.Axis.X ? 0.0F : 90.0F; entitywither.makeInvulnerable(); diff --git a/patches/unapplied-server/0188-Customizable-sleeping-actionbar-messages.patch b/patches/server/0185-Customizable-sleeping-actionbar-messages.patch similarity index 93% rename from patches/unapplied-server/0188-Customizable-sleeping-actionbar-messages.patch rename to patches/server/0185-Customizable-sleeping-actionbar-messages.patch index 96ed98310..90293642d 100644 --- a/patches/unapplied-server/0188-Customizable-sleeping-actionbar-messages.patch +++ b/patches/server/0185-Customizable-sleeping-actionbar-messages.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Customizable sleeping actionbar messages diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index d3340055cf5c79b1f7430dc64516118bbb707086..4a08c804c3e31a80ee9b663a44fd60142709c9c6 100644 +index 1dc58b41d3963c2adc58e79cd6db7e146ac049ad..83ec2e31d81d6209953252a3780552c3cf110c68 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1241,11 +1241,27 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1231,11 +1231,27 @@ public class ServerLevel extends Level implements WorldGenLevel { if (this.canSleepThroughNights()) { if (!this.getServer().isSingleplayer() || this.getServer().isPublished()) { int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); @@ -38,10 +38,10 @@ index d3340055cf5c79b1f7430dc64516118bbb707086..4a08c804c3e31a80ee9b663a44fd6014 } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 13f39b219615b8091284f4ac56d76a505956a556..65e549ebad6f89640000f27356f1de434c5925c8 100644 +index 397448063fb770f736f9c8bb7061852d3212484d..15dc4691ce604fd7f32b635590b32f4afec8bf2a 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1469,7 +1469,19 @@ public class ServerPlayer extends Player { +@@ -1546,7 +1546,19 @@ public class ServerPlayer extends Player { }); if (!this.serverLevel().canSleepThroughNights()) { @@ -63,7 +63,7 @@ index 13f39b219615b8091284f4ac56d76a505956a556..65e549ebad6f89640000f27356f1de43 ((ServerLevel) this.level()).updateSleepingPlayerList(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index e63f576ccd93358395a2d1dc84ed4734611f9474..6aa225252d1026979fe88c273652e3d9ebdeb5f3 100644 +index 1419b0a639590bb8d34fb12410f5284548723e0c..45ce203e295d10d522851caefd049995d2d552a2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -186,6 +186,9 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0189-option-to-disable-shulker-box-items-from-dropping-co.patch b/patches/server/0186-option-to-disable-shulker-box-items-from-dropping-co.patch similarity index 67% rename from patches/unapplied-server/0189-option-to-disable-shulker-box-items-from-dropping-co.patch rename to patches/server/0186-option-to-disable-shulker-box-items-from-dropping-co.patch index c2eac34ec..3e715229e 100644 --- a/patches/unapplied-server/0189-option-to-disable-shulker-box-items-from-dropping-co.patch +++ b/patches/server/0186-option-to-disable-shulker-box-items-from-dropping-co.patch @@ -6,18 +6,25 @@ Subject: [PATCH] option to disable shulker box items from dropping contents diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java -index 8d2c0accadaf0c5d28e7db6e62a05f6c619cf02f..b1779e3cf4b01afc15aa367cfadb999366e46d19 100644 +index 96fb69ec6db2e7c8c728435f0c537b076259b2fb..f713734efaad4312be270d808e79f0e562c84466 100644 --- a/src/main/java/net/minecraft/world/item/BlockItem.java +++ b/src/main/java/net/minecraft/world/item/BlockItem.java -@@ -287,7 +287,7 @@ public class BlockItem extends Item { +@@ -28,6 +28,7 @@ import net.minecraft.world.level.block.ShulkerBoxBlock; + import net.minecraft.world.level.block.SoundType; + import net.minecraft.world.level.block.entity.BlockEntity; + import net.minecraft.world.level.block.entity.BlockEntityType; ++import net.minecraft.world.level.block.entity.ShulkerBoxBlockEntity; + import net.minecraft.world.level.block.state.BlockState; + import net.minecraft.world.level.gameevent.GameEvent; + import net.minecraft.world.phys.shapes.CollisionContext; +@@ -256,6 +257,7 @@ public class BlockItem extends Item { @Override public void onDestroyed(ItemEntity entity) { -- if (this.block instanceof ShulkerBoxBlock) { -+ if (this.block instanceof ShulkerBoxBlock && entity.level().purpurConfig.shulkerBoxItemDropContentsWhenDestroyed) { - ItemStack itemstack = entity.getItem(); - CompoundTag nbttagcompound = BlockItem.getBlockEntityData(itemstack); ++ //entity.level().purpurConfig.shulkerBoxItemDropContentsWhenDestroyed // Purpur - TODO: shulkerBoxItemDropContentsWhenDestroyed + ItemContainerContents itemcontainercontents = (ItemContainerContents) entity.getItem().set(DataComponents.CONTAINER, ItemContainerContents.EMPTY); + if (itemcontainercontents != null) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index 2335a56bb46fd9ece82547544e8cac883562eba2..6be3b83976cfd92f984f2ce9479d6f0f5d883e17 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/unapplied-server/0190-Big-dripleaf-tilt-delay.patch b/patches/server/0187-Big-dripleaf-tilt-delay.patch similarity index 94% rename from patches/unapplied-server/0190-Big-dripleaf-tilt-delay.patch rename to patches/server/0187-Big-dripleaf-tilt-delay.patch index c861c33d7..e9b333cea 100644 --- a/patches/unapplied-server/0190-Big-dripleaf-tilt-delay.patch +++ b/patches/server/0187-Big-dripleaf-tilt-delay.patch @@ -11,10 +11,10 @@ PARTIAL: big_dripleaf with PARTIAL tilt will change to FULL tilt after 10 ticks UNSTABLE: big_dripleaf with FULL tilt will change back to no tilt after 100 ticks diff --git a/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java b/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java -index 0d92bd6f1e4f3470a62f573add3490220e60ef7a..2e89b22de852f43f2694be52043799f07f14800b 100644 +index 8240c32d676a88aa23dcd052ee0136767e54fb0d..372c4ab9d390d5afd98947f21c79aae06b15064d 100644 --- a/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java -@@ -243,7 +243,7 @@ public class BigDripleafBlock extends HorizontalDirectionalBlock implements Bone +@@ -244,7 +244,7 @@ public class BigDripleafBlock extends HorizontalDirectionalBlock implements Bone BigDripleafBlock.playTiltSound(world, blockposition, soundeffect); } diff --git a/patches/unapplied-server/0191-Player-ridable-in-water-option.patch b/patches/server/0188-Player-ridable-in-water-option.patch similarity index 90% rename from patches/unapplied-server/0191-Player-ridable-in-water-option.patch rename to patches/server/0188-Player-ridable-in-water-option.patch index 093873eeb..3c2ef239a 100644 --- a/patches/unapplied-server/0191-Player-ridable-in-water-option.patch +++ b/patches/server/0188-Player-ridable-in-water-option.patch @@ -5,17 +5,19 @@ Subject: [PATCH] Player ridable in water option diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 992ac6cfba700839259b973fa1eabb5ce6c301af..e8000f236d3ec0476ec782f08e159eea6c99476a 100644 +index df33ad8ef6394042c2b617606c7c792fe3801632..44ef706008a1477d2073c29f2c9d016bf91e15a6 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -2050,6 +2050,11 @@ public abstract class Player extends LivingEntity { - return this.inventory.armor; +@@ -2073,6 +2073,13 @@ public abstract class Player extends LivingEntity { + return slot != EquipmentSlot.BODY; } ++ // Purpur start + @Override + public boolean dismountsUnderwater() { + return !level().purpurConfig.playerRidableInWater; + } ++ // Purpur end + public boolean setEntityOnShoulder(CompoundTag entityNbt) { if (!this.isPassenger() && this.onGround() && !this.isInWater() && !this.isInPowderSnow) { diff --git a/patches/unapplied-server/0192-Config-to-disable-Enderman-teleport-on-projectile-hi.patch b/patches/server/0189-Config-to-disable-Enderman-teleport-on-projectile-hi.patch similarity index 94% rename from patches/unapplied-server/0192-Config-to-disable-Enderman-teleport-on-projectile-hi.patch rename to patches/server/0189-Config-to-disable-Enderman-teleport-on-projectile-hi.patch index 17d5b4fad..a41765899 100644 --- a/patches/unapplied-server/0192-Config-to-disable-Enderman-teleport-on-projectile-hi.patch +++ b/patches/server/0189-Config-to-disable-Enderman-teleport-on-projectile-hi.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to disable Enderman teleport on projectile hit diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 7621237df388ee10ef962b0c4e795c9de88762d0..19d7142d62339d01ce2d3936a95c829666cd4e27 100644 +index b361c6b4ca17b9d466555037235a5660caa5c9bd..21a570d09ad3e19e6c709ff1152db7d204648122 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -455,6 +455,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -434,6 +434,7 @@ public class EnderMan extends Monster implements NeutralMob { } else { flag1 = flag && this.hurtWithCleanWater(source, (ThrownPotion) source.getDirectEntity(), amount); diff --git a/patches/unapplied-server/0193-Add-compass-command.patch b/patches/server/0190-Add-compass-command.patch similarity index 94% rename from patches/unapplied-server/0193-Add-compass-command.patch rename to patches/server/0190-Add-compass-command.patch index 1a1e8fe53..3fd9933eb 100644 --- a/patches/unapplied-server/0193-Add-compass-command.patch +++ b/patches/server/0190-Add-compass-command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add compass command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index c2b8a653b01aa3e0856afa3e96555f5e8f0e81bd..0026235782aeb5e663faa3aaf11040635cd12204 100644 +index 26c9254cef922a78deac3053f93c60037f19d31f..67ec90a2a05269a5912b3c8e64d6d4162a8c6ca2 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -255,6 +255,7 @@ public class Commands { +@@ -257,6 +257,7 @@ public class Commands { org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur org.purpurmc.purpur.command.UptimeCommand.register(this.dispatcher); // Purpur org.purpurmc.purpur.command.TPSBarCommand.register(this.dispatcher); // Purpur @@ -17,10 +17,10 @@ index c2b8a653b01aa3e0856afa3e96555f5e8f0e81bd..0026235782aeb5e663faa3aaf1104063 if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 65e549ebad6f89640000f27356f1de434c5925c8..0ba6ecf578e731a9705a384944aed482f829b58d 100644 +index 15dc4691ce604fd7f32b635590b32f4afec8bf2a..670aa56c1b7c9e5fabda45b6a048a6cf6084a7d0 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -283,6 +283,7 @@ public class ServerPlayer extends Player { +@@ -300,6 +300,7 @@ public class ServerPlayer extends Player { public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event public boolean purpurClient = false; // Purpur private boolean tpsBar = false; // Purpur @@ -28,23 +28,24 @@ index 65e549ebad6f89640000f27356f1de434c5925c8..0ba6ecf578e731a9705a384944aed482 // Paper start - replace player chunk loader private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1)); -@@ -571,6 +572,7 @@ public class ServerPlayer extends Player { +@@ -610,6 +611,8 @@ public class ServerPlayer extends Player { + }); } - if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur ++ if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur - TODO: move back up + if (nbt.contains("Purpur.CompassBar")) { this.compassBar = nbt.getBoolean("Purpur.CompassBar"); } // Purpur } @Override -@@ -638,6 +640,7 @@ public class ServerPlayer extends Player { - this.getBukkitEntity().setExtraData(nbt); // CraftBukkit +@@ -687,6 +690,7 @@ public class ServerPlayer extends Player { + } nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur + nbt.putBoolean("Purpur.CompassBar", this.compassBar); // Purpur } // CraftBukkit start - World fallback code, either respawn location or global spawn -@@ -2903,5 +2906,13 @@ public class ServerPlayer extends Player { +@@ -3011,5 +3015,13 @@ public class ServerPlayer extends Player { public void tpsBar(boolean tpsBar) { this.tpsBar = tpsBar; } @@ -59,7 +60,7 @@ index 65e549ebad6f89640000f27356f1de434c5925c8..0ba6ecf578e731a9705a384944aed482 // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 6aa225252d1026979fe88c273652e3d9ebdeb5f3..477639dddb7c5ae0c9cc45a6eca73d82e486409b 100644 +index 45ce203e295d10d522851caefd049995d2d552a2..042fd443c98258240042d3ce1650f36e601d72e3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -255,6 +255,11 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0194-Toggle-for-kinetic-damage.patch b/patches/server/0191-Toggle-for-kinetic-damage.patch similarity index 93% rename from patches/unapplied-server/0194-Toggle-for-kinetic-damage.patch rename to patches/server/0191-Toggle-for-kinetic-damage.patch index b53e2fa7b..b1a8a64be 100644 --- a/patches/unapplied-server/0194-Toggle-for-kinetic-damage.patch +++ b/patches/server/0191-Toggle-for-kinetic-damage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for kinetic damage diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index cd87e7c52b75c6ba40343557ba12c7891da88e07..3a1b8a94642339a96d8f7391714fae1648dc5149 100644 +index 20433981a866b46a2ccedec70d5ee01079c2797c..d85407573c47df162cedb8667c2fbc327e75588b 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -2954,6 +2954,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2992,6 +2992,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (f3 > 0.0F) { this.playSound(this.getFallDamageSound((int) f3), 1.0F, 1.0F); diff --git a/patches/unapplied-server/0195-Add-Option-for-disable-observer-clocks.patch b/patches/server/0192-Add-Option-for-disable-observer-clocks.patch similarity index 88% rename from patches/unapplied-server/0195-Add-Option-for-disable-observer-clocks.patch rename to patches/server/0192-Add-Option-for-disable-observer-clocks.patch index 848091b94..b672c3e1c 100644 --- a/patches/unapplied-server/0195-Add-Option-for-disable-observer-clocks.patch +++ b/patches/server/0192-Add-Option-for-disable-observer-clocks.patch @@ -6,12 +6,12 @@ Subject: [PATCH] Add Option for disable observer clocks Allow to disable observer clocks: https://www.spigotmc.org/attachments/observerclock-gif.365936/ diff --git a/src/main/java/net/minecraft/world/level/block/ObserverBlock.java b/src/main/java/net/minecraft/world/level/block/ObserverBlock.java -index 713352b68f82d4c4a19a712d5207de0f99456713..d056e80c98973e9ba64adc5a8554acc8a5f3eac9 100644 +index b38fbe5121f293f425d7673a6ce49b11d0ced0d9..2a74f42672b92393b52a61c27c5b8af77c8c6070 100644 --- a/src/main/java/net/minecraft/world/level/block/ObserverBlock.java +++ b/src/main/java/net/minecraft/world/level/block/ObserverBlock.java @@ -71,6 +71,7 @@ public class ObserverBlock extends DirectionalBlock { @Override - public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { + protected BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { if (state.getValue(ObserverBlock.FACING) == direction && !(Boolean) state.getValue(ObserverBlock.POWERED)) { + if (!world.getMinecraftWorld().purpurConfig.disableObserverClocks || !(neighborState.getBlock() instanceof ObserverBlock) || neighborState.getValue(ObserverBlock.FACING).getOpposite() != direction) // Purpur this.startSignal(world, pos); diff --git a/patches/unapplied-server/0196-Customizeable-Zombie-Villager-curing-times.patch b/patches/server/0193-Customizeable-Zombie-Villager-curing-times.patch similarity index 91% rename from patches/unapplied-server/0196-Customizeable-Zombie-Villager-curing-times.patch rename to patches/server/0193-Customizeable-Zombie-Villager-curing-times.patch index 5779de297..ff0c75069 100644 --- a/patches/unapplied-server/0196-Customizeable-Zombie-Villager-curing-times.patch +++ b/patches/server/0193-Customizeable-Zombie-Villager-curing-times.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Customizeable Zombie Villager curing times 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 438302f6705bcf3d60f27dde279de010bd95aad4..40465fbe6f78da6176d5fad8a3687cefd93dcf43 100644 +index 2ec3a09135f85a5de68e77511f3f213adf08712c..d909138942212ee090ff513b1817414c93457425 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -221,7 +221,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { - } - +@@ -222,7 +222,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { + if (this.hasEffect(MobEffects.WEAKNESS)) { + itemstack.consume(1, player); if (!this.level().isClientSide) { - this.startConverting(player.getUUID(), this.random.nextInt(2401) + 3600); + this.startConverting(player.getUUID(), this.random.nextInt(level().purpurConfig.zombieVillagerCuringTimeMax - level().purpurConfig.zombieVillagerCuringTimeMin + 1) + level().purpurConfig.zombieVillagerCuringTimeMin); // Purpur diff --git a/patches/unapplied-server/0197-Option-for-sponges-to-work-on-lava-and-mud.patch b/patches/server/0194-Option-for-sponges-to-work-on-lava-and-mud.patch similarity index 96% rename from patches/unapplied-server/0197-Option-for-sponges-to-work-on-lava-and-mud.patch rename to patches/server/0194-Option-for-sponges-to-work-on-lava-and-mud.patch index f5d9cb0cf..bf99d9eba 100644 --- a/patches/unapplied-server/0197-Option-for-sponges-to-work-on-lava-and-mud.patch +++ b/patches/server/0194-Option-for-sponges-to-work-on-lava-and-mud.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Option for sponges to work on lava and mud Co-authored by: granny diff --git a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java -index 1737a670aa81c17233f8e9a8632f0e0876be367c..7e87b4299979c9e46abb582da7a8e54a36e8dfc5 100644 +index a676ccfa6b02e8986df6f6a2e04cbb06b3edd0ff..6fe44572e34ad3e3a1851e73138bd8b778eb7849 100644 --- a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java @@ -77,7 +77,7 @@ public class SpongeBlock extends Block { diff --git a/patches/unapplied-server/0198-Toggle-for-Wither-s-spawn-sound.patch b/patches/server/0195-Toggle-for-Wither-s-spawn-sound.patch similarity index 93% rename from patches/unapplied-server/0198-Toggle-for-Wither-s-spawn-sound.patch rename to patches/server/0195-Toggle-for-Wither-s-spawn-sound.patch index f454e7599..6d1f5445f 100644 --- a/patches/unapplied-server/0198-Toggle-for-Wither-s-spawn-sound.patch +++ b/patches/server/0195-Toggle-for-Wither-s-spawn-sound.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for Wither's spawn sound 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 b5ce9576ce7e91204f981c86fe70abb4cd0f267f..461247f3424b854032ccd45855c877aa85dd2e88 100644 +index 01d193d2584b62897687bd088fb590de8a4ab279..a030fe21a88a9486cc8367710a96af67c761635c 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 -@@ -426,7 +426,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -425,7 +425,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } // CraftBukkit end diff --git a/patches/unapplied-server/0199-Cactus-breaks-from-solid-neighbors-config.patch b/patches/server/0196-Cactus-breaks-from-solid-neighbors-config.patch similarity index 95% rename from patches/unapplied-server/0199-Cactus-breaks-from-solid-neighbors-config.patch rename to patches/server/0196-Cactus-breaks-from-solid-neighbors-config.patch index 4934ae8d2..c128cb475 100644 --- a/patches/unapplied-server/0199-Cactus-breaks-from-solid-neighbors-config.patch +++ b/patches/server/0196-Cactus-breaks-from-solid-neighbors-config.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Cactus breaks from solid neighbors config diff --git a/src/main/java/net/minecraft/world/level/block/CactusBlock.java b/src/main/java/net/minecraft/world/level/block/CactusBlock.java -index ba4aaf850af36a84517c70581e141157c4f15b99..84b04419d2cb536ac42ec5373cc74cc29418755c 100644 +index ff4dda48116a2969704b355ff96407ba869b466e..9200d75b05ce535f7b7f5c1572cd8f6261c6955b 100644 --- a/src/main/java/net/minecraft/world/level/block/CactusBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CactusBlock.java @@ -114,7 +114,7 @@ public class CactusBlock extends Block { diff --git a/patches/unapplied-server/0200-Config-to-remove-curse-of-binding-with-weakness.patch b/patches/server/0197-Config-to-remove-curse-of-binding-with-weakness.patch similarity index 94% rename from patches/unapplied-server/0200-Config-to-remove-curse-of-binding-with-weakness.patch rename to patches/server/0197-Config-to-remove-curse-of-binding-with-weakness.patch index 7a8f6e761..430c9d327 100644 --- a/patches/unapplied-server/0200-Config-to-remove-curse-of-binding-with-weakness.patch +++ b/patches/server/0197-Config-to-remove-curse-of-binding-with-weakness.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to remove curse of binding with weakness diff --git a/src/main/java/net/minecraft/world/inventory/InventoryMenu.java b/src/main/java/net/minecraft/world/inventory/InventoryMenu.java -index 9af1da3858d6cf79b8bfaf99dde1370ccc50d023..1acb41fab25bdbc4109913b111dbe3b0e106af3f 100644 +index 9992599dbe4f4a430e822a44b03c00505abfbfaf..3fea9339420aa38b303ccf6c154aec246e617b5b 100644 --- a/src/main/java/net/minecraft/world/inventory/InventoryMenu.java +++ b/src/main/java/net/minecraft/world/inventory/InventoryMenu.java -@@ -95,7 +95,7 @@ public class InventoryMenu extends RecipeBookMenu { +@@ -97,7 +97,7 @@ public class InventoryMenu extends RecipeBookMenu { public boolean mayPickup(Player playerEntity) { ItemStack itemstack = this.getItem();