ProcessorLists.java

net.minecraft.data.worldgen.ProcessorLists

信息

  • 全限定名:net.minecraft.data.worldgen.ProcessorLists
  • 类型:public class
  • 包:net.minecraft.data.worldgen
  • 源码路径:src/main/java/net/minecraft/data/worldgen/ProcessorLists.java
  • 起始行号:L35
  • 职责:

    TODO

字段/常量

  • EMPTY

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: private static final
    • 源码定位: L36
    • 说明:

      TODO

  • ZOMBIE_PLAINS

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L37
    • 说明:

      TODO

  • ZOMBIE_SAVANNA

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L38
    • 说明:

      TODO

  • ZOMBIE_SNOWY

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L39
    • 说明:

      TODO

  • ZOMBIE_TAIGA

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L40
    • 说明:

      TODO

  • ZOMBIE_DESERT

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L41
    • 说明:

      TODO

  • MOSSIFY_10_PERCENT

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L42
    • 说明:

      TODO

  • MOSSIFY_20_PERCENT

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L43
    • 说明:

      TODO

  • MOSSIFY_70_PERCENT

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L44
    • 说明:

      TODO

  • STREET_PLAINS

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L45
    • 说明:

      TODO

  • STREET_SAVANNA

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L46
    • 说明:

      TODO

  • STREET_SNOWY_OR_TAIGA

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L47
    • 说明:

      TODO

  • FARM_PLAINS

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L48
    • 说明:

      TODO

  • FARM_SAVANNA

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L49
    • 说明:

      TODO

  • FARM_SNOWY

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L50
    • 说明:

      TODO

  • FARM_TAIGA

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L51
    • 说明:

      TODO

  • FARM_DESERT

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L52
    • 说明:

      TODO

  • OUTPOST_ROT

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L53
    • 说明:

      TODO

  • BOTTOM_RAMPART

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L54
    • 说明:

      TODO

  • TREASURE_ROOMS

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L55
    • 说明:

      TODO

  • HOUSING

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L56
    • 说明:

      TODO

  • SIDE_WALL_DEGRADATION

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L57
    • 说明:

      TODO

  • STABLE_DEGRADATION

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L58
    • 说明:

      TODO

  • BASTION_GENERIC_DEGRADATION

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L59
    • 说明:

      TODO

  • RAMPART_DEGRADATION

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L60
    • 说明:

      TODO

  • ENTRANCE_REPLACEMENT

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L61
    • 说明:

      TODO

  • BRIDGE

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L62
    • 说明:

      TODO

  • ROOF

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L63
    • 说明:

      TODO

  • HIGH_WALL

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L64
    • 说明:

      TODO

  • HIGH_RAMPART

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L65
    • 说明:

      TODO

  • FOSSIL_ROT

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L66
    • 说明:

      TODO

  • FOSSIL_COAL

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L67
    • 说明:

      TODO

  • FOSSIL_DIAMONDS

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L68
    • 说明:

      TODO

  • ANCIENT_CITY_START_DEGRADATION

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L69
    • 说明:

      TODO

  • ANCIENT_CITY_GENERIC_DEGRADATION

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L70
    • 说明:

      TODO

  • ANCIENT_CITY_WALLS_DEGRADATION

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L71
    • 说明:

      TODO

  • TRAIL_RUINS_HOUSES_ARCHAEOLOGY

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L72
    • 说明:

      TODO

  • TRAIL_RUINS_ROADS_ARCHAEOLOGY

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L73
    • 说明:

      TODO

  • TRAIL_RUINS_TOWER_TOP_ARCHAEOLOGY

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L74
    • 说明:

      TODO

  • TRIAL_CHAMBERS_COPPER_BULB_DEGRADATION

    • 类型: ResourceKey<StructureProcessorList>
    • 修饰符: public static final
    • 源码定位: L75
    • 说明:

      TODO

内部类/嵌套类型

构造器

方法

下面的方法块按源码顺序生成。

