the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
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}