Java 类net.minecraft.world.chunk.Chunk 实例源码

项目:CustomWorldGen    文件:ChunkProviderClient.java   
/**
 * Unloads chunks that are marked to be unloaded. This is not guaranteed to unload every such chunk.
 */
public boolean unloadQueuedChunks()
{
    long i = System.currentTimeMillis();

    for (Chunk chunk : this.chunkMapping.values())
    {
        chunk.onTick(System.currentTimeMillis() - i > 5L);
    }

    if (System.currentTimeMillis() - i > 100L)
    {
        LOGGER.info("Warning: Clientside chunk ticking took {} ms", new Object[] {Long.valueOf(System.currentTimeMillis() - i)});
    }

    return false;
}
项目:DecompiledMinecraft    文件:World.java   
/**
 * Finds the highest block on the x and z coordinate that is solid or liquid, and returns its y coord.
 */
public BlockPos getTopSolidOrLiquidBlock(BlockPos pos)
{
    Chunk chunk = this.getChunkFromBlockCoords(pos);
    BlockPos blockpos;
    BlockPos blockpos1;

    for (blockpos = new BlockPos(pos.getX(), chunk.getTopFilledSegment() + 16, pos.getZ()); blockpos.getY() >= 0; blockpos = blockpos1)
    {
        blockpos1 = blockpos.down();
        Material material = chunk.getBlock(blockpos1).getMaterial();

        if (material.blocksMovement() && material != Material.leaves)
        {
            break;
        }
    }

    return blockpos;
}
项目:CustomWorldGen    文件:World.java   
/**
 * Checks if a block's material is opaque, and that it takes up a full cube
 */
public boolean isBlockNormalCube(BlockPos pos, boolean _default)
{
    if (this.isOutsideBuildHeight(pos))
    {
        return false;
    }
    else
    {
        Chunk chunk = this.chunkProvider.getLoadedChunk(pos.getX() >> 4, pos.getZ() >> 4);

        if (chunk != null && !chunk.isEmpty())
        {
            IBlockState iblockstate = this.getBlockState(pos);
            return iblockstate.getBlock().isNormalCube(iblockstate, this, pos);
        }
        else
        {
            return _default;
        }
    }
}
项目:DecompiledMinecraft    文件:S26PacketMapChunkBulk.java   
public S26PacketMapChunkBulk(List<Chunk> chunks)
{
    int i = chunks.size();
    this.xPositions = new int[i];
    this.zPositions = new int[i];
    this.chunksData = new S21PacketChunkData.Extracted[i];
    this.isOverworld = !((Chunk)chunks.get(0)).getWorld().provider.getHasNoSky();

    for (int j = 0; j < i; ++j)
    {
        Chunk chunk = (Chunk)chunks.get(j);
        S21PacketChunkData.Extracted s21packetchunkdata$extracted = S21PacketChunkData.func_179756_a(chunk, true, this.isOverworld, 65535);
        this.xPositions[j] = chunk.xPosition;
        this.zPositions[j] = chunk.zPosition;
        this.chunksData[j] = s21packetchunkdata$extracted;
    }
}
项目:minecraft-hue    文件:EventListener.java   
@SubscribeEvent
public void onLivingUpdate(LivingEvent.LivingUpdateEvent event) {
    if (!(event.getEntity() instanceof EntityPlayer)) {
        return;
    }
    EntityPlayer player = (EntityPlayer) event.getEntity();
    if (player.isDead) {
        this.hueManager.adjustColor(new Color(255, 0, 0));
        return;
    }
    BlockPos pos = player.getPosition();
    Chunk chunk = this.world.getChunkFromBlockCoords(pos);
    Biome biome = chunk.getBiome(pos, this.world.getBiomeProvider());
    String color = this.biomeMap.get(biome.getRegistryName().getResourcePath());
    if (color != null) {
        this.hueManager.adjustColor(color);
    }
}
项目:Backmemed    文件:ChunkProviderHell.java   
public Chunk provideChunk(int x, int z)
{
    this.rand.setSeed((long)x * 341873128712L + (long)z * 132897987541L);
    ChunkPrimer chunkprimer = new ChunkPrimer();
    this.prepareHeights(x, z, chunkprimer);
    this.buildSurfaces(x, z, chunkprimer);
    this.genNetherCaves.generate(this.world, x, z, chunkprimer);

    if (this.generateStructures)
    {
        this.genNetherBridge.generate(this.world, x, z, chunkprimer);
    }

    Chunk chunk = new Chunk(this.world, chunkprimer, x, z);
    Biome[] abiome = this.world.getBiomeProvider().getBiomes((Biome[])null, x * 16, z * 16, 16, 16);
    byte[] abyte = chunk.getBiomeArray();

    for (int i = 0; i < abyte.length; ++i)
    {
        abyte[i] = (byte)Biome.getIdForBiome(abiome[i]);
    }

    chunk.resetRelightChecks();
    return chunk;
}
项目:BaseClient    文件:World.java   
/**
 * Gets the lowest height of the chunk where sunlight directly reaches
 */
