Java 类net.minecraft.util.Vec3i 实例源码

项目:DecompiledMinecraft    文件:BlockModelRenderer.java   
private void renderModelBrightnessColorQuads(float p_178264_1_, float p_178264_2_, float p_178264_3_, float p_178264_4_, List<BakedQuad> p_178264_5_)
{
    Tessellator tessellator = Tessellator.getInstance();
    WorldRenderer worldrenderer = tessellator.getWorldRenderer();

    for (BakedQuad bakedquad : p_178264_5_)
    {
        worldrenderer.begin(7, DefaultVertexFormats.ITEM);
        worldrenderer.addVertexData(bakedquad.getVertexData());

        if (bakedquad.hasTintIndex())
        {
            worldrenderer.putColorRGB_F4(p_178264_2_ * p_178264_1_, p_178264_3_ * p_178264_1_, p_178264_4_ * p_178264_1_);
        }
        else
        {
            worldrenderer.putColorRGB_F4(p_178264_1_, p_178264_1_, p_178264_1_);
        }

        Vec3i vec3i = bakedquad.getFace().getDirectionVec();
        worldrenderer.putNormal((float)vec3i.getX(), (float)vec3i.getY(), (float)vec3i.getZ());
        tessellator.draw();
    }
}
项目:BaseClient    文件:BlockModelRenderer.java   
private void renderModelBrightnessColorQuads(float p_178264_1_, float p_178264_2_, float p_178264_3_, float p_178264_4_, List p_178264_5_)
{
    Tessellator tessellator = Tessellator.getInstance();
    WorldRenderer worldrenderer = tessellator.getWorldRenderer();

    for (Object bakedquad0 : p_178264_5_)
    {
        BakedQuad bakedquad = (BakedQuad)bakedquad0;
        worldrenderer.begin(7, DefaultVertexFormats.ITEM);
        worldrenderer.addVertexData(bakedquad.getVertexData());

        if (bakedquad.hasTintIndex())
        {
            worldrenderer.putColorRGB_F4(p_178264_2_ * p_178264_1_, p_178264_3_ * p_178264_1_, p_178264_4_ * p_178264_1_);
        }
        else
        {
            worldrenderer.putColorRGB_F4(p_178264_1_, p_178264_1_, p_178264_1_);
        }

        Vec3i vec3i = bakedquad.getFace().getDirectionVec();
        worldrenderer.putNormal((float)vec3i.getX(), (float)vec3i.getY(), (float)vec3i.getZ());
        tessellator.draw();
    }
}
项目:BaseClient    文件:BlockModelRenderer.java   
private void renderModelBrightnessColorQuads(float p_178264_1_, float p_178264_2_, float p_178264_3_, float p_178264_4_, List p_178264_5_)
{
    Tessellator tessellator = Tessellator.getInstance();
    WorldRenderer worldrenderer = tessellator.getWorldRenderer();

    for (Object bakedquad0 : p_178264_5_)
    {
        BakedQuad bakedquad = (BakedQuad) bakedquad0;
        worldrenderer.begin(7, DefaultVertexFormats.ITEM);
        worldrenderer.addVertexData(bakedquad.getVertexData());

        if (bakedquad.hasTintIndex())
        {
            worldrenderer.putColorRGB_F4(p_178264_2_ * p_178264_1_, p_178264_3_ * p_178264_1_, p_178264_4_ * p_178264_1_);
        }
        else
        {
            worldrenderer.putColorRGB_F4(p_178264_1_, p_178264_1_, p_178264_1_);
        }

        Vec3i vec3i = bakedquad.getFace().getDirectionVec();
        worldrenderer.putNormal((float)vec3i.getX(), (float)vec3i.getY(), (float)vec3i.getZ());
        tessellator.draw();
    }
}
项目:Real-Life-Mod-1.8    文件:RenderRailing.java   
@Override
public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f, int i) {
    TileEntity_Railing tile = (TileEntity_Railing) t;
    if (!tile.isInvalid()) {

        GL11.glPushMatrix();
        GL11.glTranslated(x + 0.5, y-1, z + 0.5);
        bindTexture(texture);


        Block right = tile.getWorld().getBlockState(tile.getPos().add(new Vec3i(1,-1,0))).getBlock();
        Block left = tile.getWorld().getBlockState(tile.getPos().add(new Vec3i(-1,0,0))).getBlock();
        Block front = tile.getWorld().getBlockState(tile.getPos().add(new Vec3i(0,0,1))).getBlock();
        Block back = tile.getWorld().getBlockState(tile.getPos().add(new Vec3i(0,0,-1))).getBlock();

        if(!(left instanceof BlockAir)&&!(left instanceof Block_Railing)){
            model.renderPart("left");
        }else
        if(!(right instanceof BlockAir)&&!(right instanceof Block_Railing)){
            model.renderPart("right");
        }else
        model.renderPart("middle");
        GL11.glPopMatrix();

    }
}
项目:Real-Life-Mod-1.8    文件:render_TV.java   
public void renderModelAt(TileEntity_TV tile, double x, double y, double z, float f) {
    glPushMatrix();
    glDisable(GL_CULL_FACE);
    glEnable(GL_ALPHA_TEST);
    Block b = tile.getWorld().getBlockState(tile.getPos().subtract(new Vec3i(0, 1, 0))).getBlock();
    glTranslatef((float) x + 0.5f, (float) y, (float) z + 0.5f);
    if (b instanceof Block_TVTable) {
        glTranslatef(0, -0.5f, 0);
    }
    glRotatef(tile.rotation * 90, 0.0F, 1.0F, 0.0F);
    if (tile.rotation == 0 || tile.rotation == 2) {
        glRotatef(180, 0.0F, 1.0F, 0.0F);
    }
    this.bindTexture(texture);
    this.model.renderAll();
    glPopMatrix();
}
项目:Real-Life-Mod-1.8    文件:Block_Streetlight.java   
@SideOnly(Side.CLIENT)
@Override
public void randomDisplayTick(World worldIn, BlockPos pos, IBlockState state, Random rand) {
    super.randomDisplayTick(worldIn, pos, state, rand);
    TileEntity_Lantern tile = (TileEntity_Lantern) worldIn.getTileEntity(pos);
    if (tile.isActive) {
        this.isBurning = true;
        setLightLevel(10.0f);
    } else {
        setLightLevel(0);
        isBurning = false;
    }
    worldIn.markBlockForUpdate(pos);
    worldIn.markBlockRangeForRenderUpdate(pos.subtract(new Vec3i(-5,0,-5)), pos.add(5,0,5));
    worldIn.notifyNeighborsOfStateChange(pos, this);
}
项目:ZeldaSwordSkills    文件:RoomSecret.java   
/**
 * Actually places the door; use after determining door side for best results
 */
