mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
103 lines
3.3 KiB
Java
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;
|
|
}
|
|
}
|
|
}
|
|
}
|