下面列出了怎么用net.minecraft.inventory.container.ContainerType的API类实例代码及写法,或者点击链接到github查看源代码。
@SuppressWarnings ("unchecked")
private void handleOpenContainer(PacketCustom packet, Minecraft mc) {
ContainerType<?> rawType = packet.readRegistryIdUnsafe(ForgeRegistries.CONTAINERS);
int windowId = packet.readVarInt();
ITextComponent name = packet.readTextComponent();
if (rawType instanceof ICCLContainerType<?>) {
ICCLContainerType<?> type = (ICCLContainerType<?>) rawType;
ScreenManager.getScreenFactory(rawType, mc, windowId, name)//
.map(e -> (ScreenManager.IScreenFactory<Container, ?>) e)//
.ifPresent(screenFactory -> {
Container container = type.create(windowId, Minecraft.getInstance().player.inventory, packet);
Screen screen = screenFactory.create(container, mc.player.inventory, name);
mc.player.openContainer = ((IHasContainer<?>) screen).getContainer();
mc.displayGuiScreen(screen);
});
}
}
public static void openContainer(ServerPlayerEntity player, INamedContainerProvider containerProvider, Consumer<MCDataOutput> packetConsumer) {
if (player.world.isRemote()) {
return;
}
player.closeContainer();
player.getNextWindowId();
int containerId = player.currentWindowId;
Container container = containerProvider.createMenu(containerId, player.inventory, player);
ContainerType<?> type = container.getType();
PacketCustom packet = new PacketCustom(CCLNetwork.NET_CHANNEL, C_OPEN_CONTAINER);
packet.writeRegistryIdUnsafe(ForgeRegistries.CONTAINERS, type);
packet.writeVarInt(containerId);
packet.writeTextComponent(containerProvider.getDisplayName());
packetConsumer.accept(packet);
packet.sendToPlayer(player);
player.openContainer = container;
player.openContainer.addListener(player);
MinecraftForge.EVENT_BUS.post(new PlayerContainerEvent.Open(player, container));
}
public SurvivalistMod()
{
instance = this;
ModLoadingContext modLoadingContext = ModLoadingContext.get();
IEventBus modEventBus = FMLJavaModLoadingContext.get().getModEventBus();
HELPER.subscribeEvents(modEventBus);
SurvivalistBlocks.HELPER.subscribeEvents(modEventBus);
SurvivalistItems.HELPER.subscribeEvents(modEventBus);
SurvivalistTileEntityTypes.HELPER.subscribeEvents(modEventBus);
modEventBus.addGenericListener(ContainerType.class, this::registerContainers);
modEventBus.addGenericListener(IRecipeSerializer.class, this::registerRecipeSerializers);
modEventBus.addGenericListener(GlobalLootModifierSerializer.class, this::lootModifiers);
modEventBus.addListener(this::commonSetup);
modEventBus.addListener(this::clientSetup);
modEventBus.addListener(this::gatherData);
MinecraftForge.EVENT_BUS.addListener(this::serverStarting);
modLoadingContext.registerConfig(ModConfig.Type.SERVER, ConfigManager.SERVER_SPEC);
}
private void registerContainers(RegistryEvent.Register<ContainerType<?>> event)
{
event.getRegistry().registerAll(
withName(new ContainerType<>(DryingRackContainer::new), "rack"),
withName(new ContainerType<>(SawmillContainer::new), "sawmill")
);
}
@SubscribeEvent
public static void onRegisterContainers(RegistryEvent.Register<ContainerType<?>> event) {
IForgeRegistry<ContainerType<?>> registry = event.getRegistry();
registry.register(ICCLContainerType.create(ContainerEnderItemStorage::new).setRegistryName("item_storage"));
}
static <T extends Container> ContainerType<T> create(ICCLContainerFactory<T> factory) {
return new CCLContainerType<>(factory);
}