當前位置: 首頁>>代碼示例>>Java>>正文


Java WorldServer.getSpawnPoint方法代碼示例

本文整理匯總了Java中net.minecraft.world.WorldServer.getSpawnPoint方法的典型用法代碼示例。如果您正苦於以下問題:Java WorldServer.getSpawnPoint方法的具體用法?Java WorldServer.getSpawnPoint怎麽用?Java WorldServer.getSpawnPoint使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在net.minecraft.world.WorldServer的用法示例。


在下文中一共展示了WorldServer.getSpawnPoint方法的13個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Java代碼示例。

示例1: unloadChunksIfNotNearSpawn

import net.minecraft.world.WorldServer; //導入方法依賴的package包/類
public static void unloadChunksIfNotNearSpawn(WorldServer world, int par1, int par2)
{
    if(world.provider.canRespawnHere())
    {
        BlockPos var3 = world.getSpawnPoint();
        int var4 = par1 * 16 + 8 - var3.getX();
        int var5 = par2 * 16 + 8 - var3.getZ();
        short var6 = 128;
        if(var4 < -var6 || var4 > var6 || var5 < -var6 || var5 > var6)
        {
            world.getChunkProvider().droppedChunksSet.add(Long.valueOf(ChunkPos.asLong(par1, par2)));
        }
    } else
    {
        world.getChunkProvider().droppedChunksSet.add(Long.valueOf(ChunkPos.asLong(par1, par2)));
    }
}
 
開發者ID:abused,項目名稱:World-Border,代碼行數:18,代碼來源:ChunkUtil.java

示例2: updateTimeAndWeatherForPlayer

import net.minecraft.world.WorldServer; //導入方法依賴的package包/類
/**
 * Updates the time and weather for the given player to those of the given world
 */
public void updateTimeAndWeatherForPlayer(EntityPlayerMP playerIn, WorldServer worldIn)
{
    WorldBorder worldborder = this.mcServer.worldServers[0].getWorldBorder();
    playerIn.connection.sendPacket(new SPacketWorldBorder(worldborder, SPacketWorldBorder.Action.INITIALIZE));
    playerIn.connection.sendPacket(new SPacketTimeUpdate(worldIn.getTotalWorldTime(), worldIn.getWorldTime(), worldIn.getGameRules().getBoolean("doDaylightCycle")));
    BlockPos blockpos = worldIn.getSpawnPoint();
    playerIn.connection.sendPacket(new SPacketSpawnPosition(blockpos));

    if (worldIn.isRaining())
    {
        playerIn.connection.sendPacket(new SPacketChangeGameState(1, 0.0F));
        playerIn.connection.sendPacket(new SPacketChangeGameState(7, worldIn.getRainStrength(1.0F)));
        playerIn.connection.sendPacket(new SPacketChangeGameState(8, worldIn.getThunderStrength(1.0F)));
    }
}
 
開發者ID:sudofox,項目名稱:Backmemed,代碼行數:19,代碼來源:PlayerList.java

示例3: EntityPlayerMP

import net.minecraft.world.WorldServer; //導入方法依賴的package包/類
public EntityPlayerMP(MinecraftServer server, WorldServer worldIn, GameProfile profile, ItemInWorldManager interactionManager)
{
    super(worldIn, profile);
    interactionManager.thisPlayerMP = this;
    this.theItemInWorldManager = interactionManager;
    BlockPos blockpos = worldIn.getSpawnPoint();

    if (!worldIn.provider.getHasNoSky() && worldIn.getWorldInfo().getGameType() != WorldSettings.GameType.ADVENTURE)
    {
        int i = Math.max(5, server.getSpawnProtectionSize() - 6);
        int j = MathHelper.floor_double(worldIn.getWorldBorder().getClosestDistance((double)blockpos.getX(), (double)blockpos.getZ()));

        if (j < i)
        {
            i = j;
        }

        if (j <= 1)
        {
            i = 1;
        }

        blockpos = worldIn.getTopSolidOrLiquidBlock(blockpos.add(this.rand.nextInt(i * 2) - i, 0, this.rand.nextInt(i * 2) - i));
    }

    this.mcServer = server;
    this.statsFile = server.getConfigurationManager().getPlayerStatsFile(this);
    this.stepHeight = 0.0F;
    this.moveToBlockPosAndAngles(blockpos, 0.0F, 0.0F);

    while (!worldIn.getCollidingBoundingBoxes(this, this.getEntityBoundingBox()).isEmpty() && this.posY < 255.0D)
    {
        this.setPosition(this.posX, this.posY + 1.0D, this.posZ);
    }
}
 
