Search in sources :

Example 6 with AxisAlignedBB

use of net.minecraft.util.AxisAlignedBB in project LogisticsPipes by RS485.

the class HSTubeCurve method addCollisionBoxesToList.

@Override
@SideOnly(Side.CLIENT)
@SuppressWarnings({ "unchecked", "rawtypes" })
public void addCollisionBoxesToList(List arraylist, AxisAlignedBB axisalignedbb) {
    double x = getX();
    double y = getY();
    double z = getZ();
    double angle = 0;
    double addOne = 0;
    double addTwo = 0;
    if (orientation.getRenderOrientation() == TurnDirection.NORTH_EAST) {
        angle = 3 * Math.PI / 2;
        addOne = LPConstants.PIPE_MAX_POS;
        addTwo = LPConstants.PIPE_MIN_POS;
        z -= 2;
        x += 1;
    } else if (orientation.getRenderOrientation() == TurnDirection.EAST_SOUTH) {
        angle = 2 * Math.PI / 2;
        addOne = LPConstants.PIPE_MIN_POS;
        addTwo = LPConstants.PIPE_MAX_POS;
        x += 3;
        z += 1;
    } else if (orientation.getRenderOrientation() == TurnDirection.SOUTH_WEST) {
        angle = Math.PI / 2;
        addOne = LPConstants.PIPE_MAX_POS;
        addTwo = LPConstants.PIPE_MIN_POS;
        z += 3;
    } else if (orientation.getRenderOrientation() == TurnDirection.WEST_NORTH) {
        angle = 0;
        addOne = LPConstants.PIPE_MIN_POS;
        addTwo = LPConstants.PIPE_MAX_POS;
        x -= 2;
    }
    for (int i = 0; i < 49; i++) {
        double xOne = x;
        double yMin = y + LPConstants.PIPE_MIN_POS;
        double zOne = z;
        double xTwo = x;
        double yMax = y + LPConstants.PIPE_MAX_POS;
        double zTwo = z;
        xOne += (2 + addOne) * Math.sin(angle + (2 * Math.PI / 200 * (i)));
        zOne += (2 + addOne) * Math.cos(angle + (2 * Math.PI / 200 * (i + 2)));
        xTwo += (2 + addTwo) * Math.sin(angle + (2 * Math.PI / 200 * (i + 1)));
        zTwo += (2 + addTwo) * Math.cos(angle + (2 * Math.PI / 200 * (i)));
        AxisAlignedBB box = AxisAlignedBB.getBoundingBox(Math.min(xOne, xTwo), yMin, Math.min(zOne, zTwo), Math.max(xOne, xTwo), yMax, Math.max(zOne, zTwo));
        if (box != null && (axisalignedbb == null || axisalignedbb.intersectsWith(box))) {
            arraylist.add(box);
        }
    }
}
Also used : AxisAlignedBB(net.minecraft.util.AxisAlignedBB) SideOnly(cpw.mods.fml.relauncher.SideOnly)

Example 7 with AxisAlignedBB

use of net.minecraft.util.AxisAlignedBB in project LogisticsPipes by RS485.

the class HSTubeLine method addCollisionBoxesToList.

@Override
public void addCollisionBoxesToList(List arraylist, AxisAlignedBB axisalignedbb) {
    DoubleCoordinates pos = getLPPosition();
    LPPositionSet<DoubleCoordinates> set = new LPPositionSet<>(DoubleCoordinates.class);
    set.addFrom(LineTubeRenderer.tubeLine.get(orientation.getRenderOrientation()).bounds().toAABB());
    set.stream().forEach(o -> o.add(pos));
    AxisAlignedBB box = set.toABB();
    if (box != null && (axisalignedbb == null || axisalignedbb.intersectsWith(box))) {
        arraylist.add(box);
    }
}
Also used : AxisAlignedBB(net.minecraft.util.AxisAlignedBB) LPPositionSet(logisticspipes.utils.LPPositionSet) DoubleCoordinates(network.rs485.logisticspipes.world.DoubleCoordinates)

Example 8 with AxisAlignedBB

use of net.minecraft.util.AxisAlignedBB in project malmo by Microsoft.

the class DiscreteMovementCommandsImplementation method onExecute.

