Refactored BCLib Package Structure
This commit is contained in:
parent
c658a24750
commit
f6d5f85ec1
206 changed files with 974 additions and 945 deletions
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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,
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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);
|
|
@ -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;
|
||||||
|
|
|
@ -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();
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
|
@ -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
|
|
@ -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;
|
||||||
|
|
|
@ -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) {
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
|
@ -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 {
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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() {
|
|
@ -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;
|
|
@ -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) {
|
|
@ -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;
|
|
@ -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()) {
|
|
@ -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;
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
package org.betterx.bclib.api.v2.generator;
|
||||||
|
|
||||||
|
public enum BiomeType {
|
||||||
|
LAND, VOID
|
||||||
|
}
|
|
@ -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;
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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) {
|
|
@ -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(
|
|
@ -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;
|
|
@ -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;
|
|
@ -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() {
|
|
@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
|
@ -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;
|
|
@ -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);
|
||||||
|
}
|
||||||
|
}
|
|
@ -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 {
|
|
@ -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;
|
|
@ -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;
|
|
@ -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
|
|
@ -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;
|
|
@ -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;
|
|
@ -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 {
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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) {
|
|
@ -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;
|
|
@ -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() {
|
|
@ -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;
|
|
@ -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> {
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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() {
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
|
@ -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)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
|
@ -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;
|
|
@ -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;
|
|
@ -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
Loading…
Add table
Add a link
Reference in a new issue