Skip to content

Commit 95b91dd

Browse files
authored
Merge pull request #16 from Avanatiker/feature/plugin
Refactor!: Plugin architecture
2 parents 3db1e98 + 4c5993b commit 95b91dd

File tree

29 files changed

+222
-118
lines changed

29 files changed

+222
-118
lines changed

.gitignore

Lines changed: 47 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,50 @@
1+
.gradle
2+
build/
3+
!gradle/wrapper/gradle-wrapper.jar
4+
!**/src/main/**/build/
5+
!**/src/test/**/build/
6+
7+
### IntelliJ IDEA ###
8+
.idea/modules.xml
9+
.idea/jarRepositories.xml
10+
.idea/compiler.xml
11+
.idea/libraries/
112
.idea/
2-
.gradle/
13+
*.iws
14+
*.iml
15+
*.ipr
16+
out/
17+
!**/src/main/**/out/
18+
!**/src/test/**/out/
319

4-
build/
20+
### Eclipse ###
21+
.apt_generated
22+
.classpath
23+
.factorypath
24+
.project
25+
.settings
26+
.springBeans
27+
.sts4-cache
28+
bin/
29+
!**/src/main/**/bin/
30+
!**/src/test/**/bin/
31+
32+
### NetBeans ###
33+
/nbproject/private/
34+
/nbbuild/
35+
/dist/
36+
/nbdist/
37+
/.nb-gradle/
38+
39+
### VS Code ###
40+
.vscode/
41+
42+
### Mac OS ###
43+
.DS_Store
44+
45+
### Minecraft ###
546
run/
47+
logs/
48+
49+
### Architectury ###
50+
.architectury-transformer/

