I am trying to register a dimension I created, but it doesn't show up in game when I build my mod (via /forge dimensions).
I pieced together my code using several other references from similar threads and it seems like I have done everything correctly, so I am not exactly sure why it's not working.
Here is where I register my dimension in my Main class.
@SubscribeEvent
public static void registerDimensions(final RegisterDimensionsEvent event) {
ModDimensions.registerDimensions();
}
@SubscribeEvent
public static void registerModDimensions(final RegistryEvent.Register<ModDimension> event) {
event.getRegistry().registerAll
(
ModDimensions.SUN_REALM_DIMENSION
);
LOGGER.info("Mod dimensions registered.");
}
Here is where my dimension is initialized.
public class ModDimensions {
//Mod Dimensions
public static final ModDimensionType SUN_REALM_DIMENSION = new ModDimensionType(new ResourceLocation(Main.MOD_ID, "sr_dimension"));
//Dimension Types
//public static DimensionType SUN_REALM;
public static void registerDimensions()
{
DimensionManager.registerDimension(new ResourceLocation(Main.MOD_ID, "sr_dimension"), SUN_REALM_DIMENSION, null, true);
}
}
Here is my ModDimension class.
public class ModDimensionType extends ModDimension {
public ModDimensionType(final ResourceLocation registryName)
{
this.setRegistryName(registryName);
}
public static DimensionType getDimensionType()
{
return DimensionType.byName(new ResourceLocation(Main.MOD_ID, "sr_dimension"));
}
@Override
public BiFunction<World, DimensionType, ? extends Dimension> getFactory()
{
return SunRealmDimension::new;
}
}
My Dimension class is basically just scrapped reusing existing biomes and chunk generation:
public class SunRealmDimension extends Dimension {
public static final BlockPos SPAWN = new BlockPos(100, 50, 0);;
public SunRealmDimension(final World worldIn, final DimensionType dimension) {
super(worldIn, dimension, 1.0F);
}
@Override
public ChunkGenerator<?> createChunkGenerator() {
EndGenerationSettings sunrealmgensettings = (EndGenerationSettings) ChunkGeneratorType.FLOATING_ISLANDS.createSettings();
sunrealmgensettings.setDefaultBlock(Blocks.COBBLESTONE.getDefaultState());
sunrealmgensettings.setDefaultFluid(Blocks.WATER.getDefaultState());
sunrealmgensettings.setSpawnPos(this.getSpawnCoordinate());
return ChunkGeneratorType.FLOATING_ISLANDS.create(this.world, BiomeProviderType.FIXED.create(BiomeProviderType.FIXED.func_226840_a_(this.world.getWorldInfo()).setBiome(Biomes.BADLANDS)), sunrealmgensettings);
}
@Override
public float calculateCelestialAngle(final long p_76563_1_, final float p_76563_3_) {
return 0.0f;
}
@Override @Nullable @OnlyIn(Dist.CLIENT)
public float[] calcSunriseSunsetColors(final float p_76560_1_, final float p_76560_2_) {
return null;
}
@Override @OnlyIn(Dist.CLIENT)
public Vec3d getFogColor(final float p_76562_1_, final float p_76562_2_) {
float f = MathHelper.cos(p_76562_1_ * 6.2831855f) * 2.0f + 0.5f;
f = MathHelper.clamp(f, 0.0f, 1.0f);
float f2 = 0.7529412f;
float f3 = 0.84705883f;
float f4 = 1.0f;
f2 *= f * 0.94f + 0.06f;
f3 *= f * 0.94f + 0.06f;
f4 *= f * 0.91f + 0.09f;
return new Vec3d((double) f2, (double) f3, (double) f4);
}
@OnlyIn(Dist.CLIENT)
public Vec3d getSkyColor(final BlockPos pos, final float flo) {
final float f = this.world.getCelestialAngle(flo);
float f2 = MathHelper.cos(f * 6.2831855f) * 2.0f + 0.5f;
f2 = MathHelper.clamp(f2, 0.0f, 1.0f);
final int i = ForgeHooksClient.getSkyBlendColour(this.world, pos);
float f3 = (i >> 16 & 0xFF) / 255.0f;
float f4 = (i >> 8 & 0xFF) / 255.0f;
float f5 = (i & 0xFF) / 255.0f;
f3 *= f2;
f4 *= f2;
f5 *= f2;
return new Vec3d((double) f3, (double) f4, (double) f5);
}
@Override
public boolean hasSkyLight() {
return true;
}
@Override @OnlyIn(Dist.CLIENT)
public boolean isSkyColored() {
return true;
}
@Override
public boolean canRespawnHere() {
return false;
}
@Override
public boolean isSurfaceWorld() {
return false;
}
@Override @OnlyIn(Dist.CLIENT)
public float getCloudHeight() {
return 8.0f;
}
@Override @Nullable
public BlockPos findSpawn(final ChunkPos p_206920_1_, final boolean p_206920_2_) {
final Random random = new Random(this.world.getSeed());
final BlockPos blockpos = new BlockPos(p_206920_1_.getXStart() + random.nextInt(15), 0,
p_206920_1_.getZEnd() + random.nextInt(15));
return this.world.getGroundAboveSeaLevel(blockpos).getMaterial().blocksMovement() ? blockpos : null;
}
@Override
public BlockPos getSpawnCoordinate() {
return SunRealmDimension.SPAWN;
}
@Override @Nullable
public BlockPos findSpawn(final int p_206921_1_, final int p_206921_2_, final boolean p_206921_3_) {
return this.findSpawn(new ChunkPos(p_206921_1_ >> 4, p_206921_2_ >> 4), p_206921_3_);
}
@Override @OnlyIn(Dist.CLIENT)
public boolean doesXZShowFog(final int p_76568_1_, final int p_76568_2_) {
return false;
}
@Override
public void onWorldSave() {
final CompoundNBT compoundnbt = new CompoundNBT();
this.world.getWorldInfo().setDimensionData(this.world.getDimension().getType(), compoundnbt);
}
}
Any help would be greatly appreciated.