当前位置: 首页>>代码示例>>Java>>正文


Java World.isBlockLoaded方法代码示例

本文整理汇总了Java中net.minecraft.world.World.isBlockLoaded方法的典型用法代码示例。如果您正苦于以下问题:Java World.isBlockLoaded方法的具体用法?Java World.isBlockLoaded怎么用?Java World.isBlockLoaded使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在net.minecraft.world.World的用法示例。


在下文中一共展示了World.isBlockLoaded方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Java代码示例。

示例1: getClientGuiElement

import net.minecraft.world.World; //导入方法依赖的package包/类
@Nullable
@Override
public Object getClientGuiElement(int ID, EntityPlayer player, World world, int x, int y, int z) {
    BlockPos pos = new BlockPos(x, y, z);
    TileEntity te = world.isBlockLoaded(pos) ? world.getTileEntity(pos) : null;
    switch (EnumGuiId.values()[ID]) {
        case PNEUMATIC_GENERATOR:
            return new GuiPneumaticGenerator(player.inventory, (TileEntityPneumaticGenerator) te);
        case ELECTRIC_COMPRESSOR:
            return new GuiElectricCompressor(player.inventory, (TileEntityElectricCompressor) te);
    }
    return null;
}
 
开发者ID:TeamPneumatic,项目名称:pnc-repressurized,代码行数:14,代码来源:IC2.java

示例2: getTileEntity

import net.minecraft.world.World; //导入方法依赖的package包/类
public static TileEntity getTileEntity(BlockPos pos, int dimension) {
    World world = DimensionManager.getWorld(dimension);
    if (world != null && world.isBlockLoaded(pos)) {
        return world.getTileEntity(pos);
    }
    return null;
}
 
开发者ID:TeamPneumatic,项目名称:pnc-repressurized,代码行数:8,代码来源:PneumaticCraftUtils.java

示例3: matches

import net.minecraft.world.World; //导入方法依赖的package包/类
public boolean matches(World world, BlockPos center, boolean oldState) {
    lblPattern:
    for (Map.Entry<BlockPos, BlockInformation> entry : pattern.entrySet()) {
        BlockInformation info = entry.getValue();
        BlockPos at = center.add(entry.getKey());
        if(!world.isBlockLoaded(at)) { //We can't say if it's actually properly formed, but it didn't get changed from the last check so....
            return oldState;
        }

        if(info.matchingTag != null) {
            TileEntity te = world.getTileEntity(at);
            if(te != null && info.matchingTag.getSize() > 0) {
                NBTTagCompound cmp = new NBTTagCompound();
                te.writeToNBT(cmp);
                if(!NBTMatchingHelper.matchNBTCompound(info.matchingTag, cmp)) {
                    return false; //No match at this position.
                }
            }
        }

        IBlockState state = world.getBlockState(at);
        Block atBlock = state.getBlock();
        int atMeta = atBlock.getMetaFromState(state);

        for (IBlockStateDescriptor descriptor : info.matchingStates) {
            for (IBlockState applicable : descriptor.applicable) {
                Block type = applicable.getBlock();
                int meta = type.getMetaFromState(applicable);
                if(type.equals(state.getBlock()) && meta == atMeta) {
                    continue lblPattern; //Matches
                }
            }
        }
        return false;
    }
    return true;
}
 
开发者ID:HellFirePvP,项目名称:ModularMachinery,代码行数:38,代码来源:BlockArray.java

示例4: updateTick

