Home›Java›Mods›HiddenOre - Mining Drop Control
HiddenOre - Mining Drop Control
ModsJava

HiddenOre - Mining Drop Control

Java mod listed for Minecraft 26.x. Downloads from the MC Java Mods app on Android.

⬇ Download on Spigot
[​IMG]
[​IMG]
[​IMG]
GITHUB • DOCUMENTATION • DISCORD​

Plain text version
Everything above, as readable text. Expand whichever section you need.
Spoiler: Overview - what HiddenOre does
Ore is normally a block sitting in your world, which means anyone with an x-ray client can see where it is. HiddenOre moves the value into ordinary stone instead: any managed block break can pay out an item, experience, or a command, decided based on what is configured the moment the block is broken.
  • Hidden rewards Stone and deepslate are managed by default. A break rolls your rules and pays at most one item reward.
  • Two discovery models Seeded veins sit at fixed positions derived from the world seed, so other plugins can detect them. Pure random rolls fresh on every break with nothing pre-placed.
  • Items, experience and commands Any rule can hand over items, grant experience, or run commands via the player or the console.
  • Optional ore removal Strip configured vanilla ores out of terrain as it generates.
  • Placement aware Player-placed blocks are tracked in chunk data and are not counted.
  • Integration surface A public service, a cancellable break event and a mutable drop event.
It is a mining economy first Ore removal is what makes it an anti-xray measure, and it is off until you turn it on. Out of the box it is already a working economy for coal, copper, iron, gold, redstone, lapis, diamond and emerald.
Spoiler: Compatibility - runtimes and Java
One jar covers all six runtimes, Minecraft 26.x+
  • Paper loads through the server's public PluginManager
  • Purpur same Paper-family load and unload paths
  • Leaf Paper-family fork, treated like Paper
  • Folia regionized scheduling, HiddenOre declares folia-supported
  • Canvas Folia fork, same regionized rules
  • Spigot loads through plugin.yml; jars that ship only paper-plugin.yml are refused
Spoiler: Commands and permissions
Code (Text):
/hiddenore Paginated hover-and-click help menu
/hiddenore reload Validate and reload config.yml and language.yml
/hiddenore debug Toggle per-player reward-roll diagnostics
One permission covers the whole tree:
Code (Text):
hiddenore.admin Gives access to HiddenOre default: op
No subcommand takes arguments. debug requires a player, so the console cannot run it, it prints what each of your breaks is rolling, which is the fastest way to tune a config.
Spoiler: Configuration - default config.yml
Code (YAML):
auto_pickup_drops : false
suppress_block_drop_on_custom_drop
: true

ore-removal
:
  # If disabled, no changes will be made to the world generation
  enabled
: false
  # Global settings for all worlds excluding exceptions
  global
:
    # If true, by default all ores will be removed from the world generation
    default
: true
    # Exceptions for a specific ore from the default value
    # accepted keys are:
    # COAL_ORE, COPPER_ORE, IRON_ORE, GOLD_ORE, DIAMOND_ORE, REDSTONE_ORE, LAPIS_ORE, EMERALD_ORE
    # DEEPSLATE_COAL_ORE, DEEPSLATE_COPPER_ORE, DEEPSLATE_IRON_ORE, DEEPSLATE_GOLD_ORE, DEEPSLATE_DIAMOND_ORE, DEEPSLATE_REDSTONE_ORE, DEEPSLATE_LAPIS_ORE, DEEPSLATE_EMERALD_ORE
    # NETHER_GOLD_ORE, NETHER_QUARTZ_ORE, ANCIENT_DEBRIS
    NETHER_GOLD_ORE
: false
    NETHER_QUARTZ_ORE
: false
    ANCIENT_DEBRIS
: false
  # Exceptions for specific worlds, keyed by their fully qualified world key
  exceptions
:
    "minecraft:the_end"
:
      default
: false
    "minecraft:the_nether"
:
      default
: false
      NETHER_GOLD_ORE
: true
      NETHER_QUARTZ_ORE
: true
      ANCIENT_DEBRIS
: true

blocks
:
  stone
:
    drop
: cobblestone
  deepslate
:
    drop
: cobbled_deepslate

# In seeded mode, hidden veins are derived from the world seed: every position in the
# world either holds a vein block or it doesn't, deterministically, and mining a vein
# position pays out exactly once, ever.
# NOTE: in seeded mode vein placement is derived from the order of the drops list below.
# Reordering, inserting, or removing entries reshuffles all undiscovered veins.
veins
:
  # seeded      - veins exist at fixed positions before being mined, so other plugins
  #               can detect and outline them, and each position pays out once, ever.
  # pure_random - nothing is pre-placed; every eligible block break rolls fresh odds
  #               tuned to the same per-chunk statistics (veins_per_chunk and vein
  #               sizes below). Vein detection always comes up empty in this mode.
  generation
: seeded
  # Whether blocks placed by players can yield hidden drops. When false, player-placed
  # blocks are tracked (surviving pistons and restarts) and never pay out, closing the
  # place-and-remine exploit.
  allow_placed_blocks
