VeinMiner icon

VeinMiner -----

Minecraft Forge's VeinMiner recreated for Spigot servers.



Minimum Java Version: Java 17
Legacy (Minecraft 1.13.x - 1.16.x): VeinMiner 1.17.10 ( download)
Legacy (Minecraft 1.8.x - 1.12.x): VeinMiner 1.11.3 ( download)
Collects anonymous statistics: https://bstats.org/plugin/bukkit/VeinMiner
- Typical bStats information
- Types of blocks mined in the previous update cycle
- The amount of players actively using the optional client mod
- Names and versions of installed anti cheats​


Overview:

VeinMiner introduces a vanilla-friendly mechanic that allows players to instantly mine groups of adjacent blocks, saving nothing more than precious time. Groups of ores, large trees, vast crop fields, and more. Each tool can have its own configurable block list allowing for limitless possibilities. This is a fantastic perk for Prison, Factions and Semi-Vanilla servers that isn't overpowered but still gives players a rewarding benefit for donating to your server.


Features In Brief:
  • Efficient mining of similar blocks in quick succession
  • Powerful configuration for custom tool categories and block lists
  • A variety of mining patterns to mine cubic regions, tunnels, or staircases
  • Optional economy support
  • Optional client-sided mod for custom keybinds (link)
  • A developer API for custom mining patterns and behaviors
  • Drag-and-drop installation with no additional steps for server owners by default
  • Native Anti Cheat and PlaceholderAPI support

[​IMG]
using vein miner to break a cluster of diamonds in sneak mode


Commands:
  • /veinminer ...
    • /veinminer reload
      • Reload the config.yml and categories.yml and apply any changes you've made in the file
      • Permission: veinminer.command.reload
    • /veinminer version
      • View version and developer information about VeinMiner
    • /veinminer toggle [tool]
      • Enable or disable vein mining
      • If provided, toggle a specific tool
      • Permission: veinminer.command.toggle
    • /veinminer mode <mode>
      • Change the way vein mining should be activated
      • To use "client", the VeinMiner Companion Mod must be installed on your client
      • Permission: veinminer.command.mode
    • /veinminer pattern <pattern>
      • Change the way vein mining will search for and break blocks
      • Patterns may be registered by add-ons, but VeinMiner provides "default", "tunnel", "staircase_up" and "staircase_down"
      • Permission: veinminer.command.pattern
    • /veinminer givetool <category> <tool> [amount]
      • Give yourself a tool from the given category (useful for tools with NBT)
      • Permission: veinminer.command.givetool
    • /veinminer import
      • A tool for VeinMiner versions prior to 2.0.0 to import legacy JSON data into the new SQLite format
      • Permission: veinminer.command.import
    • /veinminer blocklist ...
      • Mirrors /blocklist below
    • /veinminer toollist ...
      • Mirrors /veinminer toollist below
  • /blocklist ...
    • /blocklist <category> add <block>
      • Add a vein mineable block to the given category
      • Blocks can be simple ids like minecraft:stone, or with states like minecraft:chest[waterlogged=true]
      • Permission: veinminer.command.blocklist
    • /blocklist <category> remove <block>
      • Remove a block from the given category
      • Blocks can be simple ids like minecraft:stone, or with states like minecraft:chest[waterlogged=true]
      • Permission: veinminer.command.blocklist
    • /blocklist <category> list
      • List all blocks (and block states) that are vein mineable with the given category
      • Permission: veinminer.command.blocklist
  • /toollist ...
    • /toollist <category> add <item>
      • Add an item to the given category's tool list
      • Permission: veinminer.command.toollist
    • /toollist <category> remove <item>
      • Remove an item from the given category's tool list
      • Permission: veinminer.command.toollist
    • /toollist <category> list
      • List all items useable for the given category
      • Permission: veinminer.command.toollist


Permissions:

(default) veinminer.veinmine.*: Allows players to use vein miner with all tools
  • (default) veinminer.veinmine.<tool>: Allows players to use vein miner with a specific tool
    • veinminer.veinmine.pickaxe
    • veinminer.veinmine.shovel
    • ... etc ...
