Skip to content

2.0.0 - The Rewrite

Compare
Choose a tag to compare
@2008Choco 2008Choco released this 08 Aug 20:20
· 115 commits to master since this release
33b1bb9

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 and SQLite, 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 default Storage setting to JSON, 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 broken
    • veinminer:staircase_up: Mine an upwards 1x3 staircase in the direction of the block broken
    • veinminer: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 at PublicBukkitValues: { "veinminer:veinminer": "TheValueInTheConfig" }. Defaults to no NBT tag
    • Priority: 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 functionality
    • Client.AllowActivationKeybind: Determines whether or not clients are allowed to activate vein miner with a key bind
    • Client.AllowPatternSwitchingKeybind: Determines whether or not clients are allowed to switch patterns with a key bind
    • Client.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 keybind
    • veinminer.client.patterns: Is allowed to switch patterns with a keybind
    • veinminer.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 and veinminer.free.economy no longer default to op players. They are disabled by default and must be explicitly set
  • 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 and Lore settings from categories and items in categories. Replaced with the new NBT 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 with DefaultVeinMiningPattern which will be used as the default pattern for players that have not explicitly set one with /veinminer pattern. Defaults to veinminer:default
  • Replaced RepairFriendlyVeinminer with RepairFriendly
  • 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 miner
    • veinminer: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 to wtf.choco.veinminer.api.event.player
  • PlayerVeinMineEvent#getBlock() now returns the Block that triggered the vein mine. The VeinMinerBlock may be retrieved from getVeinMinerBlock() 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 of VeinMinerPlayer.
  • Replaced all instances of the vein miner protocol with a new standardized, platform-independent network implementation under VeinMiner.PROTOCOL. Messages may be sent to a VeinMinerPlayer 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
  • BlockList methods have been renamed and clarified/simplified
  • VeinBlock was renamed to VeinMinerBlock and had its methods renamed and clarified/simplified
    • Consequently, VeinBlockState -> VeinMinerBlockState, VeinBlockMaterial -> VeinMinerBlockType, VeinBlockWildcard -> VeinMinerBlockWildcard
  • Removed AntiCheatHook#getPluginName() and #getPlugin()
  • Removed instances of AlgorithmConfig from EconomyModifier, 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 to veinminer-companion and relocated on CurseForge accordingly
  • Blocks to be vein mined will now be outlined with a wireframe while the activation button is pressed.

Wireframe demonstration
(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.

Changing patterns
(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.