private static ResourceKey<StructureProcessorList> createKey(String name) @ L77

  • 方法名:createKey
  • 源码定位:L77
  • 返回类型:ResourceKey
  • 修饰符:private static

参数:

  • name: String

说明:

TODO

private static void register(BootstrapContext<StructureProcessorList> context, ResourceKey<StructureProcessorList> id, List<StructureProcessor> processors) @ L81

  • 方法名:register
  • 源码定位:L81
  • 返回类型:void
  • 修饰符:private static

参数:

  • context: BootstrapContext
  • id: ResourceKey
  • processors: List

说明:

TODO

public static void bootstrap(BootstrapContext<StructureProcessorList> context) @ L85

  • 方法名:bootstrap
  • 源码定位:L85
  • 返回类型:void
  • 修饰符:public static

参数:

  • context: BootstrapContext

说明:

TODO

private static CappedProcessor trailsArchyLootProcessor(ResourceKey<LootTable> lootTable, int count) @ L800

  • 方法名:trailsArchyLootProcessor
  • 源码定位:L800
  • 返回类型:CappedProcessor
  • 修饰符:private static

参数:

  • lootTable: ResourceKey
  • count: int

说明:

TODO

代码

public class ProcessorLists {
    private static final ResourceKey<StructureProcessorList> EMPTY = createKey("empty");
    public static final ResourceKey<StructureProcessorList> ZOMBIE_PLAINS = createKey("zombie_plains");
    public static final ResourceKey<StructureProcessorList> ZOMBIE_SAVANNA = createKey("zombie_savanna");
    public static final ResourceKey<StructureProcessorList> ZOMBIE_SNOWY = createKey("zombie_snowy");
    public static final ResourceKey<StructureProcessorList> ZOMBIE_TAIGA = createKey("zombie_taiga");
    public static final ResourceKey<StructureProcessorList> ZOMBIE_DESERT = createKey("zombie_desert");
    public static final ResourceKey<StructureProcessorList> MOSSIFY_10_PERCENT = createKey("mossify_10_percent");
    public static final ResourceKey<StructureProcessorList> MOSSIFY_20_PERCENT = createKey("mossify_20_percent");
    public static final ResourceKey<StructureProcessorList> MOSSIFY_70_PERCENT = createKey("mossify_70_percent");
    public static final ResourceKey<StructureProcessorList> STREET_PLAINS = createKey("street_plains");
    public static final ResourceKey<StructureProcessorList> STREET_SAVANNA = createKey("street_savanna");
    public static final ResourceKey<StructureProcessorList> STREET_SNOWY_OR_TAIGA = createKey("street_snowy_or_taiga");
    public static final ResourceKey<StructureProcessorList> FARM_PLAINS = createKey("farm_plains");
    public static final ResourceKey<StructureProcessorList> FARM_SAVANNA = createKey("farm_savanna");
    public static final ResourceKey<StructureProcessorList> FARM_SNOWY = createKey("farm_snowy");
    public static final ResourceKey<StructureProcessorList> FARM_TAIGA = createKey("farm_taiga");
    public static final ResourceKey<StructureProcessorList> FARM_DESERT = createKey("farm_desert");
    public static final ResourceKey<StructureProcessorList> OUTPOST_ROT = createKey("outpost_rot");
    public static final ResourceKey<StructureProcessorList> BOTTOM_RAMPART = createKey("bottom_rampart");
    public static final ResourceKey<StructureProcessorList> TREASURE_ROOMS = createKey("treasure_rooms");
    public static final ResourceKey<StructureProcessorList> HOUSING = createKey("housing");
    public static final ResourceKey<StructureProcessorList> SIDE_WALL_DEGRADATION = createKey("side_wall_degradation");
    public static final ResourceKey<StructureProcessorList> STABLE_DEGRADATION = createKey("stable_degradation");
    public static final ResourceKey<StructureProcessorList> BASTION_GENERIC_DEGRADATION = createKey("bastion_generic_degradation");
    public static final ResourceKey<StructureProcessorList> RAMPART_DEGRADATION = createKey("rampart_degradation");
    public static final ResourceKey<StructureProcessorList> ENTRANCE_REPLACEMENT = createKey("entrance_replacement");
    public static final ResourceKey<StructureProcessorList> BRIDGE = createKey("bridge");
    public static final ResourceKey<StructureProcessorList> ROOF = createKey("roof");
    public static final ResourceKey<StructureProcessorList> HIGH_WALL = createKey("high_wall");
    public static final ResourceKey<StructureProcessorList> HIGH_RAMPART = createKey("high_rampart");
    public static final ResourceKey<StructureProcessorList> FOSSIL_ROT = createKey("fossil_rot");
    public static final ResourceKey<StructureProcessorList> FOSSIL_COAL = createKey("fossil_coal");
    public static final ResourceKey<StructureProcessorList> FOSSIL_DIAMONDS = createKey("fossil_diamonds");
    public static final ResourceKey<StructureProcessorList> ANCIENT_CITY_START_DEGRADATION = createKey("ancient_city_start_degradation");
    public static final ResourceKey<StructureProcessorList> ANCIENT_CITY_GENERIC_DEGRADATION = createKey("ancient_city_generic_degradation");
    public static final ResourceKey<StructureProcessorList> ANCIENT_CITY_WALLS_DEGRADATION = createKey("ancient_city_walls_degradation");
    public static final ResourceKey<StructureProcessorList> TRAIL_RUINS_HOUSES_ARCHAEOLOGY = createKey("trail_ruins_houses_archaeology");
    public static final ResourceKey<StructureProcessorList> TRAIL_RUINS_ROADS_ARCHAEOLOGY = createKey("trail_ruins_roads_archaeology");
    public static final ResourceKey<StructureProcessorList> TRAIL_RUINS_TOWER_TOP_ARCHAEOLOGY = createKey("trail_ruins_tower_top_archaeology");
    public static final ResourceKey<StructureProcessorList> TRIAL_CHAMBERS_COPPER_BULB_DEGRADATION = createKey("trial_chambers_copper_bulb_degradation");
 
