Giter Club home page Giter Club logo

trove's Introduction

trove

license standard-readme compliant javadocs

Trove is a versatile loot table library. Although a lot of the base concepts here are similar to Minecraft's loot table system, Trove is much more flexible, permitting the usage of multiple different loot types (e.g. items and experience). Plus, it has a convenient API, emphasizes immutable data structures, and supports full serialization and deserialization of all formats supported by Configurate, including JSON and YAML.

The two modules are core and minestom. The core module contains the basic functioning pieces of the library, while minestom contains a nearly full implementation for Minecraft's loot tables for Minestom.


Table of Contents


Install

To install, simply add the library via JitPack:

Details for how to add this library with other build tools (such as Maven) can be found on the page linked above.

repositories {
    ...
    maven(url = "https://jitpack.io")
}

dependencies {
    ...
    // Minestom and Configurate versions
    // (you can replace Minestom with Minestom-ce if you want)
    implementation("com.github.minestom.minestom:Minestom:VERSION")
    implementation("org.spongepowered:configurate-gson:VERSION")
    
    implementation("com.github.GoldenStack.trove:MODULE:VERSION")
}

Trove relies on Minestom and Configurate, so make sure to add them.

Just replace MODULE with the desired module of Trove, and replace VERSION with the desired version or commit hash.

Trove currently uses


Usage

Setup

This setup currently only explains how to set up the Minestom module.

You can use the TroveMinestom class for a very easy setup. Just provide a folder path, and it will recursively parse every JSON file inside it.

Path lootTableFolder = ...; // Replace with the path to the folder of loot tables

var tableRegistry = TroveMinestom.readTables(lootTableFolder,
        () -> GsonConfigurationLoader.builder().defaultOptions(options -> options.serializers(builder -> builder.registerAll(TroveMinestom.DEFAULT_COLLECTION))));

Each table will be stored via a NamespaceID in the tables object. For example, if the parsed loot table has the path "blocks/barrel.json" relative to the loot table folder, its ID will be minecraft:blocks/barrel.

Generation

Actual loot generation is fairly simple - you just need to call LootTable#generate(LootContext, Consumer<Object>). The consumer can be a LootProcessor if that makes it easier.

Importantly, if you want some of the vanilla features that aren't implemented here, you should implement the VanillaInterface interface and pass it in as a key to your context. A partial implementation of it that doesn't throw any exceptions is FallbackVanillaInterface. You may also have to implement some type serializers.

Here's an example that uses the tableRegistry variable from the last code snippet:

LootTable table = tableRegistry.getTable(NamespaceID.from("minecraft:blocks/stone"));

// You can use the LootContext class to provide important information during generation.
LootContext context = LootContext.builder()
        .random(...) // Random instance here
        .with(..., ...) // Loot context keys and values added with Builder#with
        .build();

// Generate the loot
table.generate(context, loot -> ...); // Do something with the loot

You can also use a LootProcessor to make this processing easier. For example:

var processor = LootProcessor.processClass(ItemStack.class, item -> {
    // Perform some arbitrary action with the item
});

You can also handle multiple classes at once, or even use a custom predicate:

var processor = LootProcessor.builder()
        .processClass(ItemStack.class, item -> {
            // Perform some calculation
        }).processClass(String.class, string -> {
            // Perform another calculation
        }).process(object -> true, object -> {
            // Perform some calculation with the object
        }).build();

Then, you can just provide the processor to the generator:

table.generate(context, processor);

Contributing

Feel free to open a PR or an issue.

Before starting large PRs, make sure to check that it's actually needed; try asking a maintainer.

By contributing to the Trove project you agree that the entirety of your contribution is licensed identically to Trove, which is currently under the MIT license.


License

This project is licensed under the MIT license.

trove's People

Contributors

goldenstack avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

Forkers

saturn745

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.