Files
Chisel/src/main/java/com/cricketcraft/chisel/entity/EntityCloudInABottle.java
T

126 lines
3.4 KiB
Java

package com.cricketcraft.chisel.entity;
import java.util.Random;
import com.cricketcraft.chisel.init.ModBlocks;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.projectile.EntityThrowable;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.World;
public class EntityCloudInABottle extends EntityThrowable
{
Random rand = new Random();
public EntityCloudInABottle(World par1World)
{
super(par1World);
}
public EntityCloudInABottle(World par1World, EntityLivingBase par2EntityLiving)
{
super(par1World, par2EntityLiving);
}
public EntityCloudInABottle(World par1World, double x, double y, double z)
{
super(par1World, x, y, z);
}
@Override
protected void onImpact(MovingObjectPosition movingobjectposition)
{
if(worldObj.isRemote)
return;
int x = movingobjectposition.blockX;
int y = movingobjectposition.blockY;
int z = movingobjectposition.blockZ;
switch(movingobjectposition.sideHit)
{
case 0:
y--;
break;
case 1:
y++;
break;
case 2:
z--;
break;
case 3:
z++;
break;
case 4:
x--;
break;
case 5:
x++;
break;
}
generate(worldObj, rand, x, y, z, 40);
worldObj.playAuxSFX(2002, (int) Math.round(this.posX), (int) Math.round(this.posY), (int) Math.round(this.posZ), 2);
setDead();
}
public boolean generate(World world, Random random, int gx, int gy, int gz, int numberOfBlocks)
{
int X[] = new int[9];
int Y[] = new int[9];
int Z[] = new int[9];
for(int dir = 0; dir < 9; dir++)
{
X[dir] = gx;
Y[dir] = gy;
Z[dir] = gz;
}
int count = 0;
while(count < numberOfBlocks)
{
for(int dir = 0; dir < 9; dir++)
{
if(count >= numberOfBlocks)
break;
int dx = dir % 3 - 1;
int dz = dir / 3 - 1;
if(dx == 0 && dz == 0)
continue;
X[dir] += random.nextInt(3) - 1 + dx;
Z[dir] += random.nextInt(3) - 1 + dz;
Y[dir] += random.nextInt(2) * (random.nextInt(3) - 1);
int x = X[dir];
int y = Y[dir];
int z = Z[dir];
for(int j2 = x; j2 < x + random.nextInt(4) + 1; j2++)
{
for(int k2 = y; k2 < y + random.nextInt(1) + 2; k2++)
{
for(int l2 = z; l2 < z + random.nextInt(4) + 1; l2++)
{
if(world.getBlock(j2, k2, l2).isAir(world, j2, k2, l2) && Math.abs(j2 - x) + Math.abs(k2 - y) + Math.abs(l2 - z) < 4 * 1 + random.nextInt(2))
{
world.setBlock(j2, k2, l2, ModBlocks.cloud);
count++;
}
}
}
}
}
}
//System.out.println("Created " + count + " cloud blocks.");
return true;
}
}