Compare commits

...

19 commits

Author SHA1 Message Date
moehreag 9f44d893c7 update gradle in template, update about page 2024-08-04 12:21:17 +02:00
moehreag d3b3c619bb update template to support new phytotelma dsl 2024-07-05 14:25:14 +02:00
moehreag 8bf19e7d8e fix edit url on docs pages 2024-06-30 21:59:20 +02:00
moehreag 219a6930d5 tweak button style to only apply in the main content 2024-06-30 20:06:18 +02:00
moehreag 72ba059e40 improve version list computation 2024-06-28 09:32:54 +02:00
moehreag ccd50ba033 use dedicated env variable to disable threaded opt. on linux 2024-06-18 13:58:37 +02:00
moehreag 8aea1f7d15 correctly filter minecraft releases/snapshots 2024-06-17 23:24:08 +02:00
moehreag 7059387020 fix generator bugs 2024-06-17 20:47:11 +02:00
moehreag fd526f42d6 fix json creation 2024-06-17 16:45:51 +02:00
moehreag 4fde4f5e50 remove unused variables 2024-06-17 13:14:31 +02:00
moehreag 47bda46ae8 switch the prism instance generator to use the meta 2024-06-17 13:10:43 +02:00
moehreag 607b11f55c correct nesting for included jars 2024-06-16 00:05:52 +02:00
moehreag 698bc04da0 update template generator 2024-06-13 11:13:54 +02:00
moehreag 2b0bd27b1b add froglib dependency to template 2024-06-10 23:52:02 +02:00
moehreag 006bf0222c fix site build, remove default files 2024-06-10 17:16:49 +02:00
moehreag 04913e76f5 correct example class reference 2024-06-10 12:33:21 +02:00
moehreag 15f47d822b rename extension names 2024-06-10 11:59:35 +02:00
moehreag bcc9fea5f9 add missing key 'load_type' 2024-06-10 10:53:29 +02:00
moehreag d7eeb492a7 primitive mmc/prism pack generation (hardcoded libs) 2024-06-10 10:47:58 +02:00
18 changed files with 361 additions and 303 deletions

View file