public int getChunksLowestHorizon(int x, int z)
{
    if (x >= -30000000 && z >= -30000000 && x < 30000000 && z < 30000000)
    {
        if (!this.isChunkLoaded(x >> 4, z >> 4, true))
        {
            return 0;
        }
        else
        {
            Chunk chunk = this.getChunkFromChunkCoords(x >> 4, z >> 4);
            return chunk.getLowestHeight();
        }
    }
    else
    {
        return this.func_181545_F() + 1;
    }
}
项目:DecompiledMinecraft    文件:AnvilChunkLoader.java   
public void saveChunk(World worldIn, Chunk chunkIn) throws MinecraftException, IOException
{
    worldIn.checkSessionLock();

    try
    {
        NBTTagCompound nbttagcompound = new NBTTagCompound();
        NBTTagCompound nbttagcompound1 = new NBTTagCompound();
        nbttagcompound.setTag("Level", nbttagcompound1);
        this.writeChunkToNBT(chunkIn, worldIn, nbttagcompound1);
        this.addChunkToPending(chunkIn.getChunkCoordIntPair(), nbttagcompound);
    }
    catch (Exception exception)
    {
        logger.error((String)"Failed to save chunk", (Throwable)exception);
    }
}
项目:BaseClient    文件:AnvilChunkLoader.java   
public void saveChunk(World worldIn, Chunk chunkIn) throws MinecraftException, IOException
{
    worldIn.checkSessionLock();

    try
    {
        NBTTagCompound nbttagcompound = new NBTTagCompound();
        NBTTagCompound nbttagcompound1 = new NBTTagCompound();
        nbttagcompound.setTag("Level", nbttagcompound1);
        this.writeChunkToNBT(chunkIn, worldIn, nbttagcompound1);
        this.addChunkToPending(chunkIn.getChunkCoordIntPair(), nbttagcompound);
    }
    catch (Exception exception)
    {
        logger.error((String)"Failed to save chunk", (Throwable)exception);
    }
}
项目:CustomWorldGen    文件:ChunkProviderEnd.java   
public Chunk provideChunk(int x, int z)
{
    this.chunkX = x; this.chunkZ = z;
    this.rand.setSeed((long)x * 341873128712L + (long)z * 132897987541L);
    ChunkPrimer chunkprimer = new ChunkPrimer();
    this.biomesForGeneration = this.worldObj.getBiomeProvider().getBiomes(this.biomesForGeneration, x * 16, z * 16, 16, 16);
    this.setBlocksInChunk(x, z, chunkprimer);
    this.buildSurfaces(chunkprimer);

    if (this.mapFeaturesEnabled)
    {
        this.endCityGen.generate(this.worldObj, x, z, chunkprimer);
    }

    Chunk chunk = new Chunk(this.worldObj, chunkprimer, x, z);
    byte[] abyte = chunk.getBiomeArray();

    for (int i = 0; i < abyte.length; ++i)
    {
        abyte[i] = (byte)Biome.getIdForBiome(this.biomesForGeneration[i]);
    }

    chunk.generateSkylightMap();
    return chunk;
}
项目:Backmemed    文件:ChunkCache.java   
public IBlockState getBlockState(BlockPos pos)
{
    if (pos.getY() >= 0 && pos.getY() < 256)
    {
        int i = (pos.getX() >> 4) - this.chunkX;
        int j = (pos.getZ() >> 4) - this.chunkZ;

        if (i >= 0 && i < this.chunkArray.length && j >= 0 && j < this.chunkArray[i].length)
        {
            Chunk chunk = this.chunkArray[i][j];

            if (chunk != null)
            {
                return chunk.getBlockState(pos);
            }
        }
    }

    return Blocks.AIR.getDefaultState();
}
项目:DecompiledMinecraft    文件:ChunkProviderEnd.java   
/**
 * Will return back a chunk, if it doesn't exist and its not a MP client it will generates all the blocks for the
 * specified chunk from the map seed and chunk seed
 */
