Compare commits
19 commits
writing-do
...
mistress
Author | SHA1 | Date | |
---|---|---|---|
moehreag | 9f44d893c7 | ||
moehreag | d3b3c619bb | ||
moehreag | 8bf19e7d8e | ||
moehreag | 219a6930d5 | ||
moehreag | 72ba059e40 | ||
moehreag | ccd50ba033 | ||
moehreag | 8aea1f7d15 | ||
moehreag | 7059387020 | ||
moehreag | fd526f42d6 | ||
moehreag | 4fde4f5e50 | ||
moehreag | 47bda46ae8 | ||
moehreag | 607b11f55c | ||
moehreag | 698bc04da0 | ||
moehreag | 2b0bd27b1b | ||
moehreag | 006bf0222c | ||
moehreag | 04913e76f5 | ||
moehreag | 15f47d822b | ||
moehreag | bcc9fea5f9 | ||
moehreag | d7eeb492a7 |
|
@ -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>'
|
copyright: 'Copyright © 2024 FrogMC, <a href="https://git.frogmc.dev/frogmc/frogmc.dev">licensed under Apache-2.0</a>'
|
||||||
},
|
},
|
||||||
editLink: {
|
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',
|
outline: 'deep',
|
||||||
externalLinkIcon: true
|
externalLinkIcon: true
|
||||||
|
|
|
@ -141,13 +141,17 @@
|
||||||
* Custom styling
|
* Custom styling
|
||||||
* -------------------------------------------------------------------------- */
|
* -------------------------------------------------------------------------- */
|
||||||
button {
|
button {
|
||||||
background-color: var(--vp-button-brand-bg);
|
|
||||||
color: var(--vp-button-brand-text);
|
color: var(--vp-button-brand-text);
|
||||||
border-color: var(--vp-button-brand-border);
|
|
||||||
padding: 4px;
|
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);
|
background-color: var(--vp-button-brand-hover-bg);
|
||||||
color: var(--vp-button-brand-hover-text);
|
color: var(--vp-button-brand-hover-text);
|
||||||
border-color: var(--vp-button-brand-hover-border);
|
border-color: var(--vp-button-brand-hover-border);
|
||||||
|
@ -161,8 +165,12 @@ select, input {
|
||||||
border-radius: 12px;
|
border-radius: 12px;
|
||||||
}
|
}
|
||||||
select {
|
select {
|
||||||
|
background-color: var(--vp-c-brand-soft);
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
|
select:hover {
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
input {
|
input {
|
||||||
border: 4px solid var(--vp-c-brand-soft);
|
border: 4px solid var(--vp-c-brand-soft);
|
||||||
}
|
}
|
||||||
|
|
10
about.md
10
about.md
|
@ -52,6 +52,14 @@ const members = [
|
||||||
title: 'Moderator',
|
title: 'Moderator',
|
||||||
links: [
|
links: [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
avatar: 'https://git.frogmc.dev/ender.png',
|
||||||
|
name: 'Ender',
|
||||||
|
title: 'Developer',
|
||||||
|
links: [
|
||||||
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
@ -69,4 +77,4 @@ const members = [
|
||||||
<VPTeamMembers
|
<VPTeamMembers
|
||||||
:members="members"
|
:members="members"
|
||||||
/>
|
/>
|
||||||
</VPTeamPage>
|
</VPTeamPage>
|
||||||
|
|
|
@ -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).
|
|
|
@ -1,3 +1,8 @@
|
||||||
|
---
|
||||||
|
- head:
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
# Client
|
# Client
|
||||||
|
|
||||||
Here's how to install FrogLoader to your game.
|
Here's how to install FrogLoader to your game.
|
||||||
|
@ -21,42 +26,89 @@ Insert section about the installer here
|
||||||
const showSnapshots = ref()
|
const showSnapshots = ref()
|
||||||
const versionSelector = ref()
|
const versionSelector = ref()
|
||||||
let releases = []
|
let releases = []
|
||||||
let snapshots = []
|
|
||||||
let versions = []
|
let versions = []
|
||||||
|
let loaderLibs
|
||||||
|
|
||||||
async function getGameVersions() {
|
async function getGameVersions() {
|
||||||
const response = await fetch("https://piston-meta.mojang.com/mc/game/version_manifest_v2.json")
|
const response = await fetch("https://piston-meta.mojang.com/mc/game/version_manifest_v2.json")
|
||||||
return await response.json()
|
return await response.json()
|
||||||
}
|
}
|
||||||
|
|
||||||
function getVersions() {
|
async function getVersions() {
|
||||||
versionSelector.value.innerHTML = ""
|
let optionString = ""
|
||||||
|
|
||||||
for (let version of releases) {
|
|
||||||
versionSelector.value.innerHTML += "<option value=\""+version.id+"\">"+version.id+"</option>"
|
|
||||||
}
|
|
||||||
if (showSnapshots.value) {
|
if (showSnapshots.value) {
|
||||||
for (let version of snapshots) {
|
for (let version of versions) {
|
||||||
versionSelector.value.innerHTML += "<option value=\""+version.id+"\">"+version.id+"</option>"
|
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(() => {
|
onMounted(() => {
|
||||||
getGameVersions().then((v) => {
|
Promise.all([
|
||||||
versions = v.versions
|
getGameVersions().then((v) => {
|
||||||
for (let version of versions){
|
versions = v.versions
|
||||||
if (version.type === "snapshot"){
|
for (let version of versions){
|
||||||
snapshots.push(version)
|
if (version.type === "release"){
|
||||||
} else {
|
releases.push(version)
|
||||||
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 = []
|
let missing = []
|
||||||
|
|
||||||
if (instanceNameRef.value === undefined){
|
if (instanceNameRef.value === undefined){
|
||||||
|
@ -73,8 +125,54 @@ Insert section about the installer here
|
||||||
|
|
||||||
let zip = JSZip()
|
let zip = JSZip()
|
||||||
let promises = []
|
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) => {
|
Promise.all(promises).then((values) => {
|
||||||
zip.generateAsync({type:"blob"}).then(function (blob) {
|
zip.generateAsync({type:"blob"}).then(function (blob) {
|
||||||
|
@ -88,8 +186,9 @@ Insert section about the installer here
|
||||||
async function readAsset(path){
|
async function readAsset(path){
|
||||||
const response = await fetch(assetBaseUrl+path)
|
const response = await fetch(assetBaseUrl+path)
|
||||||
return await response.text().then((data) => {
|
return await response.text().then((data) => {
|
||||||
data = data.replaceAll("$instance_name", instanceNameRef.value)
|
return data.replaceAll("$instance_name", instanceNameRef.value)
|
||||||
return data
|
.replaceAll("$loader_version", loaderLibs.version)
|
||||||
|
.replaceAll("$game_version", versionSelector.value.value)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,10 +197,6 @@ Insert section about the installer here
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
::: warning Dependencies for a generator here
|
|
||||||
- loader libraries in meta
|
|
||||||
:::
|
|
||||||
|
|
||||||
Add an instance generator to the installer and describe it here\
|
Add an instance generator to the installer and describe it here\
|
||||||
**or**\
|
**or**\
|
||||||
PR direct support to Prism
|
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>
|
<input type="checkbox" v-model="showSnapshots" @change="getVersions">Show Snapshots</input>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
|
||||||
<td></td>
|
|
||||||
<td></td>
|
|
||||||
</tr>
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div id="missingBox"></div>
|
<div id="missingBox"></div>
|
||||||
<button @click="download">Download</button>
|
<button id="download" @click="download" disabled>Loading...</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -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).
|
|
74
public/resources/prism/instance.cfg
Normal file
74
public/resources/prism/instance.cfg
Normal 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
|
30
public/resources/prism/mmc-pack.json
Normal file
30
public/resources/prism/mmc-pack.json
Normal 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
|
||||||
|
}
|
|
@ -2,81 +2,8 @@
|
||||||
"formatVersion": 1,
|
"formatVersion": 1,
|
||||||
"name": "FrogLoader",
|
"name": "FrogLoader",
|
||||||
"uid": "dev.frogmc.frogloader",
|
"uid": "dev.frogmc.frogloader",
|
||||||
"version": "0.0.1-SNAPSHOT",
|
"version": "$loader_version",
|
||||||
"libraries": [
|
"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"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"mainClass": "dev.frogmc.frogloader.impl.launch.client.FrogClient",
|
"mainClass": "dev.frogmc.frogloader.impl.launch.client.FrogClient",
|
||||||
"type": "snapshot"
|
"type": "snapshot"
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
import dev.frogmc.phytotelma.ext.minecraft
|
|
||||||
import dev.frogmc.phytotelma.ext.loader
|
|
||||||
|
|
||||||
plugins {
|
plugins {
|
||||||
id("java")
|
alias(libs.plugins.phytotelma)
|
||||||
id("dev.frogmc.phytotelma").version("$phytotelma_version")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
group = "$maven_group"
|
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 {
|
java {
|
||||||
sourceCompatibility = JavaVersion.VERSION_21
|
sourceCompatibility = JavaVersion.VERSION_21
|
||||||
|
|
|
@ -1,9 +1,16 @@
|
||||||
[versions]
|
[versions]
|
||||||
|
|
||||||
|
phytotelma = "$phytotelma_version"
|
||||||
minecraft = "$game_version"
|
minecraft = "$game_version"
|
||||||
loader = "$loader_version"
|
frogloader = "$loader_version"
|
||||||
|
froglib = "$froglib_version"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
|
# technically unused
|
||||||
minecraft = { module = "com.mojang:minecraft", version.ref = "minecraft" }
|
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" }
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
#Mon May 13 10:13:59 CEST 2024
|
#Mon May 13 10:13:59 CEST 2024
|
||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
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
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|
0
public/resources/template/gradlew.bat
vendored
Normal file → Executable file
0
public/resources/template/gradlew.bat
vendored
Normal file → Executable file
|
@ -3,7 +3,7 @@ package $maven_group.$mod_id;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import dev.frogmc.froglib.entrypoints.MainExtension;
|
import dev.frogmc.froglib.entrypoints.api.MainExtension;
|
||||||
import dev.frogmc.frogloader.api.mod.ModProperties;
|
import dev.frogmc.frogloader.api.mod.ModProperties;
|
||||||
|
|
||||||
public class $mod_name_pascalMain implements MainExtension {
|
public class $mod_name_pascalMain implements MainExtension {
|
||||||
|
|
|
@ -3,6 +3,9 @@
|
||||||
"minVersion": "0.8",
|
"minVersion": "0.8",
|
||||||
"package": "$maven_group.mixin",
|
"package": "$maven_group.mixin",
|
||||||
"compatibilityLevel": "JAVA_21",
|
"compatibilityLevel": "JAVA_21",
|
||||||
|
"mixins": [
|
||||||
|
|
||||||
|
],
|
||||||
"server": [
|
"server": [
|
||||||
|
|
||||||
],
|
],
|
||||||
|
|
|
@ -17,5 +17,5 @@ depends = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[frog.extensions]
|
[frog.extensions]
|
||||||
mixin_config = "$mod_id.mixins.json"
|
mixin = "$mod_id.mixins.json"
|
||||||
main = "$maven_group.$mod_name_pascalMain"
|
main = "$maven_group.$mod_name_pascalMain"
|
||||||
|
|
13
spec/fmt.md
13
spec/fmt.md
|
@ -31,16 +31,17 @@ provides = [
|
||||||
]
|
]
|
||||||
|
|
||||||
[frog.extensions] # key-value pairs for whatever else is needed (Entrypoints, custom values, lists of files, indicators...)
|
[frog.extensions] # key-value pairs for whatever else is needed (Entrypoints, custom values, lists of files, indicators...)
|
||||||
mixin_config = "example_mod.mixins.json"
|
mixin = "example_mod.mixins.json"
|
||||||
frog_aw = "example_mod.accesswidener"
|
accesswidener = "example_mod.accesswidener"
|
||||||
pre_launch = "com/example/frog/PreLaunch"
|
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.
|
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.
|
You should never need to insert them yourself.
|
||||||
```toml
|
```toml
|
||||||
included_jars = [
|
included_jars = [[
|
||||||
{ id = "mod_id", path = "META-INF/jars/mod.jar" }
|
{ id = "mod_id", path = "META-INF/jars/mod.jar" }
|
||||||
]
|
]]
|
||||||
phytotelma.generated = true
|
phytotelma.generated = true
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
115
template.md
115
template.md
|
@ -22,66 +22,95 @@ outline: false
|
||||||
const licenseRef = ref()
|
const licenseRef = ref()
|
||||||
const useSnapshots = ref()
|
const useSnapshots = ref()
|
||||||
let releases = []
|
let releases = []
|
||||||
let snapshots = []
|
|
||||||
let versions = []
|
let versions = []
|
||||||
let latestLoader
|
let latestLoader
|
||||||
let latestPhytotelma
|
let latestPhytotelma
|
||||||
|
let latestFrogLib
|
||||||
let latestLoaderSnapshot
|
let latestLoaderSnapshot
|
||||||
let latestPhytotelmaSnapshot
|
let latestPhytotelmaSnapshot
|
||||||
|
let latestFrogLibSnapshot
|
||||||
|
|
||||||
async function getGameVersions() {
|
async function getGameVersions() {
|
||||||
const response = await fetch("https://piston-meta.mojang.com/mc/game/version_manifest_v2.json")
|
const response = await fetch("https://piston-meta.mojang.com/mc/game/version_manifest_v2.json")
|
||||||
return await response.json()
|
return await response.json()
|
||||||
}
|
}
|
||||||
|
|
||||||
function getVersions() {
|
async function getVersions() {
|
||||||
versionSelector.value.innerHTML = ""
|
let optionString = ""
|
||||||
|
|
||||||
for (let version of releases) {
|
|
||||||
versionSelector.value.innerHTML += "<option value=\""+version.id+"\">"+version.id+"</option>"
|
|
||||||
}
|
|
||||||
if (showSnapshots.value) {
|
if (showSnapshots.value) {
|
||||||
for (let version of snapshots) {
|
for (let version of versions) {
|
||||||
versionSelector.value.innerHTML += "<option value=\""+version.id+"\">"+version.id+"</option>"
|
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(() => {
|
onMounted(() => {
|
||||||
getGameVersions().then((v) => {
|
Promise.all([
|
||||||
versions = v.versions
|
getGameVersions().then((v) => {
|
||||||
for (let version of versions){
|
versions = v.versions
|
||||||
if (version.type === "snapshot"){
|
for (let version of versions){
|
||||||
snapshots.push(version)
|
if (version.type === "release"){
|
||||||
} else {
|
releases.push(version)
|
||||||
releases.push(version)
|
}
|
||||||
}
|
}
|
||||||
}
|
getVersions()
|
||||||
getVersions()
|
}),
|
||||||
|
getLatestProjectVersions()
|
||||||
|
]).then((unused) => {
|
||||||
|
let button = document.getElementById("generate")
|
||||||
|
button.innerHTML = "Download"
|
||||||
|
button.disabled = false
|
||||||
})
|
})
|
||||||
getLatestProjectVersions()
|
|
||||||
})
|
})
|
||||||
|
|
||||||
function getLatestProjectVersions() {
|
function getLatestProjectVersions() {
|
||||||
fetchVersionFromMaven("releases", "frogloader").then((v) => {
|
return Promise.all([
|
||||||
latestLoader = v
|
fetchVersionFromMaven("releases", "frogloader").then((v) => {
|
||||||
document.getElementById("frogLoaderVersionReleaseBadge").innerHTML = v
|
latestLoader = v
|
||||||
}).catch((err) => {
|
document.getElementById("frogLoaderVersionReleaseBadge").innerHTML = v
|
||||||
document.getElementById("frogLoaderVersionReleaseBadge").innerHTML = "No version found!"
|
}).catch((err) => {
|
||||||
})
|
document.getElementById("frogLoaderVersionReleaseBadge").innerHTML = "No version found!"
|
||||||
fetchVersionFromMaven("releases", "phytotelma").then((v) => {
|
}),
|
||||||
latestPhytotelma = v
|
fetchVersionFromMaven("releases", "phytotelma").then((v) => {
|
||||||
document.getElementById("phytotelmaVersionReleaseBadge").innerHTML = v
|
latestPhytotelma = v
|
||||||
}).catch((err) => {
|
document.getElementById("phytotelmaVersionReleaseBadge").innerHTML = v
|
||||||
document.getElementById("phytotelmaVersionReleaseBadge").innerHTML = "No version found!"
|
}).catch((err) => {
|
||||||
})
|
document.getElementById("phytotelmaVersionReleaseBadge").innerHTML = "No version found!"
|
||||||
fetchVersionFromMaven("snapshots", "frogloader").then((v) => {
|
}),
|
||||||
latestLoaderSnapshot = v
|
fetchVersionFromMaven("releases", "froglib").then((v) => {
|
||||||
document.getElementById("frogLoaderVersionSnapshotBadge").innerHTML = v
|
latestFrogLib = v
|
||||||
})
|
document.getElementById("froglibVersionReleaseBadge").innerHTML = v
|
||||||
fetchVersionFromMaven("snapshots", "phytotelma").then((v) => {
|
}).catch((err) => {
|
||||||
latestPhytotelmaSnapshot = v
|
document.getElementById("froglibVersionReleaseBadge").innerHTML = "No version found!"
|
||||||
document.getElementById("phytotelmaVersionSnapshotBadge").innerHTML = v
|
}),
|
||||||
|
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 java = main.folder("java")
|
||||||
let resources = main.folder("resources")
|
let resources = main.folder("resources")
|
||||||
let classes = java
|
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(part)
|
||||||
}
|
}
|
||||||
|
classes = classes.folder(modIdRef.value)
|
||||||
const classFileName = modNameRef.value.replaceAll(" ", "")
|
const classFileName = modNameRef.value.replaceAll(" ", "")
|
||||||
promises.push(
|
promises.push(
|
||||||
readAsset("/src/main/java/Main.java").then((data) => {
|
readAsset("/src/main/java/Main.java").then((data) => {
|
||||||
classes.file(classFileName+"Main", data)
|
classes.file(classFileName+"Main.java", data)
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
promises.push(
|
promises.push(
|
||||||
|
@ -216,6 +246,7 @@ outline: false
|
||||||
data = data.replaceAll("$license", licenseRef.value)
|
data = data.replaceAll("$license", licenseRef.value)
|
||||||
data = data.replaceAll("$loader_version", useSnapshots.value ? latestLoaderSnapshot : latestLoader)
|
data = data.replaceAll("$loader_version", useSnapshots.value ? latestLoaderSnapshot : latestLoader)
|
||||||
data = data.replaceAll("$phytotelma_version", useSnapshots.value ? latestPhytotelmaSnapshot : latestPhytotelma)
|
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)
|
data = data.replaceAll("$game_version", versionSelector.value.value)
|
||||||
return data
|
return data
|
||||||
})
|
})
|
||||||
|
@ -261,18 +292,20 @@ outline: false
|
||||||
<tr>
|
<tr>
|
||||||
<td>Library Versions</td>
|
<td>Library Versions</td>
|
||||||
<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>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div id="missingBox"></div>
|
<div id="missingBox"></div>
|
||||||
<button @click="generate">Download</button>
|
<button id="generate" @click="generate" disabled>Download</button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
## Latest Versions
|
## Latest Versions
|
||||||
|
|
||||||
[FrogLoader](/contributing/tools.md#frogloader) <Badge type="tip" id="frogLoaderVersionReleaseBadge">Loading Release...</Badge> <Badge type="warning" id="frogLoaderVersionSnapshotBadge">Loading Snapshot...</Badge>
|
[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>
|
[Phytotelma](/contributing/tools.md#phytotelma) <Badge type="tip" id="phytotelmaVersionReleaseBadge">Loading Release...</Badge> <Badge type="warning" id="phytotelmaVersionSnapshotBadge">Loading Snapshot...</Badge>
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue