Skip to content

Commit

Permalink
Quality of life update
Browse files Browse the repository at this point in the history
  • Loading branch information
tanishisherewithhh committed Jul 10, 2024
1 parent ae88443 commit 805125b
Show file tree
Hide file tree
Showing 23 changed files with 135 additions and 101 deletions.
16 changes: 6 additions & 10 deletions src/main/java/dev/heliosclient/HeliosClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import dev.heliosclient.event.SubscribeEvent;
import dev.heliosclient.event.events.TickEvent;
import dev.heliosclient.event.events.client.FontChangeEvent;
import dev.heliosclient.event.events.player.PlayerLeaveEvent;
import dev.heliosclient.event.listener.Listener;
import dev.heliosclient.hud.HudElementList;
import dev.heliosclient.managers.*;
Expand All @@ -29,6 +30,7 @@
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
import net.minecraft.client.MinecraftClient;
import net.minecraft.world.WorldSaveHandler;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.core.LoggerContext;
import org.apache.logging.log4j.core.config.Configuration;
Expand Down Expand Up @@ -117,12 +119,8 @@ public static boolean shouldUpdate() {
}

@SubscribeEvent
public void tick(TickEvent.CLIENT client) {
if (MC.getWindow() != null) {
FontManager.INSTANCE.registerFonts();
EventManager.postEvent(new FontChangeEvent(fonts));
EventManager.unregister(this);
}
public void onDisconnect(PlayerLeaveEvent client) {
HeliosClient.saveConfigHook();
}

@Override
Expand Down Expand Up @@ -162,10 +160,8 @@ public void onInitialize() {

HeliosExecutor.execute(HeliosClient::loadConfig);

// Save
ServerLifecycleEvents.SERVER_STOPPING.register(server -> HeliosClient.saveConfig());
ServerLifecycleEvents.END_DATA_PACK_RELOAD.register((a, b, c) -> HeliosClient.saveConfig());
ServerPlayConnectionEvents.DISCONNECT.register((handler, packetSender) -> HeliosClient.saveConfig());
// Save when the client stops

ClientLifecycleEvents.CLIENT_STOPPING.register((client) -> {
saveConfigHook();
if (DiscordRPC.INSTANCE.isRunning) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,26 @@

import dev.heliosclient.event.Event;
import net.minecraft.entity.Entity;
import net.minecraft.entity.LivingEntity;
import net.minecraft.world.explosion.Explosion;

public class ExplosionEvent extends Event {
final Entity entity;
final LivingEntity causingEntity;
final float power;
final Explosion explosion;

public ExplosionEvent(Entity entity, float power) {
this.entity = entity;
public ExplosionEvent(LivingEntity causingEntity, float power, Explosion explosion) {
this.causingEntity = causingEntity;
this.power = power;
this.explosion = explosion;
}

public Entity getEntity() {
return entity;
public Explosion getExplosion() {
return explosion;
}

public Entity getCausingEntity() {
return causingEntity;
}

public float getPower() {
Expand Down
34 changes: 24 additions & 10 deletions src/main/java/dev/heliosclient/hud/hudelements/ModuleList.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import java.awt.*;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;

import static dev.heliosclient.hud.hudelements.ModuleList.ColorMode.METEOR;
Expand All @@ -26,6 +27,11 @@
*/
public class ModuleList extends HudElement implements Listener {

public static HudElementData<ModuleList> DATA = new HudElementData<>("Module List", "Shows enabled modules", ModuleList::new);

//Managing a structure of sorted Modules to prevent resorting them every time unless the enabled modules change.
private List<Module_> sortedModules = new ArrayList<>();

public SettingGroup sgSettings = new SettingGroup("Settings");
private final CycleSetting sort = sgSettings.add(new CycleSetting.Builder()
.name("Sort")
Expand Down Expand Up @@ -187,7 +193,8 @@ public void renderElement(DrawContext drawContext, TextRenderer textRenderer) {
// Calculate the maximum width of the module names for enabled modules only
for (Module_ m : enabledModules) {
if (!m.showInModulesList.value) continue;
int nameWidth = Math.round(Renderer2D.getStringWidth(m.name));
String name = moduleInfo.value ? m.getNameWithInfo() : m.name;
int nameWidth = Math.round(Renderer2D.getStringWidth(name));
maxWidth = Math.max(maxWidth, nameWidth);
}
if (colorMode.getOption() == METEOR) {
Expand Down Expand Up @@ -254,17 +261,24 @@ public void renderElement(DrawContext drawContext, TextRenderer textRenderer) {
}
this.height = Math.max(yOffset - this.y + 2, 40);
}

private Comparator<Module_> getComparator() {
return (m1, m2) -> {
float name1Width = Renderer2D.getStringWidth(m1.name) + ((m1.getInfoString().isEmpty() || !moduleInfo.value) ? 0 : Renderer2D.getStringWidth(" [" + m1.getInfoString() + "]"));
float name2Width = Renderer2D.getStringWidth(m2.name) + ((m2.getInfoString().isEmpty() || !moduleInfo.value) ? 0 : Renderer2D.getStringWidth(" [" + m2.getInfoString() + "]"));
return switch ((Sort) sort.getOption()) {
case Alphabetical -> m1.name.compareTo(m2.name);
case Biggest -> Float.compare(name2Width, name1Width);
case Smallest -> Float.compare(name1Width, name2Width);
};
};
}
@SubscribeEvent
public void update(TickEvent.CLIENT event) {
enabledModules = ModuleManager.getEnabledModules();
enabledModules.sort((mod1, mod2) -> switch ((Sort) sort.getOption()) {
case Alphabetical -> mod1.getNameWithInfo().compareTo(mod2.getNameWithInfo());
case Biggest ->
Double.compare(Renderer2D.getStringWidth(mod2.getNameWithInfo()), Renderer2D.getStringWidth(mod1.getNameWithInfo()));
case Smallest ->
Double.compare(Renderer2D.getStringWidth(mod1.getNameWithInfo()), Renderer2D.getStringWidth(mod2.getNameWithInfo()));
});
if (!enabledModules.equals(sortedModules)) {
enabledModules.sort(getComparator());
sortedModules = new ArrayList<>(enabledModules);
}
}

public enum Sort {
Expand All @@ -280,7 +294,7 @@ public enum ColorMode {
public enum GlowMode {
LOW_BG_ALPHA,
NORMAL
} public static HudElementData<ModuleList> DATA = new HudElementData<>("Module List", "Shows enabled modules", ModuleList::new);
}



Expand Down
5 changes: 5 additions & 0 deletions src/main/java/dev/heliosclient/managers/CapeManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import dev.heliosclient.util.animation.AnimationUtils;
import dev.heliosclient.util.cape.ProfileUtils;
import dev.heliosclient.util.fontutils.FontLoader;
import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.texture.NativeImage;
import net.minecraft.client.texture.NativeImageBackedTexture;
Expand Down Expand Up @@ -255,6 +256,10 @@ private static void saveCapeFromBase64(String UUID, String url) throws Exception
}
}

public static boolean isETFPresent(){
return FabricLoader.getInstance().isModLoaded("entity_texture_features");
}

public static boolean shouldPlayerHaveCape(PlayerEntity player) {
return CAPES.containsKey(player.getUuid()) || ELYTRAS.containsKey(player.getUuid());
}
Expand Down
20 changes: 2 additions & 18 deletions src/main/java/dev/heliosclient/mixin/CapeFeatureRendererMixin.java
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ public abstract class CapeFeatureRendererMixin extends FeatureRenderer<AbstractC
public CapeFeatureRendererMixin(FeatureRendererContext<AbstractClientPlayerEntity, PlayerEntityModel<AbstractClientPlayerEntity>> context) {
super(context);
}

@Inject(method = "render(Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/VertexConsumerProvider;ILnet/minecraft/client/network/AbstractClientPlayerEntity;FFFFFF)V", at = @At("HEAD"), cancellable = true)
public void render(MatrixStack matrixStack, VertexConsumerProvider vertexConsumerProvider, int i, AbstractClientPlayerEntity abstractClientPlayerEntity, float f, float g, float h, float j, float k, float l, CallbackInfo ci) {
if (!abstractClientPlayerEntity.isInvisible() && abstractClientPlayerEntity.isPartVisible(PlayerModelPart.CAPE) && ModuleManager.get(CapeModule.class).isActive()) {
Expand Down Expand Up @@ -82,25 +81,10 @@ public void render(MatrixStack matrixStack, VertexConsumerProvider vertexConsume
}

if (ModuleManager.get(CapeModule.class).customPhysics.value) {
//New custom physics which adds speed modifier along with a small wind simulation
double playerSpeed = Math.sqrt(abstractClientPlayerEntity.getVelocity().x * abstractClientPlayerEntity.getVelocity().x + abstractClientPlayerEntity.getVelocity().z * abstractClientPlayerEntity.getVelocity().z);
float speedModifier = (float) Math.min(1, playerSpeed / 0.5);
// Environmental factors
Biome biome = abstractClientPlayerEntity.getWorld().getBiome(abstractClientPlayerEntity.getBlockPos()).value();

//Random guess 120 blocks
boolean isWindyBiome = biome.getPrecipitation(abstractClientPlayerEntity.getBlockPos()) == Biome.Precipitation.RAIN || abstractClientPlayerEntity.getY() > 120;
boolean isRaining = abstractClientPlayerEntity.getWorld().isRaining();

// Directional wind
float windDirection = (float) Math.sin(System.currentTimeMillis() % 20000 / 20000.0 * 2 * Math.PI);
float windStrength = isWindyBiome && isRaining ? 0.2F : 0.1F;
float windEffect = windStrength * windDirection;

// Add wind effect to CURRENT_PLAYER_CAPE rotation
matrixStack.multiply(RotationAxis.POSITIVE_X.rotationDegrees(6.0F + r / 2.0F + q + speedModifier * 15.0F + windEffect));
matrixStack.multiply(RotationAxis.POSITIVE_Z.rotationDegrees(s / 2.0F));
matrixStack.multiply(RotationAxis.POSITIVE_Y.rotationDegrees(180.0F - s / 2.0F));

matrixStack.multiply(RotationAxis.POSITIVE_X.rotationDegrees(6.0F + r / 2.0F + q + speedModifier * 15.0F ));
} else {
// Old physics
matrixStack.multiply(RotationAxis.POSITIVE_X.rotationDegrees(6.0F + r / 2.0F + q));
Expand Down
14 changes: 10 additions & 4 deletions src/main/java/dev/heliosclient/mixin/MixinCrashReport.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,18 @@ public abstract class MixinCrashReport {
//Save our config when a crash occurs via the create method.
@Inject(method = "create", at = @At("HEAD"))
private static void onCreateCrashReport(Throwable cause, String title, CallbackInfoReturnable<CrashReport> cir) {
HeliosClient.saveConfigHook();
CrashReport report = cir.getReturnValue();


//Display details of HeliosClient
CrashReport report = cir.getReturnValue();
if(report != null && report.getSystemDetailsSection() != null) {
report.getSystemDetailsSection().addSection("HeliosClient", () -> "Version " + HeliosClient.versionTag + " , Active Modules:" + ModuleManager.getEnabledModules());
if(report != null) {
if(HeliosClient.CONFIG != null && HeliosClient.CONFIG.nullCheck()) {
HeliosClient.saveConfigHook();
}

if(report.getSystemDetailsSection() != null) {
report.getSystemDetailsSection().addSection("HeliosClient", () -> "Version " + HeliosClient.versionTag + " , Active Modules:" + ModuleManager.getEnabledModules());
}
}
}
}
11 changes: 0 additions & 11 deletions src/main/java/dev/heliosclient/mixin/MixinFontRenderers.java

This file was deleted.

3 changes: 0 additions & 3 deletions src/main/java/dev/heliosclient/mixin/MixinPlayerEntity.java
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,6 @@ protected MixinPlayerEntity(EntityType<? extends LivingEntity> entityType, World

}

@Shadow
public abstract void increaseStat(Stat<?> stat, int amount);

@Inject(method = "dropItem(Lnet/minecraft/item/ItemStack;ZZ)Lnet/minecraft/entity/ItemEntity;", at = @At("HEAD"))
private void dropItem(ItemStack stack, boolean throwRandomly, boolean retainOwnership, CallbackInfoReturnable<ItemEntity> cir) {
ItemDropEvent event = new ItemDropEvent(stack);
Expand Down
9 changes: 0 additions & 9 deletions src/main/java/dev/heliosclient/mixin/MixinRenderLayers.java

This file was deleted.

2 changes: 1 addition & 1 deletion src/main/java/dev/heliosclient/mixin/MixinWorld.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ private void onCreateExplosion(CallbackInfoReturnable<Explosion> cir) {
if (explosion != null) {
LivingEntity entity = explosion.getCausingEntity();
float power = explosion.getPower();
EventManager.postEvent(new ExplosionEvent(entity, power));
EventManager.postEvent(new ExplosionEvent(entity, power,explosion));
}
}

Expand Down
2 changes: 1 addition & 1 deletion src/main/java/dev/heliosclient/module/Module_.java
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ public void onLoad() {
}

public String getNameWithInfo() {
return name + "[" + getInfoString() + "]";
return name + " [" + getInfoString() + "]";
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import dev.heliosclient.module.settings.CycleSetting;
import dev.heliosclient.module.settings.DoubleSetting;
import dev.heliosclient.module.settings.SettingGroup;
import dev.heliosclient.util.player.PlayerUtils;
import net.minecraft.network.packet.c2s.play.ClientCommandC2SPacket;
import net.minecraft.util.math.MathHelper;
import net.minecraft.util.math.Vec3d;
Expand Down Expand Up @@ -60,7 +61,6 @@ public void onMotion(PlayerMotionEvent e) {

// Strafe Mode
if (speedMode.getOption() == Modes.Strafe) {
if ((mc.player.forwardSpeed != 0 || mc.player.sidewaysSpeed != 0)) {
if (!mc.player.isSprinting()) {
mc.player.networkHandler.sendPacket(new ClientCommandC2SPacket(mc.player, ClientCommandC2SPacket.Mode.START_SPRINTING));
}
Expand All @@ -74,7 +74,6 @@ public void onMotion(PlayerMotionEvent e) {
mc.player.updateVelocity(vel >= 0.3 ? 0.0f : 0.15f, new Vec3d(mc.player.sidewaysSpeed, 0, mc.player.forwardSpeed));
mc.player.jump();
}
}
}
// OnGround Mode
else if (speedMode.getOption() == Modes.OnGround) {
Expand Down
Loading

0 comments on commit 805125b

Please sign in to comment.