PLUGINv1.5.2-26.1.2-26.2 · updated Sep 11, 2026

HiddenOre - Mining Drop Control

No Rating
CREATED BYVolmitSoftware7 plugins

GITHUB DOCUMENTATION DISCORD

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.

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

Commands and permissions

/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:

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.

Configuration - default config.yml

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

Commands can use %player% %uuid% %world% %x% %y% %z%, plus PlaceholderAPI placeholders when it is installed. The configuration is hot reloaded on file save.

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:

# 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

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.

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.

Languages all 17 locale codes

English is selected by default. To switch, set locale in plugins/HiddenOre/language.yml:

locale: en_US

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)
HiddenOre - Mining Drop ControlFREE

Ready to create something amazing?

Join the MCModels community and start building your dream projects today.