aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorthedarkcolour <30441001+thedarkcolour@users.noreply.github.com>2020-10-18 12:21:34 -0700
committerthedarkcolour <30441001+thedarkcolour@users.noreply.github.com>2020-10-18 12:21:34 -0700
commit1d4d9787edfea95c3aa23babf1643ce901afa7ac (patch)
tree933a1876acb75d1351788aee2eca5d1063ba1622
parente69c00673a0f6bc180d646665fc4973874f13ab8 (diff)
downloadKotlinForForge-1d4d9787edfea95c3aa23babf1643ce901afa7ac.tar.gz
KotlinForForge-1d4d9787edfea95c3aa23babf1643ce901afa7ac.tar.bz2
KotlinForForge-1d4d9787edfea95c3aa23babf1643ce901afa7ac.zip
Close #8
-rw-r--r--build.gradle68
-rw-r--r--src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBus.kt37
-rw-r--r--src/main/kotlin/thedarkcolour/kotlinforforge/test/TestMod.kt128
-rw-r--r--src/main/resources/META-INF/mods.toml20
-rw-r--r--thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-obf.jarbin0 -> 6220265 bytes
-rw-r--r--thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-obf.jar.md51
-rw-r--r--thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-obf.jar.sha11
-rw-r--r--thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-sources.jarbin0 -> 38604 bytes
-rw-r--r--thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-sources.jar.md51
-rw-r--r--thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-sources.jar.sha11
-rw-r--r--thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2.jarbin0 -> 112723 bytes
-rw-r--r--thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2.jar.md51
-rw-r--r--thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2.jar.sha11
-rw-r--r--thedarkcolour/kotlinforforge/maven-metadata.xml3
-rw-r--r--thedarkcolour/kotlinforforge/maven-metadata.xml.md52
-rw-r--r--thedarkcolour/kotlinforforge/maven-metadata.xml.sha12
-rw-r--r--thedarkcolour/kotlinforforge/web.html1
17 files changed, 199 insertions, 68 deletions
diff --git a/build.gradle b/build.gradle
index ccff79b..68328d6 100644
--- a/build.gradle
+++ b/build.gradle
@@ -22,7 +22,7 @@ apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'kotlin'
apply plugin: 'org.jetbrains.dokka'
-version = "1.6.1"
+version = "1.6.2"
group = 'thedarkcolour.kotlinforforge'
archivesBaseName = 'kotlinforforge'
@@ -31,38 +31,6 @@ sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = co
tasks.build.dependsOn kotlinSourcesJar
tasks.build.dependsOn shadowJar
-minecraft {
- mappings channel: 'snapshot', version: '20200723-1.16.1'
-
- runs {
- client {
- workingDirectory project.file('run')
-
- property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
-
- property 'forge.logging.console.level', 'debug'
- }
-
- server {
- workingDirectory project.file('run/server')
-
- property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
-
- property 'forge.logging.console.level', 'debug'
- }
-
- data {
- workingDirectory project.file('run')
-
- property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP'
-
- property 'forge.logging.console.level', 'debug'
-
- args '--mod', 'examplemod', '--all', '--output', file('src/generated/resources/')
- }
- }
-}
-
repositories {
mavenCentral()
maven {
@@ -91,7 +59,25 @@ dependencies {
compile group: "org.jetbrains.kotlinx", name: "kotlinx-coroutines-jdk8", version: coroutines_version
// Tests
- testImplementation 'junit:junit:4.11'
+ implementation 'junit:junit:4.11'
+}
+
+minecraft {
+ mappings channel: 'snapshot', version: '20200723-1.16.1'
+
+ runs {
+ client {
+ workingDirectory project.file('run')
+
+ property 'forge.logging.console.level', 'debug'
+ }
+
+ server {
+ workingDirectory project.file('run/server')
+
+ property 'forge.logging.console.level', 'debug'
+ }
+ }
}
shadowJar {
@@ -122,11 +108,17 @@ jar {
}
}
+static def options(kotlinOptions) {
+ kotlinOptions.jvmTarget = '1.8'
+ kotlinOptions.freeCompilerArgs = ["-Xexplicit-api=warning"]
+}
+
compileKotlin {
- kotlinOptions {
- jvmTarget = '1.8'
- freeCompilerArgs = ["-Xexplicit-api=warning"]
- }
+ options(kotlinOptions)
+}
+
+compileTestKotlin {
+ options(kotlinOptions)
}
kotlinSourcesJar {
diff --git a/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBus.kt b/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBus.kt
index c35c4e9..3f3fb66 100644
--- a/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBus.kt
+++ b/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBus.kt
@@ -18,6 +18,9 @@ import java.util.function.Consumer
/** @since 1.2.0
* Fixes [addListener] and [addGenericListener] for Kotlin KCallable.
+ *
+ * @param builder The BusBuilder used to configure this event bus
+ * @param synthetic Whether this event bus is just a wrapper for another bus
*/
public open class KotlinEventBus(builder: BusBuilder, synthetic: Boolean = false) : IEventBus, IEventExceptionHandler {
@Suppress("LeakingThis")
@@ -305,26 +308,24 @@ public open class KotlinEventBus(builder: BusBuilder, synthetic: Boolean = false
*/
private fun reflectKotlinSAM(consumer: Consumer<*>): Class<*>? {
val clazz = consumer.javaClass
+ val forgeType = TypeResolver.resolveRawArgument(Consumer::class.java, consumer.javaClass)
- when {
- clazz.simpleName.contains("$\$Lambda$") -> {
- return TypeResolver.resolveRawArgument(Consumer::class.java, consumer.javaClass)
- }
- clazz.simpleName.contains("\$sam$") -> {
- try {
- val functionField = clazz.getDeclaredField("function")
- functionField.isAccessible = true
- val function = functionField[consumer]
-
- // Function should have two type parameters (parameter type and return type)
- return TypeResolver.resolveRawArguments(kotlin.jvm.functions.Function1::class.java, function.javaClass)[0]
- } catch (e: NoSuchFieldException) {
- // Kotlin SAM interfaces compile to classes with a "function" field
- LOGGER.log(Level.FATAL, "Tried to register invalid Kotlin SAM interface: Missing 'function' field")
- throw e
- }
+ if (clazz.simpleName.contains("\$sam$")) {
+ try {
+ val functionField = clazz.getDeclaredField("function")
+ functionField.isAccessible = true
+ val function = functionField[consumer]
+
+ // Function should have two type parameters (parameter type and return type)
+ return TypeResolver.resolveRawArguments(kotlin.jvm.functions.Function1::class.java, function.javaClass)[0]
+ } catch (e: NoSuchFieldException) {
+ // Kotlin SAM interfaces compile to classes with a "function" field
+ LOGGER.log(Level.FATAL, "Tried to register invalid Kotlin SAM interface: Missing 'function' field")
+ throw e
}
- else -> return null
+ } else {
+ // Kotlin 1.4 seems to have fixed some of its lambda problems
+ return forgeType
}
}
diff --git a/src/main/kotlin/thedarkcolour/kotlinforforge/test/TestMod.kt b/src/main/kotlin/thedarkcolour/kotlinforforge/test/TestMod.kt
new file mode 100644
index 0000000..01de386
--- /dev/null
+++ b/src/main/kotlin/thedarkcolour/kotlinforforge/test/TestMod.kt
@@ -0,0 +1,128 @@
+package thedarkcolour.kotlinforforge.test
+
+import net.minecraftforge.eventbus.api.BusBuilder
+import net.minecraftforge.eventbus.api.Event
+import net.minecraftforge.eventbus.api.EventPriority
+import net.minecraftforge.eventbus.api.GenericEvent
+import org.junit.Assert.assertTrue
+import thedarkcolour.kotlinforforge.eventbus.KotlinEventBus
+import java.util.function.Consumer
+
+/**
+ * Uncomment the `@Mod` annotation and uncomment the entry in mods.toml to run the test mod
+ */
+//@Mod("test_mod")
+public class TestMod {
+
+ init {
+ val l = arrayListOf<Throwable>()
+
+ try {
+ testAddListenerBridge()
+ } catch (t: Throwable) {
+ l.add(t)
+ }
+ try {
+ testFunctionReference()
+ } catch (t: Throwable) {
+ l.add(t)
+ }
+ try {
+ testGenericListeners()
+ } catch (t: Throwable) {
+ l.add(t)
+ }
+
+ l.forEach { throwable ->
+ throwable.printStackTrace()
+ }
+
+ if (l.isNotEmpty()) {
+ throw RuntimeException("Test mod did not pass")
+ }
+ }
+
+ // Test event class
+ public open class TestEvent(public var value: String) : Event()
+
+ /**
+ * Tests the new bridge lambdas introduced in Kotlin 1.4.
+ */
+ private fun testAddListenerBridge() {
+ val bus = KotlinEventBus(BusBuilder.builder())
+
+ // Make sure the type checker works properly in Kotlin 1.4
+ bus.addListener<TestEvent> { event ->
+ event.value = "Foo"
+ }
+
+ // Check that the event posts for added listeners
+ val event = TestEvent("Bar")
+ bus.post(event)
+ assertTrue(event.value == "Foo")
+ }
+
+ // Test function for function references
+ private fun exampleFunction(event: TestEvent) {
+ event.value = "Foo"
+ }
+
+ /**
+ * Test that function references work properly in [KotlinEventBus.addListener].
+ */
+ private fun testFunctionReference() {
+ val bus = KotlinEventBus(BusBuilder.builder())
+ val event = TestEvent("Bar")
+
+ bus.addListener(::exampleFunction)
+ bus.post(event)
+ assertTrue(event.value == "Foo")
+ }
+
+ // generic event
+ public class TestGenericEvent<T>(type: Class<T>, internal var value: T) : GenericEvent<T>(type)
+
+ // test the function references here as well
+ private fun functionReference(event: TestGenericEvent<String>) {
+ event.value = "Far"
+ }
+
+ // Consumer class
+ public class EventConsumer : Consumer<TestGenericEvent<String>> {
+ override fun accept(t: TestGenericEvent<String>) {
+ t.value = "Jar"
+ }
+ }
+
+ /**
+ * Test that [KotlinEventBus.addGenericListener] respects the generic type
+ * of an event fired on the [KotlinEventBus] instance.
+ */
+ public fun testGenericListeners() {
+ // event bus
+ val bus = KotlinEventBus(BusBuilder.builder())
+
+ @Suppress("JoinDeclarationAndAssignment")
+ var fooEvent: TestGenericEvent<String>
+
+ // test fooEvent
+ fooEvent = TestGenericEvent(String::class.java, "Foo")
+ bus.addGenericListener(priority = EventPriority.HIGHEST) { e: TestGenericEvent<String> ->
+ e.value = "Bar"
+ }
+ bus.post(fooEvent)
+ assertTrue(fooEvent.value == "Bar")
+
+ // test consumer subclass
+ fooEvent = TestGenericEvent(String::class.java, "Foo")
+ bus.addGenericListener(priority = EventPriority.HIGH, EventConsumer())
+ bus.post(fooEvent)
+ assertTrue(fooEvent.value == "Jar")
+
+ // test barEvent for function references
+ fooEvent = TestGenericEvent(String::class.java, "Foo")
+ bus.addGenericListener(priority = EventPriority.NORMAL, ::functionReference)
+ bus.post(fooEvent)
+ assertTrue(fooEvent.value == "Far")
+ }
+} \ No newline at end of file
diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml
index 27b9220..e0174e8 100644
--- a/src/main/resources/META-INF/mods.toml
+++ b/src/main/resources/META-INF/mods.toml
@@ -1,13 +1,7 @@
modLoader="kotlinforforge" # IModLanguageProvider
-loaderVersion="[1.4,)" # IModLanguageProvider version
+loaderVersion="[1.6,)" # IModLanguageProvider version
license="GPL v3.0"
-issueTrackerURL="https://github.com/thedarkcolour/KotlinForForge/issues" # Issues page
-
-description='''
-Kotlin for Forge. Allows mods to use the Kotlin programming language.
-'''
-
# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional.
[[dependencies.kotlinforforge]] #optional
modId="forge" #mandatory
@@ -29,9 +23,17 @@ Kotlin for Forge. Allows mods to use the Kotlin programming language.
# --------------------------------------------------------- #
# --------------------------------------------------------- #
+# UNCOMMENT THIS TO RUN TEST MOD
+# [[mods]]
+# modId="test_mod"
+
[[mods]] #mandatory
displayName="Kotlin for Forge" # Name of mod
modId="kotlinforforge" # Modid
-version="1.4.0" # Version of kotlinforforge
+version="1.6.2" # Version of kotlinforforge
authors="TheDarkColour" # Author
-credits="Herobrine knows all." # Credits \ No newline at end of file
+credits="Herobrine knows all." # Credits
+description='''
+Kotlin for Forge. Allows mods to use the Kotlin programming language.
+'''
+issueTrackerURL="https://github.com/thedarkcolour/KotlinForForge/issues" # Issues page \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-obf.jar b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-obf.jar
new file mode 100644
index 0000000..cf53b93
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-obf.jar
Binary files differ
diff --git a/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-obf.jar.md5 b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-obf.jar.md5
new file mode 100644
index 0000000..fefc52c
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-obf.jar.md5
@@ -0,0 +1 @@
+97119625be6cbf290309672b3aa72f4c \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-obf.jar.sha1 b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-obf.jar.sha1
new file mode 100644
index 0000000..538a7a7
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-obf.jar.sha1
@@ -0,0 +1 @@
+019df74f4dec7fccaa528d4419ceda3c203b2c42 \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-sources.jar b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-sources.jar
new file mode 100644
index 0000000..7c24137
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-sources.jar
Binary files differ
diff --git a/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-sources.jar.md5 b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-sources.jar.md5
new file mode 100644
index 0000000..a4fe7c5
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-sources.jar.md5
@@ -0,0 +1 @@
+49a310cd958ae2f678d5a90685cfcf64 \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-sources.jar.sha1 b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-sources.jar.sha1
new file mode 100644
index 0000000..46e0fca
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2-sources.jar.sha1
@@ -0,0 +1 @@
+563054148acad349df1ab224eb41501472a9afa0 \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2.jar b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2.jar
new file mode 100644
index 0000000..c01b48a
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2.jar
Binary files differ
diff --git a/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2.jar.md5 b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2.jar.md5
new file mode 100644
index 0000000..2f32e45
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2.jar.md5
@@ -0,0 +1 @@
+f3aee52944c83f6ad081feaa73ec2449 \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2.jar.sha1 b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2.jar.sha1
new file mode 100644
index 0000000..1302d75
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.6.2/kotlinforforge-1.6.2.jar.sha1
@@ -0,0 +1 @@
+7c08bbfd5d0ec3c8172d2e302cbed9f3c893dc70 \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/maven-metadata.xml b/thedarkcolour/kotlinforforge/maven-metadata.xml
index f63a2a6..ab5e614 100644
--- a/thedarkcolour/kotlinforforge/maven-metadata.xml
+++ b/thedarkcolour/kotlinforforge/maven-metadata.xml
@@ -3,7 +3,7 @@
<groupId>thedarkcolour</groupId>
<artifactId>kotlinforforge</artifactId>
<versioning>
- <release>1.6.1</release>
+ <release>1.6.2</release>
<versions>
<version>1.0.0</version>
<version>1.0.1</version>
@@ -18,6 +18,7 @@
<version>1.5.0</version>
<version>1.6.0</version>
<version>1.6.1</version>
+ <version>1.6.2</version>
</versions>
</versioning>
</metadata>
diff --git a/thedarkcolour/kotlinforforge/maven-metadata.xml.md5 b/thedarkcolour/kotlinforforge/maven-metadata.xml.md5
index b1bfa38..28600b0 100644
--- a/thedarkcolour/kotlinforforge/maven-metadata.xml.md5
+++ b/thedarkcolour/kotlinforforge/maven-metadata.xml.md5
@@ -1 +1 @@
-5dd75e78f41e4517a86d3efbf089de45 \ No newline at end of file
+69c821851928df66bc4c3884970be77f \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/maven-metadata.xml.sha1 b/thedarkcolour/kotlinforforge/maven-metadata.xml.sha1
index d003f71..0a2f82f 100644
--- a/thedarkcolour/kotlinforforge/maven-metadata.xml.sha1
+++ b/thedarkcolour/kotlinforforge/maven-metadata.xml.sha1
@@ -1 +1 @@
-472c20190bb6d7e6e36f7c5b53960bf8129392b0 \ No newline at end of file
+516f8882b5e026e17f8152820838e770faaddde9 \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/web.html b/thedarkcolour/kotlinforforge/web.html
index 68989de..97688b4 100644
--- a/thedarkcolour/kotlinforforge/web.html
+++ b/thedarkcolour/kotlinforforge/web.html
@@ -21,6 +21,7 @@
<a href="1.5.0/web.html">1.5.0</a>
<a href="1.6.0/web.html">1.6.0</a>
<a href="1.6.1/web.html">1.6.1</a>
+<a href="1.6.2/web.html">1.6.2</a>
<a href="maven-metadata.xml">maven-metadata.xml</a>
<a href="maven-metadata.xml.md5">maven-metadata.xml.md5</a>
<a href="maven-metadata.xml.sha1">maven-metadata.xml.sha1</a>