(default) veinminer.pattern.*: Allows players to use all vein mining patterns
  • (default) veinminer.pattern.<pattern_id>: Allows players to use a specific vein mining pattern
    • veinminer.pattern.default
    • veinminer.pattern.tunnel
    • veinminer.pattern.staircase_up
    • veinminer.pattern.staircase_down
    • ... etc ...
(nobody) veinminer.free.*: Exempts players from the various costs of using vein miner (if set)
  • (nobody) veinminer.free.economy: Exempts players from economic costs (if set)
  • (nobody) veinminer.free.hunger: Exempts players from additional hunger costs (if set)
(default) veinminer.client.*: Allows players to use all client mod functionality
  • (default) veinminer.client.activation: Allows players to activate vein miner with a custom key bind
  • (default) veinminer.client.patterns: Allows players to switch patterns with a custom key bind
  • (default) veinminer.client.wireframe: Allows players to render a wireframe around targeted vein mineable blocks
(op) veinminer.command.reload: Grants access to the /veinminer reload command
(op) veinminer.command.blocklist: Grants access to the /veinminer blocklist and /blocklist commands
(op) veinminer.command.toollist: Grants access to the /veinminer toollist and /toollist commands
(op) veinminer.command.import: Grants access to the /veinminer import command
(op) veinminer.command.givetool: Grants access to the /veinminer givetool command
(default) veinminer.command.toggle: Grants access to the /veinminer toggle command
(default) veinminer.command.mode: Grants access to the /veinminer mode command
(default) veinminer.command.pattern: Grants access to the /veinminer pattern command


[​IMG]
using vein miner to create a staircase in stone using the companion mod activation mode (custom keybind) and finding iron ore


Configuration:

VeinMiner is split up into two configuration files: the config.yml, where you'll find configuration options to adjust the behaviour of VeinMiner, and the categories.yml, where you'll find configuration options to adjust the list of tools and blocks for vein mining categories, or to create your own categories.

Code (YAML):
# config.yml
MetricsEnabled
: true #bStats Metrics
PerformUpdateChecks
: true # Performs update checks to Spigot

DefaultActivationStrategy
: SNEAK # The default activation to set for players that have not explicitly set one. Can be "NONE", "SNEAK", "STAND", or "ALWAYS"
DefaultVeinMiningPattern
: 'veinminer:default' # The default vein mining pattern to use by default for new players.
CollectItemsAtSource
: true # Whether items from vein mines will be dropped at the source block
CollectExperienceAtSource
: true # Whether experience orbs from vein mines will be dropped at the source block
OnlyDamageOnFirstBlock
: false # If true, only applies damage calculations for the first broken block, as opposed to each block if false (false is more vanilla friendly)
NerfMcMMO
: false # If true, only grants McMMO experience for the FIRST block mined in a vein, as opposed to all blocks if false

# "RepairFriendly", "MaxVeinSize", "Cost", and "DisabledWorlds" may be
# defined and overridden per-category in the categories.yml file
RepairFriendly
: false # If true, vein mining will stop if the tool has 1 durability remaining
MaxVeinSize
: 64 # The maximum amount of blocks vein miner is allowed to break
Cost
: 0.0 # The amount of currency to withdraw every time vein miner is used. Requires Vault and an economy plugin
DisabledWorlds
: # A list of worlds in which vein mining is not allowed
- WorldName

DisabledGameModes
: # A list of game modes in which vein mining is not allowed
- CREATIVE
- SPECTATOR

Hunger
:
  HungerModifier
: 2.5 # How much exhaustion is applied for every block broken while vein mining. Every point is 0.025 hunger/exhaustion per block
  MinimumFoodLevel
: 1 # The minimum food level required to vein mine. If vein mining while this value is hit, it will stop
  HungryMessage
: "&7You are too hungry to vein mine!" # The message to send the player when they are too hungry

Client
: # Options that allow more granular control over the optional client-sided mod
  AllowActivationKeybind
: true # Whether or not the VeinMiner Companion mod is allowed to activate vein miner with a key bind
  AllowPatternSwitchingKeybind
: true # Whether or not the VeinMiner Companion mod is allowed to switch patterns with key binds
  AllowWireframeRendering
