Dropt

Mods
611,564 Downloads Last Updated: Sep 4, 2019 Game Version: Forge

 

CHANGELOG

ZENSCRIPT SYNTAX

JSON SYNTAX

DROPT API

DISCORD

PERFORMANCE

LICENSE

Dropt

Dropt is a block drop replacement mod that allows defining complex drop conditions and replacement rules.

 

Dropt rules can be defined using ZenScript, JSON, or the DroptAPI.

 

Depends on the library mod Athenaeum.

Features

Performance:

  • uses rule caching per block state to significantly improve performance

Matches based on:

  • block (meta, meta wildcard, multiple meta values) (whitelist/blacklist)
  • items dropped (meta, meta wildcard, multiple meta values, oredict) (whitelist/blacklist)
  • harvester type (player, non-player, any)
  • harvester held item (meta, meta wildcard) (whitelist/blacklist)
  • harvester game stages (requires gamestages mod)
  • harvester player name
  • biome (whitelist/blacklist)
  • dimension (whitelist/blacklist)
  • vertical range

Replacement strategies:

  • add to existing drops
  • replace all drops
  • replace all drops if drop selected
  • replace all matched dropped items (replace items defined in match)
  • replace all matched dropped items if drop selected (replace items defined in match)

Drop strategies:

  • repeat (can select the same drop more than once)
  • unique (can select a drop only once)

Drop selection count based on:

  • fixed value
  • random value in defined range
  • fortune modified

Drop selection based on:

  • fortune modified weight value
  • minimum fortune level
  • silk touch requirement (required, excluded, any)

Drop quantity based on:

  • fixed value
  • random value in defined range
  • fortune modified

Drops:

  • can define drop list per drop
  • can define drops with meta wildcard
  • can define drops as oredict entry
  • can define xp to drop (fortune modified range)
  • can define drops with NBT data

Performance

Dropt parses all strings when the rules are loaded to reduce unnecessary string parsing and string concatenation during matching. Some string equivalency testing is used during matching. It uses a simple linear search to cache rules in lists and the profiling output below is the result of a worst-case scenario in which the rule to match is at the end of a 100k+ rule list.

[INFO] Injected 103573 rules in 118 ms
[INFO] Parsed 103575 rules in 532 ms
[INFO] Cached 1 rules from 103575 rules in 56 ms, blockState: minecraft:stone[variant=stone]
[INFO] Searched 1 rules in 1 ms
[INFO] Modified drops in 0 ms
[INFO] Searched 1 rules in 1 ms
[INFO] Modified drops in 0 ms

To reproduce the profiling on your machine, see the config options.

Commands

/dropt reload - reload configuration during runtime

/dropt hand - copy the held item's string for quick pasting into the .json file; also assists with lengthy NBT tags

/dropt verbose - log the resource location and meta value for all broken blocks to the console

Configuration

Dropt uses .json configuration files placed in the [instance]/config/dropt folder. Filenames are not important so long as they have the .json extension and you can have as many files as you like.

Logging

Any errors in the .json syntax are reported via the Forge log. When reloading in-game, errors will be reported to the chat console.

All errors are also logged to the log file: [instance]/dropt.log.

Additional debug output can be enabled per-rule and will be dumped to the log file. See the docs for more information.