/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.carts; import com.mojang.authlib.GameProfile; import net.minecraft.block.Block; import net.minecraft.entity.item.EntityMinecart; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.ItemStack; import net.minecraft.util.MathHelper; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; import mods.railcraft.api.carts.CartTools; import mods.railcraft.api.core.items.IMinecartItem; import mods.railcraft.common.blocks.tracks.TrackTools; import mods.railcraft.common.util.misc.Game; import net.minecraft.block.BlockRailBase; public class ItemTunnelBore extends ItemCart implements IMinecartItem { public ItemTunnelBore() { super(EnumCart.BORE); maxStackSize = 1; } @Override public boolean onItemUse(ItemStack itemstack, EntityPlayer player, World world, int i, int j, int k, int l, float par8, float par9, float par10) { Block block = world.getBlock(i, j, k); if (TrackTools.isRailBlock(block)) { if (Game.isHost(world) && !CartTools.isMinecartAt(world, i, j, k, 0, null, true)) { int meta = ((BlockRailBase) block).getBasicRailMetadata(world, null, i, j, k); if (meta == 0 || meta == 1) { int playerYaw = -90 - MathHelper.floor_float(player.rotationYaw); for (; playerYaw > 360; playerYaw -= 360); for (; playerYaw < 0; playerYaw += 360); ForgeDirection facing = ForgeDirection.EAST; if (Math.abs(90 - playerYaw) <= 45) { facing = ForgeDirection.NORTH; } else if (Math.abs(180 - playerYaw) <= 45) { facing = ForgeDirection.WEST; } else if (Math.abs(270 - playerYaw) <= 45) { facing = ForgeDirection.SOUTH; } if (meta == 0 && facing == ForgeDirection.WEST) { facing = ForgeDirection.NORTH; } else if (meta == 0 && facing == ForgeDirection.EAST) { facing = ForgeDirection.SOUTH; } else if (meta == 1 && facing == ForgeDirection.SOUTH) { facing = ForgeDirection.EAST; } else if (meta == 1 && facing == ForgeDirection.NORTH) { facing = ForgeDirection.WEST; } // System.out.println("PlayerYaw = " + playerYaw + " Yaw = " + facing + " Meta = " + meta); EntityMinecart bore = new EntityTunnelBore(world, (float) i + 0.5F, (float) j, (float) k + 0.5F, facing); CartTools.setCartOwner(bore, player); world.spawnEntityInWorld(bore); } } itemstack.stackSize--; return true; } else { return false; } } @Override public boolean canBePlacedByNonPlayer(ItemStack cart) { return false; } @Override public EntityMinecart placeCart(GameProfile owner, ItemStack cart, World world, int i, int j, int k) { return null; } }