: true # Whether or not the VeinMiner Companion mod is allowed to render wireframes around vein mineable blocks

# VeinMiner supports 3 different types of storage (SQLite is used by default)
#   JSON: Each player's data is stored in its own JSON file under the specified directory. Creates lots of files, is very messy, and is generally discouraged.
#   SQLite: Player data is stored in an SQLite database table. A flat file database. Generally faster and more compact than JSON.
#   MySQL: Player data is stored remotely in a MySQL-compliant database (MySQL, MariaDB, etc.). Use this if you want to share VeinMiner data on multiple servers and have a MySQL server available to use.
Storage
:
  # Can be either "JSON", "SQLite", or "MySQL"
  Type
: 'SQLite'

  JSON
: # Only required if "Type" is set to "JSON"
    Directory
: ' %plugin%/playerdata/'

  MySQL
: # Only required if "Type" is set to "MySQL"
    Host
: 'localhost'
    Port
: 3306
    Username
: 'username'
    Password
: 'password'
    Database
: 'veinminer'
    TablePrefix
: 'veinminer_' # The prefix to use for all created tables

# A list of collections of blocks that should be calculated in the same vein
# For example, when mining a red mushroom block, brown mushroom blocks will also be broken in the same vein
Aliases
:
- 'minecraft:acacia_log;minecraft:acacia_wood'
- 'minecraft:birch_log;minecraft:birch_wood'
- 'minecraft:brown_mushroom_block;minecraft:red_mushroom_block'
- 'minecraft:carved_pumpkin;minecraft:pumpkin'
- 'minecraft:cherry_log;minecraft:cherry_wood'
- 'minecraft:crimson_hyphae;minecraft:crimson_stem'
- 'minecraft:dark_oak_log;minecraft:dark_oak_wood'
- 'minecraft:short_grass;minecraft:tall_grass'
- 'minecraft:jungle_log;minecraft:jungle_wood'
- 'minecraft:mangrove_log;minecraft:mangrove_wood'
- 'minecraft:oak_log;minecraft:oak_wood'
- 'minecraft:spruce_log;minecraft:spruce_wood'
- 'minecraft:warped_hyphae;minecraft:warped_stem'
Code (YAML):
#categories.yml
# All tool categories and their item and block lists are defined here.
#
# Block list values are 1:1 with in-game IDs. The prepending of "minecraft:" is optional.
# To specify states, do so with [brackets] as you would in a vanilla /setblock command. For
# example, "minecraft:chest[waterlogged=true]" will search for any waterlogged chests. Other
# undefined states will be ignored when checking.
#
# Each category may define any of the following options:
# "RepairFriendly", "MaxVeinSize", "Cost", and "DisabledWorlds"
# If NOT defined, the global value (the one in the config.yml) will be used instead.
# Everything except for 'Items' is OPTIONAL. They are not required to be set.
#
# Additionally, 'Priority' may be set to an integer which determines a category's
# priority over another category in the case that they both declare the same item.
# For instance, if two categories have the minecraft:diamond_pickaxe item, the category
# with the highest priority will be selected.
# Please avoid situations where multiple categories have the same item, but if absolutely
# required (e.g. for a permission/hierarchical structure), give each category a priority.
#
# Furthermore, 'NBT' may be set to a string which MUST be on an item under the NBT key
# "PublicBukkitValues": { "veinminer:veinminer": "the_value" }
# For example, a category that defines NBT: "MyValue" must also have the NBT key
# "PublicBukkitValues": { "veinminer:veinminer": "MyValue" }
# If not set, no NBT value is required.
#
# ExampleCategory:
#   RepairFriendly: true
#   MaxVeinSize: 32
#   Cost: 100.0
#   DisabledWorlds:
#   - 'world_name'
#   - 'other_world_name'
#   Priority: 10 # This is optional and defaults to 0
#   NBT: "ExampleValue" # This is optional and defaults to no required NBT
#   Items:
#   - 'minecraft:wooden_sword'
#   - 'minecraft:stone_sword'
#   - 'minecraft:golden_sword'
#   - 'minecraft:iron_sword'
#   - 'minecraft:diamond_sword'
#   - 'minecraft:netherite_sword'
#   BlockList:
#   - 'minecraft:stone'
#   - 'minecraft:cobblestone'