@Override
protected boolean onExecute(String verb, String parameter, MissionInit missionInit) {
    boolean handled = false;
    EntityPlayerSP player = Minecraft.getMinecraft().thePlayer;
    if (player != null) {
        int z = 0;
        int x = 0;
        int y = 0;
        DiscreteMovementCommand command = verbToCommand(verb);
        if (command == null)
            // Did not recognise this command.
            return false;
        switch(command) {
            case MOVENORTH:
            case JUMPNORTH:
                z = -1;
                break;
            case MOVESOUTH:
            case JUMPSOUTH:
                z = 1;
                break;
            case MOVEEAST:
            case JUMPEAST:
                x = 1;
                break;
            case MOVEWEST:
            case JUMPWEST:
                x = -1;
                break;
            case MOVE:
            case JUMPMOVE:
            case STRAFE:
            case JUMPSTRAFE:
                if (parameter != null && parameter.length() != 0) {
                    float velocity = Float.valueOf(parameter);
                    int offset = (velocity > 0) ? 1 : ((velocity < 0) ? -1 : 0);
                    int direction = getDirectionFromYaw(player.rotationYaw);
                    // For strafing, add one to direction:
                    if (command == DiscreteMovementCommand.STRAFE || command == DiscreteMovementCommand.JUMPSTRAFE)
                        direction = (direction + 1) % 4;
                    switch(direction) {
                        case // North
                        0:
                            z = offset;
                            break;
                        case // East
                        1:
                            x = -offset;
                            break;
                        case // South
                        2:
                            z = -offset;
                            break;
                        case // West
                        3:
                            x = offset;
                            break;
                    }
                    break;
                }
            case TURN:
                if (parameter != null && parameter.length() != 0) {
                    float yawDelta = Float.valueOf(parameter);
                    int direction = getDirectionFromYaw(player.rotationYaw);
                    direction += (yawDelta > 0) ? 1 : ((yawDelta < 0) ? -1 : 0);
                    direction = (direction + 4) % 4;
                    player.rotationYaw = direction * 90;
                    player.onUpdate();
                    // Send a message that the ContinuousMovementCommands can pick up on:
                    Event event = new CommandForWheeledRobotNavigationImplementation.ResetPitchAndYawEvent(true, player.rotationYaw, false, 0);
                    MinecraftForge.EVENT_BUS.post(event);
                    handled = true;
                }
                break;
            case LOOK:
                if (parameter != null && parameter.length() != 0) {
                    float pitchDelta = Float.valueOf(parameter);
                    player.rotationPitch += (pitchDelta < 0) ? -45 : ((pitchDelta > 0) ? 45 : 0);
                    player.onUpdate();
                    // Send a message that the ContinuousMovementCommands can pick up on:
                    Event event = new CommandForWheeledRobotNavigationImplementation.ResetPitchAndYawEvent(false, 0, true, player.rotationPitch);
                    MinecraftForge.EVENT_BUS.post(event);
                    handled = true;
                }
                break;
            case ATTACK:
                {
                    MovingObjectPosition mop = Minecraft.getMinecraft().objectMouseOver;
                    if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
                        BlockPos hitPos = mop.getBlockPos();
                        EnumFacing face = mop.sideHit;
                        IBlockState iblockstate = player.worldObj.getBlockState(hitPos);
                        Block block = iblockstate.getBlock();
                        if (block.getMaterial() != Material.air) {
                            MalmoMod.network.sendToServer(new AttackActionMessage(hitPos, face));
                            // Trigger a reward for collecting the block
                            java.util.List<ItemStack> items = block.getDrops(player.worldObj, hitPos, iblockstate, 0);
                            for (ItemStack item : items) {
                                RewardForCollectingItemImplementation.GainItemEvent event = new RewardForCollectingItemImplementation.GainItemEvent(item);
                                MinecraftForge.EVENT_BUS.post(event);
                            }
                        }
                    }
                    handled = true;
                    break;
                }
            case USE:
            case JUMPUSE:
                {
                    MovingObjectPosition mop = getObjectMouseOver(command);
                    if (mop.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
                        if (player.getCurrentEquippedItem() != null) {
                            ItemStack itemStack = player.getCurrentEquippedItem();
                            Block b = Block.getBlockFromItem(itemStack.getItem());
                            if (b != null) {
                                BlockPos pos = mop.getBlockPos().add(mop.sideHit.getDirectionVec());
                                // Can we place this block here?
                                AxisAlignedBB axisalignedbb = b.getCollisionBoundingBox(player.worldObj, pos, b.getDefaultState());
                                Entity exceptedEntity = (command == DiscreteMovementCommand.USE) ? null : player;
                                // (Not ideal, but needed by jump-use to allow the player to place a block where their feet would be.)
                                if (axisalignedbb == null || player.worldObj.checkNoEntityCollision(axisalignedbb, exceptedEntity)) {
                                    boolean standOnBlockPlaced = (command == DiscreteMovementCommand.JUMPUSE && mop.getBlockPos().equals(new BlockPos(player.posX, player.posY - 1, player.posZ)));
                                    MalmoMod.network.sendToServer(new UseActionMessage(mop.getBlockPos(), itemStack, mop.sideHit, standOnBlockPlaced));
                                }
                            }
                        }
                    }
                    handled = true;
                    break;
                }
            case JUMP:
                // Handled below.
                break;
        }
        // Handle jumping cases:
        if (command == DiscreteMovementCommand.JUMP || command == DiscreteMovementCommand.JUMPNORTH || command == DiscreteMovementCommand.JUMPEAST || command == DiscreteMovementCommand.JUMPSOUTH || command == DiscreteMovementCommand.JUMPWEST || command == DiscreteMovementCommand.JUMPMOVE || command == DiscreteMovementCommand.JUMPUSE || command == DiscreteMovementCommand.JUMPSTRAFE)
            y = 1;
        if (this.params.isAutoJump() && y == 0 && (z != 0 || x != 0)) {
            // Do we need to jump?
            if (!player.worldObj.getCollidingBoundingBoxes(player, player.getEntityBoundingBox().offset(x, 0, z)).isEmpty())
                y = 1;
        }
        if (z != 0 || x != 0 || y != 0) {
            // Attempt to move the entity:
            double oldX = player.posX;
            double oldZ = player.posZ;
            player.moveEntity(x, y, z);
            player.onUpdate();
            if (this.params.isAutoFall()) {
                // Did we step off a block? If so, attempt to fast-forward our fall.
                // Give up after this many attempts
                int bailCountdown = 256;
                // (This is needed because, for example, if the player is caught in a web, the downward movement will have no effect.)
                while (!player.onGround && !player.capabilities.isFlying && bailCountdown > 0) {
                    // Fast-forward downwards.
                    player.moveEntity(0, Math.floor(player.posY - 0.0000001) - player.posY, 0);
                    player.onUpdate();
                    bailCountdown--;
                }
            }
            // Now check where we ended up:
            double newX = player.posX;
            double newZ = player.posZ;
            // Are we still in the centre of a square, or did we get shunted?
            double offsetX = newX - Math.floor(newX);
            double offsetZ = newZ - Math.floor(newZ);
            if (Math.abs(offsetX - 0.5) + Math.abs(offsetZ - 0.5) > 0.01) {
                // We failed to move to the centre of the target square.
                // This might be because the target square was occupied, and we
                // were shunted back into our source square,
                // or it might be that the target square is occupied by something smaller
                // than one block (eg a fence post), and we're in the target square but
                // shunted off-centre.
                // Either way, we can't stay here, so move back to our original position.
                // Before we do that, fire off a message - this will give the TouchingBlockType handlers
                // a chance to react to the current position:
                DiscretePartialMoveEvent event = new DiscretePartialMoveEvent(player.posX, player.posY, player.posZ);
                MinecraftForge.EVENT_BUS.post(event);
                // Now adjust the player:
                player.moveEntity(oldX - newX, 0, oldZ - newZ);
                player.onUpdate();
            }
            // Now set the last tick pos values, to turn off inter-tick positional interpolation:
            player.lastTickPosX = player.posX;
            player.lastTickPosY = player.posY;
            player.lastTickPosZ = player.posZ;
            try {
                MalmoMod.getPropertiesForCurrentThread().put(MOVE_ATTEMPTED_KEY, true);
            } catch (Exception e) {
                // TODO - proper error reporting.
                System.out.println("Failed to access properties for the client thread after discrete movement - reward may be incorrect.");
            }
            handled = true;
        }
    }
    return handled;
}
Also used : AxisAlignedBB(net.minecraft.util.AxisAlignedBB) Entity(net.minecraft.entity.Entity) EnumFacing(net.minecraft.util.EnumFacing) DiscreteMovementCommand(com.microsoft.Malmo.Schemas.DiscreteMovementCommand) BlockPos(net.minecraft.util.BlockPos) IBlockState(net.minecraft.block.state.IBlockState) MovingObjectPosition(net.minecraft.util.MovingObjectPosition) PlayerInteractEvent(net.minecraftforge.event.entity.player.PlayerInteractEvent) Event(net.minecraftforge.fml.common.eventhandler.Event) BlockEvent(net.minecraftforge.event.world.BlockEvent) Block(net.minecraft.block.Block) EntityPlayerSP(net.minecraft.client.entity.EntityPlayerSP) ItemStack(net.minecraft.item.ItemStack)

