Skip to content

Commit 2d185ff

Browse files
committed
feat: adapt to 1.20.61(WIP)
1 parent b115bc4 commit 2d185ff

File tree

8 files changed

+226
-119
lines changed

8 files changed

+226
-119
lines changed

src/more_dimensions/api/dimension/CustomDimensionManager.cpp

Lines changed: 32 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22
#include "CustomDimensionManager.h"
33

44
#include "more_dimensions/MoreDimenison.h"
5+
#include "more_dimensions/core/dimension/CustomDimensionConfig.h"
6+
#include "more_dimensions/core/dimension/FakeDimensionId.h"
7+
#include "more_dimensions/core/dimension/VanillaDimensionId2.h"
58

69
#include "snappy.h"
710

@@ -12,15 +15,14 @@
1215
#include "ll/api/utils/StringUtils.h"
1316

1417
#include "mc/deps/core/math/Vec3.h"
18+
#include "mc/server/DedicatedServer.h"
1519
#include "mc/server/PropertiesSettings.h"
1620
#include "mc/util/BidirectionalUnorderedMap.h"
1721
#include "mc/world/actor/player/Player.h"
1822
#include "mc/world/level/Level.h"
1923
#include "mc/world/level/dimension/Dimension.h"
2024
#include "mc/world/level/dimension/VanillaDimensions.h"
2125
#include "mc/world/level/storage/LevelStorage.h"
22-
#include "more_dimensions/core/dimension/CustomDimensionConfig.h"
23-
#include "more_dimensions/core/dimension/FakeDimensionId.h"
2426

2527

2628
class Scheduler;
@@ -88,28 +90,20 @@ LL_TYPE_STATIC_HOOK(
8890
return {dimId};
8991
}
9092

91-
LL_TYPE_STATIC_HOOK(
92-
VanillaDimensionsToSerializedIntHook,
93-
HookPriority::Normal,
94-
VanillaDimensions,
95-
VanillaDimensions::toSerializedInt,
96-
int,
97-
DimensionType const& dim
98-
) {
99-
if (dim <= 2) return origin(dim);
100-
return dim.id;
101-
}
102-
103-
LL_TYPE_STATIC_HOOK(
104-
VanillaDimensionsToStringHook,
105-
HookPriority::Normal,
106-
VanillaDimensions,
107-
VanillaDimensions::toString,
108-
std::string const,
109-
DimensionType const& dim
110-
) {
111-
return VanillaDimensions::DimensionMap().mLeft.at(dim);
112-
}
93+
// inline function use patch
94+
// -->PropertiesSettingsisClientSideGenEnabledHook
95+
//
96+
// LL_TYPE_STATIC_HOOK(
97+
// VanillaDimensionsToSerializedIntHook,
98+
// HookPriority::Normal,
99+
// VanillaDimensions,
100+
// VanillaDimensions::toSerializedInt,
101+
// int,
102+
// DimensionType const& dim
103+
// ) {
104+
// if (dim <= 2) return origin(dim);
105+
// return dim.id;
106+
// }
113107

