convert 1.20.5-21.1 module to kotlin as much as possible

This commit is contained in:
nelle 2024-12-22 02:19:07 -07:00
parent 157feb8e05
commit d0f31746dd
6 changed files with 277 additions and 230 deletions

View file

@ -1,30 +1,25 @@
package observer.nelle.roses.datagen;
package observer.nelle.roses.datagen
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider;
import net.minecraft.registry.RegistryWrapper;
import net.minecraft.registry.tag.BlockTags;
import observer.nelle.roses.RosesBlocks;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput
import net.fabricmc.fabric.api.datagen.v1.provider.FabricTagProvider
import net.minecraft.registry.RegistryWrapper
import net.minecraft.registry.tag.BlockTags
import observer.nelle.roses.RosesBlocks.cyanRoseBush
import observer.nelle.roses.RosesBlocks.cyanRoseFlower
import observer.nelle.roses.RosesBlocks.pottedCyan
import observer.nelle.roses.RosesBlocks.pottedRose
import observer.nelle.roses.RosesBlocks.roseFlower
import java.util.concurrent.CompletableFuture
import java.util.concurrent.CompletableFuture;
class RosesBlockTagProvider(
output: FabricDataOutput,
registriesFuture: CompletableFuture<RegistryWrapper.WrapperLookup?>?,
) : FabricTagProvider.BlockTagProvider(output, registriesFuture) {
override fun configure(wrapperLookup: RegistryWrapper.WrapperLookup) {
getOrCreateTagBuilder(BlockTags.TALL_FLOWERS).add(cyanRoseBush)
public class RosesBlockTagProvider extends FabricTagProvider.BlockTagProvider {
public RosesBlockTagProvider(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registriesFuture) {
super(output, registriesFuture);
}
getOrCreateTagBuilder(BlockTags.SMALL_FLOWERS).add(roseFlower).add(cyanRoseFlower)
@Override
protected void configure(RegistryWrapper.WrapperLookup wrapperLookup) {
getOrCreateTagBuilder(BlockTags.TALL_FLOWERS)
.add(RosesBlocks.INSTANCE.getCyanRoseBush())
;
getOrCreateTagBuilder(BlockTags.SMALL_FLOWERS)
.add(RosesBlocks.INSTANCE.getRoseFlower())
.add(RosesBlocks.INSTANCE.getCyanRoseFlower())
;
getOrCreateTagBuilder(BlockTags.FLOWER_POTS)
.add(RosesBlocks.INSTANCE.getPottedRose())
.add(RosesBlocks.INSTANCE.getPottedCyan())
;
}
getOrCreateTagBuilder(BlockTags.FLOWER_POTS).add(pottedRose).add(pottedCyan)
}
}

View file

@ -1,43 +1,58 @@
package observer.nelle.roses.datagen;
package observer.nelle.roses.datagen
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider;
import net.minecraft.block.Block;
import net.minecraft.block.Blocks;
import net.minecraft.enchantment.Enchantments;
import net.minecraft.item.Item;
import net.minecraft.loot.LootTable;
import net.minecraft.loot.entry.ItemEntry;
import net.minecraft.loot.function.ApplyBonusLootFunction;
import net.minecraft.loot.function.SetCountLootFunction;
import net.minecraft.loot.provider.number.UniformLootNumberProvider;
import net.minecraft.registry.RegistryWrapper;
import observer.nelle.roses.RosesBlocks;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput
import net.fabricmc.fabric.api.datagen.v1.provider.FabricBlockLootTableProvider
import net.minecraft.block.Block
import net.minecraft.block.Blocks
import net.minecraft.enchantment.Enchantments
import net.minecraft.loot.LootTable
import net.minecraft.loot.entry.ItemEntry
import net.minecraft.loot.function.ApplyBonusLootFunction
import net.minecraft.loot.function.SetCountLootFunction
import net.minecraft.loot.provider.number.UniformLootNumberProvider
import net.minecraft.registry.RegistryWrapper
import observer.nelle.roses.RosesBlocks.cyanRoseBush
import observer.nelle.roses.RosesBlocks.cyanRoseFlower
import observer.nelle.roses.RosesBlocks.pottedCyan
import observer.nelle.roses.RosesBlocks.pottedRose
import observer.nelle.roses.RosesBlocks.roseFlower
import java.util.concurrent.CompletableFuture
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
class RosesLootTableProvider(
dataOutput: FabricDataOutput?,
registryLookup: CompletableFuture<RegistryWrapper.WrapperLookup?>?,
) : FabricBlockLootTableProvider(dataOutput, registryLookup) {
override fun generate() {
addDrop(roseFlower)
addDrop(cyanRoseFlower)
public class RosesLootTableProvider extends FabricBlockLootTableProvider {
public RosesLootTableProvider(FabricDataOutput dataOutput, CompletableFuture<RegistryWrapper.WrapperLookup> registryLookup) {
super(dataOutput, registryLookup);
}
addPottedPlantDrops(pottedRose)
addPottedPlantDrops(pottedCyan)
@Override
public void generate() {
addDrop(RosesBlocks.INSTANCE.getRoseFlower());
addDrop(RosesBlocks.INSTANCE.getCyanRoseFlower());
addDrop(
Blocks.ROSE_BUSH,
roseBushDrops(Blocks.ROSE_BUSH, roseFlower, 2.0f, 5.0f),
)
addDrop(
cyanRoseBush,
roseBushDrops(cyanRoseBush!!, cyanRoseFlower, 2.0f, 5.0f),
)
}
addPottedPlantDrops(RosesBlocks.INSTANCE.getPottedRose());
addPottedPlantDrops(RosesBlocks.INSTANCE.getPottedCyan());
addDrop(Blocks.ROSE_BUSH, roseBushDrops(Blocks.ROSE_BUSH, Objects.requireNonNull(RosesBlocks.INSTANCE.getRoseFlower()).asItem(), 2.0F, 5.0F));
addDrop(RosesBlocks.INSTANCE.getCyanRoseBush(), roseBushDrops(RosesBlocks.INSTANCE.getCyanRoseBush(), Objects.requireNonNull(RosesBlocks.INSTANCE.getCyanRoseFlower()).asItem(), 2.0F, 5.0F));
}
public LootTable.Builder roseBushDrops(Block input, Item output, Float min, Float max) {
return dropsWithShears(input, this
.applyExplosionDecay(input, ItemEntry.builder(output)
.apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(min, max)))
.apply(ApplyBonusLootFunction.oreDrops(Enchantments.FORTUNE))));
}
private fun roseBushDrops(
input: Block,
output: Block?,
min: Float,
max: Float,
): LootTable.Builder =
dropsWithShears(
input,
this.applyExplosionDecay(
input,
ItemEntry
.builder(output)
.apply(SetCountLootFunction.builder(UniformLootNumberProvider.create(min, max)))
.apply(ApplyBonusLootFunction.oreDrops(Enchantments.FORTUNE)),
),
)
}