Example 9 with AxisAlignedBB

use of net.minecraft.util.AxisAlignedBB in project malmo by Microsoft.

the class ObservationFromRayImplementation method findEntity.

static MovingObjectPosition findEntity(Vec3 eyePos, Vec3 lookVec, double depth, MovingObjectPosition mop, boolean includeTiles) {
    // Based on code in EntityRenderer.getMouseOver()
    if (mop != null)
        depth = mop.hitVec.distanceTo(eyePos);
    Vec3 searchVec = eyePos.addVector(lookVec.xCoord * depth, lookVec.yCoord * depth, lookVec.zCoord * depth);
    Entity pointedEntity = null;
    Vec3 hitVec = null;
    Entity viewer = Minecraft.getMinecraft().thePlayer;
    List<?> list = Minecraft.getMinecraft().theWorld.getEntitiesWithinAABBExcludingEntity(viewer, viewer.getEntityBoundingBox().addCoord(lookVec.xCoord * depth, lookVec.yCoord * depth, lookVec.zCoord * depth).expand(1.0, 1.0, 1.0));
    double distance = depth;
    for (int i = 0; i < list.size(); ++i) {
        Entity entity = (Entity) list.get(i);
        if (entity.canBeCollidedWith() || includeTiles) {
            float border = entity.getCollisionBorderSize();
            AxisAlignedBB axisalignedbb = entity.getEntityBoundingBox().expand((double) border, (double) border, (double) border);
            MovingObjectPosition movingobjectposition = axisalignedbb.calculateIntercept(eyePos, searchVec);
            if (axisalignedbb.isVecInside(eyePos)) {
                // If entity is right inside our head?
                if (distance >= 0) {
                    pointedEntity = entity;
                    hitVec = (movingobjectposition == null) ? eyePos : mop.hitVec;
                    distance = 0.0D;
                }
            } else if (movingobjectposition != null) {
                double distToEnt = eyePos.distanceTo(movingobjectposition.hitVec);
                if (distToEnt < distance || distance == 0.0D) {
                    if (entity == entity.ridingEntity && !entity.canRiderInteract()) {
                        if (distance == 0.0D) {
                            pointedEntity = entity;
                            hitVec = movingobjectposition.hitVec;
                        }
                    } else {
                        pointedEntity = entity;
                        hitVec = movingobjectposition.hitVec;
                        distance = distToEnt;
                    }
                }
            }
        }
    }
    if (pointedEntity != null && (distance < depth || mop == null)) {
        MovingObjectPosition newMop = new MovingObjectPosition(pointedEntity, hitVec);
        return newMop;
    }
    return null;
}
Also used : AxisAlignedBB(net.minecraft.util.AxisAlignedBB) Entity(net.minecraft.entity.Entity) MovingObjectPosition(net.minecraft.util.MovingObjectPosition) Vec3(net.minecraft.util.Vec3)

