mirror of
				https://github.com/GayPizzaSpecifications/foundation.git
				synced 2025-11-04 03:39:37 +00:00 
			
		
		
		
	Cleanup heimdall code.
This commit is contained in:
		@ -1,14 +1,14 @@
 | 
				
			|||||||
package gay.pizza.foundation.heimdall.plugin
 | 
					package gay.pizza.foundation.heimdall.plugin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import gay.pizza.foundation.heimdall.plugin.buffer.BufferFlushThread
 | 
					 | 
				
			||||||
import gay.pizza.foundation.heimdall.plugin.buffer.EventBuffer
 | 
					 | 
				
			||||||
import gay.pizza.foundation.heimdall.plugin.event.*
 | 
					 | 
				
			||||||
import gay.pizza.foundation.heimdall.plugin.model.HeimdallConfig
 | 
					 | 
				
			||||||
import gay.pizza.foundation.heimdall.plugin.export.ExportChunksCommand
 | 
					 | 
				
			||||||
import com.charleskorn.kaml.Yaml
 | 
					import com.charleskorn.kaml.Yaml
 | 
				
			||||||
import com.zaxxer.hikari.HikariConfig
 | 
					import com.zaxxer.hikari.HikariConfig
 | 
				
			||||||
import com.zaxxer.hikari.HikariDataSource
 | 
					import com.zaxxer.hikari.HikariDataSource
 | 
				
			||||||
import gay.pizza.foundation.core.Util
 | 
					import gay.pizza.foundation.core.Util
 | 
				
			||||||
 | 
					import gay.pizza.foundation.heimdall.plugin.buffer.BufferFlushThread
 | 
				
			||||||
 | 
					import gay.pizza.foundation.heimdall.plugin.buffer.EventBuffer
 | 
				
			||||||
 | 
					import gay.pizza.foundation.heimdall.plugin.event.*
 | 
				
			||||||
 | 
					import gay.pizza.foundation.heimdall.plugin.export.ExportAllChunksCommand
 | 
				
			||||||
 | 
					import gay.pizza.foundation.heimdall.plugin.model.HeimdallConfig
 | 
				
			||||||
import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
 | 
					import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer
 | 
				
			||||||
import org.bukkit.event.EventHandler
 | 
					import org.bukkit.event.EventHandler
 | 
				
			||||||
import org.bukkit.event.Listener
 | 
					import org.bukkit.event.Listener
 | 
				
			||||||
@ -20,8 +20,6 @@ import org.bukkit.event.player.*
 | 
				
			|||||||
import org.bukkit.plugin.java.JavaPlugin
 | 
					import org.bukkit.plugin.java.JavaPlugin
 | 
				
			||||||
import org.jetbrains.exposed.sql.Database
 | 
					import org.jetbrains.exposed.sql.Database
 | 
				
			||||||
import org.postgresql.Driver
 | 
					import org.postgresql.Driver
 | 
				
			||||||
import org.slf4j.Logger
 | 
					 | 
				
			||||||
import java.nio.file.Path
 | 
					 | 
				
			||||||
import java.time.Duration
 | 
					import java.time.Duration
 | 
				
			||||||
import java.time.Instant
 | 
					import java.time.Instant
 | 
				
			||||||
import java.util.*
 | 
					import java.util.*
 | 
				
			||||||
