aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/gtPlusPlus/core/entity
diff options
context:
space:
mode:
authorConnor-Colenso <52056774+Connor-Colenso@users.noreply.github.com>2023-09-04 03:05:22 +0100
committerGitHub <noreply@github.com>2023-09-04 03:05:22 +0100
commit76719d65a90d98e228a914774d3b11ed9f01ac8e (patch)
treece0d35f954e441e9cc4aa95aa347073728e6f4ee /src/main/java/gtPlusPlus/core/entity
parent0393b582eb3edcb5c575330804b6747577a55e27 (diff)
downloadGT5-Unofficial-76719d65a90d98e228a914774d3b11ed9f01ac8e.tar.gz
GT5-Unofficial-76719d65a90d98e228a914774d3b11ed9f01ac8e.tar.bz2
GT5-Unofficial-76719d65a90d98e228a914774d3b11ed9f01ac8e.zip
Clean-up v2 (#729)
* Remove test items from NEI with no texture * Add number formatting to hand pumps * Remove heavy plates (no recipes & completely unused). * Remove helium generator (no texture, no recipe) * Remove fire pit and fire starter (no use, no recipe, no textures) * Remove giant chicken and associated unused stuff, has no texture and is unobtainable. Used to be relevant but isn't anymore. * Remove villagers with silly trades like 1 motor + 1 hull = 1 hull. Why? * Remove trade bench, no recipe, missing textures. Unused. * Remove farm processors, no texture, no recipe. Unused. * Remove MAX tier components, these exist in GT now, have no recipe here and are unused. * Hide untextured light block from NEI * Update buildscript * Remove unused backpacks, no recipe and contains dupe bugs. Bad. * Remove eatotronic, universal toolbox and magic tool bag. All 3 are missing textures and uncraftable. * Remove eatotronic, universal toolbox and magic tool bag. All 3 are missing textures and uncraftable. part 2 * Remove dragon catcher (what?), no texture, no recipe, unused. * Remove empty item, does nothing, has no recipe, no idea why it is here. * Empty item v2 removal * Revert "Empty item v2 removal" This reverts commit 75bcd3ccfaf55bbfe2c12b2e4167d5c37636030d. * Revert "Remove empty item, does nothing, has no recipe, no idea why it is here." This reverts commit e41a9f484392776331c58530ab1faa5ef978ef36. * Remove debug square. No recipe, unused. * Number formatting overflow covers * Remove JVM garbage collection block. Unused, no recipe. * Remove nanotubes, no recipe for them. Unused. * Remove "git" item, doesn't seem to work. Has no recipe. * Remove uncraftable food with awful textures. * Remove "bat king" mob, unused content. Does not spawn. * Remove uncraftable doors with bad textures. Unused content. * Remove uncraftable, unlocalised redstone stuff that crashes game when placed. * Remove weird spawner item. No recipe, does not exist in world. * Remove sunnarium bit, no recipe, no usage. * Remove unused modularity table and some misc uncraftable, unused items. * Remove Interconnecting Storage Crate, no recipe, unused. * Delete worse debug power gen, this already exists as part of GT. Unneeded duplication. * Delete unused placeholder circuit * Delete uncraftable generator hatches. * Spotless * Remove XP tank thing, unused and uncraftable. * Remove null item, this fluid registry only seemed to register one null fluid. All others exist? * Remove EU -> RF battery. Unused in GTNH. * Remove some shelf nonsense, why is this in this mod? * Remove some weird random tools. These have no realistic usage in GTNH. * Remove firemaker. Useless in GTNH. * Removed helium blob. Deprecated item, not used anymore, uncraftable. * spotlessApply (#730) Co-authored-by: GitHub GTNH Actions <> * Stop modulators generating unused blocks with no textures * Remove more unused untextured casings * Remove more unused untextured casings * Remove more unused untextured casings * Remove more unused untextured casings * Remove more unused untextured casings * Remove some weird methods and uncraftable mining parts, probably part of deprecated multiblock. * spotlessApply (#732) Co-authored-by: GitHub GTNH Actions <> * Remove gem shards, unused. * Remove unused atoms * Remove unused gum * Remove unused elements/materials * Bye bye * Remove some unused reflection stuff * Remove control cores, obsolete now. * Remove mob killing thing with no texture and no recipe. * Remove uncraftable covers * Remove pizza gloves * Net and rope removal, unused * Remove force crop * Removal of some old event stuff * Remove unused nuclear chem items * Remove player safe, mostly because of the horrible event code that was intercepting every block break. I can't see any real usage of this via discord. * Remove Force material and associated other nonsense. Also remove some nuclear chem stuff. * Remove force for realsies * Skookum Chooker purge. * Remove some enderio compat, these plates/dusts are added via GT5 anyway now. This is obsolete. * spotlessApply (#733) Co-authored-by: GitHub GTNH Actions <> * Unused textures * Bump dep * Revert "Remove force for realsies" This reverts commit 0d288912a99f9dabce56d2a2623d4d3510f4804e. * Revert "Remove Force material and associated other nonsense. Also remove some nuclear chem stuff." This reverts commit 3455e6e916defe1f2aef923be6f9696a6cf3095b. * Remove nuclear items that are unused * spotlessApply (#734) Co-authored-by: GitHub GTNH Actions <> --------- Co-authored-by: GTNH-Colen <54497873+GTNH-Colen@users.noreply.github.com> Co-authored-by: Connor Colenso <colen@CONNORSPC> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Diffstat (limited to 'src/main/java/gtPlusPlus/core/entity')
-rw-r--r--src/main/java/gtPlusPlus/core/entity/InternalEntityRegistry.java25
-rw-r--r--src/main/java/gtPlusPlus/core/entity/ai/batking/EntityAIBatKingAttack.java419
-rw-r--r--src/main/java/gtPlusPlus/core/entity/item/ItemEntityGiantEgg.java117
-rw-r--r--src/main/java/gtPlusPlus/core/entity/monster/EntityBatKing.java760
-rw-r--r--src/main/java/gtPlusPlus/core/entity/monster/EntityGiantChickenBase.java314
-rw-r--r--src/main/java/gtPlusPlus/core/entity/projectile/EntityLightningAttack.java5
6 files changed, 0 insertions, 1640 deletions
diff --git a/src/main/java/gtPlusPlus/core/entity/InternalEntityRegistry.java b/src/main/java/gtPlusPlus/core/entity/InternalEntityRegistry.java
index 1254d9bdff..4be3605ff1 100644
--- a/src/main/java/gtPlusPlus/core/entity/InternalEntityRegistry.java
+++ b/src/main/java/gtPlusPlus/core/entity/InternalEntityRegistry.java
@@ -3,8 +3,6 @@ package gtPlusPlus.core.entity;
import cpw.mods.fml.common.registry.EntityRegistry;
import gtPlusPlus.GTplusplus;
import gtPlusPlus.api.objects.Logger;
-import gtPlusPlus.core.entity.monster.EntityBatKing;
-import gtPlusPlus.core.entity.monster.EntityGiantChickenBase;
import gtPlusPlus.core.entity.monster.EntitySickBlaze;
import gtPlusPlus.core.entity.monster.EntityStaballoyConstruct;
import gtPlusPlus.core.entity.projectile.EntityHydrofluoricAcidPotion;
@@ -109,28 +107,5 @@ public class InternalEntityRegistry {
20,
true);
- /**
- * Globals, which generate spawn eggs. (Currently required for Giant chicken spawning)
- */
- EntityRegistry.registerModEntity(
- EntityGiantChickenBase.class,
- "bigChickenFriendly",
- mEntityID++,
- GTplusplus.instance,
- 64,
- 20,
- true);
- ItemCustomSpawnEgg.registerEntityForSpawnEgg(
- 2,
- "bigChickenFriendly",
- Utils.rgbtoHexValue(255, 0, 0),
- Utils.rgbtoHexValue(175, 175, 175));
- EntityRegistry
- .registerModEntity(EntityBatKing.class, "batKing", mEntityID++, GTplusplus.instance, 64, 20, true);
- ItemCustomSpawnEgg.registerEntityForSpawnEgg(
- 3,
- "batKing",
- Utils.rgbtoHexValue(175, 175, 0),
- Utils.rgbtoHexValue(0, 175, 175));
}
}
diff --git a/src/main/java/gtPlusPlus/core/entity/ai/batking/EntityAIBatKingAttack.java b/src/main/java/gtPlusPlus/core/entity/ai/batking/EntityAIBatKingAttack.java
deleted file mode 100644
index 1cfb2154b1..0000000000
--- a/src/main/java/gtPlusPlus/core/entity/ai/batking/EntityAIBatKingAttack.java
+++ /dev/null
@@ -1,419 +0,0 @@
-package gtPlusPlus.core.entity.ai.batking;
-
-import net.minecraft.entity.EntityLivingBase;
-import net.minecraft.entity.IRangedAttackMob;
-import net.minecraft.entity.ai.EntityAIBase;
-import net.minecraft.pathfinding.PathEntity;
-import net.minecraft.pathfinding.PathPoint;
-import net.minecraft.util.MathHelper;
-
-import gtPlusPlus.api.objects.Logger;
-import gtPlusPlus.core.entity.monster.EntityBatKing;
-import gtPlusPlus.core.util.math.MathUtils;
-import gtPlusPlus.core.util.minecraft.EntityUtils;
-
-public class EntityAIBatKingAttack extends EntityAIBase {
-
- private final Ranged mRangedAI;
- private final Melee mMeleeAI;
- private boolean mIsMelee = false;
-
- /** The Bat King in control of this AI. */
- private final EntityBatKing mAttackingEntity;
-
- /** The PathEntity of our entity. */
- private PathEntity mEntityPathEntity;
-
- /** The current target of Bat King in control of this AI. */
- private EntityLivingBase mEntityTarget;
-
- private final Class mClassTarget;
-
- public EntityAIBatKingAttack(EntityBatKing aAttacker, Class aClassTarget, double aMovementSpeed, int someInt,
- int aMaxRangedAttackTime, float someFloat, boolean aLongMemory) {
- mRangedAI = new Ranged(this, aMovementSpeed, someInt, 5, someFloat);
- mMeleeAI = new Melee(this, aClassTarget, aMovementSpeed, aLongMemory);
- mAttackingEntity = aAttacker;
- mClassTarget = aClassTarget;
- }
-
- @Override
- public boolean shouldExecute() {
- determineCombatStyle();
- EntityLivingBase entitylivingbase = this.mAttackingEntity.getAttackTarget();
- if (entitylivingbase == null) {
- this.mEntityTarget = null;
- return false;
- } else if (!entitylivingbase.isEntityAlive()) {
- return false;
- } else if (this.mClassTarget != null && !this.mClassTarget.isAssignableFrom(entitylivingbase.getClass())) {
- return false;
- } else {
- if (this.mIsMelee) {
- return this.mMeleeAI.shouldExecute();
- } else {
- this.mEntityTarget = entitylivingbase;
- this.mEntityPathEntity = this.mAttackingEntity.getNavigator().getPathToEntityLiving(entitylivingbase);
- return mRangedAI != null && mMeleeAI != null && hasValidTarget();
- }
- }
- }
-
- public EntityBatKing getBatKing() {
- return this.mAttackingEntity;
- }
-
- public IRangedAttackMob getBatKingAsIRangedAttackMob() {
- return this.mAttackingEntity;
- }
-
- public boolean hasValidTarget() {
- return this.mEntityTarget != null;
- }
-
- public EntityLivingBase getTarget() {
- return mEntityTarget;
- }
-
- @Override
- public boolean continueExecuting() {
- determineCombatStyle();
- if (mIsMelee) {
- return mMeleeAI.continueExecuting();
- } else {
- return mRangedAI.continueExecuting();
- }
- }
-
- @Override
- public boolean isInterruptible() {
- if (mIsMelee) {
-
- } else {
-
- }
- return super.isInterruptible();
- }
-
- @Override
- public void startExecuting() {
- determineCombatStyle();
- if (mIsMelee) {
- mMeleeAI.startExecuting();
- } else {
- mRangedAI.startExecuting();
- }
- }
-
- @Override
- public void resetTask() {
- determineCombatStyle();
- if (mIsMelee) {
- mMeleeAI.resetTask();
- } else {
- mRangedAI.resetTask();
- }
- }
-
- @Override
- public void updateTask() {
- determineCombatStyle();
- if (mIsMelee) {
- mMeleeAI.updateTask();
- } else {
- mRangedAI.updateTask();
- }
- }
-
- private final void determineCombatStyle() {
- boolean aisMeleeNow = this.mIsMelee;
- if (this.mEntityTarget != null && EntityUtils.getDistance(getBatKing(), mEntityTarget) < 4) {
- this.mIsMelee = true;
- } else {
- this.mIsMelee = false;
- }
- if (aisMeleeNow != this.mIsMelee) {
- Logger.INFO(
- "Bat King changed combat style from " + (aisMeleeNow ? "Melee" : "Ranged")
- + " to "
- + (this.mIsMelee ? "Melee" : "Ranged"));
- }
- }
-
- private class Ranged {
-
- private final EntityAIBatKingAttack parentAI;
-
- /**
- * A decrementing tick that spawns a ranged attack once this value reaches 0. It is then set back to the
- * maxRangedAttackTime.
- */
- private int rangedAttackTime;
-
- private double entityMoveSpeed;
- private int mCooldownTime;
- private int field_96561_g;
- /**
- * The maximum time the AI has to wait before performing another ranged attack.
- */
- private int maxRangedAttackTime;
-
- private float field_96562_i;
- private float field_82642_h; // Max range
-
- public Ranged(EntityAIBatKingAttack aParent, double aMovementSpeed, int someInt, int aMaxRangedAttackTime,
- float someFloat) {
- this.rangedAttackTime = -1;
- this.parentAI = aParent;
- this.entityMoveSpeed = aMovementSpeed;
- this.field_96561_g = someInt;
- this.maxRangedAttackTime = aMaxRangedAttackTime;
- this.field_96562_i = someFloat;
- this.field_82642_h = someFloat * someFloat * 8;
- parentAI.setMutexBits(3);
- }
-
- /**
- * Execute a one shot task or start executing a continuous task
- */
- public void startExecuting() {
- parentAI.getBatKing().getNavigator().setPath(parentAI.mEntityPathEntity, this.entityMoveSpeed);
- }
-
- /**
- * Returns whether an in-progress EntityAIBase should continue executing
- */
- public boolean continueExecuting() {
- return parentAI.shouldExecute() || !parentAI.getBatKing().getNavigator().noPath();
- }
-
- /**
- * Resets the task
- */
- public void resetTask() {
- parentAI.mEntityTarget = null;
- this.mCooldownTime = 0;
- this.rangedAttackTime = -1;
- }
-
- /**
- * Updates the task
- */
- public void updateTask() {
-
- if (MathUtils.randInt(0, 100) == 0) {
- maxRangedAttackTime = MathUtils.balance(maxRangedAttackTime, 20, 40);
- }
-
- double d0 = parentAI.getBatKing().getDistanceSq(
- parentAI.mEntityTarget.posX,
- parentAI.mEntityTarget.boundingBox.minY,
- parentAI.mEntityTarget.posZ);
- boolean flag = parentAI.getBatKing().getEntitySenses().canSee(parentAI.mEntityTarget);
-
- if (flag) {
- ++this.mCooldownTime;
- } else {
- this.mCooldownTime = 0;
- }
-
- if (d0 <= (double) this.field_82642_h && this.mCooldownTime >= 20) {
- parentAI.getBatKing().getNavigator().clearPathEntity();
- } else {
- if (parentAI.getBatKing().getNavigator()
- .tryMoveToEntityLiving(parentAI.mEntityTarget, this.entityMoveSpeed)) {
- Logger.INFO("Doing Ranged Ai Task.");
- } else {
- Logger.INFO("Not Doing Ranged Ai Task.");
- }
- }
-
- parentAI.getBatKing().getLookHelper().setLookPositionWithEntity(parentAI.mEntityTarget, 30.0F, 30.0F);
- float f;
- Logger.INFO("Ranged AI - " + rangedAttackTime);
-
- if (--this.rangedAttackTime == 0) {
- if (d0 > (double) this.field_82642_h || !flag) {
- Logger.INFO(
- "Stopping ranged attack. " + flag
- + "|"
- + (d0 > (double) this.field_82642_h)
- + "|"
- + d0
- + "|"
- + (double) this.field_82642_h);
- return;
- }
-
- f = MathHelper.sqrt_double(d0) / this.field_96562_i;
- float f1 = f;
-
- if (f < 0.1F) {
- f1 = 0.1F;
- }
-
- if (f1 > 1.0F) {
- f1 = 1.0F;
- }
- Logger.INFO("Trying to do a ranged attack.");
- parentAI.getBatKingAsIRangedAttackMob().attackEntityWithRangedAttack(parentAI.mEntityTarget, f1);
- this.rangedAttackTime = MathHelper.floor_float(
- f * (float) (this.maxRangedAttackTime - this.field_96561_g) + (float) this.field_96561_g);
- } else if (this.rangedAttackTime < 0) {
- f = MathHelper.sqrt_double(d0) / this.field_96562_i;
- this.rangedAttackTime = MathHelper.floor_float(
- f * (float) (this.maxRangedAttackTime - this.field_96561_g) + (float) this.field_96561_g);
- }
- }
- }
-
- private class Melee {
-
- private final EntityAIBatKingAttack parentAI;
-
- /**
- * An amount of decrementing ticks that allows the entity to attack once the tick reaches 0.
- */
- int attackTick;
- /** The speed with which the mob will approach the target */
- double speedTowardsTarget;
- /**
- * When true, the mob will continue chasing its target, even if it can't find a path to them right now.
- */
- boolean longMemory;
-
- Class classTarget;
- private int field_75445_i;
- private double field_151497_i;
- private double field_151495_j;
- private double field_151496_k;
-
- private int failedPathFindingPenalty;
-
- public Melee(EntityAIBatKingAttack aParent, Class aClassTarget, double aMoveToTargetSpeed,
- boolean aLongMemory) {
- this.parentAI = aParent;
- this.classTarget = aClassTarget;
- this.speedTowardsTarget = aMoveToTargetSpeed;
- this.longMemory = aLongMemory;
- parentAI.setMutexBits(3);
- }
-
- /**
- * Returns whether the EntityAIBase should begin execution.
- */
- public boolean shouldExecute() {
- if (!parentAI.hasValidTarget()) {
- return false;
- }
- EntityLivingBase entitylivingbase = parentAI.getTarget();
-
- if (entitylivingbase == null) {
- return false;
- } else if (!entitylivingbase.isEntityAlive()) {
- return false;
- } else if (this.classTarget != null && !this.classTarget.isAssignableFrom(entitylivingbase.getClass())) {
- return false;
- } else {
- if (--this.field_75445_i <= 0) {
- parentAI.mEntityPathEntity = parentAI.mAttackingEntity.getNavigator()
- .getPathToEntityLiving(entitylivingbase);
- this.field_75445_i = 4 + parentAI.mAttackingEntity.getRNG().nextInt(7);
- return parentAI.mEntityPathEntity != null;
- } else {
- return true;
- }
- }
- }
-
- /**
- * Returns whether an in-progress EntityAIBase should continue executing
- */
- public boolean continueExecuting() {
- EntityLivingBase entitylivingbase = parentAI.mAttackingEntity.getAttackTarget();
- return entitylivingbase == null ? false
- : (!entitylivingbase.isEntityAlive() ? false
- : (!this.longMemory ? !parentAI.mAttackingEntity.getNavigator().noPath()
- : parentAI.mAttackingEntity.isWithinHomeDistance(
- MathHelper.floor_double(entitylivingbase.posX),
- MathHelper.floor_double(entitylivingbase.posY),
- MathHelper.floor_double(entitylivingbase.posZ))));
- }
-
- /**
- * Execute a one shot task or start executing a continuous task
- */
- public void startExecuting() {
- parentAI.mAttackingEntity.getNavigator().setPath(parentAI.mEntityPathEntity, this.speedTowardsTarget);
- this.field_75445_i = 0;
- }
-
- /**
- * Resets the task
- */
- public void resetTask() {
- parentAI.mAttackingEntity.getNavigator().clearPathEntity();
- }
-
- /**
- * Updates the task
- */
- public void updateTask() {
- EntityLivingBase entitylivingbase = parentAI.mAttackingEntity.getAttackTarget();
- parentAI.mAttackingEntity.getLookHelper().setLookPositionWithEntity(entitylivingbase, 30.0F, 30.0F);
- double d0 = parentAI.mAttackingEntity
- .getDistanceSq(entitylivingbase.posX, entitylivingbase.boundingBox.minY, entitylivingbase.posZ);
- double d1 = (double) (parentAI.mAttackingEntity.width * 2.0F * parentAI.mAttackingEntity.width * 2.0F
- + entitylivingbase.width);
- --this.field_75445_i;
-
- if ((this.longMemory || parentAI.mAttackingEntity.getEntitySenses().canSee(entitylivingbase))
- && this.field_75445_i <= 0
- && (this.field_151497_i == 0.0D && this.field_151495_j == 0.0D && this.field_151496_k == 0.0D
- || entitylivingbase
- .getDistanceSq(this.field_151497_i, this.field_151495_j, this.field_151496_k)
- >= 1.0D
- || parentAI.mAttackingEntity.getRNG().nextFloat() < 0.05F)) {
- this.field_151497_i = entitylivingbase.posX;
- this.field_151495_j = entitylivingbase.boundingBox.minY;
- this.field_151496_k = entitylivingbase.posZ;
- this.field_75445_i = failedPathFindingPenalty + 4 + parentAI.mAttackingEntity.getRNG().nextInt(7);
-
- if (parentAI.mAttackingEntity.getNavigator().getPath() != null) {
- PathPoint finalPathPoint = parentAI.mAttackingEntity.getNavigator().getPath().getFinalPathPoint();
- if (finalPathPoint != null && entitylivingbase
- .getDistanceSq(finalPathPoint.xCoord, finalPathPoint.yCoord, finalPathPoint.zCoord) < 1) {
- failedPathFindingPenalty = 0;
- } else {
- failedPathFindingPenalty += 10;
- }
- } else {
- failedPathFindingPenalty += 10;
- }
-
- if (d0 > 1024.0D) {
- this.field_75445_i += 10;
- } else if (d0 > 256.0D) {
- this.field_75445_i += 5;
- }
-
- if (!parentAI.mAttackingEntity.getNavigator()
- .tryMoveToEntityLiving(entitylivingbase, this.speedTowardsTarget)) {
- this.field_75445_i += 15;
- }
- }
-
- this.attackTick = Math.max(this.attackTick - 1, 0);
-
- if (d0 <= d1 && this.attackTick <= 20) {
- this.attackTick = 20;
-
- if (parentAI.mAttackingEntity.getHeldItem() != null) {
- parentAI.mAttackingEntity.swingItem();
- }
-
- parentAI.mAttackingEntity.attackEntityAsMob(entitylivingbase);
- }
- }
- }
-}
diff --git a/src/main/java/gtPlusPlus/core/entity/item/ItemEntityGiantEgg.java b/src/main/java/gtPlusPlus/core/entity/item/ItemEntityGiantEgg.java
deleted file mode 100644
index d100d3571b..0000000000
--- a/src/main/java/gtPlusPlus/core/entity/item/ItemEntityGiantEgg.java
+++ /dev/null
@@ -1,117 +0,0 @@
-package gtPlusPlus.core.entity.item;
-
-import net.minecraft.entity.item.EntityItem;
-import net.minecraft.item.ItemStack;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.world.World;
-
-import gtPlusPlus.api.objects.Logger;
-import gtPlusPlus.core.entity.monster.EntityGiantChickenBase;
-import gtPlusPlus.core.item.ModItems;
-import gtPlusPlus.core.util.math.MathUtils;
-import gtPlusPlus.core.util.minecraft.ItemUtils;
-import gtPlusPlus.core.util.minecraft.NBTUtils;
-
-public class ItemEntityGiantEgg extends EntityItem {
-
- /**
- * The maximum age of this Chicken Egg. The item will try hatch once this is reached.
- */
- public int mEggAge = 10000;
-
- public int mEggSize = -1;
-
- public ItemEntityGiantEgg(World aWorld) {
- super(aWorld);
- }
-
- public ItemEntityGiantEgg(World aWorld, double aX, double aY, double aZ) {
- super(aWorld, aX, aY, aZ);
- }
-
- public ItemEntityGiantEgg(World aWorld, double aX, double aY, double aZ, ItemStack aStack) {
- super(aWorld, aX, aY, aZ, aStack);
- }
-
- private boolean spawnGiantChicken() {
- try {
- EntityGiantChickenBase entitychicken = new EntityGiantChickenBase(this.worldObj);
- entitychicken.setGrowingAge(-MathUtils.randInt(20000, 40000));
- entitychicken.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F);
- return this.worldObj.spawnEntityInWorld(entitychicken);
- } catch (Throwable t) {
- return false;
- }
- }
-
- // These eggs also do not combine.
- @Override
- public boolean combineItems(EntityItem p_70289_1_) {
- return false;
- }
-
- @Override
- public void writeEntityToNBT(NBTTagCompound aNBT) {
- super.writeEntityToNBT(aNBT);
- aNBT.setInteger("mEggAge", mEggAge);
- aNBT.setInteger("mTicksExisted", this.age);
- }
-
- @Override
- public void readEntityFromNBT(NBTTagCompound aNBT) {
- super.readEntityFromNBT(aNBT);
- mEggAge = aNBT.getInteger("mEggAge");
- }
-
- // They're fireproof
- @Override
- public void setFire(int p_70015_1_) {}
-
- @Override
- public boolean isBurning() {
- return false;
- }
-
- @Override
- public void onEntityUpdate() {
- super.onEntityUpdate();
- Logger.INFO("1");
- // Large eggs don't despawn, because they will try hatch first.
- if (this.lifespan != Integer.MAX_VALUE - 1) {
- this.lifespan = Integer.MAX_VALUE - 1;
- }
-
- if (this.getEntityItem() != null) {
- ItemStack g = this.getEntityItem();
- NBTUtils.setInteger(g, "mTicksExisted", this.age);
- NBTUtils.setInteger(g, "lifespan", this.lifespan);
- NBTUtils.setBoolean(g, "playerHeld", false);
- this.setEntityItemStack(g);
- Logger.INFO("Writing age to NBT of stored stack item.");
- } else {
- ItemStack g = ItemUtils.getSimpleStack(ModItems.itemBigEgg);
- NBTUtils.setInteger(g, "mTicksExisted", this.age);
- NBTUtils.setInteger(g, "lifespan", this.lifespan);
- NBTUtils.setBoolean(g, "playerHeld", false);
- this.setEntityItemStack(g);
- Logger.INFO("Writing age to NBT of new stack item.");
- }
-
- if (this.age >= 1000) {
- // Cache the value for efficiency
- if (mEggSize == -1) mEggSize = (this.getEntityItem() != null
- ? (this.getEntityItem().hasTagCompound()
- ? (this.getEntityItem().getTagCompound().hasKey("size")
- ? this.getEntityItem().getTagCompound().getInteger("size")
- : 1)
- : 1)
- : 1);
- if (MathUtils.randInt(100 * mEggSize, 1000) >= MathUtils.randInt(950, 1000)) {
- // Spawn Chicken
- if (spawnGiantChicken()) {
- this.kill();
- }
- }
- }
- }
-}
diff --git a/src/main/java/gtPlusPlus/core/entity/monster/EntityBatKing.java b/src/main/java/gtPlusPlus/core/entity/monster/EntityBatKing.java
deleted file mode 100644
index 1c786a20b8..0000000000
--- a/src/main/java/gtPlusPlus/core/entity/monster/EntityBatKing.java
+++ /dev/null
@@ -1,760 +0,0 @@
-package gtPlusPlus.core.entity.monster;
-
-import java.lang.reflect.Field;
-
-import net.minecraft.entity.Entity;
-import net.minecraft.entity.EntityLivingBase;
-import net.minecraft.entity.EnumCreatureAttribute;
-import net.minecraft.entity.IRangedAttackMob;
-import net.minecraft.entity.SharedMonsterAttributes;
-import net.minecraft.entity.ai.EntityAIAttackOnCollide;
-import net.minecraft.entity.ai.EntityAIHurtByTarget;
-import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
-import net.minecraft.entity.ai.EntityAIWander;
-import net.minecraft.entity.ai.RandomPositionGenerator;
-import net.minecraft.entity.monster.EntityMob;
-import net.minecraft.entity.passive.EntityBat;
-import net.minecraft.entity.player.EntityPlayer;
-import net.minecraft.entity.projectile.EntityArrow;
-import net.minecraft.entity.projectile.EntityLargeFireball;
-import net.minecraft.init.Items;
-import net.minecraft.item.Item;
-import net.minecraft.nbt.NBTTagCompound;
-import net.minecraft.util.AxisAlignedBB;
-import net.minecraft.util.DamageSource;
-import net.minecraft.util.MathHelper;
-import net.minecraft.util.Vec3;
-import net.minecraft.world.EnumDifficulty;
-import net.minecraft.world.World;
-
-import gtPlusPlus.api.objects.Logger;
-import gtPlusPlus.api.objects.minecraft.BlockPos;
-import gtPlusPlus.core.entity.ai.batking.EntityAIBatKingAttack;
-import gtPlusPlus.core.entity.projectile.EntityThrowableBomb;
-import gtPlusPlus.core.util.math.MathUtils;
-import gtPlusPlus.core.util.minecraft.EntityUtils;
-import gtPlusPlus.core.util.reflect.ReflectionUtils;
-
-public class EntityBatKing extends EntityMob implements IRangedAttackMob {
-
- public int courseChangeCooldown;
- public double waypointX;
- public double waypointY;
- public double waypointZ;
- private Entity targetedEntity;
- private int aggroCooldown;
- public int prevAttackCounter;
- public int attackCounter;
- private int explosionStrength = 1;
-
- private EntityAIBatKingAttack aiAttack = new EntityAIBatKingAttack(this, null, 1.0D, 20, 60, 15.0F, true);
- private EntityAIAttackOnCollide aiAttackOnCollide = new EntityAIAttackOnCollide(
- this,
- EntityPlayer.class,
- 1.2D,
- false);
-
- public EntityBatKing(World p_i1680_1_) {
- super(p_i1680_1_);
- this.setSize(2.5F, 1.5F);
-
- this.setIsBatHanging(false);
- this.isImmuneToFire = true;
- this.experienceValue = 1000;
-
- this.tasks.addTask(3, this.aiAttack);
- // this.tasks.addTask(4, this.aiAttackOnCollide);
- // this.tasks.addTask(4, new EntityAIRestrictSun(this));
- // this.tasks.addTask(5, new EntityAIFleeSun(this, 1.0D));
- this.tasks.addTask(4, new EntityAIWander(this, 1.0D));
- // this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
- // this.tasks.addTask(6, new EntityAILookIdle(this));
-
- this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true));
- // this.targetTasks.addTask(2, this.aiAttack);
- this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true));
- this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityBat.class, 0, false));
- }
-
- @Override
- protected void entityInit() {
- super.entityInit();
- }
-
- /**
- * Get this Entity's EnumCreatureAttribute
- */
- @Override
- public EnumCreatureAttribute getCreatureAttribute() {
- return EnumCreatureAttribute.UNDEAD;
- }
-
- /**
- * Gets the pitch of living sounds in living entities.
- */
- @Override
- protected float getSoundPitch() {
- return super.getSoundPitch() * 0.15F;
- }
-
- /**
- * Returns the sound this mob makes while it's alive.
- */
- @Override
- protected String getLivingSound() {
- int aRand = MathUtils.randInt(0, 10);
- if (aRand < 6) {
- return null;
- } else if (aRand <= 8) {
- return "mob.bat.idle";
- } else {
- return "mob.blaze.breathe";
- }
- }
-
- /**
- * Returns the sound this mob makes when it is hurt.
- */
- @Override
- protected String getHurtSound() {
- return "mob.blaze.hit";
- }
-
- /**
- * Returns the sound this mob makes on death.
- */
- @Override
- protected String getDeathSound() {
- return "mob.bat.death";
- }
-
- /**
- * Returns true if this entity should push and be pushed by other entities when colliding.
- */
- @Override
- public boolean canBePushed() {
- return true;
- }
-
- @Override
- protected void collideWithEntity(Entity aEntity) {
- if (aEntity != null) {
- if (aEntity instanceof EntityPlayer) {
- EntityUtils.doDamage(aEntity, DamageSource.magic, (int) (((EntityPlayer) aEntity).getHealth() / 20));
- }
- }
- }
-
- @Override
- protected void collideWithNearbyEntities() {}
-
- @Override
- protected void applyEntityAttributes() {
-
- this.getAttributeMap().registerAttribute(SharedMonsterAttributes.maxHealth);
- this.getAttributeMap().registerAttribute(SharedMonsterAttributes.attackDamage);
- this.getAttributeMap().registerAttribute(SharedMonsterAttributes.knockbackResistance);
- this.getAttributeMap().registerAttribute(SharedMonsterAttributes.movementSpeed);
- this.getAttributeMap().registerAttribute(SharedMonsterAttributes.followRange);
-
- this.getEntityAttribute(SharedMonsterAttributes.maxHealth).setBaseValue(250.0D);
- this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(6.0D);
- this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(1D);
- this.getEntityAttribute(SharedMonsterAttributes.followRange).setBaseValue(120.0D);
- }
-
- public boolean getIsBatHanging() {
- return false;
- }
-
- public void setIsBatHanging(boolean p_82236_1_) {
- generateParticles(this);
- generateParticles(this);
- generateParticles(this);
- for (int i = 0; i < 32; ++i) {
- //
- String particleName = "lava";
- if (MathUtils.randInt(0, 3) <= 2) {
- particleName = "crit";
- }
- this.worldObj.spawnParticle(
- particleName,
- this.posX + (this.rand.nextDouble() - 0.5D) * (double) this.width,
- this.posY + this.rand.nextDouble() * (double) this.height,
- this.posZ + (this.rand.nextDouble() - 0.5D) * (double) this.width,
- 0.0D,
- 0.0D,
- 0.0D);
- }
- }
-
- /**
- * Returns true if the newer Entity AI code should be run
- */
- @Override
- protected boolean isAIEnabled() {
- return true;
- }
-
- /**
- * Called to update the entity's position/logic.
- */
- @Override
- public void onUpdate() {
- super.onUpdate();
- generateParticles(this);
-
- if (!this.worldObj.isRemote && (this.targetedEntity == null || this.aggroCooldown-- <= 0)) {
- this.targetedEntity = this.worldObj.getClosestVulnerablePlayerToEntity(this, 100.0D);
-
- if (this.targetedEntity != null) {
- this.aggroCooldown = 30;
- if (aiAttack.hasValidTarget()) {
- this.setAttackTarget(aiAttack.getTarget());
- } else {
- Logger.INFO("No valid target.");
- if (ReflectionUtils.doesFieldExist(aiAttack.getClass(), "mEntityTarget")) {
- Logger.INFO("Found field.");
- } else {
- Logger.INFO("Did not find field.");
- }
- Field target = ReflectionUtils.getField(EntityAIBatKingAttack.class, "mEntityTarget");
- if (target != null) {
- ReflectionUtils.setField(aiAttack, target, this.targetedEntity);
- Logger.INFO("Set target.");
- } else {