diff --git a/patches/unapplied-server/0201-Shulker-change-color-with-dye.patch b/patches/server/0191-Shulker-change-color-with-dye.patch similarity index 90% rename from patches/unapplied-server/0201-Shulker-change-color-with-dye.patch rename to patches/server/0191-Shulker-change-color-with-dye.patch index 50c611f37..cafa8f842 100644 --- a/patches/unapplied-server/0201-Shulker-change-color-with-dye.patch +++ b/patches/server/0191-Shulker-change-color-with-dye.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Shulker change color with dye 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 796f0a3d8dc8faf202e912fe44afb898d286a895..39b980eeb863fda008259a4b52e39393903b4e9c 100644 +index fde6bae8a5d9eba7ec87c73047a6e3f91629828e..0e9a4e473b1f1887804507cfadfdeeed645fa3d1 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java @@ -124,6 +124,19 @@ public class Shulker extends AbstractGolem implements VariantHolder { +@@ -147,7 +147,13 @@ public abstract class AbstractFurnaceMenu extends RecipeBookMenu transaction = new java.util.ArrayList(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index cbe57d7b3282a76a427a64507a10a5aea767ff1c..8cdc91d8306a76514abd76c450044ffed5418787 100644 +index 1fd6461bce10673f618f20ec10511cfe30e3eb87..8632ef169eab32caca3a6d89011c37e81345b7d0 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1594,6 +1594,19 @@ public final class CraftServer implements Server { +@@ -1598,6 +1598,19 @@ public final class CraftServer implements Server { return true; } diff --git a/patches/unapplied-server/0204-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch b/patches/server/0194-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch similarity index 87% rename from patches/unapplied-server/0204-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch rename to patches/server/0194-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch index 0d670738a..21501e53d 100644 --- a/patches/unapplied-server/0204-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch +++ b/patches/server/0194-Option-for-if-rain-and-thunder-should-stop-on-sleep.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option for if rain and thunder should stop on sleep diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 83ec2e31d81d6209953252a3780552c3cf110c68..42db3e64b120b753e98a0fd7e3f56c7d28256fd2 100644 +index d54a242fbfce347f652d03f8eeac2f990168b809..3f23cd5d1fc8fc011b0857d127005aa8d45d39ea 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1391,6 +1391,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1015,6 +1015,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @VisibleForTesting public void resetWeatherCycle() { // CraftBukkit start @@ -16,7 +16,7 @@ index 83ec2e31d81d6209953252a3780552c3cf110c68..42db3e64b120b753e98a0fd7e3f56c7d this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // If we stop due to everyone sleeping we should reset the weather duration to some other random value. // Not that everyone ever manages to get the whole server to sleep at the same time.... -@@ -1398,6 +1399,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1022,6 +1023,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.serverLevelData.setRainTime(0); } // CraftBukkit end @@ -25,10 +25,10 @@ index 83ec2e31d81d6209953252a3780552c3cf110c68..42db3e64b120b753e98a0fd7e3f56c7d // CraftBukkit start // If we stop due to everyone sleeping we should reset the weather duration to some other random value. diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index aa037b2fb2957be96db3d200294c41e43f6d820f..ef65be19cc55c3c473338f02c9687e74b490b358 100644 +index 718820118e590034a68a10bda7d680a24f2d83b7..29930a89ec305901e6520ccea63940e4d3a9da49 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -139,6 +139,8 @@ public class PurpurWorldConfig { +@@ -137,6 +137,8 @@ public class PurpurWorldConfig { public int raidCooldownSeconds = 0; public int animalBreedingCooldownSeconds = 0; public boolean mobsIgnoreRails = false; @@ -37,7 +37,7 @@ index aa037b2fb2957be96db3d200294c41e43f6d820f..ef65be19cc55c3c473338f02c9687e74 private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative); -@@ -161,6 +163,8 @@ public class PurpurWorldConfig { +@@ -157,6 +159,8 @@ public class PurpurWorldConfig { raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds); mobsIgnoreRails = getBoolean("gameplay-mechanics.mobs-ignore-rails", mobsIgnoreRails); diff --git a/patches/unapplied-server/0205-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch b/patches/server/0195-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch similarity index 90% rename from patches/unapplied-server/0205-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch rename to patches/server/0195-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch index 5fca4b152..cd8d14525 100644 --- a/patches/unapplied-server/0205-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch +++ b/patches/server/0195-Chance-for-azalea-blocks-to-grow-into-trees-naturall.patch @@ -30,10 +30,10 @@ index fad69dfc20574ab23634b14252b50929cca75b21..7082486f6b760bed2a61938f493d5124 } diff --git a/src/main/java/net/minecraft/world/level/block/Blocks.java b/src/main/java/net/minecraft/world/level/block/Blocks.java -index 260906f493416d98ab574a7262fce5e9b7e40c64..ce639e4a2d87202a10ef4fc73274c4b2c4e95720 100644 +index 223259e7a09ada681b6181c898f6857888594f85..7d58a95f7ae8983b466b275f4f82597d38762af0 100644 --- a/src/main/java/net/minecraft/world/level/block/Blocks.java +++ b/src/main/java/net/minecraft/world/level/block/Blocks.java -@@ -7389,6 +7389,7 @@ public class Blocks { +@@ -7361,6 +7361,7 @@ public class Blocks { BlockBehaviour.Properties.of() .mapColor(MapColor.PLANT) .forceSolidOff() @@ -41,7 +41,7 @@ index 260906f493416d98ab574a7262fce5e9b7e40c64..ce639e4a2d87202a10ef4fc73274c4b2 .instabreak() .sound(SoundType.AZALEA) .noOcclusion() -@@ -7401,6 +7402,7 @@ public class Blocks { +@@ -7373,6 +7374,7 @@ public class Blocks { BlockBehaviour.Properties.of() .mapColor(MapColor.PLANT) .forceSolidOff() @@ -50,10 +50,10 @@ index 260906f493416d98ab574a7262fce5e9b7e40c64..ce639e4a2d87202a10ef4fc73274c4b2 .sound(SoundType.FLOWERING_AZALEA) .noOcclusion() diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ef65be19cc55c3c473338f02c9687e74b490b358..49837f5ebccfb0d6fbfefe379f52433b44c5aa79 100644 +index 29930a89ec305901e6520ccea63940e4d3a9da49..ccf1ba95e0dc595276d2b69d7ead7249966b92da 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -806,6 +806,11 @@ public class PurpurWorldConfig { +@@ -787,6 +787,11 @@ public class PurpurWorldConfig { anvilColorsUseMiniMessage = getBoolean("blocks.anvil.use-mini-message", anvilColorsUseMiniMessage); } @@ -65,7 +65,7 @@ index ef65be19cc55c3c473338f02c9687e74b490b358..49837f5ebccfb0d6fbfefe379f52433b public int beaconLevelOne = 20; public int beaconLevelTwo = 30; public int beaconLevelThree = 40; -@@ -943,6 +948,11 @@ public class PurpurWorldConfig { +@@ -924,6 +929,11 @@ public class PurpurWorldConfig { farmlandTramplingFeatherFalling = getBoolean("blocks.farmland.feather-fall-distance-affects-trampling", farmlandTramplingFeatherFalling); } diff --git a/patches/unapplied-server/0206-Shift-right-click-to-use-exp-for-mending.patch b/patches/server/0196-Shift-right-click-to-use-exp-for-mending.patch similarity index 83% rename from patches/unapplied-server/0206-Shift-right-click-to-use-exp-for-mending.patch rename to patches/server/0196-Shift-right-click-to-use-exp-for-mending.patch index 07182adf0..ad7dfb789 100644 --- a/patches/unapplied-server/0206-Shift-right-click-to-use-exp-for-mending.patch +++ b/patches/server/0196-Shift-right-click-to-use-exp-for-mending.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Shift right click to use exp for mending diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index a810eaa7dc319f5ea69b239190ae91838bfad4ec..6d194797d8fe2cd6e5652d596f4bc66ffc3b6375 100644 +index 69c4289164fa0934f05cc8d80ffa1576bb5e6359..f4bdca2e5acfe4c0f846f90d5964c33439abec0c 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -513,6 +513,7 @@ public class ServerPlayerGameMode { +@@ -516,6 +516,7 @@ public class ServerPlayerGameMode { public InteractionHand interactHand; public ItemStack interactItemStack; public InteractionResult useItemOn(ServerPlayer player, Level world, ItemStack stack, InteractionHand hand, BlockHitResult hitResult) { @@ -16,7 +16,7 @@ index a810eaa7dc319f5ea69b239190ae91838bfad4ec..6d194797d8fe2cd6e5652d596f4bc66f BlockPos blockposition = hitResult.getBlockPos(); BlockState iblockdata = world.getBlockState(blockposition); boolean cancelledBlock = false; -@@ -622,4 +623,18 @@ public class ServerPlayerGameMode { +@@ -619,4 +620,18 @@ public class ServerPlayerGameMode { public void setLevel(ServerLevel world) { this.level = world; } @@ -36,10 +36,10 @@ index a810eaa7dc319f5ea69b239190ae91838bfad4ec..6d194797d8fe2cd6e5652d596f4bc66f + // Purpur end } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index cc3728902da9e10df2bb0e3edbb765bffd51d808..222436febf0b6ea93b57b8a4c0a98998a9430873 100644 +index df23496844d4b41e79efe23c99a5449ca40a4ccd..6ba7813b48fe0db81cb895937837bd463f458d62 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2060,6 +2060,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2004,6 +2004,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl boolean cancelled; if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) { @@ -48,21 +48,21 @@ index cc3728902da9e10df2bb0e3edbb765bffd51d808..222436febf0b6ea93b57b8a4c0a98998 cancelled = event.useItemInHand() == Event.Result.DENY; } else { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 49837f5ebccfb0d6fbfefe379f52433b44c5aa79..fb785f51d7774d31ed50f71f8048301fc2561ed0 100644 +index ccf1ba95e0dc595276d2b69d7ead7249966b92da..e224eb3e438e7099d37519ccf3640c351df83ba7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -411,6 +411,7 @@ public class PurpurWorldConfig { +@@ -394,6 +394,7 @@ public class PurpurWorldConfig { + public int playerBurpDelay = 10; public boolean playerBurpWhenFull = false; public boolean playerRidableInWater = false; - public boolean playerRemoveBindingWithWeakness = false; + public int shiftRightClickRepairsMendingPoints = 0; private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -435,6 +436,7 @@ public class PurpurWorldConfig { +@@ -416,6 +417,7 @@ public class PurpurWorldConfig { + playerBurpDelay = getInt("gameplay-mechanics.player.burp-delay", playerBurpDelay); playerBurpWhenFull = getBoolean("gameplay-mechanics.player.burp-when-full", playerBurpWhenFull); playerRidableInWater = getBoolean("gameplay-mechanics.player.ridable-in-water", playerRidableInWater); - playerRemoveBindingWithWeakness = getBoolean("gameplay-mechanics.player.curse-of-binding.remove-with-weakness", playerRemoveBindingWithWeakness); + shiftRightClickRepairsMendingPoints = getInt("gameplay-mechanics.player.shift-right-click-repairs-mending-points", shiftRightClickRepairsMendingPoints); } diff --git a/patches/unapplied-server/0207-Dolphins-naturally-aggressive-to-players-chance.patch b/patches/server/0197-Dolphins-naturally-aggressive-to-players-chance.patch similarity index 93% rename from patches/unapplied-server/0207-Dolphins-naturally-aggressive-to-players-chance.patch rename to patches/server/0197-Dolphins-naturally-aggressive-to-players-chance.patch index e4eeb086c..f9088b792 100644 --- a/patches/unapplied-server/0207-Dolphins-naturally-aggressive-to-players-chance.patch +++ b/patches/server/0197-Dolphins-naturally-aggressive-to-players-chance.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Dolphins naturally aggressive to players chance diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -index 38112239035b0c66c429c0762199867e70e0a67a..e539eefb6e6d3172611d1f9185a1138001481885 100644 +index 439fa9a5070889a4dee48786509940c4d56b6806..f2e1954a1e80862ec3818af448cf4096265adb20 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java @@ -81,6 +81,7 @@ public class Dolphin extends WaterAnimal { @@ -48,10 +48,10 @@ index 38112239035b0c66c429c0762199867e70e0a67a..e539eefb6e6d3172611d1f9185a11380 public static AttributeSupplier.Builder createAttributes() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 28b497ad67d73a34c1eb09a5a3709d72823f9b5c..49a95c186ae1d2c8cf4474c9009304d3ee575494 100644 +index e224eb3e438e7099d37519ccf3640c351df83ba7..99501a23ac62215baa452354c77c6c4631458595 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1357,6 +1357,7 @@ public class PurpurWorldConfig { +@@ -1338,6 +1338,7 @@ public class PurpurWorldConfig { public double dolphinMaxHealth = 10.0D; public boolean dolphinDisableTreasureSearching = false; public boolean dolphinTakeDamageFromWater = false; @@ -59,7 +59,7 @@ index 28b497ad67d73a34c1eb09a5a3709d72823f9b5c..49a95c186ae1d2c8cf4474c9009304d3 private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -1371,6 +1372,7 @@ public class PurpurWorldConfig { +@@ -1352,6 +1353,7 @@ public class PurpurWorldConfig { dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); dolphinTakeDamageFromWater = getBoolean("mobs.dolphin.takes-damage-from-water", dolphinTakeDamageFromWater); diff --git a/patches/unapplied-server/0208-Cows-naturally-aggressive-to-players-chance.patch b/patches/server/0198-Cows-naturally-aggressive-to-players-chance.patch similarity index 96% rename from patches/unapplied-server/0208-Cows-naturally-aggressive-to-players-chance.patch rename to patches/server/0198-Cows-naturally-aggressive-to-players-chance.patch index 455d74123..315926bfc 100644 --- a/patches/unapplied-server/0208-Cows-naturally-aggressive-to-players-chance.patch +++ b/patches/server/0198-Cows-naturally-aggressive-to-players-chance.patch @@ -61,10 +61,10 @@ index c519883f4ed3772378b5563401b8c557dc315ace..78f00014c034949b6559ca948b1b78fa @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 49a95c186ae1d2c8cf4474c9009304d3ee575494..83e477e180e20bf04ebd926b12aba37792d0e9bd 100644 +index 99501a23ac62215baa452354c77c6c4631458595..df9aac76b92b41a0c8f5d87f86e9fbffc3e46d50 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1306,7 +1306,14 @@ public class PurpurWorldConfig { +@@ -1287,7 +1287,14 @@ public class PurpurWorldConfig { public int cowFeedMushrooms = 0; public int cowBreedingTicks = 6000; public boolean cowTakeDamageFromWater = false; @@ -79,7 +79,7 @@ index 49a95c186ae1d2c8cf4474c9009304d3ee575494..83e477e180e20bf04ebd926b12aba377 cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); cowControllable = getBoolean("mobs.cow.controllable", cowControllable); -@@ -1319,6 +1326,8 @@ public class PurpurWorldConfig { +@@ -1300,6 +1307,8 @@ public class PurpurWorldConfig { cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); cowBreedingTicks = getInt("mobs.cow.breeding-delay-ticks", cowBreedingTicks); cowTakeDamageFromWater = getBoolean("mobs.cow.takes-damage-from-water", cowTakeDamageFromWater); diff --git a/patches/unapplied-server/0209-Option-for-beds-to-explode-on-villager-sleep.patch b/patches/server/0199-Option-for-beds-to-explode-on-villager-sleep.patch similarity index 86% rename from patches/unapplied-server/0209-Option-for-beds-to-explode-on-villager-sleep.patch rename to patches/server/0199-Option-for-beds-to-explode-on-villager-sleep.patch index 8ee26831e..512775f9c 100644 --- a/patches/unapplied-server/0209-Option-for-beds-to-explode-on-villager-sleep.patch +++ b/patches/server/0199-Option-for-beds-to-explode-on-villager-sleep.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option for beds to explode on villager sleep diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index a7c85c9efd13145cc061a3a0076b44a7af9812b9..1bace0d549ea4a4b45ac4cd1409524989ecac4ca 100644 +index d9e8d7d7ba3775131b871a619d997a29dc959594..c40070cf6654ebd7efb83c108efd29a5670ac234 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1101,6 +1101,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1081,6 +1081,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public void startSleeping(BlockPos pos) { @@ -22,10 +22,10 @@ index a7c85c9efd13145cc061a3a0076b44a7af9812b9..1bace0d549ea4a4b45ac4cd140952498 this.brain.setMemory(MemoryModuleType.LAST_SLEPT, this.level().getGameTime()); // CraftBukkit - decompile error this.brain.eraseMemory(MemoryModuleType.WALK_TARGET); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0edff6f99dbea98f0d80f2a48d52d86874430ff5..613dcb1b68169c724dbf63a6327dab5b50dd4a8d 100644 +index df9aac76b92b41a0c8f5d87f86e9fbffc3e46d50..b9f054715d7a84f7938e83bc16bb5d6f684a6083 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -825,6 +825,7 @@ public class PurpurWorldConfig { +@@ -806,6 +806,7 @@ public class PurpurWorldConfig { } public boolean bedExplode = true; @@ -33,7 +33,7 @@ index 0edff6f99dbea98f0d80f2a48d52d86874430ff5..613dcb1b68169c724dbf63a6327dab5b public double bedExplosionPower = 5.0D; public boolean bedExplosionFire = true; public net.minecraft.world.level.Level.ExplosionInteraction bedExplosionEffect = net.minecraft.world.level.Level.ExplosionInteraction.BLOCK; -@@ -835,6 +836,7 @@ public class PurpurWorldConfig { +@@ -816,6 +817,7 @@ public class PurpurWorldConfig { } } bedExplode = getBoolean("blocks.bed.explode", bedExplode); diff --git a/patches/unapplied-server/0210-Halloween-options-and-optimizations.patch b/patches/server/0200-Halloween-options-and-optimizations.patch similarity index 90% rename from patches/unapplied-server/0210-Halloween-options-and-optimizations.patch rename to patches/server/0200-Halloween-options-and-optimizations.patch index 057d9425f..aa77fe58a 100644 --- a/patches/unapplied-server/0210-Halloween-options-and-optimizations.patch +++ b/patches/server/0200-Halloween-options-and-optimizations.patch @@ -26,10 +26,10 @@ index a7847b6ca5b203fd693337928f31a9043be163d7..a50d58240c58a0fea4ae8fc246898708 LocalDate localdate = LocalDate.now(); int i = localdate.get(ChronoField.DAY_OF_MONTH); 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 919767affe2ede755cf83398436fbf1581ad508f..8515e6360c1630385884a60f652f65fdefeaf540 100644 +index f56580bdae043fa4e5e195481ae3d344fc725621..63cbec52bc4637a0b787cbc22041188691527def 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -@@ -135,11 +135,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo +@@ -136,11 +136,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo this.reassessWeaponGoal(); this.setCanPickUpLoot(this.level().paperConfig().entities.behavior.mobsCanAlwaysPickUpLoot.skeletons || randomsource.nextFloat() < 0.55F * difficulty.getSpecialMultiplier()); // Paper - Add world settings for mobs picking up loot if (this.getItemBySlot(EquipmentSlot.HEAD).isEmpty()) { @@ -43,10 +43,10 @@ index 919767affe2ede755cf83398436fbf1581ad508f..8515e6360c1630385884a60f652f65fd this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; } 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 53f7659aed2378b36f1923a0208c7f86048eb85b..d5a5e51e23328deac09d6990539d8207b1567912 100644 +index c8a664447f19e437eb7c615563add92715be9650..fc6914d459b1985a2cba0f963a7d79ebaa0aed58 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -575,11 +575,7 @@ public class Zombie extends Monster { +@@ -584,11 +584,7 @@ public class Zombie extends Monster { } if (this.getItemBySlot(EquipmentSlot.HEAD).isEmpty()) { @@ -60,10 +60,10 @@ index 53f7659aed2378b36f1923a0208c7f86048eb85b..d5a5e51e23328deac09d6990539d8207 this.armorDropChances[EquipmentSlot.HEAD.getIndex()] = 0.0F; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 867820c14f2f22ee6dc2c744bf9de109d4d9daff..64276ffc7fb0cb27928442b0b4dc2f6db4ff46b8 100644 +index b9f054715d7a84f7938e83bc16bb5d6f684a6083..0f9b5dbff992006ce8bc6cdd2c07668f1a4fa1f6 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1699,6 +1699,13 @@ public class PurpurWorldConfig { +@@ -1680,6 +1680,13 @@ public class PurpurWorldConfig { guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); } diff --git a/patches/unapplied-server/0211-Config-for-grindstones.patch b/patches/server/0201-Config-for-grindstones.patch similarity index 84% rename from patches/unapplied-server/0211-Config-for-grindstones.patch rename to patches/server/0201-Config-for-grindstones.patch index 2dd7aa81b..887bc1ecc 100644 --- a/patches/unapplied-server/0211-Config-for-grindstones.patch +++ b/patches/server/0201-Config-for-grindstones.patch @@ -5,28 +5,28 @@ Subject: [PATCH] Config for grindstones diff --git a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java -index db9444dda248260372d96ce239a590e88a4c1142..5824636332eb35ae6bee9cc0661ee95901bb8c4b 100644 +index 1678f6c8b2c7db761783e53043169bf12bc2cb29..5d47ffc3fd31930c7dd2f23bc0e6b7da513d1595 100644 --- a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java +++ b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java -@@ -130,7 +130,7 @@ public class GrindstoneMenu extends AbstractContainerMenu { - Enchantment enchantment = (Enchantment) ((Holder) entry.getKey()).value(); +@@ -131,7 +131,7 @@ public class GrindstoneMenu extends AbstractContainerMenu { + Holder holder = (Holder) entry.getKey(); int k = entry.getIntValue(); -- if (!enchantment.isCurse()) { -+ if (!org.purpurmc.purpur.PurpurConfig.grindstoneIgnoredEnchants.contains(enchantment)) { // Purpur - j += enchantment.getMinCost(k); +- if (!holder.is(EnchantmentTags.CURSE)) { ++ if (!org.purpurmc.purpur.PurpurConfig.grindstoneIgnoredEnchants.contains(holder.value())) { // Purpur + j += ((Enchantment) holder.value()).getMinCost(k); } } -@@ -229,7 +229,7 @@ public class GrindstoneMenu extends AbstractContainerMenu { +@@ -230,7 +230,7 @@ public class GrindstoneMenu extends AbstractContainerMenu { Entry> entry = (Entry) iterator.next(); - Enchantment enchantment = (Enchantment) ((Holder) entry.getKey()).value(); + Holder holder = (Holder) entry.getKey(); -- if (!enchantment.isCurse() || itemenchantments_a.getLevel(enchantment) == 0) { -+ if (!org.purpurmc.purpur.PurpurConfig.grindstoneIgnoredEnchants.contains(enchantment) || itemenchantments_a.getLevel(enchantment) == 0) { // Purpur - itemenchantments_a.upgrade(enchantment, entry.getIntValue()); +- if (!holder.is(EnchantmentTags.CURSE) || itemenchantments_a.getLevel(holder) == 0) { ++ if (!org.purpurmc.purpur.PurpurConfig.grindstoneIgnoredEnchants.contains(holder.value()) || itemenchantments_a.getLevel(holder) == 0) { // Purpur + itemenchantments_a.upgrade(holder, entry.getIntValue()); } } -@@ -237,10 +237,70 @@ public class GrindstoneMenu extends AbstractContainerMenu { +@@ -238,10 +238,70 @@ public class GrindstoneMenu extends AbstractContainerMenu { }); } @@ -93,12 +93,12 @@ index db9444dda248260372d96ce239a590e88a4c1142..5824636332eb35ae6bee9cc0661ee959 private ItemStack removeNonCursesFrom(ItemStack item) { ItemEnchantments itemenchantments = EnchantmentHelper.updateEnchantments(item, (itemenchantments_a) -> { itemenchantments_a.removeIf((holder) -> { -- return !((Enchantment) holder.value()).isCurse(); -+ return !org.purpurmc.purpur.PurpurConfig.grindstoneIgnoredEnchants.contains(holder.value()); +- return !holder.is(EnchantmentTags.CURSE); ++ return !org.purpurmc.purpur.PurpurConfig.grindstoneIgnoredEnchants.contains(holder.value()); // Purpur }); }); -@@ -255,6 +315,23 @@ public class GrindstoneMenu extends AbstractContainerMenu { +@@ -256,6 +316,23 @@ public class GrindstoneMenu extends AbstractContainerMenu { } item.set(DataComponents.REPAIR_COST, i); @@ -123,7 +123,7 @@ index db9444dda248260372d96ce239a590e88a4c1142..5824636332eb35ae6bee9cc0661ee959 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index b56afa30c04350b5e9ca4ea2d33f9e7c58559380..7f0a9a239791cfb1d721d24f907b89ae2dd4c64a 100644 +index c1e7dc324237eea16e88a1fc636d5bcdf49a2b0c..95fd67671ad690052f7d697ef11e327969af5ef8 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -309,6 +309,9 @@ public class PurpurConfig { @@ -155,4 +155,4 @@ index b56afa30c04350b5e9ca4ea2d33f9e7c58559380..7f0a9a239791cfb1d721d24f907b89ae + grindstoneRemoveDisplay = getBoolean("settings.blocks.grindstone.remove-name-and-lore", grindstoneRemoveDisplay); } - public static boolean allowInfinityMending = false; + public static boolean allowUnsafeEnchants = false; diff --git a/patches/unapplied-server/0212-UPnP-Port-Forwarding.patch b/patches/server/0202-UPnP-Port-Forwarding.patch similarity index 85% rename from patches/unapplied-server/0212-UPnP-Port-Forwarding.patch rename to patches/server/0202-UPnP-Port-Forwarding.patch index f42ce5f41..ce99d026d 100644 --- a/patches/unapplied-server/0212-UPnP-Port-Forwarding.patch +++ b/patches/server/0202-UPnP-Port-Forwarding.patch @@ -5,18 +5,18 @@ Subject: [PATCH] UPnP Port Forwarding diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 813b3a6c6de4f05e885ab864e8429818d8103acb..a8efb833d9efbc3367ddda1623ee1a0742cf3ea4 100644 +index fa6bf262da81837c7ff7b115a0a7b4a7f266037a..843d86bbb615d6257c143a3822a2af214af1a737 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -314,6 +314,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { + AtomicReference atomicreference = new AtomicReference(); +@@ -954,6 +955,14 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop()).forEach(key -> { -@@ -279,6 +282,9 @@ public class PurpurWorldConfig { +@@ -264,6 +267,9 @@ public class PurpurWorldConfig { glowBerriesEatGlowDuration = getInt("gameplay-mechanics.item.glow_berries.eat-glow-duration", glowBerriesEatGlowDuration); shulkerBoxItemDropContentsWhenDestroyed = getBoolean("gameplay-mechanics.item.shulker_box.drop-contents-when-destroyed", shulkerBoxItemDropContentsWhenDestroyed); compassItemShowsBossBar = getBoolean("gameplay-mechanics.item.compass.holding-shows-bossbar", compassItemShowsBossBar); diff --git a/patches/unapplied-server/0215-Add-option-to-disable-zombie-villagers-cure.patch b/patches/server/0205-Add-option-to-disable-zombie-villagers-cure.patch similarity index 87% rename from patches/unapplied-server/0215-Add-option-to-disable-zombie-villagers-cure.patch rename to patches/server/0205-Add-option-to-disable-zombie-villagers-cure.patch index 3f9fef356..b07932549 100644 --- a/patches/unapplied-server/0215-Add-option-to-disable-zombie-villagers-cure.patch +++ b/patches/server/0205-Add-option-to-disable-zombie-villagers-cure.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to disable zombie villagers cure 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 d909138942212ee090ff513b1817414c93457425..fe43c744cccdc07d5e449ce3ede85f4c7d898018 100644 +index 9bb75b49ea2d0bd8aafbe537b65f86eb04f6cfe2..612907fe87e46b5b13ed80635f203fa99948bf74 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -219,7 +219,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -222,7 +222,7 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { ItemStack itemstack = player.getItemInHand(hand); if (itemstack.is(Items.GOLDEN_APPLE)) { @@ -18,10 +18,10 @@ index d909138942212ee090ff513b1817414c93457425..fe43c744cccdc07d5e449ce3ede85f4c if (!this.level().isClientSide) { this.startConverting(player.getUUID(), this.random.nextInt(level().purpurConfig.zombieVillagerCuringTimeMax - level().purpurConfig.zombieVillagerCuringTimeMin + 1) + level().purpurConfig.zombieVillagerCuringTimeMin); // Purpur diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 89a02d8e24fb8519eea6d25d4f91cef197b2b3cb..2d514ebbde1f97276cbb33bed640ec6adfa4cb5a 100644 +index fef6e398874977f8502aa3f7c0a2db57def2796d..0b14c7d2aaa4dcc42a4c2207ce323e6d29475288 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2918,6 +2918,7 @@ public class PurpurWorldConfig { +@@ -2895,6 +2895,7 @@ public class PurpurWorldConfig { public boolean zombieVillagerTakeDamageFromWater = false; public int zombieVillagerCuringTimeMin = 3600; public int zombieVillagerCuringTimeMax = 6000; @@ -29,7 +29,7 @@ index 89a02d8e24fb8519eea6d25d4f91cef197b2b3cb..2d514ebbde1f97276cbb33bed640ec6a private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2935,6 +2936,7 @@ public class PurpurWorldConfig { +@@ -2912,6 +2913,7 @@ public class PurpurWorldConfig { zombieVillagerTakeDamageFromWater = getBoolean("mobs.zombie_villager.takes-damage-from-water", zombieVillagerTakeDamageFromWater); zombieVillagerCuringTimeMin = getInt("mobs.zombie_villager.curing_time.min", zombieVillagerCuringTimeMin); zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax); diff --git a/patches/unapplied-server/0216-Persistent-BlockEntity-Lore-and-DisplayName.patch b/patches/server/0206-Persistent-BlockEntity-Lore-and-DisplayName.patch similarity index 90% rename from patches/unapplied-server/0216-Persistent-BlockEntity-Lore-and-DisplayName.patch rename to patches/server/0206-Persistent-BlockEntity-Lore-and-DisplayName.patch index f76de1cf7..bf255f786 100644 --- a/patches/unapplied-server/0216-Persistent-BlockEntity-Lore-and-DisplayName.patch +++ b/patches/server/0206-Persistent-BlockEntity-Lore-and-DisplayName.patch @@ -29,10 +29,10 @@ index 2649188930653610b8aaaeb18797c80879cd572a..7572c289758001c7417a192f0e6e994f @Nullable 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 6f7e90d406b088fee0eb254f8042bd404d8f36fa..7ffe51eedc9d086424cf450026bdc260249864c4 100644 +index 1ef3b68d71c33ffb248a4b88fcfdc98a0360c4aa..73f2103b77795740690032084ecddc9c2a5b119e 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java -@@ -312,7 +312,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -311,7 +311,7 @@ public class Block extends BlockBehaviour implements ItemLike { public static void dropResources(BlockState state, LevelAccessor world, BlockPos pos, @Nullable BlockEntity blockEntity) { if (world instanceof ServerLevel) { Block.getDrops(state, (ServerLevel) world, pos, blockEntity).forEach((itemstack) -> { @@ -41,7 +41,7 @@ index 6f7e90d406b088fee0eb254f8042bd404d8f36fa..7ffe51eedc9d086424cf450026bdc260 }); state.spawnAfterBreak((ServerLevel) world, pos, ItemStack.EMPTY, true); } -@@ -331,7 +331,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -330,7 +330,7 @@ public class Block extends BlockBehaviour implements ItemLike { event.setExpToDrop(block.getExpDrop(state, serverLevel, pos, net.minecraft.world.item.ItemStack.EMPTY, true)); // Paper - Properly handle xp dropping event.callEvent(); for (org.bukkit.inventory.ItemStack drop : event.getDrops()) { @@ -50,7 +50,7 @@ index 6f7e90d406b088fee0eb254f8042bd404d8f36fa..7ffe51eedc9d086424cf450026bdc260 } state.spawnAfterBreak(serverLevel, pos, ItemStack.EMPTY, false); // Paper - Properly handle xp dropping block.popExperience(serverLevel, pos, event.getExpToDrop()); // Paper - Properly handle xp dropping -@@ -348,13 +348,32 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -347,13 +347,32 @@ public class Block extends BlockBehaviour implements ItemLike { // Paper end - Properly handle xp dropping if (world instanceof ServerLevel) { Block.getDrops(state, (ServerLevel) world, pos, blockEntity, entity, tool).forEach((itemstack1) -> { @@ -85,10 +85,10 @@ index 6f7e90d406b088fee0eb254f8042bd404d8f36fa..7ffe51eedc9d086424cf450026bdc260 double d0 = (double) EntityType.ITEM.getHeight() / 2.0D; double d1 = (double) pos.getX() + 0.5D + Mth.nextDouble(world.random, -0.25D, 0.25D); diff --git a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java -index 6349f2e0a5ba30d250f5ffe43771f325c0999a76..8dc1436fe78759cee5247cc28e8a18999e738a1b 100644 +index cd3b952a228c09077c2e74183a34ddb32811280b..3b2650c761d6c7790b26a4781a94b121246bec86 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java -@@ -87,6 +87,12 @@ public abstract class BlockEntity { +@@ -86,6 +86,12 @@ public abstract class BlockEntity { if (persistentDataTag instanceof CompoundTag) { this.persistentDataContainer.putAll((CompoundTag) persistentDataTag); } @@ -101,7 +101,7 @@ index 6349f2e0a5ba30d250f5ffe43771f325c0999a76..8dc1436fe78759cee5247cc28e8a1899 } // CraftBukkit end -@@ -103,6 +109,15 @@ public abstract class BlockEntity { +@@ -102,6 +108,15 @@ public abstract class BlockEntity { this.loadAdditional(nbt, registryLookup); } @@ -117,7 +117,7 @@ index 6349f2e0a5ba30d250f5ffe43771f325c0999a76..8dc1436fe78759cee5247cc28e8a1899 protected void saveAdditional(CompoundTag nbt, HolderLookup.Provider registryLookup) {} public final CompoundTag saveWithFullMetadata(HolderLookup.Provider registryLookup) { -@@ -407,4 +422,16 @@ public abstract class BlockEntity { +@@ -405,4 +420,16 @@ public abstract class BlockEntity { T getOrDefault(DataComponentType type, T fallback); } @@ -135,10 +135,10 @@ index 6349f2e0a5ba30d250f5ffe43771f325c0999a76..8dc1436fe78759cee5247cc28e8a1899 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8d4c3c4a06d40841e8446485364393e36e686fdd..abe3614f2286db8945bc6c4eadd01ec8a7f93555 100644 +index 0b14c7d2aaa4dcc42a4c2207ce323e6d29475288..7fc42ce536d08e870addbea61d8ce933ef4f9fc2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -130,6 +130,8 @@ public class PurpurWorldConfig { +@@ -128,6 +128,8 @@ public class PurpurWorldConfig { public boolean milkCuresBadOmen = true; public boolean noteBlockIgnoreAbove = false; public boolean persistentDroppableEntityDisplayNames = true; @@ -147,8 +147,8 @@ index 8d4c3c4a06d40841e8446485364393e36e686fdd..abe3614f2286db8945bc6c4eadd01ec8 public boolean projectilesBypassMobGriefing = false; public boolean tickFluids = true; public double mobsBlindnessMultiplier = 1; -@@ -153,6 +155,14 @@ public class PurpurWorldConfig { - imposeTeleportRestrictionsOnGateways = getBoolean("gameplay-mechanics.impose-teleport-restrictions-on-gateways", imposeTeleportRestrictionsOnGateways); +@@ -149,6 +151,14 @@ public class PurpurWorldConfig { + fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); noteBlockIgnoreAbove = getBoolean("gameplay-mechanics.note-block-ignore-above", noteBlockIgnoreAbove); + if (PurpurConfig.version < 35) { diff --git a/patches/unapplied-server/0217-Signs-allow-color-codes.patch b/patches/server/0207-Signs-allow-color-codes.patch similarity index 95% rename from patches/unapplied-server/0217-Signs-allow-color-codes.patch rename to patches/server/0207-Signs-allow-color-codes.patch index 99be6c994..b745a7cbd 100644 --- a/patches/unapplied-server/0217-Signs-allow-color-codes.patch +++ b/patches/server/0207-Signs-allow-color-codes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Signs allow color codes diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 03a1eceaed065b7f33d830414136ed3c07c2034c..a5566e52d839191add236a6ff7245d1b7617fc37 100644 +index 3dff1bb3a847cf121155b815cd9b6491b50029c5..30e642f51bbaae3a96c714a99dda43ca60cc374c 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1684,6 +1684,7 @@ public class ServerPlayer extends Player { +@@ -1671,6 +1671,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player { @Override public void openTextEdit(SignBlockEntity sign, boolean front) { @@ -84,10 +84,10 @@ index a28be7a332659be655f419d969e0c64e659b6c21..8cd812a25b1cc05ea14675658bf9c150 public ClientboundBlockEntityDataPacket getUpdatePacket() { return ClientboundBlockEntityDataPacket.create(this); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1474de310551a68d2c14980f6076381c66a46f85..7c46618ae3934646a2badb94872ad12ad7b020d8 100644 +index 7fc42ce536d08e870addbea61d8ce933ef4f9fc2..2c7ff15022e75fc14f9087282b17a6abc0e3690c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1041,6 +1041,11 @@ public class PurpurWorldConfig { +@@ -1022,6 +1022,11 @@ public class PurpurWorldConfig { } } diff --git a/patches/unapplied-server/0218-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch b/patches/server/0208-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch similarity index 98% rename from patches/unapplied-server/0218-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch rename to patches/server/0208-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch index 68ed8eff9..b8d159530 100644 --- a/patches/unapplied-server/0218-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch +++ b/patches/server/0208-Kelp-cave-weeping-and-twisting-vines-configurable-ma.patch @@ -135,7 +135,7 @@ index 3dec5a082606ee35a8c8d7f746480262d6a189c5..b2f6ccae9576c176263e51a232e17a08 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index f79d0e3907dd89ff0abf8220392bb4e23cf9003e..9ded52a0022e33a6b69191b5fa758d6cc7eb076f 100644 +index d1e825e11727a6923ffd9a524dadde3ed9436821..a44abb0b8d9a1a8222e6a198ab9c190558ec54fd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -312,6 +312,10 @@ public class PurpurConfig { @@ -179,4 +179,4 @@ index f79d0e3907dd89ff0abf8220392bb4e23cf9003e..9ded52a0022e33a6b69191b5fa758d6c + } } - public static boolean allowInfinityMending = false; + public static boolean allowUnsafeEnchants = false; diff --git a/patches/unapplied-server/0219-Mobs-always-drop-experience.patch b/patches/server/0209-Mobs-always-drop-experience.patch similarity index 88% rename from patches/unapplied-server/0219-Mobs-always-drop-experience.patch rename to patches/server/0209-Mobs-always-drop-experience.patch index 55192c189..e4770edfd 100644 --- a/patches/unapplied-server/0219-Mobs-always-drop-experience.patch +++ b/patches/server/0209-Mobs-always-drop-experience.patch @@ -37,10 +37,10 @@ index a50d58240c58a0fea4ae8fc24689870807103199..47a7c7f9527e1c4ea457eeafe0e11145 public void readAdditionalSaveData(CompoundTag nbt) { super.readAdditionalSaveData(nbt); 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 91c013f7ab58f570d0ebe2773932fcdb49344b3c..926c30db9b28a30fe5d6c8d20f3972dec0d7b4d0 100644 +index 26c2473f9cbcaaeefd5e1a60a62bd6e77faf6709..ca56f5781c1c02e40179a4dd359c5d167d3160dc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -482,6 +482,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -493,6 +493,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { return this.level().purpurConfig.beeTakeDamageFromWater; } @@ -53,10 +53,10 @@ index 91c013f7ab58f570d0ebe2773932fcdb49344b3c..926c30db9b28a30fe5d6c8d20f3972de public int getRemainingPersistentAngerTime() { return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 17aaeb734a5c1b16bd7771c909958f3acc956b7a..3e1345f1c534320e07820d573f5c8dba49746425 100644 +index 613235f547adc5be69f5a144aee67a2e09970520..80c67e2eb79f47fec6cd9456f691ea03fec361dd 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -144,6 +144,11 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -149,10 +149,10 @@ index 5807a498b910ad96d7e6f69db5241c925dcdb97c..80f897007a60eb0cb9d300207b50387e protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); 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 8b08476457a6ead1a3c3e2ab35d08a8e0625c43e..12bc57d36d76f49596df0004fda31a6a678be60c 100644 +index 08bdfdecf5c1ecff823ece44c0bef9d09286459a..ec6d5dd532968b02a7f12c832eb896600b3ff2aa 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -@@ -98,6 +98,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { +@@ -99,6 +99,11 @@ public class IronGolem extends AbstractGolem implements NeutralMob { this.summoner = summoner; } @@ -181,7 +181,7 @@ index 6cb8d85986f4d891dfbb66b83163ed23bac694f6..06fac8dae42451f912c2db14d792461c public float getWalkTargetValue(BlockPos pos, LevelReader world) { return world.getBlockState(pos.below()).is(Blocks.MYCELIUM) ? 10.0F : world.getPathfindingCostFromLightLevels(pos); diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index a1b7661ae0676007d59d202493efc5a0c795045f..5668aca08732e317c7bccacf1cfaae7d8666bce6 100644 +index b94f65a1f83159be0f15eba49df8854686bcc069..e09ca4aa99f2e58f97159a40e33ed863fa2ae7df 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java @@ -98,6 +98,11 @@ public class Ocelot extends Animal { @@ -197,10 +197,10 @@ index a1b7661ae0676007d59d202493efc5a0c795045f..5668aca08732e317c7bccacf1cfaae7d return (Boolean) this.entityData.get(Ocelot.DATA_TRUSTING); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java -index 4895bd2566605ab3986f35d43345f29ce78e81e0..7bd81d073ce4a8d5981f256415d3e99e13da79ba 100644 +index 6ea8ecf8672b71533c9b979a3d46bd947fbc4b73..a27f33b7bbf7f7d5cfb3dbb0bf5b93a66551d493 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Panda.java +++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java -@@ -162,6 +162,11 @@ public class Panda extends Animal { +@@ -163,6 +163,11 @@ public class Panda extends Animal { return this.level().purpurConfig.pandaTakeDamageFromWater; } @@ -211,9 +211,9 @@ index 4895bd2566605ab3986f35d43345f29ce78e81e0..7bd81d073ce4a8d5981f256415d3e99e + @Override public boolean canTakeItem(ItemStack stack) { - EquipmentSlot enumitemslot = Mob.getEquipmentSlotForItem(stack); + EquipmentSlot enumitemslot = this.getEquipmentSlotForItem(stack); diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index 65be3dd9bc6994cac828ed45b74a577b65b7118a..b8c69414b734eecb7412fab8ae6996712307da70 100644 +index e486b3a73277582bc9c63b6f8ed4dfd995e34cb9..2cd961e4831bc018c46f929b302ebe7e5932637e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -201,6 +201,11 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { +@@ -155,6 +155,11 @@ public class Rabbit extends Animal implements VariantHolder { public boolean isSensitiveToWater() { return this.level().purpurConfig.rabbitTakeDamageFromWater; } @@ -309,10 +309,10 @@ index e101c3bf425902908c43ffa18867fb83a5e1f16e..382e47f26ee94506cb76463a677351b9 public int getMaxSchoolSize() { return 5; diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index afec39ba3b51b121fd7ae937e7bac060ef430dfd..9e617b3f1ec4eac5f83bdf19a3563cdc81b008d8 100644 +index c7c1ab91d761113d307332491cf5d05e5d5b5bf7..a3d0991dcf570a009c5404ddbd7118895dc18c9d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -149,6 +149,11 @@ public class Sheep extends Animal implements Shearable { +@@ -147,6 +147,11 @@ public class Sheep extends Animal implements Shearable { return this.level().purpurConfig.sheepTakeDamageFromWater; } @@ -341,10 +341,10 @@ index 8f2348a7fe830a85985ce2b19cb2a9159bca711f..69cdccca01fe7d10e6d958e16d91efe0 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 0d05879eadeff8731028d78d89d5d32142818ea2..b86676ebcd6c301e5dd857d8e84e1db2c1da416b 100644 +index 7092070b8f540ad34b92ac6d4fc9feaca4bd296d..b9c8fe36c6a6256097ea69383bef678bbfb6c45b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -93,6 +93,11 @@ public class Squid extends WaterAnimal { +@@ -92,6 +92,11 @@ public class Squid extends WaterAnimal { return this.level().purpurConfig.squidTakeDamageFromWater; } @@ -373,7 +373,7 @@ index 4ac998e9d96aed3b0ea0ec3f9dcd5fdd74c45d24..2d04addd17d2c358fff598012b323cd7 return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index b146ac72584d998cee4279133b3b19051fbf14c9..01dc59695f295657b1cd7bb015558bfc2ce73b47 100644 +index 6994c78b1a9229124b8d36468cd2beab914780ef..edd1114604c089a8b3a85e530e0254d4695dc9c4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java @@ -119,6 +119,11 @@ public class Turtle extends Animal { @@ -386,13 +386,13 @@ index b146ac72584d998cee4279133b3b19051fbf14c9..01dc59695f295657b1cd7bb015558bfc + } + public void setHomePos(BlockPos pos) { - this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... + this.entityData.set(Turtle.HOME_POS, pos); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 88f34f29f3d18fa0e3ba1ae1d7d983c66609c207..a8193ef23763a11016b9ac8c7dd55b9e240d6039 100644 +index ca8b7dcd2a93b41dfd22f6f112dcac1bf3530061..865640831c988192adc937cb0cad4c7e241b1540 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -222,6 +222,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder { +@@ -77,6 +77,11 @@ public class Horse extends AbstractHorse implements VariantHolder { return this.level().purpurConfig.horseTakeDamageFromWater; } @@ -469,7 +469,7 @@ index e623284b353831d1a540af40e139ac16091dcbf6..fdf9ec418b0fc567e286ac79dbdbedda protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -index 6f744c07d01d5e01dda5aa5cdcf9a29f883ad28a..f452e18829e2b05cf742a4239cba293263b3a88a 100644 +index 8edfc34a17d8c05cfa2928738306c1abc1743cc5..7714d7f74836e5a765867fa0339c41fdce703863 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java @@ -151,6 +151,11 @@ public class Llama extends AbstractChestedHorse implements VariantHolder(this, AbstractPiglin.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -index 76d47ba17dd140572a0be40dfda18c24851198bb..451762b3cd023b8c5828f68e2778aada9c50ab85 100644 +index 5027fc69d6a32474a6bfa1fd2b567996647ec172..541acd5d2208b64977f33049cc0cbd9f8c136ccb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -@@ -107,6 +107,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { +@@ -106,6 +106,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { return this.level().purpurConfig.zoglinTakeDamageFromWater; } @@ -1029,10 +1029,10 @@ index 76d47ba17dd140572a0be40dfda18c24851198bb..451762b3cd023b8c5828f68e2778aada protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); 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 d5a5e51e23328deac09d6990539d8207b1567912..d48d22157a89f98c1bbabc70b0bb31187038176d 100644 +index fc6914d459b1985a2cba0f963a7d79ebaa0aed58..022a3873179c44557bee631c0afe09e9f9882e1b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -144,6 +144,11 @@ public class Zombie extends Monster { +@@ -148,6 +148,11 @@ public class Zombie extends Monster { return this.level().purpurConfig.zombieTakeDamageFromWater; } @@ -1045,10 +1045,10 @@ index d5a5e51e23328deac09d6990539d8207b1567912..d48d22157a89f98c1bbabc70b0bb3118 protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur 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 fe43c744cccdc07d5e449ce3ede85f4c7d898018..091095d1690bdd4d0870910b19e5e4ee3a3f9e7c 100644 +index 612907fe87e46b5b13ed80635f203fa99948bf74..5ead916772c21d8db98e389984d531aae7f59700 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -127,6 +127,11 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -130,6 +130,11 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { return level().purpurConfig.zombieVillagerJockeyTryExistingChickens; } @@ -1061,10 +1061,10 @@ index fe43c744cccdc07d5e449ce3ede85f4c7d898018..091095d1690bdd4d0870910b19e5e4ee protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index bd2953448e568b1a20bcc6a889cef83b88418548..5bae3215ee0bf222c3bd77b3131f3d01ac6c9c41 100644 +index baa2bedb4c7f2c05df333ac1ff9222b5c6674a10..727ee00adf344e17118d8d61161202664afa4dc2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -104,6 +104,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -105,6 +105,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { return level().purpurConfig.zombifiedPiglinJockeyTryExistingChickens; } @@ -1077,7 +1077,7 @@ index bd2953448e568b1a20bcc6a889cef83b88418548..5bae3215ee0bf222c3bd77b3131f3d01 public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 9ca294d5177ec7d541433d644d2fb90d937b011c..a69a4d860cf537322cdf96bfd42e55d3fc684dd1 100644 +index 26af55acfdeee25f64295f50eec9a0ea0b76c58d..9fcdc3dc71240450b983a071e21f24d497aa06e6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java @@ -122,6 +122,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -1090,13 +1090,13 @@ index 9ca294d5177ec7d541433d644d2fb90d937b011c..a69a4d860cf537322cdf96bfd42e55d3 + } + @Override - public boolean canBeLeashed(Player player) { - return !this.isLeashed(); + public boolean canBeLeashed() { + return true; diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index e5b24bd8e31ca5748185181bb6741760c86a92a1..811b622945ecf67cff1992c3cdd4fcd84f33fb68 100644 +index c397ff495930ee1b7f6479ea060c116e92e03801..eb0deccb2f39dbe5ad47c689b0858b69fc08782f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -@@ -121,6 +121,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -120,6 +120,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento return this.level().purpurConfig.piglinTakeDamageFromWater; } @@ -1125,10 +1125,10 @@ index 6c7e0f177382cb6329002dcde270f6ce51f08f9f..71d2501e88a99819ef305fa8715418aa return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0).add(Attributes.MOVEMENT_SPEED, 0.35F).add(Attributes.ATTACK_DAMAGE, 7.0); } 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 1bace0d549ea4a4b45ac4cd1409524989ecac4ca..17a247455dd853ae98e2f82f64a99bccc4d27438 100644 +index c40070cf6654ebd7efb83c108efd29a5670ac234..d78e6b3dd97973589c1d1c666164960d28c26ec8 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -194,6 +194,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -189,6 +189,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return this.level().purpurConfig.villagerTakeDamageFromWater; } @@ -1141,10 +1141,10 @@ index 1bace0d549ea4a4b45ac4cd1409524989ecac4ca..17a247455dd853ae98e2f82f64a99bcc public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -index 0d11200ab580cc306602c29c61f7619565d8261d..62f5e5cfe5745deced2811d14d0c7ebb2c2c6948 100644 +index ac95d5acc275d69d2b420173540d7ddb64b6d711..1313844a719befa96d4d8ab23505e89e8c4df2fd 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -103,6 +103,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -98,6 +98,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill return this.level().purpurConfig.wanderingTraderTakeDamageFromWater; } @@ -1157,10 +1157,10 @@ index 0d11200ab580cc306602c29c61f7619565d8261d..62f5e5cfe5745deced2811d14d0c7ebb protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522114d29e3 100644 +index 2c7ff15022e75fc14f9087282b17a6abc0e3690c..85923289e2e66f4d33e77089f06f5b3985a83d6e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1121,12 +1121,14 @@ public class PurpurWorldConfig { +@@ -1102,12 +1102,14 @@ public class PurpurWorldConfig { public double axolotlMaxHealth = 14.0D; public int axolotlBreedingTicks = 6000; public boolean axolotlTakeDamageFromWater = false; @@ -1175,7 +1175,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean batRidable = false; -@@ -1142,6 +1144,7 @@ public class PurpurWorldConfig { +@@ -1123,6 +1125,7 @@ public class PurpurWorldConfig { public double batArmorToughness = 0.0D; public double batAttackKnockback = 0.0D; public boolean batTakeDamageFromWater = false; @@ -1183,7 +1183,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void batSettings() { batRidable = getBoolean("mobs.bat.ridable", batRidable); batRidableInWater = getBoolean("mobs.bat.ridable-in-water", batRidableInWater); -@@ -1161,6 +1164,7 @@ public class PurpurWorldConfig { +@@ -1142,6 +1145,7 @@ public class PurpurWorldConfig { batArmorToughness = getDouble("mobs.bat.attributes.armor_toughness", batArmorToughness); batAttackKnockback = getDouble("mobs.bat.attributes.attack_knockback", batAttackKnockback); batTakeDamageFromWater = getBoolean("mobs.bat.takes-damage-from-water", batTakeDamageFromWater); @@ -1191,7 +1191,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean beeRidable = false; -@@ -1172,6 +1176,7 @@ public class PurpurWorldConfig { +@@ -1153,6 +1157,7 @@ public class PurpurWorldConfig { public boolean beeTakeDamageFromWater = false; public boolean beeCanWorkAtNight = false; public boolean beeCanWorkInRain = false; @@ -1199,7 +1199,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -1187,6 +1192,7 @@ public class PurpurWorldConfig { +@@ -1168,6 +1173,7 @@ public class PurpurWorldConfig { beeTakeDamageFromWater = getBoolean("mobs.bee.takes-damage-from-water", beeTakeDamageFromWater); beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight); beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain); @@ -1207,7 +1207,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean blazeRidable = false; -@@ -1195,6 +1201,7 @@ public class PurpurWorldConfig { +@@ -1176,6 +1182,7 @@ public class PurpurWorldConfig { public double blazeMaxY = 320D; public double blazeMaxHealth = 20.0D; public boolean blazeTakeDamageFromWater = true; @@ -1215,7 +1215,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void blazeSettings() { blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); -@@ -1207,6 +1214,7 @@ public class PurpurWorldConfig { +@@ -1188,6 +1195,7 @@ public class PurpurWorldConfig { } blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); blazeTakeDamageFromWater = getBoolean("mobs.blaze.takes-damage-from-water", blazeTakeDamageFromWater); @@ -1223,7 +1223,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean boggedRidable = false; -@@ -1249,6 +1257,7 @@ public class PurpurWorldConfig { +@@ -1230,6 +1238,7 @@ public class PurpurWorldConfig { public int catBreedingTicks = 6000; public DyeColor catDefaultCollarColor = DyeColor.RED; public boolean catTakeDamageFromWater = false; @@ -1231,7 +1231,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -1269,6 +1278,7 @@ public class PurpurWorldConfig { +@@ -1250,6 +1259,7 @@ public class PurpurWorldConfig { catDefaultCollarColor = DyeColor.RED; } catTakeDamageFromWater = getBoolean("mobs.cat.takes-damage-from-water", catTakeDamageFromWater); @@ -1239,7 +1239,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean caveSpiderRidable = false; -@@ -1276,6 +1286,7 @@ public class PurpurWorldConfig { +@@ -1257,6 +1267,7 @@ public class PurpurWorldConfig { public boolean caveSpiderControllable = true; public double caveSpiderMaxHealth = 12.0D; public boolean caveSpiderTakeDamageFromWater = false; @@ -1247,7 +1247,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void caveSpiderSettings() { caveSpiderRidable = getBoolean("mobs.cave_spider.ridable", caveSpiderRidable); caveSpiderRidableInWater = getBoolean("mobs.cave_spider.ridable-in-water", caveSpiderRidableInWater); -@@ -1287,6 +1298,7 @@ public class PurpurWorldConfig { +@@ -1268,6 +1279,7 @@ public class PurpurWorldConfig { } caveSpiderMaxHealth = getDouble("mobs.cave_spider.attributes.max_health", caveSpiderMaxHealth); caveSpiderTakeDamageFromWater = getBoolean("mobs.cave_spider.takes-damage-from-water", caveSpiderTakeDamageFromWater); @@ -1255,7 +1255,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean chickenRidable = false; -@@ -1296,6 +1308,7 @@ public class PurpurWorldConfig { +@@ -1277,6 +1289,7 @@ public class PurpurWorldConfig { public boolean chickenRetaliate = false; public int chickenBreedingTicks = 6000; public boolean chickenTakeDamageFromWater = false; @@ -1263,7 +1263,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -1309,12 +1322,14 @@ public class PurpurWorldConfig { +@@ -1290,12 +1303,14 @@ public class PurpurWorldConfig { chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); chickenBreedingTicks = getInt("mobs.chicken.breeding-delay-ticks", chickenBreedingTicks); chickenTakeDamageFromWater = getBoolean("mobs.chicken.takes-damage-from-water", chickenTakeDamageFromWater); @@ -1278,7 +1278,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void codSettings() { codRidable = getBoolean("mobs.cod.ridable", codRidable); codControllable = getBoolean("mobs.cod.controllable", codControllable); -@@ -1325,6 +1340,7 @@ public class PurpurWorldConfig { +@@ -1306,6 +1321,7 @@ public class PurpurWorldConfig { } codMaxHealth = getDouble("mobs.cod.attributes.max_health", codMaxHealth); codTakeDamageFromWater = getBoolean("mobs.cod.takes-damage-from-water", codTakeDamageFromWater); @@ -1286,7 +1286,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean cowRidable = false; -@@ -1336,6 +1352,7 @@ public class PurpurWorldConfig { +@@ -1317,6 +1333,7 @@ public class PurpurWorldConfig { public boolean cowTakeDamageFromWater = false; public double cowNaturallyAggressiveToPlayersChance = 0.0D; public double cowNaturallyAggressiveToPlayersDamage = 2.0D; @@ -1294,7 +1294,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void cowSettings() { if (PurpurConfig.version < 22) { double oldValue = getDouble("mobs.cow.naturally-aggressive-to-players-chance", cowNaturallyAggressiveToPlayersChance); -@@ -1356,6 +1373,7 @@ public class PurpurWorldConfig { +@@ -1337,6 +1354,7 @@ public class PurpurWorldConfig { cowTakeDamageFromWater = getBoolean("mobs.cow.takes-damage-from-water", cowTakeDamageFromWater); cowNaturallyAggressiveToPlayersChance = getDouble("mobs.cow.naturally-aggressive-to-players.chance", cowNaturallyAggressiveToPlayersChance); cowNaturallyAggressiveToPlayersDamage = getDouble("mobs.cow.naturally-aggressive-to-players.damage", cowNaturallyAggressiveToPlayersDamage); @@ -1302,7 +1302,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean creeperRidable = false; -@@ -1368,6 +1386,7 @@ public class PurpurWorldConfig { +@@ -1349,6 +1367,7 @@ public class PurpurWorldConfig { public boolean creeperTakeDamageFromWater = false; public boolean creeperExplodeWhenKilled = false; public boolean creeperHealthRadius = false; @@ -1310,7 +1310,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1384,6 +1403,7 @@ public class PurpurWorldConfig { +@@ -1365,6 +1384,7 @@ public class PurpurWorldConfig { creeperTakeDamageFromWater = getBoolean("mobs.creeper.takes-damage-from-water", creeperTakeDamageFromWater); creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); @@ -1318,7 +1318,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean dolphinRidable = false; -@@ -1395,6 +1415,7 @@ public class PurpurWorldConfig { +@@ -1376,6 +1396,7 @@ public class PurpurWorldConfig { public boolean dolphinDisableTreasureSearching = false; public boolean dolphinTakeDamageFromWater = false; public double dolphinNaturallyAggressiveToPlayersChance = 0.0D; @@ -1326,7 +1326,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -1410,6 +1431,7 @@ public class PurpurWorldConfig { +@@ -1391,6 +1412,7 @@ public class PurpurWorldConfig { dolphinDisableTreasureSearching = getBoolean("mobs.dolphin.disable-treasure-searching", dolphinDisableTreasureSearching); dolphinTakeDamageFromWater = getBoolean("mobs.dolphin.takes-damage-from-water", dolphinTakeDamageFromWater); dolphinNaturallyAggressiveToPlayersChance = getDouble("mobs.dolphin.naturally-aggressive-to-players-chance", dolphinNaturallyAggressiveToPlayersChance); @@ -1334,7 +1334,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean donkeyRidableInWater = false; -@@ -1421,6 +1443,7 @@ public class PurpurWorldConfig { +@@ -1402,6 +1424,7 @@ public class PurpurWorldConfig { public double donkeyMovementSpeedMax = 0.175D; public int donkeyBreedingTicks = 6000; public boolean donkeyTakeDamageFromWater = false; @@ -1342,7 +1342,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void donkeySettings() { donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); if (PurpurConfig.version < 10) { -@@ -1438,6 +1461,7 @@ public class PurpurWorldConfig { +@@ -1419,6 +1442,7 @@ public class PurpurWorldConfig { donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax); donkeyBreedingTicks = getInt("mobs.donkey.breeding-delay-ticks", donkeyBreedingTicks); donkeyTakeDamageFromWater = getBoolean("mobs.donkey.takes-damage-from-water", donkeyTakeDamageFromWater); @@ -1350,7 +1350,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean drownedRidable = false; -@@ -1450,6 +1474,7 @@ public class PurpurWorldConfig { +@@ -1431,6 +1455,7 @@ public class PurpurWorldConfig { public boolean drownedJockeyTryExistingChickens = true; public boolean drownedTakeDamageFromWater = false; public boolean drownedBreakDoors = false; @@ -1358,7 +1358,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -1466,12 +1491,14 @@ public class PurpurWorldConfig { +@@ -1447,12 +1472,14 @@ public class PurpurWorldConfig { drownedJockeyTryExistingChickens = getBoolean("mobs.drowned.jockey.try-existing-chickens", drownedJockeyTryExistingChickens); drownedTakeDamageFromWater = getBoolean("mobs.drowned.takes-damage-from-water", drownedTakeDamageFromWater); drownedBreakDoors = getBoolean("mobs.drowned.can-break-doors", drownedBreakDoors); @@ -1373,7 +1373,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void elderGuardianSettings() { elderGuardianRidable = getBoolean("mobs.elder_guardian.ridable", elderGuardianRidable); elderGuardianControllable = getBoolean("mobs.elder_guardian.controllable", elderGuardianControllable); -@@ -1482,6 +1509,7 @@ public class PurpurWorldConfig { +@@ -1463,6 +1490,7 @@ public class PurpurWorldConfig { } elderGuardianMaxHealth = getDouble("mobs.elder_guardian.attributes.max_health", elderGuardianMaxHealth); elderGuardianTakeDamageFromWater = getBoolean("mobs.elder_guardian.takes-damage-from-water", elderGuardianTakeDamageFromWater); @@ -1381,7 +1381,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean enderDragonRidable = false; -@@ -1527,6 +1555,7 @@ public class PurpurWorldConfig { +@@ -1508,6 +1536,7 @@ public class PurpurWorldConfig { public boolean endermanIgnorePlayerDragonHead = false; public boolean endermanDisableStareAggro = false; public boolean endermanIgnoreProjectiles = false; @@ -1389,7 +1389,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -1550,6 +1579,7 @@ public class PurpurWorldConfig { +@@ -1531,6 +1560,7 @@ public class PurpurWorldConfig { endermanIgnorePlayerDragonHead = getBoolean("mobs.enderman.ignore-players-wearing-dragon-head", endermanIgnorePlayerDragonHead); endermanDisableStareAggro = getBoolean("mobs.enderman.disable-player-stare-aggression", endermanDisableStareAggro); endermanIgnoreProjectiles = getBoolean("mobs.enderman.ignore-projectiles", endermanIgnoreProjectiles); @@ -1397,7 +1397,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean endermiteRidable = false; -@@ -1557,6 +1587,7 @@ public class PurpurWorldConfig { +@@ -1538,6 +1568,7 @@ public class PurpurWorldConfig { public boolean endermiteControllable = true; public double endermiteMaxHealth = 8.0D; public boolean endermiteTakeDamageFromWater = false; @@ -1405,7 +1405,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void endermiteSettings() { endermiteRidable = getBoolean("mobs.endermite.ridable", endermiteRidable); endermiteRidableInWater = getBoolean("mobs.endermite.ridable-in-water", endermiteRidableInWater); -@@ -1568,6 +1599,7 @@ public class PurpurWorldConfig { +@@ -1549,6 +1580,7 @@ public class PurpurWorldConfig { } endermiteMaxHealth = getDouble("mobs.endermite.attributes.max_health", endermiteMaxHealth); endermiteTakeDamageFromWater = getBoolean("mobs.endermite.takes-damage-from-water", endermiteTakeDamageFromWater); @@ -1413,7 +1413,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean evokerRidable = false; -@@ -1576,6 +1608,7 @@ public class PurpurWorldConfig { +@@ -1557,6 +1589,7 @@ public class PurpurWorldConfig { public double evokerMaxHealth = 24.0D; public boolean evokerBypassMobGriefing = false; public boolean evokerTakeDamageFromWater = false; @@ -1421,7 +1421,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void evokerSettings() { evokerRidable = getBoolean("mobs.evoker.ridable", evokerRidable); evokerRidableInWater = getBoolean("mobs.evoker.ridable-in-water", evokerRidableInWater); -@@ -1588,6 +1621,7 @@ public class PurpurWorldConfig { +@@ -1569,6 +1602,7 @@ public class PurpurWorldConfig { evokerMaxHealth = getDouble("mobs.evoker.attributes.max_health", evokerMaxHealth); evokerBypassMobGriefing = getBoolean("mobs.evoker.bypass-mob-griefing", evokerBypassMobGriefing); evokerTakeDamageFromWater = getBoolean("mobs.evoker.takes-damage-from-water", evokerTakeDamageFromWater); @@ -1429,7 +1429,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean foxRidable = false; -@@ -1598,6 +1632,7 @@ public class PurpurWorldConfig { +@@ -1579,6 +1613,7 @@ public class PurpurWorldConfig { public int foxBreedingTicks = 6000; public boolean foxBypassMobGriefing = false; public boolean foxTakeDamageFromWater = false; @@ -1437,7 +1437,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -1612,6 +1647,7 @@ public class PurpurWorldConfig { +@@ -1593,6 +1628,7 @@ public class PurpurWorldConfig { foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); foxBypassMobGriefing = getBoolean("mobs.fox.bypass-mob-griefing", foxBypassMobGriefing); foxTakeDamageFromWater = getBoolean("mobs.fox.takes-damage-from-water", foxTakeDamageFromWater); @@ -1445,7 +1445,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean frogRidable = false; -@@ -1633,6 +1669,7 @@ public class PurpurWorldConfig { +@@ -1614,6 +1650,7 @@ public class PurpurWorldConfig { public double ghastMaxY = 320D; public double ghastMaxHealth = 10.0D; public boolean ghastTakeDamageFromWater = false; @@ -1453,7 +1453,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void ghastSettings() { ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable); ghastRidableInWater = getBoolean("mobs.ghast.ridable-in-water", ghastRidableInWater); -@@ -1645,6 +1682,7 @@ public class PurpurWorldConfig { +@@ -1626,6 +1663,7 @@ public class PurpurWorldConfig { } ghastMaxHealth = getDouble("mobs.ghast.attributes.max_health", ghastMaxHealth); ghastTakeDamageFromWater = getBoolean("mobs.ghast.takes-damage-from-water", ghastTakeDamageFromWater); @@ -1461,7 +1461,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean giantRidable = false; -@@ -1658,6 +1696,7 @@ public class PurpurWorldConfig { +@@ -1639,6 +1677,7 @@ public class PurpurWorldConfig { public boolean giantHaveAI = false; public boolean giantHaveHostileAI = false; public boolean giantTakeDamageFromWater = false; @@ -1469,7 +1469,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void giantSettings() { giantRidable = getBoolean("mobs.giant.ridable", giantRidable); giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -1679,6 +1718,7 @@ public class PurpurWorldConfig { +@@ -1660,6 +1699,7 @@ public class PurpurWorldConfig { giantHaveAI = getBoolean("mobs.giant.have-ai", giantHaveAI); giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI); giantTakeDamageFromWater = getBoolean("mobs.giant.takes-damage-from-water", giantTakeDamageFromWater); @@ -1477,7 +1477,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean glowSquidRidable = false; -@@ -1686,12 +1726,14 @@ public class PurpurWorldConfig { +@@ -1667,12 +1707,14 @@ public class PurpurWorldConfig { public double glowSquidMaxHealth = 10.0D; public boolean glowSquidsCanFly = false; public boolean glowSquidTakeDamageFromWater = false; @@ -1492,7 +1492,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean goatRidable = false; -@@ -1700,6 +1742,7 @@ public class PurpurWorldConfig { +@@ -1681,6 +1723,7 @@ public class PurpurWorldConfig { public double goatMaxHealth = 10.0D; public int goatBreedingTicks = 6000; public boolean goatTakeDamageFromWater = false; @@ -1500,7 +1500,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void goatSettings() { goatRidable = getBoolean("mobs.goat.ridable", goatRidable); goatRidableInWater = getBoolean("mobs.goat.ridable-in-water", goatRidableInWater); -@@ -1707,12 +1750,14 @@ public class PurpurWorldConfig { +@@ -1688,12 +1731,14 @@ public class PurpurWorldConfig { goatMaxHealth = getDouble("mobs.goat.attributes.max_health", goatMaxHealth); goatBreedingTicks = getInt("mobs.goat.breeding-delay-ticks", goatBreedingTicks); goatTakeDamageFromWater = getBoolean("mobs.goat.takes-damage-from-water", goatTakeDamageFromWater); @@ -1515,7 +1515,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void guardianSettings() { guardianRidable = getBoolean("mobs.guardian.ridable", guardianRidable); guardianControllable = getBoolean("mobs.guardian.controllable", guardianControllable); -@@ -1723,6 +1768,7 @@ public class PurpurWorldConfig { +@@ -1704,6 +1749,7 @@ public class PurpurWorldConfig { } guardianMaxHealth = getDouble("mobs.guardian.attributes.max_health", guardianMaxHealth); guardianTakeDamageFromWater = getBoolean("mobs.guardian.takes-damage-from-water", guardianTakeDamageFromWater); @@ -1523,7 +1523,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean forceHalloweenSeason = false; -@@ -1738,6 +1784,7 @@ public class PurpurWorldConfig { +@@ -1719,6 +1765,7 @@ public class PurpurWorldConfig { public double hoglinMaxHealth = 40.0D; public int hoglinBreedingTicks = 6000; public boolean hoglinTakeDamageFromWater = false; @@ -1531,7 +1531,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void hoglinSettings() { hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -1750,6 +1797,7 @@ public class PurpurWorldConfig { +@@ -1731,6 +1778,7 @@ public class PurpurWorldConfig { hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); hoglinBreedingTicks = getInt("mobs.hoglin.breeding-delay-ticks", hoglinBreedingTicks); hoglinTakeDamageFromWater = getBoolean("mobs.hoglin.takes-damage-from-water", hoglinTakeDamageFromWater); @@ -1539,7 +1539,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean horseRidableInWater = false; -@@ -1761,6 +1809,7 @@ public class PurpurWorldConfig { +@@ -1742,6 +1790,7 @@ public class PurpurWorldConfig { public double horseMovementSpeedMax = 0.3375D; public int horseBreedingTicks = 6000; public boolean horseTakeDamageFromWater = false; @@ -1547,7 +1547,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void horseSettings() { horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1778,6 +1827,7 @@ public class PurpurWorldConfig { +@@ -1759,6 +1808,7 @@ public class PurpurWorldConfig { horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); horseBreedingTicks = getInt("mobs.horse.breeding-delay-ticks", horseBreedingTicks); horseTakeDamageFromWater = getBoolean("mobs.horse.takes-damage-from-water", horseTakeDamageFromWater); @@ -1555,7 +1555,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean huskRidable = false; -@@ -1789,6 +1839,7 @@ public class PurpurWorldConfig { +@@ -1770,6 +1820,7 @@ public class PurpurWorldConfig { public double huskJockeyChance = 0.05D; public boolean huskJockeyTryExistingChickens = true; public boolean huskTakeDamageFromWater = false; @@ -1563,7 +1563,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -1804,6 +1855,7 @@ public class PurpurWorldConfig { +@@ -1785,6 +1836,7 @@ public class PurpurWorldConfig { huskJockeyChance = getDouble("mobs.husk.jockey.chance", huskJockeyChance); huskJockeyTryExistingChickens = getBoolean("mobs.husk.jockey.try-existing-chickens", huskJockeyTryExistingChickens); huskTakeDamageFromWater = getBoolean("mobs.husk.takes-damage-from-water", huskTakeDamageFromWater); @@ -1571,7 +1571,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean illusionerRidable = false; -@@ -1813,6 +1865,7 @@ public class PurpurWorldConfig { +@@ -1794,6 +1846,7 @@ public class PurpurWorldConfig { public double illusionerFollowRange = 18.0D; public double illusionerMaxHealth = 32.0D; public boolean illusionerTakeDamageFromWater = false; @@ -1579,7 +1579,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void illusionerSettings() { illusionerRidable = getBoolean("mobs.illusioner.ridable", illusionerRidable); illusionerRidableInWater = getBoolean("mobs.illusioner.ridable-in-water", illusionerRidableInWater); -@@ -1830,6 +1883,7 @@ public class PurpurWorldConfig { +@@ -1811,6 +1864,7 @@ public class PurpurWorldConfig { } illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max_health", illusionerMaxHealth); illusionerTakeDamageFromWater = getBoolean("mobs.illusioner.takes-damage-from-water", illusionerTakeDamageFromWater); @@ -1587,7 +1587,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean ironGolemRidable = false; -@@ -1840,6 +1894,7 @@ public class PurpurWorldConfig { +@@ -1821,6 +1875,7 @@ public class PurpurWorldConfig { public boolean ironGolemTakeDamageFromWater = false; public boolean ironGolemPoppyCalm = false; public boolean ironGolemHealCalm = false; @@ -1595,7 +1595,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void ironGolemSettings() { ironGolemRidable = getBoolean("mobs.iron_golem.ridable", ironGolemRidable); ironGolemRidableInWater = getBoolean("mobs.iron_golem.ridable-in-water", ironGolemRidableInWater); -@@ -1854,6 +1909,7 @@ public class PurpurWorldConfig { +@@ -1835,6 +1890,7 @@ public class PurpurWorldConfig { ironGolemTakeDamageFromWater = getBoolean("mobs.iron_golem.takes-damage-from-water", ironGolemTakeDamageFromWater); ironGolemPoppyCalm = getBoolean("mobs.iron_golem.poppy-calms-anger", ironGolemPoppyCalm); ironGolemHealCalm = getBoolean("mobs.iron_golem.healing-calms-anger", ironGolemHealCalm); @@ -1603,7 +1603,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean llamaRidable = false; -@@ -1868,6 +1924,7 @@ public class PurpurWorldConfig { +@@ -1849,6 +1905,7 @@ public class PurpurWorldConfig { public int llamaBreedingTicks = 6000; public boolean llamaTakeDamageFromWater = false; public boolean llamaJoinCaravans = true; @@ -1611,7 +1611,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1888,6 +1945,7 @@ public class PurpurWorldConfig { +@@ -1869,6 +1926,7 @@ public class PurpurWorldConfig { llamaBreedingTicks = getInt("mobs.llama.breeding-delay-ticks", llamaBreedingTicks); llamaTakeDamageFromWater = getBoolean("mobs.llama.takes-damage-from-water", llamaTakeDamageFromWater); llamaJoinCaravans = getBoolean("mobs.llama.join-caravans", llamaJoinCaravans); @@ -1619,7 +1619,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean magmaCubeRidable = false; -@@ -1898,6 +1956,7 @@ public class PurpurWorldConfig { +@@ -1879,6 +1937,7 @@ public class PurpurWorldConfig { public Map magmaCubeMaxHealthCache = new HashMap<>(); public Map magmaCubeAttackDamageCache = new HashMap<>(); public boolean magmaCubeTakeDamageFromWater = false; @@ -1627,7 +1627,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void magmaCubeSettings() { magmaCubeRidable = getBoolean("mobs.magma_cube.ridable", magmaCubeRidable); magmaCubeRidableInWater = getBoolean("mobs.magma_cube.ridable-in-water", magmaCubeRidableInWater); -@@ -1912,6 +1971,7 @@ public class PurpurWorldConfig { +@@ -1893,6 +1952,7 @@ public class PurpurWorldConfig { magmaCubeMaxHealthCache.clear(); magmaCubeAttackDamageCache.clear(); magmaCubeTakeDamageFromWater = getBoolean("mobs.magma_cube.takes-damage-from-water", magmaCubeTakeDamageFromWater); @@ -1635,7 +1635,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean mooshroomRidable = false; -@@ -1920,6 +1980,7 @@ public class PurpurWorldConfig { +@@ -1901,6 +1961,7 @@ public class PurpurWorldConfig { public double mooshroomMaxHealth = 10.0D; public int mooshroomBreedingTicks = 6000; public boolean mooshroomTakeDamageFromWater = false; @@ -1643,7 +1643,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void mooshroomSettings() { mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1932,6 +1993,7 @@ public class PurpurWorldConfig { +@@ -1913,6 +1974,7 @@ public class PurpurWorldConfig { mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); mooshroomBreedingTicks = getInt("mobs.mooshroom.breeding-delay-ticks", mooshroomBreedingTicks); mooshroomTakeDamageFromWater = getBoolean("mobs.mooshroom.takes-damage-from-water", mooshroomTakeDamageFromWater); @@ -1651,7 +1651,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean muleRidableInWater = false; -@@ -1943,6 +2005,7 @@ public class PurpurWorldConfig { +@@ -1924,6 +1986,7 @@ public class PurpurWorldConfig { public double muleMovementSpeedMax = 0.175D; public int muleBreedingTicks = 6000; public boolean muleTakeDamageFromWater = false; @@ -1659,7 +1659,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void muleSettings() { muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); if (PurpurConfig.version < 10) { -@@ -1960,6 +2023,7 @@ public class PurpurWorldConfig { +@@ -1941,6 +2004,7 @@ public class PurpurWorldConfig { muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax); muleBreedingTicks = getInt("mobs.mule.breeding-delay-ticks", muleBreedingTicks); muleTakeDamageFromWater = getBoolean("mobs.mule.takes-damage-from-water", muleTakeDamageFromWater); @@ -1667,7 +1667,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean ocelotRidable = false; -@@ -1968,6 +2032,7 @@ public class PurpurWorldConfig { +@@ -1949,6 +2013,7 @@ public class PurpurWorldConfig { public double ocelotMaxHealth = 10.0D; public int ocelotBreedingTicks = 6000; public boolean ocelotTakeDamageFromWater = false; @@ -1675,7 +1675,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -1980,6 +2045,7 @@ public class PurpurWorldConfig { +@@ -1961,6 +2026,7 @@ public class PurpurWorldConfig { ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); ocelotBreedingTicks = getInt("mobs.ocelot.breeding-delay-ticks", ocelotBreedingTicks); ocelotTakeDamageFromWater = getBoolean("mobs.ocelot.takes-damage-from-water", ocelotTakeDamageFromWater); @@ -1683,7 +1683,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean pandaRidable = false; -@@ -1988,6 +2054,7 @@ public class PurpurWorldConfig { +@@ -1969,6 +2035,7 @@ public class PurpurWorldConfig { public double pandaMaxHealth = 20.0D; public int pandaBreedingTicks = 6000; public boolean pandaTakeDamageFromWater = false; @@ -1691,7 +1691,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void pandaSettings() { pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -2000,6 +2067,7 @@ public class PurpurWorldConfig { +@@ -1981,6 +2048,7 @@ public class PurpurWorldConfig { pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); pandaBreedingTicks = getInt("mobs.panda.breeding-delay-ticks", pandaBreedingTicks); pandaTakeDamageFromWater = getBoolean("mobs.panda.takes-damage-from-water", pandaTakeDamageFromWater); @@ -1699,7 +1699,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean parrotRidable = false; -@@ -2009,6 +2077,7 @@ public class PurpurWorldConfig { +@@ -1990,6 +2058,7 @@ public class PurpurWorldConfig { public double parrotMaxHealth = 6.0D; public boolean parrotTakeDamageFromWater = false; public boolean parrotBreedable = false; @@ -1707,7 +1707,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void parrotSettings() { parrotRidable = getBoolean("mobs.parrot.ridable", parrotRidable); parrotRidableInWater = getBoolean("mobs.parrot.ridable-in-water", parrotRidableInWater); -@@ -2022,6 +2091,7 @@ public class PurpurWorldConfig { +@@ -2003,6 +2072,7 @@ public class PurpurWorldConfig { parrotMaxHealth = getDouble("mobs.parrot.attributes.max_health", parrotMaxHealth); parrotTakeDamageFromWater = getBoolean("mobs.parrot.takes-damage-from-water", parrotTakeDamageFromWater); parrotBreedable = getBoolean("mobs.parrot.can-breed", parrotBreedable); @@ -1715,7 +1715,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean phantomRidable = false; -@@ -2049,6 +2119,7 @@ public class PurpurWorldConfig { +@@ -2030,6 +2100,7 @@ public class PurpurWorldConfig { public boolean phantomBurnInDaylight = true; public boolean phantomFlamesOnSwoop = false; public boolean phantomTakeDamageFromWater = false; @@ -1723,7 +1723,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -2084,6 +2155,7 @@ public class PurpurWorldConfig { +@@ -2065,6 +2136,7 @@ public class PurpurWorldConfig { phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); phantomFlamesOnSwoop = getBoolean("mobs.phantom.flames-on-swoop", phantomFlamesOnSwoop); phantomTakeDamageFromWater = getBoolean("mobs.phantom.takes-damage-from-water", phantomTakeDamageFromWater); @@ -1731,7 +1731,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean pigRidable = false; -@@ -2093,6 +2165,7 @@ public class PurpurWorldConfig { +@@ -2074,6 +2146,7 @@ public class PurpurWorldConfig { public boolean pigGiveSaddleBack = false; public int pigBreedingTicks = 6000; public boolean pigTakeDamageFromWater = false; @@ -1739,7 +1739,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -2106,6 +2179,7 @@ public class PurpurWorldConfig { +@@ -2087,6 +2160,7 @@ public class PurpurWorldConfig { pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); pigBreedingTicks = getInt("mobs.pig.breeding-delay-ticks", pigBreedingTicks); pigTakeDamageFromWater = getBoolean("mobs.pig.takes-damage-from-water", pigTakeDamageFromWater); @@ -1747,7 +1747,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean piglinRidable = false; -@@ -2115,6 +2189,7 @@ public class PurpurWorldConfig { +@@ -2096,6 +2170,7 @@ public class PurpurWorldConfig { public boolean piglinBypassMobGriefing = false; public boolean piglinTakeDamageFromWater = false; public int piglinPortalSpawnModifier = 2000; @@ -1755,7 +1755,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2128,6 +2203,7 @@ public class PurpurWorldConfig { +@@ -2109,6 +2184,7 @@ public class PurpurWorldConfig { piglinBypassMobGriefing = getBoolean("mobs.piglin.bypass-mob-griefing", piglinBypassMobGriefing); piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); @@ -1763,7 +1763,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean piglinBruteRidable = false; -@@ -2135,6 +2211,7 @@ public class PurpurWorldConfig { +@@ -2116,6 +2192,7 @@ public class PurpurWorldConfig { public boolean piglinBruteControllable = true; public double piglinBruteMaxHealth = 50.0D; public boolean piglinBruteTakeDamageFromWater = false; @@ -1771,7 +1771,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void piglinBruteSettings() { piglinBruteRidable = getBoolean("mobs.piglin_brute.ridable", piglinBruteRidable); piglinBruteRidableInWater = getBoolean("mobs.piglin_brute.ridable-in-water", piglinBruteRidableInWater); -@@ -2146,6 +2223,7 @@ public class PurpurWorldConfig { +@@ -2127,6 +2204,7 @@ public class PurpurWorldConfig { } piglinBruteMaxHealth = getDouble("mobs.piglin_brute.attributes.max_health", piglinBruteMaxHealth); piglinBruteTakeDamageFromWater = getBoolean("mobs.piglin_brute.takes-damage-from-water", piglinBruteTakeDamageFromWater); @@ -1779,7 +1779,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean pillagerRidable = false; -@@ -2154,6 +2232,7 @@ public class PurpurWorldConfig { +@@ -2135,6 +2213,7 @@ public class PurpurWorldConfig { public double pillagerMaxHealth = 24.0D; public boolean pillagerBypassMobGriefing = false; public boolean pillagerTakeDamageFromWater = false; @@ -1787,7 +1787,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void pillagerSettings() { pillagerRidable = getBoolean("mobs.pillager.ridable", pillagerRidable); pillagerRidableInWater = getBoolean("mobs.pillager.ridable-in-water", pillagerRidableInWater); -@@ -2166,6 +2245,7 @@ public class PurpurWorldConfig { +@@ -2147,6 +2226,7 @@ public class PurpurWorldConfig { pillagerMaxHealth = getDouble("mobs.pillager.attributes.max_health", pillagerMaxHealth); pillagerBypassMobGriefing = getBoolean("mobs.pillager.bypass-mob-griefing", pillagerBypassMobGriefing); pillagerTakeDamageFromWater = getBoolean("mobs.pillager.takes-damage-from-water", pillagerTakeDamageFromWater); @@ -1795,7 +1795,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean polarBearRidable = false; -@@ -2176,6 +2256,7 @@ public class PurpurWorldConfig { +@@ -2157,6 +2237,7 @@ public class PurpurWorldConfig { public Item polarBearBreedableItem = null; public int polarBearBreedingTicks = 6000; public boolean polarBearTakeDamageFromWater = false; @@ -1803,7 +1803,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -2191,12 +2272,14 @@ public class PurpurWorldConfig { +@@ -2172,12 +2253,14 @@ public class PurpurWorldConfig { if (item != Items.AIR) polarBearBreedableItem = item; polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); polarBearTakeDamageFromWater = getBoolean("mobs.polar_bear.takes-damage-from-water", polarBearTakeDamageFromWater); @@ -1818,7 +1818,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void pufferfishSettings() { pufferfishRidable = getBoolean("mobs.pufferfish.ridable", pufferfishRidable); pufferfishControllable = getBoolean("mobs.pufferfish.controllable", pufferfishControllable); -@@ -2207,6 +2290,7 @@ public class PurpurWorldConfig { +@@ -2188,6 +2271,7 @@ public class PurpurWorldConfig { } pufferfishMaxHealth = getDouble("mobs.pufferfish.attributes.max_health", pufferfishMaxHealth); pufferfishTakeDamageFromWater = getBoolean("mobs.pufferfish.takes-damage-from-water", pufferfishTakeDamageFromWater); @@ -1826,7 +1826,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean rabbitRidable = false; -@@ -2218,6 +2302,7 @@ public class PurpurWorldConfig { +@@ -2199,6 +2283,7 @@ public class PurpurWorldConfig { public int rabbitBreedingTicks = 6000; public boolean rabbitBypassMobGriefing = false; public boolean rabbitTakeDamageFromWater = false; @@ -1834,7 +1834,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -2233,6 +2318,7 @@ public class PurpurWorldConfig { +@@ -2214,6 +2299,7 @@ public class PurpurWorldConfig { rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); rabbitBypassMobGriefing = getBoolean("mobs.rabbit.bypass-mob-griefing", rabbitBypassMobGriefing); rabbitTakeDamageFromWater = getBoolean("mobs.rabbit.takes-damage-from-water", rabbitTakeDamageFromWater); @@ -1842,7 +1842,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean ravagerRidable = false; -@@ -2242,6 +2328,7 @@ public class PurpurWorldConfig { +@@ -2223,6 +2309,7 @@ public class PurpurWorldConfig { public boolean ravagerBypassMobGriefing = false; public boolean ravagerTakeDamageFromWater = false; public List ravagerGriefableBlocks = new ArrayList<>(); @@ -1850,7 +1850,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -2271,12 +2358,14 @@ public class PurpurWorldConfig { +@@ -2252,12 +2339,14 @@ public class PurpurWorldConfig { ravagerGriefableBlocks.add(block); } }); @@ -1865,7 +1865,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void salmonSettings() { salmonRidable = getBoolean("mobs.salmon.ridable", salmonRidable); salmonControllable = getBoolean("mobs.salmon.controllable", salmonControllable); -@@ -2287,6 +2376,7 @@ public class PurpurWorldConfig { +@@ -2268,6 +2357,7 @@ public class PurpurWorldConfig { } salmonMaxHealth = getDouble("mobs.salmon.attributes.max_health", salmonMaxHealth); salmonTakeDamageFromWater = getBoolean("mobs.salmon.takes-damage-from-water", salmonTakeDamageFromWater); @@ -1873,7 +1873,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean sheepRidable = false; -@@ -2296,6 +2386,7 @@ public class PurpurWorldConfig { +@@ -2277,6 +2367,7 @@ public class PurpurWorldConfig { public int sheepBreedingTicks = 6000; public boolean sheepBypassMobGriefing = false; public boolean sheepTakeDamageFromWater = false; @@ -1881,7 +1881,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -2309,6 +2400,7 @@ public class PurpurWorldConfig { +@@ -2290,6 +2381,7 @@ public class PurpurWorldConfig { sheepBreedingTicks = getInt("mobs.sheep.breeding-delay-ticks", sheepBreedingTicks); sheepBypassMobGriefing = getBoolean("mobs.sheep.bypass-mob-griefing", sheepBypassMobGriefing); sheepTakeDamageFromWater = getBoolean("mobs.sheep.takes-damage-from-water", sheepTakeDamageFromWater); @@ -1889,7 +1889,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean shulkerRidable = false; -@@ -2322,6 +2414,7 @@ public class PurpurWorldConfig { +@@ -2303,6 +2395,7 @@ public class PurpurWorldConfig { public String shulkerSpawnFromBulletNearbyEquation = "(nearby - 1) / 5.0"; public boolean shulkerSpawnFromBulletRandomColor = false; public boolean shulkerChangeColorWithDye = false; @@ -1897,7 +1897,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void shulkerSettings() { shulkerRidable = getBoolean("mobs.shulker.ridable", shulkerRidable); shulkerRidableInWater = getBoolean("mobs.shulker.ridable-in-water", shulkerRidableInWater); -@@ -2339,6 +2432,7 @@ public class PurpurWorldConfig { +@@ -2320,6 +2413,7 @@ public class PurpurWorldConfig { shulkerSpawnFromBulletNearbyEquation = getString("mobs.shulker.spawn-from-bullet.nearby-equation", shulkerSpawnFromBulletNearbyEquation); shulkerSpawnFromBulletRandomColor = getBoolean("mobs.shulker.spawn-from-bullet.random-color", shulkerSpawnFromBulletRandomColor); shulkerChangeColorWithDye = getBoolean("mobs.shulker.change-color-with-dye", shulkerChangeColorWithDye); @@ -1905,7 +1905,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean silverfishRidable = false; -@@ -2347,6 +2441,7 @@ public class PurpurWorldConfig { +@@ -2328,6 +2422,7 @@ public class PurpurWorldConfig { public double silverfishMaxHealth = 8.0D; public boolean silverfishBypassMobGriefing = false; public boolean silverfishTakeDamageFromWater = false; @@ -1913,7 +1913,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void silverfishSettings() { silverfishRidable = getBoolean("mobs.silverfish.ridable", silverfishRidable); silverfishRidableInWater = getBoolean("mobs.silverfish.ridable-in-water", silverfishRidableInWater); -@@ -2359,6 +2454,7 @@ public class PurpurWorldConfig { +@@ -2340,6 +2435,7 @@ public class PurpurWorldConfig { silverfishMaxHealth = getDouble("mobs.silverfish.attributes.max_health", silverfishMaxHealth); silverfishBypassMobGriefing = getBoolean("mobs.silverfish.bypass-mob-griefing", silverfishBypassMobGriefing); silverfishTakeDamageFromWater = getBoolean("mobs.silverfish.takes-damage-from-water", silverfishTakeDamageFromWater); @@ -1921,7 +1921,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean skeletonRidable = false; -@@ -2366,6 +2462,7 @@ public class PurpurWorldConfig { +@@ -2347,6 +2443,7 @@ public class PurpurWorldConfig { public boolean skeletonControllable = true; public double skeletonMaxHealth = 20.0D; public boolean skeletonTakeDamageFromWater = false; @@ -1929,7 +1929,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2377,6 +2474,7 @@ public class PurpurWorldConfig { +@@ -2358,6 +2455,7 @@ public class PurpurWorldConfig { } skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); @@ -1937,7 +1937,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean skeletonHorseRidable = false; -@@ -2389,6 +2487,7 @@ public class PurpurWorldConfig { +@@ -2370,6 +2468,7 @@ public class PurpurWorldConfig { public double skeletonHorseMovementSpeedMin = 0.2D; public double skeletonHorseMovementSpeedMax = 0.2D; public boolean skeletonHorseTakeDamageFromWater = false; @@ -1945,7 +1945,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void skeletonHorseSettings() { skeletonHorseRidable = getBoolean("mobs.skeleton_horse.ridable", skeletonHorseRidable); skeletonHorseRidableInWater = getBoolean("mobs.skeleton_horse.ridable-in-water", skeletonHorseRidableInWater); -@@ -2406,6 +2505,7 @@ public class PurpurWorldConfig { +@@ -2387,6 +2486,7 @@ public class PurpurWorldConfig { skeletonHorseMovementSpeedMin = getDouble("mobs.skeleton_horse.attributes.movement_speed.min", skeletonHorseMovementSpeedMin); skeletonHorseMovementSpeedMax = getDouble("mobs.skeleton_horse.attributes.movement_speed.max", skeletonHorseMovementSpeedMax); skeletonHorseTakeDamageFromWater = getBoolean("mobs.skeleton_horse.takes-damage-from-water", skeletonHorseTakeDamageFromWater); @@ -1953,7 +1953,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean slimeRidable = false; -@@ -2416,6 +2516,7 @@ public class PurpurWorldConfig { +@@ -2397,6 +2497,7 @@ public class PurpurWorldConfig { public Map slimeMaxHealthCache = new HashMap<>(); public Map slimeAttackDamageCache = new HashMap<>(); public boolean slimeTakeDamageFromWater = false; @@ -1961,7 +1961,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void slimeSettings() { slimeRidable = getBoolean("mobs.slime.ridable", slimeRidable); slimeRidableInWater = getBoolean("mobs.slime.ridable-in-water", slimeRidableInWater); -@@ -2430,6 +2531,7 @@ public class PurpurWorldConfig { +@@ -2411,6 +2512,7 @@ public class PurpurWorldConfig { slimeMaxHealthCache.clear(); slimeAttackDamageCache.clear(); slimeTakeDamageFromWater = getBoolean("mobs.slime.takes-damage-from-water", slimeTakeDamageFromWater); @@ -1969,7 +1969,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean snowGolemRidable = false; -@@ -2444,6 +2546,7 @@ public class PurpurWorldConfig { +@@ -2425,6 +2527,7 @@ public class PurpurWorldConfig { public double snowGolemAttackDistance = 1.25D; public boolean snowGolemBypassMobGriefing = false; public boolean snowGolemTakeDamageFromWater = true; @@ -1977,7 +1977,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -2462,6 +2565,7 @@ public class PurpurWorldConfig { +@@ -2443,6 +2546,7 @@ public class PurpurWorldConfig { snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); snowGolemBypassMobGriefing = getBoolean("mobs.snow_golem.bypass-mob-griefing", snowGolemBypassMobGriefing); snowGolemTakeDamageFromWater = getBoolean("mobs.snow_golem.takes-damage-from-water", snowGolemTakeDamageFromWater); @@ -1985,7 +1985,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean snifferRidable = false; -@@ -2484,6 +2588,7 @@ public class PurpurWorldConfig { +@@ -2465,6 +2569,7 @@ public class PurpurWorldConfig { public double squidOffsetWaterCheck = 0.0D; public boolean squidsCanFly = false; public boolean squidTakeDamageFromWater = false; @@ -1993,7 +1993,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -2497,6 +2602,7 @@ public class PurpurWorldConfig { +@@ -2478,6 +2583,7 @@ public class PurpurWorldConfig { squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); squidsCanFly = getBoolean("mobs.squid.can-fly", squidsCanFly); squidTakeDamageFromWater = getBoolean("mobs.squid.takes-damage-from-water", squidTakeDamageFromWater); @@ -2001,7 +2001,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean spiderRidable = false; -@@ -2504,6 +2610,7 @@ public class PurpurWorldConfig { +@@ -2485,6 +2591,7 @@ public class PurpurWorldConfig { public boolean spiderControllable = true; public double spiderMaxHealth = 16.0D; public boolean spiderTakeDamageFromWater = false; @@ -2009,7 +2009,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void spiderSettings() { spiderRidable = getBoolean("mobs.spider.ridable", spiderRidable); spiderRidableInWater = getBoolean("mobs.spider.ridable-in-water", spiderRidableInWater); -@@ -2515,6 +2622,7 @@ public class PurpurWorldConfig { +@@ -2496,6 +2603,7 @@ public class PurpurWorldConfig { } spiderMaxHealth = getDouble("mobs.spider.attributes.max_health", spiderMaxHealth); spiderTakeDamageFromWater = getBoolean("mobs.spider.takes-damage-from-water", spiderTakeDamageFromWater); @@ -2017,7 +2017,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean strayRidable = false; -@@ -2522,6 +2630,7 @@ public class PurpurWorldConfig { +@@ -2503,6 +2611,7 @@ public class PurpurWorldConfig { public boolean strayControllable = true; public double strayMaxHealth = 20.0D; public boolean strayTakeDamageFromWater = false; @@ -2025,7 +2025,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void straySettings() { strayRidable = getBoolean("mobs.stray.ridable", strayRidable); strayRidableInWater = getBoolean("mobs.stray.ridable-in-water", strayRidableInWater); -@@ -2533,6 +2642,7 @@ public class PurpurWorldConfig { +@@ -2514,6 +2623,7 @@ public class PurpurWorldConfig { } strayMaxHealth = getDouble("mobs.stray.attributes.max_health", strayMaxHealth); strayTakeDamageFromWater = getBoolean("mobs.stray.takes-damage-from-water", strayTakeDamageFromWater); @@ -2033,7 +2033,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean striderRidable = false; -@@ -2542,6 +2652,7 @@ public class PurpurWorldConfig { +@@ -2523,6 +2633,7 @@ public class PurpurWorldConfig { public int striderBreedingTicks = 6000; public boolean striderGiveSaddleBack = false; public boolean striderTakeDamageFromWater = true; @@ -2041,7 +2041,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -2555,6 +2666,7 @@ public class PurpurWorldConfig { +@@ -2536,6 +2647,7 @@ public class PurpurWorldConfig { striderBreedingTicks = getInt("mobs.strider.breeding-delay-ticks", striderBreedingTicks); striderGiveSaddleBack = getBoolean("mobs.strider.give-saddle-back", striderGiveSaddleBack); striderTakeDamageFromWater = getBoolean("mobs.strider.takes-damage-from-water", striderTakeDamageFromWater); @@ -2049,7 +2049,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean tadpoleRidable = false; -@@ -2577,6 +2689,7 @@ public class PurpurWorldConfig { +@@ -2558,6 +2670,7 @@ public class PurpurWorldConfig { public double traderLlamaMovementSpeedMax = 0.175D; public int traderLlamaBreedingTicks = 6000; public boolean traderLlamaTakeDamageFromWater = false; @@ -2057,7 +2057,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void traderLlamaSettings() { traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); -@@ -2596,12 +2709,14 @@ public class PurpurWorldConfig { +@@ -2577,12 +2690,14 @@ public class PurpurWorldConfig { traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax); traderLlamaBreedingTicks = getInt("mobs.trader_llama.breeding-delay-ticks", traderLlamaBreedingTicks); traderLlamaTakeDamageFromWater = getBoolean("mobs.trader_llama.takes-damage-from-water", traderLlamaTakeDamageFromWater); @@ -2072,7 +2072,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void tropicalFishSettings() { tropicalFishRidable = getBoolean("mobs.tropical_fish.ridable", tropicalFishRidable); tropicalFishControllable = getBoolean("mobs.tropical_fish.controllable", tropicalFishControllable); -@@ -2612,6 +2727,7 @@ public class PurpurWorldConfig { +@@ -2593,6 +2708,7 @@ public class PurpurWorldConfig { } tropicalFishMaxHealth = getDouble("mobs.tropical_fish.attributes.max_health", tropicalFishMaxHealth); tropicalFishTakeDamageFromWater = getBoolean("mobs.tropical_fish.takes-damage-from-water", tropicalFishTakeDamageFromWater); @@ -2080,7 +2080,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean turtleRidable = false; -@@ -2620,6 +2736,7 @@ public class PurpurWorldConfig { +@@ -2601,6 +2717,7 @@ public class PurpurWorldConfig { public double turtleMaxHealth = 30.0D; public int turtleBreedingTicks = 6000; public boolean turtleTakeDamageFromWater = false; @@ -2088,7 +2088,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void turtleSettings() { turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -2632,6 +2749,7 @@ public class PurpurWorldConfig { +@@ -2613,6 +2730,7 @@ public class PurpurWorldConfig { turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); turtleBreedingTicks = getInt("mobs.turtle.breeding-delay-ticks", turtleBreedingTicks); turtleTakeDamageFromWater = getBoolean("mobs.turtle.takes-damage-from-water", turtleTakeDamageFromWater); @@ -2096,7 +2096,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean vexRidable = false; -@@ -2640,6 +2758,7 @@ public class PurpurWorldConfig { +@@ -2621,6 +2739,7 @@ public class PurpurWorldConfig { public double vexMaxY = 320D; public double vexMaxHealth = 14.0D; public boolean vexTakeDamageFromWater = false; @@ -2104,7 +2104,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void vexSettings() { vexRidable = getBoolean("mobs.vex.ridable", vexRidable); vexRidableInWater = getBoolean("mobs.vex.ridable-in-water", vexRidableInWater); -@@ -2652,6 +2771,7 @@ public class PurpurWorldConfig { +@@ -2633,6 +2752,7 @@ public class PurpurWorldConfig { } vexMaxHealth = getDouble("mobs.vex.attributes.max_health", vexMaxHealth); vexTakeDamageFromWater = getBoolean("mobs.vex.takes-damage-from-water", vexTakeDamageFromWater); @@ -2112,7 +2112,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean villagerRidable = false; -@@ -2667,6 +2787,7 @@ public class PurpurWorldConfig { +@@ -2647,6 +2767,7 @@ public class PurpurWorldConfig { public boolean villagerBypassMobGriefing = false; public boolean villagerTakeDamageFromWater = false; public boolean villagerAllowTrading = true; @@ -2120,7 +2120,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2686,6 +2807,7 @@ public class PurpurWorldConfig { +@@ -2665,6 +2786,7 @@ public class PurpurWorldConfig { villagerBypassMobGriefing = getBoolean("mobs.villager.bypass-mob-griefing", villagerBypassMobGriefing); villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); @@ -2128,7 +2128,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean vindicatorRidable = false; -@@ -2694,6 +2816,7 @@ public class PurpurWorldConfig { +@@ -2673,6 +2795,7 @@ public class PurpurWorldConfig { public double vindicatorMaxHealth = 24.0D; public double vindicatorJohnnySpawnChance = 0D; public boolean vindicatorTakeDamageFromWater = false; @@ -2136,7 +2136,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -2706,6 +2829,7 @@ public class PurpurWorldConfig { +@@ -2685,6 +2808,7 @@ public class PurpurWorldConfig { vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); vindicatorJohnnySpawnChance = getDouble("mobs.vindicator.johnny.spawn-chance", vindicatorJohnnySpawnChance); vindicatorTakeDamageFromWater = getBoolean("mobs.vindicator.takes-damage-from-water", vindicatorTakeDamageFromWater); @@ -2144,23 +2144,23 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean wanderingTraderRidable = false; -@@ -2716,6 +2840,7 @@ public class PurpurWorldConfig { - public boolean wanderingTraderCanBeLeashed = false; +@@ -2694,6 +2818,7 @@ public class PurpurWorldConfig { + public boolean wanderingTraderFollowEmeraldBlock = false; public boolean wanderingTraderTakeDamageFromWater = false; public boolean wanderingTraderAllowTrading = true; + public boolean wanderingTraderAlwaysDropExp = false; private void wanderingTraderSettings() { wanderingTraderRidable = getBoolean("mobs.wandering_trader.ridable", wanderingTraderRidable); wanderingTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", wanderingTraderRidableInWater); -@@ -2730,6 +2855,7 @@ public class PurpurWorldConfig { - wanderingTraderCanBeLeashed = getBoolean("mobs.wandering_trader.can-be-leashed", wanderingTraderCanBeLeashed); +@@ -2707,6 +2832,7 @@ public class PurpurWorldConfig { + wanderingTraderFollowEmeraldBlock = getBoolean("mobs.wandering_trader.follow-emerald-blocks", wanderingTraderFollowEmeraldBlock); wanderingTraderTakeDamageFromWater = getBoolean("mobs.wandering_trader.takes-damage-from-water", wanderingTraderTakeDamageFromWater); wanderingTraderAllowTrading = getBoolean("mobs.wandering_trader.allow-trading", wanderingTraderAllowTrading); + wanderingTraderAlwaysDropExp = getBoolean("mobs.wandering_trader.always-drop-exp", wanderingTraderAlwaysDropExp); } public boolean wardenRidable = false; -@@ -2746,6 +2872,7 @@ public class PurpurWorldConfig { +@@ -2723,6 +2849,7 @@ public class PurpurWorldConfig { public boolean witchControllable = true; public double witchMaxHealth = 26.0D; public boolean witchTakeDamageFromWater = false; @@ -2168,7 +2168,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void witchSettings() { witchRidable = getBoolean("mobs.witch.ridable", witchRidable); witchRidableInWater = getBoolean("mobs.witch.ridable-in-water", witchRidableInWater); -@@ -2757,6 +2884,7 @@ public class PurpurWorldConfig { +@@ -2734,6 +2861,7 @@ public class PurpurWorldConfig { } witchMaxHealth = getDouble("mobs.witch.attributes.max_health", witchMaxHealth); witchTakeDamageFromWater = getBoolean("mobs.witch.takes-damage-from-water", witchTakeDamageFromWater); @@ -2176,7 +2176,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean witherRidable = false; -@@ -2771,6 +2899,7 @@ public class PurpurWorldConfig { +@@ -2748,6 +2876,7 @@ public class PurpurWorldConfig { public boolean witherCanRideVehicles = false; public float witherExplosionRadius = 1.0F; public boolean witherPlaySpawnSound = true; @@ -2184,7 +2184,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -2793,6 +2922,7 @@ public class PurpurWorldConfig { +@@ -2770,6 +2899,7 @@ public class PurpurWorldConfig { witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); witherExplosionRadius = (float) getDouble("mobs.wither.explosion-radius", witherExplosionRadius); witherPlaySpawnSound = getBoolean("mobs.wither.play-spawn-sound", witherPlaySpawnSound); @@ -2192,7 +2192,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean witherSkeletonRidable = false; -@@ -2800,6 +2930,7 @@ public class PurpurWorldConfig { +@@ -2777,6 +2907,7 @@ public class PurpurWorldConfig { public boolean witherSkeletonControllable = true; public double witherSkeletonMaxHealth = 20.0D; public boolean witherSkeletonTakeDamageFromWater = false; @@ -2200,7 +2200,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void witherSkeletonSettings() { witherSkeletonRidable = getBoolean("mobs.wither_skeleton.ridable", witherSkeletonRidable); witherSkeletonRidableInWater = getBoolean("mobs.wither_skeleton.ridable-in-water", witherSkeletonRidableInWater); -@@ -2811,6 +2942,7 @@ public class PurpurWorldConfig { +@@ -2788,6 +2919,7 @@ public class PurpurWorldConfig { } witherSkeletonMaxHealth = getDouble("mobs.wither_skeleton.attributes.max_health", witherSkeletonMaxHealth); witherSkeletonTakeDamageFromWater = getBoolean("mobs.wither_skeleton.takes-damage-from-water", witherSkeletonTakeDamageFromWater); @@ -2208,7 +2208,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean wolfRidable = false; -@@ -2822,6 +2954,7 @@ public class PurpurWorldConfig { +@@ -2799,6 +2931,7 @@ public class PurpurWorldConfig { public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; public boolean wolfTakeDamageFromWater = false; @@ -2216,7 +2216,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -2841,6 +2974,7 @@ public class PurpurWorldConfig { +@@ -2818,6 +2951,7 @@ public class PurpurWorldConfig { wolfNaturalRabid = getDouble("mobs.wolf.spawn-rabid-chance", wolfNaturalRabid); wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks); wolfTakeDamageFromWater = getBoolean("mobs.wolf.takes-damage-from-water", wolfTakeDamageFromWater); @@ -2224,7 +2224,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean zoglinRidable = false; -@@ -2848,6 +2982,7 @@ public class PurpurWorldConfig { +@@ -2825,6 +2959,7 @@ public class PurpurWorldConfig { public boolean zoglinControllable = true; public double zoglinMaxHealth = 40.0D; public boolean zoglinTakeDamageFromWater = false; @@ -2232,7 +2232,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void zoglinSettings() { zoglinRidable = getBoolean("mobs.zoglin.ridable", zoglinRidable); zoglinRidableInWater = getBoolean("mobs.zoglin.ridable-in-water", zoglinRidableInWater); -@@ -2859,6 +2994,7 @@ public class PurpurWorldConfig { +@@ -2836,6 +2971,7 @@ public class PurpurWorldConfig { } zoglinMaxHealth = getDouble("mobs.zoglin.attributes.max_health", zoglinMaxHealth); zoglinTakeDamageFromWater = getBoolean("mobs.zoglin.takes-damage-from-water", zoglinTakeDamageFromWater); @@ -2240,7 +2240,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean zombieRidable = false; -@@ -2872,6 +3008,7 @@ public class PurpurWorldConfig { +@@ -2849,6 +2985,7 @@ public class PurpurWorldConfig { public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public boolean zombieBypassMobGriefing = false; public boolean zombieTakeDamageFromWater = false; @@ -2248,7 +2248,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -2889,6 +3026,7 @@ public class PurpurWorldConfig { +@@ -2866,6 +3003,7 @@ public class PurpurWorldConfig { zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing); zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater); @@ -2256,7 +2256,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean zombieHorseRidable = false; -@@ -2902,6 +3040,7 @@ public class PurpurWorldConfig { +@@ -2879,6 +3017,7 @@ public class PurpurWorldConfig { public double zombieHorseMovementSpeedMax = 0.2D; public double zombieHorseSpawnChance = 0.0D; public boolean zombieHorseTakeDamageFromWater = false; @@ -2264,7 +2264,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void zombieHorseSettings() { zombieHorseRidable = getBoolean("mobs.zombie_horse.ridable", zombieHorseRidable); zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); -@@ -2920,6 +3059,7 @@ public class PurpurWorldConfig { +@@ -2897,6 +3036,7 @@ public class PurpurWorldConfig { zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax); zombieHorseSpawnChance = getDouble("mobs.zombie_horse.spawn-chance", zombieHorseSpawnChance); zombieHorseTakeDamageFromWater = getBoolean("mobs.zombie_horse.takes-damage-from-water", zombieHorseTakeDamageFromWater); @@ -2272,7 +2272,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean zombieVillagerRidable = false; -@@ -2934,6 +3074,7 @@ public class PurpurWorldConfig { +@@ -2911,6 +3051,7 @@ public class PurpurWorldConfig { public int zombieVillagerCuringTimeMin = 3600; public int zombieVillagerCuringTimeMax = 6000; public boolean zombieVillagerCureEnabled = true; @@ -2280,7 +2280,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -2952,6 +3093,7 @@ public class PurpurWorldConfig { +@@ -2929,6 +3070,7 @@ public class PurpurWorldConfig { zombieVillagerCuringTimeMin = getInt("mobs.zombie_villager.curing_time.min", zombieVillagerCuringTimeMin); zombieVillagerCuringTimeMax = getInt("mobs.zombie_villager.curing_time.max", zombieVillagerCuringTimeMax); zombieVillagerCureEnabled = getBoolean("mobs.zombie_villager.cure.enabled", zombieVillagerCureEnabled); @@ -2288,7 +2288,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 } public boolean zombifiedPiglinRidable = false; -@@ -2964,6 +3106,7 @@ public class PurpurWorldConfig { +@@ -2941,6 +3083,7 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; public boolean zombifiedPiglinTakeDamageFromWater = false; @@ -2296,7 +2296,7 @@ index e37534dfe3ee4e51d07e3f5ee6ef3161a4c4e87a..25ab554fbde0963adbd7a634f6b11522 private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -2980,6 +3123,7 @@ public class PurpurWorldConfig { +@@ -2957,6 +3100,7 @@ public class PurpurWorldConfig { zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); zombifiedPiglinTakeDamageFromWater = getBoolean("mobs.zombified_piglin.takes-damage-from-water", zombifiedPiglinTakeDamageFromWater); diff --git a/patches/unapplied-server/0220-Grindstone-API.patch b/patches/server/0210-Grindstone-API.patch similarity index 89% rename from patches/unapplied-server/0220-Grindstone-API.patch rename to patches/server/0210-Grindstone-API.patch index 479f112fa..b662748f6 100644 --- a/patches/unapplied-server/0220-Grindstone-API.patch +++ b/patches/server/0210-Grindstone-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Grindstone API diff --git a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java -index 5824636332eb35ae6bee9cc0661ee95901bb8c4b..1d181de9c8fd45b4d9f0230f80d5752ff5c1a432 100644 +index 5d47ffc3fd31930c7dd2f23bc0e6b7da513d1595..cf373c763749161d0371bd243b8d77bb750a7d38 100644 --- a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java +++ b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java -@@ -95,9 +95,11 @@ public class GrindstoneMenu extends AbstractContainerMenu { +@@ -96,9 +96,11 @@ public class GrindstoneMenu extends AbstractContainerMenu { @Override public void onTake(net.minecraft.world.entity.player.Player player, ItemStack stack) { @@ -21,7 +21,7 @@ index 5824636332eb35ae6bee9cc0661ee95901bb8c4b..1d181de9c8fd45b4d9f0230f80d5752f } world.levelEvent(1042, blockposition, 0); -@@ -393,7 +395,9 @@ public class GrindstoneMenu extends AbstractContainerMenu { +@@ -394,7 +396,9 @@ public class GrindstoneMenu extends AbstractContainerMenu { return ItemStack.EMPTY; } diff --git a/patches/unapplied-server/0221-Ability-for-hoe-to-replant-crops-and-nether-warts.patch b/patches/server/0211-Ability-for-hoe-to-replant-crops-and-nether-warts.patch similarity index 96% rename from patches/unapplied-server/0221-Ability-for-hoe-to-replant-crops-and-nether-warts.patch rename to patches/server/0211-Ability-for-hoe-to-replant-crops-and-nether-warts.patch index 9b761a70a..3a98dcd60 100644 --- a/patches/unapplied-server/0221-Ability-for-hoe-to-replant-crops-and-nether-warts.patch +++ b/patches/server/0211-Ability-for-hoe-to-replant-crops-and-nether-warts.patch @@ -74,10 +74,10 @@ index acbd60a2f162fe0e254e36d0e8e7face3fc8a7b3..da1c7999ca64199387054de46489d3ff + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fd8c8c6e563662926002fb1c72aaea0ba2999cdb..b492b7f6c8c959fa379bd75d5d89e99065421e93 100644 +index 85923289e2e66f4d33e77089f06f5b3985a83d6e..954165c4d12f9cae85fa47e480cd0aa242539bce 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -548,6 +548,8 @@ public class PurpurWorldConfig { +@@ -529,6 +529,8 @@ public class PurpurWorldConfig { public Map axeWeatherables = new HashMap<>(); public Map hoeTillables = new HashMap<>(); public Map shovelFlattenables = new HashMap<>(); @@ -86,7 +86,7 @@ index fd8c8c6e563662926002fb1c72aaea0ba2999cdb..b492b7f6c8c959fa379bd75d5d89e990 private void toolSettings() { axeStrippables.clear(); axeWaxables.clear(); -@@ -815,6 +817,8 @@ public class PurpurWorldConfig { +@@ -796,6 +798,8 @@ public class PurpurWorldConfig { }); shovelFlattenables.put(block, new Flattenable(into, drops)); }); diff --git a/patches/unapplied-server/0222-Turtle-eggs-random-tick-crack-chance.patch b/patches/server/0212-Turtle-eggs-random-tick-crack-chance.patch similarity index 93% rename from patches/unapplied-server/0222-Turtle-eggs-random-tick-crack-chance.patch rename to patches/server/0212-Turtle-eggs-random-tick-crack-chance.patch index 0e08edaa4..ea5ffaf92 100644 --- a/patches/unapplied-server/0222-Turtle-eggs-random-tick-crack-chance.patch +++ b/patches/server/0212-Turtle-eggs-random-tick-crack-chance.patch @@ -18,10 +18,10 @@ index 0c732cfbd9ce50198a3f85ae8ef2263d7ae0bc1a..2f0e8aeb9c45853fca12ddd78a7d5181 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index b492b7f6c8c959fa379bd75d5d89e99065421e93..9ed53d42189f7f7562ed96b4af39a02db2cb2ff5 100644 +index 954165c4d12f9cae85fa47e480cd0aa242539bce..fac30513243d39ca36a96fb01c98958d6f059688 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1075,11 +1075,13 @@ public class PurpurWorldConfig { +@@ -1056,11 +1056,13 @@ public class PurpurWorldConfig { public boolean turtleEggsBreakFromItems = false; public boolean turtleEggsBreakFromMinecarts = false; public boolean turtleEggsBypassMobGriefing = false; diff --git a/patches/unapplied-server/0223-Mob-head-visibility-percent.patch b/patches/server/0213-Mob-head-visibility-percent.patch similarity index 89% rename from patches/unapplied-server/0223-Mob-head-visibility-percent.patch rename to patches/server/0213-Mob-head-visibility-percent.patch index df84a70d2..95078967b 100644 --- a/patches/unapplied-server/0223-Mob-head-visibility-percent.patch +++ b/patches/server/0213-Mob-head-visibility-percent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Mob head visibility percent diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index c1e275fb53c4c173d80ae27087048f0f3902c2ad..4744b0dd3f5e9e5f2d92bd8604610bc133977931 100644 +index b08851827656f644a560b084aed10087665153db..d543a75d27d343edca9930c9a4599cbd4a9de045 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1071,9 +1071,20 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1046,9 +1046,20 @@ public abstract class LivingEntity extends Entity implements Attackable { ItemStack itemstack = this.getItemBySlot(EquipmentSlot.HEAD); EntityType entitytypes = entity.getType(); @@ -32,10 +32,10 @@ index c1e275fb53c4c173d80ae27087048f0f3902c2ad..4744b0dd3f5e9e5f2d92bd8604610bc1 // Purpur start if (entity instanceof LivingEntity entityliving) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2bd0a18e58a0b953adaa7d875bf0ae21b472c20a..2e4c53de39c7a439245017bf5cb4c1aec4b5b30b 100644 +index fac30513243d39ca36a96fb01c98958d6f059688..238323047a08b4553129714ba34df44b6a8b27b2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1393,6 +1393,7 @@ public class PurpurWorldConfig { +@@ -1374,6 +1374,7 @@ public class PurpurWorldConfig { public boolean creeperExplodeWhenKilled = false; public boolean creeperHealthRadius = false; public boolean creeperAlwaysDropExp = false; @@ -43,7 +43,7 @@ index 2bd0a18e58a0b953adaa7d875bf0ae21b472c20a..2e4c53de39c7a439245017bf5cb4c1ae private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -1410,6 +1411,7 @@ public class PurpurWorldConfig { +@@ -1391,6 +1392,7 @@ public class PurpurWorldConfig { creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); creeperAlwaysDropExp = getBoolean("mobs.creeper.always-drop-exp", creeperAlwaysDropExp); @@ -51,7 +51,7 @@ index 2bd0a18e58a0b953adaa7d875bf0ae21b472c20a..2e4c53de39c7a439245017bf5cb4c1ae } public boolean dolphinRidable = false; -@@ -2196,6 +2198,7 @@ public class PurpurWorldConfig { +@@ -2177,6 +2179,7 @@ public class PurpurWorldConfig { public boolean piglinTakeDamageFromWater = false; public int piglinPortalSpawnModifier = 2000; public boolean piglinAlwaysDropExp = false; @@ -59,7 +59,7 @@ index 2bd0a18e58a0b953adaa7d875bf0ae21b472c20a..2e4c53de39c7a439245017bf5cb4c1ae private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -2210,6 +2213,7 @@ public class PurpurWorldConfig { +@@ -2191,6 +2194,7 @@ public class PurpurWorldConfig { piglinTakeDamageFromWater = getBoolean("mobs.piglin.takes-damage-from-water", piglinTakeDamageFromWater); piglinPortalSpawnModifier = getInt("mobs.piglin.portal-spawn-modifier", piglinPortalSpawnModifier); piglinAlwaysDropExp = getBoolean("mobs.piglin.always-drop-exp", piglinAlwaysDropExp); @@ -67,7 +67,7 @@ index 2bd0a18e58a0b953adaa7d875bf0ae21b472c20a..2e4c53de39c7a439245017bf5cb4c1ae } public boolean piglinBruteRidable = false; -@@ -2469,6 +2473,7 @@ public class PurpurWorldConfig { +@@ -2450,6 +2454,7 @@ public class PurpurWorldConfig { public double skeletonMaxHealth = 20.0D; public boolean skeletonTakeDamageFromWater = false; public boolean skeletonAlwaysDropExp = false; @@ -75,7 +75,7 @@ index 2bd0a18e58a0b953adaa7d875bf0ae21b472c20a..2e4c53de39c7a439245017bf5cb4c1ae private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2481,6 +2486,7 @@ public class PurpurWorldConfig { +@@ -2462,6 +2467,7 @@ public class PurpurWorldConfig { skeletonMaxHealth = getDouble("mobs.skeleton.attributes.max_health", skeletonMaxHealth); skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp); @@ -83,7 +83,7 @@ index 2bd0a18e58a0b953adaa7d875bf0ae21b472c20a..2e4c53de39c7a439245017bf5cb4c1ae } public boolean skeletonHorseRidable = false; -@@ -3015,6 +3021,7 @@ public class PurpurWorldConfig { +@@ -2992,6 +2998,7 @@ public class PurpurWorldConfig { public boolean zombieBypassMobGriefing = false; public boolean zombieTakeDamageFromWater = false; public boolean zombieAlwaysDropExp = false; @@ -91,7 +91,7 @@ index 2bd0a18e58a0b953adaa7d875bf0ae21b472c20a..2e4c53de39c7a439245017bf5cb4c1ae private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -3033,6 +3040,7 @@ public class PurpurWorldConfig { +@@ -3010,6 +3017,7 @@ public class PurpurWorldConfig { zombieBypassMobGriefing = getBoolean("mobs.zombie.bypass-mob-griefing", zombieBypassMobGriefing); zombieTakeDamageFromWater = getBoolean("mobs.zombie.takes-damage-from-water", zombieTakeDamageFromWater); zombieAlwaysDropExp = getBoolean("mobs.zombie.always-drop-exp", zombieAlwaysDropExp); diff --git a/patches/unapplied-server/0224-Configurable-valid-characters-for-usernames.patch b/patches/server/0214-Configurable-valid-characters-for-usernames.patch similarity index 92% rename from patches/unapplied-server/0224-Configurable-valid-characters-for-usernames.patch rename to patches/server/0214-Configurable-valid-characters-for-usernames.patch index ca0221545..74603fa50 100644 --- a/patches/unapplied-server/0224-Configurable-valid-characters-for-usernames.patch +++ b/patches/server/0214-Configurable-valid-characters-for-usernames.patch @@ -17,10 +17,10 @@ index 0bd191acb9596d3aa21c337230d26f09d26f6888..20211f40aeeade9217ece087688974bd return false; } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 9ded52a0022e33a6b69191b5fa758d6cc7eb076f..cd27c2a3343133d688592791bec2a031410ff93f 100644 +index a44abb0b8d9a1a8222e6a198ab9c190558ec54fd..1baa623b0e2040556b53e25cac7b99f2a101ed42 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -452,4 +452,11 @@ public class PurpurConfig { +@@ -443,4 +443,11 @@ public class PurpurConfig { private static void networkSettings() { useUPnP = getBoolean("settings.network.upnp-port-forwarding", useUPnP); } diff --git a/patches/unapplied-server/0225-Shears-can-have-looting-enchantment.patch b/patches/server/0215-Shears-can-have-looting-enchantment.patch similarity index 90% rename from patches/unapplied-server/0225-Shears-can-have-looting-enchantment.patch rename to patches/server/0215-Shears-can-have-looting-enchantment.patch index ede10634d..66183d4c5 100644 --- a/patches/unapplied-server/0225-Shears-can-have-looting-enchantment.patch +++ b/patches/server/0215-Shears-can-have-looting-enchantment.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Shears can have looting enchantment diff --git a/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java -index a024c697a65bbab27408da1d6a75e531d9719b47..e4fab82b369f2c2ea0d8c8acd814d06140d551fc 100644 +index 44b79a7c2f8b95a484d1999fa2167ce588f7985b..68632372c8704058f35f12e0ae6cdd98ebd55937 100644 --- a/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java +++ b/src/main/java/net/minecraft/core/dispenser/ShearsDispenseItemBehavior.java -@@ -105,7 +105,7 @@ public class ShearsDispenseItemBehavior extends OptionalDispenseItemBehavior { +@@ -104,7 +104,7 @@ public class ShearsDispenseItemBehavior extends OptionalDispenseItemBehavior { if (ishearable.readyForShearing()) { // CraftBukkit start // Paper start - Add drops to shear events @@ -61,10 +61,10 @@ index 06fac8dae42451f912c2db14d792461cee3dba83..a7c95199234231db14faa4a07953bcde } return dropEntities; diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 9e617b3f1ec4eac5f83bdf19a3563cdc81b008d8..6b1244d3957e7f62c96ffd34692b8916337839fd 100644 +index a3d0991dcf570a009c5404ddbd7118895dc18c9d..9730fa382fd6b0bced858e0e4c26a1b51a0e0bd0 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -297,7 +297,7 @@ public class Sheep extends Animal implements Shearable { +@@ -295,7 +295,7 @@ public class Sheep extends Animal implements Shearable { if (!this.level().isClientSide && this.readyForShearing()) { // CraftBukkit start // Paper start - custom shear drops @@ -73,7 +73,7 @@ index 9e617b3f1ec4eac5f83bdf19a3563cdc81b008d8..6b1244d3957e7f62c96ffd34692b8916 org.bukkit.event.player.PlayerShearEntityEvent event = CraftEventFactory.handlePlayerShearEntityEvent(player, this, itemstack, hand, drops); if (event != null) { if (event.isCancelled()) { -@@ -322,12 +322,13 @@ public class Sheep extends Animal implements Shearable { +@@ -320,12 +320,13 @@ public class Sheep extends Animal implements Shearable { @Override public void shear(SoundSource shearedSoundCategory) { // Paper start - custom shear drops @@ -126,7 +126,7 @@ index 69cdccca01fe7d10e6d958e16d91efe08f699505..3b74931ae4e3a869d8db38c119e57b44 } diff --git a/src/main/java/net/minecraft/world/entity/monster/Bogged.java b/src/main/java/net/minecraft/world/entity/monster/Bogged.java -index ebec95ca146591f170d9e31bbc774e88806269a2..fed6e686c29ad0117731a80294e6725f41d8bf77 100644 +index 8f08b45b7e6279e2f57e3921ebe879082a5fd261..a39ea8cf75adbf84388b74222b3417a4c45acef5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Bogged.java +++ b/src/main/java/net/minecraft/world/entity/monster/Bogged.java @@ -181,7 +181,7 @@ public class Bogged extends AbstractSkeleton implements Shearable { @@ -139,21 +139,21 @@ index ebec95ca146591f170d9e31bbc774e88806269a2..fed6e686c29ad0117731a80294e6725f this.generateShearedMushrooms(drops::add); return drops; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 15d6e06c21643eb57386e3f0c0e89fcb7ac77c4b..9f128a6a76ee2297e8efdf9371d74fc7998328ce 100644 +index 1baa623b0e2040556b53e25cac7b99f2a101ed42..0dead6b5e2ec8f46767a86640c78374bfa2fdaa5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -391,6 +391,7 @@ public class PurpurConfig { +@@ -389,6 +389,7 @@ public class PurpurConfig { + } + } - public static boolean allowInfinityMending = false; - public static boolean allowCrossbowInfinity = true; + public static boolean allowShearsLooting = false; public static boolean allowUnsafeEnchants = false; public static boolean allowInapplicableEnchants = true; public static boolean allowIncompatibleEnchants = true; -@@ -413,6 +414,7 @@ public class PurpurConfig { +@@ -404,6 +405,7 @@ public class PurpurConfig { + set("settings.enchantment.anvil.allow-higher-enchants-levels", true); + set("settings.enchantment.allow-unsafe-enchants", null); } - allowInfinityMending = getBoolean("settings.enchantment.allow-infinity-and-mending-together", allowInfinityMending); - allowCrossbowInfinity = getBoolean("settings.enchantment.allow-infinity-on-crossbow", allowCrossbowInfinity); + allowShearsLooting = getBoolean("settings.enchantment.allow-looting-on-shears", allowShearsLooting); allowUnsafeEnchants = getBoolean("settings.enchantment.anvil.allow-unsafe-enchants", allowUnsafeEnchants); allowInapplicableEnchants = getBoolean("settings.enchantment.anvil.allow-inapplicable-enchants", allowInapplicableEnchants); diff --git a/patches/unapplied-server/0226-Stop-bees-from-dying-after-stinging.patch b/patches/server/0216-Stop-bees-from-dying-after-stinging.patch similarity index 83% rename from patches/unapplied-server/0226-Stop-bees-from-dying-after-stinging.patch rename to patches/server/0216-Stop-bees-from-dying-after-stinging.patch index 23846b878..5e7558996 100644 --- a/patches/unapplied-server/0226-Stop-bees-from-dying-after-stinging.patch +++ b/patches/server/0216-Stop-bees-from-dying-after-stinging.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Stop bees from dying after stinging 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 926c30db9b28a30fe5d6c8d20f3972dec0d7b4d0..221c0051c7a0e20c1b7a464df26eb63c4e997eee 100644 +index ca56f5781c1c02e40179a4dd359c5d167d3160dc..0dfdecff129a6b34833eb3fb7d7d967b131531ff 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -435,6 +435,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -446,6 +446,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.hurt(this.damageSources().drown(), 1.0F); } @@ -17,10 +17,10 @@ index 926c30db9b28a30fe5d6c8d20f3972dec0d7b4d0..221c0051c7a0e20c1b7a464df26eb63c ++this.timeSinceSting; if (this.timeSinceSting % 5 == 0 && this.random.nextInt(Mth.clamp(1200 - this.timeSinceSting, 1, 1200)) == 0) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2e4c53de39c7a439245017bf5cb4c1aec4b5b30b..c1da3aa2ccf8a90bfbbc02ca3b289d99d803be9a 100644 +index 238323047a08b4553129714ba34df44b6a8b27b2..940eccf00d46d24be22554ae3113e294a4085575 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1183,6 +1183,7 @@ public class PurpurWorldConfig { +@@ -1164,6 +1164,7 @@ public class PurpurWorldConfig { public boolean beeCanWorkAtNight = false; public boolean beeCanWorkInRain = false; public boolean beeAlwaysDropExp = false; @@ -28,7 +28,7 @@ index 2e4c53de39c7a439245017bf5cb4c1aec4b5b30b..c1da3aa2ccf8a90bfbbc02ca3b289d99 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -1199,6 +1200,7 @@ public class PurpurWorldConfig { +@@ -1180,6 +1181,7 @@ public class PurpurWorldConfig { beeCanWorkAtNight = getBoolean("mobs.bee.can-work-at-night", beeCanWorkAtNight); beeCanWorkInRain = getBoolean("mobs.bee.can-work-in-rain", beeCanWorkInRain); beeAlwaysDropExp = getBoolean("mobs.bee.always-drop-exp", beeAlwaysDropExp); diff --git a/patches/unapplied-server/0227-Give-bee-counts-in-beehives-to-Purpur-clients.patch b/patches/server/0217-Give-bee-counts-in-beehives-to-Purpur-clients.patch similarity index 95% rename from patches/unapplied-server/0227-Give-bee-counts-in-beehives-to-Purpur-clients.patch rename to patches/server/0217-Give-bee-counts-in-beehives-to-Purpur-clients.patch index 41ceac540..9de91d098 100644 --- a/patches/unapplied-server/0227-Give-bee-counts-in-beehives-to-Purpur-clients.patch +++ b/patches/server/0217-Give-bee-counts-in-beehives-to-Purpur-clients.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Give bee counts in beehives to Purpur clients diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index a8efb833d9efbc3367ddda1623ee1a0742cf3ea4..5b0c0ddd60d133d52b0405ad86cabc1c94ea998c 100644 +index 843d86bbb615d6257c143a3822a2af214af1a737..49020c26d2bf6d30fadc3352925a76b91c490561 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1067,6 +1067,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> { +@@ -534,11 +534,20 @@ public class Connection extends SimpleChannelInboundHandler> { private static final int MAX_PER_TICK = io.papermc.paper.configuration.GlobalConfiguration.get().misc.maxJoinsPerTick; // Paper - Buffer joins to world private static int joinAttemptsThisTick; // Paper - Buffer joins to world private static int currTick; // Paper - Buffer joins to world @@ -31,10 +31,10 @@ index f40420a6841f03983b0837e177ea2ae7c3a37ca1..3b66ecc4f110d0f2dc0ef6c560801296 } // Paper end - Buffer joins to world diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 6884aed8d03ee4da14baeaa5d6eaea54ff53afe5..d0e13dce484c9680128061efaef74555c57ca742 100644 +index cb5831c4ec2231d22da495c0e827b4b1694c16da..b0d7d0a72ff28a973a61a1a2d317402cdfe2e024 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -456,8 +456,10 @@ public class PurpurConfig { +@@ -447,8 +447,10 @@ public class PurpurConfig { } public static boolean useUPnP = false; diff --git a/patches/unapplied-server/0233-Configurable-minimum-demand-for-trades.patch b/patches/server/0223-Configurable-minimum-demand-for-trades.patch similarity index 89% rename from patches/unapplied-server/0233-Configurable-minimum-demand-for-trades.patch rename to patches/server/0223-Configurable-minimum-demand-for-trades.patch index 6442680b1..3b97aba8a 100644 --- a/patches/unapplied-server/0233-Configurable-minimum-demand-for-trades.patch +++ b/patches/server/0223-Configurable-minimum-demand-for-trades.patch @@ -9,10 +9,10 @@ This patch adds a config option to allow the minimum demand to instead be configurable. 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 17a247455dd853ae98e2f82f64a99bccc4d27438..4fa66af33ede3949f4e0236c806e3373f9dea730 100644 +index d78e6b3dd97973589c1d1c666164960d28c26ec8..567bb9e6c9ac9092469742b7d4e1ed73d8bd5519 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -545,7 +545,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -525,7 +525,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler while (iterator.hasNext()) { MerchantOffer merchantrecipe = (MerchantOffer) iterator.next(); @@ -40,10 +40,10 @@ index 0efc8d997b34302c3e0a5d7ec73a11a940dbeefe..af157881d440b34cfe79fbc9b03cc9ef public ItemStack assemble() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c751331118e37df2bab7d8e05e4a3dc9ee95dee4..0af1661cd5e8b803430a4adcdeb2275ab4876776 100644 +index 9507b6f8975777375d9260bca7a23f9916b5ec5f..20c17408972b37cc5504661b8ff43a0f971fd45f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2817,6 +2817,7 @@ public class PurpurWorldConfig { +@@ -2797,6 +2797,7 @@ public class PurpurWorldConfig { public boolean villagerTakeDamageFromWater = false; public boolean villagerAllowTrading = true; public boolean villagerAlwaysDropExp = false; @@ -51,7 +51,7 @@ index c751331118e37df2bab7d8e05e4a3dc9ee95dee4..0af1661cd5e8b803430a4adcdeb2275a private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2837,6 +2838,7 @@ public class PurpurWorldConfig { +@@ -2816,6 +2817,7 @@ public class PurpurWorldConfig { villagerTakeDamageFromWater = getBoolean("mobs.villager.takes-damage-from-water", villagerTakeDamageFromWater); villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp); diff --git a/patches/unapplied-server/0234-Lobotomize-stuck-villagers.patch b/patches/server/0224-Lobotomize-stuck-villagers.patch similarity index 86% rename from patches/unapplied-server/0234-Lobotomize-stuck-villagers.patch rename to patches/server/0224-Lobotomize-stuck-villagers.patch index 395250db6..4476adf3e 100644 --- a/patches/unapplied-server/0234-Lobotomize-stuck-villagers.patch +++ b/patches/server/0224-Lobotomize-stuck-villagers.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Lobotomize stuck villagers 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 4fa66af33ede3949f4e0236c806e3373f9dea730..dd74825c04543ae8c0bb1ab5eef6c8a152b621fd 100644 +index 567bb9e6c9ac9092469742b7d4e1ed73d8bd5519..96e9ba6da536c06a2bdb3522d1e0a5f1ea516707 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -142,6 +142,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -17,7 +17,7 @@ index 4fa66af33ede3949f4e0236c806e3373f9dea730..dd74825c04543ae8c0bb1ab5eef6c8a1 public Villager(EntityType entityType, Level world) { this(entityType, world, VillagerType.PLAINS); -@@ -199,6 +201,48 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -194,6 +196,48 @@ public class Villager extends AbstractVillager implements ReputationEventHandler return this.level().purpurConfig.villagerAlwaysDropExp; } @@ -66,27 +66,32 @@ index 4fa66af33ede3949f4e0236c806e3373f9dea730..dd74825c04543ae8c0bb1ab5eef6c8a1 @Override public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error -@@ -295,10 +339,19 @@ public class Villager extends AbstractVillager implements ReputationEventHandler - // Paper start - this.customServerAiStep(false); - } -- protected void customServerAiStep(final boolean inactive) { +@@ -275,9 +319,23 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + + @Override + protected void customServerAiStep() { ++ // Paper start ++ this.customServerAiStep(false); ++ } + protected void customServerAiStep(boolean inactive) { // Purpur - not final - // Paper end ++ // Paper end this.level().getProfiler().push("villagerBrain"); +- this.getBrain().tick((ServerLevel) this.level(), this); +- /*// Purpur start // Purpur - TODO: Pufferfish + // Purpur start + if (this.level().purpurConfig.villagerLobotomizeEnabled) { + // treat as inactive if lobotomized -+ inactive = inactive || checkLobotomized(); ++ // inactive = inactive || checkLobotomized(); // Purpur - TODO: 1-21: check later + } else { + this.isLobotomized = false; + } + // Purpur end - if (!inactive) this.getBrain().tick((ServerLevel) this.level(), this); // Paper -+ else if (this.isLobotomized && shouldRestock()) restock(); // Purpur - /*// Purpur start // Purpur - TODO: Pufferfish ++ /*if (!inactive) this.getBrain().tick((ServerLevel) this.level(), this); // Paper ++ else if (this.isLobotomized && shouldRestock()) restock(); // Purpur*/ // Purpur - TODO: 1-21: check later ++ /*// Purpur start // Purpur - TODO: Pufferfish if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) { // Purpur - only use brain if no rider this.getBrain().tick((ServerLevel) this.level(), this); // Paper + } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java index 6c15d40979fd3e3d246a447c432b321fbf29ada3..6ace76a829c88e2e747dbbcce0a6582c615fc56d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java @@ -104,10 +109,10 @@ index 6c15d40979fd3e3d246a447c432b321fbf29ada3..6ace76a829c88e2e747dbbcce0a6582c + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0af1661cd5e8b803430a4adcdeb2275ab4876776..eb68b8ca8921be15839fae902df4f73cbf754c8a 100644 +index 20c17408972b37cc5504661b8ff43a0f971fd45f..cc1a55ed607cac6d47ab92dbd93c06c791c8e9ce 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2818,6 +2818,9 @@ public class PurpurWorldConfig { +@@ -2798,6 +2798,9 @@ public class PurpurWorldConfig { public boolean villagerAllowTrading = true; public boolean villagerAlwaysDropExp = false; public int villagerMinimumDemand = 0; @@ -117,7 +122,7 @@ index 0af1661cd5e8b803430a4adcdeb2275ab4876776..eb68b8ca8921be15839fae902df4f73c private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2839,6 +2842,18 @@ public class PurpurWorldConfig { +@@ -2818,6 +2821,18 @@ public class PurpurWorldConfig { villagerAllowTrading = getBoolean("mobs.villager.allow-trading", villagerAllowTrading); villagerAlwaysDropExp = getBoolean("mobs.villager.always-drop-exp", villagerAlwaysDropExp); villagerMinimumDemand = getInt("mobs.villager.minimum-demand", villagerMinimumDemand); diff --git a/patches/unapplied-server/0235-Option-for-villager-display-trade-item.patch b/patches/server/0225-Option-for-villager-display-trade-item.patch similarity index 92% rename from patches/unapplied-server/0235-Option-for-villager-display-trade-item.patch rename to patches/server/0225-Option-for-villager-display-trade-item.patch index ee0efb397..dec8d3661 100644 --- a/patches/unapplied-server/0235-Option-for-villager-display-trade-item.patch +++ b/patches/server/0225-Option-for-villager-display-trade-item.patch @@ -17,10 +17,10 @@ index 18dad0825616c4167a0a7555689ee64910a87e09..6945992491027d43eca4f1ca697ad45c && this.lookTime > 0 && entity.getBrain().getMemory(MemoryModuleType.INTERACTION_TARGET).isPresent(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index eb68b8ca8921be15839fae902df4f73cbf754c8a..7594779136bc9ba3c7ed159bd47f4eac674367c4 100644 +index cc1a55ed607cac6d47ab92dbd93c06c791c8e9ce..df93ee542044d824b6a747a08c3002b6eea30830 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2821,6 +2821,7 @@ public class PurpurWorldConfig { +@@ -2801,6 +2801,7 @@ public class PurpurWorldConfig { public boolean villagerLobotomizeEnabled = false; public int villagerLobotomizeCheckInterval = 100; public boolean villagerLobotomizeWaitUntilTradeLocked = false; @@ -28,7 +28,7 @@ index eb68b8ca8921be15839fae902df4f73cbf754c8a..7594779136bc9ba3c7ed159bd47f4eac private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2854,6 +2855,7 @@ public class PurpurWorldConfig { +@@ -2833,6 +2834,7 @@ public class PurpurWorldConfig { villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled); villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval); villagerLobotomizeWaitUntilTradeLocked = getBoolean("mobs.villager.lobotomize.wait-until-trade-locked", villagerLobotomizeWaitUntilTradeLocked); diff --git a/patches/unapplied-server/0236-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch b/patches/server/0226-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch similarity index 86% rename from patches/unapplied-server/0236-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch rename to patches/server/0226-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch index e9256eddd..a335135b0 100644 --- a/patches/unapplied-server/0236-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch +++ b/patches/server/0226-MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch @@ -5,10 +5,10 @@ Subject: [PATCH] MC-238526 - Fix spawner not spawning water animals correctly diff --git a/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java b/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java -index 6f22705072fecbe91196e4966fca2eeec060f120..ed2ae44f7cef5aed17d10cc8a7df0a2276f9f16b 100644 +index c9cabb061ebc9172647304431cc3fb2593dd47ba..565408c03849fb3011fb708478a99ec6ffd081ef 100644 --- a/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java +++ b/src/main/java/net/minecraft/world/entity/animal/WaterAnimal.java -@@ -72,6 +72,6 @@ public abstract class WaterAnimal extends PathfinderMob { +@@ -71,6 +71,6 @@ public abstract class WaterAnimal extends PathfinderMob { i = world.getMinecraftWorld().paperConfig().entities.spawning.wateranimalSpawnHeight.maximum.or(i); j = world.getMinecraftWorld().paperConfig().entities.spawning.wateranimalSpawnHeight.minimum.or(j); // Paper end - Make water animal spawn height configurable @@ -17,10 +17,10 @@ index 6f22705072fecbe91196e4966fca2eeec060f120..ed2ae44f7cef5aed17d10cc8a7df0a22 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index aec0e4eec5095c12c7f52e5f955a6a04d05c9819..05307f584d96b95e9b81239316a256310422c039 100644 +index df93ee542044d824b6a747a08c3002b6eea30830..33dda8cc9738cde199e98cbaf643d65eabe016be 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1062,8 +1062,10 @@ public class PurpurWorldConfig { +@@ -1043,8 +1043,10 @@ public class PurpurWorldConfig { } public boolean spawnerDeactivateByRedstone = false; diff --git a/patches/unapplied-server/0237-Config-for-mob-last-hurt-by-player-time.patch b/patches/server/0227-Config-for-mob-last-hurt-by-player-time.patch similarity index 87% rename from patches/unapplied-server/0237-Config-for-mob-last-hurt-by-player-time.patch rename to patches/server/0227-Config-for-mob-last-hurt-by-player-time.patch index d60df3679..ceb0223a9 100644 --- a/patches/unapplied-server/0237-Config-for-mob-last-hurt-by-player-time.patch +++ b/patches/server/0227-Config-for-mob-last-hurt-by-player-time.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config for mob last hurt by player time diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 4744b0dd3f5e9e5f2d92bd8604610bc133977931..36102a9bafde35d30a5cf78999a1999daa05b7e1 100644 +index d543a75d27d343edca9930c9a4599cbd4a9de045..b3320e206e07a7b895fe28bcc4cc501c104bedd5 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1573,13 +1573,13 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1550,13 +1550,13 @@ public abstract class LivingEntity extends Entity implements Attackable { if (entity1 instanceof net.minecraft.world.entity.player.Player) { net.minecraft.world.entity.player.Player entityhuman = (net.minecraft.world.entity.player.Player) entity1; @@ -25,10 +25,10 @@ index 4744b0dd3f5e9e5f2d92bd8604610bc133977931..36102a9bafde35d30a5cf78999a1999d if (entityliving2 instanceof net.minecraft.world.entity.player.Player) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index b95d355ede8689af1f7f5a0424b5274e38839756..3ed19f30f1cab9df3b1bfdf0b0caf7882a77c5f7 100644 +index 88be8ebe619f2e42bdffab534da4f269b802cf41..ed594f9446646e30de3d4e8afa22f67222da8d87 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -@@ -512,7 +512,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -513,7 +513,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { net.minecraft.server.level.ServerPlayer entityPlayer = killer == null ? null : ((CraftPlayer) killer).getHandle(); getHandle().lastHurtByPlayer = entityPlayer; getHandle().lastHurtByMob = entityPlayer; @@ -38,10 +38,10 @@ index b95d355ede8689af1f7f5a0424b5274e38839756..3ed19f30f1cab9df3b1bfdf0b0caf788 // Paper end diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index bb4763d6200cdb99a37ce3af58362ae434e3aea9..d7fdefb27ae9361b631d29c61e82aff913814e92 100644 +index 33dda8cc9738cde199e98cbaf643d65eabe016be..f11014cfd9383cba0aeeb38df7d49731c2fc2456 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -143,6 +143,7 @@ public class PurpurWorldConfig { +@@ -141,6 +141,7 @@ public class PurpurWorldConfig { public boolean mobsIgnoreRails = false; public boolean rainStopsAfterSleep = true; public boolean thunderStopsAfterSleep = true; @@ -49,7 +49,7 @@ index bb4763d6200cdb99a37ce3af58362ae434e3aea9..d7fdefb27ae9361b631d29c61e82aff9 private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative); -@@ -175,6 +176,7 @@ public class PurpurWorldConfig { +@@ -171,6 +172,7 @@ public class PurpurWorldConfig { mobsIgnoreRails = getBoolean("gameplay-mechanics.mobs-ignore-rails", mobsIgnoreRails); rainStopsAfterSleep = getBoolean("gameplay-mechanics.rain-stops-after-sleep", rainStopsAfterSleep); thunderStopsAfterSleep = getBoolean("gameplay-mechanics.thunder-stops-after-sleep", thunderStopsAfterSleep); diff --git a/patches/unapplied-server/0238-Anvil-repair-damage-options.patch b/patches/server/0228-Anvil-repair-damage-options.patch similarity index 97% rename from patches/unapplied-server/0238-Anvil-repair-damage-options.patch rename to patches/server/0228-Anvil-repair-damage-options.patch index 1d67d451e..229174e98 100644 --- a/patches/unapplied-server/0238-Anvil-repair-damage-options.patch +++ b/patches/server/0228-Anvil-repair-damage-options.patch @@ -63,10 +63,10 @@ index 923357251ad950ec4f893e8771fcfa99de8a60c5..78a341ac80806f86f2ca0bd895fb091a protected InteractionResult useWithoutItem(BlockState state, Level world, BlockPos pos, Player player, BlockHitResult hit) { if (world.isClientSide) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 389aac3c02c16bbfe3f266e66e53f6107b27e4dd..fbb2ecbf00395175d7660c5a9fe4987db9ce13b1 100644 +index f11014cfd9383cba0aeeb38df7d49731c2fc2456..697aa18d5b02935c0d479a0609aac094831dec7c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -829,9 +829,13 @@ public class PurpurWorldConfig { +@@ -810,9 +810,13 @@ public class PurpurWorldConfig { public boolean anvilAllowColors = false; public boolean anvilColorsUseMiniMessage; diff --git a/patches/unapplied-server/0239-Option-to-disable-turtle-egg-trampling-with-feather-.patch b/patches/server/0229-Option-to-disable-turtle-egg-trampling-with-feather-.patch similarity index 94% rename from patches/unapplied-server/0239-Option-to-disable-turtle-egg-trampling-with-feather-.patch rename to patches/server/0229-Option-to-disable-turtle-egg-trampling-with-feather-.patch index 79abce6ed..200e26dd7 100644 --- a/patches/unapplied-server/0239-Option-to-disable-turtle-egg-trampling-with-feather-.patch +++ b/patches/server/0229-Option-to-disable-turtle-egg-trampling-with-feather-.patch @@ -24,10 +24,10 @@ index 2f0e8aeb9c45853fca12ddd78a7d51813a600e67..08ba90f760abb9fb62311dddd7b5bdbd return world.purpurConfig.turtleEggsBypassMobGriefing || world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur end diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fbb2ecbf00395175d7660c5a9fe4987db9ce13b1..ebce13b3a25f26c22bbe8a25d38b76027b630401 100644 +index 697aa18d5b02935c0d479a0609aac094831dec7c..dae16114d51e21455442ef590d331ca25ec6329f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1090,12 +1090,14 @@ public class PurpurWorldConfig { +@@ -1071,12 +1071,14 @@ public class PurpurWorldConfig { public boolean turtleEggsBreakFromMinecarts = false; public boolean turtleEggsBypassMobGriefing = false; public int turtleEggsRandomTickCrackChance = 500; diff --git a/patches/unapplied-server/0240-Add-toggle-for-enchant-level-clamping.patch b/patches/server/0230-Add-toggle-for-enchant-level-clamping.patch similarity index 70% rename from patches/unapplied-server/0240-Add-toggle-for-enchant-level-clamping.patch rename to patches/server/0230-Add-toggle-for-enchant-level-clamping.patch index e1bddbfc0..f0128c8b1 100644 --- a/patches/unapplied-server/0240-Add-toggle-for-enchant-level-clamping.patch +++ b/patches/server/0230-Add-toggle-for-enchant-level-clamping.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add toggle for enchant level clamping diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index 5443013060b62e3bfcc51cddca96d1c0bc59fe72..8925440dbc35dbc4a7d59f13511d7afeda803260 100644 +index c33f85b570f159ab465b5a10a8044a81f2797f43..824afdc486a50952bf5e32b06509f7952da9bba5 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java @@ -119,6 +119,11 @@ public class Main { @@ -21,19 +21,19 @@ index 5443013060b62e3bfcc51cddca96d1c0bc59fe72..8925440dbc35dbc4a7d59f13511d7afe Bootstrap.bootStrap(); Bootstrap.validate(); diff --git a/src/main/java/net/minecraft/world/item/enchantment/ItemEnchantments.java b/src/main/java/net/minecraft/world/item/enchantment/ItemEnchantments.java -index af18de11dd55938b6091f5ab183bd3fe4e8df152..2c741860afa1fa4d5798c68b84ec3fe13157ff09 100644 +index 8ac485d82c2d2b32f4d54e02c18c2cb2c3df4fa4..9ebe6a5f31ceacd33d9c111966ad941b535b4e67 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/ItemEnchantments.java +++ b/src/main/java/net/minecraft/world/item/enchantment/ItemEnchantments.java -@@ -37,7 +37,7 @@ public class ItemEnchantments implements TooltipProvider { +@@ -35,7 +35,7 @@ public class ItemEnchantments implements TooltipProvider { + private static final java.util.Comparator> ENCHANTMENT_ORDER = java.util.Comparator.comparing(Holder::getRegisteredName); public static final ItemEnchantments EMPTY = new ItemEnchantments(new Object2IntAVLTreeMap<>(ENCHANTMENT_ORDER), true); // Paper end - public static final int MAX_LEVEL = 255; - private static final Codec LEVEL_CODEC = Codec.intRange(0, 255); + private static final Codec LEVEL_CODEC = Codec.intRange(0, (org.purpurmc.purpur.PurpurConfig.clampEnchantLevels ? 255 : 32767)); // Purpur - private static final Codec>> LEVELS_CODEC = Codec.unboundedMap( // Paper - BuiltInRegistries.ENCHANTMENT.holderByNameCodec(), LEVEL_CODEC - ) -@@ -72,7 +72,7 @@ public class ItemEnchantments implements TooltipProvider { + private static final Codec>> LEVELS_CODEC = Codec.unboundedMap( + Enchantment.CODEC, LEVEL_CODEC + )// Paper start - sort enchantments +@@ -69,7 +69,7 @@ public class ItemEnchantments implements TooltipProvider { for (Entry> entry : enchantments.object2IntEntrySet()) { int i = entry.getIntValue(); @@ -42,35 +42,35 @@ index af18de11dd55938b6091f5ab183bd3fe4e8df152..2c741860afa1fa4d5798c68b84ec3fe1 throw new IllegalArgumentException("Enchantment " + entry.getKey() + " has invalid level " + i); } } -@@ -169,13 +169,13 @@ public class ItemEnchantments implements TooltipProvider { +@@ -166,13 +166,13 @@ public class ItemEnchantments implements TooltipProvider { if (level <= 0) { - this.enchantments.removeInt(enchantment.builtInRegistryHolder()); + this.enchantments.removeInt(enchantment); } else { -- this.enchantments.put(enchantment.builtInRegistryHolder(), Math.min(level, 255)); -+ this.enchantments.put(enchantment.builtInRegistryHolder(), Math.min(level, (org.purpurmc.purpur.PurpurConfig.clampEnchantLevels ? 255 : 32767))); +- this.enchantments.put(enchantment, Math.min(level, 255)); ++ this.enchantments.put(enchantment, Math.min(level, (org.purpurmc.purpur.PurpurConfig.clampEnchantLevels ? 255 : 32767))); // Purpur } } - public void upgrade(Enchantment enchantment, int level) { + public void upgrade(Holder enchantment, int level) { if (level > 0) { -- this.enchantments.merge(enchantment.builtInRegistryHolder(), Math.min(level, 255), Integer::max); -+ this.enchantments.merge(enchantment.builtInRegistryHolder(), Math.min(level, (org.purpurmc.purpur.PurpurConfig.clampEnchantLevels ? 255 : 32767)), Integer::max); +- this.enchantments.merge(enchantment, Math.min(level, 255), Integer::max); ++ this.enchantments.merge(enchantment, Math.min(level, (org.purpurmc.purpur.PurpurConfig.clampEnchantLevels ? 255 : 32767)), Integer::max); // Purpur } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 5879af630bc3711a17d51f455585ccd31f7a6d88..7462474f7eff9f50644d0b7ceac341f237c93df0 100644 +index b0d7d0a72ff28a973a61a1a2d317402cdfe2e024..08b10246b4cb7374a230bea470d737670dae5edd 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -398,6 +398,7 @@ public class PurpurConfig { +@@ -396,6 +396,7 @@ public class PurpurConfig { public static boolean allowHigherEnchantsLevels = true; public static boolean allowUnsafeEnchantCommand = false; public static boolean replaceIncompatibleEnchants = false; + public static boolean clampEnchantLevels = true; private static void enchantmentSettings() { - if (version < 5) { - boolean oldValue = getBoolean("settings.enchantment.allow-infinite-and-mending-together", false); -@@ -421,6 +422,7 @@ public class PurpurConfig { + if (version < 30) { + boolean oldValue = getBoolean("settings.enchantment.allow-unsafe-enchants", false); +@@ -412,6 +413,7 @@ public class PurpurConfig { allowHigherEnchantsLevels = getBoolean("settings.enchantment.anvil.allow-higher-enchants-levels", allowHigherEnchantsLevels); allowUnsafeEnchantCommand = getBoolean("settings.enchantment.allow-unsafe-enchant-command", allowUnsafeEnchants); // allowUnsafeEnchants as default for backwards compatability replaceIncompatibleEnchants = getBoolean("settings.enchantment.anvil.replace-incompatible-enchants", replaceIncompatibleEnchants); diff --git a/patches/unapplied-server/0241-Skip-junit-tests-for-purpur-commands.patch b/patches/server/0231-Skip-junit-tests-for-purpur-commands.patch similarity index 80% rename from patches/unapplied-server/0241-Skip-junit-tests-for-purpur-commands.patch rename to patches/server/0231-Skip-junit-tests-for-purpur-commands.patch index d8c96ae4a..6ab3a0a64 100644 --- a/patches/unapplied-server/0241-Skip-junit-tests-for-purpur-commands.patch +++ b/patches/server/0231-Skip-junit-tests-for-purpur-commands.patch @@ -5,18 +5,18 @@ Subject: [PATCH] Skip junit tests for purpur commands diff --git a/src/test/java/io/papermc/paper/permissions/MinecraftCommandPermissionsTest.java b/src/test/java/io/papermc/paper/permissions/MinecraftCommandPermissionsTest.java -index 2f3ff50bf3f70b6b404d02d5ffcc079162a63bc1..4e57fdf21d4b7789cd7c3d3a18ddc6227bc77792 100644 +index ca71c688b37ce2c8b712a4f9216cf872c8edf78e..83f2c04d083eced64bc67661eed0ddfdddc497cc 100644 --- a/src/test/java/io/papermc/paper/permissions/MinecraftCommandPermissionsTest.java +++ b/src/test/java/io/papermc/paper/permissions/MinecraftCommandPermissionsTest.java -@@ -48,6 +48,7 @@ public class MinecraftCommandPermissionsTest extends AbstractTestingBase { - if ("bukkit.command.paper.pgive".equals(vanillaPerm)) { // skip our custom give command - continue; - } +@@ -45,6 +45,7 @@ public class MinecraftCommandPermissionsTest extends AbstractTestingBase { + Set foundPerms = new HashSet<>(); + for (CommandNode child : root.getChildren()) { + final String vanillaPerm = VanillaCommandWrapper.getPermission(child); + if (TO_SKIP.contains(vanillaPerm)) continue; // Purpur if (!perms.contains(vanillaPerm)) { missing.add("Missing permission for " + child.getName() + " (" + vanillaPerm + ") command"); } else { -@@ -60,6 +61,25 @@ public class MinecraftCommandPermissionsTest extends AbstractTestingBase { +@@ -57,6 +58,25 @@ public class MinecraftCommandPermissionsTest extends AbstractTestingBase { } private static final List TO_SKIP = List.of( diff --git a/patches/unapplied-server/0242-Implement-configurable-search-radius-for-villagers-t.patch b/patches/server/0232-Implement-configurable-search-radius-for-villagers-t.patch similarity index 87% rename from patches/unapplied-server/0242-Implement-configurable-search-radius-for-villagers-t.patch rename to patches/server/0232-Implement-configurable-search-radius-for-villagers-t.patch index e705abaf1..1e401ebb6 100644 --- a/patches/unapplied-server/0242-Implement-configurable-search-radius-for-villagers-t.patch +++ b/patches/server/0232-Implement-configurable-search-radius-for-villagers-t.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Implement configurable search radius for villagers to spawn 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 dd74825c04543ae8c0bb1ab5eef6c8a152b621fd..dcf580d852ede8ea01f5d91944a224ec6eca73e4 100644 +index 96e9ba6da536c06a2bdb3522d1e0a5f1ea516707..3384b439e72b15303af2cdb01571178e7af18fda 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -1095,6 +1095,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1080,6 +1080,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } public void spawnGolemIfNeeded(ServerLevel world, long time, int requiredCount) { @@ -18,10 +18,10 @@ index dd74825c04543ae8c0bb1ab5eef6c8a152b621fd..dcf580d852ede8ea01f5d91944a224ec 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 1f4a19bc5c2c0e39eb4190b159aa95c147ab61bb..5eda0c83dde230af7b90aa7e630bf988f2a25b02 100644 +index dae16114d51e21455442ef590d331ca25ec6329f..5a44626d821dcc6565fc7d2260eb2ca6c0c8067c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2832,6 +2832,8 @@ public class PurpurWorldConfig { +@@ -2812,6 +2812,8 @@ public class PurpurWorldConfig { public int villagerLobotomizeCheckInterval = 100; public boolean villagerLobotomizeWaitUntilTradeLocked = false; public boolean villagerDisplayTradeItem = true; @@ -30,7 +30,7 @@ index 1f4a19bc5c2c0e39eb4190b159aa95c147ab61bb..5eda0c83dde230af7b90aa7e630bf988 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -2866,6 +2868,8 @@ public class PurpurWorldConfig { +@@ -2845,6 +2847,8 @@ public class PurpurWorldConfig { villagerLobotomizeCheckInterval = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheckInterval); villagerLobotomizeWaitUntilTradeLocked = getBoolean("mobs.villager.lobotomize.wait-until-trade-locked", villagerLobotomizeWaitUntilTradeLocked); villagerDisplayTradeItem = getBoolean("mobs.villager.display-trade-item", villagerDisplayTradeItem); diff --git a/patches/unapplied-server/0243-Stonecutter-damage.patch b/patches/server/0233-Stonecutter-damage.patch similarity index 91% rename from patches/unapplied-server/0243-Stonecutter-damage.patch rename to patches/server/0233-Stonecutter-damage.patch index 7da594216..8307858eb 100644 --- a/patches/unapplied-server/0243-Stonecutter-damage.patch +++ b/patches/server/0233-Stonecutter-damage.patch @@ -18,7 +18,7 @@ index a375d40ec6365ba8704ba3ece22dd5b2de9857b5..357a79d72a2de02a019595e457fe432b // Purpur end return damageSource.getLocalizedDeathMessage(this.mob); diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index bf7a9858bc32c9c365b1c6cebc9e6fd4bc878934..e0d13102f18c78915ff64dab78ca157954c44ae0 100644 +index aa65f4bf60172a2629daf6e15f7f48d29b250ee0..d95d122601dd47a27e8d82a13b071919c360fe68 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java @@ -30,6 +30,7 @@ public class DamageSource { @@ -54,10 +54,10 @@ index bf7a9858bc32c9c365b1c6cebc9e6fd4bc878934..e0d13102f18c78915ff64dab78ca1579 } // CraftBukkit end diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSources.java b/src/main/java/net/minecraft/world/damagesource/DamageSources.java -index 159e6327c8e96da25c8dcbb8276422cc2580cd76..b1fb94380b7d6bd2a3be31a4e8fe95367e948fe2 100644 +index da790aac3bd8981f351b7e241015ff42bd0da73b..d143bba490bfb677361ab82c44f0f31a4a2a43d6 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSources.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSources.java -@@ -45,12 +45,14 @@ public class DamageSources { +@@ -46,12 +46,14 @@ public class DamageSources { private final DamageSource melting; private final DamageSource poison; private final DamageSource scissors; // Purpur @@ -71,8 +71,8 @@ index 159e6327c8e96da25c8dcbb8276422cc2580cd76..b1fb94380b7d6bd2a3be31a4e8fe9536 + this.stonecutter = this.source(DamageTypes.MAGIC).stonecutter(); // Purpur // CraftBukkit end this.inFire = this.source(DamageTypes.IN_FIRE); - this.lightningBolt = this.source(DamageTypes.LIGHTNING_BOLT); -@@ -103,6 +105,9 @@ public class DamageSources { + this.campfire = this.source(DamageTypes.CAMPFIRE); +@@ -105,6 +107,9 @@ public class DamageSources { public DamageSource scissors() { return this.scissors; } @@ -115,10 +115,10 @@ index 31ae0f466ae522d767907ec5066b26695f327b96..f26383cf896785333dbd6f86348d5a5f } else if (blockState.is(Blocks.HONEY_BLOCK)) { return PathType.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 b4fba33f2e2d15d35ac3e884026572a696082160..e650b85464ac886b4adb1a8924026d34f805aba6 100644 +index 9e5d4e8a70aec8619db68d75ef3447cf39e239b9..f6dfc393cc444a794dca891bf5a73c461d6ae4bc 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1132,7 +1132,7 @@ public class CraftEventFactory { +@@ -1133,7 +1133,7 @@ public class CraftEventFactory { return CraftEventFactory.callEntityDamageEvent(source.getDirectBlock(), source.getDirectBlockState(), entity, DamageCause.LAVA, bukkitDamageSource, modifiers, modifierFunctions, cancelled); } else if (source.getDirectBlock() != null) { DamageCause cause; @@ -128,7 +128,7 @@ index b4fba33f2e2d15d35ac3e884026572a696082160..e650b85464ac886b4adb1a8924026d34 } else if (source.is(DamageTypes.HOT_FLOOR)) { cause = DamageCause.HOT_FLOOR; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 24af99bcc9d64001bbe447e8ece1f0d803727923..88304f65be13a9427acddc5e7d92465545143109 100644 +index 08b10246b4cb7374a230bea470d737670dae5edd..8aa2354bee8de0193863628c2d928699949dbc10 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -209,8 +209,10 @@ public class PurpurConfig { @@ -143,10 +143,10 @@ index 24af99bcc9d64001bbe447e8ece1f0d803727923..88304f65be13a9427acddc5e7d924655 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 31497cad3276cc2e9bd5a0e745619eb04fecf25a..37f638b7f1fe63a2b8e44b40a4ef6f6f419684fc 100644 +index 5a44626d821dcc6565fc7d2260eb2ca6c0c8067c..b32a0729304e17b8f2c71a7b8945c77698f5ae7d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1085,6 +1085,11 @@ public class PurpurWorldConfig { +@@ -1066,6 +1066,11 @@ public class PurpurWorldConfig { spongeAbsorbsWaterFromMud = getBoolean("blocks.sponge.absorbs-water-from-mud", spongeAbsorbsWaterFromMud); } diff --git a/patches/unapplied-server/0244-Configurable-damage-settings-for-magma-blocks.patch b/patches/server/0234-Configurable-damage-settings-for-magma-blocks.patch similarity index 77% rename from patches/unapplied-server/0244-Configurable-damage-settings-for-magma-blocks.patch rename to patches/server/0234-Configurable-damage-settings-for-magma-blocks.patch index dc19fb56d..f0d1f8b73 100644 --- a/patches/unapplied-server/0244-Configurable-damage-settings-for-magma-blocks.patch +++ b/patches/server/0234-Configurable-damage-settings-for-magma-blocks.patch @@ -5,23 +5,24 @@ Subject: [PATCH] Configurable damage settings for magma blocks 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 77bbdc15472d656fd40e841a70e34d3d31580819..55ae530fac54236ea5614f8e92c30febc744f179 100644 +index 02d59789c09f58045fea302ea6f2ee3856114de3..547330eee0cf46fdd3755dc16b38f2d3c2bbff38 100644 --- a/src/main/java/net/minecraft/world/level/block/MagmaBlock.java +++ b/src/main/java/net/minecraft/world/level/block/MagmaBlock.java -@@ -29,7 +29,7 @@ public class MagmaBlock extends Block { +@@ -28,7 +28,8 @@ public class MagmaBlock extends Block { @Override public void stepOn(Level world, BlockPos pos, BlockState state, Entity entity) { -- 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 +- if (!entity.isSteppingCarefully() && entity instanceof LivingEntity) { ++ // && (world.purpurConfig.magmaBlockDamageWithFrostWalker || !EnchantmentHelper.hasFrostWalker((LivingEntity) entity))) { // Purpur // Purpur - TODO: 1-21: check later ++ if ((!entity.isSteppingCarefully() || world.purpurConfig.magmaBlockDamageWhenSneaking) && entity instanceof LivingEntity) { // Purpur // Purpur - TODO: 1-21: check later entity.hurt(world.damageSources().hotFloor().directBlock(world, pos), 1.0F); // CraftBukkit } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 37f638b7f1fe63a2b8e44b40a4ef6f6f419684fc..8e95fce5be2c9ba2893b2ccc60a2fd6ea2927a62 100644 +index b32a0729304e17b8f2c71a7b8945c77698f5ae7d..7bf622044a28fa311bf5280ebb9496cc2c2edc18 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1026,6 +1026,13 @@ public class PurpurWorldConfig { +@@ -1007,6 +1007,13 @@ public class PurpurWorldConfig { pistonBlockPushLimit = getInt("blocks.piston.block-push-limit", pistonBlockPushLimit); } diff --git a/patches/unapplied-server/0245-Add-config-for-snow-on-blue-ice.patch b/patches/server/0235-Add-config-for-snow-on-blue-ice.patch similarity index 93% rename from patches/unapplied-server/0245-Add-config-for-snow-on-blue-ice.patch rename to patches/server/0235-Add-config-for-snow-on-blue-ice.patch index 543e3dec5..81b3d0218 100644 --- a/patches/unapplied-server/0245-Add-config-for-snow-on-blue-ice.patch +++ b/patches/server/0235-Add-config-for-snow-on-blue-ice.patch @@ -22,10 +22,10 @@ index 93e8e5107ac047c1f2579b4fe6b0a202edb695f6..f82d275aac7bf3949d3dcc412c7e39e1 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 8e95fce5be2c9ba2893b2ccc60a2fd6ea2927a62..59cabf7be670c05af5c5a24080fb65e318f5a843 100644 +index 7bf622044a28fa311bf5280ebb9496cc2c2edc18..0fe2b9ca4f8a558233a8284b3cbfa80be5e6df7f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1007,9 +1007,11 @@ public class PurpurWorldConfig { +@@ -988,9 +988,11 @@ public class PurpurWorldConfig { public boolean mobsSpawnOnPackedIce = true; public boolean mobsSpawnOnBlueIce = true; diff --git a/patches/unapplied-server/0246-Skeletons-eat-wither-roses.patch b/patches/server/0236-Skeletons-eat-wither-roses.patch similarity index 92% rename from patches/unapplied-server/0246-Skeletons-eat-wither-roses.patch rename to patches/server/0236-Skeletons-eat-wither-roses.patch index 6deee552c..df403da3d 100644 --- a/patches/unapplied-server/0246-Skeletons-eat-wither-roses.patch +++ b/patches/server/0236-Skeletons-eat-wither-roses.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Skeletons eat wither roses diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java -index 1aae461eed332fe31c1449c47d0928f655c740da..9eb6ed001bfc578311300977dda6f3f156d07190 100644 +index 3f81faffc1a54ab1148c410ef80964d9876e4b77..dfa8bd613c7575338c6bb76234b7cb4ac391a4cd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java -@@ -14,6 +14,16 @@ import net.minecraft.world.item.Items; +@@ -15,6 +15,16 @@ import net.minecraft.world.item.Items; import net.minecraft.world.level.ItemLike; import net.minecraft.world.level.Level; @@ -25,7 +25,7 @@ index 1aae461eed332fe31c1449c47d0928f655c740da..9eb6ed001bfc578311300977dda6f3f1 public class Skeleton extends AbstractSkeleton { private static final int TOTAL_CONVERSION_TIME = 300; -@@ -174,4 +184,67 @@ public class Skeleton extends AbstractSkeleton { +@@ -175,4 +185,67 @@ public class Skeleton extends AbstractSkeleton { } } @@ -94,10 +94,10 @@ index 1aae461eed332fe31c1449c47d0928f655c740da..9eb6ed001bfc578311300977dda6f3f1 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 659d2f3981d901ff8b7daa135aa7e449314a669e..1cdda64daf34c72a65bc382d0d2bb17f92e86bed 100644 +index 0fe2b9ca4f8a558233a8284b3cbfa80be5e6df7f..74fb65e2df979c3583c74d6b4db510b9a2ee483b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -2515,6 +2515,7 @@ public class PurpurWorldConfig { +@@ -2496,6 +2496,7 @@ public class PurpurWorldConfig { public boolean skeletonTakeDamageFromWater = false; public boolean skeletonAlwaysDropExp = false; public double skeletonHeadVisibilityPercent = 0.5D; @@ -105,7 +105,7 @@ index 659d2f3981d901ff8b7daa135aa7e449314a669e..1cdda64daf34c72a65bc382d0d2bb17f private void skeletonSettings() { skeletonRidable = getBoolean("mobs.skeleton.ridable", skeletonRidable); skeletonRidableInWater = getBoolean("mobs.skeleton.ridable-in-water", skeletonRidableInWater); -@@ -2528,6 +2529,7 @@ public class PurpurWorldConfig { +@@ -2509,6 +2510,7 @@ public class PurpurWorldConfig { skeletonTakeDamageFromWater = getBoolean("mobs.skeleton.takes-damage-from-water", skeletonTakeDamageFromWater); skeletonAlwaysDropExp = getBoolean("mobs.skeleton.always-drop-exp", skeletonAlwaysDropExp); skeletonHeadVisibilityPercent = getDouble("mobs.skeleton.head-visibility-percent", skeletonHeadVisibilityPercent); diff --git a/patches/unapplied-server/0247-Enchantment-Table-Persists-Lapis.patch b/patches/server/0237-Enchantment-Table-Persists-Lapis.patch similarity index 91% rename from patches/unapplied-server/0247-Enchantment-Table-Persists-Lapis.patch rename to patches/server/0237-Enchantment-Table-Persists-Lapis.patch index 61a86d54b..771016eea 100644 --- a/patches/unapplied-server/0247-Enchantment-Table-Persists-Lapis.patch +++ b/patches/server/0237-Enchantment-Table-Persists-Lapis.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Enchantment Table Persists Lapis diff --git a/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java b/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java -index 480d093105073edfd3acdd7b079b4ca5aa5fdc6d..6d28f1097caa3e37c2917eb401018ebf48c13a39 100644 +index 07223046761cb2186d75de8edc03a91d2e8e8b2f..4e5d497b966a04d42b988d26039cbbcc3da7121c 100644 --- a/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java +++ b/src/main/java/net/minecraft/world/inventory/EnchantmentMenu.java -@@ -39,6 +39,12 @@ import org.bukkit.event.enchantment.PrepareItemEnchantEvent; +@@ -45,6 +45,12 @@ import org.bukkit.event.enchantment.PrepareItemEnchantEvent; import org.bukkit.entity.Player; // CraftBukkit end @@ -20,8 +20,8 @@ index 480d093105073edfd3acdd7b079b4ca5aa5fdc6d..6d28f1097caa3e37c2917eb401018ebf + public class EnchantmentMenu extends AbstractContainerMenu { - static final ResourceLocation EMPTY_SLOT_LAPIS_LAZULI = new ResourceLocation("item/empty_slot_lapis_lazuli"); -@@ -73,6 +79,22 @@ public class EnchantmentMenu extends AbstractContainerMenu { + static final ResourceLocation EMPTY_SLOT_LAPIS_LAZULI = ResourceLocation.withDefaultNamespace("item/empty_slot_lapis_lazuli"); +@@ -79,6 +85,22 @@ public class EnchantmentMenu extends AbstractContainerMenu { return context.getLocation(); } // CraftBukkit end @@ -44,7 +44,7 @@ index 480d093105073edfd3acdd7b079b4ca5aa5fdc6d..6d28f1097caa3e37c2917eb401018ebf }; this.random = RandomSource.create(); this.enchantmentSeed = DataSlot.standalone(); -@@ -98,6 +120,17 @@ public class EnchantmentMenu extends AbstractContainerMenu { +@@ -104,6 +126,17 @@ public class EnchantmentMenu extends AbstractContainerMenu { } }); @@ -62,7 +62,7 @@ index 480d093105073edfd3acdd7b079b4ca5aa5fdc6d..6d28f1097caa3e37c2917eb401018ebf int j; for (j = 0; j < 3; ++j) { -@@ -333,6 +366,7 @@ public class EnchantmentMenu extends AbstractContainerMenu { +@@ -344,6 +377,7 @@ public class EnchantmentMenu extends AbstractContainerMenu { public void removed(net.minecraft.world.entity.player.Player player) { super.removed(player); this.access.execute((world, blockposition) -> { @@ -137,10 +137,10 @@ index d47bc2f54c4722a0b8c419b99ee57eb3cb25d750..fdeabdcc781b605d6f3ee18528fd380f + // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1cdda64daf34c72a65bc382d0d2bb17f92e86bed..43197f65e98c155e40de1e600ab5db747877f0b2 100644 +index 74fb65e2df979c3583c74d6b4db510b9a2ee483b..0cf7abfc6d37dcf127cdb28fe81bcd299eda67e1 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1552,6 +1552,11 @@ public class PurpurWorldConfig { +@@ -1533,6 +1533,11 @@ public class PurpurWorldConfig { elderGuardianAlwaysDropExp = getBoolean("mobs.elder_guardian.always-drop-exp", elderGuardianAlwaysDropExp); } diff --git a/patches/unapplied-server/0248-Spark-Profiler.patch b/patches/server/0238-Spark-Profiler.patch similarity index 100% rename from patches/unapplied-server/0248-Spark-Profiler.patch rename to patches/server/0238-Spark-Profiler.patch diff --git a/patches/unapplied-server/0249-Option-to-disable-kick-for-out-of-order-chat.patch b/patches/server/0239-Option-to-disable-kick-for-out-of-order-chat.patch similarity index 84% rename from patches/unapplied-server/0249-Option-to-disable-kick-for-out-of-order-chat.patch rename to patches/server/0239-Option-to-disable-kick-for-out-of-order-chat.patch index d9f7ab48b..b4185da70 100644 --- a/patches/unapplied-server/0249-Option-to-disable-kick-for-out-of-order-chat.patch +++ b/patches/server/0239-Option-to-disable-kick-for-out-of-order-chat.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Option to disable kick for out of order chat diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 222436febf0b6ea93b57b8a4c0a98998a9430873..e54be01cb1629616c2952ea99c6f28f09a592773 100644 +index 6ba7813b48fe0db81cb895937837bd463f458d62..c1f345fed7c5f95a87e3cc74e8ec200fcc49e777 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1722,7 +1722,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1662,7 +1662,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl do { if (!iterator.hasNext()) { @@ -18,10 +18,10 @@ index 222436febf0b6ea93b57b8a4c0a98998a9430873..e54be01cb1629616c2952ea99c6f28f0 voxelshape1 = (VoxelShape) iterator.next(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index cb8f67f0ad3531b110613c0ffb3c0cc23da23529..620f1207fc773f8602b748128557f1c73f0319fb 100644 +index 8aa2354bee8de0193863628c2d928699949dbc10..bbb7afbfb84b0d8e45f6e0de61f4f3e8c9315431 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -461,9 +461,11 @@ public class PurpurConfig { +@@ -452,9 +452,11 @@ public class PurpurConfig { public static boolean useUPnP = false; public static boolean maxJoinsPerSecond = false; diff --git a/patches/unapplied-server/0250-Config-for-sculk-shrieker-can_summon-state.patch b/patches/server/0240-Config-for-sculk-shrieker-can_summon-state.patch similarity index 92% rename from patches/unapplied-server/0250-Config-for-sculk-shrieker-can_summon-state.patch rename to patches/server/0240-Config-for-sculk-shrieker-can_summon-state.patch index 555f9bb73..5b81b4e27 100644 --- a/patches/unapplied-server/0250-Config-for-sculk-shrieker-can_summon-state.patch +++ b/patches/server/0240-Config-for-sculk-shrieker-can_summon-state.patch @@ -18,10 +18,10 @@ index b6b367492ebe2af3e63381bef935c6077f6ddb27..09f34c30d9a03751ed826b26375ac5ae @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 38f161e102c5202c79108ad150ff42af1a75658c..6dc3d5a420005a859560ebb85009183b446a0531 100644 +index 0cf7abfc6d37dcf127cdb28fe81bcd299eda67e1..6441a55bda07bacd23918a7cb74cacbfe45688ae 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1066,6 +1066,11 @@ public class PurpurWorldConfig { +@@ -1047,6 +1047,11 @@ public class PurpurWorldConfig { } }