開發者ID:Notoh,項目名稱:DecompiledMinecraft,代碼行數:36,代碼來源:EntityPlayerMP.java

示例4: initialWorldChunkLoad

import net.minecraft.world.WorldServer; //導入方法依賴的package包/類
protected void initialWorldChunkLoad()
{
    int i = 16;
    int j = 4;
    int k = 192;
    int l = 625;
    int i1 = 0;
    this.setUserMessage("menu.generatingTerrain");
    int j1 = 0;
    logger.info("Preparing start region for level " + j1);
    WorldServer worldserver = this.worldServers[j1];
    BlockPos blockpos = worldserver.getSpawnPoint();
    long k1 = getCurrentTimeMillis();

    for (int l1 = -192; l1 <= 192 && this.isServerRunning(); l1 += 16)
    {
        for (int i2 = -192; i2 <= 192 && this.isServerRunning(); i2 += 16)
        {
            long j2 = getCurrentTimeMillis();

            if (j2 - k1 > 1000L)
            {
                this.outputPercentRemaining("Preparing spawn area", i1 * 100 / 625);
                k1 = j2;
            }

            ++i1;
            worldserver.theChunkProviderServer.loadChunk(blockpos.getX() + l1 >> 4, blockpos.getZ() + i2 >> 4);
        }
    }

    this.clearCurrentTask();
}
 
開發者ID:Notoh,項目名稱:DecompiledMinecraft,代碼行數:34,代碼來源:MinecraftServer.java

示例5: initialWorldChunkLoad

import net.minecraft.world.WorldServer; //導入方法依賴的package包/類
public void initialWorldChunkLoad()
{
    int i = 16;
    int j = 4;
    int k = 192;
    int l = 625;
    int i1 = 0;
    this.setUserMessage("menu.generatingTerrain");
    int j1 = 0;
    LOG.info("Preparing start region for level 0");
    WorldServer worldserver = net.minecraftforge.common.DimensionManager.getWorld(j1);
    BlockPos blockpos = worldserver.getSpawnPoint();
    long k1 = getCurrentTimeMillis();

    for (int l1 = -192; l1 <= 192 && this.isServerRunning(); l1 += 16)
    {
        for (int i2 = -192; i2 <= 192 && this.isServerRunning(); i2 += 16)
        {
            long j2 = getCurrentTimeMillis();

            if (j2 - k1 > 1000L)
            {
                this.outputPercentRemaining("Preparing spawn area", i1 * 100 / 625);
                k1 = j2;
            }

            ++i1;
            worldserver.getChunkProvider().provideChunk(blockpos.getX() + l1 >> 4, blockpos.getZ() + i2 >> 4);
        }
    }

    this.clearCurrentTask();
}
 
開發者ID:F1r3w477,項目名稱:CustomWorldGen,代碼行數:34,代碼來源:MinecraftServer.java

示例6: EntityPlayerMP

import net.minecraft.world.WorldServer; //導入方法依賴的package包/類
public EntityPlayerMP(MinecraftServer server, WorldServer worldIn, GameProfile profile, PlayerInteractionManager interactionManagerIn)
{
    super(worldIn, profile);
    interactionManagerIn.thisPlayerMP = this;
    this.interactionManager = interactionManagerIn;
    BlockPos blockpos = worldIn.getSpawnPoint();

    if (worldIn.provider.func_191066_m() && worldIn.getWorldInfo().getGameType() != GameType.ADVENTURE)
    {
        int i = Math.max(0, server.getSpawnRadius(worldIn));
        int j = MathHelper.floor(worldIn.getWorldBorder().getClosestDistance((double)blockpos.getX(), (double)blockpos.getZ()));

        if (j < i)
        {
            i = j;
        }

        if (j <= 1)
        {
            i = 1;
        }

        blockpos = worldIn.getTopSolidOrLiquidBlock(blockpos.add(this.rand.nextInt(i * 2 + 1) - i, 0, this.rand.nextInt(i * 2 + 1) - i));
    }

    this.mcServer = server;
    this.statsFile = server.getPlayerList().getPlayerStatsFile(this);
    this.stepHeight = 0.0F;
    this.moveToBlockPosAndAngles(blockpos, 0.0F, 0.0F);

    while (!worldIn.getCollisionBoxes(this, this.getEntityBoundingBox()).isEmpty() && this.posY < 255.0D)
    {
        this.setPosition(this.posX, this.posY + 1.0D, this.posZ);
    }
}
 
