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 + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface IDBCEffectHandler

+
+
+
+
    +
  • +
    +
    public interface IDBCEffectHandler
    +
    Interface for handling custom effects within the NPCDBC mod. +

    + Provides methods to check, apply, remove, and clear effects on players. + This includes managing effect duration, levels, and verifying the existence + of specific effects. +

    +
  • +
+
+
+
    +
  • + +
    +
      +
    • + + +

      Method Summary

      + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      All Methods Instance Methods Abstract Methods 
      Modifier and TypeMethodDescription
      voidapplyEffect​(IPlayer player, + int id) +
      Applies the effect with the specified ID to the given player using default duration and level.
      +
      voidapplyEffect​(IPlayer player, + int id, + int duration) +
      Applies the effect with the specified ID to the given player with a custom duration.
      +
      voidapplyEffect​(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.
      +
      voidclearDBCEffects​(IPlayer player) +
      Clears all effects managed by the NPCDBC effect handler from the specified player.
      +
      intgetEffectDuration​(IPlayer player, + int id) +
      Retrieves the remaining duration of the effect with the specified ID for the given IPlayer.
      +
      intgetEffectLevel​(IPlayer player, + int id) +
      Retrieves the level of the effect with the specified ID for the given IPlayer.
      +
      booleanhasEffect​(IPlayer player, + int id) +
      Checks if the specified player currently has the effect with the given ID.
      +
      voidremoveEffect​(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
        +
        +
      • +
      + + + +
        +
      • +

        clearDBCEffects

        +
        void clearDBCEffects​(IPlayer player)
        +
        Clears all effects managed by the NPCDBC effect handler from the specified player.
        +
        +
        Parameters:
        +
        player - the player from which to clear all effects
        +
        +
      • +
      + + + +
        +
      • +

        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
        +
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + 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 + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface IDBCEvent.SenzuUsedEvent

+
+
+
+ +
+
+ +
+
+
+ + + + 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 + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface IAdvancedFormStat

+
+
+
+
    +
  • +
    +
    public interface IAdvancedFormStat
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + +
        +
      • +

        isEnabled

        +
        boolean isEnabled()
        +
      • +
      + + + +
        +
      • +

        setEnabled

        +
        void setEnabled​(boolean enabled)
        +
      • +
      + + + +
        +
      • +

        getBonus

        +
        int getBonus()
        +
      • +
      + + + +
        +
      • +

        setBonus

        +
        void setBonus​(int bonus)
        +
      • +
      + + + +
        +
      • +

        getMultiplier

        +
        float getMultiplier()
        +
      • +
      + + + +
        +
      • +

        setMultiplier

        +
        void setMultiplier​(float multiplier)
        +
      • +
      +
    • +
    +
    +
  • +
+
+
+
+ + + + 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 + + + + + + + + + + + + + + + +
+ +
+ +
+
+ +

Interface IFormAdvanced

+
+
+
+
    +
  • +
    +
    public interface IFormAdvanced
    +
  • +
+
+
+ +
+
+
    +
  • + +
    +
      +
    • + + +

      Method Detail

      + + + + + + + +
        +
      • +

        setStatEnabled

        +
        void setStatEnabled​(int id,
        +                    boolean enabled)
        +
      • +
      + + + +
        +
      • +

        isStatEnabled

        +
        boolean isStatEnabled​(int id)
        +
      • +
      + + + +
        +
      • +

        setStatBonus

        +
        void setStatBonus​(int id,
        +                  int bonus)
        +
      • +
      + + + +
        +
      • +

        getStatBonus

        +
        int getStatBonus​(int id)
        +
      • +
      + + + +
        +
      • +

        setStatMulti

        +
        void setStatMulti​(int id,
        +                  float multiplier)
        +
      • +
      + + + +
        +
      • +

        getStatMulti

        +
        float getStatMulti​(int id)
        +
      • +
      + + + + +
    • +
    +
    +
  • +
+
+
+
+ + + + 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