Skip to content

Commit 4928005

Browse files
authoredMar 26, 2024··
feat: announce waterfall eol (#96)
1 parent 7d9a688 commit 4928005

15 files changed

+135
-100
lines changed
 
+4
Loading

‎src/components/data/SoftwareBuilds.tsx

+5-1
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,14 @@ export interface SoftwareBuildsProps {
1212
project: string;
1313
version: string;
1414
builds?: Build[];
15+
eol?: boolean;
1516
}
1617

1718
const SoftwareBuilds = ({
1819
project,
1920
version,
2021
builds,
22+
eol,
2123
}: SoftwareBuildsProps): ReactElement => (
2224
<div className="flex flex-col gap-1">
2325
{builds &&
@@ -42,7 +44,9 @@ const SoftwareBuilds = ({
4244
target="_blank"
4345
className={clsx(
4446
"text-gray-100 text-sm text-center font-medium rounded-full p-2 min-w-16 mr-4 inline-flex items-center gap-1",
45-
build.channel === "default" ? "bg-gray-800" : "bg-red-500",
47+
build.channel === "default" && !eol
48+
? "bg-gray-800"
49+
: "bg-red-500",
4650
)}
4751
>
4852
<DownloadIcon className="w-4 h-4" />#{build.build}

‎src/components/data/SoftwareBuildsTable.tsx

+4-1
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,14 @@ export interface SoftwareBuildsTableProps {
1111
project: string;
1212
version: string;
1313
builds: Build[];
14+
eol?: boolean;
1415
}
1516

1617
const SoftwareBuildsTable = ({
1718
project,
1819
version,
1920
builds,
21+
eol,
2022
}: SoftwareBuildsTableProps) => {
2123
return (
2224
<table className="w-full relative">
@@ -38,7 +40,7 @@ const SoftwareBuildsTable = ({
3840
<span
3941
className={clsx(
4042
"text-sm font-medium text-gray-100 rounded-full py-2 px-3 min-w-16",
41-
build.channel === "experimental"
43+
build.channel === "experimental" || eol
4244
? "bg-red-500"
4345
: "bg-gray-800",
4446
)}
@@ -59,6 +61,7 @@ const SoftwareBuildsTable = ({
5961
build={build}
6062
stable={build.channel === "default"}
6163
compact
64+
eol={eol}
6265
/>
6366
</td>
6467
</tr>

‎src/components/data/SoftwarePreview.tsx

+7-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import Link from "next/link";
22
import type { FunctionComponent } from "react";
33

4+
import ArchiveIcon from "@/assets/icons/fontawesome/box-archive.svg";
5+
46
export interface SoftwarePreviewProps {
57
id: string;
68
name: string;
@@ -9,6 +11,7 @@ export interface SoftwarePreviewProps {
911
description?: string;
1012
download?: boolean;
1113
javadocs?: string;
14+
eol?: boolean;
1215
}
1316

1417
const SoftwarePreview = ({
@@ -18,6 +21,7 @@ const SoftwarePreview = ({
1821
description,
1922
download,
2023
javadocs,
24+
eol,
2125
}: SoftwarePreviewProps) => (
2226
<Link
2327
href={
@@ -33,7 +37,9 @@ const SoftwarePreview = ({
3337
<div className="rounded-lg w-12 h-12 bg-gray-800 p-3">
3438
<Icon />
3539
</div>
36-
<h3 className="font-medium flex-1">{name}</h3>
40+
<h3 className="font-medium flex-1 flex gap-4 items-center">
41+
{name} {eol && <ArchiveIcon className="fill-current h-6" />}
42+
</h3>
3743
</div>
3844

3945
{description && (

‎src/components/input/SoftwareDownloadButton.tsx

+3-1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export interface SoftwareDownloadButtonProps {
1818
version: string;
1919
stable: boolean;
2020
compact?: boolean;
21+
eol?: boolean;
2122
}
2223

2324
const SoftwareDownloadButton = ({
@@ -27,6 +28,7 @@ const SoftwareDownloadButton = ({
2728
version,
2829
stable,
2930
compact,
31+
eol,
3032
}: SoftwareDownloadButtonProps) => {
3133
const [copied, setCopied] = useState("");
3234
const [timeoutHandler, setTimeoutHandler] = useState<NodeJS.Timeout | null>(
@@ -47,7 +49,7 @@ const SoftwareDownloadButton = ({
4749
className={clsx(
4850
"rounded-lg flex flex-row ransition-shadow text-white transition-color hover:shadow-lg",
4951
!compact && "w-full md:w-100",
50-
stable
52+
stable && !eol
5153
? "bg-blue-600 hover:bg-blue-500"
5254
: "bg-red-500 hover:bg-red-400",
5355
)}

‎src/components/layout/DownloadsTree.tsx

+14-5
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
import clsx from "clsx";
22

3+
import ArchiveIcon from "@/assets/icons/fontawesome/box-archive.svg";
34
import { useProject } from "@/lib/service/v2";
45

56
interface ProjectSubTreeProps {
67
id: string;
78
name: string;
9+
eol?: boolean;
810
}
911

1012
const ProjectSubTree = ({
@@ -13,13 +15,15 @@ const ProjectSubTree = ({
1315
selectedProject,
1416
selectedVersion,
1517
onSelect,
18+
eol,
1619
}: ProjectSubTreeProps & DownloadsTreeProps) => {
1720
const { data: project } = useProject(id);
1821

1922
return (
2023
<>
21-
<div className="pl-3 py-1 rounded-md font-bold">
22-
{project?.project_name ?? name}
24+
<div className="pl-3 py-1 rounded-md font-bold flex gap-2 items-center">
25+
{project?.project_name ?? name}{" "}
26+
{eol && <ArchiveIcon className="fill-current h-4" />}
2327
</div>
2428
{project?.versions
2529
?.slice()
@@ -28,10 +32,15 @@ const ProjectSubTree = ({
2832
<button
2933
key={version}
3034
className={clsx(
31-
"pl-6 py-1 rounded-md hover:bg-blue-100 hover:dark:bg-gray-900 transition-colors text-gray-800 dark:text-gray-200 block w-full text-left",
35+
"pl-6 py-1 rounded-md transition-colors text-gray-800 dark:text-gray-200 block w-full text-left",
36+
eol
37+
? "hover:bg-red-100 hover:dark:bg-red-900"
38+
: "hover:bg-blue-100 hover:dark:bg-gray-900",
3239
selectedProject === id &&
3340
selectedVersion === version &&
34-
"bg-blue-100 dark:bg-blue-900",
41+
(eol
42+
? "bg-red-100 dark:bg-red-900"
43+
: "bg-blue-100 dark:bg-blue-900"),
3544
)}
3645
onClick={() => onSelect(id, version)}
3746
>
@@ -54,7 +63,7 @@ const DownloadsTree = (props: DownloadsTreeProps) => {
5463
<nav className="w-50 p-2 border-r border-gray-300 overflow-auto">
5564
<ProjectSubTree id="paper" name="Paper" {...props} />
5665
<ProjectSubTree id="velocity" name="Velocity" {...props} />
57-
<ProjectSubTree id="waterfall" name="Waterfall" {...props} />
66+
<ProjectSubTree id="waterfall" name="Waterfall" eol {...props} />
5867
</nav>
5968
);
6069
};

‎src/components/layout/NavBar.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ const NavBar = ({ component }: NavBarProps) => {
8383
<NavDropDownLink href="/software/velocity">
8484
Velocity
8585
</NavDropDownLink>
86-
<NavDropDownLink href="/software/waterfall">
86+
<NavDropDownLink href="/software/waterfall" eol>
8787
Waterfall
8888
</NavDropDownLink>
8989
</NavDropDown>

‎src/components/layout/NavDropDownLink.tsx

+10-2
Original file line numberDiff line numberDiff line change
@@ -2,32 +2,40 @@ import clsx from "clsx";
22
import Link from "next/link";
33
import type { ReactElement, ReactNode } from "react";
44

5+
import ArchiveIcon from "@/assets/icons/fontawesome/box-archive.svg";
6+
57
export interface NavDropDownLinkProps {
68
href: string;
79
target?: string;
810
className?: string;
911
children: ReactNode;
12+
eol?: boolean;
1013
}
1114

1215
const NavDropDownLink = ({
1316
href,
1417
target,
1518
className,
1619
children,
20+
eol,
1721
}: NavDropDownLinkProps): ReactElement => (
1822
<li
1923
className={clsx(
2024
"color-gray-200 text-gray-800 hover:text-blue-600 text-sm transition-colors dark:(text-gray-200 hover:text-blue-400)",
25+
eol && "hover:(text-red-600 dark:text-red-400)",
2126
className,
2227
)}
2328
>
2429
<Link
2530
href={href}
26-
className="px-4 py-2 w-full block"
31+
className={clsx(
32+
"px-4 py-2 w-full",
33+
eol ? "flex items-center gap-2" : "block",
34+
)}
2735
role="button"
2836
target={target}
2937
>
30-
{children}
38+
{children} {eol && <ArchiveIcon className="fill-current h-4" />}
3139
</Link>
3240
</li>
3341
);

‎src/components/layout/SoftwareDownload.tsx

+15-3
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,9 @@ export interface SoftwareDownloadProps {
1212
id: string;
1313
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1414
icon?: FunctionComponent<any>;
15-
description: string;
15+
description: ReactElement | string;
1616
experimentalWarning?: string;
17+
eol?: boolean;
1718
}
1819

1920
const SoftwareDownload = ({
@@ -22,6 +23,7 @@ const SoftwareDownload = ({
2223
icon: Icon,
2324
description,
2425
experimentalWarning,
26+
eol,
2527
}: SoftwareDownloadProps & ProjectProps): ReactElement => {
2628
const [isStable, setStable] = useState(true);
2729
const version = isStable
@@ -36,7 +38,13 @@ const SoftwareDownload = ({
3638

3739
return (
3840
<>
39-
<header className="max-w-7xl flex flex-row mx-auto px-4 pt-32 pb-16 lg:(pt-48 pb-26) gap-16">
41+
<header className="max-w-7xl flex flex-row flex-wrap mx-auto px-4 pt-32 pb-16 lg:(pt-48 pb-26) gap-16">
42+
{eol && (
43+
<div className="text-center px-4 py-8 -mt-16 font-bold bg-red-400 dark:bg-red-500 shadow-md rounded-lg w-full">
44+
{project.name} has reached end of life! It is no longer maintained
45+
or supported.
46+
</div>
47+
)}
4048
<div className="flex-1">
4149
<div className="flex flex-row mb-6 gap-4 items-center">
4250
<div className="w-12 h-12 rounded-lg bg-gray-800 p-3">
@@ -46,7 +54,9 @@ const SoftwareDownload = ({
4654
</div>
4755
<h2 className="font-medium leading-normal lg:(text-5xl leading-normal) text-4xl">
4856
Get {project.name}&nbsp;
49-
<span className={isStable ? "text-blue-600" : "text-red-500"}>
57+
<span
58+
className={isStable && !eol ? "text-blue-600" : "text-red-500"}
59+
>
5060
{version}
5161
</span>
5262
</h2>
@@ -60,6 +70,7 @@ const SoftwareDownload = ({
6070
build={latestBuild}
6171
version={version}
6272
stable={!latestBuild || latestBuild?.channel === "default"}
73+
eol={eol}
6374
/>
6475
{project.latestExperimentalVersion && (
6576
<button
@@ -103,6 +114,7 @@ const SoftwareDownload = ({
103114
project={id}
104115
version={version}
105116
builds={builds?.builds}
117+
eol={eol}
106118
/>
107119
</section>
108120
</>

‎src/components/layout/SoftwareHeader.tsx

+14-3
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import type { FunctionComponent, ReactElement } from "react";
22

3+
import ArchiveIcon from "@/assets/icons/fontawesome/box-archive.svg";
34
import Button from "@/components/input/Button";
45

56
export interface SoftwareHeaderProps {
@@ -9,8 +10,9 @@ export interface SoftwareHeaderProps {
910
// eslint-disable-next-line @typescript-eslint/no-explicit-any
1011
icon?: FunctionComponent<any>;
1112
header: ReactElement;
12-
description: string;
13+
description: ReactElement | string;
1314
github?: string;
15+
eol?: boolean;
1416
}
1517

1618
const SoftwareHeader = ({
@@ -21,14 +23,22 @@ const SoftwareHeader = ({
2123
header,
2224
description,
2325
github,
26+
eol,
2427
}: SoftwareHeaderProps): ReactElement => (
25-
<header className="max-w-7xl flex flex-row mx-auto px-4 pt-32 pb-26 lg:(pt-48 pb-46) gap-16">
28+
<header className="max-w-7xl flex flex-row flex-wrap mx-auto px-4 pt-32 pb-26 lg:(pt-48 pb-46) gap-16">
29+
{eol && (
30+
<div className="text-center px-4 py-8 -mt-16 font-bold bg-red-400 dark:bg-red-500 shadow-md rounded-lg w-full">
31+
{name} has reached end of life! It is no longer maintained or supported.
32+
</div>
33+
)}
2634
<div className="flex-1">
2735
<div className="flex flex-row mb-6 gap-4 items-center">
2836
<div className="w-12 h-12 rounded-lg bg-gray-800 p-3">
2937
{Icon && <Icon />}
3038
</div>
31-
<h1 className="font-medium text-xl">{name}</h1>
39+
<h1 className="font-medium text-xl flex gap-4 items-center">
40+
{name} {eol && <ArchiveIcon className="fill-current h-6" />}
41+
</h1>
3242
</div>
3343
<h2 className="font-medium leading-normal lg:(text-5xl leading-normal) text-4xl">
3444
{header}
@@ -39,6 +49,7 @@ const SoftwareHeader = ({
3949
variant="filled"
4050
href={github ?? `/downloads/${id}`}
4151
external={Boolean(github)}
52+
className={eol ? "!bg-red-500 !hover:bg-red-400" : ""}
4253
>
4354
{github ? "GitHub" : "Downloads"}
4455
</Button>

‎src/pages/downloads/all.tsx

+8
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,8 @@ const LegacyDownloads: NextPage<LegacyDownloadProps> = ({
3333
const [selectedVersion, setSelectedVersion] = useState(initialProjectVersion);
3434
const { data: builds } = useVersionBuilds(selectedProject, selectedVersion);
3535

36+
const eol = selectedProject === "waterfall";
37+
3638
return (
3739
<>
3840
<SEO
@@ -55,10 +57,16 @@ const LegacyDownloads: NextPage<LegacyDownloadProps> = ({
5557
}}
5658
/>
5759
<div className="flex-1 overflow-auto">
60+
{eol && (
61+
<div className="text-center px-4 py-2 font-bold bg-yellow-400 dark:bg-yellow-500 shadow-md">
62+
EOL builds are not supported. Proceed at your own risk!
63+
</div>
64+
)}
5865
<SoftwareBuildsTable
5966
project={selectedProject}
6067
version={selectedVersion}
6168
builds={builds?.builds ?? []}
69+
eol={eol}
6270
/>
6371
</div>
6472
</div>

‎src/pages/downloads/index.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ const Downloads: NextPage = () => {
6565
icon={WaterfallIcon}
6666
description="Waterfall is a legacy drop-in BungeeCord replacement with some additional improvements to performance and stability."
6767
download
68+
eol
6869
/>
6970
</div>
7071
</header>

‎src/pages/downloads/waterfall.tsx

+22-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import Link from "next/link";
12
import type { ReactElement } from "react";
23

34
import WaterfallIcon from "@/assets/brand/waterfall.svg";
@@ -26,7 +27,27 @@ const WaterfallDownloads = ({ project }: ProjectProps): ReactElement => {
2627
id="waterfall"
2728
project={project}
2829
icon={WaterfallIcon}
29-
description="Download Waterfall, our Bungee-compatible upgrade, offering better performance and full compatibility."
30+
description={
31+
<>
32+
Waterfall has reached end of life. We recommend you transition to{" "}
33+
<Link
34+
className="text-blue-500 hover:text-blue-400 hover:underline"
35+
href="/software/velocity"
36+
>
37+
Velocity
38+
</Link>
39+
. For more information see the{" "}
40+
<a
41+
className="text-blue-500 hover:text-blue-400 hover:underline"
42+
href="https://forums.papermc.io/threads/1088/"
43+
>
44+
announcement
45+
</a>
46+
. <br />
47+
Download unsupported, archived Waterfall builds below.
48+
</>
49+
}
50+
eol
3051
/>
3152
</>
3253
);

‎src/pages/index.tsx

-7
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import Image from "next/image";
33

44
import PaperIcon from "@/assets/brand/paper.svg";
55
import VelocityIcon from "@/assets/brand/velocity.svg";
6-
import WaterfallIcon from "@/assets/brand/waterfall.svg";
76
import HomeImage1 from "@/assets/images/home-1.png";
87
import HomeImage2 from "@/assets/images/home-2.png";
98
import HomeImage3 from "@/assets/images/home-3.png";
@@ -73,12 +72,6 @@ const Home: NextPage<ProjectProps> = ({ project }) => {
7372
icon={VelocityIcon}
7473
description="Velocity is a high-performance, scalable Minecraft proxy server that allows players to connect to multiple Minecraft servers under the proxy."
7574
/>
76-
<SoftwarePreview
77-
id="waterfall"
78-
name="Waterfall"
79-
icon={WaterfallIcon}
80-
description="Waterfall is a legacy drop-in BungeeCord replacement with some additional improvements to performance and stability."
81-
/>
8275
</div>
8376
</div>
8477
</section>

‎src/pages/software/waterfall/index.tsx

+27-74
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,10 @@
11
import Image from "next/image";
2+
import Link from "next/link";
23
import type { ReactElement } from "react";
34

45
import WaterfallIcon from "@/assets/brand/waterfall.svg";
5-
import BoltIcon from "@/assets/icons/heroicons/bolt.svg";
6-
import ChatBubbleLeftRightIcon from "@/assets/icons/heroicons/chat-bubble-left-right.svg";
7-
import CodeBracketIcon from "@/assets/icons/heroicons/code-bracket.svg";
86
import CommunityImage from "@/assets/images/community.png";
9-
import HomeImage1 from "@/assets/images/home-1.png";
107
import VelocityImage from "@/assets/images/velocity.png";
11-
import FeatureCard from "@/components/data/FeatureCard";
128
import Button from "@/components/input/Button";
139
import SoftwareHeader from "@/components/layout/SoftwareHeader";
1410
import SEO from "@/components/util/SEO";
@@ -35,36 +31,28 @@ const WaterfallHome = ({ project }: HangarProjectProps): ReactElement => {
3531
name="Waterfall"
3632
versionGroup={project.latestVersionGroup}
3733
icon={WaterfallIcon}
38-
header={<>The Bungee-compatible upgrade</>}
39-
description="Waterfall is an upgraded BungeeCord, offering full compatibility with improvements to performance and stability."
34+
header={<>Waterfall has reached end of life</>}
35+
description={
36+
<>
37+
We recommend you transition to{" "}
38+
<Link
39+
className="text-blue-500 hover:text-blue-400 hover:underline"
40+
href="/software/velocity"
41+
>
42+
Velocity
43+
</Link>
44+
. For more information see the{" "}
45+
<a
46+
className="text-blue-500 hover:text-blue-400 hover:underline"
47+
href="https://forums.papermc.io/threads/1088/"
48+
>
49+
announcement
50+
</a>
51+
. <br /> Archived Waterfall builds and docs are available here.
52+
</>
53+
}
54+
eol
4055
/>
41-
<section
42-
id="why"
43-
className="w-full pt-10 pb-5 bg-primary-200 dark:bg-background-dark-80"
44-
>
45-
<div className="max-w-7xl mx-auto">
46-
<h2 className="font-semibold text-xl md:text-2xl px-6 lg:px-4">
47-
Why Waterfall?
48-
</h2>
49-
<div className="grid md:grid-cols-3 mt-6 gap-2 px-2 xl:gap-4">
50-
<FeatureCard
51-
icon={BoltIcon}
52-
label="Fast, smooth, and easy"
53-
description="Waterfall is a simple BungeeCord fork with additional improvements to stability and performance."
54-
/>
55-
<FeatureCard
56-
icon={ChatBubbleLeftRightIcon}
57-
label="An active and growing community"
58-
description="If you encounter any problems, you can come talk with us on Discord and get real time support."
59-
/>
60-
<FeatureCard
61-
icon={CodeBracketIcon}
62-
label="Compatible with Bungee"
63-
description="Everything that works with BungeeCord works with Waterfall. The switch is seamless and easy: Simply swap out the relevant downloads and you’re good to go."
64-
/>
65-
</div>
66-
</div>
67-
</section>
6856
<section
6957
id="facts"
7058
className="flex flex-col max-w-7xl mx-auto px-4 py-8 gap-8 md:(gap-12 py-16)"
@@ -82,13 +70,13 @@ const WaterfallHome = ({ project }: HangarProjectProps): ReactElement => {
8270
</div>
8371
<div className="flex-1">
8472
<h2 className="font-semibold text-2xl md:text-4xl">
85-
Don&apos;t need BungeeCord compatibility?
73+
Need an updated proxy? Use Velocity!
8674
</h2>
8775
<p className="md:(mt-6 text-xl) text-gray-900 dark:text-gray-100 mt-3">
88-
If you don’t desperately need BungeeCord plugins on your proxy,
89-
Velocity is the best proxy software available. Designed with
90-
performance and scalability in mind, Velocity is a lot faster and
91-
much more stable than BungeeCord.
76+
All the experience the PaperMC team has gained from working on
77+
Waterfall has applied to Velocity. Designed with performance and
78+
scalability in mind, Velocity is the best proxy software
79+
available.
9280
</p>
9381
<div className="flex flex-row gap-4 mt-8">
9482
<Button variant="filled" href="/software/velocity" dense>
@@ -97,41 +85,6 @@ const WaterfallHome = ({ project }: HangarProjectProps): ReactElement => {
9785
</div>
9886
</div>
9987
</div>
100-
<div className="flex flex-col gap-6 md:(flex-row-reverse gap-8) xl:gap-24 items-center">
101-
<div className="w-full flex-1 rounded-xl bg-gray-900 aspect-video relative overflow-clip">
102-
<Image
103-
alt=""
104-
src={HomeImage1}
105-
placeholder="blur"
106-
fill
107-
sizes="(min-width: 80rem) 40rem, (min-width: 768px) 40vw, 100vw"
108-
className="object-cover"
109-
/>
110-
</div>
111-
<div className="flex-1">
112-
<h2 className="font-semibold text-2xl md:text-4xl">
113-
Getting Started
114-
</h2>
115-
<p className="md:(mt-6 text-xl) text-gray-900 dark:text-gray-100 mt-3">
116-
To get started with Waterfall, you will need to download and
117-
install the latest version of the proxy software. Once you&apos;re
118-
ready, take a look at our documentation.
119-
</p>
120-
<div className="flex flex-row gap-4 mt-8">
121-
<Button variant="filled" href="/downloads/waterfall" dense>
122-
Downloads
123-
</Button>
124-
<Button
125-
variant="outlined"
126-
href="https://docs.papermc.io/waterfall/getting-started"
127-
external
128-
dense
129-
>
130-
Documentation
131-
</Button>
132-
</div>
133-
</div>
134-
</div>
13588
<div className="flex flex-col gap-6 md:(flex-row-reverse gap-8) xl:gap-24 items-center">
13689
<div className="flex-1">
13790
<h2 className="font-semibold text-2xl md:text-4xl">

0 commit comments

Comments
 (0)
Please sign in to comment.