diff options
Diffstat (limited to 'src/main/java/fyresmodjam/misc/EntityStatHelper.java')
| -rw-r--r-- | src/main/java/fyresmodjam/misc/EntityStatHelper.java | 740 |
1 files changed, 740 insertions, 0 deletions
diff --git a/src/main/java/fyresmodjam/misc/EntityStatHelper.java b/src/main/java/fyresmodjam/misc/EntityStatHelper.java new file mode 100644 index 0000000..7022fed --- /dev/null +++ b/src/main/java/fyresmodjam/misc/EntityStatHelper.java @@ -0,0 +1,740 @@ +package fyresmodjam.misc;
+
+import java.lang.reflect.Constructor;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Random;
+
+import fyresmodjam.ModjamMod;
+import fyresmodjam.blessings.BlessingUtils;
+import fyresmodjam.handlers.CommonTickHandler;
+import fyresmodjam.handlers.NewPacketHandler;
+import fyresmodjam.worldgen.FyresWorldData;
+import net.minecraft.entity.Entity;
+import net.minecraft.entity.EntityList;
+import net.minecraft.entity.EntityLiving;
+import net.minecraft.entity.EntityLivingBase;
+import net.minecraft.entity.boss.EntityDragon;
+import net.minecraft.entity.monster.EntityMob;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.item.Item;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraft.util.EnumHand;
+import net.minecraft.util.math.AxisAlignedBB;
+import net.minecraft.util.text.translation.I18n;
+import net.minecraft.world.World;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.entity.EntityJoinWorldEvent;
+import net.minecraftforge.event.entity.living.LivingDeathEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+
+@SuppressWarnings("rawtypes")
+public class EntityStatHelper {
+
+ public static String[] knowledge = {
+ "Clueless", "Novice", "Competent", "Talented",
+ "Expert", "Professional", "Master", "Legendary"
+ };
+
+ public static int[] killCount = {
+ 0, 10, 25, 50, 100, 250, 500, 1000
+ };
+
+ public static float[] damageBonus = {
+ 0, 0.01F, 0.025F, 0.05F, 0.075F, 0.1F, 0.15F, 0.2F
+ };
+ public static String[] damageBonusString = {
+ "0", "1", "2.5", "5", "7.5", "10", "15", "20"
+ };
+
+ public static HashMap<Class, EntityStatTracker> statTrackersByClass = new HashMap<Class, EntityStatTracker>();
+
+ public static ArrayList<EntityStatTracker> genericTrackers = new ArrayList<EntityStatTracker>();
+
+ public static ArrayList<EntityStatTracker> temp = new ArrayList<EntityStatTracker>();
+ public static boolean b = false;
+
+ public static void addStatTracker(EntityStatTracker statTracker) {
+ if (statTracker.classes != null) {
+ for (Class c : statTracker.classes) {
+ statTrackersByClass.put(c, statTracker);
+ }
+
+ if (statTracker.instanceAllowed) {
+ genericTrackers.add(statTracker);
+ }
+ }
+ }
+
+ public static String getStat(Entity entity, String name) {
+ String s = null;
+
+ if (entity.getEntityData() != null
+ && entity.getEntityData().hasKey(name)) {
+ s = entity.getEntityData().getString(name);
+ }
+
+ return s;
+ }
+
+ public static String getUnalteredItemName(Item item) {
+ return I18n.translateToLocal(
+ item.getUnlocalizedName() + ".name");
+ }
+
+ public static String getUnalteredName(Entity entity) {
+ String s = EntityList.getEntityString(entity);
+
+ if (s == null) {
+ s = "generic";
+ }
+
+ return I18n.translateToLocal("entity." + s + ".name");
+ }
+
+ public static Entity giveStat(Entity entity, String name,
+ Object value) {
+ if (entity != null && name != null && value != null) {
+ entity.getEntityData().setString(name,
+ value.toString());
+ }
+
+ return entity;
+ }
+
+ public static boolean hasStat(Entity entity, String name) {
+ if (entity.getEntityData() != null
+ && entity.getEntityData().hasKey(name)) {
+ return true;
+ }
+
+ return false;
+ }
+
+ @SuppressWarnings("unchecked")
+ public static void processEntity(Entity entity, Random r) {
+ if (entity == null) {
+ return;
+ }
+
+ temp.clear();
+
+ if (statTrackersByClass.containsKey(entity.getClass())) {
+ temp.add(statTrackersByClass
+ .get(entity.getClass()));
+ }
+
+ for (EntityStatTracker e : genericTrackers) {
+ if (!temp.contains(e)) {
+ for (Class c : e.classes) {
+ if (c.isAssignableFrom(entity
+ .getClass())) {
+ temp.add(e);
+ break;
+ }
+ }
+ }
+ }
+
+ if (!temp.isEmpty()) {
+ String processed = EntityStatHelper.getStat(entity,
+ "processed");
+
+ if (processed == null
+ || processed.equals("false")) {
+ EntityStatHelper.giveStat(entity,
+ "processed", "true");
+
+ for (EntityStatTracker statTracker : temp) {
+ for (EntityStat s : statTracker.stats) {
+ giveStat(entity, s.name, s
+ .getNewValue(r)
+ .toString());
+
+ if (entity instanceof EntityLiving) {
+ setName((EntityLiving) entity,
+ s.getAlteredEntityName(
+ (EntityLiving) entity));
+ }
+
+ s.modifyEntity(entity);
+ }
+ }
+ }
+ }
+ }
+
+ public static void setEntitySize(Entity entity, float par1,
+ float par2) {
+ /*
+ * float f2; // TODO fix this if (par1 != entity.width ||
+ * par2 != entity.height) { f2 = entity.width; entity.width
+ * = par1; entity.height = par2; AxisAlignedBB
+ * entityBoundingBox = entity.getEntityBoundingBox();
+ * entityBoundingBox.maxX = entityBoundingBox.minX +
+ * entity.width; entityBoundingBox.maxZ =
+ * entityBoundingBox.minZ + entity.width;
+ * entityBoundingBox.maxY = entityBoundingBox.minY +
+ * entity.height; }
+ *
+ * f2 = par1 % 2.0F;
+ *
+ * if (f2 < 0.375D) { entity.myEntitySize =
+ * EnumEntitySize.SIZE_1; } else if (f2 < 0.75D) {
+ * entity.myEntitySize = EnumEntitySize.SIZE_2; } else if
+ * (f2 < 1.0D) { entity.myEntitySize =
+ * EnumEntitySize.SIZE_3; } else if (f2 < 1.375D) {
+ * entity.myEntitySize = EnumEntitySize.SIZE_4; } else if
+ * (f2 < 1.75D) { entity.myEntitySize =
+ * EnumEntitySize.SIZE_5; } else { entity.myEntitySize =
+ * EnumEntitySize.SIZE_6; }
+ */
+ }
+
+ public static Entity setName(EntityLiving entity, String name) {
+ entity.setCustomNameTag(name);
+
+ return entity;
+ }
+
+ private void addOnKillStats(EntityPlayer player, String mob) {
+ if (!player.getEntityData().hasKey("KillStats")) {
+ player.getEntityData().setTag("KillStats",
+ new NBTTagCompound());
+ }
+
+ NBTTagCompound killStats = player.getEntityData()
+ .getCompoundTag("KillStats");
+
+ if (!killStats.hasKey(mob)) {
+ killStats.setInteger(mob, 0);
+
+ if (!killStats.hasKey("TrackedMobList")) {
+ killStats.setString("TrackedMobList", mob);
+ } else {
+ killStats.setString("TrackedMobList",
+ killStats.getString(
+ "TrackedMobList")
+ + ";"
+ + mob);
+ }
+ }
+
+ killStats.setInteger(mob, killStats.getInteger(mob) + 1);
+
+ if (ModjamMod.enableMobKillStats) {
+ for (int i = 0; i < knowledge.length; i++) {
+ if (killCount[i] == killStats
+ .getInteger(mob)) {
+ NewPacketHandler.SEND_MESSAGE
+ .sendToPlayer(player,
+ "\u00A7o\u00A73You've become a "
+ + knowledge[i].toLowerCase()
+ + " "
+ + mob.toLowerCase()
+ + " slayer! (+"
+ + damageBonusString[i]
+ + "% damage against "
+ + mob.toLowerCase()
+ + "s.)"
+ + (i < knowledge.length
+ - 1 ? " " + (killCount[i + 1] - killCount[i]) + " " + mob.toLowerCase() + " kills to next rank." : ""));
+ break;
+ }
+ }
+
+ int count = 0;
+
+ if (killStats.hasKey("TrackedMobList") && killStats
+ .getString("TrackedMobList") != null
+ && killStats.getString(
+ "TrackedMobList")
+ .length() > 0) {
+ for (String object : killStats.getString(
+ "TrackedMobList")
+ .split(";")) {
+ if (killStats.hasKey(object)
+ && killStats.getInteger(
+ object) >= killCount[2]) {
+ count++;
+ }
+ }
+ }
+
+ if (count >= 5) {
+ // player.triggerAchievement(
+ // ModjamMod.theHunt);
+ }
+ }
+
+ String weapon = "misc";
+
+ ItemStack heldItem = player
+ .getHeldItem(EnumHand.MAIN_HAND);
+ if (heldItem == null) {
+ weapon = "fist";
+ } else if (heldItem.getItem() != null) {
+ weapon = getUnalteredItemName(heldItem.getItem());
+ }
+
+ if (!player.getEntityData().hasKey("WeaponStats")) {
+ player.getEntityData().setTag("WeaponStats",
+ new NBTTagCompound());
+ }
+ NBTTagCompound weaponStats = player.getEntityData()
+ .getCompoundTag("WeaponStats");
+
+ if (!weaponStats.hasKey(weapon)) {
+ weaponStats.setInteger(weapon, 0);
+
+ if (!weaponStats.hasKey("TrackedItemList")) {
+ weaponStats.setString("TrackedItemList",
+ weapon);
+ } else {
+ weaponStats.setString("TrackedItemList",
+ weaponStats.getString(
+ "TrackedItemList")
+ + ";"
+ + weapon);
+ }
+ }
+
+ weaponStats.setInteger(weapon,
+ weaponStats.getInteger(weapon) + 1);
+
+ if (ModjamMod.enableWeaponKillStats) {
+ for (int i = 0; i < knowledge.length; i++) {
+ if (killCount[i] * 2 == weaponStats
+ .getInteger(weapon)) {
+ NewPacketHandler.SEND_MESSAGE
+ .sendToPlayer(player,
+ "\u00A7o\u00A73You've become a "
+ + knowledge[i].toLowerCase()
+ + " "
+ + weapon.toLowerCase()
+ + " user! (+"
+ + damageBonusString[i]
+ + "% damage with "
+ + weapon.toLowerCase()
+ + "s.)"
+ + (i < knowledge.length
+ - 1 ? " " + (killCount[i + 1] * 2 - killCount[i] * 2) + " " + weapon.toLowerCase() + " kills to next rank." : ""));
+ break;
+ }
+ }
+
+ int count = 0;
+
+ if (weaponStats.hasKey("TrackedItemList")
+ && weaponStats.getString(
+ "TrackedItemList") != null
+ && weaponStats.getString(
+ "TrackedItemList")
+ .length() > 0) {
+ for (String object : weaponStats.getString(
+ "TrackedItemList")
+ .split(";")) {
+ if (weaponStats.hasKey(object)
+ && weaponStats.getInteger(
+ object) >= killCount[1]
+ * 2) {
+ count++;
+ }
+ }
+ }
+
+ if (count >= 10) {
+ // player.triggerAchievement(
+ // ModjamMod.jackOfAllTrades);
+ }
+ }
+ }
+
+ private void addPlayerStats(EntityJoinWorldEvent event) {
+ Entity entity = event.getEntity();
+ String entityName = entity.getName();
+
+ if (!entity.getEntityData().hasKey("Blessing")
+ && CommonTickHandler.worldData.blessingByPlayer
+ .containsKey(entityName)) {
+ entity.getEntityData().setString("Blessing",
+ CommonTickHandler.worldData.blessingByPlayer
+ .get(entityName));
+
+ NewPacketHandler.UPDATE_BLESSING.sendToPlayer(
+ (EntityPlayer) entity,
+ entity.getEntityData().getString(
+ "Blessing"));
+
+ CommonTickHandler.worldData.blessingByPlayer
+ .remove(entityName);
+ CommonTickHandler.worldData.markDirty();
+ }
+
+ if (!entity.getEntityData().hasKey("PotionKnowledge")
+ && CommonTickHandler.worldData.potionKnowledgeByPlayer
+ .containsKey(entityName)) {
+ entity.getEntityData().setIntArray(
+ "PotionKnowledge",
+ CommonTickHandler.worldData.potionKnowledgeByPlayer
+ .get(entityName));
+
+ NewPacketHandler.UPDATE_POTION_KNOWLEDGE
+ .sendToPlayer((EntityPlayer) entity,
+ entity.getEntityData()
+ .getIntArray("PotionKnowledge"));
+
+ CommonTickHandler.worldData.potionKnowledgeByPlayer
+ .remove(entityName);
+ CommonTickHandler.worldData.markDirty();
+ }
+
+ if (!entity.getEntityData().hasKey("KillStats")
+ && CommonTickHandler.worldData.killStatsByPlayer
+ .containsKey(entityName)) {
+ entity.getEntityData().setTag("KillStats",
+ CommonTickHandler.worldData.killStatsByPlayer
+ .get(entityName));
+
+ CommonTickHandler.worldData.killStatsByPlayer
+ .remove(entityName);
+ CommonTickHandler.worldData.markDirty();
+ }
+
+ if (!entity.getEntityData().hasKey("WeaponStats")
+ && CommonTickHandler.worldData.weaponStatsByPlayer
+ .containsKey(entityName)) {
+ entity.getEntityData().setTag("WeaponStats",
+ CommonTickHandler.worldData.weaponStatsByPlayer
+ .get(entityName));
+
+ CommonTickHandler.worldData.killStatsByPlayer
+ .remove(entityName);
+ CommonTickHandler.worldData.markDirty();
+ }
+
+ if (!entity.getEntityData().hasKey("CraftingStats")
+ && CommonTickHandler.worldData.craftingStatsByPlayer
+ .containsKey(entityName)) {
+ entity.getEntityData().setTag("CraftingStats",
+ CommonTickHandler.worldData.craftingStatsByPlayer
+ .get(entityName));
+
+ CommonTickHandler.worldData.craftingStatsByPlayer
+ .remove(entityName);
+ CommonTickHandler.worldData.markDirty();
+ }
+ }
+
+ private void advanceKillTaskProgress(LivingDeathEvent event) {
+ CommonTickHandler.worldData.progress++;
+
+ String name1 = CommonTickHandler.worldData.currentTask
+ .equals("Kill") ? FyresWorldData.validMobNames[CommonTickHandler.worldData.currentTaskID]
+ : FyresWorldData.validItems[CommonTickHandler.worldData.currentTaskID]
+ .getDisplayName();
+
+ if (name1.contains("Block")) {
+ if (name1.contains("Block")) {
+ name1 = name1.replace("Block", "Blocks")
+ .replace("block",
+ "blocks");
+ }
+ } else {
+ name1 += "s";
+ }
+
+ NewPacketHandler.SEND_MESSAGE.sendToAllPlayers(
+ "\u00A7fCurrent Goal Progress: "
+ + CommonTickHandler.worldData.progress
+ + "/"
+ + CommonTickHandler.worldData.currentTaskAmount
+ + " " + name1 + " "
+ + CommonTickHandler.worldData.currentTask
+ + "ed.");
+
+ if (CommonTickHandler.worldData.progress >= CommonTickHandler.worldData.currentTaskAmount) {
+ CommonTickHandler.worldData.progress = 0;
+ CommonTickHandler.worldData.tasksCompleted++;
+
+ NewPacketHandler.LEVEL_UP.sendToAllPlayers(
+ CommonTickHandler.worldData.rewardLevels);
+
+ if (!CommonTickHandler.worldData.enderDragonKilled
+ && event.getEntity() instanceof EntityDragon) {
+ CommonTickHandler.worldData.enderDragonKilled = true;
+ }
+
+ CommonTickHandler.worldData.giveNewTask();
+
+ NewPacketHandler.SEND_MESSAGE.sendToAllPlayers(
+ "\u00A7eA world goal has been completed!"
+ + (!CommonTickHandler.worldData
+ .getDisadvantage()
+ .equals("None") ? " World disadvantage has been lifted!"
+ : ""));
+
+ NewPacketHandler.SEND_MESSAGE.sendToAllPlayers(
+ "\u00A7eA new world goal has been set: "
+ + (CommonTickHandler.worldData.currentTask
+ + " "
+ + CommonTickHandler.worldData.currentTaskAmount
+ + " "
+ + (CommonTickHandler.worldData.currentTask
+ .equals("Kill") ? FyresWorldData.validMobNames[CommonTickHandler.worldData.currentTaskID]
+ : FyresWorldData.validItems[CommonTickHandler.worldData.currentTaskID]
+ .getDisplayName())
+ + "s. ("
+ + CommonTickHandler.worldData.progress
+ + " "
+ + CommonTickHandler.worldData.currentTask
+ + "ed)"));
+
+ CommonTickHandler.worldData.currentDisadvantage = "None";
+ }
+
+ NewPacketHandler.UPDATE_WORLD_DATA.sendToAllPlayers(
+ CommonTickHandler.worldData.potionValues,
+ CommonTickHandler.worldData.potionDurations,
+ CommonTickHandler.worldData
+ .getDisadvantage(),
+ CommonTickHandler.worldData.currentTask,
+ CommonTickHandler.worldData.currentTaskID,
+ CommonTickHandler.worldData.currentTaskAmount,
+ CommonTickHandler.worldData.progress,
+ CommonTickHandler.worldData.tasksCompleted,
+ CommonTickHandler.worldData.enderDragonKilled,
+ ModjamMod.spawnTraps,
+ CommonTickHandler.worldData.rewardLevels,
+ CommonTickHandler.worldData.mushroomColors);
+
+ CommonTickHandler.worldData.markDirty();
+ }
+
+ private void cloneMob(EntityJoinWorldEvent event) {
+ event.getEntity().getEntityData().setBoolean("isClone",
+ true);
+
+ Entity entityNew = null;
+
+ try {
+ Constructor[] constructors = event.getEntity()
+ .getClass().getConstructors();
+
+ for (int i = 0; i < constructors.length; i++) {
+ Class[] parameters = constructors[i]
+ .getParameterTypes();
+
+ if (parameters.length == 1 && parameters[0]
+ .equals(World.class)) {
+ entityNew = (Entity) event
+ .getEntity()
+ .getClass()
+ .getConstructors()[i]
+ .newInstance(event
+ .getWorld());
+ }
+ }
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ if (entityNew != null) {
+ entityNew.setLocationAndAngles(
+ event.getEntity().posX,
+ event.getEntity().posY,
+ event.getEntity().posZ,
+ event.getEntity().rotationYaw,
+ event.getEntity().rotationPitch);
+
+ entityNew.getEntityData().setBoolean("isClone",
+ true);
+
+ entityNew.dimension = event.getEntity().dimension;
+
+ CommonTickHandler.addLater.add(entityNew);
+ }
+ }
+
+ @SubscribeEvent
+ public void entityJoinWorld(EntityJoinWorldEvent event) {
+ if (!event.getWorld().isRemote) {
+ processEntity(event.getEntity(), ModjamMod.r);
+
+ boolean isClone = isEntityClone(event);
+
+ if (shouldCloneMob(event, isClone)) {
+ cloneMob(event);
+ }
+
+ if (event.getEntity() instanceof EntityPlayer) {
+ addPlayerStats(event);
+ }
+ }
+ }
+
+ private void handleBlessings(LivingDeathEvent event) {
+ String blessing = event.getSource().getTrueSource()
+ .getEntityData().getString("Blessing");
+
+ BlessingUtils.getBlessingInstance(blessing)
+ .onMobKill(event);
+ }
+
+ private boolean isEntityClone(EntityJoinWorldEvent event) {
+ if (event.getEntity().getEntityData().hasKey("isClone")) {
+ return event.getEntity().getEntityData()
+ .getBoolean("isClone");
+ } else {
+ return false;
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @SubscribeEvent
+ public void livingDeath(LivingDeathEvent event) {
+ if (!event.getEntity().world.isRemote) {
+ if (event.getEntity().world.getGameRules()
+ .getBoolean("doMobLoot")) {
+
+ if (event.getEntity() instanceof EntityLivingBase
+ && event.getSource() != null
+ && event.getSource()
+ .getTrueSource() != null) {
+ if (BlessingUtils.hasBlessing(event
+ .getSource()
+ .getTrueSource())) {
+ handleBlessings(event);
+ }
+ }
+
+ int level = 0;
+
+ if (event.getEntity().getEntityData()
+ .hasKey("Level")) {
+ level = Integer.parseInt(
+ event.getEntity().getEntityData()
+ .getString("Level"));
+ }
+
+ if (ModjamMod.r.nextInt(30) == 0
+ || level == 5) {
+ event.getEntity().entityDropItem(
+ new ItemStack(ModjamMod.mysteryPotion,
+ 1,
+ ModjamMod.r.nextInt(
+ 13)),
+ event.getEntity().height
+ / 2);
+ }
+ }
+
+ if (CommonTickHandler.worldData.currentTask
+ .equals("Kill")
+ && FyresWorldData.validMobs[CommonTickHandler.worldData.currentTaskID]
+ .isAssignableFrom(
+ event.getEntity().getClass())) {
+ advanceKillTaskProgress(event);
+ }
+
+ if (!CommonTickHandler.worldData.enderDragonKilled
+ && event.getEntity() instanceof EntityDragon) {
+ CommonTickHandler.worldData.enderDragonKilled = true;
+ NewPacketHandler.UPDATE_WORLD_DATA
+ .sendToAllPlayers(
+ CommonTickHandler.worldData.potionValues,
+ CommonTickHandler.worldData.potionDurations,
+ CommonTickHandler.worldData
+ .getDisadvantage(),
+ CommonTickHandler.worldData.currentTask,
+ CommonTickHandler.worldData.currentTaskID,
+ CommonTickHandler.worldData.currentTaskAmount,
+ CommonTickHandler.worldData.progress,
+ CommonTickHandler.worldData.tasksCompleted,
+ CommonTickHandler.worldData.enderDragonKilled,
+ ModjamMod.spawnTraps,
+ CommonTickHandler.worldData.rewardLevels,
+ CommonTickHandler.worldData.mushroomColors);
+ CommonTickHandler.worldData.markDirty();
+ }
+ }
+
+ if (event.getEntity() instanceof EntityPlayer) {
+ EntityPlayer player = (EntityPlayer) event.getEntity();
+
+ //player.triggerAchievement(ModjamMod.losingIsFun);
+
+ CommonTickHandler.worldData.blessingByPlayer.put(
+ player.getName(),
+ player.getEntityData().getString(
+ "Blessing"));
+
+ CommonTickHandler.worldData.potionKnowledgeByPlayer
+ .put(player.getName(),
+ player.getEntityData()
+ .getIntArray("PotionKnowledge"));
+
+ if (player.getEntityData() != null
+ && player.getEntityData().hasKey(
+ "KillStats")) {
+ CommonTickHandler.worldData.killStatsByPlayer
+ .put(player.getName(),
+ player.getEntityData()
+ .getCompoundTag("KillStats"));
+ }
+
+ if (player.getEntityData() != null
+ && player.getEntityData().hasKey(
+ "WeaponStats")) {
+ CommonTickHandler.worldData.weaponStatsByPlayer
+ .put(player.getName(),
+ player.getEntityData()
+ .getCompoundTag("WeaponStats"));
+ }
+
+ if (player.getEntityData() != null
+ && player.getEntityData().hasKey(
+ "CraftingStats")) {
+ CommonTickHandler.worldData.craftingStatsByPlayer
+ .put(player.getName(),
+ player.getEntityData()
+ .getCompoundTag("CraftingStats"));
+ }
+ } else if (event.getSource() != null
+ && event.getSource().getTrueSource() != null
+ && event.getSource().getTrueSource() instanceof EntityPlayer) {
+ EntityPlayer player = (EntityPlayer) event.getSource()
+ .getTrueSource();
+ String mob = getUnalteredName(event.getEntity());
+
+ if (CommonTickHandler.worldData.getDisadvantage()
+ .equals("Trigger-happy")
+ && ModjamMod.r.nextInt(10) == 0) {
+ player.world.createExplosion(player,
+ event.getEntity().posX,
+ event.getEntity().posY,
+ event.getEntity().posZ, 1,
+ true);
+ }
+
+ addOnKillStats(player, mob);
+ }
+ }
+
+ public void register() {
+ MinecraftForge.EVENT_BUS.register(this);
+ }
+
+ private boolean shouldCloneMob(EntityJoinWorldEvent event,
+ boolean isClone) {
+ return CommonTickHandler.worldData != null
+ && CommonTickHandler.worldData
+ .getDisadvantage()
+ .equals("Increased Mob Spawn")
+ && (event.getEntity() instanceof EntityMob)
+ && !(event.getEntity() instanceof EntityDragon)
+ && !isClone && ModjamMod.r.nextInt(3) == 0;
+ }
+}
|
