summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDico <Dico200@users.noreply.github.com>2018-07-30 17:24:32 +0100
committerGitHub <noreply@github.com>2018-07-30 17:24:32 +0100
commit5d5b6550996a5e322ff153c2accee1532fbdde32 (patch)
treece5b62641ae751a4292efda46b473485553a0b85
parent72482a3547ef641e79f9aa3bdec49ada860716c3 (diff)
parent14b67119484985fa64efc910e2e1c583100ea280 (diff)
Merge pull request #1 from Dico200/master
Update with outstanding commits from Dico200/Parcels2
-rw-r--r--build.gradle.kts12
-rw-r--r--src/main/kotlin/io/dico/parcels2/Options.kt2
-rw-r--r--src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt4
-rw-r--r--src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt34
-rw-r--r--src/main/kotlin/io/dico/parcels2/storage/ExposedBacking.kt9
-rw-r--r--src/main/kotlin/io/dico/parcels2/storage/ExposedExtensions.kt27
-rw-r--r--src/main/kotlin/io/dico/parcels2/storage/Hikari.kt9
-rw-r--r--src/main/kotlin/io/dico/parcels2/storage/StorageFactory.kt2
8 files changed, 90 insertions, 9 deletions
diff --git a/build.gradle.kts b/build.gradle.kts
index cd04016..878e17c 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -5,6 +5,7 @@ import org.jetbrains.kotlin.gradle.dsl.Coroutines.ENABLE
import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformJvmPlugin
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import java.io.PrintWriter
+import java.net.URL
val stdout = PrintWriter("gradle-output.txt")
@@ -124,6 +125,17 @@ tasks {
manifest.attributes["Class-Path"] = "../lib/kotlin-stdlib.jar"
dependsOn(kotlinStdlibJar)
}
+
+ val createDebugServer by creating {
+
+ val jarUrl = URL("https://yivesmirror.com/files/spigot/spigot-latest.jar")
+ val serverJarFile = file("$serverDir/lib/spigot.jar")
+
+
+ doFirst {
+
+ }
+ }
}
stdout.flush()
diff --git a/src/main/kotlin/io/dico/parcels2/Options.kt b/src/main/kotlin/io/dico/parcels2/Options.kt
index 90a1594..c349d8b 100644
--- a/src/main/kotlin/io/dico/parcels2/Options.kt
+++ b/src/main/kotlin/io/dico/parcels2/Options.kt
@@ -34,6 +34,8 @@ class Options {
data class WorldOptions(var gameMode: GameMode? = GameMode.CREATIVE,
var dayTime: Boolean = true,
var noWeather: Boolean = true,
+ var preventWeatherBlockChanges: Boolean = true,
+ var preventBlockSpread: Boolean = true, // TODO
var dropEntityItems: Boolean = true,
var doTileDrops: Boolean = false,
var disableExplosions: Boolean = true,
diff --git a/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt b/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt
index 689a534..cc06f85 100644
--- a/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt
+++ b/src/main/kotlin/io/dico/parcels2/ParcelsPlugin.kt
@@ -77,13 +77,15 @@ class ParcelsPlugin : JavaPlugin() {
if (optionsFile.exists()) {
yamlObjectMapper.readerForUpdating(options).readValue<Options>(optionsFile)
} else if (optionsFile.tryCreate()) {
- options.addWorld("plotworld", WorldOptions())
+ options.addWorld("parcels", WorldOptions())
try {
yamlObjectMapper.writeValue(optionsFile, options)
} catch (ex: Throwable) {
optionsFile.delete()
throw ex
}
+ plogger.warn("Created options file with a world template. Please review it before next start.")
+ return false
} else {
plogger.error("Failed to save options file ${optionsFile.canonicalPath}")
return false
diff --git a/src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt b/src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt
index d535d46..f5eb5ca 100644
--- a/src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt
+++ b/src/main/kotlin/io/dico/parcels2/listener/ParcelListeners.kt
@@ -376,6 +376,40 @@ class ParcelListeners(val worlds: Worlds, val entityTracker: ParcelEntityTracker
w.setGameRuleValue("doTileDrops", world.options.doTileDrops.toString())
}
+ // TODO: BlockFormEvent, BlockSpreadEvent, BlockFadeEvent
+
+ /*
+ * Prevents natural blocks forming
+ */
+ @ListenerMarker(priority = NORMAL)
+ val onBlockFormEvent = RegistratorListener<BlockFormEvent> l@{ event ->
+ val block = event.block
+ val (wo, ppa) = getWoAndPPa(block) ?: return@l
+
+ // prevent any generation whatsoever on paths
+ if (ppa == null) {
+ event.isCancelled = true; return@l
+ }
+
+ val hasEntity = event is EntityBlockFormEvent
+ val player = (event as? EntityBlockFormEvent)?.entity as? Player
+
+ val cancel: Boolean = when (block.type) {
+
+ // prevent ice generation from Frost Walkers enchantment
+ ICE -> player != null && !ppa.canBuild(player)
+
+ // prevent snow generation from weather
+ SNOW -> !hasEntity && wo.options.preventWeatherBlockChanges
+
+ else -> false
+ }
+
+ if (cancel) {
+ event.isCancelled = true
+ }
+ }
+
/*
* Prevents mobs (living entities) from spawning if that is disabled for that world in the config.
*/
diff --git a/src/main/kotlin/io/dico/parcels2/storage/ExposedBacking.kt b/src/main/kotlin/io/dico/parcels2/storage/ExposedBacking.kt
index 9a26acc..cbcb6f4 100644
--- a/src/main/kotlin/io/dico/parcels2/storage/ExposedBacking.kt
+++ b/src/main/kotlin/io/dico/parcels2/storage/ExposedBacking.kt
@@ -9,6 +9,7 @@ import kotlinx.coroutines.experimental.channels.ProducerScope
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.SchemaUtils.create
import org.jetbrains.exposed.sql.transactions.transaction
+import org.jetbrains.exposed.sql.vendors.DatabaseDialect
import org.joda.time.DateTime
import java.util.*
import javax.sql.DataSource
@@ -62,6 +63,14 @@ class ExposedBacking(private val dataSourceFactory: () -> DataSource) : Backing
override val isConnected get() = database != null
+ companion object {
+ init {
+ Database.registerDialect("mariadb") {
+ Class.forName("org.jetbrains.exposed.sql.vendors.MysqlDialect").newInstance() as DatabaseDialect
+ }
+ }
+ }
+
override suspend fun init() {
if (isShutdown) throw IllegalStateException()
dataSource = dataSourceFactory()
diff --git a/src/main/kotlin/io/dico/parcels2/storage/ExposedExtensions.kt b/src/main/kotlin/io/dico/parcels2/storage/ExposedExtensions.kt
index 7533586..816ff97 100644
--- a/src/main/kotlin/io/dico/parcels2/storage/ExposedExtensions.kt
+++ b/src/main/kotlin/io/dico/parcels2/storage/ExposedExtensions.kt
@@ -1,8 +1,10 @@
package io.dico.parcels2.storage
-import org.jetbrains.exposed.sql.*
+import org.jetbrains.exposed.sql.Column
+import org.jetbrains.exposed.sql.Index
+import org.jetbrains.exposed.sql.Table
+import org.jetbrains.exposed.sql.Transaction
import org.jetbrains.exposed.sql.statements.InsertStatement
-import org.jetbrains.exposed.sql.statements.UpdateStatement
import org.jetbrains.exposed.sql.transactions.TransactionManager
class UpsertStatement<Key : Any>(table: Table, conflictColumn: Column<*>? = null, conflictIndex: Index? = null)
@@ -26,12 +28,23 @@ class UpsertStatement<Key : Any>(table: Table, conflictColumn: Column<*>? = null
override fun prepareSQL(transaction: Transaction) = buildString {
append(super.prepareSQL(transaction))
- append(" ON CONFLICT(")
- append(indexName)
- append(") DO UPDATE SET ")
- values.keys.filter { it !in indexColumns}.joinTo(this) { "${transaction.identity(it)}=EXCLUDED.${transaction.identity(it)}" }
- }.also { println(it) }
+ val dialect = transaction.db.vendor
+ if (dialect == "postgresql") {
+
+ append(" ON CONFLICT(")
+ append(indexName)
+ append(") DO UPDATE SET ")
+
+ values.keys.filter { it !in indexColumns }.joinTo(this) { "${transaction.identity(it)}=EXCLUDED.${transaction.identity(it)}" }
+
+ } else {
+
+ append (" ON DUPLICATE KEY UPDATE ")
+ values.keys.filter { it !in indexColumns }.joinTo(this) { "${transaction.identity(it)}=VALUES(${transaction.identity(it)})" }
+
+ }
+ }
}
diff --git a/src/main/kotlin/io/dico/parcels2/storage/Hikari.kt b/src/main/kotlin/io/dico/parcels2/storage/Hikari.kt
index e21a24e..2dfa872 100644
--- a/src/main/kotlin/io/dico/parcels2/storage/Hikari.kt
+++ b/src/main/kotlin/io/dico/parcels2/storage/Hikari.kt
@@ -15,6 +15,15 @@ fun getHikariConfig(dialectName: String,
dataSourceProperties["portNumber"] = port.toString()
dataSourceProperties["databaseName"] = dco.database
}
+
+ "mariadb" -> run {
+ dataSourceClassName = "org.mariadb.jdbc.MariaDbDataSource"
+ dataSourceProperties["serverName"] = address
+ dataSourceProperties["port"] = port.toString()
+ dataSourceProperties["databaseName"] = dco.database
+ dataSourceProperties["properties"] = "useUnicode=true;characterEncoding=utf8"
+ }
+
else -> throw IllegalArgumentException("Unsupported dialect: $dialectName")
}
diff --git a/src/main/kotlin/io/dico/parcels2/storage/StorageFactory.kt b/src/main/kotlin/io/dico/parcels2/storage/StorageFactory.kt
index 13df2ed..bb5013a 100644
--- a/src/main/kotlin/io/dico/parcels2/storage/StorageFactory.kt
+++ b/src/main/kotlin/io/dico/parcels2/storage/StorageFactory.kt
@@ -27,7 +27,7 @@ interface StorageFactory {
class ConnectionStorageFactory : StorageFactory {
override val optionsClass = DataConnectionOptions::class
- private val types: List<String> = listOf("postgresql")
+ private val types: List<String> = listOf("postgresql", "mariadb")
fun register(companion: StorageFactory.StorageFactories) {
types.forEach { companion.registerFactory(it, this) }