BCLib/src/main/java/org/betterx/bclib/BCLib.java
2023-09-12 13:50:23 +02:00

189 lines
6.8 KiB
Java

package org.betterx.bclib;
import org.betterx.bclib.api.v2.dataexchange.DataExchangeAPI;
import org.betterx.bclib.api.v2.dataexchange.handler.autosync.*;
import org.betterx.bclib.api.v2.levelgen.LevelGenEvents;
import org.betterx.bclib.api.v2.levelgen.biomes.BCLBiomeRegistry;
import org.betterx.bclib.api.v2.levelgen.structures.BCLStructurePoolElementTypes;
import org.betterx.bclib.api.v2.levelgen.structures.TemplatePiece;
import org.betterx.bclib.api.v2.levelgen.surface.rules.Conditions;
import org.betterx.bclib.api.v2.poi.PoiManager;
import org.betterx.bclib.api.v3.levelgen.features.blockpredicates.BlockPredicates;
import org.betterx.bclib.api.v3.levelgen.features.placement.PlacementModifiers;
import org.betterx.bclib.api.v3.tag.BCLBlockTags;
import org.betterx.bclib.blocks.signs.BaseHangingSignBlock;
import org.betterx.bclib.blocks.signs.BaseSignBlock;
import org.betterx.bclib.commands.CommandRegistry;
import org.betterx.bclib.commands.arguments.BCLibArguments;
import org.betterx.bclib.complexmaterials.BCLWoodTypeWrapper;
import org.betterx.bclib.config.Configs;
import org.betterx.bclib.config.PathConfig;
import org.betterx.bclib.networking.VersionChecker;
import org.betterx.bclib.recipes.AlloyingRecipe;
import org.betterx.bclib.recipes.AnvilRecipe;
import org.betterx.bclib.recipes.CraftingRecipes;
import org.betterx.bclib.registry.BaseBlockEntities;
import org.betterx.bclib.registry.BaseRegistry;
import org.betterx.bclib.registry.BlockRegistry;
import org.betterx.datagen.bclib.tests.TestStructure;
import org.betterx.worlds.together.WorldsTogether;
import org.betterx.worlds.together.util.Logger;
import org.betterx.worlds.together.world.WorldConfig;
import net.minecraft.core.Registry;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.core.registries.Registries;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceKey;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.world.item.CreativeModeTab;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.Items;
import net.minecraft.world.level.material.MapColor;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.ModInitializer;
import net.fabricmc.fabric.api.itemgroup.v1.FabricItemGroup;
import net.fabricmc.loader.api.FabricLoader;
import java.util.List;
public class BCLib implements ModInitializer {
public static final String MOD_ID = "bclib";
public static final Logger LOGGER = new Logger(MOD_ID);
public static final boolean RUNS_NULLSCAPE = FabricLoader.getInstance()
.getModContainer("nullscape")
.isPresent();
public static final boolean ADD_TEST_DATA = false;
private void onDatagen() {
}
@Override
public void onInitialize() {
WorldsTogether.onInitialize();
BCLibArguments.register();
LevelGenEvents.register();
BlockPredicates.ensureStaticInitialization();
BCLBiomeRegistry.register();
BaseRegistry.register();
BaseBlockEntities.register();
CraftingRecipes.init();
BCLStructurePoolElementTypes.ensureStaticallyLoaded();
WorldConfig.registerModCache(MOD_ID);
DataExchangeAPI.registerMod(MOD_ID);
AnvilRecipe.register();
AlloyingRecipe.register();
Conditions.registerAll();
CommandRegistry.register();
BCLBlockTags.ensureStaticallyLoaded();
PoiManager.registerAll();
if (isDevEnvironment()) {
TestStructure.registerBase();
}
if (ADD_TEST_DATA) {
testObjects();
}
DataExchangeAPI.registerDescriptors(List.of(
HelloClient.DESCRIPTOR,
HelloServer.DESCRIPTOR,
RequestFiles.DESCRIPTOR,
SendFiles.DESCRIPTOR,
Chunker.DESCRIPTOR
)
);
BCLibPatch.register();
TemplatePiece.ensureStaticInitialization();
PlacementModifiers.ensureStaticInitialization();
Configs.save();
WorldsTogether.FORCE_SERVER_TO_BETTERX_PRESET = Configs.SERVER_CONFIG.forceBetterXPreset();
VersionChecker.registerMod(MOD_ID);
if (isDatagen()) {
onDatagen();
}
}
public static boolean isDevEnvironment() {
return FabricLoader.getInstance().isDevelopmentEnvironment();
}
public static boolean isDatagen() {
return System.getProperty("fabric-api.datagen") != null;
}
public static boolean isClient() {
return FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT;
}
public static ResourceLocation makeID(String path) {
return new ResourceLocation(MOD_ID, path);
}
public static BCLWoodTypeWrapper TEST_WOOD;
public static BaseSignBlock TEST_SIGN = null;
public static BaseHangingSignBlock TEST_HANGING_SIGN = null;
private static void testObjects() {
var bockReg = new BlockRegistry(new PathConfig(MOD_ID, "test"));
bockReg.register(
makeID("test_sign"),
TEST_SIGN
);
bockReg.registerBlockOnly(
makeID("test_wall_sign"),
TEST_SIGN.getWallSignBlock()
);
bockReg.register(
makeID("test_hanging_sign"),
TEST_HANGING_SIGN
);
bockReg.registerBlockOnly(
makeID("test_wall_hanging_sign"),
TEST_HANGING_SIGN.getWallSignBlock()
);
}
static {
if (ADD_TEST_DATA) {
TEST_WOOD = BCLWoodTypeWrapper.create(makeID("test_wood")).setColor(MapColor.COLOR_MAGENTA).build();
TEST_SIGN = new BaseSignBlock.Wood(TEST_WOOD);
TEST_HANGING_SIGN = new BaseHangingSignBlock.Wood(TEST_WOOD);
final ResourceKey<CreativeModeTab> TAB_TEST_KEY = ResourceKey.create(
Registries.CREATIVE_MODE_TAB,
makeID("test_tab")
);
CreativeModeTab.Builder builder = FabricItemGroup
.builder();
builder.title(Component.translatable("itemGroup.bclib.test"));
builder.icon(() -> new ItemStack(Items.BARRIER));
builder.displayItems((itemDisplayParameters, output) -> {
var list = List.of(TEST_SIGN.asItem(), TEST_HANGING_SIGN.asItem())
.stream().map(b -> new ItemStack(b, 1)).toList();
output.acceptAll(list);
});
final CreativeModeTab TAB_TEST = builder.build();
;
Registry.register(
BuiltInRegistries.CREATIVE_MODE_TAB,
TAB_TEST_KEY,
TAB_TEST
);
}
}
}