diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index c25a16f6f2..680537ef9f 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -5,6 +5,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 + - uses: gradle/wrapper-validation-action@v1 - name: Set up JDK uses: actions/setup-java@v2 with: diff --git a/Paper b/Paper index ef60c01c4d..453c7f05c7 160000 --- a/Paper +++ b/Paper @@ -1 +1 @@ -Subproject commit ef60c01c4da777f07b72668a103c95e06730f259 +Subproject commit 453c7f05c7ee48aa2252a1e882fd3422297de26e diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 442d9132ea..e5338d370b 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/patches/api/0001-Tuinity-API-Changes.patch b/patches/api/0001-Tuinity-API-Changes.patch index 06755eb1b9..6eaa6ee77d 100644 --- a/patches/api/0001-Tuinity-API-Changes.patch +++ b/patches/api/0001-Tuinity-API-Changes.patch @@ -248,10 +248,10 @@ index a1496fe00a2d5ba6c1af054d4327f868b2cd7344..6ca9aa2c438810b5537dc196b3fd89b0 // Spigot start diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 2ea531eaef8c455fdd503f0c0258813fe9136085..a84ea92d02d34cd48174152e0391f1af6c6b5def 100644 +index 34b51466ffb281b05f531b3f7deda245ae7fd96a..4a4f041c6acfd335871fa67d6d1c7f723229c8a7 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -1768,23 +1768,63 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1783,23 +1783,63 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * Gets the view distance for this player * * @return the player's view distance diff --git a/patches/api/0008-AFK-API.patch b/patches/api/0008-AFK-API.patch index 4bca6d769d..8e684afca1 100644 --- a/patches/api/0008-AFK-API.patch +++ b/patches/api/0008-AFK-API.patch @@ -81,10 +81,10 @@ index 0000000000000000000000000000000000000000..0c8b3e5e4ba412624357ea5662a78862 + } +} diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index a84ea92d02d34cd48174152e0391f1af6c6b5def..023ca23e8c91a6525cc31d483d873dfe14e97da3 100644 +index 4a4f041c6acfd335871fa67d6d1c7f723229c8a7..2ab8d8f3439ee2571df5df385f8874909605ff5c 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -2116,4 +2116,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -2131,4 +2131,25 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @Override Spigot spigot(); // Spigot end diff --git a/patches/api/0013-ItemFactory-getMonsterEgg.patch b/patches/api/0013-ItemFactory-getMonsterEgg.patch index 4701a2509e..eda7fa85aa 100644 --- a/patches/api/0013-ItemFactory-getMonsterEgg.patch +++ b/patches/api/0013-ItemFactory-getMonsterEgg.patch @@ -5,10 +5,10 @@ Subject: [PATCH] ItemFactory#getMonsterEgg diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java -index eab52f8615b329a795b3fe3a3719e5687e105061..0c5e488fca4370a18fede705f58bff25f3a7b4cb 100644 +index 673477470d110c53922e9e774158d4dc58f1bba0..4b37b6108dd40c6d091a0e5e6b2188ff60567492 100644 --- a/src/main/java/org/bukkit/inventory/ItemFactory.java +++ b/src/main/java/org/bukkit/inventory/ItemFactory.java -@@ -233,4 +233,15 @@ public interface ItemFactory { +@@ -242,4 +242,15 @@ public interface ItemFactory { @Deprecated net.md_5.bungee.api.chat.hover.content.Content hoverContentOf(@NotNull org.bukkit.entity.Entity entity, @NotNull net.md_5.bungee.api.chat.BaseComponent[] customName); // Paper end diff --git a/patches/api/0017-Player-invulnerabilities.patch b/patches/api/0017-Player-invulnerabilities.patch index f47925a571..399d2c4366 100644 --- a/patches/api/0017-Player-invulnerabilities.patch +++ b/patches/api/0017-Player-invulnerabilities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player invulnerabilities diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 023ca23e8c91a6525cc31d483d873dfe14e97da3..3dd208c763a71f4211b89a32a936a2317555f265 100644 +index 2ab8d8f3439ee2571df5df385f8874909605ff5c..24408c9bac75182d3cb6146aa25c51a45b53a3af 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -2136,5 +2136,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -2151,5 +2151,26 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * Reset the idle timer back to 0 */ void resetIdleTimer(); diff --git a/patches/api/0019-ItemStack-convenience-methods.patch b/patches/api/0019-ItemStack-convenience-methods.patch index c29a2c3609..e5f9e1fa68 100644 --- a/patches/api/0019-ItemStack-convenience-methods.patch +++ b/patches/api/0019-ItemStack-convenience-methods.patch @@ -5,10 +5,10 @@ Subject: [PATCH] ItemStack convenience methods diff --git a/src/main/java/org/bukkit/Material.java b/src/main/java/org/bukkit/Material.java -index 9b1c9e60dba9ea3ef8d8e164f13dd76daf57db8e..5b41f1016ed2d5ace2b47d3dd398314230af84b7 100644 +index 9b1c9e60dba9ea3ef8d8e164f13dd76daf57db8e..b04e9de7183f00a9a47c1fce26895c83c8c0cfd8 100644 --- a/src/main/java/org/bukkit/Material.java +++ b/src/main/java/org/bukkit/Material.java -@@ -8718,4 +8718,36 @@ public enum Material implements Keyed { +@@ -8718,4 +8718,40 @@ public enum Material implements Keyed { // } } @@ -37,6 +37,10 @@ index 9b1c9e60dba9ea3ef8d8e164f13dd76daf57db8e..5b41f1016ed2d5ace2b47d3dd3983142 + case DIAMOND_CHESTPLATE: + case DIAMOND_HELMET: + case DIAMOND_LEGGINGS: ++ case NETHERITE_BOOTS: ++ case NETHERITE_CHESTPLATE: ++ case NETHERITE_HELMET: ++ case NETHERITE_LEGGINGS: + case TURTLE_HELMET: + return true; + default: @@ -46,7 +50,7 @@ index 9b1c9e60dba9ea3ef8d8e164f13dd76daf57db8e..5b41f1016ed2d5ace2b47d3dd3983142 + // Purpur end } diff --git a/src/main/java/org/bukkit/inventory/ItemStack.java b/src/main/java/org/bukkit/inventory/ItemStack.java -index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670e52ba684 100644 +index fccfae41f53a175e1a6a670c793e464456de6b60..54af7fb0b5eaeffc7ec05dd58028bf927f71bb9e 100644 --- a/src/main/java/org/bukkit/inventory/ItemStack.java +++ b/src/main/java/org/bukkit/inventory/ItemStack.java @@ -17,6 +17,18 @@ import org.bukkit.inventory.meta.ItemMeta; @@ -68,8 +72,8 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 /** * Represents a stack of items. -@@ -843,4 +855,627 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, net.kyor - return itemMeta != null && itemMeta.hasItemFlag(flag); +@@ -874,4 +886,626 @@ public class ItemStack implements Cloneable, ConfigurationSerializable, net.kyor + return Bukkit.getUnsafe().getItemStackRarity(this); } // Paper end + @@ -104,7 +108,7 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + * @return true if this has a display name + */ + public boolean hasDisplayName() { -+ return getItemMeta().hasDisplayName(); ++ return hasItemMeta() && getItemMeta().hasDisplayName(); + } + + /** @@ -137,7 +141,7 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + * @return true if this has a localized name + */ + public boolean hasLocalizedName() { -+ return getItemMeta().hasLocalizedName(); ++ return hasItemMeta() && getItemMeta().hasLocalizedName(); + } + + /** @@ -146,7 +150,7 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + * @return true if this has lore + */ + public boolean hasLore() { -+ return getItemMeta().hasLore(); ++ return hasItemMeta() && getItemMeta().hasLore(); + } + + /** @@ -156,7 +160,7 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + * @return true if this enchantment exists for this meta + */ + public boolean hasEnchant(@NotNull Enchantment ench) { -+ return getItemMeta().hasEnchant(ench); ++ return hasItemMeta() && getItemMeta().hasEnchant(ench); + } + + /** @@ -217,7 +221,7 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + * @return true if an enchantment exists on this meta + */ + public boolean hasEnchants() { -+ return getItemMeta().hasEnchants(); ++ return hasItemMeta() && getItemMeta().hasEnchants(); + } + + /** @@ -228,7 +232,7 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + * @return true if the enchantment conflicts, false otherwise + */ + public boolean hasConflictingEnchant(@NotNull Enchantment ench) { -+ return getItemMeta().hasConflictingEnchant(ench); ++ return hasItemMeta() && getItemMeta().hasConflictingEnchant(ench); + } + + /** @@ -269,7 +273,7 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + * @return true if this has custom model data + */ + public boolean hasCustomModelData() { -+ return getItemMeta().hasCustomModelData(); ++ return hasItemMeta() && getItemMeta().hasCustomModelData(); + } + + /** @@ -278,7 +282,7 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + * @return whether block data is already attached + */ + public boolean hasBlockData() { -+ return ((BlockDataMeta) getItemMeta()).hasBlockData(); ++ return hasItemMeta() && ((BlockDataMeta) getItemMeta()).hasBlockData(); + } + + /** @@ -335,7 +339,7 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + * @return true if this has a repair penalty + */ + public boolean hasRepairCost() { -+ return ((Repairable) getItemMeta()).hasRepairCost(); ++ return hasItemMeta() && ((Repairable) getItemMeta()).hasRepairCost(); + } + + /** @@ -345,7 +349,7 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + * @return true if the unbreakable tag is true + */ + public boolean isUnbreakable() { -+ return getItemMeta().isUnbreakable(); ++ return hasItemMeta() && getItemMeta().isUnbreakable(); + } + + /** @@ -365,7 +369,7 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + * @return true if any AttributeModifiers exist + */ + public boolean hasAttributeModifiers() { -+ return getItemMeta().hasAttributeModifiers(); ++ return hasItemMeta() && getItemMeta().hasAttributeModifiers(); + } + + /** @@ -529,7 +533,7 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + * @return true if this has damage + */ + public boolean hasDamage() { -+ return ((Damageable) getItemMeta()).hasDamage(); ++ return hasItemMeta() && ((Damageable) getItemMeta()).hasDamage(); + } + + /** @@ -601,7 +605,7 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + * @return true if this item has placeable keys + */ + public boolean hasPlaceableKeys() { -+ return getItemMeta().hasPlaceableKeys(); ++ return hasItemMeta() && getItemMeta().hasPlaceableKeys(); + } + + /** @@ -610,7 +614,7 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + * @return true if this item has destroyable keys + */ + public boolean hasDestroyableKeys() { -+ return getItemMeta().hasDestroyableKeys(); ++ return hasItemMeta() && getItemMeta().hasDestroyableKeys(); + } + + /** @@ -693,6 +697,5 @@ index 58f99e3ebac9a01ebffe4d208e16cbee474d4aa3..314658c7dac1b1fbb440ec85133e6670 + } + return random.nextInt(unbreaking + 1) > 0; + } -+ + // Purpur end } diff --git a/patches/api/0025-Item-entity-immunities.patch b/patches/api/0025-Item-entity-immunities.patch index 7356fb0bc1..0d320bc5f8 100644 --- a/patches/api/0025-Item-entity-immunities.patch +++ b/patches/api/0025-Item-entity-immunities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Item entity immunities diff --git a/src/main/java/org/bukkit/entity/Item.java b/src/main/java/org/bukkit/entity/Item.java -index 0ee072645ecf1bf5feb74de6960947ef76db366e..69dae9157053c521a9e2bbdd7f89c17fc8d24840 100644 +index 0ee072645ecf1bf5feb74de6960947ef76db366e..5b9a20e0695218f1239d2bf1d0368291e2a10c06 100644 --- a/src/main/java/org/bukkit/entity/Item.java +++ b/src/main/java/org/bukkit/entity/Item.java -@@ -120,4 +120,48 @@ public interface Item extends Entity { +@@ -120,4 +120,62 @@ public interface Item extends Entity { */ public void setWillAge(boolean willAge); // Paper end @@ -55,5 +55,19 @@ index 0ee072645ecf1bf5feb74de6960947ef76db366e..69dae9157053c521a9e2bbdd7f89c17f + * @return True if immune to fire + */ + boolean isImmuneToFire(); ++ ++ /** ++ * Set whether or not this item is immune to lightning ++ * ++ * @param immuneToLightning True to make immune to lightning ++ */ ++ void setImmuneToLightning(boolean immuneToLightning); ++ ++ /** ++ * Check if item is immune to lightning ++ * ++ * @return True if immune to lightning ++ */ ++ boolean isImmuneToLightning(); + // Purpur end } diff --git a/patches/api/0033-Fix-javadoc-warnings-missing-param-and-return.patch b/patches/api/0033-Fix-javadoc-warnings-missing-param-and-return.patch index 888478589a..ac8774b674 100644 --- a/patches/api/0033-Fix-javadoc-warnings-missing-param-and-return.patch +++ b/patches/api/0033-Fix-javadoc-warnings-missing-param-and-return.patch @@ -534,7 +534,7 @@ index 28a1fe3af1546daa779df46468e0ff8ad823f9ca..7a3be414ef9d54d7a852ba92d704011f @NotNull diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java -index 3bf6e58b2351cee935e23abec1cea289e31943dc..5f2d5e12f11b471662943680b2012c99a8466306 100644 +index 6dbd520182b1e7713a68baad09b7f613424ef619..14244cc7f11035c4da4613bbdf49dac51f0da3cf 100644 --- a/src/main/java/org/bukkit/UnsafeValues.java +++ b/src/main/java/org/bukkit/UnsafeValues.java @@ -87,6 +87,8 @@ public interface UnsafeValues { @@ -549,7 +549,7 @@ index 3bf6e58b2351cee935e23abec1cea289e31943dc..5f2d5e12f11b471662943680b2012c99 @@ -105,6 +107,8 @@ public interface UnsafeValues { /** * Return the translation key for the Material, so the client can translate it into the active - * locale when using a TranslatableComponent. + * locale when using a {@link net.kyori.adventure.text.TranslatableComponent}. + * + * @param mat Material to check * @return the translation key @@ -558,7 +558,7 @@ index 3bf6e58b2351cee935e23abec1cea289e31943dc..5f2d5e12f11b471662943680b2012c99 @@ -112,6 +116,8 @@ public interface UnsafeValues { /** * Return the translation key for the Block, so the client can translate it into the active - * locale when using a TranslatableComponent. + * locale when using a {@link net.kyori.adventure.text.TranslatableComponent}. + * + * @param block Block to check * @return the translation key @@ -566,14 +566,14 @@ index 3bf6e58b2351cee935e23abec1cea289e31943dc..5f2d5e12f11b471662943680b2012c99 String getTranslationKey(org.bukkit.block.Block block); @@ -120,6 +126,8 @@ public interface UnsafeValues { * Return the translation key for the EntityType, so the client can translate it into the active - * locale when using a TranslatableComponent.
+ * locale when using a {@link net.kyori.adventure.text.TranslatableComponent}.
* This is null, when the EntityType isn't known to NMS (custom entities) + * + * @param type EntityType to check * @return the translation key */ String getTranslationKey(org.bukkit.entity.EntityType type); -@@ -128,6 +136,8 @@ public interface UnsafeValues { +@@ -135,6 +143,8 @@ public interface UnsafeValues { * Creates and returns the next EntityId available. *

* Use this when sending custom packets, so that there are no collisions on the client or server. @@ -994,10 +994,10 @@ index a6a7429ed2e1eefb2b12b7480ed74fcc3963a864..e8027e1d505dda6effbb1698550016e8 NORMAL(false), diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 3dd208c763a71f4211b89a32a936a2317555f265..2ed61f79fc7a625d00b86ee434d591232518ca3c 100644 +index 24408c9bac75182d3cb6146aa25c51a45b53a3af..24059b686cca36f594b2efb18666c646f391cea7 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -1938,6 +1938,8 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1953,6 +1953,8 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM void resetCooldown(); /** @@ -1006,7 +1006,7 @@ index 3dd208c763a71f4211b89a32a936a2317555f265..2ed61f79fc7a625d00b86ee434d59123 * @return the client option value of the player */ @NotNull -@@ -1977,6 +1979,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1992,6 +1994,9 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM // Paper end // Spigot start @@ -1416,7 +1416,7 @@ index c7b17eabf07b829a02afe7c1f27a5127b6bfea70..d4e2bcf8ce8fc2af851b471490147f00 /** diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java -index 0c5e488fca4370a18fede705f58bff25f3a7b4cb..551bed4f91fe23d36f3299b1b1576546722eb799 100644 +index 4b37b6108dd40c6d091a0e5e6b2188ff60567492..0c4aa68f47f6ccab578dc1593cf6de5eea0e17d4 100644 --- a/src/main/java/org/bukkit/inventory/ItemFactory.java +++ b/src/main/java/org/bukkit/inventory/ItemFactory.java @@ -148,6 +148,7 @@ public interface ItemFactory { @@ -1427,7 +1427,7 @@ index 0c5e488fca4370a18fede705f58bff25f3a7b4cb..551bed4f91fe23d36f3299b1b1576546 * @return A hover event */ @NotNull -@@ -179,7 +180,7 @@ public interface ItemFactory { +@@ -188,7 +189,7 @@ public interface ItemFactory { /** * Creates a {@link net.md_5.bungee.api.chat.hover.content.Content} of that ItemStack for displaying. * @@ -1490,10 +1490,10 @@ index e7d905b1146b2bdd2da5bdeb6bf3541fb181d59e..1fab68c9de96b0d362ebf85fd675cc19 /** diff --git a/src/main/java/org/bukkit/inventory/meta/BookMeta.java b/src/main/java/org/bukkit/inventory/meta/BookMeta.java -index 0cfd4b02cc2095da56b4dc8d4ea4e9b4a95f513c..1378c8fc2fd187035fc159c8d025d58b5a61f535 100644 +index fdbd32c4bb6428f2dde484ecb53acdaaba2a0d18..7357c166115f346a1efebd0f0f2d5491de6a9a39 100644 --- a/src/main/java/org/bukkit/inventory/meta/BookMeta.java +++ b/src/main/java/org/bukkit/inventory/meta/BookMeta.java -@@ -305,6 +305,9 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { +@@ -313,6 +313,9 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { BookMeta clone(); // Spigot start diff --git a/patches/api/0038-Add-unsafe-Entity-serialization-API.patch b/patches/api/0038-Add-unsafe-Entity-serialization-API.patch index 4c53312361..b52163d449 100644 --- a/patches/api/0038-Add-unsafe-Entity-serialization-API.patch +++ b/patches/api/0038-Add-unsafe-Entity-serialization-API.patch @@ -17,10 +17,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/org/bukkit/UnsafeValues.java b/src/main/java/org/bukkit/UnsafeValues.java -index 5f2d5e12f11b471662943680b2012c99a8466306..7395fe0261da696d1b16c845d244ad5d6957d92a 100644 +index 14244cc7f11035c4da4613bbdf49dac51f0da3cf..7899609b7a3041477d5240deaeee9b80159c2db3 100644 --- a/src/main/java/org/bukkit/UnsafeValues.java +++ b/src/main/java/org/bukkit/UnsafeValues.java -@@ -165,4 +165,28 @@ public interface UnsafeValues { +@@ -172,4 +172,28 @@ public interface UnsafeValues { */ int getProtocolVersion(); // Paper end diff --git a/patches/api/0039-Conflict-on-change-for-adventure-deprecations.patch b/patches/api/0039-Conflict-on-change-for-adventure-deprecations.patch index 81563c3e9a..1d6144537b 100644 --- a/patches/api/0039-Conflict-on-change-for-adventure-deprecations.patch +++ b/patches/api/0039-Conflict-on-change-for-adventure-deprecations.patch @@ -170,7 +170,7 @@ index 6ea9b54d95d80070c01a612c0ce2ab37f0b4ad41..fe9ec9cb7875df4a40d1c4155e13cca9 /** diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 2ed61f79fc7a625d00b86ee434d591232518ca3c..c0b75477ab8af71e73b37a66568693a84c5bce74 100644 +index 24059b686cca36f594b2efb18666c646f391cea7..cf1c631b80b5573a2a8b57e774f4faf57f98235b 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -72,7 +72,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @@ -281,7 +281,7 @@ index 2ed61f79fc7a625d00b86ee434d591232518ca3c..c0b75477ab8af71e73b37a66568693a8 public void sendSignChange(@NotNull Location loc, @Nullable String[] lines, @NotNull DyeColor dyeColor) throws IllegalArgumentException; /** -@@ -1746,7 +1746,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -1761,7 +1761,7 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM * @deprecated in favour of {@link #locale()} */ @NotNull @@ -370,10 +370,10 @@ index 129eac25da4f27489038fb15ab1aeecb172b60cc..670aca11bbaa2d155cd9d2105ac94c9d return title; } diff --git a/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java b/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java -index c9af02b0f62b3d18da1e91d1ea02ce0864fc60b9..5e4ade542c79b87a5174e7affb649d818d546362 100644 +index 77aefda5aac4602bf5bf71c29600e7450defdd4e..240552d61ae12fbec826f771f0f366500e72d941 100644 --- a/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java +++ b/src/main/java/org/bukkit/event/player/AsyncPlayerPreLoginEvent.java -@@ -161,7 +161,7 @@ public class AsyncPlayerPreLoginEvent extends Event { +@@ -179,7 +179,7 @@ public class AsyncPlayerPreLoginEvent extends Event { * @deprecated in favour of {@link #kickMessage()} */ @NotNull @@ -382,7 +382,7 @@ index c9af02b0f62b3d18da1e91d1ea02ce0864fc60b9..5e4ade542c79b87a5174e7affb649d81 public String getKickMessage() { return org.bukkit.Bukkit.getUnsafe().legacyComponentSerializer().serialize(this.message); // Paper } -@@ -172,7 +172,7 @@ public class AsyncPlayerPreLoginEvent extends Event { +@@ -190,7 +190,7 @@ public class AsyncPlayerPreLoginEvent extends Event { * @param message New kick message * @deprecated in favour of {@link #kickMessage(net.kyori.adventure.text.Component)} */ @@ -391,7 +391,7 @@ index c9af02b0f62b3d18da1e91d1ea02ce0864fc60b9..5e4ade542c79b87a5174e7affb649d81 public void setKickMessage(@NotNull final String message) { this.message = org.bukkit.Bukkit.getUnsafe().legacyComponentSerializer().deserialize(message); // Paper } -@@ -192,7 +192,7 @@ public class AsyncPlayerPreLoginEvent extends Event { +@@ -210,7 +210,7 @@ public class AsyncPlayerPreLoginEvent extends Event { * @param message Kick message to display to the user * @deprecated in favour of {@link #disallow(org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result, net.kyori.adventure.text.Component)} */ @@ -626,10 +626,10 @@ index b06995aa57aa9cba0bb59f1d26d81015619a08e6..5e33fe46ab9bb034acc6a38a3c00c33c public abstract String getTitle(); } diff --git a/src/main/java/org/bukkit/inventory/meta/BookMeta.java b/src/main/java/org/bukkit/inventory/meta/BookMeta.java -index 1378c8fc2fd187035fc159c8d025d58b5a61f535..2cbeb4ced49cab055e96268077df2ee2e445c980 100644 +index 7357c166115f346a1efebd0f0f2d5491de6a9a39..b90cb7aa98ea40573557a80ca5c7be7c5c494956 100644 --- a/src/main/java/org/bukkit/inventory/meta/BookMeta.java +++ b/src/main/java/org/bukkit/inventory/meta/BookMeta.java -@@ -234,7 +234,7 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { +@@ -242,7 +242,7 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { * @deprecated in favour of {@link #page(int)} */ @NotNull @@ -638,7 +638,7 @@ index 1378c8fc2fd187035fc159c8d025d58b5a61f535..2cbeb4ced49cab055e96268077df2ee2 String getPage(int page); /** -@@ -250,7 +250,7 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { +@@ -258,7 +258,7 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { * @param data the data to set for that page * @deprecated in favour of {@link #page(int, net.kyori.adventure.text.Component)} */ @@ -647,7 +647,7 @@ index 1378c8fc2fd187035fc159c8d025d58b5a61f535..2cbeb4ced49cab055e96268077df2ee2 void setPage(int page, @NotNull String data); /** -@@ -260,7 +260,7 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { +@@ -268,7 +268,7 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { * @deprecated in favour of {@link #pages()} */ @NotNull @@ -656,7 +656,7 @@ index 1378c8fc2fd187035fc159c8d025d58b5a61f535..2cbeb4ced49cab055e96268077df2ee2 List getPages(); /** -@@ -270,7 +270,7 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { +@@ -278,7 +278,7 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { * @param pages A list of pages to set the book to use * @deprecated in favour of {@link #pages(List)} */ @@ -665,7 +665,7 @@ index 1378c8fc2fd187035fc159c8d025d58b5a61f535..2cbeb4ced49cab055e96268077df2ee2 void setPages(@NotNull List pages); /** -@@ -280,7 +280,7 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { +@@ -288,7 +288,7 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { * @param pages A list of strings, each being a page * @deprecated in favour of {@link #pages(net.kyori.adventure.text.Component...)} */ @@ -674,7 +674,7 @@ index 1378c8fc2fd187035fc159c8d025d58b5a61f535..2cbeb4ced49cab055e96268077df2ee2 void setPages(@NotNull String... pages); /** -@@ -290,7 +290,7 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { +@@ -298,7 +298,7 @@ public interface BookMeta extends ItemMeta, net.kyori.adventure.inventory.Book { * @param pages A list of strings, each being a page * @deprecated in favour of {@link #addPages(net.kyori.adventure.text.Component...)} */ diff --git a/patches/server/0001-Tuinity-Server-Changes.patch b/patches/server/0001-Tuinity-Server-Changes.patch index 897342fcab..8ff7342da2 100644 --- a/patches/server/0001-Tuinity-Server-Changes.patch +++ b/patches/server/0001-Tuinity-Server-Changes.patch @@ -2059,7 +2059,7 @@ index 0000000000000000000000000000000000000000..5ea5b3933725d80dd193e815ac507ee5 \ No newline at end of file diff --git a/src/main/java/com/tuinity/tuinity/chunk/light/BlockStarLightEngine.java b/src/main/java/com/tuinity/tuinity/chunk/light/BlockStarLightEngine.java new file mode 100644 -index 0000000000000000000000000000000000000000..331f0ae05384b29ceb59f2846c52a2194658bb39 +index 0000000000000000000000000000000000000000..f722f9838424f345b69aef11510c194c6629e439 --- /dev/null +++ b/src/main/java/com/tuinity/tuinity/chunk/light/BlockStarLightEngine.java @@ -0,0 +1,289 @@ @@ -2298,16 +2298,16 @@ index 0000000000000000000000000000000000000000..331f0ae05384b29ceb59f2846c52a219 + + return ret.iterator(); + } else { -+ if (chunk instanceof ProtoChunk) { -+ ProtoChunk protoChunk = (ProtoChunk)chunk; -+ protoChunk.lockLightSources(); ++ // world gen and lighting run in parallel, and if lighting keeps up it can be lighting chunks that are ++ // being generated. In the nether, lava will add a lot of sources. This resulted in quite a few CME crashes. ++ // So all we do spinloop until we can collect a list of sources, and even if it is out of date we will pick up ++ // the missing sources from checkBlock. ++ for (;;) { + try { -+ return new ArrayList<>(chunk.getLightSources().collect(Collectors.toList())).iterator(); -+ } finally { -+ protoChunk.releaseLightSources(); ++ return chunk.getLightSources().collect(Collectors.toList()).iterator(); ++ } catch (final Exception cme) { ++ continue; + } -+ } else { -+ return new ArrayList<>(chunk.getLightSources().collect(Collectors.toList())).iterator(); + } + } + } @@ -3397,10 +3397,10 @@ index 0000000000000000000000000000000000000000..86a880d0f13f0fee70b09626c394c9e2 +} diff --git a/src/main/java/com/tuinity/tuinity/chunk/light/StarLightEngine.java b/src/main/java/com/tuinity/tuinity/chunk/light/StarLightEngine.java new file mode 100644 -index 0000000000000000000000000000000000000000..e40cf190c945754bd8b5342f76cd7fe2efd127cb +index 0000000000000000000000000000000000000000..2b0455b7475a75bba010fd71798eaa204bcf9562 --- /dev/null +++ b/src/main/java/com/tuinity/tuinity/chunk/light/StarLightEngine.java -@@ -0,0 +1,1615 @@ +@@ -0,0 +1,1603 @@ +package com.tuinity.tuinity.chunk.light; + +import com.tuinity.tuinity.util.CoordinateUtils; @@ -3847,7 +3847,7 @@ index 0000000000000000000000000000000000000000..e40cf190c945754bd8b5342f76cd7fe2 + try { + this.changedBlocksSet = positions; + final IChunkAccess chunk = this.getChunkInCache(chunkX, chunkZ); -+ if (this.isClientSide && chunk == null) { ++ if (chunk == null) { + return; + } + if (changedSections != null) { @@ -4146,18 +4146,6 @@ index 0000000000000000000000000000000000000000..e40cf190c945754bd8b5342f76cd7fe2 + final Boolean[] emptinessChanges) { + this.setupCaches(lightAccess, chunkX * 16 + 7, 128, chunkZ * 16 + 7, true, true); + try { -+ if (this.isClientSide) { -+ // force current chunk into cache -+ final IChunkAccess chunk = (IChunkAccess)lightAccess.getFeaturesReadyChunk(chunkX, chunkZ); -+ if (chunk == null) { -+ // unloaded this frame (or last), and we were still queued -+ return; -+ } -+ this.setChunkInCache(chunkX, chunkZ, chunk); -+ this.setBlocksForChunkInCache(chunkX, chunkZ, chunk.getSections()); -+ this.setNibblesForChunkInCache(chunkX, chunkZ, this.getNibblesOnChunk(chunk)); -+ this.setEmptinessMapCache(chunkX, chunkZ, this.getEmptinessMap(chunk)); -+ } + final IChunkAccess chunk = this.getChunkInCache(chunkX, chunkZ); + if (chunk == null) { + return; @@ -5514,10 +5502,10 @@ index 0000000000000000000000000000000000000000..df686b97460796004cad1477760647a9 +} diff --git a/src/main/java/com/tuinity/tuinity/chunk/light/VariableBlockLightHandler.java b/src/main/java/com/tuinity/tuinity/chunk/light/VariableBlockLightHandler.java new file mode 100644 -index 0000000000000000000000000000000000000000..b8df658c09a6dc739ff3f4d6e18c9cef7caea6c9 +index 0000000000000000000000000000000000000000..20309334d81011f18fbb67be209a1eec25447b5c --- /dev/null +++ b/src/main/java/com/tuinity/tuinity/chunk/light/VariableBlockLightHandler.java -@@ -0,0 +1,30 @@ +@@ -0,0 +1,33 @@ +package com.tuinity.tuinity.chunk.light; + +import net.minecraft.core.BlockPosition; @@ -5526,7 +5514,10 @@ index 0000000000000000000000000000000000000000..b8df658c09a6dc739ff3f4d6e18c9cef +/** + * Recommended implementation is {@link VariableBlockLightHandlerImpl}, but you can implement this interface yourself + * if you want. ++ * ++ * @deprecated To be removed in 1.17 due to Mojang adding a custom light block. + */ ++@Deprecated +public interface VariableBlockLightHandler { + + /** @@ -10944,10 +10935,10 @@ index 1d72af9cace7aa8f1d20c7c1c5be621f533e2dad..b7399d17dd64ca8b1f1fab405cb0ac91 worldData.addProperty("keep-spawn-loaded-range", world.paperConfig.keepLoadedRange); worldData.addProperty("visible-chunk-count", visibleChunks.size()); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 61712ae515b329a6b85dbe2e5960e4e864dc7731..2767a9369ddc922f1d9c7cb6c7acc8270545535a 100644 +index 35bb4d0b9ed131e6570cce0b43ae78c5557a0bff..8adbb9a77ff304f14ad3defa0f4f7ec25b0d2a2a 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -267,6 +267,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); public int autosavePeriod; public boolean serverAutoSave = false; // Paper -@@ -877,10 +878,11 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant { @@ -11111,7 +11102,7 @@ index 61712ae515b329a6b85dbe2e5960e4e864dc7731..2767a9369ddc922f1d9c7cb6c7acc827 return !this.canOversleep(); }); isOversleep = false;MinecraftTimings.serverOversleep.stopTiming(); -@@ -1392,6 +1452,8 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant iterator = this.ticketLevelUpdates.long2IntEntrySet().fastIterator(); iterator.hasNext(); ) { ++ for (java.util.Iterator iterator = this.ticketLevelUpdates.long2IntEntrySet().fastIterator(); iterator.hasNext();) { + Long2IntMap.Entry entry = iterator.next(); + long key = entry.getLongKey(); + int newLevel = entry.getIntValue(); + PlayerChunk chunk = this.getUpdatingChunk(key); - -- while (longiterator.hasNext()) { -- long j = longiterator.nextLong(); ++ + if (chunk == null && newLevel > PlayerChunkMap.GOLDEN_TICKET) { + // not loaded and it shouldn't be loaded! + continue; + } ++ ++ int currentLevel = chunk == null ? PlayerChunkMap.GOLDEN_TICKET + 1 : chunk.getTicketLevel(); - if (this.e(j).stream().anyMatch((ticket) -> { - return ticket.getTicketType() == TicketType.PLAYER; - })) { - PlayerChunk playerchunk = playerchunkmap.getUpdatingChunk(j); -+ int currentLevel = chunk == null ? PlayerChunkMap.GOLDEN_TICKET + 1 : chunk.getTicketLevel(); - -- if (playerchunk == null) { -- throw new IllegalStateException(); + if (currentLevel == newLevel) { + // nothing to do + continue; @@ -11433,7 +11425,9 @@ index 3644e8b24b082e17752ef52934625416130aaa08..a5fc023312c99e591fc269999c28a766 + + this.updateTicketLevel(key, newLevel, chunk, currentLevel); + } -+ + +- if (playerchunk == null) { +- throw new IllegalStateException(); + long recursiveCheck = ++this.ticketLevelUpdateCount; + while (!this.ticketLevelUpdates.isEmpty()) { + long key = this.ticketLevelUpdates.firstLongKey(); @@ -11464,31 +11458,29 @@ index 3644e8b24b082e17752ef52934625416130aaa08..a5fc023312c99e591fc269999c28a766 + + chunk.handleLevelUpdate(playerchunkmap); + if (recursiveCheck != this.ticketLevelUpdateCount) { -+ if (!this.ticketLevelUpdates.isEmpty()) { -+ throw new IllegalStateException("Recursive call should have processed updates"); -+ } -+ break; ++ // back to the start, we must create player chunks and update the ticket level fields before ++ // processing the actual level updates ++ continue ticket_update_loop; } } - this.l.clear(); +- } + for (;;) { + if (recursiveCheck != this.ticketLevelUpdateCount) { -+ break; ++ continue ticket_update_loop; + } + PlayerChunk pendingUpdate = this.pendingChunkUpdates.poll(); + if (pendingUpdate == null) { + break; + } -+ + +- return flag; + pendingUpdate.handleLevelUpdate(playerchunkmap); + } + } finally { + this.pollingPendingChunkUpdates = oldPolling; - } - -- return flag; -+ return true; ++ } } + + return flag; @@ -12351,7 +12343,7 @@ index 4ee7070364a8989eece4fa4237b529926821f9c9..f22ab98d2e250081df8949be8a997370 this.a(Long.MAX_VALUE, i, j, flag); } diff --git a/src/main/java/net/minecraft/server/level/LightEngineThreaded.java b/src/main/java/net/minecraft/server/level/LightEngineThreaded.java -index 0b80569648c1df01aab52d0b8d47028cda925d86..ad584ba21c6e201b778f32cea6d7cc5bf67f9746 100644 +index 0b80569648c1df01aab52d0b8d47028cda925d86..76ac408021c5124fd634682cba97dc63392642f5 100644 --- a/src/main/java/net/minecraft/server/level/LightEngineThreaded.java +++ b/src/main/java/net/minecraft/server/level/LightEngineThreaded.java @@ -2,6 +2,11 @@ package net.minecraft.server.level; @@ -12380,7 +12372,7 @@ index 0b80569648c1df01aab52d0b8d47028cda925d86..ad584ba21c6e201b778f32cea6d7cc5b PlayerChunk playerChunk = playerChunkMap.getVisibleChunk(pair); if (playerChunk == null) { return false; -@@ -169,13 +175,184 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { +@@ -169,13 +175,191 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { private volatile int f = 5; private final AtomicBoolean g = new AtomicBoolean(); @@ -12451,8 +12443,8 @@ index 0b80569648c1df01aab52d0b8d47028cda925d86..ad584ba21c6e201b778f32cea6d7cc5b + this.queueUpdate(); + + return totalChunks; - } - ++ } ++ + protected final Long2IntOpenHashMap holdingChunks = new Long2IntOpenHashMap(); + protected final LongArrayList postWorkTicketRelease = new LongArrayList(); + @@ -12499,20 +12491,27 @@ index 0b80569648c1df01aab52d0b8d47028cda925d86..ad584ba21c6e201b778f32cea6d7cc5b + } + + return CompletableFuture.completedFuture(playerChunk.getAvailableChunkNow()); -+ } -+ + } + + // note: task is discarded if the chunk is not at light status or if the chunk is not lit + protected final void scheduleLightWorkTask(int chunkX, int chunkZ, LightEngineThreaded.Update type, Runnable task) { -+ if (!org.bukkit.Bukkit.isPrimaryThread()) { -+ this.playerChunkMap.mainInvokingExecutor.execute(() -> { -+ this.scheduleLightWorkTask(chunkX, chunkZ, type, task); -+ }); ++ IChunkAccess current = this.getChunk(chunkX, chunkZ); ++ ++ if (current == null || !current.getChunkStatus().isAtLeastStatus(ChunkStatus.LIGHT)) { + return; + } + -+ IChunkAccess current = this.getChunk(chunkX, chunkZ); ++ if (current.getChunkStatus() != ChunkStatus.FULL) { ++ // do not keep chunk loaded, we are probably in a gen thread ++ // if we proceed to add a ticket the chunk will be loaded, which is not what we want (avoid cascading gen) ++ this.scheduleTask(chunkX, chunkZ, type, task); ++ return; ++ } + -+ if (current == null || !current.isLit() || !current.getChunkStatus().isAtLeastStatus(ChunkStatus.LIGHT)) { ++ if (!org.bukkit.Bukkit.isPrimaryThread()) { ++ this.playerChunkMap.mainInvokingExecutor.execute(() -> { ++ this.scheduleLightWorkTask(chunkX, chunkZ, type, task); ++ }); + return; + } + @@ -12565,7 +12564,7 @@ index 0b80569648c1df01aab52d0b8d47028cda925d86..ad584ba21c6e201b778f32cea6d7cc5b public void close() {} @Override -@@ -192,6 +369,15 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { +@@ -192,6 +376,15 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { public void a(BlockPosition blockposition) { BlockPosition blockposition1 = blockposition.immutableCopy(); @@ -12581,7 +12580,7 @@ index 0b80569648c1df01aab52d0b8d47028cda925d86..ad584ba21c6e201b778f32cea6d7cc5b this.a(blockposition.getX() >> 4, blockposition.getZ() >> 4, LightEngineThreaded.Update.POST_UPDATE, SystemUtils.a(() -> { super.a(blockposition1); }, () -> { -@@ -200,6 +386,11 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { +@@ -200,6 +393,11 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { } protected void a(ChunkCoordIntPair chunkcoordintpair) { @@ -12593,7 +12592,7 @@ index 0b80569648c1df01aab52d0b8d47028cda925d86..ad584ba21c6e201b778f32cea6d7cc5b this.a(chunkcoordintpair.x, chunkcoordintpair.z, () -> { return 0; }, LightEngineThreaded.Update.PRE_UPDATE, SystemUtils.a(() -> { -@@ -224,6 +415,14 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { +@@ -224,6 +422,14 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { @Override public void a(SectionPosition sectionposition, boolean flag) { @@ -12608,7 +12607,7 @@ index 0b80569648c1df01aab52d0b8d47028cda925d86..ad584ba21c6e201b778f32cea6d7cc5b this.a(sectionposition.a(), sectionposition.c(), () -> { return 0; }, LightEngineThreaded.Update.PRE_UPDATE, SystemUtils.a(() -> { -@@ -235,6 +434,11 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { +@@ -235,6 +441,11 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { @Override public void a(ChunkCoordIntPair chunkcoordintpair, boolean flag) { @@ -12620,7 +12619,7 @@ index 0b80569648c1df01aab52d0b8d47028cda925d86..ad584ba21c6e201b778f32cea6d7cc5b this.a(chunkcoordintpair.x, chunkcoordintpair.z, LightEngineThreaded.Update.PRE_UPDATE, SystemUtils.a(() -> { super.a(chunkcoordintpair, flag); }, () -> { -@@ -244,6 +448,11 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { +@@ -244,6 +455,11 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { @Override public void a(EnumSkyBlock enumskyblock, SectionPosition sectionposition, @Nullable NibbleArray nibblearray, boolean flag) { @@ -12632,7 +12631,7 @@ index 0b80569648c1df01aab52d0b8d47028cda925d86..ad584ba21c6e201b778f32cea6d7cc5b this.a(sectionposition.a(), sectionposition.c(), () -> { return 0; }, LightEngineThreaded.Update.PRE_UPDATE, SystemUtils.a(() -> { -@@ -253,6 +462,7 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { +@@ -253,6 +469,7 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { })); } @@ -12640,7 +12639,7 @@ index 0b80569648c1df01aab52d0b8d47028cda925d86..ad584ba21c6e201b778f32cea6d7cc5b private void a(int i, int j, LightEngineThreaded.Update lightenginethreaded_update, Runnable runnable) { this.a(i, j, this.d.c(ChunkCoordIntPair.pair(i, j)), lightenginethreaded_update, runnable); } -@@ -265,6 +475,11 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { +@@ -265,6 +482,11 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { @Override public void b(ChunkCoordIntPair chunkcoordintpair, boolean flag) { @@ -12652,7 +12651,7 @@ index 0b80569648c1df01aab52d0b8d47028cda925d86..ad584ba21c6e201b778f32cea6d7cc5b this.a(chunkcoordintpair.x, chunkcoordintpair.z, () -> { return 0; }, LightEngineThreaded.Update.PRE_UPDATE, SystemUtils.a(() -> { -@@ -277,6 +492,35 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { +@@ -277,6 +499,35 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { public CompletableFuture a(IChunkAccess ichunkaccess, boolean flag) { ChunkCoordIntPair chunkcoordintpair = ichunkaccess.getPos(); @@ -12688,7 +12687,7 @@ index 0b80569648c1df01aab52d0b8d47028cda925d86..ad584ba21c6e201b778f32cea6d7cc5b // Paper start //ichunkaccess.b(false); // Don't need to disable this long pair = chunkcoordintpair.pair(); -@@ -324,7 +568,7 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { +@@ -324,7 +575,7 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { } public void queueUpdate() { @@ -12697,7 +12696,7 @@ index 0b80569648c1df01aab52d0b8d47028cda925d86..ad584ba21c6e201b778f32cea6d7cc5b this.b.a((() -> { // Paper - decompile error this.b(); this.g.set(false); -@@ -338,17 +582,36 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { +@@ -338,17 +589,36 @@ public class LightEngineThreaded extends LightEngine implements AutoCloseable { private final java.util.List pre = new java.util.ArrayList<>(); private final java.util.List post = new java.util.ArrayList<>(); private void b() { @@ -12966,7 +12965,7 @@ index a323b76f68c273a73cb3f20167a668b2100f4944..86f156587a0939b28c5cf6f64907255c if (chunk != null) { playerchunkmap.callbackExecutor.execute(() -> { diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0d05d3383 100644 +index 6835401bd7863bbd655502547a9fd4ae0f298da1..33429be7da4d4c2b2469b8140e46e66d9921652c 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java @@ -103,6 +103,7 @@ import net.minecraft.world.level.storage.WorldDataServer; @@ -13613,7 +13612,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 protected void c(ChunkCoordIntPair chunkcoordintpair) { this.executor.a(SystemUtils.a(() -> { this.chunkDistanceManager.b(TicketType.LIGHT, chunkcoordintpair, 33 + ChunkStatus.a(ChunkStatus.FEATURES), chunkcoordintpair); -@@ -1470,9 +1546,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1478,9 +1554,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { chunk.B(); return chunk; }); @@ -13624,7 +13623,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 } public int c() { -@@ -1553,39 +1627,27 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1561,39 +1635,27 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } public void setViewDistance(int i) { // Paper - public @@ -13669,7 +13668,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 if (entityplayer.world == this.world) { if (flag1 && !flag) { PlayerChunk playerchunk = this.getVisibleChunk(chunkcoordintpair.pair()); -@@ -1609,7 +1671,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1617,7 +1679,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { } public int d() { @@ -13678,7 +13677,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 } protected PlayerChunkMap.a e() { -@@ -1681,7 +1743,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1689,7 +1751,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { if (Thread.currentThread() != com.destroystokyo.paper.io.PaperFileIOThread.Holder.INSTANCE) { com.destroystokyo.paper.io.PaperFileIOThread.Holder.INSTANCE.scheduleSave( this.world, chunkcoordintpair.x, chunkcoordintpair.z, null, nbttagcompound, @@ -13687,7 +13686,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 return; } super.write(chunkcoordintpair, nbttagcompound); -@@ -1765,6 +1827,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1773,6 +1835,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { return chunkHolder == null ? null : chunkHolder.getAvailableChunkNow(); } // Paper end @@ -13699,7 +13698,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 // Paper start - async io -@@ -1974,6 +2041,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1982,6 +2049,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { }*/ // Paper end - replaced by distance map this.updateMaps(entityplayer); // Paper - distance maps @@ -13707,7 +13706,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 } -@@ -1982,7 +2050,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -1990,7 +2058,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { // Paper start - per player view distance // there can be potential desync with player's last mapped section and the view distance map, so use the // view distance map here. @@ -13716,7 +13715,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 if (inRange == null) { return Stream.empty(); -@@ -1998,8 +2066,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -2006,8 +2074,9 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { continue; } EntityPlayer player = (EntityPlayer)temp; @@ -13728,7 +13727,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 int distX = Math.abs(MCUtil.getCoordinateX(lastPosition) - chunkcoordintpair.x); int distZ = Math.abs(MCUtil.getCoordinateZ(lastPosition) - chunkcoordintpair.z); -@@ -2014,6 +2083,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -2022,6 +2091,7 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { continue; } EntityPlayer player = (EntityPlayer)temp; @@ -13736,7 +13735,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 players.add(player); } } -@@ -2092,22 +2162,25 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { +@@ -2100,22 +2170,25 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { private final void processTrackQueue() { this.world.timings.tracker1.startTiming(); try { @@ -13775,7 +13774,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 } } // Paper end - optimised tracker -@@ -2229,6 +2302,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2237,6 +2310,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially apacket[1] = new PacketPlayOutLightUpdate(chunk.getPos(), this.lightEngine, true); // Paper start - Fix MC-162253 @@ -13783,7 +13782,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 final int lightMask = getLightMask(chunk); int i = 1; for (int x = -1; x <= 1; x++) { -@@ -2253,10 +2327,12 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2261,10 +2335,12 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially apacket[i] = new PacketPlayOutLightUpdate(new ChunkCoordIntPair(chunk.getPos().x + x, chunk.getPos().z + z), lightEngine, updateLightMask, 0, true); } } @@ -13798,7 +13797,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 int j = 1; for (int x = -1; x <= 1; x++) { -@@ -2281,6 +2357,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2289,6 +2365,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially entityplayer.playerConnection.sendPacket(packet); } } @@ -13806,7 +13805,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 // Paper end - Fix MC-162253 entityplayer.a(chunk.getPos(), apacket[0], apacket[1]); -@@ -2356,7 +2433,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2364,7 +2441,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially // Paper start // Replace trackedPlayers Set with a Map. The value is true until the player receives // their first update (which is forced to have absolute coordinates), false afterward. @@ -13815,7 +13814,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 public Set trackedPlayers = trackedPlayerMap.keySet(); public EntityTracker(Entity entity, int i, int j, boolean flag) { -@@ -2457,7 +2534,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2465,7 +2542,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially double vec3d_dy = entityplayer.locY() - this.tracker.locY(); double vec3d_dz = entityplayer.locZ() - this.tracker.locZ(); // Paper end - remove allocation of Vec3D here @@ -13824,7 +13823,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 boolean flag = vec3d_dx >= (double) (-i) && vec3d_dx <= (double) i && vec3d_dz >= (double) (-i) && vec3d_dz <= (double) i && this.tracker.a(entityplayer); // Paper - remove allocation of Vec3D here if (flag) { -@@ -2467,7 +2544,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2475,7 +2552,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially ChunkCoordIntPair chunkcoordintpair = new ChunkCoordIntPair(this.tracker.chunkX, this.tracker.chunkZ); PlayerChunk playerchunk = PlayerChunkMap.this.getVisibleChunk(chunkcoordintpair.pair()); @@ -13833,7 +13832,7 @@ index 300884804bf9ac3fba7c30a04d8adf52e3dd2e3e..b28995ecfd7f45e6b6197be96c418aa0 flag1 = PlayerChunkMap.b(chunkcoordintpair, entityplayer, false) <= PlayerChunkMap.this.viewDistance; } } -@@ -2507,7 +2584,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2515,7 +2592,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially int j = entity.getEntityType().getChunkRange() * 16; j = org.spigotmc.TrackingRange.getEntityTrackingRange(entity, j); // Paper @@ -14043,7 +14042,7 @@ index 3c804c7b20a14ea6e510810e2be10c1cc89ff5c1..3738c51b5e673c439d88a7ef7f4614f3 return new TicketType<>(s, comparator, 0L); } diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 47fbb8df04b2b77e10314666e87eaef621cffb3b..58e61aa19d71011c40c69a691f5644b3e823ad68 100644 +index 7e032845fe9a46d33236444d62405a41e29daa17..a8a2c29874e95dc08b85eb41882fc947108fbe5b 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -168,12 +168,13 @@ import org.bukkit.event.server.MapInitializeEvent; @@ -14786,11 +14785,11 @@ index 47fbb8df04b2b77e10314666e87eaef621cffb3b..58e61aa19d71011c40c69a691f5644b3 + } + chunk.a(entity); + // Tuinity end - gotta be careful here, sync load can teleport entity. - } ++ } + // Tuinity start + if (entity.inChunk && (oldRegionX != newRegionX || oldRegionZ != newRegionZ)) { + this.addNavigatorsIfPathingToRegion(entity); -+ } + } + // Tuinity end } @@ -14962,7 +14961,7 @@ index 47fbb8df04b2b77e10314666e87eaef621cffb3b..58e61aa19d71011c40c69a691f5644b3 throw (IllegalStateException) SystemUtils.c((Throwable) (new IllegalStateException("Removing entity while ticking!"))); } else { this.removeEntityFromChunk(entity); -@@ -1684,20 +2304,33 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1683,20 +2303,33 @@ public class WorldServer extends World implements GeneratorAccessSeed { @Override public void notify(BlockPosition blockposition, IBlockData iblockdata, IBlockData iblockdata1, int i) { @@ -14998,7 +14997,7 @@ index 47fbb8df04b2b77e10314666e87eaef621cffb3b..58e61aa19d71011c40c69a691f5644b3 } catch (java.util.ConcurrentModificationException ex) { // This can happen because the pathfinder update below may trigger a chunk load, which in turn may cause more navigators to register // In this case we just run the update again across all the iterators as the chunk will then be loaded -@@ -1711,6 +2344,9 @@ public class WorldServer extends World implements GeneratorAccessSeed { +@@ -1710,6 +2343,9 @@ public class WorldServer extends World implements GeneratorAccessSeed { navigationabstract.b(blockposition); } } @@ -15008,21 +15007,8 @@ index 47fbb8df04b2b77e10314666e87eaef621cffb3b..58e61aa19d71011c40c69a691f5644b3 this.tickingEntities = wasTicking; // Paper } -@@ -2072,8 +2708,11 @@ public class WorldServer extends World implements GeneratorAccessSeed { - Optional optional = VillagePlaceType.b(iblockdata); - Optional optional1 = VillagePlaceType.b(iblockdata1); - -+ // Paper start -+ // Tuinity - oh god not for each block set - if (!Objects.equals(optional, optional1)) { -- BlockPosition blockposition1 = blockposition.immutableCopy(); -+ BlockPosition blockposition1 = blockposition.immutableCopy(); // Tuinity - oh god not for each block set -+ // Paper end - - optional.ifPresent((villageplacetype) -> { - this.getMinecraftServer().execute(() -> { diff --git a/src/main/java/net/minecraft/server/network/LoginListener.java b/src/main/java/net/minecraft/server/network/LoginListener.java -index c67b94840e4c967baebf6eb351df15f0e4ead4be..ed836462123efc6903e406fa926e55e1cedddb95 100644 +index f54af7cabc6b4e062948dc97e577e7fe04b5add4..4e28b58731c7e76a727ed8f0967150f8fe22ab66 100644 --- a/src/main/java/net/minecraft/server/network/LoginListener.java +++ b/src/main/java/net/minecraft/server/network/LoginListener.java @@ -256,7 +256,7 @@ public class LoginListener implements PacketLoginInListener { @@ -15035,7 +15021,7 @@ index c67b94840e4c967baebf6eb351df15f0e4ead4be..ed836462123efc6903e406fa926e55e1 throw new IllegalStateException("Protocol error", cryptographyexception); } diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index b543776da3b799643893984a8c6f29477ed78d4a..159c38618d7745ea513ad179b1217d76c2c4897a 100644 +index 8c9e97bb093c0e6297397edc71d72deebbcfbed9..e0c606bb6ecf23f2118a65775c05b437a09826d3 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java @@ -542,6 +542,12 @@ public class PlayerConnection implements PacketListenerPlayIn { @@ -15145,7 +15131,7 @@ index b543776da3b799643893984a8c6f29477ed78d4a..159c38618d7745ea513ad179b1217d76 } @Override -@@ -1219,7 +1263,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1224,7 +1268,7 @@ public class PlayerConnection implements PacketListenerPlayIn { } if (this.teleportPos != null) { @@ -15154,7 +15140,7 @@ index b543776da3b799643893984a8c6f29477ed78d4a..159c38618d7745ea513ad179b1217d76 this.A = this.e; this.a(this.teleportPos.x, this.teleportPos.y, this.teleportPos.z, this.player.yaw, this.player.pitch); } -@@ -1257,6 +1301,12 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1262,6 +1306,12 @@ public class PlayerConnection implements PacketListenerPlayIn { double currDeltaZ = toZ - prevZ; double d11 = Math.max(d7 * d7 + d8 * d8 + d9 * d9, (currDeltaX * currDeltaX + currDeltaY * currDeltaY + currDeltaZ * currDeltaZ) - 1); // Paper end - fix large move vectors killing the server @@ -15167,7 +15153,7 @@ index b543776da3b799643893984a8c6f29477ed78d4a..159c38618d7745ea513ad179b1217d76 if (this.player.isSleeping()) { if (d11 > 1.0D) { -@@ -1289,7 +1339,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1294,7 +1344,7 @@ public class PlayerConnection implements PacketListenerPlayIn { speed = player.abilities.walkSpeed * 10f; } // Paper start - Prevent moving into unloaded chunks @@ -15176,7 +15162,7 @@ index b543776da3b799643893984a8c6f29477ed78d4a..159c38618d7745ea513ad179b1217d76 this.internalTeleport(this.player.locX(), this.player.locY(), this.player.locZ(), this.player.yaw, this.player.pitch, Collections.emptySet()); return; } -@@ -1306,11 +1356,11 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1311,11 +1361,11 @@ public class PlayerConnection implements PacketListenerPlayIn { } } @@ -15192,7 +15178,7 @@ index b543776da3b799643893984a8c6f29477ed78d4a..159c38618d7745ea513ad179b1217d76 boolean flag = d8 > 0.0D; if (this.player.isOnGround() && !packetplayinflying.b() && flag) { -@@ -1345,6 +1395,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1350,6 +1400,7 @@ public class PlayerConnection implements PacketListenerPlayIn { } this.player.move(EnumMoveType.PLAYER, new Vec3D(d7, d8, d9)); @@ -15200,7 +15186,7 @@ index b543776da3b799643893984a8c6f29477ed78d4a..159c38618d7745ea513ad179b1217d76 this.player.setOnGround(packetplayinflying.b()); // CraftBukkit - SPIGOT-5810, SPIGOT-5835: reset by this.player.move // Paper start - prevent position desync if (this.teleportPos != null) { -@@ -1364,12 +1415,23 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1369,12 +1420,23 @@ public class PlayerConnection implements PacketListenerPlayIn { boolean flag1 = false; if (!this.player.H() && d11 > org.spigotmc.SpigotConfig.movedWronglyThreshold && !this.player.isSleeping() && !this.player.playerInteractManager.isCreative() && this.player.playerInteractManager.getGameMode() != EnumGamemode.SPECTATOR) { // Spigot @@ -15226,7 +15212,7 @@ index b543776da3b799643893984a8c6f29477ed78d4a..159c38618d7745ea513ad179b1217d76 this.a(d0, d1, d2, f, f1); } else { // CraftBukkit start - fire PlayerMoveEvent -@@ -1456,6 +1518,26 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1461,6 +1523,26 @@ public class PlayerConnection implements PacketListenerPlayIn { } } @@ -15254,7 +15240,7 @@ index b543776da3b799643893984a8c6f29477ed78d4a..159c38618d7745ea513ad179b1217d76 Stream stream = iworldreader.d(this.player, this.player.getBoundingBox().shrink(9.999999747378752E-6D), (entity) -> { return true; diff --git a/src/main/java/net/minecraft/server/network/ServerConnection.java b/src/main/java/net/minecraft/server/network/ServerConnection.java -index dc362724ea0cc1b2f9d9ceffff483217b4356c40..70fde7bad2e0a6d7432d8509fdb7c46d9f020d4c 100644 +index 69fc2789df88344587b6052f93661ed38f24a503..92836f1200461ba7fff2f8bcb5e1755ec9a0c9ce 100644 --- a/src/main/java/net/minecraft/server/network/ServerConnection.java +++ b/src/main/java/net/minecraft/server/network/ServerConnection.java @@ -87,6 +87,11 @@ public class ServerConnection { @@ -15270,7 +15256,7 @@ index dc362724ea0cc1b2f9d9ceffff483217b4356c40..70fde7bad2e0a6d7432d8509fdb7c46d protected void initChannel(Channel channel) throws Exception { try { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index f8f0212497ad4fbb1273820a06a4ae6721053b8e..c705bf1e651a764d56b87ebc5a86a938d8bd34bb 100644 +index aaa6f3aeaf1b47275a1c8fc22ee99475e62c32a0..76ba1e038fb68eafa2c2039fa1cdd74d060dcf9f 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -179,6 +179,7 @@ public abstract class PlayerList { @@ -15299,7 +15285,7 @@ index f8f0212497ad4fbb1273820a06a4ae6721053b8e..c705bf1e651a764d56b87ebc5a86a938 Player player = entity.getBukkitEntity(); PlayerLoginEvent event = new PlayerLoginEvent(player, hostname, ((java.net.InetSocketAddress) socketaddress).getAddress(), ((java.net.InetSocketAddress) loginlistener.networkManager.getRawAddress()).getAddress()); -@@ -945,13 +946,13 @@ public abstract class PlayerList { +@@ -951,13 +952,13 @@ public abstract class PlayerList { worldserver1.getChunkProvider().addTicket(TicketType.POST_TELEPORT, new ChunkCoordIntPair(location.getBlockX() >> 4, location.getBlockZ() >> 4), 1, entityplayer.getId()); // Paper entityplayer1.forceCheckHighPriority(); // Player @@ -15315,7 +15301,7 @@ index f8f0212497ad4fbb1273820a06a4ae6721053b8e..c705bf1e651a764d56b87ebc5a86a938 entityplayer1.spawnIn(worldserver1); entityplayer1.dead = false; entityplayer1.playerConnection.teleport(new Location(worldserver1.getWorld(), entityplayer1.locX(), entityplayer1.locY(), entityplayer1.locZ(), entityplayer1.yaw, entityplayer1.pitch)); -@@ -1220,7 +1221,7 @@ public abstract class PlayerList { +@@ -1226,7 +1227,7 @@ public abstract class PlayerList { // Really shouldn't happen... backingSet = world != null ? world.players.toArray() : players.toArray(); } else { @@ -15325,7 +15311,7 @@ index f8f0212497ad4fbb1273820a06a4ae6721053b8e..c705bf1e651a764d56b87ebc5a86a938 return; } diff --git a/src/main/java/net/minecraft/server/players/UserCache.java b/src/main/java/net/minecraft/server/players/UserCache.java -index e813d4dd1a46734d16b42905808caa889811afcc..ee5c038c4ede294ec5b9b9b9f705ba46b6c7ac8c 100644 +index c617b7dd5a992770fc87113987807947ae68be81..7ce5bd130441a3bc32ee5fa3630edce23dadd0b8 100644 --- a/src/main/java/net/minecraft/server/players/UserCache.java +++ b/src/main/java/net/minecraft/server/players/UserCache.java @@ -52,6 +52,11 @@ public class UserCache { @@ -15356,7 +15342,7 @@ index e813d4dd1a46734d16b42905808caa889811afcc..ee5c038c4ede294ec5b9b9b9f705ba46 } -@@ -110,7 +117,7 @@ public class UserCache { +@@ -111,7 +118,7 @@ public class UserCache { } public void saveProfile(GameProfile gameprofile) { a(gameprofile); } // Paper - OBFHELPER @@ -15365,7 +15351,7 @@ index e813d4dd1a46734d16b42905808caa889811afcc..ee5c038c4ede294ec5b9b9b9f705ba46 Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); -@@ -127,8 +134,9 @@ public class UserCache { +@@ -128,8 +135,9 @@ public class UserCache { } @Nullable @@ -15376,7 +15362,7 @@ index e813d4dd1a46734d16b42905808caa889811afcc..ee5c038c4ede294ec5b9b9b9f705ba46 UserCache.UserCacheEntry usercache_usercacheentry = (UserCache.UserCacheEntry) this.c.get(s1); boolean flag = false; -@@ -142,10 +150,14 @@ public class UserCache { +@@ -143,10 +151,14 @@ public class UserCache { GameProfile gameprofile; if (usercache_usercacheentry != null) { @@ -15391,7 +15377,7 @@ index e813d4dd1a46734d16b42905808caa889811afcc..ee5c038c4ede294ec5b9b9b9f705ba46 if (gameprofile != null) { this.a(gameprofile); flag = false; -@@ -157,6 +169,7 @@ public class UserCache { +@@ -158,6 +170,7 @@ public class UserCache { } return gameprofile; @@ -15399,7 +15385,7 @@ index e813d4dd1a46734d16b42905808caa889811afcc..ee5c038c4ede294ec5b9b9b9f705ba46 } // Paper start -@@ -291,7 +304,9 @@ public class UserCache { +@@ -292,7 +305,9 @@ public class UserCache { } private Stream a(int i) { @@ -16822,20 +16808,10 @@ index c39c50e53549e9cb9d3520bc7e8b7e89cfa20163..5bce47fa8f191bc1d33c04c9865cb0ef public void closeInventory() { this.activeContainer = this.defaultContainer; diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java b/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java -index 2f8b3587f527620152609d5be342b328a7621e0f..e440d26c920c4efddf958c61bfdfa508273062cc 100644 +index b0e8e9934edbb0cf7ac063e4903452be526afbc7..42c1a7e8d51868c74e92d97f1df8d36fcaab6252 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java -@@ -211,7 +211,9 @@ public abstract class EntityArrow extends IProjectile { - // Paper end - - if (object != null && !flag) { -+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, (MovingObjectPosition) object)) { // CraftBukkit - Call event // Paper - make cancellable // Tuinity - implement cancellation properly - this.a((MovingObjectPosition) object); -+ } // Tuinity - implement cancellation properly - this.impulse = true; - } - -@@ -545,7 +547,8 @@ public abstract class EntityArrow extends IProjectile { +@@ -545,7 +545,8 @@ public abstract class EntityArrow extends IProjectile { } itemstack = item.getItemStack(); } @@ -16845,101 +16821,6 @@ index 2f8b3587f527620152609d5be342b328a7621e0f..e440d26c920c4efddf958c61bfdfa508 if (this.fromPlayer == EntityArrow.PickupStatus.ALLOWED && !entityhuman.inventory.pickup(itemstack)) { // CraftBukkit end -diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java b/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java -index b9680f6f2e30ec9397d6a9c83e79563d9253aff6..546de0ec2b624a781480ac95f65b2cbfbb5dcf2e 100644 ---- a/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java -+++ b/src/main/java/net/minecraft/world/entity/projectile/EntityFireball.java -@@ -83,7 +83,9 @@ public abstract class EntityFireball extends IProjectile { - // Paper end - - if (movingobjectposition != null && movingobjectposition.getType() != MovingObjectPosition.EnumMovingObjectType.MISS) { // Paper - add null check in case cancelled -+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, movingobjectposition)) { // CraftBukkit - Call event // Paper - make cancellable // Tuinity - implement cancellation properly - this.a(movingobjectposition); -+ } // Tuinity - implement cancellation properly - - // CraftBukkit start - Fire ProjectileHitEvent - if (this.dead) { -diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityFireworks.java b/src/main/java/net/minecraft/world/entity/projectile/EntityFireworks.java -index 9cc59439ae2c4e758c44b2a92b78bc328efdfa1b..f9a355c847d778a9aad1987882fc816af92450ba 100644 ---- a/src/main/java/net/minecraft/world/entity/projectile/EntityFireworks.java -+++ b/src/main/java/net/minecraft/world/entity/projectile/EntityFireworks.java -@@ -149,7 +149,9 @@ public class EntityFireworks extends IProjectile { - MovingObjectPosition movingobjectposition = ProjectileHelper.a((Entity) this, this::a); - - if (!this.noclip) { -+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, movingobjectposition)) { // CraftBukkit - Call event // Paper - make cancellable // Tuinity - implement cancellation properly - this.a(movingobjectposition); -+ } // Tuinity - implement cancellation properly - this.impulse = true; - } - -diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityFishingHook.java b/src/main/java/net/minecraft/world/entity/projectile/EntityFishingHook.java -index addea9c1309a308b76c93ee71e839c915bc773e8..dc6d279766ccc83a8f450028a09491b1c88f524c 100644 ---- a/src/main/java/net/minecraft/world/entity/projectile/EntityFishingHook.java -+++ b/src/main/java/net/minecraft/world/entity/projectile/EntityFishingHook.java -@@ -265,7 +265,9 @@ public class EntityFishingHook extends IProjectile { - private void m() { - MovingObjectPosition movingobjectposition = ProjectileHelper.a((Entity) this, this::a); - -+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, movingobjectposition)) { // CraftBukkit - Call event // Paper - make cancellable // Tuinity - implement cancellation properly - this.a(movingobjectposition); -+ } // Tuinity - implement cancellation properly - } - - @Override -diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityLlamaSpit.java b/src/main/java/net/minecraft/world/entity/projectile/EntityLlamaSpit.java -index 39b34e619cf7ac3ad308f98551c796ac47073484..8aef834a6e8fcf5d44986745affb8f27bc3dfd6b 100644 ---- a/src/main/java/net/minecraft/world/entity/projectile/EntityLlamaSpit.java -+++ b/src/main/java/net/minecraft/world/entity/projectile/EntityLlamaSpit.java -@@ -34,7 +34,9 @@ public class EntityLlamaSpit extends IProjectile { - MovingObjectPosition movingobjectposition = ProjectileHelper.a((Entity) this, this::a); - - if (movingobjectposition != null) { -+ if (org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, movingobjectposition)) { // CraftBukkit - Call event // Paper - make cancellable // Tuinity - implement cancellation properly - this.a(movingobjectposition); -+ } // Tuinity - implement cancellation properly - } - - double d0 = this.locX() + vec3d.x; -diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityProjectile.java b/src/main/java/net/minecraft/world/entity/projectile/EntityProjectile.java -index 3b379e83b79bd9b46dbdd4a48ac3842abc4dfbb8..e55061b6c04b4bde92404a6ef58ba9a52cd99c1d 100644 ---- a/src/main/java/net/minecraft/world/entity/projectile/EntityProjectile.java -+++ b/src/main/java/net/minecraft/world/entity/projectile/EntityProjectile.java -@@ -65,7 +65,7 @@ public abstract class EntityProjectile extends IProjectile { - movingobjectposition = null; - } - } -- if (movingobjectposition != null) { -+ if (movingobjectposition != null && org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, movingobjectposition)) { // Tuinity - implement cancellation properly - // Paper end - this.a(movingobjectposition); - } // Paper -diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityShulkerBullet.java b/src/main/java/net/minecraft/world/entity/projectile/EntityShulkerBullet.java -index c3dcebad0706386e52ef2d28f2074cb6aed9f9e4..1ae528ccd09a6536b3aac320e6218f03c274d6a9 100644 ---- a/src/main/java/net/minecraft/world/entity/projectile/EntityShulkerBullet.java -+++ b/src/main/java/net/minecraft/world/entity/projectile/EntityShulkerBullet.java -@@ -230,7 +230,7 @@ public class EntityShulkerBullet extends IProjectile { - - MovingObjectPosition movingobjectposition = ProjectileHelper.a((Entity) this, this::a); - -- if (movingobjectposition.getType() != MovingObjectPosition.EnumMovingObjectType.MISS) { -+ if (movingobjectposition.getType() != MovingObjectPosition.EnumMovingObjectType.MISS && org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, movingobjectposition)) { // Tuinity - implement cancellation properly - this.a(movingobjectposition); - } - } -diff --git a/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java b/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java -index 9f2e7d345d98f50e6d47cbf4bb35714852fa42da..2e2e4ee98619cfbeaecffa1ebae78ccc1d7666ca 100644 ---- a/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java -+++ b/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java -@@ -130,7 +130,7 @@ public abstract class IProjectile extends Entity { - } - - protected void a(MovingObjectPosition movingobjectposition) { -- if (!org.bukkit.craftbukkit.event.CraftEventFactory.callProjectileHitEvent(this, movingobjectposition)) return; // CraftBukkit - Call event // Paper - make cancellable -+ // Tuinity - proper cancellation requires moving this into the caller (see method overrides) - TODO this unfortunately means we need to manually inspect each call on update - MovingObjectPosition.EnumMovingObjectType movingobjectposition_enummovingobjecttype = movingobjectposition.getType(); - - if (movingobjectposition_enummovingobjecttype == MovingObjectPosition.EnumMovingObjectType.ENTITY) { diff --git a/src/main/java/net/minecraft/world/item/ItemEnderEye.java b/src/main/java/net/minecraft/world/item/ItemEnderEye.java index f74685a7cdb905af8e9712ca8597e7ed3dc8b120..feedbd8c97c1b1c56eaff359e6a940696d416906 100644 --- a/src/main/java/net/minecraft/world/item/ItemEnderEye.java @@ -17750,7 +17631,7 @@ index 15096a9c2719b8b4c099f62d0a1c808e56b63a8e..9bbd175f7e20591bbefdbddcb5e998e7 } } diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBase.java b/src/main/java/net/minecraft/world/level/block/state/BlockBase.java -index 3fdafc0ff0c4148ec844dbdc1455d17cdcb4a75a..6124b56d935386784371422960a07d518f848cf3 100644 +index 0d26250887f80d0c250bcd6bc7de303362427d3e..1d82f719440c95765c01a588f4785d630b8b527a 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBase.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBase.java @@ -348,21 +348,23 @@ public abstract class BlockBase { @@ -17875,7 +17756,7 @@ index 3fdafc0ff0c4148ec844dbdc1455d17cdcb4a75a..6124b56d935386784371422960a07d51 } public final boolean e() { // Paper -@@ -728,9 +784,9 @@ public abstract class BlockBase { +@@ -729,9 +785,9 @@ public abstract class BlockBase { private static final int f = EnumBlockSupport.values().length; protected final boolean a; private final boolean g; @@ -18727,7 +18608,7 @@ index 0fec15e141051863dbf51a2b3e1ace5028cd2fc1..d7757e60402be9939fc2d90ad79b2bb7 public String toString() { diff --git a/src/main/java/net/minecraft/world/level/chunk/ProtoChunk.java b/src/main/java/net/minecraft/world/level/chunk/ProtoChunk.java -index 7bfac4e852c4a6697435647dab173913df6034e9..c90f530b9cf556da950d8f61156159941815bd99 100644 +index 7bfac4e852c4a6697435647dab173913df6034e9..1658f0bb379653c205d08c771a7c23242d50f66d 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ProtoChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/ProtoChunk.java @@ -54,7 +54,7 @@ public class ProtoChunk implements IChunkAccess { @@ -18739,7 +18620,7 @@ index 7bfac4e852c4a6697435647dab173913df6034e9..c90f530b9cf556da950d8f6115615994 private final ShortList[] m; private final Map, StructureStart> n; private final Map, LongSet> o; -@@ -66,6 +66,73 @@ public class ProtoChunk implements IChunkAccess { +@@ -66,6 +66,53 @@ public class ProtoChunk implements IChunkAccess { private volatile boolean u; final World world; // Paper - Anti-Xray - Add world // Paper - private -> default @@ -18788,55 +18669,17 @@ index 7bfac4e852c4a6697435647dab173913df6034e9..c90f530b9cf556da950d8f6115615994 + public void setBlockEmptinessMap(boolean[] emptinessMap) { + this.blockEmptinessMap = emptinessMap; + } -+ -+ private void checkLightSourceLock() { -+ if (!this.lightSourcesLocked.get()) { -+ return; -+ } -+ -+ IllegalStateException thr = new IllegalStateException("Concurrent access of light sources by thread '" + Thread.currentThread().getName() + "'"); -+ LOGGER.fatal(thr.getMessage(), thr); -+ throw thr; -+ } -+ -+ public void lockLightSources() { -+ if (this.lightSourcesLocked.getAndSet(true)) { -+ throw new IllegalStateException("Light sources is already locked!"); -+ } -+ } -+ -+ public void releaseLightSources() { -+ this.lightSourcesLocked.set(false); -+ } + // Tuinity end - rewrite light engine + // Paper start - Anti-Xray - Add world @Deprecated public ProtoChunk(ChunkCoordIntPair chunkcoordintpair, ChunkConverter chunkconverter) { this(chunkcoordintpair, chunkconverter, null); } // Notice for updates: Please make sure this constructor isn't used anywhere public ProtoChunk(ChunkCoordIntPair chunkcoordintpair, ChunkConverter chunkconverter, World world) { -@@ -170,7 +237,9 @@ public class ProtoChunk implements IChunkAccess { - } - - public void k(BlockPosition blockposition) { -+ this.checkLightSourceLock(); // Tuinity - make sure we don't access this concurrently - this.l.add(blockposition.immutableCopy()); -+ this.checkLightSourceLock(); // Tuinity - make sure we don't access this concurrently - } - - @Nullable -@@ -185,26 +254,25 @@ public class ProtoChunk implements IChunkAccess { - return iblockdata; - } else { - if (iblockdata.f() > 0) { -+ this.checkLightSourceLock(); // Tuinity - make sure we don't access this concurrently - this.l.add(new BlockPosition((i & 15) + this.getPos().d(), j, (k & 15) + this.getPos().e())); -+ this.checkLightSourceLock(); // Tuinity - make sure we don't access this concurrently - } - +@@ -191,20 +238,17 @@ public class ProtoChunk implements IChunkAccess { ChunkSection chunksection = this.a(j >> 4); IBlockData iblockdata1 = chunksection.setType(i & 15, j & 15, k & 15, iblockdata); - if (this.g.b(ChunkStatus.FEATURES) && iblockdata != iblockdata1 && (iblockdata.b((IBlockAccess) this, blockposition) != iblockdata1.b((IBlockAccess) this, blockposition) || iblockdata.f() != iblockdata1.f() || iblockdata.e() || iblockdata1.e())) { -+ if ((com.tuinity.tuinity.config.TuinityConfig.useNewLightEngine ? (this.g.b(ChunkStatus.LIGHT) && this.isLit()) : (this.g.b(ChunkStatus.FEATURES))) && iblockdata != iblockdata1 && (iblockdata.b((IBlockAccess) this, blockposition) != iblockdata1.b((IBlockAccess) this, blockposition) || iblockdata.f() != iblockdata1.f() || iblockdata.e() || iblockdata1.e())) { // Tuinity - move block updates to only happen after lighting occurs ++ if ((com.tuinity.tuinity.config.TuinityConfig.useNewLightEngine ? (this.g.b(ChunkStatus.LIGHT)) : (this.g.b(ChunkStatus.FEATURES))) && iblockdata != iblockdata1 && (iblockdata.b((IBlockAccess) this, blockposition) != iblockdata1.b((IBlockAccess) this, blockposition) || iblockdata.f() != iblockdata1.f() || iblockdata.e() || iblockdata1.e())) { // Tuinity - move block updates to only happen after lighting occurs (or during, thanks chunk system) LightEngine lightengine = this.e(); lightengine.a(blockposition); @@ -18846,17 +18689,17 @@ index 7bfac4e852c4a6697435647dab173913df6034e9..c90f530b9cf556da950d8f6115615994 + HeightMap.Type[] enumset = this.getChunkStatus().heightMaps; // Tuinity - reduce iterator creation EnumSet enumset1 = null; - Iterator iterator = enumset.iterator(); +- +- HeightMap.Type heightmap_type; + // Tuinity - reduce iterator creation -- HeightMap.Type heightmap_type; -- - while (iterator.hasNext()) { - heightmap_type = (HeightMap.Type) iterator.next(); + for (HeightMap.Type heightmap_type : enumset) { // Tuinity - reduce iterator creation HeightMap heightmap = (HeightMap) this.f.get(heightmap_type); if (heightmap == null) { -@@ -220,10 +288,9 @@ public class ProtoChunk implements IChunkAccess { +@@ -220,10 +264,9 @@ public class ProtoChunk implements IChunkAccess { HeightMap.a(this, enumset1); } @@ -20820,7 +20663,7 @@ index e50731723d266ba65b2163df2e935afb8b013a93..a6736d15282715d920bab85eb92074cd } value.append("},"); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 03b8d67a5f0088c0254b2099f27e8dcae32a6221..fd3333fef4112e6469ccd316ba2c82926c04e5db 100644 +index 6cc8eb04f42592aa12f76bb4a0a863ea509741b2..55f2834373ccc7362836b4fab4ae2f069f31fd63 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -232,7 +232,7 @@ import javax.annotation.Nullable; // Paper @@ -20848,7 +20691,7 @@ index 03b8d67a5f0088c0254b2099f27e8dcae32a6221..fd3333fef4112e6469ccd316ba2c8292 } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -1910,7 +1912,10 @@ public final class CraftServer implements Server { +@@ -1917,7 +1919,10 @@ public final class CraftServer implements Server { @Override public boolean isPrimaryThread() { @@ -20860,7 +20703,7 @@ index 03b8d67a5f0088c0254b2099f27e8dcae32a6221..fd3333fef4112e6469ccd316ba2c8292 } // Paper start -@@ -2344,6 +2349,14 @@ public final class CraftServer implements Server { +@@ -2351,6 +2356,14 @@ public final class CraftServer implements Server { return com.destroystokyo.paper.PaperConfig.config; } @@ -21125,10 +20968,10 @@ index 295ffab08672d77d88aca368cb5b56f80bc4f1b5..dee4d12a49468d38f077784b219199f0 @Override public boolean teleport(Location location) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index e5549439b3d4d608cf37dd33b6c8c9e10dfe9328..45e786565ac988abadffda2e7ba3ff1e2880b786 100644 +index f150ba393bc62e52840e6ebbf3d7696b670ff7e4..51d68fc13fcb8c30c10e21063f4d658f403df8ce 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2257,15 +2257,70 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2262,15 +2262,70 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } } diff --git a/patches/server/0002-Airplane-Server-Changes.patch b/patches/server/0002-Airplane-Server-Changes.patch index d08455cb93..388ffa7a54 100644 --- a/patches/server/0002-Airplane-Server-Changes.patch +++ b/patches/server/0002-Airplane-Server-Changes.patch @@ -1613,10 +1613,10 @@ index 7918d830a4aef09c9f517284e83a9376299116ad..0a40df2151bd388b6633a6f50b14f1f4 return enumdirection; })); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 2767a9369ddc922f1d9c7cb6c7acc8270545535a..2bb00a42492b08036e984d3e1d9a564d4b4226c2 100644 +index 8adbb9a77ff304f14ad3defa0f4f7ec25b0d2a2a..dd0daf3138a38d0c8a399e6cb54bbc58af47f710 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1646,7 +1646,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant -Date: Fri, 12 Feb 2021 16:29:41 -0600 -Subject: [PATCH] Multithreaded entity tracking - -Adds a configuration option to run the tracker on multiple threads. -This will generally be faster than the single threaded approach, -unless you don't have a lot of entities/players. - -Airplane -Copyright (C) 2020 Technove LLC - -This program is free software: you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation, either version 3 of the License, or -(at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program. If not, see . - -diff --git a/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java b/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java -index be408aebbccbda46e8aa82ef337574137cfa0096..739839314fd8a88b5fca8b9678e1df07a166c35d 100644 ---- a/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java -+++ b/src/main/java/com/tuinity/tuinity/util/maplist/IteratorSafeOrderedReferenceSet.java -@@ -16,11 +16,11 @@ public final class IteratorSafeOrderedReferenceSet { - - /* list impl */ - protected E[] listElements; -- protected int listSize; -+ protected int listSize; public int getListSize() { return this.listSize; } // Airplane - getter - - protected final double maxFragFactor; - -- protected int iteratorCount; -+ public int iteratorCount; // Airplane - public for debug - - private final boolean threadRestricted; - -diff --git a/src/main/java/gg/airplane/AirplaneConfig.java b/src/main/java/gg/airplane/AirplaneConfig.java -index 65adf3ceda012c8cfdea675c40e2bb27d34ebac7..bb87d8792fa6f4b888dd562d63353fe90d2bc588 100644 ---- a/src/main/java/gg/airplane/AirplaneConfig.java -+++ b/src/main/java/gg/airplane/AirplaneConfig.java -@@ -120,4 +120,17 @@ public class AirplaneConfig { - } - - -+ public static boolean multithreadedEntityTracker = false; -+ public static boolean entityTrackerAsyncPackets = false; -+ -+ private static void entityTracker() { -+ config.setComment("tracker", "Options to improve the performance of the entity tracker"); -+ -+ multithreadedEntityTracker = config.getBoolean("tracker.multithreaded", multithreadedEntityTracker, -+ "This enables the multithreading of the tracker."); -+ entityTrackerAsyncPackets = config.getBoolean("tracker.unsafe-async-packets", entityTrackerAsyncPackets, -+ "This option can break plugins that assume packets from the", -+ "entity tracker will be sent sync."); -+ } -+ - } -diff --git a/src/main/java/gg/airplane/commands/AirplaneCommands.java b/src/main/java/gg/airplane/commands/AirplaneCommands.java -index 66b20250a26d005427601b1cdee43bdd9eba70cc..f84e26b2d8ab9a9b2d9e92e18002483127121135 100644 ---- a/src/main/java/gg/airplane/commands/AirplaneCommands.java -+++ b/src/main/java/gg/airplane/commands/AirplaneCommands.java -@@ -2,11 +2,13 @@ package gg.airplane.commands; - - import gg.airplane.AirplaneCommand; - import gg.airplane.flare.FlareCommand; -+import gg.airplane.structs.TrackQueue; - import net.minecraft.server.MinecraftServer; - - public class AirplaneCommands { - public static void init() { - MinecraftServer.getServer().server.getCommandMap().register("airplane", "Airplane", new AirplaneCommand()); - MinecraftServer.getServer().server.getCommandMap().register("flare", "Airplane", new FlareCommand()); -+ TrackQueue.TrackQueueDebugCommand.register(); - } - } -diff --git a/src/main/java/gg/airplane/structs/TrackQueue.java b/src/main/java/gg/airplane/structs/TrackQueue.java -new file mode 100644 -index 0000000000000000000000000000000000000000..4419fbe94041f4b8a0ea848880798289d063b8e2 ---- /dev/null -+++ b/src/main/java/gg/airplane/structs/TrackQueue.java -@@ -0,0 +1,109 @@ -+package gg.airplane.structs; -+ -+import com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet; -+import net.minecraft.server.level.WorldServer; -+import net.minecraft.world.level.chunk.Chunk; -+import net.minecraft.server.MinecraftServer; -+import org.apache.logging.log4j.Level; -+import org.bukkit.command.Command; -+import org.bukkit.command.CommandSender; -+ -+import java.util.concurrent.ConcurrentLinkedQueue; -+import java.util.concurrent.ForkJoinPool; -+import java.util.concurrent.atomic.AtomicInteger; -+ -+/** -+ * Helper class to handle processing a track queue. -+ */ -+public class TrackQueue { -+ -+ public static class TrackQueueDebugCommand extends Command { -+ protected TrackQueueDebugCommand() { -+ super("trackqueuedebug"); -+ } -+ -+ public static void register() { -+ MinecraftServer.getServer().server.getCommandMap().register("trackqueuedebug", "Airplane", new TrackQueueDebugCommand()); -+ } -+ -+ @Override -+ public boolean execute(CommandSender sender, String commandLabel, String[] args) { -+ if (!sender.isOp()) { -+ return false; -+ } -+ for (WorldServer world : MinecraftServer.getServer().getWorlds()) { -+ IteratorSafeOrderedReferenceSet chunks = world.getChunkProvider().entityTickingChunks; -+ sender.sendMessage(world.getWorld().getName() + ": " + chunks.size() + " / " + chunks.getListSize() + " (iterators: " + chunks.iteratorCount + ")"); -+ } -+ return true; -+ } -+ } -+ -+ private final IteratorSafeOrderedReferenceSet chunks; -+ private final ForkJoinPool pool = new ForkJoinPool(Math.max(4, Runtime.getRuntime().availableProcessors() >> 2)); -+ private final AtomicInteger taskIndex = new AtomicInteger(); -+ -+ private final ConcurrentLinkedQueue mainThreadTasks; -+ -+ public TrackQueue(IteratorSafeOrderedReferenceSet chunks, ConcurrentLinkedQueue mainThreadTasks) { -+ this.chunks = chunks; -+ this.mainThreadTasks = mainThreadTasks; -+ } -+ -+ public void start() { -+ int iterator = this.chunks.createRawIterator(); -+ if (iterator == -1) { -+ return; -+ } -+ try { -+ this.taskIndex.set(iterator); -+ -+ for (int i = 0; i < this.pool.getParallelism(); i++) { -+ this.pool.execute(this::run); -+ } -+ -+ while (this.taskIndex.get() < this.chunks.getListSize()) { -+ this.runMainThreadTasks(); -+ this.handleTask(); // assist -+ } -+ this.runMainThreadTasks(); // finish tasks -+ } finally { -+ this.chunks.finishRawIterator(); -+ } -+ } -+ -+ private void runMainThreadTasks() { -+ Runnable task; -+ while ((task = this.mainThreadTasks.poll()) != null) { -+ try { -+ task.run(); -+ } catch (Throwable t) { -+ MinecraftServer.LOGGER.log(Level.WARN, "Tasks failed while ticking track queue", t); -+ } -+ } -+ -+ } -+ -+ private void run() { -+ while (handleTask()); -+ } -+ -+ private boolean handleTask() { -+ int index; -+ while ((index = this.taskIndex.getAndIncrement()) < this.chunks.getListSize()) { -+ Chunk chunk = this.chunks.rawGet(index); -+ if (chunk != null) { -+ try { -+ chunk.entityTracker.run(); -+ } catch (Throwable t) { -+ MinecraftServer.LOGGER.log(Level.WARN, "Ticking tracker failed", t); -+ } -+ -+ return true; -+ } -+ } -+ -+ return false; -+ } -+ -+} -diff --git a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -index 207a9c3928aad7c6e89a120b54d87e003ebd232c..424cd048f905cd0ed3f7a4545a26ffde8da1f91f 100644 ---- a/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -+++ b/src/main/java/net/minecraft/server/level/ChunkProviderServer.java -@@ -388,7 +388,7 @@ public class ChunkProviderServer extends IChunkProvider { - } - - final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet tickingChunks = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(4096, 0.75f, 4096, 0.15, true); -- final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet entityTickingChunks = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(4096, 0.75f, 4096, 0.15, true); -+ public final com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet entityTickingChunks = new com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet<>(4096, 0.75f, 4096, 0.15, true); // Airplane - public for debug - // Tuinity end - - public ChunkProviderServer(WorldServer worldserver, Convertable.ConversionSession convertable_conversionsession, DataFixer datafixer, DefinedStructureManager definedstructuremanager, Executor executor, ChunkGenerator chunkgenerator, int i, boolean flag, WorldLoadListener worldloadlistener, Supplier supplier) { -diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index fb61b6ac167b34486282a24e598020fb96081f28..b2e21e7034ad83a4ba1c99f860be5a0f5ee6a75f 100644 ---- a/src/main/java/net/minecraft/server/level/EntityPlayer.java -+++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -182,7 +182,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { - public NetworkManager networkManager; // Paper - public final MinecraftServer server; - public final PlayerInteractManager playerInteractManager; -- public final Deque removeQueue = new ArrayDeque<>(); // Paper -+ public final Deque removeQueue = new java.util.concurrent.ConcurrentLinkedDeque<>(); // Paper // Airplane concurrent deque - private final AdvancementDataPlayer advancementDataPlayer; - private final ServerStatisticManager serverStatisticManager; - private float lastHealthScored = Float.MIN_VALUE; -diff --git a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java -index 67ca28463f5add7c18f7f16b918c3f36f8feeeda..37e64e24ca3a90370cdf12e5ff9cd1fceede796b 100644 ---- a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java -+++ b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java -@@ -75,6 +75,10 @@ public class EntityTrackerEntry { - * Requested in https://github.com/PaperMC/Paper/issues/1537 to allow intercepting packets - */ - public void sendPlayerPacket(EntityPlayer player, Packet packet) { -+ if (!gg.airplane.AirplaneConfig.entityTrackerAsyncPackets && !org.bukkit.Bukkit.isPrimaryThread()) { -+ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> sendPlayerPacket(player, packet)); -+ return; -+ } - player.playerConnection.sendPacket(packet); - } - -@@ -103,7 +107,7 @@ public class EntityTrackerEntry { - - public final void tick() { this.a(); } // Paper - OBFHELPER - public void a() { -- com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Tracker update"); // Tuinity -+ //com.tuinity.tuinity.util.TickThread.softEnsureTickThread("Tracker update"); // Tuinity // Airplane - allow multithreaded - List list = this.tracker.passengers; // Paper - do not copy list - - if (!list.equals(this.p)) { -@@ -116,6 +120,8 @@ public class EntityTrackerEntry { - ItemStack itemstack = entityitemframe.getItem(); - - if (this.tickCounter % 10 == 0 && itemstack.getItem() instanceof ItemWorldMap) { // CraftBukkit - Moved this.tickCounter % 10 logic here so item frames do not enter the other blocks -+ // Airplane start - process maps on main -+ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> { - WorldMap worldmap = ItemWorldMap.getSavedMap(itemstack, this.b); - Iterator iterator = this.trackedPlayers.iterator(); // CraftBukkit - -@@ -129,6 +135,8 @@ public class EntityTrackerEntry { - entityplayer.playerConnection.sendPacket(packet); - } - } -+ }); -+ // Airplane end - } - - this.c(); -@@ -263,18 +271,25 @@ public class EntityTrackerEntry { - // CraftBukkit start - Create PlayerVelocity event - boolean cancelled = false; - -- if (this.tracker instanceof EntityPlayer) { -+ if (this.tracker instanceof EntityPlayer && PlayerVelocityEvent.getHandlerList().getRegisteredListeners().length > 0) { // Airplane - ensure there's listeners -+ // Airplane start - run on main thread -+ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> { - Player player = (Player) this.tracker.getBukkitEntity(); - org.bukkit.util.Vector velocity = player.getVelocity(); - - PlayerVelocityEvent event = new PlayerVelocityEvent(player, velocity.clone()); - this.tracker.world.getServer().getPluginManager().callEvent(event); - -- if (event.isCancelled()) { -- cancelled = true; -- } else if (!velocity.equals(event.getVelocity())) { -+ if (!event.isCancelled() && !velocity.equals(event.getVelocity())) { - player.setVelocity(event.getVelocity()); - } -+ if (!event.isCancelled()) { -+ this.broadcastIncludingSelf(new PacketPlayOutEntityVelocity(this.tracker)); // duplicate from !cancelled below -+ } -+ -+ }); -+ cancelled = true; // don't broadcast until the event has finished -+ // Airplane end - } - - if (!cancelled) { -@@ -358,7 +373,9 @@ public class EntityTrackerEntry { - if (!list.isEmpty()) { - consumer.accept(new PacketPlayOutEntityEquipment(this.tracker.getId(), list)); - } -+ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> { // Airplane - ((EntityLiving) this.tracker).updateEquipment(); // CraftBukkit - SPIGOT-3789: sync again immediately after sending -+ }); // Airplane - } - - // CraftBukkit start - Fix for nonsensical head yaw -@@ -436,6 +453,10 @@ public class EntityTrackerEntry { - // Paper end - - private void broadcastIncludingSelf(Packet packet) { -+ if (!gg.airplane.AirplaneConfig.entityTrackerAsyncPackets && !org.bukkit.Bukkit.isPrimaryThread()) { -+ this.b.chunkProvider.playerChunkMap.trackerEnsureMain(() -> broadcastIncludingSelf(packet)); -+ return; -+ } - this.f.accept(packet); - if (this.tracker instanceof EntityPlayer) { - ((EntityPlayer) this.tracker).playerConnection.sendPacket(packet); -diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 914c7a1b18151f29183cfe9474313ce18e7c4ae2..737851cde7752e7cccf226f1868a38d6411bfb31 100644 ---- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -+++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -769,6 +769,11 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { - return this.updatingChunks.getVisibleAsync(i); - // Tuinity end - Don't copy - } -+ // Airplane start - since neither map can be updated during tracker tick, it's safe to allow direct retrieval here -+ private PlayerChunk trackerGetVisibleChunk(long i) { -+ return this.updatingChunks.getVisibleAsync(i); -+ } -+ // Airplane end - - protected final IntSupplier getPrioritySupplier(long i) { return c(i); } // Paper - OBFHELPER - protected IntSupplier c(long i) { -@@ -2164,10 +2169,30 @@ public class PlayerChunkMap extends IChunkLoader implements PlayerChunk.d { - entity.tracker = null; // Paper - We're no longer tracked - } - -+ // Airplane start - tools to ensure main thread -+ private final java.util.concurrent.ConcurrentLinkedQueue trackerMainQueue = new java.util.concurrent.ConcurrentLinkedQueue<>(); -+ private gg.airplane.structs.TrackQueue trackQueue; -+ -+ void trackerEnsureMain(Runnable runnable) { -+ if (this.world.serverThread == Thread.currentThread()) { -+ runnable.run(); -+ } else { -+ this.trackerMainQueue.add(runnable); -+ } -+ } -+ // Airplane end -+ - // Paper start - optimised tracker - private final void processTrackQueue() { - this.world.timings.tracker1.startTiming(); - try { -+ // Airplane start - multithreaded tracker -+ if (this.trackQueue == null) this.trackQueue = new gg.airplane.structs.TrackQueue(this.world.getChunkProvider().entityTickingChunks, trackerMainQueue); -+ if (gg.airplane.AirplaneConfig.multithreadedEntityTracker) { -+ this.trackQueue.start(); -+ return; -+ } -+ // Airplane end - com.tuinity.tuinity.util.maplist.IteratorSafeOrderedReferenceSet.Iterator iterator = this.world.getChunkProvider().entityTickingChunks.iterator(); - try { - while (iterator.hasNext()) { -@@ -2433,7 +2458,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially - public class EntityTracker { - - final EntityTrackerEntry trackerEntry; // Paper - private -> package private -- private final Entity tracker; -+ public final Entity tracker; // Airplane - public for chunk - private final int trackingDistance; - private SectionPosition e; - // Paper start -@@ -2452,7 +2477,9 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially - // Paper start - use distance map to optimise tracker - com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet lastTrackerCandidates; - -- final void updatePlayers(com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet newTrackerCandidates) { -+ public synchronized final void tickEntry() { this.trackerEntry.tick(); } // Airplane - move entry tick into sync block -+ -+ public synchronized final void updatePlayers(com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet newTrackerCandidates) { // Airplane - com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet oldTrackerCandidates = this.lastTrackerCandidates; - this.lastTrackerCandidates = newTrackerCandidates; - -@@ -2493,7 +2520,13 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially - return this.tracker.getId(); - } - -- public void broadcast(Packet packet) { -+ public synchronized void broadcast(Packet packet) { // Airplane - synchronized for tracked player -+ // Airplane start -+ if (!gg.airplane.AirplaneConfig.entityTrackerAsyncPackets && !org.bukkit.Bukkit.isPrimaryThread()) { -+ trackerEnsureMain(() -> broadcast(packet)); -+ return; -+ } -+ // Airplane end - Iterator iterator = this.trackedPlayers.iterator(); - - while (iterator.hasNext()) { -@@ -2505,6 +2538,12 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially - } - - public void broadcastIncludingSelf(Packet packet) { -+ // Airplane start -+ if (!gg.airplane.AirplaneConfig.entityTrackerAsyncPackets && !org.bukkit.Bukkit.isPrimaryThread()) { -+ trackerEnsureMain(() -> broadcastIncludingSelf(packet)); -+ return; -+ } -+ // Airplane end - this.broadcast(packet); - if (this.tracker instanceof EntityPlayer) { - ((EntityPlayer) this.tracker).playerConnection.sendPacket(packet); -@@ -2531,8 +2570,8 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially - - } - -- public void updatePlayer(EntityPlayer entityplayer) { -- org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot -+ public synchronized void updatePlayer(EntityPlayer entityplayer) { // Airplane - sync for access to map -+ //org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot // Airplane - allow sync for tracker - if (entityplayer != this.tracker) { - // Paper start - remove allocation of Vec3D here - //Vec3D vec3d = entityplayer.getPositionVector().d(this.tracker.getPositionVector()); // MC-155077, SPIGOT-5113 -@@ -2553,7 +2592,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially - */ - int x = this.tracker.chunkX, z = this.tracker.chunkZ; - long chunkcoordintpair = ChunkCoordIntPair.pair(x, z); -- PlayerChunk playerchunk = PlayerChunkMap.this.getVisibleChunk(chunkcoordintpair); -+ PlayerChunk playerchunk = PlayerChunkMap.this.trackerGetVisibleChunk(chunkcoordintpair); // Airplane - - if (playerchunk != null && playerchunk.getSendingChunk() != null && PlayerChunkMap.this.playerChunkManager.isChunkSent(entityplayer, MathHelper.floor(this.tracker.locX()) >> 4, MathHelper.floor(this.tracker.locZ()) >> 4)) { // Paper - no-tick view distance // Tuinity - don't broadcast in chunks the player hasn't received - flag1 = PlayerChunkMap.someDistanceCalculation(x, z, entityplayer, false) <= PlayerChunkMap.this.viewDistance; -diff --git a/src/main/java/net/minecraft/world/level/chunk/Chunk.java b/src/main/java/net/minecraft/world/level/chunk/Chunk.java -index 8f5809756b4fb358f1207c1d61c5cbe6df3fff00..2e8eb0bb8fb4f7ce6b92fe01a81327da30e614ae 100644 ---- a/src/main/java/net/minecraft/world/level/chunk/Chunk.java -+++ b/src/main/java/net/minecraft/world/level/chunk/Chunk.java -@@ -111,6 +111,26 @@ public class Chunk implements IChunkAccess { - } - // Airplane end - -+ // Airplane start - entity tracker runnable -+ // prevents needing to allocate new lambda in processTrackQueue -+ public final Runnable entityTracker = new Runnable() { -+ @Override -+ public void run() { -+ Entity[] entities = Chunk.this.entities.getRawData(); -+ for (int i = 0, len = Chunk.this.entities.size(); i < len; ++i) { -+ Entity entity = entities[i]; -+ if (entity != null) { -+ PlayerChunkMap.EntityTracker tracker = ((WorldServer) Chunk.this.getWorld()).getChunkProvider().playerChunkMap.trackedEntities.get(entity.getId()); -+ if (tracker != null) { -+ tracker.updatePlayers(tracker.tracker.getPlayersInTrackRange()); -+ tracker.tickEntry(); -+ } -+ } -+ } -+ } -+ }; -+ // Airplane end -+ - public Chunk(World world, ChunkCoordIntPair chunkcoordintpair, BiomeStorage biomestorage) { - this(world, chunkcoordintpair, biomestorage, ChunkConverter.a, TickListEmpty.b(), TickListEmpty.b(), 0L, (ChunkSection[]) null, (Consumer) null); - } diff --git a/patches/server/0004-Rebrand.patch b/patches/server/0003-Rebrand.patch similarity index 96% rename from patches/server/0004-Rebrand.patch rename to patches/server/0003-Rebrand.patch index 73b576e1f0..9c23a2a0b4 100644 --- a/patches/server/0004-Rebrand.patch +++ b/patches/server/0003-Rebrand.patch @@ -92,10 +92,10 @@ index 3bc5cd1e53dd7c94b948e7f57f0dc8e073e349b0..87891161f5b06bb8be0e2016b490484e throwable = throwable1; throw throwable1; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 2bb00a42492b08036e984d3e1d9a564d4b4226c2..42c24781d058cee94db8f0fa1a6849b41a0394ff 100644 +index dd0daf3138a38d0c8a399e6cb54bbc58af47f710..53d847b863a957639ff2e58280861316838c0bec 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1646,7 +1646,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant org.spigotmc.SpigotConfig.movedWronglyThreshold && !this.player.isSleeping() && !this.player.playerInteractManager.isCreative() && this.player.playerInteractManager.getGameMode() != EnumGamemode.SPECTATOR) { // Spigot flag1 = true; // Tuinity - diff on change, this should be moved wrongly @@ -120,7 +120,7 @@ index 159c38618d7745ea513ad179b1217d76c2c4897a..15349a7bddcad5a4a6db07a8aa6ae8d0 } this.player.setLocation(d4, d5, d6, f, f1); -@@ -1466,6 +1474,8 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1471,6 +1479,8 @@ public class PlayerConnection implements PacketListenerPlayIn { this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -263,10 +263,10 @@ index 361f7857e461578e90cb71e15027dadaf794cb69..2578a4677d1ee060f687be531e696b7c + } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 45e786565ac988abadffda2e7ba3ff1e2880b786..f4052aaa2235894b996d65c569a083f1a09b59a3 100644 +index 51d68fc13fcb8c30c10e21063f4d658f403df8ce..9e07a1e59bf756101a0aaff9891361cc7486854d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2491,4 +2491,21 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2496,4 +2496,21 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return spigot; } // Spigot end diff --git a/patches/server/0011-Bring-back-server-name.patch b/patches/server/0010-Bring-back-server-name.patch similarity index 91% rename from patches/server/0011-Bring-back-server-name.patch rename to patches/server/0010-Bring-back-server-name.patch index d68487a2c4..6d195f551b 100644 --- a/patches/server/0011-Bring-back-server-name.patch +++ b/patches/server/0010-Bring-back-server-name.patch @@ -17,10 +17,10 @@ index 1fab9b9c7d41a0d2a551096c2c15f741a887fa2d..f33309f4c1ad92960d0634f3f5b8105c public final boolean spawnNpcs = this.getBoolean("spawn-npcs", true); public final boolean pvp = this.getBoolean("pvp", true); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 3e0b92259ad00541a8da595a918275c1a5b2bc39..f200827a22acc6f6dd454b4c309a5b1e149f9c46 100644 +index de05b0abd9fcd1de0955b493ba0a684d9a3dbc6c..bfc575546f166e5d94859eb859ecb92c695acc1d 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2525,4 +2525,11 @@ public final class CraftServer implements Server { +@@ -2532,4 +2532,11 @@ public final class CraftServer implements Server { return mobGoals; } // Paper end diff --git a/patches/server/0012-Configurable-server-mod-name.patch b/patches/server/0011-Configurable-server-mod-name.patch similarity index 91% rename from patches/server/0012-Configurable-server-mod-name.patch rename to patches/server/0011-Configurable-server-mod-name.patch index 753eaf6953..10b916754d 100644 --- a/patches/server/0012-Configurable-server-mod-name.patch +++ b/patches/server/0011-Configurable-server-mod-name.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable server mod name diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 42c24781d058cee94db8f0fa1a6849b41a0394ff..6121ef7fcbadb50d05fad4270556e825f636f4d8 100644 +index 53d847b863a957639ff2e58280861316838c0bec..4abb1d1dcbcc8351a52641eee2629335c3978551 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1646,7 +1646,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant d; diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java -index 6966b9d1ce674232d3f867798fa58bd0933ff69e..1cc473eb4d346b1b498a7b170973fb44d8b8aea6 100644 +index 347c23d4b7d47198f214c3f95354e8abb660b191..4ec0e93d93936080d876ffa017ebe181d2896b22 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java -@@ -396,4 +396,18 @@ public final class CraftItemFactory implements ItemFactory { +@@ -401,4 +401,18 @@ public final class CraftItemFactory implements ItemFactory { new net.md_5.bungee.api.chat.TextComponent(customName)); } // Paper end diff --git a/patches/server/0016-PlayerSetSpawnerTypeWithEggEvent.patch b/patches/server/0015-PlayerSetSpawnerTypeWithEggEvent.patch similarity index 100% rename from patches/server/0016-PlayerSetSpawnerTypeWithEggEvent.patch rename to patches/server/0015-PlayerSetSpawnerTypeWithEggEvent.patch diff --git a/patches/server/0017-EMC-MonsterEggSpawnEvent.patch b/patches/server/0016-EMC-MonsterEggSpawnEvent.patch similarity index 100% rename from patches/server/0017-EMC-MonsterEggSpawnEvent.patch rename to patches/server/0016-EMC-MonsterEggSpawnEvent.patch diff --git a/patches/server/0018-Player-invulnerabilities.patch b/patches/server/0017-Player-invulnerabilities.patch similarity index 91% rename from patches/server/0018-Player-invulnerabilities.patch rename to patches/server/0017-Player-invulnerabilities.patch index 7f93ac5338..27e0f97c9a 100644 --- a/patches/server/0018-Player-invulnerabilities.patch +++ b/patches/server/0017-Player-invulnerabilities.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Player invulnerabilities diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 598b30244e74a56d62dc4ace5362225447860a0a..f59d7e245aa3768004c7f82837a7482260a53406 100644 +index c42a2813b40152079786dde33231d945f3144580..6e3a3a50e01c41b40451bce05015714b5a7fe1e3 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java @@ -284,6 +284,8 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -67,10 +67,10 @@ index 598b30244e74a56d62dc4ace5362225447860a0a..f59d7e245aa3768004c7f82837a74822 public Scoreboard getScoreboard() { return getBukkitEntity().getScoreboard().getHandle(); diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 15349a7bddcad5a4a6db07a8aa6ae8d06163b1f6..37663436c1ffed4552cdcdac7a5c09fe9b632fee 100644 +index 85964e7fe2cc96ad3b967dadd9ee5d095ee60e2a..71ab9f136144aa7b06494144671b41e2af85de48 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java -@@ -1896,6 +1896,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1901,6 +1901,7 @@ public class PlayerConnection implements PacketListenerPlayIn { PlayerConnectionUtils.ensureMainThread(packetplayinresourcepackstatus, this, this.player.getWorldServer()); // Paper start PlayerResourcePackStatusEvent.Status packStatus = PlayerResourcePackStatusEvent.Status.values()[packetplayinresourcepackstatus.status.ordinal()]; @@ -79,10 +79,10 @@ index 15349a7bddcad5a4a6db07a8aa6ae8d06163b1f6..37663436c1ffed4552cdcdac7a5c09fe this.server.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(getPlayer(), packStatus)); // Paper end diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index c705bf1e651a764d56b87ebc5a86a938d8bd34bb..9360d35581c6961a768973cc31341381ee26e234 100644 +index 76ba1e038fb68eafa2c2039fa1cdd74d060dcf9f..2e5afd00bc7a2a58fd66c3bf1b38293762408662 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1009,6 +1009,8 @@ public abstract class PlayerList { +@@ -1015,6 +1015,8 @@ public abstract class PlayerList { } // Paper end @@ -108,10 +108,10 @@ index 2578a4677d1ee060f687be531e696b7c7be89e84..c441fcea9b2b5a77b801c8a69541cf42 + } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index f4052aaa2235894b996d65c569a083f1a09b59a3..1ff48eae5e5b732fbd1e720c55e08a30669bebfa 100644 +index 9e07a1e59bf756101a0aaff9891361cc7486854d..1c5bcc17a702f5af514ce4db7f5d096d5f449dd6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2507,5 +2507,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2512,5 +2512,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public void resetIdleTimer() { getHandle().resetIdleTimer(); } diff --git a/patches/server/0019-Anvil-API.patch b/patches/server/0018-Anvil-API.patch similarity index 100% rename from patches/server/0019-Anvil-API.patch rename to patches/server/0018-Anvil-API.patch diff --git a/patches/server/0020-Configurable-villager-brain-ticks.patch b/patches/server/0019-Configurable-villager-brain-ticks.patch similarity index 97% rename from patches/server/0020-Configurable-villager-brain-ticks.patch rename to patches/server/0019-Configurable-villager-brain-ticks.patch index ec74523868..017e483867 100644 --- a/patches/server/0020-Configurable-villager-brain-ticks.patch +++ b/patches/server/0019-Configurable-villager-brain-ticks.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable villager brain ticks diff --git a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java -index d8028675fc82883d716bcfb44431ca6ac7dfda36..5539c4cbea46398e92ab6ec56bb9b821e5f01e02 100644 +index d74ba20808d42acd10c3861b5314afd45fddb438..4c2b01774403211bf9af8b5c9f75bfa1b30e1746 100644 --- a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java +++ b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java @@ -127,6 +127,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation diff --git a/patches/server/0021-Alternative-Keepalive-Handling.patch b/patches/server/0020-Alternative-Keepalive-Handling.patch similarity index 97% rename from patches/server/0021-Alternative-Keepalive-Handling.patch rename to patches/server/0020-Alternative-Keepalive-Handling.patch index 210c1d15c2..f288707095 100644 --- a/patches/server/0021-Alternative-Keepalive-Handling.patch +++ b/patches/server/0020-Alternative-Keepalive-Handling.patch @@ -17,7 +17,7 @@ index b4c37287362907b8507d156b978ba5b9d961bb7b..9e6e6636539702507abb78515e002819 return this.a; } diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 37663436c1ffed4552cdcdac7a5c09fe9b632fee..f5ada346a11ac3becda4b87416beebd680ca16fa 100644 +index 71ab9f136144aa7b06494144671b41e2af85de48..a0a476d55afdf5ed9850368e99ab25af019075a8 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java @@ -233,6 +233,7 @@ public class PlayerConnection implements PacketListenerPlayIn { @@ -50,7 +50,7 @@ index 37663436c1ffed4552cdcdac7a5c09fe9b632fee..f5ada346a11ac3becda4b87416beebd6 if (this.isPendingPing()) { if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected PlayerConnection.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getName()); // more info -@@ -3079,6 +3095,16 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -3084,6 +3100,16 @@ public class PlayerConnection implements PacketListenerPlayIn { @Override public void a(PacketPlayInKeepAlive packetplayinkeepalive) { diff --git a/patches/server/0022-Silk-touch-spawners.patch b/patches/server/0021-Silk-touch-spawners.patch similarity index 100% rename from patches/server/0022-Silk-touch-spawners.patch rename to patches/server/0021-Silk-touch-spawners.patch diff --git a/patches/server/0023-MC-168772-Fix-Add-turtle-egg-block-options.patch b/patches/server/0022-MC-168772-Fix-Add-turtle-egg-block-options.patch similarity index 100% rename from patches/server/0023-MC-168772-Fix-Add-turtle-egg-block-options.patch rename to patches/server/0022-MC-168772-Fix-Add-turtle-egg-block-options.patch diff --git a/patches/server/0024-Fix-vanilla-command-permission-handler.patch b/patches/server/0023-Fix-vanilla-command-permission-handler.patch similarity index 100% rename from patches/server/0024-Fix-vanilla-command-permission-handler.patch rename to patches/server/0023-Fix-vanilla-command-permission-handler.patch diff --git a/patches/server/0025-Logger-settings-suppressing-pointless-logs.patch b/patches/server/0024-Logger-settings-suppressing-pointless-logs.patch similarity index 95% rename from patches/server/0025-Logger-settings-suppressing-pointless-logs.patch rename to patches/server/0024-Logger-settings-suppressing-pointless-logs.patch index b357cfb29a..6f9d05321a 100644 --- a/patches/server/0025-Logger-settings-suppressing-pointless-logs.patch +++ b/patches/server/0024-Logger-settings-suppressing-pointless-logs.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Logger settings (suppressing pointless logs) diff --git a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java -index 7a8a1960882e291c46301d07da3e1c5415516893..59d781b5e61c5d2c004bc92300d8d42e81821308 100644 +index dfdbc028f68ced197ad179248ed3b1e9d70ba057..a1ee1066108985a95abddb03ff447b5a14f4f85f 100644 --- a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java +++ b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java -@@ -189,6 +189,7 @@ public class AdvancementDataPlayer { +@@ -190,6 +190,7 @@ public class AdvancementDataPlayer { if (advancement == null) { // CraftBukkit start if (entry.getKey().getNamespace().equals("minecraft")) { diff --git a/patches/server/0026-Disable-outdated-build-check.patch b/patches/server/0025-Disable-outdated-build-check.patch similarity index 100% rename from patches/server/0026-Disable-outdated-build-check.patch rename to patches/server/0025-Disable-outdated-build-check.patch diff --git a/patches/server/0027-Giants-AI-settings.patch b/patches/server/0026-Giants-AI-settings.patch similarity index 100% rename from patches/server/0027-Giants-AI-settings.patch rename to patches/server/0026-Giants-AI-settings.patch diff --git a/patches/server/0028-Illusioners-AI-settings.patch b/patches/server/0027-Illusioners-AI-settings.patch similarity index 100% rename from patches/server/0028-Illusioners-AI-settings.patch rename to patches/server/0027-Illusioners-AI-settings.patch diff --git a/patches/server/0029-Zombie-horse-naturally-spawn.patch b/patches/server/0028-Zombie-horse-naturally-spawn.patch similarity index 97% rename from patches/server/0029-Zombie-horse-naturally-spawn.patch rename to patches/server/0028-Zombie-horse-naturally-spawn.patch index eff0f785f3..313b581c23 100644 --- a/patches/server/0029-Zombie-horse-naturally-spawn.patch +++ b/patches/server/0028-Zombie-horse-naturally-spawn.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Zombie horse naturally spawn diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 4f1b055dfe38f6a48763f75c1795dcd6dae9d378..06517693aacc22c7507a09c15739e0779dbb82b0 100644 +index c3b9f28fbc153bf366093f6288272fd1c3c25a40..ed81ed932abba0ea72668950f2359c6bc5438c03 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -96,6 +96,7 @@ import net.minecraft.world.entity.ai.village.poi.VillagePlace; diff --git a/patches/server/0030-Charged-creeper-naturally-spawn.patch b/patches/server/0029-Charged-creeper-naturally-spawn.patch similarity index 100% rename from patches/server/0030-Charged-creeper-naturally-spawn.patch rename to patches/server/0029-Charged-creeper-naturally-spawn.patch diff --git a/patches/server/0031-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/server/0030-Rabbit-naturally-spawn-toast-and-killer.patch similarity index 100% rename from patches/server/0031-Rabbit-naturally-spawn-toast-and-killer.patch rename to patches/server/0030-Rabbit-naturally-spawn-toast-and-killer.patch diff --git a/patches/server/0032-Fix-outdated-server-showing-in-ping-before-server-fu.patch b/patches/server/0031-Fix-outdated-server-showing-in-ping-before-server-fu.patch similarity index 100% rename from patches/server/0032-Fix-outdated-server-showing-in-ping-before-server-fu.patch rename to patches/server/0031-Fix-outdated-server-showing-in-ping-before-server-fu.patch diff --git a/patches/server/0033-Make-Iron-Golems-Swim.patch b/patches/server/0032-Make-Iron-Golems-Swim.patch similarity index 100% rename from patches/server/0033-Make-Iron-Golems-Swim.patch rename to patches/server/0032-Make-Iron-Golems-Swim.patch diff --git a/patches/server/0034-Dont-send-useless-entity-packets.patch b/patches/server/0033-Dont-send-useless-entity-packets.patch similarity index 95% rename from patches/server/0034-Dont-send-useless-entity-packets.patch rename to patches/server/0033-Dont-send-useless-entity-packets.patch index 052206a8c8..aaca9df2aa 100644 --- a/patches/server/0034-Dont-send-useless-entity-packets.patch +++ b/patches/server/0033-Dont-send-useless-entity-packets.patch @@ -26,10 +26,10 @@ index 0eed10a6c4e0c7245f219d19ed1e2e5c94364db9..2b54a5f3347f788b751892105f888663 protected boolean h; protected boolean i; diff --git a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java -index 37e64e24ca3a90370cdf12e5ff9cd1fceede796b..f63ec5fa5a1cb34f4809a06a29d01603efb178f1 100644 +index 67ca28463f5add7c18f7f16b918c3f36f8feeeda..53e773c14689967d5b12467bf209eefb05f7a812 100644 --- a/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java +++ b/src/main/java/net/minecraft/server/level/EntityTrackerEntry.java -@@ -208,6 +208,7 @@ public class EntityTrackerEntry { +@@ -200,6 +200,7 @@ public class EntityTrackerEntry { this.o = 0; packet1 = new PacketPlayOutEntityTeleport(this.tracker); } @@ -37,7 +37,7 @@ index 37e64e24ca3a90370cdf12e5ff9cd1fceede796b..f63ec5fa5a1cb34f4809a06a29d01603 } if ((this.e || this.tracker.impulse || this.tracker instanceof EntityLiving && ((EntityLiving) this.tracker).isGliding()) && this.tickCounter > 0) { -@@ -301,6 +302,22 @@ public class EntityTrackerEntry { +@@ -286,6 +287,22 @@ public class EntityTrackerEntry { } diff --git a/patches/server/0035-Tulips-change-fox-type.patch b/patches/server/0034-Tulips-change-fox-type.patch similarity index 98% rename from patches/server/0035-Tulips-change-fox-type.patch rename to patches/server/0034-Tulips-change-fox-type.patch index 4c440e6ed5..0a18c286fe 100644 --- a/patches/server/0035-Tulips-change-fox-type.patch +++ b/patches/server/0034-Tulips-change-fox-type.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Tulips change fox type diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityFox.java b/src/main/java/net/minecraft/world/entity/animal/EntityFox.java -index a3b714a9d63c6bb33a2731fb9293c9d155754b17..cea46348c0876e168376061fbaf258048e9358cb 100644 +index b7fa24318ef43918b6b10ff4ea8acb960527296e..19a9affdaba52d8e7dc1c4c20d5c0d52829f4989 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityFox.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityFox.java @@ -30,6 +30,8 @@ import net.minecraft.tags.Tag; diff --git a/patches/server/0036-Breedable-Polar-Bears.patch b/patches/server/0035-Breedable-Polar-Bears.patch similarity index 100% rename from patches/server/0036-Breedable-Polar-Bears.patch rename to patches/server/0035-Breedable-Polar-Bears.patch diff --git a/patches/server/0037-Chickens-can-retaliate.patch b/patches/server/0036-Chickens-can-retaliate.patch similarity index 100% rename from patches/server/0037-Chickens-can-retaliate.patch rename to patches/server/0036-Chickens-can-retaliate.patch diff --git a/patches/server/0038-Add-option-to-set-armorstand-step-height.patch b/patches/server/0037-Add-option-to-set-armorstand-step-height.patch similarity index 100% rename from patches/server/0038-Add-option-to-set-armorstand-step-height.patch rename to patches/server/0037-Add-option-to-set-armorstand-step-height.patch diff --git a/patches/server/0039-Cat-spawning-options.patch b/patches/server/0038-Cat-spawning-options.patch similarity index 100% rename from patches/server/0039-Cat-spawning-options.patch rename to patches/server/0038-Cat-spawning-options.patch diff --git a/patches/server/0040-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch b/patches/server/0039-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch similarity index 100% rename from patches/server/0040-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch rename to patches/server/0039-MC-147659-Fix-non-black-cats-spawning-in-swamp-huts.patch diff --git a/patches/server/0041-Cows-eat-mushrooms.patch b/patches/server/0040-Cows-eat-mushrooms.patch similarity index 100% rename from patches/server/0041-Cows-eat-mushrooms.patch rename to patches/server/0040-Cows-eat-mushrooms.patch diff --git a/patches/server/0042-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/server/0041-Fix-cow-rotation-when-shearing-mooshroom.patch similarity index 100% rename from patches/server/0042-Fix-cow-rotation-when-shearing-mooshroom.patch rename to patches/server/0041-Fix-cow-rotation-when-shearing-mooshroom.patch diff --git a/patches/server/0043-Pigs-give-saddle-back.patch b/patches/server/0042-Pigs-give-saddle-back.patch similarity index 100% rename from patches/server/0043-Pigs-give-saddle-back.patch rename to patches/server/0042-Pigs-give-saddle-back.patch diff --git a/patches/server/0044-Snowman-drop-and-put-back-pumpkin.patch b/patches/server/0043-Snowman-drop-and-put-back-pumpkin.patch similarity index 100% rename from patches/server/0044-Snowman-drop-and-put-back-pumpkin.patch rename to patches/server/0043-Snowman-drop-and-put-back-pumpkin.patch diff --git a/patches/server/0045-Ender-dragon-always-drop-full-exp.patch b/patches/server/0044-Ender-dragon-always-drop-full-exp.patch similarity index 100% rename from patches/server/0045-Ender-dragon-always-drop-full-exp.patch rename to patches/server/0044-Ender-dragon-always-drop-full-exp.patch diff --git a/patches/server/0046-Signs-editable-on-right-click.patch b/patches/server/0045-Signs-editable-on-right-click.patch similarity index 100% rename from patches/server/0046-Signs-editable-on-right-click.patch rename to patches/server/0045-Signs-editable-on-right-click.patch diff --git a/patches/server/0047-Signs-allow-color-codes.patch b/patches/server/0046-Signs-allow-color-codes.patch similarity index 95% rename from patches/server/0047-Signs-allow-color-codes.patch rename to patches/server/0046-Signs-allow-color-codes.patch index 2d6e0522dc..2409733418 100644 --- a/patches/server/0047-Signs-allow-color-codes.patch +++ b/patches/server/0046-Signs-allow-color-codes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Signs allow color codes diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index f59d7e245aa3768004c7f82837a7482260a53406..c337b22a2f8ce5c76a1699956f6c06721046e814 100644 +index 6e3a3a50e01c41b40451bce05015714b5a7fe1e3..43900bb788f4baef420de0782c77d74dd7310f6e 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java @@ -1579,6 +1579,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -17,10 +17,10 @@ index f59d7e245aa3768004c7f82837a7482260a53406..c337b22a2f8ce5c76a1699956f6c0672 this.playerConnection.sendPacket(new PacketPlayOutOpenSignEditor(tileentitysign.getPosition())); } diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index f5ada346a11ac3becda4b87416beebd680ca16fa..4f094f026b118775cae84024b2ba6c33e14784e6 100644 +index a0a476d55afdf5ed9850368e99ab25af019075a8..3559f52e2fa30a8a7600334ece981fe34896bd68 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java -@@ -3073,6 +3073,15 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -3078,6 +3078,15 @@ public class PlayerConnection implements PacketListenerPlayIn { } } // Paper end diff --git a/patches/server/0048-Allow-soil-to-moisten-from-water-directly-under-it.patch b/patches/server/0047-Allow-soil-to-moisten-from-water-directly-under-it.patch similarity index 100% rename from patches/server/0048-Allow-soil-to-moisten-from-water-directly-under-it.patch rename to patches/server/0047-Allow-soil-to-moisten-from-water-directly-under-it.patch diff --git a/patches/server/0049-Minecart-settings-and-WASD-controls.patch b/patches/server/0048-Minecart-settings-and-WASD-controls.patch similarity index 98% rename from patches/server/0049-Minecart-settings-and-WASD-controls.patch rename to patches/server/0048-Minecart-settings-and-WASD-controls.patch index 6129cb8a36..f53a36aa67 100644 --- a/patches/server/0049-Minecart-settings-and-WASD-controls.patch +++ b/patches/server/0048-Minecart-settings-and-WASD-controls.patch @@ -22,7 +22,7 @@ index 3c51ee00aa53e561c02bb779c7115d8475d70ed7..47381b2a804f1e2296d654933d77c2da super(i, j, k); } diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index c337b22a2f8ce5c76a1699956f6c06721046e814..7fd6c93e7c7cd8f86d06710d39e4431e001bd97b 100644 +index 43900bb788f4baef420de0782c77d74dd7310f6e..01d4aa706f5c1cf35210bbdbf25b4687d110eaa1 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java @@ -1132,6 +1132,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -170,7 +170,7 @@ index 527f3ed664854cdd938c34f00a064bc2f77148cc..1a1de9491a50e9e746e714fcb35633c2 } } diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index f8a982add50862f1bc977f3039e7e9aeed9138ae..fb7d5fa53c51766f348271285a2e921be1ca0497 100644 +index 96d7990c66bd569b1b5ee287c0238c7dbb4c503e..2448ff8e3a9c60d6d99dd8f4d3033553b2780c77 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java @@ -83,6 +83,7 @@ public class Block extends BlockBase implements IMaterial { diff --git a/patches/server/0050-Disable-loot-drops-on-death-by-cramming.patch b/patches/server/0049-Disable-loot-drops-on-death-by-cramming.patch similarity index 100% rename from patches/server/0050-Disable-loot-drops-on-death-by-cramming.patch rename to patches/server/0049-Disable-loot-drops-on-death-by-cramming.patch diff --git a/patches/server/0051-Players-should-not-cram-to-death.patch b/patches/server/0050-Players-should-not-cram-to-death.patch similarity index 91% rename from patches/server/0051-Players-should-not-cram-to-death.patch rename to patches/server/0050-Players-should-not-cram-to-death.patch index a45127b45b..359d457915 100644 --- a/patches/server/0051-Players-should-not-cram-to-death.patch +++ b/patches/server/0050-Players-should-not-cram-to-death.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Players should not cram to death diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 7fd6c93e7c7cd8f86d06710d39e4431e001bd97b..0f6760c6922be4a4322ebbc6212b0d88494f5a52 100644 +index 01d4aa706f5c1cf35210bbdbf25b4687d110eaa1..257265a036a62c7d5fbcff17a10a41198ed880a4 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java @@ -1556,7 +1556,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { diff --git a/patches/server/0052-Option-to-toggle-milk-curing-bad-omen.patch b/patches/server/0051-Option-to-toggle-milk-curing-bad-omen.patch similarity index 100% rename from patches/server/0052-Option-to-toggle-milk-curing-bad-omen.patch rename to patches/server/0051-Option-to-toggle-milk-curing-bad-omen.patch diff --git a/patches/server/0053-End-gateway-should-check-if-entity-can-use-portal.patch b/patches/server/0052-End-gateway-should-check-if-entity-can-use-portal.patch similarity index 100% rename from patches/server/0053-End-gateway-should-check-if-entity-can-use-portal.patch rename to patches/server/0052-End-gateway-should-check-if-entity-can-use-portal.patch diff --git a/patches/server/0054-Fix-the-dead-lagging-the-server.patch b/patches/server/0053-Fix-the-dead-lagging-the-server.patch similarity index 100% rename from patches/server/0054-Fix-the-dead-lagging-the-server.patch rename to patches/server/0053-Fix-the-dead-lagging-the-server.patch diff --git a/patches/server/0055-Skip-events-if-there-s-no-listeners.patch b/patches/server/0054-Skip-events-if-there-s-no-listeners.patch similarity index 87% rename from patches/server/0055-Skip-events-if-there-s-no-listeners.patch rename to patches/server/0054-Skip-events-if-there-s-no-listeners.patch index 8fd44bfa0b..8a72a4f713 100644 --- a/patches/server/0055-Skip-events-if-there-s-no-listeners.patch +++ b/patches/server/0054-Skip-events-if-there-s-no-listeners.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Skip events if there's no listeners diff --git a/src/main/java/net/minecraft/commands/CommandDispatcher.java b/src/main/java/net/minecraft/commands/CommandDispatcher.java -index 988d1c9e9f4f29325043eb083123d12dd5f8081d..c25440e810e61bcdc299a0caebaec54b6862dd3c 100644 +index 29a395e69aab9c50a45c5fd5ab8795fd8e3ef727..5ae31658fb1183eab66f682cc5477bc526c27753 100644 --- a/src/main/java/net/minecraft/commands/CommandDispatcher.java +++ b/src/main/java/net/minecraft/commands/CommandDispatcher.java -@@ -362,6 +362,7 @@ public class CommandDispatcher { +@@ -367,6 +367,7 @@ public class CommandDispatcher { } private void runSync(EntityPlayer entityplayer, Collection bukkit, RootCommandNode rootcommandnode) { @@ -16,7 +16,7 @@ index 988d1c9e9f4f29325043eb083123d12dd5f8081d..c25440e810e61bcdc299a0caebaec54b // Paper end - Async command map building new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(entityplayer.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper PlayerCommandSendEvent event = new PlayerCommandSendEvent(entityplayer.getBukkitEntity(), new LinkedHashSet<>(bukkit)); -@@ -374,6 +375,7 @@ public class CommandDispatcher { +@@ -379,6 +380,7 @@ public class CommandDispatcher { } } // CraftBukkit end diff --git a/patches/server/0056-Add-permission-for-F3-N-debug.patch b/patches/server/0055-Add-permission-for-F3-N-debug.patch similarity index 83% rename from patches/server/0056-Add-permission-for-F3-N-debug.patch rename to patches/server/0055-Add-permission-for-F3-N-debug.patch index 1c43ba78af..0bae63f24f 100644 --- a/patches/server/0056-Add-permission-for-F3-N-debug.patch +++ b/patches/server/0055-Add-permission-for-F3-N-debug.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add permission for F3+N debug diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 9360d35581c6961a768973cc31341381ee26e234..c742647c0c5e3e4925e4ee6d195a54a85435e65e 100644 +index 2e5afd00bc7a2a58fd66c3bf1b38293762408662..3622ea01edfb9dfaab254ceaf09582d9e8993174 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1168,6 +1168,7 @@ public abstract class PlayerList { +@@ -1174,6 +1174,7 @@ public abstract class PlayerList { } else { b0 = (byte) (24 + i); } diff --git a/patches/server/0057-Add-wither-skeleton-takes-wither-damage-option.patch b/patches/server/0056-Add-wither-skeleton-takes-wither-damage-option.patch similarity index 100% rename from patches/server/0057-Add-wither-skeleton-takes-wither-damage-option.patch rename to patches/server/0056-Add-wither-skeleton-takes-wither-damage-option.patch diff --git a/patches/server/0058-Configurable-TPS-Catchup.patch b/patches/server/0057-Configurable-TPS-Catchup.patch similarity index 93% rename from patches/server/0058-Configurable-TPS-Catchup.patch rename to patches/server/0057-Configurable-TPS-Catchup.patch index f3d1f2b1cf..e706a155b9 100644 --- a/patches/server/0058-Configurable-TPS-Catchup.patch +++ b/patches/server/0057-Configurable-TPS-Catchup.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable TPS Catchup diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index c086f50613cc3b1061c9958eb2a8aba059a61e29..dccff89fcacdafe4961cd3121eb38ff8844e10da 100644 +index c8653b1214af3e08aa4f197c0e2923a81ed47ffc..9fbec9f98bd0dd727ef58d7f3f18a8a8ab9910e2 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1132,7 +1132,13 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant Date: Thu, 27 Feb 2020 21:42:19 -0600 -Subject: [PATCH] Configurable void damage height +Subject: [PATCH] Configurable void damage height and damage diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java @@ -17,21 +17,36 @@ index 08f286a085cf36ce9a0ea420389f4ea33fb1cc1a..0950dcce2353504775813d9f60407361 && world.paperConfig.doNetherTopVoidDamage() && this.locY() >= world.paperConfig.netherVoidTopDamageHeight)) { this.doVoidDamage(); +diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java +index af08ec27f8c07653daa328d84bfc142bfc8a7f78..0d5bb154e4213283734c1c2c437aec2a8b8877fc 100644 +--- a/src/main/java/net/minecraft/world/entity/EntityLiving.java ++++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java +@@ -2129,7 +2129,7 @@ public abstract class EntityLiving extends Entity { + + @Override + protected void an() { +- this.damageEntity(DamageSource.OUT_OF_WORLD, 4.0F); ++ this.damageEntity(DamageSource.OUT_OF_WORLD, (float) world.purpurConfig.voidDamageDealt); + } + + protected void dA() { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 32087bcc02c20448988c76e04dbc0dcc3db48641..dc63d6ee62a45ff4862c01327de3dc06021bf284 100644 +index 32087bcc02c20448988c76e04dbc0dcc3db48641..0e715362fcfb3d26825b51f4fd96d8cba810bf55 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -150,11 +150,13 @@ public class PurpurWorldConfig { +@@ -150,11 +150,15 @@ public class PurpurWorldConfig { public boolean entitiesPickUpLootBypassMobGriefing = false; public boolean milkCuresBadOmen = true; public double tridentLoyaltyVoidReturnHeight = 0.0D; + public double voidDamageHeight = -64.0D; ++ public double voidDamageDealt = 4.0D; private void miscGameplayMechanicsSettings() { disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); + voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); ++ voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); } public String playerDeathExpDropEquation = "expLevel * 7"; diff --git a/patches/server/0071-Dispenser-curse-of-binding-protection.patch b/patches/server/0070-Dispenser-curse-of-binding-protection.patch similarity index 95% rename from patches/server/0071-Dispenser-curse-of-binding-protection.patch rename to patches/server/0070-Dispenser-curse-of-binding-protection.patch index eefbe8cc0f..bf2489e631 100644 --- a/patches/server/0071-Dispenser-curse-of-binding-protection.patch +++ b/patches/server/0070-Dispenser-curse-of-binding-protection.patch @@ -52,10 +52,10 @@ index 7962808aebf67cf9bc1dc4c1e106e943536fdced..d072b604a1cd8835c1fe658831cdaf9f return this.b; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index dc63d6ee62a45ff4862c01327de3dc06021bf284..d9c5f6f90c493dcf13199c488065d9dfbe34525e 100644 +index 0e715362fcfb3d26825b51f4fd96d8cba810bf55..d5095a9b20118bf9c35346fce95a446254872832 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -196,6 +196,11 @@ public class PurpurWorldConfig { +@@ -198,6 +198,11 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0072-Add-option-for-boats-to-eject-players-on-land.patch b/patches/server/0071-Add-option-for-boats-to-eject-players-on-land.patch similarity index 89% rename from patches/server/0072-Add-option-for-boats-to-eject-players-on-land.patch rename to patches/server/0071-Add-option-for-boats-to-eject-players-on-land.patch index 59e133a733..ffcc465848 100644 --- a/patches/server/0072-Add-option-for-boats-to-eject-players-on-land.patch +++ b/patches/server/0071-Add-option-for-boats-to-eject-players-on-land.patch @@ -17,10 +17,10 @@ index 5e2c13bd6e52ffe182ef034e05ba6fe1cb301005..01839c7319e175477ded7001e00e5937 } else { return EntityBoat.EnumStatus.IN_AIR; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d9c5f6f90c493dcf13199c488065d9dfbe34525e..f1a5bc297e67129351e4cf72bc67c44f4af64b91 100644 +index d5095a9b20118bf9c35346fce95a446254872832..06c6e181b753a840e0060539b6b0387a7a1511dc 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -146,12 +146,14 @@ public class PurpurWorldConfig { +@@ -146,6 +146,7 @@ public class PurpurWorldConfig { idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList); } @@ -28,8 +28,9 @@ index d9c5f6f90c493dcf13199c488065d9dfbe34525e..f1a5bc297e67129351e4cf72bc67c44f public boolean disableDropsOnCrammingDeath = false; public boolean entitiesPickUpLootBypassMobGriefing = false; public boolean milkCuresBadOmen = true; - public double tridentLoyaltyVoidReturnHeight = 0.0D; +@@ -153,6 +154,7 @@ public class PurpurWorldConfig { public double voidDamageHeight = -64.0D; + public double voidDamageDealt = 4.0D; private void miscGameplayMechanicsSettings() { + boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); diff --git a/patches/server/0073-Add-obfhelpers-for-plugin-use.patch b/patches/server/0072-Add-obfhelpers-for-plugin-use.patch similarity index 89% rename from patches/server/0073-Add-obfhelpers-for-plugin-use.patch rename to patches/server/0072-Add-obfhelpers-for-plugin-use.patch index 793fe557ff..3bfcad3aac 100644 --- a/patches/server/0073-Add-obfhelpers-for-plugin-use.patch +++ b/patches/server/0072-Add-obfhelpers-for-plugin-use.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add obfhelpers for plugin use diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index fee862951f2767d4a3c5268dff157c185378a939..91a1b2e955b04f0cc1ca05d7ee4d832d9efb97cb 100644 +index 366ceb65d40c685117d1c79a933864ab91d8aa11..a342174cf35ee6ac1f10028b60c5a19e1b547ef4 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -694,6 +694,7 @@ public final class ItemStack { diff --git a/patches/server/0074-Mending-mends-most-damages-equipment-first.patch b/patches/server/0073-Mending-mends-most-damages-equipment-first.patch similarity index 95% rename from patches/server/0074-Mending-mends-most-damages-equipment-first.patch rename to patches/server/0073-Mending-mends-most-damages-equipment-first.patch index 2b57ebf3e3..67fe1f720c 100644 --- a/patches/server/0074-Mending-mends-most-damages-equipment-first.patch +++ b/patches/server/0073-Mending-mends-most-damages-equipment-first.patch @@ -18,7 +18,7 @@ index a7551e95185895a290be70d501496279eaf884ae..31d36ead273e8397ba2c826b791a2cf5 if (entry != null) { ItemStack itemstack = (ItemStack) entry.getValue(); diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 91a1b2e955b04f0cc1ca05d7ee4d832d9efb97cb..fcc6ee9481d577d39339cd0ac24dab06bd76e5c6 100644 +index a342174cf35ee6ac1f10028b60c5a19e1b547ef4..72400425d6177ba938057ec145f9499eb1160288 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -468,10 +468,19 @@ public final class ItemStack { @@ -78,7 +78,7 @@ index 72afbf8f537770540e90a2880ea81de137ea10f5..b2d28c2bf0a9e93d38583e2d734c12fe return a(enchantment, entityliving, (itemstack) -> { return true; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index f1a5bc297e67129351e4cf72bc67c44f4af64b91..7dd9a8af44fbf3e1a3fe48d9f259a4937a823f39 100644 +index 06c6e181b753a840e0060539b6b0387a7a1511dc..ce1d33315a7999fb304d6f7d843ab3d1f415eb17 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -146,6 +146,7 @@ public class PurpurWorldConfig { @@ -89,9 +89,9 @@ index f1a5bc297e67129351e4cf72bc67c44f4af64b91..7dd9a8af44fbf3e1a3fe48d9f259a493 public boolean boatEjectPlayersOnLand = false; public boolean disableDropsOnCrammingDeath = false; public boolean entitiesPickUpLootBypassMobGriefing = false; -@@ -153,6 +154,7 @@ public class PurpurWorldConfig { - public double tridentLoyaltyVoidReturnHeight = 0.0D; +@@ -154,6 +155,7 @@ public class PurpurWorldConfig { public double voidDamageHeight = -64.0D; + public double voidDamageDealt = 4.0D; private void miscGameplayMechanicsSettings() { + useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); diff --git a/patches/server/0075-Add-5-second-tps-average-in-tps.patch b/patches/server/0074-Add-5-second-tps-average-in-tps.patch similarity index 93% rename from patches/server/0075-Add-5-second-tps-average-in-tps.patch rename to patches/server/0074-Add-5-second-tps-average-in-tps.patch index 43175802ee..9cbc40fc07 100644 --- a/patches/server/0075-Add-5-second-tps-average-in-tps.patch +++ b/patches/server/0074-Add-5-second-tps-average-in-tps.patch @@ -27,10 +27,10 @@ index dc6bc1910ad0f9b27144d5750078c3ca607d03d3..e8be35f836ede2630d44902e99a21489 setListData(vector); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index dccff89fcacdafe4961cd3121eb38ff8844e10da..409c272629ca935dcbaa9e73e10ace4a0bd8f9b7 100644 +index 9fbec9f98bd0dd727ef58d7f3f18a8a8ab9910e2..0cea9db58772d8c69b5cfdd4a2987593b2c9ea6c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -278,7 +278,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant trackedPlayerMap = null; -@@ -142,6 +143,15 @@ public class EntityTrackerEntry { - this.c(); - } - -+ // Purpur start - respawn burning item entities on client (client kills them) -+ if (tracker.fireTicks > 0 && tracker instanceof EntityItem) { -+ EntityItem item = (EntityItem) tracker; -+ if (item.immuneToFire && !item.dead) { -+ item.respawnOnClient(); -+ } -+ } -+ // Purpur end -+ - if (this.tickCounter % this.d == 0 || this.tracker.impulse || this.tracker.getDataWatcher().a()) { - int i; - int j; diff --git a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -index 737851cde7752e7cccf226f1868a38d6411bfb31..ae32fe66a70d583993fe81de4c95b7b2fe8a6fc8 100644 +index 0b48961a18da76dd25c0930f393f0ac9f709ad78..7444878986c802ff10f67e9d5d9ba277db709af4 100644 --- a/src/main/java/net/minecraft/server/level/PlayerChunkMap.java +++ b/src/main/java/net/minecraft/server/level/PlayerChunkMap.java -@@ -2457,7 +2457,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially +@@ -2440,7 +2440,7 @@ Sections go from 0..16. Now whenever a section is not empty, it can potentially public class EntityTracker { - final EntityTrackerEntry trackerEntry; // Paper - private -> package private -+ public final EntityTrackerEntry trackerEntry; // Paper - private -> public - public final Entity tracker; // Airplane - public for chunk ++ public final EntityTrackerEntry trackerEntry; // Paper - private -> package private // Purpur -> public + private final Entity tracker; private final int trackingDistance; private SectionPosition e; diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java @@ -67,60 +43,53 @@ index 0950dcce2353504775813d9f60407361981c801d..6c0b1bc0c710d5795d559fe98af6319a return this.O == tag; } diff --git a/src/main/java/net/minecraft/world/entity/item/EntityItem.java b/src/main/java/net/minecraft/world/entity/item/EntityItem.java -index 5dc3670f35b04d933e96c4b42aa9fbcf941e69c7..3b84039a76843a0784e2d71bb66dc322450c2cab 100644 +index 5dc3670f35b04d933e96c4b42aa9fbcf941e69c7..92cd61cd6b085a03c502223f3861540d8c9f27e1 100644 --- a/src/main/java/net/minecraft/world/entity/item/EntityItem.java +++ b/src/main/java/net/minecraft/world/entity/item/EntityItem.java -@@ -10,10 +10,12 @@ import net.minecraft.nbt.NBTTagCompound; - import net.minecraft.network.chat.ChatMessage; - import net.minecraft.network.chat.IChatBaseComponent; - import net.minecraft.network.protocol.Packet; -+import net.minecraft.network.protocol.game.PacketPlayOutEntityMetadata; - import net.minecraft.network.protocol.game.PacketPlayOutSpawnEntity; - import net.minecraft.network.syncher.DataWatcher; - import net.minecraft.network.syncher.DataWatcherObject; - import net.minecraft.network.syncher.DataWatcherRegistry; -+import net.minecraft.server.level.EntityPlayer; - import net.minecraft.server.level.WorldServer; - import net.minecraft.sounds.SoundEffects; - import net.minecraft.stats.StatisticList; -@@ -50,6 +52,9 @@ public class EntityItem extends Entity { +@@ -50,6 +50,12 @@ public class EntityItem extends Entity { public final float b; private int lastTick = MinecraftServer.currentTick - 1; // CraftBukkit public boolean canMobPickup = true; // Paper -+ public boolean immuneToCactus = false; // Purpur -+ public boolean immuneToExplosion = false; // Purpur -+ public boolean immuneToFire = false; // Purpur ++ // Purpur start ++ public boolean immuneToCactus = false; ++ public boolean immuneToExplosion = false; ++ public boolean immuneToFire = false; ++ public boolean immuneToLightning = false; ++ // Purpur end public EntityItem(EntityTypes entitytypes, World world) { super(entitytypes, world); -@@ -301,6 +306,16 @@ public class EntityItem extends Entity { +@@ -301,6 +307,16 @@ public class EntityItem extends Entity { return false; } else if (!this.getItemStack().getItem().a(damagesource)) { return false; + // Purpur start -+ } else if (immuneToCactus && damagesource == DamageSource.CACTUS) { -+ respawnOnClient(); -+ return false; -+ } else if (immuneToFire && (damagesource.isFire() || damagesource == DamageSource.FIRE)) { -+ return false; -+ } else if (immuneToExplosion && damagesource.isExplosion()) { ++ } else if ( ++ (immuneToCactus && damagesource == DamageSource.CACTUS) || ++ (immuneToFire && (damagesource.isFire() || damagesource == DamageSource.FIRE)) || ++ (immuneToLightning && damagesource == DamageSource.LIGHTNING) || ++ (immuneToExplosion && damagesource.isExplosion()) ++ ) { + respawnOnClient(); + return false; + // Purpur end } else { // CraftBukkit start if (org.bukkit.craftbukkit.event.CraftEventFactory.handleNonLivingEntityDamageEvent(this, damagesource, f)) { -@@ -481,6 +496,9 @@ public class EntityItem extends Entity { +@@ -481,6 +497,12 @@ public class EntityItem extends Entity { com.google.common.base.Preconditions.checkArgument(!itemstack.isEmpty(), "Cannot drop air"); // CraftBukkit this.getDataWatcher().set(EntityItem.ITEM, itemstack); this.getDataWatcher().markDirty(EntityItem.ITEM); // CraftBukkit - SPIGOT-4591, must mark dirty -+ if (world.purpurConfig.itemImmuneToCactus.contains(itemstack.getItem())) immuneToCactus = true; // Purpur -+ if (world.purpurConfig.itemImmuneToExplosion.contains(itemstack.getItem())) immuneToExplosion = true; // Purpur -+ if (world.purpurConfig.itemImmuneToFire.contains(itemstack.getItem())) immuneToFire = true; // Purpur ++ // Purpur start ++ if (world.purpurConfig.itemImmuneToCactus.contains(itemstack.getItem())) immuneToCactus = true; ++ if (world.purpurConfig.itemImmuneToExplosion.contains(itemstack.getItem())) immuneToExplosion = true; ++ if (world.purpurConfig.itemImmuneToFire.contains(itemstack.getItem())) immuneToFire = true; ++ if (world.purpurConfig.itemImmuneToLightning.contains(itemstack.getItem())) immuneToLightning = true; ++ // Purpur end } @Override -@@ -562,4 +580,15 @@ public class EntityItem extends Entity { +@@ -562,4 +584,15 @@ public class EntityItem extends Entity { super.setPositionRaw(x, y, z); } // Paper end - fix MC-4 @@ -128,8 +97,8 @@ index 5dc3670f35b04d933e96c4b42aa9fbcf941e69c7..3b84039a76843a0784e2d71bb66dc322 + // Purpur start + public void respawnOnClient() { + Packet spawnPacket = new PacketPlayOutSpawnEntity(this); -+ Packet metadataPacket = new PacketPlayOutEntityMetadata(getId(), getDataWatcher(), true); -+ for (EntityPlayer entityplayer : this.tracker.trackerEntry.trackedPlayers) { ++ Packet metadataPacket = new net.minecraft.network.protocol.game.PacketPlayOutEntityMetadata(getId(), getDataWatcher(), true); ++ for (net.minecraft.server.level.EntityPlayer entityplayer : this.tracker.trackerEntry.trackedPlayers) { + entityplayer.playerConnection.sendPacket(spawnPacket); + entityplayer.playerConnection.sendPacket(metadataPacket); + } @@ -137,16 +106,17 @@ index 5dc3670f35b04d933e96c4b42aa9fbcf941e69c7..3b84039a76843a0784e2d71bb66dc322 + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 321f1811da81ffb31bd26442d2e3386c48d30086..12c3708150475ec16b394c79a78f4f0d740ea611 100644 +index 5e577cd97df14463f590919b2931a5065ac37033..dfcceebc9fbfa62fc14f3c53217af8e39025307d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -135,6 +135,39 @@ public class PurpurWorldConfig { +@@ -135,6 +135,49 @@ public class PurpurWorldConfig { } } + public List itemImmuneToCactus = new ArrayList<>(); + public List itemImmuneToExplosion = new ArrayList<>(); + public List itemImmuneToFire = new ArrayList<>(); ++ public List itemImmuneToLightning = new ArrayList<>(); + private void itemSettings() { + itemImmuneToCactus.clear(); + getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { @@ -175,16 +145,25 @@ index 321f1811da81ffb31bd26442d2e3386c48d30086..12c3708150475ec16b394c79a78f4f0d + Item item = IRegistry.ITEM.get(new MinecraftKey(key.toString())); + if (item != Items.AIR) itemImmuneToFire.add(item); + }); ++ itemImmuneToLightning.clear(); ++ getList("gameplay-mechanics.item.immune.lightning", new ArrayList<>()).forEach(key -> { ++ if (key.toString().equals("*")) { ++ IRegistry.ITEM.g().filter(item -> item != Items.AIR).forEach((item) -> itemImmuneToLightning.add(item)); ++ return; ++ } ++ Item item = IRegistry.ITEM.get(new MinecraftKey(key.toString())); ++ if (item != Items.AIR) itemImmuneToLightning.add(item); ++ }); + } + public boolean idleTimeoutKick = true; public boolean idleTimeoutTickNearbyEntities = true; public boolean idleTimeoutCountAsSleeping = false; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -index 7a78ef2f6f673568c0528fa46168c69d21f51a66..0418291a69216081353c05c99d11dcd913b6b8cb 100644 +index 7a78ef2f6f673568c0528fa46168c69d21f51a66..f91a04abe39f9a75530a213cd84e5024059752d1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -@@ -114,4 +114,36 @@ public class CraftItem extends CraftEntity implements Item { +@@ -114,4 +114,46 @@ public class CraftItem extends CraftEntity implements Item { public EntityType getType() { return EntityType.DROPPED_ITEM; } @@ -219,5 +198,15 @@ index 7a78ef2f6f673568c0528fa46168c69d21f51a66..0418291a69216081353c05c99d11dcd9 + public boolean isImmuneToFire() { + return item.immuneToFire; + } ++ ++ @Override ++ public void setImmuneToLightning(boolean immuneToLightning) { ++ item.immuneToLightning = immuneToLightning; ++ } ++ ++ @Override ++ public boolean isImmuneToLightning() { ++ return item.immuneToLightning; ++ } + // Purpur end } diff --git a/patches/server/0078-Add-ping-command.patch b/patches/server/0077-Add-ping-command.patch similarity index 97% rename from patches/server/0078-Add-ping-command.patch rename to patches/server/0077-Add-ping-command.patch index e280c942ce..a3b75b0f05 100644 --- a/patches/server/0078-Add-ping-command.patch +++ b/patches/server/0077-Add-ping-command.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add /ping command diff --git a/src/main/java/net/minecraft/commands/CommandDispatcher.java b/src/main/java/net/minecraft/commands/CommandDispatcher.java -index c25440e810e61bcdc299a0caebaec54b6862dd3c..cf3776591446ad7b3d1ee1285c5aeffcb5e9495e 100644 +index 5ae31658fb1183eab66f682cc5477bc526c27753..94ed3811cbcc6f60a2c8bb033920f9c1ae2e91d6 100644 --- a/src/main/java/net/minecraft/commands/CommandDispatcher.java +++ b/src/main/java/net/minecraft/commands/CommandDispatcher.java @@ -191,6 +191,7 @@ public class CommandDispatcher { @@ -16,7 +16,7 @@ index c25440e810e61bcdc299a0caebaec54b6862dd3c..cf3776591446ad7b3d1ee1285c5aeffc } if (commanddispatcher_servertype.d) { -@@ -422,10 +423,12 @@ public class CommandDispatcher { +@@ -427,10 +428,12 @@ public class CommandDispatcher { } @@ -29,7 +29,7 @@ index c25440e810e61bcdc299a0caebaec54b6862dd3c..cf3776591446ad7b3d1ee1285c5aeffc public static RequiredArgumentBuilder a(String s, ArgumentType argumenttype) { return RequiredArgumentBuilder.argument(s, argumenttype); } -@@ -441,6 +444,7 @@ public class CommandDispatcher { +@@ -446,6 +449,7 @@ public class CommandDispatcher { }; } diff --git a/patches/server/0079-Configurable-jockey-options.patch b/patches/server/0078-Configurable-jockey-options.patch similarity index 98% rename from patches/server/0079-Configurable-jockey-options.patch rename to patches/server/0078-Configurable-jockey-options.patch index 4325f3ab11..fae4b907ef 100644 --- a/patches/server/0079-Configurable-jockey-options.patch +++ b/patches/server/0078-Configurable-jockey-options.patch @@ -193,10 +193,10 @@ index f341759f6110b51c856de09248d2f523c58aa712..99d0932e5352589cfbcc48a5e789651d protected void initDatawatcher() { super.initDatawatcher(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 12c3708150475ec16b394c79a78f4f0d740ea611..b01d82d76e07a482fd36a754b46ac22139114232 100644 +index dfcceebc9fbfa62fc14f3c53217af8e39025307d..a12c2ae8291114f17bbb05761272bf724f848b1c 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -309,6 +309,15 @@ public class PurpurWorldConfig { +@@ -321,6 +321,15 @@ public class PurpurWorldConfig { creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); } @@ -212,7 +212,7 @@ index 12c3708150475ec16b394c79a78f4f0d740ea611..b01d82d76e07a482fd36a754b46ac221 public boolean enderDragonAlwaysDropsFullExp = false; private void enderDragonSettings() { enderDragonAlwaysDropsFullExp = getBoolean("mobs.ender_dragon.always-drop-full-exp", enderDragonAlwaysDropsFullExp); -@@ -346,6 +355,15 @@ public class PurpurWorldConfig { +@@ -358,6 +367,15 @@ public class PurpurWorldConfig { giantMaxHealth = getDouble("mobs.giant.attributes.max-health", giantMaxHealth); } @@ -228,7 +228,7 @@ index 12c3708150475ec16b394c79a78f4f0d740ea611..b01d82d76e07a482fd36a754b46ac221 public double illusionerMovementSpeed = 0.5D; public double illusionerFollowRange = 18.0D; public double illusionerMaxHealth = 32.0D; -@@ -421,8 +439,35 @@ public class PurpurWorldConfig { +@@ -433,8 +451,35 @@ public class PurpurWorldConfig { witherSkeletonTakesWitherDamage = getBoolean("mobs.wither_skeleton.takes-wither-damage", witherSkeletonTakesWitherDamage); } diff --git a/patches/server/0080-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch b/patches/server/0079-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch similarity index 99% rename from patches/server/0080-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch rename to patches/server/0079-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch index 8b62666365..5d442f7434 100644 --- a/patches/server/0080-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch +++ b/patches/server/0079-Phantoms-attracted-to-crystals-and-crystals-shoot-ph.patch @@ -350,10 +350,10 @@ index 42cf3fa42b73739182d26fbb524ee5b304c799b2..daf738e8f0987aa6ab200189d7a26d16 return entityliving != null ? EntityPhantom.this.a(EntityPhantom.this.getGoalTarget(), PathfinderTargetCondition.a) : false; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index b01d82d76e07a482fd36a754b46ac22139114232..3194e8e31e9e98ed5ab81ebb45b4c765938db5f6 100644 +index a12c2ae8291114f17bbb05761272bf724f848b1c..3aec221db2cd425bc5188979bb0fc0625ca40f4a 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -383,6 +383,15 @@ public class PurpurWorldConfig { +@@ -395,6 +395,15 @@ public class PurpurWorldConfig { ironGolemCanSwim = getBoolean("mobs.iron_golem.can-swim", ironGolemCanSwim); } diff --git a/patches/server/0081-Add-phantom-spawning-options.patch b/patches/server/0080-Add-phantom-spawning-options.patch similarity index 99% rename from patches/server/0081-Add-phantom-spawning-options.patch rename to patches/server/0080-Add-phantom-spawning-options.patch index 00be25533c..7b59963d51 100644 --- a/patches/server/0081-Add-phantom-spawning-options.patch +++ b/patches/server/0080-Add-phantom-spawning-options.patch @@ -262,10 +262,10 @@ index e4f5e570636862481aac92ec9b74d6cf5723eb6e..e954adeff4fbfc1aa85ac3785c0c4c86 } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 3194e8e31e9e98ed5ab81ebb45b4c765938db5f6..041415d72d1c738dfa97c68ca47d0eaf473f33a2 100644 +index 3aec221db2cd425bc5188979bb0fc0625ca40f4a..d957ee4c10fde8596442f2f05f0347994df7bae5 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -386,10 +386,34 @@ public class PurpurWorldConfig { +@@ -398,10 +398,34 @@ public class PurpurWorldConfig { public double phantomAttackedByCrystalRadius = 0.0D; public float phantomAttackedByCrystalDamage = 1.0F; public double phantomOrbitCrystalRadius = 0.0D; diff --git a/patches/server/0082-Implement-bed-explosion-options.patch b/patches/server/0081-Implement-bed-explosion-options.patch similarity index 95% rename from patches/server/0082-Implement-bed-explosion-options.patch rename to patches/server/0081-Implement-bed-explosion-options.patch index da06739d6b..fb42837554 100644 --- a/patches/server/0082-Implement-bed-explosion-options.patch +++ b/patches/server/0081-Implement-bed-explosion-options.patch @@ -18,7 +18,7 @@ index abe0a1c309d526de37efcac44922fa259e1d112c..db9ef25d0578538fd7c7950a3b3d0345 } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 041415d72d1c738dfa97c68ca47d0eaf473f33a2..7f934f3f630188e5ebcd3c216e2ae64ab2dc9dbf 100644 +index d957ee4c10fde8596442f2f05f0347994df7bae5..83f43b44946a9e5aeecacae776684934685d79ac 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -1,6 +1,7 @@ @@ -37,7 +37,7 @@ index 041415d72d1c738dfa97c68ca47d0eaf473f33a2..7f934f3f630188e5ebcd3c216e2ae64a import static net.pl3x.purpur.PurpurConfig.log; -@@ -246,6 +248,22 @@ public class PurpurWorldConfig { +@@ -258,6 +260,22 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0083-Implement-respawn-anchor-explosion-options.patch b/patches/server/0082-Implement-respawn-anchor-explosion-options.patch similarity index 96% rename from patches/server/0083-Implement-respawn-anchor-explosion-options.patch rename to patches/server/0082-Implement-respawn-anchor-explosion-options.patch index 0f6152cd3f..9c9686eed2 100644 --- a/patches/server/0083-Implement-respawn-anchor-explosion-options.patch +++ b/patches/server/0082-Implement-respawn-anchor-explosion-options.patch @@ -30,10 +30,10 @@ index 028e98decf8b0496b4ebcd1aad3aa474e5c4e7c1..9b7a7f1ae50baf53d314bbf1588afeb8 public static boolean a(World world) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7f934f3f630188e5ebcd3c216e2ae64ab2dc9dbf..09320a6d1d4390b59941381d1e0a4d365bb8beab 100644 +index 83f43b44946a9e5aeecacae776684934685d79ac..9d7f7fc586200206ff87dfa463479150ed8cd5f1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -285,6 +285,22 @@ public class PurpurWorldConfig { +@@ -297,6 +297,22 @@ public class PurpurWorldConfig { lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether); } diff --git a/patches/server/0084-Add-allow-water-in-end-world-option.patch b/patches/server/0083-Add-allow-water-in-end-world-option.patch similarity index 100% rename from patches/server/0084-Add-allow-water-in-end-world-option.patch rename to patches/server/0083-Add-allow-water-in-end-world-option.patch diff --git a/patches/server/0085-Allow-color-codes-in-books.patch b/patches/server/0084-Allow-color-codes-in-books.patch similarity index 90% rename from patches/server/0085-Allow-color-codes-in-books.patch rename to patches/server/0084-Allow-color-codes-in-books.patch index a9a4c0b81b..1b4f978ded 100644 --- a/patches/server/0085-Allow-color-codes-in-books.patch +++ b/patches/server/0084-Allow-color-codes-in-books.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Allow color codes in books diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 4f094f026b118775cae84024b2ba6c33e14784e6..c4ef3fef4db2326a531694e6798bab6103c7061c 100644 +index 3559f52e2fa30a8a7600334ece981fe34896bd68..9998f20c9cc9857612f94f91d27e77da9c632323 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java -@@ -1211,7 +1211,8 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1216,7 +1216,8 @@ public class PlayerConnection implements PacketListenerPlayIn { if (itemstack.getItem() == Items.WRITABLE_BOOK) { NBTTagList nbttaglist = new NBTTagList(); @@ -18,7 +18,7 @@ index 4f094f026b118775cae84024b2ba6c33e14784e6..c4ef3fef4db2326a531694e6798bab61 ItemStack old = itemstack.cloneItemStack(); // CraftBukkit itemstack.a("pages", (NBTBase) nbttaglist); this.player.inventory.setItem(i, CraftEventFactory.handleEditBookEvent(player, i, old, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent) -@@ -1229,13 +1230,14 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1234,13 +1235,14 @@ public class PlayerConnection implements PacketListenerPlayIn { itemstack1.setTag(nbttagcompound.clone()); } @@ -35,7 +35,7 @@ index 4f094f026b118775cae84024b2ba6c33e14784e6..c4ef3fef4db2326a531694e6798bab61 ChatComponentText chatcomponenttext = new ChatComponentText(s1); String s2 = IChatBaseComponent.ChatSerializer.a((IChatBaseComponent) chatcomponenttext); -@@ -1247,6 +1249,16 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1252,6 +1254,16 @@ public class PlayerConnection implements PacketListenerPlayIn { } } diff --git a/patches/server/0086-Entity-lifespan.patch b/patches/server/0085-Entity-lifespan.patch similarity index 95% rename from patches/server/0086-Entity-lifespan.patch rename to patches/server/0085-Entity-lifespan.patch index 6f7ffe99de..1b59ab5443 100644 --- a/patches/server/0086-Entity-lifespan.patch +++ b/patches/server/0085-Entity-lifespan.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entity lifespan diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index c4ef3fef4db2326a531694e6798bab6103c7061c..92437cf4413ea76ef139b007adf2b76c2729dad2 100644 +index 9998f20c9cc9857612f94f91d27e77da9c632323..4e43cd877c45a014add62547a4dbfadbd09082d2 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java -@@ -2458,6 +2458,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -2463,6 +2463,7 @@ public class PlayerConnection implements PacketListenerPlayIn { boolean triggerLeashUpdate = itemInHand != null && itemInHand.getItem() == Items.LEAD && entity instanceof EntityInsentient; Item origItem = this.player.inventory.getItemInHand() == null ? null : this.player.inventory.getItemInHand().getItem(); PlayerInteractEntityEvent event; @@ -104,7 +104,7 @@ index 84995be65d033dd712211e1e479675815099c3b1..e10377b379079bc467a60abe719075c5 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 09320a6d1d4390b59941381d1e0a4d365bb8beab..2289c2ea20bddd4bdd93b1e25c04ed8ad8967053 100644 +index 9d7f7fc586200206ff87dfa463479150ed8cd5f1..fa003079da19ee63a02045d57ea3d6cf64578ebd 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -137,6 +137,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0087-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch b/patches/server/0086-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch similarity index 91% rename from patches/server/0087-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch rename to patches/server/0086-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch index b03c0c880f..137f5119d9 100644 --- a/patches/server/0087-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch +++ b/patches/server/0086-Add-option-to-teleport-to-spawn-if-outside-world-bor.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add option to teleport to spawn if outside world border diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 0f6760c6922be4a4322ebbc6212b0d88494f5a52..53c2bb5af825255e8c786bf02052f41c5d3e270b 100644 +index 257265a036a62c7d5fbcff17a10a41198ed880a4..da708df0dc50ea02441f9db2bfd52f04d9a8e3da 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java @@ -2556,4 +2556,26 @@ public class EntityPlayer extends EntityHuman implements ICrafting { @@ -36,7 +36,7 @@ index 0f6760c6922be4a4322ebbc6212b0d88494f5a52..53c2bb5af825255e8c786bf02052f41c + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index 135e8b14d8b295797b87b2524a084f682bbf98ab..9c4bcc691ad2f6896b28d83f386fc8daa2777a3a 100644 +index 90c931f95dffbf9697ae4678a23d7c142c504a81..620bccdc44d3325dcb4450af979363ee94ba3f97 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java @@ -45,6 +45,7 @@ import net.minecraft.network.syncher.DataWatcher; @@ -56,10 +56,10 @@ index 135e8b14d8b295797b87b2524a084f682bbf98ab..9c4bcc691ad2f6896b28d83f386fc8da } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2289c2ea20bddd4bdd93b1e25c04ed8ad8967053..22d3b094f23bde7d3195125c46bb09e7fa3c2346 100644 +index fa003079da19ee63a02045d57ea3d6cf64578ebd..cd9970db68b6c2f358115b616c36f52ad324fc90 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -230,6 +230,11 @@ public class PurpurWorldConfig { +@@ -242,6 +242,11 @@ public class PurpurWorldConfig { playerInvulnerableWhileAcceptingResourcePack = getBoolean("gameplay-mechanics.player.invulnerable-while-accepting-resource-pack", playerInvulnerableWhileAcceptingResourcePack); } diff --git a/patches/server/0088-Squid-EAR-immunity.patch b/patches/server/0087-Squid-EAR-immunity.patch similarity index 93% rename from patches/server/0088-Squid-EAR-immunity.patch rename to patches/server/0087-Squid-EAR-immunity.patch index 9904ce5653..222d6917cd 100644 --- a/patches/server/0088-Squid-EAR-immunity.patch +++ b/patches/server/0087-Squid-EAR-immunity.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Squid EAR immunity diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 22d3b094f23bde7d3195125c46bb09e7fa3c2346..9db3bc1540787e16f7d0033f9af5b04079775818 100644 +index cd9970db68b6c2f358115b616c36f52ad324fc90..86578f20429aa6bf5f3de1233c6287ce26be9827 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -487,6 +487,11 @@ public class PurpurWorldConfig { +@@ -499,6 +499,11 @@ public class PurpurWorldConfig { snowGolemPutPumpkinBack = getBoolean("mobs.snow_golem.pumpkin-can-be-added-back", snowGolemPutPumpkinBack); } diff --git a/patches/server/0089-Configurable-end-spike-seed.patch b/patches/server/0088-Configurable-end-spike-seed.patch similarity index 100% rename from patches/server/0089-Configurable-end-spike-seed.patch rename to patches/server/0088-Configurable-end-spike-seed.patch diff --git a/patches/server/0090-Configurable-dungeon-seed.patch b/patches/server/0089-Configurable-dungeon-seed.patch similarity index 100% rename from patches/server/0090-Configurable-dungeon-seed.patch rename to patches/server/0089-Configurable-dungeon-seed.patch diff --git a/patches/server/0091-Phantoms-burn-in-light.patch b/patches/server/0090-Phantoms-burn-in-light.patch similarity index 97% rename from patches/server/0091-Phantoms-burn-in-light.patch rename to patches/server/0090-Phantoms-burn-in-light.patch index 7f79e512dc..847da03927 100644 --- a/patches/server/0091-Phantoms-burn-in-light.patch +++ b/patches/server/0090-Phantoms-burn-in-light.patch @@ -86,10 +86,10 @@ index 993a88a5937417016821ef9d7cd58e4ee097491c..64b4fcf6f43c39db0fe57fc7a74f0d95 public static final Item dr = a(Blocks.JACK_O_LANTERN, CreativeModeTab.b); public static final Item ds = a(Blocks.OAK_TRAPDOOR, CreativeModeTab.d); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 9db3bc1540787e16f7d0033f9af5b04079775818..ecb26650c17109ea51d4ad4842464e22835c0450 100644 +index 86578f20429aa6bf5f3de1233c6287ce26be9827..201974ec4db915e5a79ed36625f0870a7ff84207 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -442,6 +442,9 @@ public class PurpurWorldConfig { +@@ -454,6 +454,9 @@ public class PurpurWorldConfig { public int phantomSpawnOverheadRadius = 10; public int phantomSpawnMinPerAttempt = 1; public int phantomSpawnMaxPerAttempt = -1; @@ -99,7 +99,7 @@ index 9db3bc1540787e16f7d0033f9af5b04079775818..ecb26650c17109ea51d4ad4842464e22 private void phantomSettings() { phantomAttackedByCrystalRadius = getDouble("mobs.phantom.attacked-by-crystal-range", phantomAttackedByCrystalRadius); phantomAttackedByCrystalDamage = (float) getDouble("mobs.phantom.attacked-by-crystal-damage", phantomAttackedByCrystalDamage); -@@ -458,6 +461,9 @@ public class PurpurWorldConfig { +@@ -470,6 +473,9 @@ public class PurpurWorldConfig { phantomSpawnOverheadRadius = getInt("mobs.phantom.spawn.overhead.radius", phantomSpawnOverheadRadius); phantomSpawnMinPerAttempt = getInt("mobs.phantom.spawn.per-attempt.min", phantomSpawnMinPerAttempt); phantomSpawnMaxPerAttempt = getInt("mobs.phantom.spawn.per-attempt.max", phantomSpawnMaxPerAttempt); diff --git a/patches/server/0092-Configurable-villager-breeding.patch b/patches/server/0091-Configurable-villager-breeding.patch similarity index 87% rename from patches/server/0092-Configurable-villager-breeding.patch rename to patches/server/0091-Configurable-villager-breeding.patch index 7a303b9bac..c6bcc6a614 100644 --- a/patches/server/0092-Configurable-villager-breeding.patch +++ b/patches/server/0091-Configurable-villager-breeding.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable villager breeding diff --git a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java -index 2fad37812bfa39872e99c4432e1982d62f65efb7..d3032682af94428419daa02f55b6040090d8df73 100644 +index e06f7cfe2d7020f4f6c416d5b82958d3821a1529..e2779521977716aa58bb713de67cb2d9fa8cbe5f 100644 --- a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java +++ b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java @@ -718,7 +718,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @@ -18,10 +18,10 @@ index 2fad37812bfa39872e99c4432e1982d62f65efb7..d3032682af94428419daa02f55b60400 private boolean fr() { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index ecb26650c17109ea51d4ad4842464e22835c0450..70a4fff198851c97de6c36c88bf579be51b8c0da 100644 +index 201974ec4db915e5a79ed36625f0870a7ff84207..db5638c4f2b6d672e619c9ba44184b6d9fe113a1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -505,6 +505,7 @@ public class PurpurWorldConfig { +@@ -517,6 +517,7 @@ public class PurpurWorldConfig { public boolean villagerFollowEmeraldBlock = false; public int villagerSpawnIronGolemRadius = 0; public int villagerSpawnIronGolemLimit = 0; @@ -29,7 +29,7 @@ index ecb26650c17109ea51d4ad4842464e22835c0450..70a4fff198851c97de6c36c88bf579be private void villagerSettings() { villagerBrainTicks = getInt("mobs.villager.brain-ticks", villagerBrainTicks); villagerUseBrainTicksOnlyWhenLagging = getBoolean("mobs.villager.use-brain-ticks-only-when-lagging", villagerUseBrainTicksOnlyWhenLagging); -@@ -513,6 +514,7 @@ public class PurpurWorldConfig { +@@ -525,6 +526,7 @@ public class PurpurWorldConfig { villagerFollowEmeraldBlock = getBoolean("mobs.villager.follow-emerald-blocks", villagerFollowEmeraldBlock); villagerSpawnIronGolemRadius = getInt("mobs.villager.spawn-iron-golem.radius", villagerSpawnIronGolemRadius); villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit); diff --git a/patches/server/0093-Redstone-deactivates-spawners.patch b/patches/server/0092-Redstone-deactivates-spawners.patch similarity index 93% rename from patches/server/0093-Redstone-deactivates-spawners.patch rename to patches/server/0092-Redstone-deactivates-spawners.patch index 779f61a28d..281da9a683 100644 --- a/patches/server/0093-Redstone-deactivates-spawners.patch +++ b/patches/server/0092-Redstone-deactivates-spawners.patch @@ -26,10 +26,10 @@ index 5538404456dfee42257fad9040fcc0fefdfc5fab..b3a03dc66e803d9dc7000cc7d6960e87 public abstract BlockPosition b(); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 70a4fff198851c97de6c36c88bf579be51b8c0da..6bfa7faa7c2093c9da55d98343a87bcc6a182ca4 100644 +index db5638c4f2b6d672e619c9ba44184b6d9fe113a1..a36b9ea779fd984a16332e66f122d9505fad67de 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -318,6 +318,11 @@ public class PurpurWorldConfig { +@@ -330,6 +330,11 @@ public class PurpurWorldConfig { signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit); } diff --git a/patches/server/0094-Totems-work-in-inventory.patch b/patches/server/0093-Totems-work-in-inventory.patch similarity index 90% rename from patches/server/0094-Totems-work-in-inventory.patch rename to patches/server/0093-Totems-work-in-inventory.patch index 1e1faa2261..8509b4b755 100644 --- a/patches/server/0094-Totems-work-in-inventory.patch +++ b/patches/server/0093-Totems-work-in-inventory.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Totems work in inventory diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index 9c4bcc691ad2f6896b28d83f386fc8daa2777a3a..69101211dc01e5fbd1f156cbd612b4231098da5a 100644 +index 620bccdc44d3325dcb4450af979363ee94ba3f97..c9caa6919d47283331a9e0c79b22590b80293693 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java @@ -1426,6 +1426,19 @@ public abstract class EntityLiving extends Entity { @@ -29,10 +29,10 @@ index 9c4bcc691ad2f6896b28d83f386fc8daa2777a3a..69101211dc01e5fbd1f156cbd612b423 event.setCancelled(itemstack == null); this.world.getServer().getPluginManager().callEvent(event); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 6bfa7faa7c2093c9da55d98343a87bcc6a182ca4..1ddd2ca349e303c75e0bb9b848c25f92383e84b5 100644 +index a36b9ea779fd984a16332e66f122d9505fad67de..ad4da617cf718e1c03e1532a9b45d7f927539a14 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -235,6 +235,11 @@ public class PurpurWorldConfig { +@@ -247,6 +247,11 @@ public class PurpurWorldConfig { teleportIfOutsideBorder = getBoolean("gameplay-mechanics.player.teleport-if-outside-border", teleportIfOutsideBorder); } diff --git a/patches/server/0095-Populator-seed-controls.patch b/patches/server/0094-Populator-seed-controls.patch similarity index 100% rename from patches/server/0095-Populator-seed-controls.patch rename to patches/server/0094-Populator-seed-controls.patch diff --git a/patches/server/0096-Add-vindicator-johnny-spawn-chance.patch b/patches/server/0095-Add-vindicator-johnny-spawn-chance.patch similarity index 96% rename from patches/server/0096-Add-vindicator-johnny-spawn-chance.patch rename to patches/server/0095-Add-vindicator-johnny-spawn-chance.patch index cf02983f96..389e35cf6a 100644 --- a/patches/server/0096-Add-vindicator-johnny-spawn-chance.patch +++ b/patches/server/0095-Add-vindicator-johnny-spawn-chance.patch @@ -30,7 +30,7 @@ index f0eda0b83bab8e3a8adbb569b5997402b0e08e9a..fe84d6d2b74b6ae00c4c66682107296a } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 1ddd2ca349e303c75e0bb9b848c25f92383e84b5..55d7c48f0dd03c690b0d0b1fee4f3a5306de8d1d 100644 +index ad4da617cf718e1c03e1532a9b45d7f927539a14..b328c9f69fd43ca7ed57ee7f5b46ca998f2cb672 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -40,6 +40,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0097-Add-option-to-disable-mushroom-and-note-block-update.patch b/patches/server/0096-Add-option-to-disable-mushroom-and-note-block-update.patch similarity index 100% rename from patches/server/0097-Add-option-to-disable-mushroom-and-note-block-update.patch rename to patches/server/0096-Add-option-to-disable-mushroom-and-note-block-update.patch diff --git a/patches/server/0098-Dispensers-place-anvils-option.patch b/patches/server/0097-Dispensers-place-anvils-option.patch similarity index 92% rename from patches/server/0098-Dispensers-place-anvils-option.patch rename to patches/server/0097-Dispensers-place-anvils-option.patch index d95be60247..557ecd82bd 100644 --- a/patches/server/0098-Dispensers-place-anvils-option.patch +++ b/patches/server/0097-Dispensers-place-anvils-option.patch @@ -33,7 +33,7 @@ index 0a40df2151bd388b6633a6f50b14f1f41ed4ce62..3ff1d8b3dfaeb875e5e70b97abb79a21 return this.k; } diff --git a/src/main/java/net/minecraft/core/dispenser/IDispenseBehavior.java b/src/main/java/net/minecraft/core/dispenser/IDispenseBehavior.java -index 93093c05da53e5ddc59fac179081af2e0893706d..a6f74fc09843de9ad5af5c45e303e754ceea2c6d 100644 +index 0055a96b51a1d38d31e129c417c97bcfc9d0b745..31237773907341ee64c71507b5e1bf247ef2c524 100644 --- a/src/main/java/net/minecraft/core/dispenser/IDispenseBehavior.java +++ b/src/main/java/net/minecraft/core/dispenser/IDispenseBehavior.java @@ -52,6 +52,7 @@ import net.minecraft.world.level.IMaterial; @@ -44,7 +44,7 @@ index 93093c05da53e5ddc59fac179081af2e0893706d..a6f74fc09843de9ad5af5c45e303e754 import net.minecraft.world.level.block.BlockBeehive; import net.minecraft.world.level.block.BlockCampfire; import net.minecraft.world.level.block.BlockDispenser; -@@ -989,6 +990,23 @@ public interface IDispenseBehavior { +@@ -995,6 +996,23 @@ public interface IDispenseBehavior { } })); BlockDispenser.a((IMaterial) Items.SHEARS.getItem(), (IDispenseBehavior) (new DispenseBehaviorShears())); @@ -69,10 +69,10 @@ index 93093c05da53e5ddc59fac179081af2e0893706d..a6f74fc09843de9ad5af5c45e303e754 static void a(ISourceBlock isourceblock, Entity entity, EnumDirection enumdirection) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 55d7c48f0dd03c690b0d0b1fee4f3a5306de8d1d..0d29894033d648c3588f4d02646ebe6cdd11f334 100644 +index b328c9f69fd43ca7ed57ee7f5b46ca998f2cb672..54b8021bfac69800d4cec996a94c2fea53249130 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -285,8 +285,10 @@ public class PurpurWorldConfig { +@@ -297,8 +297,10 @@ public class PurpurWorldConfig { } public boolean dispenserApplyCursedArmor = true; diff --git a/patches/server/0099-Allow-anvil-colors.patch b/patches/server/0098-Allow-anvil-colors.patch similarity index 94% rename from patches/server/0099-Allow-anvil-colors.patch rename to patches/server/0098-Allow-anvil-colors.patch index a5449f5809..21f2238b64 100644 --- a/patches/server/0099-Allow-anvil-colors.patch +++ b/patches/server/0098-Allow-anvil-colors.patch @@ -41,10 +41,10 @@ index 1b2d633f3d5d735039f18f27fb1387bd5a74f0d8..77810fbb70bf2e1ad03c28c0d69ceaa6 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 0d29894033d648c3588f4d02646ebe6cdd11f334..87eb9d7a9d15640fe8d5892ae609d63dc6754379 100644 +index 54b8021bfac69800d4cec996a94c2fea53249130..96e5aaec4e35bd092e9a71ca5cb61c6a66b9c0fc 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -268,6 +268,11 @@ public class PurpurWorldConfig { +@@ -280,6 +280,11 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0100-Add-no-random-tick-block-list.patch b/patches/server/0099-Add-no-random-tick-block-list.patch similarity index 93% rename from patches/server/0100-Add-no-random-tick-block-list.patch rename to patches/server/0099-Add-no-random-tick-block-list.patch index 5bae683817..9a0651d3bb 100644 --- a/patches/server/0100-Add-no-random-tick-block-list.patch +++ b/patches/server/0099-Add-no-random-tick-block-list.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add no-random-tick block list diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 06517693aacc22c7507a09c15739e0779dbb82b0..9fce5ff2a7980a02510fdc5d1e45d39336d1542a 100644 +index ed81ed932abba0ea72668950f2359c6bc5438c03..449822699f5d9f78a89d747f01e16a64064c57cd 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -532,14 +532,14 @@ public class WorldServer extends World implements GeneratorAccessSeed { @@ -26,7 +26,7 @@ index 06517693aacc22c7507a09c15739e0779dbb82b0..9fce5ff2a7980a02510fdc5d1e45d393 this.nextTickListFluid = new TickListServer<>(this, (fluidtype) -> { return fluidtype == null || fluidtype == FluidTypes.EMPTY; diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBase.java b/src/main/java/net/minecraft/world/level/block/state/BlockBase.java -index 6124b56d935386784371422960a07d518f848cf3..e5f66cdf95b6073545efc8d1527b0a5e2741f79d 100644 +index 1d82f719440c95765c01a588f4785d630b8b527a..0ea0a1fc5f4d879d48bbdf24731dabec10dbccd1 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBase.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBase.java @@ -671,10 +671,12 @@ public abstract class BlockBase { @@ -43,7 +43,7 @@ index 6124b56d935386784371422960a07d518f848cf3..e5f66cdf95b6073545efc8d1527b0a5e } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 87eb9d7a9d15640fe8d5892ae609d63dc6754379..895480fdb4ce200a2194ab5d0873b5ab1a0b9325 100644 +index 96e5aaec4e35bd092e9a71ca5cb61c6a66b9c0fc..aa4302ba319c0968632025524d5a9c5479a693e2 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -11,8 +11,10 @@ import org.bukkit.configuration.ConfigurationSection; @@ -57,7 +57,7 @@ index 87eb9d7a9d15640fe8d5892ae609d63dc6754379..895480fdb4ce200a2194ab5d0873b5ab import java.util.logging.Level; import static net.pl3x.purpur.PurpurConfig.log; -@@ -235,6 +237,28 @@ public class PurpurWorldConfig { +@@ -247,6 +249,28 @@ public class PurpurWorldConfig { playerInvulnerableWhileAcceptingResourcePack = getBoolean("gameplay-mechanics.player.invulnerable-while-accepting-resource-pack", playerInvulnerableWhileAcceptingResourcePack); } diff --git a/patches/server/0101-Add-option-to-disable-dolphin-treasure-searching.patch b/patches/server/0100-Add-option-to-disable-dolphin-treasure-searching.patch similarity index 92% rename from patches/server/0101-Add-option-to-disable-dolphin-treasure-searching.patch rename to patches/server/0100-Add-option-to-disable-dolphin-treasure-searching.patch index ec2fe0d8f8..b6405f16c0 100644 --- a/patches/server/0101-Add-option-to-disable-dolphin-treasure-searching.patch +++ b/patches/server/0100-Add-option-to-disable-dolphin-treasure-searching.patch @@ -17,10 +17,10 @@ index 5d18e19eafd5dc01a6caa45075d8c0598f1bb709..e0a9b931c26dbd4e7739d09ae45e1cee } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 895480fdb4ce200a2194ab5d0873b5ab1a0b9325..4fa9ca53480538687b3045bac74cbe74136e5fec 100644 +index aa4302ba319c0968632025524d5a9c5479a693e2..c2e4a8a50b0e70283fccce265e76fa78841f47b9 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -399,6 +399,11 @@ public class PurpurWorldConfig { +@@ -411,6 +411,11 @@ public class PurpurWorldConfig { creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); } diff --git a/patches/server/0102-Short-enderman-height.patch b/patches/server/0101-Short-enderman-height.patch similarity index 100% rename from patches/server/0102-Short-enderman-height.patch rename to patches/server/0101-Short-enderman-height.patch diff --git a/patches/server/0103-Stop-squids-floating-on-top-of-water.patch b/patches/server/0102-Stop-squids-floating-on-top-of-water.patch similarity index 95% rename from patches/server/0103-Stop-squids-floating-on-top-of-water.patch rename to patches/server/0102-Stop-squids-floating-on-top-of-water.patch index 085e376d2b..4feb464d7b 100644 --- a/patches/server/0103-Stop-squids-floating-on-top-of-water.patch +++ b/patches/server/0102-Stop-squids-floating-on-top-of-water.patch @@ -51,10 +51,10 @@ index 1f5f3e0d209426b97e32b82dd15176b800f85816..e6757b22497c6e274c3999d58671653e protected void initPathfinder() { this.goalSelector.a(0, new EntitySquid.PathfinderGoalSquid(this)); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 4fa9ca53480538687b3045bac74cbe74136e5fec..ffb53daed6bb08d4f448f4d0a6fee6d10710541b 100644 +index c2e4a8a50b0e70283fccce265e76fa78841f47b9..f16f99517999ccbb0b5a678ffcb3befc93a3ae45 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -545,8 +545,10 @@ public class PurpurWorldConfig { +@@ -557,8 +557,10 @@ public class PurpurWorldConfig { } public boolean squidImmuneToEAR = true; diff --git a/patches/server/0104-Ridables.patch b/patches/server/0103-Ridables.patch similarity index 93% rename from patches/server/0104-Ridables.patch rename to patches/server/0103-Ridables.patch index 31616d053c..abef96672a 100644 --- a/patches/server/0104-Ridables.patch +++ b/patches/server/0103-Ridables.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Ridables diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 409c272629ca935dcbaa9e73e10ace4a0bd8f9b7..4ceaa8e905c9ba7277ee00cea020d01d14ae2178 100644 +index 0cea9db58772d8c69b5cfdd4a2987593b2c9ea6c..e3c3b2eb03ad132a91140cb459fd8f378154ee2e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1540,6 +1540,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant 0; // Paper worldserver.hasEntityMoveEvent = EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper @@ -18,7 +18,7 @@ index 409c272629ca935dcbaa9e73e10ace4a0bd8f9b7..4ceaa8e905c9ba7277ee00cea020d01d this.methodProfiler.a(() -> { diff --git a/src/main/java/net/minecraft/server/PathfinderGoalHasRider.java b/src/main/java/net/minecraft/server/PathfinderGoalHasRider.java new file mode 100644 -index 0000000000000000000000000000000000000000..70961ec1d385dfd7c17fed6f33e4eb7fd57bc34a +index 0000000000000000000000000000000000000000..4c5dd9431b9afb2f110228d058d2b0f0808f0ab9 --- /dev/null +++ b/src/main/java/net/minecraft/server/PathfinderGoalHasRider.java @@ -0,0 +1,21 @@ @@ -40,7 +40,7 @@ index 0000000000000000000000000000000000000000..70961ec1d385dfd7c17fed6f33e4eb7f + // shouldExecute + @Override + public boolean a() { -+ return entity.hasRider(); ++ return entity.hasPurpurRider(); + } +} diff --git a/src/main/java/net/minecraft/server/PathfinderGoalHorseHasRider.java b/src/main/java/net/minecraft/server/PathfinderGoalHorseHasRider.java @@ -68,16 +68,32 @@ index 0000000000000000000000000000000000000000..8b66d1215a6eef1302b5ecb46a4b3d50 + } +} diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 53c2bb5af825255e8c786bf02052f41c5d3e270b..af0253aecc8f3a4125b37aed4548c13b7ad6260a 100644 +index da708df0dc50ea02441f9db2bfd52f04d9a8e3da..0ed513afdab9b4f8e91b55ffc05f6d26bbd14d22 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -642,6 +642,15 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -80,7 +80,6 @@ import net.minecraft.server.network.PlayerConnection; + import net.minecraft.server.players.PlayerList; + import net.minecraft.sounds.SoundCategory; + import net.minecraft.sounds.SoundEffect; +-import net.minecraft.stats.RecipeBook; + import net.minecraft.stats.RecipeBookServer; + import net.minecraft.stats.ServerStatisticManager; + import net.minecraft.stats.Statistic; +@@ -132,7 +131,6 @@ import net.minecraft.world.level.block.entity.TileEntityCommand; + import net.minecraft.world.level.block.entity.TileEntitySign; + import net.minecraft.world.level.block.state.IBlockData; + import net.minecraft.world.level.portal.ShapeDetectorShape; +-import net.minecraft.world.level.storage.WorldData; + import net.minecraft.world.phys.AxisAlignedBB; + import net.minecraft.world.phys.Vec3D; + import net.minecraft.world.scores.ScoreboardScore; +@@ -642,6 +640,15 @@ public class EntityPlayer extends EntityHuman implements ICrafting { } this.advancementDataPlayer.b(this); + + // Purpur start -+ if (this.world.purpurConfig.useNightVisionWhenRiding && this.getVehicle() != null && this.getVehicle().getRider() == this && world.getTime() % 100 == 0) { // 5 seconds ++ if (this.world.purpurConfig.useNightVisionWhenRiding && this.getVehicle() != null && this.getVehicle().getPurpurRider() == this && world.getTime() % 100 == 0) { // 5 seconds + MobEffect nightVision = this.getEffect(MobEffects.NIGHT_VISION); + if (nightVision == null || nightVision.getDuration() <= 300) { // 15 seconds + this.addEffect(new MobEffect(MobEffects.NIGHT_VISION, 400, 0)); // 20 seconds @@ -88,7 +104,7 @@ index 53c2bb5af825255e8c786bf02052f41c5d3e270b..af0253aecc8f3a4125b37aed4548c13b public void playerTick() { diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 9fce5ff2a7980a02510fdc5d1e45d39336d1542a..535cd9faeeb8072b395bff7a3f7ca095afb02df4 100644 +index 449822699f5d9f78a89d747f01e16a64064c57cd..132cf3beabc9206c7ba5fb557bb487fa813cc5a7 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -216,6 +216,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { @@ -100,10 +116,10 @@ index 9fce5ff2a7980a02510fdc5d1e45d39336d1542a..535cd9faeeb8072b395bff7a3f7ca095 return new Throwable(entity + " Added to world at " + new java.util.Date()); } diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 92437cf4413ea76ef139b007adf2b76c2729dad2..07541f23ee853dae137440129e600d345774cd90 100644 +index 4e43cd877c45a014add62547a4dbfadbd09082d2..bf6c040cfe68f96fa25511967091677abdaf4f0e 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java -@@ -2467,6 +2467,8 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -2472,6 +2472,8 @@ public class PlayerConnection implements PacketListenerPlayIn { } this.server.getPluginManager().callEvent(event); @@ -133,7 +149,7 @@ index 6ba14f603b8ec69597c70677cc317f802d6afae9..24fd920394774bf38d2818a4cd013670 this.B = true; return this; diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 4e084e26e0430422b0348a0a91f0e412ff3a9eff..4e1363050bef7fff9117250b79cbf35bf6bfc537 100644 +index 4e084e26e0430422b0348a0a91f0e412ff3a9eff..2fed41af0416174a6e23282e3931f0b7d4f6f29f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -22,6 +22,7 @@ import net.minecraft.BlockUtil; @@ -144,7 +160,15 @@ index 4e084e26e0430422b0348a0a91f0e412ff3a9eff..4e1363050bef7fff9117250b79cbf35b import net.minecraft.advancements.CriterionTriggers; import net.minecraft.commands.CommandListenerWrapper; import net.minecraft.commands.ICommandListener; -@@ -197,7 +198,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -104,7 +105,6 @@ import net.minecraft.world.phys.AxisAlignedBB; + import net.minecraft.world.phys.MovingObjectPosition; + import net.minecraft.world.phys.Vec2F; + import net.minecraft.world.phys.Vec3D; +-import net.minecraft.world.phys.shapes.OperatorBoolean; + import net.minecraft.world.phys.shapes.VoxelShape; + import net.minecraft.world.phys.shapes.VoxelShapeCollision; + import net.minecraft.world.phys.shapes.VoxelShapes; +@@ -197,7 +197,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne private int id; public boolean i; public final boolean blocksEntitySpawning() { return this.i; } // Paper - OBFHELPER public final List passengers; @@ -153,7 +177,7 @@ index 4e084e26e0430422b0348a0a91f0e412ff3a9eff..4e1363050bef7fff9117250b79cbf35b @Nullable private Entity vehicle; public boolean attachedToPlayer; -@@ -213,7 +214,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -213,7 +213,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne public float lastYaw; public float lastPitch; private AxisAlignedBB boundingBox; @@ -162,7 +186,7 @@ index 4e084e26e0430422b0348a0a91f0e412ff3a9eff..4e1363050bef7fff9117250b79cbf35b public boolean positionChanged; public boolean v; public boolean velocityChanged; -@@ -269,7 +270,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -269,7 +269,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne private boolean az; private final double[] aA; private long aB; @@ -171,7 +195,7 @@ index 4e084e26e0430422b0348a0a91f0e412ff3a9eff..4e1363050bef7fff9117250b79cbf35b private float headHeight; // CraftBukkit start public boolean persist = true; -@@ -1621,6 +1622,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1621,6 +1621,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return !this.justCreated && this.M.getDouble(TagsFluid.LAVA) > 0.0D; } @@ -179,7 +203,7 @@ index 4e084e26e0430422b0348a0a91f0e412ff3a9eff..4e1363050bef7fff9117250b79cbf35b public void a(float f, Vec3D vec3d) { Vec3D vec3d1 = a(vec3d, f, this.yaw); -@@ -2377,6 +2379,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2377,6 +2378,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return this.a(entity, false); } @@ -187,7 +211,7 @@ index 4e084e26e0430422b0348a0a91f0e412ff3a9eff..4e1363050bef7fff9117250b79cbf35b public boolean a(Entity entity, boolean flag) { for (Entity entity1 = entity; entity1.vehicle != null; entity1 = entity1.vehicle) { if (entity1.vehicle == this) { -@@ -2472,6 +2475,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2472,6 +2474,13 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne this.passengers.add(entity); } @@ -195,26 +219,26 @@ index 4e084e26e0430422b0348a0a91f0e412ff3a9eff..4e1363050bef7fff9117250b79cbf35b + if (isRidable() && passengers.get(0) == entity && entity instanceof EntityHuman) { + EntityHuman entityhuman = (EntityHuman) entity; + onMount(entityhuman); -+ this.rider = entityhuman; ++ this.purpurRider = entityhuman; + } + // Purpur end } return true; // CraftBukkit } -@@ -2512,6 +2522,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2512,6 +2521,12 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return false; } // Spigot end + // Purpur start -+ if (rider != null && passengers.get(0) == rider) { -+ onDismount(rider); -+ this.rider = null; ++ if (purpurRider != null && passengers.get(0) == purpurRider) { ++ onDismount(purpurRider); ++ this.purpurRider = null; + } + // Purpur end this.passengers.remove(entity); entity.j = 60; } -@@ -2677,6 +2693,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2677,6 +2692,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne this.setFlag(4, flag); } @@ -222,7 +246,7 @@ index 4e084e26e0430422b0348a0a91f0e412ff3a9eff..4e1363050bef7fff9117250b79cbf35b public boolean bE() { return this.glowing || this.world.isClientSide && this.getFlag(6); } -@@ -2899,6 +2916,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2899,6 +2915,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne public void setHeadRotation(float f) {} @@ -230,7 +254,7 @@ index 4e084e26e0430422b0348a0a91f0e412ff3a9eff..4e1363050bef7fff9117250b79cbf35b public void n(float f) {} public boolean bL() { -@@ -3340,6 +3358,18 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -3340,6 +3357,18 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return false; } @@ -249,20 +273,20 @@ index 4e084e26e0430422b0348a0a91f0e412ff3a9eff..4e1363050bef7fff9117250b79cbf35b @Override public void sendMessage(IChatBaseComponent ichatbasecomponent, UUID uuid) {} -@@ -3792,4 +3822,47 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -3792,4 +3821,47 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return ((ChunkProviderServer) world.getChunkProvider()).isInEntityTickingChunk(this); } // Paper end + + // Purpur start -+ private EntityHuman rider; ++ private EntityHuman purpurRider; + -+ public EntityHuman getRider() { -+ return rider; ++ public EntityHuman getPurpurRider() { ++ return purpurRider; + } + -+ public boolean hasRider() { -+ return rider != null; ++ public boolean hasPurpurRider() { ++ return purpurRider != null; + } + + public boolean isRidable() { @@ -298,10 +322,19 @@ index 4e084e26e0430422b0348a0a91f0e412ff3a9eff..4e1363050bef7fff9117250b79cbf35b + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/EntityInsentient.java b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -index e10377b379079bc467a60abe719075c5ef73e858..df33b46ff1267f0f2692a8956438f3bd1e2a3086 100644 +index e10377b379079bc467a60abe719075c5ef73e858..a5e3809d60a78d4638c81a2279ce15e6a66fd336 100644 --- a/src/main/java/net/minecraft/world/entity/EntityInsentient.java +++ b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -@@ -100,7 +100,7 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -46,8 +46,6 @@ import net.minecraft.world.entity.ai.sensing.EntitySenses; + import net.minecraft.world.entity.decoration.EntityHanging; + import net.minecraft.world.entity.decoration.EntityLeash; + import net.minecraft.world.entity.item.EntityItem; +-import net.minecraft.world.entity.monster.EntityBlaze; +-import net.minecraft.world.entity.monster.EntityEnderman; + import net.minecraft.world.entity.monster.IMonster; + import net.minecraft.world.entity.npc.EntityVillagerAbstract; + import net.minecraft.world.entity.player.EntityHuman; +@@ -100,7 +98,7 @@ public abstract class EntityInsentient extends EntityLiving { protected int f; protected ControllerLook lookController; protected ControllerMove moveController; @@ -310,7 +343,7 @@ index e10377b379079bc467a60abe719075c5ef73e858..df33b46ff1267f0f2692a8956438f3bd private final EntityAIBodyControl c; protected NavigationAbstract navigation; public PathfinderGoalSelector goalSelector; -@@ -138,8 +138,8 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -138,8 +136,8 @@ public abstract class EntityInsentient extends EntityLiving { this.bA = -1.0F; this.goalSelector = new PathfinderGoalSelector(world.getMethodProfilerSupplier()); this.targetSelector = new PathfinderGoalSelector(world.getMethodProfilerSupplier()); @@ -321,7 +354,7 @@ index e10377b379079bc467a60abe719075c5ef73e858..df33b46ff1267f0f2692a8956438f3bd this.bi = new ControllerJump(this); this.c = this.r(); this.navigation = this.b(world); -@@ -328,10 +328,10 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -328,10 +326,10 @@ public abstract class EntityInsentient extends EntityLiving { // Purpur start private void incrementTicksSinceLastInteraction() { ++ticksSinceLastInteraction; @@ -329,14 +362,14 @@ index e10377b379079bc467a60abe719075c5ef73e858..df33b46ff1267f0f2692a8956438f3bd - // ticksSinceLastInteraction = 0; - // return; - //} -+ if (hasRider()) { ++ if (hasPurpurRider()) { + ticksSinceLastInteraction = 0; + return; + } if (world.purpurConfig.entityLifeSpan <= 0) { return; // feature disabled } -@@ -626,14 +626,17 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -626,14 +624,17 @@ public abstract class EntityInsentient extends EntityLiving { return super.dp(); } @@ -354,7 +387,7 @@ index e10377b379079bc467a60abe719075c5ef73e858..df33b46ff1267f0f2692a8956438f3bd public void v(float f) { this.aR = f; } -@@ -1332,7 +1335,7 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1332,7 +1333,7 @@ public abstract class EntityInsentient extends EntityLiving { protected void a(EntityHuman entityhuman, EntityInsentient entityinsentient) {} protected EnumInteractionResult b(EntityHuman entityhuman, EnumHand enumhand) { @@ -363,7 +396,7 @@ index e10377b379079bc467a60abe719075c5ef73e858..df33b46ff1267f0f2692a8956438f3bd } public boolean ev() { -@@ -1713,4 +1716,54 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1713,4 +1714,54 @@ public abstract class EntityInsentient extends EntityLiving { this.unleash(true, event.isDropLeash()); // Paper end } @@ -419,7 +452,7 @@ index e10377b379079bc467a60abe719075c5ef73e858..df33b46ff1267f0f2692a8956438f3bd + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index 69101211dc01e5fbd1f156cbd612b4231098da5a..2d3ec6505b91a2cb43a1e2285a7d4e57a54e243c 100644 +index c9caa6919d47283331a9e0c79b22590b80293693..8b7a2eaa4f73b72f9022dbf58a46239541c81ff7 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java @@ -559,7 +559,7 @@ public abstract class EntityLiving extends Entity { @@ -471,12 +504,12 @@ index 69101211dc01e5fbd1f156cbd612b4231098da5a..2d3ec6505b91a2cb43a1e2285a7d4e57 } } + // Purpur start -+ if (hasRider()) { -+ getRider().resetIdleTimer(); ++ if (hasPurpurRider()) { ++ getPurpurRider().resetIdleTimer(); + if (((WorldServer) world).hasRidableMoveEvent && this instanceof EntityInsentient) { + Location from = new Location(world.getWorld(), lastX, lastY, lastZ, lastYaw, lastPitch); + Location to = new Location(world.getWorld(), locX(), locY(), locZ(), yaw, pitch); -+ net.pl3x.purpur.event.entity.RidableMoveEvent event = new net.pl3x.purpur.event.entity.RidableMoveEvent((org.bukkit.entity.Mob) getBukkitLivingEntity(), (Player) getRider().getBukkitEntity(), from, to.clone()); ++ net.pl3x.purpur.event.entity.RidableMoveEvent event = new net.pl3x.purpur.event.entity.RidableMoveEvent((org.bukkit.entity.Mob) getBukkitLivingEntity(), (Player) getPurpurRider().getBukkitEntity(), from, to.clone()); + if (!event.callEvent()) { + setLocation(from.getX(), from.getY(), from.getZ(), from.getYaw(), from.getPitch()); + } else if (!to.equals(event.getTo())) { @@ -646,7 +679,7 @@ index 2aa5789437ba7eb20579da238c407a65a25b1d44..434229b146978ba7dc08a83ea55fdb3a public ControllerMove(EntityInsentient entityinsentient) { diff --git a/src/main/java/net/minecraft/world/entity/ambient/EntityBat.java b/src/main/java/net/minecraft/world/entity/ambient/EntityBat.java -index 341b95f73a839a548b202e7bf97fd18760c71fd8..eed98fd7e84b4f390b8b356258f5011da561a343 100644 +index 341b95f73a839a548b202e7bf97fd18760c71fd8..a99c2b4281196ad3b93292da52fc4c6bf4207181 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/EntityBat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/EntityBat.java @@ -22,6 +22,7 @@ import net.minecraft.world.entity.EntityPose; @@ -693,7 +726,7 @@ index 341b95f73a839a548b202e7bf97fd18760c71fd8..eed98fd7e84b4f390b8b356258f5011d + @Override + public void g(Vec3D vec3d) { + super.g(vec3d); -+ if (hasRider() && !onGround) { ++ if (hasPurpurRider() && !onGround) { + float speed = (float) getAttributeInstance(GenericAttributes.FLYING_SPEED).getValue() * 2; + setSpeed(speed); + Vec3D mot = getMot(); @@ -720,7 +753,7 @@ index 341b95f73a839a548b202e7bf97fd18760c71fd8..eed98fd7e84b4f390b8b356258f5011d @Override protected void mobTick() { + // Purpur start -+ if (hasRider()) { ++ if (hasPurpurRider()) { + Vec3D mot = getMot(); + setMot(mot.x, mot.y + (getVertical() > 0 ? 0.07D : 0.0D), mot.z); + return; @@ -730,7 +763,7 @@ index 341b95f73a839a548b202e7bf97fd18760c71fd8..eed98fd7e84b4f390b8b356258f5011d BlockPosition blockposition = this.getChunkCoordinates(); BlockPosition blockposition1 = blockposition.up(); diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityBee.java b/src/main/java/net/minecraft/world/entity/animal/EntityBee.java -index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..0c6d3dae70eeea844a31f9edf54410db13e0b04b 100644 +index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..bcd510e0bf647a240edfaac1348119c5e1d7dc42 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityBee.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityBee.java @@ -22,6 +22,7 @@ import net.minecraft.network.protocol.game.PacketDebug; @@ -741,7 +774,7 @@ index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..0c6d3dae70eeea844a31f9edf54410db import net.minecraft.server.level.WorldServer; import net.minecraft.sounds.SoundEffect; import net.minecraft.sounds.SoundEffects; -@@ -44,6 +45,7 @@ import net.minecraft.world.entity.EntityPose; +@@ -44,10 +45,10 @@ import net.minecraft.world.entity.EntityPose; import net.minecraft.world.entity.EntitySize; import net.minecraft.world.entity.EntityTypes; import net.minecraft.world.entity.EnumMonsterType; @@ -749,7 +782,11 @@ index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..0c6d3dae70eeea844a31f9edf54410db import net.minecraft.world.entity.IEntityAngerable; import net.minecraft.world.entity.ai.attributes.AttributeProvider; import net.minecraft.world.entity.ai.attributes.GenericAttributes; -@@ -111,6 +113,7 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB +-import net.minecraft.world.entity.ai.control.ControllerLook; + import net.minecraft.world.entity.ai.control.ControllerMoveFlying; + import net.minecraft.world.entity.ai.goal.PathfinderGoal; + import net.minecraft.world.entity.ai.goal.PathfinderGoalBreed; +@@ -111,6 +112,7 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB public EntityBee(EntityTypes entitytypes, World world) { super(entitytypes, world); @@ -757,7 +794,7 @@ index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..0c6d3dae70eeea844a31f9edf54410db // Paper start - apply gravity to bees when they get stuck in the void, fixes MC-167279 this.moveController = new ControllerMoveFlying(this, 20, true) { @Override -@@ -120,6 +123,22 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB +@@ -120,6 +122,22 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB } super.tick(); } @@ -765,8 +802,8 @@ index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..0c6d3dae70eeea844a31f9edf54410db + // Purpur start + @Override + public void a() { // tick -+ if (getEntity().hasRider()) { -+ flyingController.tick(getEntity().getRider()); ++ if (getEntity().hasPurpurRider()) { ++ flyingController.tick(getEntity().getPurpurRider()); + } else { + tick(); + } @@ -774,13 +811,13 @@ index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..0c6d3dae70eeea844a31f9edf54410db + + @Override + public boolean b() { // isUpdating -+ return getEntity().hasRider() || super.b(); ++ return getEntity().hasPurpurRider() || super.b(); + } + // Purpur end }; // Paper end this.lookController = new EntityBee.j(this); -@@ -130,6 +149,35 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB +@@ -130,6 +148,35 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB this.a(PathType.FENCE, -1.0F); } @@ -803,7 +840,7 @@ index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..0c6d3dae70eeea844a31f9edf54410db + @Override + public void g(Vec3D vec3d) { + super.g(vec3d); -+ if (hasRider() && !onGround) { ++ if (hasPurpurRider() && !onGround) { + float speed = (float) getAttributeInstance(GenericAttributes.FLYING_SPEED).getValue() * 2; + setSpeed(speed); + Vec3D mot = getMot(); @@ -816,7 +853,7 @@ index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..0c6d3dae70eeea844a31f9edf54410db @Override protected void initDatawatcher() { super.initDatawatcher(); -@@ -144,6 +192,7 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB +@@ -144,6 +191,7 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB @Override protected void initPathfinder() { @@ -824,7 +861,7 @@ index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..0c6d3dae70eeea844a31f9edf54410db this.goalSelector.a(0, new EntityBee.b(this, 1.399999976158142D, true)); this.goalSelector.a(1, new EntityBee.d()); this.goalSelector.a(2, new PathfinderGoalBreed(this, 1.0D)); -@@ -159,6 +208,7 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB +@@ -159,6 +207,7 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB this.goalSelector.a(7, new EntityBee.g()); this.goalSelector.a(8, new EntityBee.l()); this.goalSelector.a(9, new PathfinderGoalFloat(this)); @@ -832,7 +869,7 @@ index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..0c6d3dae70eeea844a31f9edf54410db this.targetSelector.a(1, (new EntityBee.h(this)).a(new Class[0])); this.targetSelector.a(2, new EntityBee.c(this)); this.targetSelector.a(3, new PathfinderGoalUniversalAngerReset<>(this, true)); -@@ -629,6 +679,7 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB +@@ -629,6 +678,7 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB private d() { super(); // CraftBukkit - decompile error @@ -840,7 +877,7 @@ index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..0c6d3dae70eeea844a31f9edf54410db } @Override -@@ -691,6 +742,7 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB +@@ -691,6 +741,7 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB private g() { super(); // CraftBukkit - decompile error @@ -848,7 +885,7 @@ index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..0c6d3dae70eeea844a31f9edf54410db } @Override -@@ -755,6 +807,7 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB +@@ -755,6 +806,7 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB private i() { super(); // CraftBukkit - decompile error @@ -856,7 +893,7 @@ index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..0c6d3dae70eeea844a31f9edf54410db } @Override -@@ -978,16 +1031,16 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB +@@ -978,16 +1030,16 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB } } @@ -877,7 +914,7 @@ index 1d1f71a995a99b2101891a7a5bda7bec5d67f118..0c6d3dae70eeea844a31f9edf54410db } diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityCat.java b/src/main/java/net/minecraft/world/entity/animal/EntityCat.java -index c8f529b3fd227ce3354f442038b27cd716f57254..3efb010d0e045d14051a33bd7465669e415c26bd 100644 +index c8f529b3fd227ce3354f442038b27cd716f57254..bac3035e2382df2d79e592b02395753eee08fa4b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityCat.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityCat.java @@ -14,6 +14,7 @@ import net.minecraft.network.syncher.DataWatcher; @@ -952,7 +989,7 @@ index c8f529b3fd227ce3354f442038b27cd716f57254..3efb010d0e045d14051a33bd7465669e @Override public EnumInteractionResult b(EntityHuman entityhuman, EnumHand enumhand) { -+ if (hasRider()) return EnumInteractionResult.PASS; // Purpur ++ if (hasPurpurRider()) return EnumInteractionResult.PASS; // Purpur ItemStack itemstack = entityhuman.b(enumhand); Item item = itemstack.getItem(); @@ -1033,7 +1070,7 @@ index aac7992a30a0b69cb34097aeb0fe021f54a3cdac..897e0d5ca44a0c475634f08e7d4fcf12 protected ItemStack eK() { return new ItemStack(Items.COD_BUCKET); diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityCow.java b/src/main/java/net/minecraft/world/entity/animal/EntityCow.java -index 962dde5fcc617bc39b7d06a1e295370b9d60696c..cad256514c7df92847522c8d7ddf45ebe02658c4 100644 +index 962dde5fcc617bc39b7d06a1e295370b9d60696c..b2d3fc3151a952ac783101443772736a206a6a3b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityCow.java @@ -2,6 +2,7 @@ package net.minecraft.world.entity.animal; @@ -1071,7 +1108,7 @@ index 962dde5fcc617bc39b7d06a1e295370b9d60696c..cad256514c7df92847522c8d7ddf45eb @Override public EnumInteractionResult b(EntityHuman entityhuman, EnumHand enumhand) { -+ if (hasRider()) return EnumInteractionResult.PASS; // Purpur ++ if (hasPurpurRider()) return EnumInteractionResult.PASS; // Purpur ItemStack itemstack = entityhuman.b(enumhand); if (itemstack.getItem() == Items.BUCKET && !this.isBaby()) { @@ -1125,7 +1162,7 @@ index 962dde5fcc617bc39b7d06a1e295370b9d60696c..cad256514c7df92847522c8d7ddf45eb this.world.addEntity(mooshroom); this.die(); diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityDolphin.java b/src/main/java/net/minecraft/world/entity/animal/EntityDolphin.java -index e0a9b931c26dbd4e7739d09ae45e1cee72ab210c..880c3aaf4e684209879dc921480619e7c61ee4a0 100644 +index e0a9b931c26dbd4e7739d09ae45e1cee72ab210c..e4442716b329f3101bfd39fc7ce13d5419b427bf 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityDolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityDolphin.java @@ -16,6 +16,7 @@ import net.minecraft.network.syncher.DataWatcher; @@ -1161,13 +1198,13 @@ index e0a9b931c26dbd4e7739d09ae45e1cee72ab210c..880c3aaf4e684209879dc921480619e7 + + @Override + public boolean onSpacebar() { -+ if (spitCooldown == 0 && hasRider()) { ++ if (spitCooldown == 0 && hasPurpurRider()) { + spitCooldown = world.purpurConfig.dolphinSpitCooldown; -+ if (!hasRider()) { ++ if (!hasPurpurRider()) { + return false; + } + -+ org.bukkit.craftbukkit.entity.CraftPlayer player = (org.bukkit.craftbukkit.entity.CraftPlayer) getRider().getBukkitEntity(); ++ org.bukkit.craftbukkit.entity.CraftPlayer player = (org.bukkit.craftbukkit.entity.CraftPlayer) getPurpurRider().getBukkitEntity(); + if (!player.hasPermission("allow.special.dolphin")) { + return false; + } @@ -1266,10 +1303,18 @@ index e0a9b931c26dbd4e7739d09ae45e1cee72ab210c..880c3aaf4e684209879dc921480619e7 this.i.setMot(this.i.getMot().add(0.0D, 0.005D, 0.0D)); } diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityFish.java b/src/main/java/net/minecraft/world/entity/animal/EntityFish.java -index cbd7c37cd1d6f5dddcbc515ecc2d9df46e109bfa..bdbb389407a68d7f9fd7db366d710777ec3e2649 100644 +index cbd7c37cd1d6f5dddcbc515ecc2d9df46e109bfa..d9a5d5fb718f8c3d66844279622eae44fe826fff 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityFish.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityFish.java -@@ -8,6 +8,7 @@ import net.minecraft.nbt.NBTTagCompound; +@@ -1,13 +1,14 @@ + package net.minecraft.world.entity.animal; + + import java.util.Random; +-import java.util.function.Predicate; ++ + import net.minecraft.advancements.CriterionTriggers; + import net.minecraft.core.BlockPosition; + import net.minecraft.nbt.NBTTagCompound; import net.minecraft.network.syncher.DataWatcher; import net.minecraft.network.syncher.DataWatcherObject; import net.minecraft.network.syncher.DataWatcherRegistry; @@ -1277,7 +1322,15 @@ index cbd7c37cd1d6f5dddcbc515ecc2d9df46e109bfa..bdbb389407a68d7f9fd7db366d710777 import net.minecraft.server.level.EntityPlayer; import net.minecraft.sounds.SoundEffect; import net.minecraft.sounds.SoundEffects; -@@ -116,13 +117,12 @@ public abstract class EntityFish extends EntityWaterAnimal { +@@ -29,7 +30,6 @@ import net.minecraft.world.entity.ai.control.ControllerMove; + import net.minecraft.world.entity.ai.goal.PathfinderGoalAvoidTarget; + import net.minecraft.world.entity.ai.goal.PathfinderGoalPanic; + import net.minecraft.world.entity.ai.goal.PathfinderGoalRandomSwim; +-import net.minecraft.world.entity.ai.goal.PathfinderGoalSelector; + import net.minecraft.world.entity.ai.navigation.NavigationAbstract; + import net.minecraft.world.entity.ai.navigation.NavigationGuardian; + import net.minecraft.world.entity.player.EntityHuman; +@@ -116,13 +116,12 @@ public abstract class EntityFish extends EntityWaterAnimal { @Override protected void initPathfinder() { super.initPathfinder(); @@ -1297,16 +1350,16 @@ index cbd7c37cd1d6f5dddcbc515ecc2d9df46e109bfa..bdbb389407a68d7f9fd7db366d710777 } @Override -@@ -133,7 +133,7 @@ public abstract class EntityFish extends EntityWaterAnimal { +@@ -133,7 +132,7 @@ public abstract class EntityFish extends EntityWaterAnimal { @Override public void g(Vec3D vec3d) { if (this.doAITick() && this.isInWater()) { - this.a(0.01F, vec3d); -+ this.a(hasRider() ? getSpeed() : 0.01F, vec3d); // Purpur ++ this.a(hasPurpurRider() ? getSpeed() : 0.01F, vec3d); // Purpur this.move(EnumMoveType.SELF, this.getMot()); this.setMot(this.getMot().a(0.9D)); if (this.getGoalTarget() == null) { -@@ -220,9 +220,9 @@ public abstract class EntityFish extends EntityWaterAnimal { +@@ -220,9 +219,9 @@ public abstract class EntityFish extends EntityWaterAnimal { @Override protected void b(BlockPosition blockposition, IBlockData iblockdata) {} @@ -1318,7 +1371,7 @@ index cbd7c37cd1d6f5dddcbc515ecc2d9df46e109bfa..bdbb389407a68d7f9fd7db366d710777 a(EntityFish entityfish) { super(entityfish); -@@ -230,7 +230,15 @@ public abstract class EntityFish extends EntityWaterAnimal { +@@ -230,7 +229,15 @@ public abstract class EntityFish extends EntityWaterAnimal { } @Override @@ -1349,7 +1402,7 @@ index 21780f5dbcd4384649f08161f0812202ee94c96d..a03b0ed0a3f74ccb7572e1c4fa8e345a @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityFox.java b/src/main/java/net/minecraft/world/entity/animal/EntityFox.java -index cea46348c0876e168376061fbaf258048e9358cb..0c1151b598aa681e63ddaac29e4a589f917fd03b 100644 +index 19a9affdaba52d8e7dc1c4c20d5c0d52829f4989..7b1a6d846f25d8bc659a541fce59df79347ba9bc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityFox.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityFox.java @@ -21,6 +21,7 @@ import net.minecraft.network.syncher.DataWatcher; @@ -1360,7 +1413,16 @@ index cea46348c0876e168376061fbaf258048e9358cb..0c1151b598aa681e63ddaac29e4a589f import net.minecraft.server.level.EntityPlayer; import net.minecraft.server.level.WorldServer; import net.minecraft.sounds.SoundEffect; -@@ -127,6 +128,39 @@ public class EntityFox extends EntityAnimal { +@@ -48,8 +49,6 @@ import net.minecraft.world.entity.GroupDataEntity; + import net.minecraft.world.entity.IEntitySelector; + import net.minecraft.world.entity.ai.attributes.AttributeProvider; + import net.minecraft.world.entity.ai.attributes.GenericAttributes; +-import net.minecraft.world.entity.ai.control.ControllerLook; +-import net.minecraft.world.entity.ai.control.ControllerMove; + import net.minecraft.world.entity.ai.goal.PathfinderGoal; + import net.minecraft.world.entity.ai.goal.PathfinderGoalAvoidTarget; + import net.minecraft.world.entity.ai.goal.PathfinderGoalBreed; +@@ -127,6 +126,39 @@ public class EntityFox extends EntityAnimal { this.setCanPickupLoot(true); } @@ -1377,7 +1439,7 @@ index cea46348c0876e168376061fbaf258048e9358cb..0c1151b598aa681e63ddaac29e4a589f + + @Override + public float getJumpHeight() { -+ return !hasRider() ? super.getJumpHeight() : 0.5F; ++ return !hasPurpurRider() ? super.getJumpHeight() : 0.5F; + } + + @Override @@ -1400,7 +1462,7 @@ index cea46348c0876e168376061fbaf258048e9358cb..0c1151b598aa681e63ddaac29e4a589f @Override protected void initDatawatcher() { super.initDatawatcher(); -@@ -146,6 +180,7 @@ public class EntityFox extends EntityAnimal { +@@ -146,6 +178,7 @@ public class EntityFox extends EntityAnimal { return entityliving instanceof EntityFishSchool; }); this.goalSelector.a(0, new EntityFox.g()); @@ -1408,7 +1470,7 @@ index cea46348c0876e168376061fbaf258048e9358cb..0c1151b598aa681e63ddaac29e4a589f this.goalSelector.a(1, new EntityFox.b()); this.goalSelector.a(2, new EntityFox.n(2.2D)); this.goalSelector.a(3, new EntityFox.e(1.0D)); -@@ -171,6 +206,7 @@ public class EntityFox extends EntityAnimal { +@@ -171,6 +204,7 @@ public class EntityFox extends EntityAnimal { this.goalSelector.a(11, new EntityFox.p()); this.goalSelector.a(12, new EntityFox.j(this, EntityHuman.class, 24.0F)); this.goalSelector.a(13, new EntityFox.r()); @@ -1416,7 +1478,7 @@ index cea46348c0876e168376061fbaf258048e9358cb..0c1151b598aa681e63ddaac29e4a589f this.targetSelector.a(3, new EntityFox.a(EntityLiving.class, false, false, (entityliving) -> { return EntityFox.bt.test(entityliving) && !this.c(entityliving.getUniqueID()); })); -@@ -458,6 +494,7 @@ public class EntityFox extends EntityAnimal { +@@ -458,6 +492,7 @@ public class EntityFox extends EntityAnimal { return itemstack1.isEmpty() || this.bD > 0 && item.isFood() && !itemstack1.getItem().isFood(); } @@ -1424,7 +1486,7 @@ index cea46348c0876e168376061fbaf258048e9358cb..0c1151b598aa681e63ddaac29e4a589f private void m(ItemStack itemstack) { if (!itemstack.isEmpty() && !this.world.isClientSide) { EntityItem entityitem = new EntityItem(this.world, this.locX() + this.getLookDirection().x, this.locY() + 1.0D, this.locZ() + this.getLookDirection().z, itemstack); -@@ -553,6 +590,7 @@ public class EntityFox extends EntityAnimal { +@@ -553,6 +588,7 @@ public class EntityFox extends EntityAnimal { return this.t(16); } @@ -1432,7 +1494,7 @@ index cea46348c0876e168376061fbaf258048e9358cb..0c1151b598aa681e63ddaac29e4a589f public void u(boolean flag) { this.d(16, flag); } -@@ -595,6 +633,7 @@ public class EntityFox extends EntityAnimal { +@@ -595,6 +631,7 @@ public class EntityFox extends EntityAnimal { this.setSleeping(false); } @@ -1440,7 +1502,7 @@ index cea46348c0876e168376061fbaf258048e9358cb..0c1151b598aa681e63ddaac29e4a589f private void fd() { this.w(false); this.setCrouching(false); -@@ -760,16 +799,16 @@ public class EntityFox extends EntityAnimal { +@@ -760,16 +797,16 @@ public class EntityFox extends EntityAnimal { } } @@ -1460,7 +1522,7 @@ index cea46348c0876e168376061fbaf258048e9358cb..0c1151b598aa681e63ddaac29e4a589f } } -@@ -1439,16 +1478,16 @@ public class EntityFox extends EntityAnimal { +@@ -1439,16 +1476,16 @@ public class EntityFox extends EntityAnimal { } } @@ -1771,7 +1833,7 @@ index 711b322007a0973ff0aebf3c25efbae8fc7741d0..0d912399e1975d9c0d5525f5b89049f4 } } diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java b/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java -index 699dd0ac1f8d0d340ab1a560106336fc7cc95d5b..5c26eea7e3e93dc7bcd8b86519e84db58b70cecb 100644 +index 699dd0ac1f8d0d340ab1a560106336fc7cc95d5b..9f705b75a14ba456808485ce4ddef9550aac3fe9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java @@ -16,6 +16,7 @@ import net.minecraft.nbt.NBTTagCompound; @@ -1800,8 +1862,8 @@ index 699dd0ac1f8d0d340ab1a560106336fc7cc95d5b..5c26eea7e3e93dc7bcd8b86519e84db5 + this.moveController = new ControllerMoveFlying(this, 10, false) { + @Override + public void a() { // tick -+ if (getEntity().hasRider()) { -+ flyingController.tick(getEntity().getRider()); ++ if (getEntity().hasPurpurRider()) { ++ flyingController.tick(getEntity().getPurpurRider()); + } else { + tick(); + } @@ -1809,7 +1871,7 @@ index 699dd0ac1f8d0d340ab1a560106336fc7cc95d5b..5c26eea7e3e93dc7bcd8b86519e84db5 + + @Override + public boolean b() { // isUpdating -+ return getEntity().hasRider() ? getForward() != 0 || getStrafe() != 0 : super.b(); ++ return getEntity().hasPurpurRider() ? getForward() != 0 || getStrafe() != 0 : super.b(); + } + }; + // Purpur end @@ -1837,7 +1899,7 @@ index 699dd0ac1f8d0d340ab1a560106336fc7cc95d5b..5c26eea7e3e93dc7bcd8b86519e84db5 + @Override + public void g(Vec3D vec3d) { + super.g(vec3d); -+ if (hasRider() && !onGround) { ++ if (hasPurpurRider() && !onGround) { + float speed = (float) getAttributeInstance(GenericAttributes.FLYING_SPEED).getValue() * 2; + setSpeed(speed); + Vec3D mot = getMot(); @@ -1898,7 +1960,7 @@ index 1a540e41e6161d011ca4ed30c68ae9df4567b8db..cef69f99d7bc9b6605b9654c50f43a1e this.goalSelector.a(3, new PathfinderGoalBreed(this, 1.0D)); this.goalSelector.a(4, new PathfinderGoalTempt(this, 1.2D, RecipeItemStack.a(Items.CARROT_ON_A_STICK), false)); diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityPolarBear.java b/src/main/java/net/minecraft/world/entity/animal/EntityPolarBear.java -index f25f5ced218555af0d62844a78842cfc7599d608..e686491a469573a3fc466c46be1b7430ff02ba53 100644 +index f25f5ced218555af0d62844a78842cfc7599d608..b46315700b8857318b03b83097fcf829047f8ca4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityPolarBear.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityPolarBear.java @@ -14,6 +14,7 @@ import net.minecraft.network.syncher.DataWatcher; @@ -1933,7 +1995,7 @@ index f25f5ced218555af0d62844a78842cfc7599d608..e686491a469573a3fc466c46be1b7430 + @Override + public boolean onSpacebar() { + if (!isStanding()) { -+ if (hasRider() && getRider().getForward() == 0 && getRider().getStrafe() == 0) { ++ if (hasPurpurRider() && getPurpurRider().getForward() == 0 && getPurpurRider().getStrafe() == 0) { + setStanding(true); + playSound(SoundEffects.ENTITY_POLAR_BEAR_WARNING, 1.0F, 1.0F); + } @@ -2013,7 +2075,7 @@ index e9f20d387ccdacfbb1a48dc31e2a6cd4843a0d7b..38fe79872b4b7f4ad4a030fbdf505efb @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java b/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java -index 180fc927074dc683ad4d482a00dd4e04ff7923d0..fff6bcff9d44c7d49cd2d0c334ea702531c74ea1 100644 +index 180fc927074dc683ad4d482a00dd4e04ff7923d0..4660f37bc89418e0c3767305d390a53f5c0d3c55 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java @@ -10,6 +10,7 @@ import net.minecraft.network.syncher.DataWatcher; @@ -2024,7 +2086,15 @@ index 180fc927074dc683ad4d482a00dd4e04ff7923d0..fff6bcff9d44c7d49cd2d0c334ea7025 import net.minecraft.server.level.WorldServer; import net.minecraft.sounds.SoundCategory; import net.minecraft.sounds.SoundEffect; -@@ -75,6 +76,18 @@ public class EntityRabbit extends EntityAnimal { +@@ -27,7 +28,6 @@ import net.minecraft.world.entity.GroupDataEntity; + import net.minecraft.world.entity.ai.attributes.AttributeProvider; + import net.minecraft.world.entity.ai.attributes.GenericAttributes; + import net.minecraft.world.entity.ai.control.ControllerJump; +-import net.minecraft.world.entity.ai.control.ControllerMove; + import net.minecraft.world.entity.ai.goal.PathfinderGoalAvoidTarget; + import net.minecraft.world.entity.ai.goal.PathfinderGoalBreed; + import net.minecraft.world.entity.ai.goal.PathfinderGoalFloat; +@@ -75,6 +75,18 @@ public class EntityRabbit extends EntityAnimal { this.initializePathFinderGoals(); // CraftBukkit - moved code } @@ -2043,7 +2113,7 @@ index 180fc927074dc683ad4d482a00dd4e04ff7923d0..fff6bcff9d44c7d49cd2d0c334ea7025 // CraftBukkit start - code from constructor public void initializePathFinderGoals(){ this.i(0.0D); -@@ -83,7 +96,8 @@ public class EntityRabbit extends EntityAnimal { +@@ -83,7 +95,8 @@ public class EntityRabbit extends EntityAnimal { @Override public void initPathfinder() { @@ -2053,14 +2123,14 @@ index 180fc927074dc683ad4d482a00dd4e04ff7923d0..fff6bcff9d44c7d49cd2d0c334ea7025 this.goalSelector.a(1, new EntityRabbit.PathfinderGoalRabbitPanic(this, 2.2D)); this.goalSelector.a(2, new PathfinderGoalBreed(this, 0.8D)); this.goalSelector.a(3, new PathfinderGoalTempt(this, 1.0D, RecipeItemStack.a(Items.CARROT, Items.GOLDEN_CARROT, Blocks.DANDELION), false)); -@@ -96,7 +110,15 @@ public class EntityRabbit extends EntityAnimal { +@@ -96,7 +109,15 @@ public class EntityRabbit extends EntityAnimal { } @Override - protected float dJ() { + // Purpur start + public float getJumpHeight() { -+ if (hasRider()) { ++ if (hasPurpurRider()) { + if (getForward() < 0) { + setSpeed(getForward() * 2F); + } @@ -2070,7 +2140,7 @@ index 180fc927074dc683ad4d482a00dd4e04ff7923d0..fff6bcff9d44c7d49cd2d0c334ea7025 if (!this.positionChanged && (!this.moveController.b() || this.moveController.e() <= this.locY() + 0.5D)) { PathEntity pathentity = this.navigation.k(); -@@ -115,7 +137,7 @@ public class EntityRabbit extends EntityAnimal { +@@ -115,7 +136,7 @@ public class EntityRabbit extends EntityAnimal { } @Override @@ -2079,7 +2149,7 @@ index 180fc927074dc683ad4d482a00dd4e04ff7923d0..fff6bcff9d44c7d49cd2d0c334ea7025 super.jump(); double d0 = this.moveController.c(); -@@ -147,6 +169,7 @@ public class EntityRabbit extends EntityAnimal { +@@ -147,6 +168,7 @@ public class EntityRabbit extends EntityAnimal { } @@ -2087,12 +2157,12 @@ index 180fc927074dc683ad4d482a00dd4e04ff7923d0..fff6bcff9d44c7d49cd2d0c334ea7025 public void eK() { this.setJumping(true); this.br = 10; -@@ -161,6 +184,13 @@ public class EntityRabbit extends EntityAnimal { +@@ -161,6 +183,13 @@ public class EntityRabbit extends EntityAnimal { @Override public void mobTick() { + // Purpur start -+ if (hasRider()) { ++ if (hasPurpurRider()) { + handleJumping(); + return; + } @@ -2101,7 +2171,7 @@ index 180fc927074dc683ad4d482a00dd4e04ff7923d0..fff6bcff9d44c7d49cd2d0c334ea7025 if (this.bt > 0) { --this.bt; } -@@ -211,6 +241,39 @@ public class EntityRabbit extends EntityAnimal { +@@ -211,6 +240,39 @@ public class EntityRabbit extends EntityAnimal { this.bs = this.onGround; } @@ -2141,7 +2211,7 @@ index 180fc927074dc683ad4d482a00dd4e04ff7923d0..fff6bcff9d44c7d49cd2d0c334ea7025 @Override public boolean aO() { return false; -@@ -540,7 +603,7 @@ public class EntityRabbit extends EntityAnimal { +@@ -540,7 +602,7 @@ public class EntityRabbit extends EntityAnimal { } } @@ -2150,7 +2220,7 @@ index 180fc927074dc683ad4d482a00dd4e04ff7923d0..fff6bcff9d44c7d49cd2d0c334ea7025 private final EntityRabbit i; private double j; -@@ -551,14 +614,14 @@ public class EntityRabbit extends EntityAnimal { +@@ -551,14 +613,14 @@ public class EntityRabbit extends EntityAnimal { } @Override @@ -2167,7 +2237,7 @@ index 180fc927074dc683ad4d482a00dd4e04ff7923d0..fff6bcff9d44c7d49cd2d0c334ea7025 } @Override -@@ -585,14 +648,17 @@ public class EntityRabbit extends EntityAnimal { +@@ -585,14 +647,17 @@ public class EntityRabbit extends EntityAnimal { this.c = entityrabbit; } @@ -2245,7 +2315,7 @@ index 88bed962bc17242ee6a9c93b7e0fec8bc578b35f..8f3296031f220dd7bb3ae9fe2443e479 this.goalSelector.a(2, new PathfinderGoalBreed(this, 1.0D)); this.goalSelector.a(3, new PathfinderGoalTempt(this, 1.1D, RecipeItemStack.a(Items.WHEAT), false)); diff --git a/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java b/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java -index 44119f52a4f169ffcea53fb69393bfedfd1a62a7..cfcf67e99ae345f77a55771e6a25bdcdb4a9740a 100644 +index 44119f52a4f169ffcea53fb69393bfedfd1a62a7..a692b973717ecc56d808039418599a11aedc2c5a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java @@ -6,6 +6,7 @@ import net.minecraft.nbt.NBTTagCompound; @@ -2287,7 +2357,7 @@ index 44119f52a4f169ffcea53fb69393bfedfd1a62a7..cfcf67e99ae345f77a55771e6a25bdcd return; } -+ if (hasRider() && !world.purpurConfig.snowGolemLeaveTrailWhenRidden) return; // Purpur - don't leave snow trail when being ridden ++ if (hasPurpurRider() && !world.purpurConfig.snowGolemLeaveTrailWhenRidden) return; // Purpur - don't leave snow trail when being ridden IBlockData iblockdata = Blocks.SNOW.getBlockData(); for (int l = 0; l < 4; ++l) { @@ -2310,7 +2380,7 @@ index 44119f52a4f169ffcea53fb69393bfedfd1a62a7..cfcf67e99ae345f77a55771e6a25bdcd } diff --git a/src/main/java/net/minecraft/world/entity/animal/EntitySquid.java b/src/main/java/net/minecraft/world/entity/animal/EntitySquid.java -index e6757b22497c6e274c3999d58671653e931ebe2b..a9fa18931d93dd7fa428b8cd6a414d4b3a3b4fbb 100644 +index e6757b22497c6e274c3999d58671653e931ebe2b..777c3bcf267d6cf31300588826d3af6b55cab350 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntitySquid.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntitySquid.java @@ -4,6 +4,7 @@ package net.minecraft.world.entity.animal; @@ -2392,7 +2462,7 @@ index e6757b22497c6e274c3999d58671653e931ebe2b..a9fa18931d93dd7fa428b8cd6a414d4b public void e() { + // Purpur start + EntitySquid squid = getSquid(); -+ EntityHuman rider = squid.getRider(); ++ EntityHuman rider = squid.getPurpurRider(); + if (rider != null) { + if (rider.jumping) { + squid.onSpacebar(); @@ -2784,7 +2854,7 @@ index 2e448a40dbf2fa5b4df4493f14738210615bab38..d57e7c02268e5d8a00b0b5897fa03dce + protected void eV() { if (world.purpurConfig.zombieHorseCanSwim) goalSelector.a(0, new PathfinderGoalFloat(this)); } // Purpur } diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java b/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java -index 1c6435bf2cd870b795f87368057d8dfc1e1c938a..d1bd7b9a6a8cfb6b609db4229b2f42a40b8b484f 100644 +index 1c6435bf2cd870b795f87368057d8dfc1e1c938a..d25177f9500a084e0f18a20b1eb1c4ac170048ec 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java @@ -8,6 +8,7 @@ import net.minecraft.nbt.NBTTagCompound; @@ -2803,8 +2873,8 @@ index 1c6435bf2cd870b795f87368057d8dfc1e1c938a..d1bd7b9a6a8cfb6b609db4229b2f42a4 + this.moveController = new net.pl3x.purpur.controller.ControllerMoveWASD(this) { + @Override + public void a() { // tick -+ if (entity.hasRider() && hasSaddle()) { -+ tick(entity.getRider()); ++ if (entity.hasPurpurRider() && hasSaddle()) { ++ tick(entity.getPurpurRider()); + } else { + tick(); + } @@ -2813,8 +2883,8 @@ index 1c6435bf2cd870b795f87368057d8dfc1e1c938a..d1bd7b9a6a8cfb6b609db4229b2f42a4 + this.lookController = new net.pl3x.purpur.controller.ControllerLookWASD(this) { + @Override + public void a() { // tick -+ if (entity.hasRider() && hasSaddle()) { -+ tick(entity.getRider()); ++ if (entity.hasPurpurRider() && hasSaddle()) { ++ tick(entity.getPurpurRider()); + } else { + tick(); + } @@ -2927,7 +2997,7 @@ index f1065c2a37835d760fb57194f7edfd029f426b48..3f2065e2939be54639f44501f7aa8ee5 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java -index 3fff101637708a1a12f9a457bd3512ae94a8f884..7f583c6c15f0191219eb911d901ea28d86c11489 100644 +index 3fff101637708a1a12f9a457bd3512ae94a8f884..b2d1a0144353a1da61221b59a0acc028b0cf746e 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java @@ -23,6 +23,7 @@ import net.minecraft.world.entity.Entity; @@ -2996,7 +3066,7 @@ index 3fff101637708a1a12f9a457bd3512ae94a8f884..7f583c6c15f0191219eb911d901ea28d @Override public void movementTick() { + // Purpur start -+ boolean hasRider = getRider() != null; ++ boolean hasRider = getPurpurRider() != null; + if (hasRider) { + if (!hadRider) { + hadRider = true; @@ -3077,7 +3147,7 @@ index 3fff101637708a1a12f9a457bd3512ae94a8f884..7f583c6c15f0191219eb911d901ea28d this.bF.b(this); } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java b/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java -index 930fc752ec0a988b17bc556cd428161638a14f27..4c0a555cdb5bc34c73040b9533beaee56cbce70a 100644 +index 930fc752ec0a988b17bc556cd428161638a14f27..73875b925cbf527f91a7c0ec09d350a7a2ec1260 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java @@ -12,6 +12,7 @@ import net.minecraft.network.chat.IChatBaseComponent; @@ -3104,7 +3174,7 @@ index 930fc752ec0a988b17bc556cd428161638a14f27..4c0a555cdb5bc34c73040b9533beaee5 import net.minecraft.world.entity.ai.attributes.AttributeProvider; import net.minecraft.world.entity.ai.attributes.GenericAttributes; import net.minecraft.world.entity.ai.goal.PathfinderGoal; -@@ -48,8 +51,12 @@ import net.minecraft.world.item.Items; +@@ -48,14 +51,16 @@ import net.minecraft.world.item.Items; import net.minecraft.world.level.Explosion; import net.minecraft.world.level.GameRules; import net.minecraft.world.level.IMaterial; @@ -3117,7 +3187,13 @@ index 930fc752ec0a988b17bc556cd428161638a14f27..4c0a555cdb5bc34c73040b9533beaee5 import net.minecraft.world.phys.Vec3D; // CraftBukkit start -@@ -82,6 +89,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { + import net.minecraft.network.protocol.game.PacketPlayOutWorldEvent; +-import net.minecraft.server.MinecraftServer; +-import net.minecraft.server.level.WorldServer; + import net.minecraft.world.level.block.Blocks; + import org.bukkit.craftbukkit.event.CraftEventFactory; + import org.bukkit.event.entity.EntityRegainHealthEvent; +@@ -82,6 +87,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { return entityliving.getMonsterType() != EnumMonsterType.UNDEAD && entityliving.ei(); }; private static final PathfinderTargetCondition bz = (new PathfinderTargetCondition()).a(20.0D).a(EntityWither.by); @@ -3125,7 +3201,7 @@ index 930fc752ec0a988b17bc556cd428161638a14f27..4c0a555cdb5bc34c73040b9533beaee5 // Paper start private boolean canPortal = false; -@@ -94,15 +102,122 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -94,15 +100,122 @@ public class EntityWither extends EntityMonster implements IRangedEntity { this.setHealth(this.getMaxHealth()); this.getNavigation().d(true); this.f = 50; @@ -3151,7 +3227,7 @@ index 930fc752ec0a988b17bc556cd428161638a14f27..4c0a555cdb5bc34c73040b9533beaee5 + @Override + public void g(Vec3D vec3d) { + super.g(vec3d); -+ if (hasRider() && !onGround) { ++ if (hasPurpurRider() && !onGround) { + float speed = (float) getAttributeInstance(GenericAttributes.FLYING_SPEED).getValue() * 5F; + setSpeed(speed); + Vec3D mot = getMot(); @@ -3172,7 +3248,7 @@ index 930fc752ec0a988b17bc556cd428161638a14f27..4c0a555cdb5bc34c73040b9533beaee5 + + @Override + public boolean onClick(EnumHand hand) { -+ return shoot(getRider(), hand == EnumHand.MAIN_HAND ? new int[]{1} : new int[]{2}); ++ return shoot(getPurpurRider(), hand == EnumHand.MAIN_HAND ? new int[]{1} : new int[]{2}); + } + + public boolean shoot(EntityHuman rider, int[] heads) { @@ -3249,12 +3325,12 @@ index 930fc752ec0a988b17bc556cd428161638a14f27..4c0a555cdb5bc34c73040b9533beaee5 this.targetSelector.a(1, new PathfinderGoalHurtByTarget(this, new Class[0])); if(this.world.paperConfig.fixWitherTargetingBug) this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, 0, false, false, null)); // Paper - Fix MC-29274 this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityInsentient.class, 0, false, false, EntityWither.by)); -@@ -245,6 +360,16 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -245,6 +358,16 @@ public class EntityWither extends EntityMonster implements IRangedEntity { @Override protected void mobTick() { + // Purpur start -+ if (hasRider()) { ++ if (hasPurpurRider()) { + Vec3D mot = getMot(); + setMot(mot.x, mot.y + (getVertical() > 0 ? 0.07D : 0.0D), mot.z); + } @@ -3266,7 +3342,7 @@ index 930fc752ec0a988b17bc556cd428161638a14f27..4c0a555cdb5bc34c73040b9533beaee5 int i; if (this.getInvul() > 0) { -@@ -428,7 +553,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -428,7 +551,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { this.bossBattle.removePlayer(entityplayer); } @@ -3275,7 +3351,7 @@ index 930fc752ec0a988b17bc556cd428161638a14f27..4c0a555cdb5bc34c73040b9533beaee5 if (i <= 0) { return this.locX(); } else { -@@ -439,11 +564,11 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -439,11 +562,11 @@ public class EntityWither extends EntityMonster implements IRangedEntity { } } @@ -3289,7 +3365,7 @@ index 930fc752ec0a988b17bc556cd428161638a14f27..4c0a555cdb5bc34c73040b9533beaee5 if (i <= 0) { return this.locZ(); } else { -@@ -567,7 +692,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -567,7 +690,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { } public static AttributeProvider.Builder eK() { @@ -3298,22 +3374,22 @@ index 930fc752ec0a988b17bc556cd428161638a14f27..4c0a555cdb5bc34c73040b9533beaee5 } public int getInvul() { -@@ -579,11 +704,11 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -579,11 +702,11 @@ public class EntityWither extends EntityMonster implements IRangedEntity { } public int getHeadTarget(int i) { - return (Integer) this.datawatcher.get((DataWatcherObject) EntityWither.bo.get(i)); -+ return hasRider() ? 0 : this.datawatcher.get(EntityWither.bo.get(i)); // Purpur ++ return hasPurpurRider() ? 0 : this.datawatcher.get(EntityWither.bo.get(i)); // Purpur } public void setHeadTarget(int i, int j) { - this.datawatcher.set((DataWatcherObject) EntityWither.bo.get(i), j); -+ if (!hasRider()) this.datawatcher.set(EntityWither.bo.get(i), j); // Purpur ++ if (!hasPurpurRider()) this.datawatcher.set(EntityWither.bo.get(i), j); // Purpur } public final boolean isPowered() { return this.S_(); } // Paper - OBFHELPER diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityBlaze.java b/src/main/java/net/minecraft/world/entity/monster/EntityBlaze.java -index 88a4dcf9feaa5f66da1394c139b795582c00a8ac..9a109ed062e5abedaad295383aca6441321da276 100644 +index 88a4dcf9feaa5f66da1394c139b795582c00a8ac..6553fd92c26d71ac0a60bd046c7f968f2dfe6667 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityBlaze.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityBlaze.java @@ -5,6 +5,7 @@ import net.minecraft.core.particles.Particles; @@ -3363,7 +3439,7 @@ index 88a4dcf9feaa5f66da1394c139b795582c00a8ac..9a109ed062e5abedaad295383aca6441 + @Override + public void g(Vec3D vec3d) { + super.g(vec3d); -+ if (hasRider() && !onGround) { ++ if (hasPurpurRider() && !onGround) { + float speed = (float) getAttributeInstance(GenericAttributes.FLYING_SPEED).getValue(); + setSpeed(speed); + Vec3D mot = getMot(); @@ -3398,7 +3474,7 @@ index 88a4dcf9feaa5f66da1394c139b795582c00a8ac..9a109ed062e5abedaad295383aca6441 @Override protected void mobTick() { + // Purpur start -+ if (hasRider()) { ++ if (hasPurpurRider()) { + Vec3D mot = getMot(); + setMot(mot.x, getVertical() > 0 ? 0.07D : -0.07D, mot.z); + return; @@ -3432,7 +3508,7 @@ index 65d0027186f19f10292ea64976ebb93c12b98394..27baf5cde99d8f25b1e7583c30339fcc return EntitySpider.eK().a(GenericAttributes.MAX_HEALTH, 12.0D); } diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java b/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java -index 09df2bd3b523072de0e9858e6e707e3721474422..2cb9908a5c53528b2e02a1231752adc5ad8354f8 100644 +index 09df2bd3b523072de0e9858e6e707e3721474422..1daacdd75c709cd5508434b41589bd57032de27c 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java @@ -6,6 +6,7 @@ import net.minecraft.nbt.NBTTagCompound; @@ -3481,8 +3557,8 @@ index 09df2bd3b523072de0e9858e6e707e3721474422..2cb9908a5c53528b2e02a1231752adc5 + if (powerToggleDelay > 0) { + powerToggleDelay--; + } -+ if (hasRider()) { -+ if (getRider().getForward() != 0 || getRider().getStrafe() != 0) { ++ if (hasPurpurRider()) { ++ if (getPurpurRider().getForward() != 0 || getPurpurRider().getStrafe() != 0) { + spacebarCharge = 0; + setIgnited(false); + } @@ -3508,7 +3584,7 @@ index 09df2bd3b523072de0e9858e6e707e3721474422..2cb9908a5c53528b2e02a1231752adc5 + spacebarCharge++; + if (spacebarCharge > maxFuseTicks - 2) { + spacebarCharge = 0; -+ if (getRider().getBukkitEntity().hasPermission("allow.powered.creeper")) { ++ if (getPurpurRider().getBukkitEntity().hasPermission("allow.powered.creeper")) { + powerToggleDelay = 20; + setPowered(!isPowered()); + setIgnited(false); @@ -3516,8 +3592,8 @@ index 09df2bd3b523072de0e9858e6e707e3721474422..2cb9908a5c53528b2e02a1231752adc5 + } + } + if (!isIgnited()) { -+ if (hasRider() && getRider().getForward() == 0 && getRider().getStrafe() == 0 && -+ getRider().getBukkitEntity().hasPermission("allow.special.creeper")) { ++ if (hasPurpurRider() && getPurpurRider().getForward() == 0 && getPurpurRider().getStrafe() == 0 && ++ getPurpurRider().getBukkitEntity().hasPermission("allow.special.creeper")) { + setIgnited(true); + return true; + } @@ -3614,7 +3690,7 @@ index ea776755767f29e49de2792afa30f79420d0fa4c..1d4039d61a2c77a38a31947010cee26f @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java b/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java -index 52aa47036acee2ec21ae2d6f4df634ecbf04b3b0..03fa2cfc1d5bc27e03e9979b3f33d88362c19066 100644 +index 52aa47036acee2ec21ae2d6f4df634ecbf04b3b0..32ed22dbaaed536dd3df0fb59e3c19431ee42540 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java @@ -16,6 +16,7 @@ import net.minecraft.nbt.NBTTagCompound; @@ -3661,7 +3737,7 @@ index 52aa47036acee2ec21ae2d6f4df634ecbf04b3b0..03fa2cfc1d5bc27e03e9979b3f33d883 @Override protected void mobTick() { - if (this.world.isDay() && this.ticksLived >= this.bs + 600) { -+ if (!hasRider() && this.world.isDay() && this.ticksLived >= this.bs + 600) { // Purpur - no random teleporting ++ if (!hasPurpurRider() && this.world.isDay() && this.ticksLived >= this.bs + 600) { // Purpur - no random teleporting float f = this.aR(); if (f > 0.5F && this.world.e(this.getChunkCoordinates()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.tryEscape(EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper @@ -3669,7 +3745,7 @@ index 52aa47036acee2ec21ae2d6f4df634ecbf04b3b0..03fa2cfc1d5bc27e03e9979b3f33d883 if (this.isInvulnerable(damagesource)) { return false; } else if (net.pl3x.purpur.PurpurConfig.endermanShortHeight && damagesource == DamageSource.STUCK) { return false; // Purpur - no suffocation damage if short height -+ } else if (hasRider()) { return super.damageEntity(damagesource, f); // Purpur - no teleporting on damage ++ } else if (hasPurpurRider()) { return super.damageEntity(damagesource, f); // Purpur - no teleporting on damage } else if (damagesource instanceof EntityDamageSourceIndirect) { if (this.tryEscape(EndermanEscapeEvent.Reason.INDIRECT)) { // Paper start for (int i = 0; i < 64; ++i) { @@ -3808,7 +3884,7 @@ index 2aa6b6ca93c25c59ad224348aad1bb34d9bbc6a3..55607910183155080e3d96296421438d @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityGhast.java b/src/main/java/net/minecraft/world/entity/monster/EntityGhast.java -index a3e3f6e07674c54c2d2a02661ce4342b43aafe44..8784647f512d280ee0a092ecd406321268359314 100644 +index a3e3f6e07674c54c2d2a02661ce4342b43aafe44..b6d49740a1c8dfa19e871869b92b307fc8397588 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityGhast.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityGhast.java @@ -7,6 +7,7 @@ import net.minecraft.nbt.NBTTagCompound; @@ -3850,7 +3926,7 @@ index a3e3f6e07674c54c2d2a02661ce4342b43aafe44..8784647f512d280ee0a092ecd4063212 + @Override + public void g(Vec3D vec3d) { + super.g(vec3d); -+ if (hasRider() && !onGround) { ++ if (hasPurpurRider() && !onGround) { + float speed = (float) getAttributeInstance(GenericAttributes.FLYING_SPEED).getValue(); + setSpeed(speed); + Vec3D mot = getMot(); @@ -3939,7 +4015,7 @@ index a188a89143cb1b0243dacdec33c446ca4120219f..7395fa90198a9138b2c33273d8f35403 this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)); this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityVillager.class, false)); diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityGuardian.java b/src/main/java/net/minecraft/world/entity/monster/EntityGuardian.java -index d53e2a9d27f9976d1fd8ea30b88a0da089aec7b6..6980b6988549b37a33d204a6e84c9e81d384a57a 100644 +index d53e2a9d27f9976d1fd8ea30b88a0da089aec7b6..66ae664add95f4441724b49a470a2fef569042d6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityGuardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityGuardian.java @@ -9,6 +9,7 @@ import net.minecraft.core.particles.Particles; @@ -4008,7 +4084,7 @@ index d53e2a9d27f9976d1fd8ea30b88a0da089aec7b6..6980b6988549b37a33d204a6e84c9e81 public void g(Vec3D vec3d) { if (this.doAITick() && this.isInWater()) { - this.a(0.1F, vec3d); -+ this.a(hasRider() ? getSpeed() : 0.1F, vec3d); // Purpur ++ this.a(hasPurpurRider() ? getSpeed() : 0.1F, vec3d); // Purpur this.move(EnumMoveType.SELF, this.getMot()); this.setMot(this.getMot().a(0.9D)); if (!this.eN() && this.getGoalTarget() == null) { @@ -4153,7 +4229,7 @@ index fe80e93b00f3bb2f297c6528c3951313fa3c08c7..15ed51a2746c09538a425fce25fa25f2 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityPhantom.java b/src/main/java/net/minecraft/world/entity/monster/EntityPhantom.java -index 07ede7b75a65a5815f1ae1ebf03ec0fdb4621afb..a836839b17cbda8ac269f032b141ba448e3bab8c 100644 +index 07ede7b75a65a5815f1ae1ebf03ec0fdb4621afb..1c24a2abe3921fb3cf8341e4fd620d919e2917af 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityPhantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityPhantom.java @@ -13,6 +13,7 @@ import net.minecraft.network.syncher.DataWatcher; @@ -4201,7 +4277,7 @@ index 07ede7b75a65a5815f1ae1ebf03ec0fdb4621afb..a836839b17cbda8ac269f032b141ba44 + @Override + public void g(Vec3D vec3d) { + super.g(vec3d); -+ if (hasRider() && !onGround) { ++ if (hasPurpurRider() && !onGround) { + float speed = (float) getAttributeInstance(GenericAttributes.FLYING_SPEED).getValue(); + setSpeed(speed); + Vec3D mot = getMot(); @@ -4216,7 +4292,7 @@ index 07ede7b75a65a5815f1ae1ebf03ec0fdb4621afb..a836839b17cbda8ac269f032b141ba44 + + @Override + public boolean onSpacebar() { -+ if (hasRider() && getRider().getBukkitEntity().hasPermission("allow.special.phantom")) { ++ if (hasPurpurRider() && getPurpurRider().getBukkitEntity().hasPermission("allow.special.phantom")) { + shoot(); + } + return false; @@ -4259,7 +4335,7 @@ index 07ede7b75a65a5815f1ae1ebf03ec0fdb4621afb..a836839b17cbda8ac269f032b141ba44 @Override public void movementTick() { - if (this.isAlive() && ((world.purpurConfig.phantomBurnInDaylight && this.isInDaylight()) || (world.purpurConfig.phantomBurnInLight > 0 && world.getLightLevel(new BlockPosition(this)) >= world.purpurConfig.phantomBurnInLight))) { // Purpur -+ if (this.isAlive() && !hasRider() && ((world.purpurConfig.phantomBurnInDaylight && this.isInDaylight()) || (world.purpurConfig.phantomBurnInLight > 0 && world.getLightLevel(new BlockPosition(this)) >= world.purpurConfig.phantomBurnInLight))) { // Purpur ++ if (this.isAlive() && !hasPurpurRider() && ((world.purpurConfig.phantomBurnInDaylight && this.isInDaylight()) || (world.purpurConfig.phantomBurnInLight > 0 && world.getLightLevel(new BlockPosition(this)) >= world.purpurConfig.phantomBurnInLight))) { // Purpur this.setOnFire(8); } @@ -4268,7 +4344,7 @@ index 07ede7b75a65a5815f1ae1ebf03ec0fdb4621afb..a836839b17cbda8ac269f032b141ba44 @Override public boolean a() { - if (isCirclingCrystal()) return false; // Purpur - pathfinder does not have a flag -+ if (getRider() != null || isCirclingCrystal()) return false; // Purpur - pathfinder does not have a flag ++ if (getPurpurRider() != null || isCirclingCrystal()) return false; // Purpur - pathfinder does not have a flag if (this.c > 0) { --this.c; return false; @@ -4277,7 +4353,7 @@ index 07ede7b75a65a5815f1ae1ebf03ec0fdb4621afb..a836839b17cbda8ac269f032b141ba44 @Override public boolean b() { - if (isCirclingCrystal()) return false; // Purpur - pathfinder does not have a flag -+ if (getRider() != null || isCirclingCrystal()) return false; // Purpur - pathfinder does not have a flag ++ if (getPurpurRider() != null || isCirclingCrystal()) return false; // Purpur - pathfinder does not have a flag EntityLiving entityliving = EntityPhantom.this.getGoalTarget(); return entityliving != null ? EntityPhantom.this.a(entityliving, PathfinderTargetCondition.a) : false; @@ -4286,7 +4362,7 @@ index 07ede7b75a65a5815f1ae1ebf03ec0fdb4621afb..a836839b17cbda8ac269f032b141ba44 @Override public boolean a() { - if (isCirclingCrystal()) return false; // Purpur - pathfinder does not have a flag -+ if (getRider() != null || isCirclingCrystal()) return false; // Purpur - pathfinder does not have a flag ++ if (getPurpurRider() != null || isCirclingCrystal()) return false; // Purpur - pathfinder does not have a flag EntityLiving entityliving = EntityPhantom.this.getGoalTarget(); return entityliving != null ? EntityPhantom.this.a(EntityPhantom.this.getGoalTarget(), PathfinderTargetCondition.a) : false; @@ -4410,7 +4486,7 @@ index ea105fb86553f5212d616c976eaf2a16bf5b6561..2a4ac6e608650d56cc2b564e715b7b68 this.targetSelector.a(2, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)); this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityVillagerAbstract.class, false)); diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java b/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java -index 16d5cae64887b82e67eeb61ccb714e6125ff0c09..dc1ca7b334e89b4d0be775b6f6e6f4222ea02dcc 100644 +index 16d5cae64887b82e67eeb61ccb714e6125ff0c09..cc37e545ece89803fad91801775470df4620bd62 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java @@ -7,6 +7,7 @@ import javax.annotation.Nullable; @@ -4421,7 +4497,15 @@ index 16d5cae64887b82e67eeb61ccb714e6125ff0c09..dc1ca7b334e89b4d0be775b6f6e6f422 import net.minecraft.sounds.SoundEffect; import net.minecraft.sounds.SoundEffects; import net.minecraft.tags.Tag; -@@ -61,14 +62,37 @@ public class EntityRavager extends EntityRaider { +@@ -38,7 +39,6 @@ import net.minecraft.world.level.IBlockAccess; + import net.minecraft.world.level.IWorldReader; + import net.minecraft.world.level.World; + import net.minecraft.world.level.block.Block; +-import net.minecraft.world.level.block.BlockLeaves; + import net.minecraft.world.level.block.state.IBlockData; + import net.minecraft.world.level.pathfinder.PathType; + import net.minecraft.world.level.pathfinder.Pathfinder; +@@ -61,14 +61,37 @@ public class EntityRavager extends EntityRaider { this.f = 20; } @@ -4459,12 +4543,12 @@ index 16d5cae64887b82e67eeb61ccb714e6125ff0c09..dc1ca7b334e89b4d0be775b6f6e6f422 this.targetSelector.a(2, (new PathfinderGoalHurtByTarget(this, new Class[]{EntityRaider.class})).a(new Class[0])); // CraftBukkit - decompile error this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityHuman.class, true)); this.targetSelector.a(4, new PathfinderGoalNearestAttackableTarget<>(this, EntityVillagerAbstract.class, true)); -@@ -140,7 +164,7 @@ public class EntityRavager extends EntityRaider { +@@ -140,7 +163,7 @@ public class EntityRavager extends EntityRaider { @Override public void movementTick() { super.movementTick(); - if (this.isAlive()) { -+ if (this.isAlive() && !hasRider()) { ++ if (this.isAlive() && !hasPurpurRider()) { if (this.isFrozen()) { this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(0.0D); } else { @@ -4661,7 +4745,7 @@ index a90ac635ef7aef5289d21f948db7b170b23160d3..cb52c4e63ac487d55dc16accca6976f4 protected void initPathfinder() { this.targetSelector.a(3, new PathfinderGoalNearestAttackableTarget<>(this, EntityPiglinAbstract.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java b/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java -index 0af0b232ff1b6f1d58cf3fb543d32bd108be0af7..0cbe3032fd3b048b0eb8ec3d8592a662c69c9e30 100644 +index 0af0b232ff1b6f1d58cf3fb543d32bd108be0af7..feb40c2ca8e8f3fae5665b2d71296a6b811b11f6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java @@ -14,6 +14,7 @@ import net.minecraft.network.syncher.DataWatcher; @@ -4692,14 +4776,14 @@ index 0af0b232ff1b6f1d58cf3fb543d32bd108be0af7..0cbe3032fd3b048b0eb8ec3d8592a662 + @Override + public float getJumpHeight() { + float height = super.getJumpHeight(); -+ return hasRider() && actualJump ? height * 1.5F : height; ++ return hasPurpurRider() && actualJump ? height * 1.5F : height; + } + + @Override + public boolean onSpacebar() { -+ if (onGround && hasRider()) { ++ if (onGround && hasPurpurRider()) { + actualJump = true; -+ if (getRider().getForward() == 0 || getRider().getStrafe() == 0) { ++ if (getPurpurRider().getForward() == 0 || getPurpurRider().getStrafe() == 0) { + jump(); // jump() here if not moving + } + } @@ -4750,8 +4834,8 @@ index 0af0b232ff1b6f1d58cf3fb543d32bd108be0af7..0cbe3032fd3b048b0eb8ec3d8592a662 @Override public void a() { + // Purpur start -+ if (entity.hasRider()) { -+ tick(entity.getRider()); ++ if (entity.hasPurpurRider()) { ++ tick(entity.getPurpurRider()); + if (entity.getForward() != 0 || entity.getStrafe() != 0) { + if (getJumpDelay() > 10) { + setJumpDelay(6); @@ -4765,13 +4849,13 @@ index 0af0b232ff1b6f1d58cf3fb543d32bd108be0af7..0cbe3032fd3b048b0eb8ec3d8592a662 this.a.aC = this.a.yaw; this.a.aA = this.a.yaw; - if (this.h != ControllerMove.Operation.MOVE_TO) { -+ } if (!entity.hasRider() && this.h != ControllerMove.Operation.MOVE_TO) { // Purpur ++ } if (!entity.hasPurpurRider() && this.h != ControllerMove.Operation.MOVE_TO) { // Purpur this.a.t(0.0F); } else { this.h = ControllerMove.Operation.WAIT; if (this.a.isOnGround()) { - this.a.q((float) (this.e * this.a.b(GenericAttributes.MOVEMENT_SPEED))); -+ this.a.q((float) (this.e * this.a.b(GenericAttributes.MOVEMENT_SPEED) * (entity.hasRider() && (entity.getRider().getForward() != 0 || entity.getRider().getStrafe() != 0) ? 2.0D : 1.0D))); // Purpur ++ this.a.q((float) (this.e * this.a.b(GenericAttributes.MOVEMENT_SPEED) * (entity.hasPurpurRider() && (entity.getPurpurRider().getForward() != 0 || entity.getPurpurRider().getStrafe() != 0) ? 2.0D : 1.0D))); // Purpur if (this.j-- <= 0) { this.j = this.k.eJ(); if (this.l) { @@ -4780,7 +4864,7 @@ index 0af0b232ff1b6f1d58cf3fb543d32bd108be0af7..0cbe3032fd3b048b0eb8ec3d8592a662 } } else { - this.a.q((float) (this.e * this.a.b(GenericAttributes.MOVEMENT_SPEED))); -+ this.a.q((float) (this.e * this.a.b(GenericAttributes.MOVEMENT_SPEED) * (entity.hasRider() && (entity.getRider().getForward() != 0 || entity.getRider().getStrafe() != 0) ? 2.0D : 1.0D))); // Purpur ++ this.a.q((float) (this.e * this.a.b(GenericAttributes.MOVEMENT_SPEED) * (entity.hasPurpurRider() && (entity.getPurpurRider().getForward() != 0 || entity.getPurpurRider().getStrafe() != 0) ? 2.0D : 1.0D))); // Purpur } } @@ -4874,7 +4958,7 @@ index 5ce50c6fe788fbd6db95f6406bacbf218b7e691c..14dda6743ed9e6f4880bc560f7ba8892 if (flag && !this.isSilent()) { this.world.playSound((EntityHuman) null, this.locX(), this.locY(), this.locZ(), SoundEffects.ENTITY_STRIDER_EAT, this.getSoundCategory(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F); diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityVex.java b/src/main/java/net/minecraft/world/entity/monster/EntityVex.java -index 9645d052069957311478a1ceca42ad52f7a9aa0b..4301ece0a04f3f2b4d198a684d0ca314deef2aef 100644 +index 9645d052069957311478a1ceca42ad52f7a9aa0b..5e2114d2321c1542dc892bc7aed07080008cfd20 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityVex.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityVex.java @@ -7,6 +7,7 @@ import net.minecraft.nbt.NBTTagCompound; @@ -4908,7 +4992,7 @@ index 9645d052069957311478a1ceca42ad52f7a9aa0b..4301ece0a04f3f2b4d198a684d0ca314 + @Override + public void g(Vec3D vec3d) { + super.g(vec3d); -+ if (hasRider()) { ++ if (hasPurpurRider()) { + float speed; + if (onGround) { + speed = (float) getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).getValue() * 0.1F; @@ -4936,7 +5020,7 @@ index 9645d052069957311478a1ceca42ad52f7a9aa0b..4301ece0a04f3f2b4d198a684d0ca314 @Override public void tick() { - this.noclip = true; -+ this.noclip = !hasRider(); // Purpur ++ this.noclip = !hasPurpurRider(); // Purpur super.tick(); this.noclip = false; this.setNoGravity(true); @@ -5064,7 +5148,7 @@ index 63fb08e7b4290353e5148d1acb58f091dc5b08be..c4663c5b02363bd1499ce1f3b50027f8 this.targetSelector.a(2, this.br); this.targetSelector.a(3, this.bs); diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityZoglin.java b/src/main/java/net/minecraft/world/entity/monster/EntityZoglin.java -index aed585e2c1c88a4d09318c6be7ebe7168eac3631..c5b1ce9268d6e6f3ec26eda4b5d8e7ae2a2ea672 100644 +index aed585e2c1c88a4d09318c6be7ebe7168eac3631..249fb9cf43527af5c7818ce6b07487ad446811b7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityZoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityZoglin.java @@ -62,6 +62,18 @@ public class EntityZoglin extends EntityMonster implements IMonster, IOglin { @@ -5122,7 +5206,7 @@ index aed585e2c1c88a4d09318c6be7ebe7168eac3631..c5b1ce9268d6e6f3ec26eda4b5d8e7ae protected void mobTick() { this.world.getMethodProfiler().enter("zoglinBrain"); - this.getBehaviorController().a((WorldServer) this.world, (EntityLiving) this); -+ if (getRider() == null) // Purpur - only use brain if no rider ++ if (getPurpurRider() == null) // Purpur - only use brain if no rider + this.getBehaviorController().a((WorldServer) this.world, this); // Purpur - decompile error this.world.getMethodProfiler().exit(); this.eL(); @@ -5211,7 +5295,7 @@ index 99d0932e5352589cfbcc48a5e789651d0d77edde..b8395c7317494adf36010080931a1c86 public boolean jockeyOnlyBaby() { return world.purpurConfig.zombieVillagerJockeyOnlyBaby; diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/EntityHoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/EntityHoglin.java -index 9aa4850e021076fde306eea7eec104c31086c57f..64253428ef66145d07f74f8d0e5bdeb5aa5fe02b 100644 +index 9aa4850e021076fde306eea7eec104c31086c57f..c2e32121f693a6207e6239c26a1fd6e60d0ce434 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/EntityHoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/EntityHoglin.java @@ -61,6 +61,18 @@ public class EntityHoglin extends EntityAnimal implements IMonster, IOglin { @@ -5237,12 +5321,12 @@ index 9aa4850e021076fde306eea7eec104c31086c57f..64253428ef66145d07f74f8d0e5bdeb5 // Airplane - dynamic tick if (!gg.airplane.AirplaneConfig.dynamicHoglinBehavior || this.behaviorTick++ % this.activatedPriority == 0) { this.world.getMethodProfiler().enter("hoglinBrain"); -+ if (getRider() == null) // Purpur - only use brain if no rider ++ if (getPurpurRider() == null) // Purpur - only use brain if no rider this.getBehaviorController().a((WorldServer) this.world, (EntityHoglin) this); // Airplane - decompile error this.world.getMethodProfiler().exit(); HoglinAI.a(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglin.java -index 48acef830eb1d919499e9b79dc6a9af4bdf8a17b..8c6f5273ed2ab4ec63b7854e290f790b2eca8c2f 100644 +index 48acef830eb1d919499e9b79dc6a9af4bdf8a17b..2311d82824314a9feede9c3c106b0e1b24ac1b7a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglin.java @@ -70,6 +70,18 @@ public class EntityPiglin extends EntityPiglinAbstract implements ICrossbow { @@ -5268,12 +5352,12 @@ index 48acef830eb1d919499e9b79dc6a9af4bdf8a17b..8c6f5273ed2ab4ec63b7854e290f790b // Airplane - dynamic tick if (!gg.airplane.AirplaneConfig.dynamicPiglinBehavior || this.behaviorTick++ % this.activatedPriority == 0) { this.world.getMethodProfiler().enter("piglinBrain"); -+ if (getRider() == null) // Purpur - only use brain if no rider ++ if (getPurpurRider() == null) // Purpur - only use brain if no rider this.getBehaviorController().a((WorldServer) this.world, (EntityPiglin) this); // Airplane - compile error this.world.getMethodProfiler().exit(); PiglinAI.b(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglinBrute.java b/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglinBrute.java -index 3d85501791fce621335f34bf508becb74b80210d..da2220b08a9cd9c2d7d3fd06702e6690e12f095e 100644 +index 3d85501791fce621335f34bf508becb74b80210d..1370d2d8568a4ed62f2ec3d54abc7d2bebc48f75 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglinBrute.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglinBrute.java @@ -39,6 +39,18 @@ public class EntityPiglinBrute extends EntityPiglinAbstract { @@ -5309,13 +5393,13 @@ index 3d85501791fce621335f34bf508becb74b80210d..da2220b08a9cd9c2d7d3fd06702e6690 protected void mobTick() { this.world.getMethodProfiler().enter("piglinBruteBrain"); - this.getBehaviorController().a((WorldServer) this.world, (EntityLiving) this); -+ if (getRider() == null) // Purpur - only use brain if no rider ++ if (getPurpurRider() == null) // Purpur - only use brain if no rider + this.getBehaviorController().a((WorldServer) this.world, this); // Purpur - decompile error this.world.getMethodProfiler().exit(); PiglinBruteAI.b(this); PiglinBruteAI.c(this); diff --git a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java -index d3032682af94428419daa02f55b6040090d8df73..a0f0d5e0909da5cfe87078d4722b030635cfeadd 100644 +index e2779521977716aa58bb713de67cb2d9fa8cbe5f..bd56b7a009a8bcbdd353d7bdcb2a2a7310ab45cc 100644 --- a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java +++ b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java @@ -32,6 +32,7 @@ import net.minecraft.network.syncher.DataWatcherObject; @@ -5367,7 +5451,7 @@ index d3032682af94428419daa02f55b6040090d8df73..a0f0d5e0909da5cfe87078d4722b0306 this.h(entityhuman); } diff --git a/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java b/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java -index e0324cdb2d4c85714eaad490a7a5c826b38e6b16..90cbef7fe8803295f82bddd6709fdf303aedcaba 100644 +index 8df4d985e3124ddc1643da8385b15348937bc320..6c390fb20c7f29133a60780a75676d8d3d6eab29 100644 --- a/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java @@ -6,6 +6,7 @@ import net.minecraft.core.BlockPosition; @@ -5378,15 +5462,15 @@ index e0324cdb2d4c85714eaad490a7a5c826b38e6b16..90cbef7fe8803295f82bddd6709fdf30 import net.minecraft.server.level.WorldServer; import net.minecraft.sounds.SoundEffect; import net.minecraft.sounds.SoundEffects; -@@ -69,6 +70,7 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { +@@ -73,6 +74,7 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { @Override protected void initPathfinder() { this.goalSelector.a(0, new PathfinderGoalFloat(this)); + this.goalSelector.a(0, new PathfinderGoalHasRider(this)); // Purpur this.goalSelector.a(0, new PathfinderGoalUseItem<>(this, PotionUtil.a(new ItemStack(Items.POTION), Potions.INVISIBILITY), SoundEffects.ENTITY_WANDERING_TRADER_DISAPPEARED, (entityvillagertrader) -> { - return this.world.isNight() && !entityvillagertrader.isInvisible(); + return canDrinkPotion && this.world.isNight() && !entityvillagertrader.isInvisible(); // Paper - Add more WanderingTrader API })); -@@ -94,6 +96,16 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { +@@ -98,6 +100,16 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { } // Purpur - start @@ -5403,7 +5487,7 @@ index e0324cdb2d4c85714eaad490a7a5c826b38e6b16..90cbef7fe8803295f82bddd6709fdf30 @Override public boolean a(EntityHuman entityhuman) { return world.purpurConfig.villagerTraderCanBeLeashed && !this.isLeashed(); -@@ -121,8 +133,9 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { +@@ -125,8 +137,9 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { } if (this.getOffers().isEmpty()) { @@ -5415,10 +5499,18 @@ index e0324cdb2d4c85714eaad490a7a5c826b38e6b16..90cbef7fe8803295f82bddd6709fdf30 this.setTradingPlayer(entityhuman); this.openTrade(entityhuman, this.getScoreboardDisplayName(), 1); diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index 1b130b50888113d515ce1e200a157c3bbff3b625..fedfb18e71300807a83e2ed2729fe192a8f9aa33 100644 +index 1b130b50888113d515ce1e200a157c3bbff3b625..a70c557de56c5ba04cb520108cdb037eb9cad8a9 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -183,6 +183,8 @@ public abstract class EntityHuman extends EntityLiving { +@@ -111,7 +111,6 @@ import net.minecraft.world.phys.AxisAlignedBB; + import net.minecraft.world.phys.Vec3D; + import net.minecraft.world.scores.Scoreboard; + import net.minecraft.world.scores.ScoreboardTeam; +-import net.minecraft.world.scores.ScoreboardTeamBase; + + // CraftBukkit start + import org.bukkit.craftbukkit.entity.CraftHumanEntity; +@@ -183,6 +182,8 @@ public abstract class EntityHuman extends EntityLiving { // CraftBukkit end // Purpur start @@ -5427,7 +5519,7 @@ index 1b130b50888113d515ce1e200a157c3bbff3b625..fedfb18e71300807a83e2ed2729fe192 private javax.script.ScriptEngine scriptEngine = new javax.script.ScriptEngineManager().getEngineByName("rhino"); public void setAfk(boolean setAfk){ -@@ -2271,4 +2273,15 @@ public abstract class EntityHuman extends EntityLiving { +@@ -2271,4 +2272,15 @@ public abstract class EntityHuman extends EntityLiving { return this.g; } } @@ -5436,7 +5528,7 @@ index 1b130b50888113d515ce1e200a157c3bbff3b625..fedfb18e71300807a83e2ed2729fe192 + @Override + public boolean processClick(EnumHand hand) { + Entity vehicle = getRootVehicle(); -+ if (vehicle != null && vehicle.getRider() == this) { ++ if (vehicle != null && vehicle.getPurpurRider() == this) { + return vehicle.onClick(hand); + } + return false; @@ -5444,7 +5536,7 @@ index 1b130b50888113d515ce1e200a157c3bbff3b625..fedfb18e71300807a83e2ed2729fe192 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java b/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java -index 2e2e4ee98619cfbeaecffa1ebae78ccc1d7666ca..3914081629669aea19d50530db996728bbfa607f 100644 +index 8fe98404ebb8b3b5d1fdac0896b27da10736026d..390023a7a825eed850a13572b719f47ed534c003 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java @@ -24,7 +24,7 @@ public abstract class IProjectile extends Entity { @@ -5454,9 +5546,9 @@ index 2e2e4ee98619cfbeaecffa1ebae78ccc1d7666ca..3914081629669aea19d50530db996728 - private boolean d; + private boolean d; public boolean leftOwner() { return d; } public void setLeftOwner(boolean leftOwner) { this.d = leftOwner; } // Purpur - OBFHELPER - IProjectile(EntityTypes entitytypes, World world) { - super(entitytypes, world); -@@ -86,6 +86,7 @@ public abstract class IProjectile extends Entity { + // CraftBukkit start + private boolean hitCancelled = false; +@@ -90,6 +90,7 @@ public abstract class IProjectile extends Entity { super.tick(); } @@ -5464,7 +5556,7 @@ index 2e2e4ee98619cfbeaecffa1ebae78ccc1d7666ca..3914081629669aea19d50530db996728 private boolean h() { Entity entity = this.getShooter(); -@@ -149,7 +150,7 @@ public abstract class IProjectile extends Entity { +@@ -167,7 +168,7 @@ public abstract class IProjectile extends Entity { iblockdata.a(this.world, iblockdata, movingobjectpositionblock, this); } @@ -5559,7 +5651,7 @@ index 3b20793e3eb4349f8a4ce724f8fc0d6366bb28c2..9789d0f9f73540a486befcdd4901014e public static int dungeonSeed = -1; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index ffb53daed6bb08d4f448f4d0a6fee6d10710541b..8db7dca08fe4f0e88c950179f62ecd0d17bc329c 100644 +index f16f99517999ccbb0b5a678ffcb3befc93a3ae45..9fcc63a2f4a4c363ace85087665bf3a978d3d648 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -42,11 +42,6 @@ public class PurpurWorldConfig { @@ -5574,7 +5666,7 @@ index ffb53daed6bb08d4f448f4d0a6fee6d10710541b..8db7dca08fe4f0e88c950179f62ecd0d private ConfigurationSection getConfigurationSection(String path) { ConfigurationSection section = PurpurConfig.config.getConfigurationSection("world-settings." + worldName + "." + path); return section != null ? section : PurpurConfig.config.getConfigurationSection("world-settings.default." + path); -@@ -373,61 +368,186 @@ public class PurpurWorldConfig { +@@ -385,61 +380,186 @@ public class PurpurWorldConfig { turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts); } @@ -5761,7 +5853,7 @@ index ffb53daed6bb08d4f448f4d0a6fee6d10710541b..8db7dca08fe4f0e88c950179f62ecd0d public float giantStepHeight = 2.0F; public float giantJumpHeight = 1.0F; public double giantMovementSpeed = 0.5D; -@@ -436,6 +556,8 @@ public class PurpurWorldConfig { +@@ -448,6 +568,8 @@ public class PurpurWorldConfig { public boolean giantHaveHostileAI = false; public double giantMaxHealth = 100.0D; private void giantSettings() { @@ -5770,7 +5862,7 @@ index ffb53daed6bb08d4f448f4d0a6fee6d10710541b..8db7dca08fe4f0e88c950179f62ecd0d giantStepHeight = (float) getDouble("mobs.giant.step-height", giantStepHeight); giantJumpHeight = (float) getDouble("mobs.giant.jump-height", giantJumpHeight); giantMovementSpeed = getDouble("mobs.giant.movement-speed", giantMovementSpeed); -@@ -450,19 +572,44 @@ public class PurpurWorldConfig { +@@ -462,19 +584,44 @@ public class PurpurWorldConfig { giantMaxHealth = getDouble("mobs.giant.attributes.max-health", giantMaxHealth); } @@ -5815,7 +5907,7 @@ index ffb53daed6bb08d4f448f4d0a6fee6d10710541b..8db7dca08fe4f0e88c950179f62ecd0d illusionerMovementSpeed = getDouble("mobs.illusioner.movement-speed", illusionerMovementSpeed); illusionerFollowRange = getDouble("mobs.illusioner.follow-range", illusionerFollowRange); if (PurpurConfig.version < 8) { -@@ -473,11 +620,76 @@ public class PurpurWorldConfig { +@@ -485,11 +632,76 @@ public class PurpurWorldConfig { illusionerMaxHealth = getDouble("mobs.illusioner.attributes.max-health", illusionerMaxHealth); } @@ -5892,7 +5984,7 @@ index ffb53daed6bb08d4f448f4d0a6fee6d10710541b..8db7dca08fe4f0e88c950179f62ecd0d public double phantomAttackedByCrystalRadius = 0.0D; public float phantomAttackedByCrystalDamage = 1.0F; public double phantomOrbitCrystalRadius = 0.0D; -@@ -496,7 +708,13 @@ public class PurpurWorldConfig { +@@ -508,7 +720,13 @@ public class PurpurWorldConfig { public int phantomBurnInLight = 0; public boolean phantomIgnorePlayersWithTorch = false; public boolean phantomBurnInDaylight = true; @@ -5906,7 +5998,7 @@ index ffb53daed6bb08d4f448f4d0a6fee6d10710541b..8db7dca08fe4f0e88c950179f62ecd0d 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); -@@ -515,42 +733,187 @@ public class PurpurWorldConfig { +@@ -527,42 +745,187 @@ public class PurpurWorldConfig { phantomBurnInLight = getInt("mobs.phantom.burn-in-light", phantomBurnInLight); phantomBurnInDaylight = getBoolean("mobs.phantom.burn-in-daylight", phantomBurnInDaylight); phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); @@ -6094,7 +6186,7 @@ index ffb53daed6bb08d4f448f4d0a6fee6d10710541b..8db7dca08fe4f0e88c950179f62ecd0d public int villagerBrainTicks = 1; public boolean villagerUseBrainTicksOnlyWhenLagging = true; public boolean villagerCanBeLeashed = false; -@@ -560,6 +923,8 @@ public class PurpurWorldConfig { +@@ -572,6 +935,8 @@ public class PurpurWorldConfig { public int villagerSpawnIronGolemLimit = 0; public boolean villagerCanBreed = true; private void villagerSettings() { @@ -6103,7 +6195,7 @@ index ffb53daed6bb08d4f448f4d0a6fee6d10710541b..8db7dca08fe4f0e88c950179f62ecd0d villagerBrainTicks = getInt("mobs.villager.brain-ticks", villagerBrainTicks); villagerUseBrainTicksOnlyWhenLagging = getBoolean("mobs.villager.use-brain-ticks-only-when-lagging", villagerUseBrainTicksOnlyWhenLagging); villagerCanBeLeashed = getBoolean("mobs.villager.can-be-leashed", villagerCanBeLeashed); -@@ -570,45 +935,108 @@ public class PurpurWorldConfig { +@@ -582,45 +947,108 @@ public class PurpurWorldConfig { villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); } @@ -6214,7 +6306,7 @@ index ffb53daed6bb08d4f448f4d0a6fee6d10710541b..8db7dca08fe4f0e88c950179f62ecd0d zombieVillagerJockeyTryExistingChickens = getBoolean("mobs.zombie_villager.jockey.try-existing-chickens", zombieVillagerJockeyTryExistingChickens); diff --git a/src/main/java/net/pl3x/purpur/controller/ControllerLookWASD.java b/src/main/java/net/pl3x/purpur/controller/ControllerLookWASD.java new file mode 100644 -index 0000000000000000000000000000000000000000..292821f039d99a03ba4daeb3a941616ef5f6287e +index 0000000000000000000000000000000000000000..088c830471b796908781bc1aa0693355849754cd --- /dev/null +++ b/src/main/java/net/pl3x/purpur/controller/ControllerLookWASD.java @@ -0,0 +1,76 @@ @@ -6239,8 +6331,8 @@ index 0000000000000000000000000000000000000000..292821f039d99a03ba4daeb3a941616e + // tick + @Override + public void a() { -+ if (entity.hasRider()) { -+ tick(entity.getRider()); ++ if (entity.hasPurpurRider()) { ++ tick(entity.getPurpurRider()); + } else { + tick(); + } @@ -6296,7 +6388,7 @@ index 0000000000000000000000000000000000000000..292821f039d99a03ba4daeb3a941616e +} diff --git a/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASD.java b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASD.java new file mode 100644 -index 0000000000000000000000000000000000000000..266e734e8c20d6e414bd4a453118ad75fa4f97e5 +index 0000000000000000000000000000000000000000..6b1f37398ef6cf5935e7acb4295f9223a026226a --- /dev/null +++ b/src/main/java/net/pl3x/purpur/controller/ControllerMoveWASD.java @@ -0,0 +1,92 @@ @@ -6326,14 +6418,14 @@ index 0000000000000000000000000000000000000000..266e734e8c20d6e414bd4a453118ad75 + // isUpdating + @Override + public boolean b() { -+ return entity.hasRider() ? getForward() != 0 || getStrafe() != 0 : super.b(); ++ return entity.hasPurpurRider() ? getForward() != 0 || getStrafe() != 0 : super.b(); + } + + // tick + @Override + public void a() { -+ if (entity.hasRider()) { -+ tick(entity.getRider()); ++ if (entity.hasPurpurRider()) { ++ tick(entity.getPurpurRider()); + } else { + tick(); + } @@ -6584,7 +6676,7 @@ index 0000000000000000000000000000000000000000..aa7eb0b3bd7be8d1992e99bf156dbad1 +} diff --git a/src/main/java/net/pl3x/purpur/entity/DolphinSpit.java b/src/main/java/net/pl3x/purpur/entity/DolphinSpit.java new file mode 100644 -index 0000000000000000000000000000000000000000..7c7b1cb54bf0d64ae71d50532b61bb648396b2dc +index 0000000000000000000000000000000000000000..621e4d0af89e78404e79a92ba717392e4cf4f82b --- /dev/null +++ b/src/main/java/net/pl3x/purpur/entity/DolphinSpit.java @@ -0,0 +1,119 @@ @@ -6618,7 +6710,7 @@ index 0000000000000000000000000000000000000000..7c7b1cb54bf0d64ae71d50532b61bb64 + + public DolphinSpit(World world, EntityDolphin dolphin) { + this(EntityTypes.LLAMA_SPIT, world); -+ setShooter(dolphin.hasRider() ? dolphin.getRider() : dolphin); ++ setShooter(dolphin.hasPurpurRider() ? dolphin.getPurpurRider() : dolphin); + this.dolphin = dolphin; + this.setPosition( + dolphin.locX() - (double) (dolphin.getWidth() + 1.0F) * 0.5D * (double) MathHelper.sin(dolphin.getRenderYawOffset() * 0.017453292F), @@ -6709,7 +6801,7 @@ index 0000000000000000000000000000000000000000..7c7b1cb54bf0d64ae71d50532b61bb64 +} diff --git a/src/main/java/net/pl3x/purpur/entity/PhantomFlames.java b/src/main/java/net/pl3x/purpur/entity/PhantomFlames.java new file mode 100644 -index 0000000000000000000000000000000000000000..3d83a495cbe08e2f129a583ec2760391edb819ba +index 0000000000000000000000000000000000000000..c7cd0327084943dcb6339998805e6b7db1d87bba --- /dev/null +++ b/src/main/java/net/pl3x/purpur/entity/PhantomFlames.java @@ -0,0 +1,140 @@ @@ -6746,7 +6838,7 @@ index 0000000000000000000000000000000000000000..3d83a495cbe08e2f129a583ec2760391 + + public PhantomFlames(World world, EntityPhantom phantom) { + this(EntityTypes.LLAMA_SPIT, world); -+ setShooter(phantom.hasRider() ? phantom.getRider() : phantom); ++ setShooter(phantom.hasPurpurRider() ? phantom.getPurpurRider() : phantom); + this.phantom = phantom; + this.setPosition( + phantom.locX() - (double) (phantom.getWidth() + 1.0F) * 0.5D * (double) MathHelper.sin(phantom.getRenderYawOffset() * 0.017453292F), @@ -6854,10 +6946,28 @@ index 0000000000000000000000000000000000000000..3d83a495cbe08e2f129a583ec2760391 + } +} diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index dee4d12a49468d38f077784b219199f0070786f2..c524a0994f1c9ef1d0534403efa4e4481955b2f3 100644 +index dee4d12a49468d38f077784b219199f0070786f2..dcdc82b42689b4962323938a62cf7ded49afd6f4 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -1175,4 +1175,26 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -12,9 +12,6 @@ import net.minecraft.nbt.NBTBase; + import net.minecraft.nbt.NBTTagCompound; + import net.minecraft.network.chat.IChatBaseComponent; + import net.minecraft.server.level.EntityPlayer; +-import net.minecraft.server.level.PlayerChunk; +-import net.minecraft.server.level.PlayerChunkMap; +-import net.minecraft.server.level.TicketType; + import net.minecraft.world.damagesource.DamageSource; + import net.minecraft.world.entity.Entity; + import net.minecraft.world.entity.EntityAreaEffectCloud; +@@ -147,7 +144,6 @@ import net.minecraft.world.entity.vehicle.EntityMinecartHopper; + import net.minecraft.world.entity.vehicle.EntityMinecartMobSpawner; + import net.minecraft.world.entity.vehicle.EntityMinecartRideable; + import net.minecraft.world.entity.vehicle.EntityMinecartTNT; +-import net.minecraft.world.level.ChunkCoordIntPair; + import net.minecraft.world.phys.AxisAlignedBB; + import org.bukkit.Chunk; // Paper + import org.bukkit.EntityEffect; +@@ -1175,4 +1171,26 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { return getHandle().isTicking(); } // Paper end @@ -6865,12 +6975,12 @@ index dee4d12a49468d38f077784b219199f0070786f2..c524a0994f1c9ef1d0534403efa4e448 + // Purpur start + @Override + public org.bukkit.entity.Player getRider() { -+ return hasRider() ? (org.bukkit.entity.Player) getHandle().getRider().getBukkitEntity() : null; ++ return hasRider() ? (org.bukkit.entity.Player) getHandle().getPurpurRider().getBukkitEntity() : null; + } + + @Override + public boolean hasRider() { -+ return getHandle().hasRider(); ++ return getHandle().hasPurpurRider(); + } + + @Override @@ -6885,10 +6995,10 @@ index dee4d12a49468d38f077784b219199f0070786f2..c524a0994f1c9ef1d0534403efa4e448 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index ac89b7f0de0e5015c599648dc93cbcae760744f2..c44a15cd7b2d67c77eac7a1d2a7e9569f9dce48c 100644 +index b14cec316b16e46d54d389650372c5c9ce1e5a4d..81ea6ffb6be8a7aed281c6538f0535bbaf00b068 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -544,6 +544,18 @@ public class CraftEventFactory { +@@ -545,6 +545,18 @@ public class CraftEventFactory { } craftServer.getPluginManager().callEvent(event); @@ -6907,7 +7017,7 @@ index ac89b7f0de0e5015c599648dc93cbcae760744f2..c44a15cd7b2d67c77eac7a1d2a7e9569 return event; } -@@ -944,6 +956,7 @@ public class CraftEventFactory { +@@ -948,6 +960,7 @@ public class CraftEventFactory { damageCause = DamageCause.ENTITY_EXPLOSION; } event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), entity.getBukkitEntity(), damageCause, modifiers, modifierFunctions); @@ -6915,7 +7025,7 @@ index ac89b7f0de0e5015c599648dc93cbcae760744f2..c44a15cd7b2d67c77eac7a1d2a7e9569 } event.setCancelled(cancelled); -@@ -1028,6 +1041,7 @@ public class CraftEventFactory { +@@ -1032,6 +1045,7 @@ public class CraftEventFactory { if (!event.isCancelled()) { event.getEntity().setLastDamageCause(event); } @@ -6923,7 +7033,7 @@ index ac89b7f0de0e5015c599648dc93cbcae760744f2..c44a15cd7b2d67c77eac7a1d2a7e9569 return event; } -@@ -1077,6 +1091,7 @@ public class CraftEventFactory { +@@ -1081,6 +1095,7 @@ public class CraftEventFactory { EntityDamageEvent event; if (damager != null) { event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, modifiers, modifierFunctions); diff --git a/patches/server/0105-Use-configured-height-for-nether-surface-builders.patch b/patches/server/0104-Use-configured-height-for-nether-surface-builders.patch similarity index 100% rename from patches/server/0105-Use-configured-height-for-nether-surface-builders.patch rename to patches/server/0104-Use-configured-height-for-nether-surface-builders.patch diff --git a/patches/server/0106-Crying-obsidian-valid-for-portal-frames.patch b/patches/server/0105-Crying-obsidian-valid-for-portal-frames.patch similarity index 90% rename from patches/server/0106-Crying-obsidian-valid-for-portal-frames.patch rename to patches/server/0105-Crying-obsidian-valid-for-portal-frames.patch index 779adfe864..b590241a0a 100644 --- a/patches/server/0106-Crying-obsidian-valid-for-portal-frames.patch +++ b/patches/server/0105-Crying-obsidian-valid-for-portal-frames.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Crying obsidian valid for portal frames diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index fb7d5fa53c51766f348271285a2e921be1ca0497..1bc6380a805c1f76ffde67951d32d911e8f1f4a7 100644 +index 2448ff8e3a9c60d6d99dd8f4d3033553b2780c77..fa43eb5e31a9e3c6d6725ef770a7d1b3aec4d663 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java @@ -140,6 +140,7 @@ public class Block extends BlockBase implements IMaterial { @@ -17,13 +17,13 @@ index fb7d5fa53c51766f348271285a2e921be1ca0497..1bc6380a805c1f76ffde67951d32d911 return this == block; } diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBase.java b/src/main/java/net/minecraft/world/level/block/state/BlockBase.java -index e5f66cdf95b6073545efc8d1527b0a5e2741f79d..23a3b1b317b6b3e9d812f5a7b09b099b0528c59e 100644 +index 0ea0a1fc5f4d879d48bbdf24731dabec10dbccd1..df595dc52858807479584ce8da49390a25695990 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBase.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBase.java -@@ -741,6 +741,7 @@ public abstract class BlockBase { - return this.getBlock().a(tag) && predicate.test(this); +@@ -742,6 +742,7 @@ public abstract class BlockBase { } + public final boolean isSameInstance(Block block) { return a(block); } // Paper - OBFHELPER + public boolean equals(Block block) { return a(block); } // Purpur - OBFHELPER public boolean a(Block block) { return this.getBlock().a(block); diff --git a/patches/server/0107-Entities-can-use-portals-configuration.patch b/patches/server/0106-Entities-can-use-portals-configuration.patch similarity index 86% rename from patches/server/0107-Entities-can-use-portals-configuration.patch rename to patches/server/0106-Entities-can-use-portals-configuration.patch index d6076709bb..ead145093b 100644 --- a/patches/server/0107-Entities-can-use-portals-configuration.patch +++ b/patches/server/0106-Entities-can-use-portals-configuration.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entities can use portals configuration diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 4e1363050bef7fff9117250b79cbf35bf6bfc537..918edab475a8d33a253e3d6cd3c5655748d10dc0 100644 +index 2fed41af0416174a6e23282e3931f0b7d4f6f29f..8fb7ec53602c6eade18d97d427dcc33030167642 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2554,7 +2554,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2553,7 +2553,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne public void d(BlockPosition blockposition) { if (this.ai()) { this.resetPortalCooldown(); @@ -17,7 +17,7 @@ index 4e1363050bef7fff9117250b79cbf35bf6bfc537..918edab475a8d33a253e3d6cd3c56557 if (!this.world.isClientSide && !blockposition.equals(this.ac)) { this.ac = blockposition.immutableCopy(); } -@@ -3134,7 +3134,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -3133,7 +3133,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } public boolean canPortal() { @@ -27,10 +27,10 @@ index 4e1363050bef7fff9117250b79cbf35bf6bfc537..918edab475a8d33a253e3d6cd3c56557 public float a(Explosion explosion, IBlockAccess iblockaccess, BlockPosition blockposition, IBlockData iblockdata, Fluid fluid, float f) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 8db7dca08fe4f0e88c950179f62ecd0d17bc329c..d6bf755d3f978adaec04e5feaab659445d49305e 100644 +index 9fcc63a2f4a4c363ace85087665bf3a978d3d648..55366240f249c05cf3d40eaf29f2cd21cd86cd07 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -192,6 +192,7 @@ public class PurpurWorldConfig { +@@ -202,6 +202,7 @@ public class PurpurWorldConfig { public boolean boatEjectPlayersOnLand = false; public boolean disableDropsOnCrammingDeath = false; public boolean entitiesPickUpLootBypassMobGriefing = false; @@ -38,7 +38,7 @@ index 8db7dca08fe4f0e88c950179f62ecd0d17bc329c..d6bf755d3f978adaec04e5feaab65944 public boolean milkCuresBadOmen = true; public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; -@@ -200,6 +201,7 @@ public class PurpurWorldConfig { +@@ -211,6 +212,7 @@ public class PurpurWorldConfig { boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing); diff --git a/patches/server/0108-LivingEntity-broadcastItemBreak.patch b/patches/server/0107-LivingEntity-broadcastItemBreak.patch similarity index 100% rename from patches/server/0108-LivingEntity-broadcastItemBreak.patch rename to patches/server/0107-LivingEntity-broadcastItemBreak.patch diff --git a/patches/server/0109-Customizable-wither-health-and-healing.patch b/patches/server/0108-Customizable-wither-health-and-healing.patch similarity index 88% rename from patches/server/0109-Customizable-wither-health-and-healing.patch rename to patches/server/0108-Customizable-wither-health-and-healing.patch index 9ccabcdef0..e005eacf8c 100644 --- a/patches/server/0109-Customizable-wither-health-and-healing.patch +++ b/patches/server/0108-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/EntityWither.java b/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java -index 4c0a555cdb5bc34c73040b9533beaee56cbce70a..beb4d59faf4bd7501468b2eaa0e866613625e963 100644 +index 73875b925cbf527f91a7c0ec09d350a7a2ec1260..34103234140d61a5dc1d3e9f575fb8a65cde956b 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java -@@ -207,6 +207,11 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -205,6 +205,11 @@ public class EntityWither extends EntityMonster implements IRangedEntity { skull.setPositionRaw(headX, headY, headZ); world.addEntity(skull); } @@ -21,7 +21,7 @@ index 4c0a555cdb5bc34c73040b9533beaee56cbce70a..beb4d59faf4bd7501468b2eaa0e86661 // Purpur end @Override -@@ -411,7 +416,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -409,7 +414,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { this.setInvul(i); if (this.ticksLived % 10 == 0) { @@ -30,7 +30,7 @@ index 4c0a555cdb5bc34c73040b9533beaee56cbce70a..beb4d59faf4bd7501468b2eaa0e86661 } } else { -@@ -520,8 +525,10 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -518,8 +523,10 @@ public class EntityWither extends EntityMonster implements IRangedEntity { } } @@ -44,10 +44,10 @@ index 4c0a555cdb5bc34c73040b9533beaee56cbce70a..beb4d59faf4bd7501468b2eaa0e86661 //this.bossBattle.setProgress(this.getHealth() / this.getMaxHealth()); // Paper - Moved down diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d6bf755d3f978adaec04e5feaab659445d49305e..c4e04c2986d7029e76a930c33842c0355110244b 100644 +index 55366240f249c05cf3d40eaf29f2cd21cd86cd07..db9deac5b43626b264f1237d8a2d2535d7bb639b 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -967,10 +967,21 @@ public class PurpurWorldConfig { +@@ -979,10 +979,21 @@ public class PurpurWorldConfig { public boolean witherRidable = false; public boolean witherRidableInWater = false; public double witherMaxY = 256D; diff --git a/patches/server/0110-Allow-toggling-special-MobSpawners-per-world.patch b/patches/server/0109-Allow-toggling-special-MobSpawners-per-world.patch similarity index 96% rename from patches/server/0110-Allow-toggling-special-MobSpawners-per-world.patch rename to patches/server/0109-Allow-toggling-special-MobSpawners-per-world.patch index 8dea22a103..bbfac6c304 100644 --- a/patches/server/0110-Allow-toggling-special-MobSpawners-per-world.patch +++ b/patches/server/0109-Allow-toggling-special-MobSpawners-per-world.patch @@ -6,7 +6,7 @@ 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/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 535cd9faeeb8072b395bff7a3f7ca095afb02df4..64feabfb860ac29a7f7692bcc9972369dbdc2e02 100644 +index 132cf3beabc9206c7ba5fb557bb487fa813cc5a7..9d5d71d9bfe24a0a5504fd9f70fbfed1591570f2 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -92,6 +92,7 @@ import net.minecraft.world.entity.EnumCreatureType; @@ -106,7 +106,7 @@ index 36b416636b4ded816701a065ff2ff0c3890e0987..4c85525fe461fc3d52c538ab2610c109 this.world = new CraftWorld((WorldServer) this, gen, env); this.ticksPerAnimalSpawns = this.getServer().getTicksPerAnimalSpawns(); // CraftBukkit diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index c4e04c2986d7029e76a930c33842c0355110244b..954f2b3b0df6b15731fc4389366a8063498cd7d3 100644 +index db9deac5b43626b264f1237d8a2d2535d7bb639b..63cf32fe3359eb00f5e526689a9b10f673911a86 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -7,6 +7,8 @@ import net.minecraft.world.level.block.Blocks; @@ -152,8 +152,8 @@ index c4e04c2986d7029e76a930c33842c0355110244b..954f2b3b0df6b15731fc4389366a8063 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)); -@@ -207,6 +218,21 @@ public class PurpurWorldConfig { - voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); +@@ -219,6 +230,21 @@ public class PurpurWorldConfig { + voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); } + public boolean catSpawning; diff --git a/patches/server/0111-Raid-cooldown-setting.patch b/patches/server/0110-Raid-cooldown-setting.patch similarity index 91% rename from patches/server/0111-Raid-cooldown-setting.patch rename to patches/server/0110-Raid-cooldown-setting.patch index 3157e88410..06c3376f12 100644 --- a/patches/server/0111-Raid-cooldown-setting.patch +++ b/patches/server/0110-Raid-cooldown-setting.patch @@ -52,21 +52,21 @@ index c939ca087af4588e14669a2d53d7c116dcb59f16..11271762dcf5783c3179de1afc6a882c if (!this.raids.containsKey(raid.getId())) { this.raids.put(raid.getId(), raid); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 954f2b3b0df6b15731fc4389366a8063498cd7d3..7fc194d11ffeb82890d2faa1841bdb94f68336c2 100644 +index 63cf32fe3359eb00f5e526689a9b10f673911a86..1e0af82c74259783fdc86a7824b18ff1d14fe938 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -207,6 +207,7 @@ public class PurpurWorldConfig { - public boolean milkCuresBadOmen = true; +@@ -218,6 +218,7 @@ public class PurpurWorldConfig { public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; + public double voidDamageDealt = 4.0D; + 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); -@@ -216,6 +217,7 @@ public class PurpurWorldConfig { - milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); +@@ -228,6 +229,7 @@ public class PurpurWorldConfig { tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); + voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); + raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); } diff --git a/patches/server/0112-Despawn-rate-config-options-per-projectile-type.patch b/patches/server/0111-Despawn-rate-config-options-per-projectile-type.patch similarity index 92% rename from patches/server/0112-Despawn-rate-config-options-per-projectile-type.patch rename to patches/server/0111-Despawn-rate-config-options-per-projectile-type.patch index 168ede3078..625a596c5c 100644 --- a/patches/server/0112-Despawn-rate-config-options-per-projectile-type.patch +++ b/patches/server/0111-Despawn-rate-config-options-per-projectile-type.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Despawn rate config options per projectile type Default values of -1 respect vanilla behaviour. diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java b/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java -index e440d26c920c4efddf958c61bfdfa508273062cc..3ee404effe339a5742926255da6a9c41d1bc9367 100644 +index 42c1a7e8d51868c74e92d97f1df8d36fcaab6252..5775a28cb9d94b94b6e6bbc810fe31260810632e 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java @@ -61,7 +61,7 @@ public abstract class EntityArrow extends IProjectile { @@ -18,7 +18,7 @@ index e440d26c920c4efddf958c61bfdfa508273062cc..3ee404effe339a5742926255da6a9c41 private double damage; public int knockbackStrength; private SoundEffect ak; -@@ -295,13 +295,23 @@ public abstract class EntityArrow extends IProjectile { +@@ -293,13 +293,23 @@ public abstract class EntityArrow extends IProjectile { } @@ -96,10 +96,10 @@ index efdf5bc4f07231690c680429b3f77bd07970eee0..cf2c691357c41a7e7044f7a719144db2 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityFireworks.java b/src/main/java/net/minecraft/world/entity/projectile/EntityFireworks.java -index f9a355c847d778a9aad1987882fc816af92450ba..9b4b8b1a0f7654c9c30ca614cac6f485f82db5ef 100644 +index ca7a10c4b04766d7eb55be9252e96ef939e76df3..6a6ed24640c152bd5d6637b30ccce3efdf8a4856 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/EntityFireworks.java +++ b/src/main/java/net/minecraft/world/entity/projectile/EntityFireworks.java -@@ -325,4 +325,11 @@ public class EntityFireworks extends IProjectile { +@@ -323,4 +323,11 @@ public class EntityFireworks extends IProjectile { public Packet P() { return new PacketPlayOutSpawnEntity(this); } @@ -112,10 +112,10 @@ index f9a355c847d778a9aad1987882fc816af92450ba..9b4b8b1a0f7654c9c30ca614cac6f485 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityFishingHook.java b/src/main/java/net/minecraft/world/entity/projectile/EntityFishingHook.java -index dc6d279766ccc83a8f450028a09491b1c88f524c..5a5773209183331d849368c6b300367ac0ebe203 100644 +index 45f0f004e97b20e5c6c5b1f205b088bf8aa86017..242ba2c1feb07f9e582a722f34e6362dd84f27cc 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/EntityFishingHook.java +++ b/src/main/java/net/minecraft/world/entity/projectile/EntityFishingHook.java -@@ -617,4 +617,11 @@ public class EntityFishingHook extends IProjectile { +@@ -615,4 +615,11 @@ public class EntityFishingHook extends IProjectile { private HookState() {} } @@ -144,10 +144,10 @@ index cf2663d9883654f53b327246d85ee63c3990cd71..e860737bacfea0a1d728dbaaf41d6216 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityLlamaSpit.java b/src/main/java/net/minecraft/world/entity/projectile/EntityLlamaSpit.java -index 8aef834a6e8fcf5d44986745affb8f27bc3dfd6b..0bfb80331cea6bd2cf85a9475b6416691edd8b0b 100644 +index 6f497fc1b1eb33d0d9dfb0dc014b25b7eeb0dfac..56de41fc11720f4a37ee4e1e7cbec1b2dbe3ab76 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/EntityLlamaSpit.java +++ b/src/main/java/net/minecraft/world/entity/projectile/EntityLlamaSpit.java -@@ -88,4 +88,11 @@ public class EntityLlamaSpit extends IProjectile { +@@ -86,4 +86,11 @@ public class EntityLlamaSpit extends IProjectile { public Packet P() { return new PacketPlayOutSpawnEntity(this); } @@ -176,7 +176,7 @@ index dbc0afc5fb9e358a3e6d596692f57fb28303c4da..a3344719bcf178df5b63cda6f6a854c2 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/projectile/EntityShulkerBullet.java b/src/main/java/net/minecraft/world/entity/projectile/EntityShulkerBullet.java -index 1ae528ccd09a6536b3aac320e6218f03c274d6a9..cfc1376bfed9399daa6f27f54780ccf8e05753c6 100644 +index 24076f3de298173e293507f2024105532f833455..96c609aa888b4fb83db6eddba259bd553fe0dd0a 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/EntityShulkerBullet.java +++ b/src/main/java/net/minecraft/world/entity/projectile/EntityShulkerBullet.java @@ -337,4 +337,11 @@ public class EntityShulkerBullet extends IProjectile { @@ -257,16 +257,18 @@ index 021a7e31dc3650c0c404a893374528e6a63dfbad..2fe0e32a1158cccb3060f5a986c9fc41 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java b/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java -index 3914081629669aea19d50530db996728bbfa607f..62fa5be9090c8789e91bf9b9f614e74a4a6babdd 100644 +index 390023a7a825eed850a13572b719f47ed534c003..8df2b646df701b4d21f956b9870d7c09c13e2b6d 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/IProjectile.java -@@ -25,11 +25,25 @@ public abstract class IProjectile extends Entity { +@@ -25,6 +25,7 @@ public abstract class IProjectile extends Entity { private UUID shooter; private int c; private boolean d; public boolean leftOwner() { return d; } public void setLeftOwner(boolean leftOwner) { this.d = leftOwner; } // Purpur - OBFHELPER + public int despawnCounter; // Purpur - moved from EntityArrow - IProjectile(EntityTypes entitytypes, World world) { + // CraftBukkit start + private boolean hitCancelled = false; +@@ -34,6 +35,19 @@ public abstract class IProjectile extends Entity { super(entitytypes, world); } @@ -286,7 +288,7 @@ index 3914081629669aea19d50530db996728bbfa607f..62fa5be9090c8789e91bf9b9f614e74a public void setShooter(@Nullable Entity entity) { if (entity != null) { this.shooter = entity.getUniqueID(); -@@ -84,6 +98,12 @@ public abstract class IProjectile extends Entity { +@@ -88,6 +102,12 @@ public abstract class IProjectile extends Entity { } super.tick(); @@ -300,10 +302,10 @@ index 3914081629669aea19d50530db996728bbfa607f..62fa5be9090c8789e91bf9b9f614e74a public boolean checkIfLeftOwner() { return this.h(); } // Purpur - OBFHELPER diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7fc194d11ffeb82890d2faa1841bdb94f68336c2..8312461ed8c4b47049ec0eb0501306c14ebfee94 100644 +index 1e0af82c74259783fdc86a7824b18ff1d14fe938..c9fa235746dd8cf148ae88c3cca4c4a9639d0f61 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -199,6 +199,35 @@ public class PurpurWorldConfig { +@@ -209,6 +209,35 @@ public class PurpurWorldConfig { idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList); } diff --git a/patches/server/0113-Add-option-to-disable-zombie-aggressiveness-towards-.patch b/patches/server/0112-Add-option-to-disable-zombie-aggressiveness-towards-.patch similarity index 97% rename from patches/server/0113-Add-option-to-disable-zombie-aggressiveness-towards-.patch rename to patches/server/0112-Add-option-to-disable-zombie-aggressiveness-towards-.patch index f48cfed042..30f3457d4a 100644 --- a/patches/server/0113-Add-option-to-disable-zombie-aggressiveness-towards-.patch +++ b/patches/server/0112-Add-option-to-disable-zombie-aggressiveness-towards-.patch @@ -69,10 +69,10 @@ index 901fe8d224130c67bad00636b065bc798859a18e..88264b7b2c21a377f4b0dd857065e401 this.targetSelector.a(5, new PathfinderGoalNearestAttackableTarget<>(this, EntityTurtle.class, 10, true, false, EntityTurtle.bo)); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 8312461ed8c4b47049ec0eb0501306c14ebfee94..b6ad75695b80c4ec2249caa908b2fd2f4bbfbfaf 100644 +index c9fa235746dd8cf148ae88c3cca4c4a9639d0f61..94681a3cb57950b0cd074927aa63bf84e3ef0cf7 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1069,12 +1069,14 @@ public class PurpurWorldConfig { +@@ -1081,12 +1081,14 @@ public class PurpurWorldConfig { public boolean zombieJockeyOnlyBaby = true; public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; diff --git a/patches/server/0114-Persistent-TileEntity-Lore-and-DisplayName.patch b/patches/server/0113-Persistent-TileEntity-Lore-and-DisplayName.patch similarity index 96% rename from patches/server/0114-Persistent-TileEntity-Lore-and-DisplayName.patch rename to patches/server/0113-Persistent-TileEntity-Lore-and-DisplayName.patch index c83b96a9c1..1a90317e28 100644 --- a/patches/server/0114-Persistent-TileEntity-Lore-and-DisplayName.patch +++ b/patches/server/0113-Persistent-TileEntity-Lore-and-DisplayName.patch @@ -61,7 +61,7 @@ index 59d52c252b2e59923b8e513dd4d2e1ec9ce34dc7..4be1c8ee85f411a8b01be50b8cc3dc38 @Nullable diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index 1bc6380a805c1f76ffde67951d32d911e8f1f4a7..1e3adc491f0454edf4e19fb0bdf5d2cb7c8e842d 100644 +index fa43eb5e31a9e3c6d6725ef770a7d1b3aec4d663..a835285d230ea0dffa1b28c2a7a006041f2e6b2a 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java @@ -15,10 +15,15 @@ import net.minecraft.core.EnumDirection; @@ -214,22 +214,22 @@ index 93d02ccb87c17404c55884f52ae40c7b7ddfb103..35c4d5414db66b977a354ac50d35a6aa + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index b6ad75695b80c4ec2249caa908b2fd2f4bbfbfaf..1a5a8242a11f5b5851c9184d0a216110a591df8e 100644 +index 94681a3cb57950b0cd074927aa63bf84e3ef0cf7..a9f4732ece4764cabb1ae7b55fa9c273996f7d9d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -234,6 +234,7 @@ public class PurpurWorldConfig { +@@ -244,6 +244,7 @@ public class PurpurWorldConfig { public boolean entitiesPickUpLootBypassMobGriefing = false; public boolean entitiesCanUsePortals = true; public boolean milkCuresBadOmen = true; + public boolean persistentTileEntityDisplayNames = false; public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; - public int raidCooldownSeconds = 0; -@@ -244,6 +245,7 @@ public class PurpurWorldConfig { + public double voidDamageDealt = 4.0D; +@@ -255,6 +256,7 @@ public class PurpurWorldConfig { entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing); entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); + persistentTileEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-tileentity-display-names-and-lore", persistentTileEntityDisplayNames); tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); - raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); + voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); diff --git a/patches/server/0115-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch b/patches/server/0114-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch similarity index 100% rename from patches/server/0115-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch rename to patches/server/0114-Add-predicate-to-recipe-s-ExactChoice-ingredient.patch diff --git a/patches/server/0116-Flying-squids-Oh-my.patch b/patches/server/0115-Flying-squids-Oh-my.patch similarity index 91% rename from patches/server/0116-Flying-squids-Oh-my.patch rename to patches/server/0115-Flying-squids-Oh-my.patch index 03e2962320..b29144311e 100644 --- a/patches/server/0116-Flying-squids-Oh-my.patch +++ b/patches/server/0115-Flying-squids-Oh-my.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Flying squids! Oh my! diff --git a/src/main/java/net/minecraft/world/entity/animal/EntitySquid.java b/src/main/java/net/minecraft/world/entity/animal/EntitySquid.java -index a9fa18931d93dd7fa428b8cd6a414d4b3a3b4fbb..be48e12dd6c9a390bf383129953bcd3d1f818427 100644 +index 777c3bcf267d6cf31300588826d3af6b55cab350..7ec3e5d136cbb708b3bb29aa79bdd401d37d56dc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntitySquid.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntitySquid.java @@ -81,6 +81,11 @@ public class EntitySquid extends EntityWaterAnimal { @@ -38,10 +38,10 @@ index a9fa18931d93dd7fa428b8cd6a414d4b3a3b4fbb..be48e12dd6c9a390bf383129953bcd3d float f1 = MathHelper.cos(f) * 0.2F; float f2 = -0.1F + this.b.getRandom().nextFloat() * 0.2F; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 1a5a8242a11f5b5851c9184d0a216110a591df8e..630e6b38d391112a42c60650af78f79afe6a190e 100644 +index a9f4732ece4764cabb1ae7b55fa9c273996f7d9d..9a18d3612d38cdd3d85cc69fba6df355b6cc6829 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -925,10 +925,12 @@ public class PurpurWorldConfig { +@@ -937,10 +937,12 @@ public class PurpurWorldConfig { public boolean squidRidable = false; public boolean squidImmuneToEAR = true; public double squidOffsetWaterCheck = 0.0D; diff --git a/patches/server/0117-Infinity-bow-settings.patch b/patches/server/0116-Infinity-bow-settings.patch similarity index 95% rename from patches/server/0117-Infinity-bow-settings.patch rename to patches/server/0116-Infinity-bow-settings.patch index 28df332c18..51c938b3fc 100644 --- a/patches/server/0117-Infinity-bow-settings.patch +++ b/patches/server/0116-Infinity-bow-settings.patch @@ -26,10 +26,10 @@ index 015f4d71f35a9d512814389b6e6cab74c0daf116..c7e20b25b4d09463fa54c66e62208e90 entityhuman.b(StatisticList.ITEM_USED.b(this)); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 630e6b38d391112a42c60650af78f79afe6a190e..7c89bda2330b1a3fe5a5c83ee0038936938b7ae0 100644 +index 9a18d3612d38cdd3d85cc69fba6df355b6cc6829..e982733732e3dfd9d34cf5d9e87a9caa3af2d6e8 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -199,6 +199,15 @@ public class PurpurWorldConfig { +@@ -209,6 +209,15 @@ public class PurpurWorldConfig { idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList); } diff --git a/patches/server/0118-Stonecutter-damage.patch b/patches/server/0117-Stonecutter-damage.patch similarity index 67% rename from patches/server/0118-Stonecutter-damage.patch rename to patches/server/0117-Stonecutter-damage.patch index d3842ac3d8..2d0a11f809 100644 --- a/patches/server/0118-Stonecutter-damage.patch +++ b/patches/server/0117-Stonecutter-damage.patch @@ -4,31 +4,34 @@ Date: Mon, 5 Oct 2020 12:15:14 -0500 Subject: [PATCH] Stonecutter damage +diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java +index 8fb7ec53602c6eade18d97d427dcc33030167642..ac52732d4c1a3056664b40a15b6ee9cda9bea3d0 100644 +--- a/src/main/java/net/minecraft/world/entity/Entity.java ++++ b/src/main/java/net/minecraft/world/entity/Entity.java +@@ -893,7 +893,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne + } + // CraftBukkit end + +- if (this.onGround && !this.bv()) { ++ if (this.onGround && (!this.bv() || (block == Blocks.STONECUTTER && world.purpurConfig.stonecutterDamage > 0.0F))) { // Purpur + block.stepOn(this.world, blockposition, this); + } + diff --git a/src/main/java/net/minecraft/world/level/block/BlockStonecutter.java b/src/main/java/net/minecraft/world/level/block/BlockStonecutter.java -index 54c9586cd7f8c9691a1c7ded9c9c96b0f316b0b6..988204918854e982e334eb2417b83914b58cbcf6 100644 +index 54c9586cd7f8c9691a1c7ded9c9c96b0f316b0b6..68c6f090a10564a790f3bf175e2378d1f7103b8e 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockStonecutter.java +++ b/src/main/java/net/minecraft/world/level/block/BlockStonecutter.java -@@ -10,6 +10,9 @@ import net.minecraft.world.EnumHand; - import net.minecraft.world.EnumInteractionResult; - import net.minecraft.world.ITileInventory; - import net.minecraft.world.TileInventory; -+import net.minecraft.world.damagesource.DamageSource; -+import net.minecraft.world.entity.Entity; -+import net.minecraft.world.entity.EntityLiving; - import net.minecraft.world.entity.player.EntityHuman; - import net.minecraft.world.inventory.ContainerAccess; - import net.minecraft.world.inventory.ContainerStonecutter; -@@ -94,4 +97,16 @@ public class BlockStonecutter extends Block { +@@ -94,4 +94,16 @@ public class BlockStonecutter extends Block { public boolean a(IBlockData iblockdata, IBlockAccess iblockaccess, BlockPosition blockposition, PathMode pathmode) { return false; } + + // Purpur start + @Override -+ public void stepOn(World world, BlockPosition pos, Entity entity) { -+ if (world.purpurConfig.stonecutterDamage > 0.0F && entity instanceof EntityLiving) { ++ public void stepOn(World world, BlockPosition pos, net.minecraft.world.entity.Entity entity) { ++ if (world.purpurConfig.stonecutterDamage > 0.0F && entity instanceof net.minecraft.world.entity.EntityLiving) { + org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = world.getWorld().getBlockAt(pos.getX(), pos.getY(), pos.getZ()); -+ entity.damageEntity(DamageSource.CACTUS, world.purpurConfig.stonecutterDamage); ++ entity.damageEntity(net.minecraft.world.damagesource.DamageSource.CACTUS, world.purpurConfig.stonecutterDamage); + org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = null; + } + super.stepOn(world, pos, entity); @@ -49,10 +52,10 @@ index 7b92a54cfb64fb77af99e6bf66eacbdb9e769dc1..9d08094165cf18d99116b5c721fff888 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7c89bda2330b1a3fe5a5c83ee0038936938b7ae0..b8929df319ccb260b0f8fc841c9665c6aa2548eb 100644 +index e982733732e3dfd9d34cf5d9e87a9caa3af2d6e8..11f699eb7d68013df708a874a214da6be3fe6773 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -429,6 +429,11 @@ public class PurpurWorldConfig { +@@ -441,6 +441,11 @@ public class PurpurWorldConfig { spawnerDeactivateByRedstone = getBoolean("blocks.spawner.deactivate-by-redstone", spawnerDeactivateByRedstone); } diff --git a/patches/server/0119-Configurable-daylight-cycle.patch b/patches/server/0118-Configurable-daylight-cycle.patch similarity index 96% rename from patches/server/0119-Configurable-daylight-cycle.patch rename to patches/server/0118-Configurable-daylight-cycle.patch index 515819368b..280f2eab5f 100644 --- a/patches/server/0119-Configurable-daylight-cycle.patch +++ b/patches/server/0118-Configurable-daylight-cycle.patch @@ -18,7 +18,7 @@ index 3086ee023685781d94e2fb99fc8dff5264f01165..74c1047305cac5673e274096709c757e public PacketPlayOutUpdateTime() {} diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 64feabfb860ac29a7f7692bcc9972369dbdc2e02..028911ebe843751080564d90e96306524e5a2e21 100644 +index 9d5d71d9bfe24a0a5504fd9f70fbfed1591570f2..e76e54fb833ce69968d08f78836acf23e6436653 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -64,6 +64,7 @@ import net.minecraft.network.protocol.game.PacketPlayOutExplosion; @@ -82,7 +82,7 @@ index 64feabfb860ac29a7f7692bcc9972369dbdc2e02..028911ebe843751080564d90e9630652 public void doMobSpawning(boolean flag, boolean flag1) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index b8929df319ccb260b0f8fc841c9665c6aa2548eb..fb694fd7be60dc9ae7305b4a03a767b6ae169778 100644 +index 11f699eb7d68013df708a874a214da6be3fe6773..b11a71a1dda78098f1995f289a1fb45c9a02eeb6 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -150,6 +150,13 @@ public class PurpurWorldConfig { diff --git a/patches/server/0120-Allow-infinite-and-mending-enchantments-together.patch b/patches/server/0119-Allow-infinite-and-mending-enchantments-together.patch similarity index 100% rename from patches/server/0120-Allow-infinite-and-mending-enchantments-together.patch rename to patches/server/0119-Allow-infinite-and-mending-enchantments-together.patch diff --git a/patches/server/0121-Infinite-fuel-furnace.patch b/patches/server/0120-Infinite-fuel-furnace.patch similarity index 96% rename from patches/server/0121-Infinite-fuel-furnace.patch rename to patches/server/0120-Infinite-fuel-furnace.patch index 17ef2aa9da..5e29941e01 100644 --- a/patches/server/0121-Infinite-fuel-furnace.patch +++ b/patches/server/0120-Infinite-fuel-furnace.patch @@ -57,10 +57,10 @@ index 9ce19b89c16eb6edd3d5d5cc87a966a37f66895c..ac42fd627009a87709448354f232d8b5 if (flag1) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index fb694fd7be60dc9ae7305b4a03a767b6ae169778..1ee44467f98f8ecffa7c7d61a6169ba0b727f234 100644 +index b11a71a1dda78098f1995f289a1fb45c9a02eeb6..30ca0eaf588b7056963e9c6ecb4682608b46a463 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -397,6 +397,11 @@ public class PurpurWorldConfig { +@@ -409,6 +409,11 @@ public class PurpurWorldConfig { farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); } diff --git a/patches/server/0122-Arrows-should-not-reset-despawn-counter.patch b/patches/server/0121-Arrows-should-not-reset-despawn-counter.patch similarity index 86% rename from patches/server/0122-Arrows-should-not-reset-despawn-counter.patch rename to patches/server/0121-Arrows-should-not-reset-despawn-counter.patch index 7074af8b97..e0af66b86d 100644 --- a/patches/server/0122-Arrows-should-not-reset-despawn-counter.patch +++ b/patches/server/0121-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/EntityArrow.java b/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java -index 3ee404effe339a5742926255da6a9c41d1bc9367..6f0a306449844dc50426202262219d0e952459cc 100644 +index 5775a28cb9d94b94b6e6bbc810fe31260810632e..7861b9e28b0fcc7ab931498fc7c96404456b9998 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/EntityArrow.java -@@ -283,7 +283,7 @@ public abstract class EntityArrow extends IProjectile { +@@ -281,7 +281,7 @@ public abstract class EntityArrow extends IProjectile { Vec3D vec3d = this.getMot(); this.setMot(vec3d.d((double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F), (double) (this.random.nextFloat() * 0.2F))); diff --git a/patches/server/0123-Add-tablist-suffix-option-for-afk.patch b/patches/server/0122-Add-tablist-suffix-option-for-afk.patch similarity index 93% rename from patches/server/0123-Add-tablist-suffix-option-for-afk.patch rename to patches/server/0122-Add-tablist-suffix-option-for-afk.patch index f84593dc7e..0cff40fe6c 100644 --- a/patches/server/0123-Add-tablist-suffix-option-for-afk.patch +++ b/patches/server/0122-Add-tablist-suffix-option-for-afk.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add tablist suffix option for afk diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index af0253aecc8f3a4125b37aed4548c13b7ad6260a..38254784de3165e8546e1fcd4f780741abb78558 100644 +index 0ed513afdab9b4f8e91b55ffc05f6d26bbd14d22..a2fc2924191590c6273f0393f39516d686573296 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -2122,7 +2122,11 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -2120,7 +2120,11 @@ public class EntityPlayer extends EntityHuman implements ICrafting { } if (world.purpurConfig.idleTimeoutUpdateTabList) { diff --git a/patches/server/0124-Ability-to-re-add-farmland-mechanics-from-Alpha.patch b/patches/server/0123-Ability-to-re-add-farmland-mechanics-from-Alpha.patch similarity index 92% rename from patches/server/0124-Ability-to-re-add-farmland-mechanics-from-Alpha.patch rename to patches/server/0123-Ability-to-re-add-farmland-mechanics-from-Alpha.patch index 35814292fd..a4c3052aaf 100644 --- a/patches/server/0124-Ability-to-re-add-farmland-mechanics-from-Alpha.patch +++ b/patches/server/0123-Ability-to-re-add-farmland-mechanics-from-Alpha.patch @@ -24,10 +24,10 @@ index 2bbaa2fb426869223a9b2f07406496c1b0daff3f..3e8893bf76b8ffda4c595c81086556ea return; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 1ee44467f98f8ecffa7c7d61a6169ba0b727f234..c29f923872dea87fa3fcbb9e4e8554947b569121 100644 +index 30ca0eaf588b7056963e9c6ecb4682608b46a463..44c27c6dd4993add42410373191a46f4cc92f42f 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -393,8 +393,10 @@ public class PurpurWorldConfig { +@@ -405,8 +405,10 @@ public class PurpurWorldConfig { } public boolean farmlandGetsMoistFromBelow = false; diff --git a/patches/server/0125-Add-adjustable-breeding-cooldown-to-config.patch b/patches/server/0124-Add-adjustable-breeding-cooldown-to-config.patch similarity index 90% rename from patches/server/0125-Add-adjustable-breeding-cooldown-to-config.patch rename to patches/server/0124-Add-adjustable-breeding-cooldown-to-config.patch index 8bbae10b3f..918de7cdc6 100644 --- a/patches/server/0125-Add-adjustable-breeding-cooldown-to-config.patch +++ b/patches/server/0124-Add-adjustable-breeding-cooldown-to-config.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add adjustable breeding cooldown to config diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityAnimal.java b/src/main/java/net/minecraft/world/entity/animal/EntityAnimal.java -index 28dd42921961c6a47f2d85a5f93b8298f2c228d3..6ae5fafd379863bf23df3580d3dbc7a5ba63b545 100644 +index 4de0a733819d408e8b9a55b604f455281d7732c5..94b5874c1eb90c02a557179a2a1170b1da85deb4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityAnimal.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityAnimal.java @@ -145,7 +145,7 @@ public abstract class EntityAnimal extends EntityAgeable { @@ -30,8 +30,8 @@ index 28dd42921961c6a47f2d85a5f93b8298f2c228d3..6ae5fafd379863bf23df3580d3dbc7a5 + } + // Purpur end // CraftBukkit start - call EntityBreedEvent - int experience = this.getRandom().nextInt(7) + 1; - org.bukkit.event.entity.EntityBreedEvent entityBreedEvent = org.bukkit.craftbukkit.event.CraftEventFactory.callEntityBreedEvent(entityageable, this, entityanimal, entityplayer, this.breedItem, experience); + entityageable.setBaby(true); + entityageable.setPositionRotation(this.locX(), this.locY(), this.locZ(), 0.0F, 0.0F); diff --git a/src/main/java/net/minecraft/world/level/World.java b/src/main/java/net/minecraft/world/level/World.java index 4c85525fe461fc3d52c538ab2610c1098c9d0151..b03865ca77c3fbd4fe61db450ffd3cede9613568 100644 --- a/src/main/java/net/minecraft/world/level/World.java @@ -102,20 +102,20 @@ index 4c85525fe461fc3d52c538ab2610c1098c9d0151..b03865ca77c3fbd4fe61db450ffd3ced this.world = new CraftWorld((WorldServer) this, gen, env); this.ticksPerAnimalSpawns = this.getServer().getTicksPerAnimalSpawns(); // CraftBukkit diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index c29f923872dea87fa3fcbb9e4e8554947b569121..def36f72153b25094693b82e962366cc19ae4d13 100644 +index 44c27c6dd4993add42410373191a46f4cc92f42f..b92715b115332e8197d5a02a2f308a1ab0f447b6 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -254,6 +254,7 @@ public class PurpurWorldConfig { - public double tridentLoyaltyVoidReturnHeight = 0.0D; +@@ -265,6 +265,7 @@ public class PurpurWorldConfig { public double voidDamageHeight = -64.0D; + public double voidDamageDealt = 4.0D; 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); -@@ -265,6 +266,7 @@ public class PurpurWorldConfig { - tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); +@@ -277,6 +278,7 @@ public class PurpurWorldConfig { voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); + voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); + animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds); } diff --git a/patches/server/0126-Make-entity-breeding-times-configurable.patch b/patches/server/0125-Make-entity-breeding-times-configurable.patch similarity index 91% rename from patches/server/0126-Make-entity-breeding-times-configurable.patch rename to patches/server/0125-Make-entity-breeding-times-configurable.patch index 7d677e8973..9f54bbcc85 100644 --- a/patches/server/0126-Make-entity-breeding-times-configurable.patch +++ b/patches/server/0125-Make-entity-breeding-times-configurable.patch @@ -5,24 +5,24 @@ Subject: [PATCH] Make entity breeding times configurable diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorMakeLove.java b/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorMakeLove.java -index a68428554b93f4aba9f0cb0b3af03985896830b7..c1e8b9562eb37cee3d47034b93d4ef0c998eb52f 100644 +index 79989c143fc8393172475e33d356510b3547afb9..d1315f4b6e026f70e04a0b54289fd13b4be17cde 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorMakeLove.java +++ b/src/main/java/net/minecraft/world/entity/ai/behavior/BehaviorMakeLove.java -@@ -115,8 +115,10 @@ public class BehaviorMakeLove extends Behavior { - if (entityvillager2 == null) { - return Optional.empty(); - } else { +@@ -117,8 +117,10 @@ public class BehaviorMakeLove extends Behavior { + return Optional.empty(); + } + // CraftBukkit end - entityvillager.setAgeRaw(6000); - entityvillager1.setAgeRaw(6000); + // Purpur start + entityvillager.setAgeRaw(worldserver.purpurConfig.villagerBreedingTicks); + entityvillager1.setAgeRaw(worldserver.purpurConfig.villagerBreedingTicks); + // Purpur end - entityvillager2.setAgeRaw(-24000); - entityvillager2.setPositionRotation(entityvillager.locX(), entityvillager.locY(), entityvillager.locZ(), 0.0F, 0.0F); worldserver.addAllEntities(entityvillager2, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason + worldserver.broadcastEntityEffect(entityvillager2, (byte) 12); + return Optional.of(entityvillager2); diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityAnimal.java b/src/main/java/net/minecraft/world/entity/animal/EntityAnimal.java -index 6ae5fafd379863bf23df3580d3dbc7a5ba63b545..38a4072a5df3abd3d1d9929f6402b3edfdd6c197 100644 +index 94b5874c1eb90c02a557179a2a1170b1da85deb4..181bb648dd32f71c7f9d3fbb4974e2a1afba61ac 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityAnimal.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityAnimal.java @@ -38,6 +38,7 @@ public abstract class EntityAnimal extends EntityAgeable { @@ -33,7 +33,7 @@ index 6ae5fafd379863bf23df3580d3dbc7a5ba63b545..38a4072a5df3abd3d1d9929f6402b3ed protected EntityAnimal(EntityTypes entitytypes, World world) { super(entitytypes, world); -@@ -259,8 +260,10 @@ public abstract class EntityAnimal extends EntityAgeable { +@@ -261,8 +262,10 @@ public abstract class EntityAnimal extends EntityAgeable { CriterionTriggers.o.a(entityplayer, this, entityanimal, entityageable); } @@ -45,12 +45,12 @@ index 6ae5fafd379863bf23df3580d3dbc7a5ba63b545..38a4072a5df3abd3d1d9929f6402b3ed + // Purpur end this.resetLove(); entityanimal.resetLove(); - entityageable.setBaby(true); + worldserver.addAllEntities(entityageable, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityBee.java b/src/main/java/net/minecraft/world/entity/animal/EntityBee.java -index 0c6d3dae70eeea844a31f9edf54410db13e0b04b..9e40fd6585592ccd1deff1d8319c57660474c053 100644 +index bcd510e0bf647a240edfaac1348119c5e1d7dc42..6086dda5b06f0c0e02734edf7141b13715420d3c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityBee.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityBee.java -@@ -176,6 +176,11 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB +@@ -175,6 +175,11 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB setMot(mot.a(0.9D)); } } @@ -63,7 +63,7 @@ index 0c6d3dae70eeea844a31f9edf54410db13e0b04b..9e40fd6585592ccd1deff1d8319c5766 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityCat.java b/src/main/java/net/minecraft/world/entity/animal/EntityCat.java -index 3efb010d0e045d14051a33bd7465669e415c26bd..079b95ef465f7155f426a2c87a4a50f8369d0a18 100644 +index bac3035e2382df2d79e592b02395753eee08fa4b..187047de5530ccec1e9804f8039839246ab248f3 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityCat.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityCat.java @@ -122,6 +122,11 @@ public class EntityCat extends EntityTameableAnimal { @@ -95,7 +95,7 @@ index 5c744f1eac19e144c39a2c146d312f0547d6e589..ab54e809f735cea7d84366d2bc205351 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityCow.java b/src/main/java/net/minecraft/world/entity/animal/EntityCow.java -index cad256514c7df92847522c8d7ddf45ebe02658c4..93589a2b86e6663d93f6b536b853996c08db549a 100644 +index b2d3fc3151a952ac783101443772736a206a6a3b..7ed55ebe1bb768351a5cb4cdc7d4d3b0816d53b1 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityCow.java @@ -54,6 +54,11 @@ public class EntityCow extends EntityAnimal { @@ -111,10 +111,10 @@ index cad256514c7df92847522c8d7ddf45ebe02658c4..93589a2b86e6663d93f6b536b853996c @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityFox.java b/src/main/java/net/minecraft/world/entity/animal/EntityFox.java -index 0c1151b598aa681e63ddaac29e4a589f917fd03b..7bf546a1b2a80179962ed08a35d86f0a28eda3c2 100644 +index 7b1a6d846f25d8bc659a541fce59df79347ba9bc..70369d03985250fa5eaf398fa98d35a2c2a06ff1 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityFox.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityFox.java -@@ -159,6 +159,11 @@ public class EntityFox extends EntityAnimal { +@@ -157,6 +157,11 @@ public class EntityFox extends EntityAnimal { super.onDismount(entityhuman); setCanPickupLoot(true); } @@ -138,7 +138,7 @@ index 0c1151b598aa681e63ddaac29e4a589f917fd03b..7bf546a1b2a80179962ed08a35d86f0a + // Purpur end this.animal.resetLove(); this.partner.resetLove(); - entityfox.setAgeRaw(-24000); + worldserver.addAllEntities(entityfox, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.BREEDING); // CraftBukkit - added SpawnReason diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityMushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/EntityMushroomCow.java index 815e907e8db721f2a6f0f831b69c44a9573b5c9b..ab4a8ee6e1912f230cbf3353eb42c3bc8a9db58e 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityMushroomCow.java @@ -188,7 +188,7 @@ index 0d912399e1975d9c0d5525f5b89049f40e7efcc0..e6952c0a8d90eb4b133c517d97299f2c @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java b/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java -index 5c26eea7e3e93dc7bcd8b86519e84db58b70cecb..5463e1779422ff19499727a000fdfbbfc38809a8 100644 +index 9f705b75a14ba456808485ce4ddef9550aac3fe9..7346921a24bdd57aa3814386bc372b082b23b4bc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java @@ -171,6 +171,11 @@ public class EntityParrot extends EntityPerchable implements EntityBird { @@ -220,7 +220,7 @@ index cef69f99d7bc9b6605b9654c50f43a1ebc1a8509..5aa8806063186bec36b38adc51e2ea82 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityPolarBear.java b/src/main/java/net/minecraft/world/entity/animal/EntityPolarBear.java -index e686491a469573a3fc466c46be1b7430ff02ba53..2306abb72ea76a52fd6f27648c4815ad99f8f005 100644 +index b46315700b8857318b03b83097fcf829047f8ca4..c9c7c9de638079393bbea86f8069023dcbcbca83 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityPolarBear.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityPolarBear.java @@ -116,6 +116,11 @@ public class EntityPolarBear extends EntityAnimal implements IEntityAngerable { @@ -236,10 +236,10 @@ index e686491a469573a3fc466c46be1b7430ff02ba53..2306abb72ea76a52fd6f27648c4815ad @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java b/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java -index fff6bcff9d44c7d49cd2d0c334ea702531c74ea1..0b706404895b69fbca79502a327ec20b47ed99f0 100644 +index 4660f37bc89418e0c3767305d390a53f5c0d3c55..465701232567e4058f9dfc776560ccde33fee66c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java -@@ -86,6 +86,11 @@ public class EntityRabbit extends EntityAnimal { +@@ -85,6 +85,11 @@ public class EntityRabbit extends EntityAnimal { public boolean isRidableInWater() { return world.purpurConfig.rabbitRidableInWater; } @@ -380,7 +380,7 @@ index d57e7c02268e5d8a00b0b5897fa03dcee10cd2e0..c776f18722d1aa73f53da66ef6b37564 public static AttributeProvider.Builder eL() { diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java b/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java -index d1bd7b9a6a8cfb6b609db4229b2f42a40b8b484f..b3d51abc9bad9cad6fdc5dbdc2bf09d43a565f98 100644 +index d25177f9500a084e0f18a20b1eb1c4ac170048ec..2710c246a147f117d2d90014c37988888010dc36 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java @@ -108,6 +108,11 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn @@ -412,7 +412,7 @@ index 14dda6743ed9e6f4880bc560f7ba8892d8e84afe..cba66a08feceeeaf7c123da595fc7b12 public static boolean c(EntityTypes entitytypes, GeneratorAccess generatoraccess, EnumMobSpawn enummobspawn, BlockPosition blockposition, Random random) { diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/EntityHoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/EntityHoglin.java -index 64253428ef66145d07f74f8d0e5bdeb5aa5fe02b..828d01abe8202a246ce07c1c652a17cbc829d904 100644 +index c2e32121f693a6207e6239c26a1fd6e60d0ce434..8c2815c8b11c8db8e6c1d0caf71188322e52094d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/EntityHoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/EntityHoglin.java @@ -71,6 +71,11 @@ public class EntityHoglin extends EntityAnimal implements IMonster, IOglin { @@ -428,10 +428,10 @@ index 64253428ef66145d07f74f8d0e5bdeb5aa5fe02b..828d01abe8202a246ce07c1c652a17cb @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667f6d9bc09 100644 +index b92715b115332e8197d5a02a2f308a1ab0f447b6..bd37234624a720c1077aabf0123de61a0d4e05cb 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -480,10 +480,12 @@ public class PurpurWorldConfig { +@@ -492,10 +492,12 @@ public class PurpurWorldConfig { public boolean beeRidable = false; public boolean beeRidableInWater = false; public double beeMaxY = 256D; @@ -444,7 +444,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean blazeRidable = false; -@@ -500,12 +502,14 @@ public class PurpurWorldConfig { +@@ -512,12 +514,14 @@ public class PurpurWorldConfig { public int catSpawnDelay = 1200; public int catSpawnSwampHutScanRange = 16; public int catSpawnVillageScanRange = 48; @@ -459,7 +459,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean caveSpiderRidable = false; -@@ -518,10 +522,12 @@ public class PurpurWorldConfig { +@@ -530,10 +534,12 @@ public class PurpurWorldConfig { public boolean chickenRidable = false; public boolean chickenRidableInWater = false; public boolean chickenRetaliate = false; @@ -472,7 +472,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean codRidable = false; -@@ -532,10 +538,12 @@ public class PurpurWorldConfig { +@@ -544,10 +550,12 @@ public class PurpurWorldConfig { public boolean cowRidable = false; public boolean cowRidableInWater = false; public int cowFeedMushrooms = 0; @@ -485,7 +485,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean creeperRidable = false; -@@ -563,8 +571,10 @@ public class PurpurWorldConfig { +@@ -575,8 +583,10 @@ public class PurpurWorldConfig { } public boolean donkeyRidableInWater = false; @@ -496,7 +496,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean drownedRidable = false; -@@ -622,10 +632,12 @@ public class PurpurWorldConfig { +@@ -634,10 +644,12 @@ public class PurpurWorldConfig { public boolean foxRidable = false; public boolean foxRidableInWater = false; public boolean foxTypeChangesWithTulips = false; @@ -509,7 +509,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean ghastRidable = false; -@@ -670,14 +682,18 @@ public class PurpurWorldConfig { +@@ -682,14 +694,18 @@ public class PurpurWorldConfig { public boolean hoglinRidable = false; public boolean hoglinRidableInWater = false; @@ -528,7 +528,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean huskRidable = false; -@@ -722,9 +738,11 @@ public class PurpurWorldConfig { +@@ -734,9 +750,11 @@ public class PurpurWorldConfig { public boolean llamaRidable = false; public boolean llamaRidableInWater = false; @@ -540,7 +540,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean llamaTraderRidable = false; -@@ -743,28 +761,36 @@ public class PurpurWorldConfig { +@@ -755,28 +773,36 @@ public class PurpurWorldConfig { public boolean mooshroomRidable = false; public boolean mooshroomRidableInWater = false; @@ -577,7 +577,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean parrotRidable = false; -@@ -830,10 +856,12 @@ public class PurpurWorldConfig { +@@ -842,10 +868,12 @@ public class PurpurWorldConfig { public boolean pigRidable = false; public boolean pigRidableInWater = false; public boolean pigGiveSaddleBack = false; @@ -590,7 +590,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean piglinRidable = false; -@@ -861,12 +889,14 @@ public class PurpurWorldConfig { +@@ -873,12 +901,14 @@ public class PurpurWorldConfig { public boolean polarBearRidableInWater = false; public String polarBearBreedableItemString = ""; public Item polarBearBreedableItem = null; @@ -605,7 +605,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean pufferfishRidable = false; -@@ -878,11 +908,13 @@ public class PurpurWorldConfig { +@@ -890,11 +920,13 @@ public class PurpurWorldConfig { public boolean rabbitRidableInWater = false; public double rabbitNaturalToast = 0.0D; public double rabbitNaturalKiller = 0.0D; @@ -619,7 +619,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean ravagerRidable = false; -@@ -899,9 +931,11 @@ public class PurpurWorldConfig { +@@ -911,9 +943,11 @@ public class PurpurWorldConfig { public boolean sheepRidable = false; public boolean sheepRidableInWater = false; @@ -631,7 +631,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean shulkerRidable = false; -@@ -979,9 +1013,11 @@ public class PurpurWorldConfig { +@@ -991,9 +1025,11 @@ public class PurpurWorldConfig { public boolean striderRidable = false; public boolean striderRidableInWater = false; @@ -643,7 +643,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean tropicalFishRidable = false; -@@ -991,9 +1027,11 @@ public class PurpurWorldConfig { +@@ -1003,9 +1039,11 @@ public class PurpurWorldConfig { public boolean turtleRidable = false; public boolean turtleRidableInWater = false; @@ -655,7 +655,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean vexRidable = false; -@@ -1015,6 +1053,7 @@ public class PurpurWorldConfig { +@@ -1027,6 +1065,7 @@ public class PurpurWorldConfig { public int villagerSpawnIronGolemRadius = 0; public int villagerSpawnIronGolemLimit = 0; public boolean villagerCanBreed = true; @@ -663,7 +663,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1026,6 +1065,7 @@ public class PurpurWorldConfig { +@@ -1038,6 +1077,7 @@ public class PurpurWorldConfig { villagerSpawnIronGolemRadius = getInt("mobs.villager.spawn-iron-golem.radius", villagerSpawnIronGolemRadius); villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit); villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); @@ -671,7 +671,7 @@ index def36f72153b25094693b82e962366cc19ae4d13..1ac6394340aaf61c899b758351cfb667 } public boolean villagerTraderRidable = false; -@@ -1086,9 +1126,11 @@ public class PurpurWorldConfig { +@@ -1098,9 +1138,11 @@ public class PurpurWorldConfig { public boolean wolfRidable = false; public boolean wolfRidableInWater = false; diff --git a/patches/server/0127-Apply-display-names-from-item-forms-of-entities-to-e.patch b/patches/server/0126-Apply-display-names-from-item-forms-of-entities-to-e.patch similarity index 96% rename from patches/server/0127-Apply-display-names-from-item-forms-of-entities-to-e.patch rename to patches/server/0126-Apply-display-names-from-item-forms-of-entities-to-e.patch index 59b5a91622..52b56cbf0c 100644 --- a/patches/server/0127-Apply-display-names-from-item-forms-of-entities-to-e.patch +++ b/patches/server/0126-Apply-display-names-from-item-forms-of-entities-to-e.patch @@ -142,7 +142,7 @@ index bbd3bb2d12e500d15485598783d39b0cb63a6d83..8e4c3304779cfccf7d45d4843f9c15bf if (((EntityHanging) object).survives()) { diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 81e2ccfa4f6cf6a4ad9236cf0ce94df8dc3ec5b6..132972755ac74838f3386e0fac5033380b71fce5 100644 +index 2aa761656ce75f78732c502fd4ce65034b6c2919..a4c41caae425e054db3f40a9abc41f45ccd20730 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -788,6 +788,7 @@ public final class ItemStack { @@ -154,7 +154,7 @@ index 81e2ccfa4f6cf6a4ad9236cf0ce94df8dc3ec5b6..132972755ac74838f3386e0fac503338 NBTTagCompound nbttagcompound = this.a("display"); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 1ac6394340aaf61c899b758351cfb667f6d9bc09..0c159098cff5a67bc2ebc9374138843172316f01 100644 +index bd37234624a720c1077aabf0123de61a0d4e05cb..b650293ff3315760e29307113e29fb2731af472b 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -83,8 +83,10 @@ public class PurpurWorldConfig { @@ -168,19 +168,19 @@ index 1ac6394340aaf61c899b758351cfb667f6d9bc09..0c159098cff5a67bc2ebc93741388431 armorstandStepHeight = (float) getDouble("gameplay-mechanics.armorstand.step-height", armorstandStepHeight); } -@@ -251,6 +253,7 @@ public class PurpurWorldConfig { +@@ -261,6 +263,7 @@ public class PurpurWorldConfig { public boolean entitiesCanUsePortals = true; public boolean milkCuresBadOmen = true; public boolean persistentTileEntityDisplayNames = false; + public boolean persistentDroppableEntityDisplayNames = false; public double tridentLoyaltyVoidReturnHeight = 0.0D; public double voidDamageHeight = -64.0D; - public int raidCooldownSeconds = 0; -@@ -263,6 +266,7 @@ public class PurpurWorldConfig { + public double voidDamageDealt = 4.0D; +@@ -274,6 +277,7 @@ public class PurpurWorldConfig { entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); persistentTileEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-tileentity-display-names-and-lore", persistentTileEntityDisplayNames); + persistentDroppableEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-droppable-entity-display-names", persistentDroppableEntityDisplayNames); tridentLoyaltyVoidReturnHeight = getDouble("gameplay-mechanics.trident-loyalty-void-return-height", tridentLoyaltyVoidReturnHeight); voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); - raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); + voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); diff --git a/patches/server/0128-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch b/patches/server/0127-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch similarity index 96% rename from patches/server/0128-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch rename to patches/server/0127-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch index 4745abc916..facfc49577 100644 --- a/patches/server/0128-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch +++ b/patches/server/0127-Set-name-visible-when-using-a-Name-Tag-on-an-Armor-S.patch @@ -29,7 +29,7 @@ index b9b2b27e534ba87a1aae3c521f393a066a18a199..4f4e9ebb9af4970fe920a540d40dbc56 ((EntityInsentient) newEntityLiving).setPersistent(); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 0c159098cff5a67bc2ebc9374138843172316f01..4cd8acf6ef170193f38c3926e467aa2e9c7acf63 100644 +index b650293ff3315760e29307113e29fb2731af472b..dc1418f8f324eae24af3e993c6c720ff73702c92 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -84,9 +84,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0129-Add-twisting-and-weeping-vines-growth-rates.patch b/patches/server/0128-Add-twisting-and-weeping-vines-growth-rates.patch similarity index 97% rename from patches/server/0129-Add-twisting-and-weeping-vines-growth-rates.patch rename to patches/server/0128-Add-twisting-and-weeping-vines-growth-rates.patch index 34a7c54966..def89357ce 100644 --- a/patches/server/0129-Add-twisting-and-weeping-vines-growth-rates.patch +++ b/patches/server/0128-Add-twisting-and-weeping-vines-growth-rates.patch @@ -91,10 +91,10 @@ index 2552631084926c2fad40b3f21ae479c0e1cfdb77..198bd8857571872ed3f7437529c330dc + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 4cd8acf6ef170193f38c3926e467aa2e9c7acf63..495c8fc0e632dfc4f73d2929b1da9adea18345a5 100644 +index dc1418f8f324eae24af3e993c6c720ff73702c92..17bbe2ceea016bcb00dc5542bea47e083e723ea5 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -465,6 +465,16 @@ public class PurpurWorldConfig { +@@ -477,6 +477,16 @@ public class PurpurWorldConfig { turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts); } diff --git a/patches/server/0130-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch b/patches/server/0129-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch similarity index 97% rename from patches/server/0130-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch rename to patches/server/0129-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch index cf86764322..bdd2fc3d55 100644 --- a/patches/server/0130-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch +++ b/patches/server/0129-Kelp-weeping-and-twisting-vines-configurable-max-gro.patch @@ -89,10 +89,10 @@ index 198bd8857571872ed3f7437529c330dceeb825db..a71f97e87ee7210f3246e542dd768403 // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 495c8fc0e632dfc4f73d2929b1da9adea18345a5..15ea799b677b8be82f38ce4ab152878fd577d174 100644 +index 17bbe2ceea016bcb00dc5542bea47e083e723ea5..221b6d3c98afe1c72481a922ac7eeff9801d8c2f 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -412,6 +412,11 @@ public class PurpurWorldConfig { +@@ -424,6 +424,11 @@ public class PurpurWorldConfig { furnaceInfiniteFuel = getBoolean("blocks.furnace.infinite-fuel", furnaceInfiniteFuel); } @@ -104,7 +104,7 @@ index 495c8fc0e632dfc4f73d2929b1da9adea18345a5..15ea799b677b8be82f38ce4ab152878f public boolean lavaInfinite = false; public int lavaInfiniteRequiredSources = 2; public int lavaSpeedNether = 10; -@@ -466,13 +471,17 @@ public class PurpurWorldConfig { +@@ -478,13 +483,17 @@ public class PurpurWorldConfig { } public double twistingVinesGrowthModifier = 0.10D; diff --git a/patches/server/0131-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch b/patches/server/0130-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch similarity index 89% rename from patches/server/0131-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch rename to patches/server/0130-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch index 4bf8428019..5349d657e9 100644 --- a/patches/server/0131-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch +++ b/patches/server/0130-Add-config-for-allowing-Endermen-to-despawn-even-whi.patch @@ -8,7 +8,7 @@ This should help to reduce the amount of dirt, gravel, grass, and etc. that Endermen like to randomly place all over the world. diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java b/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java -index 03fa2cfc1d5bc27e03e9979b3f33d88362c19066..18b3f8d1fadd1424327261d92b49977a35c4948c 100644 +index 32ed22dbaaed536dd3df0fb59e3c19431ee42540..c04ff259f650b0e5a361c4f17b8b5ff9ecb8ab71 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java @@ -435,7 +435,7 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable { @@ -21,10 +21,10 @@ index 03fa2cfc1d5bc27e03e9979b3f33d88362c19066..18b3f8d1fadd1424327261d92b49977a static class PathfinderGoalEndermanPickupBlock extends PathfinderGoal { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 15ea799b677b8be82f38ce4ab152878fd577d174..fb3d98999a926763f7319b24c35cdf0116ff0682 100644 +index 221b6d3c98afe1c72481a922ac7eeff9801d8c2f..3b9898ee7ae0fb826cfc3102d3b84bc5323d163d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -634,10 +634,12 @@ public class PurpurWorldConfig { +@@ -646,10 +646,12 @@ public class PurpurWorldConfig { public boolean endermanRidable = false; public boolean endermanRidableInWater = false; public boolean endermanAllowGriefing = true; diff --git a/patches/server/0132-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch b/patches/server/0131-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch similarity index 85% rename from patches/server/0132-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch rename to patches/server/0131-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch index fe8789395e..f295b10776 100644 --- a/patches/server/0132-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch +++ b/patches/server/0131-Add-critical-hit-check-to-EntityDamagedByEntityEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add critical hit check to EntityDamagedByEntityEvent diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index fedfb18e71300807a83e2ed2729fe192a8f9aa33..af10d5aea7909ee9f38982264233f0a45c153003 100644 +index a70c557de56c5ba04cb520108cdb037eb9cad8a9..78442fe87ceaf65b302536c893610aa0269b6dee 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -171,6 +171,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -170,6 +170,7 @@ public abstract class EntityHuman extends EntityLiving { // Paper start public boolean affectsSpawning = true; // Paper end @@ -16,7 +16,7 @@ index fedfb18e71300807a83e2ed2729fe192a8f9aa33..af10d5aea7909ee9f38982264233f0a4 // CraftBukkit start public boolean fauxSleeping; -@@ -1178,6 +1179,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1177,6 +1178,7 @@ public abstract class EntityHuman extends EntityLiving { flag2 = flag2 && !world.paperConfig.disablePlayerCrits; // Paper flag2 = flag2 && !this.isSprinting(); if (flag2) { @@ -24,7 +24,7 @@ index fedfb18e71300807a83e2ed2729fe192a8f9aa33..af10d5aea7909ee9f38982264233f0a4 f *= 1.5F; } -@@ -1214,6 +1216,7 @@ public abstract class EntityHuman extends EntityLiving { +@@ -1213,6 +1215,7 @@ public abstract class EntityHuman extends EntityLiving { Vec3D vec3d = entity.getMot(); boolean flag5 = entity.damageEntity(DamageSource.playerAttack(this), f); @@ -33,10 +33,10 @@ index fedfb18e71300807a83e2ed2729fe192a8f9aa33..af10d5aea7909ee9f38982264233f0a4 if (flag5) { if (i > 0) { diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index c44a15cd7b2d67c77eac7a1d2a7e9569f9dce48c..ad325f58198fcae7b9cae55e4c9675c8498838d1 100644 +index 81ea6ffb6be8a7aed281c6538f0535bbaf00b068..064256873da7660815aeb416a6cfe55c24e6838d 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -1090,7 +1090,7 @@ public class CraftEventFactory { +@@ -1094,7 +1094,7 @@ public class CraftEventFactory { private static EntityDamageEvent callEntityDamageEvent(Entity damager, Entity damagee, DamageCause cause, Map modifiers, Map> modifierFunctions, boolean cancelled) { EntityDamageEvent event; if (damager != null) { diff --git a/patches/server/0133-Add-configurable-snowball-damage.patch b/patches/server/0132-Add-configurable-snowball-damage.patch similarity index 92% rename from patches/server/0133-Add-configurable-snowball-damage.patch rename to patches/server/0132-Add-configurable-snowball-damage.patch index 3dd5d8cbcb..f5b27b088f 100644 --- a/patches/server/0133-Add-configurable-snowball-damage.patch +++ b/patches/server/0132-Add-configurable-snowball-damage.patch @@ -18,10 +18,10 @@ index 0d3b9c81e47eef645335e49a1d6d88db7338aa4b..6bfd3f57e6c04ed426870d6dbf068bf3 entity.damageEntity(DamageSource.projectile(this, this.getShooter()), (float) i); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index fb3d98999a926763f7319b24c35cdf0116ff0682..c9ba9beabf41905f892e8f657d40de9bc78ca337 100644 +index 3b9898ee7ae0fb826cfc3102d3b84bc5323d163d..b6a3d73dc0866d98b00f52d65a39646ab001a1f2 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -248,6 +248,11 @@ public class PurpurWorldConfig { +@@ -258,6 +258,11 @@ public class PurpurWorldConfig { witherSkullDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.wither_skull", witherSkullDespawnRate); } diff --git a/patches/server/0134-Zombie-break-door-minimum-difficulty-option.patch b/patches/server/0133-Zombie-break-door-minimum-difficulty-option.patch similarity index 95% rename from patches/server/0134-Zombie-break-door-minimum-difficulty-option.patch rename to patches/server/0133-Zombie-break-door-minimum-difficulty-option.patch index a3f4740589..ced0497c3f 100644 --- a/patches/server/0134-Zombie-break-door-minimum-difficulty-option.patch +++ b/patches/server/0133-Zombie-break-door-minimum-difficulty-option.patch @@ -50,7 +50,7 @@ index 10ee8a0a717354f50b29e7ebeab0ee2aa7bf42f7..d785066e2a52699c18315f7244d80db6 + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index c9ba9beabf41905f892e8f657d40de9bc78ca337..af4725f4d224bbb8c1fb1fac78c217343e9717a8 100644 +index b6a3d73dc0866d98b00f52d65a39646ab001a1f2..1ea011a2fbf6b6d2b7f9ff59e86303d17d130831 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -1,6 +1,7 @@ @@ -61,7 +61,7 @@ index c9ba9beabf41905f892e8f657d40de9bc78ca337..af4725f4d224bbb8c1fb1fac78c21734 import net.minecraft.world.level.Explosion; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; -@@ -1178,6 +1179,7 @@ public class PurpurWorldConfig { +@@ -1190,6 +1191,7 @@ public class PurpurWorldConfig { public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; @@ -69,7 +69,7 @@ index c9ba9beabf41905f892e8f657d40de9bc78ca337..af4725f4d224bbb8c1fb1fac78c21734 private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1185,6 +1187,11 @@ public class PurpurWorldConfig { +@@ -1197,6 +1199,11 @@ public class PurpurWorldConfig { zombieJockeyChance = getDouble("mobs.zombie.jockey.chance", zombieJockeyChance); zombieJockeyTryExistingChickens = getBoolean("mobs.zombie.jockey.try-existing-chickens", zombieJockeyTryExistingChickens); zombieAggressiveTowardsVillagerWhenLagging = getBoolean("mobs.zombie.aggressive-towards-villager-when-lagging", zombieAggressiveTowardsVillagerWhenLagging); diff --git a/patches/server/0135-Add-demo-command.patch b/patches/server/0134-Add-demo-command.patch similarity index 96% rename from patches/server/0135-Add-demo-command.patch rename to patches/server/0134-Add-demo-command.patch index 9184f8f927..be372b730c 100644 --- a/patches/server/0135-Add-demo-command.patch +++ b/patches/server/0134-Add-demo-command.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add demo command diff --git a/src/main/java/net/minecraft/commands/CommandDispatcher.java b/src/main/java/net/minecraft/commands/CommandDispatcher.java -index cf3776591446ad7b3d1ee1285c5aeffcb5e9495e..0982b14a4b39c40a68ee900d506b4e44f840299d 100644 +index 94ed3811cbcc6f60a2c8bb033920f9c1ae2e91d6..2f5e8ed345ace0d9abb7edebe1fd47e562b1d272 100644 --- a/src/main/java/net/minecraft/commands/CommandDispatcher.java +++ b/src/main/java/net/minecraft/commands/CommandDispatcher.java @@ -191,6 +191,7 @@ public class CommandDispatcher { @@ -51,7 +51,7 @@ index b903a19e0fcf008cb8358be2d5050c89d2addf28..69d6d3fb4333531ea63acf5272ffa52e } diff --git a/src/main/java/net/pl3x/purpur/command/DemoCommand.java b/src/main/java/net/pl3x/purpur/command/DemoCommand.java new file mode 100644 -index 0000000000000000000000000000000000000000..d621dab3c40f5d093474444eccecd8e7c9e301a1 +index 0000000000000000000000000000000000000000..7ea2e07c95c26528e118541ca2bba4d6117ab28f --- /dev/null +++ b/src/main/java/net/pl3x/purpur/command/DemoCommand.java @@ -0,0 +1,39 @@ @@ -88,7 +88,7 @@ index 0000000000000000000000000000000000000000..d621dab3c40f5d093474444eccecd8e7 + for (EntityPlayer player : targets) { + PacketPlayOutGameStateChange packet = new PacketPlayOutGameStateChange(PacketPlayOutGameStateChange.demo(), 0); + player.playerConnection.sendPacket(packet); -+ String output = String.format(PurpurConfig.demoCommandOutput, player.getProfile().getName(), player.ping); ++ String output = String.format(PurpurConfig.demoCommandOutput, player.getProfile().getName()); + sender.sendMessage(CraftChatMessage.fromStringOrNull(output), false); + } + return targets.size(); diff --git a/patches/server/0136-Left-handed-API.patch b/patches/server/0135-Left-handed-API.patch similarity index 100% rename from patches/server/0136-Left-handed-API.patch rename to patches/server/0135-Left-handed-API.patch diff --git a/patches/server/0137-Origami-Fix-ProtocolLib-issues-on-Java-15.patch b/patches/server/0136-Origami-Fix-ProtocolLib-issues-on-Java-15.patch similarity index 100% rename from patches/server/0137-Origami-Fix-ProtocolLib-issues-on-Java-15.patch rename to patches/server/0136-Origami-Fix-ProtocolLib-issues-on-Java-15.patch diff --git a/patches/server/0138-Changeable-Mob-Left-Handed-Chance.patch b/patches/server/0137-Changeable-Mob-Left-Handed-Chance.patch similarity index 88% rename from patches/server/0138-Changeable-Mob-Left-Handed-Chance.patch rename to patches/server/0137-Changeable-Mob-Left-Handed-Chance.patch index 8955091c65..8617c890a2 100644 --- a/patches/server/0138-Changeable-Mob-Left-Handed-Chance.patch +++ b/patches/server/0137-Changeable-Mob-Left-Handed-Chance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Changeable Mob Left Handed Chance diff --git a/src/main/java/net/minecraft/world/entity/EntityInsentient.java b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -index df33b46ff1267f0f2692a8956438f3bd1e2a3086..a6ea96683b0f4d35015dff6168f3bf458346fb6f 100644 +index a5e3809d60a78d4638c81a2279ce15e6a66fd336..0eae61c48e780225cd253e91d247d8814950afb5 100644 --- a/src/main/java/net/minecraft/world/entity/EntityInsentient.java +++ b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -@@ -1216,7 +1216,7 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -1214,7 +1214,7 @@ public abstract class EntityInsentient extends EntityLiving { @Nullable public GroupDataEntity prepare(WorldAccess worldaccess, DifficultyDamageScaler difficultydamagescaler, EnumMobSpawn enummobspawn, @Nullable GroupDataEntity groupdataentity, @Nullable NBTTagCompound nbttagcompound) { this.getAttributeInstance(GenericAttributes.FOLLOW_RANGE).addModifier(new AttributeModifier("Random spawn bonus", this.random.nextGaussian() * 0.05D, AttributeModifier.Operation.MULTIPLY_BASE)); @@ -18,7 +18,7 @@ index df33b46ff1267f0f2692a8956438f3bd1e2a3086..a6ea96683b0f4d35015dff6168f3bf45 } else { this.setLeftHanded(false); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index af4725f4d224bbb8c1fb1fac78c217343e9717a8..0baa0b3c33d91f79030d639091628224bb27bdc6 100644 +index 1ea011a2fbf6b6d2b7f9ff59e86303d17d130831..5e3b23d50b6e8494066c71bdf7c14edc4a4a3716 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -163,8 +163,10 @@ public class PurpurWorldConfig { diff --git a/patches/server/0139-Add-boat-fall-damage-config.patch b/patches/server/0138-Add-boat-fall-damage-config.patch similarity index 89% rename from patches/server/0139-Add-boat-fall-damage-config.patch rename to patches/server/0138-Add-boat-fall-damage-config.patch index e4a43e2169..319d4ac9b2 100644 --- a/patches/server/0139-Add-boat-fall-damage-config.patch +++ b/patches/server/0138-Add-boat-fall-damage-config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add boat fall damage config diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 38254784de3165e8546e1fcd4f780741abb78558..8010b0c68b99c2e8986d01a4635e1a37f4313dbe 100644 +index a2fc2924191590c6273f0393f39516d686573296..5a119537aca2f47c60b24a7b394a99051aec87b8 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -1141,7 +1141,16 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1139,7 +1139,16 @@ public class EntityPlayer extends EntityHuman implements ICrafting { if (this.isInvulnerable(damagesource)) { return false; } else { @@ -27,10 +27,10 @@ index 38254784de3165e8546e1fcd4f780741abb78558..8010b0c68b99c2e8986d01a4635e1a37 if (!flag && isSpawnInvulnerable() && damagesource != DamageSource.OUT_OF_WORLD) { // Purpur diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 0baa0b3c33d91f79030d639091628224bb27bdc6..d0aa12148e5abe3b2df3b4341b11b55feb73535e 100644 +index 5e3b23d50b6e8494066c71bdf7c14edc4a4a3716..944c1bbcb868e2e24f26db04b588f6f0c13164e5 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -258,6 +258,7 @@ public class PurpurWorldConfig { +@@ -268,6 +268,7 @@ public class PurpurWorldConfig { public boolean useBetterMending = false; public boolean boatEjectPlayersOnLand = false; @@ -38,7 +38,7 @@ index 0baa0b3c33d91f79030d639091628224bb27bdc6..d0aa12148e5abe3b2df3b4341b11b55f public boolean disableDropsOnCrammingDeath = false; public boolean entitiesPickUpLootBypassMobGriefing = false; public boolean entitiesCanUsePortals = true; -@@ -271,6 +272,7 @@ public class PurpurWorldConfig { +@@ -282,6 +283,7 @@ public class PurpurWorldConfig { private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); boatEjectPlayersOnLand = getBoolean("gameplay-mechanics.boat.eject-players-on-land", boatEjectPlayersOnLand); diff --git a/patches/server/0140-Config-migration-disable-saving-projectiles-to-disk-.patch b/patches/server/0139-Config-migration-disable-saving-projectiles-to-disk-.patch similarity index 97% rename from patches/server/0140-Config-migration-disable-saving-projectiles-to-disk-.patch rename to patches/server/0139-Config-migration-disable-saving-projectiles-to-disk-.patch index fa155d874a..112f4b895d 100644 --- a/patches/server/0140-Config-migration-disable-saving-projectiles-to-disk-.patch +++ b/patches/server/0139-Config-migration-disable-saving-projectiles-to-disk-.patch @@ -36,7 +36,7 @@ index 69d6d3fb4333531ea63acf5272ffa52ed296346f..457a20aee6f7aa25be052bec202bbcb8 public static String afkBroadcastBack = "§e§o%s is no longer AFK"; public static String afkTabListPrefix = "[AFK] "; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d0aa12148e5abe3b2df3b4341b11b55feb73535e..81cd441842e63c0465bd64d9f9009852fed1296a 100644 +index 944c1bbcb868e2e24f26db04b588f6f0c13164e5..c2044a89fd1547092fd3d6be671570fcf2a60f09 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -1,5 +1,6 @@ diff --git a/patches/server/0141-Snow-Golem-rate-of-fire-config.patch b/patches/server/0140-Snow-Golem-rate-of-fire-config.patch similarity index 93% rename from patches/server/0141-Snow-Golem-rate-of-fire-config.patch rename to patches/server/0140-Snow-Golem-rate-of-fire-config.patch index ce3317645e..b1f61e1d32 100644 --- a/patches/server/0141-Snow-Golem-rate-of-fire-config.patch +++ b/patches/server/0140-Snow-Golem-rate-of-fire-config.patch @@ -10,7 +10,7 @@ If min-shoot-interval-ticks and max-shoot-interval-ticks are both set to 0, snow golems won't shoot any snowballs. diff --git a/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java b/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java -index cfcf67e99ae345f77a55771e6a25bdcdb4a9740a..28b5c22ecfe573ac9d91b74e54ebd3e3c5e6373f 100644 +index a692b973717ecc56d808039418599a11aedc2c5a..76fe39cf57384602c7422cb340f15ca7cac65ef9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java @@ -66,7 +66,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt @@ -23,10 +23,10 @@ index cfcf67e99ae345f77a55771e6a25bdcdb4a9740a..28b5c22ecfe573ac9d91b74e54ebd3e3 this.goalSelector.a(3, new PathfinderGoalLookAtPlayer(this, EntityHuman.class, 6.0F)); this.goalSelector.a(4, new PathfinderGoalRandomLookaround(this)); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 81cd441842e63c0465bd64d9f9009852fed1296a..f534924050ac90716979e9f2b66c8a0752454fad 100644 +index c2044a89fd1547092fd3d6be671570fcf2a60f09..ed2b682b3717e58eb18ef12c18f362a75174f069 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1027,12 +1027,20 @@ public class PurpurWorldConfig { +@@ -1039,12 +1039,20 @@ public class PurpurWorldConfig { public boolean snowGolemLeaveTrailWhenRidden = false; public boolean snowGolemDropsPumpkin = true; public boolean snowGolemPutPumpkinBack = false; diff --git a/patches/server/0142-PaperPR-Config-option-for-Piglins-guarding-chests.patch b/patches/server/0141-PaperPR-Config-option-for-Piglins-guarding-chests.patch similarity index 100% rename from patches/server/0142-PaperPR-Config-option-for-Piglins-guarding-chests.patch rename to patches/server/0141-PaperPR-Config-option-for-Piglins-guarding-chests.patch diff --git a/patches/server/0143-EMC-Configurable-disable-give-dropping.patch b/patches/server/0142-EMC-Configurable-disable-give-dropping.patch similarity index 100% rename from patches/server/0143-EMC-Configurable-disable-give-dropping.patch rename to patches/server/0142-EMC-Configurable-disable-give-dropping.patch diff --git a/patches/server/0144-Config-migration-climbing-should-not-bypass-cramming.patch b/patches/server/0143-Config-migration-climbing-should-not-bypass-cramming.patch similarity index 96% rename from patches/server/0144-Config-migration-climbing-should-not-bypass-cramming.patch rename to patches/server/0143-Config-migration-climbing-should-not-bypass-cramming.patch index fd8cdf7e23..b87b4c702c 100644 --- a/patches/server/0144-Config-migration-climbing-should-not-bypass-cramming.patch +++ b/patches/server/0143-Config-migration-climbing-should-not-bypass-cramming.patch @@ -28,7 +28,7 @@ index 521604b37ca61b849420f206fde88210b582cd3c..116f17bcc02d15951fa248c6ce4e2cf3 public static String afkBroadcastBack = "§e§o%s is no longer AFK"; public static String afkTabListPrefix = "[AFK] "; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index f534924050ac90716979e9f2b66c8a0752454fad..efd2bce6fa4572093acb7ef67d85aac1a989bcf3 100644 +index ed2b682b3717e58eb18ef12c18f362a75174f069..3e2898e3582efc00764885739e1df3a2ab5d5f6e 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -96,6 +96,17 @@ public class PurpurWorldConfig { diff --git a/patches/server/0145-Lobotomize-stuck-villagers.patch b/patches/server/0144-Lobotomize-stuck-villagers.patch similarity index 93% rename from patches/server/0145-Lobotomize-stuck-villagers.patch rename to patches/server/0144-Lobotomize-stuck-villagers.patch index d349b92eb4..a37e113f69 100644 --- a/patches/server/0145-Lobotomize-stuck-villagers.patch +++ b/patches/server/0144-Lobotomize-stuck-villagers.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Lobotomize stuck villagers diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 918edab475a8d33a253e3d6cd3c5655748d10dc0..4d64fb19c3c9cce41e89ba4d702e687b34620b7e 100644 +index ac52732d4c1a3056664b40a15b6ee9cda9bea3d0..3230436d90306de325b8f72d813030288c2c28ed 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -207,7 +207,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -206,7 +206,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne public double lastY; public double lastZ; private Vec3D loc; @@ -30,7 +30,7 @@ index 48e6a4c588ef39a4bde067d79b96a656c68750ce..ac7bad10697c6fde7d512753992d5971 // Paper start - add target parameter return this.a(blockposition, null, i); diff --git a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java -index a0f0d5e0909da5cfe87078d4722b030635cfeadd..bc14e242f97f9f6d8e581d12319c95ae5f70f250 100644 +index bd56b7a009a8bcbdd353d7bdcb2a2a7310ab45cc..45739558f10687870b475711735342d839859e03 100644 --- a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java +++ b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java @@ -89,6 +89,7 @@ import net.minecraft.world.level.IWorldReader; @@ -99,10 +99,10 @@ index a0f0d5e0909da5cfe87078d4722b030635cfeadd..bc14e242f97f9f6d8e581d12319c95ae long i = this.bC + 12000L; long j = this.world.getTime(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index efd2bce6fa4572093acb7ef67d85aac1a989bcf3..300fb6bb60fa961f2321183553c293730d4c4cd0 100644 +index 3e2898e3582efc00764885739e1df3a2ab5d5f6e..6f4aab0495e168afe3927b994e9c42ddce59dc20 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1122,6 +1122,8 @@ public class PurpurWorldConfig { +@@ -1134,6 +1134,8 @@ public class PurpurWorldConfig { public int villagerSpawnIronGolemLimit = 0; public boolean villagerCanBreed = true; public int villagerBreedingTicks = 6000; @@ -111,7 +111,7 @@ index efd2bce6fa4572093acb7ef67d85aac1a989bcf3..300fb6bb60fa961f2321183553c29373 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1134,6 +1136,13 @@ public class PurpurWorldConfig { +@@ -1146,6 +1148,13 @@ public class PurpurWorldConfig { villagerSpawnIronGolemLimit = getInt("mobs.villager.spawn-iron-golem.limit", villagerSpawnIronGolemLimit); villagerCanBreed = getBoolean("mobs.villager.can-breed", villagerCanBreed); villagerBreedingTicks = getInt("mobs.villager.breeding-delay-ticks", villagerBreedingTicks); diff --git a/patches/server/0146-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch b/patches/server/0145-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch similarity index 98% rename from patches/server/0146-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch rename to patches/server/0145-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch index ecba7bf1e4..0e63f1fe8b 100644 --- a/patches/server/0146-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch +++ b/patches/server/0145-Option-for-Villager-Clerics-to-farm-Nether-Wart.patch @@ -186,7 +186,7 @@ index 25c10973c74f98224dd1d2ae5e7178b9781374aa..d50b5632f0e53147ea23109f1ed627b4 behaviorcontroller.removeMemory(MemoryModuleType.SECONDARY_JOB_SITE); } diff --git a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java -index bc14e242f97f9f6d8e581d12319c95ae5f70f250..0924e0c13b3c57e46f6dc40232707088f96e98c7 100644 +index 45739558f10687870b475711735342d839859e03..0699d835da44296ede8ee6458a7bf8ebccc313ae 100644 --- a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java +++ b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java @@ -203,7 +203,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @@ -198,7 +198,7 @@ index bc14e242f97f9f6d8e581d12319c95ae5f70f250..0924e0c13b3c57e46f6dc40232707088 } behaviorcontroller.a(Activity.CORE, Behaviors.a(villagerprofession, 0.5F)); -@@ -944,6 +944,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation +@@ -951,6 +951,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation } public boolean canPlant() { @@ -224,10 +224,10 @@ index 69de7588eebba7557cdaec129f19ec1fc2c675c5..dd9b678481620856fb7eaaa04c3b812c public static final VillagerProfession FISHERMAN = a("fisherman", VillagePlaceType.i, SoundEffects.ENTITY_VILLAGER_WORK_FISHERMAN); public static final VillagerProfession FLETCHER = a("fletcher", VillagePlaceType.j, SoundEffects.ENTITY_VILLAGER_WORK_FLETCHER); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 300fb6bb60fa961f2321183553c293730d4c4cd0..bf82602521eacbe2ae18b548e2f2013f9179c23b 100644 +index 6f4aab0495e168afe3927b994e9c42ddce59dc20..efe82464beb6741413b73bbd6adc5c45eba7bcd6 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1124,6 +1124,8 @@ public class PurpurWorldConfig { +@@ -1136,6 +1136,8 @@ public class PurpurWorldConfig { public int villagerBreedingTicks = 6000; public boolean villagerLobotomizeEnabled = false; public int villagerLobotomizeCheck = 60; @@ -236,7 +236,7 @@ index 300fb6bb60fa961f2321183553c293730d4c4cd0..bf82602521eacbe2ae18b548e2f2013f private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1143,6 +1145,8 @@ public class PurpurWorldConfig { +@@ -1155,6 +1157,8 @@ public class PurpurWorldConfig { } villagerLobotomizeEnabled = getBoolean("mobs.villager.lobotomize.enabled", villagerLobotomizeEnabled); villagerLobotomizeCheck = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheck); diff --git a/patches/server/0147-Toggle-for-Zombified-Piglin-death-always-counting-as.patch b/patches/server/0146-Toggle-for-Zombified-Piglin-death-always-counting-as.patch similarity index 95% rename from patches/server/0147-Toggle-for-Zombified-Piglin-death-always-counting-as.patch rename to patches/server/0146-Toggle-for-Zombified-Piglin-death-always-counting-as.patch index bd0b9c9c7c..e2cc2138e5 100644 --- a/patches/server/0147-Toggle-for-Zombified-Piglin-death-always-counting-as.patch +++ b/patches/server/0146-Toggle-for-Zombified-Piglin-death-always-counting-as.patch @@ -35,10 +35,10 @@ index 9f50054211db48e7fe764434e8d71aab0995e57a..82279ab2f3c1edec14c24c3a7ad24d09 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index bf82602521eacbe2ae18b548e2f2013f9179c23b..4ff49f042f1573162b1db59d1e3aeba72b0ef448 100644 +index efe82464beb6741413b73bbd6adc5c45eba7bcd6..7d32788c5e538be6eff9b6ff4655f279ac1e0e6b 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1256,12 +1256,14 @@ public class PurpurWorldConfig { +@@ -1268,12 +1268,14 @@ public class PurpurWorldConfig { public boolean zombifiedPiglinJockeyOnlyBaby = true; public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; diff --git a/patches/server/0148-Spread-out-and-optimise-player-list-ticks.patch b/patches/server/0147-Spread-out-and-optimise-player-list-ticks.patch similarity index 92% rename from patches/server/0148-Spread-out-and-optimise-player-list-ticks.patch rename to patches/server/0147-Spread-out-and-optimise-player-list-ticks.patch index 31a9dd0269..ca0fc3b9e6 100644 --- a/patches/server/0148-Spread-out-and-optimise-player-list-ticks.patch +++ b/patches/server/0147-Spread-out-and-optimise-player-list-ticks.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Spread out and optimise player list ticks diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index c742647c0c5e3e4925e4ee6d195a54a85435e65e..8307b44718198f6f2325454f72bd296c33cba58a 100644 +index 3622ea01edfb9dfaab254ceaf09582d9e8993174..070de6c066b2e293e0bc0ea9722a9a3dcf520431 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -151,7 +151,7 @@ public abstract class PlayerList { @@ -17,7 +17,7 @@ index c742647c0c5e3e4925e4ee6d195a54a85435e65e..8307b44718198f6f2325454f72bd296c // CraftBukkit start private CraftServer cserver; -@@ -1023,22 +1023,23 @@ public abstract class PlayerList { +@@ -1029,22 +1029,23 @@ public abstract class PlayerList { } public void tick() { @@ -56,7 +56,7 @@ index c742647c0c5e3e4925e4ee6d195a54a85435e65e..8307b44718198f6f2325454f72bd296c public void sendAll(Packet packet) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 1ff48eae5e5b732fbd1e720c55e08a30669bebfa..ca465a53a0c6232f912287704fc63cdcc59a28bd 100644 +index 1c5bcc17a702f5af514ce4db7f5d096d5f449dd6..e204374c8f17ca5514e9bcfd24d411069285de29 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1444,7 +1444,13 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0149-Configurable-chance-for-wolves-to-spawn-rabid.patch b/patches/server/0148-Configurable-chance-for-wolves-to-spawn-rabid.patch similarity index 98% rename from patches/server/0149-Configurable-chance-for-wolves-to-spawn-rabid.patch rename to patches/server/0148-Configurable-chance-for-wolves-to-spawn-rabid.patch index 1c440e4dfc..0b8375fad7 100644 --- a/patches/server/0149-Configurable-chance-for-wolves-to-spawn-rabid.patch +++ b/patches/server/0148-Configurable-chance-for-wolves-to-spawn-rabid.patch @@ -7,7 +7,7 @@ Configurable chance to spawn a wolf that is rabid. Rabid wolves attack all players, mobs, and animals. diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index 2d3ec6505b91a2cb43a1e2285a7d4e57a54e243c..f0a485056f3ad94e7375fbdfd512026b969a0eed 100644 +index 8b7a2eaa4f73b72f9022dbf58a46239541c81ff7..a090f563d7019615c055847ce0c2b0f2a343d70b 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java @@ -2213,6 +2213,7 @@ public abstract class EntityLiving extends Entity { @@ -242,10 +242,10 @@ index dd3c7ad7701ad18ccaf86d73fde7051090ed3d57..e8c6aca70db693250224d1c162e3c268 return super.b(entityhuman, enumhand); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 4ff49f042f1573162b1db59d1e3aeba72b0ef448..5b549ab625890cd49e6820e31a15e80680b78237 100644 +index 7d32788c5e538be6eff9b6ff4655f279ac1e0e6b..5a05d4e511bf7c96d3e01c59e6e53b105bf7baf6 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1207,10 +1207,14 @@ public class PurpurWorldConfig { +@@ -1219,10 +1219,14 @@ public class PurpurWorldConfig { public boolean wolfRidable = false; public boolean wolfRidableInWater = false; diff --git a/patches/server/0150-Configurable-default-wolf-collar-color.patch b/patches/server/0149-Configurable-default-wolf-collar-color.patch similarity index 94% rename from patches/server/0150-Configurable-default-wolf-collar-color.patch rename to patches/server/0149-Configurable-default-wolf-collar-color.patch index 298a43f99f..b2e3efadbc 100644 --- a/patches/server/0150-Configurable-default-wolf-collar-color.patch +++ b/patches/server/0149-Configurable-default-wolf-collar-color.patch @@ -24,7 +24,7 @@ index e8c6aca70db693250224d1c162e3c2684687ea41..e33aadead6e6c5e0a7b39ef95e7aeb0f @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 5b549ab625890cd49e6820e31a15e80680b78237..7ddb0119baa33a6641599fce7c7112d05dd7fb5d 100644 +index 5a05d4e511bf7c96d3e01c59e6e53b105bf7baf6..0666c523f82b9083ed8e81570faa923bbeb00ab8 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -3,6 +3,7 @@ package net.pl3x.purpur; @@ -35,7 +35,7 @@ index 5b549ab625890cd49e6820e31a15e80680b78237..7ddb0119baa33a6641599fce7c7112d0 import net.minecraft.world.level.Explosion; import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Blocks; -@@ -1207,12 +1208,18 @@ public class PurpurWorldConfig { +@@ -1219,12 +1220,18 @@ public class PurpurWorldConfig { public boolean wolfRidable = false; public boolean wolfRidableInWater = false; diff --git a/patches/server/0151-Configurable-entity-base-attributes.patch b/patches/server/0150-Configurable-entity-base-attributes.patch similarity index 96% rename from patches/server/0151-Configurable-entity-base-attributes.patch rename to patches/server/0150-Configurable-entity-base-attributes.patch index dcd7377a4f..a4e8dfae57 100644 --- a/patches/server/0151-Configurable-entity-base-attributes.patch +++ b/patches/server/0150-Configurable-entity-base-attributes.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable entity base attributes diff --git a/src/main/java/net/minecraft/world/entity/ambient/EntityBat.java b/src/main/java/net/minecraft/world/entity/ambient/EntityBat.java -index eed98fd7e84b4f390b8b356258f5011da561a343..88a0d51f78bee9a1b0762b46db4d91a9f8f8c75d 100644 +index a99c2b4281196ad3b93292da52fc4c6bf4207181..bd02320d450a7fd7254f01b1c44ef421c1810ea7 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/EntityBat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/EntityBat.java @@ -82,6 +82,18 @@ public class EntityBat extends EntityAmbient { @@ -28,10 +28,10 @@ index eed98fd7e84b4f390b8b356258f5011da561a343..88a0d51f78bee9a1b0762b46db4d91a9 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityBee.java b/src/main/java/net/minecraft/world/entity/animal/EntityBee.java -index 9e40fd6585592ccd1deff1d8319c57660474c053..c39a7a6d7f391debd632a199eeec8ded6189ad76 100644 +index 6086dda5b06f0c0e02734edf7141b13715420d3c..e425e093c233a21e5ef457e3a94defe8b74261d2 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityBee.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityBee.java -@@ -181,6 +181,11 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB +@@ -180,6 +180,11 @@ public class EntityBee extends EntityAnimal implements IEntityAngerable, EntityB public int getPurpurBreedTime() { return this.world.purpurConfig.beeBreedingTicks; } @@ -44,7 +44,7 @@ index 9e40fd6585592ccd1deff1d8319c57660474c053..c39a7a6d7f391debd632a199eeec8ded @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityCat.java b/src/main/java/net/minecraft/world/entity/animal/EntityCat.java -index 079b95ef465f7155f426a2c87a4a50f8369d0a18..7143b0801be7877762e41da336ea5e4e57f2e463 100644 +index 187047de5530ccec1e9804f8039839246ab248f3..a4e3e36f081803b0588a0e907a3a834b7a3ab3eb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityCat.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityCat.java @@ -127,6 +127,11 @@ public class EntityCat extends EntityTameableAnimal { @@ -96,7 +96,7 @@ index 897e0d5ca44a0c475634f08e7d4fcf129ee197ab..07c6dc6a1b9af7b9662f4dd4b4a2ddfc @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityCow.java b/src/main/java/net/minecraft/world/entity/animal/EntityCow.java -index 93589a2b86e6663d93f6b536b853996c08db549a..2a8c0537fbb68577a3da3f8d07c16e9ca18b224d 100644 +index 7ed55ebe1bb768351a5cb4cdc7d4d3b0816d53b1..06af4c63fa05b243b7692cbc41b4f62ca0548def 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityCow.java @@ -59,6 +59,11 @@ public class EntityCow extends EntityAnimal { @@ -112,7 +112,7 @@ index 93589a2b86e6663d93f6b536b853996c08db549a..2a8c0537fbb68577a3da3f8d07c16e9c @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityDolphin.java b/src/main/java/net/minecraft/world/entity/animal/EntityDolphin.java -index 880c3aaf4e684209879dc921480619e7c61ee4a0..6b32b3e4877efa64942838a07af5d48cd4e33a80 100644 +index e4442716b329f3101bfd39fc7ce13d5419b427bf..3ca911cebc01692f63b8731a5df6d9ea3fbad66b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityDolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityDolphin.java @@ -128,6 +128,11 @@ public class EntityDolphin extends EntityWaterAnimal { @@ -128,10 +128,10 @@ index 880c3aaf4e684209879dc921480619e7c61ee4a0..6b32b3e4877efa64942838a07af5d48c @Nullable diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityFox.java b/src/main/java/net/minecraft/world/entity/animal/EntityFox.java -index 7bf546a1b2a80179962ed08a35d86f0a28eda3c2..b8b0ee65798dc94d707fa64bd53fdda5506331d9 100644 +index 70369d03985250fa5eaf398fa98d35a2c2a06ff1..5a2e624f1b6636f058cc69989324914f174a271a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityFox.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityFox.java -@@ -164,6 +164,11 @@ public class EntityFox extends EntityAnimal { +@@ -162,6 +162,11 @@ public class EntityFox extends EntityAnimal { public int getPurpurBreedTime() { return this.world.purpurConfig.foxBreedingTicks; } @@ -240,7 +240,7 @@ index e6952c0a8d90eb4b133c517d97299f2c3db7e329..94141b8c1ad62e6d187726734d25dd0e if (this.isLazy()) { diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java b/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java -index 5463e1779422ff19499727a000fdfbbfc38809a8..efa4318989893c946e9d7671d0dead6c4a6e315f 100644 +index 7346921a24bdd57aa3814386bc372b082b23b4bc..7500de8bcdd32f08bf6d32e70cfe09baf097cc2b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java @@ -176,6 +176,11 @@ public class EntityParrot extends EntityPerchable implements EntityBird { @@ -272,7 +272,7 @@ index 5aa8806063186bec36b38adc51e2ea82bf6ff21a..8d24855f230a5ca6280f885d5b1c26ec @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityPolarBear.java b/src/main/java/net/minecraft/world/entity/animal/EntityPolarBear.java -index 2306abb72ea76a52fd6f27648c4815ad99f8f005..5a496d55b40f98609b0a9aac25929f6b5c0311ba 100644 +index c9c7c9de638079393bbea86f8069023dcbcbca83..83494d3c989a120297c21a1bd560bc37734dc86a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityPolarBear.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityPolarBear.java @@ -121,6 +121,11 @@ public class EntityPolarBear extends EntityAnimal implements IEntityAngerable { @@ -312,10 +312,10 @@ index 38fe79872b4b7f4ad4a030fbdf505efbc0352fc0..0d32590cf4cfdd95da6aceac5190d42c @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java b/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java -index 0b706404895b69fbca79502a327ec20b47ed99f0..284c52276b2fd816990c23b7b8a9ee50e70ab005 100644 +index 465701232567e4058f9dfc776560ccde33fee66c..ef031ac08b06e78d8826579c49cf5e43683318f9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java -@@ -91,6 +91,11 @@ public class EntityRabbit extends EntityAnimal { +@@ -90,6 +90,11 @@ public class EntityRabbit extends EntityAnimal { public int getPurpurBreedTime() { return this.world.purpurConfig.rabbitBreedingTicks; } @@ -368,7 +368,7 @@ index ff6fc821085e4430a3b1008140b0b7fcacc59d2e..365f70117a287fab2fbf63ee8d89a10a @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java b/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java -index 28b5c22ecfe573ac9d91b74e54ebd3e3c5e6373f..88db8ff8cb415b84ab98cc0550c705d5a472230c 100644 +index 76fe39cf57384602c7422cb340f15ca7cac65ef9..3934966b06eb9880ed316cee84d099edd80c09b9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java @@ -61,6 +61,11 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt @@ -384,7 +384,7 @@ index 28b5c22ecfe573ac9d91b74e54ebd3e3c5e6373f..88db8ff8cb415b84ab98cc0550c705d5 @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/EntitySquid.java b/src/main/java/net/minecraft/world/entity/animal/EntitySquid.java -index be48e12dd6c9a390bf383129953bcd3d1f818427..1e7632d2ca4440dee4e406e26da61411ec5bc88f 100644 +index 7ec3e5d136cbb708b3bb29aa79bdd401d37d56dc..fa629ebc4946a0c3e891e5e2dd881277b3e25347 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntitySquid.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntitySquid.java @@ -86,6 +86,11 @@ public class EntitySquid extends EntityWaterAnimal { @@ -653,7 +653,7 @@ index c776f18722d1aa73f53da66ef6b37564eeaddd2a..1820c2d225d1fa919de2b1c0593370a8 public static AttributeProvider.Builder eL() { diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java b/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java -index b3d51abc9bad9cad6fdc5dbdc2bf09d43a565f98..762fed5ba27474951c1962e6f034e8494b1035d6 100644 +index 2710c246a147f117d2d90014c37988888010dc36..4bea68fa35177d84a35dc5ced3e501a87e2a5391 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java @@ -113,6 +113,21 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn @@ -705,7 +705,7 @@ index 0fb651bcde1109b0eb30b60226d3512648dceb41..73f59982d70093d308c6dc6a9a569334 @Override diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java -index 7f583c6c15f0191219eb911d901ea28d86c11489..999a6d17eccd6305c0063e1558abfe70d72c39fe 100644 +index b2d1a0144353a1da61221b59a0acc028b0cf746e..aeff46b575a05145fb509b5e5a489b2067776e2f 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java @@ -147,6 +147,11 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { @@ -721,7 +721,7 @@ index 7f583c6c15f0191219eb911d901ea28d86c11489..999a6d17eccd6305c0063e1558abfe70 public static AttributeProvider.Builder m() { diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityBlaze.java b/src/main/java/net/minecraft/world/entity/monster/EntityBlaze.java -index 9a109ed062e5abedaad295383aca6441321da276..45e69d2f8da4c5babfd2e67055cc0a4c6d3baac7 100644 +index 6553fd92c26d71ac0a60bd046c7f968f2dfe6667..55b6f483aca8cbb5c30b3759e23c86a699e19569 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityBlaze.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityBlaze.java @@ -72,6 +72,11 @@ public class EntityBlaze extends EntityMonster { @@ -753,7 +753,7 @@ index 27baf5cde99d8f25b1e7583c30339fcc71a3786f..72b298642f17c13f0f5959034e345a47 public static AttributeProvider.Builder m() { diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java b/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java -index 2cb9908a5c53528b2e02a1231752adc5ad8354f8..62d40f726355283baddde349c52bee0599bb293c 100644 +index 1daacdd75c709cd5508434b41589bd57032de27c..d049aac0208386198d1da4e9470e64898d27b1c9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java @@ -137,6 +137,11 @@ public class EntityCreeper extends EntityMonster { @@ -789,7 +789,7 @@ index 93946f4e3cad07e20189a44ce512682b4cbc163b..926a38adb52b7d99ce2a9fcc52eb4878 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java b/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java -index 18b3f8d1fadd1424327261d92b49977a35c4948c..478ac5bfdc69b5c3e24906bb5e0ea1dff81cea98 100644 +index c04ff259f650b0e5a361c4f17b8b5ff9ecb8ab71..a1cc0b414479e693de9428412ba837fd9bf57751 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java @@ -96,6 +96,11 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable { @@ -837,7 +837,7 @@ index 55607910183155080e3d96296421438d17f19c8f..8d7b8d2ac9a7340e2cfd0d1b8963e4e4 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityGhast.java b/src/main/java/net/minecraft/world/entity/monster/EntityGhast.java -index 8784647f512d280ee0a092ecd406321268359314..5c39a9aec865d25a9aa5edcfd3a0fd6d1166cbd1 100644 +index b6d49740a1c8dfa19e871869b92b307fc8397588..e83d9aae4a04fc67587d40cec1f24ba5ebb58e10 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityGhast.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityGhast.java @@ -73,6 +73,11 @@ public class EntityGhast extends EntityFlying implements IMonster { @@ -853,7 +853,7 @@ index 8784647f512d280ee0a092ecd406321268359314..5c39a9aec865d25a9aa5edcfd3a0fd6d @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityGuardian.java b/src/main/java/net/minecraft/world/entity/monster/EntityGuardian.java -index 6980b6988549b37a33d204a6e84c9e81d384a57a..248c64ea21de214bfbb2fa39f289382fd4f76202 100644 +index 66ae664add95f4441724b49a470a2fef569042d6..291b2e0defe4d63d4f746a3879c1fee59d2997d7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityGuardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityGuardian.java @@ -86,6 +86,11 @@ public class EntityGuardian extends EntityMonster { @@ -905,7 +905,7 @@ index 15ed51a2746c09538a425fce25fa25f2619b7033..626a207cdb727866cb75f4e53a688086 public static AttributeProvider.Builder m() { diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityPhantom.java b/src/main/java/net/minecraft/world/entity/monster/EntityPhantom.java -index a836839b17cbda8ac269f032b141ba448e3bab8c..902b26d609aef8dd46e8875cb7c06f187511e8d5 100644 +index 1c24a2abe3921fb3cf8341e4fd620d919e2917af..11e45bfa1086f56cdbd87e3ced194ee82f36d142 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityPhantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityPhantom.java @@ -120,6 +120,11 @@ public class EntityPhantom extends EntityFlying implements IMonster { @@ -966,10 +966,10 @@ index 2a4ac6e608650d56cc2b564e715b7b685e7f3f62..43a1a31db5ddfd30b66c63c6b2cceb1d @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java b/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java -index dc1ca7b334e89b4d0be775b6f6e6f4222ea02dcc..80c3cd540a46e249e85586e8d7a2f0f6226091fc 100644 +index cc37e545ece89803fad91801775470df4620bd62..7e3b59e2302a27f7b8a3f43b75527199722a896f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java -@@ -81,6 +81,11 @@ public class EntityRavager extends EntityRaider { +@@ -80,6 +80,11 @@ public class EntityRavager extends EntityRaider { double speed = this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).getBaseValue(); getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(speed); } @@ -1078,7 +1078,7 @@ index cb52c4e63ac487d55dc16accca6976f44f904112..62f1808a456f46a6c7fbb5e030d9ed65 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java b/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java -index 0cbe3032fd3b048b0eb8ec3d8592a662c69c9e30..ce0d52a501dbff7c4eb70270bafa3e2a77599107 100644 +index feb40c2ca8e8f3fae5665b2d71296a6b811b11f6..2b826dadb4b9132541c9844d144ce7050829250b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntitySlime.java @@ -51,6 +51,7 @@ import com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent; @@ -1170,7 +1170,7 @@ index cba66a08feceeeaf7c123da595fc7b12c5749783..892aa844a98ae0d192737c6fc6df0a21 public static boolean c(EntityTypes entitytypes, GeneratorAccess generatoraccess, EnumMobSpawn enummobspawn, BlockPosition blockposition, Random random) { diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityVex.java b/src/main/java/net/minecraft/world/entity/monster/EntityVex.java -index 4301ece0a04f3f2b4d198a684d0ca314deef2aef..69d47697442fa80fbed08a11bb9e66057d059101 100644 +index 5e2114d2321c1542dc892bc7aed07080008cfd20..6835abd1badd1f03401870f4fed2b6911211d931 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityVex.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityVex.java @@ -92,6 +92,11 @@ public class EntityVex extends EntityMonster { @@ -1218,7 +1218,7 @@ index c4663c5b02363bd1499ce1f3b50027f8aa7c68e7..a119923ee8d8ac00892f594a8af6d392 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityZoglin.java b/src/main/java/net/minecraft/world/entity/monster/EntityZoglin.java -index c5b1ce9268d6e6f3ec26eda4b5d8e7ae2a2ea672..17c96e8eaa5cde028024f5ad4b853e3399a942d5 100644 +index 249fb9cf43527af5c7818ce6b07487ad446811b7..4d03a2dc2aed9b292ac17dc57d560f13e655cf4a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityZoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityZoglin.java @@ -72,6 +72,11 @@ public class EntityZoglin extends EntityMonster implements IMonster, IOglin { @@ -1319,7 +1319,7 @@ index b8395c7317494adf36010080931a1c8635ab6cfa..aeeee97a87680f072188d1fcc9ec55b5 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/EntityHoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/EntityHoglin.java -index 828d01abe8202a246ce07c1c652a17cbc829d904..b271df48d04f12a68e0b7abf2f1375749a9a0f08 100644 +index 8c2815c8b11c8db8e6c1d0caf71188322e52094d..0b6c80e908392025197b68d1ba6b3eed6d69c9b2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/EntityHoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/EntityHoglin.java @@ -76,6 +76,11 @@ public class EntityHoglin extends EntityAnimal implements IMonster, IOglin { @@ -1335,7 +1335,7 @@ index 828d01abe8202a246ce07c1c652a17cbc829d904..b271df48d04f12a68e0b7abf2f137574 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglin.java -index 8c6f5273ed2ab4ec63b7854e290f790b2eca8c2f..99fc16aae085da564c5236e68925a8a2225f5c27 100644 +index 2311d82824314a9feede9c3c106b0e1b24ac1b7a..17dde4532714378f7480f55991d94fc82e9a2b05 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglin.java @@ -80,6 +80,11 @@ public class EntityPiglin extends EntityPiglinAbstract implements ICrossbow { @@ -1351,7 +1351,7 @@ index 8c6f5273ed2ab4ec63b7854e290f790b2eca8c2f..99fc16aae085da564c5236e68925a8a2 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglinBrute.java b/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglinBrute.java -index da2220b08a9cd9c2d7d3fd06702e6690e12f095e..c441d6b2ce29d914a29c2f39d70adb14e9ab31a6 100644 +index 1370d2d8568a4ed62f2ec3d54abc7d2bebc48f75..201b78ffb5062254a6b3447f217df03dfb498710 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglinBrute.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglinBrute.java @@ -49,6 +49,11 @@ public class EntityPiglinBrute extends EntityPiglinAbstract { @@ -1367,7 +1367,7 @@ index da2220b08a9cd9c2d7d3fd06702e6690e12f095e..c441d6b2ce29d914a29c2f39d70adb14 public static AttributeProvider.Builder eS() { diff --git a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java -index 0924e0c13b3c57e46f6dc40232707088f96e98c7..16933de70a23414859019e19545bfa5baa38091a 100644 +index 0699d835da44296ede8ee6458a7bf8ebccc313ae..f911cd4cf2ad82e81b09f92063abd573797fe5d6 100644 --- a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java +++ b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java @@ -167,6 +167,11 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @@ -1383,7 +1383,7 @@ index 0924e0c13b3c57e46f6dc40232707088f96e98c7..16933de70a23414859019e19545bfa5b @Override diff --git a/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java b/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java -index 90cbef7fe8803295f82bddd6709fdf303aedcaba..b84916c0c58fd208ef5547299f8db8462d1c42fe 100644 +index 6c390fb20c7f29133a60780a75676d8d3d6eab29..f6e0a92037d22de102c42cc1953ea90919bd3a34 100644 --- a/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java @@ -18,6 +18,7 @@ import net.minecraft.world.entity.EntityAgeable; @@ -1394,7 +1394,7 @@ index 90cbef7fe8803295f82bddd6709fdf303aedcaba..b84916c0c58fd208ef5547299f8db846 import net.minecraft.world.entity.ai.goal.PathfinderGoal; import net.minecraft.world.entity.ai.goal.PathfinderGoalAvoidTarget; import net.minecraft.world.entity.ai.goal.PathfinderGoalFloat; -@@ -110,6 +111,11 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { +@@ -114,6 +115,11 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { public boolean a(EntityHuman entityhuman) { return world.purpurConfig.villagerTraderCanBeLeashed && !this.isLeashed(); } @@ -1407,10 +1407,10 @@ index 90cbef7fe8803295f82bddd6709fdf303aedcaba..b84916c0c58fd208ef5547299f8db846 @Nullable diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076cf4f8b784 100644 +index 0666c523f82b9083ed8e81570faa923bbeb00ab8..f0f8165c51c17855d0c719d47bea194b80ff7847 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -530,30 +530,58 @@ public class PurpurWorldConfig { +@@ -542,30 +542,58 @@ public class PurpurWorldConfig { public boolean batRidable = false; public boolean batRidableInWater = false; public double batMaxY = 256D; @@ -1469,7 +1469,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean catRidable = false; -@@ -562,6 +590,7 @@ public class PurpurWorldConfig { +@@ -574,6 +602,7 @@ public class PurpurWorldConfig { public int catSpawnSwampHutScanRange = 16; public int catSpawnVillageScanRange = 48; public int catBreedingTicks = 6000; @@ -1477,7 +1477,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -569,51 +598,92 @@ public class PurpurWorldConfig { +@@ -581,51 +610,92 @@ public class PurpurWorldConfig { catSpawnSwampHutScanRange = getInt("mobs.cat.scan-range-for-other-cats.swamp-hut", catSpawnSwampHutScanRange); catSpawnVillageScanRange = getInt("mobs.cat.scan-range-for-other-cats.village", catSpawnVillageScanRange); catBreedingTicks = getInt("mobs.cat.breeding-delay-ticks", catBreedingTicks); @@ -1570,7 +1570,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean dolphinRidable = false; -@@ -621,19 +691,45 @@ public class PurpurWorldConfig { +@@ -633,19 +703,45 @@ public class PurpurWorldConfig { public float dolphinSpitSpeed = 1.0F; public float dolphinSpitDamage = 2.0F; public boolean dolphinDisableTreasureSearching = false; @@ -1616,7 +1616,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean drownedRidable = false; -@@ -641,73 +737,135 @@ public class PurpurWorldConfig { +@@ -653,73 +749,135 @@ public class PurpurWorldConfig { public boolean drownedJockeyOnlyBaby = true; public double drownedJockeyChance = 0.05D; public boolean drownedJockeyTryExistingChickens = true; @@ -1752,7 +1752,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean giantRidable = false; -@@ -730,31 +888,68 @@ public class PurpurWorldConfig { +@@ -742,31 +900,68 @@ public class PurpurWorldConfig { giantHaveHostileAI = getBoolean("mobs.giant.have-hostile-ai", giantHaveHostileAI); if (PurpurConfig.version < 8) { double oldValue = getDouble("mobs.giant.max-health", giantMaxHealth); @@ -1823,7 +1823,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean huskRidable = false; -@@ -762,12 +957,21 @@ public class PurpurWorldConfig { +@@ -774,12 +969,21 @@ public class PurpurWorldConfig { public boolean huskJockeyOnlyBaby = true; public double huskJockeyChance = 0.05D; public boolean huskJockeyTryExistingChickens = true; @@ -1845,7 +1845,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean illusionerRidable = false; -@@ -782,85 +986,188 @@ public class PurpurWorldConfig { +@@ -794,85 +998,188 @@ public class PurpurWorldConfig { illusionerFollowRange = getDouble("mobs.illusioner.follow-range", illusionerFollowRange); if (PurpurConfig.version < 8) { double oldValue = getDouble("mobs.illusioner.max-health", illusionerMaxHealth); @@ -2036,7 +2036,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean phantomRidable = false; -@@ -887,6 +1194,7 @@ public class PurpurWorldConfig { +@@ -899,6 +1206,7 @@ public class PurpurWorldConfig { public boolean phantomIgnorePlayersWithTorch = false; public boolean phantomBurnInDaylight = true; public boolean phantomAllowGriefing = false; @@ -2044,7 +2044,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); phantomRidableInWater = getBoolean("mobs.phantom.ridable-in-water", phantomRidableInWater); -@@ -912,38 +1220,72 @@ public class PurpurWorldConfig { +@@ -924,38 +1232,72 @@ public class PurpurWorldConfig { phantomBurnInDaylight = getBoolean("mobs.phantom.burn-in-daylight", phantomBurnInDaylight); phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); phantomAllowGriefing = getBoolean("mobs.phantom.allow-griefing", phantomAllowGriefing); @@ -2117,7 +2117,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean polarBearRidable = false; -@@ -951,6 +1293,7 @@ public class PurpurWorldConfig { +@@ -963,6 +1305,7 @@ public class PurpurWorldConfig { public String polarBearBreedableItemString = ""; public Item polarBearBreedableItem = null; public int polarBearBreedingTicks = 6000; @@ -2125,7 +2125,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -958,11 +1301,24 @@ public class PurpurWorldConfig { +@@ -970,11 +1313,24 @@ public class PurpurWorldConfig { Item item = IRegistry.ITEM.get(new MinecraftKey(polarBearBreedableItemString)); if (item != Items.AIR) polarBearBreedableItem = item; polarBearBreedingTicks = getInt("mobs.polar_bear.breeding-delay-ticks", polarBearBreedingTicks); @@ -2150,7 +2150,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean rabbitRidable = false; -@@ -970,68 +1326,144 @@ public class PurpurWorldConfig { +@@ -982,68 +1338,144 @@ public class PurpurWorldConfig { public double rabbitNaturalToast = 0.0D; public double rabbitNaturalKiller = 0.0D; public int rabbitBreedingTicks = 6000; @@ -2295,7 +2295,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean snowGolemRidable = false; -@@ -1043,6 +1475,7 @@ public class PurpurWorldConfig { +@@ -1055,6 +1487,7 @@ public class PurpurWorldConfig { public int snowGolemSnowBallMax = 20; public float snowGolemSnowBallModifier = 10.0F; public double snowGolemAttackDistance = 1.25D; @@ -2303,7 +2303,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1053,63 +1486,118 @@ public class PurpurWorldConfig { +@@ -1065,63 +1498,118 @@ public class PurpurWorldConfig { snowGolemSnowBallMax = getInt("mobs.snow_golem.max-shoot-interval-ticks", snowGolemSnowBallMax); snowGolemSnowBallModifier = (float) getDouble("mobs.snow_golem.snow-ball-modifier", snowGolemSnowBallModifier); snowGolemAttackDistance = getDouble("mobs.snow_golem.attack-distance", snowGolemAttackDistance); @@ -2422,7 +2422,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean villagerRidable = false; -@@ -1127,6 +1615,7 @@ public class PurpurWorldConfig { +@@ -1139,6 +1627,7 @@ public class PurpurWorldConfig { public int villagerLobotomizeCheck = 60; public boolean villagerClericsFarmWarts = false; public boolean villagerClericFarmersThrowWarts = true; @@ -2430,7 +2430,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1148,33 +1637,60 @@ public class PurpurWorldConfig { +@@ -1160,33 +1649,60 @@ public class PurpurWorldConfig { villagerLobotomizeCheck = getInt("mobs.villager.lobotomize.check-interval", villagerLobotomizeCheck); villagerClericsFarmWarts = getBoolean("mobs.villager.clerics-farm-warts", villagerClericsFarmWarts); villagerClericFarmersThrowWarts = getBoolean("mobs.villager.cleric-wart-farmers-throw-warts-at-villagers", villagerClericFarmersThrowWarts); @@ -2491,7 +2491,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean witherRidable = false; -@@ -1191,19 +1707,30 @@ public class PurpurWorldConfig { +@@ -1203,19 +1719,30 @@ public class PurpurWorldConfig { witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); if (PurpurConfig.version < 8) { double oldValue = getDouble("mobs.wither.max-health", witherMaxHealth); @@ -2524,7 +2524,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean wolfRidable = false; -@@ -1212,6 +1739,7 @@ public class PurpurWorldConfig { +@@ -1224,6 +1751,7 @@ public class PurpurWorldConfig { public boolean wolfMilkCuresRabies = true; public double wolfNaturalRabid = 0.0D; public int wolfBreedingTicks = 6000; @@ -2532,7 +2532,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c private void wolfSettings() { wolfRidable = getBoolean("mobs.wolf.ridable", wolfRidable); wolfRidableInWater = getBoolean("mobs.wolf.ridable-in-water", wolfRidableInWater); -@@ -1223,13 +1751,26 @@ public class PurpurWorldConfig { +@@ -1235,13 +1763,26 @@ public class PurpurWorldConfig { wolfMilkCuresRabies = getBoolean("mobs.wolf.milk-cures-rabid-wolves", wolfMilkCuresRabies); wolfNaturalRabid = getDouble("mobs.wolf.spawn-rabid-chance", wolfNaturalRabid); wolfBreedingTicks = getInt("mobs.wolf.breeding-delay-ticks", wolfBreedingTicks); @@ -2559,7 +2559,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean zombieRidable = false; -@@ -1239,6 +1780,8 @@ public class PurpurWorldConfig { +@@ -1251,6 +1792,8 @@ public class PurpurWorldConfig { public boolean zombieJockeyTryExistingChickens = true; public boolean zombieAggressiveTowardsVillagerWhenLagging = true; public EnumDifficulty zombieBreakDoorMinDifficulty = EnumDifficulty.HARD; @@ -2568,7 +2568,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); -@@ -1251,15 +1794,40 @@ public class PurpurWorldConfig { +@@ -1263,15 +1806,40 @@ public class PurpurWorldConfig { } catch (IllegalArgumentException ignore) { zombieBreakDoorMinDifficulty = EnumDifficulty.HARD; } @@ -2609,7 +2609,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean zombifiedPiglinRidable = false; -@@ -1268,6 +1836,8 @@ public class PurpurWorldConfig { +@@ -1280,6 +1848,8 @@ public class PurpurWorldConfig { public double zombifiedPiglinJockeyChance = 0.05D; public boolean zombifiedPiglinJockeyTryExistingChickens = true; public boolean zombifiedPiglinCountAsPlayerKillWhenAngry = true; @@ -2618,7 +2618,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c private void zombifiedPiglinSettings() { zombifiedPiglinRidable = getBoolean("mobs.zombified_piglin.ridable", zombifiedPiglinRidable); zombifiedPiglinRidableInWater = getBoolean("mobs.zombified_piglin.ridable-in-water", zombifiedPiglinRidableInWater); -@@ -1275,6 +1845,13 @@ public class PurpurWorldConfig { +@@ -1287,6 +1857,13 @@ public class PurpurWorldConfig { zombifiedPiglinJockeyChance = getDouble("mobs.zombified_piglin.jockey.chance", zombifiedPiglinJockeyChance); zombifiedPiglinJockeyTryExistingChickens = getBoolean("mobs.zombified_piglin.jockey.try-existing-chickens", zombifiedPiglinJockeyTryExistingChickens); zombifiedPiglinCountAsPlayerKillWhenAngry = getBoolean("mobs.zombified_piglin.count-as-player-kill-when-angry", zombifiedPiglinCountAsPlayerKillWhenAngry); @@ -2632,7 +2632,7 @@ index 7ddb0119baa33a6641599fce7c7112d05dd7fb5d..464d6e35970b42319934d74a1f41076c } public boolean zombieVillagerRidable = false; -@@ -1282,11 +1859,20 @@ public class PurpurWorldConfig { +@@ -1294,11 +1871,20 @@ public class PurpurWorldConfig { public boolean zombieVillagerJockeyOnlyBaby = true; public double zombieVillagerJockeyChance = 0.05D; public boolean zombieVillagerJockeyTryExistingChickens = true; diff --git a/patches/server/0152-Phantom-flames-on-swoop.patch b/patches/server/0151-Phantom-flames-on-swoop.patch similarity index 87% rename from patches/server/0152-Phantom-flames-on-swoop.patch rename to patches/server/0151-Phantom-flames-on-swoop.patch index 3e2e1cd1fb..2da268d8ba 100644 --- a/patches/server/0152-Phantom-flames-on-swoop.patch +++ b/patches/server/0151-Phantom-flames-on-swoop.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Phantom flames on swoop diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityPhantom.java b/src/main/java/net/minecraft/world/entity/monster/EntityPhantom.java -index 902b26d609aef8dd46e8875cb7c06f187511e8d5..4f3d4f2596c69881f0653bddcc3bf2b9ede3ca8f 100644 +index 11e45bfa1086f56cdbd87e3ced194ee82f36d142..0e78d383347fa15a008bde543b08c707bb5bd54a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityPhantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityPhantom.java @@ -226,6 +226,7 @@ public class EntityPhantom extends EntityFlying implements IMonster { @@ -17,10 +17,10 @@ index 902b26d609aef8dd46e8875cb7c06f187511e8d5..4f3d4f2596c69881f0653bddcc3bf2b9 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 464d6e35970b42319934d74a1f41076cf4f8b784..8484e197272327722b6f20c23f92af44525311df 100644 +index f0f8165c51c17855d0c719d47bea194b80ff7847..c84a331c157ea1180813cba1107bf901a35b2833 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1194,6 +1194,7 @@ public class PurpurWorldConfig { +@@ -1206,6 +1206,7 @@ public class PurpurWorldConfig { public boolean phantomIgnorePlayersWithTorch = false; public boolean phantomBurnInDaylight = true; public boolean phantomAllowGriefing = false; @@ -28,7 +28,7 @@ index 464d6e35970b42319934d74a1f41076cf4f8b784..8484e197272327722b6f20c23f92af44 public double phantomMaxHealth = 20.0D; private void phantomSettings() { phantomRidable = getBoolean("mobs.phantom.ridable", phantomRidable); -@@ -1220,6 +1221,7 @@ public class PurpurWorldConfig { +@@ -1232,6 +1233,7 @@ public class PurpurWorldConfig { phantomBurnInDaylight = getBoolean("mobs.phantom.burn-in-daylight", phantomBurnInDaylight); phantomIgnorePlayersWithTorch = getBoolean("mobs.phantom.ignore-players-with-torch", phantomIgnorePlayersWithTorch); phantomAllowGriefing = getBoolean("mobs.phantom.allow-griefing", phantomAllowGriefing); diff --git a/patches/server/0153-Option-for-chests-to-open-even-with-a-solid-block-on.patch b/patches/server/0152-Option-for-chests-to-open-even-with-a-solid-block-on.patch similarity index 91% rename from patches/server/0153-Option-for-chests-to-open-even-with-a-solid-block-on.patch rename to patches/server/0152-Option-for-chests-to-open-even-with-a-solid-block-on.patch index a8432a8053..3f720b22d0 100644 --- a/patches/server/0153-Option-for-chests-to-open-even-with-a-solid-block-on.patch +++ b/patches/server/0152-Option-for-chests-to-open-even-with-a-solid-block-on.patch @@ -17,10 +17,10 @@ index a45ee959f41e7f349ff2c309f21fa44ec671cb87..cddf8e3d34385eb264cd28ba6b4392d6 return iblockaccess.getType(blockposition1).isOccluding(iblockaccess, blockposition1); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 8484e197272327722b6f20c23f92af44525311df..62cdf46803a178de52150d3180d2db7bc1e5e84f 100644 +index c84a331c157ea1180813cba1107bf901a35b2833..3d1cfd550b12c8dd4bd536c518ac169ff6bbfe50 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -427,6 +427,11 @@ public class PurpurWorldConfig { +@@ -439,6 +439,11 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0154-Implement-TPSBar.patch b/patches/server/0153-Implement-TPSBar.patch similarity index 93% rename from patches/server/0154-Implement-TPSBar.patch rename to patches/server/0153-Implement-TPSBar.patch index 6094ad5bec..8514179557 100644 --- a/patches/server/0154-Implement-TPSBar.patch +++ b/patches/server/0153-Implement-TPSBar.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Implement TPSBar diff --git a/src/main/java/net/minecraft/commands/CommandDispatcher.java b/src/main/java/net/minecraft/commands/CommandDispatcher.java -index 0982b14a4b39c40a68ee900d506b4e44f840299d..324f475513eecab4242b8900084d7f088bd0e10b 100644 +index 2f5e8ed345ace0d9abb7edebe1fd47e562b1d272..ce95a7d9c967d723bad468bd00a5c0a6b887aa33 100644 --- a/src/main/java/net/minecraft/commands/CommandDispatcher.java +++ b/src/main/java/net/minecraft/commands/CommandDispatcher.java @@ -193,6 +193,7 @@ public class CommandDispatcher { @@ -17,10 +17,10 @@ index 0982b14a4b39c40a68ee900d506b4e44f840299d..324f475513eecab4242b8900084d7f08 if (commanddispatcher_servertype.d) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 4ceaa8e905c9ba7277ee00cea020d01d14ae2178..137c52999666ea331ac52c230f0674d489a95524 100644 +index e3c3b2eb03ad132a91140cb459fd8f378154ee2e..176fc4c8b7c5ef45b29cb8aaa1b1ff16dbfc9b7c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -989,6 +989,7 @@ public abstract class MinecraftServer extends IAsyncTaskHandlerReentrant 100) { PlayerConnection.LOGGER.warn(this.player.getName() + " tried to send a book with too many pages"); @@ -16,7 +16,7 @@ index 07541f23ee853dae137440129e600d345774cd90..5a2f84cd1456b072084e2db53a24c986 minecraftServer.scheduleOnMain(() -> this.disconnect("Book too large!")); return; } -@@ -1135,6 +1136,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1140,6 +1141,7 @@ public class PlayerConnection implements PacketListenerPlayIn { int byteLength = testString.getBytes(java.nio.charset.StandardCharsets.UTF_8).length; if (byteLength > 256 * 4) { PlayerConnection.LOGGER.warn(this.player.getName() + " tried to send a book with with a page too large!"); @@ -24,7 +24,7 @@ index 07541f23ee853dae137440129e600d345774cd90..5a2f84cd1456b072084e2db53a24c986 minecraftServer.scheduleOnMain(() -> this.disconnect("Book too large!")); return; } -@@ -1158,6 +1160,7 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1163,6 +1165,7 @@ public class PlayerConnection implements PacketListenerPlayIn { if (byteTotal > byteAllowed) { PlayerConnection.LOGGER.warn(this.player.getName() + " tried to send too large of a book. Book Size: " + byteTotal + " - Allowed: "+ byteAllowed + " - Pages: " + pageList.size()); diff --git a/patches/server/0157-Full-netherite-armor-grants-fire-resistance.patch b/patches/server/0156-Full-netherite-armor-grants-fire-resistance.patch similarity index 91% rename from patches/server/0157-Full-netherite-armor-grants-fire-resistance.patch rename to patches/server/0156-Full-netherite-armor-grants-fire-resistance.patch index 2b19153394..8fba6eb366 100644 --- a/patches/server/0157-Full-netherite-armor-grants-fire-resistance.patch +++ b/patches/server/0156-Full-netherite-armor-grants-fire-resistance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Full netherite armor grants fire resistance diff --git a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -index af10d5aea7909ee9f38982264233f0a45c153003..5a2678cf3a8441344629b6a0bf4b6be538baae4f 100644 +index 78442fe87ceaf65b302536c893610aa0269b6dee..663dfa707dd948df2f25dab287fa4a0580070b75 100644 --- a/src/main/java/net/minecraft/world/entity/player/EntityHuman.java +++ b/src/main/java/net/minecraft/world/entity/player/EntityHuman.java -@@ -341,6 +341,16 @@ public abstract class EntityHuman extends EntityLiving { +@@ -340,6 +340,16 @@ public abstract class EntityHuman extends EntityLiving { this.addEffect(new MobEffect(MobEffects.WATER_BREATHING, 200, 0, false, false, true), org.bukkit.event.entity.EntityPotionEffectEvent.Cause.TURTLE_HELMET); // CraftBukkit } @@ -26,10 +26,10 @@ index af10d5aea7909ee9f38982264233f0a45c153003..5a2678cf3a8441344629b6a0bf4b6be5 protected ItemCooldown i() { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index c9faf726d5f64142946438966b887655e75759af..2d9d963773b1df9a5d7520a5c295d40ebf56761f 100644 +index 130dc441be74963c272381e992ea39883804f9f7..318513f5612a694c2b240840b24a39210457c202 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -344,6 +344,19 @@ public class PurpurWorldConfig { +@@ -356,6 +356,19 @@ public class PurpurWorldConfig { playerDeathExpDropMax = getInt("gameplay-mechanics.player.exp-dropped-on-death.maximum", playerDeathExpDropMax); } diff --git a/patches/server/0158-Fix-rotating-UP-DOWN-CW-and-CCW.patch b/patches/server/0157-Fix-rotating-UP-DOWN-CW-and-CCW.patch similarity index 100% rename from patches/server/0158-Fix-rotating-UP-DOWN-CW-and-CCW.patch rename to patches/server/0157-Fix-rotating-UP-DOWN-CW-and-CCW.patch diff --git a/patches/server/0159-Add-MC-4-fix-back.patch b/patches/server/0158-Add-MC-4-fix-back.patch similarity index 86% rename from patches/server/0159-Add-MC-4-fix-back.patch rename to patches/server/0158-Add-MC-4-fix-back.patch index c3d1fe8bf4..6651ddd114 100644 --- a/patches/server/0159-Add-MC-4-fix-back.patch +++ b/patches/server/0158-Add-MC-4-fix-back.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add MC-4 fix back diff --git a/src/main/java/net/minecraft/world/entity/item/EntityItem.java b/src/main/java/net/minecraft/world/entity/item/EntityItem.java -index 3b84039a76843a0784e2d71bb66dc322450c2cab..8640472dba341285a37edb086e1bea387204fd04 100644 +index 92cd61cd6b085a03c502223f3861540d8c9f27e1..51663e58def93cc38157a99069db86603faf4c0a 100644 --- a/src/main/java/net/minecraft/world/entity/item/EntityItem.java +++ b/src/main/java/net/minecraft/world/entity/item/EntityItem.java -@@ -571,7 +571,7 @@ public class EntityItem extends Entity { +@@ -575,7 +575,7 @@ public class EntityItem extends Entity { // Paper start - fix MC-4 public void setPositionRaw(double x, double y, double z) { diff --git a/patches/server/0160-Add-mobGriefing-bypass-to-everything-affected.patch b/patches/server/0159-Add-mobGriefing-bypass-to-everything-affected.patch similarity index 94% rename from patches/server/0160-Add-mobGriefing-bypass-to-everything-affected.patch rename to patches/server/0159-Add-mobGriefing-bypass-to-everything-affected.patch index 63a6c0fef2..f1ec5ef442 100644 --- a/patches/server/0160-Add-mobGriefing-bypass-to-everything-affected.patch +++ b/patches/server/0159-Add-mobGriefing-bypass-to-everything-affected.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Add mobGriefing bypass to everything affected This adds the "bypass-mob-griefing" world config option to everything that is affected by the gamerule. diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index f0a485056f3ad94e7375fbdfd512026b969a0eed..e866531958c9d0171d39ba7f6963fe92eb2d42cc 100644 +index a090f563d7019615c055847ce0c2b0f2a343d70b..6447830095d02af5535fcf1f154b8c5260b90d33 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java @@ -1571,7 +1571,7 @@ public abstract class EntityLiving extends Entity { @@ -76,10 +76,10 @@ index 61a62c093b24c43064f116630d85096159e082d3..2519a78f7e5dd759680a1f47a1047885 } else if (this.c > 0) { --this.c; diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityFox.java b/src/main/java/net/minecraft/world/entity/animal/EntityFox.java -index b8b0ee65798dc94d707fa64bd53fdda5506331d9..355735c2efbba62481d059b8e733c9c70e834be1 100644 +index 5a2e624f1b6636f058cc69989324914f174a271a..03fee11004b27402ec9da39c617c226175242bb4 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityFox.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityFox.java -@@ -1075,7 +1075,7 @@ public class EntityFox extends EntityAnimal { +@@ -1073,7 +1073,7 @@ public class EntityFox extends EntityAnimal { } protected void n() { @@ -89,10 +89,10 @@ index b8b0ee65798dc94d707fa64bd53fdda5506331d9..355735c2efbba62481d059b8e733c9c7 if (iblockdata.a(Blocks.SWEET_BERRY_BUSH)) { diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java b/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java -index 284c52276b2fd816990c23b7b8a9ee50e70ab005..acb4c79b23fada090c5605cd352a573bdb0667bf 100644 +index ef031ac08b06e78d8826579c49cf5e43683318f9..a5be1a9d4e6f08f23215b49a30c1121167cc7a89 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityRabbit.java -@@ -518,7 +518,7 @@ public class EntityRabbit extends EntityAnimal { +@@ -517,7 +517,7 @@ public class EntityRabbit extends EntityAnimal { @Override public boolean a() { if (this.c <= 0) { @@ -102,7 +102,7 @@ index 284c52276b2fd816990c23b7b8a9ee50e70ab005..acb4c79b23fada090c5605cd352a573b } diff --git a/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java b/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java -index 88db8ff8cb415b84ab98cc0550c705d5a472230c..17f27d2bf5be746a0fa0e1e0fecab8158b2b3587 100644 +index 3934966b06eb9880ed316cee84d099edd80c09b9..b13cd3f344a0e2c4c02b30f80ca9a81d93cc1954 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java @@ -123,7 +123,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt @@ -115,7 +115,7 @@ index 88db8ff8cb415b84ab98cc0550c705d5a472230c..17f27d2bf5be746a0fa0e1e0fecab815 } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java -index 999a6d17eccd6305c0063e1558abfe70d72c39fe..a81d782877ff6116477792fa4cec0846e56ed384 100644 +index aeff46b575a05145fb509b5e5a489b2067776e2f..0614483830336f3bbd348319ca3eed8767568852 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java @@ -539,7 +539,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { @@ -128,10 +128,10 @@ index 999a6d17eccd6305c0063e1558abfe70d72c39fe..a81d782877ff6116477792fa4cec0846 // flag1 = this.world.a(blockposition, false) || flag1; flag1 = true; diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java b/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java -index beb4d59faf4bd7501468b2eaa0e866613625e963..fa6b72c7a12b20f8ccffa360a3895e4d8f4277e4 100644 +index 34103234140d61a5dc1d3e9f575fb8a65cde956b..9a152b7cd351380e696640a51e5f8b64225f25f0 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java -@@ -380,7 +380,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -378,7 +378,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { if (this.getInvul() > 0) { i = this.getInvul() - 1; if (i <= 0) { @@ -140,7 +140,7 @@ index beb4d59faf4bd7501468b2eaa0e866613625e963..fa6b72c7a12b20f8ccffa360a3895e4d // CraftBukkit start // this.world.createExplosion(this, this.locX(), this.getHeadY(), this.locZ(), 7.0F, false, explosion_effect); ExplosionPrimeEvent event = new ExplosionPrimeEvent(this.getBukkitEntity(), 7.0F, false); -@@ -492,7 +492,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -490,7 +490,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { if (this.bw > 0) { --this.bw; @@ -150,7 +150,7 @@ index beb4d59faf4bd7501468b2eaa0e866613625e963..fa6b72c7a12b20f8ccffa360a3895e4d j = MathHelper.floor(this.locX()); int j1 = MathHelper.floor(this.locZ()); diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java b/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java -index 478ac5bfdc69b5c3e24906bb5e0ea1dff81cea98..ea500a6080f73dcc35d83a3b5a170f57dedaa431 100644 +index a1cc0b414479e693de9428412ba837fd9bf57751..d8c568d821b859bac0a9839c42c9596cf964b16e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java @@ -455,7 +455,7 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable { @@ -185,10 +185,10 @@ index 8d7b8d2ac9a7340e2cfd0d1b8963e4e4d97e8bc8..8a219ac18307c715913f5c2a80b1ff35 } else { List list = EntityEvoker.this.world.a(EntitySheep.class, this.e, EntityEvoker.this, EntityEvoker.this.getBoundingBox().grow(16.0D, 4.0D, 16.0D)); diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java b/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java -index 80c3cd540a46e249e85586e8d7a2f0f6226091fc..6809c93fe435d183a27204fb4460fd68a86aa04f 100644 +index 7e3b59e2302a27f7b8a3f43b75527199722a896f..16da85620c067b005ce029c8b9c5ea1642a794f0 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java -@@ -179,7 +179,7 @@ public class EntityRavager extends EntityRaider { +@@ -178,7 +178,7 @@ public class EntityRavager extends EntityRaider { this.getAttributeInstance(GenericAttributes.MOVEMENT_SPEED).setValue(MathHelper.d(0.1D, d1, d0)); } @@ -338,10 +338,10 @@ index 04504901b1933ed760b34b8abb994de8ec340a4e..e18be05c9a9230105ec54395d4391c86 return true; // Purpur end diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755bdb277292 100644 +index 318513f5612a694c2b240840b24a39210457c202..6943af6037c1b8832c2fa652b92b9a2badf8bac5 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -286,6 +286,7 @@ public class PurpurWorldConfig { +@@ -296,6 +296,7 @@ public class PurpurWorldConfig { public boolean disableDropsOnCrammingDeath = false; public boolean entitiesPickUpLootBypassMobGriefing = false; public boolean entitiesCanUsePortals = true; @@ -349,7 +349,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b public boolean milkCuresBadOmen = true; public boolean persistentTileEntityDisplayNames = false; public boolean persistentDroppableEntityDisplayNames = false; -@@ -300,6 +301,7 @@ public class PurpurWorldConfig { +@@ -311,6 +312,7 @@ public class PurpurWorldConfig { disableDropsOnCrammingDeath = getBoolean("gameplay-mechanics.disable-drops-on-cramming-death", disableDropsOnCrammingDeath); entitiesPickUpLootBypassMobGriefing = getBoolean("gameplay-mechanics.entities-pick-up-loot-bypass-mob-griefing", entitiesPickUpLootBypassMobGriefing); entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals); @@ -357,7 +357,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); persistentTileEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-tileentity-display-names-and-lore", persistentTileEntityDisplayNames); persistentDroppableEntityDisplayNames = getBoolean("gameplay-mechanics.persistent-droppable-entity-display-names", persistentDroppableEntityDisplayNames); -@@ -452,9 +454,11 @@ public class PurpurWorldConfig { +@@ -464,9 +466,11 @@ public class PurpurWorldConfig { dispenserPlaceAnvils = getBoolean("blocks.dispenser.place-anvils", dispenserPlaceAnvils); } @@ -369,7 +369,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b farmlandGetsMoistFromBelow = getBoolean("blocks.farmland.gets-moist-from-below", farmlandGetsMoistFromBelow); farmlandAlpha = getBoolean("blocks.farmland.use-alpha-farmland", farmlandAlpha); } -@@ -513,10 +517,12 @@ public class PurpurWorldConfig { +@@ -525,10 +529,12 @@ public class PurpurWorldConfig { stonecutterDamage = (float) getDouble("blocks.stonecutter.damage", stonecutterDamage); } @@ -382,7 +382,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b turtleEggsBreakFromExpOrbs = getBoolean("blocks.turtle_egg.break-from-exp-orbs", turtleEggsBreakFromExpOrbs); turtleEggsBreakFromItems = getBoolean("blocks.turtle_egg.break-from-items", turtleEggsBreakFromItems); turtleEggsBreakFromMinecarts = getBoolean("blocks.turtle_egg.break-from-minecarts", turtleEggsBreakFromMinecarts); -@@ -788,12 +794,14 @@ public class PurpurWorldConfig { +@@ -800,12 +806,14 @@ public class PurpurWorldConfig { public boolean enderDragonRidableInWater = false; public double enderDragonMaxY = 256D; public boolean enderDragonAlwaysDropsFullExp = false; @@ -397,7 +397,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b if (PurpurConfig.version < 8) { double oldValue = getDouble("mobs.ender_dragon.max-health", enderDragonMaxHealth); set("mobs.ender_dragon.max-health", null); -@@ -809,12 +817,14 @@ public class PurpurWorldConfig { +@@ -821,12 +829,14 @@ public class PurpurWorldConfig { public boolean endermanRidable = false; public boolean endermanRidableInWater = false; public boolean endermanAllowGriefing = true; @@ -412,7 +412,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b endermanDespawnEvenWithBlock = getBoolean("mobs.enderman.can-despawn-with-held-block", endermanDespawnEvenWithBlock); if (PurpurConfig.version < 10) { double oldValue = getDouble("mobs.enderman.attributes.max-health", endermanMaxHealth); -@@ -840,10 +850,12 @@ public class PurpurWorldConfig { +@@ -852,10 +862,12 @@ public class PurpurWorldConfig { public boolean evokerRidable = false; public boolean evokerRidableInWater = false; @@ -425,7 +425,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b if (PurpurConfig.version < 10) { double oldValue = getDouble("mobs.evoker.attributes.max-health", evokerMaxHealth); set("mobs.evoker.attributes.max-health", null); -@@ -854,12 +866,14 @@ public class PurpurWorldConfig { +@@ -866,12 +878,14 @@ public class PurpurWorldConfig { public boolean foxRidable = false; public boolean foxRidableInWater = false; @@ -440,7 +440,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b foxTypeChangesWithTulips = getBoolean("mobs.fox.tulips-change-type", foxTypeChangesWithTulips); foxBreedingTicks = getInt("mobs.fox.breeding-delay-ticks", foxBreedingTicks); if (PurpurConfig.version < 10) { -@@ -1296,10 +1310,12 @@ public class PurpurWorldConfig { +@@ -1308,10 +1322,12 @@ public class PurpurWorldConfig { public boolean pillagerRidable = false; public boolean pillagerRidableInWater = false; @@ -453,7 +453,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b if (PurpurConfig.version < 10) { double oldValue = getDouble("mobs.pillager.attributes.max-health", pillagerMaxHealth); set("mobs.pillager.attributes.max-health", null); -@@ -1343,6 +1359,7 @@ public class PurpurWorldConfig { +@@ -1355,6 +1371,7 @@ public class PurpurWorldConfig { public boolean rabbitRidable = false; public boolean rabbitRidableInWater = false; @@ -461,7 +461,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b public double rabbitNaturalToast = 0.0D; public double rabbitNaturalKiller = 0.0D; public int rabbitBreedingTicks = 6000; -@@ -1350,6 +1367,7 @@ public class PurpurWorldConfig { +@@ -1362,6 +1379,7 @@ public class PurpurWorldConfig { private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); @@ -469,7 +469,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b rabbitNaturalToast = getDouble("mobs.rabbit.spawn-toast-chance", rabbitNaturalToast); rabbitNaturalKiller = getDouble("mobs.rabbit.spawn-killer-rabbit-chance", rabbitNaturalKiller); rabbitBreedingTicks = getInt("mobs.rabbit.breeding-delay-ticks", rabbitBreedingTicks); -@@ -1363,10 +1381,12 @@ public class PurpurWorldConfig { +@@ -1375,10 +1393,12 @@ public class PurpurWorldConfig { public boolean ravagerRidable = false; public boolean ravagerRidableInWater = false; @@ -482,7 +482,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b if (PurpurConfig.version < 10) { double oldValue = getDouble("mobs.ravager.attributes.max-health", ravagerMaxHealth); set("mobs.ravager.attributes.max-health", null); -@@ -1390,11 +1410,13 @@ public class PurpurWorldConfig { +@@ -1402,11 +1422,13 @@ public class PurpurWorldConfig { public boolean sheepRidable = false; public boolean sheepRidableInWater = false; public int sheepBreedingTicks = 6000; @@ -496,7 +496,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b if (PurpurConfig.version < 10) { double oldValue = getDouble("mobs.sheep.attributes.max-health", sheepMaxHealth); set("mobs.sheep.attributes.max-health", null); -@@ -1419,10 +1441,12 @@ public class PurpurWorldConfig { +@@ -1431,10 +1453,12 @@ public class PurpurWorldConfig { public boolean silverfishRidable = false; public boolean silverfishRidableInWater = false; @@ -509,7 +509,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b if (PurpurConfig.version < 10) { double oldValue = getDouble("mobs.silverfish.attributes.max-health", silverfishMaxHealth); set("mobs.silverfish.attributes.max-health", null); -@@ -1489,6 +1513,7 @@ public class PurpurWorldConfig { +@@ -1501,6 +1525,7 @@ public class PurpurWorldConfig { public boolean snowGolemRidable = false; public boolean snowGolemRidableInWater = false; public boolean snowGolemLeaveTrailWhenRidden = false; @@ -517,7 +517,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b public boolean snowGolemDropsPumpkin = true; public boolean snowGolemPutPumpkinBack = false; public int snowGolemSnowBallMin = 20; -@@ -1500,6 +1525,7 @@ public class PurpurWorldConfig { +@@ -1512,6 +1537,7 @@ public class PurpurWorldConfig { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); snowGolemLeaveTrailWhenRidden = getBoolean("mobs.snow_golem.leave-trail-when-ridden", snowGolemLeaveTrailWhenRidden); @@ -525,7 +525,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b snowGolemDropsPumpkin = getBoolean("mobs.snow_golem.drop-pumpkin-when-sheared", snowGolemDropsPumpkin); snowGolemPutPumpkinBack = getBoolean("mobs.snow_golem.pumpkin-can-be-added-back", snowGolemPutPumpkinBack); snowGolemSnowBallMin = getInt("mobs.snow_golem.min-shoot-interval-ticks", snowGolemSnowBallMin); -@@ -1718,6 +1744,7 @@ public class PurpurWorldConfig { +@@ -1730,6 +1756,7 @@ public class PurpurWorldConfig { public boolean witherRidable = false; public boolean witherRidableInWater = false; public double witherMaxY = 256D; @@ -533,7 +533,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b public float witherHealthRegenAmount = 1.0f; public int witherHealthRegenDelay = 20; public double witherMaxHealth = 300.0D; -@@ -1725,6 +1752,7 @@ public class PurpurWorldConfig { +@@ -1737,6 +1764,7 @@ public class PurpurWorldConfig { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); witherMaxY = getDouble("mobs.wither.ridable-max-y", witherMaxY); @@ -541,7 +541,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b witherHealthRegenAmount = (float) getDouble("mobs.wither.health-regen-amount", witherHealthRegenAmount); witherHealthRegenDelay = getInt("mobs.wither.health-regen-delay", witherHealthRegenDelay); if (PurpurConfig.version < 8) { -@@ -1797,6 +1825,7 @@ public class PurpurWorldConfig { +@@ -1809,6 +1837,7 @@ public class PurpurWorldConfig { public boolean zombieRidable = false; public boolean zombieRidableInWater = false; @@ -549,7 +549,7 @@ index 2d9d963773b1df9a5d7520a5c295d40ebf56761f..751558a0a3fcb0433d7b580e5618755b public boolean zombieJockeyOnlyBaby = true; public double zombieJockeyChance = 0.05D; public boolean zombieJockeyTryExistingChickens = true; -@@ -1807,6 +1836,7 @@ public class PurpurWorldConfig { +@@ -1819,6 +1848,7 @@ public class PurpurWorldConfig { private void zombieSettings() { zombieRidable = getBoolean("mobs.zombie.ridable", zombieRidable); zombieRidableInWater = getBoolean("mobs.zombie.ridable-in-water", zombieRidableInWater); diff --git a/patches/server/0161-Config-to-allow-Note-Block-sounds-when-blocked.patch b/patches/server/0160-Config-to-allow-Note-Block-sounds-when-blocked.patch similarity index 93% rename from patches/server/0161-Config-to-allow-Note-Block-sounds-when-blocked.patch rename to patches/server/0160-Config-to-allow-Note-Block-sounds-when-blocked.patch index 6bd91842c2..5f989a5327 100644 --- a/patches/server/0161-Config-to-allow-Note-Block-sounds-when-blocked.patch +++ b/patches/server/0160-Config-to-allow-Note-Block-sounds-when-blocked.patch @@ -22,10 +22,10 @@ index 148718f8f96d94e76a4a7a96d5955b624c2dc661..075987567cd4412c8f0fb4e31b786394 org.bukkit.event.block.NotePlayEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callNotePlayEvent(world, blockposition, data.get(BlockNote.INSTRUMENT), data.get(BlockNote.NOTE)); if (!event.isCancelled()) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 751558a0a3fcb0433d7b580e5618755bdb277292..681e4d41aed335b62fb9aaa030f7fc119cfbfa88 100644 +index 6943af6037c1b8832c2fa652b92b9a2badf8bac5..a0df754d98e4be46720ba0962bdf7bf62f3425bb 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -288,6 +288,7 @@ public class PurpurWorldConfig { +@@ -298,6 +298,7 @@ public class PurpurWorldConfig { public boolean entitiesCanUsePortals = true; public boolean fireballsBypassMobGriefing = false; public boolean milkCuresBadOmen = true; @@ -33,7 +33,7 @@ index 751558a0a3fcb0433d7b580e5618755bdb277292..681e4d41aed335b62fb9aaa030f7fc11 public boolean persistentTileEntityDisplayNames = false; public boolean persistentDroppableEntityDisplayNames = false; public double tridentLoyaltyVoidReturnHeight = 0.0D; -@@ -303,6 +304,7 @@ public class PurpurWorldConfig { +@@ -314,6 +315,7 @@ public class PurpurWorldConfig { entitiesCanUsePortals = getBoolean("gameplay-mechanics.entities-can-use-portals", entitiesCanUsePortals); fireballsBypassMobGriefing = getBoolean("gameplay-mechanics.fireballs-bypass-mob-griefing", fireballsBypassMobGriefing); milkCuresBadOmen = getBoolean("gameplay-mechanics.milk-cures-bad-omen", milkCuresBadOmen); diff --git a/patches/server/0162-Add-EntityTeleportHinderedEvent.patch b/patches/server/0161-Add-EntityTeleportHinderedEvent.patch similarity index 95% rename from patches/server/0162-Add-EntityTeleportHinderedEvent.patch rename to patches/server/0161-Add-EntityTeleportHinderedEvent.patch index a31f33df93..fcd808b33b 100644 --- a/patches/server/0162-Add-EntityTeleportHinderedEvent.patch +++ b/patches/server/0161-Add-EntityTeleportHinderedEvent.patch @@ -82,7 +82,7 @@ index d918194e45953764fa3fd286b715714330a60941..70496562faa89e92da34a4f7b891f845 if (this.exitPortal == null && this.world.getTypeKey() == DimensionManager.THE_END) { // CraftBukkit - work in alternate worlds this.a((WorldServer) this.world); diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBase.java b/src/main/java/net/minecraft/world/level/block/state/BlockBase.java -index 23a3b1b317b6b3e9d812f5a7b09b099b0528c59e..4f40c6c3397596c81147fae4a6a51bfd517643d2 100644 +index df595dc52858807479584ce8da49390a25695990..0990eb8b2e2d8a5f7c1a2640727d86c37a50298e 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBase.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBase.java @@ -303,6 +303,7 @@ public abstract class BlockBase { @@ -94,10 +94,10 @@ index 23a3b1b317b6b3e9d812f5a7b09b099b0528c59e..4f40c6c3397596c81147fae4a6a51bfd public void a(IBlockData iblockdata, World world, BlockPosition blockposition, Entity entity) {} diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 681e4d41aed335b62fb9aaa030f7fc119cfbfa88..82963c98c127ae3e5d5dddb321771f08aee9b9a7 100644 +index a0df754d98e4be46720ba0962bdf7bf62f3425bb..c8b510a49ba5c299ec38ea1a56f5245ec6161b55 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1929,4 +1929,9 @@ public class PurpurWorldConfig { +@@ -1941,4 +1941,9 @@ public class PurpurWorldConfig { zombieVillagerMaxHealth = getDouble("mobs.zombie_villager.attributes.max_health", zombieVillagerMaxHealth); zombieVillagerSpawnReinforcements = getDouble("mobs.zombie_villager.attributes.spawn_reinforcements", zombieVillagerSpawnReinforcements); } @@ -108,10 +108,10 @@ index 681e4d41aed335b62fb9aaa030f7fc119cfbfa88..82963c98c127ae3e5d5dddb321771f08 + } } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index c524a0994f1c9ef1d0534403efa4e4481955b2f3..a80f664d2cf713fd751421be3735e2f4779f0056 100644 +index dcdc82b42689b4962323938a62cf7ded49afd6f4..4a70d657fd83627e8d66b52cb5f87381b43ad76a 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -554,6 +554,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -550,6 +550,10 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { location.checkFinite(); if (entity.isVehicle() || entity.dead) { @@ -123,7 +123,7 @@ index c524a0994f1c9ef1d0534403efa4e4481955b2f3..a80f664d2cf713fd751421be3735e2f4 } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index ca465a53a0c6232f912287704fc63cdcc59a28bd..37564214c6595dfc07534124f749bf65002325c2 100644 +index e204374c8f17ca5514e9bcfd24d411069285de29..7e0b3aa37af39db2bc2f630e479008dd9a443776 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -126,6 +126,7 @@ import org.bukkit.entity.EntityType; diff --git a/patches/server/0163-Add-StructureGenerateEvent.patch b/patches/server/0162-Add-StructureGenerateEvent.patch similarity index 100% rename from patches/server/0163-Add-StructureGenerateEvent.patch rename to patches/server/0162-Add-StructureGenerateEvent.patch diff --git a/patches/server/0164-Farmland-trampling-changes.patch b/patches/server/0163-Farmland-trampling-changes.patch similarity index 96% rename from patches/server/0164-Farmland-trampling-changes.patch rename to patches/server/0163-Farmland-trampling-changes.patch index d74cefa312..b5727a7c3e 100644 --- a/patches/server/0164-Farmland-trampling-changes.patch +++ b/patches/server/0163-Farmland-trampling-changes.patch @@ -54,10 +54,10 @@ index d3fd0b418b9088b621e44f5da452db74b433efe8..e7e5ee52cb7ac7e406c837db686d0a96 if (CraftEventFactory.callEntityChangeBlockEvent(entity, blockposition, Blocks.DIRT.getBlockData()).isCancelled()) { return; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 82963c98c127ae3e5d5dddb321771f08aee9b9a7..9fe79ccb92bfc0fca6660d159c4bc209d8302fd5 100644 +index c8b510a49ba5c299ec38ea1a56f5245ec6161b55..e639519a78bababc5d8034841e9ab2c20d34e4f7 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -459,10 +459,16 @@ public class PurpurWorldConfig { +@@ -471,10 +471,16 @@ public class PurpurWorldConfig { public boolean farmlandBypassMobGriefing = false; public boolean farmlandGetsMoistFromBelow = false; public boolean farmlandAlpha = false; diff --git a/patches/server/0165-Movement-options-for-armor-stands.patch b/patches/server/0164-Movement-options-for-armor-stands.patch similarity index 95% rename from patches/server/0165-Movement-options-for-armor-stands.patch rename to patches/server/0164-Movement-options-for-armor-stands.patch index 296679f31e..304545ff7f 100644 --- a/patches/server/0165-Movement-options-for-armor-stands.patch +++ b/patches/server/0164-Movement-options-for-armor-stands.patch @@ -17,10 +17,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 4d64fb19c3c9cce41e89ba4d702e687b34620b7e..2545b0891a299301a8d9e194e795b0f3856f2178 100644 +index 3230436d90306de325b8f72d813030288c2c28ed..6ad5d690b43b9eabc39a72e9e0ff4c0abf498175 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1500,7 +1500,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -1499,7 +1499,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return this.isInWater() || flag; } @@ -74,7 +74,7 @@ index 43dc0925887e2e9e86445cccff57be7994ca0d58..ecb797e67554d30e35b3aca4d0fc9b0e + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 9fe79ccb92bfc0fca6660d159c4bc209d8302fd5..edb7f82c0ebadd05095917f303be9c6f72a4a893 100644 +index e639519a78bababc5d8034841e9ab2c20d34e4f7..9d8056d7766925fec57b17b55f56dd8c67382b0a 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -111,10 +111,16 @@ public class PurpurWorldConfig { diff --git a/patches/server/0166-Fix-stuck-in-portals.patch b/patches/server/0165-Fix-stuck-in-portals.patch similarity index 84% rename from patches/server/0166-Fix-stuck-in-portals.patch rename to patches/server/0165-Fix-stuck-in-portals.patch index a744a37758..0f2a529d15 100644 --- a/patches/server/0166-Fix-stuck-in-portals.patch +++ b/patches/server/0165-Fix-stuck-in-portals.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix stuck in portals diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index 8010b0c68b99c2e8986d01a4635e1a37f4313dbe..ea9523fc977ec4a96bf113c33d0f9643f0cf7419 100644 +index 5a119537aca2f47c60b24a7b394a99051aec87b8..75871b1556f7c54a13488d9f985051f732d68d67 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -1291,6 +1291,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1289,6 +1289,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { playerlist.d(this); worldserver1.removePlayer(this); this.dead = false; @@ -17,10 +17,10 @@ index 8010b0c68b99c2e8986d01a4635e1a37f4313dbe..ea9523fc977ec4a96bf113c33d0f9643 // CraftBukkit end this.spawnIn(worldserver); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 2545b0891a299301a8d9e194e795b0f3856f2178..fdd374232ced8f4da675afaee3f5278c036ef112 100644 +index 6ad5d690b43b9eabc39a72e9e0ff4c0abf498175..90d625a7d653a9eb2763f806e635795e2a5f32e3 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2551,12 +2551,15 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2550,12 +2550,15 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne return new Vec2F(this.pitch, this.yaw); } @@ -37,10 +37,10 @@ index 2545b0891a299301a8d9e194e795b0f3856f2178..fdd374232ced8f4da675afaee3f5278c this.inPortal = true; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index edb7f82c0ebadd05095917f303be9c6f72a4a893..3dd8868ab3f1675ff5e7547285f9a89b9d56cd63 100644 +index 9d8056d7766925fec57b17b55f56dd8c67382b0a..742db39c2bcd0a1416108e6ee57bd8156b50c0b8 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -396,6 +396,11 @@ public class PurpurWorldConfig { +@@ -408,6 +408,11 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0167-Config-to-use-infinity-bows-without-arrows.patch b/patches/server/0166-Config-to-use-infinity-bows-without-arrows.patch similarity index 94% rename from patches/server/0167-Config-to-use-infinity-bows-without-arrows.patch rename to patches/server/0166-Config-to-use-infinity-bows-without-arrows.patch index 3eb40f8d00..ce6517eeeb 100644 --- a/patches/server/0167-Config-to-use-infinity-bows-without-arrows.patch +++ b/patches/server/0166-Config-to-use-infinity-bows-without-arrows.patch @@ -20,10 +20,10 @@ index c7e20b25b4d09463fa54c66e62208e90515013e2..59b803ec4552058f2dda269e9435daf6 } else { entityhuman.c(enumhand); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 3dd8868ab3f1675ff5e7547285f9a89b9d56cd63..235eba799c4b92738a57b62bc6bb572dd417a45b 100644 +index 742db39c2bcd0a1416108e6ee57bd8156b50c0b8..7b0babbd727421ecd05523eadbff3abb758fab6f 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -243,10 +243,12 @@ public class PurpurWorldConfig { +@@ -253,10 +253,12 @@ public class PurpurWorldConfig { idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList); } diff --git a/patches/server/0168-Toggle-for-water-sensitive-mob-damage.patch b/patches/server/0167-Toggle-for-water-sensitive-mob-damage.patch similarity index 87% rename from patches/server/0168-Toggle-for-water-sensitive-mob-damage.patch rename to patches/server/0167-Toggle-for-water-sensitive-mob-damage.patch index 560369b1a7..c2a2562b33 100644 --- a/patches/server/0168-Toggle-for-water-sensitive-mob-damage.patch +++ b/patches/server/0167-Toggle-for-water-sensitive-mob-damage.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Toggle for water sensitive mob damage diff --git a/src/main/java/net/minecraft/world/entity/EntityInsentient.java b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -index a6ea96683b0f4d35015dff6168f3bf458346fb6f..95c08c31cb4d9df73f0af8f0e3b61236e1b46faa 100644 +index 0eae61c48e780225cd253e91d247d8814950afb5..d838f5a85d561444f9a96e6f61161a2e4470c4c4 100644 --- a/src/main/java/net/minecraft/world/entity/EntityInsentient.java +++ b/src/main/java/net/minecraft/world/entity/EntityInsentient.java -@@ -863,7 +863,8 @@ public abstract class EntityInsentient extends EntityLiving { +@@ -861,7 +861,8 @@ public abstract class EntityInsentient extends EntityLiving { if (goalFloat.validConditions()) goalFloat.update(); this.getControllerJump().jumpIfSet(); } @@ -19,7 +19,7 @@ index a6ea96683b0f4d35015dff6168f3bf458346fb6f..95c08c31cb4d9df73f0af8f0e3b61236 } return; diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index e866531958c9d0171d39ba7f6963fe92eb2d42cc..d0adfc802371f562fe87c3f8ebe2368ff133776a 100644 +index 6447830095d02af5535fcf1f154b8c5260b90d33..bcd8938d71c617ad5c2fdc57f8153800765ffabb 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java @@ -2990,6 +2990,7 @@ public abstract class EntityLiving extends Entity { @@ -31,7 +31,7 @@ index e866531958c9d0171d39ba7f6963fe92eb2d42cc..d0adfc802371f562fe87c3f8ebe2368f return false; } diff --git a/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java b/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java -index 17f27d2bf5be746a0fa0e1e0fecab8158b2b3587..ad30cc92333aabf7d9fb3fb046e7ecb63629ee5b 100644 +index b13cd3f344a0e2c4c02b30f80ca9a81d93cc1954..d7aa3bd329eef71d58a8ea9be5735c58a598222b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntitySnowman.java @@ -108,7 +108,7 @@ public class EntitySnowman extends EntityGolem implements IShearable, IRangedEnt @@ -44,7 +44,7 @@ index 17f27d2bf5be746a0fa0e1e0fecab8158b2b3587..ad30cc92333aabf7d9fb3fb046e7ecb6 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityBlaze.java b/src/main/java/net/minecraft/world/entity/monster/EntityBlaze.java -index 45e69d2f8da4c5babfd2e67055cc0a4c6d3baac7..f90a0fcd41996cfb6935a2299306e6a4bf19701a 100644 +index 55b6f483aca8cbb5c30b3759e23c86a699e19569..09f8f792bb800a274f7b127bc925c07416906ed5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityBlaze.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityBlaze.java @@ -143,7 +143,7 @@ public class EntityBlaze extends EntityMonster { @@ -57,7 +57,7 @@ index 45e69d2f8da4c5babfd2e67055cc0a4c6d3baac7..f90a0fcd41996cfb6935a2299306e6a4 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java b/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java -index ea500a6080f73dcc35d83a3b5a170f57dedaa431..d290787f74579dd4c138eb827e44544814bfe315 100644 +index d8c568d821b859bac0a9839c42c9596cf964b16e..402a07551d9e78bac5e0f45e30b0abb7a4c82704 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java @@ -290,7 +290,7 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable { @@ -83,10 +83,10 @@ index 5e4cc99a746d98231bbb71672fbc02431e4fab48..f52ae7446c16d5b8ac51bd2e12bb51d2 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 235eba799c4b92738a57b62bc6bb572dd417a45b..aa73eb1ec79ae552d60c31d0168a0e91cdabb4f5 100644 +index 7b0babbd727421ecd05523eadbff3abb758fab6f..faa5df044857f19503b35bbcf7366ac13b2fa2a9 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -617,6 +617,7 @@ public class PurpurWorldConfig { +@@ -629,6 +629,7 @@ public class PurpurWorldConfig { public boolean blazeRidableInWater = false; public double blazeMaxY = 256D; public double blazeMaxHealth = 20.0D; @@ -94,7 +94,7 @@ index 235eba799c4b92738a57b62bc6bb572dd417a45b..aa73eb1ec79ae552d60c31d0168a0e91 private void blazeSettings() { blazeRidable = getBoolean("mobs.blaze.ridable", blazeRidable); blazeRidableInWater = getBoolean("mobs.blaze.ridable-in-water", blazeRidableInWater); -@@ -627,6 +628,7 @@ public class PurpurWorldConfig { +@@ -639,6 +640,7 @@ public class PurpurWorldConfig { set("mobs.blaze.attributes.max_health", oldValue); } blazeMaxHealth = getDouble("mobs.blaze.attributes.max_health", blazeMaxHealth); @@ -102,7 +102,7 @@ index 235eba799c4b92738a57b62bc6bb572dd417a45b..aa73eb1ec79ae552d60c31d0168a0e91 } public boolean catRidable = false; -@@ -841,6 +843,7 @@ public class PurpurWorldConfig { +@@ -853,6 +855,7 @@ public class PurpurWorldConfig { public boolean endermanBypassMobGriefing = false; public boolean endermanDespawnEvenWithBlock = false; public double endermanMaxHealth = 40.0D; @@ -110,7 +110,7 @@ index 235eba799c4b92738a57b62bc6bb572dd417a45b..aa73eb1ec79ae552d60c31d0168a0e91 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -853,6 +856,7 @@ public class PurpurWorldConfig { +@@ -865,6 +868,7 @@ public class PurpurWorldConfig { set("mobs.enderman.attributes.max_health", oldValue); } endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); @@ -118,7 +118,7 @@ index 235eba799c4b92738a57b62bc6bb572dd417a45b..aa73eb1ec79ae552d60c31d0168a0e91 } public boolean endermiteRidable = false; -@@ -1542,6 +1546,7 @@ public class PurpurWorldConfig { +@@ -1554,6 +1558,7 @@ public class PurpurWorldConfig { public float snowGolemSnowBallModifier = 10.0F; public double snowGolemAttackDistance = 1.25D; public double snowGolemMaxHealth = 4.0D; @@ -126,7 +126,7 @@ index 235eba799c4b92738a57b62bc6bb572dd417a45b..aa73eb1ec79ae552d60c31d0168a0e91 private void snowGolemSettings() { snowGolemRidable = getBoolean("mobs.snow_golem.ridable", snowGolemRidable); snowGolemRidableInWater = getBoolean("mobs.snow_golem.ridable-in-water", snowGolemRidableInWater); -@@ -1559,6 +1564,7 @@ public class PurpurWorldConfig { +@@ -1571,6 +1576,7 @@ public class PurpurWorldConfig { set("mobs.snow_golem.attributes.max_health", oldValue); } snowGolemMaxHealth = getDouble("mobs.snow_golem.attributes.max_health", snowGolemMaxHealth); @@ -134,7 +134,7 @@ index 235eba799c4b92738a57b62bc6bb572dd417a45b..aa73eb1ec79ae552d60c31d0168a0e91 } public boolean squidRidable = false; -@@ -1612,6 +1618,7 @@ public class PurpurWorldConfig { +@@ -1624,6 +1630,7 @@ public class PurpurWorldConfig { public int striderBreedingTicks = 6000; public boolean striderGiveSaddleBack = false; public double striderMaxHealth = 20.0D; @@ -142,7 +142,7 @@ index 235eba799c4b92738a57b62bc6bb572dd417a45b..aa73eb1ec79ae552d60c31d0168a0e91 private void striderSettings() { striderRidable = getBoolean("mobs.strider.ridable", striderRidable); striderRidableInWater = getBoolean("mobs.strider.ridable-in-water", striderRidableInWater); -@@ -1623,6 +1630,7 @@ public class PurpurWorldConfig { +@@ -1635,6 +1642,7 @@ public class PurpurWorldConfig { set("mobs.strider.attributes.max_health", oldValue); } striderMaxHealth = getDouble("mobs.strider.attributes.max_health", striderMaxHealth); diff --git a/patches/server/0169-Config-to-always-tame-in-Creative.patch b/patches/server/0168-Config-to-always-tame-in-Creative.patch similarity index 93% rename from patches/server/0169-Config-to-always-tame-in-Creative.patch rename to patches/server/0168-Config-to-always-tame-in-Creative.patch index ee61a022f3..97db59cb96 100644 --- a/patches/server/0169-Config-to-always-tame-in-Creative.patch +++ b/patches/server/0168-Config-to-always-tame-in-Creative.patch @@ -20,7 +20,7 @@ index d285f5aa66fa81a2f56920c05afb4506cb82fa54..39e348847bcecd91013452e71ef16729 return; } diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityCat.java b/src/main/java/net/minecraft/world/entity/animal/EntityCat.java -index 7143b0801be7877762e41da336ea5e4e57f2e463..a099d8e0c5a3e4b804c8af978161ec1747ee7fa3 100644 +index a4e3e36f081803b0588a0e907a3a834b7a3ab3eb..84784e91eb6c4bee7e66a6dee8736b948414a7a5 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityCat.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityCat.java @@ -439,7 +439,7 @@ public class EntityCat extends EntityTameableAnimal { @@ -33,7 +33,7 @@ index 7143b0801be7877762e41da336ea5e4e57f2e463..a099d8e0c5a3e4b804c8af978161ec17 this.setWillSit(true); this.world.broadcastEntityEffect(this, (byte) 7); diff --git a/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java b/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java -index efa4318989893c946e9d7671d0dead6c4a6e315f..b2a8bfc3e53a2071ab7451fbdb3d49d97f0c430a 100644 +index 7500de8bcdd32f08bf6d32e70cfe09baf097cc2b..2f51e80a02817f1e36c8fe9542809ab881263a16 100644 --- a/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/EntityParrot.java @@ -301,7 +301,7 @@ public class EntityParrot extends EntityPerchable implements EntityBird { @@ -59,10 +59,10 @@ index 090903fbc8f6cd1522c7afb358f708f5ae3395f4..884a3f03c73efb8fb0863976615fba5e this.navigation.o(); this.setGoalTarget((EntityLiving) null); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index aa73eb1ec79ae552d60c31d0168a0e91cdabb4f5..447188e570bbab37a225f9c2583a8481a90a22ef 100644 +index faa5df044857f19503b35bbcf7366ac13b2fa2a9..88e28b680e144e1b0bb919e93644b86a48b553e1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -289,6 +289,7 @@ public class PurpurWorldConfig { +@@ -299,6 +299,7 @@ public class PurpurWorldConfig { } public boolean useBetterMending = false; @@ -70,7 +70,7 @@ index aa73eb1ec79ae552d60c31d0168a0e91cdabb4f5..447188e570bbab37a225f9c2583a8481 public boolean boatEjectPlayersOnLand = false; public boolean boatsDoFallDamage = true; public boolean disableDropsOnCrammingDeath = false; -@@ -305,6 +306,7 @@ public class PurpurWorldConfig { +@@ -316,6 +317,7 @@ public class PurpurWorldConfig { public int animalBreedingCooldownSeconds = 0; private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); diff --git a/patches/server/0170-End-crystal-explosion-options.patch b/patches/server/0169-End-crystal-explosion-options.patch similarity index 97% rename from patches/server/0170-End-crystal-explosion-options.patch rename to patches/server/0169-End-crystal-explosion-options.patch index 0aa2171260..30f429f991 100644 --- a/patches/server/0170-End-crystal-explosion-options.patch +++ b/patches/server/0169-End-crystal-explosion-options.patch @@ -52,10 +52,10 @@ index 2c983e6a092464d1867fcbe875b2e1461ec8556b..a92c900a6092c07b34711428fac268f4 this.a(damagesource); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 447188e570bbab37a225f9c2583a8481a90a22ef..d98671c6db4d86a9324f120c68e610364337bee6 100644 +index 88e28b680e144e1b0bb919e93644b86a48b553e1..266b64abb949fca2cc667395d175c962c55435db 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1963,4 +1963,33 @@ public class PurpurWorldConfig { +@@ -1975,4 +1975,33 @@ public class PurpurWorldConfig { private void imposeTeleportRestrictionsOnGateways() { imposeTeleportRestrictionsOnGateways = getBoolean("gameplay-mechanics.impose-teleport-restrictions-on-gateways", imposeTeleportRestrictionsOnGateways); } diff --git a/patches/server/0171-Add-unsafe-Entity-serialization-API.patch b/patches/server/0170-Add-unsafe-Entity-serialization-API.patch similarity index 96% rename from patches/server/0171-Add-unsafe-Entity-serialization-API.patch rename to patches/server/0170-Add-unsafe-Entity-serialization-API.patch index 210d0d565a..0cdc1d0da8 100644 --- a/patches/server/0171-Add-unsafe-Entity-serialization-API.patch +++ b/patches/server/0170-Add-unsafe-Entity-serialization-API.patch @@ -29,10 +29,10 @@ index e1ef642f06078202fb782ac16b268e6429c5e202..778c981d4458957533fc3ac44095051b return SystemUtils.a(a(nbttagcompound).map((entitytypes) -> { return entitytypes.a(world); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index a80f664d2cf713fd751421be3735e2f4779f0056..6c37bf58bd269c2d7e1c84e5791e8245e4c75aea 100644 +index 4a70d657fd83627e8d66b52cb5f87381b43ad76a..af69023b241560031f6aa116561d7407b2502578 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -1200,5 +1200,12 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -1196,5 +1196,12 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { public boolean isRidableInWater() { return getHandle().isRidableInWater(); } @@ -46,7 +46,7 @@ index a80f664d2cf713fd751421be3735e2f4779f0056..6c37bf58bd269c2d7e1c84e5791e8245 // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 67f93f252a26f8b598a4b48c63c321728b246cae..b05b6e911026b8b8ad2e12b7a6705364ec90769d 100644 +index ed290f61ec5adcb3033c7cb7e0fcca8d9722c234..2ccceec865a44edfe606beac06508c30a5e398f0 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -410,9 +410,14 @@ public final class CraftMagicNumbers implements UnsafeValues { diff --git a/patches/server/0172-Add-ghast-allow-griefing-option.patch b/patches/server/0171-Add-ghast-allow-griefing-option.patch similarity index 92% rename from patches/server/0172-Add-ghast-allow-griefing-option.patch rename to patches/server/0171-Add-ghast-allow-griefing-option.patch index c60936e16f..fc94c688b2 100644 --- a/patches/server/0172-Add-ghast-allow-griefing-option.patch +++ b/patches/server/0171-Add-ghast-allow-griefing-option.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add ghast allow-griefing option diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityGhast.java b/src/main/java/net/minecraft/world/entity/monster/EntityGhast.java -index 5c39a9aec865d25a9aa5edcfd3a0fd6d1166cbd1..4bc8b6ec44a03390ced313e84b03ab6662a3c0a2 100644 +index e83d9aae4a04fc67587d40cec1f24ba5ebb58e10..5834b38ab206a9db6d3e336074095ce85bdbcc50 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityGhast.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityGhast.java @@ -230,6 +230,7 @@ public class EntityGhast extends EntityFlying implements IMonster { @@ -38,10 +38,10 @@ index 61f06eacb4ea4ef869b60c9014cc23b25583eead..627915ee205fdcc93c5424ad7d7ea057 // CraftBukkit start - fire ExplosionPrimeEvent ExplosionPrimeEvent event = new ExplosionPrimeEvent((org.bukkit.entity.Explosive) this.getBukkitEntity()); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index d98671c6db4d86a9324f120c68e610364337bee6..fa3c9dbcdea3701cdecd2e4324690528af47247f 100644 +index 266b64abb949fca2cc667395d175c962c55435db..23f7a3af8f92fd6e89601b0e1b4b2d1635dfe0b0 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -914,6 +914,7 @@ public class PurpurWorldConfig { +@@ -926,6 +926,7 @@ public class PurpurWorldConfig { public boolean ghastRidable = false; public boolean ghastRidableInWater = false; public double ghastMaxY = 256D; @@ -49,7 +49,7 @@ index d98671c6db4d86a9324f120c68e610364337bee6..fa3c9dbcdea3701cdecd2e4324690528 public double ghastMaxHealth = 10.0D; private void ghastSettings() { ghastRidable = getBoolean("mobs.ghast.ridable", ghastRidable); -@@ -924,6 +925,7 @@ public class PurpurWorldConfig { +@@ -936,6 +937,7 @@ public class PurpurWorldConfig { set("mobs.ghast.attributes.max-health", null); set("mobs.ghast.attributes.max_health", oldValue); } diff --git a/patches/server/0173-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch b/patches/server/0172-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch similarity index 83% rename from patches/server/0173-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch rename to patches/server/0172-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch index 2b0fb75afb..d05ebea2ce 100644 --- a/patches/server/0173-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch +++ b/patches/server/0172-Configs-for-if-Wither-Ender-Dragon-can-ride-vehicles.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configs for if Wither/Ender Dragon can ride vehicles diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index fdd374232ced8f4da675afaee3f5278c036ef112..f3151969e5841861d31ac50abdfef3c65e5198a3 100644 +index 90d625a7d653a9eb2763f806e635795e2a5f32e3..3d9116d9e562e70cd20a6fa8ca561dff04f20907 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2401,7 +2401,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2400,7 +2400,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } } @@ -18,7 +18,7 @@ index fdd374232ced8f4da675afaee3f5278c036ef112..f3151969e5841861d31ac50abdfef3c6 } diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java -index a81d782877ff6116477792fa4cec0846e56ed384..6b0a71ce1c51e587ee17c8d60aaa52bbc87fb321 100644 +index 0614483830336f3bbd348319ca3eed8767568852..d27f61959e924e1ce6c7d76c905d98a762823e91 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EntityEnderDragon.java @@ -1073,6 +1073,7 @@ public class EntityEnderDragon extends EntityInsentient implements IMonster { @@ -30,10 +30,10 @@ index a81d782877ff6116477792fa4cec0846e56ed384..6b0a71ce1c51e587ee17c8d60aaa52bb } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java b/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java -index fa6b72c7a12b20f8ccffa360a3895e4d8f4277e4..4a3e0f7f59ca4fd64be62a580d08b6ab84649ee8 100644 +index 9a152b7cd351380e696640a51e5f8b64225f25f0..e34e25d62bd677fc7373e73b4118898a4f7f4d26 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/EntityWither.java -@@ -730,6 +730,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { +@@ -728,6 +728,7 @@ public class EntityWither extends EntityMonster implements IRangedEntity { @Override protected boolean n(Entity entity) { @@ -42,10 +42,10 @@ index fa6b72c7a12b20f8ccffa360a3895e4d8f4277e4..4a3e0f7f59ca4fd64be62a580d08b6ab } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index fa3c9dbcdea3701cdecd2e4324690528af47247f..b82cf670d693096884f801e72efbcb535d0952a7 100644 +index 23f7a3af8f92fd6e89601b0e1b4b2d1635dfe0b0..b2d7e4ee4ecef476d633278c960130110c862520 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -821,6 +821,7 @@ public class PurpurWorldConfig { +@@ -833,6 +833,7 @@ public class PurpurWorldConfig { public boolean enderDragonAlwaysDropsFullExp = false; public boolean enderDragonBypassMobGriefing = false; public double enderDragonMaxHealth = 200.0D; @@ -53,7 +53,7 @@ index fa3c9dbcdea3701cdecd2e4324690528af47247f..b82cf670d693096884f801e72efbcb53 private void enderDragonSettings() { enderDragonRidable = getBoolean("mobs.ender_dragon.ridable", enderDragonRidable); enderDragonRidableInWater = getBoolean("mobs.ender_dragon.ridable-in-water", enderDragonRidableInWater); -@@ -837,6 +838,7 @@ public class PurpurWorldConfig { +@@ -849,6 +850,7 @@ public class PurpurWorldConfig { set("mobs.ender_dragon.attributes.max_health", oldValue); } enderDragonMaxHealth = getDouble("mobs.ender_dragon.attributes.max_health", enderDragonMaxHealth); @@ -61,7 +61,7 @@ index fa3c9dbcdea3701cdecd2e4324690528af47247f..b82cf670d693096884f801e72efbcb53 } public boolean endermanRidable = false; -@@ -1781,6 +1783,7 @@ public class PurpurWorldConfig { +@@ -1793,6 +1795,7 @@ public class PurpurWorldConfig { public float witherHealthRegenAmount = 1.0f; public int witherHealthRegenDelay = 20; public double witherMaxHealth = 300.0D; @@ -69,7 +69,7 @@ index fa3c9dbcdea3701cdecd2e4324690528af47247f..b82cf670d693096884f801e72efbcb53 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -1798,6 +1801,7 @@ public class PurpurWorldConfig { +@@ -1810,6 +1813,7 @@ public class PurpurWorldConfig { set("mobs.wither.attributes.max_health", oldValue); } witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth); diff --git a/patches/server/0174-Dont-run-with-scissors.patch b/patches/server/0173-Dont-run-with-scissors.patch similarity index 83% rename from patches/server/0174-Dont-run-with-scissors.patch rename to patches/server/0173-Dont-run-with-scissors.patch index d621022418..370a0f7961 100644 --- a/patches/server/0174-Dont-run-with-scissors.patch +++ b/patches/server/0173-Dont-run-with-scissors.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Dont run with scissors! diff --git a/src/main/java/net/minecraft/server/network/PlayerConnection.java b/src/main/java/net/minecraft/server/network/PlayerConnection.java -index 5a2f84cd1456b072084e2db53a24c9863cb75563..40ad7f050b7f11f2810b07970c9e29354525de98 100644 +index fbfb3eba79ded3720edf93b3d1c18cbc02c086dd..0bed1f132200876122f92f0ca539e53afa222c14 100644 --- a/src/main/java/net/minecraft/server/network/PlayerConnection.java +++ b/src/main/java/net/minecraft/server/network/PlayerConnection.java -@@ -1547,6 +1547,12 @@ public class PlayerConnection implements PacketListenerPlayIn { +@@ -1552,6 +1552,12 @@ public class PlayerConnection implements PacketListenerPlayIn { this.player.fallDistance = 0.0F; } @@ -22,21 +22,21 @@ index 5a2f84cd1456b072084e2db53a24c9863cb75563..40ad7f050b7f11f2810b07970c9e2935 this.o = this.player.locX(); this.p = this.player.locY(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index b82cf670d693096884f801e72efbcb535d0952a7..6e37207d2c1d83a18d39cde4436b9b16c693df77 100644 +index b2d7e4ee4ecef476d633278c960130110c862520..02ebb0fc704b5e77cf508893d67feef036df80ed 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -202,6 +202,8 @@ public class PurpurWorldConfig { - public List itemImmuneToCactus = new ArrayList<>(); +@@ -203,6 +203,8 @@ public class PurpurWorldConfig { public List itemImmuneToExplosion = new ArrayList<>(); public List itemImmuneToFire = new ArrayList<>(); + public List itemImmuneToLightning = new ArrayList<>(); + public boolean dontRunWithScissors = false; + public double scissorsRunningDamage = 1D; private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -230,6 +232,8 @@ public class PurpurWorldConfig { +@@ -240,6 +242,8 @@ public class PurpurWorldConfig { Item item = IRegistry.ITEM.get(new MinecraftKey(key.toString())); - if (item != Items.AIR) itemImmuneToFire.add(item); + if (item != Items.AIR) itemImmuneToLightning.add(item); }); + dontRunWithScissors = getBoolean("gameplay-mechanics.item.shears.damage-if-sprinting", dontRunWithScissors); + scissorsRunningDamage = getDouble("gameplay-mechanics.item.shears.sprinting-damage", scissorsRunningDamage); diff --git a/patches/server/0175-One-Punch-Man.patch b/patches/server/0174-One-Punch-Man.patch similarity index 85% rename from patches/server/0175-One-Punch-Man.patch rename to patches/server/0174-One-Punch-Man.patch index a338b15bdf..0518f43c53 100644 --- a/patches/server/0175-One-Punch-Man.patch +++ b/patches/server/0174-One-Punch-Man.patch @@ -5,7 +5,7 @@ Subject: [PATCH] One Punch Man! diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index d0adfc802371f562fe87c3f8ebe2368ff133776a..93f8aa6d40b1eba6535f170bf0a79417d7d21069 100644 +index bcd8938d71c617ad5c2fdc57f8153800765ffabb..008c97dc6f5b9c08c86d6c2743a6389086d3359e 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java @@ -2032,6 +2032,23 @@ public abstract class EntityLiving extends Entity { @@ -33,7 +33,7 @@ index d0adfc802371f562fe87c3f8ebe2368ff133776a..93f8aa6d40b1eba6535f170bf0a79417 if (human) { // PAIL: Be sure to drag all this code from the EntityHuman subclass each update. diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 132972755ac74838f3386e0fac5033380b71fce5..26fff0540e3d8863e83b0a60df2205422d50f1e1 100644 +index a4c41caae425e054db3f40a9abc41f45ccd20730..2e4bc664412feb8657c7b9995d281203a14d48fd 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -897,6 +897,7 @@ public final class ItemStack { @@ -45,19 +45,19 @@ index 132972755ac74838f3386e0fac5033380b71fce5..26fff0540e3d8863e83b0a60df220542 Object object; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 6e37207d2c1d83a18d39cde4436b9b16c693df77..087ab9b2b9be1a02f472563226fb7d8fb96a4dc3 100644 +index 02ebb0fc704b5e77cf508893d67feef036df80ed..f577b1054f8bdd2be933f7dae3ffe18dfeb87fe5 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -308,6 +308,7 @@ public class PurpurWorldConfig { - public double voidDamageHeight = -64.0D; +@@ -319,6 +319,7 @@ public class PurpurWorldConfig { + public double voidDamageDealt = 4.0D; public int raidCooldownSeconds = 0; public int animalBreedingCooldownSeconds = 0; + public boolean creativeOnePunch = false; private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative); -@@ -325,6 +326,7 @@ public class PurpurWorldConfig { - voidDamageHeight = getDouble("gameplay-mechanics.void-damage-height", voidDamageHeight); +@@ -337,6 +338,7 @@ public class PurpurWorldConfig { + voidDamageDealt = getDouble("gameplay-mechanics.void-damage-dealt", voidDamageDealt); raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds); + creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); diff --git a/patches/server/0176-Add-config-for-snow-on-blue-ice.patch b/patches/server/0175-Add-config-for-snow-on-blue-ice.patch similarity index 94% rename from patches/server/0176-Add-config-for-snow-on-blue-ice.patch rename to patches/server/0175-Add-config-for-snow-on-blue-ice.patch index f40427dcd8..45beedc6b9 100644 --- a/patches/server/0176-Add-config-for-snow-on-blue-ice.patch +++ b/patches/server/0175-Add-config-for-snow-on-blue-ice.patch @@ -29,10 +29,10 @@ index d44b88185ce58346007c6ef70b76f8e0df23e95c..4b7497acc5b26da48375625b4a31fb05 @Override diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 087ab9b2b9be1a02f472563226fb7d8fb96a4dc3..c207b7004cd6da7de11bbe88ae7b84a1a9874bbc 100644 +index f577b1054f8bdd2be933f7dae3ffe18dfeb87fe5..8cf40f10dccd9b4f52507e432dcfd6b2015e90f2 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -465,6 +465,11 @@ public class PurpurWorldConfig { +@@ -477,6 +477,11 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0177-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch b/patches/server/0176-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch similarity index 94% rename from patches/server/0177-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch rename to patches/server/0176-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch index 7a071516c2..e7f886dc58 100644 --- a/patches/server/0177-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch +++ b/patches/server/0176-Configurable-Ender-Pearl-cooldown-damage-and-Endermi.patch @@ -43,11 +43,11 @@ index 9896d77381e7fadf1ef2619210713e190c1445d0..61512c6755f29cb2c228ae3e80b1e083 // Paper end if (entityhuman instanceof net.minecraft.server.level.EntityPlayer) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index c207b7004cd6da7de11bbe88ae7b84a1a9874bbc..ecbf06ad3c649f1175ac0885591ed6f1190c737a 100644 +index 8cf40f10dccd9b4f52507e432dcfd6b2015e90f2..129fef2e4da94bcd80153379a7246590e4ea9cdd 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -204,6 +204,10 @@ public class PurpurWorldConfig { - public List itemImmuneToFire = new ArrayList<>(); +@@ -205,6 +205,10 @@ public class PurpurWorldConfig { + public List itemImmuneToLightning = new ArrayList<>(); public boolean dontRunWithScissors = false; public double scissorsRunningDamage = 1D; + public float enderPearlDamage = 5.0F; @@ -57,7 +57,7 @@ index c207b7004cd6da7de11bbe88ae7b84a1a9874bbc..ecbf06ad3c649f1175ac0885591ed6f1 private void itemSettings() { itemImmuneToCactus.clear(); getList("gameplay-mechanics.item.immune.cactus", new ArrayList<>()).forEach(key -> { -@@ -234,6 +238,10 @@ public class PurpurWorldConfig { +@@ -244,6 +248,10 @@ public class PurpurWorldConfig { }); dontRunWithScissors = getBoolean("gameplay-mechanics.item.shears.damage-if-sprinting", dontRunWithScissors); scissorsRunningDamage = getDouble("gameplay-mechanics.item.shears.sprinting-damage", scissorsRunningDamage); diff --git a/patches/server/0178-Config-to-ignore-nearby-mobs-when-sleeping.patch b/patches/server/0177-Config-to-ignore-nearby-mobs-when-sleeping.patch similarity index 85% rename from patches/server/0178-Config-to-ignore-nearby-mobs-when-sleeping.patch rename to patches/server/0177-Config-to-ignore-nearby-mobs-when-sleeping.patch index 62adf4ee46..0f9d3ecc99 100644 --- a/patches/server/0178-Config-to-ignore-nearby-mobs-when-sleeping.patch +++ b/patches/server/0177-Config-to-ignore-nearby-mobs-when-sleeping.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Config to ignore nearby mobs when sleeping diff --git a/src/main/java/net/minecraft/server/level/EntityPlayer.java b/src/main/java/net/minecraft/server/level/EntityPlayer.java -index ea9523fc977ec4a96bf113c33d0f9643f0cf7419..9e2c11fb728af209207627331c0acc98314ca125 100644 +index 75871b1556f7c54a13488d9f985051f732d68d67..1288c946865c2be32fafbd7dbe419a98c8050194 100644 --- a/src/main/java/net/minecraft/server/level/EntityPlayer.java +++ b/src/main/java/net/minecraft/server/level/EntityPlayer.java -@@ -1441,7 +1441,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { +@@ -1439,7 +1439,7 @@ public class EntityPlayer extends EntityHuman implements ICrafting { return entitymonster.f((EntityHuman) this); }); @@ -18,10 +18,10 @@ index ea9523fc977ec4a96bf113c33d0f9643f0cf7419..9e2c11fb728af209207627331c0acc98 } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index ecbf06ad3c649f1175ac0885591ed6f1190c737a..feff8cc3a8e38c67f06e08a593b51e99c4d8381f 100644 +index 129fef2e4da94bcd80153379a7246590e4ea9cdd..eaaaf9e5490095cd70ca892fa927017e6ea9de9d 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -317,6 +317,7 @@ public class PurpurWorldConfig { +@@ -328,6 +328,7 @@ public class PurpurWorldConfig { public int raidCooldownSeconds = 0; public int animalBreedingCooldownSeconds = 0; public boolean creativeOnePunch = false; @@ -29,7 +29,7 @@ index ecbf06ad3c649f1175ac0885591ed6f1190c737a..feff8cc3a8e38c67f06e08a593b51e99 private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative); -@@ -335,6 +336,7 @@ public class PurpurWorldConfig { +@@ -347,6 +348,7 @@ public class PurpurWorldConfig { raidCooldownSeconds = getInt("gameplay-mechanics.raid-cooldown-seconds", raidCooldownSeconds); animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds); creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); diff --git a/patches/server/0179-Config-for-Enderman-to-aggro-spawned-Endermites.patch b/patches/server/0178-Config-for-Enderman-to-aggro-spawned-Endermites.patch similarity index 89% rename from patches/server/0179-Config-for-Enderman-to-aggro-spawned-Endermites.patch rename to patches/server/0178-Config-for-Enderman-to-aggro-spawned-Endermites.patch index 54951ea3f2..95fbae18c8 100644 --- a/patches/server/0179-Config-for-Enderman-to-aggro-spawned-Endermites.patch +++ b/patches/server/0178-Config-for-Enderman-to-aggro-spawned-Endermites.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Config for Enderman to aggro spawned Endermites By default, Enderman do not attack Endermites unless spawned by an Ender Pearl. diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java b/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java -index d290787f74579dd4c138eb827e44544814bfe315..46143a710e057378ebe0ad644de275604b11d886 100644 +index 402a07551d9e78bac5e0f45e30b0abb7a4c82704..f113d5106bbee6fb0a5267547154f0839d03d089 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java @@ -72,7 +72,7 @@ public class EntityEnderman extends EntityMonster implements IEntityAngerable { @@ -19,10 +19,10 @@ index d290787f74579dd4c138eb827e44544814bfe315..46143a710e057378ebe0ad644de27560 private int br = Integer.MIN_VALUE; private int bs; diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index feff8cc3a8e38c67f06e08a593b51e99c4d8381f..76d63988772452525ece58e5d717fd84f3bad2f6 100644 +index eaaaf9e5490095cd70ca892fa927017e6ea9de9d..bb8ad6a4ac87c4c34d12c5fc1dd92f3d63b84bc1 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -869,6 +869,7 @@ public class PurpurWorldConfig { +@@ -881,6 +881,7 @@ public class PurpurWorldConfig { public boolean endermanDespawnEvenWithBlock = false; public double endermanMaxHealth = 40.0D; public boolean endermanTakeDamageFromWater = true; @@ -30,7 +30,7 @@ index feff8cc3a8e38c67f06e08a593b51e99c4d8381f..76d63988772452525ece58e5d717fd84 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -882,6 +883,7 @@ public class PurpurWorldConfig { +@@ -894,6 +895,7 @@ public class PurpurWorldConfig { } endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); endermanTakeDamageFromWater = getBoolean("mobs.enderman.takes-damage-from-water", endermanTakeDamageFromWater); diff --git a/patches/server/0180-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch b/patches/server/0179-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch similarity index 91% rename from patches/server/0180-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch rename to patches/server/0179-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch index 2327ecb734..2dfe053f1a 100644 --- a/patches/server/0180-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch +++ b/patches/server/0179-Config-to-ignore-Dragon-Head-wearers-and-stare-aggro.patch @@ -7,7 +7,7 @@ Prevents Enderman from becoming aggresive towards players that are wearing a Dra Adds functionality to a useless item! diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java b/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java -index 46143a710e057378ebe0ad644de275604b11d886..0ed19429c1a9021e636fdfffa582b4e093fbc2e7 100644 +index f113d5106bbee6fb0a5267547154f0839d03d089..bd03e91861237eeda50e607af4e26c1ad2d71297 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityEnderman.java @@ -50,6 +50,7 @@ import net.minecraft.world.entity.ai.goal.target.PathfinderGoalUniversalAngerRes @@ -28,10 +28,10 @@ index 46143a710e057378ebe0ad644de275604b11d886..0ed19429c1a9021e636fdfffa582b4e0 } else { Vec3D vec3d = entityhuman.f(1.0F).d(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 76d63988772452525ece58e5d717fd84f3bad2f6..673d55a3458dcb4bca61779757d3329598bd305d 100644 +index bb8ad6a4ac87c4c34d12c5fc1dd92f3d63b84bc1..838f97829dcb2926a56e3c34c4cbcdb9a13d6d84 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -870,6 +870,8 @@ public class PurpurWorldConfig { +@@ -882,6 +882,8 @@ public class PurpurWorldConfig { public double endermanMaxHealth = 40.0D; public boolean endermanTakeDamageFromWater = true; public boolean endermanAggroSpawnedEndermites = false; @@ -40,7 +40,7 @@ index 76d63988772452525ece58e5d717fd84f3bad2f6..673d55a3458dcb4bca61779757d33295 private void endermanSettings() { endermanRidable = getBoolean("mobs.enderman.ridable", endermanRidable); endermanRidableInWater = getBoolean("mobs.enderman.ridable-in-water", endermanRidableInWater); -@@ -884,6 +886,8 @@ public class PurpurWorldConfig { +@@ -896,6 +898,8 @@ public class PurpurWorldConfig { endermanMaxHealth = getDouble("mobs.enderman.attributes.max_health", endermanMaxHealth); endermanTakeDamageFromWater = getBoolean("mobs.enderman.takes-damage-from-water", endermanTakeDamageFromWater); endermanAggroSpawnedEndermites = getBoolean("mobs.enderman.aggressive-towards-spawned-endermites", endermanAggroSpawnedEndermites); diff --git a/patches/server/0181-Re-enable-timings-by-default.patch b/patches/server/0180-Re-enable-timings-by-default.patch similarity index 100% rename from patches/server/0181-Re-enable-timings-by-default.patch rename to patches/server/0180-Re-enable-timings-by-default.patch diff --git a/patches/server/0182-Tick-fluids-config.patch b/patches/server/0181-Tick-fluids-config.patch similarity index 95% rename from patches/server/0182-Tick-fluids-config.patch rename to patches/server/0181-Tick-fluids-config.patch index bdd95da414..4f9630e591 100644 --- a/patches/server/0182-Tick-fluids-config.patch +++ b/patches/server/0181-Tick-fluids-config.patch @@ -36,10 +36,10 @@ index 0ed8d938b8fafdb03e01a00a201ba3f8597ac6e9..0eff89bf9e114271c34c37cad1b98691 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 673d55a3458dcb4bca61779757d3329598bd305d..4d40319188375b71cb7feeecf1907693c3cbd021 100644 +index 838f97829dcb2926a56e3c34c4cbcdb9a13d6d84..d9fee278a2a5c04cc1a1796df2a6a77b432f47cc 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -295,6 +295,11 @@ public class PurpurWorldConfig { +@@ -305,6 +305,11 @@ public class PurpurWorldConfig { witherSkullDespawnRate = getInt("gameplay-mechanics.projectile-despawn-rates.wither_skull", witherSkullDespawnRate); } diff --git a/patches/server/0183-Config-to-disable-Llama-caravans.patch b/patches/server/0182-Config-to-disable-Llama-caravans.patch similarity index 91% rename from patches/server/0183-Config-to-disable-Llama-caravans.patch rename to patches/server/0182-Config-to-disable-Llama-caravans.patch index 7dedb9e66b..baaca271c1 100644 --- a/patches/server/0183-Config-to-disable-Llama-caravans.patch +++ b/patches/server/0182-Config-to-disable-Llama-caravans.patch @@ -19,7 +19,7 @@ index 34a854131dd939693a6df4d52103714ebe373dc3..ea02a78c31ed43220a2b83be4bd2a896 List list = this.a.world.getEntities(this.a, this.a.getBoundingBox().grow(9.0D, 4.0D, 9.0D), (entity) -> { EntityTypes entitytypes = entity.getEntityType(); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java b/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java -index 762fed5ba27474951c1962e6f034e8494b1035d6..567a1da3c167c20ae3fb86c2a1f3608ebb1056b6 100644 +index 4bea68fa35177d84a35dc5ced3e501a87e2a5391..f91e9dc5ae635329257f6b78b88c9c7c89e2f43d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/EntityLlama.java @@ -518,7 +518,7 @@ public class EntityLlama extends EntityHorseChestedAbstract implements IRangedEn @@ -32,10 +32,10 @@ index 762fed5ba27474951c1962e6f034e8494b1035d6..567a1da3c167c20ae3fb86c2a1f3608e this.bB.bC = this; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 4d40319188375b71cb7feeecf1907693c3cbd021..1ac22df208eccccfa290c1e3e5a15b6d2b675b9e 100644 +index d9fee278a2a5c04cc1a1796df2a6a77b432f47cc..c58a64f8ff38cde2de70ef9e06c1a6ca9e263669 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1109,6 +1109,7 @@ public class PurpurWorldConfig { +@@ -1121,6 +1121,7 @@ public class PurpurWorldConfig { public boolean llamaRidable = false; public boolean llamaRidableInWater = false; @@ -43,7 +43,7 @@ index 4d40319188375b71cb7feeecf1907693c3cbd021..1ac22df208eccccfa290c1e3e5a15b6d public int llamaBreedingTicks = 6000; public double llamaMaxHealthMin = 15.0D; public double llamaMaxHealthMax = 30.0D; -@@ -1119,6 +1120,7 @@ public class PurpurWorldConfig { +@@ -1131,6 +1132,7 @@ public class PurpurWorldConfig { private void llamaSettings() { llamaRidable = getBoolean("mobs.llama.ridable", llamaRidable); llamaRidableInWater = getBoolean("mobs.llama.ridable-in-water", llamaRidableInWater); diff --git a/patches/server/0184-Config-to-make-Creepers-explode-on-death.patch b/patches/server/0183-Config-to-make-Creepers-explode-on-death.patch similarity index 93% rename from patches/server/0184-Config-to-make-Creepers-explode-on-death.patch rename to patches/server/0183-Config-to-make-Creepers-explode-on-death.patch index 35b5b28081..d2b096238a 100644 --- a/patches/server/0184-Config-to-make-Creepers-explode-on-death.patch +++ b/patches/server/0183-Config-to-make-Creepers-explode-on-death.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Config to make Creepers explode on death Creepers exploded after being killed in the alpha days. This brings that back. diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java b/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java -index 62d40f726355283baddde349c52bee0599bb293c..014091f35ee5aac0ee2f155ccec2daf586e4d3d3 100644 +index d049aac0208386198d1da4e9470e64898d27b1c9..27d5e9fc5ec1396e95180fc14e8a61b030cfd1e6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java @@ -7,6 +7,7 @@ import net.minecraft.network.syncher.DataWatcher; @@ -57,10 +57,10 @@ index 62d40f726355283baddde349c52bee0599bb293c..014091f35ee5aac0ee2f155ccec2daf5 private void createEffectCloud() { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 1ac22df208eccccfa290c1e3e5a15b6d2b675b9e..f32c331bb904326070cacf00337a207af8509226 100644 +index c58a64f8ff38cde2de70ef9e06c1a6ca9e263669..1fcd11d5f14458cd42e8ff54d4f244067ab0736e 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -745,12 +745,14 @@ public class PurpurWorldConfig { +@@ -757,12 +757,14 @@ public class PurpurWorldConfig { public boolean creeperRidable = false; public boolean creeperRidableInWater = false; diff --git a/patches/server/0185-Configurable-ravager-griefable-blocks-list.patch b/patches/server/0184-Configurable-ravager-griefable-blocks-list.patch similarity index 92% rename from patches/server/0185-Configurable-ravager-griefable-blocks-list.patch rename to patches/server/0184-Configurable-ravager-griefable-blocks-list.patch index 4dd4625590..b2374c463f 100644 --- a/patches/server/0185-Configurable-ravager-griefable-blocks-list.patch +++ b/patches/server/0184-Configurable-ravager-griefable-blocks-list.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable ravager griefable blocks list diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java b/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java -index 6809c93fe435d183a27204fb4460fd68a86aa04f..aee5e370907d238cb0a0fb55a45341c8f60ed7d0 100644 +index 16da85620c067b005ce029c8b9c5ea1642a794f0..c2a6f1cb399c2cd659e2b2191edbc2a687a40eeb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java +++ b/src/main/java/net/minecraft/world/entity/monster/EntityRavager.java -@@ -189,7 +189,7 @@ public class EntityRavager extends EntityRaider { +@@ -188,7 +188,7 @@ public class EntityRavager extends EntityRaider { IBlockData iblockdata = this.world.getType(blockposition); Block block = iblockdata.getBlock(); @@ -31,10 +31,10 @@ index 5f8366beeaac7153a0421554f9bf91fbf265edca..7fca4d1713e8061d9de825cdae484012 } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index f32c331bb904326070cacf00337a207af8509226..1199e500376d442ffdc5028bda3169ec7bc29985 100644 +index 1fcd11d5f14458cd42e8ff54d4f244067ab0736e..e360409a15feeb793bd3b4be82f9eda89b5660d7 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1450,6 +1450,7 @@ public class PurpurWorldConfig { +@@ -1462,6 +1462,7 @@ public class PurpurWorldConfig { public boolean ravagerRidableInWater = false; public boolean ravagerBypassMobGriefing = false; public double ravagerMaxHealth = 100.0D; @@ -42,7 +42,7 @@ index f32c331bb904326070cacf00337a207af8509226..1199e500376d442ffdc5028bda3169ec private void ravagerSettings() { ravagerRidable = getBoolean("mobs.ravager.ridable", ravagerRidable); ravagerRidableInWater = getBoolean("mobs.ravager.ridable-in-water", ravagerRidableInWater); -@@ -1460,6 +1461,23 @@ public class PurpurWorldConfig { +@@ -1472,6 +1473,23 @@ public class PurpurWorldConfig { set("mobs.ravager.attributes.max_health", oldValue); } ravagerMaxHealth = getDouble("mobs.ravager.attributes.max_health", ravagerMaxHealth); diff --git a/patches/server/0186-Sneak-to-bulk-process-composter.patch b/patches/server/0185-Sneak-to-bulk-process-composter.patch similarity index 95% rename from patches/server/0186-Sneak-to-bulk-process-composter.patch rename to patches/server/0185-Sneak-to-bulk-process-composter.patch index 36d164a238..0e61afadf0 100644 --- a/patches/server/0186-Sneak-to-bulk-process-composter.patch +++ b/patches/server/0185-Sneak-to-bulk-process-composter.patch @@ -44,10 +44,10 @@ index e4e519ba773388b8d26a8f794a6eff51e3d8f72e..c0b235d5edf3cd14021696d1b4f76ce3 // CraftBukkit start double rand = worldserver.getRandom().nextDouble(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 1199e500376d442ffdc5028bda3169ec7bc29985..e5fc4fbd6bb417607ced21d84ca0e85804d107cb 100644 +index e360409a15feeb793bd3b4be82f9eda89b5660d7..bb3c5d34b58ccf9bbaa1102e36b82a56f0dda7e3 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -490,6 +490,11 @@ public class PurpurWorldConfig { +@@ -502,6 +502,11 @@ public class PurpurWorldConfig { chestOpenWithBlockOnTop = getBoolean("blocks.chest.open-with-solid-block-on-top", chestOpenWithBlockOnTop); } diff --git a/patches/server/0187-Config-for-skipping-night.patch b/patches/server/0186-Config-for-skipping-night.patch similarity index 88% rename from patches/server/0187-Config-for-skipping-night.patch rename to patches/server/0186-Config-for-skipping-night.patch index c112d3b0d2..e468115857 100644 --- a/patches/server/0187-Config-for-skipping-night.patch +++ b/patches/server/0186-Config-for-skipping-night.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config for skipping night diff --git a/src/main/java/net/minecraft/server/level/WorldServer.java b/src/main/java/net/minecraft/server/level/WorldServer.java -index 028911ebe843751080564d90e96306524e5a2e21..f84066233f551be145a7db2694b3c7cb0c918128 100644 +index e76e54fb833ce69968d08f78836acf23e6436653..db91e4ca583f676fe74d35a2368b3c39ab58cd9a 100644 --- a/src/main/java/net/minecraft/server/level/WorldServer.java +++ b/src/main/java/net/minecraft/server/level/WorldServer.java @@ -1028,7 +1028,7 @@ public class WorldServer extends World implements GeneratorAccessSeed { @@ -18,10 +18,10 @@ index 028911ebe843751080564d90e96306524e5a2e21..f84066233f551be145a7db2694b3c7cb })) { // CraftBukkit start diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index e5fc4fbd6bb417607ced21d84ca0e85804d107cb..2932b5f7a5a10dcc83755066c692f5edf7fafa1a 100644 +index bb3c5d34b58ccf9bbaa1102e36b82a56f0dda7e3..c87ce9aed539f382e91fcfae956339068a618b79 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -323,6 +323,7 @@ public class PurpurWorldConfig { +@@ -334,6 +334,7 @@ public class PurpurWorldConfig { public int animalBreedingCooldownSeconds = 0; public boolean creativeOnePunch = false; public boolean playerSleepNearMonsters = false; @@ -29,7 +29,7 @@ index e5fc4fbd6bb417607ced21d84ca0e85804d107cb..2932b5f7a5a10dcc83755066c692f5ed private void miscGameplayMechanicsSettings() { useBetterMending = getBoolean("gameplay-mechanics.use-better-mending", useBetterMending); alwaysTameInCreative = getBoolean("gameplay-mechanics.always-tame-in-creative", alwaysTameInCreative); -@@ -342,6 +343,7 @@ public class PurpurWorldConfig { +@@ -354,6 +355,7 @@ public class PurpurWorldConfig { animalBreedingCooldownSeconds = getInt("gameplay-mechanics.animal-breeding-cooldown-seconds", animalBreedingCooldownSeconds); creativeOnePunch = getBoolean("gameplay-mechanics.player.one-punch-in-creative", creativeOnePunch); playerSleepNearMonsters = getBoolean("gameplay-mechanics.player.sleep-ignore-nearby-mobs", playerSleepNearMonsters); diff --git a/patches/server/0188-Add-config-for-villager-trading.patch b/patches/server/0187-Add-config-for-villager-trading.patch similarity index 87% rename from patches/server/0188-Add-config-for-villager-trading.patch rename to patches/server/0187-Add-config-for-villager-trading.patch index e28397b9ef..b96d228c3f 100644 --- a/patches/server/0188-Add-config-for-villager-trading.patch +++ b/patches/server/0187-Add-config-for-villager-trading.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add config for villager trading diff --git a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java -index 16933de70a23414859019e19545bfa5baa38091a..a02748bff911415d95bea344f179ad27ff9d6092 100644 +index f911cd4cf2ad82e81b09f92063abd573797fe5d6..4903d79ad1036df8f52aded6ddaca604d4a8434a 100644 --- a/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java +++ b/src/main/java/net/minecraft/world/entity/npc/EntityVillager.java @@ -373,7 +373,7 @@ public class EntityVillager extends EntityVillagerAbstract implements Reputation @@ -18,10 +18,10 @@ index 16933de70a23414859019e19545bfa5baa38091a..a02748bff911415d95bea344f179ad27 } diff --git a/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java b/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java -index b84916c0c58fd208ef5547299f8db8462d1c42fe..0b6b6aa6b358759c45bbcf4a9ffa53777c8efa1d 100644 +index f6e0a92037d22de102c42cc1953ea90919bd3a34..03e811e854034c6ca9cd11d35ed0a2dbd14c6097 100644 --- a/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/EntityVillagerTrader.java -@@ -142,7 +142,7 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { +@@ -146,7 +146,7 @@ public class EntityVillagerTrader extends EntityVillagerAbstract { return tryRide(entityhuman, enumhand); // Purpur } else { if (world.purpurConfig.villagerTraderRidable && itemstack.isEmpty()) return tryRide(entityhuman, enumhand); // Purpur @@ -31,10 +31,10 @@ index b84916c0c58fd208ef5547299f8db8462d1c42fe..0b6b6aa6b358759c45bbcf4a9ffa5377 this.openTrade(entityhuman, this.getScoreboardDisplayName(), 1); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2932b5f7a5a10dcc83755066c692f5edf7fafa1a..82f1a60b57c94f4e301b8048c6b1de15c9f7b41f 100644 +index c87ce9aed539f382e91fcfae956339068a618b79..c2314380e7064459dd104b09b900c5a28b592b71 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1760,6 +1760,7 @@ public class PurpurWorldConfig { +@@ -1772,6 +1772,7 @@ public class PurpurWorldConfig { public boolean villagerClericsFarmWarts = false; public boolean villagerClericFarmersThrowWarts = true; public double villagerMaxHealth = 20.0D; @@ -42,7 +42,7 @@ index 2932b5f7a5a10dcc83755066c692f5edf7fafa1a..82f1a60b57c94f4e301b8048c6b1de15 private void villagerSettings() { villagerRidable = getBoolean("mobs.villager.ridable", villagerRidable); villagerRidableInWater = getBoolean("mobs.villager.ridable-in-water", villagerRidableInWater); -@@ -1787,6 +1788,7 @@ public class PurpurWorldConfig { +@@ -1799,6 +1800,7 @@ public class PurpurWorldConfig { set("mobs.villager.attributes.max_health", oldValue); } villagerMaxHealth = getDouble("mobs.villager.attributes.max_health", villagerMaxHealth); @@ -50,7 +50,7 @@ index 2932b5f7a5a10dcc83755066c692f5edf7fafa1a..82f1a60b57c94f4e301b8048c6b1de15 } public boolean villagerTraderRidable = false; -@@ -1794,6 +1796,7 @@ public class PurpurWorldConfig { +@@ -1806,6 +1808,7 @@ public class PurpurWorldConfig { public boolean villagerTraderCanBeLeashed = false; public boolean villagerTraderFollowEmeraldBlock = false; public double villagerTraderMaxHealth = 20.0D; @@ -58,7 +58,7 @@ index 2932b5f7a5a10dcc83755066c692f5edf7fafa1a..82f1a60b57c94f4e301b8048c6b1de15 private void villagerTraderSettings() { villagerTraderRidable = getBoolean("mobs.wandering_trader.ridable", villagerTraderRidable); villagerTraderRidableInWater = getBoolean("mobs.wandering_trader.ridable-in-water", villagerTraderRidableInWater); -@@ -1805,6 +1808,7 @@ public class PurpurWorldConfig { +@@ -1817,6 +1820,7 @@ public class PurpurWorldConfig { set("mobs.wandering_trader.attributes.max_health", oldValue); } villagerTraderMaxHealth = getDouble("mobs.wandering_trader.attributes.max_health", villagerTraderMaxHealth); diff --git a/patches/server/0189-Allow-infinity-on-crossbows.patch b/patches/server/0188-Allow-infinity-on-crossbows.patch similarity index 100% rename from patches/server/0189-Allow-infinity-on-crossbows.patch rename to patches/server/0188-Allow-infinity-on-crossbows.patch diff --git a/patches/server/0190-Drowning-Settings.patch b/patches/server/0189-Drowning-Settings.patch similarity index 88% rename from patches/server/0190-Drowning-Settings.patch rename to patches/server/0189-Drowning-Settings.patch index 03420f7216..c4cf3aabfe 100644 --- a/patches/server/0190-Drowning-Settings.patch +++ b/patches/server/0189-Drowning-Settings.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Drowning Settings diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index f3151969e5841861d31ac50abdfef3c65e5198a3..706a1e2fadb0880277093be5de63f4dc0792fb72 100644 +index 3d9116d9e562e70cd20a6fa8ca561dff04f20907..6d8197c6c3f430c1f218431ffe72d0fddad82674 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2606,7 +2606,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -2605,7 +2605,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } public int getDefaultPortalCooldown() { @@ -18,7 +18,7 @@ index f3151969e5841861d31ac50abdfef3c65e5198a3..706a1e2fadb0880277093be5de63f4dc public Iterable bn() { diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java -index 93f8aa6d40b1eba6535f170bf0a79417d7d21069..8db61c8b392c8e95f6896b6e48e4d74ddd6b8708 100644 +index 008c97dc6f5b9c08c86d6c2743a6389086d3359e..aa2106e038ff882924be5b956af7cb3e8ff00397 100644 --- a/src/main/java/net/minecraft/world/entity/EntityLiving.java +++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java @@ -394,7 +394,7 @@ public abstract class EntityLiving extends Entity { @@ -40,10 +40,10 @@ index 93f8aa6d40b1eba6535f170bf0a79417d7d21069..8db61c8b392c8e95f6896b6e48e4d74d } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 82f1a60b57c94f4e301b8048c6b1de15c9f7b41f..0c79d6af4604d900bfa33f544ac0e0e56932de50 100644 +index c2314380e7064459dd104b09b900c5a28b592b71..82da1dd5bb8b02c948be51fa941d3b31a3f0dc20 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -2035,6 +2035,15 @@ public class PurpurWorldConfig { +@@ -2047,6 +2047,15 @@ public class PurpurWorldConfig { imposeTeleportRestrictionsOnGateways = getBoolean("gameplay-mechanics.impose-teleport-restrictions-on-gateways", imposeTeleportRestrictionsOnGateways); } diff --git a/patches/server/0191-Break-individual-slabs-when-sneaking.patch b/patches/server/0190-Break-individual-slabs-when-sneaking.patch similarity index 96% rename from patches/server/0191-Break-individual-slabs-when-sneaking.patch rename to patches/server/0190-Break-individual-slabs-when-sneaking.patch index 435ed3ebb8..989dfd74b2 100644 --- a/patches/server/0191-Break-individual-slabs-when-sneaking.patch +++ b/patches/server/0190-Break-individual-slabs-when-sneaking.patch @@ -57,10 +57,10 @@ index 12c0fa5072755fd2a4f575b0cc5e4222617490ce..94965b216d50b29b95f09fa9019c177b + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 0c79d6af4604d900bfa33f544ac0e0e56932de50..a927869cdb6e935226a20200827bd297aac4e8b2 100644 +index 82da1dd5bb8b02c948be51fa941d3b31a3f0dc20..accfdc659f97fb75387776326f4d1b6bd1742aaf 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -563,6 +563,11 @@ public class PurpurWorldConfig { +@@ -575,6 +575,11 @@ public class PurpurWorldConfig { signRightClickEdit = getBoolean("blocks.sign.right-click-edit", signRightClickEdit); } diff --git a/patches/server/0192-Config-to-disable-hostile-mob-spawn-on-ice.patch b/patches/server/0191-Config-to-disable-hostile-mob-spawn-on-ice.patch similarity index 93% rename from patches/server/0192-Config-to-disable-hostile-mob-spawn-on-ice.patch rename to patches/server/0191-Config-to-disable-hostile-mob-spawn-on-ice.patch index cc0a2cb2b9..91f4ba15f8 100644 --- a/patches/server/0192-Config-to-disable-hostile-mob-spawn-on-ice.patch +++ b/patches/server/0191-Config-to-disable-hostile-mob-spawn-on-ice.patch @@ -22,10 +22,10 @@ index c484e27650364b6537fe6b2e8e14de98382b86a3..096a7b76e0ae42ba8b859159e20fb72e return false; } else { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index a927869cdb6e935226a20200827bd297aac4e8b2..2f544d8bb44a1bee18468cb8611591413507c521 100644 +index accfdc659f97fb75387776326f4d1b6bd1742aaf..cb20d4cccbaf52d71df7e1e4f877f6938f2969e3 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -483,8 +483,12 @@ public class PurpurWorldConfig { +@@ -495,8 +495,12 @@ public class PurpurWorldConfig { } public boolean snowOnBlueIce = true; diff --git a/patches/server/0193-Config-to-show-Armor-Stand-arms-on-spawn.patch b/patches/server/0192-Config-to-show-Armor-Stand-arms-on-spawn.patch similarity index 96% rename from patches/server/0193-Config-to-show-Armor-Stand-arms-on-spawn.patch rename to patches/server/0192-Config-to-show-Armor-Stand-arms-on-spawn.patch index 717ade0e64..9955fb63f3 100644 --- a/patches/server/0193-Config-to-show-Armor-Stand-arms-on-spawn.patch +++ b/patches/server/0192-Config-to-show-Armor-Stand-arms-on-spawn.patch @@ -17,7 +17,7 @@ index ecb797e67554d30e35b3aca4d0fc9b0e3f6c1a50..ddc1c3383cdc32fa832485f3922c7418 public EntityArmorStand(World world, double d0, double d1, double d2) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 2f544d8bb44a1bee18468cb8611591413507c521..47f5be1a1adb8cf98b84324e346cbf60099840c0 100644 +index cb20d4cccbaf52d71df7e1e4f877f6938f2969e3..295cc5427a1bdc8f89a0b0c34b3c1f1db7c47a2f 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java @@ -114,6 +114,7 @@ public class PurpurWorldConfig { diff --git a/patches/server/0194-Option-to-make-doors-require-redstone.patch b/patches/server/0193-Option-to-make-doors-require-redstone.patch similarity index 97% rename from patches/server/0194-Option-to-make-doors-require-redstone.patch rename to patches/server/0193-Option-to-make-doors-require-redstone.patch index a59f6c328b..086353f9ff 100644 --- a/patches/server/0194-Option-to-make-doors-require-redstone.patch +++ b/patches/server/0193-Option-to-make-doors-require-redstone.patch @@ -70,10 +70,10 @@ index 453b46851f021d4285be123bedc8982fc8844da2..2a7695c899b12c87ab89d00116b6f0dd + // Purpur end } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 47f5be1a1adb8cf98b84324e346cbf60099840c0..813752be37c5f2956c4f10dcd974e4437020906c 100644 +index 295cc5427a1bdc8f89a0b0c34b3c1f1db7c47a2f..9cb06d3e3109c08b2e9f3336365dd14241c4faca 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -484,6 +484,16 @@ public class PurpurWorldConfig { +@@ -496,6 +496,16 @@ public class PurpurWorldConfig { } } diff --git a/patches/server/0195-Config-to-allow-for-unsafe-enchants.patch b/patches/server/0194-Config-to-allow-for-unsafe-enchants.patch similarity index 100% rename from patches/server/0195-Config-to-allow-for-unsafe-enchants.patch rename to patches/server/0194-Config-to-allow-for-unsafe-enchants.patch diff --git a/patches/server/0196-Configurable-sponge-absorption.patch b/patches/server/0195-Configurable-sponge-absorption.patch similarity index 95% rename from patches/server/0196-Configurable-sponge-absorption.patch rename to patches/server/0195-Configurable-sponge-absorption.patch index e3553be729..b5c4dbcd16 100644 --- a/patches/server/0196-Configurable-sponge-absorption.patch +++ b/patches/server/0195-Configurable-sponge-absorption.patch @@ -43,10 +43,10 @@ index d80eee47390ab202eea0368571421bbc94655ab1..b36536d4cc95797c59549f5db1f67b34 } } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 813752be37c5f2956c4f10dcd974e4437020906c..e2504bf2846b66563936fc9329561da66e8ae985 100644 +index 9cb06d3e3109c08b2e9f3336365dd14241c4faca..8be800300b6cbbd17ede87f279ebb04e9c9123fc 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -589,6 +589,13 @@ public class PurpurWorldConfig { +@@ -601,6 +601,13 @@ public class PurpurWorldConfig { spawnerDeactivateByRedstone = getBoolean("blocks.spawner.deactivate-by-redstone", spawnerDeactivateByRedstone); } diff --git a/patches/server/0197-Projectile-offset-config.patch b/patches/server/0196-Projectile-offset-config.patch similarity index 98% rename from patches/server/0197-Projectile-offset-config.patch rename to patches/server/0196-Projectile-offset-config.patch index 3f9fbdde7f..3ffdffca30 100644 --- a/patches/server/0197-Projectile-offset-config.patch +++ b/patches/server/0196-Projectile-offset-config.patch @@ -96,10 +96,10 @@ index 0711d195c654edef5875f587e391bacfdea096da..2341c98859faa61662d7ed343e6ed157 entitythrowntrident.fromPlayer = EntityArrow.PickupStatus.CREATIVE_ONLY; } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index e2504bf2846b66563936fc9329561da66e8ae985..75cae460f560a3825915a96126f28ce3d4f9e182 100644 +index 8be800300b6cbbd17ede87f279ebb04e9c9123fc..ad2e2ae106295a8ce84b404998de535724fd9427 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -307,6 +307,23 @@ public class PurpurWorldConfig { +@@ -317,6 +317,23 @@ public class PurpurWorldConfig { snowballDamage = getInt("gameplay-mechanics.projectile-damage.snowball", snowballDamage); } diff --git a/patches/server/0198-Config-for-powered-rail-activation-distance.patch b/patches/server/0197-Config-for-powered-rail-activation-distance.patch similarity index 91% rename from patches/server/0198-Config-for-powered-rail-activation-distance.patch rename to patches/server/0197-Config-for-powered-rail-activation-distance.patch index 5c008316ca..a045e1947e 100644 --- a/patches/server/0198-Config-for-powered-rail-activation-distance.patch +++ b/patches/server/0197-Config-for-powered-rail-activation-distance.patch @@ -18,10 +18,10 @@ index b26e168fbf49bbe7ec981b5b186c94ca67827f4a..bc91c96a29dcc60c578b342055b8eaf3 } else { int j = blockposition.getX(); diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 75cae460f560a3825915a96126f28ce3d4f9e182..3b380cd47061724b20e153d97bac865d344a2eec 100644 +index ad2e2ae106295a8ce84b404998de535724fd9427..37835f19ce917b36cb56e0d0d58d9be349919cab 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -573,6 +573,11 @@ public class PurpurWorldConfig { +@@ -585,6 +585,11 @@ public class PurpurWorldConfig { lavaSpeedNotNether = getInt("blocks.lava.speed.not-nether", lavaSpeedNotNether); } diff --git a/patches/server/0199-Piglin-portal-spawn-modifier.patch b/patches/server/0198-Piglin-portal-spawn-modifier.patch similarity index 93% rename from patches/server/0199-Piglin-portal-spawn-modifier.patch rename to patches/server/0198-Piglin-portal-spawn-modifier.patch index fa7f95737c..c0636e3aaf 100644 --- a/patches/server/0199-Piglin-portal-spawn-modifier.patch +++ b/patches/server/0198-Piglin-portal-spawn-modifier.patch @@ -31,10 +31,10 @@ index ac5ce96ab62ec210816e7af85a4269073b7a9270..84140e01eba780ffb8289bff75d1b58a blockposition = blockposition.down(); } diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 3b380cd47061724b20e153d97bac865d344a2eec..f3cde1e3d06da82b7a54898df5d331f279b2a954 100644 +index 37835f19ce917b36cb56e0d0d58d9be349919cab..78e4ef0103e1c9f96ec160e74b870902eda5e842 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1407,6 +1407,7 @@ public class PurpurWorldConfig { +@@ -1419,6 +1419,7 @@ public class PurpurWorldConfig { public boolean piglinRidable = false; public boolean piglinRidableInWater = false; public double piglinMaxHealth = 16.0D; @@ -42,7 +42,7 @@ index 3b380cd47061724b20e153d97bac865d344a2eec..f3cde1e3d06da82b7a54898df5d331f2 private void piglinSettings() { piglinRidable = getBoolean("mobs.piglin.ridable", piglinRidable); piglinRidableInWater = getBoolean("mobs.piglin.ridable-in-water", piglinRidableInWater); -@@ -1416,6 +1417,7 @@ public class PurpurWorldConfig { +@@ -1428,6 +1429,7 @@ public class PurpurWorldConfig { set("mobs.piglin.attributes.max_health", oldValue); } piglinMaxHealth = getDouble("mobs.piglin.attributes.max_health", piglinMaxHealth); diff --git a/patches/server/0200-Config-to-change-max-number-of-bees.patch b/patches/server/0199-Config-to-change-max-number-of-bees.patch similarity index 96% rename from patches/server/0200-Config-to-change-max-number-of-bees.patch rename to patches/server/0199-Config-to-change-max-number-of-bees.patch index 63d5396a09..c21f11fb7a 100644 --- a/patches/server/0200-Config-to-change-max-number-of-bees.patch +++ b/patches/server/0199-Config-to-change-max-number-of-bees.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Config to change max number of bees diff --git a/src/main/java/net/minecraft/world/level/block/entity/TileEntityBeehive.java b/src/main/java/net/minecraft/world/level/block/entity/TileEntityBeehive.java -index 3cbcbb028b864f1d14e004628bbc0829f71ab476..3ce6a1b1f75443d1d1c6740d6f3f730f06a34f6a 100644 +index 80083a6666a28372946cf0e68ded44d075357f7d..58bf1008ab19340bce5111e006a8de0e7f39e0e5 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TileEntityBeehive.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TileEntityBeehive.java @@ -29,7 +29,7 @@ public class TileEntityBeehive extends TileEntity implements ITickable { diff --git a/patches/server/0201-Configurable-damage-settings-for-magma-blocks.patch b/patches/server/0200-Configurable-damage-settings-for-magma-blocks.patch similarity index 74% rename from patches/server/0201-Configurable-damage-settings-for-magma-blocks.patch rename to patches/server/0200-Configurable-damage-settings-for-magma-blocks.patch index fe2252a90f..cc6f278c5d 100644 --- a/patches/server/0201-Configurable-damage-settings-for-magma-blocks.patch +++ b/patches/server/0200-Configurable-damage-settings-for-magma-blocks.patch @@ -5,25 +5,18 @@ Subject: [PATCH] Configurable damage settings for magma blocks diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 706a1e2fadb0880277093be5de63f4dc0792fb72..f498bba37f3a40060a0847500b70e7cb55c745cd 100644 +index 6d8197c6c3f430c1f218431ffe72d0fddad82674..d52ac77516cbf62293afbbfdd96f5a4861a3025f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -894,9 +894,15 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne +@@ -893,7 +893,7 @@ public abstract class Entity implements INamableTileEntity, ICommandListener, ne } // CraftBukkit end -+ // Purpur start -+ if (block instanceof net.minecraft.world.level.block.BlockMagma && this.onGround) { -+ block.stepOn(this.world, blockposition, this); -+ } else { - if (this.onGround && !this.bv()) { +- if (this.onGround && (!this.bv() || (block == Blocks.STONECUTTER && world.purpurConfig.stonecutterDamage > 0.0F))) { // Purpur ++ if (this.onGround && (!this.bv() || (block == Blocks.STONECUTTER && world.purpurConfig.stonecutterDamage > 0.0F) || (block == Blocks.MAGMA_BLOCK && world.purpurConfig.magmaBlockDamageWhenSneaking))) { // Purpur block.stepOn(this.world, blockposition, this); } -+ } -+ // Purpur end - if (this.playStepSound() && !this.isPassenger()) { - double d0 = vec3d1.x; diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentManager.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentManager.java index b2d28c2bf0a9e93d38583e2d734c12fed4f63d5d..b889e5426781da215b5c26477015d04457142213 100644 --- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentManager.java @@ -38,7 +31,7 @@ index b2d28c2bf0a9e93d38583e2d734c12fed4f63d5d..b889e5426781da215b5c26477015d044 } diff --git a/src/main/java/net/minecraft/world/level/block/BlockMagma.java b/src/main/java/net/minecraft/world/level/block/BlockMagma.java -index 4559085fa4452d3a9f59ed967ccb69a7823718e5..f1c53428c8f9eb0922fc16f152c6566d1a32cac0 100644 +index 4559085fa4452d3a9f59ed967ccb69a7823718e5..0d9e9f972066c1114971d825468b64f53a4af1d2 100644 --- a/src/main/java/net/minecraft/world/level/block/BlockMagma.java +++ b/src/main/java/net/minecraft/world/level/block/BlockMagma.java @@ -27,7 +27,7 @@ public class BlockMagma extends Block { @@ -46,15 +39,15 @@ index 4559085fa4452d3a9f59ed967ccb69a7823718e5..f1c53428c8f9eb0922fc16f152c6566d @Override public void stepOn(World world, BlockPosition blockposition, Entity entity) { - if (!entity.isFireProof() && entity instanceof EntityLiving && !EnchantmentManager.i((EntityLiving) entity)) { -+ if (!entity.isFireProof() && entity instanceof EntityLiving && (world.purpurConfig.magmaBlockDamageWhenSneaking || !entity.isSneaking()) && (world.purpurConfig.magmaBlockDamageWithFrostWalker || !EnchantmentManager.hasFrostWalker((EntityLiving) entity))) { // Purpur ++ if (!entity.isFireProof() && entity instanceof EntityLiving && (world.purpurConfig.magmaBlockDamageWithFrostWalker || !EnchantmentManager.hasFrostWalker((EntityLiving) entity))) { // Purpur org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = world.getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()); // CraftBukkit entity.damageEntity(DamageSource.HOT_FLOOR, 1.0F); org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = null; // CraftBukkit diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index f3cde1e3d06da82b7a54898df5d331f279b2a954..78e39c9424c296bf07f89d63ce42b02b96c2cd35 100644 +index 78e4ef0103e1c9f96ec160e74b870902eda5e842..9ad9d80331ea52c08500cd9155ba6fdc1bc22a3a 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -2124,4 +2124,11 @@ public class PurpurWorldConfig { +@@ -2136,4 +2136,11 @@ public class PurpurWorldConfig { baseCrystalExplosionEffect = Explosion.Effect.DESTROY; } } diff --git a/patches/server/0202-Config-for-wither-explosion-radius.patch b/patches/server/0201-Config-for-wither-explosion-radius.patch similarity index 91% rename from patches/server/0202-Config-for-wither-explosion-radius.patch rename to patches/server/0201-Config-for-wither-explosion-radius.patch index 478a88895d..3ae87def39 100644 --- a/patches/server/0202-Config-for-wither-explosion-radius.patch +++ b/patches/server/0201-Config-for-wither-explosion-radius.patch @@ -18,10 +18,10 @@ index 616b5267d1d94b2be37ec48983b45e4478502fb5..052cffb156e4e6f31df3935fd8312eb3 if (!event.isCancelled()) { diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -index 78e39c9424c296bf07f89d63ce42b02b96c2cd35..69d6ced8e583a3a0625ced9d444caca21fa80723 100644 +index 9ad9d80331ea52c08500cd9155ba6fdc1bc22a3a..3d3e4e686cd74145b002b2df276e61762697918b 100644 --- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java -@@ -1901,6 +1901,7 @@ public class PurpurWorldConfig { +@@ -1913,6 +1913,7 @@ public class PurpurWorldConfig { public int witherHealthRegenDelay = 20; public double witherMaxHealth = 300.0D; public boolean witherCanRideVehicles = false; @@ -29,7 +29,7 @@ index 78e39c9424c296bf07f89d63ce42b02b96c2cd35..69d6ced8e583a3a0625ced9d444caca2 private void witherSettings() { witherRidable = getBoolean("mobs.wither.ridable", witherRidable); witherRidableInWater = getBoolean("mobs.wither.ridable-in-water", witherRidableInWater); -@@ -1919,6 +1920,7 @@ public class PurpurWorldConfig { +@@ -1931,6 +1932,7 @@ public class PurpurWorldConfig { } witherMaxHealth = getDouble("mobs.wither.attributes.max_health", witherMaxHealth); witherCanRideVehicles = getBoolean("mobs.wither.can-ride-vehicles", witherCanRideVehicles); diff --git a/patches/server/0202-Add-credits-command.patch b/patches/server/0202-Add-credits-command.patch new file mode 100644 index 0000000000..993d994edc --- /dev/null +++ b/patches/server/0202-Add-credits-command.patch @@ -0,0 +1,98 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Encode42 +Date: Fri, 30 Apr 2021 14:03:06 -0400 +Subject: [PATCH] Add credits command + + +diff --git a/src/main/java/net/minecraft/commands/CommandDispatcher.java b/src/main/java/net/minecraft/commands/CommandDispatcher.java +index ce95a7d9c967d723bad468bd00a5c0a6b887aa33..0703148d079d86921dac42ef90e514d3584bf569 100644 +--- a/src/main/java/net/minecraft/commands/CommandDispatcher.java ++++ b/src/main/java/net/minecraft/commands/CommandDispatcher.java +@@ -191,6 +191,7 @@ public class CommandDispatcher { + CommandIdleTimeout.a(this.b); + CommandStop.a(this.b); + CommandWhitelist.a(this.b); ++ net.pl3x.purpur.command.CreditsCommand.register(getDispatcher()); // Purpur + net.pl3x.purpur.command.DemoCommand.register(getDispatcher()); // Purpur + net.pl3x.purpur.command.PingCommand.register(getDispatcher()); // Purpur + net.pl3x.purpur.command.TPSBarCommand.register(getDispatcher()); // Purpur +diff --git a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutGameStateChange.java b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutGameStateChange.java +index 0161657748d398b6827ef8bc2b00b8a63bf37c55..aaff933c5bf619303842ce6b9a9dc979bcfde7bd 100644 +--- a/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutGameStateChange.java ++++ b/src/main/java/net/minecraft/network/protocol/game/PacketPlayOutGameStateChange.java +@@ -12,7 +12,7 @@ public class PacketPlayOutGameStateChange implements Packet dispatcher) { ++ dispatcher.register(CommandDispatcher.literal("credits") ++ .requires((listener) -> { ++ return listener.hasPermission(2); ++ }) ++ .executes((context) -> { ++ return execute(context.getSource(), Collections.singleton(context.getSource().getPlayerOrException())); ++ }) ++ .then(CommandDispatcher.argument("targets", ArgumentEntity.players()) ++ .executes((context) -> { ++ return execute(context.getSource(), ArgumentEntity.getPlayers(context, "targets")); ++ }) ++ ) ++ ).setPermission("bukkit.command.credits"); ++ } ++ ++ private static int execute(CommandListenerWrapper sender, Collection targets) { ++ for (EntityPlayer player : targets) { ++ PacketPlayOutGameStateChange packet = new PacketPlayOutGameStateChange(PacketPlayOutGameStateChange.credits(), 1F); ++ player.viewingCredits = true; ++ player.playerConnection.sendPacket(packet); ++ String output = String.format(PurpurConfig.creditsCommandOutput, player.getProfile().getName()); ++ sender.sendMessage(CraftChatMessage.fromStringOrNull(output), false); ++ } ++ return targets.size(); ++ } ++} diff --git a/patches/server/0203-Gamemode-extra-permissions.patch b/patches/server/0203-Gamemode-extra-permissions.patch new file mode 100644 index 0000000000..af93f8e534 --- /dev/null +++ b/patches/server/0203-Gamemode-extra-permissions.patch @@ -0,0 +1,78 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Fri, 30 Apr 2021 13:39:39 -0500 +Subject: [PATCH] Gamemode extra permissions + + +diff --git a/src/main/java/net/minecraft/commands/CommandListenerWrapper.java b/src/main/java/net/minecraft/commands/CommandListenerWrapper.java +index 4480fe75cfad35a5104b5116c5ec2c80d18f15f5..d73daa29f784283e03ad2ea3126cca7e572602d4 100644 +--- a/src/main/java/net/minecraft/commands/CommandListenerWrapper.java ++++ b/src/main/java/net/minecraft/commands/CommandListenerWrapper.java +@@ -190,6 +190,21 @@ public class CommandListenerWrapper implements ICompletionProvider, com.destroys + } + // CraftBukkit end + ++ // Purpur start ++ public boolean testPermission(int i, String bukkitPermission) { ++ if (hasPermission(i, bukkitPermission)) { ++ return true; ++ } ++ String permissionMessage = getWorld().getServer().getPermissionMessage(); ++ if (permissionMessage.length() != 0) { ++ for (String line : permissionMessage.replace("", bukkitPermission).split("\n")) { ++ sendFailureMessage(new ChatComponentText(line)); ++ } ++ } ++ return false; ++ } ++ // Purpur end ++ + public Vec3D getPosition() { + return this.d; + } +diff --git a/src/main/java/net/minecraft/server/commands/CommandGamemode.java b/src/main/java/net/minecraft/server/commands/CommandGamemode.java +index 376d5eac9c17365266d8a4986bf4c19030454c9a..f004d027d673ec09c768c3ab0734b6b099921ef9 100644 +--- a/src/main/java/net/minecraft/server/commands/CommandGamemode.java ++++ b/src/main/java/net/minecraft/server/commands/CommandGamemode.java +@@ -55,6 +55,7 @@ public class CommandGamemode { + } + + private static int a(CommandContext commandcontext, Collection collection, EnumGamemode enumgamemode) { ++ if (net.pl3x.purpur.PurpurConfig.commandGamemodeRequiresPermission && !commandcontext.getSource().testPermission(2, "minecraft.command.gamemode." + enumgamemode.b())) return 0; // Purpur + int i = 0; + Iterator iterator = collection.iterator(); + +diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java +index e0228fb58149ac8a9430d54157d5e92c93618f22..56424e45c04e7165c0671f74cdcd0147d1069af7 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java +@@ -211,6 +211,11 @@ public class PurpurConfig { + disableGiveCommandDrops = getBoolean("settings.disable-give-dropping", disableGiveCommandDrops); + } + ++ public static boolean commandGamemodeRequiresPermission = false; ++ private static void commandSettings() { ++ commandGamemodeRequiresPermission = getBoolean("settings.command.gamemode.requires-specific-permission", commandGamemodeRequiresPermission); ++ } ++ + public static boolean barrelSixRows = false; + public static boolean enderChestSixRows = false; + public static boolean enderChestPermissionRows = false; +diff --git a/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java b/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java +index f0a57d225b81a505ff12425155ba838d8fad990c..81ead4723872528c53efa9e0f23799571447ac86 100644 +--- a/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java ++++ b/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java +@@ -23,7 +23,12 @@ public final class CommandPermissions { + DefaultPermissions.registerPermission(PREFIX + "kick", "Allows the user to kick players", PermissionDefault.OP, commands); + DefaultPermissions.registerPermission(PREFIX + "stop", "Allows the user to stop the server", PermissionDefault.OP, commands); + DefaultPermissions.registerPermission(PREFIX + "list", "Allows the user to list all online players", PermissionDefault.OP, commands); +- DefaultPermissions.registerPermission(PREFIX + "gamemode", "Allows the user to change the gamemode of another player", PermissionDefault.OP, commands); ++ // Purpur start ++ Permission gamemode = DefaultPermissions.registerPermission(PREFIX + "gamemode", "Allows the user to change the gamemode of another player", PermissionDefault.OP, commands); ++ for (net.minecraft.world.level.EnumGamemode enumgamemode : net.minecraft.world.level.EnumGamemode.values()) { ++ gamemode.addParent(DefaultPermissions.registerPermission(PREFIX + "gamemode." + enumgamemode.b(), "Allows the user to set " + enumgamemode.b() + " gamemode", PermissionDefault.OP), true); ++ } ++ // Purpur end + DefaultPermissions.registerPermission(PREFIX + "xp", "Allows the user to give themselves or others arbitrary values of experience", PermissionDefault.OP, commands); + DefaultPermissions.registerPermission(PREFIX + "toggledownfall", "Allows the user to toggle rain on/off for a given world", PermissionDefault.OP, commands); + DefaultPermissions.registerPermission(PREFIX + "defaultgamemode", "Allows the user to change the default gamemode of the server", PermissionDefault.OP, commands); diff --git a/patches/server/0204-Config-for-changing-the-blocks-that-turn-into-paths.patch b/patches/server/0204-Config-for-changing-the-blocks-that-turn-into-paths.patch new file mode 100644 index 0000000000..a4558dd3ef --- /dev/null +++ b/patches/server/0204-Config-for-changing-the-blocks-that-turn-into-paths.patch @@ -0,0 +1,40 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: 12emin34 +Date: Thu, 29 Apr 2021 23:56:02 +0200 +Subject: [PATCH] Config for changing the blocks that turn into paths + + +diff --git a/src/main/java/net/minecraft/world/item/ItemSpade.java b/src/main/java/net/minecraft/world/item/ItemSpade.java +index 9ba8ae49e18fb8714b434715bd669b8e22004cd7..c0c87d0dc8d6f02597219cd6a74e6ed7856ea229 100644 +--- a/src/main/java/net/minecraft/world/item/ItemSpade.java ++++ b/src/main/java/net/minecraft/world/item/ItemSpade.java +@@ -43,7 +43,7 @@ public class ItemSpade extends ItemTool { + return EnumInteractionResult.PASS; + } else { + EntityHuman entityhuman = itemactioncontext.getEntity(); +- IBlockData iblockdata1 = (IBlockData) ItemSpade.a.get(iblockdata.getBlock()); ++ IBlockData iblockdata1 = world.purpurConfig.shovelTurnsBlockToGrassPath.contains(iblockdata.getBlock()) ? Blocks.GRASS_PATH.getBlockData() : ItemSpade.a.get(iblockdata.getBlock()); // Purpur + IBlockData iblockdata2 = null; + + if (iblockdata1 != null && world.getType(blockposition.up()).isAir()) { +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 3d3e4e686cd74145b002b2df276e61762697918b..e082de2fdbd4803f5c79699b813062291f8e2bb7 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -469,6 +469,16 @@ public class PurpurWorldConfig { + totemOfUndyingWorksInInventory = getBoolean("gameplay-mechanics.player.totem-of-undying-works-in-inventory", totemOfUndyingWorksInInventory); + } + ++ public List shovelTurnsBlockToGrassPath = new ArrayList<>(); ++ private void shovelSettings() { ++ getList("gameplay-mechanics.shovel-turns-block-to-grass-path", new ArrayList(){{ ++ add("minecraft:grass_block"); ++ }}).forEach(key -> { ++ Block block = IRegistry.BLOCK.get(new MinecraftKey(key.toString())); ++ if (block != Blocks.AIR) shovelTurnsBlockToGrassPath.add(block); ++ }); ++ } ++ + public boolean silkTouchEnabled = false; + public String silkTouchSpawnerName = "Spawner"; + public List silkTouchSpawnerLore = new ArrayList<>(); diff --git a/patches/server/0205-Allows-you-to-change-the-thrust-limit-of-a-piston-by.patch b/patches/server/0205-Allows-you-to-change-the-thrust-limit-of-a-piston-by.patch new file mode 100644 index 0000000000..8c5c9d2d1f --- /dev/null +++ b/patches/server/0205-Allows-you-to-change-the-thrust-limit-of-a-piston-by.patch @@ -0,0 +1,60 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: DoctaEnkoda +Date: Sun, 2 May 2021 23:14:54 +0200 +Subject: [PATCH] Allows you to change the thrust limit of a piston by World + + +diff --git a/src/main/java/net/minecraft/world/level/block/piston/PistonExtendsChecker.java b/src/main/java/net/minecraft/world/level/block/piston/PistonExtendsChecker.java +index 6c9c4ab65b7e42efa68027057242e25b70313081..cbe34059659e0f80ff384508b01e516cd7c5e28a 100644 +--- a/src/main/java/net/minecraft/world/level/block/piston/PistonExtendsChecker.java ++++ b/src/main/java/net/minecraft/world/level/block/piston/PistonExtendsChecker.java +@@ -12,7 +12,7 @@ import net.minecraft.world.level.material.EnumPistonReaction; + + public class PistonExtendsChecker { + +- private final World a; ++ private final World a; public World getWorld() { return a; } // Purpur - OBFHELPER + private final BlockPosition b; + private final boolean c; + private final BlockPosition d; +@@ -86,7 +86,7 @@ public class PistonExtendsChecker { + } else { + int i = 1; + +- if (i + this.f.size() > 12) { ++ if (i + this.f.size() > this.getWorld().purpurConfig.pistonBlockPushLimit) { // Purpur + return false; + } else { + while (a(block)) { +@@ -100,7 +100,7 @@ public class PistonExtendsChecker { + } + + ++i; +- if (i + this.f.size() > 12) { ++ if (i + this.f.size() > this.getWorld().purpurConfig.pistonBlockPushLimit) { // Purpur + return false; + } + } +@@ -148,7 +148,7 @@ public class PistonExtendsChecker { + return true; + } + +- if (this.f.size() >= 12) { ++ if (this.f.size() >= this.getWorld().purpurConfig.pistonBlockPushLimit) { // Purpur + return false; + } + +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index e082de2fdbd4803f5c79699b813062291f8e2bb7..07c66f9d41e7a74021dde6702d654710e400e93b 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -2155,4 +2155,9 @@ public class PurpurWorldConfig { + magmaBlockDamageWhenSneaking = getBoolean("blocks.magma-block.damage-when-sneaking", magmaBlockDamageWhenSneaking); + magmaBlockDamageWithFrostWalker = getBoolean("blocks.magma-block.damage-with-frost-walker", magmaBlockDamageWithFrostWalker); + } ++ ++ public int pistonBlockPushLimit = 12; ++ private void pistonSettings() { ++ pistonBlockPushLimit = getInt("blocks.piston.block-push-limit", pistonBlockPushLimit); ++ } + } diff --git a/patches/server/0206-Allows-to-display-progress-messages-by-player-instea.patch b/patches/server/0206-Allows-to-display-progress-messages-by-player-instea.patch new file mode 100644 index 0000000000..5037fba494 --- /dev/null +++ b/patches/server/0206-Allows-to-display-progress-messages-by-player-instea.patch @@ -0,0 +1,49 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: DoctaEnkoda +Date: Mon, 3 May 2021 01:33:14 +0200 +Subject: [PATCH] Allows to display progress messages by player instead to + everyone on the server. + + +diff --git a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java +index a1ee1066108985a95abddb03ff447b5a14f4f85f..4720644ae82f76f835f14c0b3a00e7b7874fb1e2 100644 +--- a/src/main/java/net/minecraft/server/AdvancementDataPlayer.java ++++ b/src/main/java/net/minecraft/server/AdvancementDataPlayer.java +@@ -60,7 +60,7 @@ public class AdvancementDataPlayer { + private static final TypeToken> c = new TypeToken>() { + }; + private final DataFixer d; +- private final PlayerList e; ++ private final PlayerList e; public PlayerList getPlayerList() { return e; } // Purpur - OBFHELPER + private final File f; + public final Map data = Maps.newLinkedHashMap(); + private final Set h = Sets.newLinkedHashSet(); +@@ -325,7 +325,13 @@ public class AdvancementDataPlayer { + advancement.d().a(this.player); + // Paper start - Add Adventure message to PlayerAdvancementDoneEvent + if (message != null && this.player.world.getGameRules().getBoolean(GameRules.ANNOUNCE_ADVANCEMENTS)) { +- this.e.sendMessage(PaperAdventure.asVanilla(message), ChatMessageType.SYSTEM, SystemUtils.getNullUUID()); ++ // Purpur Start - AdvancementMessage By Player ++ if (net.pl3x.purpur.PurpurConfig.advancementOnlyBroadcastToAffectedPlayer) { ++ this.player.sendMessage(PaperAdventure.asVanilla(message), SystemUtils.getNullUUID()); ++ } else { ++ getPlayerList().sendMessage(PaperAdventure.asVanilla(message), ChatMessageType.SYSTEM, SystemUtils.getNullUUID()); ++ } ++ // Purpur End + // Paper end + } + } +diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java +index 56424e45c04e7165c0671f74cdcd0147d1069af7..7e8654e4df61527f33d4fce2afdb14e29b90a4c2 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java +@@ -287,4 +287,9 @@ public class PurpurConfig { + private static void tpsCatchup() { + tpsCatchup = getBoolean("settings.tps-catchup", tpsCatchup); + } ++ ++ public static boolean advancementOnlyBroadcastToAffectedPlayer = false; ++ private static void advancementSettings() { ++ advancementOnlyBroadcastToAffectedPlayer = getBoolean("settings.advancement.only-broadcast-to-affected-player", advancementOnlyBroadcastToAffectedPlayer ); ++ } + } diff --git a/patches/server/0207-Fix-SPIGOT-6278.patch b/patches/server/0207-Fix-SPIGOT-6278.patch new file mode 100644 index 0000000000..65fa089056 --- /dev/null +++ b/patches/server/0207-Fix-SPIGOT-6278.patch @@ -0,0 +1,19 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Mon, 10 May 2021 02:08:53 -0500 +Subject: [PATCH] Fix SPIGOT-6278 + + +diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglin.java +index 17dde4532714378f7480f55991d94fc82e9a2b05..31de422d9ad5809653c0ce129ebc565d12352e65 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglin.java ++++ b/src/main/java/net/minecraft/world/entity/monster/piglin/EntityPiglin.java +@@ -172,7 +172,7 @@ public class EntityPiglin extends EntityPiglinAbstract implements ICrossbow { + + @Override + public boolean isTypeNotPersistent(double d0) { +- return !this.isPersistent(); ++ return true || !this.isPersistent(); // Purpur - fix SPIGOT-6278 + } + + @Override diff --git a/patches/server/0208-Implement-Mob-Blindness.patch b/patches/server/0208-Implement-Mob-Blindness.patch new file mode 100644 index 0000000000..c5c186649e --- /dev/null +++ b/patches/server/0208-Implement-Mob-Blindness.patch @@ -0,0 +1,46 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Encode42 +Date: Tue, 11 May 2021 21:00:53 -0400 +Subject: [PATCH] Implement Mob Blindness + +Ported from https://github.com/raltsmc/mobblindness + +diff --git a/src/main/java/net/minecraft/world/entity/EntityLiving.java b/src/main/java/net/minecraft/world/entity/EntityLiving.java +index aa2106e038ff882924be5b956af7cb3e8ff00397..2dc40e11eae98400b426175ceb2c92cd5942291c 100644 +--- a/src/main/java/net/minecraft/world/entity/EntityLiving.java ++++ b/src/main/java/net/minecraft/world/entity/EntityLiving.java +@@ -925,6 +925,18 @@ public abstract class EntityLiving extends Entity { + // Airplane end + d0 *= 0.5D; + } ++ ++ // Purpur start ++ if (entity instanceof EntityLiving) { ++ EntityLiving livingEntity = (EntityLiving) entity; ++ if (livingEntity.hasEffect(MobEffects.BLINDNESS)) { ++ int amplifier = livingEntity.getEffect(MobEffects.BLINDNESS).getAmplifier(); ++ for (int i = 0; i < amplifier; i++) { ++ d0 *= world.purpurConfig.mobsBlindnessMultiplier; ++ } ++ } ++ } ++ // Purpur end + } + + return d0; +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index 07c66f9d41e7a74021dde6702d654710e400e93b..b8622f687b4fd70aaee5fa44cc50b8ee38582582 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -542,6 +542,11 @@ public class PurpurWorldConfig { + mobsSpawnOnBlueIce = getBoolean("blocks.blue_ice.allow-mob-spawns", mobsSpawnOnBlueIce); + } + ++ public double mobsBlindnessMultiplier = 1; ++ private void blindnessSettings() { ++ mobsBlindnessMultiplier = getDouble("gameplay-mechanics.entity-blindness-multiplier", mobsBlindnessMultiplier); ++ } ++ + public boolean chestOpenWithBlockOnTop = false; + private void chestSettings() { + chestOpenWithBlockOnTop = getBoolean("blocks.chest.open-with-solid-block-on-top", chestOpenWithBlockOnTop); diff --git a/patches/server/0209-Hide-hidden-players-from-entity-selector.patch b/patches/server/0209-Hide-hidden-players-from-entity-selector.patch new file mode 100644 index 0000000000..e555fb33ce --- /dev/null +++ b/patches/server/0209-Hide-hidden-players-from-entity-selector.patch @@ -0,0 +1,76 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Thu, 13 May 2021 16:18:29 -0500 +Subject: [PATCH] Hide hidden players from entity selector + + +diff --git a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java +index ee3123ac8a568d915ca4e1b42fc1196c269b287e..82125185233bdc59ef93d376e7327180c98c794d 100644 +--- a/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java ++++ b/src/main/java/net/minecraft/commands/arguments/selector/EntitySelector.java +@@ -169,10 +169,10 @@ public class EntitySelector { + + if (this.j != null) { + entityplayer = commandlistenerwrapper.getServer().getPlayerList().getPlayer(this.j); +- return (List) (entityplayer == null ? Collections.emptyList() : Lists.newArrayList(new EntityPlayer[]{entityplayer})); ++ return entityplayer == null || !canSee(commandlistenerwrapper, entityplayer) ? Collections.emptyList() : Lists.newArrayList(entityplayer); // Purpur + } else if (this.k != null) { + entityplayer = commandlistenerwrapper.getServer().getPlayerList().getPlayer(this.k); +- return (List) (entityplayer == null ? Collections.emptyList() : Lists.newArrayList(new EntityPlayer[]{entityplayer})); ++ return entityplayer == null || !canSee(commandlistenerwrapper, entityplayer) ? Collections.emptyList() : Lists.newArrayList(entityplayer); // Purpur + } else { + Vec3D vec3d = (Vec3D) this.f.apply(commandlistenerwrapper.getPosition()); + Predicate predicate = this.a(vec3d); +@@ -182,7 +182,7 @@ public class EntitySelector { + EntityPlayer entityplayer1 = (EntityPlayer) commandlistenerwrapper.getEntity(); + + if (predicate.test(entityplayer1)) { +- return Lists.newArrayList(new EntityPlayer[]{entityplayer1}); ++ return !canSee(commandlistenerwrapper, entityplayer1) ? Collections.emptyList() : Lists.newArrayList(entityplayer1); // Purpur + } + } + +@@ -195,6 +195,7 @@ public class EntitySelector { + + predicate.getClass(); + object = worldserver.a(predicate::test); ++ ((List) object).removeIf(entityplayer3 -> !canSee(commandlistenerwrapper, (EntityPlayer) entityplayer3)); // Purpur + } else { + object = Lists.newArrayList(); + Iterator iterator = commandlistenerwrapper.getServer().getPlayerList().getPlayers().iterator(); +@@ -202,7 +203,7 @@ public class EntitySelector { + while (iterator.hasNext()) { + EntityPlayer entityplayer2 = (EntityPlayer) iterator.next(); + +- if (predicate.test(entityplayer2)) { ++ if (predicate.test(entityplayer2) && canSee(commandlistenerwrapper, entityplayer2)) { // Purpur + ((List) object).add(entityplayer2); + } + } +@@ -244,4 +245,11 @@ public class EntitySelector { + public static IChatMutableComponent a(List list) { + return ChatComponentUtils.b(list, Entity::getScoreboardDisplayName); + } ++ ++ // Purpur start ++ private boolean canSee(CommandListenerWrapper commandlistenerwrapper, EntityPlayer target) { ++ Entity entity = commandlistenerwrapper.getEntity(); ++ return !net.pl3x.purpur.PurpurConfig.hideHiddenPlayersFromEntitySelector || !(entity instanceof EntityPlayer) || ((EntityPlayer) entity).getBukkitEntity().canSee(target.getBukkitEntity()); ++ } ++ // Purpur end + } +diff --git a/src/main/java/net/pl3x/purpur/PurpurConfig.java b/src/main/java/net/pl3x/purpur/PurpurConfig.java +index 7e8654e4df61527f33d4fce2afdb14e29b90a4c2..61f385021e8e870a4cb1b9c2744105988c8b709a 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurConfig.java +@@ -212,8 +212,10 @@ public class PurpurConfig { + } + + public static boolean commandGamemodeRequiresPermission = false; ++ public static boolean hideHiddenPlayersFromEntitySelector = false; + private static void commandSettings() { + commandGamemodeRequiresPermission = getBoolean("settings.command.gamemode.requires-specific-permission", commandGamemodeRequiresPermission); ++ hideHiddenPlayersFromEntitySelector = getBoolean("settings.command.hide-hidden-players-from-entity-selector", hideHiddenPlayersFromEntitySelector); + } + + public static boolean barrelSixRows = false; diff --git a/patches/server/0210-Config-for-health-to-impact-Creeper-explosion-radius.patch b/patches/server/0210-Config-for-health-to-impact-Creeper-explosion-radius.patch new file mode 100644 index 0000000000..3ef06697b5 --- /dev/null +++ b/patches/server/0210-Config-for-health-to-impact-Creeper-explosion-radius.patch @@ -0,0 +1,42 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Encode42 +Date: Thu, 29 Apr 2021 20:28:18 -0400 +Subject: [PATCH] Config for health to impact Creeper explosion radius + + +diff --git a/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java b/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java +index 27d5e9fc5ec1396e95180fc14e8a61b030cfd1e6..d2ae28bb1a2db6dde2aa7c95589656b6eaf3072d 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java ++++ b/src/main/java/net/minecraft/world/entity/monster/EntityCreeper.java +@@ -341,9 +341,10 @@ public class EntityCreeper extends EntityMonster { + if (!this.world.isClientSide) { + Explosion.Effect explosion_effect = this.world.getGameRules().getBoolean(GameRules.MOB_GRIEFING) && world.purpurConfig.creeperAllowGriefing ? Explosion.Effect.DESTROY : Explosion.Effect.NONE; // Purpur + float f = this.isPowered() ? 2.0F : 1.0F; ++ float multiplier = this.world.purpurConfig.creeperHealthRadius ? this.getHealth() / this.getMaxHealth() : 1; // Purpur + + // CraftBukkit start +- ExplosionPrimeEvent event = new ExplosionPrimeEvent(this.getBukkitEntity(), this.explosionRadius * f, false); ++ ExplosionPrimeEvent event = new ExplosionPrimeEvent(this.getBukkitEntity(), multiplier * (this.explosionRadius * f), false); // Purpur + this.world.getServer().getPluginManager().callEvent(event); + if (!event.isCancelled()) { + this.killed = true; +diff --git a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +index b8622f687b4fd70aaee5fa44cc50b8ee38582582..5659e75177f3c5acb935b0f6dc0b720853602108 100644 +--- a/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java ++++ b/src/main/java/net/pl3x/purpur/PurpurWorldConfig.java +@@ -830,6 +830,7 @@ public class PurpurWorldConfig { + public boolean creeperRidable = false; + public boolean creeperRidableInWater = false; + public boolean creeperExplodeWhenKilled = false; ++ public boolean creeperHealthRadius = false; + public boolean creeperAllowGriefing = true; + public double creeperChargedChance = 0.0D; + public double creeperMaxHealth = 20.0D; +@@ -837,6 +838,7 @@ public class PurpurWorldConfig { + creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); + creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); + creeperExplodeWhenKilled = getBoolean("mobs.creeper.explode-when-killed", creeperExplodeWhenKilled); ++ creeperHealthRadius = getBoolean("mobs.creeper.health-impacts-explosion", creeperHealthRadius); + creeperAllowGriefing = getBoolean("mobs.creeper.allow-griefing", creeperAllowGriefing); + creeperChargedChance = getDouble("mobs.creeper.naturally-charged-chance", creeperChargedChance); + if (PurpurConfig.version < 10) { diff --git a/settings.gradle.kts b/settings.gradle.kts index 8869843a3f..e33bf0a93d 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,6 +2,7 @@ import java.util.Locale pluginManagement { repositories { + gradlePluginPortal() mavenCentral() jcenter() maven("https://repo.jpenilla.xyz/snapshots")