summaryrefslogtreecommitdiff
path: root/src/main/java/fyresmodjam/EntityLevelStat.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/fyresmodjam/EntityLevelStat.java')
-rw-r--r--src/main/java/fyresmodjam/EntityLevelStat.java183
1 files changed, 183 insertions, 0 deletions
diff --git a/src/main/java/fyresmodjam/EntityLevelStat.java b/src/main/java/fyresmodjam/EntityLevelStat.java
new file mode 100644
index 0000000..ee2d72e
--- /dev/null
+++ b/src/main/java/fyresmodjam/EntityLevelStat.java
@@ -0,0 +1,183 @@
+package fyresmodjam;
+
+import java.util.Random;
+
+import fyresmodjam.blessings.BlessingUtils;
+import fyresmodjam.misc.EntityStat;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLiving;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.SharedMonsterAttributes;
+import net.minecraft.entity.monster.EntityCreeper;
+
+public final class EntityLevelStat extends EntityStat {
+ public EntityLevelStat(String name, String value) {
+ super(name, value);
+ }
+
+ @Override
+ public Object getNewValue(Random r) {
+ for (int i = 1;; i++) {
+ if (ModjamMod.r.nextInt(
+ 5 * (Math.max(1, i / 5))) < 3) {
+ return i;
+ }
+ }
+ }
+
+ @Override
+ public String getAlteredEntityName(EntityLiving entity) {
+ int level = 1;
+
+ try {
+ level = Integer.parseInt(entity.getEntityData()
+ .getString(name));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ String baseName = "";
+
+ if (BlessingUtils.hasDisadvantage("Organized Foes")) {
+ baseName += "Level " + level + " ";
+
+ switch (level) {
+ case 2:
+ baseName = "Private";
+ break;
+ case 3:
+ baseName = "Corporal";
+ break;
+ case 4:
+ baseName = "Sergeant";
+ break;
+ case 5:
+ baseName = "Lieutenant";
+ break;
+ case 6:
+ baseName = "Captain";
+ break;
+ case 7:
+ baseName = "Major";
+ break;
+ case 8:
+ baseName = "Colonel";
+ break;
+ case 9:
+ baseName = "General";
+ default:
+ if (level > 9) {
+ baseName = "Field Marshal";
+ } else {
+ baseName = "Unelisted";
+ }
+ }
+
+ if (!baseName.equals("Unelisted")) {
+ baseName += " ";
+ }
+
+ baseName += entity.getName();
+ } else {
+ baseName = (level == 5 ? "\u00A7c" : "")
+ + entity.getName() + ", Level "
+ + level;
+ }
+
+ return baseName;
+ }
+
+ @Override
+ public void modifyEntity(Entity entity) {
+ int level = 1;
+
+ try {
+ level = Integer.parseInt(entity.getEntityData()
+ .getString(name));
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ int healthGain = calculateMobHealthGain(entity, level);
+
+ if (healthGain != 0) {
+ ((EntityLivingBase) entity).getEntityAttribute(
+ SharedMonsterAttributes.MAX_HEALTH)
+ .setBaseValue(((EntityLivingBase) entity)
+ .getMaxHealth()
+ + healthGain);
+ ((EntityLivingBase) entity).setHealth(
+ ((EntityLivingBase) entity)
+ .getMaxHealth()
+ + healthGain);
+ }
+
+ if (level >= 5) {
+ blessMob(entity);
+ } else if (BlessingUtils.hasDisadvantage("Diabolic")
+ && ModjamMod.r.nextInt(20) == 0) {
+ blessMob(entity);
+ }
+
+ if (BlessingUtils.hasDisadvantage("Organized Mobs")) {
+ equipMob((EntityLivingBase) entity, level);
+ }
+ }
+
+ private void equipMob(EntityLivingBase entity, int level) {
+ if (level < 2) {
+ return;
+ }
+
+ float regionalDifficulty = entity.world
+ .getDifficultyForLocation(
+ entity.getPosition()).getClampedAdditionalDifficulty();
+
+ int adjustedDifficulty = (int) Math
+ .ceil(level + regionalDifficulty);
+
+ if (ModjamMod.r.nextInt(10) == 0
+ || adjustedDifficulty > 5) {
+ }
+
+ // TODO actually implement this
+ }
+
+ private int calculateMobHealthGain(Entity entity, int level) {
+ int levelBase = level - 1;
+ float adjustedMaxHealth = ((EntityLivingBase) entity)
+ .getMaxHealth() / 4;
+
+ float bonusLevel5Health;
+
+ if (level >= 5) {
+ bonusLevel5Health = ((EntityLivingBase) entity)
+ .getMaxHealth() / 4;
+
+ bonusLevel5Health *= Math.max(1, level / 5);
+ } else {
+ bonusLevel5Health = 0;
+ }
+
+ return (int) ((levelBase * adjustedMaxHealth)
+ + bonusLevel5Health);
+ }
+
+ private void blessMob(Entity entity) {
+ String chosenBlessing = BlessingUtils.getMobBlessing();
+
+ entity.getEntityData().setString("Blessing",
+ chosenBlessing);
+
+ BlessingUtils.getBlessingInstance(chosenBlessing)
+ .correctBlessing(entity);
+
+ if (entity instanceof EntityCreeper) {
+ // TODO is it fine to comment this out?
+ //((EntityCreeper) entity).getDataWatcher()
+ // .updateObject(17, (byte) 1);
+ ((EntityCreeper) entity).getEntityData()
+ .setBoolean("powered", true);
+ }
+ }
+} \ No newline at end of file