private void placeDoor(World world, Random rand) {
    Vec3i center = bBox.getCenter();
    int x = center.getX();
    int y = bBox.minY + (submerged ? 2 : 1);
    int z = center.getZ();
    switch(face) {
    case SOUTH: z = bBox.maxZ; break;
    case NORTH: z = bBox.minZ; break;
    case EAST: x = bBox.maxX; break;
    case WEST: x = bBox.minX; break;
    default: // UP and DOWN not possible
    }
    world.setBlockState(new BlockPos(x, y, z), door.getStateFromMeta(doorMeta), 2);
    doorMeta = (door instanceof BlockDoorLocked ? (doorMeta | 8) : doorMeta); // upper part of door
    world.setBlockState(new BlockPos(x, y + 1, z), (door instanceof BlockPeg ? Blocks.air.getDefaultState() : door.getStateFromMeta(doorMeta)), 2);
}
项目:ZeldaSwordSkills    文件:RoomBoss.java   
/**
 * Actually places the door; use after determining door side for best results
 */
protected void placeDoor(World world) {
    Vec3i center = bBox.getCenter();
    int x = center.getX();
    int y = bBox.minY + (submerged ? 2 : 1);
    int z = center.getZ();
    switch(doorSide) {
    case SOUTH: z = bBox.maxZ; break;
    case NORTH: z = bBox.minZ; break;
    case EAST: x = bBox.maxX; break;
    case WEST: x = bBox.minX; break;
    default: ZSSMain.logger.warn("Placing Boss door with invalid door side");
    }
    world.setBlockState(new BlockPos(x, y, z), ZSSBlocks.doorBoss.getStateFromMeta(type.ordinal() & ~0x8), 2);
    world.setBlockState(new BlockPos(x, y + 1, z), ZSSBlocks.doorBoss.getStateFromMeta(type.ordinal() | 0x8), 2);
}
项目:ZeldaSwordSkills    文件:RoomBoss.java   
/**
 * Places and generates the contents of this dungeon's main chest
 */
protected void placeMainChest(World world, Random rand, boolean inCenter) {
    Vec3i center = bBox.getCenter();
    int x = (inCenter ? center.getX() : (rand.nextFloat() < 0.5F ? bBox.minX + 1 : bBox.maxX - 1));
    int y = bBox.minY + (inCenter ? 2 : 1) + (submerged && !inOcean ? 1 : 0);
    int z = (inCenter ? center.getZ() : (rand.nextFloat() < 0.5F ? bBox.minZ + 1 : bBox.maxZ - 1));
    BlockPos pos = new BlockPos(x, y, z);
    Block chest = (inCenter ? Blocks.chest : ZSSBlocks.chestLocked);
    placeChest(world, pos, chest);
    if (inCenter) {
        world.setBlockState(pos, chest.getStateFromMeta(doorSide.getIndex()), 2);
    } else if (submerged && !inOcean) {
        world.setBlockState(pos.down(), BlockSecretStone.EnumType.byMetadata(getMetadata()).getDroppedBlock().getDefaultState(), 2);
    }
    TileEntity te = world.getTileEntity(pos);
    if (te instanceof IInventory) {
        DungeonLootLists.generateBossChestContents(world, rand, (IInventory) te, this);
    }
}
项目:ZeldaSwordSkills    文件:RoomBoss.java   
@Override
protected boolean placeInOcean(World world, boolean sink) {
    if (type == BossType.OCEAN) {
        Vec3i center = bBox.getCenter();
        while (bBox.minY > 60 && world.getBlockState(new BlockPos(center.getX(), bBox.minY, center.getZ())).getBlock().getMaterial() == Material.air) {
            bBox.offset(0, -1, 0);
        }
        while (bBox.minY > 16 && world.getBlockState(new BlockPos(center.getX(), bBox.minY, center.getZ())).getBlock().getMaterial() == Material.water) {
            bBox.offset(0, -1, 0);
        }
        if (world.getBlockState(new BlockPos(center.getX(), bBox.minY, center.getZ())).getBlock().getMaterial() != Material.water &&
                world.getBlockState(new BlockPos(center.getX(), bBox.maxY, center.getZ())).getBlock().getMaterial() == Material.water) {
            inOcean = true;
            submerged = true;
            StructureGenUtils.adjustCornersForMaterial(world, bBox, Material.water, 6, false, false);
            return true;
        }
    }
    return false;
}
项目:ZeldaSwordSkills    文件:EarthBattle.java   
@Override
protected void onUpdateTick(World world) {
    int nextUpdate = 10;
    int x = box.minX + world.rand.nextInt(box.getXSize() - 1) + 1;
    int y = box.maxY - 1;
    int z = box.minZ + world.rand.nextInt(box.getZSize() - 1) + 1;
    Vec3i center = box.getCenter();
    if (Math.abs(center.getX() - x) > 1 && Math.abs(center.getZ() - z) > 1) {
        EntityBomb bomb = new EntityBomb(world).setDestructionFactor(0.7F).addTime((3 - difficulty) * 16);
        bomb.setPosition(x, y, z);
        if (world.isAirBlock(new BlockPos(x, box.minY, z))) {
            bomb.setNoGrief();
        }
        if (world.getCollidingBoundingBoxes(bomb, bomb.getEntityBoundingBox()).isEmpty()) {
            if (!world.isRemote) {
                world.playSoundEffect(x, y, z, Sounds.BOMB_WHISTLE, 1.0F, 1.0F);
                world.spawnEntityInWorld(bomb);
                nextUpdate = ((3 - difficulty) * 100) + 50 + world.rand.nextInt(400);
            }
        }
    }
    scheduleUpdateTick(nextUpdate);
}
项目:ZeldaSwordSkills    文件:BossBattle.java   
/**
 * Destroys part of a random pillar during boss event
 * @param explode whether a difficulty-scaled explosion should be created as well
 */
