-
Notifications
You must be signed in to change notification settings - Fork 29
Using an Attribute
CleverNucleus edited this page Jun 22, 2021
·
2 revisions
Following on from the previous page, Adding an Attribute, we will look at how we would use Max Mana to do some things in-game. Before proceeding, there are some important things to note:
- Our attribute's value is synced to the client every time it changes.
- Our static access point to our attribute
MAX_MANA
is lazily loaded and is null on the client until the player has joined a world, and is null on the server until the datapack containing the jsons is loaded (obviously).
void genericMethod(PlayerEntity player) {
// Cardinal Components data manager
AttributeData data = ExAPI.DATA.get(player);
// Max Mana's value
double value = data.get(ExampleMod.MAX_MANA.get());
// We can use this value however we want
// Note that this value remains consistent across logical sides.
}
void genericMethod(PlayerEntity player) {
// Cardinal Components data manager
AttributeData data = ExAPI.DATA.get(player);
// Adding 4.0 to Max Mana
data.add(ExampleMod.MAX_MANA.get(), 4.0D);
// Setting Max Mana to 4.0
data.set(ExampleMod.MAX_MANA.get(), 4.0D);
// Note that these both trigger Attribute Functions
}
// UUID's should be statically initialised
static UUID MODIFIER = UUID.fromString("d540c322-cd52-46db-8251-65928971151b");
void genericMethod(PlayerEntity player) {
// Cardinal Components data manager
AttributeData data = ExAPI.DATA.get(player);
// Creating the EntityAttributeModifier object
EntityAttributeModifier modifier = new EntityAttributeModifier(MODIFIER, "examplemod.modifier.max_mana", 4.0D, Operation.ADDITION);
// Applying the modifier to Max Mana
data.applyAttributeModifier(ExampleMod.MAX_MANA.get(), modifier);
// And if we want to remove it
data.removeAttributeModifier(ExampleMod.MAX_MANA.get(), modifier);
// Note that once the modifier is applied, the only way to remove it is through AttributeData#removeAttributeModifier
}