Skip to content

Commit 37b84af

Browse files
committed
fix: fix #21
1 parent 837aca5 commit 37b84af

File tree

2 files changed

+46
-12
lines changed

2 files changed

+46
-12
lines changed

src/more_dimensions/api/dimension/SimpleCustomDimension.cpp

Lines changed: 45 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#include "SimpleCustomDimension.h"
22

3-
#include "more_dimensions/MoreDimenison.h"
3+
#include "more_dimensions/MoreDimension.h"
44

55
#include "magic_enum.hpp"
66

@@ -15,14 +15,15 @@
1515
#include "mc/world/level/LevelSeed64.h"
1616
#include "mc/world/level/biome/registry/BiomeRegistry.h"
1717
#include "mc/world/level/biome/source/BiomeSource.h"
18-
#include "mc/world/level/biome/source/FixedBiomeSource.h"
1918
#include "mc/world/level/chunk/vanilla_level_chunk_upgrade/VanillaLevelChunkUpgrade.h"
2019
#include "mc/world/level/dimension/DimensionArguments.h"
2120
#include "mc/world/level/dimension/DimensionHeightRange.h"
2221
#include "mc/world/level/dimension/NetherBrightnessRamp.h"
2322
#include "mc/world/level/dimension/OverworldBrightnessRamp.h"
2423
#include "mc/world/level/dimension/VanillaDimensions.h"
2524
#include "mc/world/level/levelgen/flat/FlatWorldGenerator.h"
25+
#include "mc/world/level/levelgen/structure/EndCityFeature.h"
26+
#include "mc/world/level/levelgen/structure/StructureFeature.h"
2627
#include "mc/world/level/levelgen/structure/StructureFeatureRegistry.h"
2728
#include "mc/world/level/levelgen/structure/registry/StructureSetRegistry.h"
2829
#include "mc/world/level/levelgen/synth/SimplexNoise.h"
@@ -34,6 +35,9 @@
3435
#include "mc/world/level/storage/Experiments.h"
3536
#include "mc/world/level/storage/LevelData.h"
3637

38+
#include "test/mc/FixedBiomeSource.h"
39+
40+
3741
#include <memory>
3842
#include <windows.h>
3943

@@ -48,6 +52,8 @@ static auto* overworldAddress =
4852
"`anonymous namespace'::unity_5c986e6b9d6571cc96912b0bfa0329e2::addStructureFeatures"_symp;
4953
static auto* netherAddress = "`anonymous namespace'::unity_3da1d4c9fa90b4b1becbca96840255a5::addStructureFeatures"_symp;
5054

55+
static DWORD endcitityAddress_rva = 0x0808E70;
56+
5157
void overworldAddStructureFeatures(
5258
StructureFeatureRegistry& registry,
5359
uint seed,
@@ -77,27 +83,54 @@ void netherAddStructureFeatures(
7783
experiments
7884
);
7985
};
86+
87+
void createEndCityFeature(StructureFeatureRegistry* _this, Dimension& dimension, uint& seed){
88+
89+
HMODULE hModule = GetModuleHandle(NULL);
90+
void* endcitityAddress = (void*)((BYTE*)hModule + endcitityAddress_rva);
91+
ll::memory::addressCall<EndCityFeature&, StructureFeatureRegistry*, Dimension&, uint&>(
92+
endcitityAddress,
93+
_this,
94+
dimension,
95+
seed
96+
);
97+
};
8098
} // namespace
8199

82100
// static ll::Logger loggerMoreDim("SimpleCustomDim");
83-
auto& loggerMoreDim = MoreDimenison::getInstance().getSelf().getLogger();
101+
auto& loggerMoreDim = MoreDimension::getInstance().getSelf().getLogger();
84102

85103
SimpleCustomDimension::SimpleCustomDimension(std::string const& name, DimensionFactoryInfo const& info)
86104
: Dimension(DimensionArguments(std::move(info.arguments), info.dimId, {-64, 320}, name)) {
87105
loggerMoreDim.debug("{} dimension name:{}", __FUNCTION__, name);
88106
mDefaultBrightness->sky = Brightness::MAX();
89-
generatorType = *magic_enum::enum_cast<GeneratorType>((std::string_view)info.data["generatorType"]);
90-
seed = info.data["seed"];
107+
108+
// Parse generatorType with error handling
109+
auto generatorTypeOpt = magic_enum::enum_cast<GeneratorType>((std::string_view)info.data["generatorType"]);
110+
if (!generatorTypeOpt.has_value()) {
111+
loggerMoreDim.error(
112+
"Invalid generatorType '{}' for dimension '{}', defaulting to Overworld",
113+
std::string{info.data["generatorType"]},
114+
name
115+
);
116+
generatorType = GeneratorType::Overworld;
117+
} else {
118+
generatorType = *generatorTypeOpt;
119+
}
120+
121+
seed = info.data["seed"];
91122
switch (generatorType) {
92123
case GeneratorType::TheEnd: {
93124
mSeaLevel = 63;
94125
mHasWeather = false;
95126
mDimensionBrightnessRamp = std::make_unique<OverworldBrightnessRamp>();
127+
break;
96128
}
97129
case GeneratorType::Nether: {
98130
mSeaLevel = 32;
99131
mHasWeather = false;
100132
mDimensionBrightnessRamp = std::make_unique<NetherBrightnessRamp>();
133+
break;
101134
}
102135
default:
103136
mSeaLevel = 63;
@@ -175,6 +208,7 @@ SimpleCustomDimension::createGenerator(br::worldgen::StructureSetRegistry const&
175208
// worldGenerator->mStructureFeatureRegistry->mStructureFeatures->emplace_back(
176209
// std::make_unique<EndCityFeature>(*this, seed)
177210
// );
211+
createEndCityFeature(worldGenerator->mStructureFeatureRegistry.get(), *this, seed);
178212
break;
179213
}
180214
case GeneratorType::Flat: {
@@ -184,11 +218,12 @@ SimpleCustomDimension::createGenerator(br::worldgen::StructureSetRegistry const&
184218
break;
185219
}
186220
default: {
187-
auto generator = std::make_unique<VoidGenerator>(*this);
188-
generator->mBiome = level.getBiomeRegistry().lookupByName("minecraft:ocean");
189-
worldGenerator = std::move(generator);
190-
worldGenerator->mStructureFeatureRegistry->mGeneratorState->mLevelSeed = seed;
191-
worldGenerator->mStructureFeatureRegistry->mGeneratorState->mRingsSeed = seed;
221+
auto generator = std::make_unique<VoidGenerator>(*this);
222+
generator->mBiome = level.getBiomeRegistry().lookupByName("minecraft:ocean");
223+
generator->mBiomeSource = std::make_unique<FixedBiomeSource>(*generator->mBiome);
224+
worldGenerator = std::move(generator);
225+
worldGenerator->mStructureFeatureRegistry->mGeneratorState =
226+
br::worldgen::ChunkGeneratorStructureState::createFlat(seed, worldGenerator->getBiomeSource(), {});
192227
}
193228
}
194229
// worldGenerator->init();

src/test/mc/FixedBiomeSource.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,7 @@ class FixedBiomeSource : public ::BiomeSource {
2828
public:
2929
// prevent constructor by default
3030

31-
FixedBiomeSource(Biome const& biome) : mFixedBiome(biome){};
32-
31+
FixedBiomeSource(Biome const& biome) : mFixedBiome(biome) {};
3332
public:
3433
// virtual functions
3534
// NOLINTBEGIN

0 commit comments

Comments
 (0)