Skip to content

Commit 4cab978

Browse files
committed
Merge branch 'feature/renderer'
2 parents 8b60754 + b9bfa68 commit 4cab978

File tree

119 files changed

+2771
-753
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

119 files changed

+2771
-753
lines changed

common/src/main/java/com/lambda/mixin/render/GameRendererMixin.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import com.lambda.event.EventFlow;
44
import com.lambda.event.events.RenderEvent;
5+
import com.lambda.graphics.RenderMain;
56
import net.minecraft.client.render.GameRenderer;
7+
import net.minecraft.client.util.math.MatrixStack;
68
import org.spongepowered.asm.mixin.Mixin;
79
import org.spongepowered.asm.mixin.injection.At;
810
import org.spongepowered.asm.mixin.injection.Inject;
@@ -16,4 +18,9 @@ private void updateTargetedEntityInvoke(float tickDelta, CallbackInfo info) {
1618
info.cancel();
1719
}
1820
}
21+
22+
@Inject(method = "renderWorld", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/WorldRenderer;render(Lnet/minecraft/client/util/math/MatrixStack;FJZLnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/GameRenderer;Lnet/minecraft/client/render/LightmapTextureManager;Lorg/joml/Matrix4f;)V", shift = At.Shift.AFTER))
23+
private void onRenderWorld(float tickDelta, long limitTime, MatrixStack matrix, CallbackInfo ci) {
24+
RenderMain.render3D(matrix.peek().getPositionMatrix());
25+
}
1926
}

common/src/main/kotlin/com/lambda/Lambda.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ package com.lambda
33
import com.google.gson.Gson
44
import com.google.gson.GsonBuilder
55
import com.lambda.config.serializer.*
6+
import com.lambda.config.serializer.gui.CustomModuleWindowSerializer
67
import com.lambda.config.serializer.gui.ModuleTagSerializer
78
import com.lambda.config.serializer.gui.TagWindowSerializer
89
import com.lambda.core.Loader
9-
import com.lambda.gui.impl.clickgui.windows.TagWindow
10+
import com.lambda.gui.impl.clickgui.windows.tag.CustomModuleWindow
11+
import com.lambda.gui.impl.clickgui.windows.tag.TagWindow
1012
import com.lambda.module.tag.ModuleTag
1113
import com.lambda.util.KeyCode
1214
import com.mojang.authlib.GameProfile
@@ -28,6 +30,7 @@ object Lambda {
2830
val gson: Gson = GsonBuilder()
2931
.setPrettyPrinting()
3032
.registerTypeAdapter(ModuleTag::class.java, ModuleTagSerializer)
33+
.registerTypeAdapter(CustomModuleWindow::class.java, CustomModuleWindowSerializer)
3134
.registerTypeAdapter(TagWindow::class.java, TagWindowSerializer)
3235
.registerTypeAdapter(KeyCode::class.java, KeyCodeSerializer)
3336
.registerTypeAdapter(Color::class.java, ColorSerializer)

common/src/main/kotlin/com/lambda/config/configurations/GuiConfig.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ import com.lambda.util.FolderRegister
66
object GuiConfig : Configuration() {
77
override val configName = "gui"
88
override val primary = FolderRegister.config.resolve("$configName.json")
9-
}
9+
}
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package com.lambda.config.serializer.gui
2+
3+
import com.google.gson.*
4+
import com.lambda.gui.impl.clickgui.LambdaClickGui
5+
import com.lambda.gui.impl.clickgui.windows.tag.CustomModuleWindow
6+
import com.lambda.module.ModuleRegistry
7+
import com.lambda.util.math.Vec2d
8+
import java.lang.reflect.Type
9+
10+
object CustomModuleWindowSerializer : JsonSerializer<CustomModuleWindow>, JsonDeserializer<CustomModuleWindow> {
11+
override fun serialize(
12+
src: CustomModuleWindow?,
13+
typeOfSrc: Type?,
14+
context: JsonSerializationContext?,
15+
): JsonElement = src?.let {
16+
JsonObject().apply {
17+
addProperty("title", it.title)
18+
add("modules", JsonArray().apply {
19+
it.modules.forEach {
20+
add(it.name)
21+
}
22+
})
23+
addProperty("width", it.width)
24+
addProperty("height", it.height)
25+
addProperty("isOpen", it.isOpen)
26+
add("position", JsonArray().apply {
27+
add(it.position.x)
28+
add(it.position.y)
29+
})
30+
}
31+
} ?: JsonNull.INSTANCE
32+
33+
override fun deserialize(
34+
json: JsonElement?,
35+
typeOfT: Type?,
36+
context: JsonDeserializationContext?,
37+
) = json?.asJsonObject?.let {
38+
CustomModuleWindow(
39+
it["title"].asString,
40+
it["modules"].asJsonArray.mapNotNull { name ->
41+
ModuleRegistry.modules.firstOrNull { module ->
42+
module.name == name.asString
43+
}
44+
} as MutableList,
45+
LambdaClickGui
46+
).apply {
47+
width = it["width"].asDouble
48+
height = it["height"].asDouble
49+
isOpen = it["isOpen"].asBoolean
50+
position = Vec2d(
51+
it["position"].asJsonArray[0].asDouble,
52+
it["position"].asJsonArray[1].asDouble
53+
)
54+
}
55+
} ?: throw JsonParseException("Invalid window data")
56+
}

