MenuScreens.java
net.minecraft.client.gui.screens.MenuScreens
信息
- 全限定名:net.minecraft.client.gui.screens.MenuScreens
- 类型:public class
- 包:net.minecraft.client.gui.screens
- 源码路径:src/main/java/net/minecraft/client/gui/screens/MenuScreens.java
- 起始行号:L39
- 职责:
TODO
字段/常量
-
LOGGER- 类型:
Logger - 修饰符:
private static final - 源码定位:
L40 - 说明:
TODO
- 类型:
-
SCREENS- 类型:
Map<MenuType<?>,MenuScreens.ScreenConstructor<?,?>> - 修饰符:
private static final - 源码定位:
L41 - 说明:
TODO
- 类型:
内部类/嵌套类型
net.minecraft.client.gui.screens.MenuScreens.ScreenConstructor- 类型:
interface - 修饰符:
private - 源码定位:
L107 - 说明:
TODO
- 类型:
构造器
- 无
方法
下面的方法块按源码顺序生成。
public static <T extends AbstractContainerMenu> void create(MenuType<T> type, Minecraft minecraft, int containerId, Component title) @ L43
- 方法名:create
- 源码定位:L43
- 返回类型:
void - 修饰符:public static
参数:
- type: MenuType
- minecraft: Minecraft
- containerId: int
- title: Component
说明:
TODO
private static <T extends AbstractContainerMenu> MenuScreens.ScreenConstructor<T,?> getConstructor(MenuType<T> type) @ L52
- 方法名:getConstructor
- 源码定位:L52
- 返回类型:
MenuScreens.ScreenConstructor<T,?> - 修饰符:private static
参数:
- type: MenuType
说明:
TODO
private static <M extends AbstractContainerMenu,U extends Screen &MenuAccess<M>> void register(MenuType<?extends M> type, MenuScreens.ScreenConstructor<M,U> factory) @ L56
- 方法名:register
- 源码定位:L56
- 返回类型:<M extends AbstractContainerMenu,U extends Screen &MenuAccess
> void - 修饰符:private static
参数:
- type: MenuType<?extends M>
- factory: MenuScreens.ScreenConstructor<M,U>
说明:
TODO
public static boolean selfTest() @ L65
- 方法名:selfTest
- 源码定位:L65
- 返回类型:boolean
- 修饰符:public static
参数:
- 无
说明:
TODO
代码
@OnlyIn(Dist.CLIENT)
public class MenuScreens {
private static final Logger LOGGER = LogUtils.getLogger();
private static final Map<MenuType<?>, MenuScreens.ScreenConstructor<?, ?>> SCREENS = Maps.newHashMap();
public static <T extends AbstractContainerMenu> void create(MenuType<T> type, Minecraft minecraft, int containerId, Component title) {
MenuScreens.ScreenConstructor<T, ?> constructor = getConstructor(type);
if (constructor == null) {
LOGGER.warn("Failed to create screen for menu type: {}", BuiltInRegistries.MENU.getKey(type));
} else {
constructor.fromPacket(title, type, minecraft, containerId);
}
}
private static <T extends AbstractContainerMenu> MenuScreens.@Nullable ScreenConstructor<T, ?> getConstructor(MenuType<T> type) {
return (MenuScreens.ScreenConstructor<T, ?>)SCREENS.get(type);
}
private static <M extends AbstractContainerMenu, U extends Screen & MenuAccess<M>> void register(
MenuType<? extends M> type, MenuScreens.ScreenConstructor<M, U> factory
) {
MenuScreens.ScreenConstructor<?, ?> prev = SCREENS.put(type, factory);
if (prev != null) {
throw new IllegalStateException("Duplicate registration for " + BuiltInRegistries.MENU.getKey(type));
}
}
public static boolean selfTest() {
boolean failed = false;
for (MenuType<?> menuType : BuiltInRegistries.MENU) {
if (!SCREENS.containsKey(menuType)) {
LOGGER.debug("Menu {} has no matching screen", BuiltInRegistries.MENU.getKey(menuType));
failed = true;
}
}
return failed;
}
static {
register(MenuType.GENERIC_9x1, ContainerScreen::new);
register(MenuType.GENERIC_9x2, ContainerScreen::new);
register(MenuType.GENERIC_9x3, ContainerScreen::new);
register(MenuType.GENERIC_9x4, ContainerScreen::new);
register(MenuType.GENERIC_9x5, ContainerScreen::new);
register(MenuType.GENERIC_9x6, ContainerScreen::new);
register(MenuType.GENERIC_3x3, DispenserScreen::new);
register(MenuType.CRAFTER_3x3, CrafterScreen::new);
register(MenuType.ANVIL, AnvilScreen::new);
register(MenuType.BEACON, BeaconScreen::new);
register(MenuType.BLAST_FURNACE, BlastFurnaceScreen::new);
register(MenuType.BREWING_STAND, BrewingStandScreen::new);
register(MenuType.CRAFTING, CraftingScreen::new);
register(MenuType.ENCHANTMENT, EnchantmentScreen::new);
register(MenuType.FURNACE, FurnaceScreen::new);
register(MenuType.GRINDSTONE, GrindstoneScreen::new);
register(MenuType.HOPPER, HopperScreen::new);
register(MenuType.LECTERN, LecternScreen::new);
register(MenuType.LOOM, LoomScreen::new);
register(MenuType.MERCHANT, MerchantScreen::new);
register(MenuType.SHULKER_BOX, ShulkerBoxScreen::new);
register(MenuType.SMITHING, SmithingScreen::new);
register(MenuType.SMOKER, SmokerScreen::new);
register(MenuType.CARTOGRAPHY_TABLE, CartographyTableScreen::new);
register(MenuType.STONECUTTER, StonecutterScreen::new);
}
@OnlyIn(Dist.CLIENT)
private interface ScreenConstructor<T extends AbstractContainerMenu, U extends Screen & MenuAccess<T>> {
default void fromPacket(Component title, MenuType<T> type, Minecraft minecraft, int containerId) {
U screen = this.create(type.create(containerId, minecraft.player.getInventory()), minecraft.player.getInventory(), title);
minecraft.player.containerMenu = screen.getMenu();
minecraft.setScreen(screen);
}
U create(T menu, Inventory inventory, final Component title);
}
}引用的其他类
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数
- 引用位置:
-
- 引用位置:
返回值
- 引用位置:
-
- 引用位置:
参数/字段
- 引用位置: