From 845f56196944039a0b81e82dd29888d294f14a16 Mon Sep 17 00:00:00 2001 From: Julius de Jeu Date: Tue, 27 Aug 2019 15:10:01 +0200 Subject: [PATCH] Add Backup, (Broken)Discord integration and some OP items. Fix some small bugs --- VoidAdmin/build.gradle | 7 - VoidBackup/build.gradle | 24 +++ .../nl/voidcorp/backupplugin/VoidBackup.kt | 133 ++++++++++++++ VoidBank/build.gradle | 6 - .../kotlin/nl/voidcorp/bankplugin/VoidBank.kt | 18 +- VoidCord/build.gradle | 15 ++ .../nl/voidcorp/cordplugin/DiscordConfig.kt | 3 + .../kotlin/nl/voidcorp/cordplugin/VoidCord.kt | 112 ++++++++++++ VoidOp/build.gradle | 11 ++ .../nl/voidcorp/opplugin/StageKeeper.kt | 12 ++ .../nl/voidcorp/opplugin/StageKeepers.kt | 8 + .../kotlin/nl/voidcorp/opplugin/VoidOp.kt | 171 ++++++++++++++++++ VoidPlugin/build.gradle | 8 - .../nl/voidcorp/mainplugin/VoidPlugin.kt | 8 +- VoidTeleport/build.gradle | 7 - VoidUtils/build.gradle | 7 - build.gradle | 2 +- settings.gradle | 5 +- 18 files changed, 516 insertions(+), 41 deletions(-) create mode 100644 VoidBackup/build.gradle create mode 100644 VoidBackup/src/main/kotlin/nl/voidcorp/backupplugin/VoidBackup.kt create mode 100644 VoidCord/build.gradle create mode 100644 VoidCord/src/main/kotlin/nl/voidcorp/cordplugin/DiscordConfig.kt create mode 100644 VoidCord/src/main/kotlin/nl/voidcorp/cordplugin/VoidCord.kt create mode 100644 VoidOp/build.gradle create mode 100644 VoidOp/src/main/kotlin/nl/voidcorp/opplugin/StageKeeper.kt create mode 100644 VoidOp/src/main/kotlin/nl/voidcorp/opplugin/StageKeepers.kt create mode 100644 VoidOp/src/main/kotlin/nl/voidcorp/opplugin/VoidOp.kt diff --git a/VoidAdmin/build.gradle b/VoidAdmin/build.gradle index e8541bd..62559ff 100644 --- a/VoidAdmin/build.gradle +++ b/VoidAdmin/build.gradle @@ -1,10 +1,3 @@ -plugins { - id 'java' - id 'org.jetbrains.kotlin.jvm' - id 'com.github.johnrengelman.shadow' - id 'net.minecrell.plugin-yml.bukkit' -} - dependencies { compileOnly project(":VoidPlugin") } diff --git a/VoidBackup/build.gradle b/VoidBackup/build.gradle new file mode 100644 index 0000000..14c2c95 --- /dev/null +++ b/VoidBackup/build.gradle @@ -0,0 +1,24 @@ +dependencies { + compileOnly project(":VoidPlugin") + implementation 'com.github.luben:zstd-jni:1.4.3-1' + implementation 'org.kamranzafar:jtar:2.3' +} + +bukkit { + main = "nl.voidcorp.backupplugin.VoidBackup" + apiVersion = '1.14' + author = 'J00LZ' + depend = ['VoidPlugin'] + commands { + 'force-backup' { + description = "Guess what..." + permission = "backup.force" + } + } + permissions{ + 'backup.force'{ + description = "Allows forcing backups" + setDefault("OP") + } + } +} \ No newline at end of file diff --git a/VoidBackup/src/main/kotlin/nl/voidcorp/backupplugin/VoidBackup.kt b/VoidBackup/src/main/kotlin/nl/voidcorp/backupplugin/VoidBackup.kt new file mode 100644 index 0000000..e90d49c --- /dev/null +++ b/VoidBackup/src/main/kotlin/nl/voidcorp/backupplugin/VoidBackup.kt @@ -0,0 +1,133 @@ +package nl.voidcorp.backupplugin + +import com.github.luben.zstd.ZstdOutputStream +import nl.voidcorp.mainplugin.CommandHandler +import nl.voidcorp.mainplugin.VoidPluginBase +import nl.voidcorp.mainplugin.adapter +import nl.voidcorp.mainplugin.commands.VoidCommand +import nl.voidcorp.mainplugin.messaging.Message +import nl.voidcorp.mainplugin.messaging.MessageType +import nl.voidcorp.mainplugin.moshi +import org.bukkit.Bukkit +import org.bukkit.command.Command +import org.bukkit.command.CommandSender +import org.bukkit.scheduler.BukkitRunnable +import org.joda.time.DateTime +import org.joda.time.format.ISODateTimeFormat +import org.kamranzafar.jtar.TarEntry +import org.kamranzafar.jtar.TarOutputStream +import java.io.File +import java.nio.file.Files +import java.util.* +import kotlin.concurrent.thread +import kotlin.math.ln +import kotlin.math.pow +import kotlin.streams.toList + +class VoidBackup(override val comment: String = "Make Backups!") : VoidPluginBase() { + + private val backupDir = File(server.worldContainer, "backups").apply { + if (!exists()) mkdirs() + } + + private val backupTask = BackupTask(this) + lateinit var conf: Config + + + override fun enable() { + + send("VoidPlugin", MessageType.GET_CONFIG) + send("VoidPlugin", MessageType.POST_CONFIG, moshi.adapter().toJson(conf)) + + backupTask.runTaskTimer(this, 20, conf.timeoutMinutes * 60 * 20) + CommandHandler(this).registerCommand("force-backup", ForceBackupCommand(this)) + + } + + override fun disable() { + backupTask.cancel() + } + + override fun recieve(message: Message) { + if (message.messageType == MessageType.GET_CONFIG) { + conf = moshi.adapter().fromJson(message.content)!! + } + } + + fun backup() { + Bukkit.broadcastMessage("Backing up. Server may lag for a bit...") + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "save-off") + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "save-all") + val done = mutableListOf() + server.worlds.forEach { world -> + val dir = world.worldFolder + + val whereTo = createTempFile("yeet") + val whereToZ = File( + backupDir, + "${world.name}-${DateTime.now().toString(ISODateTimeFormat.basicDateTimeNoMillis())}.tar.zst" + ) + + thread { + val files = Files.walk(dir.toPath()).map { it.toFile() }.filter { !it.isDirectory }.toList() + + val tar = TarOutputStream(whereTo) + tar.use { tarOS -> + for (f in files) { + tarOS.putNextEntry(TarEntry(f, f.path.removePrefix(".${File.separatorChar}"))) + f.inputStream().use { + it.copyTo(tarOS) + } + } + } + val zstOutputStream = ZstdOutputStream(whereToZ.outputStream()) + val inp = whereTo.inputStream() + zstOutputStream.use { zst -> + inp.use { tr -> + tr.copyTo(zst) + } + } + Bukkit.broadcastMessage("World ${world.name} has been saved, it is ${humanReadableByteCount(whereToZ.length())}") + done.add(world.uid) + if (server.worlds.size == done.size) { + Bukkit.getScheduler().runTask(this, EnableSave) + } + } + } + } + + private fun humanReadableByteCount(bytes: Long, si: Boolean = false): String { + val unit = if (si) 1000 else 1024 + if (bytes < unit) return "$bytes B" + val exp = (ln(bytes.toDouble()) / ln(unit.toDouble())).toInt() + val pre = (if (si) "kMGTPE" else "KMGTPE")[exp - 1] + if (si) "" else "i" + return String.format("%.1f %sB", bytes / unit.toDouble().pow(exp.toDouble()), pre) + } + + object EnableSave : Runnable { + override fun run() { + Bukkit.dispatchCommand(Bukkit.getConsoleSender(), "save-on") + } + } + + class BackupTask(private val pl: VoidBackup) : BukkitRunnable() { + override fun run() { + pl.backup() + } + } + + data class Config(val timeoutMinutes: Long = 30) + + class ForceBackupCommand(private val pl: VoidBackup) : VoidCommand() { + override fun onCommand( + sender: CommandSender, + command: Command, + label: String, + args: Array + ): Boolean { + pl.backup() + return true + } + } + +} \ No newline at end of file diff --git a/VoidBank/build.gradle b/VoidBank/build.gradle index 9af8918..4e281fe 100644 --- a/VoidBank/build.gradle +++ b/VoidBank/build.gradle @@ -1,9 +1,3 @@ -plugins { - id 'java' - id 'org.jetbrains.kotlin.jvm' - id 'com.github.johnrengelman.shadow' - id 'net.minecrell.plugin-yml.bukkit' -} dependencies { compileOnly project(":VoidPlugin") diff --git a/VoidBank/src/main/kotlin/nl/voidcorp/bankplugin/VoidBank.kt b/VoidBank/src/main/kotlin/nl/voidcorp/bankplugin/VoidBank.kt index 4c73055..ff93587 100644 --- a/VoidBank/src/main/kotlin/nl/voidcorp/bankplugin/VoidBank.kt +++ b/VoidBank/src/main/kotlin/nl/voidcorp/bankplugin/VoidBank.kt @@ -12,10 +12,20 @@ import nl.voidcorp.mainplugin.messaging.MessageType import nl.voidcorp.mainplugin.moshi import org.bukkit.Bukkit import org.bukkit.Material +import org.bukkit.NamespacedKey +import org.bukkit.attribute.Attribute +import org.bukkit.attribute.AttributeModifier +import org.bukkit.enchantments.Enchantment +import org.bukkit.entity.HumanEntity import org.bukkit.entity.Player +import org.bukkit.event.EventHandler +import org.bukkit.event.Listener +import org.bukkit.event.block.BlockPlaceEvent import org.bukkit.event.inventory.ClickType +import org.bukkit.event.inventory.CraftItemEvent import org.bukkit.event.inventory.InventoryClickEvent -import org.bukkit.inventory.ItemStack +import org.bukkit.event.player.PlayerAttemptPickupItemEvent +import org.bukkit.inventory.* import org.jetbrains.exposed.sql.SchemaUtils import org.jetbrains.exposed.sql.transactions.transaction import java.util.logging.Logger @@ -23,6 +33,8 @@ import kotlin.math.min class VoidBank(override val comment: String = "Sell all the diamonds!") : VoidPluginBase() { private val title = "Exchange" + + override fun enable() { VoidBank.logger = logger @@ -47,8 +59,11 @@ class VoidBank(override val comment: String = "Sell all the diamonds!") : VoidPl for (iconMenu in iconMenus) { server.pluginManager.registerEvents(iconMenu, this) } + } + + override fun recieve(message: Message) { when (message.messageType) { MessageType.GET_CONFIG -> { @@ -182,5 +197,4 @@ class VoidBank(override val comment: String = "Sell all the diamonds!") : VoidPl lateinit var logger: Logger lateinit var config: BankConfig } - } \ No newline at end of file diff --git a/VoidCord/build.gradle b/VoidCord/build.gradle new file mode 100644 index 0000000..f8e1973 --- /dev/null +++ b/VoidCord/build.gradle @@ -0,0 +1,15 @@ +dependencies { + compileOnly project(":VoidPlugin") + implementation('net.dv8tion:JDA:4.0.0_45') { + exclude module: 'opus-java' + exclude group: 'org.jetbrains', module: 'annotations' + } + implementation 'khttp:khttp:1.0.0' + +} +bukkit { + main = "nl.voidcorp.cordplugin.VoidCord" + apiVersion = '1.14' + author = 'J00LZ' + depend = ['VoidPlugin'] +} \ No newline at end of file diff --git a/VoidCord/src/main/kotlin/nl/voidcorp/cordplugin/DiscordConfig.kt b/VoidCord/src/main/kotlin/nl/voidcorp/cordplugin/DiscordConfig.kt new file mode 100644 index 0000000..a04dcad --- /dev/null +++ b/VoidCord/src/main/kotlin/nl/voidcorp/cordplugin/DiscordConfig.kt @@ -0,0 +1,3 @@ +package nl.voidcorp.cordplugin + +data class DiscordConfig(val botToken: String = "", val commandString: String = ",", val channels: MutableList = mutableListOf()) \ No newline at end of file diff --git a/VoidCord/src/main/kotlin/nl/voidcorp/cordplugin/VoidCord.kt b/VoidCord/src/main/kotlin/nl/voidcorp/cordplugin/VoidCord.kt new file mode 100644 index 0000000..5dfbb82 --- /dev/null +++ b/VoidCord/src/main/kotlin/nl/voidcorp/cordplugin/VoidCord.kt @@ -0,0 +1,112 @@ +package nl.voidcorp.cordplugin + +import khttp.get +import net.dv8tion.jda.api.JDA +import net.dv8tion.jda.api.JDABuilder +import net.dv8tion.jda.api.events.message.guild.GuildMessageReceivedEvent +import net.dv8tion.jda.api.hooks.ListenerAdapter +import nl.voidcorp.mainplugin.VoidPluginBase +import nl.voidcorp.mainplugin.adapter +import nl.voidcorp.mainplugin.messaging.Message +import nl.voidcorp.mainplugin.messaging.MessageType +import nl.voidcorp.mainplugin.moshi +import org.bukkit.Bukkit +import org.bukkit.ChatColor +import org.bukkit.event.EventHandler +import org.bukkit.event.EventPriority +import org.bukkit.event.Listener +import org.bukkit.event.player.AsyncPlayerChatEvent +import org.bukkit.event.player.PlayerJoinEvent +import org.bukkit.event.player.PlayerQuitEvent + +class VoidCord(override val comment: String = "Chat with Discord!") : VoidPluginBase() { + lateinit var conf: DiscordConfig + lateinit var jda: JDA + + override fun enable() { + send("VoidPlugin", MessageType.GET_CONFIG) + send("VoidPlugin", MessageType.POST_CONFIG, moshi.adapter().toJson(conf)) + if (conf.botToken.isBlank()) { + logger.warning("Please add a bot token to the config, I can't send messages to discord without...") + this.disable() + return + } + + + jda = JDABuilder(conf.botToken).addEventListeners(EventManager(conf)).build() + server.pluginManager.registerEvents(ChatMapper(jda, conf), this) + } + + class ChatMapper(val jda: JDA, val conf: DiscordConfig) : Listener { + @EventHandler(priority = EventPriority.MONITOR) + fun onChat(evt: AsyncPlayerChatEvent) { + val msg = evt.message + if (msg.startsWith("/")) { + return + } else { + val channels = conf.channels.map { jda.getTextChannelById(it) }.filterNotNull() + channels.forEach { + it.sendMessage("(Minecraft) ${evt.player.displayName}: $msg").queue() + } + } + } + + @EventHandler(priority = EventPriority.MONITOR) + fun onJoin(evt: PlayerJoinEvent) { + val msg = "${evt.player.displayName} Joined!" + val channels = conf.channels.map { jda.getTextChannelById(it) }.filterNotNull() + channels.forEach { + it.sendMessage("(Minecraft) $msg").queue() + } + } + + @EventHandler(priority = EventPriority.MONITOR) + fun onLeave(evt: PlayerQuitEvent) { + val msg = "${evt.player.displayName} Left!" + val channels = conf.channels.map { jda.getTextChannelById(it) }.filterNotNull() + channels.forEach { + it.sendMessage("(Minecraft) $msg").queue() + } + } + } + + override fun disable() { + jda.shutdown() + } + + override fun recieve(message: Message) { + when (message.messageType) { + MessageType.GET_CONFIG -> { + conf = moshi.adapter().fromJson(message.content)!! + } + else -> Unit + } + } + + class EventManager(private val config: DiscordConfig) : ListenerAdapter() { + private val italics = "(_.*_)|(\\*.*\\*)".toRegex() + private val bold = "(\\*\\*.*\\*\\*)".toRegex() + private val underline = "(__.*__)".toRegex() + private val strikethrough = "(~~.*~~)".toRegex() + override fun onGuildMessageReceived(event: GuildMessageReceivedEvent) { + if (event.author.idLong == event.jda.selfUser.idLong) return + if (event.channel.idLong in config.channels) { + val disc = event.message.contentDisplay + .replace(strikethrough) { + ChatColor.STRIKETHROUGH.toString() + it.groupValues[0].removeSurrounding("~~") + ChatColor.RESET.toString() + } + .replace(underline) { + ChatColor.UNDERLINE.toString() + it.groupValues[0].removeSurrounding("__") + ChatColor.RESET.toString() + } + .replace(bold) { + ChatColor.BOLD.toString() + it.groupValues[0].removeSurrounding("**") + ChatColor.RESET.toString() + } + .replace(italics) { + ChatColor.ITALIC.toString() + it.groupValues[0].removeSurrounding("_").removeSurrounding("*") + ChatColor.RESET.toString() + } + Bukkit.broadcastMessage("<${ChatColor.BLUE}${event.member!!.effectiveName}${ChatColor.RESET}>: $disc") + } + } + + } +} \ No newline at end of file diff --git a/VoidOp/build.gradle b/VoidOp/build.gradle new file mode 100644 index 0000000..7ab718b --- /dev/null +++ b/VoidOp/build.gradle @@ -0,0 +1,11 @@ + +dependencies { + compileOnly project(":VoidPlugin") +} +bukkit { + main = "nl.voidcorp.opplugin.VoidOP" + apiVersion = '1.14' + author = 'J00LZ' + depend = ['VoidPlugin'] + +} \ No newline at end of file diff --git a/VoidOp/src/main/kotlin/nl/voidcorp/opplugin/StageKeeper.kt b/VoidOp/src/main/kotlin/nl/voidcorp/opplugin/StageKeeper.kt new file mode 100644 index 0000000..79366d1 --- /dev/null +++ b/VoidOp/src/main/kotlin/nl/voidcorp/opplugin/StageKeeper.kt @@ -0,0 +1,12 @@ +package nl.voidcorp.opplugin + +import org.jetbrains.exposed.dao.EntityID +import org.jetbrains.exposed.dao.IntEntity +import org.jetbrains.exposed.dao.IntEntityClass + +class StageKeeper(id: EntityID) : IntEntity(id) { + companion object : IntEntityClass(StageKeepers) + + var stage by StageKeepers.stage + var player by StageKeepers.player +} \ No newline at end of file diff --git a/VoidOp/src/main/kotlin/nl/voidcorp/opplugin/StageKeepers.kt b/VoidOp/src/main/kotlin/nl/voidcorp/opplugin/StageKeepers.kt new file mode 100644 index 0000000..8aefb97 --- /dev/null +++ b/VoidOp/src/main/kotlin/nl/voidcorp/opplugin/StageKeepers.kt @@ -0,0 +1,8 @@ +package nl.voidcorp.opplugin + +import org.jetbrains.exposed.dao.IntIdTable + +object StageKeepers : IntIdTable() { + val stage = enumeration("stage", VoidOp.Stage::class) + val player = uuid("player") +} \ No newline at end of file diff --git a/VoidOp/src/main/kotlin/nl/voidcorp/opplugin/VoidOp.kt b/VoidOp/src/main/kotlin/nl/voidcorp/opplugin/VoidOp.kt new file mode 100644 index 0000000..863efa5 --- /dev/null +++ b/VoidOp/src/main/kotlin/nl/voidcorp/opplugin/VoidOp.kt @@ -0,0 +1,171 @@ +package nl.voidcorp.opplugin + +import com.destroystokyo.paper.event.block.BeaconEffectEvent +import nl.voidcorp.mainplugin.VoidPluginBase +import org.bukkit.Bukkit +import org.bukkit.Material +import org.bukkit.NamespacedKey +import org.bukkit.attribute.Attribute +import org.bukkit.attribute.AttributeModifier +import org.bukkit.block.Beacon +import org.bukkit.enchantments.Enchantment +import org.bukkit.entity.Player +import org.bukkit.event.EventHandler +import org.bukkit.event.Listener +import org.bukkit.event.block.BlockPlaceEvent +import org.bukkit.event.inventory.CraftItemEvent +import org.bukkit.event.player.PlayerAttemptPickupItemEvent +import org.bukkit.event.player.PlayerInteractEvent +import org.bukkit.inventory.* +import org.jetbrains.exposed.sql.SchemaUtils +import org.jetbrains.exposed.sql.transactions.transaction + +class VoidOp(override val comment: String = "Make everyone very op...") : VoidPluginBase() { + + val maxistar = ItemStack(Material.NETHER_STAR).apply { + amount = 1 + addUnsafeEnchantment(Enchantment.ARROW_INFINITE, 1) + val meta = itemMeta + meta.setDisplayName("MaxiStar") + meta.addItemFlags(ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_ENCHANTS, ItemFlag.HIDE_UNBREAKABLE) + itemMeta = meta + } + + val brokenBeacon = ItemStack(Material.COAL_BLOCK).apply { + val meta = itemMeta + meta.setDisplayName("Broken Beacon") + meta.addItemFlags(ItemFlag.HIDE_ENCHANTS, ItemFlag.HIDE_ATTRIBUTES, ItemFlag.HIDE_UNBREAKABLE) + meta.addEnchant(Enchantment.ARROW_INFINITE, 100, true) + meta.lore = mutableListOf("Hmm...", "Maybe you should not have put it in the Blast Furnace...") + itemMeta = meta + } + + val metaGem = ItemStack(Material.EMERALD).apply { + val meta = itemMeta + meta.setDisplayName("MetaGem") + meta.addAttributeModifier( + Attribute.GENERIC_ATTACK_DAMAGE, + AttributeModifier("Damage++", 100.0, AttributeModifier.Operation.ADD_NUMBER) + ) + } + + override fun enable() { + val recipe = ShapedRecipe(NamespacedKey(this, "maxi_recipe"), maxistar).shape("nnn", "nnn", "nnn") + .setIngredient('n', Material.NETHER_STAR) + + Bukkit.addRecipe(recipe) + val brokenBeaconRecipe = + BlastingRecipe(NamespacedKey(this, "beacon_recipe"), brokenBeacon, Material.BEACON, 1.0f, 1000) + Bukkit.addRecipe(brokenBeaconRecipe) + server.pluginManager.registerEvents(ListenStuff(this), this) + + transaction { + SchemaUtils.createMissingTablesAndColumns(StageKeepers) + } + + } + + + override fun disable() { + val iter = Bukkit.recipeIterator() + while (iter.hasNext()) { + val it = iter.next() + + if (it.result in listOf(maxistar, brokenBeacon, metaGem)) { + iter.remove() + } + } + } + + class ListenStuff(private val bank: VoidOp) : Listener { + @EventHandler + fun blockPlace(evt: BlockPlaceEvent) { + if (evt.itemInHand in mutableListOf(bank.maxistar, bank.metaGem, bank.brokenBeacon)) { + evt.isCancelled = true + } + } + + @EventHandler + fun itemPickup(evt: PlayerAttemptPickupItemEvent) { + setStage(evt.player, evt.item.itemStack) + } + + @EventHandler + fun craftItem(evt: CraftItemEvent) { + if (evt.whoClicked is Player) + setStage(evt.whoClicked as Player, evt.recipe.result) + } + + @EventHandler + fun blockOpen(evt: PlayerInteractEvent) { + if (evt.hasBlock()) { + val bl = evt.clickedBlock!! + if (bl is Beacon) { + if (bl.tier == 4) + } + } + } + + private fun setStage(player: Player, itemStack: ItemStack) { + transaction { + val stageKeeper = + StageKeeper.find { StageKeepers.player eq player.uniqueId }.firstOrNull() ?: StageKeeper.new { + this.player = player.uniqueId + this.stage = Stage.PRE + } + var stageChanged = false + + when (stageKeeper.stage) { + Stage.PRE -> { + val adv = Bukkit.getAdvancement(NamespacedKey.minecraft("nether/summon_wither"))!! + val a = player.getAdvancementProgress(adv) + if (a.isDone && itemStack.type == Material.NETHER_STAR) { + stageKeeper.stage = Stage.WITHER + stageChanged = true + } + } + Stage.WITHER -> TODO() + Stage.BEACON -> TODO() + Stage.MAXI -> TODO() + Stage.BROKEN -> TODO() + Stage.GOD -> TODO() + } + if (stageChanged) { + when (stageKeeper.stage) { + Stage.PRE -> TODO() + Stage.WITHER -> TODO() + Stage.BEACON -> TODO() + Stage.MAXI -> TODO() + Stage.BROKEN -> TODO() + Stage.GOD -> TODO() + } + } + + } + } + } + + class ItemStackChoice(private val itemStack1: ItemStack) : RecipeChoice { + override fun getItemStack(): ItemStack { + return itemStack1 + } + + override fun clone(): RecipeChoice { + return ItemStackChoice(itemStack1) + } + + override fun test(itemStack: ItemStack): Boolean { + return itemStack == itemStack1 + } + } + + enum class Stage { + PRE, + WITHER, + BEACON, + MAXI, + BROKEN, + GOD + } + +} \ No newline at end of file diff --git a/VoidPlugin/build.gradle b/VoidPlugin/build.gradle index eb0861b..409859c 100644 --- a/VoidPlugin/build.gradle +++ b/VoidPlugin/build.gradle @@ -1,11 +1,3 @@ -plugins { - id 'java' - id 'org.jetbrains.kotlin.jvm' - id 'com.github.johnrengelman.shadow' - id 'net.minecrell.plugin-yml.bukkit' -} - - dependencies { api "org.jetbrains.kotlin:kotlin-stdlib-jdk8" api 'org.jetbrains.exposed:exposed:0.17.1' diff --git a/VoidPlugin/src/main/kotlin/nl/voidcorp/mainplugin/VoidPlugin.kt b/VoidPlugin/src/main/kotlin/nl/voidcorp/mainplugin/VoidPlugin.kt index af5c70c..6bfc2e6 100644 --- a/VoidPlugin/src/main/kotlin/nl/voidcorp/mainplugin/VoidPlugin.kt +++ b/VoidPlugin/src/main/kotlin/nl/voidcorp/mainplugin/VoidPlugin.kt @@ -2,9 +2,8 @@ package nl.voidcorp.mainplugin import nl.voidcorp.mainplugin.messaging.Message import nl.voidcorp.mainplugin.messaging.MessageType +import okio.Okio import org.jetbrains.exposed.sql.Database -import org.jetbrains.exposed.sql.SchemaUtils -import org.jetbrains.exposed.sql.transactions.transaction import java.io.File class VoidPlugin( @@ -22,6 +21,7 @@ class VoidPlugin( conf.databaseUrl, driver = conf.driver ) + } override fun disable() { @@ -49,6 +49,10 @@ class VoidPlugin( logger.info(config.path) if (!config.exists()) { config.createNewFile() + config.bufferedWriter().apply { + write("{}") + close() + } return "{}" } return config.readText() diff --git a/VoidTeleport/build.gradle b/VoidTeleport/build.gradle index 91e5b82..a62b01e 100644 --- a/VoidTeleport/build.gradle +++ b/VoidTeleport/build.gradle @@ -1,10 +1,3 @@ -plugins { - id 'java' - id 'org.jetbrains.kotlin.jvm' - id 'com.github.johnrengelman.shadow' - id 'net.minecrell.plugin-yml.bukkit' -} - dependencies { compileOnly project(":VoidPlugin") } diff --git a/VoidUtils/build.gradle b/VoidUtils/build.gradle index 0f8d3f8..9ddbb92 100644 --- a/VoidUtils/build.gradle +++ b/VoidUtils/build.gradle @@ -1,10 +1,3 @@ -plugins { - id 'java' - id 'org.jetbrains.kotlin.jvm' - id 'com.github.johnrengelman.shadow' - id 'net.minecrell.plugin-yml.bukkit' -} - dependencies { compileOnly project(":VoidPlugin") } diff --git a/build.gradle b/build.gradle index 8e32ff8..6f98527 100644 --- a/build.gradle +++ b/build.gradle @@ -1,5 +1,5 @@ plugins { - id 'org.jetbrains.kotlin.jvm' version '1.3.41' apply false + id 'org.jetbrains.kotlin.jvm' version '1.3.50' apply false id 'com.github.johnrengelman.shadow' version '5.1.0' apply false id 'net.minecrell.plugin-yml.bukkit' version '0.3.0' apply false } diff --git a/settings.gradle b/settings.gradle index c38ee22..495f26b 100644 --- a/settings.gradle +++ b/settings.gradle @@ -4,4 +4,7 @@ include 'VoidTeleport' include 'VoidPlugin' include 'VoidAdmin' include 'VoidUtils' -include 'VoidBank' \ No newline at end of file +include 'VoidBank' +include 'VoidCord' +include 'VoidBackup' +include 'VoidOp' \ No newline at end of file