diff --git a/build.gradle b/build.gradle
index dcb1ea6ea..851317e2c 100644
--- a/build.gradle
+++ b/build.gradle
@@ -8,6 +8,6 @@ group= "kamkeel.npcdbc"
tasks.runServer { setWorkingDir(file("run/server")) }
-version = "1.1.2"
+version = "1.1.3"
group= "kamkeel.npcdbc"
archivesBaseName = "npcdbc"
diff --git a/docs/kamkeel/npcdbc/api/effect/IDBCEffectHandler.html b/docs/kamkeel/npcdbc/api/effect/IDBCEffectHandler.html
new file mode 100644
index 000000000..25d88188f
--- /dev/null
+++ b/docs/kamkeel/npcdbc/api/effect/IDBCEffectHandler.html
@@ -0,0 +1,447 @@
+
+
+
+
+
+IDBCEffectHandler
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+Summary:
+Nested |
+Field |
+Constr |
+Method
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+All Methods Instance Methods Abstract Methods
+
+Modifier and Type
+Method
+Description
+
+
+void
+applyEffect (IPlayer player,
+ int id)
+
+Applies the effect with the specified ID to the given player using default duration and level.
+
+
+
+void
+applyEffect (IPlayer player,
+ int id,
+ int duration)
+
+Applies the effect with the specified ID to the given player with a custom duration.
+
+
+
+void
+applyEffect (IPlayer player,
+ int id,
+ int duration,
+ byte level)
+
+Applies the effect with the specified ID to the given player with a custom duration and level.
+
+
+
+void
+clearDBCEffects (IPlayer player)
+
+Clears all effects managed by the NPCDBC effect handler from the specified player.
+
+
+
+int
+getEffectDuration (IPlayer player,
+ int id)
+
+Retrieves the remaining duration of the effect with the specified ID for the given IPlayer.
+
+
+
+int
+getEffectLevel (IPlayer player,
+ int id)
+
+Retrieves the level of the effect with the specified ID for the given IPlayer.
+
+
+
+boolean
+hasEffect (IPlayer player,
+ int id)
+
+Checks if the specified player currently has the effect with the given ID.
+
+
+
+void
+removeEffect (IPlayer player,
+ int id)
+
+Removes the effect with the specified ID from the given player.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+hasEffect
+boolean hasEffect(IPlayer player,
+ int id)
+Checks if the specified player currently has the effect with the given ID.
+
+Parameters:
+player - the player to check
+id - the effect ID to look for
+Returns:
+true if the player has the effect, otherwise false
+
+
+
+
+
+
+
+
+applyEffect
+void applyEffect(IPlayer player,
+ int id)
+Applies the effect with the specified ID to the given player using default duration and level.
+
+Parameters:
+player - the player to apply the effect to
+id - the effect ID to be applied
+
+
+
+
+
+
+
+
+applyEffect
+void applyEffect(IPlayer player,
+ int id,
+ int duration)
+Applies the effect with the specified ID to the given player with a custom duration.
+
+Parameters:
+player - the player to apply the effect to
+id - the effect ID to be applied
+duration - the duration for which the effect should last, in ticks
+
+
+
+
+
+
+
+
+applyEffect
+void applyEffect(IPlayer player,
+ int id,
+ int duration,
+ byte level)
+Applies the effect with the specified ID to the given player with a custom duration and level.
+
+Parameters:
+player - the player to apply the effect to
+id - the effect ID to be applied
+duration - the duration for which the effect should last, in ticks
+level - the level or strength of the effect
+
+
+
+
+
+
+
+
+
+
+
+
+removeEffect
+void removeEffect(IPlayer player,
+ int id)
+Removes the effect with the specified ID from the given player.
+
+Parameters:
+player - the player from which the effect should be removed
+id - the effect ID to be removed
+
+
+
+
+
+
+
+
+getEffectDuration
+int getEffectDuration(IPlayer player,
+ int id)
+Retrieves the remaining duration of the effect with the specified ID for the given IPlayer.
+ Uses the DBC effect index.
+
+Parameters:
+player - the IPlayer to check
+id - the effect ID
+Returns:
+the remaining duration in seconds, or -1 if the effect is not active
+
+
+
+
+
+
+
+
+getEffectLevel
+int getEffectLevel(IPlayer player,
+ int id)
+Retrieves the level of the effect with the specified ID for the given IPlayer.
+ Uses the DBC effect index.
+
+Parameters:
+player - the IPlayer to check
+id - the effect ID
+Returns:
+the effect level, or -1 if the effect is not active
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+Summary:
+Nested |
+Field |
+Constr |
+Method
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/kamkeel/npcdbc/api/event/IDBCEvent.SenzuUsedEvent.html b/docs/kamkeel/npcdbc/api/event/IDBCEvent.SenzuUsedEvent.html
new file mode 100644
index 000000000..7a8c84888
--- /dev/null
+++ b/docs/kamkeel/npcdbc/api/event/IDBCEvent.SenzuUsedEvent.html
@@ -0,0 +1,259 @@
+
+
+
+
+
+IDBCEvent.SenzuUsedEvent
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Nested Class Summary
+
+
+
+
+
+
+Nested classes/interfaces inherited from interface noppes.npcs.api.event.IPlayerEvent
+IPlayerEvent.AchievementEvent , IPlayerEvent.AttackedEvent , IPlayerEvent.AttackEvent , IPlayerEvent.BonemealEvent , IPlayerEvent.BreakEvent , IPlayerEvent.ChangedDimension , IPlayerEvent.ChatEvent , IPlayerEvent.ContainerClosed , IPlayerEvent.ContainerOpen , IPlayerEvent.DamagedEntityEvent , IPlayerEvent.DiedEvent , IPlayerEvent.DropEvent , IPlayerEvent.EffectEvent , IPlayerEvent.FallEvent , IPlayerEvent.FillBucketEvent , IPlayerEvent.FinishUsingItem , IPlayerEvent.InitEvent , IPlayerEvent.InteractEvent , IPlayerEvent.JumpEvent , IPlayerEvent.KeyPressedEvent , IPlayerEvent.KilledEntityEvent , IPlayerEvent.LevelUpEvent , IPlayerEvent.LightningEvent , IPlayerEvent.LoginEvent , IPlayerEvent.LogoutEvent , IPlayerEvent.MouseClickedEvent , IPlayerEvent.PickUpEvent , IPlayerEvent.PickupXPEvent , IPlayerEvent.ProfileEvent , IPlayerEvent.RangedChargeEvent , IPlayerEvent.RangedLaunchedEvent , IPlayerEvent.RespawnEvent , IPlayerEvent.SleepEvent , IPlayerEvent.SoundEvent , IPlayerEvent.StartUsingItem , IPlayerEvent.StopUsingItem , IPlayerEvent.TimerEvent , IPlayerEvent.TossEvent , IPlayerEvent.UpdateEvent , IPlayerEvent.UseHoeEvent , IPlayerEvent.UsingItem , IPlayerEvent.WakeUpEvent
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/kamkeel/npcdbc/api/form/IAdvancedFormStat.html b/docs/kamkeel/npcdbc/api/form/IAdvancedFormStat.html
new file mode 100644
index 000000000..becb7e28a
--- /dev/null
+++ b/docs/kamkeel/npcdbc/api/form/IAdvancedFormStat.html
@@ -0,0 +1,319 @@
+
+
+
+
+
+IAdvancedFormStat
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+Summary:
+Nested |
+Field |
+Constr |
+Method
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Detail
+
+
+
+
+
+isEnabled
+boolean isEnabled()
+
+
+
+
+
+
+
+
+
+
+
+getBonus
+int getBonus()
+
+
+
+
+
+
+
+
+
+
+
+getMultiplier
+float getMultiplier()
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+Summary:
+Nested |
+Field |
+Constr |
+Method
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/kamkeel/npcdbc/api/form/IFormAdvanced.html b/docs/kamkeel/npcdbc/api/form/IFormAdvanced.html
new file mode 100644
index 000000000..f407893dc
--- /dev/null
+++ b/docs/kamkeel/npcdbc/api/form/IFormAdvanced.html
@@ -0,0 +1,353 @@
+
+
+
+
+
+IFormAdvanced
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+Summary:
+Nested |
+Field |
+Constr |
+Method
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+Method Summary
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+JavaScript is disabled on your browser.
+
+
+
+
+Summary:
+Nested |
+Field |
+Constr |
+Method
+
+
+Detail:
+Field |
+Constr |
+Method
+
+
+
+
+
+
+
+
+
+
diff --git a/gradle.properties b/gradle.properties
index 6ef0f20ad..4dcc76157 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -3,8 +3,7 @@ modName = CustomNPC+ DBC Addon
# This is a case-sensitive string to identify your mod. Convention is to use lower case.
modId = npcdbc
modGroup = kamkeel.npcdbc
-# commented out so it uses git versioning / git tags.
-modVersion = 1.1
+modVersion = 1.1.3
gtnh.modules.codeStyle=true
gtnh.modules.gitVersion=false
diff --git a/src/main/java/kamkeel/npcdbc/CustomNpcPlusDBC.java b/src/main/java/kamkeel/npcdbc/CustomNpcPlusDBC.java
index 047fecf06..0886dc0ee 100644
--- a/src/main/java/kamkeel/npcdbc/CustomNpcPlusDBC.java
+++ b/src/main/java/kamkeel/npcdbc/CustomNpcPlusDBC.java
@@ -18,14 +18,15 @@
@Mod(
modid = CustomNpcPlusDBC.ID,
name = CustomNpcPlusDBC.name,
- version = CustomNpcPlusDBC.version, // If this errors out, try refreshing your project entirely
+ version = CustomNpcPlusDBC.version,
dependencies = "required-after:customnpcs;required-after:jinryuujrmcore;required-after:jinryuudragonblockc;"
)
public class CustomNpcPlusDBC {
public static final String name = "CustomNPC+ DBC Addon";
public static final String ID = "npcdbc";
- public static final String version = "1.1.2";
+ public static final String version = "1.1.3";
+
@SidedProxy(clientSide = "kamkeel.npcdbc.client.ClientProxy", serverSide = "kamkeel.npcdbc.CommonProxy")
public static CommonProxy proxy;
@Mod.Instance
diff --git a/src/main/java/kamkeel/npcdbc/client/model/ModelDBC.java b/src/main/java/kamkeel/npcdbc/client/model/ModelDBC.java
index 3f13bb75b..ede810f1a 100644
--- a/src/main/java/kamkeel/npcdbc/client/model/ModelDBC.java
+++ b/src/main/java/kamkeel/npcdbc/client/model/ModelDBC.java
@@ -158,13 +158,14 @@ public void renderFace(EntityCustomNpc entity, DBCDisplay display) {
Form form = display.getForm();
if (form != null) {
FormDisplay d = form.display;
+ FormDisplay.BodyColor customClr = display.formColor;
- if (d.hasColor("eye"))
- eyeColor = d.bodyColors.eyeColor;
- if (d.hasColor("hair"))
- eyeBrowColor = d.bodyColors.hairColor;
- if (d.hasColor("bodycm"))
- bodyCM = d.bodyColors.bodyCM;
+ if (customClr.hasAnyColor(d, "eye"))
+ eyeColor = customClr.getProperColor(d, "eye");
+ if (customClr.hasAnyColor(d, "hair"))
+ eyeBrowColor = customClr.getProperColor(d, "hair");
+ if (customClr.hasAnyColor(d, "bodycm"))
+ bodyCM = customClr.getProperColor(d, "bodyCM");
if (d.hasArcoMask)
hasArcoMask = true;
@@ -176,7 +177,7 @@ else if (d.hairType.equals("ssj4"))
isSSJ4 = true;
else if (d.hairType.equals("oozaru")) {
isOozaru = true;
- if (d.bodyColors.eyeColor == -1)
+ if (customClr.getProperColor(d, "eye") == -1)
eyeColor = 0xFF0000;
}
@@ -385,25 +386,27 @@ public void renderBodySkin(DBCDisplay display, ModelRenderer model) {
Form form = display.getForm();
if (form != null) {
FormDisplay d = form.display;
- if (d.hasColor("eye"))
- eyeColor = d.bodyColors.eyeColor;
- if (d.hasColor("hair"))
- hairColor = d.bodyColors.hairColor;
- if (d.hasColor("bodycm"))
- bodyCM = d.bodyColors.bodyCM;
- if (d.hasColor("bodyc1"))
- bodyC1 = d.bodyColors.bodyC1;
- if (d.hasColor("bodyc2"))
- bodyC2 = d.bodyColors.bodyC2;
- if (d.hasColor("bodyc3"))
- bodyC3 = d.bodyColors.bodyC3;
- if (d.hasColor("fur"))
- furColor = d.bodyColors.furColor;
+ FormDisplay.BodyColor customClr = display.formColor;
+
+ if (customClr.hasAnyColor(d, "eye"))
+ eyeColor = customClr.getProperColor(d, "eye");
+ if (customClr.hasAnyColor(d, "hair"))
+ hairColor = customClr.getProperColor(d, "hair");
+ if (customClr.hasAnyColor(d, "bodycm"))
+ bodyCM = customClr.getProperColor(d, "bodycm");
+ if (customClr.hasAnyColor(d, "bodyc1"))
+ bodyC1 = customClr.getProperColor(d, "bodyc1");
+ if (customClr.hasAnyColor(d, "bodyc2"))
+ bodyC2 = customClr.getProperColor(d, "bodyc2");
+ if (customClr.hasAnyColor(d, "bodyc3"))
+ bodyC3 = customClr.getProperColor(d, "bodyc3");
+ if (customClr.hasAnyColor(d, "fur"))
+ furColor = customClr.getProperColor(d, "fur");
hasFur = d.hasBodyFur;
if (d.hairType.equals("ssj4")) {
isSSJ4 = true;
- if (d.bodyColors.eyeColor == -1)
+ if (customClr.getProperColor(d, "eye") == -1)
eyeColor = 0xF3C807;
} else if (d.hairType.equals("oozaru")) {
isOozaru = true;
diff --git a/src/main/java/kamkeel/npcdbc/client/model/part/DBCBody.java b/src/main/java/kamkeel/npcdbc/client/model/part/DBCBody.java
index bf9fb6d4e..0c2849fe6 100644
--- a/src/main/java/kamkeel/npcdbc/client/model/part/DBCBody.java
+++ b/src/main/java/kamkeel/npcdbc/client/model/part/DBCBody.java
@@ -82,8 +82,11 @@ public void render(float par1) {
Form form = display.getForm();
if (form != null) {
FormDisplay d = form.display;
- if (d.hasColor("bodycm"))
- bodyCM = d.bodyColors.bodyCM;
+ FormDisplay.BodyColor customClr = display.formColor;
+
+ if (customClr.hasAnyColor(d, "bodycm"))
+ bodyCM = customClr.getProperColor(d, "bodycm");
+
}
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
diff --git a/src/main/java/kamkeel/npcdbc/client/model/part/DBCEars.java b/src/main/java/kamkeel/npcdbc/client/model/part/DBCEars.java
index bcfff9320..08ff8b507 100644
--- a/src/main/java/kamkeel/npcdbc/client/model/part/DBCEars.java
+++ b/src/main/java/kamkeel/npcdbc/client/model/part/DBCEars.java
@@ -69,8 +69,11 @@ public void render(float par1) {
Form form = display.getForm();
if (form != null) {
FormDisplay d = form.display;
- if (d.hasColor("bodycm"))
- bodyCM = d.bodyColors.bodyCM;
+ FormDisplay.BodyColor customClr = display.formColor;
+
+ if (customClr.hasAnyColor(d, "bodycm"))
+ bodyCM = customClr.getProperColor(d, "bodycm");
+
}
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
diff --git a/src/main/java/kamkeel/npcdbc/client/model/part/DBCHorns.java b/src/main/java/kamkeel/npcdbc/client/model/part/DBCHorns.java
index 06a8d3330..0ff65d556 100644
--- a/src/main/java/kamkeel/npcdbc/client/model/part/DBCHorns.java
+++ b/src/main/java/kamkeel/npcdbc/client/model/part/DBCHorns.java
@@ -205,14 +205,17 @@ public void render(float par1) {
Form form = display.getForm();
if (form != null) {
FormDisplay d = form.display;
- if (d.hasColor("bodycm"))
- bodyCM = d.bodyColors.bodyCM;
- if (d.hasColor("bodyc1"))
- bodyC1 = d.bodyColors.bodyC1;
- if (d.hasColor("bodyc2"))
- bodyC2 = d.bodyColors.bodyC2;
- if (d.hasColor("bodyc3"))
- bodyC3 = d.bodyColors.bodyC3;
+ FormDisplay.BodyColor customClr = display.formColor;
+
+ if (customClr.hasAnyColor(d, "bodycm"))
+ bodyCM = customClr.getProperColor(d, "bodycm");
+ if (customClr.hasAnyColor(d, "bodyc1"))
+ bodyC1 = customClr.getProperColor(d, "bodyc1");
+ if (customClr.hasAnyColor(d, "bodyc2"))
+ bodyC2 = customClr.getProperColor(d, "bodyc2");
+ if (customClr.hasAnyColor(d, "bodyc3"))
+ bodyC3 = customClr.getProperColor(d, "bodyc3");
+
if (isArco) {
if (form.display.bodyType.equals("firstform")) {
diff --git a/src/main/java/kamkeel/npcdbc/client/model/part/DBCLeftArms.java b/src/main/java/kamkeel/npcdbc/client/model/part/DBCLeftArms.java
index 9405f748b..166e9b7d1 100644
--- a/src/main/java/kamkeel/npcdbc/client/model/part/DBCLeftArms.java
+++ b/src/main/java/kamkeel/npcdbc/client/model/part/DBCLeftArms.java
@@ -79,10 +79,13 @@ public void render(float par1) {
Form form = display.getForm();
if (form != null) {
FormDisplay d = form.display;
- if (d.hasColor("bodycm"))
- bodyCM = d.bodyColors.bodyCM;
- if (d.hasColor("bodyc2"))
- bodyC2 = d.bodyColors.bodyC2;
+ FormDisplay.BodyColor customClr = display.formColor;
+
+ if (customClr.hasAnyColor(d, "bodycm"))
+ bodyCM = customClr.getProperColor(d, "bodycm");
+ if (customClr.hasAnyColor(d, "bodyc2"))
+ bodyC2 = customClr.getProperColor(d, "bodyc2");
+
}
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
diff --git a/src/main/java/kamkeel/npcdbc/client/model/part/DBCRightArms.java b/src/main/java/kamkeel/npcdbc/client/model/part/DBCRightArms.java
index 8e02c5182..a3f8e80ee 100644
--- a/src/main/java/kamkeel/npcdbc/client/model/part/DBCRightArms.java
+++ b/src/main/java/kamkeel/npcdbc/client/model/part/DBCRightArms.java
@@ -79,10 +79,13 @@ public void render(float par1) {
Form form = display.getForm();
if (form != null) {
FormDisplay d = form.display;
- if (d.hasColor("bodycm"))
- bodyCM = d.bodyColors.bodyCM;
- if (d.hasColor("bodyc2"))
- bodyC2 = d.bodyColors.bodyC2;
+ FormDisplay.BodyColor customClr = display.formColor;
+
+ if (customClr.hasAnyColor(d, "bodycm"))
+ bodyCM = customClr.getProperColor(d, "bodycm");
+ if (customClr.hasAnyColor(d, "bodyc2"))
+ bodyC2 = customClr.getProperColor(d, "bodyc2");
+
}
//////////////////////////////////////////////////////
//////////////////////////////////////////////////////
diff --git a/src/main/java/kamkeel/npcdbc/client/model/part/hair/DBCHair.java b/src/main/java/kamkeel/npcdbc/client/model/part/hair/DBCHair.java
index 384aa9dc8..7d3444356 100644
--- a/src/main/java/kamkeel/npcdbc/client/model/part/hair/DBCHair.java
+++ b/src/main/java/kamkeel/npcdbc/client/model/part/hair/DBCHair.java
@@ -556,6 +556,8 @@ else if (display.hairType.equals("ssj4"))
Form form = display.getForm();
if (form != null) {
FormDisplay d = form.display;
+ FormDisplay.BodyColor customClr = display.formColor;
+
if (race == 5 && !form.display.effectMajinHair) {
effectMajinHair = false;
hairCode = MAJIN_HAIR;
@@ -567,12 +569,10 @@ else if (display.hairType.equals("ssj4"))
else if (d.hairCode.length() > 3)
hairCode = d.hairCode;
-
- if (d.hasColor("hair"))
- hairColor = d.bodyColors.hairColor;
- else if (display.race == 5 && d.hasColor("bodycm")) {
- hairColor = d.bodyColors.bodyCM;
- }
+ if (customClr.hasAnyColor(d, "hair"))
+ hairColor = customClr.getProperColor(d, "hair");
+ else if (display.race == 5 && customClr.hasAnyColor(d, "bodycm"))
+ hairColor = customClr.getProperColor(d, "bodycm");
if (d.hairType.equals("base"))
state = 0;
diff --git a/src/main/java/kamkeel/npcdbc/data/dbcdata/DBCData.java b/src/main/java/kamkeel/npcdbc/data/dbcdata/DBCData.java
index 600103c82..49d728a35 100644
--- a/src/main/java/kamkeel/npcdbc/data/dbcdata/DBCData.java
+++ b/src/main/java/kamkeel/npcdbc/data/dbcdata/DBCData.java
@@ -28,10 +28,7 @@
import kamkeel.npcdbc.data.outline.Outline;
import kamkeel.npcdbc.entity.EntityAura;
import kamkeel.npcdbc.network.DBCPacketHandler;
-import kamkeel.npcdbc.network.packets.player.DBCSetFlight;
-import kamkeel.npcdbc.network.packets.player.DBCUpdateLockOn;
-import kamkeel.npcdbc.network.packets.player.PingPacket;
-import kamkeel.npcdbc.network.packets.player.TurboPacket;
+import kamkeel.npcdbc.network.packets.player.*;
import kamkeel.npcdbc.util.DBCUtils;
import kamkeel.npcdbc.util.PlayerDataUtil;
import net.minecraft.client.Minecraft;
@@ -53,7 +50,7 @@
import static kamkeel.npcdbc.constants.DBCForm.*;
import static kamkeel.npcdbc.controllers.DBCEffectController.DBC_EFFECT_INDEX;
-public class DBCData extends DBCDataUniversal implements IAuraData {
+public class DBCData extends DBCDataUniversal implements IAuraData {
public static String DBCPersisted = "PlayerPersisted";
public final Side side;
@@ -283,6 +280,11 @@ public void loadClientSideData(NBTTagCompound c) {
}
}
+ loadClientSideFormColorData(c);
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void loadClientSideFormColorData(NBTTagCompound c) {
currentCustomizedColors = new FormDisplay.BodyColor();
if (c.hasKey("CustomFormColors", Constants.NBT.TAG_COMPOUND)) {
currentCustomizedColors.readFromNBT(c.getCompoundTag("CustomFormColors"));
@@ -1041,4 +1043,17 @@ public FormDisplay.BodyColor getCurrentFormColorCustomization() {
PlayerDBCInfo info = getDBCInfo();
return info.configuredFormColors.get(form.id);
}
+
+ public void sendCurrentFormColorData() {
+ FormDisplay.BodyColor currentColors = getCurrentFormColorCustomization();
+ NBTTagCompound dataNeededOnClient = new NBTTagCompound();
+
+ if (currentColors != null) {
+ NBTTagCompound colorCompound = new NBTTagCompound();
+ currentColors.writeToNBT(colorCompound);
+ dataNeededOnClient.setTag("CustomFormColors", colorCompound);
+ }
+
+ DBCPacketHandler.Instance.sendTracking(new PingFormColorPacket(this, dataNeededOnClient), player);
+ }
}
diff --git a/src/main/java/kamkeel/npcdbc/data/npc/DBCDisplay.java b/src/main/java/kamkeel/npcdbc/data/npc/DBCDisplay.java
index e3693158c..6c6251ec7 100644
--- a/src/main/java/kamkeel/npcdbc/data/npc/DBCDisplay.java
+++ b/src/main/java/kamkeel/npcdbc/data/npc/DBCDisplay.java
@@ -21,19 +21,25 @@
import kamkeel.npcdbc.data.aura.Aura;
import kamkeel.npcdbc.data.dbcdata.DBCData;
import kamkeel.npcdbc.data.form.Form;
+import kamkeel.npcdbc.data.form.FormDisplay;
import kamkeel.npcdbc.data.outline.Outline;
import kamkeel.npcdbc.entity.EntityAura;
import kamkeel.npcdbc.mixins.late.INPCDisplay;
import kamkeel.npcdbc.mixins.late.INPCStats;
+import kamkeel.npcdbc.network.DBCPacketHandler;
+import kamkeel.npcdbc.network.packets.player.NPCUpdateForcedColors;
+import kamkeel.npcdbc.network.packets.player.PingFormColorPacket;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.Entity;
import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.common.util.Constants;
import noppes.npcs.entity.EntityCustomNpc;
import noppes.npcs.entity.EntityNPCInterface;
import noppes.npcs.entity.data.ModelData;
import noppes.npcs.entity.data.ModelPartData;
import noppes.npcs.scripted.CustomNPCsException;
import noppes.npcs.util.ValueUtil;
+import org.lwjgl.opencl.CL;
import java.util.HashMap;
import java.util.LinkedList;
@@ -89,6 +95,8 @@ public DBCDisplay(EntityNPCInterface npc) {
this.npc = npc;
}
+ public FormDisplay.BodyColor formColor = new FormDisplay.BodyColor();
+
public NBTTagCompound writeToNBT(NBTTagCompound comp) {
comp.setBoolean("DBCDisplayEnabled", enabled);
if (enabled) {
@@ -866,4 +874,25 @@ public static EntityCustomNpc setupGUINPC(EntityCustomNpc originalNPC) {
}
return npc;
}
+
+ public void sendCurrentFormColorData() {
+ FormDisplay.BodyColor currentColors = formColor;
+ NBTTagCompound dataNeededOnClient = new NBTTagCompound();
+
+ if (currentColors != null) {
+ NBTTagCompound colorCompound = new NBTTagCompound();
+ currentColors.writeToNBT(colorCompound);
+ dataNeededOnClient.setTag("CustomFormColors", colorCompound);
+ }
+
+ DBCPacketHandler.Instance.sendTracking(new NPCUpdateForcedColors(npc, dataNeededOnClient), npc);
+ }
+
+ @SideOnly(Side.CLIENT)
+ public void loadClientSideFormColorData(NBTTagCompound c) {
+ formColor = new FormDisplay.BodyColor();
+ if (c.hasKey("CustomFormColors", Constants.NBT.TAG_COMPOUND)) {
+ formColor.readFromNBT(c.getCompoundTag("CustomFormColors"));
+ }
+ }
}
diff --git a/src/main/java/kamkeel/npcdbc/mixins/late/impl/npc/client/MixinModelTail.java b/src/main/java/kamkeel/npcdbc/mixins/late/impl/npc/client/MixinModelTail.java
index 936d87773..d44e1ce95 100644
--- a/src/main/java/kamkeel/npcdbc/mixins/late/impl/npc/client/MixinModelTail.java
+++ b/src/main/java/kamkeel/npcdbc/mixins/late/impl/npc/client/MixinModelTail.java
@@ -8,9 +8,11 @@
import kamkeel.npcdbc.config.ConfigDBCClient;
import kamkeel.npcdbc.constants.DBCRace;
import kamkeel.npcdbc.data.form.Form;
+import kamkeel.npcdbc.data.form.FormDisplay;
import kamkeel.npcdbc.data.npc.DBCDisplay;
import kamkeel.npcdbc.mixins.late.INPCDisplay;
import net.minecraft.client.model.ModelBase;
+import net.minecraft.client.model.ModelRenderer;
import net.minecraft.util.ResourceLocation;
import noppes.npcs.client.ClientProxy;
import noppes.npcs.client.model.ModelMPM;
@@ -41,6 +43,9 @@ public abstract class MixinModelTail extends ModelScaleRenderer {
@Shadow
private int color;
+ @Shadow
+ public ModelRenderer tail;
+
public MixinModelTail(ModelBase par1ModelBase) {
super(par1ModelBase);
}
@@ -87,10 +92,12 @@ else if (!monkey.monkey_large.isHidden)
Form form = display.getForm();
if (form != null) {
- if (form.display.hasColor("hair"))
- tailColor = form.display.bodyColors.hairColor;
- if (form.display.hasColor("fur"))
- furColor = form.display.bodyColors.furColor;
+ FormDisplay d = form.display;
+ FormDisplay.BodyColor customClr = display.formColor;
+ if (customClr.hasAnyColor(d, "hair"))
+ tailColor = customClr.getProperColor(d, "hair");
+ if (customClr.hasAnyColor(d, "fur"))
+ furColor = customClr.getProperColor(d, "fur");
hasFur = form.display.hasBodyFur;
@@ -121,11 +128,14 @@ else if (form.display.hairType.equals("oozaru"))
Form form = display.getForm();
if (form != null) {
+ FormDisplay d = form.display;
+ FormDisplay.BodyColor customClr = display.formColor;
+
if ((form.display.bodyType.contains("first") || form.display.bodyType.contains("second") || form.display.bodyType.contains("third"))) {
- if (form.display.hasColor("bodyc3"))
- tailColor = form.display.bodyColors.bodyC3;
- } else if (form.display.hasColor("bodycm"))
- tailColor = form.display.bodyColors.bodyCM;
+ if (customClr.hasAnyColor(d, "bodyc3"))
+ tailColor = customClr.getProperColor(d, "bodyc3");
+ } else if (customClr.hasAnyColor(d, "bodycm"))
+ tailColor = customClr.getProperColor(d, "bodycm");
}
diff --git a/src/main/java/kamkeel/npcdbc/network/DBCPacketHandler.java b/src/main/java/kamkeel/npcdbc/network/DBCPacketHandler.java
index 77df27e37..cea17ba54 100644
--- a/src/main/java/kamkeel/npcdbc/network/DBCPacketHandler.java
+++ b/src/main/java/kamkeel/npcdbc/network/DBCPacketHandler.java
@@ -82,6 +82,8 @@ private void registerPlayerPackets() {
PLAYER_PACKETS.registerPacket(new SaveFormCustomization());
PLAYER_PACKETS.registerPacket(new PlaySound());
PLAYER_PACKETS.registerPacket(new PingPacket());
+ PLAYER_PACKETS.registerPacket(new PingFormColorPacket());
+ PLAYER_PACKETS.registerPacket(new NPCUpdateForcedColors());
PLAYER_PACKETS.registerPacket(new LoginInfo());
PLAYER_PACKETS.registerPacket(new DBCUpdateLockOn());
PLAYER_PACKETS.registerPacket(new DBCSetValPacket());
diff --git a/src/main/java/kamkeel/npcdbc/network/packets/EnumPacketPlayer.java b/src/main/java/kamkeel/npcdbc/network/packets/EnumPacketPlayer.java
index 2f706747e..3d422b57b 100644
--- a/src/main/java/kamkeel/npcdbc/network/packets/EnumPacketPlayer.java
+++ b/src/main/java/kamkeel/npcdbc/network/packets/EnumPacketPlayer.java
@@ -15,10 +15,11 @@ public enum EnumPacketPlayer {
LockOn,
LoginInfo,
PingPacket,
+ PingFormColorPacket,
PlaySound,
FormSaveCustiomization,
SendChat,
StopSound,
Transform,
- Turbo
+ NPCPingForm, Turbo
}
diff --git a/src/main/java/kamkeel/npcdbc/network/packets/player/NPCUpdateForcedColors.java b/src/main/java/kamkeel/npcdbc/network/packets/player/NPCUpdateForcedColors.java
new file mode 100644
index 000000000..a5ac557f2
--- /dev/null
+++ b/src/main/java/kamkeel/npcdbc/network/packets/player/NPCUpdateForcedColors.java
@@ -0,0 +1,64 @@
+package kamkeel.npcdbc.network.packets.player;
+
+import JinRyuu.JRMCore.entity.EntityNPC;
+import io.netty.buffer.ByteBuf;
+import kamkeel.npcdbc.data.dbcdata.DBCData;
+import kamkeel.npcdbc.data.npc.DBCDisplay;
+import kamkeel.npcdbc.mixins.late.INPCDisplay;
+import kamkeel.npcdbc.network.AbstractPacket;
+import kamkeel.npcdbc.network.DBCPacketHandler;
+import kamkeel.npcdbc.network.PacketChannel;
+import kamkeel.npcdbc.network.packets.EnumPacketPlayer;
+import kamkeel.npcdbc.scripted.DBCAPI;
+import kamkeel.npcs.util.ByteBufUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.nbt.NBTTagCompound;
+import noppes.npcs.api.entity.ICustomNpc;
+import noppes.npcs.entity.EntityCustomNpc;
+import noppes.npcs.entity.EntityNPCInterface;
+
+import java.io.IOException;
+
+public final class NPCUpdateForcedColors extends AbstractPacket {
+ public static final String packetName = "NPC|PingFormCustom";
+
+ private NBTTagCompound clientData;
+ private EntityNPCInterface npc;
+
+ public NPCUpdateForcedColors() {
+ }
+
+
+ public NPCUpdateForcedColors(EntityNPCInterface npc, NBTTagCompound dataNeededOnClient) {
+ this.npc = npc;
+ this.clientData = dataNeededOnClient;
+ }
+
+ @Override
+ public Enum getType() {
+ return EnumPacketPlayer.NPCPingForm;
+ }
+
+ @Override
+ public PacketChannel getChannel() {
+ return DBCPacketHandler.PLAYER_PACKETS;
+ }
+
+ @Override
+ public void sendData(ByteBuf out) throws IOException {
+ out.writeInt(npc.getEntityId());
+ ByteBufUtils.writeNBT(out, this.clientData);
+ }
+
+ @Override
+ public void receiveData(ByteBuf in, EntityPlayer player) throws IOException {
+ int entityID = in.readInt();
+ Entity ent = player.getEntityWorld().getEntityByID(entityID);
+ if (ent instanceof EntityNPCInterface) {
+ DBCDisplay display = ((INPCDisplay) ((EntityNPCInterface) ent).display).getDBCDisplay();
+ display.loadClientSideFormColorData(ByteBufUtils.readNBT(in));
+ }
+ }
+}
diff --git a/src/main/java/kamkeel/npcdbc/network/packets/player/PingFormColorPacket.java b/src/main/java/kamkeel/npcdbc/network/packets/player/PingFormColorPacket.java
new file mode 100644
index 000000000..08039f67d
--- /dev/null
+++ b/src/main/java/kamkeel/npcdbc/network/packets/player/PingFormColorPacket.java
@@ -0,0 +1,56 @@
+package kamkeel.npcdbc.network.packets.player;
+
+import io.netty.buffer.ByteBuf;
+import kamkeel.npcdbc.data.dbcdata.DBCData;
+import kamkeel.npcdbc.network.AbstractPacket;
+import kamkeel.npcdbc.network.DBCPacketHandler;
+import kamkeel.npcdbc.network.PacketChannel;
+import kamkeel.npcdbc.network.packets.EnumPacketPlayer;
+import kamkeel.npcs.util.ByteBufUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.nbt.NBTTagCompound;
+
+import java.io.IOException;
+
+public final class PingFormColorPacket extends AbstractPacket {
+ public static final String packetName = "NPC|PingFormCustom";
+
+ private DBCData data;
+ private NBTTagCompound clientData;
+
+ public PingFormColorPacket() {
+ }
+
+
+ public PingFormColorPacket(DBCData dbcData, NBTTagCompound dataNeededOnClient) {
+ this.data = dbcData;
+ this.clientData = dataNeededOnClient;
+ }
+
+ @Override
+ public Enum getType() {
+ return EnumPacketPlayer.PingFormColorPacket;
+ }
+
+ @Override
+ public PacketChannel getChannel() {
+ return DBCPacketHandler.PLAYER_PACKETS;
+ }
+
+ @Override
+ public void sendData(ByteBuf out) throws IOException {
+ ByteBufUtils.writeUTF8String(out, this.data.player.getCommandSenderName());
+ ByteBufUtils.writeNBT(out, this.clientData);
+ }
+
+ @Override
+ public void receiveData(ByteBuf in, EntityPlayer player) throws IOException {
+ String playerName = ByteBufUtils.readUTF8String(in);
+ EntityPlayer sendingPlayer = Minecraft.getMinecraft().theWorld.getPlayerEntityByName(playerName);
+ if (sendingPlayer != null) {
+ DBCData dbcData = DBCData.get(sendingPlayer);
+ dbcData.loadClientSideFormColorData(ByteBufUtils.readNBT(in));
+ }
+ }
+}
diff --git a/src/main/resources/assets/npcdbc/lang/zh_CN.lang b/src/main/resources/assets/npcdbc/lang/zh_CN.lang
index 3b228c1f1..9c26df117 100644
--- a/src/main/resources/assets/npcdbc/lang/zh_CN.lang
+++ b/src/main/resources/assets/npcdbc/lang/zh_CN.lang
@@ -12,8 +12,10 @@ dbc.clientsettings.aura.firstPersonOpacity=第一人称3D气焰不透明度: %s%
global.customforms=形态
global.customauras=气焰
global.customoutlines=气轮廓
+global.customeffects=状态
stats.dbcsettings=DBC 设置
+inventory.extras=气焰
gui.clone=复制
@@ -28,9 +30,21 @@ stats.ignoreFormDefense=忽略形态减伤
stats.hasDefensePenetration=有防御穿透
stats.defensePenetration=防御穿透
+effect.runsEveryX=每X个tick运行一次
+effect.defaultLength=默认长度
+
+# These are supposed to be shorter
+effect.editor.runsEveryX=每个X点
+effect.editor.defaultLength=长度
+effect.editor.height=高度
+effect.editor.width=宽度
+effect.editor.xPos=X Pos
+effect.editor.yPos=Y Pos
+effect.editor.lossOnDeath=死亡损失
+
mastery.maxLevel=最大形态等级
-mastery.multiFlat=固定加成
-mastery.multiMinMax=最小/最大增幅范围
+mastery.multiFlat=固定倍率加成
+mastery.multiMinMax=最小/最大等级范围
mastery.multiPerLevel=每升一级增加
mastery.instantTransform=瞬间变身等级需求
mastery.healthReqSettings=血量要求设置
@@ -77,7 +91,8 @@ mastery.destroyerSettings=破坏能量设置
mastery.destroyerKiDamage=破坏能量气功伤害倍率
mastery.linkedMastery=关联等级
-
+display.attri=属性设置
+display.adv=龙珠属性加成
display.human=人类
display.saiyan=赛亚人
display.halfsaiyan=混血赛亚人
@@ -135,15 +150,18 @@ display.raditz=拉帝兹
display.kiBarColor=气条颜色
display.eye=眼睛
display.isBerserk=狂暴状态
+display.normalEye=正常
display.hasEyebrows=眉毛
display.mouth=嘴巴
display.nose=鼻子
+display.formCanFormbeCustomized=玩家自定义
display.color=颜色
display.modify=修改
+display.formWidth=形态宽度
display.formSize=形态大小
display.aura=气焰
display.auraOn=气焰开
-isplay.fur=毛发
+display.fur=毛发
display.hair=头发
display.hairType=发型
display.majinHair=魔人发型
@@ -180,7 +198,7 @@ display.outline=气轮廓
display.selectOutline=无气轮廓
display.extra=额外
display.size=大小
-display.speed=速度
+display.speed=流动速度
display.overrideDBC=覆盖DBC形态
display.color1=颜色1
display.color2=颜色2
@@ -227,8 +245,12 @@ display.kettleOnly=仅魔人气焰
display.kettlePlusAura=魔人气焰 + 气焰
display.revampAura=重塑气焰
display.dbcAura=DBC气焰
+display.bloom=泛光
+display.outlines=气轮廓
+display.shaders=着色器
+display.firstPersonAura=第一人称气轮廓透明度
-outline.noiseSize=声音大小
+outline.noiseSize=轮廓光效粗糙度
outline.colorSmoothness=颜色平滑度
outline.colorInterpolation=颜色过渡
outline.pulsingSpeed=闪烁速度
@@ -294,8 +316,10 @@ npcdbc.inventory.willpower=意志
npcdbc.inventory.mastery=形态等级
npcdbc.inventory.selected=已选择
npcdbc.inventory.noauraselected=未选择气焰
+npcdbc.inventory.tweaks=调整
+npcdbc.inventory.revampAura=修改气焰
-npcdbc.inventory.stackable.dbc=DBC
+npcdbc.inventory.stackable.dbc=龙块C
npcdbc.inventory.stackable.kk=界王拳
npcdbc.inventory.stackable.ui=自在
npcdbc.inventory.stackable.godofdestruction=自我
@@ -340,7 +364,7 @@ npcdbc.spectator=作为副体无法变身
npcdbc.raceIneligible=您的种族不符合此形态要求
npcdbc.healthRequirement=您需要在 %d 百分之以下的生命值才能变身所选形态
npcdbc.pain=无法在痛苦状态中变身
-npcdbc.wrongDBC=您处于错误的 DBC 形态
+npcdbc.wrongDBC=您处于错误的形态
npcdbc.transformFromParent=必须从前置形态变身
npcdbc.fusionSkillFusion=没有启用融合技能
npcdbc.holdPotara=双方玩家必须各带波塔拉耳环
@@ -362,6 +386,9 @@ npcdbc.transform=变身为
npcdbc.descend=降级至
npcdbc.descendFrom=已解除
npcdbc.timeExpired=计时器已到期!
+npcdbc.full=你感觉有点吃不下了
+npcdbc.bloated=你已经完成吃不下去了。
+npcdbc.humanSpiritMessage=你感觉到人类的精神。
############################
## ITEMS
@@ -379,9 +406,9 @@ capsule.stamina=耐力
# (1) - Status effect name
# (2) - Status effect level
# (3) - Effect time
-capsule.effect=在等级 %2s 时,给予 "%1s" 效果,持续 %3s 秒
+capsule.effect=使用胶囊会得到 %2s 状态,根据 "%1s" 等级给与 %3s 秒状态
-tem.npcdbc:base_healthcapsule.name=基础生命胶囊
+item.npcdbc:base_healthcapsule.name=基础生命胶囊
item.npcdbc:super_healthcapsule.name=初级生命胶囊
item.npcdbc:mega_healthcapsule.name=中级生命胶囊
item.npcdbc:giga_healthcapsule.name=高级生命胶囊
@@ -422,3 +449,20 @@ item.npcdbc:fruitofmight.name=精神树果实
item.npcdbc:one_potara.name=波塔拉耳环
item.npcdbc:two_potara.name=波塔拉耳环[金]
item.npcdbc:three_potara.name=波塔拉耳环[豪华]
+
+effect.healthregeneration=生命回复
+effect.exhausted=疲惫
+effect.darkness=黑暗
+effect.chocolated=有点吃不下
+effect.bloated=吃不下了
+effect.fruitofmight=精神树果实
+effect.humanspirit=人类精神
+effect.meditation=冥想
+effect.namekianregeneration=那美克星人再生
+effect.overpower=压倒
+effect.potara=波塔拉
+effect.kiregeneration=气回复
+effect.staminaregeneration=耐力回复
+effect.zenkai=濒死复活强化
+
+stats.ki=气
diff --git a/src/main/resources/assets/npcdbc/textures/gui/icons.png b/src/main/resources/assets/npcdbc/textures/gui/icons.png
index c3e1ed836..fa95bc836 100644
Binary files a/src/main/resources/assets/npcdbc/textures/gui/icons.png and b/src/main/resources/assets/npcdbc/textures/gui/icons.png differ