Refactored BCLib Package Structure

This commit is contained in:
Frank 2022-06-07 16:44:14 +02:00
parent c658a24750
commit f6d5f85ec1
206 changed files with 974 additions and 945 deletions

View file

@ -11,13 +11,16 @@ import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.impl.biome.NetherBiomeData; import net.fabricmc.fabric.impl.biome.NetherBiomeData;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import org.betterx.bclib.api.WorldDataAPI; import org.betterx.bclib.api.v2.WorldDataAPI;
import org.betterx.bclib.api.dataexchange.DataExchangeAPI; import org.betterx.bclib.api.v2.dataexchange.DataExchangeAPI;
import org.betterx.bclib.api.dataexchange.handler.autosync.*; import org.betterx.bclib.api.v2.dataexchange.handler.autosync.*;
import org.betterx.bclib.api.features.blockpredicates.Types; import org.betterx.bclib.api.v2.generator.BCLibEndBiomeSource;
import org.betterx.bclib.api.features.placement.PlacementModifiers; import org.betterx.bclib.api.v2.generator.BCLibNetherBiomeSource;
import org.betterx.bclib.api.surface.rules.Conditions; import org.betterx.bclib.api.v2.generator.GeneratorOptions;
import org.betterx.bclib.api.tag.TagAPI; import org.betterx.bclib.api.v2.levelgen.features.blockpredicates.Types;
import org.betterx.bclib.api.v2.levelgen.features.placement.PlacementModifiers;
import org.betterx.bclib.api.v2.levelgen.surface.rules.Conditions;
import org.betterx.bclib.api.v2.tag.TagAPI;
import org.betterx.bclib.commands.CommandRegistry; import org.betterx.bclib.commands.CommandRegistry;
import org.betterx.bclib.config.Configs; import org.betterx.bclib.config.Configs;
import org.betterx.bclib.presets.worldgen.BCLWorldPresets; import org.betterx.bclib.presets.worldgen.BCLWorldPresets;
@ -26,10 +29,7 @@ import org.betterx.bclib.recipes.CraftingRecipes;
import org.betterx.bclib.registry.BaseBlockEntities; import org.betterx.bclib.registry.BaseBlockEntities;
import org.betterx.bclib.registry.BaseRegistry; import org.betterx.bclib.registry.BaseRegistry;
import org.betterx.bclib.util.Logger; import org.betterx.bclib.util.Logger;
import org.betterx.bclib.world.generator.BCLibEndBiomeSource; import org.betterx.bclib.api.v2.levelgen.structures.TemplatePiece;
import org.betterx.bclib.world.generator.BCLibNetherBiomeSource;
import org.betterx.bclib.world.generator.GeneratorOptions;
import org.betterx.bclib.world.structures.TemplatePiece;
import java.util.List; import java.util.List;

View file

