2023-11-30 15:26:49 +01:00

103 lines
3.3 KiB
Java

package com.hbm.items.tool;
import java.util.List;
import com.hbm.entity.item.EntityBoatRubber;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.MathHelper;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.util.Vec3;
import net.minecraft.world.World;
public class ItemBoatRubber extends Item {
public ItemBoatRubber() {
this.maxStackSize = 1;
this.setCreativeTab(CreativeTabs.tabTransport);
}
@Override
public ItemStack onItemRightClick(ItemStack stack, World world, EntityPlayer player) {
float f = 1.0F;
float pitch = player.prevRotationPitch + (player.rotationPitch - player.prevRotationPitch) * f;
float yaw = player.prevRotationYaw + (player.rotationYaw - player.prevRotationYaw) * f;
double posX = player.prevPosX + (player.posX - player.prevPosX) * (double) f;
double posY = player.prevPosY + (player.posY - player.prevPosY) * (double) f + 1.62D - (double) player.yOffset;
double posZ = player.prevPosZ + (player.posZ - player.prevPosZ) * (double) f;
float compZ = MathHelper.cos(-yaw * 0.017453292F - (float) Math.PI);
float compX = MathHelper.sin(-yaw * 0.017453292F - (float) Math.PI);
float mult = -MathHelper.cos(-pitch * 0.017453292F);
float lookY = MathHelper.sin(-pitch * 0.017453292F);
float lookX = compX * mult;
float lookZ = compZ * mult;
double reach = 5.0D;
Vec3 pos = Vec3.createVectorHelper(posX, posY, posZ);
Vec3 target = pos.addVector((double) lookX * reach, (double) lookY * reach, (double) lookZ * reach);
MovingObjectPosition mop = world.rayTraceBlocks(pos, target, true);
if(mop == null) {
return stack;
} else {
Vec3 look = player.getLook(f);
boolean flag = false;
double width = 1.0D;
List list = world.getEntitiesWithinAABBExcludingEntity(player, player.boundingBox.addCoord(look.xCoord * reach, look.yCoord * reach, look.zCoord * reach).expand(width, width, width));
for(int i = 0; i < list.size(); ++i) {
Entity entity = (Entity) list.get(i);
if(entity.canBeCollidedWith()) {
float f10 = entity.getCollisionBorderSize();
AxisAlignedBB axisalignedbb = entity.boundingBox.expand((double) f10, (double) f10, (double) f10);
if(axisalignedbb.isVecInside(pos)) {
flag = true;
}
}
}
if(flag) {
return stack;
} else {
if(mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
int x = mop.blockX;
int y = mop.blockY;
int z = mop.blockZ;
if(world.getBlock(x, y, z) == Blocks.snow_layer) {
--y;
}
EntityBoatRubber entityboat = new EntityBoatRubber(world, (double) ((float) x + 0.5F), (double) ((float) y + 1.0F), (double) ((float) z + 0.5F));
entityboat.rotationYaw = (float) (((MathHelper.floor_double((double) (player.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3) - 1) * 90);
if(!world.getCollidingBoundingBoxes(entityboat, entityboat.boundingBox.expand(-0.1D, -0.1D, -0.1D)).isEmpty()) {
return stack;
}
if(!world.isRemote) {
world.spawnEntityInWorld(entityboat);
}
if(!player.capabilities.isCreativeMode) {
--stack.stackSize;
}
}
return stack;
}
}
}
}