Skip to content

Instantly share code, notes, and snippets.

@GradientTim
Created April 6, 2024 20:54
Show Gist options
  • Save GradientTim/03f8aa91ac0acba53b393e9e60806d51 to your computer and use it in GitHub Desktop.
Save GradientTim/03f8aa91ac0acba53b393e9e60806d51 to your computer and use it in GitHub Desktop.
Paperweight 1.20.4 custom biome
val biomeEffect =BiomeSpecialEffects.Builder()
.skyColor(8103167)
.fogColor(12638463)
.waterColor(4159204)
.waterFogColor(329011)
.grassColorOverride(16747750)
.build()
val craftServer = Bukkit.getServer() as CraftServer
val dedicatedServer = craftServer.server
val customKey = ResourceKey.create(Registries.BIOME, ResourceLocation("custom", "myCustomBiomeName"))
val writeableRegistry = dedicatedServer.registryAccess().registryOrThrow(Registries.BIOME) as WritableRegistry<Biome>
val customBiome = BiomeBuilder()
.downfall(0.8F)
.temperature(0.4F)
.hasPrecipitation(false)
.specialEffects(biomeEffect)
.mobSpawnSettings(MobSpawnSettings.EMPTY)
.generationSettings(BiomeGenerationSettings.EMPTY)
.build()
runCatching {
val frozenField = MappedRegistry::class.java.getDeclaredField("l")
frozenField.isAccessible = true
frozenField.set(writeableRegistry, false)
val unregisteredIntrusiveHolders = MappedRegistry::class.java.getDeclaredField("m")
unregisteredIntrusiveHolders.isAccessible = true
unregisteredIntrusiveHolders.set(writeableRegistry, IdentityHashMap<ResourceKey<Biome>, Holder.Reference<Biome>>())
writeableRegistry.createIntrusiveHolder(customBiome)
writeableRegistry.register(customKey, customBiome, Lifecycle.stable())
unregisteredIntrusiveHolders.set(writeableRegistry, null)
frozenField.isAccessible = true
frozenField.set(writeableRegistry, true)
}.onFailure { it.printStackTrace() }
// set the biome
val world = Bukkit.getWorld("world")!!
val craftChunk = world.getChunkAt(0, 0) as CraftChunk
val biomeAccess = craftChunk.getHandle(ChunkStatus.BIOMES)
biomeAccess.setBiome(0, 0, 0, Holder.direct(customBiome))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment