Skip to content

Commit b60a1ce

Browse files
committed
fix: fix ServerAPI
1 parent 10aca08 commit b60a1ce

File tree

1 file changed

+33
-10
lines changed

1 file changed

+33
-10
lines changed

src/legacy/api/ServerAPI.cpp

Lines changed: 33 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,10 @@
44
#include "api/McAPI.h"
55
#include "ll/api/service/Bedrock.h"
66
#include "ll/api/utils/RandomUtils.h"
7+
#include "mc/common/IMinecraftApp.h"
8+
#include "mc/common/SharedConstants.h"
79
#include "mc/network/ServerNetworkHandler.h"
810
#include "mc/network/packet/SetTimePacket.h"
9-
#include "mc/world/level/Tick.h"
1011
#include "mc/world/level/storage/LevelData.h"
1112

1213
#include <cstdint>
@@ -29,9 +30,32 @@ Local<Value> McClass::setMaxNumPlayers(const Arguments& args) {
2930
CHECK_ARG_TYPE(args[0], ValueKind::kNumber)
3031

3132
try {
32-
int back = ll::service::getServerNetworkHandler()->setMaxNumPlayers(args[0].asNumber().toInt32());
33-
ll::service::getServerNetworkHandler()->updateServerAnnouncement();
34-
return Boolean::newBoolean(back == 0 ? true : false);
33+
int maxPlayers = args[0].asNumber().toInt32();
34+
auto handler = ll::service::getServerNetworkHandler();
35+
int activePlayerCount = handler->_getActiveAndInProgressPlayerCount(mce::UUID::EMPTY());
36+
bool result = true;
37+
38+
if (maxPlayers <= SharedConstants::NetworkDefaultMaxConnections()) {
39+
if (maxPlayers < activePlayerCount) {
40+
maxPlayers = activePlayerCount;
41+
result = false;
42+
}
43+
} else {
44+
maxPlayers = SharedConstants::NetworkDefaultMaxConnections();
45+
result = false;
46+
}
47+
48+
int previousMaxPlayers = handler->mMaxNumPlayers;
49+
handler->mMaxNumPlayers = maxPlayers;
50+
51+
if (previousMaxPlayers != maxPlayers) {
52+
handler->updateServerAnnouncement();
53+
handler->mApp.onNetworkMaxPlayersChanged(handler->mMaxNumPlayers);
54+
}
55+
56+
handler->updateServerAnnouncement();
57+
58+
return Boolean::newBoolean(result);
3559
}
3660
CATCH("Fail in setMaxPlayers!")
3761
}
@@ -47,13 +71,10 @@ Local<Value> McClass::getTime(const Arguments& args) {
4771
switch (option) {
4872
case 0:
4973
return Number::newNumber(ll::service::getLevel()->getTime() % 24000);
50-
break;
5174
case 1:
5275
return Number::newNumber(static_cast<int64_t>(ll::service::getLevel()->getCurrentTick().tickID));
53-
break;
5476
case 2:
5577
return Number::newNumber(ll::service::getLevel()->getTime() / 24000);
56-
break;
5778
default:
5879
throw script::Exception("The range of this argument is between 0 and 2");
5980
}
@@ -74,16 +95,18 @@ Local<Value> McClass::setTime(const Arguments& args) {
7495
else if (targetTime < currentTimeOfDay) newTime = currentTime + targetTime + 24000 - currentTimeOfDay;
7596

7697
ll::service::getLevel()->setTime(newTime);
77-
SetTimePacket(newTime).sendToClients();
98+
SetTimePacket packet;
99+
packet.mTime = newTime;
100+
packet.sendToClients();
78101
}
79102
CATCH("Fail in setTime!")
80103

81104
return Boolean::newBoolean(true);
82105
}
83106

84107
Local<Value> McClass::getWeather(const Arguments&) { // weather: 0: Clear, 1: Rain, 2: Thunder
85-
if (ll::service::getLevel()->getLevelData().isLightning()) return Number::newNumber(2);
86-
else if (ll::service::getLevel()->getLevelData().isRaining()) return Number::newNumber(1);
108+
if (ll::service::getLevel()->getLevelData().mLightningLevel > 0.0f) return Number::newNumber(2);
109+
else if (ll::service::getLevel()->getLevelData().mRainLevel > 0.0f) return Number::newNumber(1);
87110

88111
return Number::newNumber(0);
89112
}

0 commit comments

Comments
 (0)