protected void destroyRandomPillar(World world, boolean explode) {
    Vec3i center = box.getCenter();
    int corner = world.rand.nextInt(4);
    int offset = (box.getXSize() < 11 ? 2 : 3);
    int x = (corner < 2 ? ((box.getXSize() < 11 ? center.getX() : box.minX) + offset)
            : ((box.getXSize() < 11 ? center.getX() : box.maxX) - offset));
    int y = box.minY + (world.rand.nextInt(3) + 1);
    int z = (corner % 2 == 0 ? ((box.getZSize() < 11 ? center.getZ() : box.minZ) + offset)
            : ((box.getZSize() < 11 ? center.getZ() : box.maxZ) - offset));
    if (!world.isAirBlock(new BlockPos(x, y, z))) {
        if (explode) {
            float radius = 1.5F + (float)(difficulty * 0.5F);
            CustomExplosion.createExplosion(world, x, y, z, radius, BombType.BOMB_STANDARD);
        }
        world.playSoundEffect(x + 0.5D, center.getY(), z + 0.5D, Sounds.ROCK_FALL, 1.0F, 1.0F);
        StructureGenUtils.destroyBlocksAround(world, x - 1, x + 2, y, box.maxY - 2, z - 1, z + 2, null, false);
    }
}
项目:ZeldaSwordSkills    文件:BossBattle.java   
/**
 * Called from {@link #endCrisis} to attempt to generate an Ancient Tablet
 */
protected void generateAncientTablet(World world) {
    if (world.rand.nextFloat() < 1.0F) { // TODO Config.getAncientTabletGenChance()
        // Attempt to find a valid block position n times
        BlockPos pos = null;
        // TODO allow tablet to spawn up to several chunks away?
        for (int n = 0; n < 4 && pos == null; ++n) {
            pos = getRandomPlaceablePosition(world, ZSSBlocks.ancientTablet, box.minX + 1, box.maxY + 1, box.minZ + 1, box.getXSize() - 1, 1, box.getZSize() - 1);
        }
        if (pos != null) {
            BlockAncientTablet.EnumType type = BlockAncientTablet.EnumType.byMetadata(world.rand.nextInt(BlockAncientTablet.EnumType.values().length));
            EnumFacing facing = (world.rand.nextInt(2) == 0 ? EnumFacing.SOUTH : EnumFacing.EAST);
            world.setBlockState(pos, ZSSBlocks.ancientTablet.getDefaultState().withProperty(BlockAncientTablet.VARIANT, type).withProperty(BlockAncientTablet.FACING, facing));
            world.playSoundEffect(pos.getX(), pos.getY(), pos.getZ(), Sounds.ROCK_FALL, 1.0F, 1.0F);
            Vec3i center = box.getCenter();
            EntityPlayer player = world.getClosestPlayer(center.getX(), center.getY(), center.getZ(), 16.0D);
            if (player != null) {
                new TimedChatDialogue(player, 1250, 1250, new ChatComponentTranslation("chat.zss.ancient_tablet.spawn"));
            }
        }
    }
}
项目:ZeldaSwordSkills    文件:TileEntityDungeonCore.java   
/**
 * Sets 2 air blocks where door used to be, after dungeon defeated
 * @param dy    Amount to adjust y position above box.minY; usually either 1 or 2
 */
private void placeOpenDoor(int dy) {
    if (doorSide == null) {
        doorSide = EnumFacing.EAST;
    }
    Vec3i center = box.getCenter();
    int x = center.getX();
    int z = center.getZ();
    switch(doorSide) {
    case SOUTH: z = box.maxZ; break;
    case NORTH: z = box.minZ; break;
    case EAST: x = box.maxX; break;
    case WEST: x = box.minX; break;
    default: // UP and DOWN not possible
    }
    worldObj.setBlockToAir(new BlockPos(x, box.minY + dy, z));
    worldObj.setBlockToAir(new BlockPos(x, box.minY + dy + 1, z));
}
项目:ZeldaSwordSkills    文件:StructureGenUtils.java   
/**
 * Returns average distance to ground based on 5 points in bounding box's lowest layer
 * @param max if any distance exceeds this threshold, this value will be returned
 */
public static int getAverageDistanceToGround(World world, StructureBoundingBox box, int max) {
    Vec3i center = box.getCenter();
    int i = getDistanceToGround(world, center.getX(), box.minY, center.getZ());
    int total = i;
    if (i > max) { return max; }
    i = getDistanceToGround(world, box.minX, box.minY, box.minZ);
    total += i;
    if (i > max) { return max; }
    i = getDistanceToGround(world, box.minX, box.minY, box.maxZ);
    total += i;
    if (i > max) { return max; }
    i = getDistanceToGround(world, box.maxX, box.minY, box.minZ);
    total += i;
    if (i > max) { return max; }
    i = getDistanceToGround(world, box.maxX, box.minY, box.maxZ);
    total += i;
    if (i > max) { return max; }
    return total / 5;
}
项目:VillagerTweaks    文件:ServerInfoTracker.java   
/**
 * Encapsulates the search on a list.
 * 
 * @param list
 *            Target list
 * @param position
 *            Desired coordinates
 * @param rangeLimit
 *            Maximum distance accepted
 * @param ageTolerance
 *            Maximum age of event accepted
 */
private static EventTracker seekValueOnList(List<EventTracker> list, Vec3i position, int rangeLimit, int ageTolerance)
{
    final int thisTick = ServerInfoTracker.ThisTick();

    for (final EventTracker et : list) {
        if (et.getTOB() > 0 && et.getTOB() + ageTolerance >= thisTick && position.distanceSq(et.getPosition()) <= rangeLimit) {
            if (ConfigurationHandler.onDebug) {
                LogHelper.info("ServerInfoTracker > found a valid target [" + et + "]");
            }

            et.expireNow();
            return et;
        }
    }

    return null;
}
项目:DecompiledMinecraft    文件:StructureBoundingBox.java   
public StructureBoundingBox(Vec3i vec1, Vec3i vec2)
{
    this.minX = Math.min(vec1.getX(), vec2.getX());
    this.minY = Math.min(vec1.getY(), vec2.getY());
    this.minZ = Math.min(vec1.getZ(), vec2.getZ());
    this.maxX = Math.max(vec1.getX(), vec2.getX());
    this.maxY = Math.max(vec1.getY(), vec2.getY());
    this.maxZ = Math.max(vec1.getZ(), vec2.getZ());
}
项目:DecompiledMinecraft    文件:BlockPattern.java   
/**
 * Offsets the position of pos in the direction of finger and thumb facing by offset amounts, follows the right-hand
 * rule for cross products (finger, thumb, palm) @return A new BlockPos offset in the facing directions
 */
protected static BlockPos translateOffset(BlockPos pos, EnumFacing finger, EnumFacing thumb, int palmOffset, int thumbOffset, int fingerOffset)
{
    if (finger != thumb && finger != thumb.getOpposite())
    {
        Vec3i vec3i = new Vec3i(finger.getFrontOffsetX(), finger.getFrontOffsetY(), finger.getFrontOffsetZ());
        Vec3i vec3i1 = new Vec3i(thumb.getFrontOffsetX(), thumb.getFrontOffsetY(), thumb.getFrontOffsetZ());
        Vec3i vec3i2 = vec3i.crossProduct(vec3i1);
        return pos.add(vec3i1.getX() * -thumbOffset + vec3i2.getX() * palmOffset + vec3i.getX() * fingerOffset, vec3i1.getY() * -thumbOffset + vec3i2.getY() * palmOffset + vec3i.getY() * fingerOffset, vec3i1.getZ() * -thumbOffset + vec3i2.getZ() * palmOffset + vec3i.getZ() * fingerOffset);
    }
    else
    {
        throw new IllegalArgumentException("Invalid forwards & up combination");
    }
}
项目:DecompiledMinecraft    文件:StructureBoundingBox.java   
public StructureBoundingBox(Vec3i vec1, Vec3i vec2)
{
    this.minX = Math.min(vec1.getX(), vec2.getX());
    this.minY = Math.min(vec1.getY(), vec2.getY());
    this.minZ = Math.min(vec1.getZ(), vec2.getZ());
    this.maxX = Math.max(vec1.getX(), vec2.getX());
    this.maxY = Math.max(vec1.getY(), vec2.getY());
    this.maxZ = Math.max(vec1.getZ(), vec2.getZ());
}
项目:DecompiledMinecraft    文件:BlockPattern.java   
/**
 * Offsets the position of pos in the direction of finger and thumb facing by offset amounts, follows the right-hand
 * rule for cross products (finger, thumb, palm) @return A new BlockPos offset in the facing directions
 */
protected static BlockPos translateOffset(BlockPos pos, EnumFacing finger, EnumFacing thumb, int palmOffset, int thumbOffset, int fingerOffset)
{
    if (finger != thumb && finger != thumb.getOpposite())
    {
        Vec3i vec3i = new Vec3i(finger.getFrontOffsetX(), finger.getFrontOffsetY(), finger.getFrontOffsetZ());
        Vec3i vec3i1 = new Vec3i(thumb.getFrontOffsetX(), thumb.getFrontOffsetY(), thumb.getFrontOffsetZ());
        Vec3i vec3i2 = vec3i.crossProduct(vec3i1);
        return pos.add(vec3i1.getX() * -thumbOffset + vec3i2.getX() * palmOffset + vec3i.getX() * fingerOffset, vec3i1.getY() * -thumbOffset + vec3i2.getY() * palmOffset + vec3i.getY() * fingerOffset, vec3i1.getZ() * -thumbOffset + vec3i2.getZ() * palmOffset + vec3i.getZ() * fingerOffset);
    }
    else
    {
        throw new IllegalArgumentException("Invalid forwards & up combination");
    }
}
项目:DecompiledMinecraft    文件:RegionRenderCache.java   
public RegionRenderCache(World worldIn, BlockPos posFromIn, BlockPos posToIn, int subIn)
{
    super(worldIn, posFromIn, posToIn, subIn);
    this.position = posFromIn.subtract(new Vec3i(subIn, subIn, subIn));
    int i = 8000;
    this.combinedLights = new int[8000];
    Arrays.fill((int[])this.combinedLights, (int) - 1);
    this.blockStates = new IBlockState[8000];
}
项目:DecompiledMinecraft    文件:FaceBakery.java   
public static EnumFacing getFacingFromVertexData(int[] faceData)
{
    Vector3f vector3f = new Vector3f(Float.intBitsToFloat(faceData[0]), Float.intBitsToFloat(faceData[1]), Float.intBitsToFloat(faceData[2]));
    Vector3f vector3f1 = new Vector3f(Float.intBitsToFloat(faceData[7]), Float.intBitsToFloat(faceData[8]), Float.intBitsToFloat(faceData[9]));
    Vector3f vector3f2 = new Vector3f(Float.intBitsToFloat(faceData[14]), Float.intBitsToFloat(faceData[15]), Float.intBitsToFloat(faceData[16]));
    Vector3f vector3f3 = new Vector3f();
    Vector3f vector3f4 = new Vector3f();
    Vector3f vector3f5 = new Vector3f();
    Vector3f.sub(vector3f, vector3f1, vector3f3);
    Vector3f.sub(vector3f2, vector3f1, vector3f4);
    Vector3f.cross(vector3f4, vector3f3, vector3f5);
    float f = (float)Math.sqrt((double)(vector3f5.x * vector3f5.x + vector3f5.y * vector3f5.y + vector3f5.z * vector3f5.z));
    vector3f5.x /= f;
    vector3f5.y /= f;
    vector3f5.z /= f;
    EnumFacing enumfacing = null;
    float f1 = 0.0F;

    for (EnumFacing enumfacing1 : EnumFacing.values())
    {
        Vec3i vec3i = enumfacing1.getDirectionVec();
        Vector3f vector3f6 = new Vector3f((float)vec3i.getX(), (float)vec3i.getY(), (float)vec3i.getZ());
        float f2 = Vector3f.dot(vector3f5, vector3f6);

        if (f2 >= 0.0F && f2 > f1)
        {
            f1 = f2;
            enumfacing = enumfacing1;
        }
    }

    if (enumfacing == null)
    {
        return EnumFacing.UP;
    }
    else
    {
        return enumfacing;
    }
}
项目:BaseClient    文件:StructureBoundingBox.java   
public StructureBoundingBox(Vec3i vec1, Vec3i vec2)
{
    this.minX = Math.min(vec1.getX(), vec2.getX());
    this.minY = Math.min(vec1.getY(), vec2.getY());
    this.minZ = Math.min(vec1.getZ(), vec2.getZ());
    this.maxX = Math.max(vec1.getX(), vec2.getX());
    this.maxY = Math.max(vec1.getY(), vec2.getY());
    this.maxZ = Math.max(vec1.getZ(), vec2.getZ());
}
项目:BaseClient    文件:BlockPattern.java   
/**
 * Offsets the position of pos in the direction of finger and thumb facing by offset amounts, follows the right-hand
 * rule for cross products (finger, thumb, palm) @return A new BlockPos offset in the facing directions
 */
