001 package net.minecraft.world; 002 003 import java.util.Iterator; 004 import net.minecraft.entity.Entity; 005 import net.minecraft.entity.player.EntityPlayer; 006 import net.minecraft.entity.player.EntityPlayerMP; 007 import net.minecraft.network.packet.Packet55BlockDestroy; 008 import net.minecraft.network.packet.Packet61DoorChange; 009 import net.minecraft.network.packet.Packet62LevelSound; 010 import net.minecraft.server.MinecraftServer; 011 012 public class WorldManager implements IWorldAccess 013 { 014 /** Reference to the MinecraftServer object. */ 015 private MinecraftServer mcServer; 016 017 /** The WorldServer object. */ 018 private WorldServer theWorldServer; 019 020 public WorldManager(MinecraftServer par1MinecraftServer, WorldServer par2WorldServer) 021 { 022 this.mcServer = par1MinecraftServer; 023 this.theWorldServer = par2WorldServer; 024 } 025 026 /** 027 * Spawns a particle. Arg: particleType, x, y, z, velX, velY, velZ 028 */ 029 public void spawnParticle(String par1Str, double par2, double par4, double par6, double par8, double par10, double par12) {} 030 031 /** 032 * Start the skin for this entity downloading, if necessary, and increment its reference counter 033 */ 034 public void obtainEntitySkin(Entity par1Entity) 035 { 036 this.theWorldServer.getEntityTracker().addEntityToTracker(par1Entity); 037 } 038 039 /** 040 * Decrement the reference counter for this entity's skin image data 041 */ 042 public void releaseEntitySkin(Entity par1Entity) 043 { 044 this.theWorldServer.getEntityTracker().removeEntityFromAllTrackingPlayers(par1Entity); 045 } 046 047 /** 048 * Plays the specified sound. Arg: soundName, x, y, z, volume, pitch 049 */ 050 public void playSound(String par1Str, double par2, double par4, double par6, float par8, float par9) 051 { 052 this.mcServer.getConfigurationManager().sendToAllNear(par2, par4, par6, par8 > 1.0F ? (double)(16.0F * par8) : 16.0D, this.theWorldServer.provider.dimensionId, new Packet62LevelSound(par1Str, par2, par4, par6, par8, par9)); 053 } 054 055 /** 056 * Plays sound to all near players except the player reference given 057 */ 058 public void playSoundToNearExcept(EntityPlayer par1EntityPlayer, String par2Str, double par3, double par5, double par7, float par9, float par10) 059 { 060 this.mcServer.getConfigurationManager().sendToAllNearExcept(par1EntityPlayer, par3, par5, par7, par9 > 1.0F ? (double)(16.0F * par9) : 16.0D, this.theWorldServer.provider.dimensionId, new Packet62LevelSound(par2Str, par3, par5, par7, par9, par10)); 061 } 062 063 /** 064 * On the client, re-renders all blocks in this range, inclusive. On the server, does nothing. Args: min x, min y, 065 * min z, max x, max y, max z 066 */ 067 public void markBlockRangeForRenderUpdate(int par1, int par2, int par3, int par4, int par5, int par6) {} 068 069 /** 070 * On the client, re-renders the block. On the server, sends the block to the client (which will re-render it), 071 * including the tile entity description packet if applicable. Args: x, y, z 072 */ 073 public void markBlockForUpdate(int par1, int par2, int par3) 074 { 075 this.theWorldServer.getPlayerManager().flagChunkForUpdate(par1, par2, par3); 076 } 077 078 /** 079 * On the client, re-renders this block. On the server, does nothing. Used for lighting updates. 080 */ 081 public void markBlockForRenderUpdate(int par1, int par2, int par3) {} 082 083 /** 084 * Plays the specified record. Arg: recordName, x, y, z 085 */ 086 public void playRecord(String par1Str, int par2, int par3, int par4) {} 087 088 /** 089 * Plays a pre-canned sound effect along with potentially auxiliary data-driven one-shot behaviour (particles, etc). 090 */ 091 public void playAuxSFX(EntityPlayer par1EntityPlayer, int par2, int par3, int par4, int par5, int par6) 092 { 093 this.mcServer.getConfigurationManager().sendToAllNearExcept(par1EntityPlayer, (double)par3, (double)par4, (double)par5, 64.0D, this.theWorldServer.provider.dimensionId, new Packet61DoorChange(par2, par3, par4, par5, par6, false)); 094 } 095 096 public void broadcastSound(int par1, int par2, int par3, int par4, int par5) 097 { 098 this.mcServer.getConfigurationManager().sendPacketToAllPlayers(new Packet61DoorChange(par1, par2, par3, par4, par5, true)); 099 } 100 101 /** 102 * Starts (or continues) destroying a block with given ID at the given coordinates for the given partially destroyed 103 * value 104 */ 105 public void destroyBlockPartially(int par1, int par2, int par3, int par4, int par5) 106 { 107 Iterator var6 = this.mcServer.getConfigurationManager().playerEntityList.iterator(); 108 109 while (var6.hasNext()) 110 { 111 EntityPlayerMP var7 = (EntityPlayerMP)var6.next(); 112 113 if (var7 != null && var7.worldObj == this.theWorldServer && var7.entityId != par1) 114 { 115 double var8 = (double)par2 - var7.posX; 116 double var10 = (double)par3 - var7.posY; 117 double var12 = (double)par4 - var7.posZ; 118 119 if (var8 * var8 + var10 * var10 + var12 * var12 < 1024.0D) 120 { 121 var7.playerNetServerHandler.sendPacketToPlayer(new Packet55BlockDestroy(par1, par2, par3, par4, par5)); 122 } 123 } 124 } 125 } 126 }