v1.3
This commit is contained in:
1 parent
e7d872d75e
commit
e358b142c6
9 files changed
+185
-9
No files matched your search
@@ -10,12 +10,14 @@ mod para Minecraft Fabric 1.21.6 que añade algunas cosas QOL, mayormente relaci
|
||||
3. descargar el .jar
|
||||
4. moverlo a tu directorio de mods (probablemente `%appdata%/.minecraft/mods`)
|
||||
|
||||
asegúrate de tener una version de Minecraft y Fabric compatibles con el mod
|
||||
asegúrate de tener una version de Minecraft y Fabric compatibles con el mod (MC 1.21.6; Fabric 0.128.2)
|
||||
es posible que hayan problemas al usarlo junto a otros mods, especialmente otros clientes, pues pueden conflictar
|
||||
|
||||
### para frikis de 200 de iq
|
||||
1. clona el respositorio (`git clone https://github.com/retuci0/camera-tweaks`)
|
||||
2. `gradlew build` para Windows o `chmod +x gradlew` + `./gradlew build` para Linux
|
||||
3. el resultado estará en `/build/libs` (el que no lleva "sources" en el nombre)
|
||||
2. entra al directorio del repositorio (`cd camera-tweaks`)
|
||||
3. `gradlew build` para Windows o `chmod +x gradlew` + `./gradlew build` para Linux (Mac es Linux)
|
||||
4. el resultado estará en `/build/libs/camtweaks-X.X.jar` (el que no lleva "sources" en el nombre)
|
||||
|
||||
## uso
|
||||
|
||||
@@ -48,6 +50,7 @@ algunos módulos tienen teclas asignadas por defecto, asígnales `ESC` para desa
|
||||
<img src="screenshots/chatplus.png" alt="chatplus y capturas en uso">
|
||||
<img src="screenshots/crits.png" alt="críticos">
|
||||
<img src="screenshots/fullbright.png" alt="fullbright en modo gamma cambiando el color de los shaders">
|
||||
<img src="screenshots/hud.png" alt="HUD">
|
||||
|
||||
## contibuciones
|
||||
|
||||
|
||||
+6
-1
@@ -7,6 +7,7 @@
|
||||
- barra de búsqueda: filtra los ajustes de todos los paneles de ajustes, por nombre y descripción
|
||||
- barra de deslizamiento
|
||||
- módulo de jugador falso: invoca una entidad de jugador falsa, por motivos de testeo
|
||||
- HUD: mostrar información adicional en pantalla (ej.: hora, fps, coordenadas, ...)
|
||||
|
||||
### arreglos / mejoras
|
||||
|
||||
@@ -15,9 +16,13 @@
|
||||
- ahora solo se puede seleccionar un objeto de la interfaz a la vez
|
||||
- cambiada la posición de los títulos de los marcos
|
||||
|
||||
- ahora los módulos están ordenados por orden alfabético
|
||||
|
||||
- ahora nametags también tiene en cuenta la absorción de un jugador al mostrar su vida
|
||||
|
||||
- el color del prefijo de las notificaciones por chat ahora depende de los ajustes de color
|
||||
- ya no se muestra el prefijo equivocado en notificaciones por chat al meterse a un mundo por primera vez
|
||||
|
||||
## problemas reconocidos
|
||||
|
||||
- ...
|
||||
- muchos, pero repórtalos en la página de problemas si quieres para que queden bien registrados
|
||||
+1
-1
@@ -10,7 +10,7 @@ loader_version=0.17.2
|
||||
loom_version=1.11-SNAPSHOT
|
||||
|
||||
# Mod Properties
|
||||
mod_version=1.2
|
||||
mod_version=1.3
|
||||
maven_group=me.retucio
|
||||
archives_base_name=camtweaks
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 469 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 616 KiB After Width: | Height: | Size: 691 KiB |
@@ -25,6 +25,7 @@ public abstract class PlayerEntityMixin extends LivingEntity {
|
||||
if (!nametags.isEnabled() || !nametags.health.isEnabled()) return original;
|
||||
|
||||
float health = getHealth();
|
||||
float absorption = getAbsorptionAmount();
|
||||
Formatting color;
|
||||
|
||||
if (health < 5) color = Formatting.RED;
|
||||
@@ -34,7 +35,18 @@ public abstract class PlayerEntityMixin extends LivingEntity {
|
||||
|
||||
// me gustaría también añadir un modo en el que se renderizan los corazones directamente en la nametag, pero no sé cómo hacer para las imágenes :'(
|
||||
// ahora que lo pienso en la snapshot más reciente han metido iconos que se pueden usar en texto, y uno de ellos es un corazón :D
|
||||
return original.copy().append(Text.literal(" [" + color + (nametags.healthMode.is(Nametags.HealthMode.HEARTS)
|
||||
? String.format("%.2f", health / 2) : (int) health) + Formatting.RESET + "]"));
|
||||
} // redondear a dos decimales
|
||||
String text = " [" + color +
|
||||
(nametags.healthMode.is(Nametags.HealthMode.HEARTS)
|
||||
? String.format("%.2f", health / 2) // redondear a dos decimales
|
||||
: (int) health) +
|
||||
(absorption > 0 // tener absorción en cuenta
|
||||
? Formatting.RESET + " + " + Formatting.GOLD +
|
||||
(nametags.healthMode.is(Nametags.HealthMode.HEARTS)
|
||||
? String.format("%.2f", absorption / 2)
|
||||
: Integer.toString((int) absorption))
|
||||
: "") +
|
||||
Formatting.RESET + "]";
|
||||
|
||||
return original.copy().append(text);
|
||||
}
|
||||
}
|
||||
@@ -6,6 +6,7 @@ import me.retucio.camtweaks.module.modules.*;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@@ -35,6 +36,7 @@ public class ModuleManager {
|
||||
modules.add(new Freelook());
|
||||
modules.add(new Fullbright());
|
||||
modules.add(new HandView());
|
||||
modules.add(new HUD());
|
||||
modules.add(new Nametags());
|
||||
modules.add(new NoRender());
|
||||
modules.add(new PerspectivePlus());
|
||||
@@ -42,6 +44,8 @@ public class ModuleManager {
|
||||
modules.add(new TimeChanger());
|
||||
modules.add(new Zoom());
|
||||
|
||||
modules.sort(Comparator.comparing(module -> module.getName().toLowerCase()));
|
||||
|
||||
// registrar los "listeners" necesarios
|
||||
for (Module module : getEnabledModules()) {
|
||||
for (Method method : module.getClass().getDeclaredMethods()) {
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
package me.retucio.camtweaks.module.modules;
|
||||
|
||||
import me.retucio.camtweaks.module.Module;
|
||||
import me.retucio.camtweaks.module.settings.BooleanSetting;
|
||||
import me.retucio.camtweaks.module.settings.EnumSetting;
|
||||
import me.retucio.camtweaks.module.settings.NumberSetting;
|
||||
import me.retucio.camtweaks.module.settings.StringSetting;
|
||||
|
||||
public class HUD extends Module {
|
||||
|
||||
public NumberSetting red = addSetting(new NumberSetting("rojo", "cantidad de rojo", 255, 0, 255, 1));
|
||||
public NumberSetting green = addSetting(new NumberSetting("verde", "cantidad de verde", 255, 0, 255, 1));
|
||||
public NumberSetting blue = addSetting(new NumberSetting("azul", "cantidad de azul", 255, 0, 255, 1));
|
||||
|
||||
public BooleanSetting rainbow = addSetting(new BooleanSetting("arcoíris", "gay.", false));
|
||||
public NumberSetting rainbowSpeed = addSetting(new NumberSetting("velocidad del arcoíris", "velocidad del arcoíris", 1000, 0, 10000, 2));
|
||||
|
||||
public NumberSetting alpha = addSetting(new NumberSetting("opacidad", "antitransparencia", 255, 0, 255, 1));
|
||||
public BooleanSetting shadow = addSetting(new BooleanSetting("sombra", "texto con sombra", true));
|
||||
|
||||
public BooleanSetting dontOverride = addSetting(new BooleanSetting("no sobreescribir", "evita dibujar por encima de otros elementos de la interfaz", true));
|
||||
|
||||
public EnumSetting<TimeFormat> timeFormat = addSetting(new EnumSetting<>("formato de la hora", "12h o 24h", TimeFormat.class, TimeFormat.TWENTY_FOUR_HOUR));
|
||||
public NumberSetting timezone = addSetting(new NumberSetting("zona horaria", "zona horaria en UTC+n", 1, -6, 6, 1));
|
||||
|
||||
public BooleanSetting coords = addSetting(new BooleanSetting("coordenadas", "mostrar coordenadas", true));
|
||||
public StringSetting customText = addSetting(new StringSetting("texto custom", "marca de agua (dejar vacío para quitar)", "ESCROTO", 40));
|
||||
public BooleanSetting fps = addSetting(new BooleanSetting("fps", "mostrar frames por segundo", true));
|
||||
public BooleanSetting tps = addSetting(new BooleanSetting("tps", "mostrar tasa de ticks por segundo del server", true));
|
||||
public BooleanSetting time = addSetting(new BooleanSetting("hora", "mostrar hora actual", true));
|
||||
|
||||
public HUD() {
|
||||
super("HUD", "superposición de la pantalla con info. adicional");
|
||||
|
||||
rainbow.onUpdate(v -> {
|
||||
rainbowSpeed.setVisible(v);
|
||||
red.setVisible(!v);
|
||||
green.setVisible(!v);
|
||||
blue.setVisible(!v);
|
||||
});
|
||||
|
||||
time.onUpdate(v -> {
|
||||
timeFormat.setVisible(v);
|
||||
timezone.setVisible(v);
|
||||
});
|
||||
}
|
||||
|
||||
public enum TimeFormat {
|
||||
TWENTY_FOUR_HOUR("24h"),
|
||||
TWELVE_HOUR("12h");
|
||||
|
||||
final String name;
|
||||
TimeFormat(String name) { this.name = name; }
|
||||
@Override public String toString() { return name; }
|
||||
}
|
||||
}
|
||||
@@ -1,8 +1,20 @@
|
||||
package me.retucio.camtweaks.ui;
|
||||
|
||||
import me.retucio.camtweaks.event.SubscribeEvent;
|
||||
import me.retucio.camtweaks.event.events.PacketEvent;
|
||||
import me.retucio.camtweaks.module.ModuleManager;
|
||||
import me.retucio.camtweaks.module.modules.Freecam;
|
||||
import me.retucio.camtweaks.module.modules.HUD.TimeFormat;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.screen.ChatScreen;
|
||||
import net.minecraft.client.render.RenderTickCounter;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.time.LocalTime;
|
||||
import java.time.ZoneOffset;
|
||||
import java.time.format.DateTimeFormatter;
|
||||
|
||||
// en un principio esto iba a mostrar en pantalla los módulos activados, pero me parece innecesario. se queda aquí por si acaso
|
||||
// igual lo uso para algo...
|
||||
@@ -10,5 +22,89 @@ public class HUD {
|
||||
|
||||
private static final MinecraftClient mc = MinecraftClient.getInstance();
|
||||
|
||||
public static void render(DrawContext ctx, RenderTickCounter tc) {}
|
||||
private long lastPacketTime = 0;
|
||||
private static float estimatedTPS = 20f;
|
||||
|
||||
public static void render(DrawContext ctx, RenderTickCounter tc) {
|
||||
if (ModuleManager.INSTANCE == null || mc.player == null || mc.cameraEntity == null) return;
|
||||
me.retucio.camtweaks.module.modules.HUD hud = ModuleManager.INSTANCE.getModuleByClass(me.retucio.camtweaks.module.modules.HUD.class);
|
||||
|
||||
int width = mc.getWindow().getScaledWidth();
|
||||
int height = mc.getWindow().getScaledHeight();
|
||||
|
||||
Color color;
|
||||
if (hud.rainbow.isEnabled()) {
|
||||
float speed = 10001 - hud.rainbowSpeed.getFloatValue();
|
||||
float hue = (System.currentTimeMillis() % (int) speed) / speed;
|
||||
Color gamning = Color.getHSBColor(hue, 1, 1);
|
||||
color = new Color(gamning.getRed(), gamning.getGreen(), gamning.getBlue(), hud.alpha.getIntValue());
|
||||
} else {
|
||||
color = new Color(hud.red.getIntValue(), hud.green.getIntValue(), hud.blue.getIntValue(), hud.alpha.getIntValue());
|
||||
}
|
||||
boolean shadow = hud.shadow.isEnabled();
|
||||
|
||||
if (hud.isEnabled()) {
|
||||
|
||||
// coordenadas
|
||||
if (hud.coords.isEnabled()) {
|
||||
Vec3d coords;
|
||||
Freecam freecam = ModuleManager.INSTANCE.getModuleByClass(Freecam.class);
|
||||
if (freecam.isEnabled())
|
||||
coords = new Vec3d(
|
||||
freecam.getX(tc.getDynamicDeltaTicks()),
|
||||
freecam.getY(tc.getDynamicDeltaTicks()),
|
||||
freecam.getZ(tc.getDynamicDeltaTicks())
|
||||
);
|
||||
else
|
||||
coords = mc.player.getPos();
|
||||
|
||||
String text = (int) coords.x + " " + (int) coords.y + " " + (int) coords.z;
|
||||
ctx.drawText(mc.textRenderer, text,
|
||||
width - mc.textRenderer.getWidth(text) - 2,
|
||||
height - mc.textRenderer.fontHeight - 2,
|
||||
color.getRGB(), shadow);
|
||||
}
|
||||
|
||||
// fps y tps
|
||||
if (hud.fps.isEnabled())
|
||||
ctx.drawText(mc.textRenderer, "FPS: " + mc.getCurrentFps(), 2, 2, color.getRGB(), shadow);
|
||||
|
||||
if (hud.tps.isEnabled())
|
||||
ctx.drawText(mc.textRenderer, "TPS: " + estimatedTPS, 2, 4 + mc.textRenderer.fontHeight, color.getRGB(), shadow);
|
||||
|
||||
// marca de agua
|
||||
if (!hud.customText.getValue().isEmpty()) {
|
||||
int y;
|
||||
if (!mc.player.getActiveStatusEffects().isEmpty() && hud.dontOverride.isEnabled()) y = 26;
|
||||
else y = 2;
|
||||
ctx.drawText(mc.textRenderer, hud.customText.getValue(), width - mc.textRenderer.getWidth(hud.customText.getValue()) - 2, y, color.getRGB(), shadow);
|
||||
}
|
||||
|
||||
// hora real
|
||||
if (hud.time.isEnabled()) {
|
||||
int y;
|
||||
if (mc.currentScreen instanceof ChatScreen && hud.dontOverride.isEnabled()) y = height - mc.textRenderer.fontHeight - 14;
|
||||
else y = height - mc.textRenderer.fontHeight - 2;
|
||||
|
||||
ZoneOffset offset = ZoneOffset.ofHours(hud.timezone.getIntValue());
|
||||
LocalTime now = LocalTime.now(offset);
|
||||
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(hud.timeFormat.is(TimeFormat.TWENTY_FOUR_HOUR) ? "HH:mm" : "hh:mm a");
|
||||
String time = now.format(formatter);
|
||||
|
||||
ctx.drawText(mc.textRenderer, time, 2, y, color.getRGB(), shadow);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onReceivePacket(PacketEvent.Receive event) {
|
||||
// estimar el tps teniendo en cuenta el tiempo entre paquetes
|
||||
long now = System.currentTimeMillis();
|
||||
if (lastPacketTime > 0) {
|
||||
long diff = now - lastPacketTime; // ms entre paquetes
|
||||
float tps = 1000f / diff;
|
||||
estimatedTPS = Math.min(20.0f, tps);
|
||||
}
|
||||
lastPacketTime = now;
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user