protected static BlockPos translateOffset(BlockPos pos, EnumFacing finger, EnumFacing thumb, int palmOffset, int thumbOffset, int fingerOffset)
{
    if (finger != thumb && finger != thumb.getOpposite())
    {
        Vec3i vec3i = new Vec3i(finger.getFrontOffsetX(), finger.getFrontOffsetY(), finger.getFrontOffsetZ());
        Vec3i vec3i1 = new Vec3i(thumb.getFrontOffsetX(), thumb.getFrontOffsetY(), thumb.getFrontOffsetZ());
        Vec3i vec3i2 = vec3i.crossProduct(vec3i1);
        return pos.add(vec3i1.getX() * -thumbOffset + vec3i2.getX() * palmOffset + vec3i.getX() * fingerOffset, vec3i1.getY() * -thumbOffset + vec3i2.getY() * palmOffset + vec3i.getY() * fingerOffset, vec3i1.getZ() * -thumbOffset + vec3i2.getZ() * palmOffset + vec3i.getZ() * fingerOffset);
    }
    else
    {
        throw new IllegalArgumentException("Invalid forwards & up combination");
    }
}
项目:BaseClient    文件:RegionRenderCache.java   
public RegionRenderCache(World worldIn, BlockPos posFromIn, BlockPos posToIn, int subIn)
{
    super(worldIn, posFromIn, posToIn, subIn);
    this.position = posFromIn.subtract(new Vec3i(subIn, subIn, subIn));
    boolean flag = true;
    this.combinedLights = allocateLights(8000);
    Arrays.fill((int[])this.combinedLights, (int) - 1);
    this.blockStates = allocateStates(8000);
}
项目:BaseClient    文件:StructureBoundingBox.java   
public StructureBoundingBox(Vec3i vec1, Vec3i vec2)
{
    this.minX = Math.min(vec1.getX(), vec2.getX());
    this.minY = Math.min(vec1.getY(), vec2.getY());
    this.minZ = Math.min(vec1.getZ(), vec2.getZ());
    this.maxX = Math.max(vec1.getX(), vec2.getX());
    this.maxY = Math.max(vec1.getY(), vec2.getY());
    this.maxZ = Math.max(vec1.getZ(), vec2.getZ());
}
项目:BaseClient    文件:BlockPattern.java   
/**
 * Offsets the position of pos in the direction of finger and thumb facing by offset amounts, follows the right-hand
 * rule for cross products (finger, thumb, palm) @return A new BlockPos offset in the facing directions
 */
protected static BlockPos translateOffset(BlockPos pos, EnumFacing finger, EnumFacing thumb, int palmOffset, int thumbOffset, int fingerOffset)
{
    if (finger != thumb && finger != thumb.getOpposite())
    {
        Vec3i vec3i = new Vec3i(finger.getFrontOffsetX(), finger.getFrontOffsetY(), finger.getFrontOffsetZ());
        Vec3i vec3i1 = new Vec3i(thumb.getFrontOffsetX(), thumb.getFrontOffsetY(), thumb.getFrontOffsetZ());
        Vec3i vec3i2 = vec3i.crossProduct(vec3i1);
        return pos.add(vec3i1.getX() * -thumbOffset + vec3i2.getX() * palmOffset + vec3i.getX() * fingerOffset, vec3i1.getY() * -thumbOffset + vec3i2.getY() * palmOffset + vec3i.getY() * fingerOffset, vec3i1.getZ() * -thumbOffset + vec3i2.getZ() * palmOffset + vec3i.getZ() * fingerOffset);
    }
    else
    {
        throw new IllegalArgumentException("Invalid forwards & up combination");
    }
}
项目:BaseClient    文件:RegionRenderCache.java   
public RegionRenderCache(World worldIn, BlockPos posFromIn, BlockPos posToIn, int subIn)
{
    super(worldIn, posFromIn, posToIn, subIn);
    this.position = posFromIn.subtract(new Vec3i(subIn, subIn, subIn));
    int i = 8000;
    this.combinedLights = new int[8000];
    Arrays.fill((int[])this.combinedLights, (int) - 1);
    this.blockStates = new IBlockState[8000];
}
项目:Proyecto-DASI    文件:BuildBattleDecoratorImplementation.java   
/**
 * Attempt to parse the given object as a set of parameters for this handler.
 *
 * @param params the parameter block to parse
 * @return true if the object made sense for this handler; false otherwise.
 */
