* Add output box to the crafting table view * Add remaining crafting patterns to all MC 1.7.10 recipes * Add all crafting patterns to Buildcraft 6.2.6 * Disable mods which don't have patterns yet * Add the Url constants for computing urls from templates * Add the `findItemDisplay` to ModPack (along with tests) and remove all replace all uses of `getPathSlugs` with it
151 lines
4.8 KiB
CoffeeScript
151 lines
4.8 KiB
CoffeeScript
###
|
|
Crafting Guide - mod_pack.coffee
|
|
|
|
Copyright (c) 2014-2015 by Redwood Labs
|
|
All rights reserved.
|
|
###
|
|
|
|
BaseModel = require './base_model'
|
|
{Event} = require '../constants'
|
|
ModVersionParser = require './mod_version_parser'
|
|
{RequiredMods} = require '../constants'
|
|
{Url} = require '../constants'
|
|
|
|
########################################################################################################################
|
|
|
|
module.exports = class ModPack extends BaseModel
|
|
|
|
constructor: (attributes={}, options={})->
|
|
attributes.modVersions ?= []
|
|
super attributes, options
|
|
|
|
@_parser = new ModVersionParser
|
|
|
|
# Public Methods ###############################################################################
|
|
|
|
enableModsForItem: (name)->
|
|
for modVersion in @modVersions
|
|
continue if modVersion.enabled
|
|
if modVersion.hasRecipe name
|
|
modVersion.enabled = true
|
|
|
|
findItem: (itemSlug, options={})->
|
|
options.includeDisabled ?= false
|
|
|
|
for modVersion in @modVersions
|
|
continue unless modVersion.enabled or options.includeDisabled
|
|
item = modVersion.items[itemSlug]
|
|
return item if item?
|
|
|
|
return null
|
|
|
|
findItemByName: (name, options={})->
|
|
options.includeDisabled ?= false
|
|
|
|
for modVersion in @modVersions
|
|
continue unless modVersion.enabled or options.includeDisabled
|
|
item = modVersion.findItemByName name
|
|
return item if item?
|
|
|
|
return null
|
|
|
|
findName: (slug, options={})->
|
|
options.includeDisabled ?= false
|
|
|
|
for modVersion in @modVersions
|
|
continue unless modVersion.enabled or options.includeDisabled
|
|
name = modVersion.findName slug
|
|
return name if name
|
|
|
|
return slug
|
|
|
|
findItemDisplay: (slug)->
|
|
result = {}
|
|
item = @findItem slug, includeDisabled:true
|
|
if item?
|
|
result.modSlug = item.modVersion.slug
|
|
result.itemSlug = item.slug
|
|
result.itemName = item.name
|
|
else
|
|
result.modSlug = _.slugify RequiredMods[0]
|
|
result.itemSlug = slug
|
|
result.itemName = @findName slug, includeDisabled:true
|
|
|
|
result.iconUrl = Url.itemIcon result
|
|
result.itemUrl = Url.item result
|
|
return result
|
|
|
|
gatherRecipeNames: (options={})->
|
|
options.includeDisabled ?= false
|
|
|
|
nameData = {}
|
|
for modVersion in @modVersions
|
|
continue unless modVersion.enabled or options.includeDisabled
|
|
modVersion.gatherRecipeNames nameData
|
|
|
|
result = []
|
|
names = _.keys(nameData).sort()
|
|
for name in names
|
|
result.push nameData[name]
|
|
return result
|
|
|
|
hasRecipe: (name, options={})->
|
|
options.includeDisabled ?= false
|
|
|
|
for modVersion in @modVersions
|
|
continue unless modVersion.enabled or options.includeDisabled
|
|
return true if modVersion.hasRecipe name
|
|
|
|
return false
|
|
|
|
loadModVersion: (url)->
|
|
w.promise (resolve, reject)=>
|
|
@trigger Event.load.started, this, url
|
|
$.ajax
|
|
url: url
|
|
dataType: 'json'
|
|
success: (data, status, xhr)=>
|
|
resolve @onModVersionLoaded(url, data, status, xhr)
|
|
error: (xhr, status, error)=>
|
|
reject @onModVersionLoadFailed(url, error, status, xhr)
|
|
|
|
loadModVersionData: (data)->
|
|
modVersion = @_parser.parse data
|
|
@modVersions.push modVersion
|
|
@modVersions.sort (a, b)-> a.compareTo b
|
|
modVersion.on Event.change, => @trigger Event.change, this
|
|
|
|
return modVersion
|
|
|
|
loadAllModVersions: (urlList)->
|
|
promises = (@loadModVersion(url) for url in urlList)
|
|
return w.settle promises
|
|
|
|
# Event Methods ################################################################################
|
|
|
|
onModVersionLoaded: (url, data, status, xhr)->
|
|
try
|
|
modVersion = @loadModVersionData data
|
|
modVersion.enabled = true
|
|
|
|
logger.info "loaded ModVersion from #{url}: #{modVersion}"
|
|
@trigger Event.load.succeeded, this, modVersion
|
|
@trigger Event.load.finished, this
|
|
@trigger Event.change, this
|
|
|
|
return modVersion
|
|
catch e
|
|
@onModVersionLoadFailed url, e, status, xhr
|
|
|
|
onModVersionLoadFailed: (url, error, status, xhr)->
|
|
message = if error.stack? then error.stack else error
|
|
logger.error "failed to load ModVersion from #{url}: #{message}"
|
|
@trigger Event.load.failed, this, error.message
|
|
@trigger Event.load.finished, this
|
|
return error
|
|
|
|
# Object Overrides #############################################################################
|
|
|
|
toString: ->
|
|
return "ModPack (#{@cid}) {modVersions:#{@modVersions.length} items}"
|