diff --git a/patches/server/0270-Implement-configurable-search-radius-for-villagers-t.patch b/patches/server/0270-Implement-configurable-search-radius-for-villagers-t.patch new file mode 100644 index 000000000..2b2302028 --- /dev/null +++ b/patches/server/0270-Implement-configurable-search-radius-for-villagers-t.patch @@ -0,0 +1,41 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Wed, 8 Jun 2022 14:13:39 -0400 +Subject: [PATCH] Implement configurable search radius for villagers to spawn + iron golems + + +diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java +index 715003af5363d3163d78871ff360a142be66f037..256e4d396c9fe0822f4006ef101f1a8f1fbd1d2a 100644 +--- a/src/main/java/net/minecraft/world/entity/npc/Villager.java ++++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java +@@ -1067,6 +1067,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + } + + public void spawnGolemIfNeeded(ServerLevel world, long time, int requiredCount) { ++ if (world.purpurConfig.villagerSpawnIronGolemRadius > 0 && world.getEntitiesOfClass(net.minecraft.world.entity.animal.IronGolem.class, getBoundingBox().inflate(world.purpurConfig.villagerSpawnIronGolemRadius)).size() > world.purpurConfig.villagerSpawnIronGolemLimit) return; // Purpur + if (this.wantsToSpawnGolem(time)) { + AABB axisalignedbb = this.getBoundingBox().inflate(10.0D, 10.0D, 10.0D); + List list = world.getEntitiesOfClass(Villager.class, axisalignedbb); +diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +index 7ff3ed217a9e4eaa9427c75993aff33515649e6a..3d83e4124c827acf19db788af2b02afd11150df4 100644 +--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java ++++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +@@ -2665,6 +2665,8 @@ public class PurpurWorldConfig { + public boolean villagerLobotomizeEnabled = false; + public int villagerLobotomizeCheckInterval = 100; + public boolean villagerDisplayTradeItem = true; ++ public int villagerSpawnIronGolemRadius = 0; ++ public int villagerSpawnIronGolemLimit = 0; + private void villagerSettings() { + villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); + villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); +@@ -2700,6 +2702,8 @@ public class PurpurWorldConfig { + villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled); + villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval); + villagerDisplayTradeItem = getBoolean("mobs.villager.display-trade-item", villagerDisplayTradeItem); ++ villagerSpawnIronGolemRadius = getInt("mobs.villager.spawn-iron-golem.radius", villagerSpawnIronGolemRadius); ++ villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit); + } + + public boolean vindicatorRidable = false; diff --git a/patches/todo/0104-Stonecutter-damage.patch b/patches/server/0271-Stonecutter-damage.patch similarity index 64% rename from patches/todo/0104-Stonecutter-damage.patch rename to patches/server/0271-Stonecutter-damage.patch index f07f7c997..51e895279 100644 --- a/patches/todo/0104-Stonecutter-damage.patch +++ b/patches/server/0271-Stonecutter-damage.patch @@ -1,46 +1,31 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Mon, 5 Oct 2020 12:15:14 -0500 +From: William Blake Galbreath +Date: Wed, 8 Jun 2022 14:19:35 -0400 Subject: [PATCH] Stonecutter damage diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index 67e559d63c543ff716d610cb04ff9426cc20ae00..9125deb86b856bcb5e1cd779773522e2fa4cb5f9 100644 +index 8b03b8e58e16ab9b677ba14cf1d09b417cf369f5..b87867b0cd507b969f398399684c597e99e26753 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -@@ -39,6 +39,14 @@ public class DamageSource { - public static final DamageSource FREEZE = (new DamageSource("freeze")).bypassArmor(); - public static final DamageSource FALLING_STALACTITE = (new DamageSource("fallingStalactite")).damageHelmet(); - public static final DamageSource STALAGMITE = (new DamageSource("stalagmite")).bypassArmor().setIsFall(); -+ // Purpur start +@@ -45,6 +45,12 @@ public class DamageSource { + return getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgRunWithScissors, entity); + } + }).bypassArmor(); + public static final DamageSource STONECUTTER = (new DamageSource("stonecutter") { + @Override + public Component getLocalizedDeathMessage(LivingEntity entity) { + return getLocalizedDeathMessage(org.purpurmc.purpur.PurpurConfig.deathMsgStonecutter, entity); + } + }).bypassArmor(); -+ // Purpur end + // Purpur end private boolean damageHelmet; private boolean bypassArmor; - private boolean bypassInvul; -diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 3ee9202676d3add9054fbd72bbbf1e44afd2597d..f582265ec9dc5349183cbd5c6b1e3f2658166c02 100644 ---- a/src/main/java/net/minecraft/world/entity/Entity.java -+++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1078,7 +1078,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { - } - // CraftBukkit end - -- if (this.onGround && !this.isSteppingCarefully()) { -+ if (this.onGround && (!this.isSteppingCarefully() || (block == Blocks.STONECUTTER && level.purpurConfig.stonecutterDamage > 0.0F))) { - block.stepOn(this.level, blockposition, iblockdata, this); - } - diff --git a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java b/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java -index ec1c04f354236af24e137865b3b311ab8eb29ac4..7d3e7c5f8f9946c35384cf18a43efbcf62952228 100644 +index 0a95842c53a9d0286c57bcb42db97e468e30fb7d..b6742a1efcceb0fb950d995101b6be16b0d05978 100644 --- a/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java +++ b/src/main/java/net/minecraft/world/level/block/StonecutterBlock.java -@@ -93,4 +93,16 @@ public class StonecutterBlock extends Block { +@@ -92,4 +92,16 @@ public class StonecutterBlock extends Block { public boolean isPathfindable(BlockState state, BlockGetter world, BlockPos pos, PathComputationType type) { return false; } @@ -58,29 +43,29 @@ index ec1c04f354236af24e137865b3b311ab8eb29ac4..7d3e7c5f8f9946c35384cf18a43efbcf + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java b/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java -index c7926d45c32a739b32d2b97b1ed2f8b89fb18620..c9428be93926c01584deb1f4b3d572fcfe60ac4c 100644 +index 444bec169c0cd5fe1a23f1d14fae1a10ca3d67c4..6b6093608e3fe97e72a1db5ad2a95b2818664cf1 100644 --- a/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java +++ b/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java -@@ -467,7 +467,7 @@ public class WalkNodeEvaluator extends NodeEvaluator { +@@ -487,7 +487,7 @@ public class WalkNodeEvaluator extends NodeEvaluator { return BlockPathTypes.DANGER_CACTUS; } - if (blockState.is(Blocks.SWEET_BERRY_BUSH)) { -+ if (blockState.is(Blocks.SWEET_BERRY_BUSH) || blockState.is(Blocks.STONECUTTER)) { ++ if (blockState.is(Blocks.SWEET_BERRY_BUSH) || blockState.is(Blocks.STONECUTTER)) { // Purpur return BlockPathTypes.DANGER_OTHER; } -@@ -499,7 +499,7 @@ public class WalkNodeEvaluator extends NodeEvaluator { +@@ -519,7 +519,7 @@ public class WalkNodeEvaluator extends NodeEvaluator { return BlockPathTypes.POWDER_SNOW; } else if (blockState.is(Blocks.CACTUS)) { return BlockPathTypes.DAMAGE_CACTUS; - } else if (blockState.is(Blocks.SWEET_BERRY_BUSH)) { -+ } else if (blockState.is(Blocks.SWEET_BERRY_BUSH) || blockState.is(Blocks.STONECUTTER)) { ++ } else if (blockState.is(Blocks.SWEET_BERRY_BUSH) || blockState.is(Blocks.STONECUTTER)) { // Purpur return BlockPathTypes.DAMAGE_OTHER; } else if (blockState.is(Blocks.HONEY_BLOCK)) { return BlockPathTypes.STICKY_HONEY; diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 97108c2317a38e11d45fdbef448dca5cb3ddad1c..066c40a8a0e5d13fc39c5283b54fe424b8822f4f 100644 +index 8f77f17fc8e2ce8e877b050e08fdc024e4e21184..5ab4a37fcdd74924e70f8de1ffafdb231e1ab317 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -1052,6 +1052,10 @@ public class CraftEventFactory { @@ -95,27 +80,26 @@ index 97108c2317a38e11d45fdbef448dca5cb3ddad1c..066c40a8a0e5d13fc39c5283b54fe424 throw new IllegalStateException(String.format("Unhandled damage of %s by %s from %s", entity, damager, source.msgId)); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 1cd8358c3d9f96073224846143516097aeb8fd23..4b3c590f0f1231e164e8664f21a14c1b39d73842 100644 +index 127df4a4c5c84f5e260104a4cc8ef092f7cf9e07..bcb386d4cbd37ed41cf27808c7104d2780ce2558 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -187,6 +187,11 @@ public class PurpurConfig { - pingCommandOutput = getString("settings.messages.ping-command-output", pingCommandOutput); +@@ -200,8 +200,10 @@ public class PurpurConfig { } + public static String deathMsgRunWithScissors = " slipped and fell on their shears"; + public static String deathMsgStonecutter = " has sawed themself in half"; -+ private static void deathMessages() { + private static void deathMessages() { + deathMsgRunWithScissors = getString("settings.messages.death-message.run-with-scissors", deathMsgRunWithScissors); + deathMsgStonecutter = getString("settings.messages.death-message.stonecutter", deathMsgStonecutter); -+ } -+ - public static String serverModName = "Purpur"; - private static void serverModName() { - serverModName = getString("settings.server-mod-name", serverModName); + } + + public static boolean advancementOnlyBroadcastToAffectedPlayer = false; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index adeb059fd44b411b972cf8886900069d71568478..95667821b8f01ae31c62f0811aed67453b60df4b 100644 +index 3d83e4124c827acf19db788af2b02afd11150df4..a22b9f2125469418bc22c81a0c604f358449c8f5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -431,6 +431,11 @@ public class PurpurWorldConfig { - spawnerDeactivateByRedstone = getBoolean("blocks.spawner.deactivate-by-redstone", spawnerDeactivateByRedstone); +@@ -973,6 +973,11 @@ public class PurpurWorldConfig { + spongeAbsorbsLava = getBoolean("blocks.sponge.absorbs-lava", spongeAbsorbsLava); } + public float stonecutterDamage = 0.0F; diff --git a/patches/todo/0169-Configurable-damage-settings-for-magma-blocks.patch b/patches/server/0272-Configurable-damage-settings-for-magma-blocks.patch similarity index 51% rename from patches/todo/0169-Configurable-damage-settings-for-magma-blocks.patch rename to patches/server/0272-Configurable-damage-settings-for-magma-blocks.patch index 6cc787358..f3193aa5b 100644 --- a/patches/todo/0169-Configurable-damage-settings-for-magma-blocks.patch +++ b/patches/server/0272-Configurable-damage-settings-for-magma-blocks.patch @@ -1,41 +1,28 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Ben Kerllenevich -Date: Thu, 29 Apr 2021 14:06:29 -0400 +Date: Wed, 8 Jun 2022 14:32:55 -0400 Subject: [PATCH] Configurable damage settings for magma blocks -diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 91bbb0b3d5a3d702a5b68e7b8a4146d7ec0f47b5..87e1a9aefa0c048c7f1619ad002538f7e2694bd7 100644 ---- a/src/main/java/net/minecraft/world/entity/Entity.java -+++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1078,7 +1078,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { - } - // CraftBukkit end - -- if (this.onGround && (!this.isSteppingCarefully() || (block == Blocks.STONECUTTER && level.purpurConfig.stonecutterDamage > 0.0F))) { -+ if (this.onGround && (!this.isSteppingCarefully() || (block == Blocks.STONECUTTER && level.purpurConfig.stonecutterDamage > 0.0F) || (block == Blocks.MAGMA_BLOCK && level.purpurConfig.magmaBlockDamageWhenSneaking))) { // Purpur - block.stepOn(this.level, blockposition, iblockdata, this); - } - diff --git a/src/main/java/net/minecraft/world/level/block/MagmaBlock.java b/src/main/java/net/minecraft/world/level/block/MagmaBlock.java -index be40f6f68b7273cbc50a0b9658e4b0981f723674..6701d35a8911cccbcb4ce77dfc0393a5172f0120 100644 +index d3540a4daaa8021ae009bfd4d9ef4f1172ab4c56..2b250439f263f64db7920536ed6eaf6440644a11 100644 --- a/src/main/java/net/minecraft/world/level/block/MagmaBlock.java +++ b/src/main/java/net/minecraft/world/level/block/MagmaBlock.java @@ -28,7 +28,7 @@ public class MagmaBlock extends Block { @Override public void stepOn(Level world, BlockPos pos, BlockState state, Entity entity) { -- if (!entity.fireImmune() && entity instanceof LivingEntity && !EnchantmentHelper.hasFrostWalker((LivingEntity) entity)) { -+ if (!entity.fireImmune() && entity instanceof LivingEntity && (world.purpurConfig.magmaBlockDamageWithFrostWalker || !EnchantmentHelper.hasFrostWalker((LivingEntity) entity))) { // Purpur +- if (!entity.isSteppingCarefully() && entity instanceof LivingEntity && !EnchantmentHelper.hasFrostWalker((LivingEntity) entity)) { ++ if ((!entity.isSteppingCarefully() || world.purpurConfig.magmaBlockDamageWhenSneaking) && entity instanceof LivingEntity && (world.purpurConfig.magmaBlockDamageWithFrostWalker || !EnchantmentHelper.hasFrostWalker((LivingEntity) entity))) { // Purpur org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = world.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ()); // CraftBukkit entity.hurt(DamageSource.HOT_FLOOR, 1.0F); org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = null; // CraftBukkit diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index eb7faf2a5cf909f0570435bf8656421a44a50ff9..d3e9b9c680a71b4e9cb3d1cb3a91a195cad336ba 100644 +index a22b9f2125469418bc22c81a0c604f358449c8f5..322eecc6688df6c3c56d88632993ad7f960156c1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -589,6 +589,13 @@ public class PurpurWorldConfig { - lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether); +@@ -909,6 +909,13 @@ public class PurpurWorldConfig { + pistonBlockPushLimit = getInt("blocks.piston.block-push-limit", pistonBlockPushLimit); } + public boolean magmaBlockDamageWhenSneaking = false; diff --git a/patches/todo/0057-Implement-configurable-search-radius-for-villagers-t.patch b/patches/todo/0057-Implement-configurable-search-radius-for-villagers-t.patch deleted file mode 100644 index 6981ff9ce..000000000 --- a/patches/todo/0057-Implement-configurable-search-radius-for-villagers-t.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Mon, 22 Jul 2019 17:32:17 -0500 -Subject: [PATCH] Implement configurable search radius for villagers to spawn - iron golems - - -diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index ff2715b465c1c62a5675f6cd1f99597f10d3233d..2c99eda984bd147e5ce7d32dd11b818d8b8561aa 100644 ---- a/src/main/java/net/minecraft/world/entity/npc/Villager.java -+++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1052,6 +1052,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - - @Nullable - private IronGolem trySpawnGolem(ServerLevel world) { -+ if (world.purpurConfig.villagerSpawnIronGolemRadius > 0 && world.getEntitiesOfClass(IronGolem.class, getBoundingBox().inflate(world.purpurConfig.villagerSpawnIronGolemRadius)).size() > world.purpurConfig.villagerSpawnIronGolemLimit) return null; // Purpur - BlockPos blockposition = this.blockPosition(); - - for (int i = 0; i < 10; ++i) { -diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9cab405a67c76e920754d0ba10978cf5476f1b82..39b47c37523950e9282b8db9e028795ee48f1155 100644 ---- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1381,6 +1381,8 @@ public class PurpurWorldConfig { - public boolean villagerUseBrainTicksOnlyWhenLagging = true; - public boolean villagerFollowEmeraldBlock = false; - public boolean villagerCanBeLeashed = false; -+ public int villagerSpawnIronGolemRadius = 0; -+ public int villagerSpawnIronGolemLimit = 0; - private void villagerSettings() { - villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); - villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1395,6 +1397,8 @@ public class PurpurWorldConfig { - villagerUseBrainTicksOnlyWhenLagging = getBoolean("mobs.villager.use-brain-ticks-only-when-lagging", villagerUseBrainTicksOnlyWhenLagging); - villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); - villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); -+ villagerSpawnIronGolemRadius = getInt("mobs.villager.spawn-iron-golem.radius", villagerSpawnIronGolemRadius); -+ villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit); - } - - public boolean vindicatorRidable = false;