FastNbt is ~190% faster than NBT API.
Check the benchmark here
FastNbt is easier to use compared to NBT API and requires less boilerplate code.
NItem nItem = new nItem(new ItemStack(Material.PLAYER_HEAD));
nItem.setSkull("dummy", "eyJ0ZXh0dXJlcyI6eyJTS0lOIjp7InVybCI6Imh0dHA6Ly90ZXh0dXJlcy5taW5lY3JhZnQubmV0L3RleHR1cmUvYjc4ZWYyZTRjZjJjNDFhMmQxNGJmZGU5Y2FmZjEwMjE5ZjViMWJmNWIzNWE0OWViNTFjNjQ2Nzg4MmNiNWYwIn19fQ==");
nItem.save(); // If finished editing
NOTE: FastNBT supports only Compound strings. If you want to use legacy notation you have to call the Spigot API as usual.
NItem nItem = new nItem(new ItemStack(Material.STONE));
nItem.setDisplayNameCompound("{\"text\":\"Example Compound Name\",\"color\":\"blue\"}");
nItem.save(); // If finished editing
nItem.setAttributeModifier(
"minecraft:generic.movement_speed",
1,
6,
"bro",
"mainhand",
1337,
1337
);
nItem.save(); // If finished editing
NList attributes = nItem.getOrAddList("AttributeModifiers", NBTType.Compound);
NCompound attribute = new NCompound();
attribute.setString("AttributeName", attributeName);
attribute.setInt("Operation", operation);
attribute.setInt("UUIDLeast", uuidLeast);
attribute.setInt("UUIDMost", uuidMost);
attribute.setDouble("Amount", amount);
attribute.setString("Name", name);
attribute.setString("Slot", slot);
attributes.addCompound(attribute);
Currently, supports only items.
This is the easiest way.
name: Your Plugin
author: You
# ....
libraries:
- beer.devs:FastNbt-jar:VERSION
<dependency>
<groupId>beer.devs</groupId>
<artifactId>FastNbt-jar</artifactId>
<version>VERSION</version>
<scope>provided</scope>
</dependency>
dependencies {
compileOnly("beer.devs:FastNbt-jar:VERSION")
}
You can shade the library in your plugin if you want to use it without connecting to maven central.
<dependency>
<groupId>beer.devs</groupId>
<artifactId>FastNbt-jar</artifactId>
<version>VERSION</version>
<scope>provided</scope>
</dependency>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.5.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<relocations>
<relocation>
<pattern>beer.devs.fastnbt.</pattern>
<shadedPattern>YOUR_PACKAGE_HERE.libs.beer.devs.fastnbt.</shadedPattern>
</relocation>
</relocations>
</configuration>
</execution>
</executions>
</plugin>
dependencies {
implementation("beer.devs:FastNbt-jar:VERSION")
}
tasks {
shadowJar {
relocate("beer.devs.fastnbt", "YOUR_PACKAGE_HERE.libs.beer.devs.fastnbt")
}
}
- Create a new module for the new NMS version and add the correct
paper-nms
dependency. - Add the new NMS version to the
Version
enum. - Add the new module in the modules list of
FastNbt
module and as dependency in theFastNbt-jar
module. - Also create the relative
_mojangmap
and_spigotmap
modules.
Should be all.
Paper user Mojang mapped JAR. At the same time Paper itself remaps the plugins JARs at runtime. This causes issues because it does not remap code that is loaded dynamically. This is the only solution I found to avoid this issue, in the future I might come up with something else.
mvn deploy
mvn install
- Clone it
- Change paths in
pom.xml
->maven-antrun-plugin
based on your directories, or comment the plugin if you don't need it - Make your changes
- Run
mvn install
in order to access the plugin as dependency in your projects - Run Maven
clean package
and get the generated jar fromoutput
folder
In order to update Javadocs you have to build locally, as old NMS jars are not available and can't be easily included on Github.
- Run the command
mvn clean install javadoc:javadoc -pl FastNbt-core -am
- Get the generated javadocs from
.cache/targets/FastNbt-core/target/reports/apidocs/
- Push the contents into the
javadoc
branch