public Chunk provideChunk(int x, int z)
{
    this.endRNG.setSeed((long)x * 341873128712L + (long)z * 132897987541L);
    ChunkPrimer chunkprimer = new ChunkPrimer();
    this.biomesForGeneration = this.endWorld.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, x * 16, z * 16, 16, 16);
    this.func_180520_a(x, z, chunkprimer);
    this.func_180519_a(chunkprimer);
    Chunk chunk = new Chunk(this.endWorld, chunkprimer, x, z);
    byte[] abyte = chunk.getBiomeArray();

    for (int i = 0; i < abyte.length; ++i)
    {
        abyte[i] = (byte)this.biomesForGeneration[i].biomeID;
    }

    chunk.generateSkylightMap();
    return chunk;
}
项目:Backmemed    文件:SPacketChunkData.java   
public SPacketChunkData(Chunk p_i47124_1_, int p_i47124_2_)
{
    this.chunkX = p_i47124_1_.xPosition;
    this.chunkZ = p_i47124_1_.zPosition;
    this.loadChunk = p_i47124_2_ == 65535;
    boolean flag = p_i47124_1_.getWorld().provider.func_191066_m();
    this.buffer = new byte[this.calculateChunkSize(p_i47124_1_, flag, p_i47124_2_)];
    this.availableSections = this.extractChunkData(new PacketBuffer(this.getWriteBuffer()), p_i47124_1_, flag, p_i47124_2_);
    this.tileEntityTags = Lists.<NBTTagCompound>newArrayList();

    for (Entry<BlockPos, TileEntity> entry : p_i47124_1_.getTileEntityMap().entrySet())
    {
        BlockPos blockpos = (BlockPos)entry.getKey();
        TileEntity tileentity = (TileEntity)entry.getValue();
        int i = blockpos.getY() >> 4;

        if (this.doChunkLoad() || (p_i47124_2_ & 1 << i) != 0)
        {
            NBTTagCompound nbttagcompound = tileentity.getUpdateTag();
            this.tileEntityTags.add(nbttagcompound);
        }
    }
}
项目:BaseClient    文件:S26PacketMapChunkBulk.java   
public S26PacketMapChunkBulk(List<Chunk> chunks)
{
    int i = chunks.size();
    this.xPositions = new int[i];
    this.zPositions = new int[i];
    this.chunksData = new S21PacketChunkData.Extracted[i];
    this.isOverworld = !((Chunk)chunks.get(0)).getWorld().provider.getHasNoSky();

    for (int j = 0; j < i; ++j)
    {
        Chunk chunk = (Chunk)chunks.get(j);
        S21PacketChunkData.Extracted s21packetchunkdata$extracted = S21PacketChunkData.func_179756_a(chunk, true, this.isOverworld, 65535);
        this.xPositions[j] = chunk.xPosition;
        this.zPositions[j] = chunk.zPosition;
        this.chunksData[j] = s21packetchunkdata$extracted;
    }
}
项目:minecraft-territorialdealings    文件:EventListener.java   
@SubscribeEvent
public void onRightClickBlock(RightClickBlock event)
{
    if (event.getWorld().isRemote) { return; }      // Not doing this on client side
    if (!Main.shouldCheckInteraction()) { return; } // Not my business

    Main.console("Block at x" + event.getPos().getX() + " y" + event.getPos().getY() + " z" + event.getPos().getZ() + " touched by player " + event.getEntityPlayer().getName() + 
            " (ID " + event.getEntityPlayer().getGameProfile().getId() + ").");

    Chunk chunk = event.getEntityPlayer().worldObj.getChunkFromBlockCoords(event.getPos());

    if (TerritoryHandler.canPlayerEditChunk(event.getEntityPlayer().worldObj, event.getEntityPlayer(), chunk))  // Checks out
    {
        Main.console("Player is allowed to interact with this chunk. Doing nothing.");
    }
    else
    {
        Main.console("Player is not allowed to interact with this chunk. Cancelling.");
        event.setCanceled(true);    // Not having it
    }
}
项目:CustomWorldGen    文件:SPacketChunkData.java   
public int extractChunkData(PacketBuffer p_189555_1_, Chunk p_189555_2_, boolean p_189555_3_, int p_189555_4_)
{
    int i = 0;
    ExtendedBlockStorage[] aextendedblockstorage = p_189555_2_.getBlockStorageArray();
    int j = 0;

    for (int k = aextendedblockstorage.length; j < k; ++j)
    {
        ExtendedBlockStorage extendedblockstorage = aextendedblockstorage[j];

        if (extendedblockstorage != Chunk.NULL_BLOCK_STORAGE && (!this.doChunkLoad() || !extendedblockstorage.isEmpty()) && (p_189555_4_ & 1 << j) != 0)
        {
            i |= 1 << j;
            extendedblockstorage.getData().write(p_189555_1_);
            p_189555_1_.writeBytes(extendedblockstorage.getBlocklightArray().getData());

            if (p_189555_3_)
            {
                p_189555_1_.writeBytes(extendedblockstorage.getSkylightArray().getData());
            }
        }
    }

    if (this.doChunkLoad())
    {
        p_189555_1_.writeBytes(p_189555_2_.getBiomeArray());
    }

    return i;
}
项目:StructPro    文件:UWorld.java   
/**
 * Notify all nearby players about chunk changes
 * @param chunk Chunk to notify
 */
