162 lines
5.2 KiB
Java
162 lines
5.2 KiB
Java
package net.Chipperfluff.chipi;
|
|
|
|
import net.Chipperfluff.chipi.advancement.ModCriteria;
|
|
import net.Chipperfluff.chipi.block.ChipperPortalBlock;
|
|
import net.Chipperfluff.chipi.block.ModBlocks;
|
|
import net.Chipperfluff.chipi.command.ChpCommand;
|
|
import net.Chipperfluff.chipi.effect.ChipiBlessingEvents;
|
|
import net.Chipperfluff.chipi.effect.ChipiHungerHandler;
|
|
import net.Chipperfluff.chipi.effect.ModEffects;
|
|
import net.Chipperfluff.chipi.entity.ModEntities;
|
|
import net.Chipperfluff.chipi.entity.custom.MepEntity;
|
|
import net.Chipperfluff.chipi.item.ModItemGroups;
|
|
import net.Chipperfluff.chipi.item.ModItems;
|
|
import net.Chipperfluff.chipi.world.gen.ChipiDungeonGenerator;
|
|
import net.fabricmc.api.ModInitializer;
|
|
import net.fabricmc.fabric.api.biome.v1.BiomeModifications;
|
|
import net.fabricmc.fabric.api.biome.v1.BiomeSelectors;
|
|
import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback;
|
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
|
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerTickEvents;
|
|
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents;
|
|
import net.fabricmc.fabric.api.object.builder.v1.entity.FabricDefaultAttributeRegistry;
|
|
import net.minecraft.entity.player.PlayerEntity;
|
|
import net.minecraft.registry.RegistryKey;
|
|
import net.minecraft.registry.RegistryKeys;
|
|
import net.minecraft.server.MinecraftServer;
|
|
import net.minecraft.server.world.ServerWorld;
|
|
import net.minecraft.structure.StructurePlacementData;
|
|
import net.minecraft.structure.StructureTemplate;
|
|
import net.minecraft.util.Identifier;
|
|
import net.minecraft.util.math.BlockPos;
|
|
import net.minecraft.world.GameRules;
|
|
import net.minecraft.world.World;
|
|
import net.minecraft.world.gen.GenerationStep;
|
|
|
|
public class ChipiMod implements ModInitializer {
|
|
|
|
public static final String MOD_ID = "chipi";
|
|
|
|
public static final RegistryKey<World> CHIPI_DIMENSION_KEY =
|
|
RegistryKey.of(
|
|
RegistryKeys.WORLD,
|
|
new Identifier("chipi", "chipi_dimension")
|
|
);
|
|
|
|
private static final Identifier SPAWN_STRUCTURE =
|
|
new Identifier("chipi", "spawn");
|
|
|
|
private static MinecraftServer SERVER;
|
|
|
|
@Override
|
|
public void onInitialize() {
|
|
|
|
ModBlocks.register();
|
|
ModItems.register();
|
|
ModItemGroups.register();
|
|
ModCriteria.register();
|
|
ModEntities.register();
|
|
ModEffects.register();
|
|
ChipiBlessingEvents.register();
|
|
ChipiHungerHandler.register();
|
|
|
|
FabricDefaultAttributeRegistry.register(
|
|
ModEntities.MEP,
|
|
MepEntity.createMepAttributes()
|
|
);
|
|
|
|
BiomeModifications.addFeature(
|
|
BiomeSelectors.foundInOverworld(),
|
|
GenerationStep.Feature.UNDERGROUND_ORES,
|
|
RegistryKey.of(
|
|
RegistryKeys.PLACED_FEATURE,
|
|
new Identifier("chipi", "chipper_ore")
|
|
)
|
|
);
|
|
|
|
CommandRegistrationCallback.EVENT.register(
|
|
(dispatcher, registryAccess, environment) -> {
|
|
ChpCommand.register(dispatcher);
|
|
}
|
|
);
|
|
|
|
ServerLifecycleEvents.SERVER_STARTED.register(server -> {
|
|
SERVER = server;
|
|
});
|
|
|
|
ServerTickEvents.END_WORLD_TICK.register(world -> {
|
|
if (!world.getRegistryKey().equals(CHIPI_DIMENSION_KEY)) {
|
|
return;
|
|
}
|
|
|
|
for (PlayerEntity player : world.getPlayers()) {
|
|
if (player.getBlockY() >= 50) {
|
|
continue;
|
|
}
|
|
|
|
ChipperPortalBlock.teleportToChipiSpawn(world, player);
|
|
}
|
|
});
|
|
|
|
ServerWorldEvents.LOAD.register((server, world) -> {
|
|
if (!world.getRegistryKey().equals(CHIPI_DIMENSION_KEY)) {
|
|
return;
|
|
}
|
|
|
|
world.setTimeOfDay(18000);
|
|
world.getGameRules()
|
|
.get(GameRules.DO_DAYLIGHT_CYCLE)
|
|
.set(false, server);
|
|
|
|
SpawnPlacedState state =
|
|
world.getPersistentStateManager().getOrCreate(
|
|
SpawnPlacedState::fromNbt,
|
|
SpawnPlacedState::new,
|
|
"chipi_spawn"
|
|
);
|
|
|
|
if (state.placed) {
|
|
return;
|
|
}
|
|
|
|
StructureTemplate spawnTemplate =
|
|
world.getStructureTemplateManager()
|
|
.getTemplate(SPAWN_STRUCTURE)
|
|
.orElse(null);
|
|
|
|
if (spawnTemplate == null) {
|
|
System.err.println("[CHIPI] spawn.nbt not found!");
|
|
return;
|
|
}
|
|
|
|
BlockPos spawnCenter = new BlockPos(0, 80, 0);
|
|
|
|
spawnTemplate.place(
|
|
world,
|
|
spawnCenter,
|
|
spawnCenter,
|
|
new StructurePlacementData(),
|
|
world.getRandom(),
|
|
2
|
|
);
|
|
|
|
world.setSpawnPos(spawnCenter.up(), 0.0f);
|
|
|
|
ChipiDungeonGenerator.generateInitialLayout(world, spawnCenter);
|
|
|
|
state.placed = true;
|
|
state.markDirty();
|
|
|
|
System.out.println("[CHIPI] Spawn + initial dungeon generated");
|
|
});
|
|
}
|
|
|
|
public static ServerWorld getChipiWorld() {
|
|
if (SERVER == null) {
|
|
return null;
|
|
}
|
|
|
|
return SERVER.getWorld(CHIPI_DIMENSION_KEY);
|
|
}
|
|
}
|