dawsonbodenhamer

AHP Config Files

Jul 26th, 2025
916
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 34.48 KB | None | 0 0
  1. ```java
  2. package net.dawson.adorablehamsterpets.config;
  3.  
  4. import me.fzzyhmstrs.fzzy_config.api.ConfigApiJava;
  5. import me.fzzyhmstrs.fzzy_config.api.RegisterType;
  6.  
  7. /**
  8.  * Static holder for the single Adorable Hamster Pets config.
  9.  * Touching {@code Configs.AHP} guarantees the config is registered,
  10.  * loaded from file, and its sync/GUI channels are ready.
  11.  */
  12. public final class Configs {
  13.  
  14.     /** Global, sync-enabled, GUI-enabled config instance. */
  15.     public static final AhpConfig AHP =
  16.             ConfigApiJava.registerAndLoadConfig(AhpConfig::new, RegisterType.BOTH);
  17.  
  18.     private Configs() {} // prevent instantiation
  19. }
  20. ```
  21.  
  22.  
  23. ```java
  24. package net.dawson.adorablehamsterpets.config;
  25.  
  26. import me.fzzyhmstrs.fzzy_config.annotations.ClientModifiable;
  27. import me.fzzyhmstrs.fzzy_config.annotations.RootConfig;
  28. import me.fzzyhmstrs.fzzy_config.config.Config;
  29. import me.fzzyhmstrs.fzzy_config.config.ConfigAction;
  30. import me.fzzyhmstrs.fzzy_config.config.ConfigGroup;
  31. import me.fzzyhmstrs.fzzy_config.screen.widget.TextureIds;
  32. import me.fzzyhmstrs.fzzy_config.util.Translatable;
  33. import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedDouble;
  34. import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedFloat;
  35. import me.fzzyhmstrs.fzzy_config.validation.number.ValidatedInt;
  36. import net.dawson.adorablehamsterpets.AdorableHamsterPets;
  37. import net.minecraft.text.ClickEvent;
  38. import net.minecraft.text.Text;
  39. import net.minecraft.util.Identifier;
  40.  
  41. import java.util.ArrayList;
  42. import java.util.List;
  43.  
  44. /**
  45.  * Root-level, single-file config for Adorable Hamster Pets.
  46.  */
  47. @Translatable.Name("Adorable Hamster Pets")
  48. @Translatable.Desc("Questionable Configuration Options")
  49. @RootConfig
  50. public class AhpConfig extends Config {
  51.  
  52.     public AhpConfig() {
  53.         super(Identifier.of(AdorableHamsterPets.MOD_ID, "main"));
  54.     }
  55.  
  56.     // --- Help & Other Distractions ---
  57.     @Translatable.Name("Help & Other Distractions")
  58.     @Translatable.Desc("Buttons for when you’re lost, bored, or met a bug that’s not just existential hamster angst.")
  59.     public ConfigGroup helpAndResources = new ConfigGroup("helpAndResources", false);
  60.  
  61.     @ClientModifiable
  62.     @Translatable.Name("I Lost My Book!")
  63.     @Translatable.Desc("Misplaced your invaluable tome of rodent wisdom? Click here. I won't tell anyone.")
  64.     public ConfigAction giveGuideBook = new ConfigAction.Builder()
  65.             .title(Text.translatable("config.adorablehamsterpets.main.helpAndResources.giveGuideBook"))
  66.             .desc(Text.translatable("config.adorablehamsterpets.main.helpAndResources.giveGuideBook.desc"))
  67.             .decoration(TextureIds.INSTANCE.getDECO_BOOK())
  68.             .build(new ClickEvent(ClickEvent.Action.RUN_COMMAND,
  69.                     "/function adorablehamsterpets:technical/give_guide_book"));
  70.  
  71.     @ClientModifiable
  72.     @Translatable.Name("Report a Bug")
  73.     @Translatable.Desc("Found a game-breaking issue? Or a hamster phasing through the floor? Let me know on Github. The more details, the better. And believe it or not, I do check this frequently.")
  74.     public ConfigAction reportBug = new ConfigAction.Builder()
  75.             .title(Text.translatable("config.adorablehamsterpets.main.helpAndResources.reportBug"))
  76.             .desc(Text.translatable("config.adorablehamsterpets.main.helpAndResources.reportBug.desc"))
  77.             .decoration(TextureIds.INSTANCE.getDECO_LINK())
  78.             .build(new ClickEvent(ClickEvent.Action.OPEN_URL,
  79.                     "https://github.com/DawsonBodenhamer/Adorable-Hamster-Pets-1.21/issues"));
  80.  
  81.     @ClientModifiable
  82.     @Translatable.Name("Join Discord")
  83.     @Translatable.Desc("Join 'The Hamster Pouch' official Discord server. A place to share screenshots, get support, or just witness the ongoing development chaos. You're invited.")
  84.     public ConfigAction joinDiscord = new ConfigAction.Builder()
  85.             .title(Text.translatable("config.adorablehamsterpets.main.helpAndResources.joinDiscord"))
  86.             .desc(Text.translatable("config.adorablehamsterpets.main.helpAndResources.joinDiscord.desc"))
  87.             .decoration(TextureIds.INSTANCE.getDECO_BUTTON_CLICK())
  88.             .build(new ClickEvent(ClickEvent.Action.OPEN_URL,
  89.                     "https://discord.gg/w54mk5bqdf"));
  90.  
  91.     @ClientModifiable
  92.     @ConfigGroup.Pop
  93.     @Translatable.Name("Visit My Website")
  94.     @Translatable.Desc("Shameless plug for my other, less-rodent-focused work. Click if you dare.")
  95.     public ConfigAction visitWebsite = new ConfigAction.Builder()
  96.             .title(Text.translatable("config.adorablehamsterpets.main.helpAndResources.visitWebsite"))
  97.             .desc(Text.translatable("config.adorablehamsterpets.main.helpAndResources.visitWebsite.desc"))
  98.             .decoration(TextureIds.INSTANCE.getDECO_LINK())
  99.             .build(new ClickEvent(ClickEvent.Action.OPEN_URL,
  100.                     "https://www.fortheking.design"));
  101.  
  102.     // --- UI & Quality of Life ---
  103.     @Translatable.Name("UI & Quality of Life")
  104.     @Translatable.Desc("Because Sanity is Overrated")
  105.     public ConfigGroup uiPreferences = new ConfigGroup("uiPreferences", true);
  106.  
  107.     @ClientModifiable
  108.     @Translatable.Name("Enable Auto Guidebook Delivery")
  109.     @Translatable.Desc("Hand-delivers the sacred texts on first login. Read it—or don’t. I'm not your conscience.")
  110.     public boolean enableAutoGuidebookDelivery = true;
  111.  
  112.     @ClientModifiable
  113.     @Translatable.Name("Enable Mod Item Tooltips")
  114.     @Translatable.Desc("Helpful whispers on what the heck that cucumber is for.")
  115.     public boolean enableItemTooltips = true;
  116.  
  117.     @ClientModifiable
  118.     @Translatable.Name("Enable Shoulder Dismount Messages")
  119.     @Translatable.Desc("Little status mumbles when your co-pilot disembarks.")
  120.     public boolean enableShoulderDismountMessages = true;
  121.  
  122.     @ClientModifiable
  123.     @ConfigGroup.Pop
  124.     @Translatable.Name("Enable Jade Hamster Debug Info")
  125.     @Translatable.Desc("More stats than anyone asked for. Defaults to off—mercifully.")
  126.     public boolean enableJadeHamsterDebugInfo = false;
  127.  
  128.     // --- Core Feature Toggles ---
  129.     @Translatable.Name("Core Feature Toggles")
  130.     @Translatable.Desc("Fundamental hamster hijinks— fiddle at your own risk.")
  131.     public ConfigGroup core = new ConfigGroup("core", true);
  132.  
  133.     @Translatable.Name("Enable Hamster Throwing")
  134.     @Translatable.Desc("Do we yeet the hamster? ('G' by default).")
  135.     public boolean enableHamsterThrowing = true;
  136.  
  137.     @Translatable.Name("Require Food Mix to Unlock Cheeks")
  138.     @Translatable.Desc("Gate cheek-pouch storage behind gourmet cuisine, because drama.")
  139.     public boolean requireFoodMixToUnlockCheeks = true;
  140.  
  141.     @ClientModifiable
  142.     @ConfigGroup.Pop
  143.     @Translatable.Name("Use 'Hampter' as Default Name")
  144.     @Translatable.Desc("Changes the default entity name from 'Hamster' to 'Hampter'. Note: This has no visible effect in vanilla Minecraft, as mobs don't show nameplates by default. It's primarily for use with mods like Auto Leveling that display entity names.")
  145.     public boolean useHampterName = false;
  146.  
  147.     // --- Core Cooldown Settings ---
  148.     @Translatable.Name("Core Cooldown Settings")
  149.     @Translatable.Desc("Mandatory hamster union breaks between heroic stunts.")
  150.     public ConfigGroup cooldowns = new ConfigGroup("cooldowns", true);
  151.  
  152.     @Translatable.Name("Cleaning Frequency")
  153.     @Translatable.Desc("How often a sitting hamster gets the sudden urge to clean. It's a 1-in-X chance per tick, so lower numbers mean a higher chance for cleaning. For example, 1200 means on average, it'll clean about once a minute. 300 ≈ every 15 secs, and 5000 ≈ every 4 mins. Congratulations— now you know enough to be dangerous.")
  154.     public ValidatedInt cleaningChanceDenominator = new ValidatedInt(1200, 5000, 300);
  155.  
  156.     @Translatable.Name("Throw Cooldown (Ticks)")
  157.     @Translatable.Desc("Time-out after using your living projectile. (20 ticks = 1 s)")
  158.     public ValidatedInt hamsterThrowCooldown = new ValidatedInt(2400, 20 * 60 * 10, 20);
  159.  
  160.     @Translatable.Name("Green Bean Buff Cooldown (Ticks)")
  161.     @Translatable.Desc("When the sugar rush ends, force a breather. (20 ticks = 1 s)")
  162.     public ValidatedInt steamedGreenBeansBuffCooldown = new ValidatedInt(6000, 20 * 60 * 10, 20);
  163.  
  164.     @Translatable.Name("Enable Diamond Seeking Cooldown?")
  165.     @Translatable.Desc("Force a cool-down after striking it rich. Off by default, since this can't happen again anyway without another mount/dismount on the shoulder.")
  166.     public boolean enableIndependentDiamondSeekCooldown = false;
  167.  
  168.     @Translatable.Name("Diamond Seeking Cooldown (Ticks)")
  169.     @Translatable.Desc("Cooldown before your hamster can go on another treasure hunt. (20 ticks = 1 s)")
  170.     public ValidatedInt independentOreSeekCooldownTicks = new ValidatedInt(2400, 6000, 20);
  171.  
  172.     @Translatable.Name("Diamond Thievery Cooldown (Ticks)")
  173.     @Translatable.Desc("Mandatory time-out after a successful heist to prevent serial kleptomania. (20 ticks = 1s). WARNING: Increasing this cooldown can dramatically change the diamond stealing mechanic, since that AI goal sometimes re-runs multiple times in a row when the hamster has trouble pathfinding to the item that it wants to steal. So instead of increasing this, you should probably just stop dropping your diamonds on the ground everywhere, butter fingers.")
  174.     public ValidatedInt stealCooldownTicks = new ValidatedInt(100, 6000, 20);
  175.  
  176.     @ConfigGroup.Pop
  177.     @Translatable.Name("Breeding Cooldown (Ticks)")
  178.     @Translatable.Desc("Hamsters need their space. (20 ticks = 1 s)")
  179.     public ValidatedInt breedingCooldownTicks = new ValidatedInt(6000, 24000, 600);
  180.  
  181.     // --- Spawn Settings ---
  182.     @Translatable.Name("Spawn Settings")
  183.     @Translatable.Desc("How Many, Where, and How Often?  Note: Some of these settings require re-logging into your world to take effect.")
  184.     public ConfigGroup hamsterSpawning = new ConfigGroup("hamsterSpawning", true);
  185.  
  186.     @Translatable.Name("Spawn Weight")
  187.     @Translatable.Desc("Adjusts hamster spawn frequency. Higher = more chaos. 1 = blissful silence.")
  188.     public ValidatedInt spawnWeight = new ValidatedInt(30, 100, 1);
  189.  
  190.     @Translatable.Name("Max Group Size")
  191.     @Translatable.Desc("Maximum hamsters per spawn group. Because sometimes one just isn't cute enough.")
  192.     public ValidatedInt maxGroupSize = new ValidatedInt(1, 10, 1);
  193.  
  194.     @Translatable.Name("Vanilla Biome Tags")
  195.     @Translatable.Desc("A list of biome tags where hamsters can spawn. Format: 'mod_id:tag_name'. For example, 'minecraft:is_forest'.")
  196.     public List<String> spawnBiomeTags = new ArrayList<>(List.of(
  197.             "minecraft:is_beach",
  198.             "minecraft:is_badlands",
  199.             "minecraft:is_savanna",
  200.             "minecraft:is_jungle",
  201.             "minecraft:is_forest",
  202.             "minecraft:is_taiga",
  203.             "minecraft:is_mountain"
  204.     ));
  205.  
  206.     @Translatable.Name("Convention Biome Tags")
  207.     @Translatable.Desc("A list of 'c:' convention biome tags where hamsters can spawn. Used for broad mod compatibility. By default, this includes most common overworld types.")
  208.     public List<String> spawnBiomeConventionTags = new ArrayList<>(List.of(
  209.             "c:is_cold",
  210.             "c:is_hot",
  211.             "c:is_temperate",
  212.             "c:is_dry",
  213.             "c:is_wet",
  214.             "c:is_dense_vegetation",
  215.             "c:is_sparse_vegetation"
  216.     ));
  217.  
  218.     @Translatable.Name("Include Specific Biomes")
  219.     @Translatable.Desc("A list of specific biome IDs to ALWAYS allow spawns in, even if they don't match the tags above. Format: 'mod_id:biome_name'. For example, 'minecraft:plains'.")
  220.     public List<String> includeBiomes = new ArrayList<>(List.of(
  221.             // Specific Biomes from old isKeyInSpawnList
  222.             "minecraft:snowy_plains", "minecraft:snowy_taiga", "minecraft:snowy_slopes",
  223.             "minecraft:frozen_peaks", "minecraft:jagged_peaks", "minecraft:grove",
  224.             "minecraft:frozen_river", "minecraft:snowy_beach", "minecraft:frozen_ocean",
  225.             "minecraft:deep_frozen_ocean", "minecraft:ice_spikes", "minecraft:cherry_grove",
  226.             "minecraft:lush_caves", "minecraft:dripstone_caves", "minecraft:deep_dark",
  227.             "minecraft:swamp", "minecraft:mangrove_swamp", "minecraft:desert",
  228.             "minecraft:plains", "minecraft:sunflower_plains", "minecraft:meadow",
  229.             "minecraft:old_growth_birch_forest", "minecraft:windswept_hills",
  230.             "minecraft:windswept_gravelly_hills", "minecraft:windswept_forest",
  231.             "minecraft:windswept_savanna", "minecraft:stony_peaks", "minecraft:sparse_jungle",
  232.             "minecraft:bamboo_jungle", "minecraft:stony_shore", "minecraft:mushroom_fields",
  233.             "minecraft:deep_dark", "minecraft:forest", "minecraft:birch_forest", "minecraft:dark_forest",
  234.             "minecraft:taiga", "minecraft:old_growth_pine_taiga", "minecraft:old_growth_spruce_taiga",
  235.             "minecraft:savanna", "minecraft:savanna_plateau", "minecraft:badlands",
  236.             "minecraft:eroded_badlands", "minecraft:wooded_badlands", "minecraft:beach",
  237.  
  238.             "terralith:desert_canyon", "terralith:cave/andesite_caves", "terralith:cave/crystal_caves", "terralith:cave/deep_caves", "terralith:cave/desert_caves", "terralith:cave/diorite_caves", "terralith:cave/frostfire_caves", "terralith:cave/fungal_caves", "terralith:cave/granite_caves", "terralith:cave/ice_caves", "terralith:cave/infested_caves", "terralith:cave/mantle_caves", "terralith:cave/thermal_caves", "terralith:cave/tuff_caves", "terralith:cave/underground_jungle",
  239.             "terralith:alpha_islands_winter", "terralith:alpha_islands", "terralith:alpine_grove", "terralith:alpine_highlands", "terralith:amethyst_canyon", "terralith:amethyst_rainforest", "terralith:ancient_sands", "terralith:arid_highlands", "terralith:ashen_savanna",
  240.             "terralith:basalt_cliffs", "terralith:birch_taiga", "terralith:blooming_plateau", "terralith:blooming_valley", "terralith:brushland", "terralith:bryce_canyon", "terralith:caldera", "terralith:cloud_forest", "terralith:cold_shrubland",
  241.             "terralith:desert_oasis", "terralith:desert_spires", "terralith:emerald_peaks", "terralith:forested_highlands", "terralith:fractured_savanna", "terralith:frozen_cliffs", "terralith:glacial_chasm", "terralith:granite_cliffs",
  242.             "terralith:gravel_beach", "terralith:gravel_desert", "terralith:haze_mountain", "terralith:highlands", "terralith:hot_shrubland", "terralith:ice_marsh", "terralith:jungle_mountains",
  243.             "terralith:lavender_forest", "terralith:lavender_valley", "terralith:lush_desert", "terralith:lush_valley", "terralith:mirage_isles", "terralith:moonlight_grove", "terralith:moonlight_valley", "terralith:mountain_steppe",
  244.             "terralith:orchid_swamp", "terralith:painted_mountains", "terralith:red_oasis", "terralith:rocky_jungle", "terralith:rocky_mountains", "terralith:rocky_shrubland",
  245.             "terralith:sakura_grove", "terralith:sakura_valley", "terralith:sandstone_valley", "terralith:savanna_badlands", "terralith:savanna_slopes", "terralith:scarlet_mountains",
  246.             "terralith:shield_clearing", "terralith:shield", "terralith:shrubland", "terralith:siberian_grove", "terralith:siberian_taiga",
  247.             "terralith:skylands_autumn", "terralith:skylands_spring", "terralith:skylands_summer", "terralith:skylands_winter", "terralith:skylands",
  248.             "terralith:snowy_badlands", "terralith:snowy_cherry_grove", "terralith:snowy_maple_forest", "terralith:snowy_shield",
  249.             "terralith:steppe", "terralith:stony_spires", "terralith:temperate_highlands", "terralith:tropical_jungle", "terralith:valley_clearing",
  250.             "terralith:volcanic_crater", "terralith:volcanic_peaks", "terralith:warm_river", "terralith:warped_mesa", "terralith:white_cliffs", "terralith:white_mesa",
  251.             "terralith:windswept_spires", "terralith:wintry_forest", "terralith:wintry_lowlands", "terralith:yellowstone", "terralith:yosemite_cliffs", "terralith:yosemite_lowlands",
  252.  
  253.             "biomesoplenty:wasteland", "biomesoplenty:wasteland_steppe",
  254.             "biomesoplenty:mediterranean_forest", "biomesoplenty:mystic_grove", "biomesoplenty:orchard", "biomesoplenty:pumpkin_patch",
  255.             "biomesoplenty:redwood_forest", "biomesoplenty:seasonal_forest", "biomesoplenty:woodland",
  256.             "biomesoplenty:floodplain", "biomesoplenty:fungal_jungle", "biomesoplenty:rainforest", "biomesoplenty:rocky_rainforest",
  257.  
  258.             "byg:lush_stacks", "byg:orchard", "byg:frosted_coniferous_forest", "byg:allium_fields", "byg:amaranth_fields", "byg:rose_fields",
  259.             "byg:temperate_grove", "byg:coconino_meadow", "byg:skyris_vale", "byg:prairie", "byg:autumnal_valley", "byg:cardinal_tundra", "byg:firecracker_shrubland",
  260.             "byg:allium_shrubland", "byg:amaranth_grassland", "byg:araucaria_savanna", "byg:aspen_boreal", "byg:atacama_outback", "byg:baobab_savanna",
  261.             "byg:basalt_barrera", "byg:bayou", "byg:black_forest", "byg:canadian_shield", "byg:cika_woods", "byg:coniferous_forest",
  262.             "byg:crimson_tundra", "byg:cypress_swamplands", "byg:dacite_ridges", "byg:dacite_shore", "byg:dead_sea", "byg:ebony_woods",
  263.             "byg:enchanted_tangle", "byg:eroded_borealis", "byg:firecracker_chaparral", "byg:forgotten_forest", "byg:fragment_jungle",
  264.             "byg:frosted_taiga", "byg:howling_peaks", "byg:ironwood_gour", "byg:jacaranda_jungle", "byg:maple_taiga", "byg:mojave_desert",
  265.             "byg:overgrowth_woodlands", "byg:pumpkin_valley", "byg:rainbow_beach", "byg:red_rock_valley", "byg:redwood_thicket",
  266.             "byg:rugged_badlands", "byg:sakura_grove", "byg:shattered_glacier", "byg:sierra_badlands", "byg:skyrise_vale",
  267.             "byg:tropical_rainforest", "byg:weeping_witch_forest", "byg:white_mangrove_marshes", "byg:windswept_desert", "byg:zelkova_forest"
  268.     ));
  269.  
  270.     @ConfigGroup.Pop
  271.     @Translatable.Name("Exclude Specific Biomes")
  272.     @Translatable.Desc("A list of specific biome IDs to NEVER allow spawns in, even if they match a tag. This overrides all other settings. Format: 'mod_id:biome_name'. For example, 'minecraft:plains'.")
  273.     public List<String> excludeBiomes = new ArrayList<>(List.of("mod_id:biome_name"));
  274.  
  275.     // --- Taming & Breeding Settings ---
  276.     @Translatable.Name("Taming & Breeding Settings")
  277.     @Translatable.Desc("Convince a hamster to love you—and occasionally accept a roommate.")
  278.     public ConfigGroup tamingAndBreeding = new ConfigGroup("tamingAndBreeding", true);
  279.  
  280.     @ConfigGroup.Pop
  281.     @Translatable.Name("Taming Chance")
  282.     @Translatable.Desc("Taming difficulty (1 in X chance). Higher = more cucumbers sacrificed to fuzzy freeloaders.")
  283.     public ValidatedInt tamingChanceDenominator = new ValidatedInt(3, 20, 1);
  284.  
  285.     // --- Shoulder Feature Settings ---
  286.     @Translatable.Name("Shoulder Feature Settings")
  287.     @Translatable.Desc("Change how the fuzzy parrot of doom whispers danger—and diamonds—into your ear.")
  288.     public ConfigGroup shoulder = new ConfigGroup("shoulder", true);
  289.  
  290.     @Translatable.Name("Enable Creeper Detection")
  291.     @Translatable.Desc("May save your inventory. Or your ears.")
  292.     public boolean enableShoulderCreeperDetection = true;
  293.  
  294.     @Translatable.Name("Creeper Detection Radius (Blocks)")
  295.     @Translatable.Desc("Adjust paranoia levels.")
  296.     public ValidatedDouble shoulderCreeperDetectionRadius = new ValidatedDouble(16.0, 16.0, 1.0);
  297.  
  298.     @Translatable.Name("Enable Diamond Detection")
  299.     @Translatable.Desc("Because who doesn’t enjoy unsolicited financial advice from a rodent?")
  300.     public boolean enableShoulderDiamondDetection = true;
  301.  
  302.     @ConfigGroup.Pop
  303.     @Translatable.Name("Diamond Detection Radius (Blocks)")
  304.     @Translatable.Desc("How close you need to be before the squeak says \"bling.\"")
  305.     public ValidatedDouble shoulderDiamondDetectionRadius = new ValidatedDouble(10.0, 20.0, 5.0);
  306.  
  307.     // --- Hamster Yeet Settings ---
  308.     @Translatable.Name("Hamster Yeet Settings")
  309.     @Translatable.Desc("For when you need a furry, surprisingly aerodynamic solution.")
  310.     public ConfigGroup yeetSettings = new ConfigGroup("yeetSettings", true);
  311.  
  312.     @Translatable.Name("Throw Velocity")
  313.     @Translatable.Desc("The base throw speed of your furry projectile.")
  314.     public ValidatedDouble hamsterThrowVelocity = new ValidatedDouble(1.5, 5.0, 0.1);
  315.  
  316.     @ConfigGroup.Pop
  317.     @Translatable.Name("Throw Velocity (Buffed)")
  318.     @Translatable.Desc("The throw speed of your furry projectile when under the influence of Steamed Green Beans. Goes from 'yeet' to 'yote'.")
  319.     public ValidatedDouble hamsterThrowVelocityBuffed = new ValidatedDouble(2.5, 5.0, 0.1);
  320.  
  321.     // --- Independent Diamond Seeking Settings ---
  322.     @Translatable.Name("Independent Diamond Seeking Settings")
  323.     @Translatable.Desc("Unleash free-range prospectors. What could go wrong?")
  324.     public ConfigGroup independentDiamondSeeking = new ConfigGroup("independentDiamondSeeking", true);
  325.  
  326.     @Translatable.Name("Enable Independent Diamond Seeking")
  327.     @Translatable.Desc("Permit hamsters to embark on solo get-rich-quick schemes?")
  328.     public boolean enableIndependentDiamondSeeking = true;
  329.  
  330.     @Translatable.Name("Diamond Seek Scan Radius (Blocks)")
  331.     @Translatable.Desc("How far a hamster scans once it’s decided to play prospector.")
  332.     public ValidatedInt diamondSeekRadius = new ValidatedInt(10, 20, 5);
  333.  
  334.     @ConfigGroup.Pop
  335.     @Translatable.Name("Gold 'Mistake' Chance")
  336.     @Translatable.Desc("The probability (0.0 to 1.0) that a hamster will seek gold instead of diamond, if both are available. At 0.5, it's a coin toss. At 1.0, it's guaranteed hamster sulking.")
  337.     public ValidatedFloat goldMistakeChance = new ValidatedFloat(0.33f, 1.0f, 0.0f);
  338.  
  339.     // --- Diamond Stealing Behavior Settings---
  340.     @Translatable.Name("Diamond Stealing Behavior Settings")
  341.     @Translatable.Desc("For when your hamster develops a taste for the finer things in life. Can be configured so they steal any item— even from other mods, but they only steal diamonds by default.")
  342.     public ConfigGroup diamondStealing = new ConfigGroup("diamondStealing", true);
  343.  
  344.     @Translatable.Name("Enable Diamond Stealing")
  345.     @Translatable.Desc("Permits hamsters to engage in spontaneous, high-stakes games of keep-away with your valuables. A chase ensues. Obviously.")
  346.     public boolean enableDiamondStealing = true;
  347.  
  348.     @Translatable.Name("Stealable Items")
  349.     @Translatable.Desc("A list of item IDs hamsters find irresistible. Format: 'mod_id:item_id'. Example: 'minecraft:diamond'.")
  350.     public List<String> stealableItems = new ArrayList<>(List.of("minecraft:diamond"));
  351.  
  352.     @Translatable.Name("Pounce Chance")
  353.     @Translatable.Desc("Probability (0.1 to 1.0) a hamster will succumb to temptation. High by default. You shouldn't leave your diamonds lying around anyway.")
  354.     public ValidatedFloat diamondPounceChance = new ValidatedFloat(0.75f, 1.0f, 0.1f);
  355.  
  356.     @Translatable.Name("Minimum Flee Distance (Blocks)")
  357.     @Translatable.Desc("The hamster's personal space bubble.")
  358.     public ValidatedInt minFleeDistance = new ValidatedInt(5, 20, 1);
  359.  
  360.     @Translatable.Name("Maximum Flee Distance (Blocks)")
  361.     @Translatable.Desc("The maximum distance before the hamster gets bored and stops running to taunt you.")
  362.     public ValidatedInt maxFleeDistance = new ValidatedInt(20, 40, 5);
  363.  
  364.     @Translatable.Name("Minimum Steal Duration (Seconds)")
  365.     @Translatable.Desc("The shortest amount of time the hamster will entertain this little game before getting bored and dropping your stuff.")
  366.     public ValidatedInt minStealDurationSeconds = new ValidatedInt(5, 240, 1);
  367.  
  368.     @ConfigGroup.Pop
  369.     @Translatable.Name("Maximum Steal Duration (Seconds)")
  370.     @Translatable.Desc("The longest your cardio session can last before the hamster's attention span gives out.")
  371.     public ValidatedInt maxStealDurationSeconds = new ValidatedInt(15, 300, 5);
  372.  
  373.     // --- Tamed Sleep Settings ---
  374.     @Translatable.Name("Tamed Sleep Settings")
  375.     @Translatable.Desc("Even digital rodents need beauty sleep— adjust according to your patience levels.")
  376.     public ConfigGroup tamedSleepSettings = new ConfigGroup("tamedSleepSettings", true);
  377.  
  378.     @Translatable.Name("Threat Radius (Blocks)")
  379.     @Translatable.Desc("How close a hostile mob can get before a hamster wakes up from it's power nap.")
  380.     public ValidatedInt tamedSleepThreatDetectionRadiusBlocks = new ValidatedInt(8, 32, 1);
  381.  
  382.     @Translatable.Name("Require Daytime?")
  383.     @Translatable.Desc("Night-owl hamsters? Your choice.")
  384.     public boolean requireDaytimeForTamedSleep = true;
  385.  
  386.     @Translatable.Name("Min Sit Time Before Drowsy (Secs)")
  387.     @Translatable.Desc("Minimum seconds before a sitting hamster gets sleepy.")
  388.     public ValidatedInt tamedQuiescentSitMinSeconds = new ValidatedInt(120, 300, 1);
  389.  
  390.     @ConfigGroup.Pop
  391.     @Translatable.Name("Max Sit Time Before Drowsy (Secs)")
  392.     @Translatable.Desc("Maximum seconds before the inevitable deep snooze.")
  393.     public ValidatedInt tamedQuiescentSitMaxSeconds = new ValidatedInt(180, 600, 2);
  394.  
  395.     // --- Combat & Damage Settings ---
  396.     @Translatable.Name("Combat & Damage Settings")
  397.     @Translatable.Desc("Squeak-first, ask questions later. Dial in the rodent kung fu.")
  398.     public ConfigGroup combat = new ConfigGroup("combat", true);
  399.  
  400.     @Translatable.Name("Melee Damage")
  401.     @Translatable.Desc("Tamed hamster melee damage. Mostly for show, let's be honest.")
  402.     public ValidatedDouble meleeDamage = new ValidatedDouble(2.0, 40.0, 0.0);
  403.  
  404.     @ConfigGroup.Pop
  405.     @Translatable.Name("Throw Damage")
  406.     @Translatable.Desc("Damage dealt by thrown hamster. Surprisingly effective against Creepers. How convenient.")
  407.     public ValidatedDouble hamsterThrowDamage = new ValidatedDouble(20.0, 40.0, 0.0);
  408.  
  409.     // --- Food Healing Settings ---
  410.     @Translatable.Name("Food Healing Settings")
  411.     @Translatable.Desc("Nutrition— isn't it wonderful. Tweaks to snacks.")
  412.     public ConfigGroup foodHealing = new ConfigGroup("foodHealing", true);
  413.  
  414.     @Translatable.Name("Food Mix")
  415.     @Translatable.Desc("Healing amount from Hamster Food Mix. The good stuff.")
  416.     public ValidatedFloat hamsterFoodMixHealing = new ValidatedFloat(4.0f, 10.0f, 0.0f);
  417.  
  418.     @ConfigGroup.Pop
  419.     @Translatable.Name("Standard Food")
  420.     @Translatable.Desc("Healing from basic seeds/crops. Better than nothing… probably.")
  421.     public ValidatedFloat standardFoodHealing = new ValidatedFloat(2.0f, 5.0f, 0.0f);
  422.  
  423.     // --- Cheese Food Settings ---
  424.     @Translatable.Name("Cheese Settings")
  425.     @Translatable.Desc("Cheese... the gooey wonder. Some people think it's overpowered. I disagree. Obviously.")
  426.     public ConfigGroup cheeseHealing = new ConfigGroup("cheeseHealing", true);
  427.  
  428.     @Translatable.Name("Cheese Nutrition")
  429.     @Translatable.Desc("How many little hunger shanks the cheese restores. Vanilla cooked steak is 8. I know you're thinking of moving it to 20, you monster.")
  430.     public ValidatedInt cheeseNutrition = new ValidatedInt(8, 20, 0);
  431.  
  432.     @ConfigGroup.Pop
  433.     @Translatable.Name("Cheese Saturation")
  434.     @Translatable.Desc("How long the hunger effect lasts. Cooked steak is 0.8. Don't get too crazy. Or do. I'm not your conscience.")
  435.     public ValidatedFloat cheeseSaturation = new ValidatedFloat(0.8f, 2.0f, 0.0f);
  436.  
  437.     // --- Green Bean Buff Settings ---
  438.     @Translatable.Name("Green Bean Buff Settings")
  439.     @Translatable.Desc("Nutrition, but make it dramatic. Tweaks to caffeine-bean highs.")
  440.     public ConfigGroup greenBeanBuffs = new ConfigGroup("greenBeanBuffs", true);
  441.  
  442.     @Translatable.Name("Duration (Ticks)")
  443.     @Translatable.Desc("Steamed beans: power that fades faster than your attention span.")
  444.     public ValidatedInt greenBeanBuffDuration = new ValidatedInt(3600, 20 * 60 * 10, 20);
  445.  
  446.     @Translatable.Name("Speed Level")
  447.     @Translatable.Desc("Because someone has to go fast.")
  448.     public ValidatedInt greenBeanBuffAmplifierSpeed = new ValidatedInt(1, 4, 0);
  449.  
  450.     @Translatable.Name("Strength Level")
  451.     @Translatable.Desc("Slightly mightier nibbles.")
  452.     public ValidatedInt greenBeanBuffAmplifierStrength = new ValidatedInt(1, 4, 0);
  453.  
  454.     @Translatable.Name("Absorption Level")
  455.     @Translatable.Desc("Extra fluff padding for those daring dives.")
  456.     public ValidatedInt greenBeanBuffAmplifierAbsorption = new ValidatedInt(1, 4, 0);
  457.  
  458.     @ConfigGroup.Pop
  459.     @Translatable.Name("Regen Level")
  460.     @Translatable.Desc("Heals minor paper-cuts (and fragile egos).")
  461.     public ValidatedInt greenBeanBuffAmplifierRegen = new ValidatedInt(0, 4, 0);
  462.  
  463.     // --- Worldgen: Bush & Sunflower Stuff ---
  464.     @Translatable.Name("Worldgen: Bush & Sunflower Stuff")
  465.     @Translatable.Desc("For The Aspiring Landscape Artist. Note: Most of these settings require re-logging into your world to take effect, and it's unlikely you will see changes in chunks that have already been generated.")
  466.     public ConfigGroup worldGenMisc = new ConfigGroup("worldGenMisc", true);
  467.  
  468.     @Translatable.Name("Wild Bush Regrowth Modifier")
  469.     @Translatable.Desc("Higher = slower, lower = faster. Makes perfect sense.")
  470.     public ValidatedDouble wildBushRegrowthModifier = new ValidatedDouble(1.0, 5.0, 0.1);
  471.  
  472.     // --- Sunflower Settings ---
  473.     @Translatable.Name("Sunflower Settings")
  474.     @Translatable.Desc("Custom sunflowers, because the vanilla ones just weren’t fabulous enough. Only changes fresh chunks.")
  475.     public ConfigGroup sunflowerSettings = new ConfigGroup("sunflowerSettings", true);
  476.  
  477.     @Translatable.Name("Sunflower Seed Regrowth Speed")
  478.     @Translatable.Desc("Higher = slower, lower = faster. Photosynthesis is hard, okay?")
  479.     public ValidatedDouble sunflowerRegrowthModifier = new ValidatedDouble(1.0, 5.0, 0.1);
  480.  
  481.     @ConfigGroup.Pop
  482.     @Translatable.Name("Allowed Biomes")
  483.     @Translatable.Desc("Specific biome IDs where these sunflowers can replace the vanilla ones. Format: 'mod_id:biome_name'. They’re picky.")
  484.     public List<String> sunflowerBiomes = new ArrayList<>(List.of("minecraft:sunflower_plains"));
  485.  
  486.     // --- Cucumber Bush Settings ---
  487.     @Translatable.Name("Cucumber Bush Settings")
  488.     @Translatable.Desc("Wild cucumbers, for when you need emergency salads in the savanna. Only changes fresh chunks.")
  489.     public ConfigGroup cucumberBushSettings = new ConfigGroup("cucumberBushSettings", true);
  490.  
  491.     @Translatable.Name("Cucumber Bush Rarity")
  492.     @Translatable.Desc("1 in X chunks. Lower numbers means cucumbers take over the planet.")
  493.     public ValidatedInt wildCucumberBushRarity = new ValidatedInt(24, 100, 1);
  494.  
  495.     @Translatable.Name("Vanilla Biome Tags")
  496.     @Translatable.Desc("Biome tags where cucumbers feel at home. Format: 'mod_id:tag_name', for example: 'minecraft:is_jungle'.")
  497.     public List<String> cucumberBushTags = new ArrayList<>(List.of("minecraft:is_jungle"));
  498.  
  499.     @Translatable.Name("Convention Biome Tags")
  500.     @Translatable.Desc("Convention tags for maximum mod-pack harmony. Format: 'mod_id:tag_name', for example: 'minecraft:is_jungle'.")
  501.     public List<String> cucumberBushConventionTags = new ArrayList<>(List.of(
  502.             "c:is_temperate",
  503.             "c:is_hot",
  504.             "c:is_dry"
  505.     ));
  506.  
  507.     @Translatable.Name("Specific Biomes")
  508.     @Translatable.Desc("Specific biome IDs where cucumbers can sprout. Format: 'mod_id:biome_name', for example: 'minecraft:savanna'.")
  509.     public List<String> cucumberBushBiomes = new ArrayList<>(List.of(
  510.             "minecraft:plains",
  511.             "minecraft:sunflower_plains",
  512.             "minecraft:savanna",
  513.             "minecraft:savanna_plateau",
  514.             "minecraft:forest",
  515.             "minecraft:birch_forest",
  516.             "minecraft:meadow",
  517.             "minecraft:wooded_badlands",
  518.             "minecraft:jungle",
  519.             "minecraft:sparse_jungle",
  520.             "minecraft:bamboo_jungle"
  521.     ));
  522.  
  523.     @ConfigGroup.Pop
  524.     @Translatable.Name("Specific Exclusions")
  525.     @Translatable.Desc("Biomes where cucumbers are absolutely NOT allowed. Overrides everything else. Format: 'mod_id:biome_name', for example: 'minecraft:ocean'.")
  526.     public List<String> cucumberBushExclusions = new ArrayList<>(List.of(
  527.             "minecraft:swamp",
  528.             "minecraft:mangrove_swamp",
  529.             "minecraft:mushroom_fields",
  530.             "minecraft:ocean",
  531.             "minecraft:deep_ocean",
  532.             "minecraft:warm_ocean",
  533.             "minecraft:stony_peaks"
  534.     ));
  535.  
  536.     // --- Green Bean Bush Settings ---
  537.     @Translatable.Name("Green Bean Bush Settings")
  538.     @Translatable.Desc("Legumes with attitude. Tuned for that perfect mid-game caffeine hit. Only changes fresh chunks.")
  539.     public ConfigGroup greenBeanBushSettings = new ConfigGroup("greenBeanBushSettings", true);
  540.  
  541.     @Translatable.Name("Green Bean Bush Rarity")
  542.     @Translatable.Desc("1 in X chunks. Lower = beanpocalypse. For those of you in the back, it means they'll spam everywhere.")
  543.     public ValidatedInt wildGreenBeanBushRarity = new ValidatedInt(24, 100, 1);
  544.  
  545.     @Translatable.Name("Vanilla Biome Tags")
  546.     @Translatable.Desc("Biome tags for bean growth. Empty by default—choose wisely. Format: 'mod_id:tag_name', for example: 'minecraft:is_jungle'.")
  547.     public List<String> greenBeanBushTags = new ArrayList<>(List.of("mod_id:biome_name"));
  548.  
  549.     @Translatable.Name("Convention Biome Tags")
  550.     @Translatable.Desc("Convention tags for mod-friendly bean spam. Format: 'mod_id:tag_name', for example: 'minecraft:is_jungle'.")
  551.     public List<String> greenBeanBushConventionTags = new ArrayList<>(List.of(
  552.             "c:is_wet",
  553.             "c:is_temperate"
  554.     ));
  555.  
  556.     @Translatable.Name("Specific Biomes")
  557.     @Translatable.Desc("Specific biomes where beans sprout like gossip in chat. Format: 'mod_id:biome_name', for example: 'minecraft:swamp'.")
  558.     public List<String> greenBeanBushBiomes = new ArrayList<>(List.of(
  559.             "minecraft:swamp",
  560.             "minecraft:mangrove_swamp",
  561.             "minecraft:lush_caves",
  562.             "minecraft:flower_forest"
  563.     ));
  564.  
  565.     @ConfigGroup.Pop
  566.     @ConfigGroup.Pop
  567.     @Translatable.Name("Specific Exclusions")
  568.     @Translatable.Desc("Absolutely no beans here, thank you very much. Overrides all other settings. Format: 'mod_id:biome_name', for example: 'minecraft:beach'.")
  569.     public List<String> greenBeanBushExclusions = new ArrayList<>(List.of(
  570.             "minecraft:beach",
  571.             "minecraft:birch_forest",
  572.             "minecraft:cherry_grove",
  573.             "minecraft:dark_forest",
  574.             "minecraft:deep_ocean",
  575.             "minecraft:dripstone_caves",
  576.             "minecraft:forest",
  577.             "minecraft:meadow",
  578.             "minecraft:ocean",
  579.             "minecraft:old_growth_birch_forest",
  580.             "minecraft:plains",
  581.             "minecraft:river",
  582.             "minecraft:sunflower_plains"
  583.     ));
  584. }
  585. ```
Advertisement
Add Comment
Please, Sign In to add comment