public void notifyChunk(Chunk chunk) {
    for (EntityPlayer player : world.playerEntities) {
        if (player instanceof EntityPlayerMP) {
            EntityPlayerMP playerMP = (EntityPlayerMP) player;
            if (    Math.abs(playerMP.chunkCoordX - chunk.xPosition) <= 32 &&
                    Math.abs(playerMP.chunkCoordZ - chunk.zPosition) <= 32) {
                playerMP.connection.sendPacket(new SPacketChunkData(chunk, 65535));
            }
        }
    }
}
项目:StructPro    文件:UWorld.java   
/**
 * Notify all nearby players about chunk changes
 * @param chunk Chunk to notify
 */
public void notifyChunk(Chunk chunk) {
    for (EntityPlayer player : world.playerEntities) {
        if (player instanceof EntityPlayerMP) {
            EntityPlayerMP playerMP = (EntityPlayerMP) player;
            if (    Math.abs(playerMP.chunkCoordX - chunk.x) <= 32 &&
                    Math.abs(playerMP.chunkCoordZ - chunk.z) <= 32) {
                playerMP.connection.sendPacket(new SPacketChunkData(chunk, 65535));
            }
        }
    }
}
项目:DecompiledMinecraft    文件:ChunkProviderServer.java   
/**
 * marks all chunks for unload, ignoring those near the spawn
 */
public void unloadAllChunks()
{
    for (Chunk chunk : this.loadedChunks)
    {
        this.dropChunk(chunk.xPosition, chunk.zPosition);
    }
}
项目:DecompiledMinecraft    文件:AnvilChunkLoader.java   
/**
 * Wraps readChunkFromNBT. Checks the coordinates and several NBT tags.
 */
protected Chunk checkedReadChunkFromNBT(World worldIn, int x, int z, NBTTagCompound p_75822_4_)
{
    if (!p_75822_4_.hasKey("Level", 10))
    {
        logger.error("Chunk file at " + x + "," + z + " is missing level data, skipping");
        return null;
    }
    else
    {
        NBTTagCompound nbttagcompound = p_75822_4_.getCompoundTag("Level");

        if (!nbttagcompound.hasKey("Sections", 9))
        {
            logger.error("Chunk file at " + x + "," + z + " is missing block data, skipping");
            return null;
        }
        else
        {
            Chunk chunk = this.readChunkFromNBT(worldIn, nbttagcompound);

            if (!chunk.isAtLocation(x, z))
            {
                logger.error("Chunk file at " + x + "," + z + " is in the wrong location; relocating. (Expected " + x + ", " + z + ", got " + chunk.xPosition + ", " + chunk.zPosition + ")");
                nbttagcompound.setInteger("xPos", x);
                nbttagcompound.setInteger("zPos", z);
                chunk = this.readChunkFromNBT(worldIn, nbttagcompound);
            }

            return chunk;
        }
    }
}
项目:BaseClient    文件:S21PacketChunkData.java   
public S21PacketChunkData(Chunk chunkIn, boolean p_i45196_2_, int p_i45196_3_)
{
    this.chunkX = chunkIn.xPosition;
    this.chunkZ = chunkIn.zPosition;
    this.field_149279_g = p_i45196_2_;
    this.extractedData = func_179756_a(chunkIn, p_i45196_2_, !chunkIn.getWorld().provider.getHasNoSky(), p_i45196_3_);
}
项目:pnc-repressurized    文件:SemiBlockManager.java   
private void syncWithPlayers(World world) {
    List<EntityPlayer> players = world.playerEntities;
    for (Map.Entry<Chunk, Set<EntityPlayer>> entry : syncList.entrySet()) {
        Chunk chunk = entry.getKey();
        Set<EntityPlayer> syncedPlayers = entry.getValue();
        int chunkX = chunk.x * 16 - 8;
        int chunkZ = chunk.z * 16 - 8;
        for (EntityPlayer player : players) {
            if (chunk.getWorld() == world) {
                double dist = PneumaticCraftUtils.distBetween(player.posX, 0, player.posZ, chunkX, 0, chunkZ);
                if (dist < SYNC_DISTANCE) {
                    if (syncedPlayers.add(player)) {
                        for(List<ISemiBlock> semiBlocks : semiBlocks.get(chunk).values()){
                            for (ISemiBlock semiBlock : semiBlocks) {
                                if (!semiBlock.isInvalid()) {
                                    NetworkHandler.sendTo(new PacketAddSemiBlock(semiBlock), (EntityPlayerMP) player);
                                    PacketDescription descPacket = semiBlock.getDescriptionPacket();
                                    if (descPacket != null) NetworkHandler.sendTo(descPacket, (EntityPlayerMP) player);
                                }
                            }
                        }
                    }
                } else if (dist > SYNC_DISTANCE + 5) {
                    syncedPlayers.remove(player);
                }
            } else {
                syncedPlayers.remove(player);
            }
        }
    }
}
项目:UniversalRemote    文件:WorldProviderProxyClient.java   
@Override
public boolean canDoLightning(Chunk chunk) {
    if(m_realProvider != null) {
        return m_realProvider.canDoLightning(chunk);
    } else {
        return super.canDoLightning(chunk);
    }
}
项目:Zombe-Modpack    文件:NetHandlerPlayClient.java   
/**
 * Updates the specified chunk with the supplied data, marks it for re-rendering and lighting recalculation
 */