import net.minecraft.world.World; //导入方法依赖的package包/类
@Override
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)
   {
       if (!worldIn.isRemote)
       {
           if (worldIn.getLightFromNeighbors(pos.up()) < 4 && worldIn.getBlockState(pos.up()).getLightOpacity(worldIn, pos.up()) > 2)
           {
               worldIn.setBlockState(pos,Util.getDirt(state));
           }
           else
           {
               if (worldIn.getLightFromNeighbors(pos.up()) >= 9)
               {
                   for (int i = 0; i < 4; ++i)
                   {
                       BlockPos blockpos = pos.add(rand.nextInt(3) - 1, rand.nextInt(5) - 3, rand.nextInt(3) - 1);

                       if (blockpos.getY() >= 0 && blockpos.getY() < 256 && !worldIn.isBlockLoaded(blockpos))
                       {
                           return;
                       }

                       IBlockState iblockstate = worldIn.getBlockState(blockpos.up());
                       IBlockState iblockstate1 = worldIn.getBlockState(blockpos);

                       if (Util.isDirt(iblockstate1.getBlock()) && worldIn.getLightFromNeighbors(blockpos.up()) >= 4 && iblockstate.getLightOpacity(worldIn, pos.up()) <= 2)
                       {
                           worldIn.setBlockState(blockpos, Util.getGrass(iblockstate1));
                       }
                   }
               }
           }
       }
   }
 
开发者ID:trigg,项目名称:Firma,代码行数:35,代码来源:GrassBlock2.java

示例5: updateTick

import net.minecraft.world.World; //导入方法依赖的package包/类
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)
{
    if (!worldIn.isRemote)
    {
        if (worldIn.getLightFromNeighbors(pos.up()) < 4 && worldIn.getBlockState(pos.up()).getLightOpacity(worldIn, pos.up()) > 2)
        {
            worldIn.setBlockState(pos, Blocks.DIRT.getDefaultState());
        }
        else
        {
            if (worldIn.getLightFromNeighbors(pos.up()) >= 9)
            {
                for (int i = 0; i < 4; ++i)
                {
                    BlockPos blockpos = pos.add(rand.nextInt(3) - 1, rand.nextInt(5) - 3, rand.nextInt(3) - 1);

                    if (blockpos.getY() >= 0 && blockpos.getY() < 256 && !worldIn.isBlockLoaded(blockpos))
                    {
                        return;
                    }

                    IBlockState iblockstate = worldIn.getBlockState(blockpos.up());
                    IBlockState iblockstate1 = worldIn.getBlockState(blockpos);

                    if (iblockstate1.getBlock() == Blocks.DIRT && iblockstate1.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.DIRT && worldIn.getLightFromNeighbors(blockpos.up()) >= 4 && iblockstate.getLightOpacity(worldIn, pos.up()) <= 2)
                    {
                        worldIn.setBlockState(blockpos, Blocks.GRASS.getDefaultState());
                    }
                }
            }
        }
    }
}
 
开发者ID:F1r3w477,项目名称:CustomWorldGen,代码行数:34,代码来源:BlockGrass.java

示例6: updateTick

import net.minecraft.world.World; //导入方法依赖的package包/类
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)
{
    if (!worldIn.isRemote)
    {
        if (worldIn.getLightFromNeighbors(pos.up()) < 4 && worldIn.getBlockState(pos.up()).getLightOpacity() > 2)
        {
            worldIn.setBlockState(pos, Blocks.DIRT.getDefaultState());
        }
        else
        {
            if (worldIn.getLightFromNeighbors(pos.up()) >= 9)
            {
                for (int i = 0; i < 4; ++i)
                {
                    BlockPos blockpos = pos.add(rand.nextInt(3) - 1, rand.nextInt(5) - 3, rand.nextInt(3) - 1);

                    if (blockpos.getY() >= 0 && blockpos.getY() < 256 && !worldIn.isBlockLoaded(blockpos))
                    {
                        return;
                    }

                    IBlockState iblockstate = worldIn.getBlockState(blockpos.up());
                    IBlockState iblockstate1 = worldIn.getBlockState(blockpos);

                    if (iblockstate1.getBlock() == Blocks.DIRT && iblockstate1.getValue(BlockDirt.VARIANT) == BlockDirt.DirtType.DIRT && worldIn.getLightFromNeighbors(blockpos.up()) >= 4 && iblockstate.getLightOpacity() <= 2)
                    {
                        worldIn.setBlockState(blockpos, Blocks.GRASS.getDefaultState());
                    }
                }
            }
        }
    }
}
 
开发者ID:sudofox,项目名称:Backmemed,代码行数:34,代码来源:BlockGrass.java

示例7: getCanBlockBurn