Example 10 with AxisAlignedBB

use of net.minecraft.util.AxisAlignedBB in project malmo by Microsoft.

the class MovingTargetDecoratorImplementation method pinchedByPlayer.

private boolean pinchedByPlayer(World world) {
    for (BlockPos bp : this.path) {
        //Block b = world.getBlockState(bp).getBlock();
        //AxisAlignedBB aabb = b.getCollisionBoundingBox(world, bp, b.getDefaultState());
        //aabb.expand(0, 1, 0);
        BlockPos bp2 = new BlockPos(bp.getX() + 1, bp.getY() + 2, bp.getZ() + 1);
        AxisAlignedBB aabb = new AxisAlignedBB(bp, bp2);
        List<Entity> entities = world.getEntitiesWithinAABBExcludingEntity(null, aabb);
        for (Entity ent : entities) if (ent instanceof EntityPlayer)
            return true;
    }
    return false;
}
Also used : AxisAlignedBB(net.minecraft.util.AxisAlignedBB) Entity(net.minecraft.entity.Entity) EntityPlayer(net.minecraft.entity.player.EntityPlayer) BlockPos(net.minecraft.util.BlockPos)

Aggregations

AxisAlignedBB (net.minecraft.util.AxisAlignedBB)74 Entity (net.minecraft.entity.Entity)24 EntityPlayer (net.minecraft.entity.player.EntityPlayer)20 MovingObjectPosition (net.minecraft.util.MovingObjectPosition)18 ItemStack (net.minecraft.item.ItemStack)15 TileEntity (net.minecraft.tileentity.TileEntity)14 ArrayList (java.util.ArrayList)13 Vec3 (net.minecraft.util.Vec3)13 List (java.util.List)11 EntityItem (net.minecraft.entity.item.EntityItem)11 Block (net.minecraft.block.Block)10 EntityLivingBase (net.minecraft.entity.EntityLivingBase)9 Pos (com.builtbroken.mc.imp.transform.vector.Pos)7 SideOnly (cpw.mods.fml.relauncher.SideOnly)7 Iterator (java.util.Iterator)4 LPPositionSet (logisticspipes.utils.LPPositionSet)4 World (net.minecraft.world.World)4 ForgeDirection (net.minecraftforge.common.util.ForgeDirection)4 DoubleCoordinates (network.rs485.logisticspipes.world.DoubleCoordinates)4 EntityFlyingBlock (icbm.classic.content.entity.EntityFlyingBlock)3