開發者ID:NSExceptional,項目名稱:Zombe-Modpack,代碼行數:36,代碼來源:EntityPlayerMP.java

示例7: Location

import net.minecraft.world.WorldServer; //導入方法依賴的package包/類
/** Creates a location from a world's spawn point */
public Location(WorldServer world)
{
    BlockPos spawn = world.getSpawnPoint();

    this.world = world;
    this.posX  = spawn.getX();
    this.posY  = spawn.getY();
    this.posZ  = spawn.getZ();
    this.pitch = 0;
    this.yaw   = 0;
}
 
開發者ID:abused,項目名稱:World-Border,代碼行數:13,代碼來源:Location.java

示例8: transferPlayerToWorld

import net.minecraft.world.WorldServer; //導入方法依賴的package包/類
private static void transferPlayerToWorld(Entity entityIn, int lastDimension, WorldServer oldWorldIn, WorldServer toWorldIn, BlockPos pos, IBlockState state)
{
    net.minecraft.world.WorldProvider pOld = oldWorldIn.provider;
    net.minecraft.world.WorldProvider pNew = toWorldIn.provider;
    double moveFactor = pOld.getMovementFactor() / pNew.getMovementFactor();
    double d0 = entityIn.posX * moveFactor;
    double d1 = entityIn.posZ * moveFactor;
    double d2 = 8.0D;
    float f = entityIn.rotationYaw;
    oldWorldIn.profiler.startSection("moving");

    if (entityIn.dimension == 1)
    {
        BlockPos blockpos;

        if (lastDimension == 1)
        {
            blockpos = toWorldIn.getSpawnPoint();
        }
        else
        {
            blockpos = toWorldIn.getSpawnCoordinate();
        }

        d0 = (double)blockpos.getX();
        entityIn.posY = (double)blockpos.getY();
        d1 = (double)blockpos.getZ();
        entityIn.setLocationAndAngles(d0, entityIn.posY, d1, 90.0F, 0.0F);

        if (entityIn.isEntityAlive())
        {
            oldWorldIn.updateEntityWithOptionalForce(entityIn, false);
        }
    }

    oldWorldIn.profiler.endSection();

    if (lastDimension != 1)
    {
        oldWorldIn.profiler.startSection("placing");

        if (entityIn.isEntityAlive())
        {
        	int y = toWorldIn.getTopSolidOrLiquidBlock(pos).getY();
        	BlockPos p = new BlockPos(pos.getX(), y, pos.getZ());
            entityIn.setLocationAndAngles(p.getX(), p.getY(), p.getZ(), entityIn.rotationYaw, entityIn.rotationPitch);
            if(state != null && toWorldIn.getBlockState(p.add(0, -1, 0)).getBlock() != state.getBlock())
            	toWorldIn.setBlockState(p.add(0, -1, 0), state, 3);
            toWorldIn.spawnEntity(entityIn);
            toWorldIn.updateEntityWithOptionalForce(entityIn, false);
        }

        oldWorldIn.profiler.endSection();
    }
    entityIn.setWorld(toWorldIn);
}
 
開發者ID:kenijey,項目名稱:harshencastle,代碼行數:57,代碼來源:HarshenUtils.java

示例9: init