: false
  discovery_sound
:
    sound
: "BLOCK_BEACON_POWER_SELECT"
    volume
: 1.0
    pitch
: 1.0

# Safety limits: up to 64 veins per chunk and 256 blocks per vein for one rule,
# up to 1,024 worst-case target blocks across all item rules, and exp_drop up to 1,000.
drops
:
  - item
: coal
    veins_per_chunk
: 2.2
    vein_min_size
: 5
    vein_max_size
: 20
    min_y
: 0
    max_y
: 320
    fortune_multiplier
: true
    tool_tiers
: [ WOODEN_PICKAXE, STONE_PICKAXE, COPPER_PICKAXE, IRON_PICKAXE, GOLDEN_PICKAXE, DIAMOND_PICKAXE, NETHERITE_PICKAXE ]
    exp_drop
: 2

  - item
: raw_copper
    veins_per_chunk
: 1.6
    vein_min_size
: 4
    vein_max_size
: 12
    min_y
: -16
    max_y
: 112
    fortune_multiplier
: true
    tool_tiers
: [ COPPER_PICKAXE, IRON_PICKAXE, GOLDEN_PICKAXE, DIAMOND_PICKAXE, NETHERITE_PICKAXE ]
    exp_drop
: 2

  - item
: raw_iron
    veins_per_chunk
: 1.8
    vein_min_size
: 4
    vein_max_size
: 12
    min_y
: -64
    max_y
: 320
    fortune_multiplier
: false
    tool_tiers
: [ COPPER_PICKAXE, IRON_PICKAXE, GOLDEN_PICKAXE, DIAMOND_PICKAXE, NETHERITE_PICKAXE ]
    exp_drop
: 0

  - item
: raw_gold
    veins_per_chunk
: 0.6
    vein_min_size
: 3
    vein_max_size
: 8
    min_y
: -64
    max_y
: 32
    fortune_multiplier
: false
    tool_tiers
: [ IRON_PICKAXE, GOLDEN_PICKAXE, DIAMOND_PICKAXE, NETHERITE_PICKAXE ]
    exp_drop
: 0

  - item
: redstone
    veins_per_chunk
: 0.9
    vein_min_size
: 4
    vein_max_size
: 8
    min_y
: -64
    max_y
: 16
    fortune_multiplier
: true
    tool_tiers
: [ IRON_PICKAXE, GOLDEN_PICKAXE, DIAMOND_PICKAXE, NETHERITE_PICKAXE ]
    exp_drop
: 1

  - item
: lapis_lazuli
    veins_per_chunk
: 0.5
    vein_min_size
: 3
    vein_max_size
: 6
    min_y
: -64
    max_y
: 64
    fortune_multiplier
: true
    tool_tiers
: [ COPPER_PICKAXE, IRON_PICKAXE, GOLDEN_PICKAXE, DIAMOND_PICKAXE, NETHERITE_PICKAXE ]
    exp_drop
: 5

  - item
: diamond
    veins_per_chunk
: 0.5
    vein_min_size
: 3
    vein_max_size
: 8
    min_y
: -64
    max_y
: 16
    fortune_multiplier
: true
    tool_tiers
: [ IRON_PICKAXE, GOLDEN_PICKAXE, DIAMOND_PICKAXE, NETHERITE_PICKAXE ]
    exp_drop
: 7

  - item
: emerald
    veins_per_chunk
: 0.35
    vein_min_size
: 1
    vein_max_size
: 2
    min_y
: -16
    max_y
: 320
    fortune_multiplier
: true
    tool_tiers
: [ IRON_PICKAXE, GOLDEN_PICKAXE, DIAMOND_PICKAXE, NETHERITE_PICKAXE ]
    exp_drop
: 7

  # Example command drop (percentage chance only, rolled at break time)
  # You can specify whether you want the command to be executed by the player, or console using "player:" and "console:"
  # If you don't specify what it will run as, it will default to what you have execute_as set to
  - type
: command
    commands
:
     - "player:say I rolled a player-level bonus!"
      - "console:say %player% rolled a server-level bonus!"
      - "give %player% diamond 1"
    chance
: 0.0005
    min_y
: -64
    max_y
: 320
    execute_as
: console
What each option does Top level
  • auto_pickup_drops send rewards straight to the player's inventory; only overflow drops on the ground.
  • suppress_block_drop_on_custom_drop when a break pays out, skip the normal cobblestone. Set false to give both.
  • blocks which blocks HiddenOre manages, and what each drops instead of its vanilla item. Anything not listed here is ignored entirely.
  • veins.generation (seeded) the discovery model, seeded or pure_random.
  • veins.allow_placed_blocks whether stone a player placed themselves can pay out. Leave it false or it is farmable.
  • veins.discovery_sound what plays when someone finds something.
