2.0.0 - The Rewrite
New default config: https://github.com/2008Choco/VeinMiner/blob/master/veinminer-bukkit/src/main/resources/config.yml
VeinMiner Companion mod (Fabric): https://www.curseforge.com/minecraft/mc-mods/veinminer-companion
IMPORTANT
VeinMiner 2.0.0 provides support for SQLite and MySQL databases in addition to JSON. VeinMiner has used JSON since persistent player data was introduced, but with the 2.0.0 update, SQLite has become the new server default. While you may change this to use JSON, it is strongly advised to use SQLite instead as it is a more performant and condensed means of storing player data.
When installing VeinMiner 2.0.0, if you do not want to continue using JSON (again, SQLite is now the default), you will have to start your server with 2.0.0 installed and run the /veinminer import
command. After explaining what it will do, it will ask you to run this command again to confirm. This will not delete your old JSON files, only import them into the SQLite database (or MySQL if you changed it to use that instead). You will only ever need to do this process one time. After initial installation, you should never have to run the import command again.
Importantly, the import command only imports from JSON -> SQLite or MySQL. It DOES NOT support SQLite/MySQL -> JSON.
TL;DR:
- When installing 2.0.0, start your server and run
/veinminer import
- Read what the command tells you, then run
/veinminer import
a second time to confirm - (Optionally) delete your
playerdata
directory as it is no longer necessary. Though it's advised to keep as a backup just in case :)
Changes (Bukkit)
- Updated the minimum Java version to Java 16
- If you are running your own server on your own machine, make sure you update your version of Java
- If you are using a host running Minecraft 1.17 or above, you should already be on Java 16
- Dropped support for Minecraft 1.13.x - 1.16.x. VeinMiner now supports only Minecraft 1.17.x and above
- Added
/blocklist
command for convenience. Arguments identical to/veinminer blocklist
- Added
/toollist
command for convenience. Arguments identical to/veinminer toollist
- Added support for different types of persistent storage,
MySQL
andSQLite
, for those that don't want a folder filled with JSON or want to share player settings between servers- New configuration options to assist in configuring SQL servers
- SQLite is the new default means of data storage, which should ultimately be faster than JSON
- A new
/veinminer import
command was added which will automatically import data from the JSON files to SQLite or MySQL if you choose to no longer use JSON. If you decide to change the defaultStorage
setting toJSON
, you do not need to run this command. See above for details on import/migration.
- Added new vein mining patterns:
veinminer:tunnel
: Mine a 3x3 tunnel in the direction of the block brokenveinminer:staircase_up
: Mine an upwards 1x3 staircase in the direction of the block brokenveinminer:staircase_down
: Mine a downwards 1x3 staircase in the direction of the block broken- Players may now once again select their own vein mining patterns. This is not a global option anymore. It is per-player.
- Added permission nodes for each pattern. All default to true, but if revoked, players may not select the pattern with
/veinminer pattern
veinminer.pattern.default
veinminer.pattern.tunnel
veinminer.pattern.staircase_up
veinminer.pattern.staircase_down
- Categories may now define 2 new optional settings
NBT
: A string that is required on an item in the category for the category to be used. The NBT key will be located atPublicBukkitValues: { "veinminer:veinminer": "TheValueInTheConfig" }
. Defaults to no NBT tagPriority
: An integer determining what priority a category has over another. Higher numbers will be selected over categories with lower priorities. Useful if more than one category defines an item of the same type. Defaults to 0
- Replaced all configuration options under
Client
with new options to support new client functionalityClient.AllowActivationKeybind
: Determines whether or not clients are allowed to activate vein miner with a key bindClient.AllowPatternSwitchingKeybind
: Determines whether or not clients are allowed to switch patterns with a key bindClient.AllowWireframeRendering
: Determines whether or not clients will draw a wireframe around blocks to be vein mined
- Added permission nodes (that default to nobody) for each of the above settings. If a player has any of these permission nodes, they will override the config option
veinminer.client.activation
: Is allowed to use the keybindveinminer.client.patterns
: Is allowed to switch patterns with a keybindveinminer.client.wireframe
: Is allowed to render a wireframe around blocks
- Added support for LightAntiCheat
- Added support for Grim anti cheat
- Added new PlaceholderAPI placeholders:
%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.)
- Added new default blocks in the following categories:
Axe
minecraft:mangrove_log
minecraft:mangrove_roots
minecraft:mangrove_wood
Shovel
minecraft:clay
minecraft:mud
minecraft:muddy_mangrove_roots
Hoe
minecraft:sculk
minecraft:sculk_vein
Sheers
minecraft:mangrove_leaves
- Added new default alias for mangrove logs and wood
- Improved and standardized command feedback
- Improved console feedback on startup for categories and potential errors in configuration files
- Optimized the performance of vein mining when hunger was enabled
- Optimized the update check on startup
- Shuffled around permission nodes. IMPORTANT. UPDATE YOUR PERMISSIONS
- Renamed
veinminer.reload
->veinminer.command.reload
- Renamed
veinminer.toggle
->veinminer.command.toggle
- Renamed
veinminer.blocklist.*
->veinminer.command.blocklist
- Renamed
veinminer.toollist.*
->veinminer.command.toollist
- Renamed
veinminer.mode
->veinminer.command.mode
- Added
veinminer.command.pattern
- Removed
veinminer.blocklist.*
and all child permissions - Removed
veinminer.toollist.*
and all child permissions - Removed
veinminer.client.reminded
veinminer.free.hunger
andveinminer.free.economy
no longer default to op players. They are disabled by default and must be explicitly set
- Renamed
- Removed the message on join suggesting downloading the client mod (and all related configuration options). This was seen as annoying to most. A download link is now only shown when
/veinminer mode client
is run - Removed
Name
andLore
settings from categories and items in categories. Replaced with the newNBT
setting - Removed
SortBlocklistAlphabetically
setting. Block list sorting is now done alphabetically automatically - Removed
IncludeEdges
setting. No longer relevant in modern vein miner and served no purpose other than to confuse server owners - Removed the default
MaxVeinSize: 64
declaration for all categories as they all overrode the global setting, which could be confusing for new installs - Replaced
VeinMiningPattern
setting withDefaultVeinMiningPattern
which will be used as the default pattern for players that have not explicitly set one with/veinminer pattern
. Defaults toveinminer:default
- Replaced
RepairFriendlyVeinminer
withRepairFriendly
Aliases
entries are now delimited by;
rather than,
, as the latter can be used by block states- Fixed inaccurate support for world protection plugins. Plugins like WorldGuard, GriefPrevention, Residence, etc. should be better supported natively now
- Fixed being able to declare a Hand category in the categories.yml. VeinMiner will now ignore it and log a warning in console
- Fixed players being marked as dirty despite not having their state change at all
- (#77) Fixed
/veinminer toggle
not disabling specific tools if another tool was already disabled
Changes (Bukkit, Developers)
- Completely restructured the project to abstract out concepts shared across server and client
- All players now have permanent Metadata keys that all evaluate to
boolean
,veinminer:vein_mining
: Whether or not a player is currently vein mining (breaking blocks as a result of vein minerveinminer:vein_miner_active
: Whether or not a player has vein miner active and primed for use (e.g. holding sneak, or pressing the client button)
- Added a new
PlayerVeinMiningPatternChangeEvent
called when a player changes vein mining patterns either from the client or by command - Existing API events have been moved from
wtf.choco.veinminer.api.event
towtf.choco.veinminer.api.event.player
PlayerVeinMineEvent#getBlock()
now returns theBlock
that triggered the vein mine. TheVeinMinerBlock
may be retrieved fromgetVeinMinerBlock()
instead- Redesigned
VeinMinerPlayer
to act as the governing entity between client mod and server communication. Anything pertaining to the client mod is now handled more appropriately through instances ofVeinMinerPlayer
. - Replaced all instances of the vein miner protocol with a new standardized, platform-independent network implementation under
VeinMiner.PROTOCOL
. Messages may be sent to aVeinMinerPlayer
instance. VeinMiningPattern
has had some redesigns given new platform-independent class types. Refer to your IDE if you intend on implementing a pattern and update accordingly- Additionally, added a new default method,
VeinMiningPattern#getPermission()
, to determine a required permission node to use the pattern
- Additionally, added a new default method,
BlockList
methods have been renamed and clarified/simplifiedVeinBlock
was renamed toVeinMinerBlock
and had its methods renamed and clarified/simplified- Consequently,
VeinBlockState
->VeinMinerBlockState
,VeinBlockMaterial
->VeinMinerBlockType
,VeinBlockWildcard
->VeinMinerBlockWildcard
- Consequently,
- Removed
AntiCheatHook#getPluginName()
and#getPlugin()
- Removed instances of
AlgorithmConfig
fromEconomyModifier
, replaced with a simple double where appropriate. - Renamed
EconomyModifier#charge()
to#withdraw()
- Refreshed and revisited all Javadoc comments and nullability annotations to be as accurate as possible
As a general note, VeinMiner is now hosted on a personal repository! If you want to make use of VeinMiner's API, you will have to use the following repositories and artifacts:
<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.0.0</version> <!-- If you wish to use a SNAPSHOT version, append -SNAPSHOT to the version -->
<scope>provided</scope>
</dependency>
</dependencies>
repositories {
// See Maven configuration above for snapshot releases
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.0.0"
}
Changes (Fabric)
- The client-sided mod has been renamed from
veinminer4bukkit
toveinminer-companion
and relocated on CurseForge accordingly - Blocks to be vein mined will now be outlined with a wireframe while the activation button is pressed.
(https://i.imgur.com/ggH99RV.gif)
- Added new key binds to change vein mining patterns
]
: Moves to the next pattern[
: Moves to the previous pattern- Press the keys once to see which pattern is currently enabled. Press again while the patterns are visible (in the top left) to switch to a new pattern.
(https://i.imgur.com/FuiSNFT.gif)
The vein miner icon will no longer appear on your crosshair if on a server that does not have vein miner installed, or in single player- NOTE: This will be a feature in a later version of VeinMiner. Due to legacy support, this feature is not yet available and will still display even when VeinMiner is not installed
- Fixed VeinMiner allowing to be loaded on the server but erroring on startup. It will no longer attempt to load on the server at all
Changes (Fabric, Developers)
- The Fabric development environment now uses official Mojang mappings
While there is no great VeinMiner Companion API yet, the .jar can still be depended on in the public Choco repository.
repositories {
// See Maven configuration above for snapshot releases
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-fabric:2.0.0"
}
Changes (General)
- VeinMiner's protocol is entirely documented on the new VeinMiner wiki on GitHub
- VeinMiner now comes packaged with a command line utility to generate documentation for its protocol. This is not expected to be used anywhere outside of development for updating the protocol wiki, but is available should you choose to use it
Closing Notes
VeinMiner went through a lot of changes in this 2.0.0 update that I hope many of you appreciate. I understand that this is a massive upgrade and will inevitably break a lot of configuration files, but this is extremely important in the long-haul. This is the nature of a major version bump such as this. VeinMiner has been mostly forwards-compatible for 7 years under the 1.x version scheme, and now it's time to break that compatibility. If you are at all struggling to update, please come visit me on my support Discord where I will be helping you upgrade if you are having issues.
Additionally, while players with the old VeinMiner4Bukkit mod will be unable to use a keybind on your server should you choose to update to 2.0.0 (they must have VeinMiner Companion), players with the VeinMiner Companion mod will still be able to join your server and use the activation keybind on servers still running VeinMiner 1.17.10. The client mod does have legacy support which will be removed in the future (once 50% of the userbase has migrated to 2.0.0), but until then, your players should still be able to join despite wanting to update their client mods.
Thank you for all the support. VeinMiner has received a cumulative 200,000 downloads on SpigotMC alone and I'm forever grateful. This update alone consisted of 8 months of work and 22,500 lines of code changed. I am a different developer now than I was 7 years ago and this ground-up rewrite represents the improvements I've made in that time.
You do not have to, but if you wish to support me and the effort I put into making these updates, you may donate to me on PayPal. It does not have to be a lot and my updates will always be free, but even a small amount of support is very, very appreciated.