Classes - Sponge-RPG-dev/NT-RPG GitHub Wiki
Classes
Classes are the core aspect of the plugin. The class system allows you to rebalance gameplay. With classes you are able to limit which items may players use, which skills may learn or how large shall be their health pool.
Before you start
- Classes must have unique name
- As of 2.0.0 players should not be able to learn same skill from different skilltrees.
- If you wish to rename class later on you have to also rename the value in database (rpg_character_class.name), or appropriate place in flat file storage, in case you do not use database
- Classes are loaded from the path
config/nt-rpg/classes/**/*.
- Class files must have .conf extension
- If
PluginConfig
is mentioned anywhere below it means the content of a fileconfig/Settings.conf
Nodes
Name
- Name of a class
- Required
Name: Warrior
ClassType
- Type of a class
- The value must be one of PluginConfig.CLASS_TYPES. \
- If the value PluginConfig.RESPECT_CLASS_SELECTION_ORDER is set to true players will have to choose a first class having ClassType value of the first element in PluginConfig.CLASS_TYPES, then the second, then the third, then the fourth...
- Required
ClassType: Primary
ItemType
- Changes icon in menu inventory if not specified STONE block will be used
- Required
ItemType: "minecraft:wool"
Description
- Sets description for the menu icon within inventory menu.
- String array
- each new line must begin with
n
- Optional
Description: [
"description line 1"
"ndescription line 2"
]
PreferredTextColor
- Adjusts text color, of a class name in various messages and inventory GUIs
- Required
PreferredTextColor: WHITE
WelcomeMessage
- A message which is displayed to a player upon selecting the class
- Optional
WelcomeMessage: "&cSome&aColored&btext"
Properties
- Key: Value list, this is where you define max health, mana, resistances, walk speed etc
- The maximal value of a property may be defined in the file
max_server_property_values.properties
. Its strongly suggested to put limit to at least walk_speed property, high values may cause lots of problems to your server and gameplay (usually values above 2-3 is where players may no longer efficiently controll the character). - The complete list of all properties can be found in the file
config/ntrpg/properties_dump.info
- Optional
Properties {
max_mana: 20
max_health: 200
}
PropertiesLevelBonus
- similar as above, but those values will scale as the player level increases. The final value for any specific property isclass1[property1] + ... +classN[property1] + (class1[property_per_level1] + ... +classN[property_per_level1]) * primary class level
- Optional
PropertiesLevelBonus {
max_mana: 5
}
AllowedArmor
- List of Item Types which may player wear as an armor.
- The final set of all items is simply merged from all classes
- The armor item has to be defined within
ItemGroups.conf
- Optional
AllowedArmor: [
"minecraft:diamond_helmet"
"minecraft:diamond_helmet;customanme"
]
Weapons
- List of weapons which a player may use.
- Optional
- What is the third argument in a line "WOODEN_SWORD;damage=3;model=Iron Dagger" good for? If you are on sponge forge this has no meaning for you, since you can simply create custom weapons with your mod. However on vanilla this is one of ways to increment weapon versatility in the game. With Optifine on the client side and custom resource pack items may be rendered with custom item model & texture. This is superior to vanilla-only sollution where you need to remove item's durability to achieve same result. More info may be found here https://github.com/sp614x/optifine/blob/master/OptiFineDoc/doc/cit_single.properties
- What if player has two different classes, where each class has defined weapon as
"WOODEN_SWORD;1"
. Depending on a settingsWEAPON_MERGE_STRTATEGY
inconfig/Settings.conf
the final damage per item may be either sum (value1
) or max (value2
) - If you are on Spigot, the third argument must be an integer, eventually its translated to customModelData nbt.
Weapons: [
"minecraft:WOODEN_SWORD;damage=1" #The class will deal 1 damage with vanilla wooden_sword
"minecraft:WOODEN_SWORD;damage=3;model=Iron Dagger" #The class will deal 3 damage with vanilla wooden_sword named "Iron Dagger"
"WeaponClass:Swords" #Inherits all items and their damages from weapon class "Swords" as defined in config/nt-rpg/ItemGroups.conf
]
Offhand
- Config structure is same as
Weapons
- List of weapons/shields player is able to put into offhand slot
- Optional
- Config structure is same as
Offhand: [
"minecraft:shield"
]
ExitCommands
&EnterCommands
: List of commands which will be executed after player chooses a group, or exit from group.- The player name can be parametrized as
{{player}}
and uuid as{{uuid}}
- If you have a permission plugin and you want to have each class specific permission the configuration might look like:
- The player name can be parametrized as
EnterCommands: [
"perms setgroup {{player}} myclass"
]
Effects
:- List of
GlobalEffect
s the class will have by default. - Optional
- Some effects may require additional parameters (eg Potions), in that case Settings node is required
- List of
Effects: [
{
Id: "DefaultManaRegen"
}
{
Id: Potion
Settings {
"minecraft:instant_health": 60
"minecraft:night_vision": 360
"minecraft:speed": 720
"minecraft:strength": 120
}
}
{
Id: "SomeOtherEffect"
Settings {
"someNode": 10000
}
}
]
Permissions
- Players which enter, level up, or exit a class may gain, or lose permission nodes
- Permissions are always transient, these nodes will never be stored within eg.: luckperms database
- Optional
Permissions: [
{
Level: 1
Permissions: [
"some.perm.test"
"some.other.perm.test"
]
}
]
Experiences
- Additional experiences amount to gain per kill
- Optional
Experiences: {
DIM-1 {
"minecraft:creeper": 10
}
DIM-2 {
"minecraft:sheep": -10
}
}
SkillTreeId
- Name of the skilltree, which is the class going to have access to
- Multiple classes may share one skill tree
- Optional
SkillTreeId: WarriorSkillTree
SkillTreeType
- Has two modes:
MANUAL
andAUTO
- Required, if SkillTreeId is specified
- MANUAL - a player gains skillpoints for every class level and may freely spend them to learn or upgrade skills
- AUTO - Player learns skill automatically as once the class level equals to
minPlayerLevel
node. Its not possible to upgrade skills, skill dependencies have no effect.
- Has two modes:
SkillTreeType: MANUAL
SkillPointsPerLevel
- Amount of skillpoints the class will gain upon level up
- Optional
SkillPointsPerLevel: 1
ExperienceSources
- Experience sources are some ingame actions from which may the class gain experiences
- NT-RPG has predefined sources for
MINING, LOGGING, FISHING, HARVESTING
each have a corresponding*_experiences.properties
that defines the experience of each block/item harvested. - Custom sources can be defined as long as there is no spaces in the name i.e
QUESTING
works but notQUEST XP
- NT-RPG has predefined sources for
- Optional
- Experience sources are some ingame actions from which may the class gain experiences
ExperienceSources: [
PVE
PVP
MINING
LOGGING
QUESTING
FISHING
HARVESTING
]
Dependencies
- You may define class dependencies. For example by selecting a class A player wont be no longer able to select class B etc.
- 3 Scopes:
- Hard - all of them player has to have
- Soft - at least one of them player has to have
- Conflicts - none of them player has to have
- !! There is no validation after the selection. If you change this later on you will have to deal with players, who already selected eg conflicting classes on your own.
- Optional
Dependencies {
Hard: [
class2
]
Soft: [
class3
class4
]
Conflicts: [
class5
]
}
Leveling
- Defines Level curve for the class
- Optional
- By default there are 4 types:
- Custom - Gives you complete control over level margins, which allows you to create any kind of non arithmetic sequence
- Exponential - Defined as
sequence + factor * level[N-1];
- Linear - Defined as
firstLevel + sequence * N;
- Polinomial - Defined as
mult * N ^ factor
Leveling: {
__class__: "cz.neumimto.rpg.api.entity.players.leveling.Custom"
Levels: [
500
600
700
...
]
}
Leveling: {
__class__: "cz.neumimto.rpg.api.entity.players.leveling.Exponential"
Sequence: 20
Factor: 1.2
MaxLevel: 10
}
Leveling: {
__class__: "cz.neumimto.rpg.api.entity.players.leveling.Linear"
Sequence: 20
FirstLevelExp: 30
MaxLevel: 10
}
Leveling: {
__class__: "cz.neumimto.rpg.api.entity.players.leveling.Polinomial"
Mult: 1.2
Factor: 2
MaxLevel: 10
}