    private static ResourceKey<StructureProcessorList> createKey(String name) {
        return ResourceKey.create(Registries.PROCESSOR_LIST, Identifier.withDefaultNamespace(name));
    }
 
    private static void register(BootstrapContext<StructureProcessorList> context, ResourceKey<StructureProcessorList> id, List<StructureProcessor> processors) {
        context.register(id, new StructureProcessorList(processors));
    }
 
    public static void bootstrap(BootstrapContext<StructureProcessorList> context) {
        HolderGetter<Block> blocks = context.lookup(Registries.BLOCK);
        ProcessorRule ADD_GILDED_BLACKSTONE = new ProcessorRule(
            new RandomBlockMatchTest(Blocks.BLACKSTONE, 0.01F), AlwaysTrueTest.INSTANCE, Blocks.GILDED_BLACKSTONE.defaultBlockState()
        );
        ProcessorRule REMOVE_GILDED_BLACKSTONE = new ProcessorRule(
            new RandomBlockMatchTest(Blocks.GILDED_BLACKSTONE, 0.5F), AlwaysTrueTest.INSTANCE, Blocks.BLACKSTONE.defaultBlockState()
        );
        register(context, EMPTY, ImmutableList.of());
        register(
            context,
            ZOMBIE_PLAINS,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.COBBLESTONE, 0.8F), AlwaysTrueTest.INSTANCE, Blocks.MOSSY_COBBLESTONE.defaultBlockState()
                        ),
                        new ProcessorRule(new TagMatchTest(BlockTags.DOORS), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.TORCH), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.WALL_TORCH), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.COBBLESTONE, 0.07F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.MOSSY_COBBLESTONE, 0.07F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHITE_TERRACOTTA, 0.07F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.OAK_LOG, 0.05F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.OAK_PLANKS, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.OAK_STAIRS, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.STRIPPED_OAK_LOG, 0.02F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.GLASS_PANE, 0.5F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(
                            new BlockStateMatchTest(
                                Blocks.GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.NORTH, true).setValue(IronBarsBlock.SOUTH, true)
                            ),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.BROWN_STAINED_GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.NORTH, true).setValue(IronBarsBlock.SOUTH, true)
                        ),
                        new ProcessorRule(
                            new BlockStateMatchTest(Blocks.GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.EAST, true).setValue(IronBarsBlock.WEST, true)),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.BROWN_STAINED_GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.EAST, true).setValue(IronBarsBlock.WEST, true)
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.3F), AlwaysTrueTest.INSTANCE, Blocks.CARROTS.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.2F), AlwaysTrueTest.INSTANCE, Blocks.POTATOES.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.BEETROOTS.defaultBlockState())
                    )
                )
            )
        );
        register(
            context,
            ZOMBIE_SAVANNA,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(new TagMatchTest(BlockTags.DOORS), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.TORCH), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.WALL_TORCH), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.ACACIA_PLANKS, 0.2F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.ACACIA_STAIRS, 0.2F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.ACACIA_LOG, 0.05F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.ACACIA_WOOD, 0.05F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.ORANGE_TERRACOTTA, 0.05F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.YELLOW_TERRACOTTA, 0.05F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.RED_TERRACOTTA, 0.05F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.GLASS_PANE, 0.5F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(
                            new BlockStateMatchTest(
                                Blocks.GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.NORTH, true).setValue(IronBarsBlock.SOUTH, true)
                            ),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.BROWN_STAINED_GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.NORTH, true).setValue(IronBarsBlock.SOUTH, true)
                        ),
                        new ProcessorRule(
                            new BlockStateMatchTest(Blocks.GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.EAST, true).setValue(IronBarsBlock.WEST, true)),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.BROWN_STAINED_GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.EAST, true).setValue(IronBarsBlock.WEST, true)
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.MELON_STEM.defaultBlockState())
                    )
                )
            )
        );
        register(
            context,
            ZOMBIE_SNOWY,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(new TagMatchTest(BlockTags.DOORS), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.TORCH), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.WALL_TORCH), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.LANTERN), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.SPRUCE_PLANKS, 0.2F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.SPRUCE_SLAB, 0.4F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.STRIPPED_SPRUCE_LOG, 0.05F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.STRIPPED_SPRUCE_WOOD, 0.05F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.GLASS_PANE, 0.5F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(
                            new BlockStateMatchTest(
                                Blocks.GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.NORTH, true).setValue(IronBarsBlock.SOUTH, true)
                            ),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.BROWN_STAINED_GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.NORTH, true).setValue(IronBarsBlock.SOUTH, true)
                        ),
                        new ProcessorRule(
                            new BlockStateMatchTest(Blocks.GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.EAST, true).setValue(IronBarsBlock.WEST, true)),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.BROWN_STAINED_GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.EAST, true).setValue(IronBarsBlock.WEST, true)
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.CARROTS.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.8F), AlwaysTrueTest.INSTANCE, Blocks.POTATOES.defaultBlockState())
                    )
                )
            )
        );
        register(
            context,
            ZOMBIE_TAIGA,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.COBBLESTONE, 0.8F), AlwaysTrueTest.INSTANCE, Blocks.MOSSY_COBBLESTONE.defaultBlockState()
                        ),
                        new ProcessorRule(new TagMatchTest(BlockTags.DOORS), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.TORCH), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.WALL_TORCH), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(
                            new BlockMatchTest(Blocks.CAMPFIRE),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CAMPFIRE.defaultBlockState().setValue(CampfireBlock.LIT, false)
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.COBBLESTONE, 0.08F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.SPRUCE_LOG, 0.08F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.GLASS_PANE, 0.5F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(
                            new BlockStateMatchTest(
                                Blocks.GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.NORTH, true).setValue(IronBarsBlock.SOUTH, true)
                            ),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.BROWN_STAINED_GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.NORTH, true).setValue(IronBarsBlock.SOUTH, true)
                        ),
                        new ProcessorRule(
                            new BlockStateMatchTest(Blocks.GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.EAST, true).setValue(IronBarsBlock.WEST, true)),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.BROWN_STAINED_GLASS_PANE.defaultBlockState().setValue(IronBarsBlock.EAST, true).setValue(IronBarsBlock.WEST, true)
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.3F), AlwaysTrueTest.INSTANCE, Blocks.PUMPKIN_STEM.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.2F), AlwaysTrueTest.INSTANCE, Blocks.POTATOES.defaultBlockState())
                    )
                )
            )
        );
        register(
            context,
            ZOMBIE_DESERT,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(new TagMatchTest(BlockTags.DOORS), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.TORCH), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.WALL_TORCH), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.SMOOTH_SANDSTONE, 0.08F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.CUT_SANDSTONE, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.TERRACOTTA, 0.08F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.SMOOTH_SANDSTONE_STAIRS, 0.08F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.SMOOTH_SANDSTONE_SLAB, 0.08F), AlwaysTrueTest.INSTANCE, Blocks.COBWEB.defaultBlockState()
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.2F), AlwaysTrueTest.INSTANCE, Blocks.BEETROOTS.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.MELON_STEM.defaultBlockState())
                    )
                )
            )
        );
        register(
            context,
            MOSSIFY_10_PERCENT,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.COBBLESTONE, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.MOSSY_COBBLESTONE.defaultBlockState()
                        )
                    )
                )
            )
        );
        register(
            context,
            MOSSIFY_20_PERCENT,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.COBBLESTONE, 0.2F), AlwaysTrueTest.INSTANCE, Blocks.MOSSY_COBBLESTONE.defaultBlockState()
                        )
                    )
                )
            )
        );
        register(
            context,
            MOSSIFY_70_PERCENT,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.COBBLESTONE, 0.7F), AlwaysTrueTest.INSTANCE, Blocks.MOSSY_COBBLESTONE.defaultBlockState()
                        )
                    )
                )
            )
        );
        register(
            context,
            STREET_PLAINS,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(new BlockMatchTest(Blocks.DIRT_PATH), new BlockMatchTest(Blocks.WATER), Blocks.OAK_PLANKS.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.DIRT_PATH, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.GRASS_BLOCK.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.GRASS_BLOCK), new BlockMatchTest(Blocks.WATER), Blocks.WATER.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.DIRT), new BlockMatchTest(Blocks.WATER), Blocks.WATER.defaultBlockState())
                    )
                )
            )
        );
        register(
            context,
            STREET_SAVANNA,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(new BlockMatchTest(Blocks.DIRT_PATH), new BlockMatchTest(Blocks.WATER), Blocks.ACACIA_PLANKS.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.DIRT_PATH, 0.2F), AlwaysTrueTest.INSTANCE, Blocks.GRASS_BLOCK.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.GRASS_BLOCK), new BlockMatchTest(Blocks.WATER), Blocks.WATER.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.DIRT), new BlockMatchTest(Blocks.WATER), Blocks.WATER.defaultBlockState())
                    )
                )
            )
        );
        register(
            context,
            STREET_SNOWY_OR_TAIGA,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(new BlockMatchTest(Blocks.DIRT_PATH), new BlockMatchTest(Blocks.WATER), Blocks.SPRUCE_PLANKS.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.DIRT_PATH), new BlockMatchTest(Blocks.ICE), Blocks.SPRUCE_PLANKS.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.DIRT_PATH, 0.2F), AlwaysTrueTest.INSTANCE, Blocks.GRASS_BLOCK.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.GRASS_BLOCK), new BlockMatchTest(Blocks.WATER), Blocks.WATER.defaultBlockState()),
                        new ProcessorRule(new BlockMatchTest(Blocks.DIRT), new BlockMatchTest(Blocks.WATER), Blocks.WATER.defaultBlockState())
                    )
                )
            )
        );
        register(
            context,
            FARM_PLAINS,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.3F), AlwaysTrueTest.INSTANCE, Blocks.CARROTS.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.2F), AlwaysTrueTest.INSTANCE, Blocks.POTATOES.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.BEETROOTS.defaultBlockState())
                    )
                )
            )
        );
        register(
            context,
            FARM_SAVANNA,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.MELON_STEM.defaultBlockState())
                    )
                )
            )
        );
        register(
            context,
            FARM_SNOWY,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.CARROTS.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.8F), AlwaysTrueTest.INSTANCE, Blocks.POTATOES.defaultBlockState())
                    )
                )
            )
        );
        register(
            context,
            FARM_TAIGA,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.3F), AlwaysTrueTest.INSTANCE, Blocks.PUMPKIN_STEM.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.2F), AlwaysTrueTest.INSTANCE, Blocks.POTATOES.defaultBlockState())
                    )
                )
            )
        );
        register(
            context,
            FARM_DESERT,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.2F), AlwaysTrueTest.INSTANCE, Blocks.BEETROOTS.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.WHEAT, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.MELON_STEM.defaultBlockState())
                    )
                )
            )
        );
        register(context, OUTPOST_ROT, ImmutableList.of(new BlockRotProcessor(0.05F)));
        register(
            context,
            BOTTOM_RAMPART,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.MAGMA_BLOCK, 0.75F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS, 0.15F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        REMOVE_GILDED_BLACKSTONE,
                        ADD_GILDED_BLACKSTONE
                    )
                )
            )
        );
        register(
            context,
            TREASURE_ROOMS,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS, 0.35F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.CHISELED_POLISHED_BLACKSTONE, 0.1F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        REMOVE_GILDED_BLACKSTONE,
                        ADD_GILDED_BLACKSTONE
                    )
                )
            )
        );
        register(
            context,
            HOUSING,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS, 0.3F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.BLACKSTONE, 1.0E-4F), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        REMOVE_GILDED_BLACKSTONE,
                        ADD_GILDED_BLACKSTONE
                    )
                )
            )
        );
        register(
            context,
            SIDE_WALL_DEGRADATION,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.CHISELED_POLISHED_BLACKSTONE, 0.5F), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.GOLD_BLOCK, 0.1F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        REMOVE_GILDED_BLACKSTONE,
                        ADD_GILDED_BLACKSTONE
                    )
                )
            )
        );
        register(
            context,
            STABLE_DEGRADATION,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS, 0.1F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.BLACKSTONE, 1.0E-4F), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        REMOVE_GILDED_BLACKSTONE,
                        ADD_GILDED_BLACKSTONE
                    )
                )
            )
        );
        register(
            context,
            BASTION_GENERIC_DEGRADATION,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS, 0.3F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.BLACKSTONE, 1.0E-4F), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.GOLD_BLOCK, 0.3F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        REMOVE_GILDED_BLACKSTONE,
                        ADD_GILDED_BLACKSTONE
                    )
                )
            )
        );
        register(
            context,
            RAMPART_DEGRADATION,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS, 0.4F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.BLACKSTONE, 0.01F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS, 1.0E-4F), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.BLACKSTONE, 1.0E-4F), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.GOLD_BLOCK, 0.3F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        REMOVE_GILDED_BLACKSTONE,
                        ADD_GILDED_BLACKSTONE
                    )
                )
            )
        );
        register(
            context,
            ENTRANCE_REPLACEMENT,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.CHISELED_POLISHED_BLACKSTONE, 0.5F), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.GOLD_BLOCK, 0.6F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        REMOVE_GILDED_BLACKSTONE,
                        ADD_GILDED_BLACKSTONE
                    )
                )
            )
        );
        register(
            context,
            BRIDGE,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS, 0.3F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.BLACKSTONE, 1.0E-4F), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState())
                    )
                )
            )
        );
        register(
            context,
            ROOF,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS, 0.3F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS, 0.15F), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS, 0.3F), AlwaysTrueTest.INSTANCE, Blocks.BLACKSTONE.defaultBlockState()
                        )
                    )
                )
            )
        );
        register(
            context,
            HIGH_WALL,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS, 0.01F), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS, 0.5F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.POLISHED_BLACKSTONE_BRICKS, 0.3F), AlwaysTrueTest.INSTANCE, Blocks.BLACKSTONE.defaultBlockState()
                        ),
                        REMOVE_GILDED_BLACKSTONE
                    )
                )
            )
        );
        register(
            context,
            HIGH_RAMPART,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.GOLD_BLOCK, 0.3F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_POLISHED_BLACKSTONE_BRICKS.defaultBlockState()
                        ),
                        new ProcessorRule(
                            AlwaysTrueTest.INSTANCE,
                            AlwaysTrueTest.INSTANCE,
                            new AxisAlignedLinearPosTest(0.0F, 0.05F, 0, 100, Direction.Axis.Y),
                            Blocks.AIR.defaultBlockState()
                        ),
                        REMOVE_GILDED_BLACKSTONE
                    )
                )
            )
        );
        register(context, FOSSIL_ROT, ImmutableList.of(new BlockRotProcessor(0.9F), new ProtectedBlockProcessor(BlockTags.FEATURES_CANNOT_REPLACE)));
        register(context, FOSSIL_COAL, ImmutableList.of(new BlockRotProcessor(0.1F), new ProtectedBlockProcessor(BlockTags.FEATURES_CANNOT_REPLACE)));
        register(
            context,
            FOSSIL_DIAMONDS,
            ImmutableList.of(
                new BlockRotProcessor(0.1F),
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(new BlockMatchTest(Blocks.COAL_ORE), AlwaysTrueTest.INSTANCE, Blocks.DEEPSLATE_DIAMOND_ORE.defaultBlockState())
                    )
                ),
                new ProtectedBlockProcessor(BlockTags.FEATURES_CANNOT_REPLACE)
            )
        );
        register(
            context,
            ANCIENT_CITY_START_DEGRADATION,
            ImmutableList.of(
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.DEEPSLATE_BRICKS, 0.3F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_DEEPSLATE_BRICKS.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.DEEPSLATE_TILES, 0.3F), AlwaysTrueTest.INSTANCE, Blocks.CRACKED_DEEPSLATE_TILES.defaultBlockState()
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.SOUL_LANTERN, 0.05F), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState())
                    )
                ),
                new ProtectedBlockProcessor(BlockTags.FEATURES_CANNOT_REPLACE)
            )
        );
        register(
            context,
            ANCIENT_CITY_GENERIC_DEGRADATION,
            ImmutableList.of(
                new BlockRotProcessor(blocks.getOrThrow(BlockTags.ANCIENT_CITY_REPLACEABLE), 0.95F),
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.DEEPSLATE_BRICKS, 0.3F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_DEEPSLATE_BRICKS.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.DEEPSLATE_TILES, 0.3F), AlwaysTrueTest.INSTANCE, Blocks.CRACKED_DEEPSLATE_TILES.defaultBlockState()
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.SOUL_LANTERN, 0.05F), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState())
                    )
                ),
                new ProtectedBlockProcessor(BlockTags.FEATURES_CANNOT_REPLACE)
            )
        );
        register(
            context,
            ANCIENT_CITY_WALLS_DEGRADATION,
            ImmutableList.of(
                new BlockRotProcessor(blocks.getOrThrow(BlockTags.ANCIENT_CITY_REPLACEABLE), 0.95F),
                new RuleProcessor(
                    ImmutableList.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.DEEPSLATE_BRICKS, 0.3F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.CRACKED_DEEPSLATE_BRICKS.defaultBlockState()
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.DEEPSLATE_TILES, 0.3F), AlwaysTrueTest.INSTANCE, Blocks.CRACKED_DEEPSLATE_TILES.defaultBlockState()
                        ),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.DEEPSLATE_TILE_SLAB, 0.3F), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.SOUL_LANTERN, 0.05F), AlwaysTrueTest.INSTANCE, Blocks.AIR.defaultBlockState())
                    )
                ),
                new ProtectedBlockProcessor(BlockTags.FEATURES_CANNOT_REPLACE)
            )
        );
        register(
            context,
            TRAIL_RUINS_HOUSES_ARCHAEOLOGY,
            List.of(
                new RuleProcessor(
                    List.of(
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.GRAVEL, 0.2F), AlwaysTrueTest.INSTANCE, Blocks.DIRT.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.GRAVEL, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.COARSE_DIRT.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.MUD_BRICKS, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.PACKED_MUD.defaultBlockState())
                    )
                ),
                trailsArchyLootProcessor(BuiltInLootTables.TRAIL_RUINS_ARCHAEOLOGY_COMMON, 6),
                trailsArchyLootProcessor(BuiltInLootTables.TRAIL_RUINS_ARCHAEOLOGY_RARE, 3)
            )
        );
        register(
            context,
            TRAIL_RUINS_ROADS_ARCHAEOLOGY,
            List.of(
                new RuleProcessor(
                    List.of(
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.GRAVEL, 0.2F), AlwaysTrueTest.INSTANCE, Blocks.DIRT.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.GRAVEL, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.COARSE_DIRT.defaultBlockState()),
                        new ProcessorRule(new RandomBlockMatchTest(Blocks.MUD_BRICKS, 0.1F), AlwaysTrueTest.INSTANCE, Blocks.PACKED_MUD.defaultBlockState())
                    )
                ),
                trailsArchyLootProcessor(BuiltInLootTables.TRAIL_RUINS_ARCHAEOLOGY_COMMON, 2)
            )
        );
        register(context, TRAIL_RUINS_TOWER_TOP_ARCHAEOLOGY, List.of(trailsArchyLootProcessor(BuiltInLootTables.TRAIL_RUINS_ARCHAEOLOGY_COMMON, 2)));
        register(
            context,
            TRIAL_CHAMBERS_COPPER_BULB_DEGRADATION,
            List.of(
                new RuleProcessor(
                    List.of(
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.WAXED_COPPER_BULB, 0.1F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.WAXED_OXIDIZED_COPPER_BULB.defaultBlockState().setValue(CopperBulbBlock.LIT, true)
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.WAXED_COPPER_BULB, 0.33333334F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.WAXED_WEATHERED_COPPER_BULB.defaultBlockState().setValue(CopperBulbBlock.LIT, true)
                        ),
                        new ProcessorRule(
                            new RandomBlockMatchTest(Blocks.WAXED_COPPER_BULB, 0.5F),
                            AlwaysTrueTest.INSTANCE,
                            Blocks.WAXED_EXPOSED_COPPER_BULB.defaultBlockState().setValue(CopperBulbBlock.LIT, true)
                        )
                    )
                ),
                new ProtectedBlockProcessor(BlockTags.FEATURES_CANNOT_REPLACE)
            )
        );
    }
 
    private static CappedProcessor trailsArchyLootProcessor(ResourceKey<LootTable> lootTable, int count) {
        return new CappedProcessor(
            new RuleProcessor(
                List.of(
                    new ProcessorRule(
                        new TagMatchTest(BlockTags.TRAIL_RUINS_REPLACEABLE),
                        AlwaysTrueTest.INSTANCE,
                        PosAlwaysTrueTest.INSTANCE,
                        Blocks.SUSPICIOUS_GRAVEL.defaultBlockState(),
                        new AppendLoot(lootTable)
                    )
                )
            ),
            ConstantInt.of(count)
        );
    }
}

引用的其他类