@Override
public boolean parseParameters(Object params)
{
    if (params == null || !(params instanceof BuildBattleDecorator))
        return false;

    this.params = (BuildBattleDecorator) params;

    this.sourceBounds = this.params.getGoalStructureBounds();
    this.destBounds = this.params.getPlayerStructureBounds();
    this.delta = new Vec3i(destBounds.getMin().getX() - sourceBounds.getMin().getX(),
                           destBounds.getMin().getY() - sourceBounds.getMin().getY(),
                           destBounds.getMin().getZ() - sourceBounds.getMin().getZ());

    this.structureVolume = volumeOfBounds(this.sourceBounds);
    assert(this.structureVolume == volumeOfBounds(this.destBounds));
    this.dest = new ArrayList<IBlockState>(Collections.nCopies(this.structureVolume, (IBlockState)null));
    this.source = new ArrayList<IBlockState>(Collections.nCopies(this.structureVolume, (IBlockState)null));

    DrawBlockBasedObjectType tickBlock = this.params.getBlockTypeOnCorrectPlacement();
    DrawBlockBasedObjectType crossBlock = this.params.getBlockTypeOnIncorrectPlacement();

    this.blockTypeOnCorrectPlacement = (tickBlock != null) ? new XMLBlockState(tickBlock.getType(), tickBlock.getColour(), tickBlock.getFace(), tickBlock.getVariant()) : null;
    this.blockTypeOnIncorrectPlacement = (crossBlock != null) ? new XMLBlockState(crossBlock.getType(), crossBlock.getColour(), crossBlock.getFace(), crossBlock.getVariant()) : null;
    return true;
}
项目:Proyecto-DASI    文件:BuildBattleDecoratorImplementation.java   
/**
 * Attempt to parse the given object as a set of parameters for this handler.
 *
 * @param params the parameter block to parse
 * @return true if the object made sense for this handler; false otherwise.
 */