Axe
:
  Items
:
 - 'minecraft:wooden_axe'
  - 'minecraft:stone_axe'
  - 'minecraft:golden_axe'
  - 'minecraft:iron_axe'
  - 'minecraft:diamond_axe'
  - 'minecraft:netherite_axe'
  BlockList
:
 - 'minecraft:acacia_log'
  - 'minecraft:acacia_wood'
  - 'minecraft:birch_log'
  - 'minecraft:birch_wood'
  - 'minecraft:brown_mushroom_block'
  - 'minecraft:carved_pumpkin'
  - 'minecraft:cherry_log'
  - 'minecraft:cherry_wood'
  - 'minecraft:crimson_hyphae'
  - 'minecraft:crimson_stem'
  - 'minecraft:dark_oak_log'
  - 'minecraft:dark_oak_wood'
  - 'minecraft:jungle_log'
  - 'minecraft:jungle_wood'
  - 'minecraft:mangrove_log'
  - 'minecraft:mangrove_roots'
  - 'minecraft:mangrove_wood'
  - 'minecraft:melon'
  - 'minecraft:oak_log'
  - 'minecraft:oak_wood'
  - 'minecraft:pumpkin'
  - 'minecraft:red_mushroom_block'
  - 'minecraft:spruce_log'
  - 'minecraft:spruce_wood'
  - 'minecraft:warped_hyphae'
  - 'minecraft:warped_stem'

Hoe
:
  Items
:
 - 'minecraft:wooden_hoe'
  - 'minecraft:stone_hoe'
  - 'minecraft:golden_hoe'
  - 'minecraft:iron_hoe'
  - 'minecraft:diamond_hoe'
  - 'minecraft:netherite_hoe'
  BlockList
:
 - 'minecraft:beetroots [age=3 ]'
  - 'minecraft:brown_mushroom'
  - 'minecraft:carrots [age=7 ]'
  - 'minecraft:moss_block'
  - 'minecraft:moss_carpet'
  - 'minecraft:potatoes [age=7 ]'
  - 'minecraft:red_mushroom'
  - 'minecraft:sculk'
  - 'minecraft:sculk_vein'
  - 'minecraft:wheat [age=7 ]'

Pickaxe
:
  Items
:
 - 'minecraft:wooden_pickaxe'
  - 'minecraft:stone_pickaxe'
  - 'minecraft:golden_pickaxe'
  - 'minecraft:iron_pickaxe'
  - 'minecraft:diamond_pickaxe'
  - 'minecraft:netherite_pickaxe'
  BlockList
:
 - 'minecraft:amethyst_cluster'
  - 'minecraft:ancient_debris'
  - 'minecraft:coal_ore'
  - 'minecraft:copper_ore'
  - 'minecraft:deepslate_coal_ore'
  - 'minecraft:deepslate_copper_ore'
  - 'minecraft:deepslate_diamond_ore'
  - 'minecraft:deepslate_emerald_ore'
  - 'minecraft:deepslate_gold_ore'
  - 'minecraft:deepslate_iron_ore'
  - 'minecraft:deepslate_lapis_ore'
  - 'minecraft:deepslate_redstone_ore'
  - 'minecraft:diamond_ore'
  - 'minecraft:emerald_ore'
  - 'minecraft:gold_ore'
  - 'minecraft:iron_ore'
  - 'minecraft:lapis_ore'
  - 'minecraft:nether_gold_ore'
  - 'minecraft:nether_quartz_ore'
  - 'minecraft:raw_copper_block'
  - 'minecraft:raw_gold_block'
  - 'minecraft:raw_iron_block'
  - 'minecraft:redstone_ore'

Shears
:
  Items
:
 - 'minecraft:shears'
  BlockList