import net.minecraft.world.WorldServer; //導入方法依賴的package包/類
public void init()
{
    startTime = 0;
    if (chunksToGen != null) return;

    WorldServer world = DimensionManager.getWorld(dimension);
    if (diameterX > 0 && totalChunks == 0) // only the first time
    {
        ChunkCoordinates pos = world.getSpawnPoint();
        minX = (pos.posX << 4) - (diameterX / 2);
        maxX = (pos.posX << 4) + (diameterX / 2);

        minZ = (pos.posZ << 4) - (diameterZ / 2);
        maxZ = (pos.posZ << 4) + (diameterZ / 2);
        storedCurX = minX;
        storedCurZ = minZ;
    }

    chunksDone = 0;
    totalChunks = 0;
    chunkLoadCount = world.getChunkProvider().getLoadedChunkCount();

    ArrayList<Pair<Integer, Integer>> chunks = new ArrayList<Pair<Integer, Integer>>();

    for (int curX = minX; curX <= maxX; curX++)
    {
        if (curX < storedCurX)
            continue;
        ;
        for (int curZ = minZ; curZ <= maxZ; curZ++)
        {
            if (curX == storedCurX && curZ <= storedCurZ)
                continue;

            chunks.add(new Pair<Integer, Integer>(curX, curZ));
            totalChunks++;
        }
    }

    chunksToGen = chunks;

    curChunksPerTick = chunksPerTick;

}
 
開發者ID:CreeperHost,項目名稱:CreeperHostGui,代碼行數:45,代碼來源:PregenTask.java

示例10: init

import net.minecraft.world.WorldServer; //導入方法依賴的package包/類
public void init()
{
    startTime = 0;
    if (chunksToGen != null) return;

    WorldServer world = DimensionManager.getWorld(dimension);
    if (diameterX > 0 && totalChunks == 0) // only the first time
    {
        BlockPos pos = world.getSpawnPoint();
        minX = (pos.getX() << 4) - (diameterX / 2);
        maxX = (pos.getX() << 4) + (diameterX / 2);

        minZ = (pos.getZ() << 4) - (diameterZ / 2);
        maxZ = (pos.getZ() << 4) + (diameterZ / 2);
        storedCurX = minX;
        storedCurZ = minZ;
    }

    chunksDone = 0;
    totalChunks = 0;
    chunkLoadCount = world.getChunkProvider().getLoadedChunkCount();

    ArrayList<Pair<Integer, Integer>> chunks = new ArrayList<Pair<Integer, Integer>>();

    for (int curX = minX; curX <= maxX; curX++)
    {
        if (curX < storedCurX)
            continue;
        ;
        for (int curZ = minZ; curZ <= maxZ; curZ++)
        {
            if (curX == storedCurX && curZ <= storedCurZ)
                continue;

            chunks.add(new Pair<Integer, Integer>(curX, curZ));
            totalChunks++;
        }
    }

    chunksToGen = chunks;

    curChunksPerTick = chunksPerTick;

}
 
開發者ID:CreeperHost,項目名稱:CreeperHostGui,代碼行數:45,代碼來源:PregenTask.java

示例11: transferEntityToWorld

import net.minecraft.world.WorldServer; //導入方法依賴的package包/類
/**
 * Transfers an entity from a world to another world.
 */