@ -42,7 +40,7 @@ class HeimdallPlugin : JavaPlugin(), Listener {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  override fun onEnable() {
 | 
					  override fun onEnable() {
 | 
				
			||||||
    val exportChunksCommand = getCommand("export_all_chunks") ?: throw Exception("Failed to get export_all_chunks command")
 | 
					    val exportChunksCommand = getCommand("export_all_chunks") ?: throw Exception("Failed to get export_all_chunks command")
 | 
				
			||||||
    exportChunksCommand.setExecutor(ExportChunksCommand(this))
 | 
					    exportChunksCommand.setExecutor(ExportAllChunksCommand(this))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    val pluginDataPath = dataFolder.toPath()
 | 
					    val pluginDataPath = dataFolder.toPath()
 | 
				
			||||||
    pluginDataPath.toFile().mkdir()
 | 
					    pluginDataPath.toFile().mkdir()
 | 
				
			||||||
@ -73,7 +71,7 @@ class HeimdallPlugin : JavaPlugin(), Listener {
 | 
				
			|||||||
      "/init.sql"
 | 
					      "/init.sql"
 | 
				
			||||||
    )?.readAllBytes()?.decodeToString() ?: throw RuntimeException("Unable to find Heimdall init.sql")
 | 
					    )?.readAllBytes()?.decodeToString() ?: throw RuntimeException("Unable to find Heimdall init.sql")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    val statements = initMigrationContent.sqlSplitStatements()
 | 
					    val statements = sqlSplitStatements(initMigrationContent)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    pool.connection.use { conn ->
 | 
					    pool.connection.use { conn ->
 | 
				
			||||||
      conn.autoCommit = false
 | 
					      conn.autoCommit = false
 | 
				
			||||||
 | 
				
			|||||||
@ -12,27 +12,27 @@ import org.bukkit.plugin.Plugin
 | 
				
			|||||||
import java.io.File
 | 
					import java.io.File
 | 
				
			||||||
import java.util.zip.GZIPOutputStream
 | 
					import java.util.zip.GZIPOutputStream
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ChunkExporter(private val plugin: Plugin, val world: World) {
 | 
					class ChunkExporter(private val plugin: Plugin) {
 | 
				
			||||||
  private val json = Json {
 | 
					  private val json = Json {
 | 
				
			||||||
    ignoreUnknownKeys = true
 | 
					    ignoreUnknownKeys = true
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  fun exportLoadedChunksAsync() {
 | 
					  fun exportLoadedChunksAsync(world: World) {
 | 
				
			||||||
    exportChunkListAsync(world.loadedChunks.toList())
 | 
					    exportChunkListAsync(world, world.loadedChunks.toList())
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private fun exportChunkListAsync(chunks: List<Chunk>) {
 | 
					  private fun exportChunkListAsync(world: World, chunks: List<Chunk>) {
 | 
				
			||||||
    plugin.slF4JLogger.info("Exporting ${chunks.size} Chunks")
 | 
					    plugin.slF4JLogger.info("Exporting ${chunks.size} chunks")
 | 
				
			||||||
    val snapshots = chunks.map { it.chunkSnapshot }
 | 
					    val snapshots = chunks.map { it.chunkSnapshot }
 | 
				
			||||||
    Thread {
 | 
					    Thread {
 | 
				
			||||||
      for (snapshot in snapshots) {
 | 
					      for (snapshot in snapshots) {
 | 
				
			||||||
        exportChunkSnapshot(snapshot)
 | 
					        exportChunkSnapshot(world, snapshot)
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
      plugin.slF4JLogger.info("Exported ${chunks.size} Chunks")
 | 
					      plugin.slF4JLogger.info("Exported ${chunks.size} chunks for world ${world.name}")
 | 
				
			||||||
    }.start()
 | 
					    }.start()
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private fun exportChunkSnapshot(snapshot: ChunkSnapshot) {
 | 
					  private fun exportChunkSnapshot(world: World, snapshot: ChunkSnapshot) {
 | 
				
			||||||
    val blocks = mutableMapOf<String, Pair<Int, ExportedBlock>>()
 | 
					    val blocks = mutableMapOf<String, Pair<Int, ExportedBlock>>()
 | 
				
			||||||
    val blockList = mutableListOf<ExportedBlock>()
 | 
					    val blockList = mutableListOf<ExportedBlock>()
 | 
				
			||||||
    val sections = mutableListOf<ExportedChunkSection>()
 | 
					    val sections = mutableListOf<ExportedChunkSection>()
 | 
				
			||||||
@ -60,7 +60,14 @@ class ChunkExporter(private val plugin: Plugin, val world: World) {
 | 
				
			|||||||
    gzipOutputStream.close()
 | 
					    gzipOutputStream.close()
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  private fun exportChunkSection(blocks: MutableMap<String, Pair<Int, ExportedBlock>>, blockList: MutableList<ExportedBlock>, snapshot: ChunkSnapshot, yRange: IntRange, x: Int, z: Int): ExportedChunkSection {
 | 
					  private fun exportChunkSection(
 | 
				
			||||||
 | 
					    blocks: MutableMap<String, Pair<Int, ExportedBlock>>,
 | 
				
			||||||
 | 
					    blockList: MutableList<ExportedBlock>,
 | 
				
			||||||
 | 
					    snapshot: ChunkSnapshot,
 | 
				
			||||||
 | 
					    yRange: IntRange,
 | 
				
			||||||
 | 
					    x: Int,
 | 
				
			||||||
 | 
					    z: Int
 | 
				
			||||||
 | 
					  ): ExportedChunkSection {
 | 
				
			||||||
    val contents = mutableListOf<Int>()
 | 
					    val contents = mutableListOf<Int>()
 | 
				
			||||||
    for (y in yRange) {
 | 
					    for (y in yRange) {
 | 
				
			||||||
      val blockData = snapshot.getBlockData(x, y, z)
 | 
					      val blockData = snapshot.getBlockData(x, y, z)
 | 
				
			||||||
 | 
				
			|||||||
@ -0,0 +1,23 @@
 | 
				
			|||||||
 | 
					package gay.pizza.foundation.heimdall.plugin.export
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import org.bukkit.command.Command
 | 
				
			||||||
 | 
					import org.bukkit.command.CommandExecutor
 | 
				
			||||||
 | 
					import org.bukkit.command.CommandSender
 | 
				
			||||||
 | 
					import org.bukkit.plugin.Plugin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ExportAllChunksCommand(private val plugin: Plugin) : CommandExecutor {
 | 
				
			||||||
 | 
					  override fun onCommand(
 | 
				
			||||||
 | 
					    sender: CommandSender,
 | 
				
			||||||
 | 
					    command: Command,
 | 
				
			||||||
 | 
					    label: String,
 | 
				
			||||||
 | 
					    args: Array<out String>
 | 
				
			||||||
 | 
					  ): Boolean {
 | 
				
			||||||
 | 
					    sender.sendMessage("Exporting all chunks...")
 | 
				
			||||||
 | 
					    plugin.slF4JLogger.info("Exporting all chunks")
 | 
				
			||||||
 | 
					    val export = ChunkExporter(plugin)
 | 
				
			||||||
 | 
					    for (world in sender.server.worlds) {
 | 
				
			||||||
 | 
					      export.exportLoadedChunksAsync(world)
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    return true
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,17 +0,0 @@
 | 
				
			|||||||
package gay.pizza.foundation.heimdall.plugin.export
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import org.bukkit.command.Command
 | 
					 | 
				
			||||||
import org.bukkit.command.CommandExecutor
 | 
					 | 
				
			||||||
import org.bukkit.command.CommandSender
 | 
					 | 
				
			||||||
import org.bukkit.plugin.Plugin
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class ExportChunksCommand(private val plugin: Plugin) : CommandExecutor {
 | 
					 | 
				
			||||||
  override fun onCommand(sender: CommandSender, command: Command, label: String, args: Array<out String>): Boolean {
 | 
					 | 
				
			||||||
    plugin.slF4JLogger.info("Exporting All Chunks")
 | 
					 | 
				
			||||||
    for (world in sender.server.worlds) {
 | 
					 | 
				
			||||||
      val export = ChunkExporter(plugin, world)
 | 
					 | 
				
			||||||
      export.exportLoadedChunksAsync()
 | 
					 | 
				
			||||||
    }
 | 
					 | 
				
			||||||
    return true
 | 
					 | 
				
			||||||
  }
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,6 +1,6 @@
 | 
				
			|||||||
package gay.pizza.foundation.heimdall.plugin
 | 
					package gay.pizza.foundation.heimdall.plugin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fun String.sqlSplitStatements(): List<String> {
 | 
					fun sqlSplitStatements(input: String): List<String> {
 | 
				
			||||||
  val statements = mutableListOf<String>()
 | 
					  val statements = mutableListOf<String>()
 | 
				
			||||||
  val buffer = StringBuilder()
 | 
					  val buffer = StringBuilder()
 | 
				
			||||||
  fun flush() {
 | 
					  fun flush() {
 | 
				
			||||||
@ -9,7 +9,7 @@ fun String.sqlSplitStatements(): List<String> {
 | 
				
			|||||||
      statements.add(trimmed)
 | 
					      statements.add(trimmed)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
  for (line in lines()) {
 | 
					  for (line in input.lines()) {
 | 
				
			||||||
    if (line.trim() == "--") {
 | 
					    if (line.trim() == "--") {
 | 
				
			||||||
      flush()
 | 
					      flush()
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
		Reference in New Issue
	
	Block a user