From 8d77b262721ac0141f3adea503b2f1acceb17366 Mon Sep 17 00:00:00 2001 From: I-No-oNe Date: Mon, 3 Nov 2025 19:54:09 +0200 Subject: [PATCH 1/4] Fixed SelfGlow and improved scripts interactions --- .../itzispyder/clickcrystals/ClickCrystals.java | 2 +- .../clickcrystals/mixins/MixinEntity.java | 17 ++++++++++++++++- .../mixins/MixinFlyingItemEntityRenderer.java | 2 +- .../mixins/MixinLightmapTextureManager.java | 2 +- .../mixins/MixinMinecraftClient.java | 16 +++++++++++----- .../mixins/MixinWorldRenderer.java | 14 -------------- .../modules/modules/anchoring/BowSwap.java | 2 +- .../modules/modules/clickcrystals/SelfGlow.java | 7 +++---- .../scripting/syntax/macros/InteractCmd.java | 13 +++++++++++-- 9 files changed, 45 insertions(+), 30 deletions(-) diff --git a/src/main/java/io/github/itzispyder/clickcrystals/ClickCrystals.java b/src/main/java/io/github/itzispyder/clickcrystals/ClickCrystals.java index bc5517b8..da2b0c1f 100644 --- a/src/main/java/io/github/itzispyder/clickcrystals/ClickCrystals.java +++ b/src/main/java/io/github/itzispyder/clickcrystals/ClickCrystals.java @@ -279,7 +279,7 @@ public void initModules() { // client system.addModule(new AutoDisconnect()); -// system.addModule(new SelfGlow()); + system.addModule(new SelfGlow()); system.addModule(new GuiBorders()); system.addModule(new InGameHuds()); system.addModule(new SilkTouch()); diff --git a/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinEntity.java b/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinEntity.java index 61731ce3..f42d7df6 100644 --- a/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinEntity.java +++ b/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinEntity.java @@ -1,6 +1,8 @@ package io.github.itzispyder.clickcrystals.mixins; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import io.github.itzispyder.clickcrystals.modules.Module; +import io.github.itzispyder.clickcrystals.modules.modules.clickcrystals.SelfGlow; import io.github.itzispyder.clickcrystals.modules.modules.rendering.SpectatorSight; import net.minecraft.entity.Entity; import net.minecraft.entity.player.PlayerEntity; @@ -9,6 +11,8 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import static io.github.itzispyder.clickcrystals.Global.mc; + @Mixin(Entity.class) public abstract class MixinEntity { @@ -16,8 +20,19 @@ public abstract class MixinEntity { private void overrideIsInvisibleToPlayer(PlayerEntity player, CallbackInfoReturnable cir) { SpectatorSight ss = Module.get(SpectatorSight.class); - if (ss.isEnabled() && ss.canRender((Entity)(Object)this)) { + if (ss.isEnabled() && ss.canRender((Entity) (Object) this)) { cir.setReturnValue(false); } } + + @ModifyReturnValue(method = "getTeamColorValue", at = @At("RETURN")) + private int modifyGetTeamColorValue(int original) { + + SelfGlow self = Module.get(SelfGlow.class); + + if (self == null || !self.isEnabled() || ((Object) this) != mc.player) + return original; + + return self.glowColor.getVal().getRGBA(); + } } diff --git a/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinFlyingItemEntityRenderer.java b/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinFlyingItemEntityRenderer.java index de2a2885..62ce4847 100644 --- a/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinFlyingItemEntityRenderer.java +++ b/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinFlyingItemEntityRenderer.java @@ -31,7 +31,7 @@ public void renderUpdated(FlyingItemEntityRenderState flyingItemEntityRenderStat PearlCustomizer pc = Module.get(PearlCustomizer.class); Entity entity = EntityUtils.getRenderStateOwner(flyingItemEntityRenderState); - if (!pc.isEnabled()) + if (pc == null || !pc.isEnabled()) return; if (!(entity instanceof EnderPearlEntity pearl)) diff --git a/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinLightmapTextureManager.java b/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinLightmapTextureManager.java index c873e669..446def0b 100644 --- a/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinLightmapTextureManager.java +++ b/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinLightmapTextureManager.java @@ -22,7 +22,7 @@ public abstract class MixinLightmapTextureManager implements Global { @Inject(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiler/Profiler;push(Ljava/lang/String;)V", shift = At.Shift.AFTER), cancellable = true) private void onUpdate(float tickProgress, CallbackInfo ci, @Local Profiler profiler) { - if (Module.get(FullBright.class).isEnabled()) { + if (Module.isEnabled(FullBright.class)) { RenderSystem.getDevice().createCommandEncoder().clearColorTexture(this.glTexture, 0xFFFFFFFF); profiler.pop(); ci.cancel(); diff --git a/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinMinecraftClient.java b/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinMinecraftClient.java index 3deb164d..08ac9fcf 100644 --- a/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinMinecraftClient.java +++ b/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinMinecraftClient.java @@ -1,13 +1,17 @@ package io.github.itzispyder.clickcrystals.mixins; +import com.llamalad7.mixinextras.injector.ModifyReturnValue; import io.github.itzispyder.clickcrystals.Global; import io.github.itzispyder.clickcrystals.events.events.client.PlayerAttackEntityEvent; import io.github.itzispyder.clickcrystals.events.events.client.SetScreenEvent; import io.github.itzispyder.clickcrystals.events.events.networking.GameLeaveEvent; import io.github.itzispyder.clickcrystals.interfaces.AccessorMinecraftClient; +import io.github.itzispyder.clickcrystals.modules.Module; +import io.github.itzispyder.clickcrystals.modules.modules.clickcrystals.SelfGlow; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.screen.Screen; import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityType; import net.minecraft.text.Text; import org.jetbrains.annotations.Nullable; import org.spongepowered.asm.mixin.Mixin; @@ -66,9 +70,11 @@ public void inputUse() { this.doItemUse(); } -// @Inject(method = "hasOutline", at = @At("HEAD"), cancellable = true) -// private void outlineEntities(Entity entity, CallbackInfoReturnable ci) { -// if (entity instanceof ClientPlayerEntity && Module.isEnabled(SelfGlow.class)) -// ci.setReturnValue(true); -// } + + @ModifyReturnValue(method = "hasOutline", at = @At("RETURN")) + private boolean hasOutline(boolean original, Entity entity) { + if (mc == null) return original; + SelfGlow selfGlow = Module.get(SelfGlow.class); + return selfGlow != null ? selfGlow.isEnabled() && entity.getType() == EntityType.PLAYER : original; + } } diff --git a/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinWorldRenderer.java b/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinWorldRenderer.java index ced9b60e..810dfeec 100644 --- a/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinWorldRenderer.java +++ b/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinWorldRenderer.java @@ -36,20 +36,6 @@ public void setOutlineColor(Args args) { } } -// @Inject(method = "renderEntity", at = @At("HEAD")) -// private void onRenderEntity(Entity entity, double cameraX, double cameraY, double cameraZ, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, CallbackInfo ci) { -// if (!(entity instanceof ClientPlayerEntity && vertexConsumers instanceof OutlineVertexConsumerProvider outlineConsumers)) -// return; -// -// SelfGlow selfGlow = Module.get(SelfGlow.class); -// -// if (selfGlow.isEnabled()) { -// SelfGlow.Color glowColor = selfGlow.glowColor.getVal(); -// int[] rgba = glowColor.getRGBA(); -// outlineConsumers.setColor(rgba[0], rgba[1], rgba[2], rgba[3]); -// } -// } - @Inject(method = "render", at = @At("TAIL")) public void render(ObjectAllocator allocator, RenderTickCounter tickCounter, boolean renderBlockOutline, Camera camera, Matrix4f positionMatrix, Matrix4f matrix4f, Matrix4f projectionMatrix, GpuBufferSlice fogBuffer, Vector4f fogColor, boolean renderSky, CallbackInfo ci) { RenderWorldEvent event = new RenderWorldEvent(mc.gameRenderer, positionMatrix, projectionMatrix, tickCounter); diff --git a/src/main/java/io/github/itzispyder/clickcrystals/modules/modules/anchoring/BowSwap.java b/src/main/java/io/github/itzispyder/clickcrystals/modules/modules/anchoring/BowSwap.java index f42026d3..59e4e437 100644 --- a/src/main/java/io/github/itzispyder/clickcrystals/modules/modules/anchoring/BowSwap.java +++ b/src/main/java/io/github/itzispyder/clickcrystals/modules/modules/anchoring/BowSwap.java @@ -47,7 +47,7 @@ protected void onDisable() { Module.acceptFor(TntSwap.class, tntSwap -> tntSwap.remove(postAction)); } - /* + /* @improperIssues TODO? @EventHandler private void onInteract(PacketSendEvent e) { if (e.getPacket() instanceof PlayerInteractBlockC2SPacket packet) { diff --git a/src/main/java/io/github/itzispyder/clickcrystals/modules/modules/clickcrystals/SelfGlow.java b/src/main/java/io/github/itzispyder/clickcrystals/modules/modules/clickcrystals/SelfGlow.java index 027f49be..ac582c0b 100644 --- a/src/main/java/io/github/itzispyder/clickcrystals/modules/modules/clickcrystals/SelfGlow.java +++ b/src/main/java/io/github/itzispyder/clickcrystals/modules/modules/clickcrystals/SelfGlow.java @@ -5,7 +5,6 @@ import io.github.itzispyder.clickcrystals.modules.modules.DummyModule; import io.github.itzispyder.clickcrystals.modules.settings.SettingSection; -// NOTICE: Module pause development until rendering issue is resolved @I-No-One public class SelfGlow extends DummyModule { private final SettingSection scGeneral = getGeneralSection(); @@ -43,8 +42,8 @@ public enum Color { this.alpha = alpha; } - public int[] getRGBA() { - return new int[]{red, green, blue, alpha}; + public int getRGBA() { + return ((alpha & 0xFF) << 24) | ((red & 0xFF) << 16) | ((green & 0xFF) << 8) | (blue & 0xFF); } } -} +} \ No newline at end of file diff --git a/src/main/java/io/github/itzispyder/clickcrystals/scripting/syntax/macros/InteractCmd.java b/src/main/java/io/github/itzispyder/clickcrystals/scripting/syntax/macros/InteractCmd.java index 6ef15c6e..412aede8 100644 --- a/src/main/java/io/github/itzispyder/clickcrystals/scripting/syntax/macros/InteractCmd.java +++ b/src/main/java/io/github/itzispyder/clickcrystals/scripting/syntax/macros/InteractCmd.java @@ -11,6 +11,7 @@ import net.minecraft.entity.Entity; import net.minecraft.util.Hand; import net.minecraft.util.hit.BlockHitResult; +import net.minecraft.util.hit.EntityHitResult; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; import net.minecraft.util.math.Vec3d; @@ -37,11 +38,19 @@ public void onCommand(ScriptCommand command, String line, ScriptArgs args) { switch (read.next(TargetType.class)) { case NEAREST_ENTITY -> { Predicate filter = ScriptParser.parseEntityPredicate(read.nextStr()); - PlayerUtils.runOnNearestEntity(128, filter, entity -> mc.interactionManager.interactEntity(mc.player, entity, Hand.MAIN_HAND)); + PlayerUtils.runOnNearestEntity(128, filter, entity -> { + EntityHitResult hitResult = new EntityHitResult(entity, entity.getBoundingBox().getCenter()); + mc.interactionManager.interactEntityAtLocation(mc.player, entity, hitResult, Hand.MAIN_HAND); + mc.interactionManager.interactEntity(mc.player, entity, Hand.MAIN_HAND); + }); read.executeThenChain(); } case ANY_ENTITY -> { - PlayerUtils.runOnNearestEntity(128, DamageCmd.ENTITY_EXISTS, entity -> mc.interactionManager.interactEntity(mc.player, entity, Hand.MAIN_HAND)); + PlayerUtils.runOnNearestEntity(128, DamageCmd.ENTITY_EXISTS, entity -> { + EntityHitResult hitResult = new EntityHitResult(entity, entity.getBoundingBox().getCenter()); + mc.interactionManager.interactEntityAtLocation(mc.player, entity, hitResult, Hand.MAIN_HAND); + mc.interactionManager.interactEntity(mc.player, entity, Hand.MAIN_HAND); + }); read.executeThenChain(); } case NEAREST_BLOCK -> { From 68a47cb804a790aa0beaadd90f5a2d9b71f01a85 Mon Sep 17 00:00:00 2001 From: I-No-oNe Date: Mon, 3 Nov 2025 20:13:35 +0200 Subject: [PATCH 2/4] Fixed toggled messages not working --- .../commands/commands/ToggleCommand.java | 14 +++++++------- .../itzispyder/clickcrystals/modules/Module.java | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/io/github/itzispyder/clickcrystals/commands/commands/ToggleCommand.java b/src/main/java/io/github/itzispyder/clickcrystals/commands/commands/ToggleCommand.java index ec009454..16a2b870 100644 --- a/src/main/java/io/github/itzispyder/clickcrystals/commands/commands/ToggleCommand.java +++ b/src/main/java/io/github/itzispyder/clickcrystals/commands/commands/ToggleCommand.java @@ -10,7 +10,7 @@ public class ToggleCommand extends Command { - public static boolean used = false; + public static boolean active = false; public ToggleCommand() { super("toggle","§7Toggles the modules from this mod. THIS CAN ALSO BE DONE VIA GUI MENU, PRESS YOUR §l§oAPOSTROPHE §7KEY!",",toggle [on|off|help]","t"); @@ -28,27 +28,27 @@ public void build(LiteralArgumentBuilder builder) { for (Module m: system.collectModules()) if (m.getClass() != SilkTouch.class) m.setEnabled(true, false); - used = true; + active = true; info("&bToggled all modules on"); - used = false; + active = false; return SINGLE_SUCCESS; })) .then(literal("off") .executes(context -> { for (Module m: system.collectModules()) m.setEnabled(false, false); - used = true; + active = true; info("&7Toggled all modules off"); - used = false; + active = false; return SINGLE_SUCCESS; })) .executes(context -> { for (Module m: system.collectModules()) if (m.getClass() != SilkTouch.class) m.setEnabled(!m.isEnabled(), false); - used = true; + active = true; info("&bToggled all modules (on -> off, off -> on)"); - used = false; + active = false; return SINGLE_SUCCESS; })) .then(argument("module", ModuleArgumentType.create()) diff --git a/src/main/java/io/github/itzispyder/clickcrystals/modules/Module.java b/src/main/java/io/github/itzispyder/clickcrystals/modules/Module.java index 1e221996..c379d2a6 100644 --- a/src/main/java/io/github/itzispyder/clickcrystals/modules/Module.java +++ b/src/main/java/io/github/itzispyder/clickcrystals/modules/Module.java @@ -108,7 +108,7 @@ public String getHelp() { } public void sendUpdateInfo() { - if (!ClickCrystals.config.isDisableModuleToggleBroadcast() || !ToggleCommand.used) + if (!ClickCrystals.config.isDisableModuleToggleBroadcast() && ToggleCommand.active) ChatUtils.sendPrefixMessage("§b" + name + " §3is now toggled " + getOnOrOff()); } From 7fa43dddb26f10dbbc21ed943c36c8616c585f1c Mon Sep 17 00:00:00 2001 From: I-No-oNe <145749961+I-No-oNe@users.noreply.github.com> Date: Tue, 4 Nov 2025 08:12:54 +0200 Subject: [PATCH 3/4] A small fix --- .../clickcrystals/modules/modules/clickcrystals/SelfGlow.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/io/github/itzispyder/clickcrystals/modules/modules/clickcrystals/SelfGlow.java b/src/main/java/io/github/itzispyder/clickcrystals/modules/modules/clickcrystals/SelfGlow.java index ac582c0b..ba752ef5 100644 --- a/src/main/java/io/github/itzispyder/clickcrystals/modules/modules/clickcrystals/SelfGlow.java +++ b/src/main/java/io/github/itzispyder/clickcrystals/modules/modules/clickcrystals/SelfGlow.java @@ -43,7 +43,7 @@ public enum Color { } public int getRGBA() { - return ((alpha & 0xFF) << 24) | ((red & 0xFF) << 16) | ((green & 0xFF) << 8) | (blue & 0xFF); + return alpha << 24 | red << 16 | green << 8 | blue; } } -} \ No newline at end of file +} From 9ab958b0be142a3c0fc0c500862318bb5b11b3d0 Mon Sep 17 00:00:00 2001 From: I-No-oNe <145749961+I-No-oNe@users.noreply.github.com> Date: Wed, 5 Nov 2025 18:42:55 +0200 Subject: [PATCH 4/4] Fix hasOutline method to check for ClientPlayer entity instead of PlayerEntity --- .../itzispyder/clickcrystals/mixins/MixinMinecraftClient.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinMinecraftClient.java b/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinMinecraftClient.java index 08ac9fcf..b5cfb83d 100644 --- a/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinMinecraftClient.java +++ b/src/main/java/io/github/itzispyder/clickcrystals/mixins/MixinMinecraftClient.java @@ -75,6 +75,6 @@ public void inputUse() { private boolean hasOutline(boolean original, Entity entity) { if (mc == null) return original; SelfGlow selfGlow = Module.get(SelfGlow.class); - return selfGlow != null ? selfGlow.isEnabled() && entity.getType() == EntityType.PLAYER : original; + return selfGlow != null ? selfGlow.isEnabled() && entity == mc.player : original; } }