Skip to content

Commit 2933cef

Browse files
authored
Merge pull request #19 from Avanatiker/feature/renderer
ESP
2 parents 0ec68c6 + 16d51be commit 2933cef

File tree

86 files changed

+1758
-445
lines changed

Some content is hidden

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

86 files changed

+1758
-445
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ private void injectQuickPerspectiveSwap(BlockView area, Entity focusedEntity, bo
4242

4343
@Inject(method = "clipToSpace", at = @At("HEAD"), cancellable = true)
4444
private void onClipToSpace(double desiredCameraDistance, CallbackInfoReturnable<Double> info) {
45-
if (CameraTweaks.getNoClipCam()) {
45+
if (CameraTweaks.INSTANCE.isEnabled() && CameraTweaks.getNoClipCam()) {
4646
info.setReturnValue(desiredCameraDistance);
4747
}
4848
}

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,44 @@
11
package com.lambda.mixin.render;
22

33
import com.lambda.command.CommandManager;
4+
import com.lambda.graphics.renderer.gui.font.FontRenderer;
5+
import com.lambda.graphics.renderer.gui.font.LambdaEmoji;
6+
import com.lambda.graphics.renderer.gui.font.glyph.GlyphInfo;
7+
import kotlin.Pair;
8+
import kotlin.ranges.IntRange;
49
import net.minecraft.client.gui.screen.ChatScreen;
510
import org.spongepowered.asm.mixin.Mixin;
611
import org.spongepowered.asm.mixin.injection.At;
712
import org.spongepowered.asm.mixin.injection.Inject;
13+
import org.spongepowered.asm.mixin.injection.ModifyArg;
814
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
915

16+
import java.util.Collections;
17+
import java.util.List;
18+
1019
@Mixin(ChatScreen.class)
1120
public abstract class ChatScreenMixin {
21+
@ModifyArg(method = "sendMessage", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayNetworkHandler;sendChatMessage(Ljava/lang/String;)V"), index = 0)
22+
private String modifyChatText(String chatText) {
23+
List<Pair<GlyphInfo, IntRange>> emojis = FontRenderer.Companion.parseEmojis(chatText, LambdaEmoji.Twemoji);
24+
Collections.reverse(emojis);
25+
26+
for (Pair<GlyphInfo, IntRange> emoji : emojis) {
27+
String emojiString = chatText.substring(emoji.getSecond().getStart() + 1, emoji.getSecond().getEndInclusive());
28+
if (LambdaEmoji.Twemoji.get(emojiString) == null)
29+
continue;
30+
31+
// Because the width of a char is bigger than an emoji
32+
// we can simply replace the matches string by a space
33+
// and render it after the text
34+
chatText = chatText.substring(0, emoji.getSecond().getStart()) + " " + chatText.substring(emoji.getSecond().getEndInclusive() + 1);
35+
36+
// TODO: Build a renderer for the emojis
37+
// TODO: Render the emojis at their correct position
38+
}
39+
40+
return chatText;
41+
}
1242

1343
@Inject(method = "sendMessage", at = @At("HEAD"), cancellable = true)
1444
void sendMessageInject(String chatText, boolean addToHistory, CallbackInfoReturnable<Boolean> cir) {

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,10 @@ import com.lambda.core.Loader
1010
import com.lambda.gui.impl.clickgui.windows.tag.CustomModuleWindow
1111
import com.lambda.gui.impl.clickgui.windows.tag.TagWindow
1212
import com.lambda.module.tag.ModuleTag
13+
import com.lambda.threading.runGameScheduled
1314
import com.lambda.util.KeyCode
1415
import com.mojang.authlib.GameProfile
16+
import com.mojang.blaze3d.systems.RenderSystem.recordRenderCall
1517
import net.minecraft.block.Block
1618
import net.minecraft.client.MinecraftClient
1719
import net.minecraft.util.math.BlockPos

common/src/main/kotlin/com/lambda/config/AbstractSetting.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.lambda.Lambda.gson
55
import com.lambda.context.SafeContext
66
import com.lambda.threading.runSafe
77
import com.lambda.util.Nameable
8+
import java.lang.reflect.Type
89
import kotlin.properties.Delegates
910
import kotlin.reflect.KProperty
1011

@@ -49,10 +50,12 @@ import kotlin.reflect.KProperty
4950
*
5051
* @property defaultValue The default value of the setting.
5152
* @property description A description of the setting.
53+
* @property type The type reflection of the setting.
5254
* @property visibility A function that determines whether the setting is visible.
5355
*/
5456
abstract class AbstractSetting<T : Any>(
5557
private val defaultValue: T,
58+
private val type: Type,
5659
val description: String,
5760
val visibility: () -> Boolean,
5861
) : Jsonable, Nameable {
@@ -74,10 +77,10 @@ abstract class AbstractSetting<T : Any>(
7477
}
7578

7679
override fun toJson(): JsonElement =
77-
gson.toJsonTree(value)
80+
gson.toJsonTree(value, type)
7881

7982
override fun loadFromJson(serialized: JsonElement) {
80-
value = gson.fromJson(serialized, value::class.java)
83+
value = gson.fromJson(serialized, type)
8184
}
8285

8386
fun onValueChange(block: SafeContext.(from: T, to: T) -> Unit) {
@@ -101,4 +104,4 @@ abstract class AbstractSetting<T : Any>(
101104
}
102105

103106
class ValueListener<T>(val requiresValueChange: Boolean, val execute: (from: T, to: T) -> Unit)
104-
}
107+
}

common/src/main/kotlin/com/lambda/config/Configuration.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,7 @@ abstract class Configuration : Jsonable {
131131
}
132132
.onFailure {
133133
val message = "Failed to save ${configName.capitalize()} config"
134+
LOG.error(message, it)
134135
logError(message)
135136
}
136137
}

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

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.lambda.config.serializer.gui
33
import com.google.gson.*
44
import com.lambda.gui.impl.clickgui.LambdaClickGui
55
import com.lambda.gui.impl.clickgui.windows.tag.TagWindow
6+
import com.lambda.gui.impl.hudgui.LambdaHudGui
67
import com.lambda.module.tag.ModuleTag
78
import com.lambda.util.math.Vec2d
89
import java.lang.reflect.Type
@@ -29,8 +30,16 @@ object TagWindowSerializer : JsonSerializer<TagWindow>, JsonDeserializer<TagWind
2930
json: JsonElement?,
3031
typeOfT: Type?,
3132
context: JsonDeserializationContext?,
32-
) = json?.asJsonObject?.let {
33-
TagWindow(ModuleTag(it["tag"].asString), LambdaClickGui).apply {
33+
) = json?.asJsonObject?.let {
34+
val tag = ModuleTag(it["tag"].asString)
35+
36+
val gui = when (tag) {
37+
in ModuleTag.defaults -> LambdaClickGui
38+
in ModuleTag.hudDefaults -> LambdaHudGui
39+
else -> return@let null
40+
}
41+
42+
TagWindow(tag, gui).apply {
3443
width = it["width"].asDouble
3544
height = it["height"].asDouble
3645
isOpen = it["isOpen"].asBoolean

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

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

3+
import com.google.gson.reflect.TypeToken
34
import com.lambda.config.AbstractSetting
45

56
/**
@@ -17,6 +18,7 @@ class CharSetting(
1718
visibility: () -> Boolean,
1819
) : AbstractSetting<Char>(
1920
defaultValue,
21+
TypeToken.get(Char::class.java).type,
2022
description,
2123
visibility
22-
)
24+
)

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

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

3+
import com.google.gson.reflect.TypeToken
34
import com.lambda.config.AbstractSetting
45
import java.text.NumberFormat
56
import java.util.*
@@ -26,6 +27,7 @@ abstract class NumericSetting<T>(
2627
val unit: String,
2728
) : AbstractSetting<T>(
2829
value,
30+
TypeToken.get(value::class.java).type,
2931
description,
3032
visibility
3133
) where T : Number, T : Comparable<T> {
@@ -36,4 +38,4 @@ abstract class NumericSetting<T>(
3638
override operator fun setValue(thisRef: Any?, property: KProperty<*>, valueIn: T) {
3739
value = valueIn.coerceIn(range)
3840
}
39-
}
41+
}

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

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

3+
import com.google.gson.reflect.TypeToken
34
import com.lambda.config.AbstractSetting
45

56
/**
@@ -17,6 +18,7 @@ class StringSetting(
1718
visibility: () -> Boolean,
1819
) : AbstractSetting<String>(
1920
defaultValue,
21+
TypeToken.get(String::class.java).type,
2022
description,
2123
visibility
22-
)
24+
)

common/src/main/kotlin/com/lambda/config/settings/collections/ListSetting.kt

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

33
import com.google.gson.JsonElement
4+
import com.google.gson.reflect.TypeToken
45
import com.lambda.Lambda.gson
56
import com.lambda.config.AbstractSetting
67
import java.lang.reflect.Type
@@ -13,6 +14,7 @@ class ListSetting<T : Any>(
1314
visibility: () -> Boolean,
1415
) : AbstractSetting<MutableList<T>>(
1516
defaultValue,
17+
type,
1618
description,
1719
visibility
1820
) {
@@ -21,7 +23,6 @@ class ListSetting<T : Any>(
2123
}
2224

2325
override fun toJson(): JsonElement {
24-
value = defaultValue // Hack the Delegates.observable
2526
return gson.toJsonTree(value)
2627
}
2728
}

0 commit comments

Comments
 (0)