Skip to content

Commit

Permalink
feat: support Fabric
Browse files Browse the repository at this point in the history
  • Loading branch information
jebibot committed Nov 24, 2023
1 parent 7e95771 commit 2d9a860
Show file tree
Hide file tree
Showing 4 changed files with 21 additions and 14 deletions.
23 changes: 15 additions & 8 deletions app/assets/js/processbuilder.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class ProcessBuilder {
this.libPath = path.join(this.commonDir, 'libraries')

this.usingLiteLoader = false
this.usingFabricLoader = false
this.llPath = null
}

Expand All @@ -40,9 +41,12 @@ class ProcessBuilder {
process.throwDeprecation = true
this.setupLiteLoader()
logger.info('Using liteloader:', this.usingLiteLoader)
this.usingFabricLoader = this.server.modules.some(mdl => mdl.rawModule.type === Type.Fabric)
logger.info('Using fabric loader:', this.usingFabricLoader)
const modObj = this.resolveModConfiguration(ConfigManager.getModConfiguration(this.server.rawServer.id).mods, this.server.modules)

// Mod list below 1.13
// Fabric only supports 1.14+
if(!mcVersionAtLeast('1.13', this.server.rawServer.minecraftVersion)){
this.constructJSONModList('forge', modObj.fMods, true)
if(this.usingLiteLoader){
Expand Down Expand Up @@ -166,7 +170,7 @@ class ProcessBuilder {

for(let mdl of mdls){
const type = mdl.rawModule.type
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader){
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader || type === Type.FabricMod){
const o = !mdl.getRequired().value
const e = ProcessBuilder.isModEnabled(modCfg[mdl.getVersionlessMavenIdentifier()], mdl.getRequired())
if(!o || (o && e)){
Expand All @@ -178,7 +182,7 @@ class ProcessBuilder {
continue
}
}
if(type === Type.ForgeMod){
if(type === Type.ForgeMod || type === Type.FabricMod){
fMods.push(mdl)
} else {
lMods.push(mdl)
Expand Down Expand Up @@ -282,18 +286,21 @@ class ProcessBuilder {
// }

/**
* Construct the mod argument list for forge 1.13
* Construct the mod argument list for forge 1.13 and Fabric
*
* @param {Array.<Object>} mods An array of mods to add to the mod list.
*/
constructModList(mods) {
const writeBuffer = mods.map(mod => {
return mod.getExtensionlessMavenIdentifier()
return this.usingFabricLoader ? mod.getPath() : mod.getExtensionlessMavenIdentifier()
}).join('\n')

if(writeBuffer) {
fs.writeFileSync(this.forgeModListFile, writeBuffer, 'UTF-8')
return [
return this.usingFabricLoader ? [
'--fabric.addMods',
`@${this.forgeModListFile}`
] : [
'--fml.mavenRoots',
path.join('..', '..', 'common', 'modstore'),
'--fml.modLists',
Expand Down Expand Up @@ -664,7 +671,7 @@ class ProcessBuilder {
classpathArg(mods, tempNativePath){
let cpArgs = []

if(!mcVersionAtLeast('1.17', this.server.rawServer.minecraftVersion)) {
if(!mcVersionAtLeast('1.17', this.server.rawServer.minecraftVersion) || this.usingFabricLoader) {
// Add the version.jar to the classpath.
// Must not be added to the classpath for Forge 1.17+.
const version = this.versionData.id
Expand Down Expand Up @@ -825,10 +832,10 @@ class ProcessBuilder {
const mdls = this.server.modules
let libs = {}

// Locate Forge/Libraries
// Locate Forge/Fabric/Libraries
for(let mdl of mdls){
const type = mdl.rawModule.type
if(type === Type.ForgeHosted || type === Type.Library){
if(type === Type.ForgeHosted || type === Type.Fabric || type === Type.Library){
libs[mdl.getVersionlessMavenIdentifier()] = mdl.getPath()
if(mdl.subModules.length > 0){
const res = this._resolveModuleLibraries(mdl)
Expand Down
4 changes: 2 additions & 2 deletions app/assets/js/scripts/landing.js
Original file line number Diff line number Diff line change
Expand Up @@ -548,13 +548,13 @@ async function dlAsync(login = true) {
serv.rawServer.id
)

const forgeData = await distributionIndexProcessor.loadForgeVersionJson(serv)
const modLoaderData = await distributionIndexProcessor.loadModLoaderVersionJson(serv)
const versionData = await mojangIndexProcessor.getVersionJson()

if(login) {
const authUser = ConfigManager.getSelectedAccount()
loggerLaunchSuite.info(`Sending selected account (${authUser.displayName}) to ProcessBuilder.`)
let pb = new ProcessBuilder(serv, versionData, forgeData, authUser, remote.app.getVersion())
let pb = new ProcessBuilder(serv, versionData, modLoaderData, authUser, remote.app.getVersion())
setLaunchDetails(Lang.queryJS('landing.dlAsync.launchingGame'))

// const SERVER_JOINED_REGEX = /\[.+\]: \[CHAT\] [a-zA-Z0-9_]{1,16} joined the game/
Expand Down
2 changes: 1 addition & 1 deletion app/assets/js/scripts/settings.js
Original file line number Diff line number Diff line change
Expand Up @@ -736,7 +736,7 @@ function parseModulesForUI(mdls, submodules, servConf){

for(const mdl of mdls){

if(mdl.rawModule.type === Type.ForgeMod || mdl.rawModule.type === Type.LiteMod || mdl.rawModule.type === Type.LiteLoader){
if(mdl.rawModule.type === Type.ForgeMod || mdl.rawModule.type === Type.LiteMod || mdl.rawModule.type === Type.LiteLoader || mdl.rawModule.type === Type.FabricMod){

if(mdl.getRequired().value){

Expand Down
6 changes: 3 additions & 3 deletions app/assets/js/scripts/uibinder.js
Original file line number Diff line number Diff line change
Expand Up @@ -163,7 +163,7 @@ function syncModConfigurations(data){
for(let mdl of mdls){
const type = mdl.rawModule.type

if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader){
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader || type === Type.FabricMod){
if(!mdl.getRequired().value){
const mdlID = mdl.getVersionlessMavenIdentifier()
if(modsOld[mdlID] == null){
Expand Down Expand Up @@ -198,7 +198,7 @@ function syncModConfigurations(data){

for(let mdl of mdls){
const type = mdl.rawModule.type
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader){
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader || type === Type.FabricMod){
if(!mdl.getRequired().value){
mods[mdl.getVersionlessMavenIdentifier()] = scanOptionalSubModules(mdl.subModules, mdl)
} else {
Expand Down Expand Up @@ -253,7 +253,7 @@ function scanOptionalSubModules(mdls, origin){
for(let mdl of mdls){
const type = mdl.rawModule.type
// Optional types.
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader){
if(type === Type.ForgeMod || type === Type.LiteMod || type === Type.LiteLoader || type === Type.FabricMod){
// It is optional.
if(!mdl.getRequired().value){
mods[mdl.getVersionlessMavenIdentifier()] = scanOptionalSubModules(mdl.subModules, mdl)
Expand Down

0 comments on commit 2d9a860

Please sign in to comment.