1{
2 lib,
3 stdenvNoCC,
4 fetchurl,
5 makeBinaryWrapper,
6 jre,
7 version,
8 hash,
9 udev,
10}:
11
12stdenvNoCC.mkDerivation (finalAttrs: {
13 pname = "papermc";
14 inherit version hash;
15
16 src =
17 let
18 version-split = lib.strings.splitString "-" finalAttrs.version;
19 mcVersion = builtins.elemAt version-split 0;
20 buildNum = builtins.elemAt version-split 1;
21 in
22 fetchurl {
23 url = "https://api.papermc.io/v2/projects/paper/versions/${mcVersion}/builds/${buildNum}/downloads/paper-${mcVersion}-${buildNum}.jar";
24 inherit (finalAttrs) hash;
25 };
26
27 installPhase = ''
28 runHook preInstall
29
30 install -D $src $out/share/papermc/papermc.jar
31
32 makeWrapper ${lib.getExe jre} "$out/bin/minecraft-server" \
33 --append-flags "-jar $out/share/papermc/papermc.jar nogui" \
34 ${lib.optionalString stdenvNoCC.hostPlatform.isLinux "--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ udev ]}"}
35
36 runHook postInstall
37 '';
38
39 nativeBuildInputs = [
40 makeBinaryWrapper
41 ];
42
43 dontUnpack = true;
44 preferLocalBuild = true;
45 allowSubstitutes = false;
46
47 passthru = {
48 updateScript = ./update.py;
49 };
50
51 meta = {
52 description = "High-performance Minecraft Server";
53 homepage = "https://papermc.io/";
54 sourceProvenance = with lib.sourceTypes; [ binaryBytecode ];
55 license = lib.licenses.gpl3Only;
56 platforms = lib.platforms.unix;
57 maintainers = with lib.maintainers; [
58 aaronjanse
59 neonfuz
60 MayNiklas
61 ];
62 mainProgram = "minecraft-server";
63 };
64})