diff --git a/patches/server/0112-Implement-TPSBar.patch b/patches/server/0112-Implement-TPSBar.patch index 24bf45060..4acc2bb9a 100644 --- a/patches/server/0112-Implement-TPSBar.patch +++ b/patches/server/0112-Implement-TPSBar.patch @@ -41,7 +41,7 @@ index 6d47aa73788eef78aa6714384db879b4e907de9b..8a132fcdeb620d2e7f1c0c8b9e592ff2 } } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index fe250c154aed8b10e33c6b916cabedb0dda3d5d6..4077269113e6f2369194e2372d415f2f6737317c 100644 +index fe250c154aed8b10e33c6b916cabedb0dda3d5d6..07d08bc8d95025fda0859c84b9ea84fe6870d004 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -299,6 +299,7 @@ public class ServerPlayer extends Player { @@ -52,7 +52,15 @@ index fe250c154aed8b10e33c6b916cabedb0dda3d5d6..4077269113e6f2369194e2372d415f2f // Paper start - replace player chunk loader private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1)); -@@ -685,6 +686,7 @@ public class ServerPlayer extends Player { +@@ -609,6 +610,7 @@ public class ServerPlayer extends Player { + }); + } + ++ if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur + } + + @Override +@@ -685,6 +687,7 @@ public class ServerPlayer extends Player { }); } @@ -60,7 +68,7 @@ index fe250c154aed8b10e33c6b916cabedb0dda3d5d6..4077269113e6f2369194e2372d415f2f } // CraftBukkit start - World fallback code, either respawn location or global spawn -@@ -2986,5 +2988,13 @@ public class ServerPlayer extends Player { +@@ -2986,5 +2989,13 @@ public class ServerPlayer extends Player { this.server.getPlayerList().respawn(this, toLevel, true, to, !toLevel.paperConfig().environment.disableTeleportationSuffocationCheck, org.bukkit.event.player.PlayerRespawnEvent.RespawnReason.DEATH); } } diff --git a/patches/server/0121-Fix-stuck-in-portals.patch b/patches/server/0121-Fix-stuck-in-portals.patch index 0bf84b60f..705472d25 100644 --- a/patches/server/0121-Fix-stuck-in-portals.patch +++ b/patches/server/0121-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/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 4077269113e6f2369194e2372d415f2f6737317c..c8f5c10952a8bf09a09604e76f7e3cc66a262b77 100644 +index 07d08bc8d95025fda0859c84b9ea84fe6870d004..146c2e46e0fb9a9358484a054f716d72b9750ed8 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1347,6 +1347,7 @@ public class ServerPlayer extends Player { +@@ -1348,6 +1348,7 @@ public class ServerPlayer extends Player { playerlist.sendPlayerPermissionLevel(this); worldserver1.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); this.unsetRemoved(); diff --git a/patches/server/0129-Config-to-ignore-nearby-mobs-when-sleeping.patch b/patches/server/0129-Config-to-ignore-nearby-mobs-when-sleeping.patch index 73b423792..359004bef 100644 --- a/patches/server/0129-Config-to-ignore-nearby-mobs-when-sleeping.patch +++ b/patches/server/0129-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/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index c8f5c10952a8bf09a09604e76f7e3cc66a262b77..0da3b7bb3b597002b5e4bbc9d892a8bf4d2d6ccb 100644 +index 146c2e46e0fb9a9358484a054f716d72b9750ed8..c9458551b1da419f484e9dce6b3fba8d79c2de79 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1504,7 +1504,7 @@ public class ServerPlayer extends Player { +@@ -1505,7 +1505,7 @@ public class ServerPlayer extends Player { return entitymonster.isPreventingPlayerRest(this); }); diff --git a/patches/server/0155-Configurable-broadcast-settings.patch b/patches/server/0155-Configurable-broadcast-settings.patch index 9234afddf..d862cbbd8 100644 --- a/patches/server/0155-Configurable-broadcast-settings.patch +++ b/patches/server/0155-Configurable-broadcast-settings.patch @@ -17,10 +17,10 @@ index 94893039363b5fe2d7d0622d0592bce2c867b1c3..ef520d1dd00ae9473c1f34e2df4d8b06 // Paper end } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 0da3b7bb3b597002b5e4bbc9d892a8bf4d2d6ccb..65d6ca59fca1ece4c2867bc297c926e3c480cc06 100644 +index c9458551b1da419f484e9dce6b3fba8d79c2de79..2b10087cf34be4c36d8596d0263d68476bb1a521 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1088,6 +1088,7 @@ public class ServerPlayer extends Player { +@@ -1089,6 +1089,7 @@ public class ServerPlayer extends Player { })); PlayerTeam scoreboardteam = this.getTeam(); diff --git a/patches/server/0183-Customizable-sleeping-actionbar-messages.patch b/patches/server/0183-Customizable-sleeping-actionbar-messages.patch index 684fc8e4f..84c576f77 100644 --- a/patches/server/0183-Customizable-sleeping-actionbar-messages.patch +++ b/patches/server/0183-Customizable-sleeping-actionbar-messages.patch @@ -38,10 +38,10 @@ index 1dc58b41d3963c2adc58e79cd6db7e146ac049ad..83ec2e31d81d6209953252a3780552c3 } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 65d6ca59fca1ece4c2867bc297c926e3c480cc06..2480f449d8ceeb9ac6ef55163d8e649271f5c1c0 100644 +index 2b10087cf34be4c36d8596d0263d68476bb1a521..7bb82c9b652a509c2bf1a43ed82a5da709fb2cb2 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1545,7 +1545,19 @@ public class ServerPlayer extends Player { +@@ -1546,7 +1546,19 @@ public class ServerPlayer extends Player { }); if (!this.serverLevel().canSleepThroughNights()) { diff --git a/patches/server/0184-option-to-disable-shulker-box-items-from-dropping-co.patch b/patches/server/0184-option-to-disable-shulker-box-items-from-dropping-co.patch index 17296340e..8bab2b5ab 100644 --- a/patches/server/0184-option-to-disable-shulker-box-items-from-dropping-co.patch +++ b/patches/server/0184-option-to-disable-shulker-box-items-from-dropping-co.patch @@ -6,7 +6,7 @@ Subject: [PATCH] option to disable shulker box items from dropping contents diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java -index 96fb69ec6db2e7c8c728435f0c537b076259b2fb..f713734efaad4312be270d808e79f0e562c84466 100644 +index 96fb69ec6db2e7c8c728435f0c537b076259b2fb..167a8f6fb2354151d5e16aaa6f268f8a536c0a55 100644 --- a/src/main/java/net/minecraft/world/item/BlockItem.java +++ b/src/main/java/net/minecraft/world/item/BlockItem.java @@ -28,6 +28,7 @@ import net.minecraft.world.level.block.ShulkerBoxBlock; @@ -17,14 +17,14 @@ index 96fb69ec6db2e7c8c728435f0c537b076259b2fb..f713734efaad4312be270d808e79f0e5 import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.gameevent.GameEvent; import net.minecraft.world.phys.shapes.CollisionContext; -@@ -256,6 +257,7 @@ public class BlockItem extends Item { - - @Override - public void onDestroyed(ItemEntity entity) { -+ //entity.level().purpurConfig.shulkerBoxItemDropContentsWhenDestroyed // Purpur - TODO: shulkerBoxItemDropContentsWhenDestroyed +@@ -259,6 +260,7 @@ public class BlockItem extends Item { ItemContainerContents itemcontainercontents = (ItemContainerContents) entity.getItem().set(DataComponents.CONTAINER, ItemContainerContents.EMPTY); if (itemcontainercontents != null) { ++ if (entity.level().purpurConfig.shulkerBoxItemDropContentsWhenDestroyed && entity.getItem().is(Items.SHULKER_BOX)) // Purpur + ItemUtils.onContainerDestroyed(entity, itemcontainercontents.nonEmptyItemsCopy()); + } + diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java index c0bd8bc3a11bfc5120c768cbf3e45efaf52ea6c5..604155c1c99d9f28e5efb60ee9d25cd8af274359 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java diff --git a/patches/server/0188-Add-compass-command.patch b/patches/server/0188-Add-compass-command.patch index d94010b9b..8023c4d54 100644 --- a/patches/server/0188-Add-compass-command.patch +++ b/patches/server/0188-Add-compass-command.patch @@ -17,7 +17,7 @@ index 26c9254cef922a78deac3053f93c60037f19d31f..67ec90a2a05269a5912b3c8e64d6d416 if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 2480f449d8ceeb9ac6ef55163d8e649271f5c1c0..120a42a6057a9639b66be39099715a8bad1e06b5 100644 +index 7bb82c9b652a509c2bf1a43ed82a5da709fb2cb2..e9d9cb47221075447aac66dd30ce6e8f08962cf5 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -300,6 +300,7 @@ public class ServerPlayer extends Player { @@ -28,16 +28,15 @@ index 2480f449d8ceeb9ac6ef55163d8e649271f5c1c0..120a42a6057a9639b66be39099715a8b // Paper start - replace player chunk loader private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1)); -@@ -610,6 +611,8 @@ public class ServerPlayer extends Player { - }); +@@ -611,6 +612,7 @@ public class ServerPlayer extends Player { } -+ if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur - TODO: move back up + if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur + if (nbt.contains("Purpur.CompassBar")) { this.compassBar = nbt.getBoolean("Purpur.CompassBar"); } // Purpur } @Override -@@ -687,6 +690,7 @@ public class ServerPlayer extends Player { +@@ -688,6 +690,7 @@ public class ServerPlayer extends Player { } nbt.putBoolean("Purpur.TPSBar", this.tpsBar); // Purpur @@ -45,7 +44,7 @@ index 2480f449d8ceeb9ac6ef55163d8e649271f5c1c0..120a42a6057a9639b66be39099715a8b } // CraftBukkit start - World fallback code, either respawn location or global spawn -@@ -3010,5 +3014,13 @@ public class ServerPlayer extends Player { +@@ -3011,5 +3014,13 @@ public class ServerPlayer extends Player { public void tpsBar(boolean tpsBar) { this.tpsBar = tpsBar; } diff --git a/patches/server/0234-Add-toggle-for-enchant-level-clamping.patch b/patches/server/0234-Add-toggle-for-enchant-level-clamping.patch index 9aa52f004..58a27803e 100644 --- a/patches/server/0234-Add-toggle-for-enchant-level-clamping.patch +++ b/patches/server/0234-Add-toggle-for-enchant-level-clamping.patch @@ -4,29 +4,59 @@ Date: Sat, 30 Apr 2022 10:32:40 +0200 Subject: [PATCH] Add toggle for enchant level clamping -diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index fb614432722ea27cd044d6cfd3c6a72f797979f1..39d5e156b129bfceae1f28dcdee4bcf6f7537099 100644 ---- a/src/main/java/net/minecraft/world/item/ItemStack.java -+++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -1220,6 +1220,7 @@ public final class ItemStack implements DataComponentHolder { +diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java +index 5443013060b62e3bfcc51cddca96d1c0bc59fe72..8925440dbc35dbc4a7d59f13511d7afeda803260 100644 +--- a/src/main/java/net/minecraft/server/Main.java ++++ b/src/main/java/net/minecraft/server/Main.java +@@ -119,6 +119,11 @@ public class Main { + JvmProfiler.INSTANCE.start(Environment.SERVER); + } - public void enchant(Enchantment enchantment, int level) { - EnchantmentHelper.updateEnchantments(this, (itemenchantments_a) -> { -+ //org.purpurmc.purpur.PurpurConfig.clampEnchantLevels // Purpur - TODO: fix clamp enchant levels option - itemenchantments_a.upgrade(enchantment, level); - }); - } -diff --git a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java -index 6d0363cec691996be416ab22ef9d825196399158..96a402b8c5bf083c6120950eacf7970226972b8b 100644 ---- a/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java -+++ b/src/main/java/net/minecraft/world/item/enchantment/EnchantmentHelper.java -@@ -35,6 +35,7 @@ public class EnchantmentHelper { ++ // Purpur start - load config files early ++ org.bukkit.configuration.file.YamlConfiguration purpurConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("purpur-settings")); ++ org.purpurmc.purpur.PurpurConfig.clampEnchantLevels = purpurConfiguration.getBoolean("settings.enchantment.clamp-levels"); ++ // Purpur end - load config files early ++ + io.papermc.paper.plugin.PluginInitializerManager.load(optionset); // Paper + Bootstrap.bootStrap(); + Bootstrap.validate(); +diff --git a/src/main/java/net/minecraft/world/item/enchantment/ItemEnchantments.java b/src/main/java/net/minecraft/world/item/enchantment/ItemEnchantments.java +index af18de11dd55938b6091f5ab183bd3fe4e8df152..2c741860afa1fa4d5798c68b84ec3fe13157ff09 100644 +--- a/src/main/java/net/minecraft/world/item/enchantment/ItemEnchantments.java ++++ b/src/main/java/net/minecraft/world/item/enchantment/ItemEnchantments.java +@@ -37,7 +37,7 @@ public class ItemEnchantments implements TooltipProvider { + public static final ItemEnchantments EMPTY = new ItemEnchantments(new Object2IntAVLTreeMap<>(ENCHANTMENT_ORDER), true); + // Paper end + public static final int MAX_LEVEL = 255; +- private static final Codec LEVEL_CODEC = Codec.intRange(0, 255); ++ private static final Codec LEVEL_CODEC = Codec.intRange(0, (org.purpurmc.purpur.PurpurConfig.clampEnchantLevels ? 255 : 32767)); // Purpur + private static final Codec>> LEVELS_CODEC = Codec.unboundedMap( // Paper + BuiltInRegistries.ENCHANTMENT.holderByNameCodec(), LEVEL_CODEC + ) +@@ -72,7 +72,7 @@ public class ItemEnchantments implements TooltipProvider { - public static int getItemEnchantmentLevel(Enchantment enchantment, ItemStack stack) { - ItemEnchantments itemEnchantments = stack.getOrDefault(DataComponents.ENCHANTMENTS, ItemEnchantments.EMPTY); -+ //org.purpurmc.purpur.PurpurConfig.clampEnchantLevels // Purpur - TODO: fix clamp enchant levels option - return itemEnchantments.getLevel(enchantment); - } + for (Entry> entry : enchantments.object2IntEntrySet()) { + int i = entry.getIntValue(); +- if (i < 0 || i > 255) { ++ if (i < 0 || i > (org.purpurmc.purpur.PurpurConfig.clampEnchantLevels ? 255 : 32767)) { // Purpur + throw new IllegalArgumentException("Enchantment " + entry.getKey() + " has invalid level " + i); + } + } +@@ -169,13 +169,13 @@ public class ItemEnchantments implements TooltipProvider { + if (level <= 0) { + this.enchantments.removeInt(enchantment.builtInRegistryHolder()); + } else { +- this.enchantments.put(enchantment.builtInRegistryHolder(), Math.min(level, 255)); ++ this.enchantments.put(enchantment.builtInRegistryHolder(), Math.min(level, (org.purpurmc.purpur.PurpurConfig.clampEnchantLevels ? 255 : 32767))); + } + } + + public void upgrade(Enchantment enchantment, int level) { + if (level > 0) { +- this.enchantments.merge(enchantment.builtInRegistryHolder(), Math.min(level, 255), Integer::max); ++ this.enchantments.merge(enchantment.builtInRegistryHolder(), Math.min(level, (org.purpurmc.purpur.PurpurConfig.clampEnchantLevels ? 255 : 32767)), Integer::max); + } + } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java index f0c3566e6b03c88c0cb53a90d44627d0967d13eb..c5dd0979f5bce259b920c47d974f2bf6b805c045 100644 diff --git a/patches/server/0256-Implement-ram-and-rambar-commands.patch b/patches/server/0256-Implement-ram-and-rambar-commands.patch index cf56b373c..3054c6fa9 100644 --- a/patches/server/0256-Implement-ram-and-rambar-commands.patch +++ b/patches/server/0256-Implement-ram-and-rambar-commands.patch @@ -18,7 +18,7 @@ index d3c42c19a051fb3a670e541fc746b55717192a91..13dfb3e506d50c0b191baf5d05bbfc28 if (environment.includeIntegrated) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 24009a27151288fd0f37379732d42a3077fe6d66..2c805bcd63ef5f6d4b3df33fc25f98d05f0972f9 100644 +index 826b7e2bb897609a084555632f691ddb38882058..42a623254bd2886d09eb0cfeb01dd12d0dda19cf 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -301,6 +301,7 @@ public class ServerPlayer extends Player { @@ -29,14 +29,14 @@ index 24009a27151288fd0f37379732d42a3077fe6d66..2c805bcd63ef5f6d4b3df33fc25f98d0 // Paper start - replace player chunk loader private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1)); -@@ -611,6 +612,7 @@ public class ServerPlayer extends Player { - }); - } +@@ -613,6 +614,7 @@ public class ServerPlayer extends Player { -+ if (nbt.contains("Purpur.RamBar")) { this.ramBar = nbt.getBoolean("Purpur.RamBar"); } // Purpur - if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur - TODO: move back up + if (nbt.contains("Purpur.TPSBar")) { this.tpsBar = nbt.getBoolean("Purpur.TPSBar"); } // Purpur if (nbt.contains("Purpur.CompassBar")) { this.compassBar = nbt.getBoolean("Purpur.CompassBar"); } // Purpur ++ if (nbt.contains("Purpur.RamBar")) { this.ramBar = nbt.getBoolean("Purpur.RamBar"); } // Purpur } + + @Override @@ -689,6 +691,7 @@ public class ServerPlayer extends Player { }); } diff --git a/patches/server/0270-Add-attribute-clamping-and-armor-limit-config.patch b/patches/server/0270-Add-attribute-clamping-and-armor-limit-config.patch index 96434dfed..d993074b2 100644 --- a/patches/server/0270-Add-attribute-clamping-and-armor-limit-config.patch +++ b/patches/server/0270-Add-attribute-clamping-and-armor-limit-config.patch @@ -27,25 +27,30 @@ index ddc880ac0c8378bc1132be5deba746c1484c941c..7a8e4b9a9f2e1e5a9c38ad330c75df1f } } diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/RangedAttribute.java b/src/main/java/net/minecraft/world/entity/ai/attributes/RangedAttribute.java -index f0703302e7dbbda88de8c648d20d87c55ed9b1e0..0ed72ec09443de7b62a5320841202b683a393314 100644 +index f0703302e7dbbda88de8c648d20d87c55ed9b1e0..a913ebabaa5f443afa987b972355a8f8d1723c78 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/RangedAttribute.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/RangedAttribute.java @@ -29,6 +29,7 @@ public class RangedAttribute extends Attribute { @Override public double sanitizeValue(double value) { -+ //if (!org.purpurmc.purpur.PurpurConfig.clampAttributes) return Double.isNaN(value) ? this.minValue : value; // Purpur // Purpur - TODO: fix clamp enchant levels option ++ if (!org.purpurmc.purpur.PurpurConfig.clampAttributes) return Double.isNaN(value) ? this.minValue : value; // Purpur return Double.isNaN(value) ? this.minValue : Mth.clamp(value, this.minValue, this.maxValue); } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 1a5133d07b3da44b54e560320d0c7461250cd4d1..c895adeef1dcf3d16eb966233dd3a593eda314a8 100644 +index 1a5133d07b3da44b54e560320d0c7461250cd4d1..91bbd0ff7e67fffcfa206fcde3008d6a8e70170f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -480,6 +480,11 @@ public class PurpurConfig { +@@ -480,6 +480,16 @@ public class PurpurConfig { usernameValidCharactersPattern = java.util.regex.Pattern.compile(setPattern == null || setPattern.isBlank() ? defaultPattern : setPattern); } ++ public static boolean clampAttributes = true; ++ private static void clampAttributes() { ++ clampAttributes = getBoolean("settings.clamp-attributes", clampAttributes); ++ } ++ + public static boolean limitArmor = true; + private static void limitArmor() { + limitArmor = getBoolean("settings.limit-armor", limitArmor); diff --git a/patches/server/0282-Add-option-for-always-showing-item-in-player-death-m.patch b/patches/server/0282-Add-option-for-always-showing-item-in-player-death-m.patch index 9dd75b366..c6b4b5860 100644 --- a/patches/server/0282-Add-option-for-always-showing-item-in-player-death-m.patch +++ b/patches/server/0282-Add-option-for-always-showing-item-in-player-death-m.patch @@ -31,10 +31,10 @@ index b6881d7f02ad4e9e45e947eaec54f0c6b8ff957a..b206d65750fee0a42b805de24ecbb900 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index c895adeef1dcf3d16eb966233dd3a593eda314a8..395ff2bb672c972ce2fd1cd5dc66f30b64222f0a 100644 +index 91bbd0ff7e67fffcfa206fcde3008d6a8e70170f..1a7967981e03fc2bb4f278008d0e8ed52b343e95 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -545,4 +545,9 @@ public class PurpurConfig { +@@ -550,4 +550,9 @@ public class PurpurConfig { block.fallDistanceMultiplier = fallDistanceMultiplier.floatValue(); }); } diff --git a/patches/server/0285-register-minecraft-debug-commands.patch b/patches/server/0285-register-minecraft-debug-commands.patch index af0a5658b..6e9a92299 100644 --- a/patches/server/0285-register-minecraft-debug-commands.patch +++ b/patches/server/0285-register-minecraft-debug-commands.patch @@ -20,25 +20,22 @@ index 13dfb3e506d50c0b191baf5d05bbfc28c20be0ae..f9d0e8ee9414b3897f268ba78a1469dd RaidCommand.register(this.dispatcher, commandRegistryAccess); DebugPathCommand.register(this.dispatcher); diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index 5443013060b62e3bfcc51cddca96d1c0bc59fe72..868932a170c3052e49dc69c2e8eb3ac9c405b45f 100644 +index 8925440dbc35dbc4a7d59f13511d7afeda803260..411f1f8c6be072cfc5ba88cbec38dbc4300a41d1 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java -@@ -133,6 +133,10 @@ public class Main { - // Paper start - load config files early for access below if needed - org.bukkit.configuration.file.YamlConfiguration bukkitConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("bukkit-settings")); - org.bukkit.configuration.file.YamlConfiguration spigotConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("spigot-settings")); -+ // Purpur start -+ org.bukkit.configuration.file.YamlConfiguration purpurConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("purpur-settings")); +@@ -122,6 +122,7 @@ public class Main { + // Purpur start - load config files early + org.bukkit.configuration.file.YamlConfiguration purpurConfiguration = io.papermc.paper.configuration.PaperConfigurations.loadLegacyConfigFile((File) optionset.valueOf("purpur-settings")); + org.purpurmc.purpur.PurpurConfig.clampEnchantLevels = purpurConfiguration.getBoolean("settings.enchantment.clamp-levels"); + org.purpurmc.purpur.PurpurConfig.registerMinecraftDebugCommands = purpurConfiguration.getBoolean("settings.register-minecraft-debug-commands"); -+ // Purpur end - // Paper end - load config files early for access below if needed + // Purpur end - load config files early - if (optionset.has("initSettings")) { // CraftBukkit + io.papermc.paper.plugin.PluginInitializerManager.load(optionset); // Paper diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 395ff2bb672c972ce2fd1cd5dc66f30b64222f0a..eab357f5eb221fd1e2b64cf7a9635e1954a9fdc7 100644 +index 1a7967981e03fc2bb4f278008d0e8ed52b343e95..53188a65cf8f360abc83129ddef039ae6af0ce47 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -550,4 +550,9 @@ public class PurpurConfig { +@@ -555,4 +555,9 @@ public class PurpurConfig { private static void playerDeathsAlwaysShowItem() { playerDeathsAlwaysShowItem = getBoolean("settings.player-deaths-always-show-item", playerDeathsAlwaysShowItem); }