From db6920e35e8380e8ad6fb3fc0f3942d517cbc349 Mon Sep 17 00:00:00 2001 From: BillyGalbreath Date: Tue, 18 Jan 2022 04:55:37 -0600 Subject: [PATCH] Configurable food attributes --- patches/server/0003-Purpur-config-files.patch | 19 ++- patches/server/0006-Ridables.patch | 4 +- .../0009-Barrels-and-enderchests-6-rows.patch | 4 +- patches/server/0011-AFK-API.patch | 4 +- .../0013-Configurable-server-mod-name.patch | 6 +- patches/server/0015-Lagging-threshold.patch | 8 +- .../0021-Alternative-Keepalive-Handling.patch | 4 +- ...-settings-suppressing-pointless-logs.patch | 4 +- .../0052-Configurable-TPS-Catchup.patch | 6 +- patches/server/0069-Add-ping-command.patch | 6 +- patches/server/0070-Add-demo-command.patch | 8 +- patches/server/0071-Add-credits-command.patch | 6 +- ...-Add-allow-water-in-end-world-option.patch | 4 +- ...ion-to-disable-certain-block-updates.patch | 4 +- .../server/0091-Short-enderman-height.patch | 4 +- ...ing-obsidian-valid-for-portal-frames.patch | 6 +- patches/server/0104-Stonecutter-damage.patch | 4 +- ...te-and-mending-enchantments-together.patch | 4 +- ...C-Configurable-disable-give-dropping.patch | 4 +- patches/server/0127-Implement-TPSBar.patch | 4 +- .../server/0142-Dont-run-with-scissors.patch | 6 +- .../0157-Allow-infinity-on-crossbows.patch | 6 +- ...-Config-to-allow-for-unsafe-enchants.patch | 6 +- ...-Config-to-change-max-number-of-bees.patch | 6 +- .../0171-Gamemode-extra-permissions.patch | 6 +- ...0174-Configurable-broadcast-settings.patch | 4 +- ...-hidden-players-from-entity-selector.patch | 6 +- ...nfig-for-unverified-username-message.patch | 8 +- ...e-anvil-cumulative-cost-configurable.patch | 6 +- ...ake-lightning-rod-range-configurable.patch | 8 +- patches/server/0203-Add-uptime-command.patch | 12 +- .../server/0204-Structure-seed-options.patch | 4 +- ...omizable-sleeping-actionbar-messages.patch | 8 +- patches/server/0214-Add-compass-command.patch | 6 +- .../server/0236-Config-for-grindstones.patch | 33 +---- .../server/0237-UPnP-Port-Forwarding.patch | 4 +- ...rable-valid-characters-for-usernames.patch | 4 +- ...-Shears-can-have-looting-enchantment.patch | 6 +- .../0261-Configurable-food-attributes.patch | 113 ++++++++++++++++++ 39 files changed, 231 insertions(+), 134 deletions(-) create mode 100644 patches/server/0261-Configurable-food-attributes.patch diff --git a/patches/server/0003-Purpur-config-files.patch b/patches/server/0003-Purpur-config-files.patch index f4ad47511..dac641018 100644 --- a/patches/server/0003-Purpur-config-files.patch +++ b/patches/server/0003-Purpur-config-files.patch @@ -172,35 +172,46 @@ index 55bae3efbc630be6d40d415509de4c3e744a5004..9d649923e28f4839106b336fce41bd3f .withRequiredArg() diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..806ed097578eb75b25a222b95ef7cc32a4293416 +index 0000000000000000000000000000000000000000..720233b1dce48d23c5852765c8614ee86dc14695 --- /dev/null +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -0,0 +1,159 @@ +@@ -0,0 +1,170 @@ +package org.purpurmc.purpur; + +import co.aikar.timings.TimingsManager; +import com.google.common.base.Throwables; +import com.google.common.collect.ImmutableMap; ++import com.mojang.datafixers.util.Pair; +import net.kyori.adventure.bossbar.BossBar; ++import net.minecraft.core.Registry; ++import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.MinecraftServer; ++import net.minecraft.world.effect.MobEffect; ++import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.entity.EntityDimensions; +import net.minecraft.world.entity.EntityType; -+import org.purpurmc.purpur.command.PurpurCommand; -+import org.purpurmc.purpur.task.TPSBarTask; ++import net.minecraft.world.food.FoodProperties; ++import net.minecraft.world.food.Foods; ++import net.minecraft.world.item.enchantment.Enchantment; +import org.bukkit.Bukkit; +import org.bukkit.command.Command; +import org.bukkit.configuration.ConfigurationSection; +import org.bukkit.configuration.InvalidConfigurationException; +import org.bukkit.configuration.file.YamlConfiguration; ++import org.purpurmc.purpur.command.PurpurCommand; ++import org.purpurmc.purpur.task.TPSBarTask; + +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; ++import java.util.ArrayList; +import java.util.HashMap; ++import java.util.HashSet; +import java.util.List; +import java.util.Map; ++import java.util.Set; +import java.util.logging.Level; + +@SuppressWarnings("unused") diff --git a/patches/server/0006-Ridables.patch b/patches/server/0006-Ridables.patch index 91b827351..b4934cc97 100644 --- a/patches/server/0006-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -4653,10 +4653,10 @@ index 35cc150adf51f79e2fccef8b094c90554aafbee2..b6f2bae38781f16c46ad515f34d82907 event = new EntityDamageEvent(damagee.getBukkitEntity(), cause, modifiers, modifierFunctions); } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 806ed097578eb75b25a222b95ef7cc32a4293416..b6a1701f98d831b3c8794f63f33fad3aa40fac67 100644 +index 720233b1dce48d23c5852765c8614ee86dc14695..85208c8d1058d46f3b2500efa752647138c74751 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -156,4 +156,9 @@ public class PurpurConfig { +@@ -167,4 +167,9 @@ public class PurpurConfig { } return builder.build(); } diff --git a/patches/server/0009-Barrels-and-enderchests-6-rows.patch b/patches/server/0009-Barrels-and-enderchests-6-rows.patch index c5087a59b..7fe97b6ee 100644 --- a/patches/server/0009-Barrels-and-enderchests-6-rows.patch +++ b/patches/server/0009-Barrels-and-enderchests-6-rows.patch @@ -208,10 +208,10 @@ index 396a4ae3d5a829eda78ef98561333aea300aa722..91478d614a56d1ac371187515d4c92b2 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 5350ffab8477a2da4891132cf8b7a65cf776574b..b404fcddc67b7593201f1679587d0ac4c4bfd51c 100644 +index 85208c8d1058d46f3b2500efa752647138c74751..f9f0585c86f5d421d0265c8e9b24610e6e8e4533 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -161,4 +161,39 @@ public class PurpurConfig { +@@ -172,4 +172,39 @@ public class PurpurConfig { private static void messages() { cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); } diff --git a/patches/server/0011-AFK-API.patch b/patches/server/0011-AFK-API.patch index 4dda550f3..75166050a 100644 --- a/patches/server/0011-AFK-API.patch +++ b/patches/server/0011-AFK-API.patch @@ -255,10 +255,10 @@ index c5e3dfd91aba27d9b0115d264a3bbf3d50066356..59d375e9a02c990afa5037819593654f // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 59398d99da9e81a047c6ed4b927398db5abec1ff..6e10eb700827a9ad63f9ebab9fd1029e0a089888 100644 +index f9f0585c86f5d421d0265c8e9b24610e6e8e4533..6f743cdf0e68fe393ca4bbb19d97d9ac2796b6ea 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -158,8 +158,16 @@ public class PurpurConfig { +@@ -169,8 +169,16 @@ public class PurpurConfig { } public static String cannotRideMob = "You cannot mount that mob"; diff --git a/patches/server/0013-Configurable-server-mod-name.patch b/patches/server/0013-Configurable-server-mod-name.patch index 1a9a1f2fa..0568d574e 100644 --- a/patches/server/0013-Configurable-server-mod-name.patch +++ b/patches/server/0013-Configurable-server-mod-name.patch @@ -5,7 +5,7 @@ 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 a8a711c96a38c3d1c9d9b86418d389d5fa81ca29..11f96558f195cc60b4376f8554a4bc5cd93014b9 100644 +index 54ce8f0b9219790f6317c3eb95b81cadd64ac9b7..9d28c613cacc050ac62c89f6f742ee99cdb99649 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1712,7 +1712,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { return blockposition1.above(1); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index ec2a14f8571aa58c782405edac7f100c9131e905..1f48ae6381464f823650d2774fca1117f38d20e9 100644 +index 315e96a09ef9f0e68b5255d041bc919f14895f31..ae9f4571a1fb3cb0d6d525f091b56f83eeac2f2a 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -252,6 +252,7 @@ public class PurpurConfig { +@@ -263,6 +263,7 @@ public class PurpurConfig { public static boolean cryingObsidianValidForPortalFrame = false; public static int beeInsideBeeHive = 3; public static boolean anvilCumulativeCost = true; @@ -29,7 +29,7 @@ index ec2a14f8571aa58c782405edac7f100c9131e905..1f48ae6381464f823650d2774fca1117 private static void blockSettings() { if (version < 3) { boolean oldValue = getBoolean("settings.barrel.packed-barrels", true); -@@ -285,6 +286,7 @@ public class PurpurConfig { +@@ -296,6 +297,7 @@ public class PurpurConfig { cryingObsidianValidForPortalFrame = getBoolean("settings.blocks.crying_obsidian.valid-for-portal-frame", cryingObsidianValidForPortalFrame); beeInsideBeeHive = getInt("settings.blocks.beehive.max-bees-inside", beeInsideBeeHive); anvilCumulativeCost = getBoolean("settings.blocks.anvil.cumulative-cost", anvilCumulativeCost); diff --git a/patches/server/0203-Add-uptime-command.patch b/patches/server/0203-Add-uptime-command.patch index 4b9d78c02..981ea3f6d 100644 --- a/patches/server/0203-Add-uptime-command.patch +++ b/patches/server/0203-Add-uptime-command.patch @@ -17,7 +17,7 @@ index 3156e7e43a5114aaaa1276b024f4ec45e797de88..e787ccc3c21f7e966c1e291579bf7550 } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index dc95a1230ac6f86c32b3c6a8e4876725dbb3c033..022cf286342abe9f5349b70e096373a0db2a810d 100644 +index e9a7da7f2f9d0661c128ca040e15676c6d72e38b..ba2c31e1b9f9bac1762ae53a12ebfb2da43612d1 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -294,6 +294,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= d ? false : context.validBiome().test(context.chunkGenerator().getNoiseBiome(QuartPos.fromBlock(context.chunkPos().getMiddleBlockX()), QuartPos.fromBlock(50), QuartPos.fromBlock(context.chunkPos().getMiddleBlockZ()))); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index bdad489cdcf21c951eba5fb295aaf1c1af563676..19caecd693a02171606d731572c81e6bfcd2b9ec 100644 +index e518d572c75dd3b04a0296ebdd3a2d790d419787..80e00f96b4561c4d6bc69a01a25d568aff44f45f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -201,6 +201,17 @@ public class PurpurConfig { +@@ -212,6 +212,17 @@ public class PurpurConfig { deathMessageOnlyBroadcastToAffectedPlayer = getBoolean("settings.broadcasts.death.only-broadcast-to-affected-player", deathMessageOnlyBroadcastToAffectedPlayer); } diff --git a/patches/server/0208-Customizable-sleeping-actionbar-messages.patch b/patches/server/0208-Customizable-sleeping-actionbar-messages.patch index 24db833c3..784617faa 100644 --- a/patches/server/0208-Customizable-sleeping-actionbar-messages.patch +++ b/patches/server/0208-Customizable-sleeping-actionbar-messages.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Customizable sleeping actionbar messages diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 543cdbd0785aa83eaf79ae52f0e2e5d3c343f6d0..5dc9bbc5fe3de52a8a680b1864aeb6fc778c66f7 100644 +index 595ba2805aea2030be38703a4150e48a7e4199f5..47bc9a51fa8ad5c3b100e4baff2cb243e9a22f35 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -964,11 +964,29 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -40,10 +40,10 @@ index 543cdbd0785aa83eaf79ae52f0e2e5d3c343f6d0..5dc9bbc5fe3de52a8a680b1864aeb6fc } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 19caecd693a02171606d731572c81e6bfcd2b9ec..d460f1186e1260855ad254b16b2748863946a20c 100644 +index 80e00f96b4561c4d6bc69a01a25d568aff44f45f..3d857d6dcc93e622311252e1bfa66106fbbdb372 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -168,6 +168,8 @@ public class PurpurConfig { +@@ -179,6 +179,8 @@ public class PurpurConfig { public static String dontRunWithScissors = "Don't run with scissors!"; public static String uptimeCommandOutput = "Server uptime is "; public static String unverifiedUsername = "default"; @@ -52,7 +52,7 @@ index 19caecd693a02171606d731572c81e6bfcd2b9ec..d460f1186e1260855ad254b16b274886 private static void messages() { cannotRideMob = getString("settings.messages.cannot-ride-mob", cannotRideMob); afkBroadcastAway = getString("settings.messages.afk-broadcast-away", afkBroadcastAway); -@@ -180,6 +182,8 @@ public class PurpurConfig { +@@ -191,6 +193,8 @@ public class PurpurConfig { dontRunWithScissors = getString("settings.messages.dont-run-with-scissors", dontRunWithScissors); uptimeCommandOutput = getString("settings.messages.uptime-command-output", uptimeCommandOutput); unverifiedUsername = getString("settings.messages.unverified-username", unverifiedUsername); diff --git a/patches/server/0214-Add-compass-command.patch b/patches/server/0214-Add-compass-command.patch index eb81ce729..859fd7ce5 100644 --- a/patches/server/0214-Add-compass-command.patch +++ b/patches/server/0214-Add-compass-command.patch @@ -59,10 +59,10 @@ index 6d643998ee32de7f96b94e10fbd0b08a75628978..e2e83d8b39ddb154c0e69b63d5b99664 // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 4db13b4e9b37e2b704a3b0967ce26356753ef662..c2a3f004208dbaa84c810f5013da185174cbf525 100644 +index 3d857d6dcc93e622311252e1bfa66106fbbdb372..e5d6d1c583ac82bf957cbbceafa62a9c80d08de2 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -246,6 +246,11 @@ public class PurpurConfig { +@@ -257,6 +257,11 @@ public class PurpurConfig { public static String commandTPSBarTextColorMedium = ""; public static String commandTPSBarTextColorLow = ""; public static int commandTPSBarTickInterval = 20; @@ -74,7 +74,7 @@ index 4db13b4e9b37e2b704a3b0967ce26356753ef662..c2a3f004208dbaa84c810f5013da1851 public static boolean commandGamemodeRequiresPermission = false; public static boolean hideHiddenPlayersFromEntitySelector = false; public static String uptimeFormat = ""; -@@ -268,6 +273,13 @@ public class PurpurConfig { +@@ -279,6 +284,13 @@ public class PurpurConfig { commandTPSBarTextColorMedium = getString("settings.command.tpsbar.text-color.medium", commandTPSBarTextColorMedium); commandTPSBarTextColorLow = getString("settings.command.tpsbar.text-color.low", commandTPSBarTextColorLow); commandTPSBarTickInterval = getInt("settings.command.tpsbar.tick-interval", commandTPSBarTickInterval); diff --git a/patches/server/0236-Config-for-grindstones.patch b/patches/server/0236-Config-for-grindstones.patch index 44c7b4cae..e512132b0 100644 --- a/patches/server/0236-Config-for-grindstones.patch +++ b/patches/server/0236-Config-for-grindstones.patch @@ -57,37 +57,10 @@ index 0bdf874ddb951daf8d469575a44144504472d12d..855ff86696d27f7029ec8bd255820707 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 258ef634bac087710c77abff0a52954aa591ddd2..adeb257d6c7ec0fc3e390d17820a2ee42b684150 100644 +index e5d6d1c583ac82bf957cbbceafa62a9c80d08de2..bc02b09176ac2b3b1a8307ef5db34d576c42d70e 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -4,9 +4,13 @@ import co.aikar.timings.TimingsManager; - import com.google.common.base.Throwables; - import com.google.common.collect.ImmutableMap; - import net.kyori.adventure.bossbar.BossBar; -+import net.minecraft.core.Registry; -+import net.minecraft.resources.ResourceLocation; - import net.minecraft.server.MinecraftServer; - import net.minecraft.world.entity.EntityDimensions; - import net.minecraft.world.entity.EntityType; -+import net.minecraft.world.item.enchantment.Enchantment; -+ - import org.purpurmc.purpur.command.PurpurCommand; - import org.purpurmc.purpur.task.TPSBarTask; - import org.bukkit.Bukkit; -@@ -20,9 +24,12 @@ import java.io.IOException; - import java.lang.reflect.InvocationTargetException; - import java.lang.reflect.Method; - import java.lang.reflect.Modifier; -+import java.util.ArrayList; - import java.util.HashMap; -+import java.util.HashSet; - import java.util.List; - import java.util.Map; -+import java.util.Set; - import java.util.logging.Level; - - @SuppressWarnings("unused") -@@ -300,6 +307,9 @@ public class PurpurConfig { +@@ -311,6 +311,9 @@ public class PurpurConfig { public static int beeInsideBeeHive = 3; public static boolean anvilCumulativeCost = true; public static int lightningRodRange = 128; @@ -97,7 +70,7 @@ index 258ef634bac087710c77abff0a52954aa591ddd2..adeb257d6c7ec0fc3e390d17820a2ee4 private static void blockSettings() { if (version < 3) { boolean oldValue = getBoolean("settings.barrel.packed-barrels", true); -@@ -334,6 +344,19 @@ public class PurpurConfig { +@@ -345,6 +348,19 @@ public class PurpurConfig { beeInsideBeeHive = getInt("settings.blocks.beehive.max-bees-inside", beeInsideBeeHive); anvilCumulativeCost = getBoolean("settings.blocks.anvil.cumulative-cost", anvilCumulativeCost); lightningRodRange = getInt("settings.blocks.lightning_rod.range", lightningRodRange); diff --git a/patches/server/0237-UPnP-Port-Forwarding.patch b/patches/server/0237-UPnP-Port-Forwarding.patch index 51a3165dc..38038e3d6 100644 --- a/patches/server/0237-UPnP-Port-Forwarding.patch +++ b/patches/server/0237-UPnP-Port-Forwarding.patch @@ -67,10 +67,10 @@ index 9e83f2dea73461f698185f5ffdb6060e422b9494..6b503d7bdd0eb202ff3466dc1f691102 // CraftBukkit start // this.setPlayerList(new DedicatedPlayerList(this, this.registryHolder, this.playerDataStorage)); // Spigot - moved up diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index adeb257d6c7ec0fc3e390d17820a2ee42b684150..dfa5268c43c8c7726b581a6567d32838ac58eb6a 100644 +index bc02b09176ac2b3b1a8307ef5db34d576c42d70e..966f09b29a0a83c54fd7b8bfa4c8cf2df09a0900 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -406,4 +406,9 @@ public class PurpurConfig { +@@ -410,4 +410,9 @@ public class PurpurConfig { private static void tpsCatchup() { tpsCatchup = getBoolean("settings.tps-catchup", tpsCatchup); } diff --git a/patches/server/0252-Configurable-valid-characters-for-usernames.patch b/patches/server/0252-Configurable-valid-characters-for-usernames.patch index 31f704bf0..8ba723546 100644 --- a/patches/server/0252-Configurable-valid-characters-for-usernames.patch +++ b/patches/server/0252-Configurable-valid-characters-for-usernames.patch @@ -18,10 +18,10 @@ index 3fa13053722387db199f482307559219c381f4da..fd0f5b13c4254dd976a38a6e60d9e156 char c = in.charAt(i); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index dfa5268c43c8c7726b581a6567d32838ac58eb6a..4aba19f579e2340aa0b8070de33a14483f85235d 100644 +index 966f09b29a0a83c54fd7b8bfa4c8cf2df09a0900..effaa275749729dce59ab28de51609656bb9d4b5 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -411,4 +411,11 @@ public class PurpurConfig { +@@ -415,4 +415,11 @@ public class PurpurConfig { private static void networkSettings() { useUPnP = getBoolean("settings.network.upnp-port-forwarding", useUPnP); } diff --git a/patches/server/0253-Shears-can-have-looting-enchantment.patch b/patches/server/0253-Shears-can-have-looting-enchantment.patch index f7e2f80a8..a308ee86f 100644 --- a/patches/server/0253-Shears-can-have-looting-enchantment.patch +++ b/patches/server/0253-Shears-can-have-looting-enchantment.patch @@ -158,10 +158,10 @@ index 6b8a1535086aae7e4e3229d05615fb903188f507..60af917083de1b790b1d93d61835a669 public int getMinCost(int level) { return 15 + (level - 1) * 9; diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 4aba19f579e2340aa0b8070de33a14483f85235d..9f7631b643ebfb3b472bf2fd4280140d0b32cfc5 100644 +index effaa275749729dce59ab28de51609656bb9d4b5..013c3c41c6db66d44409fcd9df70704583efe113 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -@@ -361,6 +361,7 @@ public class PurpurConfig { +@@ -365,6 +365,7 @@ public class PurpurConfig { public static boolean allowInfinityMending = false; public static boolean allowCrossbowInfinity = false; @@ -169,7 +169,7 @@ index 4aba19f579e2340aa0b8070de33a14483f85235d..9f7631b643ebfb3b472bf2fd4280140d public static boolean allowUnsafeEnchants = false; private static void enchantmentSettings() { if (version < 5) { -@@ -370,6 +371,7 @@ public class PurpurConfig { +@@ -374,6 +375,7 @@ public class PurpurConfig { } allowInfinityMending = getBoolean("settings.enchantment.allow-infinity-and-mending-together", allowInfinityMending); allowCrossbowInfinity = getBoolean("settings.enchantment.allow-infinity-on-crossbow", allowCrossbowInfinity); diff --git a/patches/server/0261-Configurable-food-attributes.patch b/patches/server/0261-Configurable-food-attributes.patch new file mode 100644 index 000000000..8d7a7fc70 --- /dev/null +++ b/patches/server/0261-Configurable-food-attributes.patch @@ -0,0 +1,113 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: BillyGalbreath +Date: Tue, 18 Jan 2022 04:51:51 -0600 +Subject: [PATCH] Configurable food attributes + + +diff --git a/src/main/java/net/minecraft/world/food/FoodProperties.java b/src/main/java/net/minecraft/world/food/FoodProperties.java +index 9967ba762567631f2bdb1e4f8fe16a13ea927b46..019f90257ea0a651b9b1fcbeab505dcb37400dc4 100644 +--- a/src/main/java/net/minecraft/world/food/FoodProperties.java ++++ b/src/main/java/net/minecraft/world/food/FoodProperties.java +@@ -6,11 +6,13 @@ import java.util.List; + import net.minecraft.world.effect.MobEffectInstance; + + public class FoodProperties { +- private final int nutrition; +- private final float saturationModifier; +- private final boolean isMeat; +- private final boolean canAlwaysEat; +- private final boolean fastFood; ++ // Purpur start ++ private int nutrition; public void setNutrition(int nutrition) { this.nutrition = nutrition; } ++ private float saturationModifier; public void setSaturationModifier(float saturation) { this.saturationModifier = saturation; } ++ private boolean isMeat; public void setIsMeat(boolean isMeat) { this.isMeat = isMeat; } ++ private boolean canAlwaysEat; public void setCanAlwaysEat(boolean canAlwaysEat) { this.canAlwaysEat = canAlwaysEat; } ++ private boolean fastFood; public void setFastFood(boolean isFastFood) { this.fastFood = isFastFood; } ++ // Purpur end + private final List> effects; + + FoodProperties(int hunger, float saturationModifier, boolean meat, boolean alwaysEdible, boolean snack, List> statusEffects) { +diff --git a/src/main/java/net/minecraft/world/food/Foods.java b/src/main/java/net/minecraft/world/food/Foods.java +index b16d9e2eaa589f19c563ee70b1a56d67dbcdecb0..f31b689986d24bc21417cc3f25a4417bb5fc060f 100644 +--- a/src/main/java/net/minecraft/world/food/Foods.java ++++ b/src/main/java/net/minecraft/world/food/Foods.java +@@ -4,6 +4,8 @@ import net.minecraft.world.effect.MobEffectInstance; + import net.minecraft.world.effect.MobEffects; + + public class Foods { ++ public static final java.util.Map ALL_PROPERTIES = new java.util.HashMap<>(); // Purpur ++ + public static final FoodProperties APPLE = (new FoodProperties.Builder()).nutrition(4).saturationMod(0.3F).build(); + public static final FoodProperties BAKED_POTATO = (new FoodProperties.Builder()).nutrition(5).saturationMod(0.6F).build(); + public static final FoodProperties BEEF = (new FoodProperties.Builder()).nutrition(3).saturationMod(0.3F).meat().build(); +diff --git a/src/main/java/net/minecraft/world/item/Items.java b/src/main/java/net/minecraft/world/item/Items.java +index 513343d225a71e242b0f237eefcd25147709d9d1..b9233dde3f43a7420ea802b65f525d3827f82e4d 100644 +--- a/src/main/java/net/minecraft/world/item/Items.java ++++ b/src/main/java/net/minecraft/world/item/Items.java +@@ -1164,6 +1164,8 @@ public class Items { + ((BlockItem)item).registerBlocks(Item.BY_BLOCK, item); + } + ++ if (item.getFoodProperties() != null) Foods.ALL_PROPERTIES.put(id.getPath(), item.getFoodProperties()); // Purpur ++ + return Registry.register(Registry.ITEM, id, item); + } + } +diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java +index 013c3c41c6db66d44409fcd9df70704583efe113..57295abc0de7d8b95ec3bfb414be4a5693634890 100644 +--- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java ++++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java +@@ -424,4 +424,53 @@ public class PurpurConfig { + String setPattern = getString("settings.username-valid-characters", defaultPattern); + usernameValidCharactersPattern = java.util.regex.Pattern.compile(setPattern == null || setPattern.isBlank() ? defaultPattern : setPattern); + } ++ ++ private static void foodSettings() { ++ ConfigurationSection properties = config.getConfigurationSection("settings.food-properties"); ++ if (properties == null) { ++ PurpurConfig.log(Level.SEVERE, "missing food properties..."); ++ config.addDefault("settings.food-properties", new HashMap<>()); ++ return; ++ } ++ properties.getKeys(false).forEach(foodKey -> { ++ FoodProperties food = Foods.ALL_PROPERTIES.get(foodKey); ++ if (food == null) { ++ PurpurConfig.log(Level.SEVERE, "Invalid food property: " + foodKey); ++ return; ++ } ++ if (properties.contains(foodKey + ".nutrition")) food.setNutrition(properties.getInt(food + ".nutrition")); ++ if (properties.contains(foodKey + ".saturation-modifier")) food.setSaturationModifier((float) properties.getDouble(food + ".saturation-modifier")); ++ if (properties.contains(foodKey + ".is-meat")) food.setIsMeat(properties.getBoolean(food + ".is-meat")); ++ if (properties.contains(foodKey + ".can-always-eat")) food.setCanAlwaysEat(properties.getBoolean(food + ".can-always-eat")); ++ if (properties.contains(foodKey + ".fast-food")) food.setFastFood(properties.getBoolean(food + ".fast-food")); ++ ConfigurationSection effects = properties.getConfigurationSection(foodKey + ".effects"); ++ if (effects != null) { ++ Map def = new HashMap<>(); ++ food.getEffects().forEach(pair -> { ++ def.put("chance", pair.getSecond()); ++ MobEffectInstance effect = pair.getFirst(); ++ def.put("duration", effect.getDuration()); ++ def.put("amplifier", effect.getAmplifier()); ++ def.put("ambient", effect.isAmbient()); ++ def.put("visible", effect.isVisible()); ++ def.put("show-icon", effect.showIcon()); ++ }); ++ food.getEffects().clear(); ++ effects.getKeys(false).forEach(effectKey -> { ++ MobEffect effect = Registry.MOB_EFFECT.get(new ResourceLocation(effectKey)); ++ if (effect == null) { ++ PurpurConfig.log(Level.SEVERE, "Invalid food property effect for " + foodKey + ": " + effectKey); ++ return; ++ } ++ float chance = (float) effects.getDouble(effectKey + ".chance", (double) def.get("chance")); ++ int duration = effects.getInt(effectKey + ".duration", (int) def.get("duration")); ++ int amplifier = effects.getInt(effectKey + ".amplifier", (int) def.get("amplifier")); ++ boolean ambient = effects.getBoolean(effectKey + ".ambient", (boolean) def.get("ambient")); ++ boolean visible = effects.getBoolean(effectKey + ".visible", (boolean) def.get("visible")); ++ boolean showIcon = effects.getBoolean(effectKey + ".show-icon", (boolean) def.get("show-icon")); ++ food.getEffects().add(Pair.of(new MobEffectInstance(effect, duration, amplifier, ambient, visible, showIcon), chance)); ++ }); ++ } ++ }); ++ } + }