From b975f137e225781b1b615dfab566b44b3d28fe39 Mon Sep 17 00:00:00 2001 From: DarkKronicle Date: Mon, 24 Apr 2023 16:59:10 -0600 Subject: [PATCH 1/2] Paper doll --- .../mod/impl/core/mixins/EntityMixin.java | 1 + .../client/mod/impl/hud/PaperDollMod.java | 121 ++++++++++++++++++ .../assets/sol_client/lang/en_US.lang | 5 + src/main/resources/standard-mods.json | 5 + 4 files changed, 132 insertions(+) create mode 100644 src/main/java/io/github/solclient/client/mod/impl/hud/PaperDollMod.java diff --git a/src/main/java/io/github/solclient/client/mod/impl/core/mixins/EntityMixin.java b/src/main/java/io/github/solclient/client/mod/impl/core/mixins/EntityMixin.java index d0a3b243..a66526c1 100644 --- a/src/main/java/io/github/solclient/client/mod/impl/core/mixins/EntityMixin.java +++ b/src/main/java/io/github/solclient/client/mod/impl/core/mixins/EntityMixin.java @@ -23,6 +23,7 @@ import io.github.solclient.client.culling.Cullable; import lombok.*; import net.minecraft.entity.Entity; +import org.spongepowered.asm.mixin.injection.Inject; @Mixin(Entity.class) public abstract class EntityMixin implements Cullable { diff --git a/src/main/java/io/github/solclient/client/mod/impl/hud/PaperDollMod.java b/src/main/java/io/github/solclient/client/mod/impl/hud/PaperDollMod.java new file mode 100644 index 00000000..6983c12d --- /dev/null +++ b/src/main/java/io/github/solclient/client/mod/impl/hud/PaperDollMod.java @@ -0,0 +1,121 @@ +package io.github.solclient.client.mod.impl.hud; + +import com.google.gson.annotations.Expose; +import com.mojang.blaze3d.platform.GLX; +import com.mojang.blaze3d.platform.GlStateManager; +import io.github.solclient.client.event.EventHandler; +import io.github.solclient.client.event.impl.PlayerHeadRotateEvent; +import io.github.solclient.client.event.impl.PreTickEvent; +import io.github.solclient.client.mod.impl.SolClientHudMod; +import io.github.solclient.client.mod.option.ModOption; +import io.github.solclient.client.mod.option.ModOptionStorage; +import io.github.solclient.client.mod.option.annotation.AbstractTranslationKey; +import io.github.solclient.client.mod.option.annotation.Option; +import io.github.solclient.client.mod.option.impl.SliderOption; +import io.github.solclient.client.util.MinecraftUtils; +import io.github.solclient.client.util.data.Position; +import io.github.solclient.client.util.data.Rectangle; +import net.minecraft.client.MinecraftClient; +import net.minecraft.client.render.DiffuseLighting; +import net.minecraft.client.render.entity.EntityRenderDispatcher; +import net.minecraft.client.resource.language.I18n; + +import java.util.List; +import java.util.Optional; + +// Originally from KronHUD +// Added here by DarkKronicle :) +// https://github.com/DarkKronicle/KronHUD/blob/master/src/main/java/io/github/darkkronicle/kronhud/gui/hud/PlayerHud.java +@AbstractTranslationKey("sol_client.mod.paperdoll") +public class PaperDollMod extends SolClientHudMod { + + @Expose + @Option + private boolean dynamicRotation = true; + + @Expose + private float rotation = 0; + + private float lastYawOffset = 0; + private float yawOffset = 0; + + @Override + public Rectangle getBounds(Position position) { + return new Rectangle(position.getX(), position.getY(), 62, 94); + } + + @Override + public String getDetail() { + return I18n.translate("sol_client.mod.screen.by", "DarkKronicle"); // maybe also add original creator + } + + @Override + protected List> createOptions() { + List> options = super.createOptions(); + Optional format = Optional.empty(); + options.add( + new SliderOption( + "sol_client.mod.paperdoll.option.rotation", + ModOptionStorage.of(Number.class, () -> rotation, (value) -> rotation = value.floatValue()), + format, 0, 360, 1 + ) + ); + return options; + } + + public void renderPlayer(double x, double y, float delta) { + if (mc.player == null) { + return; + } + + float deltaYaw = mc.player.prevYaw + (mc.player.yaw - mc.player.prevYaw) * delta; + if (dynamicRotation) { + deltaYaw -= (lastYawOffset + ((yawOffset - lastYawOffset) * delta)); + } + + GlStateManager.enableColorMaterial(); + GlStateManager.pushMatrix(); + GlStateManager.translate((float) x, (float) y, 500.0F); + GlStateManager.scale((float) (-40), (float) 40, (float) 40); + GlStateManager.rotate(180.0F, 0.0F, 0.0F, 1.0F); + + GlStateManager.rotate(135.0F, 0.0F, 1.0F, 0.0F); + DiffuseLighting.enableNormally(); + GlStateManager.rotate(-135.0F, 0.0F, 1.0F, 0.0F); + GlStateManager.rotate(deltaYaw + rotation, 0.0F, 1.0F, 0.0F); + + EntityRenderDispatcher entityRenderDispatcher = MinecraftClient.getInstance().getEntityRenderManager(); + entityRenderDispatcher.setYaw(0); + entityRenderDispatcher.setRenderShadows(false); + entityRenderDispatcher.render(mc.player, 0.0, 0.0, 0.0, 0.0F, MinecraftUtils.getTickDelta()); + entityRenderDispatcher.setRenderShadows(true); + + GlStateManager.popMatrix(); + DiffuseLighting.disable(); + GlStateManager.disableRescaleNormal(); + GlStateManager.activeTexture(GLX.lightmapTextureUnit); + GlStateManager.disableTexture(); + GlStateManager.activeTexture(GLX.textureUnit); + + } + + @EventHandler + public void onPlayerRotate(PlayerHeadRotateEvent event) { + if (event.yaw == 0 && event.pitch == 0) { + return; + } + yawOffset += (event.yaw * .15) / 2; + } + + @Override + public void render(Position position, boolean editMode) { + renderPlayer(position.getX() + 31, position.getY() + 86, MinecraftUtils.getTickDelta()); + } + + @EventHandler + public void onTick(PreTickEvent event) { + lastYawOffset = yawOffset; + yawOffset *= .93f; + } + +} diff --git a/src/main/resources/assets/sol_client/lang/en_US.lang b/src/main/resources/assets/sol_client/lang/en_US.lang index 9c3bbd64..00e220c0 100644 --- a/src/main/resources/assets/sol_client/lang/en_US.lang +++ b/src/main/resources/assets/sol_client/lang/en_US.lang @@ -479,6 +479,11 @@ sol_client.mod.discord_integration.option.speakingColour=Speaking colour sol_client.mod.discord_integration.multiplayer=Multiplayer: %s +sol_client.mod.paperdoll.name=Paper Doll +sol_client.mod.paperdoll.description=Renders a small version of you on screen. +sol_client.mod.paperdoll.option.dynamicRotation=Dynamic Rotation +sol_client.mod.paperdoll.option.rotation=Rotation Offset + sol_client.mod.screen.title=Modules sol_client.mod.screen.search=Type to search sol_client.mod.screen.apply_to_all=Apply to All diff --git a/src/main/resources/standard-mods.json b/src/main/resources/standard-mods.json index b5cf2e09..d90622ad 100644 --- a/src/main/resources/standard-mods.json +++ b/src/main/resources/standard-mods.json @@ -96,6 +96,11 @@ "main": "hud.PotionEffectsMod", "category": "hud" }, + { + "id": "paperdoll", + "main": "hud.PaperDollMod", + "category": "hud" + }, { "id": "armour", "main": "hud.armour.ArmourMod", From e9623892bc5a0892ce24583d11c5b682b44b18f0 Mon Sep 17 00:00:00 2001 From: DarkKronicle Date: Mon, 24 Apr 2023 17:01:32 -0600 Subject: [PATCH 2/2] Remove unnecessary import --- .../solclient/client/mod/impl/core/mixins/EntityMixin.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/io/github/solclient/client/mod/impl/core/mixins/EntityMixin.java b/src/main/java/io/github/solclient/client/mod/impl/core/mixins/EntityMixin.java index a66526c1..d0a3b243 100644 --- a/src/main/java/io/github/solclient/client/mod/impl/core/mixins/EntityMixin.java +++ b/src/main/java/io/github/solclient/client/mod/impl/core/mixins/EntityMixin.java @@ -23,7 +23,6 @@ import io.github.solclient.client.culling.Cullable; import lombok.*; import net.minecraft.entity.Entity; -import org.spongepowered.asm.mixin.injection.Inject; @Mixin(Entity.class) public abstract class EntityMixin implements Cullable {