mirror of
https://github.com/GTNewHorizons/Chisel.git
synced 2026-11-12 00:07:37 +00:00
I intentionally did not touch EntitySmashingRock.java as both the sound does not seem to fit, nor is the code finished.
126 lines
3.4 KiB
Java
126 lines
3.4 KiB
Java
package info.jbcs.minecraft.chisel.entity;
|
|
|
|
import info.jbcs.minecraft.chisel.Chisel;
|
|
import info.jbcs.minecraft.chisel.ChiselBlocks;
|
|
import info.jbcs.minecraft.chisel.client.GeneralChiselClient;
|
|
import info.jbcs.minecraft.utilities.General;
|
|
import net.minecraft.block.Block;
|
|
import net.minecraft.entity.EntityLivingBase;
|
|
import net.minecraft.entity.projectile.EntityThrowable;
|
|
import net.minecraft.init.Blocks;
|
|
import net.minecraft.util.MovingObjectPosition;
|
|
import net.minecraft.world.World;
|
|
|
|
public class EntityBallOMoss extends EntityThrowable
|
|
{
|
|
|
|
public EntityBallOMoss(World par1World)
|
|
{
|
|
super(par1World);
|
|
}
|
|
|
|
public EntityBallOMoss(World par1World, EntityLivingBase par2EntityLiving)
|
|
{
|
|
super(par1World, par2EntityLiving);
|
|
}
|
|
|
|
public EntityBallOMoss(World par1World, double x, double y, double z)
|
|
{
|
|
super(par1World, x, y, z);
|
|
}
|
|
|
|
@Override
|
|
protected void onImpact(MovingObjectPosition movingobjectposition)
|
|
{
|
|
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;
|
|
}
|
|
|
|
setDead();
|
|
|
|
if(worldObj.isRemote)
|
|
{
|
|
worldObj.playSound(x, y, z, Chisel.MOD_ID+":random.squash", 1.0f, 1.0f, false);
|
|
|
|
for(int i = 0; i < 32; i++)
|
|
GeneralChiselClient.spawnBallOMossFX(worldObj, posX, posY, posZ);
|
|
|
|
return;
|
|
}
|
|
|
|
int radius = 5;
|
|
int falloff = 3;
|
|
|
|
for(int xx = -radius; xx < radius; xx++)
|
|
{
|
|
for(int yy = -radius; yy < radius; yy++)
|
|
{
|
|
for(int zz = -radius; zz < radius; zz++)
|
|
{
|
|
double dist = (xx < 0 ? -xx : xx) + (yy < 0 ? -yy : yy) + (zz < 0 ? -zz : zz);
|
|
|
|
if(!(dist < falloff || General.rand.nextInt(radius * 3 - falloff) >= dist * 2))
|
|
continue;
|
|
|
|
if(!worldObj.isRemote)
|
|
turnToMoss(worldObj, x + xx, y + yy, z + zz);
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
public static void turnToMoss(World world, int x, int y, int z)
|
|
{
|
|
Block block = world.getBlock(x, y, z);
|
|
int meta = world.getBlockMetadata(x, y, z);
|
|
Block resBlock = block;
|
|
int resMeta = meta;
|
|
|
|
if(block.equals(Blocks.cobblestone))
|
|
{
|
|
resBlock = Blocks.mossy_cobblestone;
|
|
} else if(block.equals(Blocks.cobblestone_wall) && meta == 0)
|
|
{
|
|
resMeta = 1;
|
|
} else if(block.equals(ChiselBlocks.blockCobblestone))
|
|
{
|
|
resBlock = ChiselBlocks.blockCobblestoneMossy;
|
|
} else if(block.equals(ChiselBlocks.blockTemple))
|
|
{
|
|
resBlock = ChiselBlocks.blockTempleMossy;
|
|
} else if(block.equals(Blocks.stonebrick))
|
|
{
|
|
resMeta = 1;
|
|
}
|
|
|
|
if(resBlock.equals(block) && resMeta == meta)
|
|
return;
|
|
world.setBlock(x, y, z, resBlock, resMeta, 3);
|
|
}
|
|
|
|
}
|