View file

@ -1,27 +1,47 @@
package observer.nelle.roses.datagen;
package observer.nelle.roses.datagen
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider;
import net.minecraft.data.server.recipe.RecipeExporter;
import net.minecraft.item.Items;
import net.minecraft.recipe.book.RecipeCategory;
import net.minecraft.registry.RegistryWrapper;
import observer.nelle.roses.RosesBlocks;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput
import net.fabricmc.fabric.api.datagen.v1.provider.FabricRecipeProvider
import net.minecraft.data.server.recipe.RecipeExporter
import net.minecraft.item.Items
import net.minecraft.recipe.book.RecipeCategory
import net.minecraft.registry.RegistryWrapper
import observer.nelle.roses.RosesBlocks.cyanRoseBush
import observer.nelle.roses.RosesBlocks.cyanRoseFlower
import observer.nelle.roses.RosesBlocks.roseFlower
import java.util.concurrent.CompletableFuture
import java.util.Objects;
import java.util.concurrent.CompletableFuture;
class RosesRecipeProvider(
output: FabricDataOutput?,
registriesFuture: CompletableFuture<RegistryWrapper.WrapperLookup?>?,
) : FabricRecipeProvider(output, registriesFuture) {
override fun generate(recipeExporter: RecipeExporter) {
offerShapelessRecipe(
recipeExporter,
Items.RED_DYE,
roseFlower,
"dye",
2,
)
offerShapelessRecipe(
recipeExporter,
Items.CYAN_DYE,
cyanRoseFlower,
"dye",
2,
)
public class RosesRecipeProvider extends FabricRecipeProvider {
public RosesRecipeProvider(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registriesFuture) {
super(output, registriesFuture);
}
@Override
public void generate(RecipeExporter recipeExporter) {
offerShapelessRecipe(recipeExporter, Items.RED_DYE, Objects.requireNonNull(RosesBlocks.INSTANCE.getRoseFlower()), "dye", 2);
offerShapelessRecipe(recipeExporter, Items.CYAN_DYE, Objects.requireNonNull(RosesBlocks.INSTANCE.getCyanRoseFlower()), "dye", 2);
offer2x2CompactingRecipe(recipeExporter, RecipeCategory.DECORATIONS, Items.ROSE_BUSH, RosesBlocks.INSTANCE.getRoseFlower());
offer2x2CompactingRecipe(recipeExporter, RecipeCategory.DECORATIONS, Objects.requireNonNull(RosesBlocks.INSTANCE.getCyanRoseBush()).asItem(), RosesBlocks.INSTANCE.getCyanRoseFlower());
}
offer2x2CompactingRecipe(
recipeExporter,
RecipeCategory.DECORATIONS,
Items.ROSE_BUSH,
roseFlower,
)
offer2x2CompactingRecipe(
recipeExporter,
RecipeCategory.DECORATIONS,
cyanRoseBush,
cyanRoseFlower,
)
}
}

View file

@ -1,25 +1,22 @@
package observer.nelle.roses.datagen;
package observer.nelle.roses.datagen
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput;
import net.fabricmc.fabric.api.datagen.v1.provider.FabricDynamicRegistryProvider;
import net.minecraft.registry.RegistryKeys;
import net.minecraft.registry.RegistryWrapper;
import net.fabricmc.fabric.api.datagen.v1.FabricDataOutput
import net.fabricmc.fabric.api.datagen.v1.provider.FabricDynamicRegistryProvider
import net.minecraft.registry.RegistryKeys
import net.minecraft.registry.RegistryWrapper
import java.util.concurrent.CompletableFuture
import java.util.concurrent.CompletableFuture;
class RosesRegistryGenerator(
output: FabricDataOutput?,
registriesFuture: CompletableFuture<RegistryWrapper.WrapperLookup?>?,
) : FabricDynamicRegistryProvider(output, registriesFuture) {
override fun configure(
registries: RegistryWrapper.WrapperLookup,
entries: Entries,
) {
entries.addAll(registries.getWrapperOrThrow(RegistryKeys.CONFIGURED_FEATURE))
entries.addAll(registries.getWrapperOrThrow(RegistryKeys.PLACED_FEATURE))
}
public class RosesRegistryGenerator extends FabricDynamicRegistryProvider {
public RosesRegistryGenerator(FabricDataOutput output, CompletableFuture<RegistryWrapper.WrapperLookup> registriesFuture) {
super(output, registriesFuture);
}
@Override
protected void configure(RegistryWrapper.WrapperLookup registries, Entries entries) {
entries.addAll(registries.getWrapperOrThrow(RegistryKeys.CONFIGURED_FEATURE));
entries.addAll(registries.getWrapperOrThrow(RegistryKeys.PLACED_FEATURE));
}
@Override
public String getName() {
return "";
}
override fun getName(): String = ""
}

View file

@ -1,128 +1,148 @@
package observer.nelle.roses.world.gen;
package observer.nelle.roses.world.gen
import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
import net.fabricmc.fabric.api.biome.v1.BiomeSelectors;
import net.minecraft.world.biome.BiomeKeys;
import net.minecraft.world.gen.GenerationStep;
import observer.nelle.roses.world.RosesPlacedFeatures;
import net.fabricmc.fabric.api.biome.v1.BiomeModifications
import net.fabricmc.fabric.api.biome.v1.BiomeSelectors
import net.minecraft.world.biome.BiomeKeys
import net.minecraft.world.gen.GenerationStep
import observer.nelle.roses.world.RosesPlacedFeatures
public class RosesVegetationGeneration {
public static void generateVegetation() {
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.FOREST,
BiomeKeys.FLOWER_FOREST,
BiomeKeys.BIRCH_FOREST,
BiomeKeys.OLD_GROWTH_BIRCH_FOREST,
BiomeKeys.DARK_FOREST),
GenerationStep.Feature.VEGETAL_DECORATION, RosesPlacedFeatures.cyanRoseBushPlacedKey);
object RosesVegetationGeneration {
fun generateVegetation() {
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.FOREST,
BiomeKeys.FLOWER_FOREST,
BiomeKeys.BIRCH_FOREST,
BiomeKeys.OLD_GROWTH_BIRCH_FOREST,
BiomeKeys.DARK_FOREST,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.cyanRoseBushPlacedKey,
)
// regular
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.PLAINS,
BiomeKeys.SUNFLOWER_PLAINS,
BiomeKeys.MEADOW, // https://minecraft.wiki/w/Flower#Flower_gradients
BiomeKeys.FLOWER_FOREST, // https://minecraft.wiki/w/Flower#Flower_gradients
BiomeKeys.SNOWY_PLAINS,
BiomeKeys.FOREST,
BiomeKeys.BIRCH_FOREST,
BiomeKeys.OLD_GROWTH_BIRCH_FOREST,
BiomeKeys.TAIGA,
BiomeKeys.OLD_GROWTH_PINE_TAIGA,
BiomeKeys.OLD_GROWTH_SPRUCE_TAIGA,
BiomeKeys.SNOWY_TAIGA,
BiomeKeys.DARK_FOREST,
BiomeKeys.WINDSWEPT_HILLS,
BiomeKeys.WINDSWEPT_FOREST,
BiomeKeys.WINDSWEPT_GRAVELLY_HILLS,
BiomeKeys.RIVER,
BiomeKeys.FROZEN_RIVER),
GenerationStep.Feature.VEGETAL_DECORATION, RosesPlacedFeatures.cyanRosePlacedKey);
// regular
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.PLAINS,
BiomeKeys.SUNFLOWER_PLAINS,
BiomeKeys.MEADOW, // https://minecraft.wiki/w/Flower#Flower_gradients
BiomeKeys.FLOWER_FOREST, // https://minecraft.wiki/w/Flower#Flower_gradients
BiomeKeys.SNOWY_PLAINS,
BiomeKeys.FOREST,
BiomeKeys.BIRCH_FOREST,
BiomeKeys.OLD_GROWTH_BIRCH_FOREST,
BiomeKeys.TAIGA,
BiomeKeys.OLD_GROWTH_PINE_TAIGA,
BiomeKeys.OLD_GROWTH_SPRUCE_TAIGA,
BiomeKeys.SNOWY_TAIGA,
BiomeKeys.DARK_FOREST,
BiomeKeys.WINDSWEPT_HILLS,
BiomeKeys.WINDSWEPT_FOREST,
BiomeKeys.WINDSWEPT_GRAVELLY_HILLS,
BiomeKeys.RIVER,
BiomeKeys.FROZEN_RIVER,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.cyanRosePlacedKey,
)
BiomeModifications.addFeature(BiomeSelectors.includeByKey(
BiomeKeys.PLAINS,
BiomeKeys.SUNFLOWER_PLAINS,
BiomeKeys.MEADOW, // https://minecraft.wiki/w/Flower#Flower_gradients
BiomeKeys.FLOWER_FOREST, // https://minecraft.wiki/w/Flower#Flower_gradients
BiomeKeys.SNOWY_PLAINS,
BiomeKeys.FOREST,
BiomeKeys.BIRCH_FOREST,
BiomeKeys.OLD_GROWTH_BIRCH_FOREST,
BiomeKeys.TAIGA,
BiomeKeys.OLD_GROWTH_PINE_TAIGA,
BiomeKeys.OLD_GROWTH_SPRUCE_TAIGA,
BiomeKeys.SNOWY_TAIGA,
BiomeKeys.DARK_FOREST,
BiomeKeys.WINDSWEPT_HILLS,
BiomeKeys.WINDSWEPT_FOREST,
BiomeKeys.WINDSWEPT_GRAVELLY_HILLS,
BiomeKeys.RIVER,
BiomeKeys.FROZEN_RIVER),
GenerationStep.Feature.VEGETAL_DECORATION, RosesPlacedFeatures.rosePlacedKey);
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.PLAINS,
BiomeKeys.SUNFLOWER_PLAINS,
BiomeKeys.MEADOW, // https://minecraft.wiki/w/Flower#Flower_gradients
BiomeKeys.FLOWER_FOREST, // https://minecraft.wiki/w/Flower#Flower_gradients
BiomeKeys.SNOWY_PLAINS,
BiomeKeys.FOREST,
BiomeKeys.BIRCH_FOREST,
BiomeKeys.OLD_GROWTH_BIRCH_FOREST,
BiomeKeys.TAIGA,
BiomeKeys.OLD_GROWTH_PINE_TAIGA,
BiomeKeys.OLD_GROWTH_SPRUCE_TAIGA,
BiomeKeys.SNOWY_TAIGA,
BiomeKeys.DARK_FOREST,
BiomeKeys.WINDSWEPT_HILLS,
BiomeKeys.WINDSWEPT_FOREST,
BiomeKeys.WINDSWEPT_GRAVELLY_HILLS,
BiomeKeys.RIVER,
BiomeKeys.FROZEN_RIVER,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.rosePlacedKey,
)
// rarer
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.BEACH,
BiomeKeys.SNOWY_BEACH,
BiomeKeys.STONY_SHORE,
BiomeKeys.OCEAN,
BiomeKeys.DEEP_COLD_OCEAN,
BiomeKeys.COLD_OCEAN,
BiomeKeys.DEEP_FROZEN_OCEAN,
BiomeKeys.DEEP_LUKEWARM_OCEAN,
BiomeKeys.DEEP_OCEAN,
BiomeKeys.FROZEN_OCEAN,
BiomeKeys.LUKEWARM_OCEAN,
BiomeKeys.WARM_OCEAN,
BiomeKeys.DESERT,
BiomeKeys.ICE_SPIKES,
BiomeKeys.DRIPSTONE_CAVES,
BiomeKeys.DEEP_DARK
),
GenerationStep.Feature.VEGETAL_DECORATION, RosesPlacedFeatures.cyanRoseRarerPlacedKey);
// rarer
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.BEACH,
BiomeKeys.SNOWY_BEACH,
BiomeKeys.STONY_SHORE,
BiomeKeys.OCEAN,
BiomeKeys.DEEP_COLD_OCEAN,
BiomeKeys.COLD_OCEAN,
BiomeKeys.DEEP_FROZEN_OCEAN,
BiomeKeys.DEEP_LUKEWARM_OCEAN,
BiomeKeys.DEEP_OCEAN,
BiomeKeys.FROZEN_OCEAN,
BiomeKeys.LUKEWARM_OCEAN,
BiomeKeys.WARM_OCEAN,
BiomeKeys.DESERT,
BiomeKeys.ICE_SPIKES,
BiomeKeys.DRIPSTONE_CAVES,
BiomeKeys.DEEP_DARK,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.cyanRoseRarerPlacedKey,
)
BiomeModifications.addFeature(BiomeSelectors.includeByKey(
BiomeKeys.BEACH,
BiomeKeys.SNOWY_BEACH,
BiomeKeys.STONY_SHORE,
BiomeKeys.OCEAN,
BiomeKeys.DEEP_COLD_OCEAN,
BiomeKeys.COLD_OCEAN,
BiomeKeys.DEEP_FROZEN_OCEAN,
BiomeKeys.DEEP_LUKEWARM_OCEAN,
BiomeKeys.DEEP_OCEAN,
BiomeKeys.FROZEN_OCEAN,
BiomeKeys.LUKEWARM_OCEAN,
BiomeKeys.WARM_OCEAN,
BiomeKeys.DESERT,
BiomeKeys.ICE_SPIKES,
BiomeKeys.DRIPSTONE_CAVES,
BiomeKeys.DEEP_DARK
),
GenerationStep.Feature.VEGETAL_DECORATION, RosesPlacedFeatures.roseRarerPlacedKey);
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.BEACH,
BiomeKeys.SNOWY_BEACH,
BiomeKeys.STONY_SHORE,
BiomeKeys.OCEAN,
BiomeKeys.DEEP_COLD_OCEAN,
BiomeKeys.COLD_OCEAN,
BiomeKeys.DEEP_FROZEN_OCEAN,
BiomeKeys.DEEP_LUKEWARM_OCEAN,
BiomeKeys.DEEP_OCEAN,
BiomeKeys.FROZEN_OCEAN,
BiomeKeys.LUKEWARM_OCEAN,
BiomeKeys.WARM_OCEAN,
BiomeKeys.DESERT,
BiomeKeys.ICE_SPIKES,
BiomeKeys.DRIPSTONE_CAVES,
BiomeKeys.DEEP_DARK,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.roseRarerPlacedKey,
)
// more common
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE,
BiomeKeys.SAVANNA,
BiomeKeys.SAVANNA_PLATEAU,
BiomeKeys.WINDSWEPT_SAVANNA
),
GenerationStep.Feature.VEGETAL_DECORATION, RosesPlacedFeatures.cyanRoseCommonPlacedKey);
// more common
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE,
BiomeKeys.SAVANNA,
BiomeKeys.SAVANNA_PLATEAU,
BiomeKeys.WINDSWEPT_SAVANNA,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.cyanRoseCommonPlacedKey,
)
BiomeModifications.addFeature(BiomeSelectors.includeByKey(
BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE,
BiomeKeys.SAVANNA,
BiomeKeys.SAVANNA_PLATEAU,
BiomeKeys.WINDSWEPT_SAVANNA
),
GenerationStep.Feature.VEGETAL_DECORATION, RosesPlacedFeatures.roseCommonPlacedKey);
}
BiomeModifications.addFeature(
BiomeSelectors.includeByKey(
BiomeKeys.JUNGLE,
BiomeKeys.BAMBOO_JUNGLE,
BiomeKeys.SPARSE_JUNGLE,
BiomeKeys.SAVANNA,
BiomeKeys.SAVANNA_PLATEAU,
BiomeKeys.WINDSWEPT_SAVANNA,
),
GenerationStep.Feature.VEGETAL_DECORATION,
RosesPlacedFeatures.roseCommonPlacedKey,
)
}
}

View file

@ -1,7 +1,7 @@
package observer.nelle.roses.world.gen;
package observer.nelle.roses.world.gen
public class RosesWorldGeneration {
public static void generateRosesWorldGen() {
RosesVegetationGeneration.generateVegetation();
}
object RosesWorldGeneration {
fun generateRosesWorldGen() {
RosesVegetationGeneration.generateVegetation()
}
}