:
 - 'minecraft:acacia_leaves'
  - 'minecraft:azalea_leaves'
  - 'minecraft:birch_leaves'
  - 'minecraft:black_wool'
  - 'minecraft:blue_wool'
  - 'minecraft:brown_wool'
  - 'minecraft:cherry_leaves'
  - 'minecraft:cobweb'
  - 'minecraft:cyan_wool'
  - 'minecraft:dark_oak_leaves'
  - 'minecraft:flowering_azalea_leaves'
  - 'minecraft:gray_wool'
  - 'minecraft:green_wool'
  - 'minecraft:jungle_leaves'
  - 'minecraft:light_blue_wool'
  - 'minecraft:light_gray_wool'
  - 'minecraft:lime_wool'
  - 'minecraft:magenta_wool'
  - 'minecraft:mangrove_leaves'
  - 'minecraft:oak_leaves'
  - 'minecraft:orange_wool'
  - 'minecraft:pink_wool'
  - 'minecraft:purple_wool'
  - 'minecraft:red_wool'
  - 'minecraft:spruce_leaves'
  - 'minecraft:white_wool'
  - 'minecraft:yellow_wool'

Shovel
:
  Items
:
 - 'minecraft:wooden_shovel'
  - 'minecraft:stone_shovel'
  - 'minecraft:golden_shovel'
  - 'minecraft:iron_shovel'
  - 'minecraft:diamond_shovel'
  - 'minecraft:netherite_shovel'
  BlockList
:
 - 'minecraft:clay'
  - 'minecraft:gravel'
  - 'minecraft:mud'
  - 'minecraft:muddy_mangrove_roots'
  - 'minecraft:powder_snow'
  - 'minecraft:red_sand'
  - 'minecraft:sand'
  - 'minecraft:snow'
  - 'minecraft:soul_sand'
  - 'minecraft:soul_soil'

# Does not support an "Items" list, but does support all other options
Hand
:
  BlockList
: [ ]

# Does not support any configurable values other than "BlockList"
# Applies this list of blocks to all other categories, to avoid repetition
All
:
  BlockList
:
 - 'minecraft:blue_ice'
  - 'minecraft:ice'
  - 'minecraft:packed_ice'

Supported Anti Cheats:

VeinMiner natively supports many popular anti cheats so that your players will not be flagged with "fast break" (or whatever the equivalent flag is for your anti cheat of choice). If the anti cheat you are using is not listed here, there is a high chance that players using vein miner will be false flagged for breaking blocks too quickly. If you want another anti cheat added to this list, please request it be supported either in the Discussion Thread, on Discord, or on GitHub as an issue.



Placeholders (PlaceholderAPI):

VeinMiner happily supports PlaceholderAPI with the following placeholders

  • %veinminer_enabled%: Whether or not VeinMiner is toggled on
  • %veinminer_enabled_category_<category>%: Whether or not VeinMiner is toggled on for a given category
  • %veinminer_active%: Whether or not VeinMiner is active (e.g. the player has the keybind pressed)
  • %veinminer_vein_mining%: "true" or "false" depending on whether or not the player is currently vein mining. Only true for a brief moment in time
  • %veinminer_using_client_mod%: "true" or "false" depending on whether or not the player is using the client mod
  • %veinminer_selected_pattern%: The key of the player's selected vein mining pattern
  • %veinminer_activation_strategy%: The name of the player's selected method of activation ("Sneak", "Client", "Always", etc.)
Think we're missing a placeholder? Please make a feature request either in the Discussion Thread, on Discord, or on GitHub as an issue.


VeinMiner API:


Javadocs, Source Code (GitHub), Protocol Documentation

Dependency information is as follows:
Code (XML):
<repositories>
    <repository>
        <id>choco-repository </id>
        <url>http://repo.choco.wtf/releases </url> <!-- You can also use snapshots, but releases are made in the releases repo -->
    </repository>
</repositories>

<dependencies>
    <dependency>
        <groupId>wtf.choco </groupId>
        <artifactId>veinminer-bukkit </artifactId>
        <version>2.2.5 </version>
        <scope>provided </scope>
    </dependency>
</dependencies>
Code (Groovy):
repositories {
     maven { url "http://repo.choco.wtf/releases" ; allowInsecureProtocol = true } // Gradle requires "allowInsecureProtocol" for http URLs. This repo will be secured with SSL in the future
}

