I'm trying to make an item that creates and explosion on the block you right click on. This works perfectly in single player and in multiplayer it creates an "explosion" at the correct location but for some reason the explosion is tiny, doesn't hurt anything, and doesn't make noise. My guess is it has something to do with the world.createExplosion line but I'm not sure. Any ideas or suggestions?
package me.thetrooble.film.items;
import java.util.List;
import me.thetrooble.film.LudicFilms;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.BlockPos;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public class BoomStick extends Item{
private final String name = "BoomStick";
public BoomStick()
{
maxStackSize = 1;
setCreativeTab(LudicFilms.filmTab);
setUnlocalizedName("ludicfilms" + "_" + name);
}
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player)
{
if(getMouseOver(player,250).entityHit!=null){
Entity mob = getMouseOver(player,250).entityHit;
world.createExplosion((Entity)null,mob.posX,mob.posY,mob.posZ,5, false);
return stack;
}
BlockPos blk = getMouseOver(player,250).getBlockPos();
world.createExplosion((Entity)null,blk.getX(),blk.getY(),blk.getZ(),5, false);
return stack;
}
public String getName()
{
return name;
}
public static MovingObjectPosition getMouseOver(Entity theRenderViewEntity, float dist) {
AxisAlignedBB theViewBoundingBox = new AxisAlignedBB(
theRenderViewEntity.posX - 0.5D,
theRenderViewEntity.posY - 0.0D,
theRenderViewEntity.posZ - 0.5D,
theRenderViewEntity.posX + 0.5D,
theRenderViewEntity.posY + 1.5D,
theRenderViewEntity.posZ + 0.5D
);
MovingObjectPosition returnMOP = null;
if (theRenderViewEntity.worldObj != null)
{
double var2 = dist;
returnMOP = theRenderViewEntity.rayTrace( var2, 0 );
double calcdist = var2;
Vec3 pos = theRenderViewEntity.getPositionEyes(0);
var2 = calcdist;
if (returnMOP != null)
{
calcdist = returnMOP.hitVec.distanceTo( pos );
}
Vec3 lookvec = theRenderViewEntity.getLook( 0 );
Vec3 var8 = pos.addVector( lookvec.xCoord * var2,
lookvec.yCoord * var2,
lookvec.zCoord * var2 );
Entity pointedEntity = null;
float var9 = 1.0F;
@SuppressWarnings("unchecked")
List<Entity> list = theRenderViewEntity.worldObj
.getEntitiesWithinAABBExcludingEntity(
theRenderViewEntity,
theViewBoundingBox.addCoord(
lookvec.xCoord * var2,
lookvec.yCoord * var2,
lookvec.zCoord * var2 ).expand( var9, var9,
var9 ) );
double d = calcdist;
for (Entity entity : list)
{
if (entity.canBeCollidedWith())
{
float bordersize = entity.getCollisionBorderSize();
AxisAlignedBB aabb = new AxisAlignedBB(
entity.posX - entity.width / 2,
entity.posY,
entity.posZ - entity.width / 2,
entity.posX + entity.width / 2,
entity.posY + entity.height,
entity.posZ + entity.width / 2 );
aabb.expand( bordersize, bordersize, bordersize );
MovingObjectPosition mop0 = aabb.calculateIntercept( pos,
var8 );
if (aabb.isVecInside( pos ))
{
if (0.0D < d || d == 0.0D)
{
pointedEntity = entity;
d = 0.0D;
}
} else if (mop0 != null)
{
double d1 = pos.distanceTo( mop0.hitVec );
if (d1 < d || d == 0.0D)
{
pointedEntity = entity;
d = d1;
}
}
}
}
if (pointedEntity != null && (d < calcdist || returnMOP == null))
{
returnMOP = new MovingObjectPosition( pointedEntity );
}
}
return returnMOP;
}
}