Skip to content

Commit

Permalink
support kotlin 1.9.22
Browse files Browse the repository at this point in the history
This makes some changes to the client pom to support compiling kotlin

Adds "hotlite.plugins" package to the plugin scanner

Adds K-Example kotlin plugin example.

This is all very basic at the moment but kotlin plugin functionality will eventually be as good as it was on Meteor.

This depends on the recent launcher commit that updates the kotlin std lib for runtime
  • Loading branch information
zeruth committed Dec 29, 2023
1 parent 2b01138 commit 637ffe9
Show file tree
Hide file tree
Showing 5 changed files with 323 additions and 0 deletions.
2 changes: 2 additions & 0 deletions .mvn/jvm.config
Original file line number Diff line number Diff line change
@@ -1 +1,3 @@
-Xmx512m
--add-opens=java.base/java.lang=ALL-UNNAMED
--add-opens=java.base/java.io=ALL-UNNAMED
32 changes: 32 additions & 0 deletions runelite-client/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
<git.commit.id.abbrev>nogit</git.commit.id.abbrev>
<git.dirty>false</git.dirty>
<shade.skip>false</shade.skip>
<kotlin.version>1.9.22</kotlin.version>
</properties>

<dependencies>
Expand Down Expand Up @@ -322,6 +323,13 @@
<artifactId>cfr</artifactId>
<version>0.152</version>
</dependency>

<!-- hotlite -->
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib</artifactId>
<version>${kotlin.version}</version>
</dependency>
</dependencies>

