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 file config/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 is class1[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 settings WEAPON_MERGE_STRTATEGY in config/Settings.conf the final damage per item may be either sum (value 1) or max (value 2)
    • 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
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:
EnterCommands: [
    "perms setgroup {{player}} myclass"
]
  • Effects:
    • List of GlobalEffects the class will have by default.
    • Optional
    • Some effects may require additional parameters (eg Potions), in that case Settings node is required
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 and AUTO
    • 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.
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 not QUEST XP
    • Optional
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
}