@Override
public boolean parseParameters(Object params)
{
    if (params == null || !(params instanceof BuildBattleDecorator))
        return false;

    this.params = (BuildBattleDecorator) params;

    this.sourceBounds = this.params.getGoalStructureBounds();
    this.destBounds = this.params.getPlayerStructureBounds();
    this.delta = new Vec3i(destBounds.getMin().getX() - sourceBounds.getMin().getX(),
                           destBounds.getMin().getY() - sourceBounds.getMin().getY(),
                           destBounds.getMin().getZ() - sourceBounds.getMin().getZ());

    this.structureVolume = volumeOfBounds(this.sourceBounds);
    assert(this.structureVolume == volumeOfBounds(this.destBounds));
    this.dest = new ArrayList<IBlockState>(Collections.nCopies(this.structureVolume, (IBlockState)null));
    this.source = new ArrayList<IBlockState>(Collections.nCopies(this.structureVolume, (IBlockState)null));

    DrawBlockBasedObjectType tickBlock = this.params.getBlockTypeOnCorrectPlacement();
    DrawBlockBasedObjectType crossBlock = this.params.getBlockTypeOnIncorrectPlacement();

    this.blockTypeOnCorrectPlacement = (tickBlock != null) ? new XMLBlockState(tickBlock.getType(), tickBlock.getColour(), tickBlock.getFace(), tickBlock.getVariant()) : null;
    this.blockTypeOnIncorrectPlacement = (crossBlock != null) ? new XMLBlockState(crossBlock.getType(), crossBlock.getColour(), crossBlock.getFace(), crossBlock.getVariant()) : null;
    return true;
}
项目:Real-Life-Mod-1.8    文件:RenderIronFence.java   
@Override
public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f, int i) {
    TileEntity_IronFence tile = (TileEntity_IronFence) t;
    if (!tile.isInvalid()) {

        GL11.glPushMatrix();
        GL11.glTranslated(x + 0.5, y, z + 0.5);
        bindTexture(texture);


        Block right = tile.getWorld().getBlockState(tile.getPos().add(new Vec3i(1,0,0))).getBlock();
        Block left = tile.getWorld().getBlockState(tile.getPos().add(new Vec3i(-1,0,0))).getBlock();
        Block front = tile.getWorld().getBlockState(tile.getPos().add(new Vec3i(0,0,1))).getBlock();
        Block back = tile.getWorld().getBlockState(tile.getPos().add(new Vec3i(0,0,-1))).getBlock();

        if(front instanceof Block_IronFence||!(front instanceof BlockAir)){
            model.renderPart("front");
        }
        if(back instanceof Block_IronFence||!(back instanceof BlockAir)){
            model.renderPart("back");
        }

        if(left instanceof Block_IronFence||!(left instanceof BlockAir)){
            model.renderPart("left");
        }
        if(right instanceof Block_IronFence||!(right instanceof BlockAir)){
            model.renderPart("right");
        }
        model.renderPart("post");
        GL11.glPopMatrix();

    }
}
项目:Real-Life-Mod-1.8    文件:RenderMarking.java   
@Override
public void renderTileEntityAt(TileEntity t, double x, double y, double z, float f, int i) {
    TileEntity_IronFence tile = (TileEntity_IronFence) t;
    if (!tile.isInvalid()) {

        GL11.glPushMatrix();
        GL11.glTranslated(x + 0.5, y, z + 0.5);


        Block right = tile.getWorld().getBlockState(tile.getPos().add(new Vec3i(1,0,0))).getBlock();
        Block left = tile.getWorld().getBlockState(tile.getPos().add(new Vec3i(-1,0,0))).getBlock();
        Block front = tile.getWorld().getBlockState(tile.getPos().add(new Vec3i(0,0,1))).getBlock();
        Block back = tile.getWorld().getBlockState(tile.getPos().add(new Vec3i(0,0,-1))).getBlock();

        if(front instanceof Block_IronFence||!(front instanceof BlockAir)){
            bindTexture(new ResourceLocation("reallifemod:textures/models/block/texture_Iron.png"));
        }
        if(back instanceof Block_IronFence||!(back instanceof BlockAir)){
            model.renderPart("back");
        }

        if(left instanceof Block_IronFence||!(left instanceof BlockAir)){
            model.renderPart("left");
        }
        if(right instanceof Block_IronFence||!(right instanceof BlockAir)){
            model.renderPart("right");
        }
        model.renderPart("post");
        GL11.glPopMatrix();

    }
}
项目:Minecraft-Modding    文件:TEParticleLauncher.java   
public TEParticleLauncher(EnumFacing blockFacing)
{
    super();
    Vec3i dir = blockFacing.getDirectionVec();
    dirX = dir.getX();
    dirY = dir.getY();
    dirZ = dir.getZ();
}
项目:ZeldaSwordSkills    文件:MapGenSecretRoom.java   
@Override
protected StructureBoundingBox getStructureBBAt(int x, int y, int z) {
    NBTTagList roomList = getStructureListFor(x >> 4, z >> 4);
    for (int i = 0; i < roomList.tagCount(); ++i) {
        NBTTagCompound compound = (NBTTagCompound) roomList.getCompoundTagAt(i);
        if (compound.hasKey("BB")) {
            StructureBoundingBox box = new StructureBoundingBox(compound.getIntArray("BB"));
            if (box.isVecInside(new Vec3i(x, y, z))) {
                return box;
            }
        }
    }

    return null;
}
项目:ZeldaSwordSkills    文件:RoomSecret.java   
@Override
public boolean generate(ZSSMapGenBase mapGen, World world, Random rand, int x, int y, int z) {
    if (y < bBox.maxY) {
        return false;
    }
    inNether = (world.provider.getDimensionName().equals("Nether"));
    bBox.offset(x, y - bBox.maxY, z);
    Vec3i center = bBox.getCenter();
    int worldHeight = (inNether ? 128 : world.getHeight(new BlockPos(center.getX(), bBox.minY, center.getZ())).getY());
    if (bBox.maxY > worldHeight) {
        bBox.offset(0, worldHeight - bBox.maxY - 1, 0);
    }
    if (!validateTopLayer(world) && !placeInOcean(world, true)) {
        return false;
    } else if (inNether && submerged && !placeInNether(world)) {
        return false;
    }
    StructureGenUtils.adjustForAir(world, this, bBox);
    checkSpecialCases(world, rand);
    setMetadata(world, new BlockPos(bBox.getCenter()));
    int range = (inOcean ? Config.getMinOceanDistance() : inNether ? Config.getNetherMinDistance() : Config.getMinLandDistance());
    if (!mapGen.areStructuresWithinRange(this, range) && isWellHidden(world) && canGenerate(world)) {
        doStandardRoomGen(world, rand);
        return true;
    } else {
        return false;
    }
}
项目:ZeldaSwordSkills    文件:RoomBase.java   
/**
 * After a failed validation, attempts to place structure in ocean if applicable
 * @param sink if true, sinks the structure by some amount into the ocean floor
 * @return true if successful, in which case inOcean is set to true
 */
protected boolean placeInOcean(World world, boolean sink) {
    bBox.offset(0, 4, 0); // move back up a little
    Vec3i center = bBox.getCenter();
    int x = center.getX();
    int z = center.getZ();
    boolean flag = world.getBiomeGenForCoords(new BlockPos(center)).biomeName.toLowerCase().contains("ocean");
    if (flag && !inLava && world.getBlockState(new BlockPos(x, bBox.maxY, z)).getBlock().getMaterial() == Material.water) {
        int count = 0;
        while (bBox.minY > 16 && count < 8 && world.getBlockState(new BlockPos(x, bBox.minY, z)).getBlock().getMaterial() == Material.water) {
            bBox.offset(0, -1, 0);
            ++count;
        }
        if (world.getBlockState(new BlockPos(x, bBox.minY, z)).getBlock().getMaterial() != Material.water) {
            inOcean = true;
            StructureGenUtils.adjustCornersForMaterial(world, bBox, Material.water, 6, false, false);
            if (sink) {
                int diff = Config.getMainDungeonDifficulty();
                int adj = 2 - diff;
                if (world.rand.nextFloat() > (diff * 0.25F)) {
                    if (diff == 3) {
                        ++adj;
                    } else {
                        adj += (world.rand.nextFloat() < 0.5F ? 1 : -1);
                    }
                }
                bBox.offset(0, -(bBox.getYSize() - adj), 0);
            }

            return true;
        }
    }
    return false;
}
项目:ZeldaSwordSkills    文件:RoomBase.java   
/**
 * Adjusts nether dungeons to rest on solid ground when submerged in lava
 * @return true if final bottom block is not another secret dungeon block
 */
protected boolean placeInNether(World world) {
    Vec3i center = bBox.getCenter();
    int x = center.getX();
    int z = center.getZ();
    while (bBox.minY > 8 && world.getBlockState(new BlockPos(x, bBox.minY, z)).getBlock().getMaterial() == Material.lava) {
        bBox.offset(0, -1, 0);
    }
    StructureGenUtils.adjustCornersForMaterial(world, bBox, Material.lava, 4, false, false);
    return (world.getBlockState(new BlockPos(x, bBox.minY, z)).getBlock() != ZSSBlocks.secretStone);
}
项目:ZeldaSwordSkills    文件:RoomBoss.java   
/**
 * Determines which side is most suitable for the door
 */