<dependencyManagement>
Expand Down Expand Up @@ -490,6 +498,30 @@
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<goals>
<goal>compile</goal>
</goals>
</execution>
<execution>
<id>test-compile</id>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
<configuration>
<sourceDirs>
<sourceDir>${project.basedir}/src/main/kotlin</sourceDir>
</sourceDirs>
</configuration>
</plugin>
</plugins>
</build>
</project>
259 changes: 259 additions & 0 deletions runelite-client/src/main/java/hotlite/plugins/example/ExampleConfig.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,259 @@
/*
* Copyright (c) 2018, Cas <https://github.com/casvandongen>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package hotlite.plugins.example

import net.runelite.client.config.*
import java.awt.Color

@ConfigGroup("agility")
interface ExampleConfig : Config {
@ConfigItem(
keyName = "showClickboxes",
name = "Show Clickboxes",
description = "Show agility course and other obstacle clickboxes",
position = 0
)
fun showClickboxes(): Boolean {
return true
}

@ConfigItem(
keyName = "showLapCount",
name = "Show Lap Count",
description = "Enable/disable the lap counter",
position = 1
)
fun showLapCount(): Boolean {
return true
}

@ConfigItem(
keyName = "lapTimeout",
name = "Hide Lap Count",
description = "Time until the lap counter hides/resets",
position = 2
)
@Units(
Units.MINUTES
)
fun lapTimeout(): Int {
return 5
}

@ConfigItem(
keyName = "lapsToLevel",
name = "Show Laps Until Goal",
description = "Show number of laps remaining until next goal is reached.",
position = 3
)
fun lapsToLevel(): Boolean {
return true
}

@ConfigItem(
keyName = "lapsPerHour",
name = "Show Laps Per Hour",
description = "Shows how many laps you can expect to complete per hour.",
position = 4
)
fun lapsPerHour(): Boolean {
return true
}

@get:ConfigItem(
keyName = "overlayColor",
name = "Overlay Color",
description = "Color of Agility overlay",
position = 5
)
@get:Alpha
val overlayColor: Color?
get() = Color.GREEN

@ConfigItem(
keyName = "highlightMarks",
name = "Highlight Marks of Grace",
description = "Enable/disable the highlighting of retrievable Marks of Grace",
position = 6
)
fun highlightMarks(): Boolean {
return true
}

@get:ConfigItem(
keyName = "markHighlight",
name = "Mark Highlight Color",
description = "Color of highlighted Marks of Grace",
position = 7
)
@get:Alpha
val markColor: Color?
get() = Color.RED

@ConfigItem(
keyName = "highlightPortals",
name = "Highlight Portals",
description = "Enable/disable the highlighting of Prifddinas portals",
position = 8
)
fun highlightPortals(): Boolean {
return true
}

@get:ConfigItem(
keyName = "portalsHighlight",
name = "Portals Color",
description = "Color of highlighted Prifddinas portals",
position = 9
)
@get:Alpha
val portalsColor: Color?
get() = Color.MAGENTA

@ConfigItem(
keyName = "highlightShortcuts",
name = "Highlight Agility Shortcuts",
description = "Enable/disable the highlighting of Agility shortcuts",
position = 10
)
fun highlightShortcuts(): Boolean {
return true
}

@ConfigItem(
keyName = "trapOverlay",
name = "Show Trap Overlay",
description = "Enable/disable the highlighting of traps on Agility courses",
position = 11
)
fun showTrapOverlay(): Boolean {
return true
}

@get:ConfigItem(
keyName = "trapHighlight",
name = "Trap Overlay Color",
description = "Color of Agility trap overlay",
position = 12
)
@get:Alpha
val trapColor: Color?
get() = Color.RED

@ConfigItem(
keyName = "agilityArenaNotifier",
name = "Agility Arena notifier",
description = "Notify on ticket location change in Agility Arena",
position = 13
)
fun notifyAgilityArena(): Boolean {
return true
}

@ConfigItem(
keyName = "agilityArenaTimer",
name = "Agility Arena timer",
description = "Configures whether Agility Arena timer is displayed",
position = 14
)
fun showAgilityArenaTimer(): Boolean {
return true
}

@ConfigItem(
keyName = "highlightStick",
name = "Highlight Stick",
description = "Highlight the retrievable stick in the Werewolf Agility Course",
position = 15
)
fun highlightStick(): Boolean {
return true
}

@Alpha
@ConfigItem(
keyName = "stickHighlightColor",
name = "Stick Highlight Color",
description = "Color of highlighted stick",
position = 16
)
fun stickHighlightColor(): Color? {
return Color.RED
}

@ConfigItem(
keyName = "highlightSepulchreNpcs",
name = "Highlight Projectiles",
description = "Highlights arrows and swords in the Sepulchre",
position = 17,
section = sepulchreSection
)
fun highlightSepulchreNpcs(): Boolean {
return true
}

@Alpha
@ConfigItem(
keyName = "sepulchreHighlightColor",
name = "Projectile Color",
description = "Overlay color for arrows and swords",
position = 18,
section = sepulchreSection
)
fun sepulchreHighlightColor(): Color? {
return Color.GREEN
}

@ConfigItem(
keyName = "highlightSepulchreObstacles",
name = "Highlight Obstacles",
description = "Highlights pillars and stairs in the Sepulchre",
position = 19,
section = sepulchreSection
)
fun highlightSepulchreObstacles(): Boolean {
return true
}

@ConfigItem(
keyName = "highlightSepulchreSkilling",
name = "Highlight Skill Challenges",
description = "Highlights skilling challenges in the Sepulchre",
position = 20,
section = sepulchreSection
)
fun highlightSepulchreSkilling(): Boolean {
return true
}

companion object {
@ConfigSection(
name = "Hallowed Sepulchre",
description = "Settings for Hallowed Sepulchre highlights",
position = 17
)
const val sepulchreSection = "Hallowed Sepulchre"
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package hotlite.plugins.example

import com.google.inject.Inject
import com.google.inject.Provides
import net.runelite.api.events.GameTick
import net.runelite.client.config.ConfigManager
import net.runelite.client.eventbus.Subscribe
import net.runelite.client.plugins.Plugin
import net.runelite.client.plugins.PluginDescriptor

@PluginDescriptor(
name = "K-Example",
description = "Kotlin Example",
tags = ["kotlin"]
)
class ExamplePlugin : Plugin() {

@Subscribe
fun onGameTick(event: GameTick) {
println("Game Tick")
}

@Provides
fun getConfig(configManager: ConfigManager): ExampleConfig {
return configManager.getConfig(ExampleConfig::class.java)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,9 @@ public void loadCorePlugins() throws IOException, PluginInstantiationException
List<Class<?>> plugins = classPath.getTopLevelClassesRecursive(PLUGIN_PACKAGE).stream()
.map(ClassInfo::load)
.collect(Collectors.toList());
plugins.addAll(classPath.getTopLevelClassesRecursive("hotlite.plugins").stream()
.map(ClassInfo::load)
.collect(Collectors.toList()));
plugins.addAll(classPath.getTopLevelClassesRecursive("com.example").stream()
.map(ClassInfo::load)
.collect(Collectors.toList()));
Expand Down

0 comments on commit 637ffe9

Please sign in to comment.