public void handleChunkData(SPacketChunkData packetIn)
{
    PacketThreadUtil.checkThreadAndEnqueue(packetIn, this, this.gameController);

    if (packetIn.doChunkLoad())
    {
        this.clientWorldController.doPreChunk(packetIn.getChunkX(), packetIn.getChunkZ(), true);
    }

    this.clientWorldController.invalidateBlockReceiveRegion(packetIn.getChunkX() << 4, 0, packetIn.getChunkZ() << 4, (packetIn.getChunkX() << 4) + 15, 256, (packetIn.getChunkZ() << 4) + 15);
    Chunk chunk = this.clientWorldController.getChunkFromChunkCoords(packetIn.getChunkX(), packetIn.getChunkZ());
    chunk.fillChunk(packetIn.getReadBuffer(), packetIn.getExtractedSize(), packetIn.doChunkLoad());
    this.clientWorldController.markBlockRangeForRenderUpdate(packetIn.getChunkX() << 4, 0, packetIn.getChunkZ() << 4, (packetIn.getChunkX() << 4) + 15, 256, (packetIn.getChunkZ() << 4) + 15);

    if (!packetIn.doChunkLoad() || !(this.clientWorldController.provider instanceof WorldProviderSurface))
    {
        chunk.resetRelightChecks();
    }

    for (NBTTagCompound nbttagcompound : packetIn.getTileEntityTags())
    {
        BlockPos blockpos = new BlockPos(nbttagcompound.getInteger("x"), nbttagcompound.getInteger("y"), nbttagcompound.getInteger("z"));
        TileEntity tileentity = this.clientWorldController.getTileEntity(blockpos);

        if (tileentity != null)
        {
            tileentity.readFromNBT(nbttagcompound);
        }
    }
}
项目:DecompiledMinecraft    文件:BlockBeacon.java   
public static void updateColorAsync(final World worldIn, final BlockPos glassPos)
{
    HttpUtil.field_180193_a.submit(new Runnable()
    {
        public void run()
        {
            Chunk chunk = worldIn.getChunkFromBlockCoords(glassPos);

            for (int i = glassPos.getY() - 1; i >= 0; --i)
            {
                final BlockPos blockpos = new BlockPos(glassPos.getX(), i, glassPos.getZ());

                if (!chunk.canSeeSky(blockpos))
                {
                    break;
                }

                IBlockState iblockstate = worldIn.getBlockState(blockpos);

                if (iblockstate.getBlock() == Blocks.beacon)
                {
                    ((WorldServer)worldIn).addScheduledTask(new Runnable()
                    {
                        public void run()
                        {
                            TileEntity tileentity = worldIn.getTileEntity(blockpos);

                            if (tileentity instanceof TileEntityBeacon)
                            {
                                ((TileEntityBeacon)tileentity).updateBeacon();
                                worldIn.addBlockEvent(blockpos, Blocks.beacon, 1, 0);
                            }
                        }
                    });
                }
            }
        }
    });
}
项目:StructPro    文件:UWorld.java   
/**
 * Get block storage array for y-coordinate
 * Returns null in case block is outside
 * @param chunk Target chunk
 * @param y Block height inside chunk
 * @return Block storage or null
 */
