我的世界1.20.1forge模组进阶开发教程——Alex‘s mob的深入研究
citadel库
为了深入的研究生物的生成,所以需要研究一下alexmob的依赖citdel
Citadel
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.github.alexthe666.citadel;
import com.github.alexthe666.citadel.config.ConfigHolder;
import com.github.alexthe666.citadel.config.ServerConfig;
import com.github.alexthe666.citadel.item.ItemCitadelBook;
import com.github.alexthe666.citadel.item.ItemCitadelDebug;
import com.github.alexthe666.citadel.item.ItemCustomRender;
import com.github.alexthe666.citadel.server.CitadelEvents;
import com.github.alexthe666.citadel.server.block.CitadelLecternBlock;
import com.github.alexthe666.citadel.server.block.CitadelLecternBlockEntity;
import com.github.alexthe666.citadel.server.block.LecternBooks;
import com.github.alexthe666.citadel.server.generation.SpawnProbabilityModifier;
import com.github.alexthe666.citadel.server.generation.VillageHouseManager;
import com.github.alexthe666.citadel.server.message.AnimationMessage;
import com.github.alexthe666.citadel.server.message.DanceJukeboxMessage;
import com.github.alexthe666.citadel.server.message.MessageSyncPath;
import com.github.alexthe666.citadel.server.message.MessageSyncPathReached;
import com.github.alexthe666.citadel.server.message.PropertiesMessage;
import com.github.alexthe666.citadel.server.message.SyncClientTickRateMessage;
import com.github.alexthe666.citadel.web.WebHelper;
import com.mojang.serialization.Codec;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import net.minecraft.core.RegistryAccess;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.server.level.ServerPlayer;
import net.minecraft.world.item.Item;
import net.minecraft.world.level.block.Block;
import net.minecraft.world.level.block.Blocks;
import net.minecraft.world.level.block.entity.BlockEntityType;
import net.minecraft.world.level.block.entity.BlockEntityType.Builder;
import net.minecraft.world.level.block.state.BlockBehaviour.Properties;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.world.BiomeModifier;
import net.minecraftforge.event.server.ServerAboutToStartEvent;
import net.minecraftforge.eventbus.api.EventPriority;
import net.minecraftforge.eventbus.api.IEventBus;
import net.minecraftforge.eventbus.api.SubscribeEvent;
import net.minecraftforge.fml.DistExecutor;
import net.minecraftforge.fml.ModLoadingContext;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.config.ModConfig;
import net.minecraftforge.fml.config.ModConfig.Type;
import net.minecraftforge.fml.event.config.ModConfigEvent;
import net.minecraftforge.fml.event.lifecycle.FMLClientSetupEvent;
import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent;
import net.minecraftforge.fml.event.lifecycle.InterModEnqueueEvent;
import net.minecraftforge.fml.event.lifecycle.InterModProcessEvent;
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext;
import net.minecraftforge.network.NetworkDirection;
import net.minecraftforge.network.NetworkRegistry;
import net.minecraftforge.network.NetworkRegistry.ChannelBuilder;
import net.minecraftforge.network.simple.SimpleChannel;
import net.minecraftforge.registries.DeferredRegister;
import net.minecraftforge.registries.ForgeRegistries;
import net.minecraftforge.registries.RegistryObject;
import net.minecraftforge.registries.ForgeRegistries.Keys;
import net.minecraftforge.server.ServerLifecycleHooks;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
@Mod("citadel")
public class Citadel {
public static final Logger LOGGER = LogManager.getLogger("citadel");
private static final String PROTOCOL_VERSION = Integer.toString(1);
private static final ResourceLocation PACKET_NETWORK_NAME = new ResourceLocation("citadel:main_channel");
public static final SimpleChannel NETWORK_WRAPPER;
public static ServerProxy PROXY;
public static List<String> PATREONS;
public static final DeferredRegister<Item> ITEMS;
public static final DeferredRegister<Block> BLOCKS;
public static final DeferredRegister<BlockEntityType<?>> BLOCK_ENTITIES;
public static final RegistryObject<Item> DEBUG_ITEM;
public static final RegistryObject<Item> CITADEL_BOOK;
public static final RegistryObject<Item> EFFECT_ITEM;
public static final RegistryObject<Item> FANCY_ITEM;
public static final RegistryObject<Item> ICON_ITEM;
public static final RegistryObject<Block> LECTERN;
public static final RegistryObject<BlockEntityType<CitadelLecternBlockEntity>> LECTERN_BE;
public Citadel() {
IEventBus bus = FMLJavaModLoadingContext.get().getModEventBus();
bus.addListener(this::setup);
bus.addListener(this::enqueueIMC);
bus.addListener(this::processIMC);
bus.addListener(this::doClientStuff);
bus.addListener(this::onModConfigEvent);
ITEMS.register(bus);
BLOCKS.register(bus);
BLOCK_ENTITIES.register(bus);
DeferredRegister<Codec<? extends BiomeModifier>> serializers = DeferredRegister.create(Keys.BIOME_MODIFIER_SERIALIZERS, "citadel");
serializers.register(bus);
serializers.register("mob_spawn_probability", SpawnProbabilityModifier::makeCodec);
MinecraftForge.EVENT_BUS.register(this);
MinecraftForge.EVENT_BUS.register(PROXY);
ModLoadingContext modLoadingContext = ModLoadingContext.get();
modLoadingContext.registerConfig(Type.COMMON, ConfigHolder.SERVER_SPEC);
MinecraftForge.EVENT_BUS.register(new CitadelEvents());
}
public static <MSG> void sendMSGToServer(MSG message) {
NETWORK_WRAPPER.sendToServer(message);
}
public static <MSG> void sendMSGToAll(MSG message) {
for(ServerPlayer player : ServerLifecycleHooks.getCurrentServer().getPlayerList().getPlayers()) {
sendNonLocal(message, player);
}
}
public static <MSG> void sendNonLocal(MSG msg, ServerPlayer player) {
NETWORK_WRAPPER.sendTo(msg, player.connection.connection, NetworkDirection.PLAY_TO_CLIENT);
}
private void setup(FMLCommonSetupEvent event) {
PROXY.onPreInit();
LecternBooks.init();
int packetsRegistered = 0;
NETWORK_WRAPPER.registerMessage(packetsRegistered++, PropertiesMessage.class, PropertiesMessage::write, PropertiesMessage::read, PropertiesMessage.Handler::handle);
NETWORK_WRAPPER.registerMessage(packetsRegistered++, AnimationMessage.class, AnimationMessage::write, AnimationMessage::read, AnimationMessage.Handler::handle);
NETWORK_WRAPPER.registerMessage(packetsRegistered++, SyncClientTickRateMessage.class, SyncClientTickRateMessage::write, SyncClientTickRateMessage::read, SyncClientTickRateMessage.Handler::handle);
NETWORK_WRAPPER.registerMessage(packetsRegistered++, DanceJukeboxMessage.class, DanceJukeboxMessage::write, DanceJukeboxMessage::read, DanceJukeboxMessage.Handler::handle);
NETWORK_WRAPPER.registerMessage(packetsRegistered++, MessageSyncPath.class, MessageSyncPath::write, MessageSyncPath::read, MessageSyncPath.Handler::handle);
NETWORK_WRAPPER.registerMessage(packetsRegistered++, MessageSyncPathReached.class, MessageSyncPathReached::write, MessageSyncPathReached::read, MessageSyncPathReached.Handler::handle);
BufferedReader urlContents =