public void transferEntityToWorld(Entity entityIn, int p_82448_2_, WorldServer p_82448_3_, WorldServer p_82448_4_)
{
    double d0 = entityIn.posX;
    double d1 = entityIn.posZ;
    double d2 = 8.0D;
    float f = entityIn.rotationYaw;
    p_82448_3_.theProfiler.startSection("moving");

    if (entityIn.dimension == -1)
    {
        d0 = MathHelper.clamp_double(d0 / d2, p_82448_4_.getWorldBorder().minX() + 16.0D, p_82448_4_.getWorldBorder().maxX() - 16.0D);
        d1 = MathHelper.clamp_double(d1 / d2, p_82448_4_.getWorldBorder().minZ() + 16.0D, p_82448_4_.getWorldBorder().maxZ() - 16.0D);
        entityIn.setLocationAndAngles(d0, entityIn.posY, d1, entityIn.rotationYaw, entityIn.rotationPitch);

        if (entityIn.isEntityAlive())
        {
            p_82448_3_.updateEntityWithOptionalForce(entityIn, false);
        }
    }
    else if (entityIn.dimension == 0)
    {
        d0 = MathHelper.clamp_double(d0 * d2, p_82448_4_.getWorldBorder().minX() + 16.0D, p_82448_4_.getWorldBorder().maxX() - 16.0D);
        d1 = MathHelper.clamp_double(d1 * d2, p_82448_4_.getWorldBorder().minZ() + 16.0D, p_82448_4_.getWorldBorder().maxZ() - 16.0D);
        entityIn.setLocationAndAngles(d0, entityIn.posY, d1, entityIn.rotationYaw, entityIn.rotationPitch);

        if (entityIn.isEntityAlive())
        {
            p_82448_3_.updateEntityWithOptionalForce(entityIn, false);
        }
    }
    else
    {
        BlockPos blockpos;

        if (p_82448_2_ == 1)
        {
            blockpos = p_82448_4_.getSpawnPoint();
        }
        else
        {
            blockpos = p_82448_4_.getSpawnCoordinate();
        }

        d0 = (double)blockpos.getX();
        entityIn.posY = (double)blockpos.getY();
        d1 = (double)blockpos.getZ();
        entityIn.setLocationAndAngles(d0, entityIn.posY, d1, 90.0F, 0.0F);

        if (entityIn.isEntityAlive())
        {
            p_82448_3_.updateEntityWithOptionalForce(entityIn, false);
        }
    }

    p_82448_3_.theProfiler.endSection();

    if (p_82448_2_ != 1)
    {
        p_82448_3_.theProfiler.startSection("placing");
        d0 = (double)MathHelper.clamp_int((int)d0, -29999872, 29999872);
        d1 = (double)MathHelper.clamp_int((int)d1, -29999872, 29999872);

        if (entityIn.isEntityAlive())
        {
            entityIn.setLocationAndAngles(d0, entityIn.posY, d1, entityIn.rotationYaw, entityIn.rotationPitch);
            p_82448_4_.getDefaultTeleporter().placeInPortal(entityIn, f);
            p_82448_4_.spawnEntityInWorld(entityIn);
            p_82448_4_.updateEntityWithOptionalForce(entityIn, false);
        }

        p_82448_3_.theProfiler.endSection();
    }

    entityIn.setWorld(p_82448_4_);
}
 
開發者ID:Notoh,項目名稱:DecompiledMinecraft,代碼行數:79,代碼來源:ServerConfigurationManager.java

示例12: transferEntityToWorld

import net.minecraft.world.WorldServer; //導入方法依賴的package包/類
private static void transferEntityToWorld(Entity entityIn, int lastDimension, WorldServer oldWorldIn, WorldServer toWorldIn, net.minecraft.world.Teleporter teleporter, int targetHeight)
 {
     net.minecraft.world.WorldProvider pOld = oldWorldIn.provider;
     net.minecraft.world.WorldProvider pNew = toWorldIn.provider;

     double moveFactor = pOld.getMovementFactor() / pNew.getMovementFactor();

     // What does this do?
     double newPosX = entityIn.posX * moveFactor;
     double newPosZ = entityIn.posZ * moveFactor;
     //double d2 = 8.0D;

     float entityRotationYaw = entityIn.rotationYaw;	// What is this being saved for?

     oldWorldIn.theProfiler.startSection("moving");

     // Overworld, where we're going
     if (entityIn.dimension == 1)
     {
         BlockPos blockpos;

         if (lastDimension == 1)
         {
             blockpos = toWorldIn.getSpawnPoint();	// From the End to the End?
         }
         else
         {
             blockpos = toWorldIn.getSpawnCoordinate();	// From Wherever to the End
         }

newPosX = blockpos.getX();
entityIn.posY = blockpos.getY();
newPosZ = blockpos.getZ();

entityIn.setLocationAndAngles(newPosX, entityIn.posY, newPosZ, 90.0F, 0.0F);

         if (entityIn.isEntityAlive())
         {
             oldWorldIn.updateEntityWithOptionalForce(entityIn, false);
         }
     }

     oldWorldIn.theProfiler.endSection();

     // ...anything else? Did not come from the overworld
     if (lastDimension != 1)
     {
         oldWorldIn.theProfiler.startSection("placing");
         newPosX = MathHelper.clamp_int((int)newPosX, -29999872, 29999872);
         newPosZ = MathHelper.clamp_int((int)newPosZ, -29999872, 29999872);

         if (entityIn.isEntityAlive())
         {
             entityIn.setLocationAndAngles(newPosX, targetHeight, newPosZ, entityIn.rotationYaw, entityIn.rotationPitch);

             //teleporter.placeInPortal(entityIn, entityRotationYaw);	// Found it. Begone with ye.

             toWorldIn.spawnEntityInWorld(entityIn);
             toWorldIn.updateEntityWithOptionalForce(entityIn, false);
         }

         oldWorldIn.theProfiler.endSection();
     }

     entityIn.setWorld(toWorldIn);
 }
 
