Skip to content

Commit

Permalink
create feature category system so configuring feature filter is faster
Browse files Browse the repository at this point in the history
  • Loading branch information
Pixaurora committed Dec 6, 2023
1 parent b09481a commit 371dfed
Show file tree
Hide file tree
Showing 6 changed files with 88 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
import net.pixaurora.janerator.graphing.grapher.FunctionGrapher;
import net.pixaurora.janerator.shade.JaneratorLayer;
import net.pixaurora.janerator.shade.method.NormalShading;
import net.pixaurora.janerator.worldgen.FeatureFilter;
import net.pixaurora.janerator.worldgen.feature.FeatureFilter;
import net.pixaurora.janerator.worldgen.generator.MultiGenOrganizer;

public class ConfigFileManager {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.pixaurora.janerator.worldgen.FeatureFilter;
import net.pixaurora.janerator.worldgen.feature.FeatureFilter;
import net.pixaurora.janerator.worldgen.generator.MultiGenerator;

public class JaneratorConfig {
Expand Down
26 changes: 0 additions & 26 deletions src/main/java/net/pixaurora/janerator/worldgen/FeatureFilter.java

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package net.pixaurora.janerator.worldgen.feature;

import java.util.List;

import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder;

import net.minecraft.core.Holder;
import net.minecraft.core.HolderSet;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;

public class FeatureFilter {
public static final Codec<FeatureFilter> CODEC = RecordCodecBuilder.create(
instance -> instance.group(
ConfiguredFeature.LIST_CODEC.fieldOf("features").forGetter(filter -> filter.individualFeatures),
HandpickedFeatureCategory.CODEC.listOf().fieldOf("preset_categories").forGetter(filter -> filter.presetCategories)
).apply(instance, FeatureFilter::new)
);

private final HolderSet<ConfiguredFeature<?, ?>> individualFeatures;
private final List<HandpickedFeatureCategory> presetCategories;

private final List<ResourceKey<ConfiguredFeature<?, ?>>> categorizedKeys;

public FeatureFilter(HolderSet<ConfiguredFeature<?, ?>> individualFeatures, List<HandpickedFeatureCategory> handpickedCategories) {
this.individualFeatures = individualFeatures;
this.presetCategories = handpickedCategories;

this.categorizedKeys = handpickedCategories.stream().flatMap(features -> features.includedFeatures().stream()).toList();
}

public static FeatureFilter defaultInstance() {
return new FeatureFilter(HolderSet.direct(List.of()), List.of());
}

public boolean filtersOut(Holder<ConfiguredFeature<?, ?>> feature) {
return this.individualFeatures.contains(feature)
|| feature.unwrapKey().map(featureKey -> this.categorizedKeys.contains(featureKey)).orElse(false);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
package net.pixaurora.janerator.worldgen.feature;

import java.util.List;

import com.mojang.serialization.Codec;

import net.minecraft.data.worldgen.features.TreeFeatures;
import net.minecraft.data.worldgen.features.VegetationFeatures;
import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
import net.pixaurora.janerator.config.EnumCodec;

public enum HandpickedFeatureCategory {
ALL_TREES(List.of(TreeFeatures.ACACIA, TreeFeatures.AZALEA_TREE, TreeFeatures.BIRCH, TreeFeatures.BIRCH_BEES_0002,
TreeFeatures.BIRCH_BEES_002, TreeFeatures.BIRCH_BEES_005, TreeFeatures.CHERRY, TreeFeatures.CHERRY_BEES_005,
TreeFeatures.CRIMSON_FUNGUS, TreeFeatures.CRIMSON_FUNGUS_PLANTED, TreeFeatures.DARK_OAK, TreeFeatures.FANCY_OAK,
TreeFeatures.FANCY_OAK_BEES, TreeFeatures.FANCY_OAK_BEES_0002, TreeFeatures.FANCY_OAK_BEES_002, TreeFeatures.FANCY_OAK_BEES_005,
TreeFeatures.HUGE_BROWN_MUSHROOM, TreeFeatures.HUGE_RED_MUSHROOM, TreeFeatures.JUNGLE_BUSH, TreeFeatures.JUNGLE_TREE,
TreeFeatures.JUNGLE_TREE_NO_VINE, TreeFeatures.MANGROVE, TreeFeatures.MEGA_JUNGLE_TREE, TreeFeatures.MEGA_PINE,
TreeFeatures.MEGA_SPRUCE, TreeFeatures.OAK, TreeFeatures.OAK_BEES_0002, TreeFeatures.OAK_BEES_002, TreeFeatures.OAK_BEES_005,
TreeFeatures.PINE, TreeFeatures.SPRUCE, TreeFeatures.SUPER_BIRCH_BEES, TreeFeatures.SUPER_BIRCH_BEES_0002, TreeFeatures.SWAMP_OAK,
TreeFeatures.TALL_MANGROVE, TreeFeatures.WARPED_FUNGUS, TreeFeatures.WARPED_FUNGUS_PLANTED, VegetationFeatures.BAMBOO_NO_PODZOL,
VegetationFeatures.BAMBOO_SOME_PODZOL, VegetationFeatures.BAMBOO_VEGETATION, VegetationFeatures.BIRCH_TALL,
VegetationFeatures.DARK_FOREST_VEGETATION, VegetationFeatures.MANGROVE_VEGETATION, VegetationFeatures.MEADOW_TREES,
VegetationFeatures.MUSHROOM_ISLAND_VEGETATION, VegetationFeatures.TREES_BIRCH_AND_OAK, VegetationFeatures.TREES_GROVE,
VegetationFeatures.TREES_JUNGLE, VegetationFeatures.TREES_OLD_GROWTH_PINE_TAIGA, VegetationFeatures.TREES_OLD_GROWTH_SPRUCE_TAIGA,
VegetationFeatures.TREES_PLAINS, VegetationFeatures.TREES_SAVANNA, VegetationFeatures.TREES_SPARSE_JUNGLE,
VegetationFeatures.TREES_TAIGA, VegetationFeatures.TREES_WATER, VegetationFeatures.TREES_WINDSWEPT_HILLS));

public static final Codec<HandpickedFeatureCategory> CODEC = new EnumCodec<HandpickedFeatureCategory>(
"Hardcoded Feature Categories",
values()
);

private final List<ResourceKey<ConfiguredFeature<?, ?>>> includedFeatures;

HandpickedFeatureCategory(List<ResourceKey<ConfiguredFeature<?, ?>>> includedFeatures) {
this.includedFeatures = includedFeatures;
}

public List<ResourceKey<ConfiguredFeature<?, ?>>> includedFeatures() {
return this.includedFeatures;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@
import net.minecraft.world.level.levelgen.RandomState;
import net.minecraft.world.level.levelgen.blending.Blender;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplateManager;
import net.pixaurora.janerator.worldgen.FeatureFilter;
import net.pixaurora.janerator.worldgen.GeneratorLookup;
import net.pixaurora.janerator.worldgen.PlacementSelection;
import net.pixaurora.janerator.worldgen.WrappedBiomeResolver;
import net.pixaurora.janerator.worldgen.feature.FeatureFilter;

public class MultiGenerator extends ChunkGenerator {
private MultiGenOrganizer organizer;
Expand Down

0 comments on commit 371dfed

Please sign in to comment.