114108
// 当玩家加入服务器时,生成时的维度不存在,并且维度id不是Undefined时,把玩家放到主世界
115109
LL_TYPE_INSTANCE_HOOK(
@@ -135,11 +129,20 @@ LL_TYPE_INSTANCE_HOOK(
135129
LL_AUTO_TYPE_INSTANCE_HOOK(
136130
PropertiesSettingsisClientSideGenEnabledHook,
137131
HookPriority::Normal,
138-
PropertiesSettings,
139-
&PropertiesSettings::isClientSideGenEnabled,
140-
bool
132+
DedicatedServer,
133+
&DedicatedServer::runDedicatedServerLoop,
134+
DedicatedServer::StartResult,
135+
Core::FilePathManager& filePathManager,
136+
PropertiesSettings& properties,
137+
LevelSettings& settings,
138+
AllowListFile& userAllowList,
139+
std::unique_ptr<PermissionsFile>& permissionsFile,
140+
Bedrock::ActivationArguments const& args,
141+
TestConfig& testConfig
141142
) {
142-
return false;
143+
properties.mClientSideGenerationEnabled = false;
144+
injectNaticeCode();
145+
return origin(filePathManager, properties, settings, userAllowList, permissionsFile, args, testConfig);
143146
}
144147

145148
// 1.21.50.10 unnecessary
@@ -154,8 +157,7 @@ using HookReg = ll::memory::HookRegistrar<
154157
VanillaDimensionsConverHook,
155158
VanillaDimensionsFromSerializedIntHook,
156159
VanillaDimensionsFromSerializedIntHookI,
157-
VanillaDimensionsToSerializedIntHook,
158-
VanillaDimensionsToStringHook,
160+
// VanillaDimensionsToSerializedIntHook,
159161
LevelStorageloadServerPlayerDataHook,
160162
PropertiesSettingsisClientSideGenEnabledHook>;
161163

src/more_dimensions/api/dimension/SimpleCustomDimension.cpp

Lines changed: 26 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
#include "mc/common/Brightness.h"
1212
#include "mc/common/BrightnessPair.h"
1313
#include "mc/deps/core/math/Color.h"
14+
#include "mc/deps/core/string/HashedString.h"
1415
#include "mc/world/level/BlockSource.h"
1516
#include "mc/world/level/DimensionConversionData.h"
1617
#include "mc/world/level/Level.h"
@@ -28,7 +29,7 @@
2829
#include "mc/world/level/levelgen/flat/FlatWorldGenerator.h"
2930
#include "mc/world/level/levelgen/structure/EndCityFeature.h"
3031
#include "mc/world/level/levelgen/structure/StructureFeatureRegistry.h"
31-
#include "mc/world/level/levelgen/structure/registry//StructureSetRegistry.h"
32+
#include "mc/world/level/levelgen/structure/registry/StructureSetRegistry.h"
3233
#include "mc/world/level/levelgen/synth/PerlinNoise.h"
3334
#include "mc/world/level/levelgen/synth/PerlinSimplexNoise.h"
3435
#include "mc/world/level/levelgen/synth/SimplexNoise.h"
@@ -37,8 +38,11 @@
3738
#include "mc/world/level/levelgen/v1/TheEndGenerator.h"
3839
#include "mc/world/level/levelgen/v1/VoidGenerator.h"
3940
#include "mc/world/level/levelgen/v2/ChunkGeneratorStructureState.h"
41+
#include "mc/world/level/storage/Experiments.h"
4042
#include "mc/world/level/storage/LevelData.h"
4143

44+
#include <memory>
45+
4246

4347
namespace more_dimensions {
4448

@@ -117,30 +121,30 @@ CompoundTag SimpleCustomDimension::generateNewData(uint seed, GeneratorType gene
117121

118122
void SimpleCustomDimension::init(br::worldgen::StructureSetRegistry const& structureSetRegistry) {
119123
loggerMoreDim.debug(__FUNCTION__);
120-
setSkylight(false);
124+
mHasSkylight = false;
121125
Dimension::init(structureSetRegistry);
122126
}
123127

124128
std::unique_ptr<WorldGenerator>
125129
SimpleCustomDimension::createGenerator(br::worldgen::StructureSetRegistry const& structureSetRegistry) {
126130
loggerMoreDim.debug(__FUNCTION__);
127-
auto& level = getLevel();
131+
auto& level = mLevel;
128132
auto& levelData = level.getLevelData();
129-
auto biome = level.getBiomeRegistry().lookupByName(levelData.getBiomeOverride());
133+
auto biome = level.getBiomeRegistry().lookupByName(levelData.mBiomeOverride);
130134

131135
std::unique_ptr<WorldGenerator> worldGenerator;
132136

133137
switch (generatorType) {
134138
case GeneratorType::Overworld: {
135139
worldGenerator = std::make_unique<OverworldGeneratorMultinoise>(*this, LevelSeed64{seed}, biome);
136-
worldGenerator->getStructureFeatureRegistry().mGeneratorState =
140+
worldGenerator->mStructureFeatureRegistry->mGeneratorState =
137141
br::worldgen::ChunkGeneratorStructureState::createNormal(
138142
seed,
139143
worldGenerator->getBiomeSource(),
140144
structureSetRegistry
141145
);
142146
overworldAddStructureFeatures(
143-
worldGenerator->getStructureFeatureRegistry(),
147+
*worldGenerator->mStructureFeatureRegistry,
144148
seed,
145149
false,
146150
levelData.getBaseGameVersion()
@@ -149,45 +153,46 @@ SimpleCustomDimension::createGenerator(br::worldgen::StructureSetRegistry const&
149153
}
150154
case GeneratorType::Nether: {
151155
worldGenerator = std::make_unique<NetherGenerator>(*this, seed, biome);
152-
worldGenerator->getStructureFeatureRegistry().mGeneratorState =
156+
worldGenerator->mStructureFeatureRegistry->mGeneratorState =
153157
br::worldgen::ChunkGeneratorStructureState::createNormal(
154158
seed,
155159
worldGenerator->getBiomeSource(),
156160
structureSetRegistry
157161
);
158162
netherAddStructureFeatures(
159-
worldGenerator->getStructureFeatureRegistry(),
163+
*worldGenerator->mStructureFeatureRegistry,
160164
seed,
161165
levelData.getBaseGameVersion(),
162-
levelData.getExperiments()
166+
static_cast<Experiments&>(levelData.mExperiments.get())
163167
);
164168
break;
165169
}
166170
case GeneratorType::TheEnd: {
167171
worldGenerator = std::make_unique<TheEndGenerator>(*this, seed, biome);
168-
worldGenerator->getStructureFeatureRegistry().mGeneratorState =
172+
worldGenerator->mStructureFeatureRegistry->mGeneratorState =
169173
br::worldgen::ChunkGeneratorStructureState::createNormal(
170174
seed,
171175
worldGenerator->getBiomeSource(),
172176
structureSetRegistry
173177
);
174-
worldGenerator->getStructureFeatureRegistry().mStructureFeatures->emplace_back(
175-
std::make_unique<EndCityFeature>(*this, seed)
176-
);
178+
179+
// worldGenerator->mStructureFeatureRegistry->mStructureFeatures->emplace_back(
180+
// std::make_unique<EndCityFeature>(*this, seed)
181+
// );
177182
break;
178183
}
179184
case GeneratorType::Flat: {
180-
worldGenerator = std::make_unique<FlatWorldGenerator>(*this, seed, levelData.getFlatWorldGeneratorOptions());
181-
worldGenerator->getStructureFeatureRegistry().mGeneratorState =
185+
worldGenerator = std::make_unique<FlatWorldGenerator>(*this, seed, levelData.mFlatworldGeneratorOptions);
186+
worldGenerator->mStructureFeatureRegistry->mGeneratorState =
182187
br::worldgen::ChunkGeneratorStructureState::createFlat(seed, worldGenerator->getBiomeSource(), {});
183188
break;
184189
}
185190
default: {
186191
auto generator = std::make_unique<VoidGenerator>(*this);
187192
generator->mBiome = level.getBiomeRegistry().lookupByHash(VanillaBiomeNames::Ocean());
188193
worldGenerator = std::move(generator);
189-
worldGenerator->getStructureFeatureRegistry().mGeneratorState =
190-
br::worldgen::ChunkGeneratorStructureState::createVoid(seed);
194+
worldGenerator->mStructureFeatureRegistry->mGeneratorState->mLevelSeed = seed;
195+
worldGenerator->mStructureFeatureRegistry->mGeneratorState->mRingsSeed = seed;
191196
}
192197
}
193198
// worldGenerator->init();
@@ -196,14 +201,14 @@ SimpleCustomDimension::createGenerator(br::worldgen::StructureSetRegistry const&
196201

197202
void SimpleCustomDimension::upgradeLevelChunk(ChunkSource& cs, LevelChunk& lc, LevelChunk& generatedChunk) {
198203
loggerMoreDim.debug(__FUNCTION__);
199-
auto blockSource = BlockSource(getLevel(), *this, cs, false, true, false);
204+
auto blockSource = BlockSource(static_cast<Level&>(mLevel), *this, cs, false, true, false);
200205
VanillaLevelChunkUpgrade::_upgradeLevelChunkViaMetaData(lc, generatedChunk, blockSource);
201206
VanillaLevelChunkUpgrade::_upgradeLevelChunkLegacy(lc, blockSource);
202207
}
203208

204209
void SimpleCustomDimension::fixWallChunk(ChunkSource& cs, LevelChunk& lc) {
205210
loggerMoreDim.debug(__FUNCTION__);
206-
auto blockSource = BlockSource(getLevel(), *this, cs, false, true, false);
211+
auto blockSource = BlockSource(static_cast<Level&>(mLevel), *this, cs, false, true, false);
207212
VanillaLevelChunkUpgrade::fixWallChunk(lc, blockSource);
208213
}
209214

@@ -213,20 +218,14 @@ bool SimpleCustomDimension::levelChunkNeedsUpgrade(LevelChunk const& lc) const {
213218
}
214219
void SimpleCustomDimension::_upgradeOldLimboEntity(CompoundTag& tag, ::LimboEntitiesVersion vers) {
215220
loggerMoreDim.debug(__FUNCTION__);
216-
auto isTemplate = getLevel().getLevelData().isFromWorldTemplate();
221+
auto isTemplate = mLevel.getLevelData().mIsFromLockedTemplate;
217222
return VanillaLevelChunkUpgrade::upgradeOldLimboEntity(tag, vers, isTemplate);
218223
}
219224

220225
Vec3 SimpleCustomDimension::translatePosAcrossDimension(Vec3 const& fromPos, DimensionType fromId) const {
221226
loggerMoreDim.debug(__FUNCTION__);
222227
Vec3 topos;
223-
VanillaDimensions::convertPointBetweenDimensions(
224-
fromPos,
225-
topos,
226-
fromId,
227-
mId,
228-
getLevel().getDimensionConversionData()
229-
);
228+
VanillaDimensions::convertPointBetweenDimensions(fromPos, topos, fromId, mId, mLevel.getDimensionConversionData());
230229
constexpr auto clampVal = 32000000.0f - 128.0f;
231230

232231
topos.x = std::clamp(topos.x, -clampVal, clampVal);
@@ -237,7 +236,6 @@ Vec3 SimpleCustomDimension::translatePosAcrossDimension(Vec3 const& fromPos, Dim
237236

238237
short SimpleCustomDimension::getCloudHeight() const { return 192; }
239238

240-
bool SimpleCustomDimension::hasPrecipitationFog() const { return true; }
241239

242240
std::unique_ptr<ChunkSource>
243241
SimpleCustomDimension::_wrapStorageForVersionCompatibility(std::unique_ptr<ChunkSource> cs, ::StorageVersion /*ver*/) {

src/more_dimensions/api/dimension/SimpleCustomDimension.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,5 @@ class SimpleCustomDimension : public Dimension {
4444

4545
MORE_DIMENSIONS_API short getCloudHeight() const override;
4646

47-
MORE_DIMENSIONS_API bool hasPrecipitationFog() const override;
4847
};
4948
} // namespace more_dimensions

src/more_dimensions/core/dimension/CustomDimensionConfig.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ void setDimensionConfigPath() {
2020
if (!ll::service::getLevel()) {
2121
throw std::runtime_error("Level nullptr");
2222
}
23-
dimensionConfigPath /= ll::string_utils::str2u8str(ll::service::getPropertiesSettings()->getLevelName());
23+
dimensionConfigPath /= ll::string_utils::str2u8str(ll::service::getPropertiesSettings()->mLevelName);
2424
dimensionConfigPath /= u8"dimension_config.json";
2525
}
2626

0 commit comments

Comments
 (0)