HyToolVariants

Makes variants of different tools such as Hoe, PickAxe, Hatchet

File Details

HyToolVariants-0.0.1BETA.jar

  • B
  • Mar 21, 2026
  • 401.72 KB
  • 77
  • Early Access

File Name

HyToolVariants-0.0.1BETA.jar

Supported Versions

  • Early Access

[0.0.1BETA] — 2026-03

First public beta — initial CurseForge release; everything below is new functionality for this build (no prior published version).

Added

  • HyToolVariants — Server plugin that rolls random stat variants on tools (pickaxes, hatchets, shovels, hoes, shears), with per-item persistent BSON metadata. Rolls draw from the default variant pool below (and optional tool special effects such as Vein Mining).
  • ECS block-break pipelineBreakBlockEvent handled via an entity system for reliable player/world resolution (vein-style tooling).
  • Vein Mining — Connected ore-only breaking with configurable globs/tiers; optional debug logging for troubleshooting.
  • Night Vision (tools) — While holding a tool with the Night Vision roll: PostFx bloom, optional player dynamic light, configurable nightVisionThreshold (default 0.0), nightVisionLightRadius including -1 for max-radius / torch-style behavior, and periodic refresh with network-entity resolution for light updates.
  • TooltipsDynamicTooltipsLib integration when installed (rating, multipliers, etc.); weapon-era variant ids blacklisted in defaults so combat-only lines (e.g. Stun) do not appear on tools.
  • Commands & UI/htv config menu, /htv reload, reroll/apply/dump; debug mode and timestamped logs under mods/HyToolVariants/Logs/.
  • Optional integrationsRPGLeveling: Exp Boost can award block-break XP when that mod is present. HyArmourVariants / HyWeaponVariants: optional yield so another mod can own combat pipelines when installed.
  • DesignTool-focused build: combat on-hit systems and weapon-centric variants are off/blacklisted by default. BSON meta root may use legacy hyweaponvariants for compatibility with earlier experiments.

Default variant pool (variantPool)

Default config.json5 entries — each roll picks stat ids with weights; variantCount is 0–3 stats per tool. category limits which tool types can receive that stat.

ID Label (UI) Category
Reach Block Reach (any tool)
BranchMine Branch Mine PICKAXE_ONLY
MiningSpeed Mining Speed PICKAXE_ONLY
StripMine Strip Mine PICKAXE_ONLY
OreYield Fortune PICKAXE_ONLY
OreSense Ore Sense PICKAXE_ONLY
AutoSmelt Auto Smelt Chance PICKAXE_ONLY
TreeFeller Tree Feller HATCHET_ONLY
Lumberjack Lumberjack HATCHET_ONLY
BranchDig Branch Dig SHOVEL_ONLY
Gardener Gardener HOE_ONLY
BranchTiller Branch Tiller HOE_ONLY
ShearSpeed Shear Speed SHEARS_ONLY
DurabilityBonus Durability (any tool)
Unbreaking Unbreaking (any tool)
Efficiency Efficiency (any tool)
MovementSpeed Move Speed (any tool)
NightVision Night Vision (any tool)
ExpBoost Exp Boost (any tool)

Tool special effects (default)

Separate from multId multipliers: stored as tool special effect metadata (see toolSpecialEffects in config / defaults in code).

ID Label Notes (default)
VeinMining Vein Mining Pickaxes (*Pickaxe* glob); ore-only chain break; tiered max blocks / ore globs configurable

Config files & layout

All paths are relative to the server working directory (typically the folder that contains mods/).

Path Role
mods/HyToolVariants/config.json5 Main config — JSON5 (comments & trailing commas). Written on first run from JAR defaults if missing; edit by hand or via /htv UI (with permission). /htv reload re-reads this file.
mods/HyToolVariants/Languages/{code}.json5 Strings for UI/tooltips per language (e.g. en.json5, de.json5). The language field in main config selects which file to load. Bundled languages are extracted from the JAR into this folder when a file is missing.
mods/HyToolVariants/Logs/debug_YYYY-MM-DD_HH-mm-ss.log Debug log file — created when debug: true (async writer; one file per server start). Not auto-deleted.

Packaged in the mod JAR (not edited on disk unless you unpack the jar):

  • Default HyToolVariants/config.json5 (and fallback HyToolVariants/config/HyToolVariants.json5) — seeds the live config when none exists.
  • Common/UI/Custom/HyToolVariants/HwvConfig.ui — layout for the in-game config page (asset pack).

Legacy locations (migrated automatically into mods/HyToolVariants/ when the new file does not exist yet):

  • mods/HyToolVariants_HyToolVariants/config.json5
  • Plugin data directory: config/HyToolVariants.json5, or HyToolVariants/config.json5, or mods/HyToolVariants/config/HyToolVariants.json5

Metadata: item variant data is stored under the BSON key set by metaRoot in config (default hyweaponvariants for save compatibility).

Commands

Command Aliases Description
/htv /hytoolvariants Same command — opens the config UI when allowed (see permissions).
/htv (no args) Opens the in-game config UI (checks help then menu permissions).
/htv help /htv ? Help text and version line.
/htv version /htv ver, /htv v Mod version string.
/htv reload Reload mods/HyToolVariants/config.json5 from disk (no restart).
/htv menu /htv ui Open the config UI.
/htv reroll /htv rr (Hold eligible tool) Strip current variant and roll a new one.
/htv apply /htv force (Hold tool) Force-apply a variant if the item is eligible but missing one.
/htv dump (Hold item) Print variant metadata and debug info to chat.
/htv rolltest /htv rt Bulk simulation of random rolls (optional [count] [itemId]); does not create items.

Players only; the command is not intended for the console in this build.

Permissions

Strings are defined in code as hyweaponvariants.command.<node> (legacy prefix retained for LuckPerms / existing grants).

Permission node Grants
hyweaponvariants.command.help /htv gate for help / version; also required before the UI opens from bare /htv.
hyweaponvariants.command.menu Open the config UI (/htv, /htv menu, /htv ui).
hyweaponvariants.command.reload /htv reload
hyweaponvariants.command.reroll /htv reroll
hyweaponvariants.command.apply /htv apply, /htv force
hyweaponvariants.command.dump /htv dump, /htv rolltest
hyweaponvariants.command.edit Config UI actions that save or change persisted settings (buttons that write config).

Without a permission plugin (no Player.hasPermission(String)): help-level checks allow everyone. Nodes that modify server config, open the menu, change held items, or dump debug (reload, menu, reroll, apply, dump, edit) fall back to operator via isOp() when that method exists; otherwise they are denied.