dependencies {
     compileOnly "wtf.choco:veinminer-bukkit:2.2.5"
}
Code (Kotlin):
repositories {
     maven { url = uri ( "http://repo.choco.wtf/releases" ) ; isAllowInsecureProtocol = true } // Gradle requires "allowInsecureProtocol" for http URLs. This repo will be secured with SSL in the future
}

dependencies {
     compileOnly "wtf.choco:veinminer-bukkit:2.2.5"
}

Contribute:

VeinMiner has been happily open sourced for a long time and is ready to be contributed to! If you are a VeinMiner API user or if you are simply interested in the code that goes behind the inner-workings of this plugin, its source code is available on GitHub for you to browse and hack away at. You can find the source code by going to VeinMiner's public repository. If you are familiar with Git, you are free to clone, fork, or make a pull request to VeinMiner. If I approve of any changes you decide to pull request, I may consider merging the changes into the main branch and uploading a version with your code. You will be credited in the very next changelog, as well as a link to your PR.


Support Me:

This resource is brought to you free of charge without any obligation to pay anything! I love to provide free resources such that people are enjoying it on their servers. Unfortunately, not everything in life is free and I do need some monetary support of some kind to host my development servers. If you enjoy this project and what it provides to your server, please consider sponsoring me on GitHub as a little thank you for my hard work. I spent countless hours working on this project and all of it is provided without asking for anything.

Donating is not a requirement, and I do not expect anyone to donate. If you so chose to donate out of your own good will, I greatly appreciate the support, and I hope that you enjoy this resource as much as I do developing it! Thank you!


FAQ:

Can you add a customizable keybind instead of Shift? Tilda? A mouse button?

  • Yes you can! Though not from the server. VeinMiner is a server-sided mod and cannot listen for key presses, therefore in order to support custom keybinds, your players are able to install a client-sided Fabric mod. This mod is entirely optional but allows your players to use custom keybinds. For those without the mod installed, they will need to use the activation strategy specified in your configuration. Unfortunately this is the only way to support this feature.

    You can find the VeinMiner Companion Mod here:
    https://www.curseforge.com/minecraft/mc-mods/veinminer-companion

When will you support modded blocks?
  • Never. Sorry. This is not technically possible unless VeinMiner is built for Sponge, though I have no plans on doing so. If you want to have this plugin vein mine modded blocks, it's likely you're running a modded server. Use portablejim's VeinMiner mod, Ore Excavation, or FTB Ultimine for Forge instead. This plugin will serve no purpose compared to these mods.

Do enchantments (vanilla and custom) work with VeinMiner?

  • Yes! Enchantments like Fortune and Silk Touch are respected when vein mining. Depending on how they're made, custom enchantment plugins should work too.

Can I give VeinMiner only to a specific group of players?
  • By default, VeinMiner grants permission to all players so that everyone can use it without needing a permission plugin. You can, however, negate the veinminer.veinmine.* permission node from the default group and re-add it to another group. How you do this will vary from permission plugin to permission plugin, but for LuckPerms you would just have to use /lp group default permission set veinminer.veinmine.* false, then re-add it to whichever group you want to allow to use it. See above for information on all available permission nodes.

Why can't I vein mine <insert block here>?
  • VeinMiner provides you with a default block list for blocks that makes the most sense. If a block is not vein mineable, it's probably not on the block list. You can add it with the command /veinminer blocklist <tool> add <block>

Does VeinMiner support McMMO?
  • Yes, McMMO is supported and players will gain experience for each broken block. If you find that to be too overpowered, there's a configuration option to nerf McMMO's level gain and only grant XP to players for the first block they broke
For any further questions, please don't hesitate to join the Discord server.

discord-logo-blue.png ( link)​


I am in no way related to or in collaboration with the Minecraft Forge VeinMiner project or its creator portablejim. This is a recreation of a popular mod to be enjoyed on CraftBukkit, Spigot, and Paper servers.
Resource Information
Author:
----------
Total Downloads: 909,016
First Release: Sep 9, 2015
Last Update: Aug 28, 2024
Category: ---------------
All-Time Rating:
80 ratings
Find more info at discord.choco.wtf...
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings