aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle12
-rw-r--r--changelog.md4
-rw-r--r--gradle.properties3
-rw-r--r--src/main/java/net/minecraftforge/fml/event/lifecycle/IModBusEvent.java4
-rw-r--r--src/main/kotlin/thedarkcolour/kotlinforforge/KotlinForForge.kt17
-rw-r--r--src/main/kotlin/thedarkcolour/kotlinforforge/KotlinModContainer.kt123
-rw-r--r--src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/IKotlinEventBus.kt22
-rw-r--r--src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBus.kt9
-rw-r--r--src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBusWrapper.kt15
-rw-r--r--src/main/resources/META-INF/mods.toml4
-rw-r--r--thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0-sources.jarbin0 -> 42470 bytes
-rw-r--r--thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0-sources.jar.md51
-rw-r--r--thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0-sources.jar.sha11
-rw-r--r--thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.jarbin0 -> 118705 bytes
-rw-r--r--thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.jar.md51
-rw-r--r--thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.jar.sha11
-rw-r--r--thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.pom59
-rw-r--r--thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.pom.md51
-rw-r--r--thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.pom.sha11
-rw-r--r--thedarkcolour/kotlinforforge/1.8.0/web.html20
-rw-r--r--thedarkcolour/kotlinforforge/maven-metadata.xml3
21 files changed, 222 insertions, 79 deletions
diff --git a/build.gradle b/build.gradle
index 0e288ba..c0855c3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -9,6 +9,7 @@ buildscript {
dependencies {
classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ classpath "org.jetbrains.kotlin:kotlin-serialization:$kotlin_version"
classpath 'org.jetbrains.dokka:dokka-gradle-plugin:0.10.1'
classpath group: 'com.wynprice.cursemaven', name: 'CurseMaven', version: '2.1.5'
}
@@ -20,9 +21,10 @@ plugins {
apply plugin: 'net.minecraftforge.gradle'
apply plugin: 'kotlin'
+apply plugin: 'kotlinx-serialization'
apply plugin: 'org.jetbrains.dokka'
-version = "1.7.0"
+version = "1.8.0"
group = 'thedarkcolour.kotlinforforge'
archivesBaseName = 'kotlinforforge'
@@ -48,7 +50,7 @@ repositories {
}
dependencies {
- minecraft 'net.minecraftforge:forge:1.16.2-33.0.22'
+ minecraft 'net.minecraftforge:forge:1.16.5-36.0.9'
compile group: "org.jetbrains.kotlin", name: "kotlin-stdlib", version: kotlin_version
compile group: "org.jetbrains.kotlin", name: "kotlin-stdlib-jdk7", version: kotlin_version
@@ -57,13 +59,14 @@ dependencies {
compile group: "org.jetbrains", name: "annotations", version: annotations_version
compile group: "org.jetbrains.kotlinx", name: "kotlinx-coroutines-core", version: coroutines_version
compile group: "org.jetbrains.kotlinx", name: "kotlinx-coroutines-jdk8", version: coroutines_version
+ compile group: "org.jetbrains.kotlinx", name: "kotlinx-serialization-json", version: serialization_version
// Tests
implementation 'junit:junit:4.11'
}
minecraft {
- mappings channel: 'snapshot', version: '20200723-1.16.1'
+ mappings channel: 'snapshot', version: '20201028-1.16.3'
runs {
client {
@@ -90,6 +93,7 @@ shadowJar {
include dependency("org.jetbrains:annotations:${annotations_version}")
include dependency("org.jetbrains.kotlinx:kotlinx-coroutines-core:${coroutines_version}")
include dependency("org.jetbrains.kotlinx:kotlinx-coroutines-jdk8:${coroutines_version}")
+ include dependency("org.jetbrains.kotlinx:kotlinx-serialization-json:${serialization_version}")
}
}
@@ -110,7 +114,7 @@ jar {
static def options(kotlinOptions) {
kotlinOptions.jvmTarget = '1.8'
- kotlinOptions.freeCompilerArgs = ["-Xexplicit-api=warning"]
+ kotlinOptions.freeCompilerArgs = ['-Xexplicit-api=warning', '-Xjvm-default=enable']
}
compileKotlin {
diff --git a/changelog.md b/changelog.md
index 39310d7..4baddc0 100644
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+##Kotlin for Forge 1.8.0
+- Fixed a few things to match the new EventBus version.
+- Now includes the Kotlin JSON Serialization library.
+
##Kotlin for Forge 1.7.0
- Added `registerObject` function to KDeferredRegister for getting ObjectHolderDelegate instances
without needing a cast to ObjectHolderDelegate.
diff --git a/gradle.properties b/gradle.properties
index 4dd7111..200a842 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -5,4 +5,5 @@ org.gradle.jvmargs=-Xmx3G
org.gradle.daemon=false
kotlin_version=1.4.21
coroutines_version = 1.4.2
-annotations_version = 20.1.0 \ No newline at end of file
+annotations_version = 20.1.0
+serialization_version = 1.0.1 \ No newline at end of file
diff --git a/src/main/java/net/minecraftforge/fml/event/lifecycle/IModBusEvent.java b/src/main/java/net/minecraftforge/fml/event/lifecycle/IModBusEvent.java
new file mode 100644
index 0000000..22ebb57
--- /dev/null
+++ b/src/main/java/net/minecraftforge/fml/event/lifecycle/IModBusEvent.java
@@ -0,0 +1,4 @@
+package net.minecraftforge.fml.event.lifecycle;
+
+// Make things compile
+public interface IModBusEvent {}
diff --git a/src/main/kotlin/thedarkcolour/kotlinforforge/KotlinForForge.kt b/src/main/kotlin/thedarkcolour/kotlinforforge/KotlinForForge.kt
index 168d3f0..fac6ed6 100644
--- a/src/main/kotlin/thedarkcolour/kotlinforforge/KotlinForForge.kt
+++ b/src/main/kotlin/thedarkcolour/kotlinforforge/KotlinForForge.kt
@@ -1,7 +1,12 @@
package thedarkcolour.kotlinforforge
+import net.minecraftforge.common.MinecraftForge
+import net.minecraftforge.event.entity.player.AdvancementEvent
import net.minecraftforge.fml.common.Mod
+import net.minecraftforge.fml.event.lifecycle.FMLLoadCompleteEvent
import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext
+import thedarkcolour.kotlinforforge.forge.FORGE_BUS
+import thedarkcolour.kotlinforforge.forge.MOD_BUS
/**
* Set `modLoader` in mods.toml to
@@ -14,4 +19,14 @@ import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext
* check out the [KotlinModdingSkeleton repository](https://github.com/thedarkcolour/KotlinModdingSkeleton).
*/
@Mod("kotlinforforge")
-public object KotlinForForge \ No newline at end of file
+public object KotlinForForge {
+ init {
+ MOD_BUS.addListener { event: FMLLoadCompleteEvent ->
+ val a = FORGE_BUS.post(AdvancementEvent(null, null))
+ val b = MinecraftForge.EVENT_BUS.post(AdvancementEvent(null, null))
+
+ println("POST TEST: $a")
+ println("POST TEST: $b")
+ }
+ }
+} \ No newline at end of file
diff --git a/src/main/kotlin/thedarkcolour/kotlinforforge/KotlinModContainer.kt b/src/main/kotlin/thedarkcolour/kotlinforforge/KotlinModContainer.kt
index db61225..7208cc6 100644
--- a/src/main/kotlin/thedarkcolour/kotlinforforge/KotlinModContainer.kt
+++ b/src/main/kotlin/thedarkcolour/kotlinforforge/KotlinModContainer.kt
@@ -5,21 +5,20 @@ import net.minecraftforge.eventbus.api.BusBuilder
import net.minecraftforge.eventbus.api.Event
import net.minecraftforge.eventbus.api.IEventBus
import net.minecraftforge.eventbus.api.IEventListener
-import net.minecraftforge.fml.LifecycleEventProvider.LifecycleEvent
import net.minecraftforge.fml.Logging
import net.minecraftforge.fml.ModContainer
import net.minecraftforge.fml.ModLoadingException
import net.minecraftforge.fml.ModLoadingStage
import net.minecraftforge.fml.config.ModConfig
+import net.minecraftforge.fml.event.lifecycle.IModBusEvent
import net.minecraftforge.forgespi.language.IModInfo
import net.minecraftforge.forgespi.language.ModFileScanData
import thedarkcolour.kotlinforforge.eventbus.KotlinEventBus
import thedarkcolour.kotlinforforge.kotlin.supply
+import java.lang.IllegalArgumentException
import java.lang.reflect.Field
import java.util.function.Consumer
-public typealias LifecycleEventListener = (LifecycleEvent) -> Unit
-
/**
* The Kotlin for Forge `ModContainer`.
*/
@@ -41,7 +40,7 @@ public class KotlinModContainer(
*/
public val eventBus: KotlinEventBus
- private val _triggerMap: MutableMap<ModLoadingStage, Consumer<LifecycleEvent>>?
+ private val _triggerMap: MutableMap<ModLoadingStage, Any>?
private val _activityMap: MutableMap<ModLoadingStage, Runnable>?
init {
@@ -53,7 +52,7 @@ public class KotlinModContainer(
}
@Suppress("UNCHECKED_CAST")
_triggerMap = try {
- TRIGGER_MAP_FIELD?.get(this) as MutableMap<ModLoadingStage, Consumer<LifecycleEvent>>
+ TRIGGER_MAP_FIELD?.get(this) as MutableMap<ModLoadingStage, Any>
} catch (e: Exception) {
null
}
@@ -63,15 +62,7 @@ public class KotlinModContainer(
if (_activityMap != null) {
_activityMap[ModLoadingStage.CONSTRUCT] = Runnable(::constructMod)
} else if (_triggerMap != null) {
- _triggerMap[ModLoadingStage.CONSTRUCT] = createTrigger( { constructMod() }, ::afterEvent)
- _triggerMap[ModLoadingStage.CREATE_REGISTRIES] = createTrigger(::fireEvent, ::afterEvent)
- _triggerMap[ModLoadingStage.LOAD_REGISTRIES] = createTrigger(::fireEvent, ::afterEvent)
- _triggerMap[ModLoadingStage.COMMON_SETUP] = createTrigger(::fireEvent, ::afterEvent)
- _triggerMap[ModLoadingStage.SIDED_SETUP] = createTrigger(::fireEvent, ::afterEvent)
- _triggerMap[ModLoadingStage.ENQUEUE_IMC] = createTrigger(::fireEvent, ::afterEvent)
- _triggerMap[ModLoadingStage.PROCESS_IMC] = createTrigger(::fireEvent, ::afterEvent)
- _triggerMap[ModLoadingStage.COMPLETE] = createTrigger(::fireEvent, ::afterEvent)
- _triggerMap[ModLoadingStage.GATHERDATA] = createTrigger(::fireEvent, ::afterEvent)
+ setupTriggerMap(_triggerMap)
}
eventBus = KotlinEventBus(BusBuilder.builder().setExceptionHandler(::onEventFailed).setTrackPhases(false))
@@ -79,61 +70,20 @@ public class KotlinModContainer(
}
/**
- * Creates a single `Consumer` that calls
- * both [consumerA] and [consumerB].
- */
- private fun createTrigger(
- consumerA: LifecycleEventListener,
- consumerB: LifecycleEventListener,
- ): Consumer<LifecycleEvent> {
- return Consumer { event ->
- consumerA(event)
- consumerB(event)
- }
- }
-
- /**
* The `IEventExceptionHandler` that logs
* errors in events as errors.
*/
private fun onEventFailed(
- iEventBus: IEventBus,
- event: Event,
- iEventListeners: Array<IEventListener>,
- i: Int,
- throwable: Throwable
+ iEventBus: IEventBus,
+ event: Event,
+ iEventListeners: Array<IEventListener>,
+ i: Int,
+ throwable: Throwable,
) {
LOGGER.error(EventBusErrorMessage(event, i, iEventListeners, throwable))
}
/**
- * Fires a `LifecycleEvent` on the mod [eventBus].
- */
- private fun fireEvent(lifecycleEvent: LifecycleEvent) {
- val event = lifecycleEvent.getOrBuildEvent(this)
-
- LOGGER.debug(Logging.LOADING, "Firing event for modid $modId : $event")
-
- try {
- eventBus.post(event)
- LOGGER.debug(Logging.LOADING, "Fired event for modid $modId : $event")
- } catch (throwable: Throwable) {
- LOGGER.error(Logging.LOADING, "An error occurred while dispatching event ${lifecycleEvent.fromStage()} to $modId")
- throw ModLoadingException(modInfo, lifecycleEvent.fromStage(), "fml.modloading.errorduringevent", throwable)
- }
- }
-
- /**
- * If an error was thrown during the event,
- * log it to the console as an error.
- */
- private fun afterEvent(lifecycleEvent: LifecycleEvent) {
- if (currentState == ModLoadingStage.ERROR) {
- LOGGER.error(Logging.LOADING, "An error occurred while dispatching event ${lifecycleEvent.fromStage()} to $modId")
- }
- }
-
- /**
* Initializes [modInstance] and calls the mod constructor
*/
private fun constructMod() {
@@ -177,7 +127,7 @@ public class KotlinModContainer(
override fun getMod(): Any = modInstance
- override fun acceptEvent(e: Event) {
+ public override fun <T> acceptEvent(e: T) where T : Event, T : IModBusEvent {
try {
LOGGER.debug("Firing event for modid $modId : $e")
eventBus.post(e)
@@ -188,6 +138,50 @@ public class KotlinModContainer(
}
}
+ public fun setupTriggerMap(map: MutableMap<ModLoadingStage, Any>) {
+ map[ModLoadingStage.CONSTRUCT] = createTrigger( { constructMod() }, ::afterEvent)
+ map[ModLoadingStage.CREATE_REGISTRIES] = createTrigger(::fireEvent, ::afterEvent)
+ map[ModLoadingStage.LOAD_REGISTRIES] = createTrigger(::fireEvent, ::afterEvent)
+ map[ModLoadingStage.COMMON_SETUP] = createTrigger(::fireEvent, ::afterEvent)
+ map[ModLoadingStage.SIDED_SETUP] = createTrigger(::fireEvent, ::afterEvent)
+ map[ModLoadingStage.ENQUEUE_IMC] = createTrigger(::fireEvent, ::afterEvent)
+ map[ModLoadingStage.PROCESS_IMC] = createTrigger(::fireEvent, ::afterEvent)
+ map[ModLoadingStage.COMPLETE] = createTrigger(::fireEvent, ::afterEvent)
+ try {
+ map[ModLoadingStage.valueOf("GATHERDATA")] = createTrigger(::fireEvent, ::afterEvent)
+ } catch (e: IllegalArgumentException) {}
+ }
+
+ private fun afterEvent(lifecycleEvent: Any) {
+ if (currentState == ModLoadingStage.ERROR) {
+ LOGGER.error(Logging.LOADING, "An error occurred while dispatching event ${fromStageMethod!!.invoke(lifecycleEvent)} to ${getModId()}")
+ }
+ }
+
+ private fun fireEvent(lifecycleEvent: Any) {
+ val event = getOrBuildEventMethod!!.invoke(lifecycleEvent, this) as Event
+
+ LOGGER.debug(Logging.LOADING, "Firing event for modid ${getModId()} : $event")
+
+ try {
+ eventBus.post(event)
+ LOGGER.debug(Logging.LOADING, "Fired event for modid ${getModId()} : $event")
+ } catch (throwable: Throwable) {
+ LOGGER.error(Logging.LOADING, "An error occurred while dispatching event ${fromStageMethod!!.invoke(lifecycleEvent)} to ${getModId()}")
+ throw ModLoadingException(getModInfo(), fromStageMethod.invoke(lifecycleEvent) as ModLoadingStage, "fml.modloading.errorduringevent", throwable)
+ }
+ }
+
+ private fun createTrigger(
+ consumerA: (Any) -> Unit,
+ consumerB: (Any) -> Unit,
+ ): Consumer<Any> {
+ return Consumer { event ->
+ consumerA(event)
+ consumerB(event)
+ }
+ }
+
private companion object {
private val TRIGGER_MAP_FIELD: Field? = try {
ModContainer::class.java.getDeclaredField("triggerMap").also { field ->
@@ -203,5 +197,12 @@ public class KotlinModContainer(
} catch (e: NoSuchFieldException) {
null
}
+
+ private val getOrBuildEventMethod = try {
+ Class.forName("net.minecraftforge.fml.LifecycleEventProvider\$LifecycleEvent").getDeclaredMethod("getOrBuildEvent", ModContainer::class.java)
+ } catch (e: ClassNotFoundException) { null } catch (e: NoSuchMethodError) { null }
+ private val fromStageMethod = try {
+ Class.forName("net.minecraftforge.fml.LifecycleEventProvider\$LifecycleEvent").getDeclaredMethod("fromStage")
+ } catch (e: ClassNotFoundException) { null } catch (e: NoSuchMethodError) { null }
}
} \ No newline at end of file
diff --git a/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/IKotlinEventBus.kt b/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/IKotlinEventBus.kt
new file mode 100644
index 0000000..e26c002
--- /dev/null
+++ b/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/IKotlinEventBus.kt
@@ -0,0 +1,22 @@
+package thedarkcolour.kotlinforforge.eventbus
+
+import net.minecraftforge.eventbus.api.Event
+import net.minecraftforge.eventbus.api.IEventBus
+import net.minecraftforge.eventbus.api.IEventBusInvokeDispatcher
+import net.minecraftforge.eventbus.api.IEventListener
+
+/** @since 1.7.1
+ * Maintain compatibility between old versions of event bus.
+ */
+public interface IKotlinEventBus : IEventBus {
+ /**
+ * Implement by default so classloading [KotlinEventBus]
+ * does not try to load [IEventBusInvokeDispatcher].
+ */
+ @JvmDefault
+ override fun post(event: Event, wrapper: IEventBusInvokeDispatcher): Boolean {
+ return post(wrapper::invoke, event)
+ }
+
+ public fun post(wrapper: (IEventListener, Event) -> Unit, event: Event): Boolean
+} \ No newline at end of file
diff --git a/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBus.kt b/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBus.kt
index 3f3fb66..a3580e6 100644
--- a/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBus.kt
+++ b/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBus.kt
@@ -22,7 +22,7 @@ import java.util.function.Consumer
* @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 {
+public open class KotlinEventBus(builder: BusBuilder, synthetic: Boolean = false) : IKotlinEventBus, IEventExceptionHandler {
@Suppress("LeakingThis")
private val exceptionHandler = builder.exceptionHandler ?: this
private val trackPhases = builder.trackPhases
@@ -31,6 +31,7 @@ public open class KotlinEventBus(builder: BusBuilder, synthetic: Boolean = false
protected open val busID: Int = MAX_ID.getAndIncrement()
protected open val listeners: ConcurrentHashMap<Any, MutableList<IEventListener>> = ConcurrentHashMap()
+
init {
// see companion object
if (!synthetic) {
@@ -365,6 +366,10 @@ public open class KotlinEventBus(builder: BusBuilder, synthetic: Boolean = false
}
override fun post(event: Event): Boolean {
+ return post(IEventListener::invoke, event)
+ }
+
+ override fun post(wrapper: (IEventListener, Event) -> Unit, event: Event): Boolean {
if (shutdown) return false
val listeners = event.listenerList.getListeners(busID)
@@ -374,7 +379,7 @@ public open class KotlinEventBus(builder: BusBuilder, synthetic: Boolean = false
if (!trackPhases && listeners[index]::class.java == EventPriority::class.java) {
continue
} else {
- listeners[index].invoke(event)
+ wrapper.invoke(listeners[index], event)
}
} catch (throwable: Throwable) {
exceptionHandler.handleException(this, event, listeners, index, throwable)
diff --git a/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBusWrapper.kt b/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBusWrapper.kt
index ac12b1b..dee96b6 100644
--- a/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBusWrapper.kt
+++ b/src/main/kotlin/thedarkcolour/kotlinforforge/eventbus/KotlinEventBusWrapper.kt
@@ -1,10 +1,7 @@
package thedarkcolour.kotlinforforge.eventbus
import net.minecraftforge.eventbus.EventBus
-import net.minecraftforge.eventbus.api.BusBuilder
-import net.minecraftforge.eventbus.api.IEventBus
-import net.minecraftforge.eventbus.api.IEventExceptionHandler
-import net.minecraftforge.eventbus.api.IEventListener
+import net.minecraftforge.eventbus.api.*
import thedarkcolour.kotlinforforge.forge.FORGE_BUS
import java.util.concurrent.ConcurrentHashMap
@@ -13,13 +10,17 @@ import java.util.concurrent.ConcurrentHashMap
* when using [FORGE_BUS].
*/
public class KotlinEventBusWrapper(private val parent: EventBus) : KotlinEventBus(BusBuilder()
- .setExceptionHandler(getExceptionHandler(parent))
- .setTrackPhases(getTrackPhases(parent))
- .also { if (getShutdown(parent)) it.startShutdown() }
+ .setExceptionHandler(getExceptionHandler(parent))
+ .setTrackPhases(getTrackPhases(parent))
+ .also { if (getShutdown(parent)) it.startShutdown() }
) {
override val busID: Int = getBusID(parent)
override val listeners: ConcurrentHashMap<Any, MutableList<IEventListener>> = getListeners(parent)
+ override fun post(event: Event): Boolean {
+ return parent.post(event)
+ }
+
// reflection stuff
private companion object {
private val GET_BUS_ID = EventBus::class.java.getDeclaredField("busID").also { it.isAccessible = true }
diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml
index e0174e8..370d49c 100644
--- a/src/main/resources/META-INF/mods.toml
+++ b/src/main/resources/META-INF/mods.toml
@@ -1,5 +1,5 @@
modLoader="kotlinforforge" # IModLanguageProvider
-loaderVersion="[1.6,)" # IModLanguageProvider version
+loaderVersion="[1.8,)" # IModLanguageProvider version
license="GPL v3.0"
# A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional.
@@ -30,7 +30,7 @@ license="GPL v3.0"
[[mods]] #mandatory
displayName="Kotlin for Forge" # Name of mod
modId="kotlinforforge" # Modid
-version="1.6.2" # Version of kotlinforforge
+version="1.7.1" # Version of kotlinforforge
authors="TheDarkColour" # Author
credits="Herobrine knows all." # Credits
description='''
diff --git a/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0-sources.jar b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0-sources.jar
new file mode 100644
index 0000000..cf9841d
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0-sources.jar
Binary files differ
diff --git a/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0-sources.jar.md5 b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0-sources.jar.md5
new file mode 100644
index 0000000..4ab7909
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0-sources.jar.md5
@@ -0,0 +1 @@
+4c4f12e0807168828e8a06b27d90f516 \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0-sources.jar.sha1 b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0-sources.jar.sha1
new file mode 100644
index 0000000..e222bbb
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0-sources.jar.sha1
@@ -0,0 +1 @@
+39022c9dd6360eba53ec1277fa9857962dc337e6 \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.jar b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.jar
new file mode 100644
index 0000000..2b5c8ed
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.jar
Binary files differ
diff --git a/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.jar.md5 b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.jar.md5
new file mode 100644
index 0000000..048f88f
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.jar.md5
@@ -0,0 +1 @@
+219853d8add3cb4bc193a1fd08fed25a \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.jar.sha1 b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.jar.sha1
new file mode 100644
index 0000000..ae45183
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.jar.sha1
@@ -0,0 +1 @@
+85a459f49f5cc3e3c7bb4c535798e2d5c48ac0bf \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.pom b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.pom
new file mode 100644
index 0000000..ecb914c
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.pom
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+ xmlns="http://maven.apache.org/POM/4.0.0"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>thedarkcolour</groupId>
+ <artifactId>kotlinforforge</artifactId>
+ <version>1.8.0</version>
+ <dependencies>
+ <dependency>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-stdlib</artifactId>
+ <version>1.4.21</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-stdlib-jdk7</artifactId>
+ <version>1.4.21</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-stdlib-jdk8</artifactId>
+ <version>1.4.21</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains.kotlin</groupId>
+ <artifactId>kotlin-reflect</artifactId>
+ <version>1.4.21</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains</groupId>
+ <artifactId>annotations</artifactId>
+ <version>20.1.0</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains.kotlinx</groupId>
+ <artifactId>kotlinx-coroutines-core</artifactId>
+ <version>1.4.2</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains.kotlinx</groupId>
+ <artifactId>kotlinx-coroutines-jdk8</artifactId>
+ <version>1.4.2</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.jetbrains.kotlinx</groupId>
+ <artifactId>kotlinx-serialization-json</artifactId>
+ <version>1.0.1</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+</project>
diff --git a/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.pom.md5 b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.pom.md5
new file mode 100644
index 0000000..c13252d
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.pom.md5
@@ -0,0 +1 @@
+1b3b9a44d36e65533c28e067c8fcbb78 \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.pom.sha1 b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.pom.sha1
new file mode 100644
index 0000000..118e176
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.8.0/kotlinforforge-1.8.0.pom.sha1
@@ -0,0 +1 @@
+f7aa18a327747cdab51c5a714410600856a3400b \ No newline at end of file
diff --git a/thedarkcolour/kotlinforforge/1.8.0/web.html b/thedarkcolour/kotlinforforge/1.8.0/web.html
new file mode 100644
index 0000000..d04140a
--- /dev/null
+++ b/thedarkcolour/kotlinforforge/1.8.0/web.html
@@ -0,0 +1,20 @@
+<html lang="HTML5">
+<link rel="stylesheet" href="../../style.css">
+<head><title>Index of /1.8.0/</title></head>
+<body>
+<h1>Index of /kotlinforforge/</h1>
+<hr>
+<pre><a href="../web.html">../</a>
+<a href="kotlinforforge-1.8.0-sources.jar">kotlinforforge-1.8.0-sources.jar</a>
+<a href="kotlinforforge-1.8.0-sources.jar.sha1">kotlinforforge-1.8.0-sources.jar.sha1</a>
+<a href="kotlinforforge-1.8.0-sources.jar.md5">kotlinforforge-1.8.0-sources.jar.md5</a>
+<a href="kotlinforforge-1.8.0.jar">kotlinforforge-1.8.0.jar</a>
+<a href="kotlinforforge-1.8.0.jar.sha1">kotlinforforge-1.8.0.jar.sha1</a>
+<a href="kotlinforforge-1.8.0.jar.md5">kotlinforforge-1.8.0.jar.md5</a>
+<a href="kotlinforforge-1.8.0.pom">kotlinforforge-1.8.0.pom</a>
+<a href="kotlinforforge-1.8.0.pom.sha1">kotlinforforge-1.8.0.pom.sha1</a>
+<a href="kotlinforforge-1.8.0.pom.md5">kotlinforforge-1.8.0.pom.md5</a>
+</pre>
+<hr>
+</body>
+</html>
diff --git a/thedarkcolour/kotlinforforge/maven-metadata.xml b/thedarkcolour/kotlinforforge/maven-metadata.xml
index b2a62a9..cb96100 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.7.0</release>
+ <release>1.8.0</release>
<versions>
<version>1.0.0</version>
<version>1.0.1</version>
@@ -20,6 +20,7 @@
<version>1.6.1</version>
<version>1.6.2</version>
<version>1.7.0</version>
+ <version>1.8.0</version>
</versions>
</versioning>
</metadata>