blob: 5265f2a47c0718b0c2273d33a2e71cce5e32d570 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
package moe.nea.ledger
import com.google.gson.Gson
import com.google.gson.JsonArray
import com.google.gson.JsonObject
import net.minecraft.client.Minecraft
import net.minecraft.util.ChatComponentText
import java.io.File
import java.text.SimpleDateFormat
import java.time.Instant
import java.util.*
class LedgerLogger {
fun printOut(text: String) {
Minecraft.getMinecraft().ingameGUI?.chatGUI?.printChatMessage(ChatComponentText(text))
}
fun printToChat(entry: LedgerEntry) {
printOut(
"""
§e================= TRANSACTION START
§eTYPE: §a${entry.transactionType}
§eTIMESTAMP: §a${entry.timestamp}
§eTOTAL VALUE: §a${entry.totalTransactionCoins}
§eITEM ID: §a${entry.itemId}
§eITEM AMOUNT: §a${entry.itemAmount}
§e================= TRANSACTION END
""".trimIndent()
)
}
val entries = JsonArray()
fun logEntry(entry: LedgerEntry) {
Ledger.logger.info("Logging entry of type ${entry.transactionType}")
entries.add(entry.intoJson())
commit()
}
fun commit() {
try {
file.writeText(gson.toJson(entries))
} catch (ex: Exception) {
Ledger.logger.error("Could not save file", ex)
}
}
val gson = Gson()
val file: File = run {
val folder = File("money-ledger")
folder.mkdirs()
val date = SimpleDateFormat("yyyy.MM.dd").format(Date())
generateSequence(0) { it + 1 }
.map {
if (it == 0)
folder.resolve("$date.json")
else
folder.resolve("$date-$it.json")
}
.filter { !it.exists() }
.first()
}
}
data class LedgerEntry(
val transactionType: String,
val timestamp: Instant,
val totalTransactionCoins: Double,
val itemId: String? = null,
val itemAmount: Int? = null,
) {
fun intoJson(): JsonObject {
return JsonObject().apply {
addProperty("transactionType", transactionType)
addProperty("timestamp", timestamp.toEpochMilli().toString())
addProperty("totalTransactionValue", totalTransactionCoins)
addProperty("itemId", itemId ?: "")
addProperty("itemAmount", itemAmount ?: 0)
}
}
}
|