summaryrefslogtreecommitdiff
path: root/src/main/java/fyresmodjam/blessings
diff options
context:
space:
mode:
authorBenjamin Culkin <scorpress@gmail.com>2024-08-12 17:08:54 -0400
committerBenjamin Culkin <scorpress@gmail.com>2024-08-12 17:08:54 -0400
commitb8b41aa5846dae5a9bbf4fee82020f1d9e2b2a48 (patch)
tree9bce3e85926cfb68b3ebbc5d89f13ce10736e32d /src/main/java/fyresmodjam/blessings
Initial commitHEADtrunk
Diffstat (limited to 'src/main/java/fyresmodjam/blessings')
-rw-r--r--src/main/java/fyresmodjam/blessings/Blessing.java119
-rw-r--r--src/main/java/fyresmodjam/blessings/BlessingUtils.java216
-rw-r--r--src/main/java/fyresmodjam/blessings/marks/ArcaneNullityMark.java36
-rw-r--r--src/main/java/fyresmodjam/blessings/marks/BerserkingMark.java28
-rw-r--r--src/main/java/fyresmodjam/blessings/marks/FalseLifeMark.java58
-rw-r--r--src/main/java/fyresmodjam/blessings/marks/GuardingMark.java27
-rw-r--r--src/main/java/fyresmodjam/blessings/marks/HolyLightMark.java32
-rw-r--r--src/main/java/fyresmodjam/blessings/marks/HuntingMark.java37
-rw-r--r--src/main/java/fyresmodjam/blessings/marks/Mark.java15
-rw-r--r--src/main/java/fyresmodjam/blessings/marks/RetaliationMark.java57
-rw-r--r--src/main/java/fyresmodjam/blessings/marks/ScoutingMark.java13
-rw-r--r--src/main/java/fyresmodjam/blessings/marks/VampirismMark.java67
-rw-r--r--src/main/java/fyresmodjam/blessings/marks/WarMark.java28
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/AlchemistBlessing.java16
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/BerserkerBlessing.java50
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/DiverBlessing.java23
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/GuardianBlessing.java23
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/HunterBlessing.java37
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/InfernoBlessing.java55
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/LonerBlessing.java38
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/LooterBlessing.java32
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/LumberjackBlessing.java59
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/MechanicBlessing.java17
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/MinerBlessing.java61
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/NinjaBlessing.java55
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/PaladinBlessing.java27
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/ParatrooperBlessing.java29
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/PorcupineBlessing.java45
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/ScholarBlessing.java29
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/SwampBlessing.java34
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/ThickSkinnedBlessing.java24
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/ThiefBlessing.java29
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/VampireBlessing.java55
-rw-r--r--src/main/java/fyresmodjam/blessings/standard/WarriorBlessing.java39
34 files changed, 1510 insertions, 0 deletions
diff --git a/src/main/java/fyresmodjam/blessings/Blessing.java b/src/main/java/fyresmodjam/blessings/Blessing.java
new file mode 100644
index 0000000..4c5e6a1
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/Blessing.java
@@ -0,0 +1,119 @@
+package fyresmodjam.blessings;
+
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.event.entity.living.LivingDeathEvent;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+import net.minecraftforge.event.entity.player.PlayerEvent;
+import net.minecraftforge.fml.common.gameevent.TickEvent.ServerTickEvent;
+
+/**
+ * Represents a blessing bestowed to a player.
+ *
+ * @author bjculkin
+ */
+public abstract class Blessing {
+ private static int nextOrdinal = 0;
+
+ public final int ordinal;
+
+ protected Blessing() {
+ ordinal = nextOrdinal++;
+ }
+
+ public boolean hasCustomName() {
+ return false;
+ }
+
+ public String customName() {
+ return "Blessing of the " + name();
+ }
+
+ /**
+ * Get the name of this blessing.
+ *
+ * @return The name of this blessing.
+ */
+ public abstract String name();
+
+ /**
+ * Get the description of this blessing.
+ *
+ * @return The description of this blessing.
+ */
+ public abstract String description();
+
+ /**
+ * Modify the player's break speed.
+ *
+ * @param pebsev
+ * The break speed event.
+ */
+ public void checkBreakSpeed(PlayerEvent.BreakSpeed pebsev) {
+ return;
+ }
+
+ /**
+ * Correct inappropriate blessings for mobs.
+ *
+ * @param ent
+ * The mob to correct for.
+ */
+ public void correctBlessing(Entity ent) {
+ return;
+ }
+
+ /**
+ * Do something on every tick.
+ *
+ * @param stev
+ * The tick event
+ */
+ public void commonTick(ServerTickEvent stev, EntityPlayer play) {
+ return;
+ }
+
+ /**
+ * Handle adjusting the damage multiplier for mob knowledge.
+ *
+ * @param lhev
+ * The event being dealt with.
+ *
+ * @param pickedDamageBonus
+ * The base damage bonus for mob knowledge.
+ *
+ * @return
+ * The new damage bonus for mob knowledge
+ */
+ public float adjustMobKnowledgeBonus(LivingHurtEvent lhev, float pickedDamageBonus) {
+ return pickedDamageBonus;
+ }
+
+ /**
+ * Handle adjusting the damage multiplier for weapon knowledge.
+ *
+ * @param lhev
+ * The event being dealt with.
+ *
+ * @param pickedDamageBonus
+ * The base damage bonus for weapon knowledge.
+ *
+ * @return
+ * The new damage bonus for weapon knowledge
+ */
+ public float adjustWeaponKnowledgeBonus(LivingHurtEvent lhev, float pickedDamageBonus) {
+ return pickedDamageBonus;
+ }
+
+ public float onIncomingDamage(LivingHurtEvent lhev, float damageMultiplier) {
+ return damageMultiplier;
+ }
+
+ public float onOutgoingDamage(LivingHurtEvent event, float damageMultiplier) {
+ return damageMultiplier;
+ }
+
+ public void onMobKill(LivingDeathEvent event) {
+ return;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/BlessingUtils.java b/src/main/java/fyresmodjam/blessings/BlessingUtils.java
new file mode 100644
index 0000000..c240a7a
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/BlessingUtils.java
@@ -0,0 +1,216 @@
+package fyresmodjam.blessings;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import fyresmodjam.ModjamMod;
+import fyresmodjam.handlers.CommonTickHandler;
+import fyresmodjam.misc.EntityStatHelper;
+
+import fyresmodjam.blessings.marks.*;
+import fyresmodjam.blessings.standard.*;
+
+import net.minecraft.entity.Entity;
+import net.minecraft.nbt.NBTTagCompound;
+
+public class BlessingUtils {
+ public final static Map<String, Blessing> playerBlessings;
+ public final static Map<String, Blessing> mobBlessings;
+
+ static {
+ playerBlessings = new HashMap<String, Blessing>();
+ mobBlessings = new HashMap<String, Blessing>();
+
+ createStandardBlessings();
+ createMarks();
+ }
+
+ private static void createMarks() {
+ BerserkingMark berserkingMark = new BerserkingMark();
+ FalseLifeMark falseLifeMark = new FalseLifeMark();
+ GuardingMark guardingMark = new GuardingMark();
+ HuntingMark huntingMark = new HuntingMark();
+ ScoutingMark scoutingMark = new ScoutingMark();
+ VampirismMark vampirismMark = new VampirismMark();
+ WarMark warMark = new WarMark();
+
+ addOmniBlessing("MarkBerserking", berserkingMark);
+ addOmniBlessing("MarkFalseLife", falseLifeMark);
+ addOmniBlessing("MarkGuarding", guardingMark);
+ addOmniBlessing("MarkHunting", huntingMark);
+ addOmniBlessing("MarkVampirism", vampirismMark);
+ addOmniBlessing("MarkWar", warMark);
+
+ playerBlessings.put("MarkScouting", scoutingMark);
+ }
+
+ private static void createStandardBlessings() {
+ AlchemistBlessing alchemistBlessing = new AlchemistBlessing();
+ BerserkerBlessing berserkerBlessing = new BerserkerBlessing();
+ GuardianBlessing guardianBlessing = new GuardianBlessing();
+ HunterBlessing hunterBlessing = new HunterBlessing();
+ InfernoBlessing infernoBlessing = new InfernoBlessing();
+ LonerBlessing lonerBlessing = new LonerBlessing();
+ ParatrooperBlessing paratrooperBlessing = new ParatrooperBlessing();
+ PorcupineBlessing porcupineBlessing = new PorcupineBlessing();
+ SwampBlessing swampBlessing = new SwampBlessing();
+ ThickSkinnedBlessing thickSkinnedBlessing = new ThickSkinnedBlessing();
+ VampireBlessing vampireBlessing = new VampireBlessing();
+ WarriorBlessing warriorBlessing = new WarriorBlessing();
+ DiverBlessing diverBlessing = new DiverBlessing();
+ LooterBlessing looterBlessing = new LooterBlessing();
+ LumberjackBlessing lumberjackBlessing = new LumberjackBlessing();
+ MechanicBlessing mechanicBlessing = new MechanicBlessing();
+ MinerBlessing minerBlessing = new MinerBlessing();
+ NinjaBlessing ninjaBlessing = new NinjaBlessing();
+ ScholarBlessing scholarBlessing = new ScholarBlessing();
+ ThiefBlessing thiefBlessing = new ThiefBlessing();
+
+ addOmniBlessing("BlessingWarrior", warriorBlessing);
+ addOmniBlessing("BlessingHunter", hunterBlessing);
+ addOmniBlessing("BlessingSwamp", swampBlessing);
+ addOmniBlessing("BlessingGuardian", guardianBlessing);
+ addOmniBlessing("BlessingVampire", vampireBlessing);
+ addOmniBlessing("BlessingInferno", infernoBlessing);
+ addOmniBlessing("BlessingLoner", lonerBlessing);
+ addOmniBlessing("BlessingParatrooper",
+ paratrooperBlessing);
+ addOmniBlessing("BlessingPorcupine", porcupineBlessing);
+ addOmniBlessing("BlessingThick-Skinned",
+ thickSkinnedBlessing);
+
+ PaladinBlessing paladinBlessing = new PaladinBlessing();
+
+ playerBlessings.put("BlessingAlchemist",
+ alchemistBlessing);
+ playerBlessings.put("BlessingBerserker",
+ berserkerBlessing);
+ playerBlessings.put("BlessingDiver", diverBlessing);
+ playerBlessings.put("BlessingLooter", looterBlessing);
+ playerBlessings.put("BlessingLumberjack",
+ lumberjackBlessing);
+ playerBlessings.put("BlessingMechanic", mechanicBlessing);
+ playerBlessings.put("BlessingMiner", minerBlessing);
+ playerBlessings.put("BlessingNinja", ninjaBlessing);
+ playerBlessings.put("BlessingPaladin", paladinBlessing);
+ playerBlessings.put("BlessingScholar", scholarBlessing);
+ playerBlessings.put("BlessingThief", thiefBlessing);
+ }
+
+ private static void addOmniBlessing(String blessName,
+ Blessing blessInst) {
+ playerBlessings.put(blessName, blessInst);
+ mobBlessings.put(blessName, blessInst);
+ }
+
+ public static boolean hasDisadvantage() {
+ if (CommonTickHandler.worldData != null) {
+ String currentDisadvantage = CommonTickHandler.worldData
+ .getDisadvantage();
+
+ return currentDisadvantage != null
+ && !(currentDisadvantage
+ .equals(""));
+ }
+
+ return false;
+ }
+
+ public static boolean hasDisadvantage(String disadvantage) {
+ if (hasDisadvantage()) {
+ return CommonTickHandler.worldData
+ .getDisadvantage()
+ .equals(disadvantage);
+ }
+
+ return false;
+ }
+
+ public static String getDisadvantage() {
+ return CommonTickHandler.worldData.currentDisadvantage;
+ }
+
+ public static String getBlessing(Entity ent) {
+ return ent.getEntityData().getString("Blessing");
+ }
+
+ public static boolean hasBlessing(Entity ent) {
+ NBTTagCompound entityData = ent.getEntityData();
+
+ return entityData.hasKey("Blessing") && !(entityData
+ .getString("Blessing").equals(""));
+ }
+
+ public static boolean hasBlessing(Entity ent, String blessing) {
+ if (hasBlessing(ent)) {
+ return ent.getEntityData().getString("Blessing")
+ .equals(blessing);
+ }
+
+ return false;
+ }
+
+ public static boolean hasBlessingCounter(Entity ent) {
+ return EntityStatHelper.hasStat(ent, "BlessingCounter");
+ }
+
+ public static int getBlessingCounter(Entity ent) {
+ return Integer.parseInt(EntityStatHelper.getStat(ent,
+ "BlessingCounter"));
+ }
+
+ public static boolean isBlessingActive(Entity ent) {
+ return ent.getEntityData().hasKey("BlessingActive")
+ && ent.getEntityData().getBoolean(
+ "BlessingActive");
+ }
+
+ public static Blessing getBlessingInstance(String blessing) {
+ if (playerBlessings.containsKey(blessing)) {
+ return playerBlessings.get(blessing);
+ } else {
+ System.err.printf(
+ "ERROR: Blessing '%s' not found, using default blessing\n",
+ blessing);
+ return playerBlessings.get("BlessingGuardian");
+ }
+ }
+
+ public static String getPlayerBlessing() {
+ int n = ModjamMod.r.nextInt(playerBlessings.size());
+
+ int i = 0;
+ for (String blessing : playerBlessings.keySet()) {
+ if (i >= n) {
+ return blessing;
+ }
+
+ i += 1;
+ }
+
+ System.err.println(
+ "ERROR: Couldn't get blessing for player; using default.");
+ return "BlessingGuardian";
+ }
+
+ public static String getMobBlessing() {
+ int n = ModjamMod.r.nextInt(mobBlessings.size());
+
+ int i = 0;
+ for (String blessing : mobBlessings.keySet()) {
+ if (i >= n) {
+ return blessing;
+ }
+
+ i += 1;
+ }
+
+ System.err.println(
+ "ERROR: Couldn't get blessing for mob; using default.");
+ return "BlessingGuardian";
+ }
+
+ public static Blessing getBlessingInstance(Entity entity) {
+ return getBlessingInstance(getBlessing(entity));
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/marks/ArcaneNullityMark.java b/src/main/java/fyresmodjam/blessings/marks/ArcaneNullityMark.java
new file mode 100644
index 0000000..3c127df
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/marks/ArcaneNullityMark.java
@@ -0,0 +1,36 @@
+package fyresmodjam.blessings.marks;
+
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class ArcaneNullityMark extends Mark {
+
+ @Override
+ public String name() {
+ return "Arcane Nullity";
+ }
+
+ @Override
+ public String description() {
+ return "BENEFIT - Take no damage from magic\nDRAWBACK - Deal no damage with magic";
+ }
+
+ @Override
+ public float onIncomingDamage(LivingHurtEvent lhev,
+ float damageMultiplier) {
+ if (lhev.getSource().isMagicDamage()) {
+ lhev.setCanceled(true);
+ }
+
+ return damageMultiplier;
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent lhev,
+ float damageMultiplier) {
+ if (lhev.getSource().isMagicDamage()) {
+ lhev.setCanceled(true);
+ }
+
+ return damageMultiplier;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/marks/BerserkingMark.java b/src/main/java/fyresmodjam/blessings/marks/BerserkingMark.java
new file mode 100644
index 0000000..a592175
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/marks/BerserkingMark.java
@@ -0,0 +1,28 @@
+package fyresmodjam.blessings.marks;
+
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class BerserkingMark extends Mark {
+
+ @Override
+ public String name() {
+ return "Berserking";
+ }
+
+ @Override
+ public String description() {
+ return "BENEFIT - Deal greatly increased damage\nDRAWBACK - Take greatly increased damage";
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ return damageMultiplier + .5f;
+ }
+
+ @Override
+ public float onIncomingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ return damageMultiplier + .5f;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/marks/FalseLifeMark.java b/src/main/java/fyresmodjam/blessings/marks/FalseLifeMark.java
new file mode 100644
index 0000000..88f467a
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/marks/FalseLifeMark.java
@@ -0,0 +1,58 @@
+package fyresmodjam.blessings.marks;
+
+import net.minecraft.entity.SharedMonsterAttributes;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class FalseLifeMark extends Mark {
+
+ @Override
+ public String name() {
+ return "False Life";
+ }
+
+ @Override
+ public String description() {
+ return "BENEFIT - Rally from a fatal injury\nDRAWBACK - Lose permanent health to do so";
+ }
+
+ @Override
+ public float onIncomingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ float totalAmount = Math.max(0.5f,
+ event.getAmount() * damageMultiplier);
+
+ if (totalAmount > event.getEntityLiving().getMaxHealth()) {
+ event.setCanceled(true);
+
+ event.getEntityLiving().getEntityAttribute(
+ SharedMonsterAttributes.MAX_HEALTH)
+ .setBaseValue(event.getEntityLiving()
+ .getMaxHealth()
+ / 0.75f);
+
+ event.getEntityLiving().setHealth(
+ event.getEntityLiving().getMaxHealth());
+
+ // TODO figure out potions
+ /*
+ event.getEntityLiving()
+ .addPotionEffect(new PotionEffect(
+ Potion.moveSpeed.id,
+ 30, 1));
+ event.getEntityLiving()
+ .addPotionEffect(new PotionEffect(
+ Potion.resistance.id,
+ 20, 1));
+ event.getEntityLiving()
+ .addPotionEffect(new PotionEffect(
+ Potion.damageBoost.id,
+ 20, 1));
+ */
+ return 0;
+ }
+
+ return damageMultiplier;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/marks/GuardingMark.java b/src/main/java/fyresmodjam/blessings/marks/GuardingMark.java
new file mode 100644
index 0000000..db4fc97
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/marks/GuardingMark.java
@@ -0,0 +1,27 @@
+package fyresmodjam.blessings.marks;
+
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class GuardingMark extends Mark {
+ @Override
+ public String name() {
+ return "Guarding";
+ }
+
+ @Override
+ public String description() {
+ return "BENEFIT - Take less damage\nDRAWBACK - Deal less damage";
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ return damageMultiplier - 1f;
+ }
+
+ @Override
+ public float onIncomingDamage(LivingHurtEvent lhev,
+ float damageMultiplier) {
+ return damageMultiplier - 1f;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/marks/HolyLightMark.java b/src/main/java/fyresmodjam/blessings/marks/HolyLightMark.java
new file mode 100644
index 0000000..96d5bab
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/marks/HolyLightMark.java
@@ -0,0 +1,32 @@
+package fyresmodjam.blessings.marks;
+
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class HolyLightMark extends Mark {
+
+ @Override
+ public String name() {
+ return "Holy Light";
+ }
+
+ @Override
+ public String description() {
+ return "BENEFIT - Deal greatly increased damage to undead\nDRAWBACK - Heal non-undead for a small amount";
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ if (event.getEntityLiving().isEntityUndead()) {
+ return damageMultiplier + .5f;
+ }
+
+ float healed = Math.max(0.5f,
+ (event.getAmount() * damageMultiplier)
+ * 0.25f);
+
+ event.getEntityLiving().heal(healed);
+
+ return damageMultiplier;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/marks/HuntingMark.java b/src/main/java/fyresmodjam/blessings/marks/HuntingMark.java
new file mode 100644
index 0000000..b92ee7b
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/marks/HuntingMark.java
@@ -0,0 +1,37 @@
+package fyresmodjam.blessings.marks;
+
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.IRangedAttackMob;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class HuntingMark extends Mark {
+
+ @Override
+ public String name() {
+ return "Hunting";
+ }
+
+ @Override
+ public String description() {
+ return "BENEFIT - Deal greatly increased damage with projectile weapons\nDRAWBACK - Deal less damage with all other weapons";
+ }
+
+ @Override
+ public void correctBlessing(Entity ent) {
+ if (!(ent instanceof IRangedAttackMob)) {
+ ent.getEntityData().setString("Blessing",
+ "MarkWar");
+ }
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ if (event.getSource().isProjectile()) {
+ return damageMultiplier + 0.4f;
+ }
+
+ return damageMultiplier - 0.2f;
+ }
+
+}
diff --git a/src/main/java/fyresmodjam/blessings/marks/Mark.java b/src/main/java/fyresmodjam/blessings/marks/Mark.java
new file mode 100644
index 0000000..0181fd8
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/marks/Mark.java
@@ -0,0 +1,15 @@
+package fyresmodjam.blessings.marks;
+
+import fyresmodjam.blessings.Blessing;
+
+public abstract class Mark extends Blessing {
+ @Override
+ public boolean hasCustomName() {
+ return true;
+ }
+
+ @Override
+ public String customName() {
+ return "Mark of " + name();
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/marks/RetaliationMark.java b/src/main/java/fyresmodjam/blessings/marks/RetaliationMark.java
new file mode 100644
index 0000000..a0537b2
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/marks/RetaliationMark.java
@@ -0,0 +1,57 @@
+package fyresmodjam.blessings.marks;
+
+import fyresmodjam.ModjamMod;
+import fyresmodjam.misc.DamageSources;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class RetaliationMark extends Mark {
+
+ private static final double RETALIATION_CHANCE = 0.05;
+
+ @Override
+ public String name() {
+ return "Retaliation";
+ }
+
+ @Override
+ public String description() {
+ return "BENEFIT - Have a chance to reflect attacks\nDRAWBACK - Have a chance for your attacks to be reflected";
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ if (!event.getSource().damageType.equals("retaliation")) {
+ // Don't retaliate for retaliation
+ if (ModjamMod.r.nextDouble() < RETALIATION_CHANCE) {
+ event.getEntityLiving().attackEntityFrom(
+ DamageSources.retaliation,
+ Math.max(0.5f, event
+ .getAmount()
+ * damageMultiplier));
+
+ event.setCanceled(true);
+ }
+ }
+
+ return damageMultiplier;
+ }
+
+ @Override
+ public float onIncomingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ if (!event.getSource().damageType.equals("retaliation")) {
+ // Don't retaliate for retaliation
+ if (ModjamMod.r.nextDouble() < RETALIATION_CHANCE) {
+ event.getEntityLiving().attackEntityFrom(
+ DamageSources.retaliation,
+ Math.max(0.5f, event.getAmount()
+ * damageMultiplier));
+
+ event.setCanceled(true);
+ }
+ }
+
+ return damageMultiplier;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/marks/ScoutingMark.java b/src/main/java/fyresmodjam/blessings/marks/ScoutingMark.java
new file mode 100644
index 0000000..1995c14
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/marks/ScoutingMark.java
@@ -0,0 +1,13 @@
+package fyresmodjam.blessings.marks;
+
+public class ScoutingMark extends Mark {
+ @Override
+ public String name() {
+ return "Scouting";
+ }
+
+ @Override
+ public String description() {
+ return "BENEFIT - You can see traps without sneaking\nDRAWBACK - Take increased damage from traps";
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/marks/VampirismMark.java b/src/main/java/fyresmodjam/blessings/marks/VampirismMark.java
new file mode 100644
index 0000000..5aa1da4
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/marks/VampirismMark.java
@@ -0,0 +1,67 @@
+package fyresmodjam.blessings.marks;
+
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+import net.minecraftforge.fml.common.gameevent.TickEvent.ServerTickEvent;
+
+public class VampirismMark extends Mark {
+
+ @Override
+ public String name() {
+ return "Vampirism";
+ }
+
+ @Override
+ public String description() {
+ return "BENEFIT - Heal a substantial amount of the damage done to enemies\nDRAWBACK - Greatly weakened during the day and ignited in direct sunlight";
+ }
+
+ @Override
+ public float onIncomingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ if (event.getEntity().getBrightness() > 0.5F && event
+ .getEntity().world.canBlockSeeSky(event
+ .getEntity()
+ .getPosition())) {
+ return damageMultiplier + 0.4F;
+ }
+
+ return damageMultiplier;
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ Entity trueSource = event.getSource().getTrueSource();
+
+ if (trueSource instanceof EntityLivingBase) {
+ ((EntityLivingBase) trueSource)
+ .heal((event.getAmount()
+ * damageMultiplier)
+ * 0.25F);
+
+ boolean seeTheSky = trueSource.world
+ .canBlockSeeSky(trueSource
+ .getPosition());
+ if (trueSource.getBrightness() > 0.5F
+ && seeTheSky) {
+ return damageMultiplier - 0.4F;
+ }
+ }
+
+ return damageMultiplier;
+ }
+
+ @Override
+ public void commonTick(ServerTickEvent stev, EntityPlayer play) {
+ boolean seeTheSky = play.world
+ .canBlockSeeSky(play.getPosition());
+
+ if (play.getBrightness() > 0.5f && seeTheSky
+ && play.ticksExisted % 20 == 0) {
+ play.setFire(5);
+ }
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/marks/WarMark.java b/src/main/java/fyresmodjam/blessings/marks/WarMark.java
new file mode 100644
index 0000000..e4276c7
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/marks/WarMark.java
@@ -0,0 +1,28 @@
+package fyresmodjam.blessings.marks;
+
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class WarMark extends Mark {
+
+ @Override
+ public String name() {
+ return "War";
+ }
+
+ @Override
+ public String description() {
+ return "BENEFIT - Deal greatly increased damage with melee weapons\nDRAWBACK - Deal less damage with all other weapons";
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ if ((event.getSource().getDamageType().equals("player")
+ || event.getSource().getDamageType()
+ .equals("mob"))) {
+ return damageMultiplier + 0.4f;
+ }
+
+ return damageMultiplier - 0.2f;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/AlchemistBlessing.java b/src/main/java/fyresmodjam/blessings/standard/AlchemistBlessing.java
new file mode 100644
index 0000000..0e36758
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/AlchemistBlessing.java
@@ -0,0 +1,16 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+
+public class AlchemistBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Alchemist";
+ }
+
+ @Override
+ public String description() {
+ return "All mystery potions act like wildcard potions";
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/BerserkerBlessing.java b/src/main/java/fyresmodjam/blessings/standard/BerserkerBlessing.java
new file mode 100644
index 0000000..4e7f784
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/BerserkerBlessing.java
@@ -0,0 +1,50 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import fyresmodjam.blessings.BlessingUtils;
+import fyresmodjam.misc.EntityStatHelper;
+import net.minecraft.entity.Entity;
+import net.minecraftforge.event.entity.living.LivingDeathEvent;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class BerserkerBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Berserker";
+ }
+
+ @Override
+ public String description() {
+ return "@@§ePASSIVE - §oKills are added as berserk charges. (10 max)@@§eACTIVE - §oTurn on/off berserk mode. While berserk mode is active, you do increased damage, and expend a counter every 2 seconds";
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ if (BlessingUtils.isBlessingActive(
+ event.getSource().getTrueSource())) {
+ return damageMultiplier + 0.3f;
+ }
+
+ return damageMultiplier;
+ }
+
+ @Override
+ public void onMobKill(LivingDeathEvent event) {
+ Entity trueSource = event.getSource().getTrueSource();
+
+ if (!EntityStatHelper.hasStat(trueSource,
+ "BlessingCounter")) {
+ EntityStatHelper.giveStat(trueSource,
+ "BlessingCounter", 0);
+ }
+
+ EntityStatHelper.giveStat(trueSource, "BlessingCounter",
+ Math.min(10, Integer.parseInt(
+ EntityStatHelper.getStat(
+ trueSource,
+ "BlessingCounter"))
+ + 1));
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/DiverBlessing.java b/src/main/java/fyresmodjam/blessings/standard/DiverBlessing.java
new file mode 100644
index 0000000..c0b8c72
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/DiverBlessing.java
@@ -0,0 +1,23 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.fml.common.gameevent.TickEvent.ServerTickEvent;
+
+public class DiverBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Diver";
+ }
+
+ @Override
+ public String description() {
+ return "Breathe underwater";
+ }
+
+ @Override
+ public void commonTick(ServerTickEvent stev, EntityPlayer play) {
+ play.setAir(0);
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/GuardianBlessing.java b/src/main/java/fyresmodjam/blessings/standard/GuardianBlessing.java
new file mode 100644
index 0000000..47015dd
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/GuardianBlessing.java
@@ -0,0 +1,23 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class GuardianBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Guardian";
+ }
+
+ @Override
+ public String description() {
+ return "Reduce proportional damage taken";
+ }
+
+ @Override
+ public float onIncomingDamage(LivingHurtEvent lhev,
+ float damageMultiplier) {
+ return damageMultiplier - 0.2f;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/HunterBlessing.java b/src/main/java/fyresmodjam/blessings/standard/HunterBlessing.java
new file mode 100644
index 0000000..bd2892f
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/HunterBlessing.java
@@ -0,0 +1,37 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.IRangedAttackMob;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class HunterBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Hunter";
+ }
+
+ @Override
+ public String description() {
+ return "Increased projectile damage";
+ }
+
+ @Override
+ public void correctBlessing(Entity ent) {
+ if (!(ent instanceof IRangedAttackMob)) {
+ ent.getEntityData().setString("Blessing",
+ "BlessingWarrior");
+ }
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ if (event.getSource().isProjectile()) {
+ return damageMultiplier + 0.2f;
+ }
+
+ return damageMultiplier;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/InfernoBlessing.java b/src/main/java/fyresmodjam/blessings/standard/InfernoBlessing.java
new file mode 100644
index 0000000..40454aa
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/InfernoBlessing.java
@@ -0,0 +1,55 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import fyresmodjam.misc.DamageSources;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+import net.minecraftforge.fml.common.gameevent.TickEvent.ServerTickEvent;
+
+public class InfernoBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Inferno";
+ }
+
+ @Override
+ public String description() {
+ return "Benefit: Take no fire damage, and do increased damage while on fire\nDrawback: Take damge while wet";
+ }
+
+ @Override
+ public void commonTick(ServerTickEvent stev, EntityPlayer play) {
+ if (play.isWet() && play.ticksExisted % 10 == 0) {
+ play.attackEntityFrom(DamageSources.inferno, 1.0F);
+ }
+ }
+
+ @Override
+ public float onIncomingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ if (event.getSource().isFireDamage()
+ || event.getSource().getDamageType()
+ .equals("inFire")
+ || event.getSource().getDamageType()
+ .equals("onFire")
+ || event.getSource().getDamageType()
+ .equals("lava")) {
+ event.setCanceled(true);
+
+ return 0;
+ }
+
+ return damageMultiplier;
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ if (event.getSource().getTrueSource().isBurning()) {
+ return damageMultiplier + 0.35f;
+ }
+
+ return damageMultiplier;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/LonerBlessing.java b/src/main/java/fyresmodjam/blessings/standard/LonerBlessing.java
new file mode 100644
index 0000000..ac52ec5
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/LonerBlessing.java
@@ -0,0 +1,38 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class LonerBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Loner";
+ }
+
+ @Override
+ public String description() {
+ return "Do higher damage the lower your health is";
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ Entity trueSource = event.getSource().getTrueSource();
+
+ if (trueSource instanceof EntityLivingBase) {
+ EntityLivingBase livingSource = (EntityLivingBase) trueSource;
+
+ float healthRatio = livingSource.getHealth()
+ / livingSource.getMaxHealth();
+
+ float scaleFactor = 1.0F - healthRatio;
+
+ return damageMultiplier + 0.35F * scaleFactor;
+ }
+
+ return damageMultiplier;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/LooterBlessing.java b/src/main/java/fyresmodjam/blessings/standard/LooterBlessing.java
new file mode 100644
index 0000000..bbf9ec5
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/LooterBlessing.java
@@ -0,0 +1,32 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.ModjamMod;
+import fyresmodjam.blessings.Blessing;
+import net.minecraftforge.event.entity.living.LivingDeathEvent;
+
+public class LooterBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Looter";
+ }
+
+ @Override
+ public String description() {
+ return "Enemies have a chance to drop dungeon loot";
+ }
+
+ @Override
+ public void onMobKill(LivingDeathEvent event) {
+ if (ModjamMod.r.nextInt(50) == 0) {
+ // TODO figure out how loot gen works
+
+ //if (!event.entity.worldObj.isRemote) {
+ // event.entity.dropItem(ChestGenHooks
+ // .getOneItem(ChestGenHooks.DUNGEON_CHEST,
+ // ModjamMod.r)
+ // .getItem(), 1);
+ //}
+ }
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/LumberjackBlessing.java b/src/main/java/fyresmodjam/blessings/standard/LumberjackBlessing.java
new file mode 100644
index 0000000..6ef337e
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/LumberjackBlessing.java
@@ -0,0 +1,59 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.ItemTool;
+import net.minecraft.util.EnumHand;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+import net.minecraftforge.event.entity.player.PlayerEvent.BreakSpeed;
+
+public class LumberjackBlessing extends Blessing {
+ @Override
+ public String name() {
+ return "Lumberjack";
+ }
+
+ @Override
+ public String description() {
+ return "Increased breaking speed on wooden blocks, and increased damage with axes";
+ }
+
+ @Override
+ public void checkBreakSpeed(BreakSpeed pebsev) {
+ if (pebsev.getState().getMaterial() == Material.WOOD) {
+ pebsev.setNewSpeed(
+ pebsev.getOriginalSpeed() * 1.25F);
+ }
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ ItemStack held = null;
+
+ if (event.getSource()
+ .getTrueSource() instanceof EntityLivingBase) {
+ held = ((EntityLivingBase) event.getSource()
+ .getTrueSource()).getHeldItem(
+ EnumHand.MAIN_HAND);
+ }
+
+ if (held != null && itemIsAxe(held)) {
+ return damageMultiplier + 0.15F;
+ }
+
+ return damageMultiplier;
+ }
+
+ private boolean itemIsAxe(ItemStack held) {
+ if (held.getItem() instanceof ItemTool) {
+ return ((ItemTool) held.getItem())
+ .getToolClasses(held)
+ .contains("axe");
+ }
+
+ return false;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/MechanicBlessing.java b/src/main/java/fyresmodjam/blessings/standard/MechanicBlessing.java
new file mode 100644
index 0000000..b2a80e6
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/MechanicBlessing.java
@@ -0,0 +1,17 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+
+public class MechanicBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Mechanic";
+ }
+
+ @Override
+ public String description() {
+ return "@@§ePASSIVE - §oYou disarm traps more often and have an increased chance to salvage disarmed traps.\n@@§eACTIVE - §oOnce per day, you may disarm and salvage a trap for free";
+ }
+
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/MinerBlessing.java b/src/main/java/fyresmodjam/blessings/standard/MinerBlessing.java
new file mode 100644
index 0000000..f261faa
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/MinerBlessing.java
@@ -0,0 +1,61 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import net.minecraft.block.material.Material;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.item.ItemStack;
+import net.minecraft.item.ItemTool;
+import net.minecraft.util.EnumHand;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+import net.minecraftforge.event.entity.player.PlayerEvent.BreakSpeed;
+
+public class MinerBlessing extends Blessing {
+ @Override
+ public String name() {
+ return "Miner";
+ }
+
+ @Override
+ public String description() {
+ return "Increased breaking speed on stone and iron blocks, and increased damage with pickaxes";
+ }
+
+ @Override
+ public void checkBreakSpeed(BreakSpeed pebsev) {
+ if (pebsev.getState().getMaterial() == Material.ROCK
+ || pebsev.getState()
+ .getMaterial() == Material.IRON) {
+ pebsev.setNewSpeed(
+ pebsev.getOriginalSpeed() * 1.25F);
+ }
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ ItemStack held = null;
+
+ if (event.getSource()
+ .getTrueSource() instanceof EntityLivingBase) {
+ held = ((EntityLivingBase) event.getSource()
+ .getTrueSource()).getHeldItem(
+ EnumHand.MAIN_HAND);
+ }
+
+ if (held != null && itemIsPickaxe(held)) {
+ return damageMultiplier + 0.2F;
+ }
+
+ return damageMultiplier;
+ }
+
+ private boolean itemIsPickaxe(ItemStack held) {
+ if (held.getItem() instanceof ItemTool) {
+ return ((ItemTool) held.getItem())
+ .getToolClasses(held)
+ .contains("pickaxe");
+ }
+
+ return false;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/NinjaBlessing.java b/src/main/java/fyresmodjam/blessings/standard/NinjaBlessing.java
new file mode 100644
index 0000000..3883f14
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/NinjaBlessing.java
@@ -0,0 +1,55 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+import net.minecraftforge.fml.common.gameevent.TickEvent.ServerTickEvent;
+
+public class NinjaBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Ninja";
+ }
+
+ @Override
+ public String description() {
+ return "- Go invisible while sneaking\n- Attacks on enemies with full health deal 2x damage";
+ }
+
+ @Override
+ public void commonTick(ServerTickEvent stev, EntityPlayer player) {
+ if (player.isSneaking()) {
+ // TODO figure out potions
+ // PotionEffect e = player.getActivePotionEffect(
+ // Potion.invisibility);
+
+ // if (e == null || player.getActivePotionEffect(
+ // Potion.invisibility)
+ // .getDuration() < 10) {
+ // player.addPotionEffect(new PotionEffect(
+ // Potion.invisibility.id, 10,
+ // 1, false));
+ // }
+ }
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ boolean atMaxHealth = event.getEntityLiving()
+ .getHealth() == event.getEntityLiving()
+ .getMaxHealth();
+
+ if (event.getEntityLiving() != null
+ && event.getSource().getTrueSource()
+ .isSneaking()
+ && atMaxHealth) {
+ return damageMultiplier + 1.0F;
+ }
+
+ return damageMultiplier;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/PaladinBlessing.java b/src/main/java/fyresmodjam/blessings/standard/PaladinBlessing.java
new file mode 100644
index 0000000..9979931
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/PaladinBlessing.java
@@ -0,0 +1,27 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class PaladinBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Paladin";
+ }
+
+ @Override
+ public String description() {
+ return "Deal bonus damage to undead";
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ if (event.getEntityLiving().isEntityUndead()) {
+ return damageMultiplier + .2f;
+ }
+
+ return damageMultiplier;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/ParatrooperBlessing.java b/src/main/java/fyresmodjam/blessings/standard/ParatrooperBlessing.java
new file mode 100644
index 0000000..d777566
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/ParatrooperBlessing.java
@@ -0,0 +1,29 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class ParatrooperBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Paratrooper";
+ }
+
+ @Override
+ public String description() {
+ return "Take no fall damage";
+ }
+
+ @Override
+ public float onIncomingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ if(event.getSource().damageType.equals("fall")) {
+ event.setCanceled(true);
+
+ return 0;
+ }
+
+ return damageMultiplier;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/PorcupineBlessing.java b/src/main/java/fyresmodjam/blessings/standard/PorcupineBlessing.java
new file mode 100644
index 0000000..a46c3d0
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/PorcupineBlessing.java
@@ -0,0 +1,45 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import fyresmodjam.misc.DamageSources;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.util.DamageSource;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class PorcupineBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Porcupine";
+ }
+
+ @Override
+ public String description() {
+ return "Deal retaliation damage to melee attackers";
+ }
+
+ @Override
+ public float onIncomingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ Entity trueSource = event.getSource().getTrueSource();
+
+ boolean isMeleeDamage = event.getSource().damageType
+ .equals("mob")
+ || event.getSource().getDamageType()
+ .equals("player");
+
+ if (trueSource != null
+ && trueSource instanceof EntityLivingBase
+ && !event.getSource().isProjectile()
+ && isMeleeDamage) {
+ DamageSource damage = DamageSources.retaliation;
+
+ ((EntityLivingBase) trueSource)
+ .attackEntityFrom(damage,
+ event.getAmount() * 0.07F);
+ }
+
+ return damageMultiplier;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/ScholarBlessing.java b/src/main/java/fyresmodjam/blessings/standard/ScholarBlessing.java
new file mode 100644
index 0000000..e66726c
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/ScholarBlessing.java
@@ -0,0 +1,29 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class ScholarBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Scholar";
+ }
+
+ @Override
+ public String description() {
+ return "Do more damage:\n- With weapons you are familiar with\n-Against enemies you are familiar with";
+ }
+
+ @Override
+ public float adjustMobKnowledgeBonus(LivingHurtEvent lhev,
+ float pickedDamageBonus) {
+ return pickedDamageBonus + (pickedDamageBonus * 0.5f);
+ }
+
+ @Override
+ public float adjustWeaponKnowledgeBonus(LivingHurtEvent lhev,
+ float pickedDamageBonus) {
+ return pickedDamageBonus + (pickedDamageBonus * 0.5f);
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/SwampBlessing.java b/src/main/java/fyresmodjam/blessings/standard/SwampBlessing.java
new file mode 100644
index 0000000..e9ecad3
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/SwampBlessing.java
@@ -0,0 +1,34 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import net.minecraft.potion.Potion;
+import net.minecraft.potion.PotionEffect;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class SwampBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Swamp";
+ }
+
+ @Override
+ public String description() {
+ return "Attacks slow enemies";
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ if (event.getEntityLiving() != null) {
+ // TODO figure out potions
+
+// event.getEntityLiving()
+// .addPotionEffect(new PotionEffect(
+// Potion.moveSlowdown.id,
+// 100, 1, false));
+ }
+
+ return damageMultiplier;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/ThickSkinnedBlessing.java b/src/main/java/fyresmodjam/blessings/standard/ThickSkinnedBlessing.java
new file mode 100644
index 0000000..ca16900
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/ThickSkinnedBlessing.java
@@ -0,0 +1,24 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class ThickSkinnedBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Thick-Skinned";
+ }
+
+ @Override
+ public String description() {
+ return "Reduce damage taken by a flat amount";
+ }
+
+ @Override
+ public float onIncomingDamage(LivingHurtEvent event, float damageMultiplier) {
+ event.setAmount(Math.max(0.5f, event.getAmount() - 1f));
+
+ return damageMultiplier;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/ThiefBlessing.java b/src/main/java/fyresmodjam/blessings/standard/ThiefBlessing.java
new file mode 100644
index 0000000..b807b4b
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/ThiefBlessing.java
@@ -0,0 +1,29 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.ModjamMod;
+import fyresmodjam.blessings.Blessing;
+import net.minecraft.init.Items;
+import net.minecraftforge.event.entity.living.LivingDeathEvent;
+
+public class ThiefBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Thief";
+ }
+
+ @Override
+ public String description() {
+ return "Enemies have a chance to drop gold nuggets";
+ }
+
+ @Override
+ public void onMobKill(LivingDeathEvent event) {
+ if(ModjamMod.r.nextInt(20) == 0) {
+ if (!event.getEntity().world.isRemote) {
+ event.getEntity().dropItem(Items.GOLD_NUGGET,
+ 1);
+ }
+ }
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/VampireBlessing.java b/src/main/java/fyresmodjam/blessings/standard/VampireBlessing.java
new file mode 100644
index 0000000..6594eab
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/VampireBlessing.java
@@ -0,0 +1,55 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class VampireBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Vampire";
+ }
+
+ @Override
+ public String description() {
+ return "\tBenefit: Heal a small percentage of damage dealt to enemies\n\tDrawback: Weakened during the day";
+ }
+
+ @Override
+ public float onIncomingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ Entity ent = event.getEntity();
+ if (ent.getBrightness() > 0.5F && ent.world
+ .canBlockSeeSky(ent.getPosition())) {
+ return damageMultiplier + 0.2F;
+ }
+
+ return damageMultiplier;
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ Entity trueSource = event.getSource().getTrueSource();
+ if (trueSource instanceof EntityLivingBase) {
+
+ ((EntityLivingBase) trueSource)
+ .heal((event.getAmount()
+ * damageMultiplier)
+ * 0.07F);
+
+ boolean seeTheSky = trueSource.world
+ .canBlockSeeSky(trueSource
+ .getPosition());
+
+ if (trueSource.getBrightness() > 0.5F
+ && seeTheSky) {
+ return damageMultiplier - 0.2F;
+ }
+ }
+
+ return damageMultiplier;
+ }
+}
diff --git a/src/main/java/fyresmodjam/blessings/standard/WarriorBlessing.java b/src/main/java/fyresmodjam/blessings/standard/WarriorBlessing.java
new file mode 100644
index 0000000..2c1e2e7
--- /dev/null
+++ b/src/main/java/fyresmodjam/blessings/standard/WarriorBlessing.java
@@ -0,0 +1,39 @@
+package fyresmodjam.blessings.standard;
+
+import fyresmodjam.blessings.Blessing;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.IRangedAttackMob;
+import net.minecraftforge.event.entity.living.LivingHurtEvent;
+
+public class WarriorBlessing extends Blessing {
+
+ @Override
+ public String name() {
+ return "Warrior";
+ }
+
+ @Override
+ public String description() {
+ return "Increased melee damage";
+ }
+
+ @Override
+ public void correctBlessing(Entity ent) {
+ if (ent instanceof IRangedAttackMob) {
+ ent.getEntityData().setString("Blessing",
+ "BlessingHunter");
+ }
+ }
+
+ @Override
+ public float onOutgoingDamage(LivingHurtEvent event,
+ float damageMultiplier) {
+ if ((event.getSource().getDamageType().equals("player")
+ || event.getSource().getDamageType()
+ .equals("mob"))) {
+ return damageMultiplier + 0.2f;
+ }
+
+ return damageMultiplier;
+ }
+}