Surface rule builder fixes
This commit is contained in:
parent
8809fa7dbc
commit
3a06c128ed
5 changed files with 22 additions and 28 deletions
|
@ -4,10 +4,15 @@ import net.fabricmc.api.EnvType;
|
|||
import net.fabricmc.api.ModInitializer;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
import net.minecraft.resources.ResourceLocation;
|
||||
import net.minecraft.world.level.biome.Biomes;
|
||||
import net.minecraft.world.level.block.Blocks;
|
||||
import net.minecraft.world.level.levelgen.Noises;
|
||||
import net.minecraft.world.level.levelgen.SurfaceRules;
|
||||
import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource;
|
||||
import ru.bclib.api.TagAPI;
|
||||
import ru.bclib.api.WorldDataAPI;
|
||||
import ru.bclib.api.biomes.BiomeAPI;
|
||||
import ru.bclib.api.biomes.SurfaceRuleBuilder;
|
||||
import ru.bclib.api.dataexchange.DataExchangeAPI;
|
||||
import ru.bclib.api.dataexchange.handler.autosync.Chunker;
|
||||
import ru.bclib.api.dataexchange.handler.autosync.HelloClient;
|
||||
|
@ -51,6 +56,16 @@ public class BCLib implements ModInitializer {
|
|||
|
||||
BCLibPatch.register();
|
||||
Configs.save();
|
||||
|
||||
RuleSource rule = SurfaceRuleBuilder
|
||||
.start()
|
||||
.biome(Biomes.END_HIGHLANDS)
|
||||
.filler(Blocks.STONE.defaultBlockState())
|
||||
.subsurface(Blocks.DIRT.defaultBlockState(), 3)
|
||||
.surface(Blocks.GRASS_BLOCK.defaultBlockState())
|
||||
.ceil(Blocks.DEEPSLATE.defaultBlockState())
|
||||
.build();
|
||||
BiomeAPI.addSurfaceRule(Biomes.END_HIGHLANDS.location(), rule);
|
||||
}
|
||||
|
||||
public static boolean isDevEnvironment() {
|
||||
|
@ -64,9 +79,4 @@ public class BCLib implements ModInitializer {
|
|||
public static ResourceLocation makeID(String path) {
|
||||
return new ResourceLocation(MOD_ID, path);
|
||||
}
|
||||
|
||||
private static SurfaceRules.ConditionSource surfaceNoiseAbove(double d) {
|
||||
|
||||
return SurfaceRules.noiseCondition(Noises.SURFACE, d / 8.25, Double.MAX_VALUE);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -21,7 +21,6 @@ import ru.bclib.interfaces.PostInitable;
|
|||
import ru.bclib.interfaces.RenderLayerProvider;
|
||||
import ru.bclib.interfaces.TagProvider;
|
||||
import ru.bclib.registry.BaseBlockEntities;
|
||||
import ru.bclib.util.CollectionsUtil;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.function.Consumer;
|
||||
|
@ -93,8 +92,8 @@ public class PostInitAPI {
|
|||
}
|
||||
if (block instanceof TagProvider) {
|
||||
TagProvider.class.cast(block).addTags(blockTags, itemTags);
|
||||
TagAPI.addTags(block, CollectionsUtil.toArray(blockTags));
|
||||
TagAPI.addTags(block, CollectionsUtil.toArray(itemTags));
|
||||
blockTags.forEach(tag -> TagAPI.addTag(tag, block));
|
||||
itemTags.forEach(tag -> TagAPI.addTag(tag, block));
|
||||
blockTags.clear();
|
||||
itemTags.clear();
|
||||
}
|
||||
|
|
|
@ -439,7 +439,7 @@ public class BiomeAPI {
|
|||
SurfaceRuleProvider provider = SurfaceRuleProvider.class.cast(generator);
|
||||
if (rules.size() > 0) {
|
||||
rules.add(provider.getSurfaceRule());
|
||||
provider.setSurfaceRule(SurfaceRules.sequence(CollectionsUtil.toArray(rules)));
|
||||
provider.setSurfaceRule(SurfaceRules.sequence(rules.toArray(new SurfaceRules.RuleSource[rules.size()])));
|
||||
}
|
||||
else {
|
||||
provider.setSurfaceRule(null);
|
||||
|
|
|
@ -8,7 +8,6 @@ import net.minecraft.world.level.block.state.BlockState;
|
|||
import net.minecraft.world.level.levelgen.SurfaceRules;
|
||||
import net.minecraft.world.level.levelgen.SurfaceRules.RuleSource;
|
||||
import net.minecraft.world.level.levelgen.placement.CaveSurface;
|
||||
import ru.bclib.util.CollectionsUtil;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
@ -57,7 +56,8 @@ public class SurfaceRuleBuilder {
|
|||
public SurfaceRuleBuilder surface(BlockState state) {
|
||||
entryInstance = getFromCache("surface_" + state.toString(), () -> {
|
||||
RuleSource rule = SurfaceRules.state(state);
|
||||
return new SurfaceRuleEntry(1, SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, rule));
|
||||
rule = SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, rule);
|
||||
return new SurfaceRuleEntry(1, rule);
|
||||
});
|
||||
rules.add(entryInstance);
|
||||
return this;
|
||||
|
@ -73,7 +73,7 @@ public class SurfaceRuleBuilder {
|
|||
entryInstance = getFromCache("subsurface_" + depth + "_" + state.toString(), () -> {
|
||||
RuleSource rule = SurfaceRules.state(state);
|
||||
rule = SurfaceRules.ifTrue(SurfaceRules.stoneDepthCheck(depth, false, false, CaveSurface.FLOOR), rule);
|
||||
return new SurfaceRuleEntry(2, SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, rule));
|
||||
return new SurfaceRuleEntry(2, rule);
|
||||
});
|
||||
rules.add(entryInstance);
|
||||
return this;
|
||||
|
@ -131,7 +131,7 @@ public class SurfaceRuleBuilder {
|
|||
public SurfaceRules.RuleSource build() {
|
||||
Collections.sort(rules);
|
||||
List<SurfaceRules.RuleSource> ruleList = rules.stream().map(entry -> entry.getRule()).toList();
|
||||
SurfaceRules.RuleSource[] ruleArray = CollectionsUtil.toArray(ruleList);
|
||||
SurfaceRules.RuleSource[] ruleArray = ruleList.toArray(new SurfaceRules.RuleSource[ruleList.size()]);
|
||||
SurfaceRules.RuleSource rule = SurfaceRules.sequence(ruleArray);
|
||||
if (biomeKey != null) {
|
||||
rule = SurfaceRules.ifTrue(SurfaceRules.isBiome(biomeKey), rule);
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package ru.bclib.util;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
@ -44,18 +43,4 @@ public class CollectionsUtil {
|
|||
}
|
||||
return new HashMap<>(map);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts list into array.
|
||||
* @param list {@link List} to convert.
|
||||
* @return array of list elements. If list is empty will return empty {@link Object} array.
|
||||
*/
|
||||
public static <E> E[] toArray(List<E> list) {
|
||||
if (list.isEmpty()) {
|
||||
return (E[]) new Object[0];
|
||||
}
|
||||
E[] result = (E[]) Array.newInstance(list.get(0).getClass(), list.size());
|
||||
result = list.toArray(result);
|
||||
return result;
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue