primitive mmc/prism pack generation (hardcoded libs)

This commit is contained in:
moehreag 2024-06-10 10:47:58 +02:00
parent 03262dfbdc
commit d7eeb492a7
7 changed files with 332 additions and 54 deletions

View file

@ -147,7 +147,10 @@ button {
padding: 4px;
border-radius: 14px;
}
button:hover {
button:disabled {
background-color: var(--vp-c-default-soft);
}
button:hover:not(:disabled) {
background-color: var(--vp-button-brand-hover-bg);
color: var(--vp-button-brand-hover-text);
border-color: var(--vp-button-brand-hover-border);
@ -161,8 +164,12 @@ select, input {
border-radius: 12px;
}
select {
background-color: var(--vp-c-brand-soft);
text-align: center;
}
select:hover {
cursor: pointer;
}
input {
border: 4px solid var(--vp-c-brand-soft);
}

View file

@ -20,9 +20,18 @@ Insert section about the installer here
const instanceNameRef = ref()
const showSnapshots = ref()
const versionSelector = ref()
const useSnapshots = ref()
let releases = []
let snapshots = []
let versions = []
let latestThyroxine
let latestThyroxineUrl
let latestThyroxineSnapshot
let latestThyroxineSnapshotUrl
let latestLoader
let latestLoaderUrl
let latestLoaderSnapshot
let latestLoaderSnapshotUrl
async function getGameVersions() {
const response = await fetch("https://piston-meta.mojang.com/mc/game/version_manifest_v2.json")
@ -42,7 +51,60 @@ Insert section about the installer here
}
}
function getLatestProjectVersions() {
return Promise.all([
fetchVersionFromMaven("releases", "frogloader").then((v) => {
latestLoader = v
fetchVersionUrlFromMaven("releases", "frogloader", v).then((v) => {
latestLoader = v
})
}),
fetchVersionFromMaven("snapshots", "frogloader").then((v) => {
latestLoaderSnapshot = v
fetchVersionUrlFromMaven("snapshots", "frogloader", v).then((v) => {
latestLoaderSnapshotUrl = v
})
}),
fetchVersionFromMaven("releases", "thyroxine").then((v) => {
latestThyroxine = v
fetchVersionUrlFromMaven("releases", "thyroxine", v).then((v) => {
latestThyroxineUrl = v
})
}),
fetchVersionFromMaven("snapshots", "thyroxine").then((v) => {
latestThyroxineSnapshot = v
fetchVersionUrlFromMaven("snapshots", "thyroxine", v).then((v) => {
latestThyroxineSnapshotUrl = v
})
})
]),
}
async function fetchVersionFromMaven(repository, name) {
const response = await fetch("https://maven.frogmc.dev/"+repository+"/dev/frogmc/"+name+"/maven-metadata.xml")
if (!response.ok){
return Promise.reject("No Version found for artifact "+name+" in repository "+repository)
}
const text = await response.text()
const parser = new DOMParser()
const doc = parser.parseFromString(text, "text/xml")
return doc.getElementsByTagName("latest")[0].textContent
}
async function fetchVersionUrlFromMaven(repository, name, version) {
const response = await fetch("https://maven.frogmc.dev/"+repository+"/dev/frogmc/"+name+"/"+version+"/maven-metadata.xml")
if (!response.ok){
return "https://maven.frogmc.dev/"+repository+"/dev/frogmc/"+name+"/"+version+"/"+name+"-"+version+".jar"
}
const text = await response.text()
const parser = new DOMParser()
const doc = parser.parseFromString(text, "text/xml")
console.log(doc)
return doc.getElementsByTagName("snapshotVersion")[0].getElementsByTagName("value")[0].textContent
}
onMounted(() => {
Promise.all([
getGameVersions().then((v) => {
versions = v.versions
for (let version of versions){
@ -53,9 +115,48 @@ Insert section about the installer here
}
}
getVersions()
}),
getLatestProjectVersions()
]).then((unused) => {
let button = document.getElementById("download")
button.innerHTML = "Download"
button.disabled = false
}).catch((err) => {
let html = "<div class=\"danger custom-block\"><p class=\"custom-block-title\">Error loading versions</p><p>"
html += err
html += "</p></div>"
document.getElementById("missingBox").innerHTML = html
})
})
async function getLwjglVersion() {
const versionUrl = versions[versionSelector.value.selectedIndex].url
let versionResponse = await fetch(versionUrl)
let versionJson = await versionResponse.json()
for (let lib of version.libraries) {
let matcher = lib.name.matcher(/org.lwjgl:lwjgl:(\d+\.\d+\.\d+.*)/)
if (matcher.matches()) {
return matcher.group(1)
}
}
}
function getPlatform(){
const appVersion = navigator.appVersion
if(appVersion.indexOf("Linux")!=-1 || appVersion.indexOf("X11")!=-1 || appVersion.indexOf("Wayland")!=-1){
return "linux"
} else if(appVersion.indexOf("Win")!=-1){
return "windows"
} else if(appVersion.indexOf("Mac")!=-1){
if(navigator.platform.indexOf("x86-64")!=-1){
return "macos-x64"
}
return "macos-arm64"
}
}
function download(){
let missing = []
@ -73,8 +174,43 @@ Insert section about the installer here
let zip = JSZip()
let promises = []
let lwjglVersion = getLwjglVersion()
let platform = getPlatform()
promises.push(
readAsset("/mmc-pack.json").then((data) => {
if (lwjglVersion.split(".")[0] == 3) {
data = data.replaceAll("$lwjgl_major", "3")
} else {
data = data.replaceAll("$lwjgl_major", "")
}
zip.file("mmc-pack.json", data
.replaceAll("$lwjgl_version", lwjglVersion))
})
)
promises.push(
readAsset("/instance.cfg").then((data) => {
if (platform === "linux") {
data = data.replaceAll("$use_wrapper_command", "true")
data = data.replaceAll("$wrapper_command", "env __GL_THREADED_OPTIMIZATIONS=0")
} else {
data = data.replaceAll("$use_wrapper_command", "false")
data = data.replaceAll("$wrapper_command", "")
}
zip.file("instance.cfg", data)
})
)
promises.push(
readAsset("/patches/dev.frogmc.frogloader.json").then((data) => {
data = data.replaceAll("$thyroxine_version", useSnapshots.value ? latestThyroxineSnapshot : latestThyroxine)
data = data.replaceAll("$loader_url", useSnapshots.value ? latestLoaderSnapshotUrl : latestLoaderUrl)
data = data.replaceAll("$thyroxine_url", useSnapshots.value ? latestThyroxineSnapshotUrl : latestThyroxineUrl)
zip.folder("patches").file("dev.frogmc.frogloader.json", data)
})
)
Promise.all(promises).then((values) => {
zip.generateAsync({type:"blob"}).then(function (blob) {
@ -88,8 +224,8 @@ Insert section about the installer here
async function readAsset(path){
const response = await fetch(assetBaseUrl+path)
return await response.text().then((data) => {
data = data.replaceAll("$instance_name", instanceNameRef.value)
return data
return data.replaceAll("$instance_name", instanceNameRef.value)
.replaceAll("$loader_version", useSnapshots.value ? latestLoaderSnapshot : latestLoader)
})
}
@ -122,6 +258,12 @@ PR direct support to Prism
<input type="checkbox" v-model="showSnapshots" @change="getVersions">Show Snapshots</input>
</td>
</tr>
<tr>
<td>Library Versions</td>
<td>
<input type="checkbox" v-model="useSnapshots">Use Snapshots (Beta Versions)</input>
</td>
</tr>
<tr>
<td></td>
<td></td>
@ -129,5 +271,5 @@ PR direct support to Prism
</tbody>
</table>
<div id="missingBox"></div>
<button @click="download">Download</button>
<button id="download" @click="download" disabled>Loading...</button>
</div>

View file

@ -0,0 +1,74 @@
[General]
AutoCloseConsole=false
CloseAfterLaunch=false
ConfigVersion=1.2
CustomGLFWPath=
CustomOpenALPath=
EnableFeralGamemode=false
EnableMangoHud=false
Env=@Variant(\0\0\0\b\0\0\0\0)
ExportAuthor=
ExportName=
ExportOptionalFiles=true
ExportSummary=
ExportVersion=1.0.0
IgnoreJavaCompatibility=false
InstanceAccountId=
InstanceType=OneSix
JavaArchitecture=
JavaPath=
JavaRealArchitecture=
JavaSignature=
JavaVendor=
JavaVersion=
JoinServerOnLaunch=false
JoinServerOnLaunchAddress=
JvmArgs=
LaunchMaximized=false
LogPrePostOutput=true
ManagedPack=false
ManagedPackID=
ManagedPackName=
ManagedPackType=
ManagedPackVersionID=
ManagedPackVersionName=
MaxMemAlloc=2048
MinMemAlloc=512
MinecraftWinHeight=480
MinecraftWinWidth=854
OnlineFixes=false
OverrideCommands=$use_wrapper_command
OverrideConsole=false
OverrideEnv=false
OverrideGameTime=false
OverrideJava=false
OverrideJavaArgs=false
OverrideJavaLocation=false
OverrideLegacySettings=false
OverrideMemory=false
OverrideMiscellaneous=false
OverrideNativeWorkarounds=false
OverridePerformance=false
OverrideWindow=false
PermGen=128
PostExitCommand=
PreLaunchCommand=
Profiler=
QuitAfterGameStop=false
RecordGameTime=true
ShowConsole=false
ShowConsoleOnError=true
ShowGameTime=true
UseAccountForInstance=false
UseDiscreteGpu=true
UseNativeGLFW=false
UseNativeOpenAL=false
UseZink=false
WrapperCommand="$wrapper_command"
iconKey=default
lastLaunchTime=1717870111279
lastTimePlayed=5229
linkedInstances=[]
name=$instance_name
notes=
totalTimePlayed=0

View file

@ -0,0 +1,32 @@
{
"components": [
{
"cachedName": "LWJGL $lwjgl_major",
"cachedVersion": "$lwjlg_version",
"cachedVolatile": true,
"dependencyOnly": true,
"uid": "org.lwjgl$lwjgl_major",
"version": "$lwjlg_version"
},
{
"cachedName": "Minecraft",
"cachedRequires": [
{
"suggests": "$lwjlg_version",
"uid": "org.lwjgl$lwjgl_major"
}
],
"cachedVersion": "$game_version",
"important": true,
"uid": "net.minecraft",
"version": "$game_version"
},
{
"cachedName": "FrogLoader",
"important": true,
"uid": "dev.frogmc.frogloader",
"version": "$loader_version"
}
],
"formatVersion": 1
}

View file

@ -2,25 +2,21 @@
"formatVersion": 1,
"name": "FrogLoader",
"uid": "dev.frogmc.frogloader",
"version": "0.0.1-SNAPSHOT",
"version": "$loader_version",
"libraries": [
{
"downloads": {
"artifact": {
"size": 120676,
"sha1": "9bf1d861a97bdd799ba1ae614a5a1b4f4f86d1d1",
"url": "https://maven.frogmc.dev/snapshots/dev/frogmc/frogloader/0.0.1-SNAPSHOT/frogloader-0.0.1-20240608.093414-3.jar"
"url": "$loader_url"
}
},
"name": "dev.frogmc:frogloader:0.0.1-SNAPSHOT"
"name": "dev.frogmc:frogloader:$loader_version"
},
{
"name": "dev.frogmc:thyroxine:1.0.0-SNAPSHOT",
"name": "dev.frogmc:thyroxine:$thyroxine_version",
"downloads": {
"artifact": {
"size": 36102,
"sha1": "9fd87f91ccaf70f818b1f564101feb75306f99a9",
"url": "https://maven.frogmc.dev/snapshots/dev/frogmc/thyroxine/1.0.0-SNAPSHOT/thyroxine-1.0.0-20240607.131732-1.jar"
"url": "$thyroxine_url"
}
}
},

View file

@ -13,7 +13,14 @@ repositories {
}
minecraft(libs.versions.minecraft).loader(libs.versions.loader)
dependencies {
}
phytotelma {
loader(project.libs.versions.frogloader)
minecraft(project.libs.versions.minecraft)
}
java {
sourceCompatibility = JavaVersion.VERSION_21

View file

@ -48,6 +48,7 @@ outline: false
}
onMounted(() => {
Promise.all([
getGameVersions().then((v) => {
versions = v.versions
for (let version of versions){
@ -58,31 +59,44 @@ outline: false
}
}
getVersions()
})
}),
getLatestProjectVersions()
]).then((unused) => {
let button = document.getElementById("generate")
button.innerHTML = "Download"
button.disabled = false
})
})
function getLatestProjectVersions() {
return Promise.all([
fetchVersionFromMaven("releases", "frogloader").then((v) => {
latestLoader = v
document.getElementById("frogLoaderVersionReleaseBadge").innerHTML = v
}).catch((err) => {
document.getElementById("frogLoaderVersionReleaseBadge").innerHTML = "No version found!"
})
}),
fetchVersionFromMaven("releases", "phytotelma").then((v) => {
latestPhytotelma = v
document.getElementById("phytotelmaVersionReleaseBadge").innerHTML = v
}).catch((err) => {
document.getElementById("phytotelmaVersionReleaseBadge").innerHTML = "No version found!"
})
}),
/*fetchVersionFromMaven("releases", "froglib").then((v) => {
latestPhytotelma = v
document.getElementById("froglibVersionReleaseBadge").innerHTML = v
}).catch((err) => {
document.getElementById("froglibVersionReleaseBadge").innerHTML = "No version found!"
}),*/
fetchVersionFromMaven("snapshots", "frogloader").then((v) => {
latestLoaderSnapshot = v
document.getElementById("frogLoaderVersionSnapshotBadge").innerHTML = v
})
}),
fetchVersionFromMaven("snapshots", "phytotelma").then((v) => {
latestPhytotelmaSnapshot = v
document.getElementById("phytotelmaVersionSnapshotBadge").innerHTML = v
})
])
}
async function fetchVersionFromMaven(repository, name) {
@ -230,6 +244,10 @@ outline: false
## Inputs
::: warning TODO
- Add froglib dependency to template
:::
<div id="inputs">
<table>
<tbody>
@ -267,12 +285,14 @@ outline: false
</tbody>
</table>
<div id="missingBox"></div>
<button @click="generate">Download</button>
<button id="generate" @click="generate" disabled>Download</button>
</div>
## Latest Versions
[FrogLoader](/contributing/tools.md#frogloader) <Badge type="tip" id="frogLoaderVersionReleaseBadge">Loading Release...</Badge> <Badge type="warning" id="frogLoaderVersionSnapshotBadge">Loading Snapshot...</Badge>
[FrogLib](/contributing/tools.md#froglib) <Badge type="tip" id="froglibVersionReleaseBadge">Loading Release...</Badge> <Badge type="warning" id="froglibVersionSnapshotBadge">Loading Snapshot...</Badge>
[Phytotelma](/contributing/tools.md#phytotelma) <Badge type="tip" id="phytotelmaVersionReleaseBadge">Loading Release...</Badge> <Badge type="warning" id="phytotelmaVersionSnapshotBadge">Loading Snapshot...</Badge>