private static ExtendedBlockStorage getStorage(Chunk chunk, int y) {
    ExtendedBlockStorage[] storage = chunk.getBlockStorageArray();
    if (y < 0 || y >= 256) {
        return null;
    }
    int i = y >> 4;
    if (storage[i] == Chunk.NULL_BLOCK_STORAGE) {
        storage[i] = new ExtendedBlockStorage(i << 4, chunk.getWorld().provider.hasSkyLight());
        chunk.generateSkylightMap();
    }
    return storage[i];
}
项目:HardVox    文件:OpBlockUpdates.java   
@Override
public int performOperation(Region region, PositionIterator chunk, World world, Chunk c, VectorMap<BlockData> blockMap,
        MutableVectorMap<IBlockState> hitMap) {
    return chunk.forEachRemaining((x, y, z) -> {
        if (!Operation.isHit(x, y, z, hitMap)) {
            return 0;
        }

        BlockPos pos = new BlockPos(x, y, z);

        IBlockState state = c.getBlockState(pos);
        world.markAndNotifyBlock(pos, c, state, state, 1);
        return 1;
    });
}
项目:DecompiledMinecraft    文件:ChunkProviderServer.java   
/**
 * Unloads chunks that are marked to be unloaded. This is not guaranteed to unload every such chunk.
 */
public boolean unloadQueuedChunks()
{
    if (!this.worldObj.disableLevelSaving)
    {
        for (int i = 0; i < 100; ++i)
        {
            if (!this.droppedChunksSet.isEmpty())
            {
                Long olong = (Long)this.droppedChunksSet.iterator().next();
                Chunk chunk = (Chunk)this.id2ChunkMap.getValueByKey(olong.longValue());

                if (chunk != null)
                {
                    chunk.onChunkUnload();
                    this.saveChunkData(chunk);
                    this.saveChunkExtraData(chunk);
                    this.id2ChunkMap.remove(olong.longValue());
                    this.loadedChunks.remove(chunk);
                }

                this.droppedChunksSet.remove(olong);
            }
        }

        if (this.chunkLoader != null)
        {
            this.chunkLoader.chunkTick();
        }
    }

    return this.serverChunkGenerator.unloadQueuedChunks();
}
项目:BaseClient    文件:PlayerManager.java   
public void removePlayer(EntityPlayerMP player)
{
    if (this.playersWatchingChunk.contains(player))
    {
        Chunk chunk = PlayerManager.this.theWorldServer.getChunkFromChunkCoords(this.chunkCoords.chunkXPos, this.chunkCoords.chunkZPos);

        if (chunk.isPopulated())
        {
            player.playerNetServerHandler.sendPacket(new S21PacketChunkData(chunk, true, 0));
        }

        this.playersWatchingChunk.remove(player);
        player.loadedChunks.remove(this.chunkCoords);

        if (this.playersWatchingChunk.isEmpty())
        {
            long i = (long)this.chunkCoords.chunkXPos + 2147483647L | (long)this.chunkCoords.chunkZPos + 2147483647L << 32;
            this.increaseInhabitedTime(chunk);
            PlayerManager.this.playerInstances.remove(i);
            PlayerManager.this.playerInstanceList.remove(this);

            if (this.numBlocksToUpdate > 0)
            {
                PlayerManager.this.playerInstancesToUpdate.remove(this);
            }

            PlayerManager.this.getWorldServer().theChunkProviderServer.dropChunk(this.chunkCoords.chunkXPos, this.chunkCoords.chunkZPos);
        }
    }
}
项目:BaseClient    文件:WorldServer.java   
/**
 * Saves all chunks to disk while updating progress bar.
 */
public void saveAllChunks(boolean p_73044_1_, IProgressUpdate progressCallback) throws MinecraftException
{
    if (this.chunkProvider.canSave())
    {
        if (progressCallback != null)
        {
            progressCallback.displaySavingString("Saving level");
        }

        this.saveLevel();

        if (progressCallback != null)
        {
            progressCallback.displayLoadingString("Saving chunks");
        }

        this.chunkProvider.saveChunks(p_73044_1_, progressCallback);

        for (Chunk chunk : Lists.newArrayList(this.theChunkProviderServer.func_152380_a()))
        {
            if (chunk != null && !this.thePlayerManager.hasPlayerInstance(chunk.xPosition, chunk.zPosition))
            {
                this.theChunkProviderServer.dropChunk(chunk.xPosition, chunk.zPosition);
            }
        }
    }
}
项目:BaseClient    文件:ChunkProviderClient.java   
/**
 * Unload chunk from ChunkProviderClient's hashmap. Called in response to a Packet50PreChunk with its mode field set
 * to false
 */
