From 78709ed06047438d1192652a728bda1059e29e95 Mon Sep 17 00:00:00 2001 From: Liam Date: Fri, 19 Apr 2024 16:51:58 +0100 Subject: [PATCH] make the server page show a minecraft style server --- src/app/(pages)/page.tsx | 2 +- src/app/components/card.tsx | 16 ++++-- src/app/components/navbar.tsx | 4 +- src/app/components/server/server-view.tsx | 58 +++++++++++----------- src/app/font/Minecraft.otf | Bin 0 -> 11424 bytes src/app/font/fonts.ts | 16 ++++++ src/app/layout.tsx | 4 +- src/common/fonts.ts | 7 --- 8 files changed, 62 insertions(+), 45 deletions(-) create mode 100644 src/app/font/Minecraft.otf create mode 100644 src/app/font/fonts.ts delete mode 100644 src/common/fonts.ts diff --git a/src/app/(pages)/page.tsx b/src/app/(pages)/page.tsx index 3d83a54..7d7128f 100644 --- a/src/app/(pages)/page.tsx +++ b/src/app/(pages)/page.tsx @@ -53,7 +53,7 @@ export default function Home(): ReactElement {
-

Minecraft Utilities

+

Minecraft Utilities

Minecraft Utilities offers you many endpoints to get information about a minecraft server or a player. diff --git a/src/app/components/card.tsx b/src/app/components/card.tsx index bf88edf..d0f7b0a 100644 --- a/src/app/components/card.tsx +++ b/src/app/components/card.tsx @@ -1,6 +1,7 @@ import { Card as ShadcnCard, CardContent } from "@/app/components/ui/card"; import { cn } from "@/common/utils"; import { ReactElement } from "react"; +import { type ClassValue } from "clsx"; type CardProps = { /** @@ -9,15 +10,20 @@ type CardProps = { children: React.ReactNode; /** - * The class names to append. + * The class names for the card. */ - className?: string; + classNameCard?: ClassValue; + + /** + * The class names for the content. + */ + classNameContent?: ClassValue; }; -export function Card({ children, className }: CardProps): ReactElement { +export function Card({ children, classNameCard, classNameContent }: CardProps): ReactElement { return ( - - {children} + + {children} ); } diff --git a/src/app/components/navbar.tsx b/src/app/components/navbar.tsx index a9b7c2a..9bc8744 100644 --- a/src/app/components/navbar.tsx +++ b/src/app/components/navbar.tsx @@ -42,12 +42,12 @@ export default function NavBar(): ReactElement {

-

Minecraft Utilities

+

Minecraft Utilities

{/* Links */} -
+
{pages.map((page, index) => { const isActive = path.includes(page.url); diff --git a/src/app/components/server/server-view.tsx b/src/app/components/server/server-view.tsx index 1712ad4..b52cd4e 100644 --- a/src/app/components/server/server-view.tsx +++ b/src/app/components/server/server-view.tsx @@ -5,6 +5,9 @@ import { ReactElement } from "react"; import { Card } from "../card"; import { CodeDialog } from "../code-dialog"; import { Button } from "../ui/button"; +import config from "@root/config.json"; +import { cn } from "@/common/utils"; +import { minecraft } from "@/app/font/fonts"; type ServerViewProps = { /** @@ -20,37 +23,36 @@ type ServerViewProps = { export function ServerView({ server, favicon }: ServerViewProps): ReactElement { return ( -
- -
-
- {favicon && ( -
- The server's favicon -
- )} +
+ +
+ {/* Favicon */} + {`${server.hostname}'s -
-

{server.hostname}

-
-

- Players online: {formatNumber(server.players.online)}/{formatNumber(server.players.max)} -

-
-
+ {/* Name & MOTD */} +
+

{server.hostname}

+ {server.motd.html.map((line: string, index: number): ReactElement => { + return

; + })}
-
- {server.motd.html.map((line, index) => { - return

; - })} + {/* Ping */} +
+

+ {server.players.online}/{server.players.max} +

+ Ping!
diff --git a/src/app/font/Minecraft.otf b/src/app/font/Minecraft.otf new file mode 100644 index 0000000000000000000000000000000000000000..6904fc17bea7b7626bbc79b3ef363968f005e32c GIT binary patch literal 11424 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 O>;L=L{1E*A?*9XkawR|j literal 0 HcmV?d00001 diff --git a/src/app/font/fonts.ts b/src/app/font/fonts.ts new file mode 100644 index 0000000..a67e6bc --- /dev/null +++ b/src/app/font/fonts.ts @@ -0,0 +1,16 @@ +import { Inter } from "next/font/google"; + +import localFont from "next/font/local"; +import { NextFont } from "next/dist/compiled/@next/font"; + +/** + * The default font to use for the site. + */ +export const inter = Inter({ subsets: ["latin"] }); + +/** + * The Minecraft font to use for the site. + */ +export const minecraft: NextFont = localFont({ + src: "../font/Minecraft.otf", +}); diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 16f09cb..eed7b66 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -1,4 +1,3 @@ -import { Fonts } from "@/common/fonts"; import { Metadata, Viewport } from "next"; import Script from "next/script"; import { ReactElement } from "react"; @@ -9,6 +8,7 @@ import { TooltipProvider } from "./components/ui/tooltip"; import "./globals.css"; import config from "@root/config.json"; +import { inter } from "@/app/font/fonts"; export const viewport: Viewport = { themeColor: "#3498DB", @@ -47,7 +47,7 @@ export default function RootLayout({ return ( <>