Item rules one entry under drops: per reward.
  • item what the player gets.
  • veins_per_chunk how common it is.
  • vein_min_size / vein_max_size how many blocks one find is worth.
  • min_y / max_y the height band it can appear in.
  • tool_tiers which pickaxes can find it.
  • fortune_multiplier whether Fortune multiplies the amount, as it does on vanilla ore.
  • exp_drop a maximum. The actual grant is random from 0 up to it.
Command rules set type: command instead of item.
  • commands the commands to run, in order.
  • chance odds per eligible break, from 0 to 1. The default 0.0005 is roughly 1 in 2,000.
  • execute_as console or player. Prefix a single line with player: or console: to override it for that line only.
  • min_y / max_y the height band it can fire in.
Commands can use %player% %uuid% %world% %x% %y% %z%, plus PlaceholderAPI placeholders when it is installed. The configuration is hot reloaded on file save.
Code (YAML):
drops:
  - item
: itemname # Lowercase whatever follows minecraft:raw_iron
    chance
: 0.0069 # Maximum 6 decimal accuracy. Take the per chunk percentage spawn chance converted to a decimal between 0 and 1, and then divide by 19,816. This is going to make the drop feel really rare, but it makes mining result in the same amount of material on average given the same amount of time spent mining. However this assumes a player mining blind, but they search for ore, and have an instinct for where and how it spawns, meaning actual discovery is sometimes as much as 10 times the calculated drop chance, and if you are not super concerned about your interplayer economy, you can multiply the calculated chance by up to 10.
    min_y
: 0 # Supports a negative Y value
    max_y
: 320
    fortune_multiplier
: true
    tool_tiers
: [WOODEN_PICKAXE, STONE_PICKAXE, COPPER_PICKAXE, IRON_PICKAXE, GOLDEN_PICKAXE, DIAMOND_PICKAXE, NETHERITE_PICKAXE ] # Remove the tiers you don't want to be able to mine this drop.
    vein_max_size
: 20 # Max possible size of a vein
    exp_drop
: 2
You can also add commands as drops, for example if you want there to be a rare chance to mine a custom item that needs to be given via a command. Simply add the following into the drops object like an item:
Code (YAML):
  # Example command drop (percentage chance only, not affected by enchantments/veins/XP)
  # You can specify whether you want the command to be executed by the player, or console using "player:" and "console:"
  # If you don't specify what it will run as, it will default to what you have execute_as set to
  - type
: command
    commands
:
     - "player:say I rolled a player-level bonus!"
      - "console:say %player% rolled a server-level bonus!"
      - "give %player% diamond 1"
    chance
: 0.0005
    min_y
: -64
    max_y
: 320
    execute_as
: console
Spoiler: Ore removal, and what it is not
Hiding rewards in stone does not help if the real diamond ore is still in the wall. Set ore-removal.enabled: true and HiddenOre replaces configured ores with stone, deepslate or netherrack as terrain generates.
  • Off by default. Turn it on deliberately.
  • New chunks only. Existing terrain is never touched, and turning it back off does not restore anything already removed.
  • Per world. The defaults leave the End alone and keep Nether ores intact. World keys must be fully qualified, such as minecraft:the_nether a name-only key fails validation.
  • Iris dimensions can strip their own ores with hideOresForHiddenOre.
This is not packet obfuscation. HiddenOre does not disguise blocks on their way to the client, it removes them from the world. A smarter x-ray client cannot defeat that and equally, any ore you leave enabled stays fully visible to one.
Spoiler: Placeholders
Optional: PlaceholderAPI for placeholders in reward commands. Below are the placeholders HiddenOre ships with by default.
  • %hiddenore_available% : true or false, whether HiddenOre's runtime is published and serving.
  • %hiddenore_seeded% : true or false, whether veins.generation is set to seeded.
  • %hiddenore_drop-rules% : a plain number, the total entries under drops: in config.yml, item rules and command rules together.
Spoiler: Languages all 17 locale codes
English is selected by default. To switch, set locale in plugins/HiddenOre/language.yml:
Code (Text):
locale: en_US
Code (Text):
de_DE German (Germany)
es_ES Spanish (Spain)
fi_FI Finnish (Finland)
fr_FR French (France)
he_IL Hebrew (Israel)
it_IT Italian (Italy)
ja-JP Japanese (Japan)
ko_KR Korean (South Korea)
lt_LT Lithuanian (Lithuania)
nl_NL Dutch (Netherlands)
pl_PL Polish (Poland)
pt_PT Portuguese (Portugal)
ru_RU Russian (Russia)
tr_TR Turkish (Turkey)
vi_VI Vietnamese (Vietnam)
zh_CN Chinese (Simplified)
zh_TW Chinese (Traditional)

Commands

Plugin details

Read from the plugin's own plugin.yml.

Quick facts

Install steps are the general flow for this file type — How to install Minecraft Java mods & modpacks walks through it step by step.

HiddenOre - Mining Drop Control is a free Minecraft Java mod. Compatible with Minecraft 26.1, 26.2, 26.3. Downloaded 69 times (via Spigot). Download it and open it directly in the game.

Explore more