001    package net.minecraft.src;
002    
003    import java.util.Iterator;
004    import net.minecraft.server.MinecraftServer;
005    
006    public class WorldManager implements IWorldAccess
007    {
008        /** Reference to the MinecraftServer object. */
009        private MinecraftServer mcServer;
010    
011        /** The world itself. */
012        private WorldServer world;
013    
014        public WorldManager(MinecraftServer par1MinecraftServer, WorldServer par2WorldServer)
015        {
016            this.mcServer = par1MinecraftServer;
017            this.world = par2WorldServer;
018        }
019    
020        /**
021         * Spawns a particle. Arg: particleType, x, y, z, velX, velY, velZ
022         */
023        public void spawnParticle(String par1Str, double par2, double par4, double par6, double par8, double par10, double par12) {}
024    
025        /**
026         * Start the skin for this entity downloading, if necessary, and increment its reference counter
027         */
028        public void obtainEntitySkin(Entity par1Entity)
029        {
030            this.world.getEntityTracker().addEntityToTracker(par1Entity);
031        }
032    
033        /**
034         * Decrement the reference counter for this entity's skin image data
035         */
036        public void releaseEntitySkin(Entity par1Entity)
037        {
038            this.world.getEntityTracker().removeEntityFromAllTrackingPlayers(par1Entity);
039        }
040    
041        /**
042         * Plays the specified sound. Arg: soundName, x, y, z, volume, pitch
043         */
044        public void playSound(String par1Str, double par2, double par4, double par6, float par8, float par9)
045        {
046            this.mcServer.getConfigurationManager().sendToAllNear(par2, par4, par6, par8 > 1.0F ? (double)(16.0F * par8) : 16.0D, this.world.provider.worldType, new Packet62LevelSound(par1Str, par2, par4, par6, par8, par9));
047        }
048    
049        /**
050         * Called across all registered IWorldAccess instances when a block range is invalidated. Args: minX, minY, minZ,
051         * maxX, maxY, maxZ
052         */
053        public void markBlockRangeNeedsUpdate(int par1, int par2, int par3, int par4, int par5, int par6) {}
054    
055        /**
056         * Will mark the block and neighbors that their renderers need an update (could be all the same renderer
057         * potentially) Args: x, y, z
058         */
059        public void markBlockNeedsUpdate(int par1, int par2, int par3)
060        {
061            this.world.getPlayerManager().flagChunkForUpdate(par1, par2, par3);
062        }
063    
064        /**
065         * As of mc 1.2.3 this method has exactly the same signature and does exactly the same as markBlockNeedsUpdate
066         */
067        public void markBlockNeedsUpdate2(int par1, int par2, int par3) {}
068    
069        /**
070         * Plays the specified record. Arg: recordName, x, y, z
071         */
072        public void playRecord(String par1Str, int par2, int par3, int par4) {}
073    
074        /**
075         * Plays a pre-canned sound effect along with potentially auxiliary data-driven one-shot behaviour (particles, etc).
076         */
077        public void playAuxSFX(EntityPlayer par1EntityPlayer, int par2, int par3, int par4, int par5, int par6)
078        {
079            this.mcServer.getConfigurationManager().sendToAllNearExcept(par1EntityPlayer, (double)par3, (double)par4, (double)par5, 64.0D, this.world.provider.worldType, new Packet61DoorChange(par2, par3, par4, par5, par6));
080        }
081    
082        /**
083         * Starts (or continues) destroying a block with given ID at the given coordinates for the given partially destroyed
084         * value
085         */
086        public void destroyBlockPartially(int par1, int par2, int par3, int par4, int par5)
087        {
088            Iterator var6 = this.mcServer.getConfigurationManager().playerEntityList.iterator();
089    
090            while (var6.hasNext())
091            {
092                EntityPlayerMP var7 = (EntityPlayerMP)var6.next();
093    
094                if (var7 != null && var7.worldObj == this.world && var7.entityId != par1)
095                {
096                    double var8 = (double)par2 - var7.posX;
097                    double var10 = (double)par3 - var7.posY;
098                    double var12 = (double)par4 - var7.posZ;
099    
100                    if (var8 * var8 + var10 * var10 + var12 * var12 < 1024.0D)
101                    {
102                        var7.serverForThisPlayer.sendPacketToPlayer(new Packet55BlockDestroy(par1, par2, par3, par4, par5));
103                    }
104                }
105            }
106        }
107    }