public void unloadChunk(int p_73234_1_, int p_73234_2_)
{
    Chunk chunk = this.provideChunk(p_73234_1_, p_73234_2_);

    if (!chunk.isEmpty())
    {
        chunk.onChunkUnload();
    }

    this.chunkMapping.remove(ChunkCoordIntPair.chunkXZ2Int(p_73234_1_, p_73234_2_));
    this.chunkListing.remove(chunk);
}
项目:BaseClient    文件:ChunkProviderDebug.java   
/**
 * Will return back a chunk, if it doesn't exist and its not a MP client it will generates all the blocks for the
 * specified chunk from the map seed and chunk seed
 */
public Chunk provideChunk(int x, int z)
{
    ChunkPrimer chunkprimer = new ChunkPrimer();

    for (int i = 0; i < 16; ++i)
    {
        for (int j = 0; j < 16; ++j)
        {
            int k = x * 16 + i;
            int l = z * 16 + j;
            chunkprimer.setBlockState(i, 60, j, Blocks.barrier.getDefaultState());
            IBlockState iblockstate = func_177461_b(k, l);

            if (iblockstate != null)
            {
                chunkprimer.setBlockState(i, 70, j, iblockstate);
            }
        }
    }

    Chunk chunk = new Chunk(this.world, chunkprimer, x, z);
    chunk.generateSkylightMap();
    BiomeGenBase[] abiomegenbase = this.world.getWorldChunkManager().loadBlockGeneratorData((BiomeGenBase[])null, x * 16, z * 16, 16, 16);
    byte[] abyte = chunk.getBiomeArray();

    for (int i1 = 0; i1 < abyte.length; ++i1)
    {
        abyte[i1] = (byte)abiomegenbase[i1].biomeID;
    }

    chunk.generateSkylightMap();
    return chunk;
}
项目:Backmemed    文件:ChunkProviderServer.java   
public boolean saveChunks(boolean p_186027_1_)
{
    int i = 0;
    List<Chunk> list = Lists.newArrayList(this.id2ChunkMap.values());

    for (int j = 0; j < ((List)list).size(); ++j)
    {
        Chunk chunk = (Chunk)list.get(j);

        if (p_186027_1_)
        {
            this.saveChunkExtraData(chunk);
        }

        if (chunk.needsSaving(p_186027_1_))
        {
            this.saveChunkData(chunk);
            chunk.setModified(false);
            ++i;

            if (i == 24 && !p_186027_1_)
            {
                return false;
            }
        }
    }

    return true;
}
项目:CustomWorldGen    文件:SPacketChunkData.java   
protected int calculateChunkSize(Chunk chunkIn, boolean p_189556_2_, int p_189556_3_)
{
    int i = 0;
    ExtendedBlockStorage[] aextendedblockstorage = chunkIn.getBlockStorageArray();
    int j = 0;

    for (int k = aextendedblockstorage.length; j < k; ++j)
    {
        ExtendedBlockStorage extendedblockstorage = aextendedblockstorage[j];

        if (extendedblockstorage != Chunk.NULL_BLOCK_STORAGE && (!this.doChunkLoad() || !extendedblockstorage.isEmpty()) && (p_189556_3_ & 1 << j) != 0)
        {
            i = i + extendedblockstorage.getData().getSerializedSize();
            i = i + extendedblockstorage.getBlocklightArray().getData().length;

            if (p_189556_2_)
            {
                i += extendedblockstorage.getSkylightArray().getData().length;
            }
        }
    }

    if (this.doChunkLoad())
    {
        i += chunkIn.getBiomeArray().length;
    }

    return i;
}
项目:Backmemed    文件:EntitySlime.java   
/**
 * Checks if the entity's current position is a valid location to spawn this entity.
 */