@ -12,13 +12,13 @@ import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.WorldGenSettings; import net.minecraft.world.level.levelgen.WorldGenSettings;
import com.mojang.serialization.Dynamic; import com.mojang.serialization.Dynamic;
import org.betterx.bclib.api.datafixer.DataFixerAPI; import org.betterx.bclib.api.v2.datafixer.DataFixerAPI;
import org.betterx.bclib.api.datafixer.ForcedLevelPatch; import org.betterx.bclib.api.v2.datafixer.ForcedLevelPatch;
import org.betterx.bclib.api.datafixer.MigrationProfile; import org.betterx.bclib.api.v2.datafixer.MigrationProfile;
import org.betterx.bclib.api.v2.generator.GeneratorOptions;
import org.betterx.bclib.api.v2.levelgen.LevelGenUtil;
import org.betterx.bclib.config.Configs; import org.betterx.bclib.config.Configs;
import org.betterx.bclib.api.worldgen.WorldGenUtil;
import org.betterx.bclib.util.MHelper; import org.betterx.bclib.util.MHelper;
import org.betterx.bclib.world.generator.GeneratorOptions;
import java.util.Optional; import java.util.Optional;
@ -45,7 +45,7 @@ final class BiomeSourcePatch extends ForcedLevelPatch {
@Override @Override
protected Boolean runLevelDatPatch(CompoundTag root, MigrationProfile profile) { protected Boolean runLevelDatPatch(CompoundTag root, MigrationProfile profile) {
//make sure we have a working generators file before attempting to patch //make sure we have a working generators file before attempting to patch
WorldGenUtil.migrateGeneratorSettings(); LevelGenUtil.migrateGeneratorSettings();
final CompoundTag worldGenSettings = root.getCompound("Data").getCompound("WorldGenSettings"); final CompoundTag worldGenSettings = root.getCompound("Data").getCompound("WorldGenSettings");
final CompoundTag dimensions = worldGenSettings.getCompound("dimensions"); final CompoundTag dimensions = worldGenSettings.getCompound("dimensions");
@ -115,10 +115,10 @@ final class BiomeSourcePatch extends ForcedLevelPatch {
.resultOrPartial(BCLib.LOGGER::error); .resultOrPartial(BCLib.LOGGER::error);
Optional<ChunkGenerator> netherGenerator = oLevelStem.map(l -> l.generator()); Optional<ChunkGenerator> netherGenerator = oLevelStem.map(l -> l.generator());
int biomeSourceVersion = WorldGenUtil.getBiomeVersionForGenerator(netherGenerator.orElse(null)); int biomeSourceVersion = LevelGenUtil.getBiomeVersionForGenerator(netherGenerator.orElse(null));
int targetVersion = WorldGenUtil.getBiomeVersionForCurrentWorld(dimensionKey); int targetVersion = LevelGenUtil.getBiomeVersionForCurrentWorld(dimensionKey);
if (biomeSourceVersion != targetVersion) { if (biomeSourceVersion != targetVersion) {
Optional<Holder<LevelStem>> refLevelStem = WorldGenUtil.referenceStemForVersion( Optional<Holder<LevelStem>> refLevelStem = LevelGenUtil.referenceStemForVersion(
dimensionKey, dimensionKey,
targetVersion, targetVersion,
registryAccess, registryAccess,

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api; package org.betterx.bclib.api.v2;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api; package org.betterx.bclib.api.v2;
import net.minecraft.world.item.Item; import net.minecraft.world.item.Item;
import net.minecraft.world.item.Items; import net.minecraft.world.item.Items;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api; package org.betterx.bclib.api.v2;
import net.minecraft.client.gui.screens.worldselection.WorldGenSettingsComponent; import net.minecraft.client.gui.screens.worldselection.WorldGenSettingsComponent;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -16,10 +16,10 @@ import net.minecraft.world.level.levelgen.WorldGenSettings;
import net.minecraft.world.level.storage.LevelStorageSource; import net.minecraft.world.level.storage.LevelStorageSource;
import net.minecraft.world.level.storage.ServerLevelData; import net.minecraft.world.level.storage.ServerLevelData;
import org.betterx.bclib.api.biomes.BiomeAPI; import org.betterx.bclib.api.v2.dataexchange.DataExchangeAPI;
import org.betterx.bclib.api.dataexchange.DataExchangeAPI; import org.betterx.bclib.api.v2.datafixer.DataFixerAPI;
import org.betterx.bclib.api.datafixer.DataFixerAPI; import org.betterx.bclib.api.v2.levelgen.LevelGenUtil;
import org.betterx.bclib.api.worldgen.WorldGenUtil; import org.betterx.bclib.api.v2.levelgen.biomes.InternalBiomeAPI;
import org.betterx.bclib.mixin.common.RegistryOpsAccessor; import org.betterx.bclib.mixin.common.RegistryOpsAccessor;
import java.util.ArrayList; import java.util.ArrayList;
@ -37,13 +37,13 @@ public class LifeCycleAPI {
private static void worldCreationStarted(RegistryAccess access) { private static void worldCreationStarted(RegistryAccess access) {
BiomeAPI.initRegistry(access); InternalBiomeAPI.initRegistry(access);
} }
public static void newWorldSetup(LevelStorageSource.LevelStorageAccess levelStorageAccess, public static void newWorldSetup(LevelStorageSource.LevelStorageAccess levelStorageAccess,
WorldGenSettings settings) { WorldGenSettings settings) {
DataExchangeAPI.prepareServerside(); DataExchangeAPI.prepareServerside();
BiomeAPI.prepareNewLevel(); InternalBiomeAPI.prepareNewLevel();
DataFixerAPI.createWorldData(levelStorageAccess, settings); DataFixerAPI.createWorldData(levelStorageAccess, settings);
_runBeforeLevelLoad(); _runBeforeLevelLoad();
@ -53,14 +53,14 @@ public class LifeCycleAPI {
WorldGenSettings worldGenSettings, WorldGenSettings worldGenSettings,
LevelStorageSource levelSource) { LevelStorageSource levelSource) {
DataExchangeAPI.prepareServerside(); DataExchangeAPI.prepareServerside();
BiomeAPI.prepareNewLevel(); InternalBiomeAPI.prepareNewLevel();
DataFixerAPI.createWorldData(levelSource, levelID, worldGenSettings); DataFixerAPI.createWorldData(levelSource, levelID, worldGenSettings);
_runBeforeLevelLoad(); _runBeforeLevelLoad();
} }
public static void newWorldSetup(LevelStorageSource.LevelStorageAccess levelStorageAccess) { public static void newWorldSetup(LevelStorageSource.LevelStorageAccess levelStorageAccess) {
BiomeAPI.prepareNewLevel(); InternalBiomeAPI.prepareNewLevel();
DataFixerAPI.fixData(levelStorageAccess, false, (didFix) -> {/* not called when showUI==false */}); DataFixerAPI.fixData(levelStorageAccess, false, (didFix) -> {/* not called when showUI==false */});
_runBeforeLevelLoad(); _runBeforeLevelLoad();
@ -68,9 +68,9 @@ public class LifeCycleAPI {
public static WorldGenSettings worldLoadStarted(WorldGenSettings settings, Optional<RegistryOps<Tag>> registryOps) { public static WorldGenSettings worldLoadStarted(WorldGenSettings settings, Optional<RegistryOps<Tag>> registryOps) {
if (registryOps.orElse(null) instanceof RegistryOpsAccessor acc) { if (registryOps.orElse(null) instanceof RegistryOpsAccessor acc) {
BiomeAPI.initRegistry(acc.bcl_getRegistryAccess()); InternalBiomeAPI.initRegistry(acc.bcl_getRegistryAccess());
} }
settings = WorldGenUtil.fixSettingsInCurrentWorld(registryOps, settings); settings = LevelGenUtil.fixSettingsInCurrentWorld(registryOps, settings);
return settings; return settings;
} }
@ -154,16 +154,16 @@ public class LifeCycleAPI {
List<CustomSpawner> list, List<CustomSpawner> list,
boolean bl2) { boolean bl2) {
onLoadLevel.forEach(c -> c.onLoad(world, onLoadLevel.forEach(c -> c.onLoad(world,
minecraftServer, minecraftServer,
executor, executor,
levelStorageAccess, levelStorageAccess,
serverLevelData, serverLevelData,
resourceKey, resourceKey,
chunkProgressListener, chunkProgressListener,
bl, bl,
l, l,
list, list,
bl2)); bl2));
final long seed = world.getSeed(); final long seed = world.getSeed();
final Registry<Biome> biomeRegistry = world.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY); final Registry<Biome> biomeRegistry = world.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY);

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api; package org.betterx.bclib.api.v2;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api; package org.betterx.bclib.api.v2;
import net.minecraft.client.renderer.RenderType; import net.minecraft.client.renderer.RenderType;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -12,9 +12,9 @@ import net.fabricmc.fabric.api.blockrenderlayer.v1.BlockRenderLayerMap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.biomes.BiomeAPI; import org.betterx.bclib.api.v2.levelgen.biomes.InternalBiomeAPI;
import org.betterx.bclib.api.tag.NamedMineableTags; import org.betterx.bclib.api.v2.tag.NamedMineableTags;
import org.betterx.bclib.api.tag.TagAPI; import org.betterx.bclib.api.v2.tag.TagAPI;
import org.betterx.bclib.blocks.BaseBarrelBlock; import org.betterx.bclib.blocks.BaseBarrelBlock;
import org.betterx.bclib.blocks.BaseChestBlock; import org.betterx.bclib.blocks.BaseChestBlock;
import org.betterx.bclib.blocks.BaseFurnaceBlock; import org.betterx.bclib.blocks.BaseFurnaceBlock;
@ -70,7 +70,7 @@ public class PostInitAPI {
} }
blockTags = null; blockTags = null;
itemTags = null; itemTags = null;
BiomeAPI.loadFabricAPIBiomes(); InternalBiomeAPI.loadFabricAPIBiomes();
Configs.BIOMES_CONFIG.saveChanges(); Configs.BIOMES_CONFIG.saveChanges();
} }

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api; package org.betterx.bclib.api.v2;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api; package org.betterx.bclib.api.v2;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.NbtIo; import net.minecraft.nbt.NbtIo;
@ -10,7 +10,7 @@ import net.fabricmc.loader.api.ModContainer;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.datafixer.DataFixerAPI; import org.betterx.bclib.api.v2.datafixer.DataFixerAPI;
import org.betterx.bclib.util.ModUtil; import org.betterx.bclib.util.ModUtil;
import java.io.File; import java.io.File;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.dataexchange; package org.betterx.bclib.api.v2.dataexchange;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.multiplayer.ClientPacketListener;

View file

@ -1,6 +1,6 @@
package org.betterx.bclib.api.dataexchange; package org.betterx.bclib.api.v2.dataexchange;
import org.betterx.bclib.api.dataexchange.handler.DataExchange; import org.betterx.bclib.api.v2.dataexchange.handler.DataExchange;
import java.util.Set; import java.util.Set;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.dataexchange; package org.betterx.bclib.api.v2.dataexchange;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.multiplayer.ClientPacketListener;
@ -10,7 +10,7 @@ import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.fabricmc.fabric.api.networking.v1.PacketSender;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.dataexchange.handler.DataExchange; import org.betterx.bclib.api.v2.dataexchange.handler.DataExchange;
/** /**
* This is an internal class that handles a Clienetside players Connection to a Server * This is an internal class that handles a Clienetside players Connection to a Server

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.dataexchange; package org.betterx.bclib.api.v2.dataexchange;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.server.MinecraftServer; import net.minecraft.server.MinecraftServer;
@ -9,7 +9,7 @@ import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.dataexchange.handler.DataExchange; import org.betterx.bclib.api.v2.dataexchange.handler.DataExchange;
/** /**
* This is an internal class that handles a Serverside Connection to a Client-Player * This is an internal class that handles a Serverside Connection to a Client-Player

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.dataexchange; package org.betterx.bclib.api.v2.dataexchange;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
@ -7,9 +7,9 @@ import net.fabricmc.api.Environment;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.dataexchange.handler.DataExchange; import org.betterx.bclib.api.v2.dataexchange.handler.DataExchange;
import org.betterx.bclib.api.dataexchange.handler.autosync.AutoSync; import org.betterx.bclib.api.v2.dataexchange.handler.autosync.AutoSync;
import org.betterx.bclib.api.dataexchange.handler.autosync.AutoSyncID; import org.betterx.bclib.api.v2.dataexchange.handler.autosync.AutoSyncID;
import org.betterx.bclib.config.Config; import org.betterx.bclib.config.Config;
import org.betterx.bclib.util.ModUtil; import org.betterx.bclib.util.ModUtil;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.dataexchange; package org.betterx.bclib.api.v2.dataexchange;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.multiplayer.ClientPacketListener; import net.minecraft.client.multiplayer.ClientPacketListener;
@ -18,8 +18,7 @@ import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.dataexchange.handler.autosync.Chunker; import org.betterx.bclib.api.v2.dataexchange.handler.autosync.Chunker;
import org.betterx.bclib.api.dataexchange.handler.autosync.Chunker.PacketChunkSender;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
@ -113,7 +112,7 @@ public abstract class DataHandler extends BaseDataHandler {
Collection<ServerPlayer> players, Collection<ServerPlayer> players,
FriendlyByteBuf buf) { FriendlyByteBuf buf) {
if (buf.readableBytes() > Chunker.MAX_PACKET_SIZE) { if (buf.readableBytes() > Chunker.MAX_PACKET_SIZE) {
final PacketChunkSender sender = new PacketChunkSender(buf, identifier); final Chunker.PacketChunkSender sender = new Chunker.PacketChunkSender(buf, identifier);
sender.sendChunks(players); sender.sendChunks(players);
} else { } else {
for (ServerPlayer player : players) { for (ServerPlayer player : players) {

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.dataexchange; package org.betterx.bclib.api.v2.dataexchange;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.dataexchange; package org.betterx.bclib.api.v2.dataexchange;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;

View file

@ -1,9 +1,9 @@
package org.betterx.bclib.api.dataexchange; package org.betterx.bclib.api.v2.dataexchange;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import org.betterx.bclib.api.dataexchange.handler.autosync.AutoSync; import org.betterx.bclib.api.v2.dataexchange.handler.autosync.AutoSync;
import org.betterx.bclib.api.dataexchange.handler.autosync.AutoSyncID; import org.betterx.bclib.api.v2.dataexchange.handler.autosync.AutoSyncID;
import java.io.File; import java.io.File;
import java.util.Objects; import java.util.Objects;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.dataexchange.handler; package org.betterx.bclib.api.v2.dataexchange.handler;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -7,7 +7,7 @@ import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents; import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
import org.betterx.bclib.api.dataexchange.*; import org.betterx.bclib.api.v2.dataexchange.*;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;

View file

@ -1,10 +1,10 @@
package org.betterx.bclib.api.dataexchange.handler.autosync; package org.betterx.bclib.api.v2.dataexchange.handler.autosync;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.dataexchange.DataHandler; import org.betterx.bclib.api.v2.dataexchange.DataHandler;
import org.betterx.bclib.api.dataexchange.SyncFileHash; import org.betterx.bclib.api.v2.dataexchange.SyncFileHash;
import org.betterx.bclib.util.ModUtil; import org.betterx.bclib.util.ModUtil;
import org.betterx.bclib.util.ModUtil.ModInfo; import org.betterx.bclib.util.ModUtil.ModInfo;
import org.betterx.bclib.util.Pair; import org.betterx.bclib.util.Pair;

View file

@ -1,10 +1,10 @@
package org.betterx.bclib.api.dataexchange.handler.autosync; package org.betterx.bclib.api.v2.dataexchange.handler.autosync;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.dataexchange.DataExchangeAPI; import org.betterx.bclib.api.v2.dataexchange.DataExchangeAPI;
import org.betterx.bclib.api.dataexchange.SyncFileHash; import org.betterx.bclib.api.v2.dataexchange.SyncFileHash;
import org.betterx.bclib.config.Configs; import org.betterx.bclib.config.Configs;
import org.betterx.bclib.config.ServerConfig; import org.betterx.bclib.config.ServerConfig;
import org.betterx.bclib.util.PathUtil; import org.betterx.bclib.util.PathUtil;

View file

@ -1,8 +1,8 @@
package org.betterx.bclib.api.dataexchange.handler.autosync; package org.betterx.bclib.api.v2.dataexchange.handler.autosync;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import org.betterx.bclib.api.dataexchange.DataHandler; import org.betterx.bclib.api.v2.dataexchange.DataHandler;
import org.betterx.bclib.config.Config; import org.betterx.bclib.config.Config;
import org.betterx.bclib.util.ModUtil; import org.betterx.bclib.util.ModUtil;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.dataexchange.handler.autosync; package org.betterx.bclib.api.v2.dataexchange.handler.autosync;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
@ -11,10 +11,10 @@ import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking; import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.dataexchange.BaseDataHandler; import org.betterx.bclib.api.v2.dataexchange.BaseDataHandler;
import org.betterx.bclib.api.dataexchange.DataHandler; import org.betterx.bclib.api.v2.dataexchange.DataHandler;
import org.betterx.bclib.api.dataexchange.DataHandlerDescriptor; import org.betterx.bclib.api.v2.dataexchange.DataHandlerDescriptor;
import org.betterx.bclib.api.dataexchange.handler.DataExchange; import org.betterx.bclib.api.v2.dataexchange.handler.DataExchange;
import java.util.*; import java.util.*;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;

View file

@ -1,11 +1,11 @@
package org.betterx.bclib.api.dataexchange.handler.autosync; package org.betterx.bclib.api.v2.dataexchange.handler.autosync;
import net.minecraft.util.ProgressListener; import net.minecraft.util.ProgressListener;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import org.betterx.bclib.gui.screens.ProgressScreen; import org.betterx.bclib.client.gui.screens.ProgressScreen;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class ChunkerProgress { public class ChunkerProgress {

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.dataexchange.handler.autosync; package org.betterx.bclib.api.v2.dataexchange.handler.autosync;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.dataexchange.handler.autosync; package org.betterx.bclib.api.v2.dataexchange.handler.autosync;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
@ -12,15 +12,15 @@ import net.fabricmc.fabric.api.networking.v1.PacketSender;
import net.fabricmc.loader.api.metadata.ModEnvironment; import net.fabricmc.loader.api.metadata.ModEnvironment;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.dataexchange.DataExchangeAPI; import org.betterx.bclib.api.v2.dataexchange.DataExchangeAPI;
import org.betterx.bclib.api.dataexchange.DataHandler; import org.betterx.bclib.api.v2.dataexchange.DataHandler;
import org.betterx.bclib.api.dataexchange.DataHandlerDescriptor; import org.betterx.bclib.api.v2.dataexchange.DataHandlerDescriptor;
import org.betterx.bclib.client.gui.screens.ModListScreen;
import org.betterx.bclib.client.gui.screens.ProgressScreen;
import org.betterx.bclib.client.gui.screens.SyncFilesScreen;
import org.betterx.bclib.client.gui.screens.WarnBCLibVersionMismatch;
import org.betterx.bclib.config.Configs; import org.betterx.bclib.config.Configs;
import org.betterx.bclib.config.ServerConfig; import org.betterx.bclib.config.ServerConfig;
import org.betterx.bclib.gui.screens.ModListScreen;
import org.betterx.bclib.gui.screens.ProgressScreen;
import org.betterx.bclib.gui.screens.SyncFilesScreen;
import org.betterx.bclib.gui.screens.WarnBCLibVersionMismatch;
import org.betterx.bclib.util.ModUtil; import org.betterx.bclib.util.ModUtil;
import org.betterx.bclib.util.ModUtil.ModInfo; import org.betterx.bclib.util.ModUtil.ModInfo;
import org.betterx.bclib.util.PathUtil; import org.betterx.bclib.util.PathUtil;
@ -48,10 +48,10 @@ public class HelloClient extends DataHandler.FromServer {
} }
public static final DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, public static final DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID,
"hello_client"), "hello_client"),
HelloClient::new, HelloClient::new,
false, false,
false); false);
public HelloClient() { public HelloClient() {
super(DESCRIPTOR.IDENTIFIER); super(DESCRIPTOR.IDENTIFIER);
@ -87,14 +87,14 @@ public class HelloClient extends DataHandler.FromServer {
mods = new ArrayList<>(inmods.size()); mods = new ArrayList<>(inmods.size());
mods.addAll(inmods); mods.addAll(inmods);
mods.addAll(ModUtil mods.addAll(ModUtil
.getMods() .getMods()
.entrySet() .entrySet()
.stream() .stream()
.filter(entry -> entry.getValue().metadata.getEnvironment() != ModEnvironment.SERVER && !inmods.contains( .filter(entry -> entry.getValue().metadata.getEnvironment() != ModEnvironment.SERVER && !inmods.contains(
entry.getKey())) entry.getKey()))
.map(entry -> entry.getKey()) .map(entry -> entry.getKey())
.collect(Collectors.toList()) .collect(Collectors.toList())
); );
} }
mods = mods mods = mods
@ -265,7 +265,7 @@ public class HelloClient extends DataHandler.FromServer {
if (!localSubFile.hash.equals(subFile.hash)) { if (!localSubFile.hash.equals(subFile.hash)) {
BCLib.LOGGER.info(" * " + subFile.relPath + " (changed)"); BCLib.LOGGER.info(" * " + subFile.relPath + " (changed)");
filesToRequest.add(new AutoSyncID.ForDirectFileRequest(desc.folderID, filesToRequest.add(new AutoSyncID.ForDirectFileRequest(desc.folderID,
new File(subFile.relPath))); new File(subFile.relPath)));
} else { } else {
BCLib.LOGGER.info(" * " + subFile.relPath); BCLib.LOGGER.info(" * " + subFile.relPath);
} }
@ -273,7 +273,7 @@ public class HelloClient extends DataHandler.FromServer {
//the file is missing locally //the file is missing locally
BCLib.LOGGER.info(" * " + subFile.relPath + " (missing on client)"); BCLib.LOGGER.info(" * " + subFile.relPath + " (missing on client)");
filesToRequest.add(new AutoSyncID.ForDirectFileRequest(desc.folderID, filesToRequest.add(new AutoSyncID.ForDirectFileRequest(desc.folderID,
new File(subFile.relPath))); new File(subFile.relPath)));
} }
}); });
@ -310,9 +310,9 @@ public class HelloClient extends DataHandler.FromServer {
filesToRequest.add(new AutoSyncID(e.serverHash.modID, e.serverHash.uniqueID)); filesToRequest.add(new AutoSyncID(e.serverHash.modID, e.serverHash.uniqueID));
} else { } else {
filesToRequest.add(new AutoSyncID.WithContentOverride(e.serverHash.modID, filesToRequest.add(new AutoSyncID.WithContentOverride(e.serverHash.modID,
e.serverHash.uniqueID, e.serverHash.uniqueID,
contentWrapper, contentWrapper,
e.localMatch.fileName)); e.localMatch.fileName));
} }
} }
@ -390,11 +390,11 @@ public class HelloClient extends DataHandler.FromServer {
return; return;
} else if (serverPublishedModInfo && mismatchingMods.size() > 0 && Configs.CLIENT_CONFIG.isShowingModInfo()) { } else if (serverPublishedModInfo && mismatchingMods.size() > 0 && Configs.CLIENT_CONFIG.isShowingModInfo()) {
client.setScreen(new ModListScreen(client.screen, client.setScreen(new ModListScreen(client.screen,
Component.translatable("title.bclib.modmissmatch"), Component.translatable("title.bclib.modmissmatch"),
Component.translatable("message.bclib.modmissmatch"), Component.translatable("message.bclib.modmissmatch"),
CommonComponents.GUI_PROCEED, CommonComponents.GUI_PROCEED,
ModUtil.getMods(), ModUtil.getMods(),
modVersion)); modVersion));
return; return;
} }
} }
@ -436,39 +436,39 @@ public class HelloClient extends DataHandler.FromServer {
} }
client.setScreen(new SyncFilesScreen(modFiles, client.setScreen(new SyncFilesScreen(modFiles,
configFiles, configFiles,
singleFiles, singleFiles,
folderFiles, folderFiles,
filesToRemove.size(), filesToRemove.size(),
modVersion, modVersion,
(downloadMods, downloadConfigs, downloadFiles, removeFiles) -> { (downloadMods, downloadConfigs, downloadFiles, removeFiles) -> {
if (downloadMods || downloadConfigs || downloadFiles) { if (downloadMods || downloadConfigs || downloadFiles) {
BCLib.LOGGER.info("Updating local Files:"); BCLib.LOGGER.info("Updating local Files:");
List<AutoSyncID.WithContentOverride> localChanges = new ArrayList<>( List<AutoSyncID.WithContentOverride> localChanges = new ArrayList<>(
files.toArray().length); files.toArray().length);
List<AutoSyncID> requestFiles = new ArrayList<>(files.toArray().length); List<AutoSyncID> requestFiles = new ArrayList<>(files.toArray().length);
files.forEach(aid -> { files.forEach(aid -> {
if (aid.isConfigFile() && downloadConfigs) { if (aid.isConfigFile() && downloadConfigs) {
processOfferedFile(requestFiles, aid); processOfferedFile(requestFiles, aid);
} else if (aid instanceof AutoSyncID.ForModFileRequest && downloadMods) { } else if (aid instanceof AutoSyncID.ForModFileRequest && downloadMods) {
processOfferedFile(requestFiles, aid); processOfferedFile(requestFiles, aid);
} else if (downloadFiles) { } else if (downloadFiles) {
processOfferedFile(requestFiles, aid); processOfferedFile(requestFiles, aid);
} }
}); });
requestFileDownloads(requestFiles); requestFileDownloads(requestFiles);
} }
if (removeFiles) { if (removeFiles) {
filesToRemove.forEach(aid -> { filesToRemove.forEach(aid -> {
BCLib.LOGGER.info(" - " + aid.relFile + " (removing)"); BCLib.LOGGER.info(" - " + aid.relFile + " (removing)");
aid.relFile.delete(); aid.relFile.delete();
}); });
} }
this.onCloseSyncFilesScreen(); this.onCloseSyncFilesScreen();
})); }));
} }
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
@ -499,8 +499,8 @@ public class HelloClient extends DataHandler.FromServer {
BCLib.LOGGER.info("Starting download of Files:" + files.size()); BCLib.LOGGER.info("Starting download of Files:" + files.size());
final ProgressScreen progress = new ProgressScreen(null, final ProgressScreen progress = new ProgressScreen(null,
Component.translatable("title.bclib.filesync.progress"), Component.translatable("title.bclib.filesync.progress"),
Component.translatable("message.bclib.filesync.progress")); Component.translatable("message.bclib.filesync.progress"));
progress.progressStart(Component.translatable("message.bclib.filesync.progress.stage.empty")); progress.progressStart(Component.translatable("message.bclib.filesync.progress.stage.empty"));
ChunkerProgress.setProgressScreen(progress); ChunkerProgress.setProgressScreen(progress);

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.dataexchange.handler.autosync; package org.betterx.bclib.api.v2.dataexchange.handler.autosync;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -10,9 +10,9 @@ import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.fabricmc.fabric.api.networking.v1.PacketSender;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.dataexchange.DataExchangeAPI; import org.betterx.bclib.api.v2.dataexchange.DataExchangeAPI;
import org.betterx.bclib.api.dataexchange.DataHandler; import org.betterx.bclib.api.v2.dataexchange.DataHandler;
import org.betterx.bclib.api.dataexchange.DataHandlerDescriptor; import org.betterx.bclib.api.v2.dataexchange.DataHandlerDescriptor;
import org.betterx.bclib.config.Configs; import org.betterx.bclib.config.Configs;
import org.betterx.bclib.util.ModUtil; import org.betterx.bclib.util.ModUtil;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.dataexchange.handler.autosync; package org.betterx.bclib.api.v2.dataexchange.handler.autosync;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -10,8 +10,8 @@ import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.fabricmc.fabric.api.networking.v1.PacketSender;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.dataexchange.DataHandler; import org.betterx.bclib.api.v2.dataexchange.DataHandler;
import org.betterx.bclib.api.dataexchange.DataHandlerDescriptor; import org.betterx.bclib.api.v2.dataexchange.DataHandlerDescriptor;
import org.betterx.bclib.config.Configs; import org.betterx.bclib.config.Configs;
import java.util.ArrayList; import java.util.ArrayList;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.dataexchange.handler.autosync; package org.betterx.bclib.api.v2.dataexchange.handler.autosync;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
@ -9,10 +9,10 @@ import net.fabricmc.api.Environment;
import net.fabricmc.fabric.api.networking.v1.PacketSender; import net.fabricmc.fabric.api.networking.v1.PacketSender;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.dataexchange.DataHandler; import org.betterx.bclib.api.v2.dataexchange.DataHandler;
import org.betterx.bclib.api.dataexchange.DataHandlerDescriptor; import org.betterx.bclib.api.v2.dataexchange.DataHandlerDescriptor;
import org.betterx.bclib.client.gui.screens.ConfirmRestartScreen;
import org.betterx.bclib.config.Configs; import org.betterx.bclib.config.Configs;
import org.betterx.bclib.gui.screens.ConfirmRestartScreen;
import org.betterx.bclib.util.Pair; import org.betterx.bclib.util.Pair;
import org.betterx.bclib.util.PathUtil; import org.betterx.bclib.util.PathUtil;
import org.betterx.bclib.util.Triple; import org.betterx.bclib.util.Triple;
@ -27,10 +27,10 @@ import java.util.stream.Collectors;
public class SendFiles extends DataHandler.FromServer { public class SendFiles extends DataHandler.FromServer {
public static final DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID, public static final DataHandlerDescriptor DESCRIPTOR = new DataHandlerDescriptor(new ResourceLocation(BCLib.MOD_ID,
"send_files"), "send_files"),
SendFiles::new, SendFiles::new,
false, false,
false); false);
protected List<AutoFileSyncEntry> files; protected List<AutoFileSyncEntry> files;
private String token; private String token;
@ -173,7 +173,7 @@ public class SendFiles extends DataHandler.FromServer {
} }
count++; count++;
name = prefix + mase.modID + "_" + mase.version.replace(".", "_") + "__" + String.format("%03d", name = prefix + mase.modID + "_" + mase.version.replace(".", "_") + "__" + String.format("%03d",
count) + ".jar"; count) + ".jar";
} while (path.toFile().exists()); } while (path.toFile().exists());
} }

View file

@ -1,11 +1,11 @@
package org.betterx.bclib.api.dataexchange.handler.autosync; package org.betterx.bclib.api.v2.dataexchange.handler.autosync;
import net.minecraft.network.FriendlyByteBuf; import net.minecraft.network.FriendlyByteBuf;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.dataexchange.DataHandler; import org.betterx.bclib.api.v2.dataexchange.DataHandler;
import org.betterx.bclib.api.dataexchange.FileHash; import org.betterx.bclib.api.v2.dataexchange.FileHash;
import org.betterx.bclib.api.dataexchange.handler.autosync.AutoSyncID.ForDirectFileRequest; import org.betterx.bclib.api.v2.dataexchange.handler.autosync.AutoSyncID.ForDirectFileRequest;
import org.betterx.bclib.config.Configs; import org.betterx.bclib.config.Configs;
import org.betterx.bclib.util.PathUtil; import org.betterx.bclib.util.PathUtil;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.datafixer; package org.betterx.bclib.api.v2.datafixer;
import net.minecraft.Util; import net.minecraft.Util;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@ -17,14 +17,14 @@ import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.WorldDataAPI; import org.betterx.bclib.api.v2.WorldDataAPI;
import org.betterx.bclib.api.v2.levelgen.LevelGenUtil;
import org.betterx.bclib.client.gui.screens.AtomicProgressListener;
import org.betterx.bclib.client.gui.screens.ConfirmFixScreen;
import org.betterx.bclib.client.gui.screens.LevelFixErrorScreen;
import org.betterx.bclib.client.gui.screens.LevelFixErrorScreen.Listener;
import org.betterx.bclib.client.gui.screens.ProgressScreen;
import org.betterx.bclib.config.Configs; import org.betterx.bclib.config.Configs;
import org.betterx.bclib.gui.screens.AtomicProgressListener;
import org.betterx.bclib.gui.screens.ConfirmFixScreen;
import org.betterx.bclib.gui.screens.LevelFixErrorScreen;
import org.betterx.bclib.gui.screens.LevelFixErrorScreen.Listener;
import org.betterx.bclib.gui.screens.ProgressScreen;
import org.betterx.bclib.api.worldgen.WorldGenUtil;
import org.betterx.bclib.util.Logger; import org.betterx.bclib.util.Logger;
import java.io.*; import java.io.*;
@ -181,7 +181,7 @@ public class DataFixerAPI {
public static void createWorldData(LevelStorageAccess access, WorldGenSettings settings) { public static void createWorldData(LevelStorageAccess access, WorldGenSettings settings) {
initializeWorldData(access, true); initializeWorldData(access, true);
WorldGenUtil.initializeWorldData(settings); LevelGenUtil.initializeWorldData(settings);
WorldDataAPI.saveFile(BCLib.MOD_ID); WorldDataAPI.saveFile(BCLib.MOD_ID);
} }

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.datafixer; package org.betterx.bclib.api.v2.datafixer;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag; import net.minecraft.nbt.ListTag;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.datafixer; package org.betterx.bclib.api.v2.datafixer;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag; import net.minecraft.nbt.ListTag;
@ -6,7 +6,7 @@ import net.minecraft.nbt.NbtIo;
import net.minecraft.nbt.Tag; import net.minecraft.nbt.Tag;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.WorldDataAPI; import org.betterx.bclib.api.v2.WorldDataAPI;
import org.betterx.bclib.interfaces.PatchBiFunction; import org.betterx.bclib.interfaces.PatchBiFunction;
import org.betterx.bclib.interfaces.PatchFunction; import org.betterx.bclib.interfaces.PatchFunction;
import org.betterx.bclib.util.ModUtil; import org.betterx.bclib.util.ModUtil;

View file

@ -1,9 +1,9 @@
package org.betterx.bclib.api.datafixer; package org.betterx.bclib.api.v2.datafixer;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;
import net.minecraft.nbt.ListTag; import net.minecraft.nbt.ListTag;
import org.betterx.bclib.api.WorldDataAPI; import org.betterx.bclib.api.v2.WorldDataAPI;
import org.betterx.bclib.interfaces.PatchBiFunction; import org.betterx.bclib.interfaces.PatchBiFunction;
import org.betterx.bclib.interfaces.PatchFunction; import org.betterx.bclib.interfaces.PatchFunction;
import org.betterx.bclib.util.ModUtil; import org.betterx.bclib.util.ModUtil;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.datafixer; package org.betterx.bclib.api.v2.datafixer;
public class PatchDidiFailException extends Exception { public class PatchDidiFailException extends Exception {
public PatchDidiFailException() { public PatchDidiFailException() {

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.world.generator; package org.betterx.bclib.api.v2.generator;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -7,7 +7,7 @@ import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.BiomeSource; import net.minecraft.world.level.biome.BiomeSource;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import org.betterx.bclib.api.biomes.BiomeAPI; import org.betterx.bclib.api.v2.levelgen.biomes.BiomeAPI;
import java.util.Comparator; import java.util.Comparator;
import java.util.List; import java.util.List;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.worldgen; package org.betterx.bclib.api.v2.generator;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -18,8 +18,8 @@ import net.minecraft.world.level.levelgen.synth.NormalNoise;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.biomes.BiomeAPI; import org.betterx.bclib.api.v2.levelgen.biomes.InternalBiomeAPI;
import org.betterx.bclib.api.surface.SurfaceRuleUtil; import org.betterx.bclib.api.v2.levelgen.surface.SurfaceRuleUtil;
import org.betterx.bclib.interfaces.NoiseGeneratorSettingsProvider; import org.betterx.bclib.interfaces.NoiseGeneratorSettingsProvider;
import org.betterx.bclib.interfaces.SurfaceRuleProvider; import org.betterx.bclib.interfaces.SurfaceRuleProvider;
@ -69,7 +69,7 @@ public class BCLChunkGenerator extends NoiseBasedChunkGenerator {
ChunkGenerator loadedChunkGenerator) { ChunkGenerator loadedChunkGenerator) {
BCLib.LOGGER.debug("Checking Noise Settings for " + dimensionKey.location().toString()); BCLib.LOGGER.debug("Checking Noise Settings for " + dimensionKey.location().toString());
final BiomeSource loadedBiomeSource = loadedChunkGenerator.getBiomeSource(); final BiomeSource loadedBiomeSource = loadedChunkGenerator.getBiomeSource();
BiomeAPI.applyModifications(loadedBiomeSource, dimensionKey); InternalBiomeAPI.applyModifications(loadedBiomeSource, dimensionKey);
if (loadedChunkGenerator instanceof NoiseBasedChunkGenerator nbc) { if (loadedChunkGenerator instanceof NoiseBasedChunkGenerator nbc) {
if (((Object) nbc.generatorSettings().value()) instanceof SurfaceRuleProvider srp) { if (((Object) nbc.generatorSettings().value()) instanceof SurfaceRuleProvider srp) {

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.world.generator; package org.betterx.bclib.api.v2.generator;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -19,15 +19,15 @@ import net.fabricmc.fabric.impl.biome.TheEndBiomeData;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.biomes.BCLBiome; import org.betterx.bclib.api.v2.generator.map.hex.HexBiomeMap;
import org.betterx.bclib.api.biomes.BiomeAPI; import org.betterx.bclib.api.v2.generator.map.square.SquareBiomeMap;
import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome;
import org.betterx.bclib.api.v2.levelgen.biomes.BiomeAPI;
import org.betterx.bclib.config.ConfigKeeper.StringArrayEntry; import org.betterx.bclib.config.ConfigKeeper.StringArrayEntry;
import org.betterx.bclib.config.Configs; import org.betterx.bclib.config.Configs;
import org.betterx.bclib.interfaces.BiomeMap; import org.betterx.bclib.interfaces.BiomeMap;
import org.betterx.bclib.interfaces.TheEndBiomeDataAccessor; import org.betterx.bclib.interfaces.TheEndBiomeDataAccessor;
import org.betterx.bclib.noise.OpenSimplexNoise; import org.betterx.bclib.noise.OpenSimplexNoise;
import org.betterx.bclib.world.generator.map.hex.HexBiomeMap;
import org.betterx.bclib.world.generator.map.square.SquareBiomeMap;
import java.awt.*; import java.awt.*;
import java.util.ArrayList; import java.util.ArrayList;
@ -54,9 +54,9 @@ public class BCLibEndBiomeSource extends BCLBiomeSource {
.stable() .stable()
.forGetter(source -> Optional.of(source.biomeSourceVersion))) .forGetter(source -> Optional.of(source.biomeSourceVersion)))
.apply(instance, .apply(instance,
instance.stable(BCLibEndBiomeSource::new) instance.stable(BCLibEndBiomeSource::new)
) )
); );
private final Holder<Biome> centerBiome; private final Holder<Biome> centerBiome;
private final Holder<Biome> barrens; private final Holder<Biome> barrens;
private final Point pos; private final Point pos;
@ -91,8 +91,8 @@ public class BCLibEndBiomeSource extends BCLBiomeSource {
endVoidBiomePicker = new BiomePicker(biomeRegistry); endVoidBiomePicker = new BiomePicker(biomeRegistry);
List<String> includeVoid = Configs.BIOMES_CONFIG.getEntry("force_include", List<String> includeVoid = Configs.BIOMES_CONFIG.getEntry("force_include",
"end_void_biomes", "end_void_biomes",
StringArrayEntry.class).getValue(); StringArrayEntry.class).getValue();
this.possibleBiomes().forEach(biome -> { this.possibleBiomes().forEach(biome -> {
ResourceLocation key = biome.unwrapKey().orElseThrow().location(); ResourceLocation key = biome.unwrapKey().orElseThrow().location();
String group = key.getNamespace() + "." + key.getPath(); String group = key.getNamespace() + "." + key.getPath();
@ -138,53 +138,53 @@ public class BCLibEndBiomeSource extends BCLBiomeSource {
protected BCLBiomeSource cloneForDatapack(Set<Holder<Biome>> datapackBiomes) { protected BCLBiomeSource cloneForDatapack(Set<Holder<Biome>> datapackBiomes) {
datapackBiomes.addAll(getBclBiomes(this.biomeRegistry)); datapackBiomes.addAll(getBclBiomes(this.biomeRegistry));
return new BCLibEndBiomeSource(this.biomeRegistry, return new BCLibEndBiomeSource(this.biomeRegistry,
datapackBiomes.stream().toList(), datapackBiomes.stream().toList(),
this.currentSeed, this.currentSeed,
Optional.of(biomeSourceVersion), Optional.of(biomeSourceVersion),
true); true);
} }
private static List<Holder<Biome>> getBclBiomes(Registry<Biome> biomeRegistry) { private static List<Holder<Biome>> getBclBiomes(Registry<Biome> biomeRegistry) {
List<String> include = Configs.BIOMES_CONFIG.getEntry("force_include", List<String> include = Configs.BIOMES_CONFIG.getEntry("force_include",
"end_land_biomes", "end_land_biomes",
StringArrayEntry.class).getValue(); StringArrayEntry.class).getValue();
include.addAll(Configs.BIOMES_CONFIG.getEntry("force_include", include.addAll(Configs.BIOMES_CONFIG.getEntry("force_include",
"end_void_biomes", "end_void_biomes",
StringArrayEntry.class).getValue()); StringArrayEntry.class).getValue());
if (TheEndBiomeData.createOverrides(biomeRegistry) instanceof TheEndBiomeDataAccessor acc) { if (TheEndBiomeData.createOverrides(biomeRegistry) instanceof TheEndBiomeDataAccessor acc) {
return getBiomes(biomeRegistry, return getBiomes(biomeRegistry,
new ArrayList<>(0), new ArrayList<>(0),
include, include,
(biome, location) -> (biome, location) ->
BCLibEndBiomeSource.isValidNonVanillaEndBiome(biome, location) || BCLibEndBiomeSource.isValidNonVanillaEndBiome(biome, location) ||
acc.bcl_isNonVanillaAndCanGenerateInEnd(biome.unwrapKey().orElseThrow()) acc.bcl_isNonVanillaAndCanGenerateInEnd(biome.unwrapKey().orElseThrow())
); );
} else { } else {
return getBiomes(biomeRegistry, return getBiomes(biomeRegistry,
new ArrayList<>(0), new ArrayList<>(0),
include, include,
BCLibEndBiomeSource::isValidNonVanillaEndBiome); BCLibEndBiomeSource::isValidNonVanillaEndBiome);
} }
} }
private static List<Holder<Biome>> getBiomes(Registry<Biome> biomeRegistry) { private static List<Holder<Biome>> getBiomes(Registry<Biome> biomeRegistry) {
List<String> include = Configs.BIOMES_CONFIG.getEntry("force_include", List<String> include = Configs.BIOMES_CONFIG.getEntry("force_include",
"end_land_biomes", "end_land_biomes",
StringArrayEntry.class).getValue(); StringArrayEntry.class).getValue();
include.addAll(Configs.BIOMES_CONFIG.getEntry("force_include", include.addAll(Configs.BIOMES_CONFIG.getEntry("force_include",
"end_void_biomes", "end_void_biomes",
StringArrayEntry.class).getValue()); StringArrayEntry.class).getValue());
if (TheEndBiomeData.createOverrides(biomeRegistry) instanceof TheEndBiomeDataAccessor acc) { if (TheEndBiomeData.createOverrides(biomeRegistry) instanceof TheEndBiomeDataAccessor acc) {
return getBiomes(biomeRegistry, return getBiomes(biomeRegistry,
new ArrayList<>(0), new ArrayList<>(0),
include, include,
(biome, location) -> (biome, location) ->
BCLibEndBiomeSource.isValidEndBiome(biome, location) || acc.bcl_canGenerateInEnd( BCLibEndBiomeSource.isValidEndBiome(biome, location) || acc.bcl_canGenerateInEnd(
biome.unwrapKey().orElseThrow()) biome.unwrapKey().orElseThrow())
); );
} else { } else {
return getBiomes(biomeRegistry, new ArrayList<>(0), include, BCLibEndBiomeSource::isValidEndBiome); return getBiomes(biomeRegistry, new ArrayList<>(0), include, BCLibEndBiomeSource::isValidEndBiome);
} }
@ -231,20 +231,20 @@ public class BCLibEndBiomeSource extends BCLBiomeSource {
@Override @Override
protected void onInitMap(long seed) { protected void onInitMap(long seed) {
if ((biomeSourceVersion != BCLBiomeSource.BIOME_SOURCE_VERSION_HEX)) { if ((biomeSourceVersion != BIOME_SOURCE_VERSION_HEX)) {
this.mapLand = new SquareBiomeMap(seed, this.mapLand = new SquareBiomeMap(seed,
GeneratorOptions.getBiomeSizeEndLand(), GeneratorOptions.getBiomeSizeEndLand(),
endLandBiomePicker); endLandBiomePicker);
this.mapVoid = new SquareBiomeMap(seed, this.mapVoid = new SquareBiomeMap(seed,
GeneratorOptions.getBiomeSizeEndVoid(), GeneratorOptions.getBiomeSizeEndVoid(),
endVoidBiomePicker); endVoidBiomePicker);
} else { } else {
this.mapLand = new HexBiomeMap(seed, this.mapLand = new HexBiomeMap(seed,
GeneratorOptions.getBiomeSizeEndLand(), GeneratorOptions.getBiomeSizeEndLand(),
endLandBiomePicker); endLandBiomePicker);
this.mapVoid = new HexBiomeMap(seed, this.mapVoid = new HexBiomeMap(seed,
GeneratorOptions.getBiomeSizeEndVoid(), GeneratorOptions.getBiomeSizeEndVoid(),
endVoidBiomePicker); endVoidBiomePicker);
} }
WorldgenRandom chunkRandom = new WorldgenRandom(new LegacyRandomSource(seed)); WorldgenRandom chunkRandom = new WorldgenRandom(new LegacyRandomSource(seed));
@ -273,7 +273,7 @@ public class BCLibEndBiomeSource extends BCLBiomeSource {
noise, noise,
(biomeX >> 1) + 1, (biomeX >> 1) + 1,
(biomeZ >> 1) + 1 (biomeZ >> 1) + 1
) + (float) SMALL_NOISE.eval(biomeX, biomeZ) * 5; ) + (float) SMALL_NOISE.eval(biomeX, biomeZ) * 5;
if (height > -20F && height < -5F) { if (height > -20F && height < -5F) {
return barrens; return barrens;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.world.generator; package org.betterx.bclib.api.v2.generator;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -15,14 +15,14 @@ import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import org.apache.commons.lang3.function.TriFunction; import org.apache.commons.lang3.function.TriFunction;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.biomes.BCLBiome; import org.betterx.bclib.api.v2.generator.map.MapStack;
import org.betterx.bclib.api.biomes.BiomeAPI; import org.betterx.bclib.api.v2.generator.map.hex.HexBiomeMap;
import org.betterx.bclib.api.v2.generator.map.square.SquareBiomeMap;
import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome;
import org.betterx.bclib.api.v2.levelgen.biomes.BiomeAPI;
import org.betterx.bclib.config.ConfigKeeper.StringArrayEntry; import org.betterx.bclib.config.ConfigKeeper.StringArrayEntry;
import org.betterx.bclib.config.Configs; import org.betterx.bclib.config.Configs;
import org.betterx.bclib.interfaces.BiomeMap; import org.betterx.bclib.interfaces.BiomeMap;
import org.betterx.bclib.world.generator.map.MapStack;
import org.betterx.bclib.world.generator.map.hex.HexBiomeMap;
import org.betterx.bclib.world.generator.map.square.SquareBiomeMap;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@ -183,7 +183,7 @@ public class BCLibNetherBiomeSource extends BCLBiomeSource {
@Override @Override
protected void onInitMap(long seed) { protected void onInitMap(long seed) {
TriFunction<Long, Integer, BiomePicker, BiomeMap> mapConstructor = (biomeSourceVersion != BCLBiomeSource.BIOME_SOURCE_VERSION_HEX) TriFunction<Long, Integer, BiomePicker, BiomeMap> mapConstructor = (biomeSourceVersion != BIOME_SOURCE_VERSION_HEX)
? SquareBiomeMap::new ? SquareBiomeMap::new
: HexBiomeMap::new; : HexBiomeMap::new;
if (worldHeight > 128 && GeneratorOptions.useVerticalBiomes()) { if (worldHeight > 128 && GeneratorOptions.useVerticalBiomes()) {

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.world.generator; package org.betterx.bclib.api.v2.generator;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -7,7 +7,7 @@ import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.WorldgenRandom;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import org.betterx.bclib.api.biomes.BCLBiome; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiome;
import org.betterx.bclib.util.WeighTree; import org.betterx.bclib.util.WeighTree;
import org.betterx.bclib.util.WeightedList; import org.betterx.bclib.util.WeightedList;

View file

@ -0,0 +1,5 @@
package org.betterx.bclib.api.v2.generator;
public enum BiomeType {
LAND, VOID
}

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.world.generator; package org.betterx.bclib.api.v2.generator;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;

View file

@ -1,13 +1,13 @@
package org.betterx.bclib.world.generator.map; package org.betterx.bclib.api.v2.generator.map;
import net.minecraft.util.Mth; import net.minecraft.util.Mth;
import org.apache.commons.lang3.function.TriFunction; import org.apache.commons.lang3.function.TriFunction;
import org.betterx.bclib.api.v2.generator.BiomePicker;
import org.betterx.bclib.interfaces.BiomeChunk; import org.betterx.bclib.interfaces.BiomeChunk;
import org.betterx.bclib.interfaces.BiomeMap; import org.betterx.bclib.interfaces.BiomeMap;
import org.betterx.bclib.interfaces.TriConsumer; import org.betterx.bclib.interfaces.TriConsumer;
import org.betterx.bclib.noise.OpenSimplexNoise; import org.betterx.bclib.noise.OpenSimplexNoise;
import org.betterx.bclib.world.generator.BiomePicker;
import java.util.Random; import java.util.Random;
@ -67,7 +67,7 @@ public class MapStack implements BiomeMap {
mapIndex = maxIndex; mapIndex = maxIndex;
} else { } else {
mapIndex = Mth.floor((y + noise.eval(x * 0.03, mapIndex = Mth.floor((y + noise.eval(x * 0.03,
z * 0.03) * layerDistortion) / worldHeight * maxIndex + 0.5F); z * 0.03) * layerDistortion) / worldHeight * maxIndex + 0.5F);
mapIndex = Mth.clamp(mapIndex, 0, maxIndex); mapIndex = Mth.clamp(mapIndex, 0, maxIndex);
} }

View file

@ -1,9 +1,9 @@
package org.betterx.bclib.world.generator.map.hex; package org.betterx.bclib.api.v2.generator.map.hex;
import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.WorldgenRandom;
import org.betterx.bclib.api.v2.generator.BiomePicker;
import org.betterx.bclib.interfaces.BiomeChunk; import org.betterx.bclib.interfaces.BiomeChunk;
import org.betterx.bclib.world.generator.BiomePicker;
import java.util.Arrays; import java.util.Arrays;

View file

@ -1,16 +1,16 @@
package org.betterx.bclib.world.generator.map.hex; package org.betterx.bclib.api.v2.generator.map.hex;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;
import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.WorldgenRandom;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import org.betterx.bclib.api.v2.generator.BiomePicker;
import org.betterx.bclib.interfaces.BiomeChunk; import org.betterx.bclib.interfaces.BiomeChunk;
import org.betterx.bclib.interfaces.BiomeMap; import org.betterx.bclib.interfaces.BiomeMap;
import org.betterx.bclib.interfaces.TriConsumer; import org.betterx.bclib.interfaces.TriConsumer;
import org.betterx.bclib.noise.OpenSimplexNoise; import org.betterx.bclib.noise.OpenSimplexNoise;
import org.betterx.bclib.util.MHelper; import org.betterx.bclib.util.MHelper;
import org.betterx.bclib.world.generator.BiomePicker;
import java.util.Map; import java.util.Map;
import java.util.Random; import java.util.Random;

View file

@ -1,9 +1,9 @@
package org.betterx.bclib.world.generator.map.square; package org.betterx.bclib.api.v2.generator.map.square;
import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.WorldgenRandom;
import org.betterx.bclib.api.v2.generator.BiomePicker;
import org.betterx.bclib.interfaces.BiomeChunk; import org.betterx.bclib.interfaces.BiomeChunk;
import org.betterx.bclib.world.generator.BiomePicker;
public class SquareBiomeChunk implements BiomeChunk { public class SquareBiomeChunk implements BiomeChunk {
private static final int BIT_OFFSET = 4; private static final int BIT_OFFSET = 4;

View file

@ -1,16 +1,16 @@
package org.betterx.bclib.world.generator.map.square; package org.betterx.bclib.api.v2.generator.map.square;
import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.ChunkPos;
import net.minecraft.world.level.levelgen.LegacyRandomSource; import net.minecraft.world.level.levelgen.LegacyRandomSource;
import net.minecraft.world.level.levelgen.WorldgenRandom; import net.minecraft.world.level.levelgen.WorldgenRandom;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import org.betterx.bclib.api.v2.generator.BiomePicker;
import org.betterx.bclib.interfaces.BiomeChunk; import org.betterx.bclib.interfaces.BiomeChunk;
import org.betterx.bclib.interfaces.BiomeMap; import org.betterx.bclib.interfaces.BiomeMap;
import org.betterx.bclib.interfaces.TriConsumer; import org.betterx.bclib.interfaces.TriConsumer;
import org.betterx.bclib.noise.OpenSimplexNoise; import org.betterx.bclib.noise.OpenSimplexNoise;
import org.betterx.bclib.util.MHelper; import org.betterx.bclib.util.MHelper;
import org.betterx.bclib.world.generator.BiomePicker;
import java.util.Map; import java.util.Map;
@ -125,7 +125,7 @@ public class SquareBiomeMap implements BiomeMap {
} }
ChunkPos cpos = new ChunkPos(MHelper.floor(x / SquareBiomeChunk.WIDTH), ChunkPos cpos = new ChunkPos(MHelper.floor(x / SquareBiomeChunk.WIDTH),
MHelper.floor(z / SquareBiomeChunk.WIDTH)); MHelper.floor(z / SquareBiomeChunk.WIDTH));
SquareBiomeChunk chunk = maps.get(cpos); SquareBiomeChunk chunk = maps.get(cpos);
if (chunk == null) { if (chunk == null) {
synchronized (random) { synchronized (random) {

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.worldgen; package org.betterx.bclib.api.v2.levelgen;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.MappedRegistry; import net.minecraft.core.MappedRegistry;
@ -25,21 +25,22 @@ import com.mojang.datafixers.util.Pair;
import com.mojang.serialization.Dynamic; import com.mojang.serialization.Dynamic;
import com.mojang.serialization.Lifecycle; import com.mojang.serialization.Lifecycle;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.WorldDataAPI; import org.betterx.bclib.api.v2.WorldDataAPI;
import org.betterx.bclib.api.v2.generator.BCLBiomeSource;
import org.betterx.bclib.api.v2.generator.BCLChunkGenerator;
import org.betterx.bclib.api.v2.generator.BCLibEndBiomeSource;
import org.betterx.bclib.api.v2.generator.BCLibNetherBiomeSource;
import org.betterx.bclib.mixin.common.RegistryOpsAccessor; import org.betterx.bclib.mixin.common.RegistryOpsAccessor;
import org.betterx.bclib.presets.worldgen.BCLWorldPresetSettings; import org.betterx.bclib.presets.worldgen.BCLWorldPresetSettings;
import org.betterx.bclib.presets.worldgen.BCLWorldPresets; import org.betterx.bclib.presets.worldgen.BCLWorldPresets;
import org.betterx.bclib.presets.worldgen.WorldPresetSettings; import org.betterx.bclib.presets.worldgen.WorldPresetSettings;
import org.betterx.bclib.util.ModUtil; import org.betterx.bclib.util.ModUtil;
import org.betterx.bclib.world.generator.BCLBiomeSource;
import org.betterx.bclib.world.generator.BCLibEndBiomeSource;
import org.betterx.bclib.world.generator.BCLibNetherBiomeSource;
import java.util.Map; import java.util.Map;
import java.util.Optional; import java.util.Optional;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
public class WorldGenUtil { public class LevelGenUtil {
private static final String TAG_VERSION = "version"; private static final String TAG_VERSION = "version";
private static final String TAG_BN_GEN_VERSION = "generator_version"; private static final String TAG_BN_GEN_VERSION = "generator_version";
private static String TAG_GENERATOR = "generator"; private static String TAG_GENERATOR = "generator";
@ -122,10 +123,10 @@ public class WorldGenUtil {
boolean generateStructures, boolean generateStructures,
boolean generateBonusChest) { boolean generateBonusChest) {
return createWorldFromPreset(BCLWorldPresets.DEFAULT.orElseThrow(), return createWorldFromPreset(BCLWorldPresets.DEFAULT.orElseThrow(),
registryAccess, registryAccess,
seed, seed,
generateStructures, generateStructures,
generateBonusChest); generateBonusChest);
} }
public static Pair<WorldGenSettings, RegistryAccess.Frozen> defaultWorldDataSupplier(RegistryAccess.Frozen frozen) { public static Pair<WorldGenSettings, RegistryAccess.Frozen> defaultWorldDataSupplier(RegistryAccess.Frozen frozen) {
@ -147,7 +148,7 @@ public class WorldGenUtil {
int biomeSourceVersion, int biomeSourceVersion,
RegistryAccess registryAccess, RegistryAccess registryAccess,
WorldGenSettings worldGenSettings WorldGenSettings worldGenSettings
) { ) {
Optional<Holder<LevelStem>> oLevelStem = referenceStemForVersion( Optional<Holder<LevelStem>> oLevelStem = referenceStemForVersion(
dimensionKey, dimensionKey,
biomeSourceVersion, biomeSourceVersion,
@ -155,12 +156,12 @@ public class WorldGenUtil {
worldGenSettings.seed(), worldGenSettings.seed(),
worldGenSettings.generateStructures(), worldGenSettings.generateStructures(),
worldGenSettings.generateStructures() worldGenSettings.generateStructures()
); );
return replaceGenerator(dimensionKey, return replaceGenerator(dimensionKey,
dimensionTypeKey, dimensionTypeKey,
registryAccess, registryAccess,
worldGenSettings, worldGenSettings,
oLevelStem.map(l -> l.value().generator()).orElseThrow()); oLevelStem.map(l -> l.value().generator()).orElseThrow());
} }
public static WorldGenSettings replaceGenerator( public static WorldGenSettings replaceGenerator(
@ -169,31 +170,31 @@ public class WorldGenUtil {
RegistryAccess registryAccess, RegistryAccess registryAccess,
WorldGenSettings worldGenSettings, WorldGenSettings worldGenSettings,
ChunkGenerator generator ChunkGenerator generator
) { ) {
Registry<DimensionType> dimensionTypeRegistry = registryAccess.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY); Registry<DimensionType> dimensionTypeRegistry = registryAccess.registryOrThrow(Registry.DIMENSION_TYPE_REGISTRY);
Registry<LevelStem> newDimensions = withDimension(dimensionKey, Registry<LevelStem> newDimensions = withDimension(dimensionKey,
dimensionTypeKey, dimensionTypeKey,
dimensionTypeRegistry, dimensionTypeRegistry,
worldGenSettings.dimensions(), worldGenSettings.dimensions(),
generator); generator);
return new WorldGenSettings(worldGenSettings.seed(), return new WorldGenSettings(worldGenSettings.seed(),
worldGenSettings.generateStructures(), worldGenSettings.generateStructures(),
worldGenSettings.generateBonusChest(), worldGenSettings.generateBonusChest(),
newDimensions); newDimensions);
} }
public static WorldGenSettings replaceStem( public static WorldGenSettings replaceStem(
ResourceKey<LevelStem> dimensionKey, ResourceKey<LevelStem> dimensionKey,
WorldGenSettings worldGenSettings, WorldGenSettings worldGenSettings,
LevelStem levelStem LevelStem levelStem
) { ) {
Registry<LevelStem> newDimensions = withDimension(dimensionKey, Registry<LevelStem> newDimensions = withDimension(dimensionKey,
worldGenSettings.dimensions(), worldGenSettings.dimensions(),
levelStem); levelStem);
return new WorldGenSettings(worldGenSettings.seed(), return new WorldGenSettings(worldGenSettings.seed(),
worldGenSettings.generateStructures(), worldGenSettings.generateStructures(),
worldGenSettings.generateBonusChest(), worldGenSettings.generateBonusChest(),
newDimensions); newDimensions);
} }
public static Registry<LevelStem> withDimension(ResourceKey<LevelStem> dimensionKey, public static Registry<LevelStem> withDimension(ResourceKey<LevelStem> dimensionKey,
@ -213,17 +214,17 @@ public class WorldGenUtil {
Registry<LevelStem> inputDimensions, Registry<LevelStem> inputDimensions,
LevelStem levelStem) { LevelStem levelStem) {
MappedRegistry<LevelStem> writableRegistry = new MappedRegistry<>(Registry.LEVEL_STEM_REGISTRY, MappedRegistry<LevelStem> writableRegistry = new MappedRegistry<>(Registry.LEVEL_STEM_REGISTRY,
Lifecycle.experimental(), Lifecycle.experimental(),
null); null);
writableRegistry.register(dimensionKey, writableRegistry.register(dimensionKey,
levelStem, levelStem,
Lifecycle.stable()); Lifecycle.stable());
for (Map.Entry<ResourceKey<LevelStem>, LevelStem> entry : inputDimensions.entrySet()) { for (Map.Entry<ResourceKey<LevelStem>, LevelStem> entry : inputDimensions.entrySet()) {
ResourceKey<LevelStem> resourceKey = entry.getKey(); ResourceKey<LevelStem> resourceKey = entry.getKey();
if (resourceKey == dimensionKey) continue; if (resourceKey == dimensionKey) continue;
writableRegistry.register(resourceKey, writableRegistry.register(resourceKey,
entry.getValue(), entry.getValue(),
inputDimensions.lifecycle(entry.getValue())); inputDimensions.lifecycle(entry.getValue()));
} }
return writableRegistry; return writableRegistry;
} }
@ -240,7 +241,7 @@ public class WorldGenUtil {
long seed, long seed,
boolean generateStructures, boolean generateStructures,
boolean generateBonusChest boolean generateBonusChest
) { ) {
final WorldGenSettings referenceSettings; final WorldGenSettings referenceSettings;
if (biomeSourceVersion == BCLBiomeSource.BIOME_SOURCE_VERSION_VANILLA) { if (biomeSourceVersion == BCLBiomeSource.BIOME_SOURCE_VERSION_VANILLA) {
referenceSettings = net.minecraft.world.level.levelgen.presets.WorldPresets.createNormalWorldFromPreset( referenceSettings = net.minecraft.world.level.levelgen.presets.WorldPresets.createNormalWorldFromPreset(

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.biomes; package org.betterx.bclib.api.v2.levelgen.biomes;
import net.minecraft.data.BuiltinRegistries; import net.minecraft.data.BuiltinRegistries;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
@ -14,8 +14,8 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.surface.SurfaceRuleUtil; import org.betterx.bclib.api.v2.levelgen.surface.SurfaceRuleUtil;
import org.betterx.bclib.api.tag.TagAPI; import org.betterx.bclib.api.v2.tag.TagAPI;
import org.betterx.bclib.util.WeightedList; import org.betterx.bclib.util.WeightedList;
import java.util.List; import java.util.List;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.biomes; package org.betterx.bclib.api.v2.levelgen.biomes;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.HolderSet; import net.minecraft.core.HolderSet;
@ -29,9 +29,9 @@ import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import org.betterx.bclib.api.features.BCLFeature; import org.betterx.bclib.api.v2.levelgen.features.BCLFeature;
import org.betterx.bclib.api.structures.BCLStructure; import org.betterx.bclib.api.v2.levelgen.structures.BCLStructure;
import org.betterx.bclib.api.surface.SurfaceRuleBuilder; import org.betterx.bclib.api.v2.levelgen.surface.SurfaceRuleBuilder;
import org.betterx.bclib.entity.BCLEntityWrapper; import org.betterx.bclib.entity.BCLEntityWrapper;
import org.betterx.bclib.mixin.common.BiomeGenerationSettingsAccessor; import org.betterx.bclib.mixin.common.BiomeGenerationSettingsAccessor;
import org.betterx.bclib.util.CollectionsUtil; import org.betterx.bclib.util.CollectionsUtil;

View file

@ -1,9 +1,9 @@
package org.betterx.bclib.api.biomes; package org.betterx.bclib.api.v2.levelgen.biomes;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
import org.betterx.bclib.api.v2.generator.BiomePicker;
import org.betterx.bclib.config.Configs; import org.betterx.bclib.config.Configs;
import org.betterx.bclib.world.generator.BiomePicker;
public class BCLBiomeSettings { public class BCLBiomeSettings {
public static Builder createBCL() { public static Builder createBCL() {

View file

@ -1,11 +1,13 @@
package org.betterx.bclib.api.biomes; package org.betterx.bclib.api.v2.levelgen.biomes;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.core.*; import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder;
import net.minecraft.core.HolderSet;
import net.minecraft.core.Registry;
import net.minecraft.data.BuiltinRegistries; import net.minecraft.data.BuiltinRegistries;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.tags.BiomeTags; import net.minecraft.tags.BiomeTags;
import net.minecraft.util.random.WeightedRandomList; import net.minecraft.util.random.WeightedRandomList;
import net.minecraft.world.entity.EntityType; import net.minecraft.world.entity.EntityType;
@ -16,16 +18,13 @@ import net.minecraft.world.level.LevelAccessor;
import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.WorldGenLevel;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.BiomeGenerationSettings; import net.minecraft.world.level.biome.BiomeGenerationSettings;
import net.minecraft.world.level.biome.BiomeSource;
import net.minecraft.world.level.biome.Biomes; import net.minecraft.world.level.biome.Biomes;
import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData; import net.minecraft.world.level.biome.MobSpawnSettings.SpawnerData;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;
import net.minecraft.world.level.chunk.ChunkAccess; import net.minecraft.world.level.chunk.ChunkAccess;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.chunk.PalettedContainerRO; import net.minecraft.world.level.chunk.PalettedContainerRO;
import net.minecraft.world.level.dimension.LevelStem; import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.GenerationStep.Decoration; import net.minecraft.world.level.levelgen.GenerationStep.Decoration;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
import net.minecraft.world.level.levelgen.feature.ConfiguredFeature; import net.minecraft.world.level.levelgen.feature.ConfiguredFeature;
import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.Feature;
import net.minecraft.world.level.levelgen.placement.PlacedFeature; import net.minecraft.world.level.levelgen.placement.PlacedFeature;
@ -40,28 +39,22 @@ import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import org.apache.commons.lang3.mutable.MutableInt;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.features.BCLFeature; import org.betterx.bclib.api.v2.levelgen.features.BCLFeature;
import org.betterx.bclib.api.tag.CommonBiomeTags; import org.betterx.bclib.api.v2.tag.CommonBiomeTags;
import org.betterx.bclib.api.tag.TagAPI; import org.betterx.bclib.api.v2.tag.TagAPI;
import org.betterx.bclib.interfaces.BiomeSourceAccessor;
import org.betterx.bclib.interfaces.NoiseGeneratorSettingsProvider;
import org.betterx.bclib.interfaces.SurfaceMaterialProvider; import org.betterx.bclib.interfaces.SurfaceMaterialProvider;
import org.betterx.bclib.interfaces.SurfaceRuleProvider;
import org.betterx.bclib.mixin.common.BiomeGenerationSettingsAccessor; import org.betterx.bclib.mixin.common.BiomeGenerationSettingsAccessor;
import org.betterx.bclib.mixin.common.MobSpawnSettingsAccessor; import org.betterx.bclib.mixin.common.MobSpawnSettingsAccessor;
import org.betterx.bclib.util.CollectionsUtil; import org.betterx.bclib.util.CollectionsUtil;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Map.Entry;
import java.util.Optional; import java.util.Optional;
import java.util.Set; import java.util.Set;
import java.util.function.BiConsumer; import java.util.function.BiConsumer;
import java.util.function.Supplier; import java.util.function.Supplier;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
public class BiomeAPI { public class BiomeAPI {
@ -79,7 +72,7 @@ public class BiomeAPI {
public static final BiomeType OTHER_END_LAND = new BiomeType("OTHER_END_LAND", END_LAND); public static final BiomeType OTHER_END_LAND = new BiomeType("OTHER_END_LAND", END_LAND);
public static final BiomeType OTHER_END_VOID = new BiomeType("OTHER_END_VOID", END_VOID); public static final BiomeType OTHER_END_VOID = new BiomeType("OTHER_END_VOID", END_VOID);
private static final Map<ResourceLocation, BiomeType> BIOME_TYPE_MAP = Maps.newHashMap(); static final Map<ResourceLocation, BiomeType> BIOME_TYPE_MAP = Maps.newHashMap();
public final BiomeType parentOrNull; public final BiomeType parentOrNull;
private final String debugName; private final String debugName;
@ -113,15 +106,6 @@ public class BiomeAPI {
public static final BCLBiome EMPTY_BIOME = new BCLBiome(Biomes.THE_VOID.location()); public static final BCLBiome EMPTY_BIOME = new BCLBiome(Biomes.THE_VOID.location());
private static final Map<ResourceLocation, BCLBiome> ID_MAP = Maps.newHashMap(); private static final Map<ResourceLocation, BCLBiome> ID_MAP = Maps.newHashMap();
private static final Map<Biome, BCLBiome> CLIENT = Maps.newHashMap();
private static Registry<Biome> biomeRegistry;
private static RegistryAccess registryAccess;
private static final Map<Holder<PlacedFeature>, Integer> FEATURE_ORDER = Maps.newHashMap();
private static final MutableInt FEATURE_ORDER_ID = new MutableInt(0);
private static final Map<ResourceKey<LevelStem>, List<BiConsumer<ResourceLocation, Holder<Biome>>>> MODIFICATIONS = Maps.newHashMap();
private static final Map<ResourceKey, List<BiConsumer<ResourceLocation, Holder<Biome>>>> TAG_ADDERS = Maps.newHashMap();
public static final BCLBiome NETHER_WASTES_BIOME = registerNetherBiome(getFromRegistry(Biomes.NETHER_WASTES).value()); public static final BCLBiome NETHER_WASTES_BIOME = registerNetherBiome(getFromRegistry(Biomes.NETHER_WASTES).value());
public static final BCLBiome CRIMSON_FOREST_BIOME = registerNetherBiome(getFromRegistry(Biomes.CRIMSON_FOREST).value()); public static final BCLBiome CRIMSON_FOREST_BIOME = registerNetherBiome(getFromRegistry(Biomes.CRIMSON_FOREST).value());
@ -141,53 +125,6 @@ public class BiomeAPI {
public static final BCLBiome SMALL_END_ISLANDS = registerEndVoidBiome(getFromRegistry(new ResourceLocation( public static final BCLBiome SMALL_END_ISLANDS = registerEndVoidBiome(getFromRegistry(new ResourceLocation(
"small_end_islands"))); "small_end_islands")));
private static void initFeatureOrder() {
if (!FEATURE_ORDER.isEmpty()) {
return;
}
BuiltinRegistries.BIOME
.entrySet()
.stream()
.filter(entry -> entry
.getKey()
.location()
.getNamespace()
.equals("minecraft"))
.map(Entry::getValue)
.map(biome -> (BiomeGenerationSettingsAccessor) biome.getGenerationSettings())
.map(BiomeGenerationSettingsAccessor::bclib_getFeatures)
.forEach(stepFeatureSuppliers -> stepFeatureSuppliers.forEach(step -> step.forEach(feature -> {
FEATURE_ORDER.computeIfAbsent(feature, f -> FEATURE_ORDER_ID.getAndIncrement());
})));
}
/**
* Initialize registry for current server.
*
* @param access - The new, active {@link RegistryAccess} for the current session.
*/
public static void initRegistry(RegistryAccess access) {
if (access != registryAccess) {
BiomeAPI.registryAccess = access;
Registry<Biome> biomeRegistry = access.registry(Registry.BIOME_REGISTRY).orElse(null);
if (biomeRegistry != BiomeAPI.biomeRegistry) {
BiomeAPI.biomeRegistry = biomeRegistry;
CLIENT.clear();
}
}
}
/**
* For internal use only.
* <p>
* This method gets called before a world is loaded/created to flush cashes we build.
*/
public static void prepareNewLevel() {
}
/** /**
* Register {@link BCLBiome} instance and its {@link Biome} if necessary. * Register {@link BCLBiome} instance and its {@link Biome} if necessary.
* *
@ -251,7 +188,7 @@ public class BiomeAPI {
public static BCLBiome registerNetherBiome(BCLBiome bclBiome) { public static BCLBiome registerNetherBiome(BCLBiome bclBiome) {
registerBiome(bclBiome, BiomeType.BCL_NETHER); registerBiome(bclBiome, BiomeType.BCL_NETHER);
ResourceKey<Biome> key = BiomeAPI.getBiomeKey(bclBiome.getBiome()); ResourceKey<Biome> key = getBiomeKey(bclBiome.getBiome());
if (bclBiome.allowFabricRegistration()) { if (bclBiome.allowFabricRegistration()) {
bclBiome.forEachClimateParameter(p -> NetherBiomeData.addNetherBiome(key, p)); bclBiome.forEachClimateParameter(p -> NetherBiomeData.addNetherBiome(key, p));
} }
@ -282,7 +219,7 @@ public class BiomeAPI {
registerBiome(biome, BiomeType.BCL_END_LAND); registerBiome(biome, BiomeType.BCL_END_LAND);
float weight = biome.getGenChance(); float weight = biome.getGenChance();
ResourceKey<Biome> key = BiomeAPI.getBiomeKey(biome.getBiome()); ResourceKey<Biome> key = getBiomeKey(biome.getBiome());
if (biome.allowFabricRegistration()) { if (biome.allowFabricRegistration()) {
TheEndBiomeData.addEndBiomeReplacement(Biomes.END_HIGHLANDS, key, weight); TheEndBiomeData.addEndBiomeReplacement(Biomes.END_HIGHLANDS, key, weight);
TheEndBiomeData.addEndBiomeReplacement(Biomes.END_MIDLANDS, key, weight); TheEndBiomeData.addEndBiomeReplacement(Biomes.END_MIDLANDS, key, weight);
@ -331,7 +268,7 @@ public class BiomeAPI {
registerBiome(biome, BiomeType.END_VOID); registerBiome(biome, BiomeType.END_VOID);
float weight = biome.getGenChance(); float weight = biome.getGenChance();
ResourceKey<Biome> key = BiomeAPI.getBiomeKey(biome.getBiome()); ResourceKey<Biome> key = getBiomeKey(biome.getBiome());
if (biome.allowFabricRegistration()) { if (biome.allowFabricRegistration()) {
TheEndBiomeData.addEndBiomeReplacement(Biomes.SMALL_END_ISLANDS, key, weight); TheEndBiomeData.addEndBiomeReplacement(Biomes.SMALL_END_ISLANDS, key, weight);
} }
@ -375,7 +312,7 @@ public class BiomeAPI {
* @return {@link BCLBiome} or {@code BiomeAPI.EMPTY_BIOME}. * @return {@link BCLBiome} or {@code BiomeAPI.EMPTY_BIOME}.
*/ */
public static BCLBiome getFromBiome(Holder<Biome> biome) { public static BCLBiome getFromBiome(Holder<Biome> biome) {
if (biomeRegistry == null) { if (InternalBiomeAPI.biomeRegistry == null) {
return EMPTY_BIOME; return EMPTY_BIOME;
} }
return ID_MAP.getOrDefault(biome.unwrapKey().orElseThrow().location(), EMPTY_BIOME); return ID_MAP.getOrDefault(biome.unwrapKey().orElseThrow().location(), EMPTY_BIOME);
@ -389,14 +326,14 @@ public class BiomeAPI {
*/ */
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public static BCLBiome getRenderBiome(Biome biome) { public static BCLBiome getRenderBiome(Biome biome) {
BCLBiome endBiome = CLIENT.get(biome); BCLBiome endBiome = InternalBiomeAPI.CLIENT.get(biome);
if (endBiome == null) { if (endBiome == null) {
Minecraft minecraft = Minecraft.getInstance(); Minecraft minecraft = Minecraft.getInstance();
ResourceLocation id = minecraft.level.registryAccess() ResourceLocation id = minecraft.level.registryAccess()
.registryOrThrow(Registry.BIOME_REGISTRY) .registryOrThrow(Registry.BIOME_REGISTRY)
.getKey(biome); .getKey(biome);
endBiome = id == null ? EMPTY_BIOME : ID_MAP.getOrDefault(id, EMPTY_BIOME); endBiome = id == null ? EMPTY_BIOME : ID_MAP.getOrDefault(id, EMPTY_BIOME);
CLIENT.put(biome, endBiome); InternalBiomeAPI.CLIENT.put(biome, endBiome);
} }
return endBiome; return endBiome;
} }
@ -409,8 +346,8 @@ public class BiomeAPI {
*/ */
@Nullable @Nullable
public static ResourceKey getBiomeKey(Biome biome) { public static ResourceKey getBiomeKey(Biome biome) {
if (biomeRegistry != null) { if (InternalBiomeAPI.biomeRegistry != null) {
Optional<ResourceKey<Biome>> key = biomeRegistry.getResourceKey(biome); Optional<ResourceKey<Biome>> key = InternalBiomeAPI.biomeRegistry.getResourceKey(biome);
if (key.isPresent()) return key.get(); if (key.isPresent()) return key.get();
} }
return BuiltinRegistries.BIOME return BuiltinRegistries.BIOME
@ -426,8 +363,8 @@ public class BiomeAPI {
*/ */
public static ResourceLocation getBiomeID(Biome biome) { public static ResourceLocation getBiomeID(Biome biome) {
ResourceLocation id = null; ResourceLocation id = null;
if (biomeRegistry != null) { if (InternalBiomeAPI.biomeRegistry != null) {
id = biomeRegistry.getKey(biome); id = InternalBiomeAPI.biomeRegistry.getKey(biome);
} }
if (id == null) { if (id == null) {
id = BuiltinRegistries.BIOME.getKey(biome); id = BuiltinRegistries.BIOME.getKey(biome);
@ -468,17 +405,17 @@ public class BiomeAPI {
} }
public static Holder<Biome> getBiomeHolder(Biome biome) { public static Holder<Biome> getBiomeHolder(Biome biome) {
if (biomeRegistry != null) { if (InternalBiomeAPI.biomeRegistry != null) {
Optional<ResourceKey<Biome>> key = biomeRegistry.getResourceKey(biome); Optional<ResourceKey<Biome>> key = InternalBiomeAPI.biomeRegistry.getResourceKey(biome);
if (key.isPresent()) return biomeRegistry.getOrCreateHolderOrThrow(key.get()); if (key.isPresent()) return InternalBiomeAPI.biomeRegistry.getOrCreateHolderOrThrow(key.get());
} }
return BuiltinRegistries.BIOME.getOrCreateHolderOrThrow(BiomeAPI.getBiomeKey(biome)); return BuiltinRegistries.BIOME.getOrCreateHolderOrThrow(BiomeAPI.getBiomeKey(biome));
} }
public static Holder<Biome> getBiomeHolder(ResourceLocation biome) { public static Holder<Biome> getBiomeHolder(ResourceLocation biome) {
if (biomeRegistry != null) { if (InternalBiomeAPI.biomeRegistry != null) {
return getBiomeHolder(biomeRegistry.get(biome)); return getBiomeHolder(InternalBiomeAPI.biomeRegistry.get(biome));
} }
return getBiomeHolder(BuiltinRegistries.BIOME.get(biome)); return getBiomeHolder(BuiltinRegistries.BIOME.get(biome));
} }
@ -523,38 +460,6 @@ public class BiomeAPI {
return ID_MAP.containsKey(biomeID); return ID_MAP.containsKey(biomeID);
} }
/**
* Load biomes from Fabric API. For internal usage only.
*/
public static void loadFabricAPIBiomes() {
FabricBiomesData.NETHER_BIOMES.forEach((key) -> {
if (!hasBiome(key.location())) {
Optional<Holder<Biome>> optional = BuiltinRegistries.BIOME.getHolder(key);
if (optional.isPresent()) {
registerNetherBiome(optional.get().value());
}
}
});
FabricBiomesData.END_LAND_BIOMES.forEach((key, weight) -> {
if (!hasBiome(key.location())) {
Optional<Holder<Biome>> optional = BuiltinRegistries.BIOME.getHolder(key);
if (optional.isPresent()) {
registerEndLandBiome(optional.get(), weight);
}
}
});
FabricBiomesData.END_VOID_BIOMES.forEach((key, weight) -> {
if (!hasBiome(key.location())) {
Optional<Holder<Biome>> optional = BuiltinRegistries.BIOME.getHolder(key);
if (optional.isPresent()) {
registerEndVoidBiome(optional.get(), weight);
}
}
});
}
@Nullable @Nullable
public static Holder<Biome> getFromRegistry(ResourceLocation key) { public static Holder<Biome> getFromRegistry(ResourceLocation key) {
return BuiltinRegistries.BIOME.getHolder(ResourceKey.create(Registry.BIOME_REGISTRY, key)).orElseThrow(); return BuiltinRegistries.BIOME.getHolder(ResourceKey.create(Registry.BIOME_REGISTRY, key)).orElseThrow();
@ -602,7 +507,8 @@ public class BiomeAPI {
*/ */
public static void registerBiomeModification(ResourceKey<LevelStem> dimensionID, public static void registerBiomeModification(ResourceKey<LevelStem> dimensionID,
BiConsumer<ResourceLocation, Holder<Biome>> modification) { BiConsumer<ResourceLocation, Holder<Biome>> modification) {
List<BiConsumer<ResourceLocation, Holder<Biome>>> modifications = MODIFICATIONS.computeIfAbsent(dimensionID, List<BiConsumer<ResourceLocation, Holder<Biome>>> modifications = InternalBiomeAPI.MODIFICATIONS.computeIfAbsent(
dimensionID,
k -> Lists.newArrayList()); k -> Lists.newArrayList());
modifications.add(modification); modifications.add(modification);
} }
@ -635,46 +541,25 @@ public class BiomeAPI {
} }
/** /**
* For internal use only * Registers new biome modification for specified dimension that is executed when all
*/ * BiomeTags are finalized by the game during level load. Will work both for mod and
public static void _runBiomeTagAdders() { * datapack biomes.
for (var mod : TAG_ADDERS.entrySet()) {
Stream<ResourceLocation> s = null;
if (mod.getKey() == Level.NETHER) s = BiomeType.BIOME_TYPE_MAP.entrySet()
.stream()
.filter(e -> e.getValue()
.is(BiomeType.NETHER))
.map(e -> e.getKey());
else if (mod.getKey() == Level.END) s = BiomeType.BIOME_TYPE_MAP.entrySet()
.stream()
.filter(e -> e.getValue().is(BiomeType.END))
.map(e -> e.getKey());
if (s != null) {
s.forEach(id -> {
Holder<Biome> biomeHolder = BiomeAPI.getBiomeHolder(id);
if (biomeHolder.isBound()) {
mod.getValue().forEach(c -> c.accept(id, biomeHolder));
}
});
}
}
}
/**
* Registers new biome modification for specified dimension. Will work both for mod and datapack biomes.
* *
* @param dimensionID {@link ResourceLocation} dimension ID, example: Level.OVERWORLD or "minecraft:overworld". * @param dimensionID {@link ResourceLocation} dimension ID, example: Level.OVERWORLD or "minecraft:overworld".
* @param modification {@link BiConsumer} with {@link ResourceKey} biome ID and {@link Biome} parameters. * @param modification {@link BiConsumer} with {@link ResourceKey} biome ID and {@link Biome} parameters.
*/ */
public static void onFinishingBiomeTags(ResourceKey dimensionID, public static void onFinishingBiomeTags(ResourceKey dimensionID,
BiConsumer<ResourceLocation, Holder<Biome>> modification) { BiConsumer<ResourceLocation, Holder<Biome>> modification) {
List<BiConsumer<ResourceLocation, Holder<Biome>>> modifications = TAG_ADDERS.computeIfAbsent(dimensionID, List<BiConsumer<ResourceLocation, Holder<Biome>>> modifications = InternalBiomeAPI.TAG_ADDERS.computeIfAbsent(
dimensionID,
k -> Lists.newArrayList()); k -> Lists.newArrayList());
modifications.add(modification); modifications.add(modification);
} }
/** /**
* Registers new biome modification for the Nether. Will work both for mod and datapack biomes. * Registers new biome modification for the Nether dimension that is executed when all
* BiomeTags are finalized by the game during level load. Will work both for mod and
* datapack biomes.
* *
* @param modification {@link BiConsumer} with {@link ResourceLocation} biome ID and {@link Biome} parameters. * @param modification {@link BiConsumer} with {@link ResourceLocation} biome ID and {@link Biome} parameters.
*/ */
@ -683,7 +568,9 @@ public class BiomeAPI {
} }
/** /**
* Registers new biome modification for the End. Will work both for mod and datapack biomes. * Registers new biome modification for the End that is executed when all
* BiomeTags are finalized by the game during level load. Will work both for mod and
* datapack biomes.
* *
* @param modification {@link BiConsumer} with {@link ResourceLocation} biome ID and {@link Biome} parameters. * @param modification {@link BiConsumer} with {@link ResourceLocation} biome ID and {@link Biome} parameters.
*/ */
@ -691,91 +578,10 @@ public class BiomeAPI {
onFinishingBiomeTags(Level.END, modification); onFinishingBiomeTags(Level.END, modification);
} }
/**
* Will apply biome modiffications to world, internal usage only.
*
* @param level
*/
@Deprecated(forRemoval = true)
public static void applyModificationsDeprecated(ServerLevel level) {
//TODO: Now Disabled, because we fix the settings when everything gets loaded
if (level != null) return;
NoiseGeneratorSettings noiseGeneratorSettings = null;
final ChunkGenerator chunkGenerator = level.getChunkSource().getGenerator();
final BiomeSource source = chunkGenerator.getBiomeSource();
final Set<Holder<Biome>> biomes = source.possibleBiomes();
if (chunkGenerator instanceof NoiseGeneratorSettingsProvider gen)
noiseGeneratorSettings = gen.bclib_getNoiseGeneratorSettings();
// Datapacks (like Amplified Nether)will change the GeneratorSettings upon load, so we will
// only use the default Setting for Nether/End if we were unable to find a settings object
if (noiseGeneratorSettings == null) {
if (level.dimension() == Level.NETHER) {
noiseGeneratorSettings = BuiltinRegistries.NOISE_GENERATOR_SETTINGS.get(NoiseGeneratorSettings.NETHER);
} else if (level.dimension() == Level.END) {
noiseGeneratorSettings = BuiltinRegistries.NOISE_GENERATOR_SETTINGS.get(NoiseGeneratorSettings.END);
}
}
List<BiConsumer<ResourceLocation, Holder<Biome>>> modifications = MODIFICATIONS.get(level
.dimensionTypeRegistration()
.unwrapKey()
.orElseThrow());
for (Holder<Biome> biomeHolder : biomes) {
if (biomeHolder.isBound()) {
applyModificationsAndUpdateFeatures(modifications, biomeHolder);
}
}
if (noiseGeneratorSettings != null) {
final SurfaceRuleProvider provider = SurfaceRuleProvider.class.cast(noiseGeneratorSettings);
// Multiple Biomes can use the same generator. So we need to keep track of all Biomes that are
// Provided by all the BiomeSources that use the same generator.
// This happens for example when using the MiningDimensions, which reuses the generator for the
// Nethering Dimension
//MODIFIED_SURFACE_PROVIDERS.add(provider);
provider.bclib_addBiomeSource(source);
} else {
BCLib.LOGGER.warning("No generator for " + source);
}
((BiomeSourceAccessor) source).bclRebuildFeatures();
}
public static void applyModifications(BiomeSource source, ResourceKey<LevelStem> dimension) {
BCLib.LOGGER.info("Apply Modifications for " + dimension.location() + " BiomeSource " + source);
/*if (dimension.location().equals(LevelStem.NETHER)){
if (source instanceof BCLBiomeSource s) {
NetherBiomes.useLegacyGeneration = s.biomeSourceVersion==BCLBiomeSource.BIOME_SOURCE_VERSION_SQUARE;
}
}*/
final Set<Holder<Biome>> biomes = source.possibleBiomes();
List<BiConsumer<ResourceLocation, Holder<Biome>>> modifications = MODIFICATIONS.get(dimension);
for (Holder<Biome> biomeHolder : biomes) {
if (biomeHolder.isBound()) {
applyModificationsAndUpdateFeatures(modifications, biomeHolder);
}
}
}
private static void applyModificationsAndUpdateFeatures(List<BiConsumer<ResourceLocation, Holder<Biome>>> modifications,
Holder<Biome> biome) {
ResourceLocation biomeID = getBiomeID(biome);
if (modifications != null) {
modifications.forEach(consumer -> {
consumer.accept(biomeID, biome);
});
}
sortBiomeFeatures(biome);
}
/** /**
* Create a unique sort order for all Features of the Biome * Create a unique sort order for all Features of the Biome. This method is automatically called for each Biome
* after all biome Modifications were executed.
* *
* @param biome The {@link Biome} to sort the features for * @param biome The {@link Biome} to sort the features for
*/ */
@ -939,7 +745,7 @@ public class BiomeAPI {
} }
private static void sortFeatures(List<Holder<PlacedFeature>> features) { private static void sortFeatures(List<Holder<PlacedFeature>> features) {
initFeatureOrder(); InternalBiomeAPI.initFeatureOrder();
Set<Holder<PlacedFeature>> featuresWithoutDuplicates = Sets.newHashSet(); Set<Holder<PlacedFeature>> featuresWithoutDuplicates = Sets.newHashSet();
features.forEach(holder -> featuresWithoutDuplicates.add(holder)); features.forEach(holder -> featuresWithoutDuplicates.add(holder));
@ -950,12 +756,13 @@ public class BiomeAPI {
} }
features.forEach(feature -> { features.forEach(feature -> {
FEATURE_ORDER.computeIfAbsent(feature, f -> FEATURE_ORDER_ID.getAndIncrement()); InternalBiomeAPI.FEATURE_ORDER.computeIfAbsent(feature,
f -> InternalBiomeAPI.FEATURE_ORDER_ID.getAndIncrement());
}); });
features.sort((f1, f2) -> { features.sort((f1, f2) -> {
int v1 = FEATURE_ORDER.getOrDefault(f1, 70000); int v1 = InternalBiomeAPI.FEATURE_ORDER.getOrDefault(f1, 70000);
int v2 = FEATURE_ORDER.getOrDefault(f2, 70000); int v2 = InternalBiomeAPI.FEATURE_ORDER.getOrDefault(f2, 70000);
return Integer.compare(v1, v2); return Integer.compare(v1, v2);
}); });
} }

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.biomes; package org.betterx.bclib.api.v2.levelgen.biomes;
import net.minecraft.resources.ResourceKey; import net.minecraft.resources.ResourceKey;
import net.minecraft.world.level.biome.Biome; import net.minecraft.world.level.biome.Biome;

View file

@ -0,0 +1,229 @@
package org.betterx.bclib.api.v2.levelgen.biomes;
import net.minecraft.core.Holder;
import net.minecraft.core.Registry;
import net.minecraft.core.RegistryAccess;
import net.minecraft.data.BuiltinRegistries;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerLevel;
import net.minecraft.world.level.Level;
import net.minecraft.world.level.biome.Biome;
import net.minecraft.world.level.biome.BiomeSource;
import net.minecraft.world.level.chunk.ChunkGenerator;
import net.minecraft.world.level.dimension.LevelStem;
import net.minecraft.world.level.levelgen.NoiseGeneratorSettings;
import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import com.google.common.collect.Maps;
import org.apache.commons.lang3.mutable.MutableInt;
import org.betterx.bclib.BCLib;
import org.betterx.bclib.interfaces.BiomeSourceAccessor;
import org.betterx.bclib.interfaces.NoiseGeneratorSettingsProvider;
import org.betterx.bclib.interfaces.SurfaceRuleProvider;
import org.betterx.bclib.mixin.common.BiomeGenerationSettingsAccessor;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.function.BiConsumer;
import java.util.stream.Stream;
public class InternalBiomeAPI {
static final Map<Biome, BCLBiome> CLIENT = Maps.newHashMap();
static final Map<Holder<PlacedFeature>, Integer> FEATURE_ORDER = Maps.newHashMap();
static final MutableInt FEATURE_ORDER_ID = new MutableInt(0);
static final Map<ResourceKey<LevelStem>, List<BiConsumer<ResourceLocation, Holder<Biome>>>> MODIFICATIONS = Maps.newHashMap();
static final Map<ResourceKey, List<BiConsumer<ResourceLocation, Holder<Biome>>>> TAG_ADDERS = Maps.newHashMap();
static Registry<Biome> biomeRegistry;
static RegistryAccess registryAccess;
static void initFeatureOrder() {
if (!FEATURE_ORDER.isEmpty()) {
return;
}
BuiltinRegistries.BIOME
.entrySet()
.stream()
.filter(entry -> entry
.getKey()
.location()
.getNamespace()
.equals("minecraft"))
.map(Map.Entry::getValue)
.map(biome -> (BiomeGenerationSettingsAccessor) biome.getGenerationSettings())
.map(BiomeGenerationSettingsAccessor::bclib_getFeatures)
.forEach(stepFeatureSuppliers -> stepFeatureSuppliers.forEach(step -> step.forEach(feature -> {
FEATURE_ORDER.computeIfAbsent(feature, f -> FEATURE_ORDER_ID.getAndIncrement());
})));
}
/**
* Initialize registry for current server.
*
* @param access - The new, active {@link RegistryAccess} for the current session.
*/
public static void initRegistry(RegistryAccess access) {
if (access != registryAccess) {
registryAccess = access;
Registry<Biome> biomeRegistry = access.registry(Registry.BIOME_REGISTRY).orElse(null);
if (biomeRegistry != InternalBiomeAPI.biomeRegistry) {
InternalBiomeAPI.biomeRegistry = biomeRegistry;
CLIENT.clear();
}
}
}
/**
* For internal use only.
* <p>
* This method gets called before a world is loaded/created to flush cashes we build.
*/
public static void prepareNewLevel() {
}
/**
* Load biomes from Fabric API. For internal usage only.
*/
public static void loadFabricAPIBiomes() {
FabricBiomesData.NETHER_BIOMES.forEach((key) -> {
if (!BiomeAPI.hasBiome(key.location())) {
Optional<Holder<Biome>> optional = BuiltinRegistries.BIOME.getHolder(key);
if (optional.isPresent()) {
BiomeAPI.registerNetherBiome(optional.get().value());
}
}
});
FabricBiomesData.END_LAND_BIOMES.forEach((key, weight) -> {
if (!BiomeAPI.hasBiome(key.location())) {
Optional<Holder<Biome>> optional = BuiltinRegistries.BIOME.getHolder(key);
if (optional.isPresent()) {
BiomeAPI.registerEndLandBiome(optional.get(), weight);
}
}
});
FabricBiomesData.END_VOID_BIOMES.forEach((key, weight) -> {
if (!BiomeAPI.hasBiome(key.location())) {
Optional<Holder<Biome>> optional = BuiltinRegistries.BIOME.getHolder(key);
if (optional.isPresent()) {
BiomeAPI.registerEndVoidBiome(optional.get(), weight);
}
}
});
}
/**
* For internal use only
*/
public static void _runBiomeTagAdders() {
for (var mod : TAG_ADDERS.entrySet()) {
Stream<ResourceLocation> s = null;
if (mod.getKey() == Level.NETHER) s = BiomeAPI.BiomeType.BIOME_TYPE_MAP.entrySet()
.stream()
.filter(e -> e.getValue()
.is(BiomeAPI.BiomeType.NETHER))
.map(e -> e.getKey());
else if (mod.getKey() == Level.END) s = BiomeAPI.BiomeType.BIOME_TYPE_MAP.entrySet()
.stream()
.filter(e -> e.getValue().is(
BiomeAPI.BiomeType.END))
.map(e -> e.getKey());
if (s != null) {
s.forEach(id -> {
Holder<Biome> biomeHolder = BiomeAPI.getBiomeHolder(id);
if (biomeHolder.isBound()) {
mod.getValue().forEach(c -> c.accept(id, biomeHolder));
}
});
}
}
}
/**
* Will apply biome modifications to world, internal usage only.
*
* @param level
*/
@Deprecated(forRemoval = true)
public static void applyModificationsDeprecated(ServerLevel level) {
//TODO: Now Disabled, because we fix the settings when everything gets loaded
if (level != null) return;
NoiseGeneratorSettings noiseGeneratorSettings = null;
final ChunkGenerator chunkGenerator = level.getChunkSource().getGenerator();
final BiomeSource source = chunkGenerator.getBiomeSource();
final Set<Holder<Biome>> biomes = source.possibleBiomes();
if (chunkGenerator instanceof NoiseGeneratorSettingsProvider gen)
noiseGeneratorSettings = gen.bclib_getNoiseGeneratorSettings();
// Datapacks (like Amplified Nether)will change the GeneratorSettings upon load, so we will
// only use the default Setting for Nether/End if we were unable to find a settings object
if (noiseGeneratorSettings == null) {
if (level.dimension() == Level.NETHER) {
noiseGeneratorSettings = BuiltinRegistries.NOISE_GENERATOR_SETTINGS.get(NoiseGeneratorSettings.NETHER);
} else if (level.dimension() == Level.END) {
noiseGeneratorSettings = BuiltinRegistries.NOISE_GENERATOR_SETTINGS.get(NoiseGeneratorSettings.END);
}
}
List<BiConsumer<ResourceLocation, Holder<Biome>>> modifications = MODIFICATIONS.get(level
.dimensionTypeRegistration()
.unwrapKey()
.orElseThrow());
for (Holder<Biome> biomeHolder : biomes) {
if (biomeHolder.isBound()) {
applyModificationsAndUpdateFeatures(modifications, biomeHolder);
}
}
if (noiseGeneratorSettings != null) {
final SurfaceRuleProvider provider = SurfaceRuleProvider.class.cast(noiseGeneratorSettings);
// Multiple Biomes can use the same generator. So we need to keep track of all Biomes that are
// Provided by all the BiomeSources that use the same generator.
// This happens for example when using the MiningDimensions, which reuses the generator for the
// Nethering Dimension
//MODIFIED_SURFACE_PROVIDERS.add(provider);
provider.bclib_addBiomeSource(source);
} else {
BCLib.LOGGER.warning("No generator for " + source);
}
((BiomeSourceAccessor) source).bclRebuildFeatures();
}
public static void applyModifications(BiomeSource source, ResourceKey<LevelStem> dimension) {
BCLib.LOGGER.info("Apply Modifications for " + dimension.location() + " BiomeSource " + source);
/*if (dimension.location().equals(LevelStem.NETHER)){
if (source instanceof BCLBiomeSource s) {
NetherBiomes.useLegacyGeneration = s.biomeSourceVersion==BCLBiomeSource.BIOME_SOURCE_VERSION_SQUARE;
}
}*/
final Set<Holder<Biome>> biomes = source.possibleBiomes();
List<BiConsumer<ResourceLocation, Holder<Biome>>> modifications = MODIFICATIONS.get(dimension);
for (Holder<Biome> biomeHolder : biomes) {
if (biomeHolder.isBound()) {
applyModificationsAndUpdateFeatures(modifications, biomeHolder);
}
}
}
private static void applyModificationsAndUpdateFeatures(List<BiConsumer<ResourceLocation, Holder<Biome>>> modifications,
Holder<Biome> biome) {
ResourceLocation biomeID = BiomeAPI.getBiomeID(biome);
if (modifications != null) {
modifications.forEach(consumer -> {
consumer.accept(biomeID, biome);
});
}
BiomeAPI.sortBiomeFeatures(biome);
}
}

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.biomes; package org.betterx.bclib.api.v2.levelgen.biomes;
public class VanillaBiomeSettings extends BCLBiomeSettings { public class VanillaBiomeSettings extends BCLBiomeSettings {

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.level.block.Block; import net.minecraft.world.level.block.Block;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
@ -17,7 +17,7 @@ import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import net.minecraft.world.level.levelgen.placement.PlacementModifier; import net.minecraft.world.level.levelgen.placement.PlacementModifier;
import org.betterx.bclib.BCLib; import org.betterx.bclib.BCLib;
import org.betterx.bclib.api.features.config.*; import org.betterx.bclib.api.v2.levelgen.features.config.*;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.Optional; import java.util.Optional;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
import net.minecraft.core.Vec3i; import net.minecraft.core.Vec3i;
@ -18,7 +18,8 @@ import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvi
import net.minecraft.world.level.levelgen.placement.*; import net.minecraft.world.level.levelgen.placement.*;
import net.minecraft.world.level.material.Material; import net.minecraft.world.level.material.Material;
import org.betterx.bclib.api.features.placement.*; import org.betterx.bclib.api.v2.levelgen.features.placement.*;
import org.betterx.bclib.api.v2.tag.CommonBlockTags;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -324,7 +325,7 @@ public class BCLFeatureBuilder<FC extends FeatureConfiguration, F extends Featur
/** /**
* Cast a ray with max {@code distance} length to find the next solid Block. The ray will travel through replaceable * Cast a ray with max {@code distance} length to find the next solid Block. The ray will travel through replaceable
* Blocks (see {@link Material#isReplaceable()}) and will be accepted if it hits a block with the * Blocks (see {@link Material#isReplaceable()}) and will be accepted if it hits a block with the
* {@link org.betterx.bclib.api.tag.CommonBlockTags#TERRAIN}-tag * {@link CommonBlockTags#TERRAIN}-tag
* *
* @param dir The direction the ray is cast * @param dir The direction the ray is cast
* @param distance The maximum search Distance * @param distance The maximum search Distance

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
@ -9,7 +9,7 @@ import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext;
import net.minecraft.world.level.levelgen.placement.PlacedFeature; import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import net.minecraft.world.level.levelgen.placement.PlacementContext; import net.minecraft.world.level.levelgen.placement.PlacementContext;
import org.betterx.bclib.api.features.config.ConditionFeatureConfig; import org.betterx.bclib.api.v2.levelgen.features.config.ConditionFeatureConfig;
import java.util.Optional; import java.util.Optional;
import java.util.stream.Stream; import java.util.stream.Stream;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.WorldGenLevel; import net.minecraft.world.level.WorldGenLevel;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.valueproviders.UniformInt; import net.minecraft.util.valueproviders.UniformInt;
@ -14,8 +14,8 @@ import net.minecraft.world.level.levelgen.feature.configurations.SimpleBlockConf
import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider; import net.minecraft.world.level.levelgen.feature.stateproviders.BlockStateProvider;
import net.minecraft.world.level.levelgen.feature.stateproviders.RandomizedIntStateProvider; import net.minecraft.world.level.levelgen.feature.stateproviders.RandomizedIntStateProvider;
import org.betterx.bclib.api.features.config.PlaceFacingBlockConfig; import org.betterx.bclib.api.v2.levelgen.features.config.PlaceFacingBlockConfig;
import org.betterx.bclib.api.features.config.ScatterFeatureConfig; import org.betterx.bclib.api.v2.levelgen.features.config.ScatterFeatureConfig;
public class FastFeatures { public class FastFeatures {

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.Feature;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.BlockPos.MutableBlockPos;
@ -21,10 +21,10 @@ import net.minecraft.world.level.levelgen.structure.BoundingBox;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings; import net.minecraft.world.level.levelgen.structure.templatesystem.StructurePlaceSettings;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
import org.betterx.bclib.api.biomes.BiomeAPI; import org.betterx.bclib.api.v2.levelgen.biomes.BiomeAPI;
import org.betterx.bclib.api.tag.CommonBlockTags; import org.betterx.bclib.api.v2.levelgen.structures.templatesystem.DestructionStructureProcessor;
import org.betterx.bclib.api.v2.tag.CommonBlockTags;
import org.betterx.bclib.util.BlocksHelper; import org.betterx.bclib.util.BlocksHelper;
import org.betterx.bclib.world.processors.DestructionStructureProcessor;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;

View file

@ -1,10 +1,10 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.Feature;
import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import org.betterx.bclib.api.features.config.PlaceBlockFeatureConfig; import org.betterx.bclib.api.v2.levelgen.features.config.PlaceBlockFeatureConfig;
public class PlaceBlockFeature<FC extends PlaceBlockFeatureConfig> extends Feature<FC> { public class PlaceBlockFeature<FC extends PlaceBlockFeatureConfig> extends Feature<FC> {
public PlaceBlockFeature(Codec<FC> codec) { public PlaceBlockFeature(Codec<FC> codec) {

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;
@ -21,8 +21,8 @@ import net.minecraft.world.level.levelgen.feature.configurations.SimpleRandomFea
import net.minecraft.world.level.levelgen.placement.*; import net.minecraft.world.level.levelgen.placement.*;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import org.betterx.bclib.api.features.config.ScatterFeatureConfig; import org.betterx.bclib.api.v2.levelgen.features.config.ScatterFeatureConfig;
import org.betterx.bclib.api.tag.CommonBlockTags; import org.betterx.bclib.api.v2.tag.CommonBlockTags;
import org.betterx.bclib.util.BlocksHelper; import org.betterx.bclib.util.BlocksHelper;
import java.util.ArrayList; import java.util.ArrayList;

View file

@ -1,9 +1,9 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.world.level.levelgen.feature.Feature; import net.minecraft.world.level.levelgen.feature.Feature;
import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext;
import org.betterx.bclib.api.features.config.SequenceFeatureConfig; import org.betterx.bclib.api.v2.levelgen.features.config.SequenceFeatureConfig;
public class SequenceFeature extends Feature<SequenceFeatureConfig> { public class SequenceFeature extends Feature<SequenceFeatureConfig> {
public SequenceFeature() { public SequenceFeature() {

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.level.block.state.BlockState;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;
@ -7,9 +7,9 @@ import net.minecraft.world.level.levelgen.feature.Feature;
import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext; import net.minecraft.world.level.levelgen.feature.FeaturePlaceContext;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import org.betterx.bclib.api.features.config.TemplateFeatureConfig; import org.betterx.bclib.api.v2.levelgen.features.config.TemplateFeatureConfig;
import org.betterx.bclib.world.structures.StructureNBT; import org.betterx.bclib.api.v2.levelgen.structures.StructureNBT;
import org.betterx.bclib.world.structures.StructureWorldNBT; import org.betterx.bclib.api.v2.levelgen.structures.StructureWorldNBT;
public class TemplateFeature<FC extends TemplateFeatureConfig> extends Feature<FC> { public class TemplateFeature<FC extends TemplateFeatureConfig> extends Feature<FC> {

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features; package org.betterx.bclib.api.v2.levelgen.features;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.blockpredicates; package org.betterx.bclib.api.v2.levelgen.features.blockpredicates;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Vec3i; import net.minecraft.core.Vec3i;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.blockpredicates; package org.betterx.bclib.api.v2.levelgen.features.blockpredicates;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.config; package org.betterx.bclib.api.v2.levelgen.features.config;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration; import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfiguration;
@ -8,7 +8,7 @@ import net.minecraft.world.level.levelgen.placement.PlacementModifier;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import org.betterx.bclib.api.features.BCLFeature; import org.betterx.bclib.api.v2.levelgen.features.BCLFeature;
import java.util.Optional; import java.util.Optional;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.config; package org.betterx.bclib.api.v2.levelgen.features.config;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.config; package org.betterx.bclib.api.v2.levelgen.features.config;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.config; package org.betterx.bclib.api.v2.levelgen.features.config;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.config; package org.betterx.bclib.api.v2.levelgen.features.config;
import net.minecraft.core.Holder; import net.minecraft.core.Holder;
import net.minecraft.util.ExtraCodecs; import net.minecraft.util.ExtraCodecs;
@ -8,7 +8,7 @@ import net.minecraft.world.level.levelgen.placement.PlacedFeature;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import org.betterx.bclib.api.features.BCLFeature; import org.betterx.bclib.api.v2.levelgen.features.BCLFeature;
import java.util.List; import java.util.List;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.config; package org.betterx.bclib.api.v2.levelgen.features.config;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.ExtraCodecs; import net.minecraft.util.ExtraCodecs;
@ -6,8 +6,8 @@ import net.minecraft.world.level.levelgen.feature.configurations.FeatureConfigur
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import org.betterx.bclib.world.structures.StructurePlacementType; import org.betterx.bclib.api.v2.levelgen.structures.StructurePlacementType;
import org.betterx.bclib.world.structures.StructureWorldNBT; import org.betterx.bclib.api.v2.levelgen.structures.StructureWorldNBT;
import java.util.List; import java.util.List;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.placement; package org.betterx.bclib.api.v2.levelgen.features.placement;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.placement; package org.betterx.bclib.api.v2.levelgen.features.placement;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.placement; package org.betterx.bclib.api.v2.levelgen.features.placement;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.placement; package org.betterx.bclib.api.v2.levelgen.features.placement;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.placement; package org.betterx.bclib.api.v2.levelgen.features.placement;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.placement; package org.betterx.bclib.api.v2.levelgen.features.placement;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;
@ -25,7 +25,7 @@ public class IsEmptyAboveSampledFilter extends PlacementFilter {
.group( .group(
Codec.intRange(-32, 32).fieldOf("d1").orElse(4).forGetter((p) -> p.distance1), Codec.intRange(-32, 32).fieldOf("d1").orElse(4).forGetter((p) -> p.distance1),
Codec.intRange(-32, 32).fieldOf("d2").orElse(2).forGetter((p) -> p.distance1) Codec.intRange(-32, 32).fieldOf("d2").orElse(2).forGetter((p) -> p.distance1)
) )
.apply(instance, IsEmptyAboveSampledFilter::new)); .apply(instance, IsEmptyAboveSampledFilter::new));
public static PlacementFilter emptyAbove4() { public static PlacementFilter emptyAbove4() {

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.placement; package org.betterx.bclib.api.v2.levelgen.features.placement;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.placement; package org.betterx.bclib.api.v2.levelgen.features.placement;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Direction; import net.minecraft.core.Direction;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.placement; package org.betterx.bclib.api.v2.levelgen.features.placement;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.placement; package org.betterx.bclib.api.v2.levelgen.features.placement;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.placement; package org.betterx.bclib.api.v2.levelgen.features.placement;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.util.ExtraCodecs; import net.minecraft.util.ExtraCodecs;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.features.placement; package org.betterx.bclib.api.v2.levelgen.features.placement;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.util.RandomSource; import net.minecraft.util.RandomSource;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.structures; package org.betterx.bclib.api.v2.levelgen.structures;
import net.minecraft.core.*; import net.minecraft.core.*;
import net.minecraft.data.BuiltinRegistries; import net.minecraft.data.BuiltinRegistries;
@ -14,7 +14,7 @@ import net.minecraft.world.level.levelgen.structure.placement.StructurePlacement
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import org.betterx.bclib.api.biomes.BCLBiomeBuilder; import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeBuilder;
import org.betterx.bclib.mixin.common.StructuresAccessor; import org.betterx.bclib.mixin.common.StructuresAccessor;
import java.util.List; import java.util.List;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.api.structures; package org.betterx.bclib.api.v2.levelgen.structures;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
import net.minecraft.tags.TagKey; import net.minecraft.tags.TagKey;
@ -11,7 +11,7 @@ import net.minecraft.world.level.levelgen.structure.placement.RandomSpreadType;
import net.minecraft.world.level.levelgen.structure.placement.StructurePlacement; import net.minecraft.world.level.levelgen.structure.placement.StructurePlacement;
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import org.betterx.bclib.api.tag.TagAPI; import org.betterx.bclib.api.v2.tag.TagAPI;
import java.util.function.Function; import java.util.function.Function;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.world.structures; package org.betterx.bclib.api.v2.levelgen.structures;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.BlockPos.MutableBlockPos;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.world.structures; package org.betterx.bclib.api.v2.levelgen.structures;
import net.minecraft.util.StringRepresentable; import net.minecraft.util.StringRepresentable;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.world.structures; package org.betterx.bclib.api.v2.levelgen.structures;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.CompoundTag;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.world.structures; package org.betterx.bclib.api.v2.levelgen.structures;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.BlockPos.MutableBlockPos; import net.minecraft.core.BlockPos.MutableBlockPos;
@ -76,8 +76,8 @@ public class StructureWorldNBT extends StructureNBT {
) { ) {
return generateIfPlaceable(level, return generateIfPlaceable(level,
pos, pos,
StructureNBT.getRandomRotation(random), getRandomRotation(random),
StructureNBT.getRandomMirror(random) getRandomMirror(random)
); );
} }

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.world.structures; package org.betterx.bclib.api.v2.levelgen.structures;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.core.Registry; import net.minecraft.core.Registry;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.world.structures; package org.betterx.bclib.api.v2.levelgen.structures;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.resources.ResourceLocation; import net.minecraft.resources.ResourceLocation;
@ -17,7 +17,6 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemp
import com.mojang.serialization.Codec; import com.mojang.serialization.Codec;
import com.mojang.serialization.codecs.RecordCodecBuilder; import com.mojang.serialization.codecs.RecordCodecBuilder;
import org.betterx.bclib.api.structures.BCLStructure;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.world.processors; package org.betterx.bclib.api.v2.levelgen.structures.templatesystem;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.LevelReader;
@ -28,7 +28,7 @@ public class DestructionStructureProcessor extends StructureProcessor {
structureBlockInfo2.state, structureBlockInfo2.state,
worldView, worldView,
structureBlockInfo2.pos structureBlockInfo2.pos
) && MHelper.RANDOM.nextInt(chance) == 0) { ) && MHelper.RANDOM.nextInt(chance) == 0) {
return null; return null;
} }
return structureBlockInfo2; return structureBlockInfo2;

View file

@ -1,4 +1,4 @@
package org.betterx.bclib.world.processors; package org.betterx.bclib.api.v2.levelgen.structures.templatesystem;
import net.minecraft.core.BlockPos; import net.minecraft.core.BlockPos;
import net.minecraft.world.level.LevelReader; import net.minecraft.world.level.LevelReader;
@ -9,7 +9,7 @@ import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProc
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorType; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureProcessorType;
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo; import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate.StructureBlockInfo;
import org.betterx.bclib.api.biomes.BiomeAPI; import org.betterx.bclib.api.v2.levelgen.biomes.BiomeAPI;
public class TerrainStructureProcessor extends StructureProcessor { public class TerrainStructureProcessor extends StructureProcessor {
private final Block defaultBlock; private final Block defaultBlock;

Some files were not shown because too many files have changed in this diff Show more