import net.minecraft.world.World; //导入方法依赖的package包/类
private boolean getCanBlockBurn(World worldIn, BlockPos pos)
{
    return pos.getY() >= 0 && pos.getY() < 256 && !worldIn.isBlockLoaded(pos) ? false : worldIn.getBlockState(pos).getMaterial().getCanBurn();
}
 
开发者ID:F1r3w477,项目名称:CustomWorldGen,代码行数:5,代码来源:BlockStaticLiquid.java

示例8: attemptTeleport

import net.minecraft.world.World; //导入方法依赖的package包/类
/**
 * Teleports the entity to the specified location. Used for Enderman and Chorus Fruit teleportation
 */
public boolean attemptTeleport(double x, double y, double z)
{
    double d0 = this.posX;
    double d1 = this.posY;
    double d2 = this.posZ;
    this.posX = x;
    this.posY = y;
    this.posZ = z;
    boolean flag = false;
    BlockPos blockpos = new BlockPos(this);
    World world = this.worldObj;
    Random random = this.getRNG();

    if (world.isBlockLoaded(blockpos))
    {
        boolean flag1 = false;

        while (!flag1 && blockpos.getY() > 0)
        {
            BlockPos blockpos1 = blockpos.down();
            IBlockState iblockstate = world.getBlockState(blockpos1);

            if (iblockstate.getMaterial().blocksMovement())
            {
                flag1 = true;
            }
            else
            {
                --this.posY;
                blockpos = blockpos1;
            }
        }

        if (flag1)
        {
            this.setPositionAndUpdate(this.posX, this.posY, this.posZ);

            if (world.getCollisionBoxes(this, this.getEntityBoundingBox()).isEmpty() && !world.containsAnyLiquid(this.getEntityBoundingBox()))
            {
                flag = true;
            }
        }
    }

    if (!flag)
    {
        this.setPositionAndUpdate(d0, d1, d2);
        return false;
    }
    else
    {
        int i = 128;

        for (int j = 0; j < 128; ++j)
        {
            double d6 = (double)j / 127.0D;
            float f = (random.nextFloat() - 0.5F) * 0.2F;
            float f1 = (random.nextFloat() - 0.5F) * 0.2F;
            float f2 = (random.nextFloat() - 0.5F) * 0.2F;
            double d3 = d0 + (this.posX - d0) * d6 + (random.nextDouble() - 0.5D) * (double)this.width * 2.0D;
            double d4 = d1 + (this.posY - d1) * d6 + random.nextDouble() * (double)this.height;
            double d5 = d2 + (this.posZ - d2) * d6 + (random.nextDouble() - 0.5D) * (double)this.width * 2.0D;
            world.spawnParticle(EnumParticleTypes.PORTAL, d3, d4, d5, (double)f, (double)f1, (double)f2, new int[0]);
        }

        if (this instanceof EntityCreature)
        {
            ((EntityCreature)this).getNavigator().clearPathEntity();
        }

        return true;
    }
}
 
开发者ID:F1r3w477,项目名称:CustomWorldGen,代码行数:77,代码来源:EntityLivingBase.java

示例9: processCommand

import net.minecraft.world.World; //导入方法依赖的package包/类
/**
 * Callback when the command is invoked
 */
