diff --git a/src/main/java/noppes/npcs/CustomNpcs.java b/src/main/java/noppes/npcs/CustomNpcs.java index 538d3c2b5..23a74edf5 100644 --- a/src/main/java/noppes/npcs/CustomNpcs.java +++ b/src/main/java/noppes/npcs/CustomNpcs.java @@ -22,6 +22,7 @@ import net.minecraft.server.MinecraftServer; import net.minecraftforge.common.ForgeChunkManager; import net.minecraftforge.common.MinecraftForge; import nikedemos.markovnames.generators.*; +import noppes.npcs.compat.PixelmonHelper; import noppes.npcs.config.ConfigMain; import noppes.npcs.config.LoadConfiguration; import noppes.npcs.config.legacy.LegacyConfig; diff --git a/src/main/java/noppes/npcs/ScriptForgeEventHandler.java b/src/main/java/noppes/npcs/ScriptForgeEventHandler.java index 66959942d..163fb25ea 100644 --- a/src/main/java/noppes/npcs/ScriptForgeEventHandler.java +++ b/src/main/java/noppes/npcs/ScriptForgeEventHandler.java @@ -17,7 +17,7 @@ import net.minecraftforge.event.world.ChunkDataEvent; import net.minecraftforge.event.world.ChunkEvent; import net.minecraftforge.event.world.ChunkWatchEvent; import net.minecraftforge.event.world.WorldEvent; -import noppes.npcs.controllers.PixelmonHelper; +import noppes.npcs.compat.PixelmonHelper; import noppes.npcs.controllers.ScriptController; import noppes.npcs.scripted.event.ForgeEvent; diff --git a/src/main/java/noppes/npcs/ai/selector/NPCAttackSelector.java b/src/main/java/noppes/npcs/ai/selector/NPCAttackSelector.java index 3fbfe3c8c..22f9dc6ac 100644 --- a/src/main/java/noppes/npcs/ai/selector/NPCAttackSelector.java +++ b/src/main/java/noppes/npcs/ai/selector/NPCAttackSelector.java @@ -10,7 +10,7 @@ import noppes.npcs.constants.EnumCompanionJobs; import noppes.npcs.constants.EnumJobType; import noppes.npcs.constants.EnumMovingType; import noppes.npcs.constants.EnumRoleType; -import noppes.npcs.controllers.PixelmonHelper; +import noppes.npcs.compat.PixelmonHelper; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.roles.JobGuard; import noppes.npcs.roles.RoleCompanion; diff --git a/src/main/java/noppes/npcs/client/gui/model/GuiCreationScreen.java b/src/main/java/noppes/npcs/client/gui/model/GuiCreationScreen.java index c4575bfa2..866b1e84e 100644 --- a/src/main/java/noppes/npcs/client/gui/model/GuiCreationScreen.java +++ b/src/main/java/noppes/npcs/client/gui/model/GuiCreationScreen.java @@ -16,7 +16,7 @@ import net.minecraft.world.World; import noppes.npcs.client.Client; import noppes.npcs.client.gui.util.*; import noppes.npcs.constants.EnumPacketServer; -import noppes.npcs.controllers.PixelmonHelper; +import noppes.npcs.compat.PixelmonHelper; import noppes.npcs.entity.*; import java.lang.reflect.Method; diff --git a/src/main/java/noppes/npcs/client/renderer/RenderCustomNpc.java b/src/main/java/noppes/npcs/client/renderer/RenderCustomNpc.java index ce98937ee..1734506af 100644 --- a/src/main/java/noppes/npcs/client/renderer/RenderCustomNpc.java +++ b/src/main/java/noppes/npcs/client/renderer/RenderCustomNpc.java @@ -9,7 +9,7 @@ import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import noppes.npcs.client.model.ModelMPM; import noppes.npcs.client.model.util.ModelRenderPassHelper; -import noppes.npcs.controllers.PixelmonHelper; +import noppes.npcs.compat.PixelmonHelper; import noppes.npcs.entity.EntityCustomNpc; import noppes.npcs.entity.EntityNPCInterface; import org.lwjgl.opengl.GL11; diff --git a/src/main/java/noppes/npcs/compat/DBCHelper.java b/src/main/java/noppes/npcs/compat/DBCHelper.java new file mode 100644 index 000000000..658c6c341 --- /dev/null +++ b/src/main/java/noppes/npcs/compat/DBCHelper.java @@ -0,0 +1,107 @@ +package noppes.npcs.compat; + +import cpw.mods.fml.common.Loader; +import net.minecraft.client.Minecraft; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.passive.EntityTameable; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.entity.player.EntityPlayerMP; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.util.ChatComponentText; +import net.minecraft.world.World; +import noppes.npcs.LogWriter; +import noppes.npcs.constants.EnumJobType; +import noppes.npcs.entity.EntityNPCInterface; +import noppes.npcs.roles.JobSpawner; +import org.apache.logging.log4j.LogManager; + +import java.lang.reflect.Array; +import java.lang.reflect.Constructor; +import java.lang.reflect.Field; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +public class DBCHelper { + public static boolean Enabled = false; + + private static Method StatusEffectsMethod = null; + private static Method PlyrSkillsMethod = null; + private static Method TransPwrModAtr = null; + private static Method statMethod = null; + + public static void load(){ + Enabled = Loader.isModLoaded("jinryuujrmcore"); + if(!Enabled) + return; + + try{ + Class c = Class.forName("JinRyuu.JRMCore.JRMCoreH"); + StatusEffectsMethod = c.getMethod("StusEfcts",int.class, String.class); + PlyrSkillsMethod = c.getMethod("PlyrSkills", EntityPlayer.class); + TransPwrModAtr = c.getMethod("TransPwrModAtr", int[].class, int.class, int.class, int.class, int.class, String.class, int.class, int.class, boolean.class, boolean.class, boolean.class, boolean.class, int.class, String[].class, boolean.class); + statMethod = c.getMethod("stat", int.class, int.class, int.class, int.class, int.class, float.class); + } + catch(Exception e){ + LogWriter.except(e); + } + + } + + public static boolean StatusEffects(int id, String effect){ + try { + Object returnValue = StatusEffectsMethod.invoke(null, id, effect); + return (Boolean) returnValue; + } catch (Exception e) { + LogManager.getLogger().error("StatusEffects", e); + } + return false; + } + + public static String[] PlayerSkills(EntityPlayer p){ + try { + Object returnValue = PlyrSkillsMethod.invoke(null, p); + if (returnValue instanceof String[]) { + return (String[]) returnValue; // Cast and return the String[] value + } else { + return new String[]{}; + } + } catch (Exception e) { + LogManager.getLogger().error("PlayerSkills", e); + } + + return new String[]{}; + } + + public static int TransPwrMod(int[] currAttributes, int attribute, int st, int st2, int race, String SklX, int currRelease, int arcRel, boolean legendOn, boolean majinOn, boolean mysticOn, boolean uiOn, int powerType, String[] Skls, boolean isFused){ + try { + Object returnValue = TransPwrModAtr.invoke(null, currAttributes, attribute, st, st2, race, SklX, currRelease, arcRel, legendOn, majinOn, mysticOn, uiOn, powerType, Skls, isFused); + if (returnValue instanceof Integer) { + return (int) returnValue; + } else { + return -1; + } + } catch (Exception e) { + LogManager.getLogger().error("TransPwrModAtr", e); + } + + return -1; + } + + public static int StatMethod(int g, int s, int a, int r, int c, float b){ + try { + Object returnValue = statMethod.invoke(null, g, s, a, r, c, b); + if (returnValue instanceof Integer) { + return (int) returnValue; + } else { + return -1; + } + } catch (Exception e) { + LogManager.getLogger().error("statMethod", e); + } + + return -1; + } +} diff --git a/src/main/java/noppes/npcs/controllers/PixelmonHelper.java b/src/main/java/noppes/npcs/compat/PixelmonHelper.java similarity index 99% rename from src/main/java/noppes/npcs/controllers/PixelmonHelper.java rename to src/main/java/noppes/npcs/compat/PixelmonHelper.java index 2037deeee..2a4e996e1 100644 --- a/src/main/java/noppes/npcs/controllers/PixelmonHelper.java +++ b/src/main/java/noppes/npcs/compat/PixelmonHelper.java @@ -1,4 +1,4 @@ -package noppes.npcs.controllers; +package noppes.npcs.compat; import cpw.mods.fml.common.Loader; import net.minecraft.client.Minecraft; diff --git a/src/main/java/noppes/npcs/entity/data/ModelData.java b/src/main/java/noppes/npcs/entity/data/ModelData.java index 6f1c569b2..bd0f13a3c 100644 --- a/src/main/java/noppes/npcs/entity/data/ModelData.java +++ b/src/main/java/noppes/npcs/entity/data/ModelData.java @@ -3,7 +3,7 @@ package noppes.npcs.entity.data; import net.minecraft.entity.EntityLiving; import net.minecraft.entity.EntityLivingBase; import net.minecraft.world.World; -import noppes.npcs.controllers.PixelmonHelper; +import noppes.npcs.compat.PixelmonHelper; import noppes.npcs.entity.EntityNPCInterface; public class ModelData extends ModelDataShared{ diff --git a/src/main/java/noppes/npcs/roles/JobSpawner.java b/src/main/java/noppes/npcs/roles/JobSpawner.java index f88929029..28d3cd5f4 100644 --- a/src/main/java/noppes/npcs/roles/JobSpawner.java +++ b/src/main/java/noppes/npcs/roles/JobSpawner.java @@ -7,7 +7,7 @@ import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.util.MathHelper; import noppes.npcs.NoppesUtilServer; -import noppes.npcs.controllers.PixelmonHelper; +import noppes.npcs.compat.PixelmonHelper; import noppes.npcs.entity.EntityNPCInterface; import org.apache.commons.lang3.RandomStringUtils; diff --git a/src/main/java/noppes/npcs/scripted/NpcAPI.java b/src/main/java/noppes/npcs/scripted/NpcAPI.java index 428ee39dc..f0870dc83 100644 --- a/src/main/java/noppes/npcs/scripted/NpcAPI.java +++ b/src/main/java/noppes/npcs/scripted/NpcAPI.java @@ -45,6 +45,7 @@ import noppes.npcs.api.handler.data.IFramePart; import noppes.npcs.api.handler.data.ISound; import noppes.npcs.api.item.IItemStack; import noppes.npcs.api.overlay.ICustomOverlay; +import noppes.npcs.compat.PixelmonHelper; import noppes.npcs.config.ConfigScript; import noppes.npcs.constants.EnumAnimationPart; import noppes.npcs.containers.ContainerNpcInterface; diff --git a/src/main/java/noppes/npcs/scripted/ScriptPixelmonPlayerData.java b/src/main/java/noppes/npcs/scripted/ScriptPixelmonPlayerData.java index 7077b1b5d..d454598b4 100644 --- a/src/main/java/noppes/npcs/scripted/ScriptPixelmonPlayerData.java +++ b/src/main/java/noppes/npcs/scripted/ScriptPixelmonPlayerData.java @@ -4,7 +4,7 @@ import net.minecraft.entity.passive.EntityTameable; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.api.IPixelmonPlayerData; -import noppes.npcs.controllers.PixelmonHelper; +import noppes.npcs.compat.PixelmonHelper; import noppes.npcs.scripted.entity.ScriptPixelmon; public class ScriptPixelmonPlayerData implements IPixelmonPlayerData { diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptDBCPlayer.java b/src/main/java/noppes/npcs/scripted/entity/ScriptDBCPlayer.java index c7762f77a..6041db97e 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptDBCPlayer.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptDBCPlayer.java @@ -1,11 +1,13 @@ package noppes.npcs.scripted.entity; +import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayerMP; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; import noppes.npcs.api.entity.IDBCPlayer; import noppes.npcs.api.item.IItemStack; +import noppes.npcs.compat.DBCHelper; import noppes.npcs.scripted.CustomNPCsException; import noppes.npcs.scripted.NpcAPI; @@ -786,4 +788,67 @@ public class ScriptDBCPlayer extends ScriptPlayer i } return ""; } + + public int calcDexResistance(int damage, int percentPierce){ + if(!DBCHelper.Enabled){ + return 0; + } + + NBTTagCompound nbt = player.getEntityData().getCompoundTag("PlayerPersisted"); + if(nbt != null){ + byte st = nbt.getByte("jrmcState"); + byte st2 = nbt.getByte("jrmcState2"); + byte rc = nbt.getByte("jrmcRace"); + byte cls = nbt.getByte("jrmcClass"); + String sklx = nbt.getString("jrmcSSltX"); + byte rls = nbt.getByte("jrmcRelease"); + int resrv = nbt.getInteger("jrmcArcRsrv"); + + String statusEffects = nbt.getString("jrmcStatusEff"); + boolean mj = DBCHelper.StatusEffects(12 ,statusEffects); + boolean mc = DBCHelper.StatusEffects(13 ,statusEffects); + boolean lg = DBCHelper.StatusEffects(14 ,statusEffects); + boolean mn = DBCHelper.StatusEffects(19 ,statusEffects); + + byte pwr = nbt.getByte("jrmcPwrtyp"); + String[] ps = DBCHelper.PlayerSkills(player); + boolean c = DBCHelper.StatusEffects(10 ,statusEffects) || DBCHelper.StatusEffects(11 ,statusEffects); + int dex = DBCHelper.TransPwrMod(getStats(player), 1, st, st2, rc, sklx, rls, resrv, lg, mj, mc, mn, pwr, ps, c); + + int def = (int) (DBCHelper.StatMethod(1, 1, dex, rc, cls, 0.0F) * rls * 0.01D * JRMCoreH.weightPerc(1, player)); + + boolean block = ExtendedPlayer.get(player).getBlocking() != 0; + + if (!block) { + def /= (100 / JRMCoreConfig.cStatPasDef); + } + + int dmg = damage - def; + + if (dmg <= 0) { + dmg = (int) (damage * percentPierce); + } + + int hp = nbt.getInteger("jrmcBdy") - (dmg / 2); + + if (hp < 0) { + hp = 0; + } + + nbt.setInteger("jrmcBdy", hp); + } + } + + private int[] getStats(EntityPlayer player) { + NBTTagCompound nbt = player.getEntityData().getCompoundTag("PlayerPersisted"); + int[] stats = new int[6]; + String[] attr = { "jrmcStrI", "jrmcDexI", "jrmcCnsI", "jrmcWilI", "jrmcIntI", "jrmcCncI" }; + + for (int i = 0; i < attr.length; i++) { + stats[i] = nbt.getInteger(attr[i]); + } + + return stats; + } + } \ No newline at end of file diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptPixelmon.java b/src/main/java/noppes/npcs/scripted/entity/ScriptPixelmon.java index a5b4f4c20..7bc01d080 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptPixelmon.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptPixelmon.java @@ -3,7 +3,7 @@ package noppes.npcs.scripted.entity; import net.minecraft.entity.passive.EntityTameable; import net.minecraft.nbt.NBTTagCompound; import noppes.npcs.api.entity.IPixelmon; -import noppes.npcs.controllers.PixelmonHelper; +import noppes.npcs.compat.PixelmonHelper; import noppes.npcs.util.ValueUtil; public class ScriptPixelmon extends ScriptAnimal implements IPixelmon { diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java index 8b379bcf3..f3f3b09b4 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java @@ -25,6 +25,7 @@ import noppes.npcs.api.handler.data.IQuest; import noppes.npcs.api.handler.data.ISound; import noppes.npcs.api.item.IItemStack; import noppes.npcs.api.overlay.ICustomOverlay; +import noppes.npcs.compat.PixelmonHelper; import noppes.npcs.config.ConfigScript; import noppes.npcs.constants.EnumPacketClient; import noppes.npcs.constants.EnumQuestRepeat;