From 3a06c128ed3634ac41c9f41b44649d610ed05c9c Mon Sep 17 00:00:00 2001 From: paulevsGitch Date: Sat, 4 Dec 2021 11:52:58 +0300 Subject: [PATCH] Surface rule builder fixes --- src/main/java/ru/bclib/BCLib.java | 20 ++++++++++++++----- src/main/java/ru/bclib/api/PostInitAPI.java | 5 ++--- .../java/ru/bclib/api/biomes/BiomeAPI.java | 2 +- .../bclib/api/biomes/SurfaceRuleBuilder.java | 8 ++++---- .../java/ru/bclib/util/CollectionsUtil.java | 15 -------------- 5 files changed, 22 insertions(+), 28 deletions(-) diff --git a/src/main/java/ru/bclib/BCLib.java b/src/main/java/ru/bclib/BCLib.java index 5066dcd2..efaa5042 100644 --- a/src/main/java/ru/bclib/BCLib.java +++ b/src/main/java/ru/bclib/BCLib.java @@ -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); - } } diff --git a/src/main/java/ru/bclib/api/PostInitAPI.java b/src/main/java/ru/bclib/api/PostInitAPI.java index 4f0db942..63b2c1d5 100644 --- a/src/main/java/ru/bclib/api/PostInitAPI.java +++ b/src/main/java/ru/bclib/api/PostInitAPI.java @@ -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(); } diff --git a/src/main/java/ru/bclib/api/biomes/BiomeAPI.java b/src/main/java/ru/bclib/api/biomes/BiomeAPI.java index 0367f9a4..9bad5eee 100644 --- a/src/main/java/ru/bclib/api/biomes/BiomeAPI.java +++ b/src/main/java/ru/bclib/api/biomes/BiomeAPI.java @@ -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); diff --git a/src/main/java/ru/bclib/api/biomes/SurfaceRuleBuilder.java b/src/main/java/ru/bclib/api/biomes/SurfaceRuleBuilder.java index 44ec50ee..2f75f94e 100644 --- a/src/main/java/ru/bclib/api/biomes/SurfaceRuleBuilder.java +++ b/src/main/java/ru/bclib/api/biomes/SurfaceRuleBuilder.java @@ -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 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); diff --git a/src/main/java/ru/bclib/util/CollectionsUtil.java b/src/main/java/ru/bclib/util/CollectionsUtil.java index a7309cab..e7b472c9 100644 --- a/src/main/java/ru/bclib/util/CollectionsUtil.java +++ b/src/main/java/ru/bclib/util/CollectionsUtil.java @@ -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[] toArray(List 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; - }; }