mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
initial cleanup
This commit is contained in:
parent
3d319a1b15
commit
8a59eb9dbc
@ -39,7 +39,7 @@ public class MobConfig {
|
||||
public static int swarmCooldown = 120;
|
||||
|
||||
public static int baseSwarmSize = 5;
|
||||
public static double swarmScalingMult = 1.2;
|
||||
public static double swarmScalingMult = 1.2;
|
||||
public static int sootStep = 50;
|
||||
|
||||
public static int[] glyphidChance = {50, -40};
|
||||
@ -119,10 +119,10 @@ public class MobConfig {
|
||||
+ "The base chance is the stock chance of the bug to spawn within a swarm, unaffected by soot\n"
|
||||
+ "As soot increases, the spawn rate of the bug increases until it reaches a limit determined by the modifier\n"
|
||||
+ "If the default chance is negative, the mob will not spawn by default, and the lower it is,\n"
|
||||
+ "The longer it takes for the modifier to make it positive\n"
|
||||
+ "If the Modifier is negative, the bug will spawn less often in swarms,\n"
|
||||
+ "The longer it takes for the modifier to make it positive\n"
|
||||
+ "If the Modifier is negative, the bug will spawn less often in swarms,\n"
|
||||
+ "And its place will be taken over by another one.\n"
|
||||
+ "\n"
|
||||
+ "\n"
|
||||
+ "The formula for glyphid spawning chance is: (chance + (modifier - modifier / (soot/10)))"
|
||||
+ "The formula for glyphid swarm scaling is: (baseSwarmSize * Math.max(swarmScalingMult * soot/sootStep, 1))");
|
||||
|
||||
@ -140,7 +140,7 @@ public class MobConfig {
|
||||
brendaChance = CommonConfig.createConfigIntList(config, CATEGORY, "12.GC06_brendaChance", "Base Spawn chance and soot modifier for a glyphid brenda", new int[]{-50, 60});
|
||||
johnsonChance = CommonConfig.createConfigIntList(config, CATEGORY, "12.GC07_johnsonChance", "Base Spawn chance and soot modifier for Big Man Johnson", new int[]{-50, 60});
|
||||
|
||||
String rampantDesc = "Rampant Mode changes glyphid behavior and spawning to be more aggressive, changes include:\n"
|
||||
String rampantDesc = "Rampant Mode changes glyphid behavior and spawning to be more aggressive, changes include:\n"
|
||||
+ "\n"
|
||||
+ "Glyphid Scouts will naturally spawn alongside normal mobs if soot levels are above a certain threshold\n"
|
||||
+ "Glyphids will always have the extended targetting enabled\n"
|
||||
|
||||
@ -3,15 +3,12 @@ package com.hbm.entity.mob;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.blocks.generic.BlockGlyphidSpawner;
|
||||
import com.hbm.config.MobConfig;
|
||||
import com.hbm.entity.logic.EntityWaypoint;
|
||||
import com.hbm.entity.pathfinder.PathFinderUtils;
|
||||
import com.hbm.explosion.vanillant.ExplosionVNT;
|
||||
import com.hbm.explosion.vanillant.interfaces.IExplosionSFX;
|
||||
import com.hbm.explosion.vanillant.standard.*;
|
||||
import com.hbm.handler.pollution.PollutionHandler;
|
||||
import com.hbm.handler.pollution.PollutionHandler.PollutionType;
|
||||
@ -59,29 +56,30 @@ public class EntityGlyphid extends EntityMob {
|
||||
|
||||
//used for digging, bigger glyphids have a longer reach
|
||||
public int blastSize = Math.min((int) (3 * (getScale()))/2, 5);
|
||||
public int blastResToDig = Math.min((int) (50 * (getScale() * 2)), 150);
|
||||
public int blastResToDig = Math.min((int) (50 * (getScale() * 2)), 150);
|
||||
public boolean shouldDig;
|
||||
|
||||
// Tasks
|
||||
|
||||
public static final int none = 0;
|
||||
public static final int comm = 1;
|
||||
public static final int expand = 2;
|
||||
public static final int reinforcements = 3;
|
||||
public static final int follow = 4;
|
||||
public static final int terraform = 5;
|
||||
public static final int dig = 6;
|
||||
/** Idle state, only makes glpyhids wander around randomly */
|
||||
public static final int TASK_IDLE = 0;
|
||||
/** Causes the glyphid to walk to the waypoint, then communicate the FOLLOW task to nearby glyphids */
|
||||
public static final int TASK_RETREAT_FOR_REINFORCEMENTS = 1;
|
||||
/** Task used by scouts, if the waypoint is reached it will construct a new hive */
|
||||
public static final int TASK_BUILD_HIVE = 2;
|
||||
/** Creates a waypoint at the home position and then immediately initiates the RETREAT_FOR_REINFORCEMENTS task */
|
||||
public static final int TASK_INITIATE_RETREAT = 3;
|
||||
/** Will simply walk to the waypoint and enter IDLE once it is reached */
|
||||
public static final int TASK_FOLLOW = 4;
|
||||
/** Causes nuclear glyphids to immediately self-destruct, also signaling nearby scouts to retreat */
|
||||
public static final int TASK_TERRAFORM = 5;
|
||||
/** Id any task other than IDLE is interrupted by an obstacle, initiates digging behavior which is also communicated to nearby glyohids */
|
||||
public static final int TASK_DIG = 6;
|
||||
|
||||
EntityWaypoint taskWaypoint = null;
|
||||
|
||||
public EntityGlyphid(World world) {
|
||||
super(world);
|
||||
/*this.tasks.addTask(0, new EntityAISwimming(this));
|
||||
this.tasks.addTask(2, new EntityAIAttackOnCollide(this, EntityPlayer.class, 1.0D, false));
|
||||
this.tasks.addTask(5, new EntityAIMoveTowardsRestriction(this, 1.0D));
|
||||
this.tasks.addTask(7, new EntityAIWander(this, 1.0D));
|
||||
this.tasks.addTask(8, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F));
|
||||
this.tasks.addTask(8, new EntityAILookIdle(this));
|
||||
this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true));
|
||||
this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 0, true));*/
|
||||
this.setSize(1.75F, 1F);
|
||||
}
|
||||
|
||||
@ -124,14 +122,14 @@ public class EntityGlyphid extends EntityMob {
|
||||
onBlinded();
|
||||
}
|
||||
|
||||
if(getCurrentTask() == follow){
|
||||
if(getCurrentTask() == TASK_FOLLOW){
|
||||
|
||||
//incase the waypoint somehow doesn't exist and it got this task anyway
|
||||
if(isAtDestination() && taskX == none) {
|
||||
setCurrentTask(none, null);
|
||||
if(isAtDestination() && taskX == TASK_IDLE) {
|
||||
setCurrentTask(TASK_IDLE, null);
|
||||
}
|
||||
//the task cannot be 6 outside of rampant, so this is a non issue p much
|
||||
} else if (getCurrentTask() == dig && ticksExisted % 20 == 0 && isAtDestination()) {
|
||||
} else if (getCurrentTask() == TASK_DIG && ticksExisted % 20 == 0 && isAtDestination()) {
|
||||
swingItem();
|
||||
|
||||
ExplosionVNT vnt = new ExplosionVNT(worldObj, taskX, taskY + 2, taskZ, blastSize, this);
|
||||
@ -156,8 +154,8 @@ public class EntityGlyphid extends EntityMob {
|
||||
@Override
|
||||
protected void dropFewItems(boolean byPlayer, int looting) {
|
||||
super.dropFewItems(byPlayer, looting);
|
||||
Item drop = isBurning() ? ModItems.glyphid_meat_grilled : ModItems.glyphid_meat;
|
||||
if(rand.nextInt(2) == 0) this.entityDropItem(new ItemStack(drop, ((int)getScale()*2) + looting), 0F);
|
||||
Item drop = isBurning() ? ModItems.glyphid_meat_grilled : ModItems.glyphid_meat;
|
||||
if(rand.nextInt(2) == 0) this.entityDropItem(new ItemStack(drop, ((int) getScale() * 2) + looting), 0F);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -170,7 +168,7 @@ public class EntityGlyphid extends EntityMob {
|
||||
|
||||
@Override
|
||||
protected void updateWanderPath() {
|
||||
if(getCurrentTask() == none) {
|
||||
if(getCurrentTask() == TASK_IDLE) {
|
||||
super.updateWanderPath();
|
||||
}
|
||||
}
|
||||
@ -185,7 +183,7 @@ public class EntityGlyphid extends EntityMob {
|
||||
// hell yeah!!
|
||||
if (useExtendedTargeting() && this.entityToAttack != null) {
|
||||
this.setPathToEntity(PathFinderUtils.getPathEntityToEntityPartial(worldObj, this, this.entityToAttack, 16F, true, false, true, true));
|
||||
} else if (getCurrentTask() != none) {
|
||||
} else if (getCurrentTask() != TASK_IDLE) {
|
||||
|
||||
this.worldObj.theProfiler.startSection("stroll");
|
||||
|
||||
@ -203,11 +201,11 @@ public class EntityGlyphid extends EntityMob {
|
||||
|
||||
}
|
||||
|
||||
if (taskX != none) {
|
||||
if(MobConfig.rampantDig) {
|
||||
if (taskX != TASK_IDLE) {
|
||||
if(MobConfig.rampantDig) {
|
||||
|
||||
MovingObjectPosition obstacle = findWaypointObstruction();
|
||||
if (getScale() >= 1 && getCurrentTask() != dig && obstacle != null) {
|
||||
if (getScale() >= 1 && getCurrentTask() != TASK_DIG && obstacle != null) {
|
||||
digToWaypoint(obstacle);
|
||||
} else {
|
||||
Vec3 vec = Vec3.createVectorHelper(posX, posY, posZ);
|
||||
@ -222,19 +220,18 @@ public class EntityGlyphid extends EntityMob {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
this.worldObj.theProfiler.endSection();
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public void onBlinded(){
|
||||
this.entityToAttack = null;
|
||||
this.setPathToEntity(null);
|
||||
fleeingTick = 80;
|
||||
this.fleeingTick = 80;
|
||||
|
||||
if(getScale() >= 1.25){
|
||||
if(ticksExisted % 20 == 0) {
|
||||
@ -253,8 +250,6 @@ public class EntityGlyphid extends EntityMob {
|
||||
if (block == ModBlocks.lantern) {
|
||||
rotationYaw = 360F / 16 * i;
|
||||
swingItem();
|
||||
//this function is incredibly useful for breaking blocks naturally but obfuscated
|
||||
//jesus fucking christ who the fuck runs forge?
|
||||
worldObj.func_147480_a(mop.blockX, mop.blockY, mop.blockZ, false);
|
||||
}
|
||||
|
||||
@ -270,7 +265,7 @@ public class EntityGlyphid extends EntityMob {
|
||||
|
||||
@Override
|
||||
protected boolean canDespawn() {
|
||||
return ticksExisted > 3500 && entityToAttack == null && getCurrentTask() == none;
|
||||
return ticksExisted > 3500 && entityToAttack == null && getCurrentTask() == TASK_IDLE;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -454,16 +449,16 @@ public class EntityGlyphid extends EntityMob {
|
||||
switch(task){
|
||||
|
||||
//call for reinforcements
|
||||
case comm: if(taskWaypoint != null){
|
||||
communicate(follow, taskWaypoint);
|
||||
setCurrentTask(follow, taskWaypoint);
|
||||
case TASK_RETREAT_FOR_REINFORCEMENTS: if(taskWaypoint != null){
|
||||
communicate(TASK_FOLLOW, taskWaypoint);
|
||||
setCurrentTask(TASK_FOLLOW, taskWaypoint);
|
||||
} break;
|
||||
|
||||
//expand the hive, used by the scout
|
||||
//case 2: expandHive(null);
|
||||
|
||||
//retreat
|
||||
case reinforcements:
|
||||
case TASK_INITIATE_RETREAT:
|
||||
|
||||
if (!worldObj.isRemote && taskWaypoint == null) {
|
||||
|
||||
@ -473,15 +468,15 @@ public class EntityGlyphid extends EntityMob {
|
||||
|
||||
//First, go home and get reinforcements
|
||||
EntityWaypoint home = new EntityWaypoint(worldObj);
|
||||
home.setWaypointType(comm);
|
||||
home.setWaypointType(TASK_RETREAT_FOR_REINFORCEMENTS);
|
||||
home.setAdditionalWaypoint(additional);
|
||||
home.setHighPriority();
|
||||
home.setLocationAndAngles(homeX, homeY, homeZ, 0, 0);
|
||||
worldObj.spawnEntityInWorld(home);
|
||||
|
||||
this.taskWaypoint = home;
|
||||
communicate(follow, home);
|
||||
setCurrentTask(follow, taskWaypoint);
|
||||
communicate(TASK_FOLLOW, home);
|
||||
setCurrentTask(TASK_FOLLOW, taskWaypoint);
|
||||
|
||||
break;
|
||||
}
|
||||
@ -492,7 +487,7 @@ public class EntityGlyphid extends EntityMob {
|
||||
//fifth task is used only in the scout and big man johnson, for terraforming
|
||||
|
||||
//dig
|
||||
case dig:
|
||||
case TASK_DIG:
|
||||
shouldDig = true;
|
||||
break;
|
||||
|
||||
@ -502,7 +497,8 @@ public class EntityGlyphid extends EntityMob {
|
||||
|
||||
}
|
||||
|
||||
public void communicate(int task, @Nullable EntityWaypoint waypoint) {
|
||||
/** Copies tasks and waypoint to nearby glyphids. Does not work on glyphid scouts */
|
||||
public void communicate(int task, @Nullable EntityWaypoint waypoint) {
|
||||
int radius = waypoint != null ? waypoint.radius : 4;
|
||||
|
||||
AxisAlignedBB bb = AxisAlignedBB.getBoundingBox(
|
||||
@ -523,7 +519,7 @@ public class EntityGlyphid extends EntityMob {
|
||||
}
|
||||
}
|
||||
|
||||
/** What each type of glyphid does when it is time to expand the hive.
|
||||
/** What each type of glyphid does when it is time to expand the hive.
|
||||
* @return Whether it has expanded successfully or not
|
||||
* **/
|
||||
public boolean expandHive(){
|
||||
@ -532,10 +528,9 @@ public class EntityGlyphid extends EntityMob {
|
||||
|
||||
public boolean isAtDestination() {
|
||||
int destinationRadius = taskWaypoint != null ? (int) Math.pow(taskWaypoint.radius, 2) : 25;
|
||||
|
||||
return this.getDistanceSq(taskX, taskY, taskZ) <= destinationRadius;
|
||||
}
|
||||
///TASK SYSTEM END
|
||||
///TASK SYSTEM END
|
||||
|
||||
///DIGGING SYSTEM START
|
||||
|
||||
@ -564,17 +559,17 @@ public class EntityGlyphid extends EntityMob {
|
||||
previousTask = getCurrentTask();
|
||||
previousWaypoint = getWaypoint();
|
||||
|
||||
setCurrentTask(dig, target);
|
||||
setCurrentTask(TASK_DIG, target);
|
||||
|
||||
Vec3 vec = Vec3.createVectorHelper(posX, posY, posZ);
|
||||
int maxDist = (int) (Math.sqrt(vec.squareDistanceTo(taskX, taskY, taskZ)) * 1.2);
|
||||
this.setPathToEntity(PathFinderUtils.getPathEntityToCoordPartial(worldObj, this, taskX, taskY, taskZ, maxDist, true, false, true, true));
|
||||
|
||||
communicate(dig, target);
|
||||
communicate(TASK_DIG, target);
|
||||
|
||||
}
|
||||
///DIGGING END
|
||||
|
||||
|
||||
@Override
|
||||
public void writeEntityToNBT(NBTTagCompound nbt) {
|
||||
super.writeEntityToNBT(nbt);
|
||||
@ -608,5 +603,4 @@ public class EntityGlyphid extends EntityMob {
|
||||
|
||||
this.currentTask = nbt.getInteger("task");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -2,8 +2,6 @@ package com.hbm.entity.mob;
|
||||
|
||||
import com.hbm.entity.effect.EntityMist;
|
||||
import com.hbm.entity.projectile.EntityChemical;
|
||||
import com.hbm.inventory.FluidContainerRegistry;
|
||||
import com.hbm.inventory.fluid.FluidType;
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.main.ResourceManager;
|
||||
@ -11,14 +9,12 @@ import com.hbm.main.ResourceManager;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityLivingBase;
|
||||
import net.minecraft.entity.SharedMonsterAttributes;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.potion.Potion;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.fluids.Fluid;
|
||||
|
||||
public class EntityGlyphidBehemoth extends EntityGlyphid {
|
||||
|
||||
@ -100,7 +96,7 @@ public class EntityGlyphidBehemoth extends EntityGlyphid {
|
||||
|
||||
@Override
|
||||
protected void dropFewItems(boolean byPlayer, int looting) {
|
||||
this.entityDropItem(new ItemStack(ModItems.glyphid_gland, 1, Fluids.SULFURIC_ACID.getID()), 1);
|
||||
this.entityDropItem(new ItemStack(ModItems.glyphid_gland, 1, Fluids.SULFURIC_ACID.getID()), 1);
|
||||
super.dropFewItems(byPlayer, looting);
|
||||
}
|
||||
@Override
|
||||
|
||||
@ -1,15 +1,12 @@
|
||||
package com.hbm.entity.mob;
|
||||
|
||||
import com.hbm.entity.effect.EntityMist;
|
||||
import com.hbm.inventory.FluidContainerRegistry;
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.items.ModItems;
|
||||
import com.hbm.main.ResourceManager;
|
||||
|
||||
import net.minecraft.entity.SharedMonsterAttributes;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.potion.Potion;
|
||||
import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.util.DamageSource;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
@ -1,7 +1,6 @@
|
||||
package com.hbm.entity.mob;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
import com.hbm.entity.effect.EntityMist;
|
||||
import com.hbm.entity.logic.EntityWaypoint;
|
||||
import com.hbm.explosion.vanillant.ExplosionVNT;
|
||||
import com.hbm.explosion.vanillant.standard.BlockAllocatorStandard;
|
||||
@ -9,7 +8,6 @@ import com.hbm.explosion.vanillant.standard.BlockMutatorDebris;
|
||||
import com.hbm.explosion.vanillant.standard.BlockProcessorStandard;
|
||||
import com.hbm.explosion.vanillant.standard.EntityProcessorStandard;
|
||||
import com.hbm.explosion.vanillant.standard.PlayerProcessorStandard;
|
||||
import com.hbm.inventory.fluid.Fluids;
|
||||
import com.hbm.main.MainRegistry;
|
||||
import com.hbm.main.ResourceManager;
|
||||
import com.hbm.packet.AuxParticlePacketNT;
|
||||
@ -50,22 +48,22 @@ public class EntityGlyphidNuclear extends EntityGlyphid {
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
super.onUpdate();
|
||||
if (ticksExisted % 20 == 0) {
|
||||
if (isAtDestination() && getCurrentTask() == follow) {
|
||||
setCurrentTask(none, null);
|
||||
if(ticksExisted % 20 == 0) {
|
||||
if(isAtDestination() && getCurrentTask() == TASK_FOLLOW) {
|
||||
setCurrentTask(TASK_IDLE, null);
|
||||
}
|
||||
|
||||
if(getCurrentTask() == expand && getAITarget() == null){
|
||||
if(getCurrentTask() == TASK_BUILD_HIVE && getAITarget() == null) {
|
||||
this.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 10 * 20, 3));
|
||||
}
|
||||
|
||||
if (getCurrentTask() == terraform) {
|
||||
if(getCurrentTask() == TASK_TERRAFORM) {
|
||||
this.setHealth(0);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/** Communicates only with glyphid scouts, unlike the super implementation which does the opposite */
|
||||
@Override
|
||||
public void communicate(int task, @Nullable EntityWaypoint waypoint) {
|
||||
int radius = waypoint != null ? waypoint.radius : 4;
|
||||
@ -99,7 +97,6 @@ public class EntityGlyphidNuclear extends EntityGlyphid {
|
||||
|
||||
@Override
|
||||
public boolean isArmorBroken(float amount) {
|
||||
// amount < 5 ? 5 : amount < 10 ? 3 : 2;
|
||||
return this.rand.nextInt(100) <= Math.min(Math.pow(amount * 0.12, 2), 100);
|
||||
}
|
||||
|
||||
@ -131,9 +128,11 @@ public class EntityGlyphidNuclear extends EntityGlyphid {
|
||||
++this.deathTicks;
|
||||
|
||||
if(!hasWaypoint) {
|
||||
communicate(reinforcements, null);
|
||||
// effectively causes neighboring EntityGlyphidScout to retreat
|
||||
communicate(TASK_INITIATE_RETREAT, null);
|
||||
hasWaypoint = true;
|
||||
}
|
||||
|
||||
if(deathTicks == 90){
|
||||
int radius = 8;
|
||||
AxisAlignedBB bb = AxisAlignedBB.getBoundingBox(
|
||||
|
||||
@ -17,7 +17,6 @@ import net.minecraft.potion.PotionEffect;
|
||||
import net.minecraft.util.*;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
import java.util.List;
|
||||
|
||||
public class EntityGlyphidScout extends EntityGlyphid {
|
||||
@ -28,6 +27,7 @@ public class EntityGlyphidScout extends EntityGlyphid {
|
||||
int minDistanceToHive = 8;
|
||||
boolean useLargeHive = false;
|
||||
float largeHiveChance = MobConfig.largeHiveChance;
|
||||
|
||||
public EntityGlyphidScout(World world) {
|
||||
super(world);
|
||||
this.setSize(1.25F, 0.75F);
|
||||
@ -42,6 +42,7 @@ public class EntityGlyphidScout extends EntityGlyphid {
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public ResourceLocation getSkin() {
|
||||
return ResourceManager.glyphid_scout_tex;
|
||||
@ -64,14 +65,14 @@ public class EntityGlyphidScout extends EntityGlyphid {
|
||||
this.getEntityAttribute(SharedMonsterAttributes.movementSpeed).setBaseValue(1.5D);
|
||||
this.getEntityAttribute(SharedMonsterAttributes.attackDamage).setBaseValue(2D);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onUpdate() {
|
||||
|
||||
super.onUpdate();
|
||||
|
||||
if((getCurrentTask() != expand || getCurrentTask() != terraform) && taskWaypoint == null) {
|
||||
if((getCurrentTask() != TASK_BUILD_HIVE || getCurrentTask() != TASK_TERRAFORM) && taskWaypoint == null) {
|
||||
|
||||
if(MobConfig.rampantGlyphidGuidance && PollutionHandler.targetCoords != null){
|
||||
if(MobConfig.rampantGlyphidGuidance && PollutionHandler.targetCoords != null){
|
||||
if(!hasTarget) {
|
||||
Vec3 dirVec = playerBaseDirFinder(
|
||||
Vec3.createVectorHelper(posX, posY, posZ),
|
||||
@ -84,62 +85,51 @@ public class EntityGlyphidScout extends EntityGlyphid {
|
||||
worldObj.spawnEntityInWorld(target);
|
||||
hasTarget = true;
|
||||
|
||||
setCurrentTask(1, target);
|
||||
setCurrentTask(TASK_RETREAT_FOR_REINFORCEMENTS, target);
|
||||
}
|
||||
|
||||
if(super.isAtDestination()) {
|
||||
setCurrentTask(2, null) ;
|
||||
setCurrentTask(TASK_BUILD_HIVE, null) ;
|
||||
hasTarget = false;
|
||||
}
|
||||
|
||||
} else {
|
||||
setCurrentTask(2, null);
|
||||
setCurrentTask(TASK_BUILD_HIVE, null);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if(getCurrentTask() == expand || getCurrentTask() == terraform) {
|
||||
if(getCurrentTask() == TASK_BUILD_HIVE || getCurrentTask() == TASK_TERRAFORM) {
|
||||
|
||||
if(!worldObj.isRemote && !hasTarget) {
|
||||
//Check for whether a big man johnson is nearby, this makes the scout switch into its terraforming task
|
||||
if(scoutingRange != 60 && findJohnson()){
|
||||
setCurrentTask(5, null);
|
||||
if(scoutingRange != 60 && hasNuclearGlyphidNearby()){
|
||||
setCurrentTask(TASK_TERRAFORM, null);
|
||||
}
|
||||
|
||||
//Placeholder for a more advanced hive design
|
||||
/*
|
||||
if(PollutionHandler.getPollution(worldObj,
|
||||
(int) posX,
|
||||
(int) posY,
|
||||
(int) posZ, PollutionHandler.PollutionType.SOOT) >= MobConfig.largeHiveThreshold){
|
||||
|
||||
useLargeHive = true;
|
||||
this.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 60 * 20, 3));
|
||||
}*/
|
||||
|
||||
if (expandHive()){
|
||||
this.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 180*20, 1));
|
||||
if(expandHive()) {
|
||||
this.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 180 * 20, 1));
|
||||
hasTarget = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (getCurrentTask() == terraform && super.isAtDestination() && doubleCheckHive()) {
|
||||
communicate(terraform, taskWaypoint);
|
||||
if (getCurrentTask() == TASK_TERRAFORM && super.isAtDestination() && canBuildHiveHere()) {
|
||||
communicate(TASK_TERRAFORM, taskWaypoint);
|
||||
}
|
||||
|
||||
if (ticksExisted % 10 == 0 && isAtDestination()) {
|
||||
timer++;
|
||||
|
||||
if (!worldObj.isRemote && doubleCheckHive()) {
|
||||
if (!worldObj.isRemote && canBuildHiveHere()) {
|
||||
if(timer == 1) {
|
||||
|
||||
EntityWaypoint additional = new EntityWaypoint(worldObj);
|
||||
additional.setLocationAndAngles(posX, posY, posZ, 0, 0);
|
||||
additional.setWaypointType(none);
|
||||
additional.setWaypointType(TASK_IDLE);
|
||||
|
||||
//First, go home and get reinforcements
|
||||
EntityWaypoint home = new EntityWaypoint(worldObj);
|
||||
home.setWaypointType(comm);
|
||||
home.setWaypointType(TASK_RETREAT_FOR_REINFORCEMENTS);
|
||||
home.setAdditionalWaypoint(additional);
|
||||
home.setLocationAndAngles(homeX, homeY, homeZ, 0, 0);
|
||||
home.maxAge = 1200;
|
||||
@ -149,7 +139,7 @@ public class EntityGlyphidScout extends EntityGlyphid {
|
||||
|
||||
this.taskWaypoint = home;
|
||||
this.addPotionEffect(new PotionEffect(Potion.moveSlowdown.id, 40 * 20, 10));
|
||||
communicate(comm, taskWaypoint);
|
||||
communicate(TASK_RETREAT_FOR_REINFORCEMENTS, taskWaypoint);
|
||||
|
||||
} else if (timer >= 5) {
|
||||
|
||||
@ -161,15 +151,19 @@ public class EntityGlyphidScout extends EntityGlyphid {
|
||||
this.setDead();
|
||||
|
||||
} else {
|
||||
communicate(follow, taskWaypoint);
|
||||
communicate(TASK_FOLLOW, taskWaypoint);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
public boolean doubleCheckHive(){
|
||||
|
||||
/** Returns true if the position is far enough away from other hives. Also resets the task if unsuccessful. */
|
||||
public boolean canBuildHiveHere() {
|
||||
int length = useLargeHive ? 16 : 8;
|
||||
|
||||
for(int i = 0; i < 8; i++) {
|
||||
|
||||
float angle = (float) Math.toRadians(360D / 16 * i);
|
||||
Vec3 rot = Vec3.createVectorHelper(0, 0, length);
|
||||
rot.rotateAroundY(angle);
|
||||
@ -177,12 +171,12 @@ public class EntityGlyphidScout extends EntityGlyphid {
|
||||
Vec3 nextPos = Vec3.createVectorHelper(this.posX + rot.xCoord, this.posY + 1, this.posZ + rot.zCoord);
|
||||
MovingObjectPosition mop = this.worldObj.rayTraceBlocks(pos, nextPos);
|
||||
|
||||
if (mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
|
||||
if(mop != null && mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
|
||||
|
||||
Block block = worldObj.getBlock(mop.blockX, mop.blockY, mop.blockZ);
|
||||
|
||||
if (block == ModBlocks.glyphid_base) {
|
||||
setCurrentTask(none ,null);
|
||||
if(block == ModBlocks.glyphid_base) {
|
||||
setCurrentTask(TASK_IDLE, null);
|
||||
hasTarget = false;
|
||||
return false;
|
||||
}
|
||||
@ -194,10 +188,10 @@ public class EntityGlyphidScout extends EntityGlyphid {
|
||||
|
||||
@Override
|
||||
public boolean isAtDestination() {
|
||||
return this.getCurrentTask() == expand && super.isAtDestination();
|
||||
return this.getCurrentTask() == TASK_BUILD_HIVE && super.isAtDestination();
|
||||
}
|
||||
|
||||
public boolean findJohnson(){
|
||||
public boolean hasNuclearGlyphidNearby(){
|
||||
int radius = 8;
|
||||
|
||||
AxisAlignedBB bb = AxisAlignedBB.getBoundingBox(
|
||||
@ -209,6 +203,7 @@ public class EntityGlyphidScout extends EntityGlyphid {
|
||||
this.posZ + radius);
|
||||
|
||||
List<Entity> bugs = worldObj.getEntitiesWithinAABBExcludingEntity(this, bb);
|
||||
|
||||
for (Entity e: bugs){
|
||||
if(e instanceof EntityGlyphidNuclear){
|
||||
return true;
|
||||
@ -220,51 +215,50 @@ public class EntityGlyphidScout extends EntityGlyphid {
|
||||
@Override
|
||||
public boolean expandHive() {
|
||||
|
||||
int nestX = rand.nextInt((homeX + scoutingRange) - (homeX - scoutingRange)) + (homeX - scoutingRange);
|
||||
int nestZ = rand.nextInt((homeZ + scoutingRange) - (homeZ - scoutingRange)) + (homeZ - scoutingRange);
|
||||
int nestY = worldObj.getHeightValue(nestX, nestZ);
|
||||
Block b = worldObj.getBlock(nestX, nestY - 1, nestZ);
|
||||
int nestX = rand.nextInt((homeX + scoutingRange) - (homeX - scoutingRange)) + (homeX - scoutingRange);
|
||||
int nestZ = rand.nextInt((homeZ + scoutingRange) - (homeZ - scoutingRange)) + (homeZ - scoutingRange);
|
||||
int nestY = worldObj.getHeightValue(nestX, nestZ);
|
||||
Block b = worldObj.getBlock(nestX, nestY - 1, nestZ);
|
||||
|
||||
boolean distanceCheck = Vec3.createVectorHelper(
|
||||
nestX - homeX,
|
||||
nestY - homeY,
|
||||
nestZ - homeZ).lengthVector() > minDistanceToHive;
|
||||
boolean distanceCheck = Vec3.createVectorHelper(nestX - homeX, nestY - homeY, nestZ - homeZ).lengthVector() > minDistanceToHive;
|
||||
|
||||
if(distanceCheck && b.getMaterial() != Material.air && b.isNormalCube() && b != ModBlocks.glyphid_base) {
|
||||
if(distanceCheck && b.getMaterial() != Material.air && b.isNormalCube() && b != ModBlocks.glyphid_base) {
|
||||
|
||||
if(b == ModBlocks.basalt) {
|
||||
useLargeHive = true;
|
||||
largeHiveChance /= 2;
|
||||
this.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 60 * 20, 3));
|
||||
}
|
||||
if(!worldObj.isRemote) {
|
||||
EntityWaypoint nest = new EntityWaypoint(worldObj);
|
||||
nest.setWaypointType(getCurrentTask());
|
||||
nest.radius = 5;
|
||||
if(b == ModBlocks.basalt) {
|
||||
useLargeHive = true;
|
||||
largeHiveChance /= 2;
|
||||
this.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 60 * 20, 3));
|
||||
}
|
||||
|
||||
if(!worldObj.isRemote) {
|
||||
EntityWaypoint nest = new EntityWaypoint(worldObj);
|
||||
nest.setWaypointType(getCurrentTask());
|
||||
nest.radius = 5;
|
||||
|
||||
if(useLargeHive)
|
||||
nest.setHighPriority();
|
||||
if(useLargeHive)
|
||||
nest.setHighPriority();
|
||||
|
||||
nest.setLocationAndAngles(nestX, nestY, nestZ, 0, 0);
|
||||
worldObj.spawnEntityInWorld(nest);
|
||||
nest.setLocationAndAngles(nestX, nestY, nestZ, 0, 0);
|
||||
worldObj.spawnEntityInWorld(nest);
|
||||
|
||||
taskWaypoint = nest;
|
||||
taskWaypoint = nest;
|
||||
|
||||
//updates the task coordinates
|
||||
setCurrentTask(getCurrentTask(), taskWaypoint);
|
||||
communicate(expand, taskWaypoint);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
// updates the task coordinates
|
||||
setCurrentTask(getCurrentTask(), taskWaypoint);
|
||||
communicate(TASK_BUILD_HIVE, taskWaypoint);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void carryOutTask() {
|
||||
if (!worldObj.isRemote && taskWaypoint == null) {
|
||||
switch(getCurrentTask()){
|
||||
case reinforcements:
|
||||
case TASK_INITIATE_RETREAT:
|
||||
this.removePotionEffect(Potion.moveSlowdown.id);
|
||||
this.addPotionEffect(new PotionEffect(Potion.moveSpeed.id, 20 * 20, 4));
|
||||
|
||||
@ -283,23 +277,25 @@ public class EntityGlyphidScout extends EntityGlyphid {
|
||||
worldObj.spawnEntityInWorld(home);
|
||||
|
||||
communicate(4, home);
|
||||
break;
|
||||
break;
|
||||
|
||||
//terraforming task, only used if a big man johnson is near the scout
|
||||
case terraform:
|
||||
case TASK_TERRAFORM:
|
||||
scoutingRange = 60;
|
||||
minDistanceToHive = 20;
|
||||
break;
|
||||
}
|
||||
}
|
||||
super.carryOutTask();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean useExtendedTargeting() {
|
||||
return false;
|
||||
}
|
||||
|
||||
///RAMPANT MODE STUFFS
|
||||
///RAMPANT MODE STUFFS
|
||||
|
||||
/** Finds the direction from the bug's location to the target and adds it to their current coord
|
||||
* Used as a performant way to make scouts expand toward the player's spawn point
|
||||
|
||||
@ -302,7 +302,6 @@ public class OreDictManager {
|
||||
/** Any special post-RBMK gating material, namely bismuth and arsenic */
|
||||
public static final DictFrame ANY_BISMOID = new DictFrame("AnyBismoid");
|
||||
public static final DictFrame ANY_ASH = new DictFrame("Ash");
|
||||
/** Any, nevermind, this should be self-explanatory**/
|
||||
|
||||
|
||||
public static void registerOres() {
|
||||
|
||||
@ -328,12 +328,12 @@ public class Fluids {
|
||||
HEAVYWATER_HOT = new FluidType("HEAVYWATER_HOT", 0x4D007B, 1, 0, 0, EnumSymbol.NONE).setTemp(600).addTraits(LIQUID);
|
||||
SODIUM = new FluidType("SODIUM", 0xCCD4D5, 1, 2, 3, EnumSymbol.NONE).setTemp(400).addTraits(LIQUID);
|
||||
SODIUM_HOT = new FluidType("SODIUM_HOT", 0xE2ADC1, 1, 2, 3, EnumSymbol.NONE).setTemp(1200).addTraits(LIQUID);
|
||||
PHEROMONE = new FluidType("PHEROMONE", 0x5FA6E8, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS, new FT_Pheromone(1));
|
||||
PHEROMONE_M = new FluidType("PHEROMONE_M", 0x48C9B0 , 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS, new FT_Pheromone(2));
|
||||
THORIUM_SALT = new FluidType("THORIUM_SALT", 0x7A5542, 2, 0, 3, EnumSymbol.NONE).setTemp(800).addTraits(LIQUID, new FT_Corrosive(65));
|
||||
THORIUM_SALT_HOT = new FluidType("THORIUM_SALT_HOT", 0x3E3627, 2, 0, 3, EnumSymbol.NONE).setTemp(1600).addTraits(LIQUID, new FT_Corrosive(65));
|
||||
THORIUM_SALT_DEPLETED = new FluidType("THORIUM_SALT_DEPLETED", 0x302D1C, 2, 0, 3, EnumSymbol.NONE).setTemp(800).addTraits(LIQUID, new FT_Corrosive(65));
|
||||
FULLERENE = new FluidType(132, "FULLERENE", 0xFF7FED, 3, 3, 3, EnumSymbol.NONE).addTraits(LIQUID, new FT_Corrosive(65));
|
||||
PHEROMONE = new FluidType("PHEROMONE", 0x5FA6E8, 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS, new FT_Pheromone(1));
|
||||
PHEROMONE_M = new FluidType("PHEROMONE_M", 0x48C9B0 , 0, 0, 0, EnumSymbol.NONE).addTraits(LIQUID, VISCOUS, new FT_Pheromone(2));
|
||||
// ^ ^ ^ ^ ^ ^ ^ ^
|
||||
//ADD NEW FLUIDS HERE
|
||||
|
||||
|
||||
@ -522,7 +522,7 @@ public class ClientProxy extends ServerProxy {
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_quadro, new ItemRenderWeaponQuadro());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_sauer, new ItemRenderWeaponSauer());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_vortex, new ItemRenderWeaponVortex());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_thompson, new ItemRenderWeaponThompson());;
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_thompson, new ItemRenderWeaponThompson());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_bolter, new ItemRenderWeaponBolter());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_bolter_digamma, new ItemRenderWeaponBolter());
|
||||
MinecraftForgeClient.registerItemRenderer(ModItems.gun_fireext, new ItemRenderFireExt());
|
||||
|
||||
@ -4,8 +4,6 @@ import java.util.Random;
|
||||
|
||||
import com.hbm.blocks.ModBlocks;
|
||||
|
||||
import net.minecraft.block.Block;
|
||||
import com.hbm.util.LootGenerator;
|
||||
import net.minecraft.init.Blocks;
|
||||
import net.minecraft.world.World;
|
||||
|
||||
|
||||
@ -2390,6 +2390,8 @@ item.dieselsuit_helmet.name=Diesel-Powered Head-Mounted Environmental Sensor
|
||||
item.dieselsuit_legs.name=Diesel-Powered Leg Servos
|
||||
item.dieselsuit_plate.name=Diesel-Powered Cybernetics
|
||||
item.digamma_diagnostic.name=Digamma Diagnostic
|
||||
item.disperser_canister.name= Disperser Canister:
|
||||
item.disperser_canister_empty.name= Disperser Canister
|
||||
item.dns_boots.name=DNT Nano Suit Boots
|
||||
item.dns_legs.name=DNT Nano Suit Leggings
|
||||
item.dns_helmet.name=DNT Nano Suit Helmet
|
||||
@ -2616,13 +2618,8 @@ item.grenade_smart.name=Smart Grenade
|
||||
item.grenade_strong.name=Enhanced Grenade
|
||||
item.grenade_tau.name=Tau Grenade
|
||||
item.grenade_zomg.name=Negative Energy Pair Annihilation Grenade
|
||||
|
||||
item.disperser_canister.name= Disperser Canister:
|
||||
item.disperser_canister_empty.name= Disperser Canister
|
||||
|
||||
item.glyphid_gland.name= Gland
|
||||
item.glyphid_gland_empty.name= Glyphid's Fluid Gland
|
||||
|
||||
item.gun_ar15.name=Josh
|
||||
item.gun_avenger.name=CZ57 Avenger Minigun
|
||||
item.gun_b92.name=§9B92 Energy Pistol§r
|
||||
@ -4887,9 +4884,7 @@ tile.door_office.name=Office Door
|
||||
tile.ducrete.name=Ducrete Tile
|
||||
tile.ducrete_stairs.name=Ducrete Tile Stairs
|
||||
tile.ducrete_smooth.name=Ducrete
|
||||
|
||||
tile.ducrete_smooth_stairs.name=Ducrete Stairs
|
||||
|
||||
tile.dummy_block.name=Dummy Block
|
||||
tile.dummy_port.name=Dummy Block (Electricity Port)
|
||||
tile.dungeon_chain.name=Metal Chain
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user