public void processCommand(ICommandSender sender, String[] args) throws CommandException
{
    if (args.length < 4)
    {
        throw new WrongUsageException("commands.blockdata.usage", new Object[0]);
    }
    else
    {
        sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, 0);
        BlockPos blockpos = parseBlockPos(sender, args, 0, false);
        World world = sender.getEntityWorld();

        if (!world.isBlockLoaded(blockpos))
        {
            throw new CommandException("commands.blockdata.outOfWorld", new Object[0]);
        }
        else
        {
            TileEntity tileentity = world.getTileEntity(blockpos);

            if (tileentity == null)
            {
                throw new CommandException("commands.blockdata.notValid", new Object[0]);
            }
            else
            {
                NBTTagCompound nbttagcompound = new NBTTagCompound();
                tileentity.writeToNBT(nbttagcompound);
                NBTTagCompound nbttagcompound1 = (NBTTagCompound)nbttagcompound.copy();
                NBTTagCompound nbttagcompound2;

                try
                {
                    nbttagcompound2 = JsonToNBT.getTagFromJson(getChatComponentFromNthArg(sender, args, 3).getUnformattedText());
                }
                catch (NBTException nbtexception)
                {
                    throw new CommandException("commands.blockdata.tagError", new Object[] {nbtexception.getMessage()});
                }

                nbttagcompound.merge(nbttagcompound2);
                nbttagcompound.setInteger("x", blockpos.getX());
                nbttagcompound.setInteger("y", blockpos.getY());
                nbttagcompound.setInteger("z", blockpos.getZ());

                if (nbttagcompound.equals(nbttagcompound1))
                {
                    throw new CommandException("commands.blockdata.failed", new Object[] {nbttagcompound.toString()});
                }
                else
                {
                    tileentity.readFromNBT(nbttagcompound);
                    tileentity.markDirty();
                    world.markBlockForUpdate(blockpos);
                    sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, 1);
                    notifyOperators(sender, this, "commands.blockdata.success", new Object[] {nbttagcompound.toString()});
                }
            }
        }
    }
}
 
开发者ID:Notoh,项目名称:DecompiledMinecraft,代码行数:65,代码来源:CommandBlockData.java

示例10: updateTick

import net.minecraft.world.World; //导入方法依赖的package包/类
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)
{
    if (this.blockMaterial == Material.LAVA)
    {
        if (worldIn.getGameRules().getBoolean("doFireTick"))
        {
            int i = rand.nextInt(3);

            if (i > 0)
            {
                BlockPos blockpos = pos;

                for (int j = 0; j < i; ++j)
                {
                    blockpos = blockpos.add(rand.nextInt(3) - 1, 1, rand.nextInt(3) - 1);

                    if (blockpos.getY() >= 0 && blockpos.getY() < worldIn.getHeight() && !worldIn.isBlockLoaded(blockpos))
                    {
                        return;
                    }

                    Block block = worldIn.getBlockState(blockpos).getBlock();

                    if (block.blockMaterial == Material.AIR)
                    {
                        if (this.isSurroundingBlockFlammable(worldIn, blockpos))
                        {
                            worldIn.setBlockState(blockpos, Blocks.FIRE.getDefaultState());
                            return;
                        }
                    }
                    else if (block.blockMaterial.blocksMovement())
                    {
                        return;
                    }
                }
            }
            else
            {
                for (int k = 0; k < 3; ++k)
                {
                    BlockPos blockpos1 = pos.add(rand.nextInt(3) - 1, 0, rand.nextInt(3) - 1);

                    if (blockpos1.getY() >= 0 && blockpos1.getY() < 256 && !worldIn.isBlockLoaded(blockpos1))
                    {
                        return;
                    }

                    if (worldIn.isAirBlock(blockpos1.up()) && this.getCanBlockBurn(worldIn, blockpos1))
                    {
                        worldIn.setBlockState(blockpos1.up(), Blocks.FIRE.getDefaultState());
                    }
                }
            }
        }
    }
}
 
开发者ID:F1r3w477,项目名称:CustomWorldGen,代码行数:58,代码来源:BlockStaticLiquid.java

示例11: onBlockStartBreak

