package net.minecraft.server;
import java.util.List;
public class ItemBoat extends Item {
private final EntityBoat.EnumBoatType a;
public ItemBoat(EntityBoat.EnumBoatType entityboat_enumboattype) {
this.a = entityboat_enumboattype;
this.maxStackSize = 1;
this.a(CreativeModeTab.e);
this.c("boat." + entityboat_enumboattype.a());
}
public InteractionResultWrapper<ItemStack> a(World world, EntityHuman entityhuman, EnumHand enumhand) {
ItemStack itemstack = entityhuman.b(enumhand);
float f = 1.0F;
float f1 = entityhuman.lastPitch + (entityhuman.pitch - entityhuman.lastPitch) * 1.0F;
float f2 = entityhuman.lastYaw + (entityhuman.yaw - entityhuman.lastYaw) * 1.0F;
double d0 = entityhuman.lastX + (entityhuman.locX - entityhuman.lastX) * 1.0D;
double d1 = entityhuman.lastY + (entityhuman.locY - entityhuman.lastY) * 1.0D + (double) entityhuman.getHeadHeight();
double d2 = entityhuman.lastZ + (entityhuman.locZ - entityhuman.lastZ) * 1.0D;
Vec3D vec3d = new Vec3D(d0, d1, d2);
float f3 = MathHelper.cos(-f2 * 0.017453292F - 3.1415927F);
float f4 = MathHelper.sin(-f2 * 0.017453292F - 3.1415927F);
float f5 = -MathHelper.cos(-f1 * 0.017453292F);
float f6 = MathHelper.sin(-f1 * 0.017453292F);
float f7 = f4 * f5;
float f8 = f3 * f5;
double d3 = 5.0D;
Vec3D vec3d1 = vec3d.add((double) f7 * 5.0D, (double) f6 * 5.0D, (double) f8 * 5.0D);
MovingObjectPosition movingobjectposition = world.rayTrace(vec3d, vec3d1, true);
if (movingobjectposition == null) {
return new InteractionResultWrapper(EnumInteractionResult.PASS, itemstack);
} else {
Vec3D vec3d2 = entityhuman.f(1.0F);
boolean flag = false;
List list = world.getEntities(entityhuman, entityhuman.getBoundingBox().b(vec3d2.x * 5.0D, vec3d2.y * 5.0D, vec3d2.z * 5.0D).g(1.0D));
for (int i = 0; i < list.size(); ++i) {
Entity entity = (Entity) list.get(i);
if (entity.isInteractable()) {
AxisAlignedBB axisalignedbb = entity.getBoundingBox().g((double) entity.aA());
if (axisalignedbb.b(vec3d)) {
flag = true;
}
}
}
if (flag) {
return new InteractionResultWrapper(EnumInteractionResult.PASS, itemstack);
} else if (movingobjectposition.type != MovingObjectPosition.EnumMovingObjectType.BLOCK) {
return new InteractionResultWrapper(EnumInteractionResult.PASS, itemstack);
} else {
// CraftBukkit start - Boat placement
org.bukkit.event.player.PlayerInteractEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerInteractEvent(entityhuman, org.bukkit.event.block.Action.RIGHT_CLICK_BLOCK, movingobjectposition.a(), movingobjectposition.direction, itemstack, enumhand);
if (event.isCancelled()) {
return new InteractionResultWrapper(EnumInteractionResult.PASS, itemstack);
}
// CraftBukkit end
Block block = world.getType(movingobjectposition.a()).getBlock();
boolean flag1 = block == Blocks.WATER || block == Blocks.FLOWING_WATER;
EntityBoat entityboat = new EntityBoat(world, movingobjectposition.pos.x, flag1 ? movingobjectposition.pos.y - 0.12D : movingobjectposition.pos.y, movingobjectposition.pos.z);
entityboat.setType(this.a);
entityboat.yaw = entityhuman.yaw;
if (!world.getCubes(entityboat, entityboat.getBoundingBox().g(-0.1D)).isEmpty()) {
return new InteractionResultWrapper(EnumInteractionResult.FAIL, itemstack);
} else {
if (!world.isClientSide) {
if (!world.addEntity(entityboat)) return new InteractionResultWrapper(EnumInteractionResult.PASS, itemstack); // CraftBukkit
}
if (!entityhuman.abilities.canInstantlyBuild) {
itemstack.subtract(1);
}
entityhuman.b(StatisticList.b((Item) this));
return new InteractionResultWrapper(EnumInteractionResult.SUCCESS, itemstack);
}
}
}
}
}