開發者ID:Domochevsky,項目名稱:minecraft-territorialdealings,代碼行數:67,代碼來源:Transition.java

示例13: transferEntityToWorld

import net.minecraft.world.WorldServer; //導入方法依賴的package包/類
/**
 * Transfers an entity from a world to another world.
 */
public void transferEntityToWorld(Entity entityIn, int lastDimension, WorldServer oldWorldIn, WorldServer toWorldIn)
{
    double d0 = entityIn.posX;
    double d1 = entityIn.posZ;
    double d2 = 8.0D;
    float f = entityIn.rotationYaw;
    oldWorldIn.theProfiler.startSection("moving");

    if (entityIn.dimension == -1)
    {
        d0 = MathHelper.clamp(d0 / 8.0D, toWorldIn.getWorldBorder().minX() + 16.0D, toWorldIn.getWorldBorder().maxX() - 16.0D);
        d1 = MathHelper.clamp(d1 / 8.0D, toWorldIn.getWorldBorder().minZ() + 16.0D, toWorldIn.getWorldBorder().maxZ() - 16.0D);
        entityIn.setLocationAndAngles(d0, entityIn.posY, d1, entityIn.rotationYaw, entityIn.rotationPitch);

        if (entityIn.isEntityAlive())
        {
            oldWorldIn.updateEntityWithOptionalForce(entityIn, false);
        }
    }
    else if (entityIn.dimension == 0)
    {
        d0 = MathHelper.clamp(d0 * 8.0D, toWorldIn.getWorldBorder().minX() + 16.0D, toWorldIn.getWorldBorder().maxX() - 16.0D);
        d1 = MathHelper.clamp(d1 * 8.0D, toWorldIn.getWorldBorder().minZ() + 16.0D, toWorldIn.getWorldBorder().maxZ() - 16.0D);
        entityIn.setLocationAndAngles(d0, entityIn.posY, d1, entityIn.rotationYaw, entityIn.rotationPitch);

        if (entityIn.isEntityAlive())
        {
            oldWorldIn.updateEntityWithOptionalForce(entityIn, false);
        }
    }
    else
    {
        BlockPos blockpos;

        if (lastDimension == 1)
        {
            blockpos = toWorldIn.getSpawnPoint();
        }
        else
        {
            blockpos = toWorldIn.getSpawnCoordinate();
        }

        d0 = (double)blockpos.getX();
        entityIn.posY = (double)blockpos.getY();
        d1 = (double)blockpos.getZ();
        entityIn.setLocationAndAngles(d0, entityIn.posY, d1, 90.0F, 0.0F);

        if (entityIn.isEntityAlive())
        {
            oldWorldIn.updateEntityWithOptionalForce(entityIn, false);
        }
    }

    oldWorldIn.theProfiler.endSection();

    if (lastDimension != 1)
    {
        oldWorldIn.theProfiler.startSection("placing");
        d0 = (double)MathHelper.clamp((int)d0, -29999872, 29999872);
        d1 = (double)MathHelper.clamp((int)d1, -29999872, 29999872);

        if (entityIn.isEntityAlive())
        {
            entityIn.setLocationAndAngles(d0, entityIn.posY, d1, entityIn.rotationYaw, entityIn.rotationPitch);
            toWorldIn.getDefaultTeleporter().placeInPortal(entityIn, f);
            toWorldIn.spawnEntityInWorld(entityIn);
            toWorldIn.updateEntityWithOptionalForce(entityIn, false);
        }

        oldWorldIn.theProfiler.endSection();
    }

    entityIn.setWorld(toWorldIn);
}
 
開發者ID:sudofox,項目名稱:Backmemed,代碼行數:79,代碼來源:PlayerList.java


注:本文中的net.minecraft.world.WorldServer.getSpawnPoint方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。