Added/fixed the temp texture for the Holding Reagent. Added the Array Effect for the Skeleton Turret array

This commit is contained in:
WayofTime 2016-06-30 08:34:15 -04:00
parent d1d66e5388
commit 7cb1ff4c3d
4 changed files with 230 additions and 2 deletions

View file

@ -0,0 +1,227 @@
package WayofTime.bloodmagic.alchemyArray;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import net.minecraft.entity.EntityLiving;
import net.minecraft.entity.SharedMonsterAttributes;
import net.minecraft.entity.ai.EntityAIBase;
import net.minecraft.entity.ai.EntityAINearestAttackableTarget;
import net.minecraft.entity.ai.EntityAITasks;
import net.minecraft.entity.ai.EntityAITasks.EntityAITaskEntry;
import net.minecraft.entity.monster.EntityMob;
import net.minecraft.entity.monster.EntitySkeleton;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import net.minecraftforge.common.util.FakePlayer;
import WayofTime.bloodmagic.api.alchemyCrafting.AlchemyArrayEffect;
import WayofTime.bloodmagic.tile.TileAlchemyArray;
import com.google.common.base.Predicate;
/**
* Credits for the initial code go to Crazy Pants of EIO.
*/
public class AlchemyArrayEffectSkeletonTurret extends AlchemyArrayEffect
{
private EntitySkeleton turret;
public static Predicate<EntityMob> checkSkeleton = new Predicate<EntityMob>()
{
@Override
public boolean apply(EntityMob input)
{
return !(input instanceof EntitySkeleton);
}
};
public AlchemyArrayEffectSkeletonTurret(String key)
{
super(key);
}
@Override
public boolean update(TileEntity tile, int ticksActive)
{
// if (tile.getWorld().isRemote)
// {
// return false;
// }
BlockPos pos = tile.getPos();
if (turret != null && !turret.isDead)
{
double x = (pos.getX() + 0.5D - turret.posX);
double y = (pos.getY() + 1D - turret.posY);
double z = (pos.getZ() + 0.5D - turret.posZ);
double distance = Math.sqrt(x * x + y * y + z * z);
if (distance < 2)
{
// turret.addPotionEffect(new PotionEffect(MobEffects.SLOWNESS, 100, 100));
return false;
}
}
World world = tile.getWorld();
List<EntitySkeleton> skeletonsInRange = world.getEntitiesWithinAABB(EntitySkeleton.class, getBounds(pos));
for (EntitySkeleton entity : skeletonsInRange)
{
if (!entity.isDead)// && isMobInFilter(ent))
{
modifyAITargetTasks(entity);
turret = entity;
break;
}
}
return false;
}
public AxisAlignedBB getBounds(BlockPos pos)
{
return new AxisAlignedBB(pos).expand(getRange(), getRange(), getRange());
}
public float getRange()
{
return 0;
}
// private void onUntracked(EntityLiving e)
// {
// e.getEntityData().setBoolean("BM:tracked", false);
// }
//
// private void onTracked(EntityLiving e)
// {
// e.getEntityData().setBoolean("BM:tracked", true);
// }
private boolean modifyAITargetTasks(EntitySkeleton entity)
{
cancelCurrentTargetTasks(entity);
// entity.setCombatTask();
entity.targetTasks.addTask(1, new EntityAINearestAttackableTarget(entity, EntityMob.class, 10, true, false, checkSkeleton));
entity.getEntityAttribute(SharedMonsterAttributes.MOVEMENT_SPEED).setBaseValue(0);
entity.getEntityAttribute(SharedMonsterAttributes.KNOCKBACK_RESISTANCE).setBaseValue(1);
return true;
}
private void cancelCurrentTargetTasks(EntityLiving entity)
{
Iterator<EntityAITaskEntry> iterator = entity.targetTasks.taskEntries.iterator();
List<EntityAITasks.EntityAITaskEntry> currentTasks = new ArrayList<EntityAITasks.EntityAITaskEntry>();
while (iterator.hasNext())
{
EntityAITaskEntry entityaitaskentry = iterator.next();
if (entityaitaskentry != null)// && entityaitaskentry.action instanceof EntityAITarget)
{
currentTasks.add(entityaitaskentry);
}
}
for (EntityAITaskEntry task : currentTasks)
{
entity.targetTasks.removeTask(task.action);
}
}
private static class AttractTask extends EntityAIBase
{
private EntityLiving mob;
private BlockPos coord;
private FakePlayer target;
private int updatesSincePathing;
private boolean started = false;
private AttractTask(EntityLiving mob, FakePlayer target, BlockPos coord)
{
this.mob = mob;
this.coord = coord;
this.target = target;
}
@Override
public boolean shouldExecute()
{
return continueExecuting();
}
@Override
public void resetTask()
{
started = false;
updatesSincePathing = 0;
}
@Override
public boolean continueExecuting()
{
boolean res = false;
//TODO:
TileEntity te = mob.worldObj.getTileEntity(coord);
if (te instanceof TileAlchemyArray)
{
res = true;
}
return res;
}
@Override
public boolean isInterruptible()
{
return true;
}
@Override
public void updateTask()
{
if (!started || updatesSincePathing > 20)
{
started = true;
int speed = 1;
// mob.getNavigator().setAvoidsWater(false);
boolean res = mob.getNavigator().tryMoveToEntityLiving(target, speed);
if (!res)
{
mob.getNavigator().tryMoveToXYZ(target.posX, target.posY + 1, target.posZ, speed);
}
updatesSincePathing = 0;
} else
{
updatesSincePathing++;
}
}
}
@Override
public void writeToNBT(NBTTagCompound tag)
{
}
@Override
public void readFromNBT(NBTTagCompound tag)
{
}
@Override
public AlchemyArrayEffect getNewCopy()
{
return new AlchemyArrayEffectSkeletonTurret(key);
}
}

View file

@ -18,6 +18,7 @@ import WayofTime.bloodmagic.BloodMagic;
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectAttractor;
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectBinding;
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectMovement;
import WayofTime.bloodmagic.alchemyArray.AlchemyArrayEffectSkeletonTurret;
import WayofTime.bloodmagic.api.Constants;
import WayofTime.bloodmagic.api.altar.EnumAltarTier;
import WayofTime.bloodmagic.api.compress.CompressionRegistry;
@ -231,7 +232,7 @@ public class ModRecipes
AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ROTTEN_FLESH), new ItemStack(Items.ROTTEN_FLESH), new AlchemyArrayEffectAttractor("attractor"), new AttractorAlchemyCircleRenderer());
AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.FEATHER), new ItemStack(Items.REDSTONE), new AlchemyArrayEffectMovement("movement"), new StaticAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/MovementArray.png")));
AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ARROW), new ItemStack(Items.FEATHER), new AlchemyArrayEffectMovement("skeletonTurret"), new DualAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret1.png"), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret2.png")));
AlchemyArrayRecipeRegistry.registerRecipe(new ItemStack(Items.ARROW), new ItemStack(Items.FEATHER), new AlchemyArrayEffectSkeletonTurret("skeletonTurret"), new DualAlchemyCircleRenderer(new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret1.png"), new ResourceLocation("bloodmagic", "textures/models/AlchemyArrays/SkeletonTurret2.png")));
}
public static void addCompressionHandlers()

View file

@ -141,7 +141,7 @@
"layer0": "bloodmagic:items/Antiseptic"
}
},
"reagentHolding": {
"reagentholding": {
"textures": {
"layer0": "bloodmagic:items/ReagentHolding"
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 520 B