import net.minecraft.world.World; //导入方法依赖的package包/类
@Override
public boolean onBlockStartBreak(ItemStack itemstack, BlockPos pos, EntityPlayer player) {
	World world = player.getEntityWorld();

	if (!world.isRemote && player instanceof EntityPlayerMP) {

		RayTraceResult rt = this.rayTrace(world, player, false);
		if (rt.typeOfHit == RayTraceResult.Type.BLOCK) {
			EnumFacing side = rt.sideHit;

			List<BlockPos> extraBlocks = getExtraBlocks(world, rt, player);

			for (BlockPos pos2 : extraBlocks) {

				IBlockState state = world.getBlockState(pos2);

				if (!world.isBlockLoaded(pos2) || !player.canPlayerEdit(pos2, side, itemstack) || !(state.getBlock().canHarvestBlock(world, pos2, player))) {
					continue;
				}

				if (player.capabilities.isCreativeMode) {
					state.getBlock().onBlockHarvested(world, pos2, state, player);
					if (state.getBlock().removedByPlayer(state, world, pos2, player, false)) {
						state.getBlock().onBlockDestroyedByPlayer(world, pos2, state);
					}
				} else {
					int xp = ForgeHooks.onBlockBreakEvent(world, ((EntityPlayerMP) player).interactionManager.getGameType(), (EntityPlayerMP) player, pos2);

					state.getBlock().onBlockHarvested(world, pos2, state, player);
					this.onBlockDestroyed(itemstack, world, state, pos2, player);
					if (state.getBlock().removedByPlayer(state, world, pos2, player, true)) {
						state.getBlock().onBlockDestroyedByPlayer(world, pos2, state);
						state.getBlock().harvestBlock(world, player, pos2, state, world.getTileEntity(pos2), itemstack);
						state.getBlock().dropXpOnBlockBreak(world, pos2, xp);
					}
				}

				world.playEvent(2001, pos, Block.getStateId(state));
				((EntityPlayerMP) player).connection.sendPacket(new SPacketBlockChange(world, pos));

			}

		}

	}

	return false;
}
 
开发者ID:the-realest-stu,项目名称:Adventurers-Toolbox,代码行数:49,代码来源:ItemATHammer.java

示例12: attemptTeleport

import net.minecraft.world.World; //导入方法依赖的package包/类
/**
 * Teleports the entity to the specified location. Used for Enderman and Chorus Fruit teleportation
 */
public boolean attemptTeleport(double x, double y, double z)
{
    double d0 = this.posX;
    double d1 = this.posY;
    double d2 = this.posZ;
    this.posX = x;
    this.posY = y;
    this.posZ = z;
    boolean flag = false;
    BlockPos blockpos = new BlockPos(this);
    World world = this.world;
    Random random = this.getRNG();

    if (world.isBlockLoaded(blockpos))
    {
        boolean flag1 = false;

        while (!flag1 && blockpos.getY() > 0)
        {
            BlockPos blockpos1 = blockpos.down();
            IBlockState iblockstate = world.getBlockState(blockpos1);

            if (iblockstate.getMaterial().blocksMovement())
            {
                flag1 = true;
            }
            else
            {
                --this.posY;
                blockpos = blockpos1;
            }
        }

        if (flag1)
        {
            this.setPositionAndUpdate(this.posX, this.posY, this.posZ);

            if (world.getCollisionBoxes(this, this.getEntityBoundingBox()).isEmpty() && !world.containsAnyLiquid(this.getEntityBoundingBox()))
            {
                flag = true;
            }
        }
    }

    if (!flag)
    {
        this.setPositionAndUpdate(d0, d1, d2);
        return false;
    }
    else
    {
        int i = 128;

        for (int j = 0; j < 128; ++j)
        {
            double d6 = (double)j / 127.0D;
            float f = (random.nextFloat() - 0.5F) * 0.2F;
            float f1 = (random.nextFloat() - 0.5F) * 0.2F;
            float f2 = (random.nextFloat() - 0.5F) * 0.2F;
            double d3 = d0 + (this.posX - d0) * d6 + (random.nextDouble() - 0.5D) * (double)this.width * 2.0D;
            double d4 = d1 + (this.posY - d1) * d6 + random.nextDouble() * (double)this.height;
            double d5 = d2 + (this.posZ - d2) * d6 + (random.nextDouble() - 0.5D) * (double)this.width * 2.0D;
            world.spawnParticle(EnumParticleTypes.PORTAL, d3, d4, d5, (double)f, (double)f1, (double)f2, new int[0]);
        }

        if (this instanceof EntityCreature)
        {
            ((EntityCreature)this).getNavigator().clearPathEntity();
        }

        return true;
    }
}
 
开发者ID:sudofox,项目名称:Backmemed,代码行数:77,代码来源:EntityLivingBase.java

示例13: updateTick