protected void determineDoorSide(World world) {
    Vec3i center = bBox.getCenter();
    int x = center.getX();
    int y = bBox.minY + 1;
    int z = center.getZ();
    int dx, dz; 
    doorSide = EnumFacing.Plane.HORIZONTAL.random(world.rand);
    for (int i = 0; i < 4; ++i) {
        dx = x;
        dz = z;
        switch(doorSide) {
        case SOUTH: dz = bBox.maxZ + 1; break;
        case NORTH: dz = bBox.minZ - 1; break;
        case EAST: dx = bBox.maxX + 1; break;
        case WEST: dx = bBox.maxX - 1; break;
        default: ZSSMain.logger.warn(String.format("Invalid boss door side %d at %d/%d/%d", doorSide, x, y, z));
        }
        Block block1 = world.getBlockState(new BlockPos(dx, y, dz)).getBlock();
        Block block2 = world.getBlockState(new BlockPos(dx, y + 1, dz)).getBlock();
        if (!block1.isFullBlock() && !block2.isFullBlock()) {
            return; // the blocks in front of the door are not full blocks, this is a good side for the door
        }
        doorSide = doorSide.rotateY();
    }
    doorSide = null;
}
项目:ZeldaSwordSkills    文件:RoomBoss.java   
/**
 * Places the center half-slabs and block for either a chest or a pedestal
 */
protected void placeCenterPiece(World world, Random rand, int meta) {
    int minX = bBox.getXSize() / 2 - 1;
    int minY = 1;
    int minZ = bBox.getZSize() / 2 - 1;
    if (submerged) {
        StructureGenUtils.fillWithBlocks(world, bBox, minX, minX + 3, minY, minY + 1, minZ, minZ + 3, BlockSecretStone.EnumType.byMetadata(meta).getDroppedBlock().getDefaultState());
        ++minY;
    }
    if (!inOcean) {
        StructureGenUtils.fillWithBlocks(world, bBox, minX, minX + 3, minY, minY + 1, minZ, minZ + 3, BlockSecretStone.EnumType.byMetadata(meta).getSlab());
    }
    Vec3i center = bBox.getCenter();
    world.setBlockState(new BlockPos(center.getX(), bBox.minY + (submerged && !inOcean ? 2 : 1), center.getZ()), (type == BossType.TAIGA ? Blocks.quartz_block.getDefaultState() : BlockSecretStone.EnumType.byMetadata(meta).getDroppedBlock().getDefaultState()), 2);
    placeHinderBlock(world);
    boolean hasChest = false;
    switch(type) {
    case DESERT: // fall through
    case OCEAN: // fall through
    case MOUNTAIN: placeMainChest(world, rand, true); hasChest = true; break;
    case FOREST:
        if (rand.nextFloat() < Config.getMasterSwordChance()) {
            placePedestal(world, minY + 1);
        } else { // chance of double chest
            placeMainChest(world, rand, true);
            hasChest = !(rand.nextFloat() < (2 * Config.getDoubleChestChance()));
        }
        break;
    case HELL: placeFlame(world, BlockSacredFlame.EnumType.DIN); break;
    case SWAMP: placeFlame(world, BlockSacredFlame.EnumType.FARORE); break;
    case TAIGA: placeFlame(world, BlockSacredFlame.EnumType.NAYRU); break;
    default:
    }
    if (!hasChest) {
        placeMainChest(world, rand, false);
    }
}
项目:ZeldaSwordSkills    文件:RoomBoss.java   
/**
 * Places the hanging chandelier only if height is sufficient
 */
protected void placeChandelier(World world) {
    if (bBox.getYSize() > 7) {
        Vec3i center = bBox.getCenter();
        int x = center.getX();
        int y = bBox.maxY - 1;
        int z = center.getZ();
        switch(type) {
        case OCEAN:
            world.setBlockState(new BlockPos(x + 1, y, z + 1), Blocks.glowstone.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x + 1, y, z - 1), Blocks.glowstone.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x - 1, y, z + 1), Blocks.glowstone.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x - 1, y, z - 1), Blocks.glowstone.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x, y, z), Blocks.glowstone.getDefaultState(), 2);
            break;
        case SWAMP:
            world.setBlockState(new BlockPos(bBox.minX + 1, y, bBox.minZ + 1), Blocks.glowstone.getDefaultState(), 2);
            world.setBlockState(new BlockPos(bBox.minX + 1, y, bBox.maxZ - 1), Blocks.glowstone.getDefaultState(), 2);
            world.setBlockState(new BlockPos(bBox.maxX - 1, y, bBox.minZ + 1), Blocks.glowstone.getDefaultState(), 2);
            world.setBlockState(new BlockPos(bBox.maxX - 1, y, bBox.maxZ - 1), Blocks.glowstone.getDefaultState(), 2);
            break;
        default:
            world.setBlockState(new BlockPos(x, y, z), Blocks.oak_fence.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x + 1, y, z), Blocks.oak_fence.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x + 1, y, z), Blocks.oak_fence.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x, y, z + 1), Blocks.oak_fence.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x, y, z - 1), Blocks.oak_fence.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x + 1, y, z + 1), Blocks.oak_fence.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x + 1, y, z - 1), Blocks.oak_fence.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x - 1, y, z + 1), Blocks.oak_fence.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x - 1, y, z - 1), Blocks.oak_fence.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x, y - 1, z), Blocks.oak_fence.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x + 1, y - 1, z + 1), Blocks.glowstone.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x + 1, y - 1, z - 1), Blocks.glowstone.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x - 1, y - 1, z + 1), Blocks.glowstone.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x - 1, y - 1, z - 1), Blocks.glowstone.getDefaultState(), 2);
            world.setBlockState(new BlockPos(x, y - 2, z), Blocks.glowstone.getDefaultState(), 2);
        }
    }
}