public boolean getCanSpawnHere()
{
    BlockPos blockpos = new BlockPos(MathHelper.floor(this.posX), 0, MathHelper.floor(this.posZ));
    Chunk chunk = this.world.getChunkFromBlockCoords(blockpos);

    if (this.world.getWorldInfo().getTerrainType() == WorldType.FLAT && this.rand.nextInt(4) != 1)
    {
        return false;
    }
    else
    {
        if (this.world.getDifficulty() != EnumDifficulty.PEACEFUL)
        {
            Biome biome = this.world.getBiome(blockpos);

            if (biome == Biomes.SWAMPLAND && this.posY > 50.0D && this.posY < 70.0D && this.rand.nextFloat() < 0.5F && this.rand.nextFloat() < this.world.getCurrentMoonPhaseFactor() && this.world.getLightFromNeighbors(new BlockPos(this)) <= this.rand.nextInt(8))
            {
                return super.getCanSpawnHere();
            }

            if (this.rand.nextInt(10) == 0 && chunk.getRandomWithSeed(987234911L).nextInt(10) == 0 && this.posY < 40.0D)
            {
                return super.getCanSpawnHere();
            }
        }

        return false;
    }
}
项目:DecompiledMinecraft    文件:World.java   
protected void playMoodSoundAndCheckLight(int p_147467_1_, int p_147467_2_, Chunk chunkIn)
{
    this.theProfiler.endStartSection("moodSound");

    if (this.ambientTickCountdown == 0 && !this.isRemote)
    {
        this.updateLCG = this.updateLCG * 3 + 1013904223;
        int i = this.updateLCG >> 2;
        int j = i & 15;
        int k = i >> 8 & 15;
        int l = i >> 16 & 255;
        BlockPos blockpos = new BlockPos(j, l, k);
        Block block = chunkIn.getBlock(blockpos);
        j = j + p_147467_1_;
        k = k + p_147467_2_;

        if (block.getMaterial() == Material.air && this.getLight(blockpos) <= this.rand.nextInt(8) && this.getLightFor(EnumSkyBlock.SKY, blockpos) <= 0)
        {
            EntityPlayer entityplayer = this.getClosestPlayer((double)j + 0.5D, (double)l + 0.5D, (double)k + 0.5D, 8.0D);

            if (entityplayer != null && entityplayer.getDistanceSq((double)j + 0.5D, (double)l + 0.5D, (double)k + 0.5D) > 4.0D)
            {
                this.playSoundEffect((double)j + 0.5D, (double)l + 0.5D, (double)k + 0.5D, "ambient.cave.cave", 0.7F, 0.8F + this.rand.nextFloat() * 0.2F);
                this.ambientTickCountdown = this.rand.nextInt(12000) + 6000;
            }
        }
    }

    this.theProfiler.endStartSection("checkLight");
    chunkIn.enqueueRelightChecks();
}
项目:Backmemed    文件:ChunkProviderServer.java   
private void saveChunkExtraData(Chunk chunkIn)
{
    try
    {
        this.chunkLoader.saveExtraChunkData(this.worldObj, chunkIn);
    }
    catch (Exception exception)
    {
        LOGGER.error((String)"Couldn\'t save entities", (Throwable)exception);
    }
}
项目:DecompiledMinecraft    文件:ChunkProviderServer.java   
public boolean func_177460_a(IChunkProvider p_177460_1_, Chunk p_177460_2_, int p_177460_3_, int p_177460_4_)
{
    if (this.serverChunkGenerator != null && this.serverChunkGenerator.func_177460_a(p_177460_1_, p_177460_2_, p_177460_3_, p_177460_4_))
    {
        Chunk chunk = this.provideChunk(p_177460_3_, p_177460_4_);
        chunk.setChunkModified();
        return true;
    }
    else
    {
        return false;
    }
}
项目:UniversalRemote    文件:WorldProviderProxyServer.java   
@Override
public boolean canDoLightning(Chunk chunk) {
    if (m_proxyProvider != null && Util.isPrefixInCallStack(m_modPrefix)) {
        return m_proxyProvider.canDoLightning(chunk);
    } else if (m_realProvider != null) {
        return m_realProvider.canDoLightning(chunk);
    } else {
        return super.canDoLightning(chunk);
    }
}
项目:Backmemed    文件:ChunkProviderDebug.java   
public Chunk provideChunk(int x, int z)
{
    ChunkPrimer chunkprimer = new ChunkPrimer();

    for (int i = 0; i < 16; ++i)
    {
        for (int j = 0; j < 16; ++j)
        {
            int k = x * 16 + i;
            int l = z * 16 + j;
            chunkprimer.setBlockState(i, 60, j, BARRIER);
            IBlockState iblockstate = getBlockStateFor(k, l);

            if (iblockstate != null)
            {
                chunkprimer.setBlockState(i, 70, j, iblockstate);
            }
        }
    }

    Chunk chunk = new Chunk(this.world, chunkprimer, x, z);
    chunk.generateSkylightMap();
    Biome[] abiome = this.world.getBiomeProvider().getBiomes((Biome[])null, x * 16, z * 16, 16, 16);
    byte[] abyte = chunk.getBiomeArray();

    for (int i1 = 0; i1 < abyte.length; ++i1)
    {
        abyte[i1] = (byte)Biome.getIdForBiome(abiome[i1]);
    }

    chunk.generateSkylightMap();
    return chunk;
}