import net.minecraft.world.World; //导入方法依赖的package包/类
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)
{
    if (this.blockMaterial == Material.LAVA)
    {
        if (worldIn.getGameRules().getBoolean("doFireTick"))
        {
            int i = rand.nextInt(3);

            if (i > 0)
            {
                BlockPos blockpos = pos;

                for (int j = 0; j < i; ++j)
                {
                    blockpos = blockpos.add(rand.nextInt(3) - 1, 1, rand.nextInt(3) - 1);

                    if (blockpos.getY() >= 0 && blockpos.getY() < 256 && !worldIn.isBlockLoaded(blockpos))
                    {
                        return;
                    }

                    Block block = worldIn.getBlockState(blockpos).getBlock();

                    if (block.blockMaterial == Material.AIR)
                    {
                        if (this.isSurroundingBlockFlammable(worldIn, blockpos))
                        {
                            worldIn.setBlockState(blockpos, Blocks.FIRE.getDefaultState());
                            return;
                        }
                    }
                    else if (block.blockMaterial.blocksMovement())
                    {
                        return;
                    }
                }
            }
            else
            {
                for (int k = 0; k < 3; ++k)
                {
                    BlockPos blockpos1 = pos.add(rand.nextInt(3) - 1, 0, rand.nextInt(3) - 1);

                    if (blockpos1.getY() >= 0 && blockpos1.getY() < 256 && !worldIn.isBlockLoaded(blockpos1))
                    {
                        return;
                    }

                    if (worldIn.isAirBlock(blockpos1.up()) && this.getCanBlockBurn(worldIn, blockpos1))
                    {
                        worldIn.setBlockState(blockpos1.up(), Blocks.FIRE.getDefaultState());
                    }
                }
            }
        }
    }
}
 
开发者ID:sudofox,项目名称:Backmemed,代码行数:58,代码来源:BlockStaticLiquid.java

示例14: execute

import net.minecraft.world.World; //导入方法依赖的package包/类
/**
 * Callback for when the command is executed
 */
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException
{
    if (args.length < 4)
    {
        throw new WrongUsageException("commands.blockdata.usage", new Object[0]);
    }
    else
    {
        sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, 0);
        BlockPos blockpos = parseBlockPos(sender, args, 0, false);
        World world = sender.getEntityWorld();

        if (!world.isBlockLoaded(blockpos))
        {
            throw new CommandException("commands.blockdata.outOfWorld", new Object[0]);
        }
        else
        {
            IBlockState iblockstate = world.getBlockState(blockpos);
            TileEntity tileentity = world.getTileEntity(blockpos);

            if (tileentity == null)
            {
                throw new CommandException("commands.blockdata.notValid", new Object[0]);
            }
            else
            {
                NBTTagCompound nbttagcompound = tileentity.writeToNBT(new NBTTagCompound());
                NBTTagCompound nbttagcompound1 = nbttagcompound.copy();
                NBTTagCompound nbttagcompound2;

                try
                {
                    nbttagcompound2 = JsonToNBT.getTagFromJson(getChatComponentFromNthArg(sender, args, 3).getUnformattedText());
                }
                catch (NBTException nbtexception)
                {
                    throw new CommandException("commands.blockdata.tagError", new Object[] {nbtexception.getMessage()});
                }

                nbttagcompound.merge(nbttagcompound2);
                nbttagcompound.setInteger("x", blockpos.getX());
                nbttagcompound.setInteger("y", blockpos.getY());
                nbttagcompound.setInteger("z", blockpos.getZ());

                if (nbttagcompound.equals(nbttagcompound1))
                {
                    throw new CommandException("commands.blockdata.failed", new Object[] {nbttagcompound.toString()});
                }
                else
                {
                    tileentity.readFromNBT(nbttagcompound);
                    tileentity.markDirty();
                    world.notifyBlockUpdate(blockpos, iblockstate, iblockstate, 3);
                    sender.setCommandStat(CommandResultStats.Type.AFFECTED_BLOCKS, 1);
                    notifyCommandListener(sender, this, "commands.blockdata.success", new Object[] {nbttagcompound.toString()});
                }
            }
        }
    }
}
 
开发者ID:F1r3w477,项目名称:CustomWorldGen,代码行数:65,代码来源:CommandBlockData.java


注:本文中的net.minecraft.world.World.isBlockLoaded方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。