the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 130 lines 4.4 kB view raw
1#include "stdafx.h" 2#include "ServerLevelListener.h" 3#include "EntityTracker.h" 4#include "MinecraftServer.h" 5#include "ServerLevel.h" 6#include "ServerPlayer.h" 7#include "PlayerList.h" 8#include "PlayerChunkMap.h" 9#include "PlayerConnection.h" 10#include "..\Minecraft.World\net.minecraft.world.level.dimension.h" 11#include "..\Minecraft.World\net.minecraft.network.packet.h" 12#include "..\Minecraft.World\LevelData.h" 13 14 15ServerLevelListener::ServerLevelListener(MinecraftServer *server, ServerLevel *level) 16{ 17 this->server = server; 18 this->level = level; 19} 20 21// 4J removed - 22/* 23void ServerLevelListener::addParticle(const wstring& name, double x, double y, double z, double xa, double ya, double za) 24{ 25} 26*/ 27 28void ServerLevelListener::addParticle(ePARTICLE_TYPE name, double x, double y, double z, double xa, double ya, double za) 29{ 30} 31 32void ServerLevelListener::allChanged() 33{ 34} 35 36void ServerLevelListener::entityAdded(shared_ptr<Entity> entity) 37{ 38 MemSect(10); 39 level->getTracker()->addEntity(entity); 40 MemSect(0); 41} 42 43void ServerLevelListener::entityRemoved(shared_ptr<Entity> entity) 44{ 45 level->getTracker()->removeEntity(entity); 46} 47 48// 4J added 49void ServerLevelListener::playerRemoved(shared_ptr<Entity> entity) 50{ 51 shared_ptr<ServerPlayer> player = dynamic_pointer_cast<ServerPlayer>(entity); 52 player->getLevel()->getTracker()->removePlayer(entity); 53} 54 55void ServerLevelListener::playSound(int iSound, double x, double y, double z, float volume, float pitch, float fClipSoundDist) 56{ 57 if(iSound < 0) 58 { 59 app.DebugPrintf("ServerLevelListener received request for sound less than 0, so ignoring\n"); 60 } 61 else 62 { 63 // 4J-PB - I don't want to broadcast player sounds to my local machine, since we're already playing these in the LevelRenderer::playSound. 64 // The PC version does seem to do this and the result is I can stop walking , and then I'll hear my footstep sound with a delay 65 server->getPlayers()->broadcast(x, y, z, volume > 1 ? 16 * volume : 16, level->dimension->id, shared_ptr<LevelSoundPacket>(new LevelSoundPacket(iSound, x, y, z, volume, pitch))); 66 } 67} 68 69void ServerLevelListener::playSoundExceptPlayer(shared_ptr<Player> player, int iSound, double x, double y, double z, float volume, float pitch, float fSoundClipDist) 70{ 71 if(iSound < 0) 72 { 73 app.DebugPrintf("ServerLevelListener received request for sound less than 0, so ignoring\n"); 74 } 75 else 76 { 77 // 4J-PB - I don't want to broadcast player sounds to my local machine, since we're already playing these in the LevelRenderer::playSound. 78 // The PC version does seem to do this and the result is I can stop walking , and then I'll hear my footstep sound with a delay 79 server->getPlayers()->broadcast(player,x, y, z, volume > 1 ? 16 * volume : 16, level->dimension->id, shared_ptr<LevelSoundPacket>(new LevelSoundPacket(iSound, x, y, z, volume, pitch))); 80 } 81} 82 83void ServerLevelListener::setTilesDirty(int x0, int y0, int z0, int x1, int y1, int z1, Level *level) 84{ 85} 86 87void ServerLevelListener::skyColorChanged() 88{ 89} 90 91void ServerLevelListener::tileChanged(int x, int y, int z) 92{ 93 level->getChunkMap()->tileChanged(x, y, z); 94} 95 96void ServerLevelListener::tileLightChanged(int x, int y, int z) 97{ 98} 99 100void ServerLevelListener::playStreamingMusic(const wstring& name, int x, int y, int z) 101{ 102} 103 104void ServerLevelListener::levelEvent(shared_ptr<Player> source, int type, int x, int y, int z, int data) 105{ 106 server->getPlayers()->broadcast(source, x, y, z, 64, level->dimension->id, shared_ptr<LevelEventPacket>( new LevelEventPacket(type, x, y, z, data, false) ) ); 107} 108 109void ServerLevelListener::globalLevelEvent(int type, int sourceX, int sourceY, int sourceZ, int data) 110{ 111 server->getPlayers()->broadcastAll( shared_ptr<LevelEventPacket>( new LevelEventPacket(type, sourceX, sourceY, sourceZ, data, true)) ); 112} 113 114void ServerLevelListener::destroyTileProgress(int id, int x, int y, int z, int progress) 115{ 116 //for (ServerPlayer p : server->getPlayers()->players) 117 for(AUTO_VAR(it, server->getPlayers()->players.begin()); it != server->getPlayers()->players.end(); ++it) 118 { 119 shared_ptr<ServerPlayer> p = *it; 120 if (p == NULL || p->level != level || p->entityId == id) continue; 121 double xd = (double) x - p->x; 122 double yd = (double) y - p->y; 123 double zd = (double) z - p->z; 124 125 if (xd * xd + yd * yd + zd * zd < 32 * 32) 126 { 127 p->connection->send(shared_ptr<TileDestructionPacket>(new TileDestructionPacket(id, x, y, z, progress))); 128 } 129 } 130}