@ -69,7 +69,7 @@ export default defineConfig({
copyright: 'Copyright © 2024 FrogMC, <a href="https://git.frogmc.dev/frogmc/frogmc.dev">licensed under Apache-2.0</a>'
},
editLink: {
pattern: 'https://git.frogmc.dev/frogmc/frogmc.dev/edit/mistress/:path'
pattern: 'https://git.frogmc.dev/frogmc/frogmc.dev/_edit/mistress/:path'
},
outline: 'deep',
externalLinkIcon: true

View file

@ -141,13 +141,17 @@
* Custom styling
* -------------------------------------------------------------------------- */
button {
background-color: var(--vp-button-brand-bg);
color: var(--vp-button-brand-text);
border-color: var(--vp-button-brand-border);
padding: 4px;
border-radius: 14px;
}
button:hover {
.main button {
border-radius: 14px;
background-color: var(--vp-button-brand-bg);
}
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 +165,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

@ -52,6 +52,14 @@ const members = [
title: 'Moderator',
links: [
]
},
{
avatar: 'https://git.frogmc.dev/ender.png',
name: 'Ender',
title: 'Developer',
links: [
]
}
]
@ -69,4 +77,4 @@ const members = [
<VPTeamMembers
:members="members"
/>
</VPTeamPage>
</VPTeamPage>

View file

@ -1,49 +0,0 @@
---
outline: deep
---
# Runtime API Examples
This page demonstrates usage of some of the runtime APIs provided by VitePress.
The main `useData()` API can be used to access site, theme, and page data for the current page. It works in both `.md` and `.vue` files:
```md
<script setup>
import { useData } from 'vitepress'
const { theme, page, frontmatter } = useData()
</script>
## Results
### Theme Data
<pre>{{ theme }}</pre>
### Page Data
<pre>{{ page }}</pre>
### Page Frontmatter
<pre>{{ frontmatter }}</pre>
```
<script setup>
import { useData } from 'vitepress'
const { site, theme, page, frontmatter } = useData()
</script>
## Results
### Theme Data
<pre>{{ theme }}</pre>
### Page Data
<pre>{{ page }}</pre>
### Page Frontmatter
<pre>{{ frontmatter }}</pre>
## More
Check out the documentation for the [full list of runtime APIs](https://vitepress.dev/reference/runtime-api#usedata).

View file

@ -1,3 +1,8 @@
---
- head:
---
# Client
Here's how to install FrogLoader to your game.
@ -21,42 +26,89 @@ Insert section about the installer here
const showSnapshots = ref()
const versionSelector = ref()
let releases = []
let snapshots = []
let versions = []
let loaderLibs
async function getGameVersions() {
const response = await fetch("https://piston-meta.mojang.com/mc/game/version_manifest_v2.json")
return await response.json()
}
function getVersions() {
versionSelector.value.innerHTML = ""
async function getVersions() {
let optionString = ""
for (let version of releases) {
versionSelector.value.innerHTML += "<option value=\""+version.id+"\">"+version.id+"</option>"
}
if (showSnapshots.value) {
for (let version of snapshots) {
versionSelector.value.innerHTML += "<option value=\""+version.id+"\">"+version.id+"</option>"
for (let version of versions) {
optionString += "<option value=\""+version.id+"\">"+version.id+"</option>"
}
} else {
for (let version of releases) {
optionString += "<option value=\""+version.id+"\">"+version.id+"</option>"
}
}
versionSelector.value.innerHTML = optionString
}
async function fetchLibraries() {
let response = await fetch("https://meta.frogmc.dev/v1/loader/version/latest")
let json = await response.json()
loaderLibs = json
}
onMounted(() => {
getGameVersions().then((v) => {
versions = v.versions
for (let version of versions){
if (version.type === "snapshot"){
snapshots.push(version)
} else {
releases.push(version)
Promise.all([
getGameVersions().then((v) => {
versions = v.versions
for (let version of versions){
if (version.type === "release"){
releases.push(version)
}
}
}
getVersions()
getVersions()
}),
fetchLibraries()
]).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
})
})
function download(){
async function getLwjglVersion() {
const versionUrl = versions[versionSelector.value.selectedIndex].url
let versionResponse = await fetch(versionUrl)
let versionJson = await versionResponse.json()
for (let lib of versionJson.libraries) {
let matcher = lib.name.match(/org.lwjgl:lwjgl:(\d+\.\d+\.\d+.*)/)
if (matcher != undefined) {
return matcher[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"
}
}
async function download(){
let missing = []
if (instanceNameRef.value === undefined){
@ -73,8 +125,54 @@ Insert section about the installer here
let zip = JSZip()
let promises = []
let lwjglVersion = await 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("$override_env", "true")
data = data.replaceAll("$env", "Env=@Variant(\\0\\0\\0\\b\\0\\0\\0\\x1\\0\\0\\0\\x36\\0_\\0_\\0G\\0L\\0_\\0T\\0H\\0R\\0\\x45\\0\\x41\\0\\x44\\0\\x45\\0\\x44\\0_\\0O\\0P\\0T\\0I\\0M\\0I\\0Z\\0\\x41\\0T\\0I\\0O\\0N\\0S\\0\\0\\0\\n\\0\\0\\0\\x2\\0\\x30)")
} else {
data = data.replaceAll("$override_env", "false")
data = data.replaceAll("$env", "@Variant(\\0\\0\\0\\b\\0\\0\\0\\0)")
}
zip.file("instance.cfg", data)
})
)
promises.push(
readAsset("/patches/dev.frogmc.frogloader.json").then((data) => {
let json = JSON.parse(data)
let libs = json.libraries
for (let lib of loaderLibs.libraries) {
let value = {
"downloads": {
"artifact": {
"url": lib.url,
"size": lib.size,
"sha1": lib.sha1
}
},
"name": lib.name
}
libs.push(value)
}
zip.folder("patches").file("dev.frogmc.frogloader.json", JSON.stringify(json))
})
)
Promise.all(promises).then((values) => {
zip.generateAsync({type:"blob"}).then(function (blob) {
@ -88,8 +186,9 @@ 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", loaderLibs.version)
.replaceAll("$game_version", versionSelector.value.value)
})
}
@ -98,10 +197,6 @@ Insert section about the installer here
}
</script>
::: warning Dependencies for a generator here
- loader libraries in meta
:::
Add an instance generator to the installer and describe it here\
**or**\
PR direct support to Prism
@ -122,12 +217,8 @@ PR direct support to Prism
<input type="checkbox" v-model="showSnapshots" @change="getVersions">Show Snapshots</input>
</td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
<div id="missingBox"></div>
<button @click="download">Download</button>
<button id="download" @click="download" disabled>Loading...</button>
</div>

View file

@ -1,85 +0,0 @@
# Markdown Extension Examples
This page demonstrates some of the built-in markdown extensions provided by VitePress.
## Syntax Highlighting
VitePress provides Syntax Highlighting powered by [Shiki](https://github.com/shikijs/shiki), with additional features like line-highlighting:
**Input**
````md
```js{4}
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
```
````
**Output**
```js{4}
export default {
data () {
return {
msg: 'Highlighted!'
}
}
}
```
## Custom Containers
**Input**
```md
::: info
This is an info box.
:::
::: tip
This is a tip.
:::
::: warning
This is a warning.
:::
::: danger
This is a dangerous warning.
:::
::: details
This is a details block.
:::
```
**Output**
::: info
This is an info box.
:::
::: tip
This is a tip.
:::
::: warning
This is a warning.
:::
::: danger
This is a dangerous warning.
:::
::: details
This is a details block.
:::
## More
Check out the documentation for the [full list of markdown extensions](https://vitepress.dev/guide/markdown).

View file

@ -0,0 +1,74 @@
[General]
AutoCloseConsole=false
CloseAfterLaunch=false
ConfigVersion=1.2
CustomGLFWPath=
CustomOpenALPath=
EnableFeralGamemode=false
EnableMangoHud=false
Env=$env
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=false
OverrideConsole=false
OverrideEnv=$override_env
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=
iconKey=default
lastLaunchTime=1717870111279
lastTimePlayed=5229
linkedInstances=[]
name=$instance_name
notes=
totalTimePlayed=0

View file

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

View file

@ -2,81 +2,8 @@
"formatVersion": 1,
"name": "FrogLoader",
"uid": "dev.frogmc.frogloader",
"version": "0.0.1-SNAPSHOT",
"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"
}
},
"name": "dev.frogmc:frogloader:0.0.1-SNAPSHOT"
},
{
"name": "dev.frogmc:thyroxine:1.0.0-SNAPSHOT",
"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"
}
}
},
{
"name": "net.fabricmc:sponge-mixin:0.14.0+mixin.0.8.6",
"url": "https://maven.fabricmc.net"
},
{
"name": "io.github.llamalad7:mixinextras-common:0.3.6",
"url": "https://repo.maven.apache.org/maven2"
},
{
"name": "com.electronwill.night-config:toml:3.7.2",
"url": "https://repo.maven.apache.org/maven2"
},
{
"name": "com.electronwill.night-config:core:3.7.2",
"url": "https://repo.maven.apache.org/maven2"
},
{
"name": "org.ow2.asm:asm:9.7",
"url": "https://repo.maven.apache.org/maven2"
},
{
"name": "org.ow2.asm:asm-commons:9.7",
"url": "https://repo.maven.apache.org/maven2"
},
{
"name": "org.ow2.asm:asm-tree:9.7",
"url": "https://repo.maven.apache.org/maven2"
},
{
"name": "org.ow2.asm:asm-util:9.7",
"url": "https://repo.maven.apache.org/maven2"
},
{
"name": "org.ow2.asm:asm-analysis:9.7",
"url": "https://repo.maven.apache.org/maven2"
},
{
"name": "org.slf4j:slf4j-api:2.0.13",
"url": "https://repo.maven.apache.org/maven2"
},
{
"name": "org.apache.logging.log4j:log4j-slf4j2-impl:2.23.1",
"url": "https://repo.maven.apache.org/maven2"
},
{
"name": "org.apache.logging.log4j:log4j-api:2.23.1",
"url": "https://repo.maven.apache.org/maven2"
},
{
"name": "org.apache.logging.log4j:log4j-core:2.23.1",
"url": "https://repo.maven.apache.org/maven2"
}
],
"version": "$loader_version",
"libraries": [ ],
"mainClass": "dev.frogmc.frogloader.impl.launch.client.FrogClient",
"type": "snapshot"
}

View file

@ -1,9 +1,5 @@
import dev.frogmc.phytotelma.ext.minecraft
import dev.frogmc.phytotelma.ext.loader
plugins {
id("java")
id("dev.frogmc.phytotelma").version("$phytotelma_version")
alias(libs.plugins.phytotelma)
}
group = "$maven_group"
@ -13,7 +9,21 @@ repositories {
}
minecraft(libs.versions.minecraft).loader(libs.versions.loader)
dependencies {
}
phytotelma {
minecraft {
version = project.libs.versions.minecraft
}
loader {
version = project.libs.versions.frogloader
}
froglib {
version = project.libs.versions.froglib
}
}
java {
sourceCompatibility = JavaVersion.VERSION_21

View file

@ -1,9 +1,16 @@
[versions]
phytotelma = "$phytotelma_version"
minecraft = "$game_version"
loader = "$loader_version"
frogloader = "$loader_version"
froglib = "$froglib_version"
[libraries]
# technically unused
minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" }
loader = { module = "dev.frogmc:frogloader", version.ref = "loader" }
frogloader = { module = "dev.frogmc:frogloader", version.ref = "frogloader" }
froglib = { module = "dev.frogmc:froglib", version.ref = "froglib" }
[plugins]
phytotelma = { id = "dev.frogmc.phytotelma", version.ref = "phytotelma" }

View file

@ -1,6 +1,6 @@
#Mon May 13 10:13:59 CEST 2024
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

0
public/resources/template/gradlew.bat vendored Normal file → Executable file
View file

View file

@ -3,7 +3,7 @@ package $maven_group.$mod_id;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import dev.frogmc.froglib.entrypoints.MainExtension;
import dev.frogmc.froglib.entrypoints.api.MainExtension;
import dev.frogmc.frogloader.api.mod.ModProperties;
public class $mod_name_pascalMain implements MainExtension {

View file

@ -3,6 +3,9 @@
"minVersion": "0.8",
"package": "$maven_group.mixin",
"compatibilityLevel": "JAVA_21",
"mixins": [
],
"server": [
],

View file

@ -17,5 +17,5 @@ depends = [
]
[frog.extensions]
mixin_config = "$mod_id.mixins.json"
mixin = "$mod_id.mixins.json"
main = "$maven_group.$mod_name_pascalMain"

View file

@ -31,16 +31,17 @@ provides = [
]
[frog.extensions] # key-value pairs for whatever else is needed (Entrypoints, custom values, lists of files, indicators...)
mixin_config = "example_mod.mixins.json"
frog_aw = "example_mod.accesswidener"
pre_launch = "com/example/frog/PreLaunch"
mixin = "example_mod.mixins.json"
accesswidener = "example_mod.accesswidener"
prelaunch = "com.example.frog.PreLaunch"
loading_type = "required" # the type 'required' is implicit if it isn't present. Other values are not specified, but using 'optional' is recommended.
```
These keys are automatically inserted by [Phytotelma](/contributing/tools#phytotelma) for generated metadata files and their host mods respectively.
You should never need to insert them yourself.
```toml
included_jars = [
included_jars = [[
{ id = "mod_id", path = "META-INF/jars/mod.jar" }
]
]]
phytotelma.generated = true
```
```

View file

@ -22,66 +22,95 @@ outline: false
const licenseRef = ref()
const useSnapshots = ref()
let releases = []
let snapshots = []
let versions = []
let latestLoader
let latestPhytotelma
let latestFrogLib
let latestLoaderSnapshot
let latestPhytotelmaSnapshot
let latestFrogLibSnapshot
async function getGameVersions() {
const response = await fetch("https://piston-meta.mojang.com/mc/game/version_manifest_v2.json")
return await response.json()
}
function getVersions() {
versionSelector.value.innerHTML = ""
async function getVersions() {
let optionString = ""
for (let version of releases) {
versionSelector.value.innerHTML += "<option value=\""+version.id+"\">"+version.id+"</option>"
}
if (showSnapshots.value) {
for (let version of snapshots) {
versionSelector.value.innerHTML += "<option value=\""+version.id+"\">"+version.id+"</option>"
for (let version of versions) {
optionString += "<option value=\""+version.id+"\">"+version.id+"</option>"
}
} else {
for (let version of releases) {
optionString += "<option value=\""+version.id+"\">"+version.id+"</option>"
}
}
versionSelector.value.innerHTML = optionString
}
onMounted(() => {
getGameVersions().then((v) => {
versions = v.versions
for (let version of versions){
if (version.type === "snapshot"){
snapshots.push(version)
} else {
releases.push(version)
Promise.all([
getGameVersions().then((v) => {
versions = v.versions
for (let version of versions){
if (version.type === "release"){
releases.push(version)
}
}
}
getVersions()
getVersions()
}),
getLatestProjectVersions()
]).then((unused) => {
let button = document.getElementById("generate")
button.innerHTML = "Download"
button.disabled = false
})
getLatestProjectVersions()
})
function getLatestProjectVersions() {
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("snapshots", "frogloader").then((v) => {
latestLoaderSnapshot = v
document.getElementById("frogLoaderVersionSnapshotBadge").innerHTML = v
})
fetchVersionFromMaven("snapshots", "phytotelma").then((v) => {
latestPhytotelmaSnapshot = v
document.getElementById("phytotelmaVersionSnapshotBadge").innerHTML = v
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) => {
latestFrogLib = 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
}),
fetchVersionFromMaven("snapshots", "froglib").then((v) => {
latestFrogLibSnapshot = v
document.getElementById("froglibVersionSnapshotBadge").innerHTML = v
}).catch((err) => {
document.getElementById("froglibVersionSnapshotBadge").innerHTML = "No version found!"
}),
]).then((data) => {
if (latestLoader === undefined ||
latestPhytotelma === undefined ||
latestFrogLib === undefined) {
useSnapshots.value = true
document.getElementById("snapshotCheckbox").setAttribute("disabled", '')
}
})
}
@ -172,13 +201,14 @@ outline: false
let java = main.folder("java")
let resources = main.folder("resources")
let classes = java
for (let part of mavenGroupRef.value.split(/\\./g)) {
for (let part of mavenGroupRef.value.split(".")) {
classes = classes.folder(part)
}
classes = classes.folder(modIdRef.value)
const classFileName = modNameRef.value.replaceAll(" ", "")
promises.push(
readAsset("/src/main/java/Main.java").then((data) => {
classes.file(classFileName+"Main", data)
classes.file(classFileName+"Main.java", data)
})
)
promises.push(
@ -216,6 +246,7 @@ outline: false
data = data.replaceAll("$license", licenseRef.value)
data = data.replaceAll("$loader_version", useSnapshots.value ? latestLoaderSnapshot : latestLoader)
data = data.replaceAll("$phytotelma_version", useSnapshots.value ? latestPhytotelmaSnapshot : latestPhytotelma)
data = data.replaceAll("$froglib_version", useSnapshots.value ? latestFrogLibSnapshot : latestFrogLib)
data = data.replaceAll("$game_version", versionSelector.value.value)
return data
})
@ -261,18 +292,20 @@ outline: false
<tr>
<td>Library Versions</td>
<td>
<input type="checkbox" v-model="useSnapshots">Use Snapshots (Beta Versions)</input>
<input type="checkbox" v-model="useSnapshots" id="snapshotCheckbox">Use Snapshots (Beta Versions)</input>
</td>
</tr>
</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>