common/src/main/kotlin/com/lambda/config/serializer/gui/TagWindowSerializer.kt

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
package com.lambda.config.serializer.gui
22

33
import com.google.gson.*
4-
import com.lambda.gui.impl.clickgui.windows.TagWindow
4+
import com.lambda.gui.impl.clickgui.LambdaClickGui
5+
import com.lambda.gui.impl.clickgui.windows.tag.TagWindow
56
import com.lambda.module.tag.ModuleTag
67
import com.lambda.util.math.Vec2d
78
import java.lang.reflect.Type
@@ -13,12 +14,7 @@ object TagWindowSerializer : JsonSerializer<TagWindow>, JsonDeserializer<TagWind
1314
context: JsonSerializationContext?,
1415
): JsonElement = src?.let {
1516
JsonObject().apply {
16-
addProperty("title", it.title)
17-
add("tags", JsonArray().apply {
18-
it.tags.forEach { tag ->
19-
add(tag.name)
20-
}
21-
})
17+
addProperty("tag", it.tag.name)
2218
addProperty("width", it.width)
2319
addProperty("height", it.height)
2420
addProperty("isOpen", it.isOpen)
@@ -33,15 +29,10 @@ object TagWindowSerializer : JsonSerializer<TagWindow>, JsonDeserializer<TagWind
3329
json: JsonElement?,
3430
typeOfT: Type?,
3531
context: JsonDeserializationContext?,
36-
) = json?.asJsonObject?.let {
37-
TagWindow(
38-
tags = it["tags"].asJsonArray.map { tag ->
39-
ModuleTag(tag.asString)
40-
}.toSet(),
41-
title = it["title"].asString,
42-
width = it["width"].asDouble,
32+
) = json?.asJsonObject?.let {
33+
TagWindow(ModuleTag(it["tag"].asString), LambdaClickGui).apply {
34+
width = it["width"].asDouble
4335
height = it["height"].asDouble
44-
).apply {
4536
isOpen = it["isOpen"].asBoolean
4637
position = Vec2d(
4738
it["position"].asJsonArray[0].asDouble,

common/src/main/kotlin/com/lambda/config/settings/NumericSetting.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,6 @@ abstract class NumericSetting<T>(
3131
override fun toString() = "$value$unit"
3232

3333
override operator fun setValue(thisRef: Any?, property: KProperty<*>, valueIn: T) {
34-
value = valueIn.coerceIn(range).roundToStep(step)
34+
value = valueIn.coerceIn(range)
3535
}
3636
}

common/src/main/kotlin/com/lambda/config/settings/comparable/EnumSetting.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.lambda.config.settings.comparable
22

33
import com.lambda.config.AbstractSetting
4+
import com.lambda.util.Nameable
5+
import java.util.*
46

57
class EnumSetting<T : Enum<T>>(
68
override val name: String,
@@ -12,7 +14,13 @@ class EnumSetting<T : Enum<T>>(
1214
description,
1315
visibility,
1416
) {
15-
private val enumValues: Array<T> = defaultValue.declaringJavaClass.enumConstants
17+
val displayValue get() = (value as? Nameable)?.name ?: value.name.split('_').joinToString(" ") { low ->
18+
low.lowercase().replaceFirstChar {
19+
if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString()
20+
}
21+
}
22+
23+
val enumValues: Array<T> = defaultValue.declaringJavaClass.enumConstants
1624

1725
fun next() {
1826
value = enumValues[((value.ordinal + 1) % enumValues.size)]
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.lambda.core
2+
3+
import com.lambda.core.SoundManager.toIdentifier
4+
import net.minecraft.sound.SoundEvent
5+
import net.minecraft.util.Identifier
6+
7+
enum class LambdaSound(val id: Identifier) {
8+
BUTTON_CLICK("button_click".toIdentifier()),
9+
10+
BOOLEAN_SETTING_ON("bool_on".toIdentifier()),
11+
BOOLEAN_SETTING_OFF("bool_off".toIdentifier()),
12+
13+
MODULE_ON("module_on".toIdentifier()),
14+
MODULE_OFF("module_off".toIdentifier()),
15+
16+
SETTINGS_OPEN("settings_open".toIdentifier()),
17+
SETTINGS_CLOSE("settings_close".toIdentifier());
18+
19+
val event: SoundEvent = SoundEvent.of(id)
20+
}

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import com.lambda.Lambda
44
import com.lambda.Lambda.LOG
55
import com.lambda.command.CommandManager
66
import com.lambda.graphics.renderer.gui.font.LambdaFont
7-
import com.lambda.gui.impl.clickgui.GuiConfigurable
7+
import com.lambda.gui.GuiConfigurable
88
import com.lambda.interaction.PlayerPacketManager
99
import com.lambda.interaction.RotationManager
1010
import com.lambda.module.ModuleRegistry
@@ -20,6 +20,7 @@ object Loader {
2020
LambdaFont.Loader,
2121
GuiConfigurable,
2222
FriendManager,
23+
SoundManager,
2324
)
2425

2526
fun initialize() {
@@ -28,7 +29,7 @@ object Loader {
2829

2930
val initTime = measureTimeMillis {
3031
loadables.forEach { loadable ->
31-
var info: String
32+
val info: String
3233
val phaseTime = measureTimeMillis {
3334
info = loadable.load()
3435
}
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
package com.lambda.core
2+
3+
import com.lambda.Lambda
4+
import com.lambda.Lambda.mc
5+
import com.lambda.util.math.random
6+
import net.minecraft.client.sound.PositionedSoundInstance
7+
import net.minecraft.registry.Registries
8+
import net.minecraft.registry.Registry
9+
import net.minecraft.sound.SoundEvent
10+
import net.minecraft.util.Identifier
11+
12+
object SoundManager : Loadable {
13+
14+
override fun load(): String {
15+
LambdaSound.entries.forEach {
16+
Registry.register(Registries.SOUND_EVENT, it.id, it.event)
17+
}
18+
19+
return "Loaded ${LambdaSound.entries.size} sounds"
20+
}
21+
22+
fun playSound(event: SoundEvent, pitch: Double = 1.0) {
23+
mc.soundManager.play(
24+
PositionedSoundInstance.master(event, pitch.toFloat())
25+
)
26+
}
27+
28+
fun playSoundRandomly(event: SoundEvent, pitch: Double = 1.0, pitchRange: Double = 0.05) {
29+
val actualPitch = (pitch - pitchRange..pitch + pitchRange).random()
30+
31+
mc.soundManager.play(
32+
PositionedSoundInstance.master(event, actualPitch.toFloat())
33+
)
34+
}
35+
36+
fun String.toIdentifier() = Identifier(Lambda.MOD_ID, this)
37+
}

0 commit comments

Comments
 (0)