Skip to content

Commit

Permalink
added ore genertion
Browse files Browse the repository at this point in the history
  • Loading branch information
RealYusufIsmail committed Jun 18, 2024
1 parent bef7d0a commit f2812e5
Show file tree
Hide file tree
Showing 11 changed files with 231 additions and 2 deletions.
4 changes: 2 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ neogradle.subsystems.parchment.mappingsVersion=2024.05.01
# The Minecraft version must agree with the Neo version to get a valid artifact
minecraft_version=1.21
minecraft_version_range=[1.21,1.21.1)
neo_version=21.0.8-beta
neo_version_range=[21.0.8-beta,)
neo_version=21.0.16-beta
neo_version_range=[21.0.16-beta,)
loader_version_range=[4,)

## Mod Properties
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// 1.21 2024-06-18T10:39:24.328623 Registries
51c246da2a8401911dddf9e7dca704f328f19d5f data/tutorialmod/neoforge/biome_modifier/add_example_ore.json
4b902e54f6d984a4c984ec22031f30ddac055f86 data/tutorialmod/worldgen/configured_feature/example_ore.json
187f7785b65f6e275c61a5fa2253cd5b00a0f8c1 data/tutorialmod/worldgen/placed_feature/example_ore.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"type": "neoforge:add_features",
"biomes": "#minecraft:is_overworld",
"features": "tutorialmod:example_ore",
"step": "underground_ores"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"type": "minecraft:ore",
"config": {
"discard_chance_on_air_exposure": 0.0,
"size": 4,
"targets": [
{
"state": {
"Name": "tutorialmod:example_ore"
},
"target": {
"predicate_type": "minecraft:tag_match",
"tag": "minecraft:stone_ore_replaceables"
}
},
{
"state": {
"Name": "tutorialmod:deepslate_example_ore"
},
"target": {
"predicate_type": "minecraft:tag_match",
"tag": "minecraft:deepslate_ore_replaceables"
}
}
]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
{
"feature": "tutorialmod:example_ore",
"placement": [
{
"type": "minecraft:count",
"count": 3
},
{
"type": "minecraft:in_square"
},
{
"type": "minecraft:height_range",
"height": {
"type": "minecraft:uniform",
"max_inclusive": {
"absolute": 20
},
"min_inclusive": {
"absolute": -64
}
}
},
{
"type": "minecraft:biome"
}
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
import io.github.realyusufismail.tutorialmod.data.tags.ModItemTagProvider;
import io.github.realyusufismail.tutorialmod.data.texture.ModBlockStateProvider;
import io.github.realyusufismail.tutorialmod.data.texture.ModItemStateProvider;
import io.github.realyusufismail.tutorialmod.data.worldgen.ModWorldGenProvider;
import net.minecraft.data.DataGenerator;
import net.minecraft.data.PackOutput;
import net.neoforged.neoforge.common.data.ExistingFileHelper;
Expand All @@ -32,6 +33,7 @@ public static void gatherData(GatherDataEvent event) {
generator.addProvider(true, new ModItemTagProvider(output, event.getLookupProvider(), blockTagsProvider, existingFileHelper));
generator.addProvider(true, new ModGlobalLootModifiersProvider(output, event.getLookupProvider()));
generator.addProvider(true, new ModAdvancementProvider(output, event.getLookupProvider(), existingFileHelper));
generator.addProvider(true, new ModWorldGenProvider(output, event.getLookupProvider()));
} catch (RuntimeException e) {
TutorialMod.logger.error("Failed to generate data", e);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package io.github.realyusufismail.tutorialmod.data.worldgen;

import io.github.realyusufismail.tutorialmod.TutorialMod;
import net.minecraft.core.HolderGetter;
import net.minecraft.core.HolderSet;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.worldgen.BootstrapContext;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BiomeTags;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.levelgen.GenerationStep;
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import net.neoforged.neoforge.common.world.BiomeModifier;
import net.neoforged.neoforge.common.world.BiomeModifiers;
import net.neoforged.neoforge.registries.NeoForgeRegistries;

public class ModBiomesModifiers {
protected static ResourceKey<BiomeModifier> ADD_EXAMPLE_ORE = registerKey("add_example_ore");

public static void bootstrap(BootstrapContext<BiomeModifier> context) {
HolderGetter<PlacedFeature> placedFeatures = context.lookup(Registries.PLACED_FEATURE);
HolderGetter<Biome> biomes = context.lookup(Registries.BIOME);

context.register(
ADD_EXAMPLE_ORE,
new BiomeModifiers.AddFeaturesBiomeModifier(
biomes.getOrThrow(BiomeTags.IS_OVERWORLD),
HolderSet.direct(placedFeatures.getOrThrow(ModPlacedFeatures.EXAMPLE_ORE)),
GenerationStep.Decoration.UNDERGROUND_ORES));
}

private static ResourceKey<BiomeModifier> registerKey(String name) {
return ResourceKey.create(
NeoForgeRegistries.Keys.BIOME_MODIFIERS, ResourceLocation.fromNamespaceAndPath(TutorialMod.MOD_ID, name));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package io.github.realyusufismail.tutorialmod.data.worldgen;

import io.github.realyusufismail.tutorialmod.TutorialMod;
import io.github.realyusufismail.tutorialmod.init.BlockInit;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.worldgen.BootstrapContext;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.BlockTags;
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
import net.minecraft.world.level.levelgen.feature.Feature;
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration;
import net.minecraft.world.level.levelgen.feature.configurations.OreConfiguration;
import net.minecraft.world.level.levelgen.structure.templatesystem.RuleTest;
import net.minecraft.world.level.levelgen.structure.templatesystem.TagMatchTest;

import java.util.List;

public class ModConfiguredFeatures {

protected static ResourceKey<ConfiguredFeature<?, ?>> OVERWORLD_EXAMPLE_ORE = createKey("example_ore");

public static void boostrap(BootstrapContext<ConfiguredFeature<?, ?>> context) {
RuleTest stoneReplacable = new TagMatchTest(BlockTags.STONE_ORE_REPLACEABLES);
RuleTest deepslateReplacable = new TagMatchTest(BlockTags.DEEPSLATE_ORE_REPLACEABLES);

List<OreConfiguration.TargetBlockState> exampleOre = List.of(OreConfiguration.target(stoneReplacable, BlockInit.EXAMPLE_ORE.get().defaultBlockState()),
OreConfiguration.target(deepslateReplacable, BlockInit.DEEPSLATE_EXAMPLE_ORE.get().defaultBlockState()));

register(context, OVERWORLD_EXAMPLE_ORE, Feature.ORE, new OreConfiguration(exampleOre, 4));
}


private static ResourceKey<ConfiguredFeature<?, ?>> createKey(String name) {
return ResourceKey.create(Registries.CONFIGURED_FEATURE, ResourceLocation.fromNamespaceAndPath(TutorialMod.MOD_ID, name));
}

private static <FC extends FeatureConfiguration, F extends Feature<FC>> void register(BootstrapContext<ConfiguredFeature<?, ?>> context, ResourceKey<ConfiguredFeature<?, ?>> key, F feature, FC config) {
context.register(key, new ConfiguredFeature<>(feature, config));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package io.github.realyusufismail.tutorialmod.data.worldgen;

import net.minecraft.world.level.levelgen.placement.*;

import java.util.List;

public class ModOrePlacement {

private static List<PlacementModifier> orePlacements(PlacementModifier placementModifier, PlacementModifier placementModifier1) {
return List.of(placementModifier, InSquarePlacement.spread(), placementModifier1, BiomeFilter.biome());
}


public static List<PlacementModifier> commonOrePlacements(int count, PlacementModifier placementModifier) {
return orePlacements(CountPlacement.of(count), placementModifier);
}

public static List<PlacementModifier> rareOrePlacements(int count, PlacementModifier placementModifier) {
return orePlacements(RarityFilter.onAverageOnceEvery(count), placementModifier);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package io.github.realyusufismail.tutorialmod.data.worldgen;

import io.github.realyusufismail.tutorialmod.TutorialMod;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderGetter;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.worldgen.BootstrapContext;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.levelgen.VerticalAnchor;
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
import net.minecraft.world.level.levelgen.placement.HeightRangePlacement;
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import net.minecraft.world.level.levelgen.placement.PlacementModifier;

import java.util.List;

public class ModPlacedFeatures {

protected static ResourceKey<PlacedFeature> EXAMPLE_ORE = createKey("example_ore");

public static void bootstrap(BootstrapContext<PlacedFeature> context) {
HolderGetter<ConfiguredFeature<?, ?>> configuredFeatures = context.lookup(Registries.CONFIGURED_FEATURE);

Holder<ConfiguredFeature<?, ?>> holder =
configuredFeatures.getOrThrow(ModConfiguredFeatures.OVERWORLD_EXAMPLE_ORE);

// 3 veins per chunk, between y -64 and 20
register(context, EXAMPLE_ORE, holder, ModOrePlacement.commonOrePlacements(3, HeightRangePlacement.uniform(VerticalAnchor.absolute(-64), VerticalAnchor.absolute(20))));
}


private static ResourceKey<PlacedFeature> createKey(String name) {
return ResourceKey.create(Registries.PLACED_FEATURE, ResourceLocation.fromNamespaceAndPath(TutorialMod.MOD_ID, name));
}


private static void register(BootstrapContext<PlacedFeature> context, ResourceKey<PlacedFeature> key, Holder<ConfiguredFeature<?, ?>> feature, List<PlacementModifier> placements) {
context.register(key, new PlacedFeature(feature, placements));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
package io.github.realyusufismail.tutorialmod.data.worldgen;

import io.github.realyusufismail.tutorialmod.TutorialMod;
import net.minecraft.core.HolderLookup;
import net.minecraft.core.RegistrySetBuilder;
import net.minecraft.core.registries.Registries;
import net.minecraft.data.PackOutput;
import net.neoforged.neoforge.common.data.DatapackBuiltinEntriesProvider;
import net.neoforged.neoforge.registries.NeoForgeRegistries;

import java.util.Set;
import java.util.concurrent.CompletableFuture;

public class ModWorldGenProvider extends DatapackBuiltinEntriesProvider {
public ModWorldGenProvider(PackOutput output, CompletableFuture<HolderLookup.Provider> registries) {
super(output, registries,
new RegistrySetBuilder()
.add(Registries.CONFIGURED_FEATURE, ModConfiguredFeatures::boostrap)
.add(Registries.PLACED_FEATURE, ModPlacedFeatures::bootstrap)
.add(NeoForgeRegistries.Keys.BIOME_MODIFIERS, ModBiomesModifiers::bootstrap),
Set.of(TutorialMod.MOD_ID));
}
}

0 comments on commit f2812e5

Please sign in to comment.