Skip to content

Enchantment Text Styling ​

Information and Description ​

This API makes the customization of an enchantment's text style to be customizable through the use of data. This can be applied to vanilla enchantments and modded enchantments alike!

Versions ​

This API is Fabric ONLY, with support for the following versions:

Developing with the API ​

The only public, usable, API this "library" provides is a data generator to make the creation of a datapack for this mod easier. To look how the data is formatted or learn how to manually create a datapack, see Data Formats.

To start developing with this API, add the following to your build.gradle:

java
repositories {
    maven { url 'https://jitpack.io' }
}

dependencies {
    // see below for #versions of this API
    modImplementation 'com.github.shadowhunt22:enchantment-text-styling:{release_version}' 
}

Usage ​

This guide assumes you already have Fabric's DataGeneratorEntrypoint registred in your fabric.mod.json. To generate your own datapacks with the API,

java
// ModDataGen.java
public class ModDataGen implements DataGeneratorEntrypoint {
	@Override
	public void onInitializeDataGenerator(FabricDataGenerator generator) {
		FabricDataGenerator.Pack pack = generator.createPack();
		
        pack.addProvider(EnchantmentTextStylingData::new);
	}
}

// EnchantmentTextStylingData.java
public class EnchantmentTextStylingData extends EnchantmentTextStylingProvider {
	protected EnchantmentTextStylingData(FabricDataOutput dataOutput, CompletableFuture<RegistryWrapper.WrapperLookup> registriesFuture) {
		super(dataOutput, registriesFuture);
	}

	@Override
	public void generate(RegistryWrapper.WrapperLookup lookup) {
        // when adding an entry, it is important to finish by calling ".add()" 
        // otherwise, the entry will not be added to be generated.

		this.addEntry(Enchantments.PROTECTION)
            .color(Formatting.RED.getColorValue())
            .bold()
            .italic()
            .specificCondition(1)
            .add();

		this.addEntry(Enchantments.BLAST_PROTECTION)
            .color(Formatting.GREEN.getColorValue())
            .underlined()
            .min(2)
            .max(3)
            .add();

		this.addEntry(Enchantments.PROJECTILE_PROTECTION)
            .color(Formatting.RED.getColorValue())
            .min(1)
            .max(2)
            .add();

        this.addEntry(Enchantments.VANISHING_CURSE)
            .color(Formatting.RED.getColorValue())
            .strikethrough()
            .obfuscated()
            .add();
    }
}

Method Chaining ​

Here are details about each method you can use in the method chain:

addEntry(RegistryKey<Enchantment> enchantment) ​

The enchantment to add styling to. Starts the method chain.

bold() ​

Make the text bold.

italic() ​

Make the text italic.

underlined() ​

Make the text underlined.

strikethrough() ​

Make the text strikethrough.

obfuscated() ​

Make the text obfuscated.

color(int) ​

The color of the enchantment text.

value an integer from either calling Formatting#getColorValue() or supplying an RGB value converted to an integer. Use a tool like shodor.org to convert an RGB to an integer.

specificCondition(int value) ​

value represents when the custom enchantment styling will be applied. For example, if you supply a 2 to this method and the level of the enchantment is 2, then the EnchantmentStyling#color will be applied to the text of the enchantment.

min(int value) ​

value represents when the custom enchantment styling will be applied. For example, if you supply a 1 to this method, it will evaluate as follows:

java
if (level >= 1) {
    // apply text styling
}

If, for example, a value of 2 is also supplied to EnchantmentStyling.Builder#max(int), then it will evaluate as follows:

java
if (level >= 1 && level <= 2) {
    // apply text styling
}

max(int value) ​

value represents when the custom enchantment styling will be applied. For example, if you supply a 2 to this method, it will evaluate as follows:

java
if (level <= 2) {
    // apply text styling
}

If, for example, a value of 1 is also supplied to EnchantmentStyling.Builder#min(int), then it will evaluate as follows:

java
if (level >= 1 && level <= 2) {
    // apply text styling
}

add() ​

Required in order to generate the JSON file.