1package com.runehive.game.world.entity.mob.npc.definition;
3import com.google.gson.JsonObject;
4import com.runehive.Config;
5import com.runehive.fs.cache.decoder.CacheNpcDefinition;
6import com.runehive.game.world.entity.combat.CombatType;
7import com.runehive.game.world.entity.combat.projectile.CombatProjectile;
8import com.runehive.game.world.entity.mob.player.Player;
9import com.runehive.util.parser.GsonParser;
15import static com.runehive.game.world.entity.combat.CombatConstants.*;
70 this.attackable =
false;
71 this.aggressive =
false;
72 this.retaliate =
false;
73 this.poisonous =
false;
74 this.poisonImmunity =
false;
75 this.venomImmunity =
false;
76 this.skills = EMPTY_SKILLS;
77 this.bonuses = EMPTY_BONUSES;
79 this.attackRadius = 1;
80 this.respawnTime = 30;
83 public static void main(String[] args) {
89 return new GsonParser(
"def/npc/npc_definitions",
false) {
92 protected void parse(JsonObject
data) {
93 int id =
data.get(
"id").getAsInt();
94 boolean convertId =
true;
95 if (
data.has(
"convert-id")) {
96 convertId =
data.get(
"convert-id").getAsBoolean();
106 final String cacheDefName = cacheDef.
name;
108 definition.size = cacheDef.
size;
116 definition.deathTimer = 3;
117 if (
data.has(
"death-timer")) {
118 definition.deathTimer =
data.get(
"death-timer").getAsInt();
121 if (
data.has(
"attack-animation")) {
122 definition.attackAnim =
data.get(
"attack-animation").getAsInt();
125 if (
data.has(
"block-animation")) {
126 definition.blockAnim =
data.get(
"block-animation").getAsInt();
129 if (
data.has(
"death-animation")) {
130 definition.deathAnim =
data.get(
"death-animation").getAsInt();
133 if (
data.has(
"attackable")) {
134 definition.attackable =
data.get(
"attackable").getAsBoolean();
137 if (
data.has(
"aggressive")) {
138 definition.aggressive =
data.get(
"aggressive").getAsBoolean();
141 definition.retaliate =
definition.isAttackable();
142 if (
data.has(
"retaliate")) {
143 definition.retaliate =
data.get(
"retaliate").getAsBoolean();
146 if (
data.has(
"poisonous")) {
147 definition.poisonous =
data.get(
"poisonous").getAsBoolean();
150 if (
data.has(
"flying")) {
151 definition.flying =
data.get(
"flying").getAsBoolean();
154 if (
data.has(
"poison-immunity")) {
155 definition.poisonImmunity =
data.get(
"poison-immunity").getAsBoolean();
158 if (
data.has(
"venom-immunity")) {
159 definition.venomImmunity =
data.get(
"venom-immunity").getAsBoolean();
162 if (
data.has(
"attack-cooldown")) {
163 definition.attackDelay =
data.get(
"attack-cooldown").getAsInt();
166 if (
data.has(
"attack-radius")) {
167 definition.attackRadius =
data.get(
"attack-radius").getAsInt();
170 if (
data.has(
"combat-type") &&
data.has(
"projectile-key")) {
172 String key =
data.get(
"projectile-key").getAsString();
176 if (
data.has(
"respawn")) {
177 definition.respawnTime =
data.get(
"respawn").getAsInt();
180 for (
int index = 0; index < SKILL_FIELD_NAMES.length; index++) {
181 String skillName = SKILL_FIELD_NAMES[index];
182 if (
data.has(skillName)) {
184 definition.skills =
new int[EMPTY_SKILLS.length];
190 for (
int index = 0; index < BONUS_CONFIG_FIELD_NAMES.length; index++) {
191 String bonusName = BONUS_CONFIG_FIELD_NAMES[index];
192 if (
data.has(bonusName)) {
194 definition.bonuses =
new int[EMPTY_BONUSES.length];
204 protected void onEnd() {
235 List<Integer> levels =
new ArrayList<>();
243 if (levels.isEmpty()) {
247 Collections.sort(levels);
249 return levels.get(0) +
"-" + levels.get(levels.size() - 1);
505 return Objects.hash(
id,
name,
size);
The class that contains setting-related constants for the server.
static final int NPC_DEFINITION_LIMIT
The limit of the npc identification.
int quarterClockwiseTurnAnimation
static CacheNpcDefinition lookup(int npcId)
int quarterAnticlockwiseTurnAnimation
static CombatProjectile getDefinition(String name)
CombatAttackData(CombatType type, String key)
CombatProjectile getDefinition()
void setRespawnTime(int respawnTime)
void setPlayer(Player player)
boolean isPoisonImmunity()
void setRetaliate(boolean retaliate)
static void main(String[] args)
boolean hasPoisonImmunity()
void setDeathAnim(int deathAnim)
void setAttackAnim(int attackAnim)
void setTurn180(int turn180)
boolean isVenomImmunity()
void setAttackRadius(int attackRadius)
void setBlockAnim(int blockAnim)
void setAggressive(boolean aggressive)
void setAttackDelay(int attackDelay)
void setPoisonImmunity(boolean poisonImmunity)
Optional< CombatAttackData > getCombatAttackData()
void setCombatAttackData(CombatAttackData combatAttackData)
void setPoisonous(boolean poisonous)
void setTurn90CW(int turn90CW)
void setBonuses(int[] bonuses)
void setFlying(boolean flying)
void setTurn90CCW(int turn90CCW)
void setDeathTimer(int deathTimer)
boolean equals(Object obj)
CombatAttackData combatAttackData
static final NpcDefinition[] DEFINITIONS
The array of npc definitions.
boolean hasVenomImmunity()
static String getCombatLevelRange(String name)
static GsonParser createParser()
NpcDefinition(int id, String name)
void setSkills(int[] skills)
void setVenomImmunity(boolean venomImmunity)
void setCombatLevel(int combatLevel)
void setAttackable(boolean attackable)
This class represents a character controlled by a player.
This class provides an easy to use google gson parser specifically designed for parsing JSON files.
final void deserialize()
The method that deserializes the file information.