package net.minecraft.client.gui.screens.dialog; import com.mojang.serialization.MapCodec; import java.util.HashMap; import java.util.Map; import net.fabricmc.api.EnvType; import net.fabricmc.api.Environment; import net.minecraft.client.gui.screens.Screen; import net.minecraft.server.dialog.ConfirmationDialog; import net.minecraft.server.dialog.Dialog; import net.minecraft.server.dialog.DialogListDialog; import net.minecraft.server.dialog.MultiActionDialog; import net.minecraft.server.dialog.NoticeDialog; import net.minecraft.server.dialog.ServerLinksDialog; import org.jetbrains.annotations.Nullable; @Environment(EnvType.CLIENT) public class DialogScreens { private static final Map, DialogScreens.Factory> FACTORIES = new HashMap(); private static void register(MapCodec codec, DialogScreens.Factory factory) { FACTORIES.put(codec, factory); } @Nullable public static DialogScreen createFromData(T dialog, @Nullable Screen previousScreen, DialogConnectionAccess connectionAccess) { DialogScreens.Factory factory = (DialogScreens.Factory)FACTORIES.get(dialog.codec()); return factory != null ? factory.create(previousScreen, dialog, connectionAccess) : null; } public static void bootstrap() { register(ConfirmationDialog.MAP_CODEC, SimpleDialogScreen::new); register(NoticeDialog.MAP_CODEC, SimpleDialogScreen::new); register(DialogListDialog.MAP_CODEC, DialogListDialogScreen::new); register(MultiActionDialog.MAP_CODEC, MultiButtonDialogScreen::new); register(ServerLinksDialog.MAP_CODEC, ServerLinksDialogScreen::new); } @FunctionalInterface @Environment(EnvType.CLIENT) public interface Factory { DialogScreen create(@Nullable Screen screen, T dialog, DialogConnectionAccess dialogConnectionAccess); } }