472 lines
76 KiB
TOML
472 lines
76 KiB
TOML
|
|
|||
|
#Internal schema version for config migrations. Do not change.
|
|||
|
[internal]
|
|||
|
#Range: > 0
|
|||
|
configSchemaVersion = 5
|
|||
|
|
|||
|
#Sound Attract Mod Configuration
|
|||
|
[general]
|
|||
|
#Enable debug logging for troubleshooting.
|
|||
|
debugLogging = false
|
|||
|
#Maximum number of sounds any single mob can track simultaneously.
|
|||
|
#Range: 1 ~ 1000000
|
|||
|
maxSoundsTracked = 20
|
|||
|
#Switching threshold factor (0.0–1.0]. A mob will switch if newWeight > currentWeight × soundSwitchRatio.
|
|||
|
#Example: 0.5 means a new sound beating 70% of the current weight will trigger a switch (more eager switching).
|
|||
|
#Set closer to 1.0 for conservative switching; closer to 0.0 for very eager switching.
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
soundSwitchRatio = 0.5
|
|||
|
#A small weight bonus given to very new sounds to make mobs more likely to switch to them.
|
|||
|
#This helps break ties and makes mobs seem more 'alert' to new threats.
|
|||
|
#Set to 0.0 to disable.
|
|||
|
#Range: 0.0 ~ 10.0
|
|||
|
soundNoveltyBonusWeight = 9.5
|
|||
|
#How long (in ticks) a sound is considered 'new' for the novelty bonus to apply.
|
|||
|
#20 ticks = 1 second.
|
|||
|
#Range: 1 ~ 200
|
|||
|
soundNoveltyTimeTicks = 100
|
|||
|
|
|||
|
#Mob grouping and squad behavior
|
|||
|
[groups]
|
|||
|
#Enables smarter behavior for mobs at the edge of their hearing range (e.g. pathing closer to investigate further)
|
|||
|
edgeMobSmartBehavior = true
|
|||
|
#How long a sound event remains 'interesting' to a mob, in ticks (20 ticks = 1 second).
|
|||
|
#Range: 20 ~ 1000000
|
|||
|
soundLifetimeTicks = 1200
|
|||
|
#How close a mob needs to get to a sound source to consider it 'reached'.
|
|||
|
#Range: 1.0 ~ 100.0
|
|||
|
arrivalDistance = 6.0
|
|||
|
#Base speed multiplier for mobs moving towards a sound.
|
|||
|
#Range: 0.1 ~ 3.0
|
|||
|
mobMoveSpeed = 1.0
|
|||
|
#Maximum number of mobs allowed in a group for group AI behavior. Default: 64
|
|||
|
#Range: 1 ~ 128
|
|||
|
maxGroupSize = 64
|
|||
|
#Radius (in blocks) used to group mobs under a leader for group AI behavior. Default: 64.0
|
|||
|
#Range: 1.0 ~ 128.0
|
|||
|
leaderGroupRadius = 64.0
|
|||
|
#Maximum distance (in blocks) for mobs to consider themselves part of a group for group behaviors. Used in AI such as FollowLeaderGoal.
|
|||
|
#Range: 1.0 ~ 256.0
|
|||
|
groupDistance = 128.0
|
|||
|
#Multiplier for spacing between mob leaders in a group. Default: 1.0
|
|||
|
#Range: 0.1 ~ 10.0
|
|||
|
leaderSpacingMultiplier = 1.0
|
|||
|
#Number of edge sectors for group detection (AI). Default: 4
|
|||
|
#Range: 1 ~ 64
|
|||
|
numEdgeSectors = 4
|
|||
|
#Interval (in ticks) between group AI updates. Default: 200
|
|||
|
#Range: 1 ~ 20000
|
|||
|
groupUpdateInterval = 200
|
|||
|
#Maximum number of group leaders tracked for AI grouping. Default: 16
|
|||
|
#Range: 1 ~ 64
|
|||
|
maxLeaders = 16
|
|||
|
#Maximum number of edge mobs to select per angular sector. Default: 4
|
|||
|
#Range: 1 ~ 64
|
|||
|
edgeMobsPerSector = 1
|
|||
|
#Sprint speed multiplier used when followers rally/advance during RAID and when edge mobs return to the leader.
|
|||
|
#Range: 1.0 ~ 5.0
|
|||
|
sprintMultiplier = 1.1
|
|||
|
#Distance (in blocks) within which an edge mob considers itself 'returned' to its leader.
|
|||
|
#Range: 0.5 ~ 16.0
|
|||
|
leaderReturnArrivalDistance = 2.0
|
|||
|
#Countdown duration (in ticks) before a RAID advances to the target. 20 ticks = 1 second.
|
|||
|
#Range: 20 ~ 72000
|
|||
|
raidCountdownTicks = 100
|
|||
|
|
|||
|
#Performance-tuning options. Adjust these to balance responsiveness and server load.
|
|||
|
[performance]
|
|||
|
#Delay in ticks before the first mob group computation is run after server startup.
|
|||
|
#This helps prevent lag on world load by giving the server time to stabilize.
|
|||
|
#20 ticks = 1 second. Default: 50 (2.5 seconds)
|
|||
|
#Range: 0 ~ 72000
|
|||
|
initialGroupComputationDelay = 50
|
|||
|
#Number of background worker threads used for off-thread computations (e.g., group building).
|
|||
|
#Increase for large servers; decrease if you observe contention.
|
|||
|
#Range: 1 ~ 64
|
|||
|
workerThreads = 2
|
|||
|
#Soft per-task time budget in milliseconds for worker computations before yielding.
|
|||
|
#Higher values allow more work per batch but can increase latency to apply results.
|
|||
|
#Range: 1 ~ 1000
|
|||
|
workerTaskBudgetMs = 10
|
|||
|
#Minimum time in ticks between mob scans for new sounds. Higher values can improve performance but reduce responsiveness.
|
|||
|
#Range: 1 ~ 1000000
|
|||
|
scanCooldownTicks = 25
|
|||
|
#How many ticks to add to the base scan cooldown for each active mob.
|
|||
|
#This directly controls how much the cooldown increases with more mobs.
|
|||
|
#A higher value means more cooldown per mob, slowing down scans more aggressively.
|
|||
|
#Example: 0.25 means 100 mobs will add (100 * 0.15) = 15 ticks to the base cooldown.
|
|||
|
#Range: 0.0 ~ 10.0
|
|||
|
cooldownTicksPerMob = 0.15
|
|||
|
#TPS below which scanCooldownTicks is dynamically increased to save performance. Set to 0 to disable.
|
|||
|
#Range: 0.0 ~ 20.0
|
|||
|
minTpsForScanCooldown = 15.0
|
|||
|
#TPS above which scanCooldownTicks is dynamically decreased (down to its minimum defined value). Set to 21 to disable.
|
|||
|
#Range: 0.0 ~ 21.0
|
|||
|
maxTpsForScanCooldown = 19.0
|
|||
|
#Cooldown (in ticks) per mob between async sound scoring submissions when candidates/target are unchanged.
|
|||
|
#Range: 0 ~ 10000
|
|||
|
soundScoringSubmitCooldownTicks = 1
|
|||
|
#Time-to-live (in ticks) for cached async sound scoring results before considered stale.
|
|||
|
#Range: 1 ~ 10000
|
|||
|
asyncResultTtlTicks = 10
|
|||
|
#Enable caching for raycast results to improve performance. Disable if experiencing issues with sound obstruction detection.
|
|||
|
enableRaycastCache = true
|
|||
|
#Time-to-live (in ticks) for raycast cache entries before they are considered expired.
|
|||
|
#Range: 1 ~ 1000000
|
|||
|
raycastCacheTtlTicks = 200
|
|||
|
#Maximum number of entries stored in the raycast cache. Oldest entries are evicted when exceeded.
|
|||
|
#Range: 100 ~ 1000000
|
|||
|
raycastCacheMaxEntries = 5000
|
|||
|
|
|||
|
["Enchanced AI Integration"]
|
|||
|
#Enable mobs running AttractionGoal to break blocks to reach their destination when stuck. Requires EnhancedAI to be installed for block blacklists/rules.
|
|||
|
enableBlockBreaking = false
|
|||
|
#Multiplier for the time a mob takes to break a block. E.g., 2.0 means it takes twice as long. Uses EnhancedAI's config value if installed and this is set to -1.
|
|||
|
#Range: -1.0 ~ 100.0
|
|||
|
blockBreakingTimeMultiplier = 1.5
|
|||
|
#If true, mobs will only attempt to break blocks if they are holding a tool (e.g. pickaxe) in their offhand.
|
|||
|
blockBreakingToolOnly = false
|
|||
|
#If true, mobs will only break blocks if their tool is the 'proper' tool for that block (e.g., pickaxe for stone).
|
|||
|
blockBreakingProperToolOnly = false
|
|||
|
|
|||
|
[Mobs]
|
|||
|
#List of mobs that will be attracted to sounds. Example: ['minecraft:zombie', 'minecraft:skeleton'].
|
|||
|
attractedEntities = ["minecraft:cave_spider", "minecraft:creeper", "minecraft:drowned", "minecraft:endermite", "minecraft:evoker", "minecraft:guardian", "minecraft:hoglin", "minecraft:husk", "minecraft:magma_cube", "minecraft:phantom", "minecraft:piglin", "minecraft:piglin_brute", "minecraft:pillager", "minecraft:ravager", "minecraft:shulker", "minecraft:silverfish", "minecraft:skeleton", "minecraft:slime", "minecraft:spider", "minecraft:stray", "minecraft:vex", "minecraft:vindicator", "minecraft:witch", "minecraft:wither_skeleton", "minecraft:zoglin", "minecraft:zombie", "minecraft:zombie_villager", "scguns:cog_knight", "scguns:cog_minion", "scguns:blunderer", "scguns:hive", "scguns:dissident", "scguns:hornlin", "scguns:redcoat", "scguns:cog_knight", "scguns:sky_carrier", "scguns:supply_scamp", "scguns:swarm", "scguns:zombified_hornlin", "spore:braiomil", "spore:braurei", "spore:brot", "spore:brute", "spore:busser", "spore:inf_construct", "spore:delusioner", "spore:gastgaber", "spore:gazenbreacher", "spore:griefer", "spore:hevoker", "spore:hidenburg", "spore:howitzer", "spore:howler", "spore:hvindicator", "spore:illusion", "spore:inf_drownded", "spore:inf_evoker", "spore:inf_hazmat", "spore:husk", "spore:inf_pillager", "spore:inf_player", "spore:inf_villager", "spore:inf_vindicator", "spore:inf_wanderer", "spore:inf_witch", "spore:inf_human", "spore:inquisitor", "spore:jagd", "spore:knight", "spore:lacerator", "spore:leaper", "spore:mound", "spore:nuclea", "spore:ogre", "spore:plagued", "spore:proto", "spore:reconstructor", "spore:scamper", "spore:scavenger", "spore:scent", "spore:sieger", "spore:specter", "spore:spitter", "spore:stalker", "spore:thorn", "spore:umarmed", "spore:usurper", "spore:verva", "spore:vigil", "spore:volatile", "spore:wendigo", "sculkhorde:sculk_zombie", "sculkhorde:sculk_witch", "sculkhorde:sculk_vindicator", "sculkhorde:sculk_vex", "sculkhorde:sculk_squid", "sculkhorde:sculk_spore_spewer", "sculkhorde:sculk_spitter", "sculkhorde:sculk_soul_reaper", "sculkhorde:sculk_sheep", "sculkhorde:sculk_salmon", "sculkhorde:sculk_ravager", "sculkhorde:sculk_pufferfish", "sculkhorde:sculk_phantom", "sculkhorde:sculk_mite_aggressor", "sculkhorde:sculk_mite", "sculkhorde:sculk_metamorphosis_pod", "sculkhorde:sculk_hatcher", "sculkhorde:sculk_guardian", "sculkhorde:sculk_ghast", "sculkhorde:sculk_enderman", "sculkhorde:sculk_creeper", "sculkhorde:sculk_broodling", "sculkhorde:sculk_brood_hatcher", "sculkhorde:sculk_bee_infector", "sculkhorde:sculk_bee_harvester", "sculkhorde:golem_of_wrath"]
|
|||
|
#A list of entity resource IDs to PREVENT from receiving the attraction AI goals.
|
|||
|
#This acts as a blacklist. Mobs on this list will never be attracted to sounds, regardless of other settings.
|
|||
|
#Format: ['minecraft:pig', 'modid:some_other_mob']
|
|||
|
mobBlacklist = ["minecraft:pig"]
|
|||
|
|
|||
|
["Sounds White List"]
|
|||
|
#If not empty, only sound event IDs in this list will be considered by mobs.
|
|||
|
soundIdWhitelist = ["minecraft:item.crossbow.shoot", "minecraft:item.crossbow.loading_start", "minecraft:item.crossbow.loading_middle", "minecraft:item.crossbow.loading_end", "minecraft:item.crossbow.quick_charge_1", "minecraft:item.crossbow.quick_charge_2", "minecraft:item.crossbow.quick_charge_3", "minecraft:entity.arrow.shoot", "minecraft:item.shield.block", "minecraft:block.lever.click", "minecraft:block.wooden_trapdoor.open", "minecraft:block.wooden_trapdoor.close", "minecraft:block.bamboo_wood_trapdoor.open", "minecraft:block.bamboo_wood_trapdoor.close", "minecraft:block.cherry_wood_trapdoor.open", "minecraft:block.cherry_wood_trapdoor.close", "minecraft:block.iron_trapdoor.open", "minecraft:block.iron_trapdoor.close", "minecraft:block.wooden_door.open", "minecraft:block.wooden_door.close", "minecraft:block.bamboo_wood_door.open", "minecraft:block.bamboo_wood_door.close", "minecraft:block.cherry_wood_door.open", "minecraft:block.cherry_wood_door.close", "minecraft:block.iron_door.open", "minecraft:block.iron_door.close", "minecraft:block.fence_gate.open", "minecraft:block.fence_gate.close", "minecraft:block.piston.extend", "minecraft:block.piston.contract", "minecraft:block.dispenser.dispense", "minecraft:block.dispenser.launch", "minecraft:block.anvil.land", "minecraft:block.anvil.use", "minecraft:block.anvil.destroy", "minecraft:block.sand.fall", "minecraft:block.gravel.fall", "minecraft:block.grass.break", "minecraft:block.scaffolding.break", "tacz:target_block_hit", "minecraft:entity.boat.paddle_water", "minecraft:ambient.underwater.enter", "minecraft:ambient.underwater.exit", "minecraft:block.chest.open", "minecraft:block.chest.close", "minecraft:block.barrel.open", "minecraft:block.barrel.close", "minecraft:block.ender_chest.open", "minecraft:block.ender_chest.close", "minecraft:block.shulker_box.open", "minecraft:block.shulker_box.close", "minecraft:block.bell.use", "minecraft:block.bell.resonate", "minecraft:block.furnace.fire_crackle", "minecraft:entity.generic.explode", "minecraft:entity.firework_rocket.launch", "minecraft:entity.firework_rocket.blast", "minecraft:entity.firework_rocket.large_blast", "minecraft:entity.player.hurt", "parcool:grabbing", "parcool:wallrun_and_running", "parcool:jumping", "parcool:sliding_1", "parcool:sliding_2", "parcool:sliding_3", "parcool:roll_and_dodge", "parcool:landing", "minecraft:random/anvil_land", "entity/leashknot/place1", "minecraft:entity.player.sprint", "minecraft:entity.player.jump", "minecraft:entity.player.sneak", "tacz:gun", "soundattract:voice_chat", "musketmod:musket_fire", "musketmod:blunderbuss_fire", "musketmod:pistol_fire", "cgm:item.shotgun.fire", "cgm:item.shotgun.silenced_fire", "cgm:item.shotgun.enchanted_fire", "cgm:item.shotgun.cock", "cgm:item.rifle.fire", "cgm:item.rifle.silenced_fire", "cgm:item.rifle.enchanted_fire", "cgm:item.rifle.cock", "cgm:item.pistol.fire", "cgm:item.pistol.silenced_fire", "cgm:item.pistol.enchanted_fire", "cgm:item.pistol.reload", "cgm:item.pistol.cock", "cgm:item.assault_rifle.fire", "cgm:item.assault_rifle.silenced_fire", "cgm:item.assault_rifle.enchanted_fire", "cgm:item.assault_rifle.cock", "cgm:item.grenade_launcher.fire", "cgm:item.bazooka.fire", "cgm:item.mini_gun.fire", "cgm:item.mini_gun.enchanted_fire", "cgm:item.machine_pistol.fire", "cgm:item.machine_pistol.silenced_fire", "cgm:item.machine_pistol.enchanted_fire", "cgm:item.heavy_rifle.fire", "cgm:item.heavy_rifle.silenced_fire", "cgm:item.heavy_rifle.enchanted_fire", "cgm:item.heavy_rifle.cock", "cgm:item.grenade.pin", "cgm:entity.stun_grenade.explosion", "cgm:entity.stun_grenade.ring", "scguns:item.makeshift_rifle.cock", "scguns:item.pistol.cock", "scguns:item.flamethrower.reload", "scguns:item.gauss.reload", "scguns:item.pistol.reload", "scguns:item.airgun.fire", "scguns:item.beam.fire", "scguns:item.blackpowder.fire", "scguns:item.boomstick.fire", "scguns:item.brass_pistol.fire", "scguns:item.brass_revolver.fire", "scguns:item.brass_shotgun.fire", "scguns:item.bruiser.fire", "scguns:item.combat_shotgun.fire", "scguns:item.cowboy.fire", "scguns:item.fl
|
|||
|
#Minimum sound level (0.0-1.0) for player-emitted sounds to be considered. Higher values mean only louder sounds are tracked.
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
minSoundLevelForPlayer = 0.1
|
|||
|
#Minimum sound level (0.0-1.0) for mob-emitted sounds to be considered.
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
minSoundLevelForMob = 0.15
|
|||
|
|
|||
|
#Default Sound Properties
|
|||
|
[sound_defaults]
|
|||
|
#List of default sound properties. Format: 'sound_id;range;weight'
|
|||
|
#Example: 'minecraft:item.crossbow.shoot;16.0;4.0'
|
|||
|
soundDefaults = ["minecraft:item.crossbow.shoot;16;4", "minecraft:item.crossbow.loading_start;6;2", "minecraft:item.crossbow.loading_middle;6;2", "minecraft:item.crossbow.loading_end;6;2", "minecraft:item.crossbow.quick_charge_1;6;2", "minecraft:item.crossbow.quick_charge_2;6;2", "minecraft:item.crossbow.quick_charge_3;6;2", "minecraft:entity.arrow.shoot;14;4", "minecraft:item.shield.block;12;3", "minecraft:block.lever.click;5;3", "minecraft:block.wooden_trapdoor.open;8;3", "minecraft:block.wooden_trapdoor.close;8;3", "minecraft:block.bamboo_wood_trapdoor.open;10;3", "minecraft:block.bamboo_wood_trapdoor.close;10;3", "minecraft:block.cherry_wood_trapdoor.open;10;3", "minecraft:block.cherry_wood_trapdoor.close;10;3", "minecraft:block.iron_trapdoor.open;15;4", "minecraft:block.iron_trapdoor.close;15;4", "minecraft:block.wooden_door.open;12;4", "minecraft:block.wooden_door.close;12;4", "minecraft:block.bamboo_wood_door.open;15;4", "minecraft:block.bamboo_wood_door.close;15;4", "minecraft:block.cherry_wood_door.open;15;4", "minecraft:block.cherry_wood_door.close;15;4", "minecraft:block.iron_door.open;20;5", "minecraft:block.iron_door.close;20;5", "minecraft:block.fence_gate.open;10;3", "minecraft:block.fence_gate.close;10;3", "minecraft:block.piston.extend;20;4", "minecraft:block.piston.contract;20;4", "minecraft:block.dispenser.dispense;12;4", "minecraft:block.dispenser.launch;12;4", "minecraft:block.anvil.land;25;5", "minecraft:block.anvil.use;25;5", "minecraft:block.anvil.destroy;25;5", "minecraft:block.sand.fall;6;3", "minecraft:block.gravel.fall;6;3", "minecraft:block.grass.break;3;2", "minecraft:block.scaffolding.break;3;2", "tacz:target_block_hit;6;3", "minecraft:entity.boat.paddle_water;8;3", "minecraft:ambient.underwater.enter;4;2", "minecraft:ambient.underwater.exit;4;2", "minecraft:block.chest.open;5;2", "minecraft:block.chest.close;5;2", "minecraft:block.barrel.open;5;2", "minecraft:block.barrel.close;5;2", "minecraft:block.ender_chest.open;6;2", "minecraft:block.ender_chest.close;6;2", "minecraft:block.shulker_box.open;6;2", "minecraft:block.shulker_box.close;6;2", "minecraft:block.bell.use;30;5", "minecraft:block.bell.resonate;15;4", "minecraft:block.furnace.fire_crackle;8;3", "minecraft:entity.generic.explode;50;7", "minecraft:entity.firework_rocket.launch;10;3", "minecraft:entity.firework_rocket.blast;20;5", "minecraft:entity.firework_rocket.large_blast;30;6", "musketmod:musket_fire;155;8", "musketmod:blunderbuss_fire;154;7", "musketmod:pistol_fire;164;5", "cgm:item.shotgun.fire;156;15", "cgm:item.shotgun.silenced_fire;131;13", "cgm:item.shotgun.enchanted_fire;156;15", "cgm:item.shotgun.cock;90;6", "cgm:item.rifle.fire;162;16", "cgm:item.rifle.silenced_fire;137;13", "cgm:item.rifle.enchanted_fire;162;16", "cgm:item.rifle.cock;90;6", "cgm:item.pistol.fire;164;16", "cgm:item.pistol.silenced_fire;139;13", "cgm:item.pistol.enchanted_fire;164;16", "cgm:item.pistol.reload;85;7", "cgm:item.pistol.cock;90;6", "cgm:item.assault_rifle.fire;159;16", "cgm:item.assault_rifle.silenced_fire;134;13", "cgm:item.assault_rifle.enchanted_fire;159;16", "cgm:item.assault_rifle.cock;90;6", "cgm:item.grenade_launcher.fire;172;17", "cgm:item.bazooka.fire;184;17", "cgm:item.mini_gun.fire;180;17", "cgm:item.mini_gun.enchanted_fire;180;17", "cgm:item.machine_pistol.fire;160;16", "cgm:item.machine_pistol.silenced_fire;135;13", "cgm:item.machine_pistol.enchanted_fire;160;16", "cgm:item.heavy_rifle.fire;165;16", "cgm:item.heavy_rifle.silenced_fire;140;13", "cgm:item.heavy_rifle.enchanted_fire;165;16", "cgm:item.heavy_rifle.cock;90;6", "cgm:item.grenade.pin;72;6", "cgm:entity.stun_grenade.explosion;175;18", "cgm:entity.stun_grenade.ring;104;10", "scguns:item.makeshift_rifle.cock;10;1.0", "scguns:item.pistol.cock;5;0.5", "scguns:item.flamethrower.reload;10;1.0", "scguns:item.gauss.reload;25;2.5", "scguns:item.pistol.reload;10;1.0", "scguns:item.airgun.fire;80;8.0", "scguns:item.beam.fire;100;10.0", "scguns:item.blackpowder.fire;115;11.5", "scguns:item.boomstick.fire;120;12.0", "scguns:item.brass_pistol.fire;105;10.5", "scguns:item.brass_re
|
|||
|
|
|||
|
#====================================================================
|
|||
|
# Sound Attract Mod - Stealth & Detection Configuration
|
|||
|
#====================================================================
|
|||
|
[sound_attract_main]
|
|||
|
|
|||
|
#--- Field of View Settings ---
|
|||
|
[sound_attract_main.fov]
|
|||
|
#The default horizontal Field of View for all mobs not in the override list.
|
|||
|
#Represents the width of the vision cone in degrees.
|
|||
|
#Range: 0.0 ~ 360.0
|
|||
|
defaultHorizontalFov = 200.0
|
|||
|
#The default vertical Field of View for all mobs not in the override list.
|
|||
|
#Represents the height of the vision cone in degrees.
|
|||
|
#Range: 0.0 ~ 360.0
|
|||
|
defaultVerticalFov = 135.0
|
|||
|
#A list of custom FOV (Field of View) overrides for specific mobs.
|
|||
|
#This gives you direct control over the vision cone for any mob.
|
|||
|
#Format: "modid:mob_id, horizontal_fov, vertical_fov"
|
|||
|
#SPECIAL VALUE: A horizontal FOV of 360 or more grants the mob 360-degree vision (omni-directional).
|
|||
|
#Any mob NOT in this list will use the default FOV (200 horizontal, 135 vertical).
|
|||
|
customFovOverrides = ["minecraft:spider, 360.0, 360.0", "minecraft:cave_spider, 360.0, 360.0", "minecraft:phantom, 200.0, 280.0", "minecraft:vex, 200.0, 280.0", "minecraft:allay, 200.0, 280.0", "minecraft:bat, 20.0, 20.0", "minecraft:parrot, 200.0, 280.0", "minecraft:ghast, 200.0, 280.0", "minecraft:blaze, 200.0, 280.0", "minecraft:axolotl, 270.0, 90.0", "minecraft:camel, 270.0, 90.0", "minecraft:chicken, 270.0, 90.0", "minecraft:cow, 270.0, 90.0", "minecraft:donkey, 270.0, 90.0", "minecraft:goat, 270.0, 90.0", "minecraft:horse, 270.0, 90.0", "minecraft:mule, 270.0, 90.0", "minecraft:mooshroom, 270.0, 90.0", "minecraft:panda, 270.0, 90.0", "minecraft:pig, 270.0, 90.0", "minecraft:rabbit, 270.0, 90.0", "minecraft:sheep, 270.0, 90.0", "minecraft:sniffer, 270.0, 90.0", "minecraft:strider, 270.0, 90.0", "minecraft:turtle, 270.0, 90.0", "minecraft:villager, 270.0, 90.0", "minecraft:wandering_trader, 270.0, 90.0", "minecraft:slime, 270.0, 120.0", "minecraft:magma_cube, 270.0, 120.0", "minecraft:cod, 300.0, 100.0", "minecraft:pufferfish, 300.0, 100.0", "minecraft:salmon, 300.0, 100.0", "minecraft:squid, 300.0, 100.0", "minecraft:glow_squid, 300.0, 100.0", "minecraft:tadpole, 300.0, 100.0", "minecraft:tropical_fish, 300.0, 100.0", "minecraft:cat, 140.0, 140.0", "minecraft:ocelot, 140.0, 140.0", "minecraft:wolf, 140.0, 140.0", "minecraft:polar_bear, 140.0, 140.0", "minecraft:fox, 140.0, 140.0", "minecraft:frog, 140.0, 140.0", "minecraft:zombie, 200.0, 135.0", "minecraft:husk, 200.0, 135.0", "minecraft:drowned, 200.0, 135.0", "minecraft:skeleton, 200.0, 135.0", "minecraft:stray, 200.0, 135.0", "minecraft:pillager, 200.0, 135.0", "minecraft:vindicator, 200.0, 135.0", "minecraft:evoker, 200.0, 135.0", "minecraft:witch, 200.0, 135.0", "minecraft:piglin, 200.0, 135.0", "minecraft:piglin_brute, 200.0, 135.0", "minecraft:iron_golem, 200.0, 135.0", "minecraft:creeper, 90.0, 90.0", "minecraft:enderman, 180.0, 240.0", "minecraft:guardian, 320.0, 180.0", "minecraft:elder_guardian, 320.0, 180.0", "minecraft:ravager, 160.0, 100.0", "minecraft:hoglin, 160.0, 100.0", "minecraft:zoglin, 160.0, 100.0", "minecraft:shulker, 270.0, 45.0"]
|
|||
|
#A list of mobs that will COMPLETELY IGNORE the FOV system.
|
|||
|
#Use this for bosses or mobs from other mods with special AI that might break.
|
|||
|
#Format: "modid:mob_id"
|
|||
|
#Note: Certain vanilla mobs like the Warden are always excluded for stability and cannot be removed.
|
|||
|
fovExclusionList = ["minecraft:warden"]
|
|||
|
#Blocks in this allowlist are treated as see-through for line-of-sight checks (e.g., modded glass).
|
|||
|
#Format: ['modid:block_id']
|
|||
|
nonBlockingVisionAllowList = []
|
|||
|
|
|||
|
#General Stealth System Settings
|
|||
|
[sound_attract_main.general_stealth_settings]
|
|||
|
#Master switch for all custom stealth mechanics. If false, mobs use vanilla detection (modified only by maxStealthDetectionRange if set).
|
|||
|
enableStealthMechanics = true
|
|||
|
#How often (in ticks) the server checks ongoing stealth situations (e.g., for grace period). Lower is more responsive but higher performance cost.
|
|||
|
#20 ticks = 1 second.
|
|||
|
#Range: 5 ~ 100
|
|||
|
stealthCheckInterval = 40
|
|||
|
#How long (in ticks) a mob will keep targeting a player after losing direct detection (due to stealth) before giving up.
|
|||
|
#Set to 0 for no grace period (immediate de-aggro if stealth conditions met).
|
|||
|
#Range: 0 ~ 200
|
|||
|
stealthGracePeriodTicks = 100
|
|||
|
|
|||
|
#Base detection ranges for players based on their stance.
|
|||
|
#These are modified by all other factors (light, camo, etc.).
|
|||
|
[sound_attract_main.player_stance_detection_ranges]
|
|||
|
#Base detection range (in blocks) when a player is standing.
|
|||
|
#Range: 0.0 ~ 128.0
|
|||
|
standingDetectionRangePlayer = 48.0
|
|||
|
#Base detection range (in blocks) when a player is sneaking (crouching).
|
|||
|
#Range: 0.0 ~ 128.0
|
|||
|
sneakingDetectionRangePlayer = 20.0
|
|||
|
#Base detection range (in blocks) when a player is crawling (e.g., in a 1-block high gap).
|
|||
|
#Range: 0.0 ~ 128.0
|
|||
|
crawlingDetectionRangePlayer = 4.0
|
|||
|
|
|||
|
#How environmental conditions affect stealth.
|
|||
|
[sound_attract_main.environmental_factors]
|
|||
|
|
|||
|
#Light level effects on detection.
|
|||
|
[sound_attract_main.environmental_factors.light_level]
|
|||
|
#The light level (0-15) considered neutral (no bonus or penalty to detection).
|
|||
|
#Range: 0 ~ 15
|
|||
|
neutralLightLevel = 7
|
|||
|
#Modifier strength per point of light difference from 'neutralLightLevel'. Higher = more impact.
|
|||
|
#Positive values increase detection in bright light / decrease in dark. Negative values would invert this.
|
|||
|
#Range: 0.0 ~ 0.5
|
|||
|
lightLevelSensitivity = 0.3
|
|||
|
#Minimum multiplier that can be applied due to light levels (e.g., 0.2 for max 80% range reduction in total darkness).
|
|||
|
#Range: 0.01 ~ 1.0
|
|||
|
minLightFactor = 0.2
|
|||
|
#Maximum multiplier that can be applied due to light levels (e.g., 2.0 for max 100% range increase in full brightness).
|
|||
|
#Range: 1.0 ~ 5.0
|
|||
|
maxLightFactor = 3.0
|
|||
|
#Horizontal radius (blocks) around player to sample for average/effective light level.
|
|||
|
#Range: 0 ~ 5
|
|||
|
lightSampleRadiusHorizontal = 2
|
|||
|
#Vertical radius (blocks) around player to sample for average/effective light level.
|
|||
|
#Range: 0 ~ 3
|
|||
|
lightSampleRadiusVertical = 1
|
|||
|
|
|||
|
#Weather effects on detection.
|
|||
|
[sound_attract_main.environmental_factors.weather]
|
|||
|
#Detection range multiplier when raining (e.g., 0.8 for 20% range reduction).
|
|||
|
#Range: 0.1 ~ 1.0
|
|||
|
rainStealthFactor = 0.8
|
|||
|
#Detection range multiplier when thundering (overrides rain factor if active).
|
|||
|
#Range: 0.1 ~ 1.0
|
|||
|
thunderStealthFactor = 0.6
|
|||
|
|
|||
|
#How player actions affect their detectability.
|
|||
|
[sound_attract_main.player_actions]
|
|||
|
|
|||
|
#Movement effects on detection.
|
|||
|
[sound_attract_main.player_actions.movement]
|
|||
|
#Detection range multiplier when player is moving (not sneaking/crawling). >1.0 means easier to detect.
|
|||
|
#Set to 1.0 for no penalty.
|
|||
|
#Range: 1.0 ~ 3.0
|
|||
|
movementStealthPenalty = 1.2
|
|||
|
#Detection range multiplier if player is NOT moving above threshold (e.g. 0.8 for 20% harder to detect).
|
|||
|
#Set to 1.0 for no bonus when stationary. Applies unless sprinting/crawling.
|
|||
|
#Range: 0.1 ~ 1.0
|
|||
|
stationaryStealthBonusFactor = 0.8
|
|||
|
#Squared distance threshold to consider a player as 'moving' per stealth check interval.
|
|||
|
#Range: 1.0E-4 ~ 0.1
|
|||
|
movementThreshold = 0.003
|
|||
|
|
|||
|
#Invisibility potion effect.
|
|||
|
[sound_attract_main.player_actions.invisibility]
|
|||
|
#Detection range multiplier when player has Invisibility effect (e.g., 0.1 for 90% range reduction).
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
invisibilityStealthFactor = 0.1
|
|||
|
|
|||
|
#Settings for item, armor and environmental camouflage.
|
|||
|
[sound_attract_main.camouflage_system]
|
|||
|
#Master switch for all camouflage effects (item-based and environmental).
|
|||
|
enableCamouflage = true
|
|||
|
#Enable to penalize players for holding items in their hands, making them more detectable.
|
|||
|
enableHeldItemPenalty = true
|
|||
|
#Factor by which detection range is multiplied if the player is holding any item in main or off-hand (e.g., 1.1 = 10% more detectable per occupied hand). This is applied before enchantment penalties on held items.
|
|||
|
#Range: 1.0 ~ 2.0
|
|||
|
heldItemPenaltyFactor = 1.1
|
|||
|
#Enable to penalize players for wearing enchanted armor or holding enchanted items.
|
|||
|
enableEnchantmentPenalty = true
|
|||
|
#Factor by which detection range is multiplied for *each* piece of visibly enchanted armor (not concealed) (e.g., 1.05 = 5% more detectable per piece).
|
|||
|
#Range: 1.0 ~ 2.0
|
|||
|
armorEnchantmentPenaltyFactor = 1.15
|
|||
|
#Factor by which detection range is multiplied if a visibly enchanted item (not concealed) is held in main or off-hand (e.g., 1.1 = 10% more detectable per enchanted held item).
|
|||
|
#Range: 1.0 ~ 2.0
|
|||
|
heldItemEnchantmentPenaltyFactor = 1.15
|
|||
|
|
|||
|
#Camouflage provided by wearing specific armor items.
|
|||
|
[sound_attract_main.camouflage_system.item_camouflage]
|
|||
|
#List of item IDs (e.g., 'modid:godly_helmet') basically a set that will work everywhere.
|
|||
|
camouflageArmorItems = []
|
|||
|
#If true, 'fullArmorStealthBonus' applies only if wearing a complete set of 4 armor pieces, ALL of which are from 'camouflageArmorItems'.
|
|||
|
#If false, benefits are gained per piece (see per-slot effectiveness) or via 'fullArmorStealthBonus' if a full set of *any* 4 listed items is worn.
|
|||
|
requireFullSetForCamouflageBonus = false
|
|||
|
#Stealth effectiveness factor (0.0 to 1.0) if wearing a 'full set' of listed camouflage items.
|
|||
|
#Final range *= (1.0 - bonus). E.g., 0.2 = 20% detection range reduction.
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
fullArmorStealthBonus = 0.85
|
|||
|
#Effectiveness of a listed helmet if per-piece bonuses apply.
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
helmetCamouflageEffectiveness = 0.15
|
|||
|
#Effectiveness of a listed chestplate if per-piece bonuses apply.
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
chestplateCamouflageEffectiveness = 0.3
|
|||
|
#Effectiveness of a listed leggings if per-piece bonuses apply.
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
leggingsCamouflageEffectiveness = 0.25
|
|||
|
#Effectiveness of a listed boots if per-piece bonuses apply.
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
bootsCamouflageEffectiveness = 0.15
|
|||
|
#Maximum total effectiveness (0.0 to 1.0) from all item camouflage sources (full set or sum of pieces). Prevents range from becoming too small.
|
|||
|
#Range: 0.0 ~ 0.99
|
|||
|
maxCamouflageEffectivenessCap = 0.85
|
|||
|
#If 'requireFullSetForCamouflageBonus' is TRUE, but player isn't wearing a full set of listed items, should per-piece bonuses still apply for the listed items they ARE wearing?
|
|||
|
allowPartialBonusIfFullSetRequired = true
|
|||
|
|
|||
|
#Camouflage based on matching armor color to the surrounding environment.
|
|||
|
[sound_attract_main.camouflage_system.environmental_camouflage]
|
|||
|
#Enable camouflage based on armor color matching the environment.
|
|||
|
enableEnvironmentalCamouflage = true
|
|||
|
#If true, significantly mismatched armor/environment colors will INCREASE detection range.
|
|||
|
enableEnvironmentalMismatchPenalty = true
|
|||
|
#Maximum effectiveness factor (0.0 to 1.0) if armor color perfectly matches environment.
|
|||
|
#Final range *= (1.0 - effectiveness).
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
environmentalCamouflageMaxEffectiveness = 0.7
|
|||
|
#Tolerance for color matching (sum of absolute RGB differences). Lower = stricter match needed.
|
|||
|
#Range: 0 ~ 765
|
|||
|
environmentalCamouflageColorMatchThreshold = 90
|
|||
|
#Detection range multiplier if armor color SIGNIFICANTLY mismatches the environment (e.g., 1.5 for 50% INCREASED range).
|
|||
|
#Applies if color difference exceeds 'environmentalMismatchThreshold'. Set to 1.0 to disable penalty.
|
|||
|
#Range: 1.0 ~ 3.0
|
|||
|
environmentalMismatchPenaltyFactor = 1.3
|
|||
|
#Color difference threshold beyond which the 'environmentalMismatchPenaltyFactor' applies.
|
|||
|
#Should be greater than 'environmentalCamouflageColorMatchThreshold'. E.g., if match threshold is 90, mismatch could be 200.
|
|||
|
#Range: 0 ~ 765
|
|||
|
environmentalMismatchThreshold = 100
|
|||
|
#If true, only dyed leather armor contributes its color. If false, uses 'customArmorColors' for non-leather/undyed items.
|
|||
|
environmentalCamouflageOnlyDyedLeather = false
|
|||
|
#Map of item ID to average hex color (e.g., 'minecraft:iron_chestplate;#A0A0A0').
|
|||
|
#Used for environmental camouflage if 'environmentalCamouflageOnlyDyedLeather' is false.
|
|||
|
customArmorColors = ["minecraft:leather_helmet;#804F27", "minecraft:leather_chestplate;#804F27", "minecraft:leather_leggings;#804F27", "minecraft:leather_boots;#804F27", "minecraft:chainmail_helmet;#58585A", "minecraft:chainmail_chestplate;#58585A", "minecraft:chainmail_leggings;#58585A", "minecraft:chainmail_boots;#58585A", "minecraft:iron_helmet;#CACACA", "minecraft:iron_chestplate;#CACACA", "minecraft:iron_leggings;#CACACA", "minecraft:iron_boots;#CACACA", "minecraft:golden_helmet;#F5E54C", "minecraft:golden_chestplate;#F5E54C", "minecraft:golden_leggings;#F5E54C", "minecraft:golden_boots;#F5E54C", "minecraft:diamond_helmet;#39D5CD", "minecraft:diamond_chestplate;#39D5CD", "minecraft:diamond_leggings;#39D5CD", "minecraft:diamond_boots;#39D5CD", "minecraft:netherite_helmet;#403B3B", "minecraft:netherite_chestplate;#403B3B", "minecraft:netherite_leggings;#403B3B", "minecraft:netherite_boots;#403B3B", "minecraft:turtle_helmet;#7B8834"]
|
|||
|
#Radius (blocks) around player to sample for average environmental color.
|
|||
|
#Range: 0 ~ 3
|
|||
|
envColorSampleRadius = 1
|
|||
|
#Starting Y-offset relative to player pos for env color sampling (e.g., 0 for player's feet level).
|
|||
|
#Range: -2 ~ 2
|
|||
|
envColorSampleYOffsetStart = 0
|
|||
|
#Ending Y-offset relative to player pos for env color sampling (e.g., -1 for blocks at feet and one below). Must be <= YOffsetStart.
|
|||
|
#Range: -2 ~ 2
|
|||
|
envColorSampleYOffsetEnd = -1
|
|||
|
|
|||
|
#Absolute min/max detection ranges after all modifiers are applied.
|
|||
|
[sound_attract_main.detection_range_limits]
|
|||
|
#The absolute minimum detection range (in blocks). Player cannot be harder to detect than this, regardless of modifiers.
|
|||
|
#Set > 0 to prevent mobs from being completely blind unless intended by other mechanics.
|
|||
|
#Range: 0.0 ~ 64.0
|
|||
|
minStealthDetectionRange = 0.5
|
|||
|
#The absolute maximum detection range (in blocks). Player cannot be easier to detect than this.
|
|||
|
#Also used as default range if 'enableStealthMechanics' is false.
|
|||
|
#Range: 1.0 ~ 256.0
|
|||
|
maxStealthDetectionRange = 64.0
|
|||
|
|
|||
|
#Tacz Integration Configuration
|
|||
|
[tacz]
|
|||
|
#Enable Tacz gun integration
|
|||
|
enableTaczIntegration = true
|
|||
|
#Tacz reload sound range (fallback, calculated as shootDb/20.0 for known guns)
|
|||
|
#Range: 1.0 ~ 128.0
|
|||
|
taczReloadRange = 9.0
|
|||
|
#Tacz reload sound weight (fallback, calculated as (shootDb/10.0)/2.0 for known guns)
|
|||
|
#Range: 0.0 ~ 10.0
|
|||
|
taczReloadWeight = 1.0
|
|||
|
#Tacz shoot sound range (fallback, calculated as db for known guns)
|
|||
|
#Range: 1.0 ~ 256.0
|
|||
|
taczShootRange = 140.0
|
|||
|
#Tacz shoot sound weight (fallback, calculated as db/10.0 for known guns)
|
|||
|
#Range: 0.0 ~ 10.0
|
|||
|
taczShootWeight = 10.0
|
|||
|
#Tacz gun shoot decibels. Format: 'modid:item;decibels'. Example: 'tacz:akm;120.0'
|
|||
|
taczGunShootDecibels = ["suffuse:aks74u;157.0", "suffuse:python;155.0", "suffuse:tec9;160.0", "suffuse:tt33;158.0", "tacz:deagle_golder;164.0", "suffuse:tti2011;158.0", "tacz:m1911;157.0", "suffuse:trapper50cal;172.0", "tacz:deagle;164.0", "tacz:cz75;157.0", "tacz:p320;157.0", "suffuse:viper2011;158.0", "tacz:m700;160.0", "tacz:m107;171.0", "tacz:m95;172.0", "tacz:ai_awp;170.0", "suffuse:aw50;173.0", "suffuse:gm6;172.0", "suffuse:m200;173.0", "suffuse:xm7;165.0", "suffuse:qbu191;164.0", "suffuse:n4;161.0", "suffuse:qbz951;160.0", "suffuse:ash12;165.0", "suffuse:qbz951s;160.0", "suffuse:qbz192;159.0", "suffuse:an94;161.0", "tacz:sks_tactical;159.0", "tacz:ak47;159.0", "tacz:type_81;158.0", "tacz:qbz_95;160.0", "tacz:hk416d;161.0", "tacz:m4a1;159.0", "tacz:m16a1;159.0", "tacz:hk_g3;161.0", "tacz:m16a4;159.0", "tacz:mk14;162.0", "tacz:scar_l;161.0", "tacz:scar_h;162.0", "tacz:aug;160.0", "tacz:db_short;165.0", "tacz:db_long;166.0", "tacz:m870;165.0", "tacz:aa12;161.0", "tacz:ump45;158.0", "tacz:hk_mp5a5;158.0", "tacz:uzi;157.0", "suffuse:pp19;157.0", "tacz:vector45;158.0", "tacz:p90;156.0", "tacz:rpg7;180.0", "tacz:m320;172.0", "suffuse:m79;172.0", "suffuse:pkp;165.0", "tacz:m249;165.0", "tacz:rpk;164.0", "tacz:g36k;135.0", "tacz:spr15hb;140.0", "tacz:b93r;125.0", "tacz:glock_17;125.0"]
|
|||
|
#Tacz attachment sound reduction. Format: 'modid:item;reduction'. Example: 'tacz:suppressor;15.0'
|
|||
|
taczAttachmentReductions = ["tacz:muzzle_brake_cthulhu;-3.0", "tacz:muzzle_brake_pioneer;-3.0", "tacz:muzzle_brake_cyclone_d2;-3.0", "tacz:muzzle_brake_trex;-5.0", "tacz:muzzle_silencer_mirage;35.0", "tacz:muzzle_silencer_vulture;45.0", "tacz:muzzle_silencer_knight_qd;40.0", "tacz:muzzle_silencer_ursus;30.0", "tacz:muzzle_silencer_ptilopsis;30.0", "tacz:muzzle_silencer_phantom_s1;30.0", "tacz:muzzle_compensator_trident;-2.0", "tacz:deagle_golden_long_barrel;20.0"]
|
|||
|
#Default reduction value for Tacz attachments if the attachment id is not in the list.
|
|||
|
#Range: -300.0 ~ 300.0
|
|||
|
taczAttachmentReductionDefault = 20.0
|
|||
|
#The base visual detection range (in blocks) when a gunshot occurs, before muzzle attachments are factored in.
|
|||
|
#Range: 16.0 ~ 512.0
|
|||
|
gunshotBaseDetectionRange = 128.0
|
|||
|
#How long (in ticks) the increased detection from a gunshot lasts. 20 ticks = 1 second.
|
|||
|
#Range: 1 ~ 200
|
|||
|
gunshotDetectionDurationTicks = 60
|
|||
|
#Tacz attachment VISUAL FLASH reduction. A positive value reduces flash range, a negative value INCREASES it (e.g., for muzzle brakes)., Format: 'modid:item;reduction_amount'
|
|||
|
taczMuzzleFlashReductions = ["tacz:muzzle_silencer_mirage;100.0", "tacz:muzzle_silencer_vulture;110.0", "tacz:muzzle_silencer_knight_qd;105.0", "tacz:muzzle_silencer_ursus;90.0", "tacz:muzzle_silencer_ptilopsis;90.0", "tacz:muzzle_silencer_phantom_s1;90.0", "tacz:muzzle_brake_cthulhu;-10.0", "tacz:muzzle_brake_pioneer;-10.0", "tacz:muzzle_brake_cyclone_d2;-10.0", "tacz:muzzle_brake_trex;-15.0", "tacz:muzzle_compensator_trident;-5.0"]
|
|||
|
|
|||
|
["Simple VC"]
|
|||
|
#Enable Simple Voice Chat (SVC) integration.
|
|||
|
#When enabled, voice chat frames generate a dynamic sound whose range scales with the audio's peak level (dBFS).
|
|||
|
#Optional: Only takes effect if SVC is installed.
|
|||
|
enableVoiceChatIntegration = true
|
|||
|
#Base range used when the player is whispering in SVC (before applying dB multiplier).
|
|||
|
#Range: 1 ~ 64
|
|||
|
voiceChatWhisperRange = 16
|
|||
|
#Base range used for normal speaking in SVC (before applying dB multiplier).
|
|||
|
#Range: 1 ~ 128
|
|||
|
voiceChatNormalRange = 32
|
|||
|
#Weight assigned to the generated SVC sound event.
|
|||
|
#Range: 0.0 ~ 10.0
|
|||
|
voiceChatWeight = 9.0
|
|||
|
#Mapping from normalized dB thresholds to range multipliers for SVC.
|
|||
|
#Normalized dB is in [0..127], where 0 = silence and 127 = max peak (0 dBFS).
|
|||
|
#Each entry format: 'threshold:multiplier'. Entries are evaluated from highest threshold to lowest.
|
|||
|
#Defaults replicate the built-in behavior: >=50 -> 1.0, >=30 -> 0.7, >=10 -> 0.3.
|
|||
|
voiceChatDbThresholdMap = ["110:2.0", "90:1.8", "75:1.5", "50:1.0", "30:0.7", "10:0.3", "0:0.05"]
|
|||
|
|
|||
|
#Muffling settings for different block types.
|
|||
|
[muffling]
|
|||
|
#Enable/disable block muffling effects on sound range/weight.
|
|||
|
enableBlockMuffling = true
|
|||
|
#Maximum number of blocks to check for muffling between sound source and mob. Higher values are more accurate but more performance intensive.
|
|||
|
#Range: 8 ~ 256
|
|||
|
maxMufflingBlocksToCheck = 16
|
|||
|
#Sound muffling factor for wool blocks. Default: 0.15
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
mufflingFactorWool = 0.15
|
|||
|
#Sound muffling factor for solid blocks. Default: 0.35
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
mufflingFactorSolid = 0.35
|
|||
|
#Sound muffling factor for non-solid blocks. Default: 0.7
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
mufflingFactorNonSolid = 0.7
|
|||
|
#Sound muffling factor for thin blocks (e.g., carpets, panes). Default: 0.9
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
mufflingFactorThin = 0.9
|
|||
|
#Sound muffling factor for liquid blocks. Default: 0.5
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
mufflingFactorLiquid = 0.5
|
|||
|
#Sound muffling factor for air blocks. Default: 1.0
|
|||
|
#Range: 0.0 ~ 1.0
|
|||
|
mufflingFactorAir = 1.0
|
|||
|
#List of custom wool block IDs for sound muffling. Format: 'modid:blockid'. Default: empty list.
|
|||
|
customWoolBlocks = []
|
|||
|
#List of custom solid block IDs for sound muffling. Format: 'modid:blockid'. Default: empty list.
|
|||
|
customSolidBlocks = []
|
|||
|
#List of custom non-solid block IDs for sound muffling. Format: 'modid:blockid'. Default: empty list.
|
|||
|
customNonSolidBlocks = []
|
|||
|
#List of custom thin block IDs for sound muffling. Format: 'modid:blockid'. Default: empty list.
|
|||
|
customThinBlocks = []
|
|||
|
#List of custom liquid block IDs for sound muffling. Format: 'modid:blockid'. Default: empty list.
|
|||
|
customLiquidBlocks = []
|
|||
|
#List of custom air block IDs for sound muffling. Format: 'modid:blockid'. Default: empty list.
|
|||
|
customAirBlocks = []
|
|||
|
|
|||
|
[profiles]
|
|||
|
#List of special mob profiles. Each profile is a string with 5 parts separated by ';'.
|
|||
|
#Format: profileName;mobId;nbtMatcher;soundOverridesString;detectionOverridesString
|
|||
|
#- profileName: A unique name (e.g., 'AlphaZombie').
|
|||
|
#- mobId: Mob's resource location (e.g., 'minecraft:zombie'). Make sure it is in attractedEntities. Use '*' or empty to match any mob if NBT is specific.
|
|||
|
#- nbtMatcher: Any compound NBT (e.g., '{IsAlpha:1b}'). Leave empty for no NBT matching.
|
|||
|
#- soundOverrides: Comma-separated 'soundId:range:weight' (e.g., 'minecraft:entity.player.hurt:30.0:2.0,minecraft:block.chest.open:25.0:1.5'). Leave empty for no overrides, and make sure the sound IDs are in the soundIdWhitelist.
|
|||
|
#- detectionOverrides: Comma-separated 'stanceName:value' (e.g., 'standing:50.0,sneaking:25.0'). Stances: standing, sneaking, crawling. Leave empty for no overrides.
|
|||
|
#Example: AlphaZombie;minecraft:zombie;{IsAlpha:1b};minecraft:entity.player.hurt:30.0:2.0;standing:50.0,sneaking:25.0
|
|||
|
#To add more profiles, just add more strings to the list.
|
|||
|
specialMobProfilesRaw = ["GreedyGoblin;minecraft:piglin;;minecraft:block.chest.open:30.0:2.5,minecraft:entity.player.death:50.0:3.0;standing:40.0,sneaking:20.0,crawling:10.0", "SmartZombie;minecraft:zombie;{IsAlpha:1b};minecraft:entity.player.hurt:30.0:2.0;standing:80.0,sneaking:45.0,crawling:15.0", "InsaneVillager;minecraft:villager;;minecraft:wooden_door.open:25.0:1.5,minecraft:block.barrel.open:20.0:1.0;"]
|
|||
|
#List of special player profiles. Each string has 3 parts separated by ';'.
|
|||
|
#Format: profileName;nbtMatcher;detectionOverridesString
|
|||
|
#- profileName: A unique name (e.g., 'FelineOrigin').
|
|||
|
#- nbtMatcher: Any compound NBT to match on the player (capabilities included). Use valid SNBT. Keys containing ':' must be quoted (e.g., '{"ForgeCaps":{"origins:origins":{"Origins":{"origins:origin":"origins:feline"}}}}'). Leave empty to match all players.
|
|||
|
#- detectionOverridesString: Comma-separated 'stanceName:value' (e.g., 'standing:40.0,sneaking:20.0,crawling:10.0'). Valid stances: standing, sneaking, crawling.
|
|||
|
#Example: FelineOrigin;{"ForgeCaps":{"origins:origins":{"Origins":{"origins:origin":"origins:feline"}}}};standing:24.0,sneaking:10.0,crawling:3.0
|
|||
|
specialPlayerProfilesRaw = ["FelineOrigin;{\"ForgeCaps\":{\"origins:origins\":{\"Origins\":{\"origins:origin\":\"origins:feline\"}}}};standing:24.0,sneaking:10.0,crawling:3.0", "DinosaurHatched;{\"ForgeCaps\":{\"fossil:player\":{\"HatchedDinosaur\":1b}}};standing:50.0"]
|
|||
|
|