build.gradle.kts

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,11 @@ allprojects {
8080
apply(plugin = "maven-publish")
8181
apply(plugin = "org.jetbrains.kotlin.jvm")
8282

83-
base.archivesName.set(modId)
8483
group = mavenGroup
8584
version = modVersion
8685

86+
base.archivesName = modId
87+
8788
repositories {
8889
maven("https://api.modrinth.com/maven")
8990
maven("https://jitpack.io")
@@ -98,9 +99,7 @@ allprojects {
9899
}
99100

100101
java {
101-
// Uncomment these lines when the plugin system is ready
102-
// withSourcesJar()
103-
// withJavadocJar()
102+
withSourcesJar()
104103

105104
sourceCompatibility = JavaVersion.VERSION_17
106105
targetCompatibility = JavaVersion.VERSION_17

common/build.gradle.kts

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
val fabricLoaderVersion = property("fabric_loader_version").toString()
2-
val mixinExtrasVersion = property("mixinextras_version").toString()
32
val kotlinVersion = property("kotlin_version").toString()
43
val kotlinxCoroutinesVersion = property("kotlinx_coroutines_version").toString()
54

@@ -24,16 +23,9 @@ dependencies {
2423

2524
// Add Kotlin
2625
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:$kotlinxCoroutinesVersion")
26+
implementation(kotlin("reflect"))
2727

2828
// Baritone
2929
modImplementation("baritone-api:baritone-api:1.10.2")
3030
modImplementation("baritone-api:baritone-unoptimized-fabric:1.10.2")
3131
}
32-
33-
tasks {
34-
// Prevent recursive libraries
35-
remapJar {
36-
enabled = false
37-
}
38-
}
39-

common/src/main/kotlin/com/lambda/command/CommandManager.kt

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
package com.lambda.command
22

3-
import com.lambda.core.Loadable
43
import com.lambda.brigadier.CommandException
5-
import com.lambda.brigadier.register
6-
import com.lambda.config.Configurable
7-
import com.lambda.config.configurations.LambdaConfig
4+
import com.lambda.command.CommandRegistry.prefix
85
import com.lambda.context.SafeContext
96
import com.lambda.threading.runSafe
107
import com.lambda.util.Communication
@@ -13,26 +10,17 @@ import com.lambda.util.text.*
1310
import com.lambda.util.text.ClickEvents.suggestCommand
1411
import com.mojang.brigadier.CommandDispatcher
1512
import com.mojang.brigadier.StringReader
16-
import com.mojang.brigadier.builder.LiteralArgumentBuilder
1713
import com.mojang.brigadier.exceptions.CommandSyntaxException
1814
import net.minecraft.command.CommandSource
19-
import org.reflections.Reflections
20-
import org.reflections.scanners.Scanners
21-
import org.reflections.util.ClasspathHelper
22-
import org.reflections.util.ConfigurationBuilder
2315
import java.awt.Color
2416
import kotlin.math.max
2517
import kotlin.math.min
2618

2719

28-
object CommandManager : Configurable(LambdaConfig), Loadable {
29-
override val name = "command"
30-
31-
val prefix by setting("prefix", ';')
20+
object CommandManager {
21+
private const val ERROR_PADDING = 10
3222

33-
val commands = mutableSetOf<LambdaCommand>()
3423
val dispatcher by lazy { CommandDispatcher<CommandSource>() }
35-
private const val ERROR_PADDING = 10
3624

3725
fun executeCommand(command: String) {
3826
runSafe {
@@ -103,23 +91,4 @@ object CommandManager : Configurable(LambdaConfig), Loadable {
10391
}
10492
})
10593
}
106-
107-
override fun load(): String {
108-
Reflections(
109-
ConfigurationBuilder()
110-
.forPackage("com.lambda.command.commands")
111-
.setScanners(Scanners.SubTypes)
112-
).getSubTypesOf(LambdaCommand::class.java).forEach { commandClass ->
113-
commandClass.declaredFields.find {
114-
it.name == "INSTANCE"
115-
}?.apply {
116-
isAccessible = true
117-
(get(null) as? LambdaCommand)?.let { command ->
118-
commands.add(command)
119-
}
120-
}
121-
}
122-
123-
return "Registered ${commands.size} commands"
124-
}
12594
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.lambda.command
2+
3+
import com.lambda.config.Configurable
4+
import com.lambda.config.configurations.LambdaConfig
5+
import com.lambda.core.Loadable
6+
import org.reflections.Reflections
7+
import org.reflections.scanners.Scanners
8+
import org.reflections.util.ConfigurationBuilder
9+
10+
object CommandRegistry : Configurable(LambdaConfig), Loadable {
11+
override val name = "command"
12+
13+
val prefix by setting("prefix", ';')
14+
val commands = mutableSetOf<LambdaCommand>()
15+
16+
private val paths = mutableSetOf("com.lambda.command.commands")
17+
18+
fun injectPath(path: String) = paths.add(path)
19+
20+
override fun load(): String {
21+
Reflections(
22+
ConfigurationBuilder()
23+
.forPackages(*paths.toTypedArray())
24+
.setScanners(Scanners.SubTypes)
25+
).getSubTypesOf(LambdaCommand::class.java).forEach { commandClass ->
26+
commandClass.declaredFields.find {
27+
it.name == "INSTANCE"
28+
}?.apply {
29+
isAccessible = true
30+
(get(null) as? LambdaCommand)?.let { command ->
31+
commands.add(command)
32+
}
33+
}
34+
}
35+
36+
return "Registered ${commands.size} commands"
37+
}
38+
}

common/src/main/kotlin/com/lambda/command/commands/ConfigCommand.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,4 @@ object ConfigCommand : LambdaCommand(
2929
}
3030
}
3131
}
32-
}
32+
}

