diff --git a/src/api b/src/api index 18d72cc96..3593a09d1 160000 --- a/src/api +++ b/src/api @@ -1 +1 @@ -Subproject commit 18d72cc96c60518f6b6ca99e99a5b2ced025efad +Subproject commit 3593a09d1d22e04c3ba112a62b63eeff344d60a1 diff --git a/src/main/java/noppes/npcs/DataStats.java b/src/main/java/noppes/npcs/DataStats.java index e1c8acb5f..071e34aeb 100644 --- a/src/main/java/noppes/npcs/DataStats.java +++ b/src/main/java/noppes/npcs/DataStats.java @@ -2,12 +2,16 @@ package noppes.npcs; import net.minecraft.entity.EnumCreatureAttribute; import net.minecraft.entity.SharedMonsterAttributes; -import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.*; import noppes.npcs.constants.EnumParticleType; import noppes.npcs.constants.EnumPotionType; +import noppes.npcs.controllers.data.MagicData; import noppes.npcs.entity.EntityNPCInterface; import noppes.npcs.util.ValueUtil; +import java.util.HashSet; +import java.util.UUID; + public class DataStats { private float attackStrength = 5; @@ -27,6 +31,7 @@ public class DataStats { public boolean playerSetCanDespawn = false; public Resistances resistances = new Resistances(); + public MagicData magicData = new MagicData(); public boolean ignoreCobweb = false; public boolean immuneToFire = false; @@ -119,75 +124,79 @@ public class DataStats { compound.setBoolean("PlayerSetCanDespawn", playerSetCanDespawn); compound.setInteger("CollidesWith",collidesWith); + magicData.writeToNBT(compound); + return compound; } public void readToNBT(NBTTagCompound compound) { - resistances.readToNBT(compound.getCompoundTag("Resistances")); - setMaxHealth(compound.getDouble("MaxHealth")); - hideKilledBody = compound.getBoolean("HideBodyWhenKilled"); - aggroRange = compound.getInteger("AggroRange"); - respawnTime = compound.getInteger("RespawnTime"); - spawnCycle = compound.getInteger("SpawnCycle"); - creatureType = EnumCreatureAttribute.values()[compound.getInteger("CreatureType") % EnumPotionType.values().length]; - ignoreCobweb = compound.getBoolean("IgnoreCobweb"); - healthRegen = compound.getFloat("HealthRegen"); - combatRegen = compound.getFloat("CombatRegen"); + resistances.readToNBT(compound.getCompoundTag("Resistances")); + setMaxHealth(compound.getDouble("MaxHealth")); + hideKilledBody = compound.getBoolean("HideBodyWhenKilled"); + aggroRange = compound.getInteger("AggroRange"); + respawnTime = compound.getInteger("RespawnTime"); + spawnCycle = compound.getInteger("SpawnCycle"); + creatureType = EnumCreatureAttribute.values()[compound.getInteger("CreatureType") % EnumPotionType.values().length]; + ignoreCobweb = compound.getBoolean("IgnoreCobweb"); + healthRegen = compound.getFloat("HealthRegen"); + combatRegen = compound.getFloat("CombatRegen"); - setAttackStrength(compound.getFloat("AttackStrenght")); - attackSpeed = compound.getInteger("AttackSpeed"); - swingWarmUp = ValueUtil.clamp(compound.getInteger("SwingWarmup"), 0, 1000); - attackRange = compound.getInteger("AttackRange"); - knockback = compound.getInteger("KnockBack"); - potionType = EnumPotionType.values()[compound.getInteger("PotionEffect") % EnumPotionType.values().length]; - potionDuration = compound.getInteger("PotionDuration"); - potionAmp = compound.getInteger("PotionAmp"); + setAttackStrength(compound.getFloat("AttackStrenght")); + attackSpeed = compound.getInteger("AttackSpeed"); + swingWarmUp = ValueUtil.clamp(compound.getInteger("SwingWarmup"), 0, 1000); + attackRange = compound.getInteger("AttackRange"); + knockback = compound.getInteger("KnockBack"); + potionType = EnumPotionType.values()[compound.getInteger("PotionEffect") % EnumPotionType.values().length]; + potionDuration = compound.getInteger("PotionDuration"); + potionAmp = compound.getInteger("PotionAmp"); - rangedRange = compound.getInteger("MaxFiringRange"); - fireRate = compound.getInteger("FireRate"); - minDelay = ValueUtil.clamp(compound.getInteger("minDelay"), 1, 9999); - maxDelay = ValueUtil.clamp(compound.getInteger("maxDelay"), 1, 9999); - burstCount = compound.getInteger("BurstCount"); - shotCount = ValueUtil.clamp(compound.getInteger("ShotCount"), 1, 10); - accuracy = compound.getInteger("Accuracy"); + rangedRange = compound.getInteger("MaxFiringRange"); + fireRate = compound.getInteger("FireRate"); + minDelay = ValueUtil.clamp(compound.getInteger("minDelay"), 1, 9999); + maxDelay = ValueUtil.clamp(compound.getInteger("maxDelay"), 1, 9999); + burstCount = compound.getInteger("BurstCount"); + shotCount = ValueUtil.clamp(compound.getInteger("ShotCount"), 1, 10); + accuracy = compound.getInteger("Accuracy"); - pDamage = compound.getFloat("pDamage"); - pImpact = compound.getInteger("pImpact"); - pSize = compound.getInteger("pSize"); - pSpeed = compound.getInteger("pSpeed"); - pArea = compound.getInteger("pArea"); - pDur = compound.getInteger("pDur"); - pPhysics = compound.getBoolean("pPhysics"); - pXlr8 = compound.getBoolean("pXlr8"); - pGlows = compound.getBoolean("pGlows"); - pExplode = compound.getBoolean("pExplode"); - pRender3D = compound.getBoolean("pRender3D"); - pSpin = compound.getBoolean("pSpin"); - pStick = compound.getBoolean("pStick"); - pEffect = EnumPotionType.values()[compound.getInteger("pEffect") % EnumPotionType.values().length]; - pTrail = EnumParticleType.values()[compound.getInteger("pTrail") % EnumParticleType.values().length]; - pEffAmp = compound.getInteger("pEffAmp"); - fireSound = compound.getString("FiringSound"); - aimWhileShooting = compound.getBoolean("AimWhileShooting"); - projectilesKeepTerrain = compound.getBoolean("ProjectilesKeepTerrain"); + pDamage = compound.getFloat("pDamage"); + pImpact = compound.getInteger("pImpact"); + pSize = compound.getInteger("pSize"); + pSpeed = compound.getInteger("pSpeed"); + pArea = compound.getInteger("pArea"); + pDur = compound.getInteger("pDur"); + pPhysics = compound.getBoolean("pPhysics"); + pXlr8 = compound.getBoolean("pXlr8"); + pGlows = compound.getBoolean("pGlows"); + pExplode = compound.getBoolean("pExplode"); + pRender3D = compound.getBoolean("pRender3D"); + pSpin = compound.getBoolean("pSpin"); + pStick = compound.getBoolean("pStick"); + pEffect = EnumPotionType.values()[compound.getInteger("pEffect") % EnumPotionType.values().length]; + pTrail = EnumParticleType.values()[compound.getInteger("pTrail") % EnumParticleType.values().length]; + pEffAmp = compound.getInteger("pEffAmp"); + fireSound = compound.getString("FiringSound"); + aimWhileShooting = compound.getBoolean("AimWhileShooting"); + projectilesKeepTerrain = compound.getBoolean("ProjectilesKeepTerrain"); - immuneToFire = compound.getBoolean("ImmuneToFire"); - potionImmune = compound.getBoolean("PotionImmune"); - drowningType = compound.getInteger("DrowningType"); + immuneToFire = compound.getBoolean("ImmuneToFire"); + potionImmune = compound.getBoolean("PotionImmune"); + drowningType = compound.getInteger("DrowningType"); - burnInSun = compound.getBoolean("BurnInSun"); - noFallDamage = compound.getBoolean("NoFallDamage"); - attackInvisible = compound.getBoolean("AttackInvisible"); - canDespawn = compound.getBoolean("CanDespawn"); - playerSetCanDespawn = compound.getBoolean("PlayerSetCanDespawn"); + burnInSun = compound.getBoolean("BurnInSun"); + noFallDamage = compound.getBoolean("NoFallDamage"); + attackInvisible = compound.getBoolean("AttackInvisible"); + canDespawn = compound.getBoolean("CanDespawn"); + playerSetCanDespawn = compound.getBoolean("PlayerSetCanDespawn"); + magicData.readToNBT(compound); - npc.setImmuneToFire(immuneToFire); + npc.setImmuneToFire(immuneToFire); - if(compound.hasKey("CollidesWith")) + if (compound.hasKey("CollidesWith")) collidesWith = compound.getInteger("CollidesWith"); else collidesWith = 1; - } + } + public float getAttackStrength(){ return attackStrength; diff --git a/src/main/java/noppes/npcs/controllers/data/MagicData.java b/src/main/java/noppes/npcs/controllers/data/MagicData.java new file mode 100644 index 000000000..5cd46da42 --- /dev/null +++ b/src/main/java/noppes/npcs/controllers/data/MagicData.java @@ -0,0 +1,79 @@ +package noppes.npcs.controllers.data; + +import net.minecraft.nbt.NBTTagCompound; +import noppes.npcs.api.handler.data.IMagicData; + +import java.util.HashMap; + +public class MagicData implements IMagicData { + private HashMap magics = new HashMap<>(); + + public void writeToNBT(NBTTagCompound compound) { + NBTTagCompound magicData = new NBTTagCompound(); + for (int key : magics.keySet()) { + magicData.setTag(String.valueOf(key), magics.get(key).writeToNBT()); + } + compound.setTag("MagicData", magicData); + } + + public void readToNBT(NBTTagCompound compound) { + NBTTagCompound magicData = compound.getCompoundTag("MagicData"); + magics.clear(); + if(magicData == null) + return; + for (Object key : magicData.func_150296_c()) { + int i = Integer.parseInt((String) key); + MagicEntry entry = new MagicEntry(); + entry.readToNBT(magicData.getCompoundTag((String) key)); + magics.put(i, entry); + } + } + + public MagicEntry getMagic(int id) { + return magics.get(id); + } + + @Override + public void removeMagic(int id) { + magics.remove(id); + } + + @Override + public boolean hasMagic(int id) { + return magics.containsKey(id); + } + + public HashMap getMagics() { + return magics; + } + + @Override + public void clear() { + magics.clear(); + } + + @Override + public boolean isEmpty() { + return magics.isEmpty(); + } + + @Override + public void addMagic(int id, float damage, float split) { + MagicEntry entry = new MagicEntry(); + entry.damage = damage; + entry.split = split; + magics.put(id, entry); + } + + @Override + public float getMagicDamage(int id) { + MagicEntry entry = magics.get(id); + return entry == null ? 0 : entry.damage; + } + + @Override + public float getMagicSplit(int id) { + MagicEntry entry = magics.get(id); + return entry == null ? 0 : entry.split; + } +} diff --git a/src/main/java/noppes/npcs/controllers/data/MagicEntry.java b/src/main/java/noppes/npcs/controllers/data/MagicEntry.java new file mode 100644 index 000000000..ec216256d --- /dev/null +++ b/src/main/java/noppes/npcs/controllers/data/MagicEntry.java @@ -0,0 +1,20 @@ +package noppes.npcs.controllers.data; + +import net.minecraft.nbt.NBTTagCompound; + +public class MagicEntry { + public float damage; + public float split; + + public NBTTagCompound writeToNBT() { + NBTTagCompound compound = new NBTTagCompound(); + compound.setFloat("Dmg", damage); + compound.setFloat("Split", split); + return compound; + } + + public void readToNBT(NBTTagCompound compound) { + damage = compound.getFloat("Dmg"); + split = compound.getFloat("Split"); + } +} diff --git a/src/main/java/noppes/npcs/controllers/data/PlayerData.java b/src/main/java/noppes/npcs/controllers/data/PlayerData.java index 233296e33..cdce29272 100644 --- a/src/main/java/noppes/npcs/controllers/data/PlayerData.java +++ b/src/main/java/noppes/npcs/controllers/data/PlayerData.java @@ -49,6 +49,7 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { public PlayerEffectData effectData = new PlayerEffectData(this); public DataTimers timers = new DataTimers(this); public DataSkinOverlays skinOverlays = new DataSkinOverlays(this); + public MagicData magicData = new MagicData(); public EntityNPCInterface editingNpc; public NBTTagCompound cloned; @@ -115,6 +116,7 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { skinOverlays.readFromNBT(data); animationData.readFromNBT(data); effectData.readFromNBT(data); + magicData.readToNBT(data); if(player != null){ playername = player.getCommandSenderName(); @@ -156,6 +158,7 @@ public class PlayerData implements IExtendedEntityProperties, IPlayerData { skinOverlays.writeToNBT(compound); animationData.writeToNBT(compound); effectData.writeToNBT(compound); + magicData.writeToNBT(compound); compound.setString("PlayerName", playername); compound.setString("UUID", uuid); diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java b/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java index d96bde350..a64c626c4 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptNpc.java @@ -11,10 +11,7 @@ import noppes.npcs.api.entity.IPlayer; import noppes.npcs.api.entity.data.IModelData; import noppes.npcs.api.handler.IActionManager; import noppes.npcs.api.handler.IOverlayHandler; -import noppes.npcs.api.handler.data.IAnimationData; -import noppes.npcs.api.handler.data.IDialog; -import noppes.npcs.api.handler.data.IFaction; -import noppes.npcs.api.handler.data.ILines; +import noppes.npcs.api.handler.data.*; import noppes.npcs.api.item.IItemStack; import noppes.npcs.api.jobs.IJob; import noppes.npcs.api.roles.IRole; @@ -1381,8 +1378,11 @@ public class ScriptNpc extends ScriptLiving imp public void updateAI() { this.npc.updateTasks(); } - @Override public IActionManager getActionManager() { return npc.actionManager; } + + public IMagicData getMagicData() { + return npc.stats.magicData; + } } diff --git a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java index 485e9cc21..f9ee9e999 100644 --- a/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java +++ b/src/main/java/noppes/npcs/scripted/entity/ScriptPlayer.java @@ -1,6 +1,5 @@ package noppes.npcs.scripted.entity; -import kamkeel.npcs.controllers.ProfileController; import kamkeel.npcs.network.PacketHandler; import kamkeel.npcs.network.packets.data.AchievementPacket; import kamkeel.npcs.network.packets.data.ChatAlertPacket; @@ -28,17 +27,11 @@ import noppes.npcs.api.entity.IEntity; import noppes.npcs.api.entity.IPlayer; import noppes.npcs.api.gui.ICustomGui; import noppes.npcs.api.handler.IOverlayHandler; -import noppes.npcs.api.handler.data.IAnimationData; -import noppes.npcs.api.handler.data.IDialog; -import noppes.npcs.api.handler.data.IQuest; -import noppes.npcs.api.handler.data.ISound; +import noppes.npcs.api.handler.data.*; import noppes.npcs.api.item.IItemStack; import noppes.npcs.api.overlay.ICustomOverlay; import noppes.npcs.compat.PixelmonHelper; -import noppes.npcs.config.ConfigMain; import noppes.npcs.config.ConfigScript; -import noppes.npcs.constants.EnumProfileSync; -import noppes.npcs.constants.EnumQuestRepeat; import noppes.npcs.constants.EnumQuestType; import noppes.npcs.containers.ContainerCustomGui; import noppes.npcs.controllers.*; @@ -805,4 +798,8 @@ public class ScriptPlayer extends ScriptLivingBase public boolean conqueredEnd() { return this.player.playerConqueredTheEnd; } + + public IMagicData getMagicData() { + return this.getData().magicData; + } }