Implement generating data files
All checks were successful
Build & Test / nix-build (push) Successful in 1m46s

This commit is contained in:
Kodi Craft 2024-10-11 19:56:06 +02:00
parent d6ea25a64e
commit 9a926d524e
Signed by: kodi
GPG Key ID: 69D9EED60B242822

View File

@ -51,7 +51,7 @@ defmodule Amethyst.DataGenerator do
Logger.debug("Checking if server jar exists at #{path} with hash #{sha1}") Logger.debug("Checking if server jar exists at #{path} with hash #{sha1}")
case File.read(path) do case File.read(path) do
{:ok, data} -> {:ok, data} ->
if :crypto.hash(:sha, data) == sha1 do if :crypto.hash(:sha, data) |> Base.encode16() |> String.downcase() == sha1 do
Logger.debug("Using cached server jar at #{path}") Logger.debug("Using cached server jar at #{path}")
{:ok, path} {:ok, path}
else else
@ -64,6 +64,17 @@ defmodule Amethyst.DataGenerator do
end end
end end
@spec generate_data_files(String.t(), out_path, nil | String.t()) :: {:error, pos_integer()} | {:ok, out_path} when out_path: String.t()
def generate_data_files(jar_path, out_path, java_bin \\ "java") do
Logger.debug("Generating data files from server jar at #{jar_path}")
# mkdir the output directory since we cd into it
File.mkdir_p!(out_path)
case System.cmd(java_bin, ["-DbundlerMainClass=net.minecraft.data.Main", "-jar", jar_path, "--all", "--output", out_path], cd: out_path) do
{_, 0} -> {:ok, out_path}
{_, code} -> {:error, code}
end
end
defp download_jar(url, path) do defp download_jar(url, path) do
Logger.debug("Downloading server jar from #{url}") Logger.debug("Downloading server jar from #{url}")
case Req.get(url, into: File.stream!(path)) do case Req.get(url, into: File.stream!(path)) do