common/src/main/kotlin/com/lambda/command/commands/ModuleCommand.kt

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,9 @@ import com.lambda.brigadier.argument.boolean
66
import com.lambda.brigadier.argument.string
77
import com.lambda.brigadier.argument.value
88
import com.lambda.brigadier.executeWithResult
9-
import com.lambda.brigadier.get
109
import com.lambda.brigadier.optional
1110
import com.lambda.brigadier.required
12-
import com.lambda.command.CommandManager.prefix
11+
import com.lambda.command.CommandRegistry.prefix
1312
import com.lambda.command.LambdaCommand
1413
import com.lambda.module.ModuleRegistry
1514
import com.lambda.threading.runSafe
@@ -131,4 +130,4 @@ object ModuleCommand : LambdaCommand(
131130
}
132131
}
133132
}
134-
}
133+
}

common/src/main/kotlin/com/lambda/command/commands/ReplayCommand.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ object ReplayCommand : LambdaCommand(
2727
required(greedyString("replay filepath")) { replayName ->
2828
suggests { _, builder ->
2929
val dir = FolderRegister.replay
30-
dir.listRecursive().forEach {
30+
dir.listRecursive { it.isFile }.forEach {
3131
builder.suggest(it.relativeTo(dir).path)
3232
}
3333
builder.buildFuture()
@@ -67,4 +67,4 @@ object ReplayCommand : LambdaCommand(
6767
}
6868
}
6969
}
70-
}
70+
}

common/src/main/kotlin/com/lambda/core/Loader.kt

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,27 @@ package com.lambda.core
22

33
import com.lambda.Lambda
44
import com.lambda.Lambda.LOG
5-
import com.lambda.command.CommandManager
5+
import com.lambda.command.CommandRegistry
6+
import com.lambda.friend.FriendRegistry
67
import com.lambda.graphics.renderer.gui.font.LambdaFont
78
import com.lambda.gui.GuiConfigurable
89
import com.lambda.interaction.PlayerPacketManager
910
import com.lambda.interaction.RotationManager
1011
import com.lambda.module.ModuleRegistry
12+
import com.lambda.sound.SoundRegistry
1113
import com.lambda.util.Communication.ascii
1214
import kotlin.system.measureTimeMillis
1315

1416
object Loader {
1517
private val loadables = listOf(
1618
ModuleRegistry,
17-
CommandManager,
19+
CommandRegistry,
1820
RotationManager,
1921
PlayerPacketManager,
2022
LambdaFont.Loader,
2123
GuiConfigurable,
22-
FriendManager,
23-
SoundManager,
24+
FriendRegistry,
25+
SoundRegistry,
2426
)
2527

2628
fun initialize() {

common/src/main/kotlin/com/lambda/core/FriendManager.kt renamed to common/src/main/kotlin/com/lambda/friend/FriendManager.kt

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,11 @@
1-
package com.lambda.core
1+
package com.lambda.friend
22

3-
import com.lambda.config.Configurable
4-
import com.lambda.config.configurations.FriendConfig
3+
import com.lambda.friend.FriendRegistry.friends
54
import com.mojang.authlib.GameProfile
65
import net.minecraft.server.network.ServerPlayerEntity
76
import java.util.UUID
87

9-
object FriendManager : Configurable(FriendConfig), Loadable {
10-
override val name = "FriendManager"
11-
12-
private var friends by setting("friends", listOf<GameProfile>())
13-
8+
object FriendManager {
149
fun add(profile: GameProfile) = friends.add(profile)
1510

1611
fun remove(profile: GameProfile) = friends.remove(profile)
@@ -29,10 +24,4 @@ object FriendManager : Configurable(FriendConfig), Loadable {
2924

3025
fun ServerPlayerEntity.befriend() = add(gameProfile)
3126
fun ServerPlayerEntity.unfriend() = remove(gameProfile)
32-
33-
override fun load(): String {
34-
if (friends.isEmpty()) return "No friends loaded, you don't have to be antisocial online too,"
35-
val word = if (friends.size == 1) "friend" else "friends"
36-
return "Loaded ${friends.size} $word."
37-
}
3827
}

0 commit comments

Comments
 (0)