From b14424ee72d29a644c3361af7fd82250c8651cd8 Mon Sep 17 00:00:00 2001 From: granny Date: Fri, 25 Oct 2024 22:02:48 -0700 Subject: [PATCH] 100 patches... --- ...e-to-recipe-s-ExactChoice-ingredient.patch | 0 .../0048-Implement-infinite-liquids.patch} | 34 +-- ...9-Make-lava-flow-speed-configurable.patch} | 8 +- ...dd-player-death-exp-control-options.patch} | 38 +-- ...rable-void-damage-height-and-damage.patch} | 22 +- .../0052-Add-canSaveToDisk-to-Entity.patch} | 14 +- ...spenser-curse-of-binding-protection.patch} | 45 ++-- ...-for-boats-to-eject-players-on-land.patch} | 21 +- ...-mends-most-damages-equipment-first.patch} | 19 +- ...056-Add-5-second-tps-average-in-tps.patch} | 12 +- .../0057-Implement-elytra-settings.patch | 134 ++++++++++ .../0058-Item-entity-immunities.patch} | 22 +- .../0059-Add-ping-command.patch} | 6 +- .../0060-Add-demo-command.patch} | 6 +- .../0061-Add-credits-command.patch} | 6 +- .../0062-Configurable-jockey-options.patch} | 52 ++-- ...d-to-crystals-and-crystals-shoot-ph.patch} | 16 +- .../0064-Add-phantom-spawning-options.patch} | 8 +- ...065-Implement-bed-explosion-options.patch} | 12 +- ...nt-respawn-anchor-explosion-options.patch} | 8 +- ...Add-allow-water-in-end-world-option.patch} | 19 +- .../0068-Allow-color-codes-in-books.patch} | 20 +- .../0069-Entity-lifespan.patch} | 26 +- ...eport-to-spawn-if-outside-world-bor.patch} | 22 +- .../0071-Squid-EAR-immunity.patch} | 10 +- .../0072-Phantoms-burn-in-light.patch} | 18 +- ...0073-Configurable-villager-breeding.patch} | 10 +- .../0074-Redstone-deactivates-spawners.patch} | 6 +- .../0075-Totems-work-in-inventory.patch} | 10 +- ...-Add-vindicator-johnny-spawn-chance.patch} | 10 +- ...0077-Dispensers-place-anvils-option.patch} | 14 +- .../0078-Allow-anvil-colors.patch} | 8 +- ...-disable-dolphin-treasure-searching.patch} | 10 +- .../0080-Short-enderman-height.patch} | 16 +- ...top-squids-floating-on-top-of-water.patch} | 24 +- ...ng-obsidian-valid-for-portal-frames.patch} | 6 +- .../0083-Entities-can-use-portals.patch} | 25 +- ...tomizable-wither-health-and-healing.patch} | 10 +- ...gling-special-MobSpawners-per-world.patch} | 12 +- .../0086-Raid-cooldown-setting.patch} | 15 +- ...able-zombie-aggressiveness-towards-.patch} | 22 +- .../0088-Flying-squids-Oh-my.patch} | 26 +- .../0089-Infinity-bow-settings.patch} | 24 +- .../0090-Configurable-daylight-cycle.patch} | 37 +-- ...1-Furnace-uses-lava-from-underneath.patch} | 12 +- ...ws-should-not-reset-despawn-counter.patch} | 8 +- ...e-add-farmland-mechanics-from-Alpha.patch} | 18 +- ...ustable-breeding-cooldown-to-config.patch} | 24 +- ...-entity-breeding-times-configurable.patch} | 236 +++++++++--------- ...es-from-item-forms-of-entities-to-e.patch} | 95 +++---- .../0060-Implement-elytra-settings.patch | 105 -------- 51 files changed, 703 insertions(+), 678 deletions(-) rename patches/{unapplied-server => dropped-server}/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch (100%) rename patches/{unapplied-server/0051-Implement-infinite-liquids.patch => server/0048-Implement-infinite-liquids.patch} (73%) rename patches/{unapplied-server/0052-Make-lava-flow-speed-configurable.patch => server/0049-Make-lava-flow-speed-configurable.patch} (84%) rename patches/{unapplied-server/0053-Add-player-death-exp-control-options.patch => server/0050-Add-player-death-exp-control-options.patch} (69%) rename patches/{unapplied-server/0054-Configurable-void-damage-height-and-damage.patch => server/0051-Configurable-void-damage-height-and-damage.patch} (91%) rename patches/{unapplied-server/0055-Add-canSaveToDisk-to-Entity.patch => server/0052-Add-canSaveToDisk-to-Entity.patch} (86%) rename patches/{unapplied-server/0056-Dispenser-curse-of-binding-protection.patch => server/0053-Dispenser-curse-of-binding-protection.patch} (54%) rename patches/{unapplied-server/0057-Add-option-for-boats-to-eject-players-on-land.patch => server/0054-Add-option-for-boats-to-eject-players-on-land.patch} (62%) rename patches/{unapplied-server/0058-Mending-mends-most-damages-equipment-first.patch => server/0055-Mending-mends-most-damages-equipment-first.patch} (88%) rename patches/{unapplied-server/0059-Add-5-second-tps-average-in-tps.patch => server/0056-Add-5-second-tps-average-in-tps.patch} (93%) create mode 100644 patches/server/0057-Implement-elytra-settings.patch rename patches/{unapplied-server/0061-Item-entity-immunities.patch => server/0058-Item-entity-immunities.patch} (90%) rename patches/{unapplied-server/0062-Add-ping-command.patch => server/0059-Add-ping-command.patch} (94%) rename patches/{unapplied-server/0063-Add-demo-command.patch => server/0060-Add-demo-command.patch} (94%) rename patches/{unapplied-server/0064-Add-credits-command.patch => server/0061-Add-credits-command.patch} (95%) rename patches/{unapplied-server/0065-Configurable-jockey-options.patch => server/0062-Configurable-jockey-options.patch} (88%) rename patches/{unapplied-server/0066-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch => server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch} (95%) rename patches/{unapplied-server/0067-Add-phantom-spawning-options.patch => server/0064-Add-phantom-spawning-options.patch} (95%) rename patches/{unapplied-server/0068-Implement-bed-explosion-options.patch => server/0065-Implement-bed-explosion-options.patch} (89%) rename patches/{unapplied-server/0069-Implement-respawn-anchor-explosion-options.patch => server/0066-Implement-respawn-anchor-explosion-options.patch} (91%) rename patches/{unapplied-server/0070-Add-allow-water-in-end-world-option.patch => server/0067-Add-allow-water-in-end-world-option.patch} (87%) rename patches/{unapplied-server/0071-Allow-color-codes-in-books.patch => server/0068-Allow-color-codes-in-books.patch} (88%) rename patches/{unapplied-server/0072-Entity-lifespan.patch => server/0069-Entity-lifespan.patch} (83%) rename patches/{unapplied-server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch => server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch} (80%) rename patches/{unapplied-server/0074-Squid-EAR-immunity.patch => server/0071-Squid-EAR-immunity.patch} (83%) rename patches/{unapplied-server/0075-Phantoms-burn-in-light.patch => server/0072-Phantoms-burn-in-light.patch} (86%) rename patches/{unapplied-server/0076-Configurable-villager-breeding.patch => server/0073-Configurable-villager-breeding.patch} (84%) rename patches/{unapplied-server/0077-Redstone-deactivates-spawners.patch => server/0074-Redstone-deactivates-spawners.patch} (86%) rename patches/{unapplied-server/0078-Totems-work-in-inventory.patch => server/0075-Totems-work-in-inventory.patch} (88%) rename patches/{unapplied-server/0079-Add-vindicator-johnny-spawn-chance.patch => server/0076-Add-vindicator-johnny-spawn-chance.patch} (85%) rename patches/{unapplied-server/0080-Dispensers-place-anvils-option.patch => server/0077-Dispensers-place-anvils-option.patch} (76%) rename patches/{unapplied-server/0081-Allow-anvil-colors.patch => server/0078-Allow-anvil-colors.patch} (94%) rename patches/{unapplied-server/0082-Add-option-to-disable-dolphin-treasure-searching.patch => server/0079-Add-option-to-disable-dolphin-treasure-searching.patch} (83%) rename patches/{unapplied-server/0083-Short-enderman-height.patch => server/0080-Short-enderman-height.patch} (83%) rename patches/{unapplied-server/0084-Stop-squids-floating-on-top-of-water.patch => server/0081-Stop-squids-floating-on-top-of-water.patch} (77%) rename patches/{unapplied-server/0085-Crying-obsidian-valid-for-portal-frames.patch => server/0082-Crying-obsidian-valid-for-portal-frames.patch} (90%) rename patches/{unapplied-server/0086-Entities-can-use-portals.patch => server/0083-Entities-can-use-portals.patch} (75%) rename patches/{unapplied-server/0087-Customizable-wither-health-and-healing.patch => server/0084-Customizable-wither-health-and-healing.patch} (85%) rename patches/{unapplied-server/0088-Allow-toggling-special-MobSpawners-per-world.patch => server/0085-Allow-toggling-special-MobSpawners-per-world.patch} (91%) rename patches/{unapplied-server/0089-Raid-cooldown-setting.patch => server/0086-Raid-cooldown-setting.patch} (89%) rename patches/{unapplied-server/0090-Add-option-to-disable-zombie-aggressiveness-towards-.patch => server/0087-Add-option-to-disable-zombie-aggressiveness-towards-.patch} (87%) rename patches/{unapplied-server/0092-Flying-squids-Oh-my.patch => server/0088-Flying-squids-Oh-my.patch} (81%) rename patches/{unapplied-server/0093-Infinity-bow-settings.patch => server/0089-Infinity-bow-settings.patch} (71%) rename patches/{unapplied-server/0094-Configurable-daylight-cycle.patch => server/0090-Configurable-daylight-cycle.patch} (65%) rename patches/{unapplied-server/0095-Furnace-uses-lava-from-underneath.patch => server/0091-Furnace-uses-lava-from-underneath.patch} (84%) rename patches/{unapplied-server/0096-Arrows-should-not-reset-despawn-counter.patch => server/0092-Arrows-should-not-reset-despawn-counter.patch} (86%) rename patches/{unapplied-server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch => server/0093-Ability-to-re-add-farmland-mechanics-from-Alpha.patch} (74%) rename patches/{unapplied-server/0098-Add-adjustable-breeding-cooldown-to-config.patch => server/0094-Add-adjustable-breeding-cooldown-to-config.patch} (88%) rename patches/{unapplied-server/0099-Make-entity-breeding-times-configurable.patch => server/0095-Make-entity-breeding-times-configurable.patch} (84%) rename patches/{unapplied-server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch => server/0096-Apply-display-names-from-item-forms-of-entities-to-e.patch} (67%) delete mode 100644 patches/unapplied-server/0060-Implement-elytra-settings.patch diff --git a/patches/unapplied-server/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/dropped-server/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch similarity index 100% rename from patches/unapplied-server/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch rename to patches/dropped-server/0091-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch diff --git a/patches/unapplied-server/0051-Implement-infinite-liquids.patch b/patches/server/0048-Implement-infinite-liquids.patch similarity index 73% rename from patches/unapplied-server/0051-Implement-infinite-liquids.patch rename to patches/server/0048-Implement-infinite-liquids.patch index 82521d0b6..b75b33447 100644 --- a/patches/unapplied-server/0051-Implement-infinite-liquids.patch +++ b/patches/server/0048-Implement-infinite-liquids.patch @@ -5,21 +5,21 @@ Subject: [PATCH] Implement infinite liquids diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -index 6785baf574f233ed1c3bea8d406be8a524d9ff82..d2f9ffa09d46287707324fd67e60736991b632ac 100644 +index f4fbcbb8ff6d2677af1a02a0801a323c06dce9b1..6f024a29e8824a604ff0c74f88522d23423beb5c 100644 --- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java +++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -@@ -227,7 +227,7 @@ public abstract class FlowingFluid extends Fluid { +@@ -266,7 +266,7 @@ public abstract class FlowingFluid extends Fluid { } } -- if (this.canConvertToSource(world) && j >= 2) { -+ if (this.canConvertToSource(world) && j >= getRequiredSources(world)) { - BlockState iblockdata2 = world.getBlockState(pos.below()); +- if (j >= 2 && this.canConvertToSource(world)) { ++ if (j >= getRequiredSources(world) && this.canConvertToSource(world)) { // Purpur + BlockState iblockdata2 = world.getBlockState(blockposition_mutableblockposition.setWithOffset(pos, Direction.DOWN)); FluidState fluid1 = iblockdata2.getFluidState(); -@@ -325,6 +325,12 @@ public abstract class FlowingFluid extends Fluid { +@@ -356,6 +356,12 @@ public abstract class FlowingFluid extends Fluid { - protected abstract boolean canConvertToSource(Level world); + protected abstract boolean canConvertToSource(ServerLevel world); + // Purpur start + protected int getRequiredSources(Level level) { @@ -28,13 +28,13 @@ index 6785baf574f233ed1c3bea8d406be8a524d9ff82..d2f9ffa09d46287707324fd67e607369 + // Purpur end + protected void spreadTo(LevelAccessor world, BlockPos pos, BlockState state, Direction direction, FluidState fluidState) { - if (state.getBlock() instanceof LiquidBlockContainer) { - ((LiquidBlockContainer) state.getBlock()).placeLiquid(world, pos, state, fluidState); + Block block = state.getBlock(); + diff --git a/src/main/java/net/minecraft/world/level/material/LavaFluid.java b/src/main/java/net/minecraft/world/level/material/LavaFluid.java -index 3bb4a9a1a6249e8ba2de237f801210e7f4fd5825..4c230136d832d50ae16ffa037b0b30ff1101b50a 100644 +index 884db3e64cb22ed765beec8f11ea309fcf810207..e9687c3580e5fff33ce902eb7b86eb815ca1072d 100644 --- a/src/main/java/net/minecraft/world/level/material/LavaFluid.java +++ b/src/main/java/net/minecraft/world/level/material/LavaFluid.java -@@ -198,6 +198,13 @@ public abstract class LavaFluid extends FlowingFluid { +@@ -199,6 +199,13 @@ public abstract class LavaFluid extends FlowingFluid { world.levelEvent(1501, pos, 0); } @@ -46,13 +46,13 @@ index 3bb4a9a1a6249e8ba2de237f801210e7f4fd5825..4c230136d832d50ae16ffa037b0b30ff + // Purpur end + @Override - protected boolean canConvertToSource(Level world) { + protected boolean canConvertToSource(ServerLevel world) { return world.getGameRules().getBoolean(GameRules.RULE_LAVA_SOURCE_CONVERSION); diff --git a/src/main/java/net/minecraft/world/level/material/WaterFluid.java b/src/main/java/net/minecraft/world/level/material/WaterFluid.java -index 109f71401c65f476ccf6813137386fc9fef10254..9dcdb2f4001115db0c26fdbf86531dbe6098485d 100644 +index 552925ba47c7475e2e1ec2ded0966f28ed3e50a5..1e741f36b79585f33abe413beafe00cf5205d54f 100644 --- a/src/main/java/net/minecraft/world/level/material/WaterFluid.java +++ b/src/main/java/net/minecraft/world/level/material/WaterFluid.java -@@ -80,6 +80,13 @@ public abstract class WaterFluid extends FlowingFluid { +@@ -81,6 +81,13 @@ public abstract class WaterFluid extends FlowingFluid { return world.getGameRules().getBoolean(GameRules.RULE_WATER_SOURCE_CONVERSION); } @@ -67,10 +67,10 @@ index 109f71401c65f476ccf6813137386fc9fef10254..9dcdb2f4001115db0c26fdbf86531dbe @Override protected void beforeDestroyingBlock(LevelAccessor world, BlockPos pos, BlockState state, BlockPos source) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4bce5d936876bf17d81d008e73877c6d5637fb87..d02eca903ad0e24ab4a8839d958738af865b8bc8 100644 +index d39d2ee00b3a2f487d0c341d4103f04ffe516022..dcc6cd317d6b1da58a3deb9fb022a2ba36cdd509 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -222,6 +222,11 @@ public class PurpurWorldConfig { +@@ -220,6 +220,11 @@ public class PurpurWorldConfig { farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); } @@ -82,7 +82,7 @@ index 4bce5d936876bf17d81d008e73877c6d5637fb87..d02eca903ad0e24ab4a8839d958738af public boolean turtleEggsBreakFromExpOrbs = false; public boolean turtleEggsBreakFromItems = false; public boolean turtleEggsBreakFromMinecarts = false; -@@ -231,6 +236,11 @@ public class PurpurWorldConfig { +@@ -229,6 +234,11 @@ public class PurpurWorldConfig { turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts); } diff --git a/patches/unapplied-server/0052-Make-lava-flow-speed-configurable.patch b/patches/server/0049-Make-lava-flow-speed-configurable.patch similarity index 84% rename from patches/unapplied-server/0052-Make-lava-flow-speed-configurable.patch rename to patches/server/0049-Make-lava-flow-speed-configurable.patch index 7b02aaecb..8fd1c86d3 100644 --- a/patches/unapplied-server/0052-Make-lava-flow-speed-configurable.patch +++ b/patches/server/0049-Make-lava-flow-speed-configurable.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Make lava flow speed configurable diff --git a/src/main/java/net/minecraft/world/level/material/LavaFluid.java b/src/main/java/net/minecraft/world/level/material/LavaFluid.java -index 4c230136d832d50ae16ffa037b0b30ff1101b50a..2d492d849ff73a738dfbcb16507feb89bf19a962 100644 +index e9687c3580e5fff33ce902eb7b86eb815ca1072d..6e643c1a7f7e71cfd20603facaf224985ee81716 100644 --- a/src/main/java/net/minecraft/world/level/material/LavaFluid.java +++ b/src/main/java/net/minecraft/world/level/material/LavaFluid.java -@@ -180,7 +180,7 @@ public abstract class LavaFluid extends FlowingFluid { +@@ -181,7 +181,7 @@ public abstract class LavaFluid extends FlowingFluid { @Override public int getTickDelay(LevelReader world) { @@ -18,10 +18,10 @@ index 4c230136d832d50ae16ffa037b0b30ff1101b50a..2d492d849ff73a738dfbcb16507feb89 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d02eca903ad0e24ab4a8839d958738af865b8bc8..cde1b1277d83ac2478f872dccdc2f7f87196cc94 100644 +index dcc6cd317d6b1da58a3deb9fb022a2ba36cdd509..e41649d2abd8e8ea4ddeb0af1f94d90a60174198 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -223,8 +223,12 @@ public class PurpurWorldConfig { +@@ -221,8 +221,12 @@ public class PurpurWorldConfig { } public int lavaInfiniteRequiredSources = 2; diff --git a/patches/unapplied-server/0053-Add-player-death-exp-control-options.patch b/patches/server/0050-Add-player-death-exp-control-options.patch similarity index 69% rename from patches/unapplied-server/0053-Add-player-death-exp-control-options.patch rename to patches/server/0050-Add-player-death-exp-control-options.patch index 3d58468d0..035b066e5 100644 --- a/patches/unapplied-server/0053-Add-player-death-exp-control-options.patch +++ b/patches/server/0050-Add-player-death-exp-control-options.patch @@ -5,37 +5,39 @@ Subject: [PATCH] Add player death exp control options diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 5e404e470a28f04f5659503bcc6b66caf1880f3f..9dd8dc8f0dc218c5a021d84649f364cd2f1b3a45 100644 +index d1b6e7cf8d110d9106ea99431cf9719ea3b102d5..f4823112f2daf2aa75e1f4520fb91077c9c94e09 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -1976,9 +1976,19 @@ public abstract class Player extends LivingEntity { +@@ -1921,7 +1921,23 @@ public abstract class Player extends LivingEntity { + @Override - protected int getBaseExperienceReward() { - if (!this.level().getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY) && !this.isSpectator()) { -- int i = this.experienceLevel * 7; -- -- return i > 100 ? 100 : i; -+ // Purpur start + protected int getBaseExperienceReward(ServerLevel world) { +- return !world.getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY) && !this.isSpectator() ? Math.min(this.experienceLevel * 7, 100) : 0; ++ // Purpur start ++ if (!world.getGameRules().getBoolean(GameRules.RULE_KEEPINVENTORY) && !this.isSpectator()) { + int toDrop; + try { + toDrop = Math.round(((Number) scriptEngine.eval("let expLevel = " + experienceLevel + "; " + -+ "let expTotal = " + totalExperience + "; " + -+ "let exp = " + experienceProgress + "; " + -+ level().purpurConfig.playerDeathExpDropEquation)).floatValue()); ++ "let expTotal = " + totalExperience + "; " + ++ "let exp = " + experienceProgress + "; " + ++ level().purpurConfig.playerDeathExpDropEquation)).floatValue()); + } catch (javax.script.ScriptException e) { + e.printStackTrace(); + toDrop = experienceLevel * 7; + } + return Math.min(toDrop, level().purpurConfig.playerDeathExpDropMax); -+ // Purpur end - } else { - return 0; - } ++ } else { ++ return 0; ++ } ++ // Purpur end + } + + @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index cde1b1277d83ac2478f872dccdc2f7f87196cc94..ed8f3c606984f83b77ca96cbfc8bcd454ad63ff8 100644 +index e41649d2abd8e8ea4ddeb0af1f94d90a60174198..364321ea60e256edb10fea8efe4bfb3cdf33f3fb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -172,6 +172,8 @@ public class PurpurWorldConfig { +@@ -170,6 +170,8 @@ public class PurpurWorldConfig { public boolean idleTimeoutCountAsSleeping = false; public boolean idleTimeoutUpdateTabList = false; public boolean idleTimeoutTargetPlayer = true; @@ -44,7 +46,7 @@ index cde1b1277d83ac2478f872dccdc2f7f87196cc94..ed8f3c606984f83b77ca96cbfc8bcd45 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -183,6 +185,8 @@ public class PurpurWorldConfig { +@@ -181,6 +183,8 @@ public class PurpurWorldConfig { idleTimeoutCountAsSleeping = getBoolean("gameplay-mechanics.player.idle-timeout.count-as-sleeping", idleTimeoutCountAsSleeping); idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList); idleTimeoutTargetPlayer = getBoolean("gameplay-mechanics.player.idle-timeout.mobs-target", idleTimeoutTargetPlayer); diff --git a/patches/unapplied-server/0054-Configurable-void-damage-height-and-damage.patch b/patches/server/0051-Configurable-void-damage-height-and-damage.patch similarity index 91% rename from patches/unapplied-server/0054-Configurable-void-damage-height-and-damage.patch rename to patches/server/0051-Configurable-void-damage-height-and-damage.patch index 1c703002c..61a39b17e 100644 --- a/patches/unapplied-server/0054-Configurable-void-damage-height-and-damage.patch +++ b/patches/server/0051-Configurable-void-damage-height-and-damage.patch @@ -19,10 +19,10 @@ index 1029b6de6f36b08bf634b4056ef5701383f6f258..ee0d1df78838e05450ad1a06ce70eab2 final ConfigurationTransformation.VersionedBuilder versionedBuilder = Transformations.versionedBuilder(); diff --git a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -index fd3b1c10695634f65c7291016bf671c084bc4d57..c867796f625813797f167610ad443c4be5a7561e 100644 +index a81a332ffb80e67d7f886295099b5cd2ae8994c5..1d18cad6c32815854ff8dace256b59022200c842 100644 --- a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -@@ -401,6 +401,7 @@ public class WorldConfiguration extends ConfigurationPart { +@@ -400,6 +400,7 @@ public class WorldConfiguration extends ConfigurationPart { public boolean useVanillaWorldScoreboardNameColoring = false; } @@ -30,7 +30,7 @@ index fd3b1c10695634f65c7291016bf671c084bc4d57..c867796f625813797f167610ad443c4b public Environment environment; public class Environment extends ConfigurationPart { -@@ -410,7 +411,9 @@ public class WorldConfiguration extends ConfigurationPart { +@@ -409,7 +410,9 @@ public class WorldConfiguration extends ConfigurationPart { public boolean disableExplosionKnockback = false; public boolean generateFlatBedrock = false; public FrostedIce frostedIce; @@ -41,10 +41,10 @@ index fd3b1c10695634f65c7291016bf671c084bc4d57..c867796f625813797f167610ad443c4b public class FrostedIce extends ConfigurationPart { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index f200a105bd3f5013d0590f1a10d4edc08ad745d1..debc521eaa05c6befc6fe67f44780372b078039d 100644 +index 8719173e50ec2313cb44905b52e5dbe7fb264374..0fd97d9607b83fa2c2c36602c3b92ab0a6f58e27 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1249,7 +1249,15 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop type, Level world) { this.id = Entity.ENTITY_COUNTER.incrementAndGet(); diff --git a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java -index 63f48841c849ff49d9d43efc5de8952c5a9bba3a..e472df057d087fe46bd40b798c050ed6e38a283c 100644 +index a1f25efb38eff32aaabe892ddbc9a60426923686..e0f25b057b7b908a10038d9e9695a500aa883c75 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java +++ b/src/main/java/net/minecraft/world/entity/projectile/WitherSkull.java @@ -121,6 +121,11 @@ public class WitherSkull extends AbstractHurtingProjectile { @@ -37,12 +37,12 @@ index 63f48841c849ff49d9d43efc5de8952c5a9bba3a..e472df057d087fe46bd40b798c050ed6 @Override diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java -index d4a505ef4af9ded02aeb1a817bcbe5b1a912a5b3..97a310f042db1a838a744d2909d261aaf253ea17 100644 +index 16ca1c8672e5f0a27f8a30498c754a81cdec5191..e37dff5dcabeca698838e1a8c9633807213443cc 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java -@@ -105,6 +105,7 @@ public class EntityStorage implements EntityPersistentStorage { - } - // Paper end - Entity load/save limit per chunk +@@ -95,6 +95,7 @@ public class EntityStorage implements EntityPersistentStorage { + ListTag listTag = new ListTag(); + dataList.getEntities().forEach(entity -> { CompoundTag compoundTagx = new CompoundTag(); + if (!entity.canSaveToDisk()) return; // Purpur if (entity.save(compoundTagx)) { diff --git a/patches/unapplied-server/0056-Dispenser-curse-of-binding-protection.patch b/patches/server/0053-Dispenser-curse-of-binding-protection.patch similarity index 54% rename from patches/unapplied-server/0056-Dispenser-curse-of-binding-protection.patch rename to patches/server/0053-Dispenser-curse-of-binding-protection.patch index c54df6203..990c859b1 100644 --- a/patches/unapplied-server/0056-Dispenser-curse-of-binding-protection.patch +++ b/patches/server/0053-Dispenser-curse-of-binding-protection.patch @@ -4,12 +4,34 @@ Date: Sun, 25 Aug 2019 00:09:52 -0500 Subject: [PATCH] Dispenser curse of binding protection +diff --git a/src/main/java/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java +index 036dd3b15dfee4cd079710eba1255d2bdb4d7220..3fb385329d20ab26ea48fa33f35295115914e4a5 100644 +--- a/src/main/java/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java ++++ b/src/main/java/net/minecraft/core/dispenser/EquipmentDispenseItemBehavior.java +@@ -41,7 +41,7 @@ public class EquipmentDispenseItemBehavior extends DefaultDispenseItemBehavior { + return false; + } else { + LivingEntity entityliving = (LivingEntity) list.getFirst(); +- EquipmentSlot enumitemslot = entityliving.getEquipmentSlotForItem(stack); ++ EquipmentSlot enumitemslot = pointer.level().purpurConfig.dispenserApplyCursedArmor ? entityliving.getEquipmentSlotForItem(stack) : entityliving.getEquipmentSlotForDispenserItem(stack); if (enumitemslot == null) return false; // Purpur - Dispenser curse of binding protection + ItemStack itemstack1 = stack.split(1); + + // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index cc6148404f139464cc2f4f4fc7d5a0b45cb4929e..f444b36b4fddce06aaafabe3cfef463f173969ce 100644 +index 8ebd43c8088523396a4f46b8b0083f91e2b55e27..2e955dc3299062c2564eac0de43d5f1b78f5897c 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -4599,6 +4599,12 @@ public abstract class LivingEntity extends Entity implements Attackable { - return EquipmentSlot.MAINHAND; +@@ -4653,7 +4653,7 @@ public abstract class LivingEntity extends Entity implements Attackable { + if (equippable != null && equippable.dispensable()) { + EquipmentSlot enumitemslot = equippable.slot(); + +- return this.canUseSlot(enumitemslot) && equippable.canBeEquippedBy(this.getType()) ? this.getItemBySlot(enumitemslot).isEmpty() && this.canDispenserEquipIntoSlot(enumitemslot) : false; ++ return this.canUseSlot(enumitemslot) && equippable.canBeEquippedBy(this.getType()) && this.getItemBySlot(enumitemslot).isEmpty() && this.canDispenserEquipIntoSlot(enumitemslot); + } else { + return false; + } +@@ -4678,6 +4678,12 @@ public abstract class LivingEntity extends Entity implements Attackable { + return equippable == null ? slot == EquipmentSlot.MAINHAND && this.canUseSlot(EquipmentSlot.MAINHAND) : slot == equippable.slot() && this.canUseSlot(equippable.slot()) && equippable.canBeEquippedBy(this.getType()); } + // Purpur start - Dispenser curse of binding protection @@ -21,24 +43,11 @@ index cc6148404f139464cc2f4f4fc7d5a0b45cb4929e..f444b36b4fddce06aaafabe3cfef463f private static SlotAccess createEquipmentSlotAccess(LivingEntity entity, EquipmentSlot slot) { return slot != EquipmentSlot.HEAD && slot != EquipmentSlot.MAINHAND && slot != EquipmentSlot.OFFHAND ? SlotAccess.forEquipmentSlot(entity, slot, (itemstack) -> { return itemstack.isEmpty() || entity.getEquipmentSlotForItem(itemstack) == slot; -diff --git a/src/main/java/net/minecraft/world/item/ArmorItem.java b/src/main/java/net/minecraft/world/item/ArmorItem.java -index 647a4601deace52f8d855f512a73671f82b4762a..d05b1e129eee07434d162e1b949fd5633418ef66 100644 ---- a/src/main/java/net/minecraft/world/item/ArmorItem.java -+++ b/src/main/java/net/minecraft/world/item/ArmorItem.java -@@ -60,7 +60,7 @@ public class ArmorItem extends Item implements Equipable { - return false; - } else { - LivingEntity entityliving = (LivingEntity) list.get(0); -- EquipmentSlot enumitemslot = entityliving.getEquipmentSlotForItem(armor); -+ EquipmentSlot enumitemslot = pointer.level().purpurConfig.dispenserApplyCursedArmor ? entityliving.getEquipmentSlotForItem(armor) : entityliving.getEquipmentSlotForDispenserItem(armor); if (enumitemslot == null) return false; // Purpur - Dispenser curse of binding protection - ItemStack itemstack1 = armor.copyWithCount(1); // Paper - shrink below and single item in event - // CraftBukkit start - Level world = pointer.level(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ed8f3c606984f83b77ca96cbfc8bcd454ad63ff8..2a301dc07863320ed3e57c9bd0d4ee5a16c9cbaf 100644 +index 364321ea60e256edb10fea8efe4bfb3cdf33f3fb..4b3727f9c4e4f1de2745e4984ad660b6a0ac7797 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -221,6 +221,11 @@ public class PurpurWorldConfig { +@@ -219,6 +219,11 @@ public class PurpurWorldConfig { }); } diff --git a/patches/unapplied-server/0057-Add-option-for-boats-to-eject-players-on-land.patch b/patches/server/0054-Add-option-for-boats-to-eject-players-on-land.patch similarity index 62% rename from patches/unapplied-server/0057-Add-option-for-boats-to-eject-players-on-land.patch rename to patches/server/0054-Add-option-for-boats-to-eject-players-on-land.patch index ea531a180..86c06e580 100644 --- a/patches/unapplied-server/0057-Add-option-for-boats-to-eject-players-on-land.patch +++ b/patches/server/0054-Add-option-for-boats-to-eject-players-on-land.patch @@ -4,32 +4,31 @@ Date: Sat, 7 Sep 2019 22:47:59 -0500 Subject: [PATCH] Add option for boats to eject players on land -diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -index f1955afc8e367f80ead85bd5ad3b8d66c255565a..7f7abef3c5b7ad124c5c1dda02173bc5f70c9506 100644 ---- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -+++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -@@ -543,6 +543,7 @@ public class Boat extends VehicleEntity implements Leashable, VariantHolder 0.0F) { this.landFriction = f; + if (level().purpurConfig.boatEjectPlayersOnLand) ejectPassengers(); // Purpur - return Boat.Status.ON_LAND; + return AbstractBoat.Status.ON_LAND; } else { - return Boat.Status.IN_AIR; + return AbstractBoat.Status.IN_AIR; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2a301dc07863320ed3e57c9bd0d4ee5a16c9cbaf..3d5f86aebb047a3f6d3c94c28415889e65a3c027 100644 +index 4b3727f9c4e4f1de2745e4984ad660b6a0ac7797..b87d96e31d5b0f931a420ae302ce944c94ffa97b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -96,10 +96,12 @@ public class PurpurWorldConfig { +@@ -96,9 +96,11 @@ public class PurpurWorldConfig { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); } + public boolean boatEjectPlayersOnLand = false; public boolean disableDropsOnCrammingDeath = false; - public boolean milkCuresBadOmen = true; public double tridentLoyaltyVoidReturnHeight = 0.0D; private void miscGameplayMechanicsSettings() { + boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); - milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); + } diff --git a/patches/unapplied-server/0058-Mending-mends-most-damages-equipment-first.patch b/patches/server/0055-Mending-mends-most-damages-equipment-first.patch similarity index 88% rename from patches/unapplied-server/0058-Mending-mends-most-damages-equipment-first.patch rename to patches/server/0055-Mending-mends-most-damages-equipment-first.patch index ab812161d..3ddb5c70d 100644 --- a/patches/unapplied-server/0058-Mending-mends-most-damages-equipment-first.patch +++ b/patches/server/0055-Mending-mends-most-damages-equipment-first.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Mending mends most damages equipment first diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java -index a58ff67052fb5f33782f8b5c83465ec03ef1d073..caaeeb63b8bf0d3709fc38266a7e8c48211f5c0b 100644 +index bf0838f574fa3fb9654e087d602b8d380bd7fb28..6db9a3ea4c0dc1f0629bc8bf6466aeab00c498f6 100644 --- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java +++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java -@@ -347,7 +347,7 @@ public class ExperienceOrb extends Entity { +@@ -351,7 +351,7 @@ public class ExperienceOrb extends Entity { } private int repairPlayerItems(ServerPlayer player, int amount) { @@ -18,10 +18,10 @@ index a58ff67052fb5f33782f8b5c83465ec03ef1d073..caaeeb63b8bf0d3709fc38266a7e8c48 if (optional.isPresent()) { ItemStack itemstack = ((EnchantedItemInUse) optional.get()).itemStack(); diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index eec0ec43590be7e8ae5b530a7404c98b5e23cb53..c89663b093120d9c43a7f4d24ec8d798b3fa6d5f 100644 +index 33e7d2884195677c4d6340d8b84c1dd85c636ec1..239bd6e3d756dc4ecab6ca639fa84ccbf89418a7 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -643,6 +643,26 @@ public final class ItemStack implements DataComponentHolder { +@@ -681,6 +681,26 @@ public final class ItemStack implements DataComponentHolder { return this.isDamageableItem() && this.getDamageValue() > 0; } @@ -49,7 +49,7 @@ index eec0ec43590be7e8ae5b530a7404c98b5e23cb53..c89663b093120d9c43a7f4d24ec8d798 return Mth.clamp((Integer) this.getOrDefault(DataComponents.DAMAGE, 0), 0, this.getMaxDamage()); } diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java -index 9635c076703beee96af9f5d0bdee4cf97ccd98ad..1abf54eeaad1b062f1465ee1a847bbfcba295665 100644 +index d8fc10f9cd0ab2c26e64613006569a86ce201550..73241113e50dc8be89ef8850d49d95ec31fb194f 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java +++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java @@ -6,6 +6,7 @@ import it.unimi.dsi.fastutil.objects.Object2IntMap.Entry; @@ -60,7 +60,7 @@ index 9635c076703beee96af9f5d0bdee4cf97ccd98ad..1abf54eeaad1b062f1465ee1a847bbfc import java.util.Optional; import java.util.function.BiConsumer; import java.util.function.Consumer; -@@ -569,4 +570,48 @@ public class EnchantmentHelper { +@@ -588,4 +589,48 @@ public class EnchantmentHelper { return getItemEnchantmentLevel(getEnchantmentHolder(enchantment), stack); } // Purpur end - Enchantment convenience methods @@ -110,20 +110,19 @@ index 9635c076703beee96af9f5d0bdee4cf97ccd98ad..1abf54eeaad1b062f1465ee1a847bbfc + // Purpur end - Add option to mend the most damaged equipment first } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3d5f86aebb047a3f6d3c94c28415889e65a3c027..4f1a650b7829464d873dfb782fe7eb94703ac040 100644 +index b87d96e31d5b0f931a420ae302ce944c94ffa97b..49efe798ae09c000c708001ca896620c468933d5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -96,11 +96,13 @@ public class PurpurWorldConfig { +@@ -96,10 +96,12 @@ public class PurpurWorldConfig { armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); } + public boolean useBetterMending = false; public boolean boatEjectPlayersOnLand = false; public boolean disableDropsOnCrammingDeath = false; - public boolean milkCuresBadOmen = true; public double tridentLoyaltyVoidReturnHeight = 0.0D; private void miscGameplayMechanicsSettings() { + useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); - milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); + tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); diff --git a/patches/unapplied-server/0059-Add-5-second-tps-average-in-tps.patch b/patches/server/0056-Add-5-second-tps-average-in-tps.patch similarity index 93% rename from patches/unapplied-server/0059-Add-5-second-tps-average-in-tps.patch rename to patches/server/0056-Add-5-second-tps-average-in-tps.patch index 3b3fecaec..ae136755c 100644 --- a/patches/unapplied-server/0059-Add-5-second-tps-average-in-tps.patch +++ b/patches/server/0056-Add-5-second-tps-average-in-tps.patch @@ -26,10 +26,10 @@ index 12b327eea95e0de9e9c39b7d039badee8ec46508..849ecc5af70901f1e40cb6c419f33f1c } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index debc521eaa05c6befc6fe67f44780372b078039d..b2ce50799ff158ff2160b0d75404e52e34d54805 100644 +index 0fd97d9607b83fa2c2c36602c3b92ab0a6f58e27..e96f55191f97490bbaf5fb990c33237469fa07e0 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -314,7 +314,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop +Date: Thu, 25 Jul 2019 18:07:37 -0500 +Subject: [PATCH] Implement elytra settings + + +diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java +index 2e955dc3299062c2564eac0de43d5f1b78f5897c..a58c8ed64eab56c4a4a0688e0731a232fb5f7269 100644 +--- a/src/main/java/net/minecraft/world/entity/LivingEntity.java ++++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java +@@ -3740,7 +3740,17 @@ public abstract class LivingEntity extends Entity implements Attackable { + }).toList(); + EquipmentSlot enumitemslot = (EquipmentSlot) Util.getRandom(list, this.random); + +- this.getItemBySlot(enumitemslot).hurtAndBreak(1, this, enumitemslot); ++ // Purpur start ++ int damage = level().purpurConfig.elytraDamagePerSecond; ++ if (level().purpurConfig.elytraDamageMultiplyBySpeed > 0) { ++ double speed = getDeltaMovement().lengthSqr(); ++ if (speed > level().purpurConfig.elytraDamageMultiplyBySpeed) { ++ damage *= (int) speed; ++ } ++ } ++ ++ this.getItemBySlot(enumitemslot).hurtAndBreak(damage, this, enumitemslot); ++ // Purpur end + } + + this.gameEvent(GameEvent.ELYTRA_GLIDE); +@@ -3749,7 +3759,7 @@ public abstract class LivingEntity extends Entity implements Attackable { + + } + +- protected boolean canGlide() { ++ public boolean canGlide() { // Purpur + if (!this.onGround() && !this.isPassenger() && !this.hasEffect(MobEffects.LEVITATION)) { + Iterator iterator = EquipmentSlot.VALUES.iterator(); + +diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java +index f4823112f2daf2aa75e1f4520fb91077c9c94e09..773be9c116a664e4d0349c58c00df34f203f8ebf 100644 +--- a/src/main/java/net/minecraft/world/entity/player/Player.java ++++ b/src/main/java/net/minecraft/world/entity/player/Player.java +@@ -1661,7 +1661,7 @@ public abstract class Player extends LivingEntity { + } + + @Override +- protected boolean canGlide() { ++ public boolean canGlide() { // Purpur + return !this.abilities.flying && super.canGlide(); + } + +diff --git a/src/main/java/net/minecraft/world/item/FireworkRocketItem.java b/src/main/java/net/minecraft/world/item/FireworkRocketItem.java +index 7e308b364227dedc2d05496f5e0c90573f4a53f7..52e0a741e0a2274d3d70e8d8cdfa56f5e934deb2 100644 +--- a/src/main/java/net/minecraft/world/item/FireworkRocketItem.java ++++ b/src/main/java/net/minecraft/world/item/FireworkRocketItem.java +@@ -66,6 +66,18 @@ public class FireworkRocketItem extends Item implements ProjectileItem { + com.destroystokyo.paper.event.player.PlayerElytraBoostEvent event = new com.destroystokyo.paper.event.player.PlayerElytraBoostEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack), (org.bukkit.entity.Firework) delayed.projectile().getBukkitEntity(), org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand)); + if (event.callEvent() && delayed.attemptSpawn()) { + user.awardStat(Stats.ITEM_USED.get(this)); // Moved up from below ++ ++ // Purpur start ++ if (world.purpurConfig.elytraDamagePerFireworkBoost > 0) { ++ List list = net.minecraft.world.entity.EquipmentSlot.VALUES.stream().filter((enumitemslot) -> net.minecraft.world.entity.LivingEntity.canGlideUsing(user.getItemBySlot(enumitemslot), enumitemslot)).toList(); ++ net.minecraft.world.entity.EquipmentSlot enumitemslot = net.minecraft.Util.getRandom(list, user.random); ++ ++ ItemStack glideItem = user.getItemBySlot(enumitemslot); ++ if (user.canGlide()) { ++ glideItem.hurtAndBreak(world.purpurConfig.elytraDamagePerFireworkBoost, user, enumitemslot); ++ } ++ } ++ // Purpur end + if (event.shouldConsume() && !user.hasInfiniteMaterials()) { + itemStack.shrink(1); // Moved up from below + } else ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory(); +diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java +index 239bd6e3d756dc4ecab6ca639fa84ccbf89418a7..dcb656be3d37f29bdbe7d25ace05c6dd1889e252 100644 +--- a/src/main/java/net/minecraft/world/item/ItemStack.java ++++ b/src/main/java/net/minecraft/world/item/ItemStack.java +@@ -781,6 +781,12 @@ public final class ItemStack implements DataComponentHolder { + org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent(serverPlayer, this); // Paper - Add EntityDamageItemEvent + } + // CraftBukkit end ++ // Purpur start ++ if (this.has(DataComponents.GLIDER)) { ++ setDamageValue(this.getMaxDamage() - 1); ++ return; ++ } ++ // Purpur end + + this.shrink(1); + breakCallback.accept(item); +diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java +index 8b9a93ef71164cce8a616735b71d96d37e83b1a8..24b97c8e2758e4a991dbbbf5276580e1fe027439 100644 +--- a/src/main/java/net/minecraft/world/item/TridentItem.java ++++ b/src/main/java/net/minecraft/world/item/TridentItem.java +@@ -132,6 +132,16 @@ public class TridentItem extends Item implements ProjectileItem { + f4 *= f / f6; + f5 *= f / f6; + org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerRiptideEvent(entityhuman, stack, f3, f4, f5); // CraftBukkit ++ ++ // Purpur start ++ List list = EquipmentSlot.VALUES.stream().filter((enumitemslot) -> LivingEntity.canGlideUsing(entityhuman.getItemBySlot(enumitemslot), enumitemslot)).toList(); ++ EquipmentSlot enumitemslot = net.minecraft.Util.getRandom(list, entityhuman.random); ++ ItemStack glideItem = entityhuman.getItemBySlot(enumitemslot); ++ if (glideItem.has(net.minecraft.core.component.DataComponents.GLIDER) && world.purpurConfig.elytraDamagePerTridentBoost > 0) { ++ glideItem.hurtAndBreak(world.purpurConfig.elytraDamagePerTridentBoost, entityhuman, enumitemslot); ++ } ++ // Purpur end ++ + entityhuman.push((double) f3, (double) f4, (double) f5); + entityhuman.startAutoSpinAttack(20, 8.0F, stack); + if (entityhuman.onGround()) { +diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +index 49efe798ae09c000c708001ca896620c468933d5..33aa446dc0cb834e027c45e8392cf007f62f629d 100644 +--- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java ++++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +@@ -107,6 +107,17 @@ public class PurpurWorldConfig { + tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); + } + ++ public int elytraDamagePerSecond = 1; ++ public double elytraDamageMultiplyBySpeed = 0; ++ public int elytraDamagePerFireworkBoost = 0; ++ public int elytraDamagePerTridentBoost = 0; ++ private void elytraSettings() { ++ elytraDamagePerSecond = getInt("gameplay-mechanics.elytra.damage-per-second", elytraDamagePerSecond); ++ elytraDamageMultiplyBySpeed = getDouble("gameplay-mechanics.elytra.damage-multiplied-by-speed", elytraDamageMultiplyBySpeed); ++ elytraDamagePerFireworkBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.firework", elytraDamagePerFireworkBoost); ++ elytraDamagePerTridentBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.trident", elytraDamagePerTridentBoost); ++ } ++ + public double minecartMaxSpeed = 0.4D; + public boolean minecartPlaceAnywhere = false; + public boolean minecartControllable = false; diff --git a/patches/unapplied-server/0061-Item-entity-immunities.patch b/patches/server/0058-Item-entity-immunities.patch similarity index 90% rename from patches/unapplied-server/0061-Item-entity-immunities.patch rename to patches/server/0058-Item-entity-immunities.patch index 09b6113fd..baf59f3b5 100644 --- a/patches/unapplied-server/0061-Item-entity-immunities.patch +++ b/patches/server/0058-Item-entity-immunities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Item entity immunities diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 5a2f7f7cf79dcbb996574e18cad86ebb54bd718e..dfd09004063a8d8d93357633c8d23b6acff67b73 100644 +index 5bbc7ceaafc163f12344e5d5d355ad2ff30ddca2..af54b621f04de40b1539494f30bb95f03656b590 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -77,7 +77,7 @@ public class ServerEntity { +@@ -81,7 +81,7 @@ public class ServerEntity { @Nullable private List> trackedDataValues; // CraftBukkit start @@ -18,7 +18,7 @@ index 5a2f7f7cf79dcbb996574e18cad86ebb54bd718e..dfd09004063a8d8d93357633c8d23b6a public ServerEntity(ServerLevel worldserver, Entity entity, int i, boolean flag, Consumer> consumer, Set trackedPlayers) { this.trackedPlayers = trackedPlayers; diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -index 4423973d4d9a2c3879d98d1d4c8b8c117c677ac5..ffc754aa6ed61f62a0c94e9117f3008d24c0c163 100644 +index 5d8885bca55503bf7e1a2a4e1bb9b3bd86d55391..9e69c225a331bfce3455fc0c013a19e3c607e0c4 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java @@ -64,6 +64,12 @@ public class ItemEntity extends Entity implements TraceableEntity { @@ -34,11 +34,11 @@ index 4423973d4d9a2c3879d98d1d4c8b8c117c677ac5..ffc754aa6ed61f62a0c94e9117f3008d public ItemEntity(EntityType type, Level world) { super(type, world); -@@ -371,7 +377,16 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -384,7 +390,16 @@ public class ItemEntity extends Entity implements TraceableEntity { @Override - public boolean hurt(DamageSource source, float amount) { -- if (this.isInvulnerableTo(source)) { + public final boolean hurtServer(ServerLevel world, DamageSource source, float amount) { +- if (this.isInvulnerableToBase(source)) { + // Purpur start + if ( + (immuneToCactus && source.is(net.minecraft.world.damagesource.DamageTypes.CACTUS)) || @@ -47,12 +47,12 @@ index 4423973d4d9a2c3879d98d1d4c8b8c117c677ac5..ffc754aa6ed61f62a0c94e9117f3008d + (immuneToExplosion && source.is(DamageTypeTags.IS_EXPLOSION)) + ) { + return false; -+ } else if (this.isInvulnerableTo(source)) { ++ } else if (this.isInvulnerableToBase(source)) { + // Purpur end return false; - } else if (!this.getItem().isEmpty() && this.getItem().is(Items.NETHER_STAR) && source.is(DamageTypeTags.IS_EXPLOSION)) { + } else if (!world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && source.getEntity() instanceof Mob) { return false; -@@ -579,6 +594,12 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -595,6 +610,12 @@ public class ItemEntity extends Entity implements TraceableEntity { public void setItem(ItemStack stack) { this.getEntityData().set(ItemEntity.DATA_ITEM, stack); this.despawnRate = this.level().paperConfig().entities.spawning.altItemDespawnRate.enabled ? this.level().paperConfig().entities.spawning.altItemDespawnRate.items.getOrDefault(stack.getItem(), this.level().spigotConfig.itemDespawnRate) : this.level().spigotConfig.itemDespawnRate; // Paper - Alternative item-despawn-rate @@ -117,10 +117,10 @@ index 30d62ee4d5cd2ddacb8783b5bbbf475d592b3e02..01e4395f1669d21c30465aa1366bd2f1 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ee159581718533688cdd271b8f205b61a5912019..652143c7f3af6bf429b2645c2112ecb61346a522 100644 +index 33aa446dc0cb834e027c45e8392cf007f62f629d..75e969ed3887fe2c57ca080e4f4b56dc53e295cb 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -120,6 +120,49 @@ public class PurpurWorldConfig { +@@ -118,6 +118,49 @@ public class PurpurWorldConfig { elytraDamagePerTridentBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.trident", elytraDamagePerTridentBoost); } diff --git a/patches/unapplied-server/0062-Add-ping-command.patch b/patches/server/0059-Add-ping-command.patch similarity index 94% rename from patches/unapplied-server/0062-Add-ping-command.patch rename to patches/server/0059-Add-ping-command.patch index 47cda97e2..9380de7cf 100644 --- a/patches/unapplied-server/0062-Add-ping-command.patch +++ b/patches/server/0059-Add-ping-command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add ping command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 7e291ffff86bdcdb8a0a15c211c3f84d6ae18e38..12effcb8e1b89595884798efba71849e4530b6b3 100644 +index b7783480cc6a51a1f18789b7f3fc35faf5573f8d..abf33de1c20b031a684daedbc880a6f4eff869f4 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -250,6 +250,7 @@ public class Commands { +@@ -255,6 +255,7 @@ public class Commands { StopCommand.register(this.dispatcher); TransferCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); @@ -17,7 +17,7 @@ index 7e291ffff86bdcdb8a0a15c211c3f84d6ae18e38..12effcb8e1b89595884798efba71849e if (environment.includeIntegrated) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 5fc5ae6f6e04e1fe4edfd22379bbfa52b5af0bc2..34e71243b66977b631e45df7b7f11f9b91474fe8 100644 +index ed49a5131ca86b60a4d7f5c8ee61a7868dddc179..d0873724bf081e577fd42455f427a765e1db0f59 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -181,6 +181,7 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0063-Add-demo-command.patch b/patches/server/0060-Add-demo-command.patch similarity index 94% rename from patches/unapplied-server/0063-Add-demo-command.patch rename to patches/server/0060-Add-demo-command.patch index d44acd2f9..237def8c1 100644 --- a/patches/unapplied-server/0063-Add-demo-command.patch +++ b/patches/server/0060-Add-demo-command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add demo command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 12effcb8e1b89595884798efba71849e4530b6b3..200661f1295ac7ce2104b10bfea367a769e82f96 100644 +index abf33de1c20b031a684daedbc880a6f4eff869f4..a52d20dcc9b3dfaecc3325bce3140dbd7bee8c4c 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -250,6 +250,7 @@ public class Commands { +@@ -255,6 +255,7 @@ public class Commands { StopCommand.register(this.dispatcher); TransferCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); @@ -17,7 +17,7 @@ index 12effcb8e1b89595884798efba71849e4530b6b3..200661f1295ac7ce2104b10bfea367a7 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 34e71243b66977b631e45df7b7f11f9b91474fe8..8c4b83835f7e93225592de2328a01152bb400781 100644 +index d0873724bf081e577fd42455f427a765e1db0f59..e65552be2b8348e2751ea088809c090f6b029e43 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -181,6 +181,7 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0064-Add-credits-command.patch b/patches/server/0061-Add-credits-command.patch similarity index 95% rename from patches/unapplied-server/0064-Add-credits-command.patch rename to patches/server/0061-Add-credits-command.patch index 85e3c5229..315b34a26 100644 --- a/patches/unapplied-server/0064-Add-credits-command.patch +++ b/patches/server/0061-Add-credits-command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add credits command diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 200661f1295ac7ce2104b10bfea367a769e82f96..38a345901a743f5ddac18ba876d5245c5c11f111 100644 +index a52d20dcc9b3dfaecc3325bce3140dbd7bee8c4c..24c2568db30f970aed1a4897cfbc7d07297047d3 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -250,6 +250,7 @@ public class Commands { +@@ -255,6 +255,7 @@ public class Commands { StopCommand.register(this.dispatcher); TransferCommand.register(this.dispatcher); WhitelistCommand.register(this.dispatcher); @@ -17,7 +17,7 @@ index 200661f1295ac7ce2104b10bfea367a769e82f96..38a345901a743f5ddac18ba876d5245c org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 8c4b83835f7e93225592de2328a01152bb400781..58812f062486ae34ad448bb1fe404c4fb05ad4ff 100644 +index e65552be2b8348e2751ea088809c090f6b029e43..a3a699881e6b96d0fb507ef69e4dbc181fe5fbbc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -181,6 +181,7 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0065-Configurable-jockey-options.patch b/patches/server/0062-Configurable-jockey-options.patch similarity index 88% rename from patches/unapplied-server/0065-Configurable-jockey-options.patch rename to patches/server/0062-Configurable-jockey-options.patch index 25ad1808f..d9df6aa8e 100644 --- a/patches/unapplied-server/0065-Configurable-jockey-options.patch +++ b/patches/server/0062-Configurable-jockey-options.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable jockey options diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index c3e0e95da8a57fc7bfba44a6748c5d96a9640374..b5a46c844e0f366828f8c287a598abb9aaeacf21 100644 +index 0b572267d929ef362b6e65c55846ef12412951ba..7dc7f8734ffb3c5e50c763cb4e750d20c6e22281 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -@@ -99,6 +99,21 @@ public class Drowned extends Zombie implements RangedAttackMob { +@@ -100,6 +100,21 @@ public class Drowned extends Zombie implements RangedAttackMob { this.getAttribute(Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.drownedSpawnReinforcements); } @@ -29,12 +29,12 @@ index c3e0e95da8a57fc7bfba44a6748c5d96a9640374..b5a46c844e0f366828f8c287a598abb9 + @Override protected void addBehaviourGoals() { - this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0D)); + this.goalSelector.addGoal(1, new Drowned.DrownedGoToWaterGoal(this, 1.0)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java -index 805bfee8b061445de5b5d8aeb13c792178e25f7b..6673c0bff3a4e3d11a09e9dc8aeb0c2418dc7f59 100644 +index d9dbcd15522301344770963a6e3592afe393861a..ed4b1e2df6d7c7dfa45d96b9c08f2aa429ad32c5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Husk.java +++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java -@@ -49,6 +49,21 @@ public class Husk extends Zombie { +@@ -50,6 +50,21 @@ public class Husk extends Zombie { this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.huskSpawnReinforcements); } @@ -53,14 +53,14 @@ index 805bfee8b061445de5b5d8aeb13c792178e25f7b..6673c0bff3a4e3d11a09e9dc8aeb0c24 + return level().purpurConfig.huskJockeyTryExistingChickens; + } + - public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { - return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (MobSpawnType.isSpawner(spawnReason) || world.canSeeSky(pos)); + public static boolean checkHuskSpawnRules(EntityType type, ServerLevelAccessor world, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random) { + return checkMonsterSpawnRules(type, world, spawnReason, pos, random) && (EntitySpawnReason.isSpawner(spawnReason) || world.canSeeSky(pos)); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index 6eda16520bc7fdd577ac7b223e3701858eaa48c5..bd24217d0c696a506c916e062b3cb5bc751981f8 100644 +index 978f610d31312f36093c0111ce623d1157fa943d..cb5cf34781de4e87074a70a447fd463280147bdc 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -131,6 +131,18 @@ public class Zombie extends Monster { +@@ -133,6 +133,18 @@ public class Zombie extends Monster { this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.zombieScale); } @@ -79,7 +79,7 @@ index 6eda16520bc7fdd577ac7b223e3701858eaa48c5..bd24217d0c696a506c916e062b3cb5bc @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur -@@ -542,19 +554,20 @@ public class Zombie extends Monster { +@@ -553,19 +565,20 @@ public class Zombie extends Monster { } if (object instanceof Zombie.ZombieGroupData entityzombie_groupdatazombie) { @@ -103,10 +103,10 @@ index 6eda16520bc7fdd577ac7b223e3701858eaa48c5..bd24217d0c696a506c916e062b3cb5bc - } - } else if ((double) randomsource.nextFloat() < 0.05D) { + } else { // Purpur - Chicken entitychicken1 = (Chicken) EntityType.CHICKEN.create(this.level()); + Chicken entitychicken1 = (Chicken) EntityType.CHICKEN.create(this.level(), EntitySpawnReason.JOCKEY); if (entitychicken1 != null) { -@@ -564,6 +577,7 @@ public class Zombie extends Monster { +@@ -575,6 +588,7 @@ public class Zombie extends Monster { this.startRiding(entitychicken1); world.addFreshEntity(entitychicken1, CreatureSpawnEvent.SpawnReason.MOUNT); // CraftBukkit } @@ -115,10 +115,10 @@ index 6eda16520bc7fdd577ac7b223e3701858eaa48c5..bd24217d0c696a506c916e062b3cb5bc } } 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 199770256cf7f838228b5263ec9af8c6b18f30fb..cdf6753b6bb2bbb4f3ab21792bd3153988b26b75 100644 +index a2447844a6a6e08d41bb5152d01da91c852665cf..eb6daba7d44542739f1c537cbeef8f87c6db61bf 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -110,6 +110,21 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -112,6 +112,21 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.SPAWN_REINFORCEMENTS_CHANCE).setBaseValue(this.random.nextDouble() * this.level().purpurConfig.zombieVillagerSpawnReinforcements); } @@ -141,7 +141,7 @@ index 199770256cf7f838228b5263ec9af8c6b18f30fb..cdf6753b6bb2bbb4f3ab21792bd31539 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 42e3e992cc725627e8b03fa2c057c59bd52556b4..53b8f46bda60289ec310cb45513a2b729fcbea76 100644 +index ba1ce7e0ed888bd47312e9d7da5426f5c1015d07..650f9e1ca3a5ddec5123133c9604f33140e948a8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java @@ -86,6 +86,21 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @@ -167,10 +167,10 @@ index 42e3e992cc725627e8b03fa2c057c59bd52556b4..53b8f46bda60289ec310cb45513a2b72 public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 652143c7f3af6bf429b2645c2112ecb61346a522..0e8ee1511b6b16320e44311114ef7a7a8b82cc71 100644 +index 75e969ed3887fe2c57ca080e4f4b56dc53e295cb..6c5729b86a0540aa1ced33640170b4145efa08ba 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -636,6 +636,9 @@ public class PurpurWorldConfig { +@@ -634,6 +634,9 @@ public class PurpurWorldConfig { public double drownedMaxHealth = 20.0D; public double drownedScale = 1.0D; public double drownedSpawnReinforcements = 0.1D; @@ -180,7 +180,7 @@ index 652143c7f3af6bf429b2645c2112ecb61346a522..0e8ee1511b6b16320e44311114ef7a7a private void drownedSettings() { drownedRidable = getBoolean("mobs.drowned.ridable", drownedRidable); drownedRidableInWater = getBoolean("mobs.drowned.ridable-in-water", drownedRidableInWater); -@@ -648,6 +651,9 @@ public class PurpurWorldConfig { +@@ -646,6 +649,9 @@ public class PurpurWorldConfig { drownedMaxHealth = getDouble("mobs.drowned.attributes.max_health", drownedMaxHealth); drownedScale = Mth.clamp(getDouble("mobs.drowned.attributes.scale", drownedScale), 0.0625D, 16.0D); drownedSpawnReinforcements = getDouble("mobs.drowned.attributes.spawn_reinforcements", drownedSpawnReinforcements); @@ -190,7 +190,7 @@ index 652143c7f3af6bf429b2645c2112ecb61346a522..0e8ee1511b6b16320e44311114ef7a7a } public boolean elderGuardianRidable = false; -@@ -919,6 +925,9 @@ public class PurpurWorldConfig { +@@ -917,6 +923,9 @@ public class PurpurWorldConfig { public double huskMaxHealth = 20.0D; public double huskScale = 1.0D; public double huskSpawnReinforcements = 0.1D; @@ -200,7 +200,7 @@ index 652143c7f3af6bf429b2645c2112ecb61346a522..0e8ee1511b6b16320e44311114ef7a7a private void huskSettings() { huskRidable = getBoolean("mobs.husk.ridable", huskRidable); huskRidableInWater = getBoolean("mobs.husk.ridable-in-water", huskRidableInWater); -@@ -931,6 +940,9 @@ public class PurpurWorldConfig { +@@ -929,6 +938,9 @@ public class PurpurWorldConfig { huskMaxHealth = getDouble("mobs.husk.attributes.max_health", huskMaxHealth); huskScale = Mth.clamp(getDouble("mobs.husk.attributes.scale", huskScale), 0.0625D, 16.0D); huskSpawnReinforcements = getDouble("mobs.husk.attributes.spawn_reinforcements", huskSpawnReinforcements); @@ -210,7 +210,7 @@ index 652143c7f3af6bf429b2645c2112ecb61346a522..0e8ee1511b6b16320e44311114ef7a7a } public boolean illusionerRidable = false; -@@ -1824,6 +1836,9 @@ public class PurpurWorldConfig { +@@ -1822,6 +1834,9 @@ public class PurpurWorldConfig { public double zombieMaxHealth = 20.0D; public double zombieScale = 1.0D; public double zombieSpawnReinforcements = 0.1D; @@ -220,7 +220,7 @@ index 652143c7f3af6bf429b2645c2112ecb61346a522..0e8ee1511b6b16320e44311114ef7a7a private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1836,6 +1851,9 @@ public class PurpurWorldConfig { +@@ -1834,6 +1849,9 @@ public class PurpurWorldConfig { zombieMaxHealth = getDouble("mobs.zombie.attributes.max_health", zombieMaxHealth); zombieScale = Mth.clamp(getDouble("mobs.zombie.attributes.scale", zombieScale), 0.0625D, 16.0D); zombieSpawnReinforcements = getDouble("mobs.zombie.attributes.spawn_reinforcements", zombieSpawnReinforcements); @@ -230,7 +230,7 @@ index 652143c7f3af6bf429b2645c2112ecb61346a522..0e8ee1511b6b16320e44311114ef7a7a } public boolean zombieHorseRidable = false; -@@ -1873,6 +1891,9 @@ public class PurpurWorldConfig { +@@ -1871,6 +1889,9 @@ public class PurpurWorldConfig { public double zombieVillagerMaxHealth = 20.0D; public double zombieVillagerScale = 1.0D; public double zombieVillagerSpawnReinforcements = 0.1D; @@ -240,7 +240,7 @@ index 652143c7f3af6bf429b2645c2112ecb61346a522..0e8ee1511b6b16320e44311114ef7a7a private void zombieVillagerSettings() { zombieVillagerRidable = getBoolean("mobs.zombie_villager.ridable", zombieVillagerRidable); zombieVillagerRidableInWater = getBoolean("mobs.zombie_villager.ridable-in-water", zombieVillagerRidableInWater); -@@ -1885,6 +1906,9 @@ public class PurpurWorldConfig { +@@ -1883,6 +1904,9 @@ public class PurpurWorldConfig { zombieVillagerMaxHealth = getDouble("mobs.zombie_villager.attributes.max_health", zombieVillagerMaxHealth); zombieVillagerScale = Mth.clamp(getDouble("mobs.zombie_villager.attributes.scale", zombieVillagerScale), 0.0625D, 16.0D); zombieVillagerSpawnReinforcements = getDouble("mobs.zombie_villager.attributes.spawn_reinforcements", zombieVillagerSpawnReinforcements); @@ -250,7 +250,7 @@ index 652143c7f3af6bf429b2645c2112ecb61346a522..0e8ee1511b6b16320e44311114ef7a7a } public boolean zombifiedPiglinRidable = false; -@@ -1893,6 +1917,9 @@ public class PurpurWorldConfig { +@@ -1891,6 +1915,9 @@ public class PurpurWorldConfig { public double zombifiedPiglinMaxHealth = 20.0D; public double zombifiedPiglinScale = 1.0D; public double zombifiedPiglinSpawnReinforcements = 0.0D; @@ -260,7 +260,7 @@ index 652143c7f3af6bf429b2645c2112ecb61346a522..0e8ee1511b6b16320e44311114ef7a7a private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -1905,5 +1932,8 @@ public class PurpurWorldConfig { +@@ -1903,5 +1930,8 @@ public class PurpurWorldConfig { zombifiedPiglinMaxHealth = getDouble("mobs.zombified_piglin.attributes.max_health", zombifiedPiglinMaxHealth); zombifiedPiglinScale = Mth.clamp(getDouble("mobs.zombified_piglin.attributes.scale", zombifiedPiglinScale), 0.0625D, 16.0D); zombifiedPiglinSpawnReinforcements = getDouble("mobs.zombified_piglin.attributes.spawn_reinforcements", zombifiedPiglinSpawnReinforcements); diff --git a/patches/unapplied-server/0066-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch similarity index 95% rename from patches/unapplied-server/0066-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch rename to patches/server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index 9317e7f9a..0eeb572c0 100644 --- a/patches/unapplied-server/0066-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/patches/server/0063-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Phantoms attracted to crystals and crystals shoot phantoms diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java -index a33d89fe9ca9e343edab8bb1cc88c54130ddb4a7..72122333cf0247e4a8511ac633487f170b89586c 100644 +index 7cb3d69a69e0e3ef4b7f9f9c8b1eb67edb5d116d..4c9709e680b585316978b6a410600a8a3b4b6e3e 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EndCrystal.java @@ -31,6 +31,12 @@ public class EndCrystal extends Entity { @@ -72,10 +72,10 @@ index a33d89fe9ca9e343edab8bb1cc88c54130ddb4a7..72122333cf0247e4a8511ac633487f17 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 4dea7aed072caf383986e09ead8ee790b35d9706..7a80cb45ff5d96380755d37ff43ddeac2cd451e1 100644 +index e44d6d02ceaf1f133705efcd58b94e36014389ec..5d62be4ae4561262820d011f5e7318411d749bbb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -48,6 +48,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -49,6 +49,7 @@ public class Phantom extends FlyingMob implements Enemy { Vec3 moveTargetPoint; public BlockPos anchorPoint; Phantom.AttackPhase attackPhase; @@ -83,7 +83,7 @@ index 4dea7aed072caf383986e09ead8ee790b35d9706..7a80cb45ff5d96380755d37ff43ddeac public Phantom(EntityType type, Level world) { super(type, world); -@@ -115,6 +116,23 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -116,6 +117,23 @@ public class Phantom extends FlyingMob implements Enemy { level().addFreshEntity(flames); return true; } @@ -107,7 +107,7 @@ index 4dea7aed072caf383986e09ead8ee790b35d9706..7a80cb45ff5d96380755d37ff43ddeac // Purpur end @Override -@@ -129,11 +147,17 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -130,11 +148,17 @@ public class Phantom extends FlyingMob implements Enemy { @Override protected void registerGoals() { @@ -256,10 +256,10 @@ index 4dea7aed072caf383986e09ead8ee790b35d9706..7a80cb45ff5d96380755d37ff43ddeac private float speed = 0.1F; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0e8ee1511b6b16320e44311114ef7a7a8b82cc71..25db0b39456aed561f1fe12b08db8ff3e9244879 100644 +index 6c5729b86a0540aa1ced33640170b4145efa08ba..65c8b2e76677b92fee94e1149a9ce3803b3f1737 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1150,6 +1150,9 @@ public class PurpurWorldConfig { +@@ -1148,6 +1148,9 @@ public class PurpurWorldConfig { public String phantomAttackDamage = "6 + size"; public Map phantomMaxHealthCache = new HashMap<>(); public Map phantomAttackDamageCache = new HashMap<>(); @@ -269,7 +269,7 @@ index 0e8ee1511b6b16320e44311114ef7a7a8b82cc71..25db0b39456aed561f1fe12b08db8ff3 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1171,6 +1174,9 @@ public class PurpurWorldConfig { +@@ -1169,6 +1172,9 @@ public class PurpurWorldConfig { phantomAttackDamage = getString("mobs.phantom.attributes.attack_damage", phantomAttackDamage); phantomMaxHealthCache.clear(); phantomAttackDamageCache.clear(); diff --git a/patches/unapplied-server/0067-Add-phantom-spawning-options.patch b/patches/server/0064-Add-phantom-spawning-options.patch similarity index 95% rename from patches/unapplied-server/0067-Add-phantom-spawning-options.patch rename to patches/server/0064-Add-phantom-spawning-options.patch index 404bfa3b9..bc2a56259 100644 --- a/patches/unapplied-server/0067-Add-phantom-spawning-options.patch +++ b/patches/server/0064-Add-phantom-spawning-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add phantom spawning options diff --git a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java -index 1b1b475ca27e799e251d6f8a8c9fe1a4fd8bae83..04f67f7b43d2f461c776c76614dc3e5f060aea63 100644 +index 021221da5d0315f6e371380a705ac6b3f6ac18d3..27eb9a365006884c85603dc6d9dd8eee009c98b3 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java +++ b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java @@ -48,7 +48,7 @@ public class PhantomSpawner implements CustomSpawner { @@ -40,10 +40,10 @@ index 1b1b475ca27e799e251d6f8a8c9fe1a4fd8bae83..04f67f7b43d2f461c776c76614dc3e5f for (int l = 0; l < k; ++l) { // Paper start - PhantomPreSpawnEvent diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 25db0b39456aed561f1fe12b08db8ff3e9244879..0117359271289b9ebe28b028ba0def78a7c024d2 100644 +index 65c8b2e76677b92fee94e1149a9ce3803b3f1737..2858714275c2e3e9c0defaf264eeaade89e7cdaa 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1153,6 +1153,12 @@ public class PurpurWorldConfig { +@@ -1151,6 +1151,12 @@ public class PurpurWorldConfig { public double phantomAttackedByCrystalRadius = 0.0D; public float phantomAttackedByCrystalDamage = 1.0F; public double phantomOrbitCrystalRadius = 0.0D; @@ -56,7 +56,7 @@ index 25db0b39456aed561f1fe12b08db8ff3e9244879..0117359271289b9ebe28b028ba0def78 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1177,6 +1183,12 @@ public class PurpurWorldConfig { +@@ -1175,6 +1181,12 @@ public class PurpurWorldConfig { phantomAttackedByCrystalRadius = getDouble("mobs.phantom.attacked-by-crystal-range", phantomAttackedByCrystalRadius); phantomAttackedByCrystalDamage = (float) getDouble("mobs.phantom.attacked-by-crystal-damage", phantomAttackedByCrystalDamage); phantomOrbitCrystalRadius = getDouble("mobs.phantom.orbit-crystal-radius", phantomOrbitCrystalRadius); diff --git a/patches/unapplied-server/0068-Implement-bed-explosion-options.patch b/patches/server/0065-Implement-bed-explosion-options.patch similarity index 89% rename from patches/unapplied-server/0068-Implement-bed-explosion-options.patch rename to patches/server/0065-Implement-bed-explosion-options.patch index 091cbdcfd..4747dde25 100644 --- a/patches/unapplied-server/0068-Implement-bed-explosion-options.patch +++ b/patches/server/0065-Implement-bed-explosion-options.patch @@ -5,19 +5,19 @@ Subject: [PATCH] Implement bed explosion options diff --git a/src/main/java/net/minecraft/world/level/block/BedBlock.java b/src/main/java/net/minecraft/world/level/block/BedBlock.java -index 85d598c3354ee62f0fd1b26e485e0084967c0380..b59dd6b512021c335f3c21999958e2ea081daf69 100644 +index c02c4834ace843633b77fb43eeadd3ddc7b1f743..3b19395f2ddee654a77df5738a1942a08c20c179 100644 --- a/src/main/java/net/minecraft/world/level/block/BedBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java -@@ -104,7 +104,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock +@@ -106,7 +106,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock Vec3 vec3d = pos.getCenter(); - world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d), (ExplosionDamageCalculator) null, vec3d, 5.0F, true, Level.ExplosionInteraction.BLOCK); + if (world.purpurConfig.bedExplode) world.explode((Entity) null, world.damageSources().badRespawnPointExplosion(vec3d), (ExplosionDamageCalculator) null, vec3d, (float) world.purpurConfig.bedExplosionPower, world.purpurConfig.bedExplosionFire, world.purpurConfig.bedExplosionEffect); // Purpur - return InteractionResult.SUCCESS; + return InteractionResult.SUCCESS_SERVER; } else if ((Boolean) state.getValue(BedBlock.OCCUPIED)) { if (!BedBlock.canSetSpawn(world)) return this.explodeBed(state, world, pos); // Paper - check explode first -@@ -157,7 +157,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock +@@ -159,7 +159,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock Vec3 vec3d = blockposition.getCenter(); @@ -27,10 +27,10 @@ index 85d598c3354ee62f0fd1b26e485e0084967c0380..b59dd6b512021c335f3c21999958e2ea } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0117359271289b9ebe28b028ba0def78a7c024d2..cea3e28f38e5ab585351893f62142db6dc9f4949 100644 +index 2858714275c2e3e9c0defaf264eeaade89e7cdaa..60bc2a992d407ad99705af0e34ec3c2182e1cc23 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -279,6 +279,27 @@ public class PurpurWorldConfig { +@@ -277,6 +277,27 @@ public class PurpurWorldConfig { }); } diff --git a/patches/unapplied-server/0069-Implement-respawn-anchor-explosion-options.patch b/patches/server/0066-Implement-respawn-anchor-explosion-options.patch similarity index 91% rename from patches/unapplied-server/0069-Implement-respawn-anchor-explosion-options.patch rename to patches/server/0066-Implement-respawn-anchor-explosion-options.patch index 19b1f93cb..f09d906f6 100644 --- a/patches/unapplied-server/0069-Implement-respawn-anchor-explosion-options.patch +++ b/patches/server/0066-Implement-respawn-anchor-explosion-options.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Implement respawn anchor explosion options diff --git a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java -index 94d067e9eeee73183de25165d8c97043fe256103..00b6941951e1af9993f8f6da5425d31b8eaa85e4 100644 +index 9117c035d5a6ff114b028fad3380ceb1fc2b9691..2c5e394156dbf76107adb4913a094dfd4a598dd7 100644 --- a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java +++ b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java -@@ -150,7 +150,7 @@ public class RespawnAnchorBlock extends Block { +@@ -149,7 +149,7 @@ public class RespawnAnchorBlock extends Block { }; Vec3 vec3d = explodedPos.getCenter(); @@ -18,10 +18,10 @@ index 94d067e9eeee73183de25165d8c97043fe256103..00b6941951e1af9993f8f6da5425d31b public static boolean canSetSpawn(Level world) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index cea3e28f38e5ab585351893f62142db6dc9f4949..7b0e04f7132f5b8a3027ef7120f2fb1a6145fefc 100644 +index 60bc2a992d407ad99705af0e34ec3c2182e1cc23..a168eb5c1f08ad4def8421e298512c532ec06988 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -319,6 +319,27 @@ public class PurpurWorldConfig { +@@ -317,6 +317,27 @@ public class PurpurWorldConfig { lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether); } diff --git a/patches/unapplied-server/0070-Add-allow-water-in-end-world-option.patch b/patches/server/0067-Add-allow-water-in-end-world-option.patch similarity index 87% rename from patches/unapplied-server/0070-Add-allow-water-in-end-world-option.patch rename to patches/server/0067-Add-allow-water-in-end-world-option.patch index 268c0bb30..5afb40335 100644 --- a/patches/unapplied-server/0070-Add-allow-water-in-end-world-option.patch +++ b/patches/server/0067-Add-allow-water-in-end-world-option.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add allow water in end world option diff --git a/src/main/java/net/minecraft/world/item/BucketItem.java b/src/main/java/net/minecraft/world/item/BucketItem.java -index 321188173918d0d60858a258400dfd682ccdb21c..af47074f3a61a8518697d7851e43d5436fec5d57 100644 +index 3bddfb6f7412ab86e0c090d0cbc6cf254b3f891c..6aa8ee091d3a7d2826d08ab9a03f970ef71a81ea 100644 --- a/src/main/java/net/minecraft/world/item/BucketItem.java +++ b/src/main/java/net/minecraft/world/item/BucketItem.java @@ -196,7 +196,7 @@ public class BucketItem extends Item implements DispensibleContainerItem { @@ -27,13 +27,14 @@ index 321188173918d0d60858a258400dfd682ccdb21c..af47074f3a61a8518697d7851e43d543 return true; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 97f83c9737726be0c3b6dc847b56970e81cc6b6f..df881431c8f32e2c12224b44084ca4d71edf9ab3 100644 +index caa01dd419da2e18ad027e5eab828d8bcaca0279..82025f6dd73366a259418c2039638a6dcc6d4fc1 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -2044,4 +2044,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl - return null; +@@ -2039,4 +2039,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl + return this.id; + } } - // Paper end - optimize redstone (Alternate Current) ++ + // Purpur start + public boolean isNether() { + return getWorld().getEnvironment() == org.bukkit.World.Environment.NETHER; @@ -45,10 +46,10 @@ index 97f83c9737726be0c3b6dc847b56970e81cc6b6f..df881431c8f32e2c12224b44084ca4d7 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/block/IceBlock.java b/src/main/java/net/minecraft/world/level/block/IceBlock.java -index ac775afb265430ac202cfa3900a036d11a308b1e..87ce003dfeca975d8e6af26fd341f3abe66dc185 100644 +index a94762e65853ccad38cf90b0049ca256106c0c9f..38633e168a9b36e37feea00964d53e657926639e 100644 --- a/src/main/java/net/minecraft/world/level/block/IceBlock.java +++ b/src/main/java/net/minecraft/world/level/block/IceBlock.java -@@ -41,7 +41,7 @@ public class IceBlock extends HalfTransparentBlock { +@@ -42,7 +42,7 @@ public class IceBlock extends HalfTransparentBlock { public void afterDestroy(Level world, BlockPos pos, ItemStack tool) { // Paper end - Improve Block#breakNaturally API if (!EnchantmentHelper.hasTag(tool, EnchantmentTags.PREVENTS_ICE_MELTING)) { @@ -57,7 +58,7 @@ index ac775afb265430ac202cfa3900a036d11a308b1e..87ce003dfeca975d8e6af26fd341f3ab world.removeBlock(pos, false); return; } -@@ -69,7 +69,7 @@ public class IceBlock extends HalfTransparentBlock { +@@ -70,7 +70,7 @@ public class IceBlock extends HalfTransparentBlock { return; } // CraftBukkit end @@ -67,7 +68,7 @@ index ac775afb265430ac202cfa3900a036d11a308b1e..87ce003dfeca975d8e6af26fd341f3ab } else { world.setBlockAndUpdate(pos, IceBlock.meltsInto()); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 58812f062486ae34ad448bb1fe404c4fb05ad4ff..67f883f1681b7a7c2eed60309634cb4cb32e56a1 100644 +index a3a699881e6b96d0fb507ef69e4dbc181fe5fbbc..580eb4f8cc88cda9df78868b373ba22eb319f75f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -246,6 +246,11 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0071-Allow-color-codes-in-books.patch b/patches/server/0068-Allow-color-codes-in-books.patch similarity index 88% rename from patches/unapplied-server/0071-Allow-color-codes-in-books.patch rename to patches/server/0068-Allow-color-codes-in-books.patch index 54eece097..8c07a0e1a 100644 --- a/patches/unapplied-server/0071-Allow-color-codes-in-books.patch +++ b/patches/server/0068-Allow-color-codes-in-books.patch @@ -5,13 +5,13 @@ Subject: [PATCH] Allow color codes in books diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index ba98e98a09e141d45bda8a663d5e4354e3afbc1e..24507ece498ccaa2bed7b4ab53ae9c90e734ad54 100644 +index 0ffad0fee921ac302f31894766594921751fbff9..62fdb1e8b84facec3ce69d5001e7d626d74a37ce 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1237,10 +1237,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - +@@ -1214,10 +1214,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl Objects.requireNonNull(list); - stream.forEach(list::add); + optional.ifPresent(list::add); + list.addAll(packet.pages()); + // Purpur start + boolean hasEditPerm = getCraftPlayer().hasPermission("purpur.book.color.edit"); + boolean hasSignPerm = hasEditPerm || getCraftPlayer().hasPermission("purpur.book.color.sign"); @@ -25,7 +25,7 @@ index ba98e98a09e141d45bda8a663d5e4354e3afbc1e..24507ece498ccaa2bed7b4ab53ae9c90 }; this.filterTextPacket((List) list).thenAcceptAsync(consumer, this.server); -@@ -1248,13 +1252,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1225,13 +1229,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } private void updateBookContents(List pages, int slotId) { @@ -39,13 +39,13 @@ index ba98e98a09e141d45bda8a663d5e4354e3afbc1e..24507ece498ccaa2bed7b4ab53ae9c90 ItemStack itemstack = handItem.copy(); // CraftBukkit end - if (itemstack.is(Items.WRITABLE_BOOK)) { + if (itemstack.has(DataComponents.WRITABLE_BOOK_CONTENT)) { - List> list1 = pages.stream().map(this::filterableFromOutgoing).toList(); + List> list1 = pages.stream().map(filteredText -> filterableFromOutgoing(filteredText).map(s -> color(s, hasPerm))).toList(); // Purpur itemstack.set(DataComponents.WRITABLE_BOOK_CONTENT, new WritableBookContent(list1)); this.player.getInventory().setItem(slotId, CraftEventFactory.handleEditBookEvent(this.player, slotId, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent) -@@ -1262,6 +1271,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1239,6 +1248,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } private void signBook(FilteredText title, List pages, int slotId) { @@ -56,8 +56,8 @@ index ba98e98a09e141d45bda8a663d5e4354e3afbc1e..24507ece498ccaa2bed7b4ab53ae9c90 + // Purpur end ItemStack itemstack = this.player.getInventory().getItem(slotId); - if (itemstack.is(Items.WRITABLE_BOOK)) { -@@ -1269,10 +1283,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + if (itemstack.has(DataComponents.WRITABLE_BOOK_CONTENT)) { +@@ -1246,10 +1260,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl itemstack1.remove(DataComponents.WRITABLE_BOOK_CONTENT); List> list1 = (List>) (List) pages.stream().map((filteredtext1) -> { // CraftBukkit - decompile error @@ -70,7 +70,7 @@ index ba98e98a09e141d45bda8a663d5e4354e3afbc1e..24507ece498ccaa2bed7b4ab53ae9c90 CraftEventFactory.handleEditBookEvent(this.player, slotId, itemstack, itemstack1); // CraftBukkit this.player.getInventory().setItem(slotId, itemstack); // CraftBukkit - event factory updates the hand book } -@@ -1282,6 +1296,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1259,6 +1273,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl return this.player.isTextFilteringEnabled() ? Filterable.passThrough(message.filteredOrEmpty()) : Filterable.from(message); } diff --git a/patches/unapplied-server/0072-Entity-lifespan.patch b/patches/server/0069-Entity-lifespan.patch similarity index 83% rename from patches/unapplied-server/0072-Entity-lifespan.patch rename to patches/server/0069-Entity-lifespan.patch index 4141c84c5..665b52a43 100644 --- a/patches/unapplied-server/0072-Entity-lifespan.patch +++ b/patches/server/0069-Entity-lifespan.patch @@ -5,22 +5,22 @@ Subject: [PATCH] Entity lifespan diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index ae603fa8bbb980bd57bddf1bfdc41af809d0d01a..58b90722df0b0dcd7c84976f510f43aa82ea795c 100644 +index 62fdb1e8b84facec3ce69d5001e7d626d74a37ce..8c1f21892a96ed1cf1ef8b76ff8a52f1a8caca6e 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2836,6 +2836,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2783,6 +2783,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl AABB axisalignedbb = entity.getBoundingBox(); - if (this.player.canInteractWithEntity(axisalignedbb, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(1.0D))) { // Paper - configurable lenience value for interact range + if (this.player.canInteractWithEntity(axisalignedbb, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(3.0D))) { // Paper - configurable lenience value for interact range + if (entity instanceof Mob mob) mob.ticksSinceLastInteraction = 0; // Purpur packet.dispatch(new ServerboundInteractPacket.Handler() { private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index ebf2541c0d17c0940d78162a4015145bbebc51cf..0d93a8cbf15fa84f422d61adddb420ba5dcb226a 100644 +index cd456edd2caf087d1dbeb97d3373bd2bf9112fc2..17e6e4a858d3a2332c14d2860d2f5d1e87e1c629 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -146,6 +146,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -148,6 +148,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab private BlockPos restrictCenter; private float restrictRadius; @@ -28,7 +28,7 @@ index ebf2541c0d17c0940d78162a4015145bbebc51cf..0d93a8cbf15fa84f422d61adddb420ba public boolean aware = true; // CraftBukkit protected Mob(EntityType type, Level world) { -@@ -333,6 +334,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -334,6 +335,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab entityliving = null; } } @@ -36,10 +36,10 @@ index ebf2541c0d17c0940d78162a4015145bbebc51cf..0d93a8cbf15fa84f422d61adddb420ba this.target = entityliving; return true; // CraftBukkit end -@@ -375,8 +377,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -378,8 +380,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } - this.level().getProfiler().pop(); + gameprofilerfiller.pop(); + incrementTicksSinceLastInteraction(); // Purpur } @@ -65,7 +65,7 @@ index ebf2541c0d17c0940d78162a4015145bbebc51cf..0d93a8cbf15fa84f422d61adddb420ba @Override protected void playHurtSound(DamageSource damageSource) { this.resetAmbientSoundTime(); -@@ -551,6 +573,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -547,6 +569,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab } nbt.putBoolean("Bukkit.Aware", this.aware); // CraftBukkit @@ -73,7 +73,7 @@ index ebf2541c0d17c0940d78162a4015145bbebc51cf..0d93a8cbf15fa84f422d61adddb420ba } @Override -@@ -628,6 +651,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -624,6 +647,11 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.aware = nbt.getBoolean("Bukkit.Aware"); } // CraftBukkit end @@ -85,7 +85,7 @@ index ebf2541c0d17c0940d78162a4015145bbebc51cf..0d93a8cbf15fa84f422d61adddb420ba } @Override -@@ -1753,6 +1781,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1735,6 +1763,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.playAttackSound(); } @@ -94,10 +94,10 @@ index ebf2541c0d17c0940d78162a4015145bbebc51cf..0d93a8cbf15fa84f422d61adddb420ba } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 7b0e04f7132f5b8a3027ef7120f2fb1a6145fefc..063b8ba15e6ed01a5d77572df363b5fc89edfea6 100644 +index a168eb5c1f08ad4def8421e298512c532ec06988..8832a5491303d4189155ec56f81e37f99efaa28e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -120,6 +120,11 @@ public class PurpurWorldConfig { +@@ -118,6 +118,11 @@ public class PurpurWorldConfig { elytraDamagePerTridentBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.trident", elytraDamagePerTridentBoost); } diff --git a/patches/unapplied-server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch similarity index 80% rename from patches/unapplied-server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch rename to patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index f29cbd7ef..4d2421d44 100644 --- a/patches/unapplied-server/0073-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0070-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to teleport to spawn if outside world border diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 14df0de1e1abe154991c77319a73dbb3a709af80..aca60e21e7a191212d07a03a105fc4fb636359b2 100644 +index badcca42c771bf39b128c2e123be3c0aeb6b8e76..5f86f0b46e91ac41820931a9d64a7240d3ddd8d4 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -3037,4 +3037,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -3392,4 +3392,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple return (CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end @@ -36,22 +36,22 @@ index 14df0de1e1abe154991c77319a73dbb3a709af80..aca60e21e7a191212d07a03a105fc4fb + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index d8db30c9051aebf2cb6567a273bcfdfbe06d4936..cacda8947f0d88f6022e2c468e94da25ac0a1d7e 100644 +index a58c8ed64eab56c4a4a0688e0731a232fb5f7269..c0ac2801321ca1813804214cc0ceecc1b557865e 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -461,6 +461,7 @@ public abstract class LivingEntity extends Entity implements Attackable { - double d1 = this.level().getWorldBorder().getDamagePerBlock(); - - if (d1 > 0.0D) { +@@ -481,6 +481,7 @@ public abstract class LivingEntity extends Entity implements Attackable { + if (d1 < 0.0D) { + d0 = this.level().getWorldBorder().getDamagePerBlock(); + if (d0 > 0.0D) { + if (level().purpurConfig.teleportIfOutsideBorder && this instanceof ServerPlayer serverPlayer) { serverPlayer.teleport(io.papermc.paper.util.MCUtil.toLocation(level(), ((ServerLevel) level()).getSharedSpawnPos())); return; } // Purpur - this.hurt(this.damageSources().outOfBorder(), (float) Math.max(1, Mth.floor(-d0 * d1))); + this.hurtServer(worldserver1, this.damageSources().outOfBorder(), (float) Math.max(1, Mth.floor(-d1 * d0))); } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 063b8ba15e6ed01a5d77572df363b5fc89edfea6..bb88e3e6b467f9c66df48389f0f99218972b5856 100644 +index 8832a5491303d4189155ec56f81e37f99efaa28e..20242b58cc3af8d58c51919d637ec258df308a60 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -237,6 +237,7 @@ public class PurpurWorldConfig { +@@ -235,6 +235,7 @@ public class PurpurWorldConfig { public boolean idleTimeoutTargetPlayer = true; public String playerDeathExpDropEquation = "expLevel * 7"; public int playerDeathExpDropMax = 100; @@ -59,7 +59,7 @@ index 063b8ba15e6ed01a5d77572df363b5fc89edfea6..bb88e3e6b467f9c66df48389f0f99218 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -250,6 +251,7 @@ public class PurpurWorldConfig { +@@ -248,6 +249,7 @@ public class PurpurWorldConfig { idleTimeoutTargetPlayer = getBoolean("gameplay-mechanics.player.idle-timeout.mobs-target", idleTimeoutTargetPlayer); playerDeathExpDropEquation = getString("gameplay-mechanics.player.exp-dropped-on-death.equation", playerDeathExpDropEquation); playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax); diff --git a/patches/unapplied-server/0074-Squid-EAR-immunity.patch b/patches/server/0071-Squid-EAR-immunity.patch similarity index 83% rename from patches/unapplied-server/0074-Squid-EAR-immunity.patch rename to patches/server/0071-Squid-EAR-immunity.patch index 4c61612ed..70e1c5417 100644 --- a/patches/unapplied-server/0074-Squid-EAR-immunity.patch +++ b/patches/server/0071-Squid-EAR-immunity.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Squid EAR immunity diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index bb88e3e6b467f9c66df48389f0f99218972b5856..2eb90a4bc6db46de1a288c454bd5b552fae53e3a 100644 +index 20242b58cc3af8d58c51919d637ec258df308a60..5f686584f2f9205c3594daa52c4b3daf32f8e57b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1573,6 +1573,7 @@ public class PurpurWorldConfig { +@@ -1571,6 +1571,7 @@ public class PurpurWorldConfig { public boolean squidControllable = true; public double squidMaxHealth = 10.0D; public double squidScale = 1.0D; @@ -16,7 +16,7 @@ index bb88e3e6b467f9c66df48389f0f99218972b5856..2eb90a4bc6db46de1a288c454bd5b552 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1583,6 +1584,7 @@ public class PurpurWorldConfig { +@@ -1581,6 +1582,7 @@ public class PurpurWorldConfig { } squidMaxHealth = getDouble("mobs.squid.attributes.max_health", squidMaxHealth); squidScale = Mth.clamp(getDouble("mobs.squid.attributes.scale", squidScale), 0.0625D, 16.0D); @@ -25,10 +25,10 @@ index bb88e3e6b467f9c66df48389f0f99218972b5856..2eb90a4bc6db46de1a288c454bd5b552 public boolean spiderRidable = false; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 378c889b3315fc578629990df361e37baac110d3..ba180127a50b1a1ed155ee4053440074e38adef4 100644 +index bcb591ba54522ed70ca051429363f3a5517460af..ca05c37dad39808683429276d85d970b7cc63f82 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -404,6 +404,7 @@ public class ActivationRange +@@ -381,6 +381,7 @@ public class ActivationRange */ public static boolean checkIfActive(Entity entity) { diff --git a/patches/unapplied-server/0075-Phantoms-burn-in-light.patch b/patches/server/0072-Phantoms-burn-in-light.patch similarity index 86% rename from patches/unapplied-server/0075-Phantoms-burn-in-light.patch rename to patches/server/0072-Phantoms-burn-in-light.patch index d55662b89..284ff1ba0 100644 --- a/patches/unapplied-server/0075-Phantoms-burn-in-light.patch +++ b/patches/server/0072-Phantoms-burn-in-light.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Phantoms burn in light diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 7a80cb45ff5d96380755d37ff43ddeac2cd451e1..8f221fe016ea7221eb3a2116a2213139cf961797 100644 +index 5d62be4ae4561262820d011f5e7318411d749bbb..11e0ba7ec12ba3b93589f451ef4f251598eb29c9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -48,6 +48,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -49,6 +49,7 @@ public class Phantom extends FlyingMob implements Enemy { Vec3 moveTargetPoint; public BlockPos anchorPoint; Phantom.AttackPhase attackPhase; @@ -16,7 +16,7 @@ index 7a80cb45ff5d96380755d37ff43ddeac2cd451e1..8f221fe016ea7221eb3a2116a2213139 Vec3 crystalPosition; // Purpur public Phantom(EntityType type, Level world) { -@@ -240,7 +241,11 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -241,7 +242,11 @@ public class Phantom extends FlyingMob implements Enemy { @Override public void aiStep() { @@ -42,19 +42,19 @@ index 7a80cb45ff5d96380755d37ff43ddeac2cd451e1..8f221fe016ea7221eb3a2116a2213139 } else { if (entityliving instanceof Player) { Player entityhuman = (Player) entityliving; -@@ -786,6 +797,7 @@ public class Phantom extends FlyingMob implements Enemy { - this.nextScanTick = reducedTickDelay(60); - List list = Phantom.this.level().getNearbyPlayers(this.attackTargeting, Phantom.this, Phantom.this.getBoundingBox().inflate(16.0D, 64.0D, 16.0D)); +@@ -787,6 +798,7 @@ public class Phantom extends FlyingMob implements Enemy { + ServerLevel worldserver = getServerLevel(Phantom.this.level()); + List list = worldserver.getNearbyPlayers(this.attackTargeting, Phantom.this, Phantom.this.getBoundingBox().inflate(16.0D, 64.0D, 16.0D)); + if (level().purpurConfig.phantomIgnorePlayersWithTorch) list.removeIf(human -> TORCH.test(human.getItemInHand(net.minecraft.world.InteractionHand.MAIN_HAND)) || TORCH.test(human.getItemInHand(net.minecraft.world.InteractionHand.OFF_HAND)));// Purpur if (!list.isEmpty()) { list.sort(Comparator.comparing((Entity e) -> { return e.getY(); }).reversed()); // CraftBukkit - decompile error Iterator iterator = list.iterator(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 2eb90a4bc6db46de1a288c454bd5b552fae53e3a..619e3d5c5a0ffe690e6d9dd0b3a2fd86035bc2da 100644 +index 5f686584f2f9205c3594daa52c4b3daf32f8e57b..3e0113f24c49e9922ce3981855c810b0907cba07 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1208,6 +1208,9 @@ public class PurpurWorldConfig { +@@ -1206,6 +1206,9 @@ public class PurpurWorldConfig { public double phantomSpawnLocalDifficultyChance = 3.0D; public int phantomSpawnMinPerAttempt = 1; public int phantomSpawnMaxPerAttempt = -1; @@ -64,7 +64,7 @@ index 2eb90a4bc6db46de1a288c454bd5b552fae53e3a..619e3d5c5a0ffe690e6d9dd0b3a2fd86 private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -1238,6 +1241,9 @@ public class PurpurWorldConfig { +@@ -1236,6 +1239,9 @@ public class PurpurWorldConfig { phantomSpawnLocalDifficultyChance = getDouble("mobs.phantom.spawn.local-difficulty-chance", phantomSpawnLocalDifficultyChance); phantomSpawnMinPerAttempt = getInt("mobs.phantom.spawn.per-attempt.min", phantomSpawnMinPerAttempt); phantomSpawnMaxPerAttempt = getInt("mobs.phantom.spawn.per-attempt.max", phantomSpawnMaxPerAttempt); diff --git a/patches/unapplied-server/0076-Configurable-villager-breeding.patch b/patches/server/0073-Configurable-villager-breeding.patch similarity index 84% rename from patches/unapplied-server/0076-Configurable-villager-breeding.patch rename to patches/server/0073-Configurable-villager-breeding.patch index bfc002ca6..2d7498927 100644 --- a/patches/unapplied-server/0076-Configurable-villager-breeding.patch +++ b/patches/server/0073-Configurable-villager-breeding.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable villager breeding diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index f083de2448e0e6dfa277c58a082b305cdc1e11e7..37aefffb16c43221e39ef0b41a16968a560968ea 100644 +index 9008eeae3187024862bef886801d197c4c425df3..62a1d6876ce75676c5fa381e48bc58b8ef92701b 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -782,7 +782,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -761,7 +761,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public boolean canBreed() { @@ -18,10 +18,10 @@ index f083de2448e0e6dfa277c58a082b305cdc1e11e7..37aefffb16c43221e39ef0b41a16968a private boolean hungry() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 619e3d5c5a0ffe690e6d9dd0b3a2fd86035bc2da..6657fdacd399d0c097f81abe8de282f5a7c35445 100644 +index 3e0113f24c49e9922ce3981855c810b0907cba07..5175aff0fe60a9f1c71882d01f8ad29dac84f579 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1745,6 +1745,7 @@ public class PurpurWorldConfig { +@@ -1743,6 +1743,7 @@ public class PurpurWorldConfig { public double villagerScale = 1.0D; public boolean villagerFollowEmeraldBlock = false; public boolean villagerCanBeLeashed = false; @@ -29,7 +29,7 @@ index 619e3d5c5a0ffe690e6d9dd0b3a2fd86035bc2da..6657fdacd399d0c097f81abe8de282f5 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1758,6 +1759,7 @@ public class PurpurWorldConfig { +@@ -1756,6 +1757,7 @@ public class PurpurWorldConfig { villagerScale = Mth.clamp(getDouble("mobs.villager.attributes.scale", villagerScale), 0.0625D, 16.0D); villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); diff --git a/patches/unapplied-server/0077-Redstone-deactivates-spawners.patch b/patches/server/0074-Redstone-deactivates-spawners.patch similarity index 86% rename from patches/unapplied-server/0077-Redstone-deactivates-spawners.patch rename to patches/server/0074-Redstone-deactivates-spawners.patch index be7bc39a5..2e0222d30 100644 --- a/patches/unapplied-server/0077-Redstone-deactivates-spawners.patch +++ b/patches/server/0074-Redstone-deactivates-spawners.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Redstone deactivates spawners diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main/java/net/minecraft/world/level/BaseSpawner.java -index f57e1b78204dff661ad5d3ee93a88a00330af2dc..967af8771ff8564c715d89f4b4b69b16c25add59 100644 +index 7de66aa435dd36899b80f4ecc64480680e474d94..bb4411cfdf1bc7adc12c2f918d2eec830299f38b 100644 --- a/src/main/java/net/minecraft/world/level/BaseSpawner.java +++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java @@ -59,6 +59,7 @@ public abstract class BaseSpawner { @@ -17,10 +17,10 @@ index f57e1b78204dff661ad5d3ee93a88a00330af2dc..967af8771ff8564c715d89f4b4b69b16 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 6657fdacd399d0c097f81abe8de282f5a7c35445..c613cc628f5f40d85000709b228c09bfa057028a 100644 +index 5175aff0fe60a9f1c71882d01f8ad29dac84f579..0c8ec8f1f6a79a0764ff05d34b40cf18c5590862 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -347,6 +347,11 @@ public class PurpurWorldConfig { +@@ -345,6 +345,11 @@ public class PurpurWorldConfig { } } diff --git a/patches/unapplied-server/0078-Totems-work-in-inventory.patch b/patches/server/0075-Totems-work-in-inventory.patch similarity index 88% rename from patches/unapplied-server/0078-Totems-work-in-inventory.patch rename to patches/server/0075-Totems-work-in-inventory.patch index 3a37df8fd..62aa91314 100644 --- a/patches/unapplied-server/0078-Totems-work-in-inventory.patch +++ b/patches/server/0075-Totems-work-in-inventory.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Totems work in inventory diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index cacda8947f0d88f6022e2c468e94da25ac0a1d7e..cd2775bf0b59056a8329b1e7e2649f4b3cd92b2a 100644 +index c0ac2801321ca1813804214cc0ceecc1b557865e..06ccf6daaf5e7affe505c75cdbf85c1c29c3ebf9 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1679,6 +1679,18 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1709,6 +1709,18 @@ public abstract class LivingEntity extends Entity implements Attackable { } } @@ -28,10 +28,10 @@ index cacda8947f0d88f6022e2c468e94da25ac0a1d7e..cd2775bf0b59056a8329b1e7e2649f4b EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot); event.setCancelled(itemstack == null); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c613cc628f5f40d85000709b228c09bfa057028a..a3e40d92a32e214a69b605740bcbe639211bedb6 100644 +index 0c8ec8f1f6a79a0764ff05d34b40cf18c5590862..bd3c6364051419544cc1c5db110920ad51c1dbc7 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -238,6 +238,7 @@ public class PurpurWorldConfig { +@@ -236,6 +236,7 @@ public class PurpurWorldConfig { public String playerDeathExpDropEquation = "expLevel * 7"; public int playerDeathExpDropMax = 100; public boolean teleportIfOutsideBorder = false; @@ -39,7 +39,7 @@ index c613cc628f5f40d85000709b228c09bfa057028a..a3e40d92a32e214a69b605740bcbe639 private void playerSettings() { if (PurpurConfig.version < 19) { boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -252,6 +253,7 @@ public class PurpurWorldConfig { +@@ -250,6 +251,7 @@ public class PurpurWorldConfig { playerDeathExpDropEquation = getString("gameplay-mechanics.player.exp-dropped-on-death.equation", playerDeathExpDropEquation); playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax); teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder); diff --git a/patches/unapplied-server/0079-Add-vindicator-johnny-spawn-chance.patch b/patches/server/0076-Add-vindicator-johnny-spawn-chance.patch similarity index 85% rename from patches/unapplied-server/0079-Add-vindicator-johnny-spawn-chance.patch rename to patches/server/0076-Add-vindicator-johnny-spawn-chance.patch index 8f8366485..44249d81c 100644 --- a/patches/unapplied-server/0079-Add-vindicator-johnny-spawn-chance.patch +++ b/patches/server/0076-Add-vindicator-johnny-spawn-chance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add vindicator johnny spawn chance diff --git a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -index e5c6baf199235812f7b4fcec20145d7146737224..f8c2911496aa18e8e2b589309e9cdd78d679f004 100644 +index 2bfce82bee8f3a16a33bd937eb610d9df1b6ceeb..2f7da09e14787395e95211acadd5c693cf07fba3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -@@ -152,6 +152,11 @@ public class Vindicator extends AbstractIllager { +@@ -157,6 +157,11 @@ public class Vindicator extends AbstractIllager { RandomSource randomSource = world.getRandom(); this.populateDefaultEquipmentSlots(randomSource, difficulty); this.populateDefaultEquipmentEnchantments(world, randomSource, difficulty); @@ -21,10 +21,10 @@ index e5c6baf199235812f7b4fcec20145d7146737224..f8c2911496aa18e8e2b589309e9cdd78 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a3e40d92a32e214a69b605740bcbe639211bedb6..cf8165b5a5a1b82c966ae891d95e0093bf76526f 100644 +index bd3c6364051419544cc1c5db110920ad51c1dbc7..fa69de1709b41faef119474b98bcd2839d0ae67d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1774,6 +1774,7 @@ public class PurpurWorldConfig { +@@ -1772,6 +1772,7 @@ public class PurpurWorldConfig { public boolean vindicatorControllable = true; public double vindicatorMaxHealth = 24.0D; public double vindicatorScale = 1.0D; @@ -32,7 +32,7 @@ index a3e40d92a32e214a69b605740bcbe639211bedb6..cf8165b5a5a1b82c966ae891d95e0093 private void vindicatorSettings() { vindicatorRidable = getBoolean("mobs.vindicator.ridable", vindicatorRidable); vindicatorRidableInWater = getBoolean("mobs.vindicator.ridable-in-water", vindicatorRidableInWater); -@@ -1785,6 +1786,7 @@ public class PurpurWorldConfig { +@@ -1783,6 +1784,7 @@ public class PurpurWorldConfig { } vindicatorMaxHealth = getDouble("mobs.vindicator.attributes.max_health", vindicatorMaxHealth); vindicatorScale = Mth.clamp(getDouble("mobs.vindicator.attributes.scale", vindicatorScale), 0.0625D, 16.0D); diff --git a/patches/unapplied-server/0080-Dispensers-place-anvils-option.patch b/patches/server/0077-Dispensers-place-anvils-option.patch similarity index 76% rename from patches/unapplied-server/0080-Dispensers-place-anvils-option.patch rename to patches/server/0077-Dispensers-place-anvils-option.patch index 9c180a248..923e6574e 100644 --- a/patches/unapplied-server/0080-Dispensers-place-anvils-option.patch +++ b/patches/server/0077-Dispensers-place-anvils-option.patch @@ -5,13 +5,13 @@ Subject: [PATCH] Dispensers place anvils option diff --git a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java -index 60d3319016beb4f60cbc26dde165f64cf7577602..bd07743817f2510c179614a6215434e7b333824a 100644 +index cd77e86ff289634d2dd1c56002e569ff70d15f25..f5d7008ab65be21980063c6c5da783e4077252f5 100644 --- a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java +++ b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java -@@ -1015,5 +1015,22 @@ public interface DispenseItemBehavior { - } - } - }); +@@ -922,5 +922,22 @@ public interface DispenseItemBehavior { + DispenserBlock.registerBehavior(Items.TNT_MINECART, new MinecartDispenseItemBehavior(EntityType.TNT_MINECART)); + DispenserBlock.registerBehavior(Items.HOPPER_MINECART, new MinecartDispenseItemBehavior(EntityType.HOPPER_MINECART)); + DispenserBlock.registerBehavior(Items.COMMAND_BLOCK_MINECART, new MinecartDispenseItemBehavior(EntityType.COMMAND_BLOCK_MINECART)); + // Purpur start + DispenserBlock.registerBehavior(Items.ANVIL, (new OptionalDispenseItemBehavior() { + @Override @@ -32,10 +32,10 @@ index 60d3319016beb4f60cbc26dde165f64cf7577602..bd07743817f2510c179614a6215434e7 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index cf8165b5a5a1b82c966ae891d95e0093bf76526f..f291018ef35645d14811bbc1e47c56ac34fb73c6 100644 +index fa69de1709b41faef119474b98bcd2839d0ae67d..0aaf03f290a9bf410a5f854add927aca58d09ec3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -310,8 +310,10 @@ public class PurpurWorldConfig { +@@ -308,8 +308,10 @@ public class PurpurWorldConfig { } public boolean dispenserApplyCursedArmor = true; diff --git a/patches/unapplied-server/0081-Allow-anvil-colors.patch b/patches/server/0078-Allow-anvil-colors.patch similarity index 94% rename from patches/unapplied-server/0081-Allow-anvil-colors.patch rename to patches/server/0078-Allow-anvil-colors.patch index 3f73e6f74..c0100a7a9 100644 --- a/patches/unapplied-server/0081-Allow-anvil-colors.patch +++ b/patches/server/0078-Allow-anvil-colors.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow anvil colors diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -index 07e4c67ed1e5b14315ccbce4f0dd8abf0e5e6635..58135a3292bcdfea17726f17d86192ced96eea9a 100644 +index 0dfcce766872d9b1a9b898f56e6f4d9179a46bc4..f1834eec821a14ef6a7f42f827b7e0b8284ae5a2 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -@@ -283,6 +283,54 @@ public class AnvilMenu extends ItemCombinerMenu { +@@ -285,6 +285,54 @@ public class AnvilMenu extends ItemCombinerMenu { if (!this.itemName.equals(itemstack.getHoverName().getString())) { b0 = 1; i += b0; @@ -64,10 +64,10 @@ index 07e4c67ed1e5b14315ccbce4f0dd8abf0e5e6635..58135a3292bcdfea17726f17d86192ce } } else if (itemstack.has(DataComponents.CUSTOM_NAME)) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f291018ef35645d14811bbc1e47c56ac34fb73c6..1c1cf0e4c7fa41c2b5239ca47048670e058fd685 100644 +index 0aaf03f290a9bf410a5f854add927aca58d09ec3..cc35a98e9602b261da8613ae9cf95a0940bfeb19 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -288,6 +288,13 @@ public class PurpurWorldConfig { +@@ -286,6 +286,13 @@ public class PurpurWorldConfig { }); } diff --git a/patches/unapplied-server/0082-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch similarity index 83% rename from patches/unapplied-server/0082-Add-option-to-disable-dolphin-treasure-searching.patch rename to patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch index 499108698..c3bc55676 100644 --- a/patches/unapplied-server/0082-Add-option-to-disable-dolphin-treasure-searching.patch +++ b/patches/server/0079-Add-option-to-disable-dolphin-treasure-searching.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to disable dolphin treasure searching diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -index 98885a788af662736435fa8465c9b6ffeb16811b..6278d1020aeac52622ecf98c34453044850a453e 100644 +index a5a23c7f733d49c20c870f819eec2607781dccbf..be74a5732bc24eb3c909d28b4ef46d5175d999d2 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -@@ -465,6 +465,7 @@ public class Dolphin extends WaterAnimal { +@@ -493,6 +493,7 @@ public class Dolphin extends AgeableWaterCreature { @Override public boolean canUse() { @@ -17,10 +17,10 @@ index 98885a788af662736435fa8465c9b6ffeb16811b..6278d1020aeac52622ecf98c34453044 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1c1cf0e4c7fa41c2b5239ca47048670e058fd685..0411116e9b6735dcddf5f4d197f83ce61bd2aab6 100644 +index cc35a98e9602b261da8613ae9cf95a0940bfeb19..c1302e6cd7db386c94d95e03b901c65b3aca1887 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -656,6 +656,7 @@ public class PurpurWorldConfig { +@@ -654,6 +654,7 @@ public class PurpurWorldConfig { public float dolphinSpitDamage = 2.0F; public double dolphinMaxHealth = 10.0D; public double dolphinScale = 1.0D; @@ -28,7 +28,7 @@ index 1c1cf0e4c7fa41c2b5239ca47048670e058fd685..0411116e9b6735dcddf5f4d197f83ce6 private void dolphinSettings() { dolphinRidable = getBoolean("mobs.dolphin.ridable", dolphinRidable); dolphinControllable = getBoolean("mobs.dolphin.controllable", dolphinControllable); -@@ -669,6 +670,7 @@ public class PurpurWorldConfig { +@@ -667,6 +668,7 @@ public class PurpurWorldConfig { } dolphinMaxHealth = getDouble("mobs.dolphin.attributes.max_health", dolphinMaxHealth); dolphinScale = Mth.clamp(getDouble("mobs.dolphin.attributes.scale", dolphinScale), 0.0625D, 16.0D); diff --git a/patches/unapplied-server/0083-Short-enderman-height.patch b/patches/server/0080-Short-enderman-height.patch similarity index 83% rename from patches/unapplied-server/0083-Short-enderman-height.patch rename to patches/server/0080-Short-enderman-height.patch index 426c717d2..e589565df 100644 --- a/patches/unapplied-server/0083-Short-enderman-height.patch +++ b/patches/server/0080-Short-enderman-height.patch @@ -5,13 +5,13 @@ Subject: [PATCH] Short enderman height diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 5a80b1f1168d17ef62d756f8eed751e721f09f79..bad5b622477a637440649ec18ea5a79c321bc523 100644 +index 9eebe70e8ce80620b68635c9048e8e5c1083e27e..663dde75a9fc4fd7323ae9abe73cdb83aa74f2b3 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -324,7 +324,8 @@ public class EntityType implements FeatureElement, EntityTypeT - private Component description; +@@ -388,7 +388,8 @@ public class EntityType implements FeatureElement, EntityTypeT @Nullable - private ResourceKey lootTable; + private Component description; + private final Optional> lootTable; - private final EntityDimensions dimensions; + private EntityDimensions dimensions; // Purpur - remove final + public void setDimensions(EntityDimensions dimensions) { this.dimensions = dimensions; } // Purpur @@ -19,11 +19,11 @@ index 5a80b1f1168d17ef62d756f8eed751e721f09f79..bad5b622477a637440649ec18ea5a79c private final FeatureFlagSet requiredFeatures; diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 108dca0b1b97e01fd9cadf4ae330fab770fce0c8..b081ea3f272ec2dba426bf0ebdfbbba1cec718ee 100644 +index 437368100f6205b4c42234713044be47fda7082d..1a33a41f79f9d661cb958a6ecee2ab7e8a819877 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -428,6 +428,7 @@ public class EnderMan extends Monster implements NeutralMob { - if (this.isInvulnerableTo(source)) { +@@ -409,6 +409,7 @@ public class EnderMan extends Monster implements NeutralMob { + if (this.isInvulnerableTo(world, source)) { return false; } else if (getRider() != null && this.isControllable()) { return super.hurt(source, amount); // Purpur - no teleporting on damage + } else if (org.purpurmc.purpur.PurpurConfig.endermanShortHeight && source.is(net.minecraft.world.damagesource.DamageTypes.IN_WALL)) { return false; // Purpur - no suffocation damage if short height @@ -31,7 +31,7 @@ index 108dca0b1b97e01fd9cadf4ae330fab770fce0c8..b081ea3f272ec2dba426bf0ebdfbbba1 boolean flag = source.getDirectEntity() instanceof ThrownPotion; boolean flag1; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 67f883f1681b7a7c2eed60309634cb4cb32e56a1..b5822e634147e8c6e6508324442ce2b4dec3824a 100644 +index 580eb4f8cc88cda9df78868b373ba22eb319f75f..230606116a3f5a00cf0fa0b075c65aac7806c647 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -246,6 +246,12 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0084-Stop-squids-floating-on-top-of-water.patch b/patches/server/0081-Stop-squids-floating-on-top-of-water.patch similarity index 77% rename from patches/unapplied-server/0084-Stop-squids-floating-on-top-of-water.patch rename to patches/server/0081-Stop-squids-floating-on-top-of-water.patch index a16fe0c1c..910aaf927 100644 --- a/patches/unapplied-server/0084-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0081-Stop-squids-floating-on-top-of-water.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Stop squids floating on top of water diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index e6c1ae7b70bed34fa9b1acdeaf0d969a1f5b6f08..8911eb7f6f307c7846eeb10f68e5cd231bd22e1b 100644 +index c2cc934f2599c6620b60b1b1485c743390157377..6f93348f929c33268107607dec6cce7e102c18b2 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4496,6 +4496,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4721,6 +4721,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Mth.lerp(delta, this.yRotO, this.yRot); } @@ -18,14 +18,14 @@ index e6c1ae7b70bed34fa9b1acdeaf0d969a1f5b6f08..8911eb7f6f307c7846eeb10f68e5cd23 + } + // Purpur end + - public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { - if (false && this.touchingUnloadedChunk()) { // Pufferfish - cost of a lookup here is the same cost as below, so skip - return false; + // Paper start - optimise collisions + public boolean updateFluidHeightAndDoFluidPushing(final TagKey fluid, final double flowScale) { + if (this.touchingUnloadedChunk()) { 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 ef4513f577779ddcfd357420aa65e1b52cf0f388..522dabcf6ec8b19902890718717fc890d430c750 100644 +index db0d03fe2d2891efb3284d5c597d7c8279f2db94..a0aa4ac61de870a374152018ebdeab47dc5b5a85 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -73,6 +73,12 @@ public class Squid extends WaterAnimal { +@@ -78,6 +78,12 @@ public class Squid extends AgeableWaterCreature { this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.squidScale); } @@ -39,10 +39,10 @@ index ef4513f577779ddcfd357420aa65e1b52cf0f388..522dabcf6ec8b19902890718717fc890 protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); diff --git a/src/main/java/net/minecraft/world/phys/AABB.java b/src/main/java/net/minecraft/world/phys/AABB.java -index 29123f3a2f211c08d1a9ccf62ca9bc9822f90111..db78616676ba021ee0f03cfea932f2912f4ec987 100644 +index 6cf6d4ec7b9e43c7b2b4c0e2fb080964ff588130..e74866e5195a5eeae7666ad7be750edac5947094 100644 --- a/src/main/java/net/minecraft/world/phys/AABB.java +++ b/src/main/java/net/minecraft/world/phys/AABB.java -@@ -508,4 +508,10 @@ public class AABB { +@@ -551,4 +551,10 @@ public class AABB { public static AABB ofSize(Vec3 center, double dx, double dy, double dz) { return new AABB(center.x - dx / 2.0, center.y - dy / 2.0, center.z - dz / 2.0, center.x + dx / 2.0, center.y + dy / 2.0, center.z + dz / 2.0); } @@ -54,10 +54,10 @@ index 29123f3a2f211c08d1a9ccf62ca9bc9822f90111..db78616676ba021ee0f03cfea932f291 + // Purpur } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 0411116e9b6735dcddf5f4d197f83ce61bd2aab6..45238996bb7ee057ab981178baf56194411d5b77 100644 +index c1302e6cd7db386c94d95e03b901c65b3aca1887..918923d1d95b68a99b52750974647df03070f910 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1598,6 +1598,7 @@ public class PurpurWorldConfig { +@@ -1596,6 +1596,7 @@ public class PurpurWorldConfig { public double squidMaxHealth = 10.0D; public double squidScale = 1.0D; public boolean squidImmuneToEAR = true; @@ -65,7 +65,7 @@ index 0411116e9b6735dcddf5f4d197f83ce61bd2aab6..45238996bb7ee057ab981178baf56194 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1609,6 +1610,7 @@ public class PurpurWorldConfig { +@@ -1607,6 +1608,7 @@ public class PurpurWorldConfig { squidMaxHealth = getDouble("mobs.squid.attributes.max_health", squidMaxHealth); squidScale = Mth.clamp(getDouble("mobs.squid.attributes.scale", squidScale), 0.0625D, 16.0D); squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); diff --git a/patches/unapplied-server/0085-Crying-obsidian-valid-for-portal-frames.patch b/patches/server/0082-Crying-obsidian-valid-for-portal-frames.patch similarity index 90% rename from patches/unapplied-server/0085-Crying-obsidian-valid-for-portal-frames.patch rename to patches/server/0082-Crying-obsidian-valid-for-portal-frames.patch index 8f704e93f..ff8784548 100644 --- a/patches/unapplied-server/0085-Crying-obsidian-valid-for-portal-frames.patch +++ b/patches/server/0082-Crying-obsidian-valid-for-portal-frames.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Crying obsidian valid for portal frames diff --git a/src/main/java/net/minecraft/world/level/portal/PortalShape.java b/src/main/java/net/minecraft/world/level/portal/PortalShape.java -index 86d95edc7dd1e42b4b38eba1177cd508e72e4fc4..6c07fc507df6070854f5950a8616d2949c040656 100644 +index 90056822cd17f3d33d14b3f94b34750ee522a0a9..acdff7b4a00d563739fd301c3633a266875296fa 100644 --- a/src/main/java/net/minecraft/world/level/portal/PortalShape.java +++ b/src/main/java/net/minecraft/world/level/portal/PortalShape.java -@@ -31,7 +31,7 @@ public class PortalShape { +@@ -35,7 +35,7 @@ public class PortalShape { private static final int MIN_HEIGHT = 3; public static final int MAX_HEIGHT = 21; private static final BlockBehaviour.StatePredicate FRAME = (iblockdata, iblockaccess, blockposition) -> { @@ -18,7 +18,7 @@ index 86d95edc7dd1e42b4b38eba1177cd508e72e4fc4..6c07fc507df6070854f5950a8616d294 private static final float SAFE_TRAVEL_MAX_ENTITY_XY = 4.0F; private static final double SAFE_TRAVEL_MAX_VERTICAL_DELTA = 1.0D; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index b5822e634147e8c6e6508324442ce2b4dec3824a..ce7ef9b4149021812c325bfd24cd6b9d4dc610a6 100644 +index 230606116a3f5a00cf0fa0b075c65aac7806c647..d4371bebdcb3b55c412334491959835e2d52220f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -214,6 +214,7 @@ public class PurpurConfig { diff --git a/patches/unapplied-server/0086-Entities-can-use-portals.patch b/patches/server/0083-Entities-can-use-portals.patch similarity index 75% rename from patches/unapplied-server/0086-Entities-can-use-portals.patch rename to patches/server/0083-Entities-can-use-portals.patch index 277528f86..b39c7f3dc 100644 --- a/patches/unapplied-server/0086-Entities-can-use-portals.patch +++ b/patches/server/0083-Entities-can-use-portals.patch @@ -5,19 +5,19 @@ Subject: [PATCH] Entities can use portals diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 8911eb7f6f307c7846eeb10f68e5cd231bd22e1b..acf10656ea445554ee537dcb2f23164ee77e4d60 100644 +index 6f93348f929c33268107607dec6cce7e102c18b2..4b516fcc23c692ec2c9847bee45484d747981410 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3277,7 +3277,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3431,7 +3431,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public void setAsInsidePortal(Portal portal, BlockPos pos) { if (this.isOnPortalCooldown()) { this.setPortalCooldown(); - } else { + } else if (this.level.purpurConfig.entitiesCanUsePortals || this instanceof ServerPlayer) { // Purpur - Entities can use portals if (this.portalProcess != null && this.portalProcess.isSamePortal(portal)) { - this.portalProcess.updateEntryPosition(pos.immutable()); - this.portalProcess.setAsInsidePortalThisTick(true); -@@ -3902,7 +3902,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess + if (!this.portalProcess.isInsidePortalThisTick()) { + this.portalProcess.updateEntryPosition(pos.immutable()); +@@ -4148,7 +4148,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end public boolean canUsePortal(boolean allowVehicles) { @@ -25,23 +25,22 @@ index 8911eb7f6f307c7846eeb10f68e5cd231bd22e1b..acf10656ea445554ee537dcb2f23164e + return (allowVehicles || !this.isPassenger()) && this.isAlive() && (this.level.purpurConfig.entitiesCanUsePortals || this instanceof ServerPlayer); // Purpur - Entities can use portals } - public boolean canChangeDimensions(Level from, Level to) { + public boolean canTeleport(Level from, Level to) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 45238996bb7ee057ab981178baf56194411d5b77..96dc75c3ab53dbd2df040c84ddf878881d26a051 100644 +index 918923d1d95b68a99b52750974647df03070f910..85c896145bd1489a9bcdfe580f959db308c59b65 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -99,12 +99,14 @@ public class PurpurWorldConfig { - public boolean useBetterMending = false; +@@ -100,11 +100,13 @@ public class PurpurWorldConfig { public boolean boatEjectPlayersOnLand = false; public boolean disableDropsOnCrammingDeath = false; -+ public boolean entitiesCanUsePortals = true; - public boolean milkCuresBadOmen = true; public double tridentLoyaltyVoidReturnHeight = 0.0D; ++ public boolean entitiesCanUsePortals = true; private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); -+ entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals); - milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); ++ entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals); } + + public int elytraDamagePerSecond = 1; diff --git a/patches/unapplied-server/0087-Customizable-wither-health-and-healing.patch b/patches/server/0084-Customizable-wither-health-and-healing.patch similarity index 85% rename from patches/unapplied-server/0087-Customizable-wither-health-and-healing.patch rename to patches/server/0084-Customizable-wither-health-and-healing.patch index c76294668..cd108b2e3 100644 --- a/patches/unapplied-server/0087-Customizable-wither-health-and-healing.patch +++ b/patches/server/0084-Customizable-wither-health-and-healing.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Customizable wither health and healing Adds the ability to customize the health of the wither, as well as the amount that it heals, and how often. diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 8a4f48956cb0804c0d717783556b97603a1e59b2..0d753a16c77251b421735f9e38202af00baf46f9 100644 +index f55842cf85dec8e5c26cd5ac52c63599f3b19cf3..2ec12ec298446b556132785d4d376130594a7cb6 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -529,8 +529,10 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -519,8 +519,10 @@ public class WitherBoss extends Monster implements RangedAttackMob { } } @@ -23,10 +23,10 @@ index 8a4f48956cb0804c0d717783556b97603a1e59b2..0d753a16c77251b421735f9e38202af0 this.bossEvent.setProgress(this.getHealth() / this.getMaxHealth()); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 96dc75c3ab53dbd2df040c84ddf878881d26a051..07bb161fce3e66eaac6ca347a0ad508aa80ecbf4 100644 +index 85c896145bd1489a9bcdfe580f959db308c59b65..119904f2c4e9f8c4b3596a26220833d457bb60df 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1859,6 +1859,8 @@ public class PurpurWorldConfig { +@@ -1857,6 +1857,8 @@ public class PurpurWorldConfig { public double witherMaxY = 320D; public double witherMaxHealth = 300.0D; public double witherScale = 1.0D; @@ -35,7 +35,7 @@ index 96dc75c3ab53dbd2df040c84ddf878881d26a051..07bb161fce3e66eaac6ca347a0ad508a private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -1875,6 +1877,8 @@ public class PurpurWorldConfig { +@@ -1873,6 +1875,8 @@ public class PurpurWorldConfig { } witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth); witherScale = Mth.clamp(getDouble("mobs.wither.attributes.scale", witherScale), 0.0625D, 16.0D); diff --git a/patches/unapplied-server/0088-Allow-toggling-special-MobSpawners-per-world.patch b/patches/server/0085-Allow-toggling-special-MobSpawners-per-world.patch similarity index 91% rename from patches/unapplied-server/0088-Allow-toggling-special-MobSpawners-per-world.patch rename to patches/server/0085-Allow-toggling-special-MobSpawners-per-world.patch index 7eaf976f4..72b1115e8 100644 --- a/patches/unapplied-server/0088-Allow-toggling-special-MobSpawners-per-world.patch +++ b/patches/server/0085-Allow-toggling-special-MobSpawners-per-world.patch @@ -6,11 +6,11 @@ Subject: [PATCH] Allow toggling special MobSpawners per world In vanilla, these are all hardcoded on for world type 0 (overworld) and hardcoded off for every other world type. Default config behaviour matches this. diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 8b2ab0a91a5243357400c91c01c9f27a79825047..9eeb5a5304a25f8709288bc78ec8458b70e18649 100644 +index c4d8ef23a5e384ce554cc3e63e7be3e027d60e44..9538510ac96d97b8e3cdfcc9873bb3d274c351ad 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -520,7 +520,24 @@ public class ServerLevel extends Level implements WorldGenLevel, ca.spottedleaf. - this.dragonParts = new Int2ObjectOpenHashMap(); +@@ -588,7 +588,24 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe + // CraftBukkit end this.tickTime = flag1; this.server = minecraftserver; - this.customSpawners = list; @@ -36,7 +36,7 @@ index 8b2ab0a91a5243357400c91c01c9f27a79825047..9eeb5a5304a25f8709288bc78ec8458b ChunkGenerator chunkgenerator = worlddimension.generator(); // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java -index c72b6ea5530e54fc373c701028e1c147cea34b59..96e9fce5f9084737d2fcf4deb83305733b480179 100644 +index a728dcbf956f108f01c966c7531449a506a14a87..4c1378132201c1e5d1bc01f8c0cbba91629bcffa 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java @@ -160,7 +160,17 @@ public class WanderingTraderSpawner implements CustomSpawner { @@ -59,7 +59,7 @@ index c72b6ea5530e54fc373c701028e1c147cea34b59..96e9fce5f9084737d2fcf4deb8330573 if (spawnplacementtype.isSpawnPositionOk(world, blockposition2, EntityType.WANDERING_TRADER)) { blockposition1 = blockposition2; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 07bb161fce3e66eaac6ca347a0ad508aa80ecbf4..84713d2c265d2ce097a59f64eb693742933ad8ca 100644 +index 119904f2c4e9f8c4b3596a26220833d457bb60df..668ea98aee2f74ff6ac961b61360fb2e48513ebf 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -70,6 +70,12 @@ public class PurpurWorldConfig { @@ -75,7 +75,7 @@ index 07bb161fce3e66eaac6ca347a0ad508aa80ecbf4..84713d2c265d2ce097a59f64eb693742 private double getDouble(String path, double def) { PurpurConfig.config.addDefault("world-settings.default." + path, def); return PurpurConfig.config.getDouble("world-settings." + worldName + "." + path, PurpurConfig.config.getDouble("world-settings.default." + path)); -@@ -232,6 +238,21 @@ public class PurpurWorldConfig { +@@ -230,6 +236,21 @@ public class PurpurWorldConfig { } } diff --git a/patches/unapplied-server/0089-Raid-cooldown-setting.patch b/patches/server/0086-Raid-cooldown-setting.patch similarity index 89% rename from patches/unapplied-server/0089-Raid-cooldown-setting.patch rename to patches/server/0086-Raid-cooldown-setting.patch index 1fd6933d5..8b65d0084 100644 --- a/patches/unapplied-server/0089-Raid-cooldown-setting.patch +++ b/patches/server/0086-Raid-cooldown-setting.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Raid cooldown setting diff --git a/src/main/java/net/minecraft/world/entity/raid/Raids.java b/src/main/java/net/minecraft/world/entity/raid/Raids.java -index 8c60f71270d909c10e6617eb64b8fdb42deb73e9..eedce2a3d67d875d5174ee125e2679480d4d412c 100644 +index 439d61d8689fabe940006b9b317a6810175dccfb..6b30941a84054efb5fcccb5d9e6c80d713a23889 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raids.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raids.java @@ -26,6 +26,7 @@ import net.minecraft.world.phys.Vec3; @@ -49,21 +49,20 @@ index 8c60f71270d909c10e6617eb64b8fdb42deb73e9..eedce2a3d67d875d5174ee125e267948 if (!raid.isStarted() && !this.raidMap.containsKey(raid.getId())) { this.raidMap.put(raid.getId(), raid); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 84713d2c265d2ce097a59f64eb693742933ad8ca..54e7250a70ef538ff25df1737a064690a204fa91 100644 +index 668ea98aee2f74ff6ac961b61360fb2e48513ebf..0e1992ba3bbd470eee6bdd461d2f00abec5c6d55 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -108,6 +108,7 @@ public class PurpurWorldConfig { - public boolean entitiesCanUsePortals = true; - public boolean milkCuresBadOmen = true; +@@ -107,12 +107,14 @@ public class PurpurWorldConfig { + public boolean disableDropsOnCrammingDeath = false; public double tridentLoyaltyVoidReturnHeight = 0.0D; + public boolean entitiesCanUsePortals = true; + public int raidCooldownSeconds = 0; private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); -@@ -115,6 +116,7 @@ public class PurpurWorldConfig { - entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals); - milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); + disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); + entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals); + raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); } diff --git a/patches/unapplied-server/0090-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0087-Add-option-to-disable-zombie-aggressiveness-towards-.patch similarity index 87% rename from patches/unapplied-server/0090-Add-option-to-disable-zombie-aggressiveness-towards-.patch rename to patches/server/0087-Add-option-to-disable-zombie-aggressiveness-towards-.patch index 2704ad437..3fe5096a1 100644 --- a/patches/unapplied-server/0090-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/server/0087-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -20,14 +20,14 @@ index f7241c5292f1c012404eea11256813fbc2c2df1a..fad407d0cec0605e303e93a79752435f ignored.add("goal_selector_1"); ignored.add("goal_selector_2"); diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index b5a46c844e0f366828f8c287a598abb9aaeacf21..4f9daaeb1bd4d115a84b0c20649e4dd44af37924 100644 +index 7dc7f8734ffb3c5e50c763cb4e750d20c6e22281..7b3c999a03d91c167dfc1a1c90750b2efd4eb675 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -@@ -124,7 +124,19 @@ public class Drowned extends Zombie implements RangedAttackMob { - this.goalSelector.addGoal(7, new RandomStrollGoal(this, 1.0D)); - this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Drowned.class})).setAlertOthers(ZombifiedPiglin.class)); - this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::okTarget)); -- if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); // Paper - Check drowned for villager aggression config +@@ -125,7 +125,19 @@ public class Drowned extends Zombie implements RangedAttackMob { + this.goalSelector.addGoal(7, new RandomStrollGoal(this, 1.0)); + this.targetSelector.addGoal(1, new HurtByTargetGoal(this, Drowned.class).setAlertOthers(ZombifiedPiglin.class)); + this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (target, world) -> this.okTarget(target))); +- if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); // Paper - Check drowned for villager aggression config + // Purpur start + if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false) { // Paper - Check drowned for villager aggression config + @Override @@ -45,10 +45,10 @@ index b5a46c844e0f366828f8c287a598abb9aaeacf21..4f9daaeb1bd4d115a84b0c20649e4dd4 this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Axolotl.class, true, false)); this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index bd24217d0c696a506c916e062b3cb5bc751981f8..c0adb41e2772ac1204bbdf8e6eee27fbfc82ef12 100644 +index cb5cf34781de4e87074a70a447fd463280147bdc..e6fb53b828c1a2e76d398e88449260f6206145c3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -159,7 +159,19 @@ public class Zombie extends Monster { +@@ -161,7 +161,19 @@ public class Zombie extends Monster { this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0D)); this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); @@ -70,10 +70,10 @@ index bd24217d0c696a506c916e062b3cb5bc751981f8..c0adb41e2772ac1204bbdf8e6eee27fb this.targetSelector.addGoal(5, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 54e7250a70ef538ff25df1737a064690a204fa91..ad6a39364a835d698fc008fca433930b6f47800f 100644 +index 0e1992ba3bbd470eee6bdd461d2f00abec5c6d55..a0a5059e5d86ff3626b7e4a6d378f9b34d6ba8dc 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1967,6 +1967,7 @@ public class PurpurWorldConfig { +@@ -1965,6 +1965,7 @@ public class PurpurWorldConfig { public boolean zombieJockeyOnlyBaby = true; public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; @@ -81,7 +81,7 @@ index 54e7250a70ef538ff25df1737a064690a204fa91..ad6a39364a835d698fc008fca433930b private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1982,6 +1983,7 @@ public class PurpurWorldConfig { +@@ -1980,6 +1981,7 @@ public class PurpurWorldConfig { zombieJockeyOnlyBaby = getBoolean("mobs.zombie.jockey.only-babies", zombieJockeyOnlyBaby); zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance); zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); diff --git a/patches/unapplied-server/0092-Flying-squids-Oh-my.patch b/patches/server/0088-Flying-squids-Oh-my.patch similarity index 81% rename from patches/unapplied-server/0092-Flying-squids-Oh-my.patch rename to patches/server/0088-Flying-squids-Oh-my.patch index 3b4eae089..181184811 100644 --- a/patches/unapplied-server/0092-Flying-squids-Oh-my.patch +++ b/patches/server/0088-Flying-squids-Oh-my.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Flying squids! Oh my! diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java -index 8211c152e6f4232e82e452b08047e4579465d770..4cd57672c548950cb4e0aa97af75ecca84be6823 100644 +index 27aee968718af1ae78e2076ddc890114b2c9bb94..0f5be53c6f6a66c61dc3f2bebeb18ca61d06c10d 100644 --- a/src/main/java/net/minecraft/world/entity/GlowSquid.java +++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java -@@ -41,6 +41,11 @@ public class GlowSquid extends Squid { +@@ -43,6 +43,11 @@ public class GlowSquid extends Squid { this.getAttribute(net.minecraft.world.entity.ai.attributes.Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.glowSquidMaxHealth); } @@ -21,10 +21,10 @@ index 8211c152e6f4232e82e452b08047e4579465d770..4cd57672c548950cb4e0aa97af75ecca protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/animal/Squid.java b/src/main/java/net/minecraft/world/entity/animal/Squid.java -index 522dabcf6ec8b19902890718717fc890d430c750..ea80eca266500f93fa9c00962d078ec276814f0a 100644 +index a0aa4ac61de870a374152018ebdeab47dc5b5a85..548f140c56277d46a3381b48d6f0b660c6e8feeb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Squid.java +++ b/src/main/java/net/minecraft/world/entity/animal/Squid.java -@@ -79,6 +79,15 @@ public class Squid extends WaterAnimal { +@@ -84,6 +84,15 @@ public class Squid extends AgeableWaterCreature { return super.getAxisForFluidCheck().offsetY(level().purpurConfig.squidOffsetWaterCheck); } @@ -40,7 +40,7 @@ index 522dabcf6ec8b19902890718717fc890d430c750..ea80eca266500f93fa9c00962d078ec2 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new Squid.SquidRandomMovementGoal(this)); -@@ -151,6 +160,7 @@ public class Squid extends WaterAnimal { +@@ -162,6 +171,7 @@ public class Squid extends AgeableWaterCreature { } if (this.isInWaterOrBubble()) { @@ -48,20 +48,20 @@ index 522dabcf6ec8b19902890718717fc890d430c750..ea80eca266500f93fa9c00962d078ec2 if (this.tentacleMovement < (float) Math.PI) { float f = this.tentacleMovement / (float) Math.PI; this.tentacleAngle = Mth.sin(f * f * (float) Math.PI) * (float) Math.PI * 0.25F; -@@ -358,7 +368,7 @@ public class Squid extends WaterAnimal { +@@ -374,7 +384,7 @@ public class Squid extends AgeableWaterCreature { int i = this.squid.getNoActionTime(); if (i > 100) { - this.squid.setMovementVector(0.0F, 0.0F, 0.0F); + this.squid.movementVector = Vec3.ZERO; - } else if (this.squid.getRandom().nextInt(reducedTickDelay(50)) == 0 || !this.squid.wasTouchingWater || !this.squid.hasMovementVector()) { + } else if (this.squid.getRandom().nextInt(reducedTickDelay(50)) == 0 || !this.squid.isInWater() || !this.squid.hasMovementVector()) { // Purpur float f = this.squid.getRandom().nextFloat() * (float) (Math.PI * 2); - float g = Mth.cos(f) * 0.2F; - float h = -0.1F + this.squid.getRandom().nextFloat() * 0.2F; + this.squid.movementVector = new Vec3( + (double)(Mth.cos(f) * 0.2F), (double)(-0.1F + this.squid.getRandom().nextFloat() * 0.2F), (double)(Mth.sin(f) * 0.2F) diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ad6a39364a835d698fc008fca433930b6f47800f..18faf8ef7c09b72849502a9e3b880d62bcc50a3f 100644 +index a0a5059e5d86ff3626b7e4a6d378f9b34d6ba8dc..166a7513ee9c309cc4dd16367fcb86b2ab3b243e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -933,11 +933,13 @@ public class PurpurWorldConfig { +@@ -931,11 +931,13 @@ public class PurpurWorldConfig { public boolean glowSquidControllable = true; public double glowSquidMaxHealth = 10.0D; public double glowSquidScale = 1.0D; @@ -75,7 +75,7 @@ index ad6a39364a835d698fc008fca433930b6f47800f..18faf8ef7c09b72849502a9e3b880d62 } public boolean goatRidable = false; -@@ -1624,6 +1626,7 @@ public class PurpurWorldConfig { +@@ -1622,6 +1624,7 @@ public class PurpurWorldConfig { public double squidScale = 1.0D; public boolean squidImmuneToEAR = true; public double squidOffsetWaterCheck = 0.0D; @@ -83,7 +83,7 @@ index ad6a39364a835d698fc008fca433930b6f47800f..18faf8ef7c09b72849502a9e3b880d62 private void squidSettings() { squidRidable = getBoolean("mobs.squid.ridable", squidRidable); squidControllable = getBoolean("mobs.squid.controllable", squidControllable); -@@ -1636,6 +1639,7 @@ public class PurpurWorldConfig { +@@ -1634,6 +1637,7 @@ public class PurpurWorldConfig { squidScale = Mth.clamp(getDouble("mobs.squid.attributes.scale", squidScale), 0.0625D, 16.0D); squidImmuneToEAR = getBoolean("mobs.squid.immune-to-EAR", squidImmuneToEAR); squidOffsetWaterCheck = getDouble("mobs.squid.water-offset-check", squidOffsetWaterCheck); diff --git a/patches/unapplied-server/0093-Infinity-bow-settings.patch b/patches/server/0089-Infinity-bow-settings.patch similarity index 71% rename from patches/unapplied-server/0093-Infinity-bow-settings.patch rename to patches/server/0089-Infinity-bow-settings.patch index a6d143c82..92b2f7fc2 100644 --- a/patches/unapplied-server/0093-Infinity-bow-settings.patch +++ b/patches/server/0089-Infinity-bow-settings.patch @@ -5,35 +5,35 @@ Subject: [PATCH] Infinity bow settings diff --git a/src/main/java/net/minecraft/world/item/BowItem.java b/src/main/java/net/minecraft/world/item/BowItem.java -index 6eb5c0f23d9dc61e69ad5ad493c89602a9dcd4b5..4db2032178471860baddc6b669c9a4f8cffd084b 100644 +index bb593209c95c9cf1f9c5d52d52fab4a33ddbabcf..1d4d0799a86b9940b5e3b614c5a188ade5133f7e 100644 --- a/src/main/java/net/minecraft/world/item/BowItem.java +++ b/src/main/java/net/minecraft/world/item/BowItem.java -@@ -26,6 +26,11 @@ public class BowItem extends ProjectileWeaponItem { - public void releaseUsing(ItemStack stack, Level world, LivingEntity user, int remainingUseTicks) { - if (user instanceof Player player) { +@@ -28,6 +28,11 @@ public class BowItem extends ProjectileWeaponItem { + return false; + } else { ItemStack itemStack = player.getProjectile(stack); + // Purpur start + if (world.purpurConfig.infinityWorksWithoutArrows && itemStack.isEmpty() && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.INFINITY, stack) > 0) { + itemStack = new ItemStack(Items.ARROW); + } + // Purpur end - if (!itemStack.isEmpty()) { - int i = this.getUseDuration(stack, user) - remainingUseTicks; - float f = getPowerForTime(i); -@@ -82,7 +87,7 @@ public class BowItem extends ProjectileWeaponItem { - public InteractionResultHolder use(Level world, Player user, InteractionHand hand) { + if (itemStack.isEmpty()) { + return false; + } else { +@@ -89,7 +94,7 @@ public class BowItem extends ProjectileWeaponItem { + public InteractionResult use(Level world, Player user, InteractionHand hand) { ItemStack itemStack = user.getItemInHand(hand); boolean bl = !user.getProjectile(itemStack).isEmpty(); - if (!user.hasInfiniteMaterials() && !bl) { + if (!user.hasInfiniteMaterials() && !bl && !(world.purpurConfig.infinityWorksWithoutArrows && net.minecraft.world.item.enchantment.EnchantmentHelper.getItemEnchantmentLevel(net.minecraft.world.item.enchantment.Enchantments.INFINITY, itemStack) > 0)) { // Purpur - return InteractionResultHolder.fail(itemStack); + return InteractionResult.FAIL; } else { user.startUsingItem(hand); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 18faf8ef7c09b72849502a9e3b880d62bcc50a3f..0abf6598e8bf4ac59ea4387ee07d4de68032076b 100644 +index 166a7513ee9c309cc4dd16367fcb86b2ab3b243e..9031028533afbc896be2b1402b073c1bdd06dcfe 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -135,6 +135,11 @@ public class PurpurWorldConfig { +@@ -133,6 +133,11 @@ public class PurpurWorldConfig { entityLifeSpan = getInt("gameplay-mechanics.entity-lifespan", entityLifeSpan); } diff --git a/patches/unapplied-server/0094-Configurable-daylight-cycle.patch b/patches/server/0090-Configurable-daylight-cycle.patch similarity index 65% rename from patches/unapplied-server/0094-Configurable-daylight-cycle.patch rename to patches/server/0090-Configurable-daylight-cycle.patch index ea41a44d9..357cc9cba 100644 --- a/patches/unapplied-server/0094-Configurable-daylight-cycle.patch +++ b/patches/server/0090-Configurable-daylight-cycle.patch @@ -4,24 +4,11 @@ Date: Sat, 10 Oct 2020 14:29:55 -0500 Subject: [PATCH] Configurable daylight cycle -diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetTimePacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetTimePacket.java -index 76ef195a5074006b009acd9cc1744667c6aecbb9..659577549e132754281df76a7a1bfd884443c56a 100644 ---- a/src/main/java/net/minecraft/network/protocol/game/ClientboundSetTimePacket.java -+++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundSetTimePacket.java -@@ -10,7 +10,7 @@ public class ClientboundSetTimePacket implements Packet recipe, NonNullList slots, int count) { + private static boolean canBurn(RegistryAccess dynamicRegistryManager, @Nullable RecipeHolder recipe, SingleRecipeInput input, NonNullList inventory, int maxCount) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ac473b14269e124bbb60d063ee869103800e7cbc..c0a4aa371c870756333465659b747144a3bae5f4 100644 +index 50cc76689e64b27172e1806e564c8fae43378234..8c2a26c150bf43f4e344c4bdf49b90926cd044b0 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -365,6 +365,17 @@ public class PurpurWorldConfig { +@@ -363,6 +363,17 @@ public class PurpurWorldConfig { farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); } diff --git a/patches/unapplied-server/0096-Arrows-should-not-reset-despawn-counter.patch b/patches/server/0092-Arrows-should-not-reset-despawn-counter.patch similarity index 86% rename from patches/unapplied-server/0096-Arrows-should-not-reset-despawn-counter.patch rename to patches/server/0092-Arrows-should-not-reset-despawn-counter.patch index 29b24d9ac..325581d94 100644 --- a/patches/unapplied-server/0096-Arrows-should-not-reset-despawn-counter.patch +++ b/patches/server/0092-Arrows-should-not-reset-despawn-counter.patch @@ -7,10 +7,10 @@ This prevents keeping arrows alive indefinitely (such as when the block the arrow is stuck in gets removed, like a piston head going up/down) diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -index 9ca29b3d4bf8bca5f51f3644e12fcbec2cb5d35e..2ace900721f4aa185b8ed28ac95feb50cb89453f 100644 +index accc246f441c8bf5e1a755cfc0db8f97c0c01c6b..75d65b795a7802c0c5b5bd4a6ed429209f987452 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -@@ -356,7 +356,7 @@ public abstract class AbstractArrow extends Projectile { +@@ -371,7 +371,7 @@ public abstract class AbstractArrow extends Projectile { Vec3 vec3d = this.getDeltaMovement(); this.setDeltaMovement(vec3d.multiply((double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F))); @@ -18,9 +18,9 @@ index 9ca29b3d4bf8bca5f51f3644e12fcbec2cb5d35e..2ace900721f4aa185b8ed28ac95feb50 + if (this.level().purpurConfig.arrowMovementResetsDespawnCounter) this.life = 0; // Purpur - do not reset despawn counter } - @Override + public boolean isInGround() { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index c0a4aa371c870756333465659b747144a3bae5f4..ac680a0b331d7a4a72c3f973a3a7440202651631 100644 +index 8c2a26c150bf43f4e344c4bdf49b90926cd044b0..1b005150d1ab5e561d2e30c895432c2c50fb061c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -102,6 +102,11 @@ public class PurpurWorldConfig { diff --git a/patches/unapplied-server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch b/patches/server/0093-Ability-to-re-add-farmland-mechanics-from-Alpha.patch similarity index 74% rename from patches/unapplied-server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch rename to patches/server/0093-Ability-to-re-add-farmland-mechanics-from-Alpha.patch index f63a83fdb..895124a48 100644 --- a/patches/unapplied-server/0097-Ability-to-re-add-farmland-mechanics-from-Alpha.patch +++ b/patches/server/0093-Ability-to-re-add-farmland-mechanics-from-Alpha.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Ability to re-add farmland mechanics from Alpha diff --git a/src/main/java/net/minecraft/world/level/block/FarmBlock.java b/src/main/java/net/minecraft/world/level/block/FarmBlock.java -index da85fabd75e9bd5ebece7127ef5b512df16fe3ac..dc356bd0931af9bdab9ec71e3de66e88a67375ad 100644 +index df89b18f0d5d2dad5745ec65bcd9e4a7bf2f1f2b..e744a117d2f25ad24c87263ba2ab7f760b6e594d 100644 --- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java +++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java -@@ -125,6 +125,14 @@ public class FarmBlock extends Block { - return; - } +@@ -126,6 +126,14 @@ public class FarmBlock extends Block { + return; + } + // Purpur start + if (world.purpurConfig.farmlandAlpha) { @@ -20,14 +20,14 @@ index da85fabd75e9bd5ebece7127ef5b512df16fe3ac..dc356bd0931af9bdab9ec71e3de66e88 + } + } + // Purpur end - if (!CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.DIRT.defaultBlockState())) { - return; - } + if (!CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.DIRT.defaultBlockState())) { + return; + } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ac680a0b331d7a4a72c3f973a3a7440202651631..1865aff6f5601fc24a86a41c84bebc282ff9b111 100644 +index 1b005150d1ab5e561d2e30c895432c2c50fb061c..0e05ebe9ee52033d86373bd2ad1c6f12503b3128 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -366,8 +366,10 @@ public class PurpurWorldConfig { +@@ -364,8 +364,10 @@ public class PurpurWorldConfig { } public boolean farmlandGetsMoistFromBelow = false; diff --git a/patches/unapplied-server/0098-Add-adjustable-breeding-cooldown-to-config.patch b/patches/server/0094-Add-adjustable-breeding-cooldown-to-config.patch similarity index 88% rename from patches/unapplied-server/0098-Add-adjustable-breeding-cooldown-to-config.patch rename to patches/server/0094-Add-adjustable-breeding-cooldown-to-config.patch index 8a961f2e6..f0ab42c32 100644 --- a/patches/unapplied-server/0098-Add-adjustable-breeding-cooldown-to-config.patch +++ b/patches/server/0094-Add-adjustable-breeding-cooldown-to-config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add adjustable breeding cooldown to config diff --git a/src/main/java/net/minecraft/world/entity/animal/Animal.java b/src/main/java/net/minecraft/world/entity/animal/Animal.java -index 1808e1b01afa3041a54c9c9a7586d4d61960527a..5b523f3fa323378a8f96f58a9e252d2ec0d114a7 100644 +index 5677dc97ed83652f261100cf391883cfac7d16fe..4637d062b6a4c4d6de2ef54ec3cfdeb4344ff38e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Animal.java +++ b/src/main/java/net/minecraft/world/entity/animal/Animal.java -@@ -147,7 +147,7 @@ public abstract class Animal extends AgeableMob { +@@ -157,7 +157,7 @@ public abstract class Animal extends AgeableMob { if (this.isFood(itemstack)) { int i = this.getAge(); @@ -17,7 +17,7 @@ index 1808e1b01afa3041a54c9c9a7586d4d61960527a..5b523f3fa323378a8f96f58a9e252d2e final ItemStack breedCopy = itemstack.copy(); // Paper - Fix EntityBreedEvent copying this.usePlayerItem(player, hand, itemstack); this.setInLove(player, breedCopy); // Paper - Fix EntityBreedEvent copying -@@ -235,12 +235,20 @@ public abstract class Animal extends AgeableMob { +@@ -261,12 +261,20 @@ public abstract class Animal extends AgeableMob { AgeableMob entityageable = this.getBreedOffspring(world, other); if (entityageable != null) { @@ -42,11 +42,11 @@ index 1808e1b01afa3041a54c9c9a7586d4d61960527a..5b523f3fa323378a8f96f58a9e252d2e EntityBreedEvent entityBreedEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityBreedEvent(entityageable, this, other, breeder, this.breedItem, experience); if (entityBreedEvent.isCancelled()) { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index df881431c8f32e2c12224b44084ca4d71edf9ab3..7bc1d9ed3a3e3679caff8da0a38a3de93fc9ebac 100644 +index 82025f6dd73366a259418c2039638a6dcc6d4fc1..85ae5c9c873dab19f897fe50b70c62e3c094bd42 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -182,6 +182,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl - public final Map explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions +@@ -183,6 +183,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl + public final Map explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Faster redstone torch rapid clock removal; Move from Map in BlockRedstoneTorch to here + // Purpur start @@ -95,7 +95,7 @@ index df881431c8f32e2c12224b44084ca4d71edf9ab3..7bc1d9ed3a3e3679caff8da0a38a3de9 public CraftWorld getWorld() { return this.world; } -@@ -689,6 +732,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl +@@ -845,6 +888,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur @@ -104,20 +104,20 @@ index df881431c8f32e2c12224b44084ca4d71edf9ab3..7bc1d9ed3a3e3679caff8da0a38a3de9 this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1865aff6f5601fc24a86a41c84bebc282ff9b111..1f2af3b001ce000cd504a9a5dafb74f65b3b468e 100644 +index 0e05ebe9ee52033d86373bd2ad1c6f12503b3128..c02b8212cb56912e0eb244f47aa094c7879be89b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -114,6 +114,7 @@ public class PurpurWorldConfig { - public boolean milkCuresBadOmen = true; +@@ -113,6 +113,7 @@ public class PurpurWorldConfig { public double tridentLoyaltyVoidReturnHeight = 0.0D; + public boolean entitiesCanUsePortals = true; public int raidCooldownSeconds = 0; + public int animalBreedingCooldownSeconds = 0; private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); -@@ -122,6 +123,7 @@ public class PurpurWorldConfig { - milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); +@@ -120,6 +121,7 @@ public class PurpurWorldConfig { tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); + entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals); raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); + animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds); } diff --git a/patches/unapplied-server/0099-Make-entity-breeding-times-configurable.patch b/patches/server/0095-Make-entity-breeding-times-configurable.patch similarity index 84% rename from patches/unapplied-server/0099-Make-entity-breeding-times-configurable.patch rename to patches/server/0095-Make-entity-breeding-times-configurable.patch index dd4798192..f9e777ed3 100644 --- a/patches/unapplied-server/0099-Make-entity-breeding-times-configurable.patch +++ b/patches/server/0095-Make-entity-breeding-times-configurable.patch @@ -22,10 +22,10 @@ index 0a608418f87b71d5d71706712e1f82da0d7e4d34..03e7ca83e4c28dfaa5b52bcb100bd542 // CraftBukkit end world.broadcastEntityEvent(entityvillager2, (byte) 12); diff --git a/src/main/java/net/minecraft/world/entity/animal/Animal.java b/src/main/java/net/minecraft/world/entity/animal/Animal.java -index 5b523f3fa323378a8f96f58a9e252d2ec0d114a7..91c1093ecef7c8917b69674ffc936b4ae71871e2 100644 +index 4637d062b6a4c4d6de2ef54ec3cfdeb4344ff38e..9987d28ea145f6d0126cb4ea22001e0922fb51bd 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Animal.java +++ b/src/main/java/net/minecraft/world/entity/animal/Animal.java -@@ -43,6 +43,7 @@ public abstract class Animal extends AgeableMob { +@@ -49,6 +49,7 @@ public abstract class Animal extends AgeableMob { @Nullable public UUID loveCause; public ItemStack breedItem; // CraftBukkit - Add breedItem variable @@ -33,7 +33,7 @@ index 5b523f3fa323378a8f96f58a9e252d2ec0d114a7..91c1093ecef7c8917b69674ffc936b4a protected Animal(EntityType type, Level world) { super(type, world); -@@ -276,8 +277,10 @@ public abstract class Animal extends AgeableMob { +@@ -302,8 +303,10 @@ public abstract class Animal extends AgeableMob { entityplayer.awardStat(Stats.ANIMALS_BRED); CriteriaTriggers.BRED_ANIMALS.trigger(entityplayer, this, entityanimal, entityageable); } // Paper @@ -47,10 +47,10 @@ index 5b523f3fa323378a8f96f58a9e252d2ec0d114a7..91c1093ecef7c8917b69674ffc936b4a entityanimal.resetLove(); worldserver.broadcastEntityEvent(this, (byte) 18); 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 536407b0cb28bd202f5235d1c3ba46e12899e11c..4b57756e938db00f5c6eba915c096110d68751eb 100644 +index d000acd339a1967d2c448ed8d66c4f1347f797fd..51b736979e43cd0e60a8ecaf2cf95511b9f4d858 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -484,6 +484,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -491,6 +491,11 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.beeScale); } @@ -63,10 +63,10 @@ index 536407b0cb28bd202f5235d1c3ba46e12899e11c..4b57756e938db00f5c6eba915c096110 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 89ad4ac9d20d1e07e4243b0e01a33eab0ec726a8..c8266b1a6b609ef92bd83dcb0e86e3cf47ccce6d 100644 +index 6c773af722ccb9e144d8858a013c120ecbbcfa4c..f79146925e99da08492e7b445006be003a56f340 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -134,6 +134,11 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -188,6 +188,11 @@ public class Fox extends Animal implements VariantHolder { this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.foxScale); } @@ -126,7 +126,7 @@ index 98e9ad371381350dc3bff7e2a88224a2812d6419..252df18c369d5e556632ed5a287dab04 @Override protected void defineSynchedData(SynchedEntityData.Builder builder) { super.defineSynchedData(builder); -@@ -991,8 +996,10 @@ public class Fox extends Animal implements VariantHolder { +@@ -976,8 +981,10 @@ public class Fox extends Animal implements VariantHolder { CriteriaTriggers.BRED_ANIMALS.trigger(entityplayer2, this.animal, this.partner, entityfox); } @@ -140,10 +140,10 @@ index 98e9ad371381350dc3bff7e2a88224a2812d6419..252df18c369d5e556632ed5a287dab04 this.partner.resetLove(); worldserver.addFreshEntityWithPassengers(entityfox, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index 41b52f128fbc174939a7f2d1cd937ab19432de25..22a2328fe5159c8fed635a62334a3f1028c346a5 100644 +index 2382b82d3d4c09e50e62dd353b4a1149ec9169b4..f3873e0ad6ca1f547450e44bba917241bbc80c20 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -86,6 +86,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { +@@ -145,6 +145,11 @@ public class Rabbit extends Animal implements VariantHolder { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.rabbitMaxHealth); this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.rabbitScale); } @@ -252,10 +252,10 @@ index e06445c84aa632429c1647cabab73751f73d2e6c..7e509458134340bd05d15f5f51b6d1fc @Override 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 a14db0ec9ebcde24d5b7340a08002eddc8ebd421..fb429dce94bfad6aba3c63a4694e7c8da772ee14 100644 +index bc975266fbf0348723dc04e29fd6bf8231b9cb87..a20fec03c2ee5019450825be119a017cfe0e4722 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -138,6 +138,11 @@ public class Sheep extends Animal implements Shearable { +@@ -114,6 +114,11 @@ public class Sheep extends Animal implements Shearable { this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.sheepScale); } @@ -268,10 +268,10 @@ index a14db0ec9ebcde24d5b7340a08002eddc8ebd421..fb429dce94bfad6aba3c63a4694e7c8d protected void registerGoals() { this.eatBlockGoal = new EatBlockGoal(this); 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 41d47141bfd77b17cbf163bffdfeb002135035ca..8f02a1b39db0581efb8ccd2c889f048bfd7b3e04 100644 +index 500676a78aedc525aca989ccd0380cd2cc1a711b..6b2e27e2f8aeccfc4d84c73be0fa5a04f5a962e2 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -110,6 +110,11 @@ public class Turtle extends Animal { +@@ -109,6 +109,11 @@ public class Turtle extends Animal { this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.turtleScale); } @@ -284,10 +284,10 @@ index 41d47141bfd77b17cbf163bffdfeb002135035ca..8f02a1b39db0581efb8ccd2c889f048b 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 2985a7bcd4153798c347efa086120ed841770774..0647cee2d6a7c847ab923f819a092c9004eabc6c 100644 +index d082ca3ed17e8bbb27c1a971259720d43246b47f..bbdc5eb28c2be570866070d2d055a97721f46d94 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -155,6 +155,11 @@ public class Wolf extends TamableAnimal implements NeutralMob, VariantHolder, B + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.axolotlMaxHealth); this.getAttribute(Attributes.SCALE).setBaseValue(this.level().purpurConfig.axolotlScale); } - ++ + @Override + public int getPurpurBreedTime() { + return this.level().purpurConfig.axolotlBreedingTicks; + } -+ + // Purpur end + @Override - public Map getModelRotationValues() { - return this.modelRotationValues; diff --git a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java -index f71560b8183672640f00e00479e89237ac96558d..c567b946e013852acfae7f5a417a292706e218f4 100644 +index 9b9e7c9048f453d01ccf13ffdc7ee0f2151155a9..dbce71f45c008da883b6d244a06343d83ae25e7e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java +++ b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java -@@ -92,6 +92,10 @@ public class Camel extends AbstractHorse implements PlayerRideableJumping, Saddl +@@ -92,6 +92,10 @@ public class Camel extends AbstractHorse { public boolean dismountsUnderwater() { return level().purpurConfig.useDismountsUnderwaterTag ? super.dismountsUnderwater() : !level().purpurConfig.camelRidableInWater; } @@ -347,10 +347,10 @@ index f71560b8183672640f00e00479e89237ac96558d..c567b946e013852acfae7f5a417a2927 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java -index d3983b69bacd30b548b110feb1946cc55b83efb9..66dea405cd08c6b4ca3b5fe39fb83552bdd863b4 100644 +index e03598f985191350ce796dabd7641b8d0f6c081c..49915ec0ee5fb6e7d25b079e0410942d44aa1e33 100644 --- a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java +++ b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java -@@ -162,6 +162,10 @@ public class Frog extends Animal implements VariantHolder> { +@@ -165,6 +165,10 @@ public class Frog extends Animal implements VariantHolder> { } // Purpur end @@ -362,10 +362,10 @@ index d3983b69bacd30b548b110feb1946cc55b83efb9..66dea405cd08c6b4ca3b5fe39fb83552 protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java -index ca68973e851ae933015d5dbcbca7b48f872ddd07..2fd6ff9d9dc603020114cc6ab8eb28c9d09e448c 100644 +index ce697bce755f8ef147d189a8729c441aee5bbd21..54e880fb1c03a8b578fd1d2929bc174edb9918c5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java +++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java -@@ -108,6 +108,11 @@ public class Goat extends Animal { +@@ -110,6 +110,11 @@ public class Goat extends Animal { } // Purpur end @@ -378,10 +378,10 @@ index ca68973e851ae933015d5dbcbca7b48f872ddd07..2fd6ff9d9dc603020114cc6ab8eb28c9 protected Brain.Provider brainProvider() { return Brain.provider(Goat.MEMORY_TYPES, Goat.SENSOR_TYPES); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java b/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java -index b47a72ffb8b947cea5d4bc6ee37b824c4161be31..2990d50fd5209b272e0cfbd5dd633124048e8129 100644 +index 7362597d2ca9ea5375118d280e17b6c2719352a7..ba0b6c0154d72dd13acf9e1c0966e394d59943c7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Donkey.java -@@ -37,6 +37,11 @@ public class Donkey extends AbstractChestedHorse { +@@ -38,6 +38,11 @@ public class Donkey extends AbstractChestedHorse { return generateSpeed(this.level().purpurConfig.donkeyMovementSpeedMin, this.level().purpurConfig.donkeyMovementSpeedMax); } @@ -394,10 +394,10 @@ index b47a72ffb8b947cea5d4bc6ee37b824c4161be31..2990d50fd5209b272e0cfbd5dd633124 protected SoundEvent getAmbientSound() { return SoundEvents.DONKEY_AMBIENT; diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java -index 273365b9bca6e26760f45a794c1ebef1f9118c43..c4b22c52e335080e744a723622f455c0d8cf73e2 100644 +index b0392780b35866bf1903f49cb16c4ab79335882d..b9a406cd4e317c663a12d897b8cf1f4f6eeca662 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Horse.java -@@ -67,6 +67,11 @@ public class Horse extends AbstractHorse implements VariantHolder { +@@ -65,6 +65,11 @@ public class Horse extends AbstractHorse implements VariantHolder { return generateSpeed(this.level().purpurConfig.horseMovementSpeedMin, this.level().purpurConfig.horseMovementSpeedMax); } @@ -410,10 +410,10 @@ index 273365b9bca6e26760f45a794c1ebef1f9118c43..c4b22c52e335080e744a723622f455c0 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 09c400ce06003139de84e22313354ed6199da761..b8a6ebd8301c4873060505c866dabb4e8772d5b5 100644 +index 7ff446ea2163d3b3b9f7fd826939dda21e07c99f..1a992d4c867ebe65b56be724fb54b9bc389cd8ec 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 -@@ -141,6 +141,11 @@ public class Llama extends AbstractChestedHorse implements VariantHolder type, LevelAccessor world, MobSpawnType spawnReason, BlockPos pos, RandomSource random) { + public static boolean checkStriderSpawnRules(EntityType type, LevelAccessor world, EntitySpawnReason spawnReason, BlockPos pos, RandomSource random) { BlockPos.MutableBlockPos blockposition_mutableblockposition = pos.mutable(); 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 cd6428d0d61f68eafa8829fc21084586447cd61e..eb4a2e57ee9bddacef184e81167f8ee32c63c63f 100644 +index 08c4a32b1195820eb574cdf4a499107565a551d6..0220fb517d99e8c9629d191eb554799a1dc8d7bc 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 -@@ -113,6 +113,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -120,6 +120,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { + this.timeInOverworld = timeInOverworld; } - // Purpur end + @Override + public int getPurpurBreedTime() { @@ -538,10 +538,10 @@ index cd6428d0d61f68eafa8829fc21084586447cd61e..eb4a2e57ee9bddacef184e81167f8ee3 public boolean canBeLeashed() { return true; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe8003676a997c88 100644 +index c02b8212cb56912e0eb244f47aa094c7879be89b..c78b2c5098dc67a3aadf9f6d4ea5289b7d5124ea 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -463,23 +463,27 @@ public class PurpurWorldConfig { +@@ -461,23 +461,27 @@ public class PurpurWorldConfig { public boolean armadilloControllable = true; public double armadilloMaxHealth = 12.0D; public double armadilloScale = 1.0D; @@ -569,7 +569,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean batRidable = false; -@@ -522,6 +526,7 @@ public class PurpurWorldConfig { +@@ -520,6 +524,7 @@ public class PurpurWorldConfig { public double beeMaxY = 320D; public double beeMaxHealth = 10.0D; public double beeScale = 1.0D; @@ -577,7 +577,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void beeSettings() { beeRidable = getBoolean("mobs.bee.ridable", beeRidable); beeRidableInWater = getBoolean("mobs.bee.ridable-in-water", beeRidableInWater); -@@ -534,6 +539,7 @@ public class PurpurWorldConfig { +@@ -532,6 +537,7 @@ public class PurpurWorldConfig { } beeMaxHealth = getDouble("mobs.bee.attributes.max_health", beeMaxHealth); beeScale = Mth.clamp(getDouble("mobs.bee.attributes.scale", beeScale), 0.0625D, 16.0D); @@ -585,7 +585,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean blazeRidable = false; -@@ -576,6 +582,7 @@ public class PurpurWorldConfig { +@@ -574,6 +580,7 @@ public class PurpurWorldConfig { public double camelJumpStrengthMax = 0.42D; public double camelMovementSpeedMin = 0.09D; public double camelMovementSpeedMax = 0.09D; @@ -593,7 +593,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void camelSettings() { camelRidableInWater = getBoolean("mobs.camel.ridable-in-water", camelRidableInWater); camelMaxHealthMin = getDouble("mobs.camel.attributes.max_health.min", camelMaxHealthMin); -@@ -584,6 +591,7 @@ public class PurpurWorldConfig { +@@ -582,6 +589,7 @@ public class PurpurWorldConfig { camelJumpStrengthMax = getDouble("mobs.camel.attributes.jump_strength.max", camelJumpStrengthMax); camelMovementSpeedMin = getDouble("mobs.camel.attributes.movement_speed.min", camelMovementSpeedMin); camelMovementSpeedMax = getDouble("mobs.camel.attributes.movement_speed.max", camelMovementSpeedMax); @@ -601,7 +601,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean catRidable = false; -@@ -594,6 +602,7 @@ public class PurpurWorldConfig { +@@ -592,6 +600,7 @@ public class PurpurWorldConfig { public int catSpawnDelay = 1200; public int catSpawnSwampHutScanRange = 16; public int catSpawnVillageScanRange = 48; @@ -609,7 +609,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -608,6 +617,7 @@ public class PurpurWorldConfig { +@@ -606,6 +615,7 @@ public class PurpurWorldConfig { catSpawnDelay = getInt("mobs.cat.spawn-delay", catSpawnDelay); catSpawnSwampHutScanRange = getInt("mobs.cat.scan-range-for-other-cats.swamp-hut", catSpawnSwampHutScanRange); catSpawnVillageScanRange = getInt("mobs.cat.scan-range-for-other-cats.village", catSpawnVillageScanRange); @@ -617,7 +617,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean caveSpiderRidable = false; -@@ -634,6 +644,7 @@ public class PurpurWorldConfig { +@@ -632,6 +642,7 @@ public class PurpurWorldConfig { public double chickenMaxHealth = 4.0D; public double chickenScale = 1.0D; public boolean chickenRetaliate = false; @@ -625,7 +625,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -646,6 +657,7 @@ public class PurpurWorldConfig { +@@ -644,6 +655,7 @@ public class PurpurWorldConfig { chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); chickenScale = Mth.clamp(getDouble("mobs.chicken.attributes.scale", chickenScale), 0.0625D, 16.0D); chickenRetaliate = getBoolean("mobs.chicken.retaliate", chickenRetaliate); @@ -633,7 +633,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean codRidable = false; -@@ -670,6 +682,7 @@ public class PurpurWorldConfig { +@@ -668,6 +680,7 @@ public class PurpurWorldConfig { public double cowMaxHealth = 10.0D; public double cowScale = 1.0D; public int cowFeedMushrooms = 0; @@ -641,7 +641,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void cowSettings() { cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); -@@ -682,6 +695,7 @@ public class PurpurWorldConfig { +@@ -680,6 +693,7 @@ public class PurpurWorldConfig { cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); cowScale = Mth.clamp(getDouble("mobs.cow.attributes.scale", cowScale), 0.0625D, 16.0D); cowFeedMushrooms = getInt("mobs.cow.feed-mushrooms-for-mooshroom", cowFeedMushrooms); @@ -649,7 +649,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean creeperRidable = false; -@@ -737,6 +751,7 @@ public class PurpurWorldConfig { +@@ -735,6 +749,7 @@ public class PurpurWorldConfig { public double donkeyJumpStrengthMax = 0.5D; public double donkeyMovementSpeedMin = 0.175D; public double donkeyMovementSpeedMax = 0.175D; @@ -657,7 +657,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void donkeySettings() { donkeyRidableInWater = getBoolean("mobs.donkey.ridable-in-water", donkeyRidableInWater); if (PurpurConfig.version < 10) { -@@ -752,6 +767,7 @@ public class PurpurWorldConfig { +@@ -750,6 +765,7 @@ public class PurpurWorldConfig { donkeyJumpStrengthMax = getDouble("mobs.donkey.attributes.jump_strength.max", donkeyJumpStrengthMax); donkeyMovementSpeedMin = getDouble("mobs.donkey.attributes.movement_speed.min", donkeyMovementSpeedMin); donkeyMovementSpeedMax = getDouble("mobs.donkey.attributes.movement_speed.max", donkeyMovementSpeedMax); @@ -665,7 +665,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean drownedRidable = false; -@@ -882,6 +898,7 @@ public class PurpurWorldConfig { +@@ -880,6 +896,7 @@ public class PurpurWorldConfig { public double foxMaxHealth = 10.0D; public double foxScale = 1.0D; public boolean foxTypeChangesWithTulips = false; @@ -673,7 +673,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -894,17 +911,20 @@ public class PurpurWorldConfig { +@@ -892,17 +909,20 @@ public class PurpurWorldConfig { foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth); foxScale = Mth.clamp(getDouble("mobs.fox.attributes.scale", foxScale), 0.0625D, 16.0D); foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); @@ -694,7 +694,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean ghastRidable = false; -@@ -979,12 +999,14 @@ public class PurpurWorldConfig { +@@ -977,12 +997,14 @@ public class PurpurWorldConfig { public boolean goatControllable = true; public double goatMaxHealth = 10.0D; public double goatScale = 1.0D; @@ -709,7 +709,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean guardianRidable = false; -@@ -1008,6 +1030,7 @@ public class PurpurWorldConfig { +@@ -1006,6 +1028,7 @@ public class PurpurWorldConfig { public boolean hoglinControllable = true; public double hoglinMaxHealth = 40.0D; public double hoglinScale = 1.0D; @@ -717,7 +717,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void hoglinSettings() { hoglinRidable = getBoolean("mobs.hoglin.ridable", hoglinRidable); hoglinRidableInWater = getBoolean("mobs.hoglin.ridable-in-water", hoglinRidableInWater); -@@ -1019,6 +1042,7 @@ public class PurpurWorldConfig { +@@ -1017,6 +1040,7 @@ public class PurpurWorldConfig { } hoglinMaxHealth = getDouble("mobs.hoglin.attributes.max_health", hoglinMaxHealth); hoglinScale = Mth.clamp(getDouble("mobs.hoglin.attributes.scale", hoglinScale), 0.0625D, 16.0D); @@ -725,7 +725,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean horseRidableInWater = false; -@@ -1028,6 +1052,7 @@ public class PurpurWorldConfig { +@@ -1026,6 +1050,7 @@ public class PurpurWorldConfig { public double horseJumpStrengthMax = 1.0D; public double horseMovementSpeedMin = 0.1125D; public double horseMovementSpeedMax = 0.3375D; @@ -733,7 +733,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void horseSettings() { horseRidableInWater = getBoolean("mobs.horse.ridable-in-water", horseRidableInWater); if (PurpurConfig.version < 10) { -@@ -1043,6 +1068,7 @@ public class PurpurWorldConfig { +@@ -1041,6 +1066,7 @@ public class PurpurWorldConfig { horseJumpStrengthMax = getDouble("mobs.horse.attributes.jump_strength.max", horseJumpStrengthMax); horseMovementSpeedMin = getDouble("mobs.horse.attributes.movement_speed.min", horseMovementSpeedMin); horseMovementSpeedMax = getDouble("mobs.horse.attributes.movement_speed.max", horseMovementSpeedMax); @@ -741,7 +741,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean huskRidable = false; -@@ -1126,6 +1152,7 @@ public class PurpurWorldConfig { +@@ -1124,6 +1150,7 @@ public class PurpurWorldConfig { public double llamaJumpStrengthMax = 0.5D; public double llamaMovementSpeedMin = 0.175D; public double llamaMovementSpeedMax = 0.175D; @@ -749,7 +749,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); -@@ -1143,6 +1170,7 @@ public class PurpurWorldConfig { +@@ -1141,6 +1168,7 @@ public class PurpurWorldConfig { llamaJumpStrengthMax = getDouble("mobs.llama.attributes.jump_strength.max", llamaJumpStrengthMax); llamaMovementSpeedMin = getDouble("mobs.llama.attributes.movement_speed.min", llamaMovementSpeedMin); llamaMovementSpeedMax = getDouble("mobs.llama.attributes.movement_speed.max", llamaMovementSpeedMax); @@ -757,7 +757,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean magmaCubeRidable = false; -@@ -1172,6 +1200,7 @@ public class PurpurWorldConfig { +@@ -1170,6 +1198,7 @@ public class PurpurWorldConfig { public boolean mooshroomControllable = true; public double mooshroomMaxHealth = 10.0D; public double mooshroomScale = 1.0D; @@ -765,7 +765,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void mooshroomSettings() { mooshroomRidable = getBoolean("mobs.mooshroom.ridable", mooshroomRidable); mooshroomRidableInWater = getBoolean("mobs.mooshroom.ridable-in-water", mooshroomRidableInWater); -@@ -1183,6 +1212,7 @@ public class PurpurWorldConfig { +@@ -1181,6 +1210,7 @@ public class PurpurWorldConfig { } mooshroomMaxHealth = getDouble("mobs.mooshroom.attributes.max_health", mooshroomMaxHealth); mooshroomScale = Mth.clamp(getDouble("mobs.mooshroom.attributes.scale", mooshroomScale), 0.0625D, 16.0D); @@ -773,7 +773,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean muleRidableInWater = false; -@@ -1192,6 +1222,7 @@ public class PurpurWorldConfig { +@@ -1190,6 +1220,7 @@ public class PurpurWorldConfig { public double muleJumpStrengthMax = 0.5D; public double muleMovementSpeedMin = 0.175D; public double muleMovementSpeedMax = 0.175D; @@ -781,7 +781,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void muleSettings() { muleRidableInWater = getBoolean("mobs.mule.ridable-in-water", muleRidableInWater); if (PurpurConfig.version < 10) { -@@ -1207,6 +1238,7 @@ public class PurpurWorldConfig { +@@ -1205,6 +1236,7 @@ public class PurpurWorldConfig { muleJumpStrengthMax = getDouble("mobs.mule.attributes.jump_strength.max", muleJumpStrengthMax); muleMovementSpeedMin = getDouble("mobs.mule.attributes.movement_speed.min", muleMovementSpeedMin); muleMovementSpeedMax = getDouble("mobs.mule.attributes.movement_speed.max", muleMovementSpeedMax); @@ -789,7 +789,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean ocelotRidable = false; -@@ -1214,6 +1246,7 @@ public class PurpurWorldConfig { +@@ -1212,6 +1244,7 @@ public class PurpurWorldConfig { public boolean ocelotControllable = true; public double ocelotMaxHealth = 10.0D; public double ocelotScale = 1.0D; @@ -797,7 +797,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void ocelotSettings() { ocelotRidable = getBoolean("mobs.ocelot.ridable", ocelotRidable); ocelotRidableInWater = getBoolean("mobs.ocelot.ridable-in-water", ocelotRidableInWater); -@@ -1225,6 +1258,7 @@ public class PurpurWorldConfig { +@@ -1223,6 +1256,7 @@ public class PurpurWorldConfig { } ocelotMaxHealth = getDouble("mobs.ocelot.attributes.max_health", ocelotMaxHealth); ocelotScale = Mth.clamp(getDouble("mobs.ocelot.attributes.scale", ocelotScale), 0.0625D, 16.0D); @@ -805,7 +805,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean pandaRidable = false; -@@ -1232,6 +1266,7 @@ public class PurpurWorldConfig { +@@ -1230,6 +1264,7 @@ public class PurpurWorldConfig { public boolean pandaControllable = true; public double pandaMaxHealth = 20.0D; public double pandaScale = 1.0D; @@ -813,7 +813,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void pandaSettings() { pandaRidable = getBoolean("mobs.panda.ridable", pandaRidable); pandaRidableInWater = getBoolean("mobs.panda.ridable-in-water", pandaRidableInWater); -@@ -1243,6 +1278,7 @@ public class PurpurWorldConfig { +@@ -1241,6 +1276,7 @@ public class PurpurWorldConfig { } pandaMaxHealth = getDouble("mobs.panda.attributes.max_health", pandaMaxHealth); pandaScale = Mth.clamp(getDouble("mobs.panda.attributes.scale", pandaScale), 0.0625D, 16.0D); @@ -821,7 +821,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean parrotRidable = false; -@@ -1329,6 +1365,7 @@ public class PurpurWorldConfig { +@@ -1327,6 +1363,7 @@ public class PurpurWorldConfig { public double pigMaxHealth = 10.0D; public double pigScale = 1.0D; public boolean pigGiveSaddleBack = false; @@ -829,7 +829,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void pigSettings() { pigRidable = getBoolean("mobs.pig.ridable", pigRidable); pigRidableInWater = getBoolean("mobs.pig.ridable-in-water", pigRidableInWater); -@@ -1341,6 +1378,7 @@ public class PurpurWorldConfig { +@@ -1339,6 +1376,7 @@ public class PurpurWorldConfig { pigMaxHealth = getDouble("mobs.pig.attributes.max_health", pigMaxHealth); pigScale = Mth.clamp(getDouble("mobs.pig.attributes.scale", pigScale), 0.0625D, 16.0D); pigGiveSaddleBack = getBoolean("mobs.pig.give-saddle-back", pigGiveSaddleBack); @@ -837,7 +837,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean piglinRidable = false; -@@ -1404,6 +1442,7 @@ public class PurpurWorldConfig { +@@ -1402,6 +1440,7 @@ public class PurpurWorldConfig { public double polarBearScale = 1.0D; public String polarBearBreedableItemString = ""; public Item polarBearBreedableItem = null; @@ -845,7 +845,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -1418,6 +1457,7 @@ public class PurpurWorldConfig { +@@ -1416,6 +1455,7 @@ public class PurpurWorldConfig { polarBearBreedableItemString = getString("mobs.polar_bear.breedable-item", polarBearBreedableItemString); Item item = BuiltInRegistries.ITEM.get(ResourceLocation.parse(polarBearBreedableItemString)); if (item != Items.AIR) polarBearBreedableItem = item; @@ -853,7 +853,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean pufferfishRidable = false; -@@ -1443,6 +1483,7 @@ public class PurpurWorldConfig { +@@ -1441,6 +1481,7 @@ public class PurpurWorldConfig { public double rabbitScale = 1.0D; public double rabbitNaturalToast = 0.0D; public double rabbitNaturalKiller = 0.0D; @@ -861,7 +861,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -1456,6 +1497,7 @@ public class PurpurWorldConfig { +@@ -1454,6 +1495,7 @@ public class PurpurWorldConfig { rabbitScale = Mth.clamp(getDouble("mobs.rabbit.attributes.scale", rabbitScale), 0.0625D, 16.0D); rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast); rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); @@ -869,7 +869,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean ravagerRidable = false; -@@ -1497,6 +1539,7 @@ public class PurpurWorldConfig { +@@ -1495,6 +1537,7 @@ public class PurpurWorldConfig { public boolean sheepControllable = true; public double sheepMaxHealth = 8.0D; public double sheepScale = 1.0D; @@ -877,7 +877,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void sheepSettings() { sheepRidable = getBoolean("mobs.sheep.ridable", sheepRidable); sheepRidableInWater = getBoolean("mobs.sheep.ridable-in-water", sheepRidableInWater); -@@ -1508,6 +1551,7 @@ public class PurpurWorldConfig { +@@ -1506,6 +1549,7 @@ public class PurpurWorldConfig { } sheepMaxHealth = getDouble("mobs.sheep.attributes.max_health", sheepMaxHealth); sheepScale = Mth.clamp(getDouble("mobs.sheep.attributes.scale", sheepScale), 0.0625D, 16.0D); @@ -885,7 +885,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean shulkerRidable = false; -@@ -1644,12 +1688,14 @@ public class PurpurWorldConfig { +@@ -1642,12 +1686,14 @@ public class PurpurWorldConfig { public boolean snifferControllable = true; public double snifferMaxHealth = 14.0D; public double snifferScale = 1.0D; @@ -900,7 +900,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean squidRidable = false; -@@ -1715,6 +1761,7 @@ public class PurpurWorldConfig { +@@ -1713,6 +1759,7 @@ public class PurpurWorldConfig { public boolean striderControllable = true; public double striderMaxHealth = 20.0D; public double striderScale = 1.0D; @@ -908,7 +908,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -1726,6 +1773,7 @@ public class PurpurWorldConfig { +@@ -1724,6 +1771,7 @@ public class PurpurWorldConfig { } striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); striderScale = Mth.clamp(getDouble("mobs.strider.attributes.scale", striderScale), 0.0625D, 16.0D); @@ -916,7 +916,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean tadpoleRidable = false; -@@ -1746,6 +1794,7 @@ public class PurpurWorldConfig { +@@ -1744,6 +1792,7 @@ public class PurpurWorldConfig { public double traderLlamaJumpStrengthMax = 0.5D; public double traderLlamaMovementSpeedMin = 0.175D; public double traderLlamaMovementSpeedMax = 0.175D; @@ -924,7 +924,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void traderLlamaSettings() { traderLlamaRidable = getBoolean("mobs.trader_llama.ridable", traderLlamaRidable); traderLlamaRidableInWater = getBoolean("mobs.trader_llama.ridable-in-water", traderLlamaRidableInWater); -@@ -1763,6 +1812,7 @@ public class PurpurWorldConfig { +@@ -1761,6 +1810,7 @@ public class PurpurWorldConfig { traderLlamaJumpStrengthMax = getDouble("mobs.trader_llama.attributes.jump_strength.max", traderLlamaJumpStrengthMax); traderLlamaMovementSpeedMin = getDouble("mobs.trader_llama.attributes.movement_speed.min", traderLlamaMovementSpeedMin); traderLlamaMovementSpeedMax = getDouble("mobs.trader_llama.attributes.movement_speed.max", traderLlamaMovementSpeedMax); @@ -932,7 +932,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean tropicalFishRidable = false; -@@ -1786,6 +1836,7 @@ public class PurpurWorldConfig { +@@ -1784,6 +1834,7 @@ public class PurpurWorldConfig { public boolean turtleControllable = true; public double turtleMaxHealth = 30.0D; public double turtleScale = 1.0D; @@ -940,7 +940,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void turtleSettings() { turtleRidable = getBoolean("mobs.turtle.ridable", turtleRidable); turtleRidableInWater = getBoolean("mobs.turtle.ridable-in-water", turtleRidableInWater); -@@ -1797,6 +1848,7 @@ public class PurpurWorldConfig { +@@ -1795,6 +1846,7 @@ public class PurpurWorldConfig { } turtleMaxHealth = getDouble("mobs.turtle.attributes.max_health", turtleMaxHealth); turtleScale = Mth.clamp(getDouble("mobs.turtle.attributes.scale", turtleScale), 0.0625D, 16.0D); @@ -948,7 +948,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean vexRidable = false; -@@ -1827,6 +1879,7 @@ public class PurpurWorldConfig { +@@ -1825,6 +1877,7 @@ public class PurpurWorldConfig { public boolean villagerFollowEmeraldBlock = false; public boolean villagerCanBeLeashed = false; public boolean villagerCanBreed = true; @@ -956,7 +956,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1841,6 +1894,7 @@ public class PurpurWorldConfig { +@@ -1839,6 +1892,7 @@ public class PurpurWorldConfig { villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); @@ -964,7 +964,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 } public boolean vindicatorRidable = false; -@@ -1963,6 +2017,7 @@ public class PurpurWorldConfig { +@@ -1961,6 +2015,7 @@ public class PurpurWorldConfig { public boolean wolfControllable = true; public double wolfMaxHealth = 8.0D; public double wolfScale = 1.0D; @@ -972,7 +972,7 @@ index 1f2af3b001ce000cd504a9a5dafb74f65b3b468e..eefd829f617f2af60b9846f2fe800367 private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -1974,6 +2029,7 @@ public class PurpurWorldConfig { +@@ -1972,6 +2027,7 @@ public class PurpurWorldConfig { } wolfMaxHealth = getDouble("mobs.wolf.attributes.max_health", wolfMaxHealth); wolfScale = Mth.clamp(getDouble("mobs.wolf.attributes.scale", wolfScale), 0.0625D, 16.0D); diff --git a/patches/unapplied-server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/server/0096-Apply-display-names-from-item-forms-of-entities-to-e.patch similarity index 67% rename from patches/unapplied-server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch rename to patches/server/0096-Apply-display-names-from-item-forms-of-entities-to-e.patch index 2cc350723..d211fd15e 100644 --- a/patches/unapplied-server/0100-Apply-display-names-from-item-forms-of-entities-to-e.patch +++ b/patches/server/0096-Apply-display-names-from-item-forms-of-entities-to-e.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Apply display names from item forms of entities to entities diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -index 8d360dc542099af90f0c11839c12910859f0402b..4d6df7ec1bffbd30d4aac906f393ead0dfd8f69d 100644 +index edb0cd90e28016c44b0aaf5c9ed5d7bdbced5295..12ff824ffa81ea45f76337ec2b6d80b01047b698 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -620,6 +620,7 @@ public class ArmorStand extends LivingEntity { +@@ -618,6 +618,7 @@ public class ArmorStand extends LivingEntity { private org.bukkit.event.entity.EntityDeathEvent brokenByPlayer(ServerLevel world, DamageSource damageSource) { // Paper ItemStack itemstack = new ItemStack(Items.ARMOR_STAND); @@ -18,54 +18,54 @@ index 8d360dc542099af90f0c11839c12910859f0402b..4d6df7ec1bffbd30d4aac906f393ead0 this.drops.add(new DefaultDrop(itemstack, stack -> Block.popResource(this.level(), this.blockPosition(), stack))); // CraftBukkit - add to drops // Paper - Restore vanilla drops behavior return this.brokenByAnything(world, damageSource); // Paper diff --git a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java -index 5b7245cd99593ee90e17c97e0104f3aba9ae05ea..cf78531b193ba56991ccb0c4f62844208e4a5706 100644 +index d6f835320014c07f9d174d05929ed8cc16a10c10..9992a4e791495baae07645444f6374f083c56552 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java -@@ -227,7 +227,13 @@ public class ItemFrame extends HangingEntity { +@@ -240,7 +240,13 @@ public class ItemFrame extends HangingEntity { } - if (alwaysDrop) { -- this.spawnAtLocation(this.getFrameItemStack()); + if (dropSelf) { +- this.spawnAtLocation(world, this.getFrameItemStack()); + // Purpur start + final ItemStack itemFrame = this.getFrameItemStack(); + if (!this.level().purpurConfig.persistentDroppableEntityDisplayNames) { + itemFrame.set(DataComponents.CUSTOM_NAME, null); + } -+ this.spawnAtLocation(itemFrame); ++ this.spawnAtLocation(world, itemFrame); + // Purpur end } if (!itemstack.isEmpty()) { diff --git a/src/main/java/net/minecraft/world/entity/decoration/Painting.java b/src/main/java/net/minecraft/world/entity/decoration/Painting.java -index e86fdf5d6853b7bddfe19d6e5d41d3dec0c25f23..f45567aa7695da68f92809a6c208eb515c2f838a 100644 +index fd0e78a2318e3950d011c17358245e107b38154a..0fcab828e81176323cbdf16c0ec714d9a2846ae5 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/Painting.java +++ b/src/main/java/net/minecraft/world/entity/decoration/Painting.java -@@ -178,7 +178,13 @@ public class Painting extends HangingEntity implements VariantHolder -Date: Thu, 25 Jul 2019 18:07:37 -0500 -Subject: [PATCH] Implement elytra settings - - -diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index f444b36b4fddce06aaafabe3cfef463f173969ce..d8db30c9051aebf2cb6567a273bcfdfbe06d4936 100644 ---- a/src/main/java/net/minecraft/world/entity/LivingEntity.java -+++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3639,7 +3639,16 @@ public abstract class LivingEntity extends Entity implements Attackable { - int j = i / 10; - - if (j % 2 == 0) { -- itemstack.hurtAndBreak(1, this, EquipmentSlot.CHEST); -+ // Purpur start -+ int damage = level().purpurConfig.elytraDamagePerSecond; -+ if (level().purpurConfig.elytraDamageMultiplyBySpeed > 0) { -+ double speed = getDeltaMovement().lengthSqr(); -+ if (speed > level().purpurConfig.elytraDamageMultiplyBySpeed) { -+ damage *= (int) speed; -+ } -+ } -+ itemstack.hurtAndBreak(damage, this, EquipmentSlot.CHEST); -+ // Purpur end - } - - this.gameEvent(GameEvent.ELYTRA_GLIDE); -diff --git a/src/main/java/net/minecraft/world/item/FireworkRocketItem.java b/src/main/java/net/minecraft/world/item/FireworkRocketItem.java -index 218f2f085309f04438f8b07bc41cf242583db2dc..ea8e49b42b9dde74784189430be66ed6978015dd 100644 ---- a/src/main/java/net/minecraft/world/item/FireworkRocketItem.java -+++ b/src/main/java/net/minecraft/world/item/FireworkRocketItem.java -@@ -65,6 +65,14 @@ public class FireworkRocketItem extends Item implements ProjectileItem { - com.destroystokyo.paper.event.player.PlayerElytraBoostEvent event = new com.destroystokyo.paper.event.player.PlayerElytraBoostEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack), (org.bukkit.entity.Firework) fireworkRocketEntity.getBukkitEntity(), org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand)); - if (event.callEvent() && world.addFreshEntity(fireworkRocketEntity)) { - user.awardStat(Stats.ITEM_USED.get(this)); -+ // Purpur start -+ if (world.purpurConfig.elytraDamagePerFireworkBoost > 0) { -+ ItemStack chestItem = user.getItemBySlot(net.minecraft.world.entity.EquipmentSlot.CHEST); -+ if (chestItem.getItem() == Items.ELYTRA) { -+ chestItem.hurtAndBreak(world.purpurConfig.elytraDamagePerFireworkBoost, user, net.minecraft.world.entity.EquipmentSlot.CHEST); -+ } -+ } -+ // Purpur end - if (event.shouldConsume() && !user.hasInfiniteMaterials()) { - itemStack.shrink(1); - } else ((net.minecraft.server.level.ServerPlayer) user).getBukkitEntity().updateInventory(); -diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index c89663b093120d9c43a7f4d24ec8d798b3fa6d5f..5f57f3494705ca1664dbca395c1af3280a50cad8 100644 ---- a/src/main/java/net/minecraft/world/item/ItemStack.java -+++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -728,6 +728,12 @@ public final class ItemStack implements DataComponentHolder { - org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerItemBreakEvent(serverPlayer, this); // Paper - Add EntityDamageItemEvent - } - // CraftBukkit end -+ // Purpur start -+ if (item == Items.ELYTRA) { -+ setDamageValue(this.getMaxDamage() - 1); -+ return; -+ } -+ // Purpur end - - this.shrink(1); - breakCallback.accept(item); -diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java -index f1b2d388a1a40a1d909a2e726f32d6c15e1eb0eb..4934bae61114b49a9f8d0ed044fbb881210df32a 100644 ---- a/src/main/java/net/minecraft/world/item/TridentItem.java -+++ b/src/main/java/net/minecraft/world/item/TridentItem.java -@@ -127,6 +127,14 @@ public class TridentItem extends Item implements ProjectileItem { - f4 *= f / f6; - f5 *= f / f6; - org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerRiptideEvent(entityhuman, stack, f3, f4, f5); // CraftBukkit -+ -+ // Purpur start -+ ItemStack chestItem = entityhuman.getItemBySlot(EquipmentSlot.CHEST); -+ if (chestItem.getItem() == Items.ELYTRA && world.purpurConfig.elytraDamagePerTridentBoost > 0) { -+ chestItem.hurtAndBreak(world.purpurConfig.elytraDamagePerTridentBoost, entityhuman, EquipmentSlot.CHEST); -+ } -+ // Purpur end -+ - entityhuman.push((double) f3, (double) f4, (double) f5); - entityhuman.startAutoSpinAttack(20, 8.0F, stack); - if (entityhuman.onGround()) { -diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 4f1a650b7829464d873dfb782fe7eb94703ac040..ee159581718533688cdd271b8f205b61a5912019 100644 ---- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -109,6 +109,17 @@ public class PurpurWorldConfig { - tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); - } - -+ public int elytraDamagePerSecond = 1; -+ public double elytraDamageMultiplyBySpeed = 0; -+ public int elytraDamagePerFireworkBoost = 0; -+ public int elytraDamagePerTridentBoost = 0; -+ private void elytraSettings() { -+ elytraDamagePerSecond = getInt("gameplay-mechanics.elytra.damage-per-second", elytraDamagePerSecond); -+ elytraDamageMultiplyBySpeed = getDouble("gameplay-mechanics.elytra.damage-multiplied-by-speed", elytraDamageMultiplyBySpeed); -+ elytraDamagePerFireworkBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.firework", elytraDamagePerFireworkBoost); -+ elytraDamagePerTridentBoost = getInt("gameplay-mechanics.elytra.damage-per-boost.trident", elytraDamagePerTridentBoost); -+ } -+ - public double minecartMaxSpeed = 0.4D; - public boolean minecartPlaceAnywhere = false; - public boolean minecartControllable = false;