From cd5c785491197b8d8f27ecda786f5cea32e396b2 Mon Sep 17 00:00:00 2001 From: kinghzrd <86816435+kinghzrd@users.noreply.github.com> Date: Sun, 23 Jun 2024 04:03:32 +1200 Subject: [PATCH 1/3] Add max health and global health modifier Useful for quick changes if there are a lot of food registered (e.g. Farmer's Delight and its countless other addons). --- common/src/main/java/vice/sol_valheim/ModConfig.java | 8 +++++++- .../java/vice/sol_valheim/mixin/PlayerEntityMixin.java | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/vice/sol_valheim/ModConfig.java b/common/src/main/java/vice/sol_valheim/ModConfig.java index c54bd9a..b815088 100644 --- a/common/src/main/java/vice/sol_valheim/ModConfig.java +++ b/common/src/main/java/vice/sol_valheim/ModConfig.java @@ -96,6 +96,12 @@ public static final class Common implements ConfigData { @ConfigEntry.Gui.Tooltip() @Comment("Default time in seconds that food should last per saturation level") public int defaultTimer = 180; + @ConfigEntry.Gui.Tooltip() @Comment("Maximum number of hearts achievable via food") + public int maxFoodHealth = 40; + + @ConfigEntry.Gui.Tooltip() @Comment("Multiplier for health gained from food") + public float nutritionHealthModifier = 1f; + @ConfigEntry.Gui.Tooltip() @Comment("Speed at which regeneration should occur") public float regenSpeedModifier = 1f; @@ -144,7 +150,7 @@ public int getTime() { } public int getHearts() { - return Math.max(nutrition, 2); + return Math.round(Math.max(nutrition * SOLValheim.Config.common.nutritionHealthModifier, 2)); } public float getHealthRegen() diff --git a/common/src/main/java/vice/sol_valheim/mixin/PlayerEntityMixin.java b/common/src/main/java/vice/sol_valheim/mixin/PlayerEntityMixin.java index 201bf12..a5c3d79 100644 --- a/common/src/main/java/vice/sol_valheim/mixin/PlayerEntityMixin.java +++ b/common/src/main/java/vice/sol_valheim/mixin/PlayerEntityMixin.java @@ -98,7 +98,7 @@ private void onTick(CallbackInfo info) { sol_valheim$trackData(); } - float maxhp = Math.min(40, (SOLValheim.Config.common.startingHealth * 2) + sol_valheim$food_data.getTotalFoodNutrition()); + float maxhp = Math.min(SOLValheim.Config.common.maxFoodHealth * 2, (SOLValheim.Config.common.startingHealth * 2) + sol_valheim$food_data.getTotalFoodNutrition()); Player player = (Player) (LivingEntity) this; player.getFoodData().setSaturation(0); From e99031e7b6258f987b3ed46d1aab039145ac38d7 Mon Sep 17 00:00:00 2001 From: kinghzrd <86816435+kinghzrd@users.noreply.github.com> Date: Sun, 23 Jun 2024 14:53:10 +1200 Subject: [PATCH 2/3] Fix foodConfigs not loading --- .../main/java/vice/sol_valheim/ModConfig.java | 21 ++++++++++++------- .../java/vice/sol_valheim/SOLValheim.java | 10 +++++++-- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/common/src/main/java/vice/sol_valheim/ModConfig.java b/common/src/main/java/vice/sol_valheim/ModConfig.java index b815088..a7066e0 100644 --- a/common/src/main/java/vice/sol_valheim/ModConfig.java +++ b/common/src/main/java/vice/sol_valheim/ModConfig.java @@ -15,10 +15,7 @@ import net.minecraft.world.item.Items; import net.minecraft.world.item.UseAnim; -import java.util.ArrayList; -import java.util.Dictionary; -import java.util.Hashtable; -import java.util.List; +import java.util.*; @Config(name = SOLValheim.MOD_ID) @@ -30,7 +27,7 @@ public static Common.FoodConfig getFoodConfig(Item item) { if(item != Items.CAKE && !item.isEdible() && !isDrink) return null; - var existing = SOLValheim.Config.common.foodConfigs.get(item.arch$registryName()); + var existing = SOLValheim.Config.common.foodConfigs.get(item.arch$registryName().toString()); if (existing == null) { var registry = item.arch$registryName().toString(); @@ -74,7 +71,7 @@ else if (registry.contains("milk")) { // existing.extraEffects.add(effectConfig); // } - SOLValheim.Config.common.foodConfigs.put(item.arch$registryName(), existing); + SOLValheim.Config.common.foodConfigs.put(item.arch$registryName().toString(), existing); } return existing; @@ -136,7 +133,7 @@ Food nutrition and effect overrides (Auto Generated if Empty) - healthRegenModifier: Multiplies health regen speed - extraEffects: Extra effects provided by eating the food. Format: { String ID, float duration, int amplifier } """) - public Dictionary foodConfigs = new Hashtable<>(); + public LinkedHashMap foodConfigs = new LinkedHashMap<>() {{}}; public static final class FoodConfig implements ConfigData { public int nutrition; @@ -157,6 +154,16 @@ public float getHealthRegen() { return Mth.clamp(nutrition * 0.10f * healthRegenModifier, 0.25f, 2f); } + + @Override + public String toString() { + return "FoodConfig{" + + "nutrition=" + nutrition + + ", saturationModifier=" + saturationModifier + + ", healthRegenModifier=" + healthRegenModifier + + ", extraEffects=" + extraEffects + + '}'; + } } public static final class MobEffectConfig implements ConfigData { diff --git a/common/src/main/java/vice/sol_valheim/SOLValheim.java b/common/src/main/java/vice/sol_valheim/SOLValheim.java index 0684ac9..827721a 100644 --- a/common/src/main/java/vice/sol_valheim/SOLValheim.java +++ b/common/src/main/java/vice/sol_valheim/SOLValheim.java @@ -1,5 +1,6 @@ package vice.sol_valheim; +import com.mojang.logging.LogUtils; import dev.architectury.registry.registries.DeferredRegister; import net.minecraft.ChatFormatting; @@ -19,6 +20,7 @@ import me.shedaniel.autoconfig.AutoConfig; import me.shedaniel.autoconfig.serializer.JanksonConfigSerializer; import me.shedaniel.autoconfig.serializer.PartitioningSerializer; +import org.slf4j.Logger; import java.util.List; @@ -38,6 +40,8 @@ public class SOLValheim public static ModConfig Config; public static final String MOD_ID = "sol_valheim"; + static final Logger LOGGER = LogUtils.getLogger(); + private static AttributeModifier speedBuff; public static AttributeModifier getSpeedBuffModifier() { @@ -56,7 +60,7 @@ public static void init() { if (Config.common.foodConfigs.isEmpty()) { - System.out.println("Generating default food configs, this might take a second."); + LOGGER.info("Generating default food configs, this might take a second."); long startTime = System.nanoTime(); #if PRE_CURRENT_MC_1_19_2 @@ -70,7 +74,9 @@ public static void init() { long endTime = System.nanoTime(); long executionTime = (endTime - startTime) / 1000000; - System.out.println("Generating default food configs took " + executionTime + "ms."); + LOGGER.info("Generating default food configs took " + executionTime + "ms."); + } else { + LOGGER.info("Food configs loaded"); } // From a0af4d8daea45269e1952c66bb7e938cd02ba786 Mon Sep 17 00:00:00 2001 From: kinghzrd <86816435+kinghzrd@users.noreply.github.com> Date: Sun, 30 Jun 2024 18:48:50 +1200 Subject: [PATCH 3/3] Clean up and adjust changes to match initial version --- .../src/main/java/vice/sol_valheim/ModConfig.java | 14 ++------------ .../src/main/java/vice/sol_valheim/SOLValheim.java | 3 +-- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/common/src/main/java/vice/sol_valheim/ModConfig.java b/common/src/main/java/vice/sol_valheim/ModConfig.java index a7066e0..ff6472a 100644 --- a/common/src/main/java/vice/sol_valheim/ModConfig.java +++ b/common/src/main/java/vice/sol_valheim/ModConfig.java @@ -94,7 +94,7 @@ public static final class Common implements ConfigData { public int defaultTimer = 180; @ConfigEntry.Gui.Tooltip() @Comment("Maximum number of hearts achievable via food") - public int maxFoodHealth = 40; + public int maxFoodHealth = 20; @ConfigEntry.Gui.Tooltip() @Comment("Multiplier for health gained from food") public float nutritionHealthModifier = 1f; @@ -133,7 +133,7 @@ Food nutrition and effect overrides (Auto Generated if Empty) - healthRegenModifier: Multiplies health regen speed - extraEffects: Extra effects provided by eating the food. Format: { String ID, float duration, int amplifier } """) - public LinkedHashMap foodConfigs = new LinkedHashMap<>() {{}}; + public LinkedHashMap foodConfigs = new LinkedHashMap<>(); public static final class FoodConfig implements ConfigData { public int nutrition; @@ -154,16 +154,6 @@ public float getHealthRegen() { return Mth.clamp(nutrition * 0.10f * healthRegenModifier, 0.25f, 2f); } - - @Override - public String toString() { - return "FoodConfig{" + - "nutrition=" + nutrition + - ", saturationModifier=" + saturationModifier + - ", healthRegenModifier=" + healthRegenModifier + - ", extraEffects=" + extraEffects + - '}'; - } } public static final class MobEffectConfig implements ConfigData { diff --git a/common/src/main/java/vice/sol_valheim/SOLValheim.java b/common/src/main/java/vice/sol_valheim/SOLValheim.java index 827721a..570edb9 100644 --- a/common/src/main/java/vice/sol_valheim/SOLValheim.java +++ b/common/src/main/java/vice/sol_valheim/SOLValheim.java @@ -1,6 +1,5 @@ package vice.sol_valheim; -import com.mojang.logging.LogUtils; import dev.architectury.registry.registries.DeferredRegister; import net.minecraft.ChatFormatting; @@ -20,6 +19,7 @@ import me.shedaniel.autoconfig.AutoConfig; import me.shedaniel.autoconfig.serializer.JanksonConfigSerializer; import me.shedaniel.autoconfig.serializer.PartitioningSerializer; +import com.mojang.logging.LogUtils; import org.slf4j.Logger; import java.util.List; @@ -42,7 +42,6 @@ public class SOLValheim static final Logger LOGGER = LogUtils.getLogger(); - private static AttributeModifier speedBuff; public static AttributeModifier getSpeedBuffModifier() { if (speedBuff == null)