mirror of
https://gitlab.com/2009scape/tools/rs09-thanos-tool.git
synced 2026-08-01 14:39:20 -06:00
Merge branch 'sort' into 'master'
Draft: More thorough sorting See merge request 2009scape/tools/rs09-thanos-tool!13
This commit is contained in:
commit
162f8111a7
2 changed files with 46 additions and 64 deletions
|
|
@ -4,7 +4,7 @@ import javax.swing.*
|
|||
import java.awt.event.*
|
||||
|
||||
object EditorConstants {
|
||||
var BUILD_NUMBER = "2.0.1"
|
||||
var BUILD_NUMBER = "2.1"
|
||||
|
||||
var DARK_MODE = true
|
||||
|
||||
|
|
|
|||
|
|
@ -62,13 +62,7 @@ enum class Editors(val data: EditorData) {
|
|||
t.put("description",table.description)
|
||||
dtables.add(t)
|
||||
}
|
||||
|
||||
|
||||
val manager = ScriptEngineManager()
|
||||
val scriptEngine = manager.getEngineByName("JavaScript")
|
||||
scriptEngine.put("jsonString", dtables.toJSONString())
|
||||
scriptEngine.eval("result = JSON.stringify(JSON.parse(jsonString), null, 2)")
|
||||
val prettyPrintedJson = scriptEngine["result"] as String
|
||||
val prettyPrintedJson = generateJSON(dtables)
|
||||
|
||||
try {
|
||||
FileWriter(EditorConstants.CONFIG_PATH + File.separator + fileName).use { file ->
|
||||
|
|
@ -108,7 +102,6 @@ enum class Editors(val data: EditorData) {
|
|||
override fun save() {
|
||||
val array = JSONArray()
|
||||
TableData.npcConfigs.forEach { array.add(it) }
|
||||
|
||||
val prettyPrintedJson = generateJSON(array)
|
||||
|
||||
try {
|
||||
|
|
@ -145,7 +138,6 @@ enum class Editors(val data: EditorData) {
|
|||
TableData.itemConfigs.forEach { array.add(it) }
|
||||
val prettyPrintedJson = generateJSON(array)
|
||||
|
||||
|
||||
try {
|
||||
FileWriter(EditorConstants.CONFIG_PATH + File.separator + fileName).use { file ->
|
||||
file.write(prettyPrintedJson)
|
||||
|
|
@ -170,16 +162,7 @@ enum class Editors(val data: EditorData) {
|
|||
override fun save() {
|
||||
val array = JSONArray()
|
||||
TableData.objConfigs.forEach { array.add(it) }
|
||||
val sortedList = array
|
||||
.map { it as JSONObject }
|
||||
.sortedBy { (it["ids"] as String) }
|
||||
val sortedArray = JSONArray()
|
||||
sortedList.forEach { sortedArray.add(it) }
|
||||
val manager = ScriptEngineManager()
|
||||
val scriptEngine = manager.getEngineByName("JavaScript")
|
||||
scriptEngine.put("jsonString", sortedArray.toJSONString())
|
||||
scriptEngine.eval("result = JSON.stringify(JSON.parse(jsonString), null, 2)")
|
||||
val prettyPrintedJson = scriptEngine["result"] as String
|
||||
val prettyPrintedJson = generateJSON(array)
|
||||
|
||||
try {
|
||||
FileWriter(EditorConstants.CONFIG_PATH + File.separator + fileName).use { file ->
|
||||
|
|
@ -238,13 +221,7 @@ enum class Editors(val data: EditorData) {
|
|||
sh.put("force_shared", shop.forceShared.toString())
|
||||
shs.add(sh)
|
||||
}
|
||||
|
||||
|
||||
val manager = ScriptEngineManager()
|
||||
val scriptEngine = manager.getEngineByName("JavaScript")
|
||||
scriptEngine.put("jsonString", shs.toJSONString())
|
||||
scriptEngine.eval("result = JSON.stringify(JSON.parse(jsonString), null, 2)")
|
||||
val prettyPrintedJson = scriptEngine["result"] as String
|
||||
val prettyPrintedJson = generateJSON(shs)
|
||||
|
||||
try {
|
||||
FileWriter(EditorConstants.CONFIG_PATH + File.separator + fileName).use { file ->
|
||||
|
|
@ -300,11 +277,7 @@ enum class Editors(val data: EditorData) {
|
|||
spawn["loc_data"] = spawnString.toString()
|
||||
spawnsJsonArray.add(spawn)
|
||||
}
|
||||
val manager = ScriptEngineManager()
|
||||
val scriptEngine = manager.getEngineByName("JavaScript")
|
||||
scriptEngine.put("jsonString", spawnsJsonArray.toJSONString())
|
||||
scriptEngine.eval("result = JSON.stringify(JSON.parse(jsonString), null, 2)")
|
||||
val prettyPrintedJson = scriptEngine["result"] as String
|
||||
val prettyPrintedJson = generateJSON(spawnsJsonArray)
|
||||
|
||||
try {
|
||||
FileWriter(EditorConstants.CONFIG_PATH + File.separator + fileName).use { file ->
|
||||
|
|
@ -360,11 +333,7 @@ enum class Editors(val data: EditorData) {
|
|||
spawn["loc_data"] = spawnString.toString()
|
||||
spawnsJsonArray.add(spawn)
|
||||
}
|
||||
val manager = ScriptEngineManager()
|
||||
val scriptEngine = manager.getEngineByName("JavaScript")
|
||||
scriptEngine.put("jsonString", spawnsJsonArray.toJSONString())
|
||||
scriptEngine.eval("result = JSON.stringify(JSON.parse(jsonString), null, 2)")
|
||||
val prettyPrintedJson = scriptEngine["result"] as String
|
||||
val prettyPrintedJson = generateJSON(spawnsJsonArray)
|
||||
|
||||
try {
|
||||
FileWriter(EditorConstants.CONFIG_PATH + File.separator + fileName).use { file ->
|
||||
|
|
@ -416,46 +385,59 @@ private fun saveTable(table: WeightBasedTable): JSONArray{
|
|||
}
|
||||
|
||||
/**
|
||||
* Sorts and generates a string from an unsorted JSONArray.
|
||||
* Currently this is only used by NPC_Config or item_config as it assumes each entry has 1 ID.
|
||||
* Sorts an unsorted JSONArray.
|
||||
* Most other tables have some collection of IDs
|
||||
* ID name and examine will be first if present then everything else will be alphabetical
|
||||
* If other things wish to be sorted add them to the when statement
|
||||
* @param array the JSONArray from npc_config or item_config
|
||||
* @param array the JSONArray
|
||||
* @return The string ready to write out
|
||||
*/
|
||||
private fun generateJSON(array: JSONArray): String{
|
||||
val sortedArray = array
|
||||
.map{ it as JSONObject }
|
||||
// Sort IDs
|
||||
.sortedBy { (it["id"] as String).toIntOrNull() ?: Int.MAX_VALUE }
|
||||
.map { itemJSONObj ->
|
||||
val sortedKeys = itemJSONObj.keys
|
||||
private fun sortJSON(value: Any?): Any? =
|
||||
when (value) {
|
||||
is JSONObject -> {
|
||||
val sortedKeys = value.keys
|
||||
.asSequence()
|
||||
.map { it as String}
|
||||
.sortedWith(compareBy<String> { key ->
|
||||
when (key) {
|
||||
"id" -> 0
|
||||
"name" -> 1
|
||||
"examine" -> 2
|
||||
else -> 3
|
||||
}
|
||||
}.thenBy { it })
|
||||
.toList()
|
||||
.map { it as String }
|
||||
.sortedWith(
|
||||
compareBy<String> {
|
||||
when (it) {
|
||||
"id" -> 0
|
||||
"ids" -> 0
|
||||
"npc_id" -> 0
|
||||
"name" -> 1
|
||||
"examine" -> 2
|
||||
else -> 3
|
||||
}
|
||||
}.thenBy { it }
|
||||
)
|
||||
|
||||
val orderedItem = LinkedHashMap<String, Any?>()
|
||||
for (key in sortedKeys){
|
||||
orderedItem[key] = itemJSONObj[key]
|
||||
LinkedHashMap<String, Any?>().apply {
|
||||
for (key in sortedKeys) {
|
||||
this[key] = sortJSON(value[key])
|
||||
}
|
||||
}
|
||||
orderedItem
|
||||
}
|
||||
val sortedJSONArray = JSONArray()
|
||||
sortedArray.forEach { sortedJSONArray.add(it) }
|
||||
|
||||
is JSONArray -> {
|
||||
JSONArray().apply {
|
||||
addAll(value.map { sortJSON(it) })
|
||||
}
|
||||
}
|
||||
|
||||
else -> value
|
||||
}
|
||||
|
||||
/**
|
||||
* Generates a string from an unsorted JSONArray.
|
||||
* @param array the JSONArray
|
||||
* @return The string ready to write out
|
||||
*/
|
||||
private fun generateJSON(array: JSONArray): String {
|
||||
val sortedJSONArray = sortJSON(array) as JSONArray
|
||||
val manager = ScriptEngineManager()
|
||||
val scriptEngine = manager.getEngineByName("JavaScript")
|
||||
scriptEngine.put("jsonString", sortedJSONArray.toJSONString())
|
||||
scriptEngine.eval("result = JSON.stringify(JSON.parse(jsonString), null, 2)")
|
||||
val prettyPrintedJson = scriptEngine["result"] as String
|
||||
return prettyPrintedJson
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue