v1.8
No files matched your search
@@ -42,10 +42,5 @@ replay_*.log
|
|||||||
# otros
|
# otros
|
||||||
|
|
||||||
todo.txt
|
todo.txt
|
||||||
test.java
|
|
||||||
cambios.md
|
cambios.md
|
||||||
# no está terminado
|
|
||||||
src/main/java/me/retucio/camtweaks/module/modules/TooltipsPlus.java
|
|
||||||
src/main/java/me/retucio/camtweaks/util/RenderUtil.java
|
|
||||||
src/main/java/me/retucio/camtweaks/util/Layers.java
|
|
||||||
remappedSrc/
|
remappedSrc/
|
||||||
@@ -1,35 +1,29 @@
|
|||||||
# v1.7
|
# v1.7
|
||||||
|
|
||||||
> al parecer me he saltado la versión 1.6, y la llamé 1.7, o sea que esta será 1.7.1 en el commit y a tomar por culo la 1.6
|
|
||||||
|
|
||||||
## novedades
|
## novedades
|
||||||
|
|
||||||
- se ha cambiado el icono a uno más "family friendly"
|
|
||||||
|
|
||||||
### adiciones
|
### adiciones
|
||||||
|
|
||||||
- opción para agregar un pequeño tooltip a los shulkers (prev. de shulkers)
|
- comando `$echest` (o `$ec` si eres un puto vago) para previsualizar los contenidos del enderchest en cualquier momento
|
||||||
- marca de agua para interfaces opcional y customizable
|
- se ha añadido un gradiente negro leve en la parte inferior del clickgui si el contenido excede los límites de la pantalla, para indicarlo visualmente
|
||||||
- opción para desactivar flashes del end de norender. aún se cambia el nivel de luz porque eso se maneja server-side
|
|
||||||
|
|
||||||
#### módulos nuevos:
|
#### módulos nuevos:
|
||||||
|
|
||||||
- attribute-swapper: automatiza el attribute swapping (aplicar propiedades de una herramienta a otra al intercambiar y usar una al mismo tiempo)
|
- aviso de baja durabilidad: te avisa cuando un ítem llega a cierto porcentaje de durabilidad
|
||||||
- autocartel: te permite colocar carteles con un texto preconfigurado sin tener que abrir la interfaz de cada uno
|
- bypassear packs: te permite omitir packs de recursos forzados por el servidor, al establecer el modo en "preguntar" y seleccionar la opción "nuh uh"
|
||||||
- bungeecord spoofer: (no funciona bien (todavía)) te permite conectarte a un servidor backend de un server con bungeecord mal configurado y manipular tu UUID mediante un proxy
|
- destello de enchants.: modifica el color del destello de los items y armadura encantada
|
||||||
- carteles gays: te permite agregar formato a los carteles mediante un símbolo a elegir que será reemplazado por el símbolo de formato de Minecraft (§)
|
|
||||||
- headhitters: establece jumpingCooldown como 0 siempre para que puedas mantener espacio en vez de espamearlo, para hacer headhitters (espamear espacio al estar bajo bloques para avanzar más rápido)
|
|
||||||
- minar sin interrupción: te permite ignorar entidades al minar y romper bloques a través de ellas
|
|
||||||
- precoz: reduce el cooldown de algunas cosas como colocar bloques o usar items al valor deseado
|
|
||||||
- rotaciones: te permite forzar una rotación específica del lado del cliente y del servidor
|
|
||||||
|
|
||||||
### arreglos / mejoras
|
### arreglos / mejoras
|
||||||
|
|
||||||
- ya no se activan / desactivan los módulos sin tecla asignada al subir y bajar el volumen (era porque tenía el número de tecla -1 que se usa también para cuando no hay una tecla)
|
- ahora puedes volver a abrir el clickgui y el editor de hud en la pantalla de inicio
|
||||||
- arreglado el freecam y su opción de cancelar paquetes
|
- ya no se deja de renderizar el hud si algún modo de debug (chunks, hitboxes, etc.) está activado y "mostar en F3" está desactivado
|
||||||
- arreglada la sensibilidad de perspectiva libre
|
- ahora se pueden previsualizar enderchests igual que shulkers, desde el inventario (prev. de shulkers)
|
||||||
- otros cambios irrelevantes al público general (hablo como si más de una persona usase el mod)
|
- ahora el mod funciona al compilarlo tras clonarlo por github, ya que había gitignorado algunos archivos importantes jsajajs
|
||||||
- ya no se marcan como jugadores desconectados aquellos que abandonan la distancia de renderizado
|
- arreglados los problemas del módulo zoom (creo)
|
||||||
|
- arregladas las opciones de ceguera y oscuridad de norender
|
||||||
|
- el color de la interfaz ya no es negro en el primer launch o cuando no se ha generado el archivo de config todavía
|
||||||
|
- arreglado el problema donde se muestra la marca de agua por defecto en la pantalla de inicio si no se abre un mundo primero
|
||||||
|
|
||||||
## problemas reconocidos
|
## problemas reconocidos
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ Lenny Boi: https://www.youtube.com/@lennyboi7195
|
|||||||
Shotify: https://modrinth.com/mod/shotify
|
Shotify: https://modrinth.com/mod/shotify
|
||||||
No Telemetry: https://modrinth.com/mod/no-telemetry
|
No Telemetry: https://modrinth.com/mod/no-telemetry
|
||||||
Trouser Streak: https://github.com/etianl/Trouser-Streak
|
Trouser Streak: https://github.com/etianl/Trouser-Streak
|
||||||
|
No More Purple: https://github.com/Pepperoni-Jabroni/NoMorePurple/
|
||||||
|
bypass-resource-pack: https://github.com/emilyy-dev/bypass-resource-pack
|
||||||
|
|
||||||
probablemente más pero como tengo demencia se me olvida
|
probablemente más pero como tengo demencia se me olvida
|
||||||
si quieres que te acredite mándame un mensaje en discord (username: retucio) y sin problemas :)
|
si quieres que te acredite o quite tu código de mi mod, mándame un mensaje en discord (username: retucio) y sin problemas :)
|
||||||
@@ -6,7 +6,7 @@ yarn_mappings=1.21.10+build.2
|
|||||||
loader_version=0.17.3
|
loader_version=0.17.3
|
||||||
loom_version=1.11-SNAPSHOT
|
loom_version=1.11-SNAPSHOT
|
||||||
|
|
||||||
mod_version=1.7
|
mod_version=1.8
|
||||||
maven_group=me.retucio
|
maven_group=me.retucio
|
||||||
archives_base_name=camtweaks
|
archives_base_name=camtweaks
|
||||||
|
|
||||||
|
|||||||
@@ -77,6 +77,7 @@ public class CameraTweaks implements ClientModInitializer {
|
|||||||
System.setProperty("java.awt.headless", "false");
|
System.setProperty("java.awt.headless", "false");
|
||||||
|
|
||||||
mc = MinecraftClient.getInstance();
|
mc = MinecraftClient.getInstance();
|
||||||
|
ConfigManager.load();
|
||||||
|
|
||||||
EVENT_BUS.register(this);
|
EVENT_BUS.register(this);
|
||||||
EVENT_BUS.register(MiscUtil.class);
|
EVENT_BUS.register(MiscUtil.class);
|
||||||
@@ -95,8 +96,6 @@ public class CameraTweaks implements ClientModInitializer {
|
|||||||
HudEditorScreen.INSTANCE = new HudEditorScreen();
|
HudEditorScreen.INSTANCE = new HudEditorScreen();
|
||||||
EVENT_BUS.post(new LoadClickGUIEvent());
|
EVENT_BUS.post(new LoadClickGUIEvent());
|
||||||
|
|
||||||
ConfigManager.load();
|
|
||||||
|
|
||||||
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
||||||
ConfigManager.save();
|
ConfigManager.save();
|
||||||
EVENT_BUS.post(new ShutdownEvent());
|
EVENT_BUS.post(new ShutdownEvent());
|
||||||
@@ -105,14 +104,14 @@ public class CameraTweaks implements ClientModInitializer {
|
|||||||
|
|
||||||
// se ejecuta cada tick, es decir, 20 veces por segundo
|
// se ejecuta cada tick, es decir, 20 veces por segundo
|
||||||
public void onTick() {
|
public void onTick() {
|
||||||
ModuleManager.INSTANCE.getEnabledModules().forEach(Module::onTick);
|
|
||||||
|
|
||||||
if (!settingsApplied
|
if (!settingsApplied
|
||||||
&& ConfigManager.getConfig() != null
|
&& ConfigManager.getConfig() != null
|
||||||
&& mc.player != null && mc.world != null) {
|
&& !ConfigManager.hasLoaded()) {
|
||||||
ConfigManager.applyConfig();
|
ConfigManager.applyConfig();
|
||||||
settingsApplied = true;
|
settingsApplied = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ModuleManager.INSTANCE.getEnabledModules().forEach(Module::onTick);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -173,7 +172,6 @@ public class CameraTweaks implements ClientModInitializer {
|
|||||||
// maneja la lógica de apertura de la interfaz
|
// maneja la lógica de apertura de la interfaz
|
||||||
private void handleClickGUIKey(int key, boolean anyFocused) {
|
private void handleClickGUIKey(int key, boolean anyFocused) {
|
||||||
if (key != ClientSettingsFrame.guiSettings.getKey() || anyFocused) return;
|
if (key != ClientSettingsFrame.guiSettings.getKey() || anyFocused) return;
|
||||||
if (!(mc != null && mc.world != null && mc.player != null)) return;
|
|
||||||
|
|
||||||
// al parecer esto hace que con la tecla de la interfaz puedas ir cambiando de splash text en la pantalla del título
|
// al parecer esto hace que con la tecla de la interfaz puedas ir cambiando de splash text en la pantalla del título
|
||||||
// pero me ha hecho gracia así que así se queda
|
// pero me ha hecho gracia así que así se queda
|
||||||
@@ -189,7 +187,6 @@ public class CameraTweaks implements ClientModInitializer {
|
|||||||
// manejar la lógica de apertura del editor de elementos del hud, con la misma lógica que handleClickGUIKey()
|
// manejar la lógica de apertura del editor de elementos del hud, con la misma lógica que handleClickGUIKey()
|
||||||
private void handleHudEditorKey(int key, boolean anyFocused) {
|
private void handleHudEditorKey(int key, boolean anyFocused) {
|
||||||
if (key != ModuleManager.INSTANCE.getModuleByClass(HUD.class).editorKey.getKey() || anyFocused) return;
|
if (key != ModuleManager.INSTANCE.getModuleByClass(HUD.class).editorKey.getKey() || anyFocused) return;
|
||||||
if (!(mc != null && mc.world != null && mc.player != null)) return;
|
|
||||||
|
|
||||||
if (mc.currentScreen != HudEditorScreen.INSTANCE) {
|
if (mc.currentScreen != HudEditorScreen.INSTANCE) {
|
||||||
prevScreen = mc.currentScreen;
|
prevScreen = mc.currentScreen;
|
||||||
|
|||||||
@@ -2,10 +2,14 @@ package me.retucio.camtweaks.command;
|
|||||||
|
|
||||||
import com.mojang.brigadier.CommandDispatcher;
|
import com.mojang.brigadier.CommandDispatcher;
|
||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
|
import me.retucio.camtweaks.CameraTweaks;
|
||||||
import me.retucio.camtweaks.command.commands.*;
|
import me.retucio.camtweaks.command.commands.*;
|
||||||
|
import me.retucio.camtweaks.event.SubscribeEvent;
|
||||||
|
import me.retucio.camtweaks.module.Module;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.command.CommandSource;
|
import net.minecraft.command.CommandSource;
|
||||||
|
|
||||||
|
import java.lang.reflect.Method;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Comparator;
|
import java.util.Comparator;
|
||||||
@@ -30,7 +34,7 @@ public class CommandManager {
|
|||||||
public static void registerCommands() {
|
public static void registerCommands() {
|
||||||
addCommand(new BindCommand());
|
addCommand(new BindCommand());
|
||||||
addCommand(new CopyScreenshotCommand());
|
addCommand(new CopyScreenshotCommand());
|
||||||
// addCommand(new EnderChestCommand()); no funciona D:
|
addCommand(new EnderChestCommand());
|
||||||
addCommand(new GarbageCleanerCommand());
|
addCommand(new GarbageCleanerCommand());
|
||||||
addCommand(new PeekCommand());
|
addCommand(new PeekCommand());
|
||||||
addCommand(new PrefixCommand());
|
addCommand(new PrefixCommand());
|
||||||
@@ -40,6 +44,15 @@ public class CommandManager {
|
|||||||
addCommand(new ToggleCommand());
|
addCommand(new ToggleCommand());
|
||||||
|
|
||||||
commands.sort(Comparator.comparing(Command::getName));
|
commands.sort(Comparator.comparing(Command::getName));
|
||||||
|
|
||||||
|
for (Command command : commands) {
|
||||||
|
for (Method method : command.getClass().getDeclaredMethods()) {
|
||||||
|
if (method.isAnnotationPresent(SubscribeEvent.class)) {
|
||||||
|
CameraTweaks.EVENT_BUS.register(command);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void addCommand(Command command) {
|
public static void addCommand(Command command) {
|
||||||
|
|||||||
@@ -1,37 +1,59 @@
|
|||||||
package me.retucio.camtweaks.command.commands;
|
package me.retucio.camtweaks.command.commands;
|
||||||
|
|
||||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||||
|
import me.retucio.camtweaks.CameraTweaks;
|
||||||
import me.retucio.camtweaks.command.Command;
|
import me.retucio.camtweaks.command.Command;
|
||||||
|
import me.retucio.camtweaks.event.SubscribeEvent;
|
||||||
|
import me.retucio.camtweaks.event.events.DisconnectEvent;
|
||||||
|
import me.retucio.camtweaks.event.events.OpenScreenEvent;
|
||||||
|
import me.retucio.camtweaks.event.events.PacketEvent;
|
||||||
|
import me.retucio.camtweaks.event.events.TickEvent;
|
||||||
|
import me.retucio.camtweaks.ui.screen.PreviewScreen;
|
||||||
|
import me.retucio.camtweaks.util.ChatUtil;
|
||||||
|
import me.retucio.camtweaks.util.MiscUtil;
|
||||||
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
|
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
|
||||||
import net.minecraft.command.CommandSource;
|
import net.minecraft.command.CommandSource;
|
||||||
import net.minecraft.inventory.EnderChestInventory;
|
import net.minecraft.inventory.EnderChestInventory;
|
||||||
import net.minecraft.inventory.Inventories;
|
import net.minecraft.inventory.Inventories;
|
||||||
import net.minecraft.inventory.Inventory;
|
import net.minecraft.inventory.Inventory;
|
||||||
import net.minecraft.inventory.SimpleInventory;
|
import net.minecraft.inventory.SimpleInventory;
|
||||||
|
import net.minecraft.network.packet.s2c.play.CloseScreenS2CPacket;
|
||||||
import net.minecraft.screen.GenericContainerScreenHandler;
|
import net.minecraft.screen.GenericContainerScreenHandler;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
|
import net.minecraft.util.ActionResult;
|
||||||
|
|
||||||
// accede a los contenidos de tu enderchest
|
// accede a los contenidos de tu enderchest
|
||||||
public class EnderChestCommand extends Command {
|
public class EnderChestCommand extends Command {
|
||||||
|
|
||||||
|
private boolean shouldOpenEchest = false;
|
||||||
|
|
||||||
public EnderChestCommand() {
|
public EnderChestCommand() {
|
||||||
super("echest", "muestra el contenido de tu enderchest", "ec", "enderchest");
|
super("echest", "muestra el contenido de tu enderchest (solo de ver)", "ec", "enderchest");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||||
builder.executes(ctx -> {
|
builder.executes(ctx -> {
|
||||||
mc.execute(() -> { // para evitar llamar setScreen desde el hilo equivocado, que causa crashes
|
mc.execute(() -> {
|
||||||
EnderChestInventory enderChestInv = mc.player.getEnderChestInventory();
|
if (mc.player == null) return;
|
||||||
|
if (MiscUtil.getEchestInv() == null) {
|
||||||
|
ChatUtil.warn("necesitas abrir un enderchest una vez primero");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// llámame imbécil pero no tengo ni idea de por qué no se abre
|
shouldOpenEchest = true;
|
||||||
mc.setScreen(new GenericContainerScreen(
|
|
||||||
GenericContainerScreenHandler.createGeneric9x3(mc.player.currentScreenHandler.syncId + 1, mc.player.getInventory(), enderChestInv),
|
|
||||||
mc.player.getInventory(),
|
|
||||||
Text.translatable("container.enderchest")
|
|
||||||
));
|
|
||||||
});
|
});
|
||||||
|
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public void tickEvent(TickEvent.Post event) {
|
||||||
|
if (shouldOpenEchest) {
|
||||||
|
shouldOpenEchest = false;
|
||||||
|
if (MiscUtil.getEchestInv() != null)
|
||||||
|
mc.setScreen(new PreviewScreen(MiscUtil.getEchestInv(), null));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -23,6 +23,7 @@ public class ConfigManager {
|
|||||||
|
|
||||||
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
|
private static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
|
||||||
private static final File CONFIG_FILE = new File("camera_tweaks.json");
|
private static final File CONFIG_FILE = new File("camera_tweaks.json");
|
||||||
|
private static boolean loaded = false;
|
||||||
|
|
||||||
private static ClientConfig config = null;
|
private static ClientConfig config = null;
|
||||||
|
|
||||||
@@ -93,6 +94,8 @@ public class ConfigManager {
|
|||||||
|
|
||||||
CameraTweaks.LOGGER.info("posiciones de frames cargadas");
|
CameraTweaks.LOGGER.info("posiciones de frames cargadas");
|
||||||
ClickGUI.INSTANCE.refreshListButtons();
|
ClickGUI.INSTANCE.refreshListButtons();
|
||||||
|
|
||||||
|
loaded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static ClientConfig getConfig() {
|
public static ClientConfig getConfig() {
|
||||||
@@ -166,4 +169,8 @@ public class ConfigManager {
|
|||||||
private static void ensureConfig() {
|
private static void ensureConfig() {
|
||||||
if (config == null) config = new ClientConfig();
|
if (config == null) config = new ClientConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean hasLoaded() {
|
||||||
|
return loaded;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package me.retucio.camtweaks.event.events;
|
||||||
|
|
||||||
|
import me.retucio.camtweaks.event.Event;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
|
||||||
|
public class DamageItemEvent extends Event {
|
||||||
|
|
||||||
|
private final int amount;
|
||||||
|
private final ItemStack stack;
|
||||||
|
|
||||||
|
public DamageItemEvent(int amount, ItemStack stack) {
|
||||||
|
this.amount = amount;
|
||||||
|
this.stack = stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getAmount() {
|
||||||
|
return amount;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack getStack() {
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
package me.retucio.camtweaks.event.events;
|
||||||
|
|
||||||
|
import me.retucio.camtweaks.event.Event;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.Hand;
|
||||||
|
|
||||||
|
public class UseItemEvent extends Event {
|
||||||
|
|
||||||
|
private ItemStack stack;
|
||||||
|
private Hand hand;
|
||||||
|
|
||||||
|
public UseItemEvent(ItemStack stack, Hand hand) {
|
||||||
|
this.stack = stack;
|
||||||
|
this.hand = hand;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ItemStack getStack() {
|
||||||
|
return stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setStack(ItemStack stack) {
|
||||||
|
this.stack = stack;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Hand getHand() {
|
||||||
|
return hand;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setHand(Hand hand) {
|
||||||
|
this.hand = hand;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package me.retucio.camtweaks.mixin;
|
||||||
|
|
||||||
|
import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
|
||||||
|
import me.retucio.camtweaks.util.render.GlintRenderLayer;
|
||||||
|
import net.minecraft.client.render.BufferBuilderStorage;
|
||||||
|
import net.minecraft.client.render.RenderLayer;
|
||||||
|
import net.minecraft.client.util.BufferAllocator;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@Mixin(BufferBuilderStorage.class)
|
||||||
|
public abstract class BufferStorageMixin {
|
||||||
|
|
||||||
|
@Inject(method = "assignBufferBuilder", at = @At("HEAD"))
|
||||||
|
private static void addGlintTypes(Object2ObjectLinkedOpenHashMap<RenderLayer, BufferAllocator> builderStorage, RenderLayer layer, CallbackInfo ci) {
|
||||||
|
GlintRenderLayer.addGlintTypes(builderStorage);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,67 @@
|
|||||||
|
package me.retucio.camtweaks.mixin;
|
||||||
|
|
||||||
|
import me.retucio.camtweaks.mixin.accessor.ConfirmServerResourcePackScreenAccessor;
|
||||||
|
import me.retucio.camtweaks.mixin.accessor.PackAccessor;
|
||||||
|
import me.retucio.camtweaks.module.ModuleManager;
|
||||||
|
import me.retucio.camtweaks.module.modules.RPackBypass;
|
||||||
|
import me.retucio.camtweaks.util.interfaces.IConfirmScreen;
|
||||||
|
import net.minecraft.client.MinecraftClient;
|
||||||
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
import net.minecraft.client.network.ClientCommonNetworkHandler;
|
||||||
|
import net.minecraft.client.network.ServerInfo;
|
||||||
|
import net.minecraft.client.option.ServerList;
|
||||||
|
import net.minecraft.network.ClientConnection;
|
||||||
|
import net.minecraft.network.packet.c2s.common.ResourcePackStatusC2SPacket;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
import org.spongepowered.asm.mixin.Final;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
import java.net.URL;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
import java.util.concurrent.Executor;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
|
||||||
|
@Mixin(ClientCommonNetworkHandler.class)
|
||||||
|
public abstract class ClientCommonNetworkHandlerMixin {
|
||||||
|
|
||||||
|
@Shadow @Final protected MinecraftClient client;
|
||||||
|
@Shadow @Final protected ServerInfo serverInfo;
|
||||||
|
@Shadow @Final protected ClientConnection connection;
|
||||||
|
|
||||||
|
@Unique // tardar 3 segundos porque algunos servers
|
||||||
|
private final Executor DELAYED_EXECUTOR = CompletableFuture.delayedExecutor(3L, TimeUnit.SECONDS);
|
||||||
|
|
||||||
|
@Inject(method = "createConfirmServerResourcePackScreen", at = @At("TAIL"))
|
||||||
|
private void setScreenBypassAction(UUID id, URL url, String hash, boolean required, Text prompt, CallbackInfoReturnable<Screen> cir) {
|
||||||
|
RPackBypass bypassPack = ModuleManager.INSTANCE.getModuleByClass(RPackBypass.class);
|
||||||
|
if (!bypassPack.isEnabled()) return;
|
||||||
|
|
||||||
|
final Screen screen = cir.getReturnValue();
|
||||||
|
((IConfirmScreen) screen).smegma$setBypassAction(() -> {
|
||||||
|
client.setScreen(((ConfirmServerResourcePackScreenAccessor) screen).getParentScreen());
|
||||||
|
if (this.serverInfo != null) {
|
||||||
|
this.serverInfo.setResourcePackPolicy(bypassPack.getPolicy());
|
||||||
|
this.client.getServerResourcePackProvider().acceptAll();
|
||||||
|
ServerList.updateServerListEntry(this.serverInfo);
|
||||||
|
}
|
||||||
|
bypass(((ConfirmServerResourcePackScreenAccessor) screen).getRequests().stream().map(PackAccessor::callId).toList());
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
public void bypass(List<UUID> ids) {
|
||||||
|
ids.forEach(id -> connection.send(new ResourcePackStatusC2SPacket(id, ResourcePackStatusC2SPacket.Status.ACCEPTED)));
|
||||||
|
ids.forEach(id -> connection.send(new ResourcePackStatusC2SPacket(id, ResourcePackStatusC2SPacket.Status.DOWNLOADED)));
|
||||||
|
DELAYED_EXECUTOR.execute(() ->
|
||||||
|
ids.forEach(id -> connection.send(new ResourcePackStatusC2SPacket(id, ResourcePackStatusC2SPacket.Status.SUCCESSFULLY_LOADED)))
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,39 @@
|
|||||||
|
package me.retucio.camtweaks.mixin;
|
||||||
|
|
||||||
|
import me.retucio.camtweaks.module.ModuleManager;
|
||||||
|
import me.retucio.camtweaks.module.modules.RPackBypass;
|
||||||
|
import me.retucio.camtweaks.util.interfaces.IConfirmScreen;
|
||||||
|
import net.minecraft.client.gui.screen.ConfirmScreen;
|
||||||
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
import net.minecraft.client.gui.widget.ButtonWidget;
|
||||||
|
import net.minecraft.client.gui.widget.DirectionalLayoutWidget;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@Mixin(ConfirmScreen.class)
|
||||||
|
public abstract class ConfirmScreenMixin extends Screen implements IConfirmScreen {
|
||||||
|
|
||||||
|
@Shadow protected DirectionalLayoutWidget layout;
|
||||||
|
@Unique private Runnable bypassAction = null;
|
||||||
|
|
||||||
|
protected ConfirmScreenMixin(final Text title) {
|
||||||
|
super(title);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "init", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/screen/ConfirmScreen;addButtons(Lnet/minecraft/client/gui/widget/DirectionalLayoutWidget;)V", shift = At.Shift.AFTER))
|
||||||
|
protected void addBypassButton(CallbackInfo ci) {
|
||||||
|
RPackBypass bypassPack = ModuleManager.INSTANCE.getModuleByClass(RPackBypass.class);
|
||||||
|
if (this.bypassAction != null && bypassPack.isEnabled())
|
||||||
|
this.layout.add(ButtonWidget.builder(bypassPack.BYPASS_TEXT, $ -> this.bypassAction.run()).build());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void smegma$setBypassAction(Runnable bypass) {
|
||||||
|
this.bypassAction = bypass;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ package me.retucio.camtweaks.mixin;
|
|||||||
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
|
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
|
||||||
import me.retucio.camtweaks.module.ModuleManager;
|
import me.retucio.camtweaks.module.ModuleManager;
|
||||||
import me.retucio.camtweaks.module.modules.CritsPlus;
|
import me.retucio.camtweaks.module.modules.CritsPlus;
|
||||||
|
import me.retucio.camtweaks.util.Colors;
|
||||||
import net.minecraft.client.particle.BillboardParticle;
|
import net.minecraft.client.particle.BillboardParticle;
|
||||||
import net.minecraft.client.particle.DamageParticle;
|
import net.minecraft.client.particle.DamageParticle;
|
||||||
import net.minecraft.client.particle.ParticleTextureSheet;
|
import net.minecraft.client.particle.ParticleTextureSheet;
|
||||||
@@ -32,9 +33,7 @@ abstract class DamageParticleFactoryMixin {
|
|||||||
if (!crits.isEnabled()) return original;
|
if (!crits.isEnabled()) return original;
|
||||||
|
|
||||||
if (crits.rainbow.isEnabled()) {
|
if (crits.rainbow.isEnabled()) {
|
||||||
float speed = 10001 - crits.rainbowSpeed.getFloatValue();
|
Color gamning = Colors.rainbowColor(crits.rainbowSpeed.getIntValue(), crits.alpha.getIntValue());
|
||||||
float hue = (System.currentTimeMillis() % (int) speed) / speed;
|
|
||||||
Color gamning = Color.getHSBColor(hue, 1, 1);
|
|
||||||
original.setColor(
|
original.setColor(
|
||||||
gamning.getRed() / 255f,
|
gamning.getRed() / 255f,
|
||||||
gamning.getGreen() / 255f,
|
gamning.getGreen() / 255f,
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
package me.retucio.camtweaks.mixin;
|
||||||
|
|
||||||
|
import me.retucio.camtweaks.module.ModuleManager;
|
||||||
|
import me.retucio.camtweaks.module.modules.GlintPlus;
|
||||||
|
import net.minecraft.client.render.RenderLayer;
|
||||||
|
import net.minecraft.client.render.entity.equipment.EquipmentRenderer;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
|
|
||||||
|
@Mixin(EquipmentRenderer.class)
|
||||||
|
public abstract class EquipmentRendererMixin {
|
||||||
|
|
||||||
|
@Redirect(method = "render(Lnet/minecraft/client/render/entity/equipment/EquipmentModel$LayerType;Lnet/minecraft/registry/RegistryKey;Lnet/minecraft/client/model/Model;Ljava/lang/Object;Lnet/minecraft/item/ItemStack;Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/command/OrderedRenderCommandQueue;ILnet/minecraft/util/Identifier;II)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/RenderLayer;getArmorEntityGlint()Lnet/minecraft/client/render/RenderLayer;"))
|
||||||
|
private RenderLayer redirectArmorEntityGlint() {
|
||||||
|
GlintPlus glintPlus = ModuleManager.INSTANCE.getModuleByClass(GlintPlus.class);
|
||||||
|
return glintPlus.getArmorEntityGlint();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,34 @@
|
|||||||
|
package me.retucio.camtweaks.mixin;
|
||||||
|
|
||||||
|
import me.retucio.camtweaks.module.ModuleManager;
|
||||||
|
import me.retucio.camtweaks.module.modules.GlintPlus;
|
||||||
|
import net.minecraft.client.render.RenderLayer;
|
||||||
|
import net.minecraft.client.render.item.ItemRenderer;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Redirect;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
@Mixin(ItemRenderer.class)
|
||||||
|
public abstract class ItemRendererMixin {
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
private static GlintPlus glintPlus;
|
||||||
|
|
||||||
|
@Inject(method = "<init>", at = @At("TAIL"))
|
||||||
|
private void getModules(CallbackInfo ci) {
|
||||||
|
glintPlus = ModuleManager.INSTANCE.getModuleByClass(GlintPlus.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Redirect(method = "getItemGlintConsumer", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/RenderLayer;getGlint()Lnet/minecraft/client/render/RenderLayer;"))
|
||||||
|
private static RenderLayer getGlint() {
|
||||||
|
return glintPlus.getGlint();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Redirect(method = "getItemGlintConsumer", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/render/RenderLayer;getEntityGlint()Lnet/minecraft/client/render/RenderLayer;"))
|
||||||
|
private static RenderLayer getEntityGlint() {
|
||||||
|
return glintPlus.getEntityGlint();
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
package me.retucio.camtweaks.mixin;
|
||||||
|
|
||||||
|
import me.retucio.camtweaks.event.events.DamageItemEvent;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
|
import static me.retucio.camtweaks.CameraTweaks.EVENT_BUS;
|
||||||
|
|
||||||
|
@Mixin(ItemStack.class)
|
||||||
|
public abstract class ItemStackMixin {
|
||||||
|
|
||||||
|
@Inject(method = "setDamage", at = @At("HEAD"))
|
||||||
|
private void onDamage(int damage, CallbackInfo ci) {
|
||||||
|
ItemStack stack = (ItemStack) (Object) this;
|
||||||
|
EVENT_BUS.post(new DamageItemEvent(damage, stack));
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -5,9 +5,11 @@ import com.mojang.blaze3d.systems.RenderSystem;
|
|||||||
import com.mojang.blaze3d.textures.GpuTexture;
|
import com.mojang.blaze3d.textures.GpuTexture;
|
||||||
import me.retucio.camtweaks.module.ModuleManager;
|
import me.retucio.camtweaks.module.ModuleManager;
|
||||||
import me.retucio.camtweaks.module.modules.Fullbright;
|
import me.retucio.camtweaks.module.modules.Fullbright;
|
||||||
|
import me.retucio.camtweaks.module.modules.NoRender;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.render.GameRenderer;
|
import net.minecraft.client.render.GameRenderer;
|
||||||
import net.minecraft.client.render.LightmapTextureManager;
|
import net.minecraft.client.render.LightmapTextureManager;
|
||||||
|
import net.minecraft.entity.LivingEntity;
|
||||||
import net.minecraft.util.math.ColorHelper;
|
import net.minecraft.util.math.ColorHelper;
|
||||||
import net.minecraft.util.profiler.Profiler;
|
import net.minecraft.util.profiler.Profiler;
|
||||||
import org.spongepowered.asm.mixin.Final;
|
import org.spongepowered.asm.mixin.Final;
|
||||||
@@ -17,6 +19,7 @@ import org.spongepowered.asm.mixin.Unique;
|
|||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
@Mixin(LightmapTextureManager.class)
|
@Mixin(LightmapTextureManager.class)
|
||||||
public abstract class LightmapTextureManagerMixin {
|
public abstract class LightmapTextureManagerMixin {
|
||||||
@@ -24,12 +27,16 @@ public abstract class LightmapTextureManagerMixin {
|
|||||||
@Unique
|
@Unique
|
||||||
Fullbright fullbright;
|
Fullbright fullbright;
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
NoRender noRender;
|
||||||
|
|
||||||
@Shadow @Final
|
@Shadow @Final
|
||||||
private GpuTexture glTexture;
|
private GpuTexture glTexture;
|
||||||
|
|
||||||
@Inject(method = "<init>", at = @At("TAIL"))
|
@Inject(method = "<init>", at = @At("TAIL"))
|
||||||
private void getModules(GameRenderer renderer, MinecraftClient client, CallbackInfo ci) {
|
private void getModules(GameRenderer renderer, MinecraftClient client, CallbackInfo ci) {
|
||||||
fullbright = ModuleManager.INSTANCE.getModuleByClass(Fullbright.class);
|
fullbright = ModuleManager.INSTANCE.getModuleByClass(Fullbright.class);
|
||||||
|
noRender = ModuleManager.INSTANCE.getModuleByClass(NoRender.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiler/Profiler;push(Ljava/lang/String;)V", shift = At.Shift.AFTER), cancellable = true)
|
@Inject(method = "update", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/profiler/Profiler;push(Ljava/lang/String;)V", shift = At.Shift.AFTER), cancellable = true)
|
||||||
@@ -45,4 +52,9 @@ public abstract class LightmapTextureManagerMixin {
|
|||||||
ci.cancel();
|
ci.cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject(method = "getDarkness", at = @At("HEAD"), cancellable = true)
|
||||||
|
private void noRenderDarkness(LivingEntity entity, float factor, float tickProgress, CallbackInfoReturnable<Float> cir) {
|
||||||
|
if (noRender.isEnabled() && !noRender.darknessEffect.isEnabled()) cir.setReturnValue(0f);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -7,11 +7,13 @@ import me.retucio.camtweaks.CameraTweaks;
|
|||||||
import me.retucio.camtweaks.event.events.OpenScreenEvent;
|
import me.retucio.camtweaks.event.events.OpenScreenEvent;
|
||||||
import me.retucio.camtweaks.event.events.ShutdownEvent;
|
import me.retucio.camtweaks.event.events.ShutdownEvent;
|
||||||
import me.retucio.camtweaks.event.events.TickEvent;
|
import me.retucio.camtweaks.event.events.TickEvent;
|
||||||
|
import me.retucio.camtweaks.event.events.UseItemEvent;
|
||||||
import me.retucio.camtweaks.module.ModuleManager;
|
import me.retucio.camtweaks.module.ModuleManager;
|
||||||
import me.retucio.camtweaks.module.modules.FastUse;
|
import me.retucio.camtweaks.module.modules.FastUse;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.util.Hand;
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
import org.spongepowered.asm.mixin.Shadow;
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
import org.spongepowered.asm.mixin.injection.At;
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
@@ -20,6 +22,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
|||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
import static me.retucio.camtweaks.CameraTweaks.EVENT_BUS;
|
import static me.retucio.camtweaks.CameraTweaks.EVENT_BUS;
|
||||||
|
import static me.retucio.camtweaks.CameraTweaks.mc;
|
||||||
|
|
||||||
@Mixin(MinecraftClient.class)
|
@Mixin(MinecraftClient.class)
|
||||||
public abstract class MinecraftClientMixin {
|
public abstract class MinecraftClientMixin {
|
||||||
@@ -54,6 +57,13 @@ public abstract class MinecraftClientMixin {
|
|||||||
cir.setReturnValue(false);
|
cir.setReturnValue(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Inject(method = "doItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/network/ClientPlayerEntity;getStackInHand(Lnet/minecraft/util/Hand;)Lnet/minecraft/item/ItemStack;"), cancellable = true)
|
||||||
|
private void onUseItem(CallbackInfo ci, @Local Hand hand) {
|
||||||
|
if (mc.player == null) return;
|
||||||
|
UseItemEvent event = EVENT_BUS.post(new UseItemEvent(mc.player.getStackInHand(hand), hand));
|
||||||
|
if (event.isCancelled()) ci.cancel();
|
||||||
|
}
|
||||||
|
|
||||||
@Inject(method = "doItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isItemEnabled(Lnet/minecraft/resource/featuretoggle/FeatureSet;)Z"))
|
@Inject(method = "doItemUse", at = @At(value = "INVOKE", target = "Lnet/minecraft/item/ItemStack;isItemEnabled(Lnet/minecraft/resource/featuretoggle/FeatureSet;)Z"))
|
||||||
private void modifyItemUseCooldown(CallbackInfo ci, @Local ItemStack stack) {
|
private void modifyItemUseCooldown(CallbackInfo ci, @Local ItemStack stack) {
|
||||||
FastUse fastUse = ModuleManager.INSTANCE.getModuleByClass(FastUse.class);
|
FastUse fastUse = ModuleManager.INSTANCE.getModuleByClass(FastUse.class);
|
||||||
|
|||||||
@@ -0,0 +1,44 @@
|
|||||||
|
package me.retucio.camtweaks.mixin;
|
||||||
|
|
||||||
|
import me.retucio.camtweaks.module.ModuleManager;
|
||||||
|
import me.retucio.camtweaks.module.modules.RPackBypass;
|
||||||
|
import net.minecraft.client.network.ServerInfo;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
|
import org.spongepowered.asm.mixin.gen.Invoker;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
@Mixin(ServerInfo.ResourcePackPolicy.class)
|
||||||
|
public abstract class ResourcePackPolicyMixin {
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
private static ServerInfo.ResourcePackPolicy BYPASS;
|
||||||
|
|
||||||
|
@Invoker("<init>")
|
||||||
|
public static ServerInfo.ResourcePackPolicy init(final String enumName, final int enumOrdinal, final String name) {
|
||||||
|
throw new AssertionError();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "values", at = @At("TAIL"), cancellable = true)
|
||||||
|
private static void addVariant(CallbackInfoReturnable<ServerInfo.ResourcePackPolicy[]> cir) {
|
||||||
|
RPackBypass bypassPack = ModuleManager.INSTANCE.getModuleByClass(RPackBypass.class);
|
||||||
|
if (!bypassPack.isEnabled()) return;
|
||||||
|
|
||||||
|
ServerInfo.ResourcePackPolicy[] values = cir.getReturnValue();
|
||||||
|
final int ordinal = values.length;
|
||||||
|
cir.setReturnValue(values = Arrays.copyOfRange(values, 0, ordinal + 1));
|
||||||
|
values[ordinal] = BYPASS = init(bypassPack.ENUM_NAME, ordinal, "bypass");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "getName", at = @At("HEAD"), cancellable = true)
|
||||||
|
private void addToGetName(final CallbackInfoReturnable<Text> cir) {
|
||||||
|
RPackBypass bypassPack = ModuleManager.INSTANCE.getModuleByClass(RPackBypass.class);
|
||||||
|
if (BYPASS == (Object) this && bypassPack.isEnabled())
|
||||||
|
cir.setReturnValue(bypassPack.BYPASS_TEXT);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,6 +3,7 @@ package me.retucio.camtweaks.mixin;
|
|||||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||||
import me.retucio.camtweaks.CameraTweaks;
|
import me.retucio.camtweaks.CameraTweaks;
|
||||||
import me.retucio.camtweaks.command.CommandManager;
|
import me.retucio.camtweaks.command.CommandManager;
|
||||||
|
import me.retucio.camtweaks.config.ConfigManager;
|
||||||
import me.retucio.camtweaks.event.events.ClientClickEvent;
|
import me.retucio.camtweaks.event.events.ClientClickEvent;
|
||||||
import me.retucio.camtweaks.ui.frames.ClientSettingsFrame;
|
import me.retucio.camtweaks.ui.frames.ClientSettingsFrame;
|
||||||
import net.minecraft.SharedConstants;
|
import net.minecraft.SharedConstants;
|
||||||
@@ -31,6 +32,7 @@ public class ScreenMixin {
|
|||||||
|
|
||||||
@Inject(method = "render", at = @At("HEAD"))
|
@Inject(method = "render", at = @At("HEAD"))
|
||||||
private void renderWatermark(DrawContext context, int mouseX, int mouseY, float deltaTicks, CallbackInfo ci) {
|
private void renderWatermark(DrawContext context, int mouseX, int mouseY, float deltaTicks, CallbackInfo ci) {
|
||||||
|
if (!ConfigManager.hasLoaded()) return; // para evitar dibujar la marca de agua por defecto
|
||||||
String watermark = ClientSettingsFrame.guiSettings.watermark.getValue();
|
String watermark = ClientSettingsFrame.guiSettings.watermark.getValue();
|
||||||
if (watermark == null || watermark.isEmpty()) return;
|
if (watermark == null || watermark.isEmpty()) return;
|
||||||
context.drawText(mc.textRenderer, watermark,
|
context.drawText(mc.textRenderer, watermark,
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
package me.retucio.camtweaks.mixin;
|
||||||
|
|
||||||
|
import me.retucio.camtweaks.module.ModuleManager;
|
||||||
|
import me.retucio.camtweaks.module.modules.RPackBypass;
|
||||||
|
import net.minecraft.client.network.ServerInfo;
|
||||||
|
import net.minecraft.client.resource.server.ServerResourcePackManager;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
@Mixin(targets = "net.minecraft.client.gui.screen.multiplayer.ConnectScreen$1")
|
||||||
|
public abstract class ServerConnectorMixin {
|
||||||
|
|
||||||
|
@Inject(method = "toAcceptanceStatus", at = @At("HEAD"), cancellable = true)
|
||||||
|
private static void guardSwitchCase(ServerInfo.ResourcePackPolicy policy, CallbackInfoReturnable<ServerResourcePackManager.AcceptanceStatus> cir) {
|
||||||
|
RPackBypass bypassPack = ModuleManager.INSTANCE.getModuleByClass(RPackBypass.class);
|
||||||
|
if (!bypassPack.isEnabled()) return;
|
||||||
|
if (policy == bypassPack.getPolicy())
|
||||||
|
cir.setReturnValue(ServerResourcePackManager.AcceptanceStatus.ALLOWED);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,54 @@
|
|||||||
|
package me.retucio.camtweaks.mixin;
|
||||||
|
|
||||||
|
import me.retucio.camtweaks.module.ModuleManager;
|
||||||
|
import me.retucio.camtweaks.module.modules.RPackBypass;
|
||||||
|
import net.minecraft.client.network.ServerInfo;
|
||||||
|
import net.minecraft.nbt.NbtCompound;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
import org.spongepowered.asm.mixin.Unique;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||||
|
|
||||||
|
@Mixin(ServerInfo.class)
|
||||||
|
public abstract class ServerInfoMixin {
|
||||||
|
|
||||||
|
@Shadow private ServerInfo.ResourcePackPolicy resourcePackPolicy;
|
||||||
|
@Unique private boolean isBypassStatus;
|
||||||
|
|
||||||
|
@Unique
|
||||||
|
private static RPackBypass bypassPack;
|
||||||
|
|
||||||
|
@Inject(method = "<init>", at = @At("TAIL"))
|
||||||
|
private void getModules(String name, String address, ServerInfo.ServerType serverType, CallbackInfo ci) {
|
||||||
|
bypassPack = ModuleManager.INSTANCE.getModuleByClass(RPackBypass.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "fromNbt", at = @At("TAIL"))
|
||||||
|
private static void addToRead(NbtCompound root, CallbackInfoReturnable<ServerInfo> cir) {
|
||||||
|
if (!bypassPack.isEnabled()) return;
|
||||||
|
if (root.getBoolean(bypassPack.TAG_NAME, false))
|
||||||
|
cir.getReturnValue().setResourcePackPolicy(bypassPack.getPolicy());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "toNbt", at = @At("HEAD"))
|
||||||
|
private void preWrite(CallbackInfoReturnable<NbtCompound> cir) {
|
||||||
|
if (!bypassPack.isEnabled()) return;
|
||||||
|
if (this.resourcePackPolicy == bypassPack.getPolicy()) {
|
||||||
|
this.isBypassStatus = true;
|
||||||
|
this.resourcePackPolicy = ServerInfo.ResourcePackPolicy.PROMPT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Inject(method = "toNbt", at = @At("TAIL"))
|
||||||
|
private void addToWrite(CallbackInfoReturnable<NbtCompound> cir) {
|
||||||
|
if (!bypassPack.isEnabled()) return;
|
||||||
|
if (this.isBypassStatus) {
|
||||||
|
cir.getReturnValue().putBoolean(bypassPack.TAG_NAME, true);
|
||||||
|
this.resourcePackPolicy = bypassPack.getPolicy();
|
||||||
|
this.isBypassStatus = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,28 @@
|
|||||||
|
package me.retucio.camtweaks.mixin;
|
||||||
|
|
||||||
|
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
|
||||||
|
import me.retucio.camtweaks.module.ModuleManager;
|
||||||
|
import me.retucio.camtweaks.module.modules.NoRender;
|
||||||
|
import net.minecraft.client.render.fog.StatusEffectFogModifier;
|
||||||
|
import net.minecraft.entity.effect.StatusEffect;
|
||||||
|
import net.minecraft.entity.effect.StatusEffects;
|
||||||
|
import net.minecraft.registry.entry.RegistryEntry;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.Shadow;
|
||||||
|
import org.spongepowered.asm.mixin.injection.At;
|
||||||
|
|
||||||
|
@Mixin(StatusEffectFogModifier.class)
|
||||||
|
public abstract class StatusEffectFogModifierMixin {
|
||||||
|
|
||||||
|
@Shadow
|
||||||
|
public abstract RegistryEntry<StatusEffect> getStatusEffect();
|
||||||
|
|
||||||
|
@ModifyReturnValue(method = "shouldApply", at = @At("RETURN"))
|
||||||
|
public boolean noRenderBadEffects(boolean original) {
|
||||||
|
NoRender noRender = ModuleManager.INSTANCE.getModuleByClass(NoRender.class);
|
||||||
|
if (!noRender.isEnabled()) return original;
|
||||||
|
if (getStatusEffect() == StatusEffects.BLINDNESS && !noRender.blindnessEffect.isEnabled()) return false;
|
||||||
|
if (getStatusEffect() == StatusEffects.DARKNESS && !noRender.darknessEffect.isEnabled()) return false;
|
||||||
|
return original;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -8,6 +8,7 @@ import me.retucio.camtweaks.module.ModuleManager;
|
|||||||
import me.retucio.camtweaks.module.modules.BlockOutline;
|
import me.retucio.camtweaks.module.modules.BlockOutline;
|
||||||
import me.retucio.camtweaks.module.modules.Freecam;
|
import me.retucio.camtweaks.module.modules.Freecam;
|
||||||
import me.retucio.camtweaks.module.modules.NoRender;
|
import me.retucio.camtweaks.module.modules.NoRender;
|
||||||
|
import me.retucio.camtweaks.util.Colors;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.render.*;
|
import net.minecraft.client.render.*;
|
||||||
import net.minecraft.client.render.state.WorldRenderState;
|
import net.minecraft.client.render.state.WorldRenderState;
|
||||||
@@ -77,16 +78,7 @@ public abstract class WorldRendererMixin {
|
|||||||
if (!outline.isEnabled()) return ColorHelper.withAlpha(alpha, rgb);
|
if (!outline.isEnabled()) return ColorHelper.withAlpha(alpha, rgb);
|
||||||
|
|
||||||
if (outline.rainbow.isEnabled()) {
|
if (outline.rainbow.isEnabled()) {
|
||||||
float speed = 10001 - outline.rainbowSpeed.getFloatValue(); // 10001 para evitar divisiones por cero
|
return Colors.rainbowInt(outline.rainbowSpeed.getIntValue(), outline.alpha.getIntValue());
|
||||||
float hue = (System.currentTimeMillis() % (int) speed) / speed;
|
|
||||||
Color gamingProMax = Color.getHSBColor(hue, 1, 1);
|
|
||||||
|
|
||||||
return new Color(
|
|
||||||
gamingProMax.getRed(),
|
|
||||||
gamingProMax.getGreen(),
|
|
||||||
gamingProMax.getBlue(),
|
|
||||||
outline.alpha.getIntValue()
|
|
||||||
).getRGB();
|
|
||||||
} else {
|
} else {
|
||||||
return new Color(
|
return new Color(
|
||||||
outline.red.getIntValue(),
|
outline.red.getIntValue(),
|
||||||
|
|||||||
@@ -0,0 +1,18 @@
|
|||||||
|
package me.retucio.camtweaks.mixin.accessor;
|
||||||
|
|
||||||
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
import net.minecraft.client.network.ClientCommonNetworkHandler;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@Mixin(ClientCommonNetworkHandler.ConfirmServerResourcePackScreen.class)
|
||||||
|
public interface ConfirmServerResourcePackScreenAccessor {
|
||||||
|
|
||||||
|
@Accessor("parent")
|
||||||
|
Screen getParentScreen();
|
||||||
|
|
||||||
|
@Accessor("packs")
|
||||||
|
List<? extends PackAccessor> getRequests();
|
||||||
|
}
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package me.retucio.camtweaks.mixin.accessor;
|
||||||
|
|
||||||
|
import net.minecraft.client.network.ClientCommonNetworkHandler;
|
||||||
|
import org.spongepowered.asm.mixin.Mixin;
|
||||||
|
import org.spongepowered.asm.mixin.gen.Invoker;
|
||||||
|
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
@Mixin(ClientCommonNetworkHandler.ConfirmServerResourcePackScreen.Pack.class)
|
||||||
|
public interface PackAccessor {
|
||||||
|
|
||||||
|
@Invoker
|
||||||
|
UUID callId();
|
||||||
|
}
|
||||||
@@ -40,6 +40,7 @@ public class ModuleManager {
|
|||||||
modules.add(new Freecam());
|
modules.add(new Freecam());
|
||||||
modules.add(new Freelook());
|
modules.add(new Freelook());
|
||||||
modules.add(new Fullbright());
|
modules.add(new Fullbright());
|
||||||
|
modules.add(new GlintPlus());
|
||||||
modules.add(new HandView());
|
modules.add(new HandView());
|
||||||
modules.add(new Headhitters());
|
modules.add(new Headhitters());
|
||||||
modules.add(new HUD());
|
modules.add(new HUD());
|
||||||
@@ -50,10 +51,11 @@ public class ModuleManager {
|
|||||||
modules.add(new PerspectivePlus());
|
modules.add(new PerspectivePlus());
|
||||||
modules.add(new PortalGUI());
|
modules.add(new PortalGUI());
|
||||||
modules.add(new Rotations());
|
modules.add(new Rotations());
|
||||||
|
modules.add(new RPackBypass());
|
||||||
modules.add(new ScreenshotPlus());
|
modules.add(new ScreenshotPlus());
|
||||||
modules.add(new ShulkerPeek());
|
modules.add(new ShulkerPeek());
|
||||||
modules.add(new TimeChanger());
|
modules.add(new TimeChanger());
|
||||||
// modules.add(new TooltipsPlus());
|
modules.add(new WarnLowDurability());
|
||||||
modules.add(new Zoom());
|
modules.add(new Zoom());
|
||||||
|
|
||||||
modules.sort(Comparator.comparing(module -> module.getName().toLowerCase()));
|
modules.sort(Comparator.comparing(module -> module.getName().toLowerCase()));
|
||||||
|
|||||||
@@ -31,7 +31,11 @@ public class Freelook extends Module {
|
|||||||
public Freelook() {
|
public Freelook() {
|
||||||
super("perspectiva libre", "te permite mover la cámara de la perspectiva sin mover la del jugador, o vice versa");
|
super("perspectiva libre", "te permite mover la cámara de la perspectiva sin mover la del jugador, o vice versa");
|
||||||
assignKey(GLFW.GLFW_KEY_B);
|
assignKey(GLFW.GLFW_KEY_B);
|
||||||
|
|
||||||
|
keyMode.setDefaultValue(KeyModes.HOLD);
|
||||||
keyMode.setValue(KeyModes.HOLD);
|
keyMode.setValue(KeyModes.HOLD);
|
||||||
|
|
||||||
|
notify.setDefaultValue(false);
|
||||||
notify.setEnabled(false);
|
notify.setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -104,14 +104,18 @@ public class GUI extends Module {
|
|||||||
green.onUpdate(g -> applyRGBAColorUpdates());
|
green.onUpdate(g -> applyRGBAColorUpdates());
|
||||||
blue.onUpdate(b -> applyRGBAColorUpdates());
|
blue.onUpdate(b -> applyRGBAColorUpdates());
|
||||||
alpha.onUpdate(a -> applyRGBAColorUpdates());
|
alpha.onUpdate(a -> applyRGBAColorUpdates());
|
||||||
|
|
||||||
|
// muy mierdas la solución pero funciona
|
||||||
|
red.reset();
|
||||||
|
green.reset();
|
||||||
|
blue.reset();
|
||||||
|
alpha.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public void onTick(TickEvent.Post event) {
|
public void onTick(TickEvent.Post event) {
|
||||||
if (rainbow.isEnabled()) {
|
if (rainbow.isEnabled()) {
|
||||||
float speed = (float) (rainbowSpeed.getMax() - rainbowSpeed.getValue());
|
Color color = Colors.rainbowColor(rainbowSpeed.getIntValue(), alpha.getIntValue(), saturation.getFloatValue(), brightness.getFloatValue());
|
||||||
float hue = (System.currentTimeMillis() % (long) speed) / speed;
|
|
||||||
Color color = Color.getHSBColor(hue, saturation.getFloatValue(), brightness.getFloatValue());
|
|
||||||
|
|
||||||
Colors.red = color.getRed();
|
Colors.red = color.getRed();
|
||||||
Colors.green = color.getGreen();
|
Colors.green = color.getGreen();
|
||||||
|
|||||||
@@ -0,0 +1,87 @@
|
|||||||
|
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.util.render.GlintRenderLayer;
|
||||||
|
import net.minecraft.client.render.RenderLayer;
|
||||||
|
import net.minecraft.util.DyeColor;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
|
|
||||||
|
/** continúa en:
|
||||||
|
* @see me.retucio.camtweaks.mixin.BufferStorageMixin
|
||||||
|
* @see me.retucio.camtweaks.mixin.EquipmentRendererMixin
|
||||||
|
* @see me.retucio.camtweaks.mixin.ItemRendererMixin
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class GlintPlus extends Module {
|
||||||
|
|
||||||
|
public BooleanSetting items = addSetting(new BooleanSetting("items", "modificar el destello de encantamiento de los items", true));
|
||||||
|
public BooleanSetting armor = addSetting(new BooleanSetting("armadura", "modificar el destello de encantamiento de la armadura", true));
|
||||||
|
public EnumSetting<GlintColors> glintColor = addSetting(new EnumSetting<>("colores", "color del glint", GlintColors.class, GlintColors.PURPLE));
|
||||||
|
|
||||||
|
public GlintPlus() {
|
||||||
|
super("destello de enchants.", "modifica el color del brillo de los encantamientos");
|
||||||
|
}
|
||||||
|
|
||||||
|
public RenderLayer getGlint() {
|
||||||
|
int color = getColor();
|
||||||
|
if (!isEnabled() || !items.isEnabled()) return RenderLayer.getGlint();
|
||||||
|
return GlintRenderLayer.glintColor.get(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RenderLayer getEntityGlint() {
|
||||||
|
int color = getColor();
|
||||||
|
if (!isEnabled() || !items.isEnabled()) return RenderLayer.getEntityGlint();
|
||||||
|
return GlintRenderLayer.entityGlintColor.get(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
public RenderLayer getArmorEntityGlint() {
|
||||||
|
int color = getColor();
|
||||||
|
if (!isEnabled() || !armor.isEnabled()) return RenderLayer.getArmorEntityGlint();
|
||||||
|
return GlintRenderLayer.armorEntityGlintColor.get(color);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getColor() {
|
||||||
|
String colorName = glintColor.getValue().getRealName().toLowerCase();
|
||||||
|
|
||||||
|
switch (colorName) {
|
||||||
|
case "rainbow":
|
||||||
|
return DyeColor.values().length;
|
||||||
|
case "none":
|
||||||
|
return DyeColor.values().length + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (DyeColor dye : DyeColor.values())
|
||||||
|
if (dye.name().equalsIgnoreCase(colorName)) return dye.getIndex();
|
||||||
|
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum GlintColors {
|
||||||
|
RED("rojo"),
|
||||||
|
ORANGE("naranja"),
|
||||||
|
YELLOW("amarillo"),
|
||||||
|
LIME("lima"),
|
||||||
|
GREEN("verde"),
|
||||||
|
CYAN("cian"),
|
||||||
|
LIGHT_BLUE("celeste"),
|
||||||
|
BLUE("azul"),
|
||||||
|
PURPLE("morado"),
|
||||||
|
MAGENTA("magenta"),
|
||||||
|
PINK("rosa"),
|
||||||
|
BROWN("marrón"),
|
||||||
|
BLACK("negro"),
|
||||||
|
GRAY("gris"),
|
||||||
|
LIGHT_GRAY("plata"),
|
||||||
|
WHITE("blanco"),
|
||||||
|
RAINBOW("gay."),
|
||||||
|
NONE("desactivado");
|
||||||
|
|
||||||
|
private final String name;
|
||||||
|
GlintColors(String name) { this.name = name; }
|
||||||
|
@Override public String toString() { return name; }
|
||||||
|
public String getRealName() { return super.toString(); }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,12 +11,12 @@ import net.minecraft.util.Formatting;
|
|||||||
|
|
||||||
/** continúa en:
|
/** continúa en:
|
||||||
* @see me.retucio.camtweaks.mixin.ClientPlayNetworkHandlerMixin
|
* @see me.retucio.camtweaks.mixin.ClientPlayNetworkHandlerMixin
|
||||||
* @see me.retucio.camtweaks.mixin.EntityEffectParticleEffectMixin
|
|
||||||
* @see me.retucio.camtweaks.mixin.FogRendererMixin
|
* @see me.retucio.camtweaks.mixin.FogRendererMixin
|
||||||
* @see me.retucio.camtweaks.mixin.GameRendererMixin
|
* @see me.retucio.camtweaks.mixin.GameRendererMixin
|
||||||
* @see me.retucio.camtweaks.mixin.InGameHudMixin
|
* @see me.retucio.camtweaks.mixin.InGameHudMixin
|
||||||
* @see me.retucio.camtweaks.mixin.InGameOverlayRendererMixin
|
* @see me.retucio.camtweaks.mixin.InGameOverlayRendererMixin
|
||||||
* @see me.retucio.camtweaks.mixin.ParticleManagerMixin
|
* @see me.retucio.camtweaks.mixin.ParticleManagerMixin
|
||||||
|
* @see me.retucio.camtweaks.mixin.StatusEffectFogModifierMixin
|
||||||
* @see me.retucio.camtweaks.mixin.StuckArrowsFeatureRendererMixin
|
* @see me.retucio.camtweaks.mixin.StuckArrowsFeatureRendererMixin
|
||||||
* @see me.retucio.camtweaks.mixin.TextRendererDrawerMixin
|
* @see me.retucio.camtweaks.mixin.TextRendererDrawerMixin
|
||||||
* @see me.retucio.camtweaks.mixin.WeatherRenderingMixin
|
* @see me.retucio.camtweaks.mixin.WeatherRenderingMixin
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package me.retucio.camtweaks.module.modules;
|
||||||
|
|
||||||
|
import me.retucio.camtweaks.module.Module;
|
||||||
|
import net.minecraft.client.network.ServerInfo;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
|
|
||||||
|
/** continúa en:
|
||||||
|
* @see me.retucio.camtweaks.mixin.ClientCommonNetworkHandlerMixin
|
||||||
|
* @see me.retucio.camtweaks.mixin.ConfirmScreenMixin
|
||||||
|
* @see me.retucio.camtweaks.mixin.ResourcePackPolicyMixin
|
||||||
|
* @see me.retucio.camtweaks.mixin.ServerConnectorMixin
|
||||||
|
* @see me.retucio.camtweaks.mixin.ServerInfoMixin
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class RPackBypass extends Module {
|
||||||
|
|
||||||
|
public String TAG_NAME = "bypassTextures";
|
||||||
|
public String ENUM_NAME = "BYPASS";
|
||||||
|
public Text BYPASS_TEXT = Text.literal("nuh uh");
|
||||||
|
|
||||||
|
public RPackBypass() {
|
||||||
|
super("bypassear packs", "te permite omitir packs de recursos forzados por servers");
|
||||||
|
}
|
||||||
|
|
||||||
|
public ServerInfo.ResourcePackPolicy getPolicy() {
|
||||||
|
return ServerInfo.ResourcePackPolicy.valueOf(ENUM_NAME);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -6,34 +6,28 @@ import me.retucio.camtweaks.mixin.accessor.HandledScreenAccessor;
|
|||||||
import me.retucio.camtweaks.module.Module;
|
import me.retucio.camtweaks.module.Module;
|
||||||
import me.retucio.camtweaks.module.settings.BooleanSetting;
|
import me.retucio.camtweaks.module.settings.BooleanSetting;
|
||||||
import me.retucio.camtweaks.module.settings.KeySetting;
|
import me.retucio.camtweaks.module.settings.KeySetting;
|
||||||
import me.retucio.camtweaks.ui.screen.ShulkerPreviewScreen;
|
import me.retucio.camtweaks.ui.screen.PreviewScreen;
|
||||||
|
import me.retucio.camtweaks.util.ChatUtil;
|
||||||
|
import me.retucio.camtweaks.util.Colors;
|
||||||
|
|
||||||
|
import me.retucio.camtweaks.util.MiscUtil;
|
||||||
import net.minecraft.block.ShulkerBoxBlock;
|
import net.minecraft.block.ShulkerBoxBlock;
|
||||||
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
import net.minecraft.client.gui.screen.ingame.HandledScreen;
|
import net.minecraft.client.gui.screen.ingame.HandledScreen;
|
||||||
import net.minecraft.component.ComponentType;
|
|
||||||
import net.minecraft.component.DataComponentTypes;
|
import net.minecraft.component.DataComponentTypes;
|
||||||
import net.minecraft.component.type.ContainerComponent;
|
import net.minecraft.component.type.ContainerComponent;
|
||||||
import net.minecraft.component.type.TooltipDisplayComponent;
|
|
||||||
import net.minecraft.item.BlockItem;
|
import net.minecraft.item.BlockItem;
|
||||||
import net.minecraft.item.Item;
|
import net.minecraft.item.Item;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.Items;
|
import net.minecraft.item.Items;
|
||||||
import net.minecraft.item.tooltip.TooltipType;
|
|
||||||
import net.minecraft.screen.slot.Slot;
|
import net.minecraft.screen.slot.Slot;
|
||||||
|
|
||||||
import net.minecraft.text.Text;
|
|
||||||
import org.lwjgl.glfw.GLFW;
|
import org.lwjgl.glfw.GLFW;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.function.Consumer;
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
public class ShulkerPeek extends Module {
|
public class ShulkerPeek extends Module {
|
||||||
|
|
||||||
public KeySetting previewKey = addSetting(new KeySetting("tecla de previsualización", "tecla a mantener para previsualizar", GLFW.GLFW_KEY_LEFT_ALT));
|
public KeySetting previewKey = addSetting(new KeySetting("tecla de previsualización", "tecla a mantener para previsualizar", GLFW.GLFW_KEY_LEFT_ALT));
|
||||||
@@ -45,23 +39,23 @@ public class ShulkerPeek extends Module {
|
|||||||
super("prev. de shulkers", "te permite previsualizar el contenido de shulkers desde el inventario");
|
super("prev. de shulkers", "te permite previsualizar el contenido de shulkers desde el inventario");
|
||||||
|
|
||||||
// colores y tal (https://github.com/kgriff0n/shulker-preview)
|
// colores y tal (https://github.com/kgriff0n/shulker-preview)
|
||||||
SHULKER_COLORS.put(Items.SHULKER_BOX, new Color(142, 108, 142));
|
SHULKER_COLORS.put(Items.SHULKER_BOX, Colors.LAVENDER);
|
||||||
SHULKER_COLORS.put(Items.WHITE_SHULKER_BOX, new Color(225, 230, 230));
|
SHULKER_COLORS.put(Items.WHITE_SHULKER_BOX, Colors.WHITE);
|
||||||
SHULKER_COLORS.put(Items.LIGHT_GRAY_SHULKER_BOX, new Color(137, 137, 128));
|
SHULKER_COLORS.put(Items.LIGHT_GRAY_SHULKER_BOX, Colors.SILVER);
|
||||||
SHULKER_COLORS.put(Items.GRAY_SHULKER_BOX, new Color(60, 65, 68));
|
SHULKER_COLORS.put(Items.GRAY_SHULKER_BOX, Colors.GRAY);
|
||||||
SHULKER_COLORS.put(Items.BLACK_SHULKER_BOX, new Color(31, 31, 35));
|
SHULKER_COLORS.put(Items.BLACK_SHULKER_BOX, Colors.BLACK);
|
||||||
SHULKER_COLORS.put(Items.BROWN_SHULKER_BOX, new Color(113, 70, 39));
|
SHULKER_COLORS.put(Items.BROWN_SHULKER_BOX, Colors.BROWN);
|
||||||
SHULKER_COLORS.put(Items.RED_SHULKER_BOX, new Color(152, 36, 34));
|
SHULKER_COLORS.put(Items.RED_SHULKER_BOX, Colors.RED);
|
||||||
SHULKER_COLORS.put(Items.ORANGE_SHULKER_BOX, new Color(241, 114, 15));
|
SHULKER_COLORS.put(Items.ORANGE_SHULKER_BOX, Colors.ORANGE);
|
||||||
SHULKER_COLORS.put(Items.YELLOW_SHULKER_BOX, new Color(249, 196, 35));
|
SHULKER_COLORS.put(Items.YELLOW_SHULKER_BOX, Colors.YELLOW);
|
||||||
SHULKER_COLORS.put(Items.LIME_SHULKER_BOX, new Color(110, 185, 24));
|
SHULKER_COLORS.put(Items.LIME_SHULKER_BOX, Colors.LIME);
|
||||||
SHULKER_COLORS.put(Items.GREEN_SHULKER_BOX, new Color(83, 107, 29));
|
SHULKER_COLORS.put(Items.GREEN_SHULKER_BOX, Colors.GREEN);
|
||||||
SHULKER_COLORS.put(Items.CYAN_SHULKER_BOX, new Color(22, 133, 144));
|
SHULKER_COLORS.put(Items.CYAN_SHULKER_BOX, Colors.CYAN);
|
||||||
SHULKER_COLORS.put(Items.LIGHT_BLUE_SHULKER_BOX, new Color(57, 177, 215));
|
SHULKER_COLORS.put(Items.LIGHT_BLUE_SHULKER_BOX, Colors.CELESTE);
|
||||||
SHULKER_COLORS.put(Items.BLUE_SHULKER_BOX, new Color(49, 52, 152));
|
SHULKER_COLORS.put(Items.BLUE_SHULKER_BOX, Colors.BLUE);
|
||||||
SHULKER_COLORS.put(Items.PURPLE_SHULKER_BOX, new Color(113, 37, 166));
|
SHULKER_COLORS.put(Items.PURPLE_SHULKER_BOX, Colors.PURPLE);
|
||||||
SHULKER_COLORS.put(Items.MAGENTA_SHULKER_BOX, new Color(183, 61, 172));
|
SHULKER_COLORS.put(Items.MAGENTA_SHULKER_BOX, Colors.MAGENTA);
|
||||||
SHULKER_COLORS.put(Items.PINK_SHULKER_BOX, new Color(239, 135, 166));
|
SHULKER_COLORS.put(Items.PINK_SHULKER_BOX, Colors.PINK);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
@@ -75,31 +69,45 @@ public class ShulkerPeek extends Module {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (event.getAction() == GLFW.GLFW_REPEAT) {
|
if (event.getAction() == GLFW.GLFW_REPEAT) {
|
||||||
if (!(mc.currentScreen instanceof ShulkerPreviewScreen)) {
|
if (mc.currentScreen instanceof PreviewScreen preview) {
|
||||||
openPreviewScreen();
|
if (preview.getType() != PreviewScreen.PreviewType.SHULKER)
|
||||||
return;
|
openPreviewScreen();
|
||||||
}
|
} else openPreviewScreen();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (event.getAction() == GLFW.GLFW_RELEASE) {
|
if (event.getAction() == GLFW.GLFW_RELEASE) {
|
||||||
if (mc.currentScreen instanceof ShulkerPreviewScreen preview)
|
if (mc.currentScreen instanceof PreviewScreen preview)
|
||||||
preview.close();
|
preview.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openPreviewScreen() {
|
private void openPreviewScreen() {
|
||||||
if (!(mc.currentScreen instanceof HandledScreen<?> prevScreen)) return;
|
ItemStack stack;
|
||||||
|
|
||||||
Slot focusedSlot = ((HandledScreenAccessor) prevScreen).getFocusedSlot();
|
if (mc.currentScreen instanceof PreviewScreen previewScreen) {
|
||||||
if (focusedSlot == null) return;
|
int focusedSlot = previewScreen.getFocusedSlot();
|
||||||
|
if (focusedSlot == -1) return;
|
||||||
|
stack = previewScreen.getInventory().get(focusedSlot);
|
||||||
|
} else if (mc.currentScreen instanceof HandledScreen<?> handledScreen) {
|
||||||
|
stack = ((HandledScreenAccessor) handledScreen).getFocusedSlot().getStack();
|
||||||
|
} else return;
|
||||||
|
|
||||||
ItemStack stack = focusedSlot.getStack();
|
if (stack.getItem() == Items.ENDER_CHEST) {
|
||||||
if (isShulkerEmpty(stack)) return;
|
if (MiscUtil.getEchestInv() == null) {
|
||||||
|
ChatUtil.warn("abre un enderchest primero");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
mc.setScreen(new PreviewScreen(MiscUtil.getEchestInv(), mc.currentScreen));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
mc.setScreen(new ShulkerPreviewScreen(stack, prevScreen));
|
else if (isShulkerEmpty(stack)) return;
|
||||||
|
mc.setScreen(new PreviewScreen(stack, mc.currentScreen));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isShulkerEmpty(ItemStack stack) {
|
public static boolean isShulkerEmpty(ItemStack stack) {
|
||||||
|
if (stack == null) return true;
|
||||||
if (!(stack.getItem() instanceof BlockItem blockItem)) return true;
|
if (!(stack.getItem() instanceof BlockItem blockItem)) return true;
|
||||||
if (!(blockItem.getBlock() instanceof ShulkerBoxBlock)) return true;
|
if (!(blockItem.getBlock() instanceof ShulkerBoxBlock)) return true;
|
||||||
|
|
||||||
|
|||||||
@@ -1,51 +0,0 @@
|
|||||||
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.KeySetting;
|
|
||||||
import org.lwjgl.glfw.GLFW;
|
|
||||||
|
|
||||||
public class TooltipsPlus extends Module {
|
|
||||||
|
|
||||||
public EnumSetting<DisplayModes> displayMode = addSetting(new EnumSetting<>(
|
|
||||||
"mostrar", "cúando mostrar la cajita de los huevos", DisplayModes.class, DisplayModes.ALWAYS));
|
|
||||||
|
|
||||||
public KeySetting displayKey = addSetting(new KeySetting(
|
|
||||||
"tecla de visualización", "tecla a presionar para mostrar la cajita", GLFW.GLFW_KEY_LEFT_CONTROL));
|
|
||||||
|
|
||||||
public BooleanSetting middleClickPreview = addSetting(new BooleanSetting("preview de middle click",
|
|
||||||
"abre una interfaz con los contenidos de un bloque de almacenamiento al presionar el middle click (la ruedita)", false));
|
|
||||||
|
|
||||||
public EnumSetting<SizeFormat> itemSize = addSetting(new EnumSetting<>(
|
|
||||||
"tamaño del ítem", "cómo mostrar el tamaño del ítem en memoria", SizeFormat.class, SizeFormat.NONE));
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public TooltipsPlus() {
|
|
||||||
super("tooltips plus", "mejoras varias a las cajitas de descripción de items");
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum DisplayModes {
|
|
||||||
ALWAYS("siempre"),
|
|
||||||
KEY("al presionar una tecla"),
|
|
||||||
NEVER("nunca");
|
|
||||||
|
|
||||||
final String name;
|
|
||||||
DisplayModes(String name) { this.name = name; }
|
|
||||||
@Override public String toString() { return name; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum SizeFormat {
|
|
||||||
NONE("no mostrar"),
|
|
||||||
BYTES("bytes"),
|
|
||||||
KB("kilobytes"),
|
|
||||||
MB("megabytes");
|
|
||||||
|
|
||||||
final String name;
|
|
||||||
SizeFormat(String name) { this.name = name; }
|
|
||||||
@Override public String toString() { return name; }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,49 @@
|
|||||||
|
package me.retucio.camtweaks.module.modules;
|
||||||
|
|
||||||
|
import me.retucio.camtweaks.event.SubscribeEvent;
|
||||||
|
import me.retucio.camtweaks.event.events.DamageItemEvent;
|
||||||
|
import me.retucio.camtweaks.module.Module;
|
||||||
|
import me.retucio.camtweaks.module.settings.BooleanSetting;
|
||||||
|
import me.retucio.camtweaks.module.settings.NumberSetting;
|
||||||
|
import me.retucio.camtweaks.util.ChatUtil;
|
||||||
|
import net.minecraft.item.ItemStack;
|
||||||
|
import net.minecraft.sound.SoundCategory;
|
||||||
|
import net.minecraft.sound.SoundEvents;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
import net.minecraft.util.Formatting;
|
||||||
|
|
||||||
|
public class WarnLowDurability extends Module {
|
||||||
|
|
||||||
|
public NumberSetting limitPercentage = addSetting(new NumberSetting("porcentaje", "porcentaje de durabilidad restante a la que se te avisa",
|
||||||
|
5, 1, 100, 1));
|
||||||
|
|
||||||
|
public BooleanSetting message = addSetting(new BooleanSetting("mensaje", "enviar un mensaje para alertar al usuario", true));
|
||||||
|
public BooleanSetting sound = addSetting(new BooleanSetting("sonido", "reproducir un sonido para alertar al usuario", true));
|
||||||
|
|
||||||
|
public WarnLowDurability() {
|
||||||
|
super("aviso de baja dur.", "te avisa cuando la herramienta que sostengas sobrepase un límite de durabilidad");
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public void onDecreaseDurability(DamageItemEvent event) {
|
||||||
|
if (mc.player == null || mc.world == null) return;
|
||||||
|
ItemStack stack = event.getStack();
|
||||||
|
|
||||||
|
double percentage = 100 * (1 - ((double) stack.getDamage() / stack.getMaxDamage()));
|
||||||
|
if (percentage <= limitPercentage.getValue()) {
|
||||||
|
|
||||||
|
if (sound.isEnabled())
|
||||||
|
mc.world.playSound(mc.player, mc.player.getBlockPos(),
|
||||||
|
SoundEvents.BLOCK_BELL_USE, SoundCategory.AMBIENT, 1, 1);
|
||||||
|
|
||||||
|
if (message.isEnabled()) {
|
||||||
|
String customName = stack.getCustomName() == null ? "" : " \"" + stack.getCustomName().getString() + "\"";
|
||||||
|
Text text = Text.literal(Formatting.AQUA + stack.getItemName().getString()
|
||||||
|
+ Formatting.GREEN + customName + Formatting.RESET
|
||||||
|
+ " a " + Formatting.GOLD + ((int) percentage + "") + "%"
|
||||||
|
+ Formatting.RESET + " de durabilidad");
|
||||||
|
mc.execute(() -> ChatUtil.warn(text)); // en mc.execute porque si lo llamo directamente, lo hago desde el thread del server que causa un error
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -38,19 +38,19 @@ public class Zoom extends Module {
|
|||||||
|
|
||||||
public Zoom() {
|
public Zoom() {
|
||||||
super("zoom", "lupa");
|
super("zoom", "lupa");
|
||||||
super.keyMode.setValue(KeyModes.HOLD);
|
|
||||||
super.keyMode.setDefaultValue(KeyModes.HOLD);
|
|
||||||
super.notify.setEnabled(false);
|
|
||||||
super.notify.setDefaultValue(false);
|
|
||||||
assignKey(GLFW.GLFW_KEY_F);
|
assignKey(GLFW.GLFW_KEY_F);
|
||||||
|
|
||||||
|
keyMode.setDefaultValue(KeyModes.HOLD);
|
||||||
|
keyMode.setValue(KeyModes.HOLD);
|
||||||
|
|
||||||
|
notify.setDefaultValue(false);
|
||||||
|
notify.setEnabled(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
if (mc.options == null) return;
|
if (mc.options == null) return;
|
||||||
|
|
||||||
CameraTweaks.EVENT_BUS.register(this);
|
|
||||||
|
|
||||||
prevSmoothCam = mc.options.smoothCameraEnabled;
|
prevSmoothCam = mc.options.smoothCameraEnabled;
|
||||||
prevMouseSens = mc.options.getMouseSensitivity().getValue();
|
prevMouseSens = mc.options.getMouseSensitivity().getValue();
|
||||||
prevFov = mc.options.getFov().getValue();
|
prevFov = mc.options.getFov().getValue();
|
||||||
@@ -58,18 +58,21 @@ public class Zoom extends Module {
|
|||||||
mc.options.hudHidden = !showHUD.isEnabled();
|
mc.options.hudHidden = !showHUD.isEnabled();
|
||||||
|
|
||||||
value = defaultZoom.getValue();
|
value = defaultZoom.getValue();
|
||||||
|
|
||||||
|
super.onEnable();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onDisable() {
|
public void onDisable() {
|
||||||
if (mc.options == null) return;
|
if (mc.options == null) return;
|
||||||
CameraTweaks.EVENT_BUS.unregister(this);
|
|
||||||
|
|
||||||
mc.options.smoothCameraEnabled = prevSmoothCam;
|
mc.options.smoothCameraEnabled = prevSmoothCam;
|
||||||
mc.options.getMouseSensitivity().setValue(prevMouseSens);
|
mc.options.getMouseSensitivity().setValue(prevMouseSens);
|
||||||
mc.options.hudHidden = prevHUD;
|
mc.options.hudHidden = prevHUD;
|
||||||
|
|
||||||
mc.worldRenderer.scheduleTerrainUpdate();
|
mc.worldRenderer.scheduleTerrainUpdate();
|
||||||
|
|
||||||
|
super.onDisable();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ import me.retucio.camtweaks.module.modules.HUD;
|
|||||||
import me.retucio.camtweaks.ui.screen.HudEditorScreen;
|
import me.retucio.camtweaks.ui.screen.HudEditorScreen;
|
||||||
import me.retucio.camtweaks.ui.widgets.HudElement;
|
import me.retucio.camtweaks.ui.widgets.HudElement;
|
||||||
|
|
||||||
|
import me.retucio.camtweaks.util.Colors;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.client.gui.screen.ChatScreen;
|
import net.minecraft.client.gui.screen.ChatScreen;
|
||||||
@@ -95,12 +96,9 @@ public class HudRenderer {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Color getColor(HUD hud) {
|
public static Color getColor(HUD hud) {
|
||||||
if (hud.rainbow.isEnabled()) {
|
if (hud.rainbow.isEnabled())
|
||||||
float speed = 10001 - hud.rainbowSpeed.getFloatValue();
|
return Colors.rainbowColor(hud.rainbowSpeed.getIntValue(), hud.alpha.getIntValue());
|
||||||
float hue = (System.currentTimeMillis() % (int) speed) / speed;
|
|
||||||
Color rgb = Color.getHSBColor(hue, 1, 1);
|
|
||||||
return new Color(rgb.getRed(), rgb.getGreen(), rgb.getBlue(), hud.alpha.getIntValue());
|
|
||||||
}
|
|
||||||
return new Color(hud.red.getIntValue(), hud.green.getIntValue(), hud.blue.getIntValue(), hud.alpha.getIntValue());
|
return new Color(hud.red.getIntValue(), hud.green.getIntValue(), hud.blue.getIntValue(), hud.alpha.getIntValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,7 +129,7 @@ public class HudRenderer {
|
|||||||
|
|
||||||
HUD hud = ModuleManager.INSTANCE.getModuleByClass(HUD.class);
|
HUD hud = ModuleManager.INSTANCE.getModuleByClass(HUD.class);
|
||||||
if (!hud.isEnabled()) return;
|
if (!hud.isEnabled()) return;
|
||||||
if (mc.getDebugHud().shouldShowDebugHud() && !hud.showOnF3.isEnabled()) return;
|
if (mc.debugHudEntryList.isF3Enabled() && !hud.showOnF3.isEnabled()) return;
|
||||||
if (mc.currentScreen instanceof ChatScreen && !hud.showOnChat.isEnabled()) return;
|
if (mc.currentScreen instanceof ChatScreen && !hud.showOnChat.isEnabled()) return;
|
||||||
|
|
||||||
initElements();
|
initElements();
|
||||||
|
|||||||
@@ -84,9 +84,29 @@ public class ClickGUI extends Screen {
|
|||||||
|
|
||||||
filterSearchResults();
|
filterSearchResults();
|
||||||
|
|
||||||
|
renderBottomGradient(ctx, scrollOffset);
|
||||||
|
|
||||||
super.render(ctx, mouseX, mouseY, delta);
|
super.render(ctx, mouseX, mouseY, delta);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// renderizar un gradiente negro leve en la parte inferior de la pantalla si el contenido excede el límite inferior de la pantalla, para indicarlo visualmente
|
||||||
|
private void renderBottomGradient(DrawContext ctx, int scrollOffset) {
|
||||||
|
int screenHeight = mc.getWindow().getScaledHeight();
|
||||||
|
int totalContentHeight = calculateContentHeight();
|
||||||
|
|
||||||
|
if (scrollOffset + screenHeight < totalContentHeight) {
|
||||||
|
int gradientHeight = 30;
|
||||||
|
int startY = screenHeight - gradientHeight;
|
||||||
|
|
||||||
|
for (int y = 0; y < gradientHeight; y++) {
|
||||||
|
float alpha = (float) y / gradientHeight;
|
||||||
|
int color = (int) (alpha * 0.7 * 255) << 24;
|
||||||
|
|
||||||
|
ctx.fill(0, startY + y, mc.getWindow().getScaledWidth(), startY + y + 1, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private int calculateContentHeight() {
|
private int calculateContentHeight() {
|
||||||
int bottom = modulesFrame.y + modulesFrame.h + modulesFrame.totalHeight;
|
int bottom = modulesFrame.y + modulesFrame.h + modulesFrame.totalHeight;
|
||||||
for (SettingsFrame frame : settingsFrames)
|
for (SettingsFrame frame : settingsFrames)
|
||||||
|
|||||||
@@ -8,18 +8,19 @@ import net.minecraft.client.gl.RenderPipelines;
|
|||||||
import net.minecraft.client.gui.DrawContext;
|
import net.minecraft.client.gui.DrawContext;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
import net.minecraft.component.DataComponentTypes;
|
import net.minecraft.component.DataComponentTypes;
|
||||||
|
import net.minecraft.inventory.Inventory;
|
||||||
import net.minecraft.item.ItemStack;
|
import net.minecraft.item.ItemStack;
|
||||||
import net.minecraft.item.Items;
|
import net.minecraft.item.Items;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
import net.minecraft.util.Identifier;
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
// https://github.com/kgriff0n/shulker-preview/blob/master/src/main/java/io/github/kgriff0n/screen/FakeShulkerScreen.java
|
public class PreviewScreen extends Screen {
|
||||||
public class ShulkerPreviewScreen extends Screen {
|
|
||||||
|
|
||||||
private static final Identifier TEXTURE = Identifier.of(CameraTweaks.MOD_ID, "textures/gui/shulker.png");
|
private static final Identifier TEXTURE = Identifier.of(CameraTweaks.MOD_ID, "textures/gui/preview.png");
|
||||||
|
|
||||||
private int x, y;
|
private int x, y;
|
||||||
private final int bgWidth = 176;
|
private final int bgWidth = 176;
|
||||||
@@ -29,13 +30,29 @@ public class ShulkerPreviewScreen extends Screen {
|
|||||||
private final Text title;
|
private final Text title;
|
||||||
private final List<ItemStack> inventory;
|
private final List<ItemStack> inventory;
|
||||||
private final Screen parent;
|
private final Screen parent;
|
||||||
|
private final PreviewType type;
|
||||||
|
|
||||||
public ShulkerPreviewScreen(ItemStack shulker, Screen parent) {
|
private int focusedSlot;
|
||||||
|
|
||||||
|
public PreviewScreen(ItemStack shulker, Screen parent) {
|
||||||
super(Text.literal("previsualización del shulker"));
|
super(Text.literal("previsualización del shulker"));
|
||||||
this.color = ShulkerPeek.SHULKER_COLORS.get(shulker.getItem());
|
this.color = ShulkerPeek.SHULKER_COLORS.get(shulker.getItem());
|
||||||
this.title = shulker.getName();
|
this.title = shulker.getName();
|
||||||
this.inventory = shulker.get(DataComponentTypes.CONTAINER).stream().toList();
|
this.inventory = shulker.get(DataComponentTypes.CONTAINER).stream().toList();
|
||||||
this.parent = parent;
|
this.parent = parent;
|
||||||
|
this.type = PreviewType.SHULKER;
|
||||||
|
}
|
||||||
|
|
||||||
|
public PreviewScreen(Inventory inventory, Screen parent) {
|
||||||
|
super(Text.literal("echest"));
|
||||||
|
this.color = Colors.PURPLE;
|
||||||
|
this.title = Text.of("echest");
|
||||||
|
this.inventory = new ArrayList<>();
|
||||||
|
this.parent = parent;
|
||||||
|
this.type = PreviewType.ECHEST;
|
||||||
|
|
||||||
|
for (int i = 0; i < inventory.size(); i++)
|
||||||
|
this.inventory.add(inventory.getStack(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -54,6 +71,7 @@ public class ShulkerPreviewScreen extends Screen {
|
|||||||
int selectedSlot = getSlot(mouseX, mouseY);
|
int selectedSlot = getSlot(mouseX, mouseY);
|
||||||
if (selectedSlot > -1 && selectedSlot < inventory.size() && !inventory.get(selectedSlot).isOf(Items.AIR))
|
if (selectedSlot > -1 && selectedSlot < inventory.size() && !inventory.get(selectedSlot).isOf(Items.AIR))
|
||||||
renderTooltip(ctx, inventory.get(selectedSlot), mouseX, mouseY);
|
renderTooltip(ctx, inventory.get(selectedSlot), mouseX, mouseY);
|
||||||
|
focusedSlot = selectedSlot;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -109,4 +127,25 @@ public class ShulkerPreviewScreen extends Screen {
|
|||||||
public boolean shouldPause() {
|
public boolean shouldPause() {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PreviewType getType() {
|
||||||
|
return this.type;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Screen getParent() {
|
||||||
|
return parent;
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getFocusedSlot() {
|
||||||
|
return focusedSlot;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<ItemStack> getInventory() {
|
||||||
|
return inventory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public enum PreviewType {
|
||||||
|
SHULKER,
|
||||||
|
ECHEST;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -2,7 +2,10 @@ package me.retucio.camtweaks.util;
|
|||||||
|
|
||||||
import net.minecraft.util.Formatting;
|
import net.minecraft.util.Formatting;
|
||||||
|
|
||||||
import java.awt.*;
|
import java.awt.Color;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import static me.retucio.camtweaks.ui.frames.ClientSettingsFrame.guiSettings;
|
import static me.retucio.camtweaks.ui.frames.ClientSettingsFrame.guiSettings;
|
||||||
|
|
||||||
@@ -28,10 +31,67 @@ public class Colors {
|
|||||||
public static Color selectedHudElementOutlineColor;
|
public static Color selectedHudElementOutlineColor;
|
||||||
public static Color unselectedHudElementOutlineColor;
|
public static Color unselectedHudElementOutlineColor;
|
||||||
|
|
||||||
|
public static Color RED = new Color(152, 36, 34);
|
||||||
|
public static Color ORANGE = new Color(241, 114, 15);
|
||||||
|
public static Color YELLOW = new Color(249, 196, 35);
|
||||||
|
public static Color LIME = new Color(110, 185, 24);
|
||||||
|
public static Color GREEN = new Color(83, 107, 29);
|
||||||
|
public static Color CYAN = new Color(22, 133, 144);
|
||||||
|
public static Color CELESTE = new Color(57, 177, 215);
|
||||||
|
public static Color BLUE = new Color(49, 52, 152);
|
||||||
|
public static Color PURPLE = new Color(113, 37, 166);
|
||||||
|
public static Color MAGENTA = new Color(183, 61, 172);
|
||||||
|
public static Color PINK = new Color(239, 135, 166);
|
||||||
|
public static Color LAVENDER = new Color(142, 108, 142);
|
||||||
|
public static Color WHITE = new Color(225, 230, 230);
|
||||||
|
public static Color SILVER = new Color(137, 137, 128);
|
||||||
|
public static Color GRAY = new Color(60, 65, 68);
|
||||||
|
public static Color BLACK = new Color(31, 31, 35);
|
||||||
|
public static Color BROWN = new Color(113, 70, 39);
|
||||||
|
|
||||||
static {
|
static {
|
||||||
updateAllColors(new Color(red, green, blue, alpha));
|
updateAllColors(new Color(red, green, blue, alpha));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int rainbowInt(int rainbowSpeed, int alpha) {
|
||||||
|
float speed = 10001 - rainbowSpeed; // 10001 para evitar divisiones por cero
|
||||||
|
float hue = (System.currentTimeMillis() % (int) speed) / speed;
|
||||||
|
Color gamingProMax = Color.getHSBColor(hue, 1, 1);
|
||||||
|
|
||||||
|
return new Color(
|
||||||
|
gamingProMax.getRed(),
|
||||||
|
gamingProMax.getGreen(),
|
||||||
|
gamingProMax.getBlue(),
|
||||||
|
alpha
|
||||||
|
).getRGB();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Color rainbowColor(int rainbowSpeed, int alpha) {
|
||||||
|
float speed = 10001 - rainbowSpeed; // 10001 para evitar divisiones por cero
|
||||||
|
float hue = (System.currentTimeMillis() % (int) speed) / speed;
|
||||||
|
Color gamingProMax = Color.getHSBColor(hue, 1, 1);
|
||||||
|
|
||||||
|
return new Color(
|
||||||
|
gamingProMax.getRed(),
|
||||||
|
gamingProMax.getGreen(),
|
||||||
|
gamingProMax.getBlue(),
|
||||||
|
alpha
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Color rainbowColor(int rainbowSpeed, int alpha, float saturation, float brightness) {
|
||||||
|
float speed = 10001 - rainbowSpeed; // 10001 para evitar divisiones por cero
|
||||||
|
float hue = (System.currentTimeMillis() % (int) speed) / speed;
|
||||||
|
Color gamingProMax = Color.getHSBColor(hue, saturation, brightness);
|
||||||
|
|
||||||
|
return new Color(
|
||||||
|
gamingProMax.getRed(),
|
||||||
|
gamingProMax.getGreen(),
|
||||||
|
gamingProMax.getBlue(),
|
||||||
|
alpha
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
public static void updateAllColors(Color color) {
|
public static void updateAllColors(Color color) {
|
||||||
mainColor = color;
|
mainColor = color;
|
||||||
enabledToggleButtonColor = mixWithMainColor(new Color(10, 150, 10), 0.8f);
|
enabledToggleButtonColor = mixWithMainColor(new Color(10, 150, 10), 0.8f);
|
||||||
|
|||||||
@@ -10,7 +10,11 @@ import net.minecraft.particle.ParticleTypes;
|
|||||||
import net.minecraft.registry.Registries;
|
import net.minecraft.registry.Registries;
|
||||||
import net.minecraft.text.Text;
|
import net.minecraft.text.Text;
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static me.retucio.camtweaks.util.Colors.*;
|
||||||
|
|
||||||
import static me.retucio.camtweaks.CameraTweaks.mc;
|
import static me.retucio.camtweaks.CameraTweaks.mc;
|
||||||
|
|
||||||
@@ -27,6 +31,8 @@ public class Lists {
|
|||||||
|
|
||||||
public static final List<Block> blockList = Registries.BLOCK.stream().toList();
|
public static final List<Block> blockList = Registries.BLOCK.stream().toList();
|
||||||
|
|
||||||
|
public static final List<Color> colorList = new ArrayList<>();
|
||||||
|
|
||||||
public static void init() {
|
public static void init() {
|
||||||
// no consigo traducir el texto. a tomar por culo, se queda en inglés, si no entiendes pues a estudiar
|
// no consigo traducir el texto. a tomar por culo, se queda en inglés, si no entiendes pues a estudiar
|
||||||
entityNames = getMapOfLists(entityList,
|
entityNames = getMapOfLists(entityList,
|
||||||
@@ -38,6 +44,8 @@ public class Lists {
|
|||||||
|
|
||||||
itemNames = getMapOfLists(itemList,
|
itemNames = getMapOfLists(itemList,
|
||||||
itemList.stream().map(item -> I18n.translate(item.getTranslationKey())).toList());
|
itemList.stream().map(item -> I18n.translate(item.getTranslationKey())).toList());
|
||||||
|
|
||||||
|
colorList.addAll(Arrays.asList(RED, ORANGE, YELLOW, LIME, GREEN, CYAN, CELESTE, BLUE, PURPLE, MAGENTA, PINK, LAVENDER, WHITE, SILVER, GRAY, BLACK, BROWN));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static <T> Map<T, Boolean> allTrue(List<T> options) {
|
public static <T> Map<T, Boolean> allTrue(List<T> options) {
|
||||||
|
|||||||
@@ -1,9 +1,16 @@
|
|||||||
package me.retucio.camtweaks.util;
|
package me.retucio.camtweaks.util;
|
||||||
|
|
||||||
import me.retucio.camtweaks.event.SubscribeEvent;
|
import me.retucio.camtweaks.event.SubscribeEvent;
|
||||||
|
import me.retucio.camtweaks.event.events.DisconnectEvent;
|
||||||
|
import me.retucio.camtweaks.event.events.OpenScreenEvent;
|
||||||
import me.retucio.camtweaks.event.events.TickEvent;
|
import me.retucio.camtweaks.event.events.TickEvent;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
import net.minecraft.client.gui.screen.Screen;
|
||||||
|
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
import net.minecraft.inventory.Inventory;
|
||||||
|
import net.minecraft.screen.GenericContainerScreenHandler;
|
||||||
|
import net.minecraft.text.Text;
|
||||||
|
import net.minecraft.util.annotation.UsesSystemOut;
|
||||||
import net.minecraft.util.math.MathHelper;
|
import net.minecraft.util.math.MathHelper;
|
||||||
import net.minecraft.util.math.Vec3d;
|
import net.minecraft.util.math.Vec3d;
|
||||||
import org.joml.Vector3d;
|
import org.joml.Vector3d;
|
||||||
@@ -13,8 +20,7 @@ import static me.retucio.camtweaks.CameraTweaks.mc;
|
|||||||
public class MiscUtil {
|
public class MiscUtil {
|
||||||
|
|
||||||
public static Screen screen;
|
public static Screen screen;
|
||||||
|
private static Inventory echestInv;
|
||||||
private MiscUtil() {}
|
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onTick(TickEvent.Post event) {
|
public static void onTick(TickEvent.Post event) {
|
||||||
@@ -24,6 +30,23 @@ public class MiscUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public static void onOpenScreen(OpenScreenEvent event) {
|
||||||
|
if (mc.player == null
|
||||||
|
|| event.getScreen() == null
|
||||||
|
|| !(mc.player.currentScreenHandler instanceof GenericContainerScreenHandler handler))
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (event.getScreen() instanceof GenericContainerScreen screen
|
||||||
|
&& screen.getTitle().equals(Text.translatable("container.enderchest")))
|
||||||
|
echestInv = handler.getInventory();
|
||||||
|
}
|
||||||
|
|
||||||
|
@SubscribeEvent
|
||||||
|
public void onDisconnect(DisconnectEvent event) {
|
||||||
|
echestInv = null;
|
||||||
|
}
|
||||||
|
|
||||||
public static void copyVector(Vector3d destination, Vec3d source) {
|
public static void copyVector(Vector3d destination, Vec3d source) {
|
||||||
destination.x = source.x;
|
destination.x = source.x;
|
||||||
destination.y = source.y;
|
destination.y = source.y;
|
||||||
@@ -36,4 +59,8 @@ public class MiscUtil {
|
|||||||
vector.z = MathHelper.lerp(tickDelta, entity.lastRenderZ, entity.getZ());
|
vector.z = MathHelper.lerp(tickDelta, entity.lastRenderZ, entity.getZ());
|
||||||
return vector;
|
return vector;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Inventory getEchestInv() {
|
||||||
|
return echestInv;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
package me.retucio.camtweaks.util.interfaces;
|
||||||
|
|
||||||
|
public interface IConfirmScreen {
|
||||||
|
|
||||||
|
void smegma$setBypassAction(Runnable action);
|
||||||
|
}
|
||||||
@@ -0,0 +1,122 @@
|
|||||||
|
package me.retucio.camtweaks.util.render;
|
||||||
|
|
||||||
|
import com.mojang.blaze3d.pipeline.RenderPipeline;
|
||||||
|
import com.mojang.blaze3d.vertex.VertexFormat;
|
||||||
|
import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap;
|
||||||
|
import me.retucio.camtweaks.CameraTweaks;
|
||||||
|
import net.fabricmc.api.EnvType;
|
||||||
|
import net.fabricmc.api.Environment;
|
||||||
|
import net.minecraft.client.gl.RenderPipelines;
|
||||||
|
import net.minecraft.client.render.BuiltBuffer;
|
||||||
|
import net.minecraft.client.render.RenderLayer;
|
||||||
|
import net.minecraft.client.render.RenderPhase;
|
||||||
|
import net.minecraft.client.util.BufferAllocator;
|
||||||
|
import net.minecraft.util.DyeColor;
|
||||||
|
import net.minecraft.util.Identifier;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
/** clase modificada de RenderLayer para modificar el color del destello de encantamientos
|
||||||
|
* @see me.retucio.camtweaks.module.modules.GlintPlus
|
||||||
|
* yoinkeado de: https://github.com/Pepperoni-Jabroni/NoMorePurple/blob/main/src/main/java/pepjebs/no_more_purple/client/GlintRenderLayer.java
|
||||||
|
* (y actualizado)
|
||||||
|
*/
|
||||||
|
|
||||||
|
public class GlintRenderLayer extends RenderLayer {
|
||||||
|
|
||||||
|
public static List<RenderLayer> glintColor = newRenderList(GlintRenderLayer::buildGlintRenderLayer);
|
||||||
|
public static List<RenderLayer> entityGlintColor = newRenderList(GlintRenderLayer::buildEntityGlintRenderLayer);
|
||||||
|
public static List<RenderLayer> armorGlintColor = newRenderList(GlintRenderLayer::buildArmorGlintRenderLayer);
|
||||||
|
public static List<RenderLayer> armorEntityGlintColor = newRenderList(GlintRenderLayer::buildArmorEntityGlintRenderLayer);
|
||||||
|
|
||||||
|
public static void addGlintTypes(Object2ObjectLinkedOpenHashMap<RenderLayer, BufferAllocator> map) {
|
||||||
|
addGlintTypes(map, glintColor);
|
||||||
|
addGlintTypes(map, entityGlintColor);
|
||||||
|
addGlintTypes(map, armorGlintColor);
|
||||||
|
addGlintTypes(map, armorEntityGlintColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
public GlintRenderLayer(String name, VertexFormat vertexFormat, VertexFormat.DrawMode drawMode, int expectedBufferSize, boolean hasCrumbling, boolean translucent, Runnable startAction, Runnable endAction) {
|
||||||
|
super(name, expectedBufferSize, hasCrumbling, translucent, startAction, endAction);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<RenderLayer> newRenderList(Function<String, RenderLayer> func) {
|
||||||
|
ArrayList<RenderLayer> list = new ArrayList<>(DyeColor.values().length);
|
||||||
|
|
||||||
|
for (DyeColor color : DyeColor.values())
|
||||||
|
list.add(func.apply(color.name()));
|
||||||
|
|
||||||
|
list.add(func.apply("rainbow"));
|
||||||
|
list.add(func.apply("none"));
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void addGlintTypes(Object2ObjectLinkedOpenHashMap<RenderLayer, BufferAllocator> map, List<RenderLayer> typeList) {
|
||||||
|
for(RenderLayer renderType : typeList)
|
||||||
|
if (!map.containsKey(renderType))
|
||||||
|
map.put(renderType, new BufferAllocator(renderType.getExpectedBufferSize()));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static RenderLayer buildGlintRenderLayer(String name) {
|
||||||
|
final Identifier res = Identifier.of(CameraTweaks.MOD_ID, "textures/misc/glint_" + name.toLowerCase() + ".png");
|
||||||
|
|
||||||
|
return RenderLayer.of("glint_" + name, 256, RenderPipelines.GLINT, MultiPhaseParameters.builder()
|
||||||
|
.texturing(RenderPhase.GLINT_TEXTURING)
|
||||||
|
.texture(new Texture(res, false))
|
||||||
|
.texturing(GLINT_TEXTURING)
|
||||||
|
.build(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static RenderLayer buildEntityGlintRenderLayer(String name) {
|
||||||
|
final Identifier res = Identifier.of(CameraTweaks.MOD_ID, "textures/misc/glint_" + name.toLowerCase() + ".png");
|
||||||
|
|
||||||
|
return RenderLayer.of("entity_glint_" + name, 256, RenderPipelines.GLINT, MultiPhaseParameters.builder()
|
||||||
|
.texturing(RenderPhase.ENTITY_GLINT_TEXTURING)
|
||||||
|
.texture(new Texture(res, false))
|
||||||
|
.target(ITEM_ENTITY_TARGET)
|
||||||
|
.texturing(ENTITY_GLINT_TEXTURING)
|
||||||
|
.build(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private static RenderLayer buildArmorGlintRenderLayer(String name) {
|
||||||
|
final Identifier res = Identifier.of(CameraTweaks.MOD_ID, "textures/misc/glint_" + name.toLowerCase() + ".png");
|
||||||
|
|
||||||
|
return RenderLayer.of("armor_glint_" + name, 256, RenderPipelines.GLINT, MultiPhaseParameters.builder()
|
||||||
|
.texturing(RenderPhase.ARMOR_ENTITY_GLINT_TEXTURING)
|
||||||
|
.texture(new Texture(res, false))
|
||||||
|
.texturing(GLINT_TEXTURING)
|
||||||
|
.layering(VIEW_OFFSET_Z_LAYERING)
|
||||||
|
.build(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
private static RenderLayer buildArmorEntityGlintRenderLayer(String name) {
|
||||||
|
final Identifier res = Identifier.of(CameraTweaks.MOD_ID, "textures/misc/glint_" + name.toLowerCase() + ".png");
|
||||||
|
|
||||||
|
return RenderLayer.of("armor_entity_glint_" + name, 256, RenderPipelines.GLINT, MultiPhaseParameters.builder()
|
||||||
|
.texturing(RenderPhase.ARMOR_ENTITY_GLINT_TEXTURING)
|
||||||
|
.texture(new Texture(res, false))
|
||||||
|
.texturing(ENTITY_GLINT_TEXTURING)
|
||||||
|
.layering(VIEW_OFFSET_Z_LAYERING)
|
||||||
|
.build(false));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(BuiltBuffer buffer) {}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VertexFormat getVertexFormat() { return VertexFormat.builder().build(); }
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public VertexFormat.DrawMode getDrawMode() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public RenderPipeline getRenderPipeline() {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 18 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 22 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 20 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 27 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 22 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 5.2 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 28 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 21 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"texture": {
|
||||||
|
"blur": true
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -11,4 +11,7 @@ accessible field net/minecraft/entity/LivingEntity jumpingCooldown I
|
|||||||
|
|
||||||
accessible method net/minecraft/client/render/WorldRenderer method_74752 (Lnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/Frustum;Z)V
|
accessible method net/minecraft/client/render/WorldRenderer method_74752 (Lnet/minecraft/client/render/Camera;Lnet/minecraft/client/render/Frustum;Z)V
|
||||||
accessible method net/minecraft/client/render/GameRenderer getProjectionMatrix (F)Lorg/joml/Matrix4f;
|
accessible method net/minecraft/client/render/GameRenderer getProjectionMatrix (F)Lorg/joml/Matrix4f;
|
||||||
accessible method net/minecraft/client/render/command/DebugHitboxCommandRenderer renderDebugHitbox (Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/state/EntityHitboxAndView;Lnet/minecraft/client/render/VertexConsumer;F)V
|
accessible method net/minecraft/client/render/command/DebugHitboxCommandRenderer renderDebugHitbox (Lnet/minecraft/client/util/math/MatrixStack;Lnet/minecraft/client/render/entity/state/EntityHitboxAndView;Lnet/minecraft/client/render/VertexConsumer;F)V
|
||||||
|
|
||||||
|
accessible class net/minecraft/client/network/ClientCommonNetworkHandler$ConfirmServerResourcePackScreen
|
||||||
|
accessible class net/minecraft/client/network/ClientCommonNetworkHandler$ConfirmServerResourcePackScreen$Pack
|
||||||
@@ -9,11 +9,15 @@
|
|||||||
"HandshakeC2SPacketMixin",
|
"HandshakeC2SPacketMixin",
|
||||||
"ItemEntityMixin",
|
"ItemEntityMixin",
|
||||||
"ItemMixin",
|
"ItemMixin",
|
||||||
|
"ItemStackMixin",
|
||||||
"KeyInputMixin",
|
"KeyInputMixin",
|
||||||
"PlayerEntityMixin",
|
"PlayerEntityMixin",
|
||||||
|
"ServerConnectorMixin",
|
||||||
"StringHelperMixin",
|
"StringHelperMixin",
|
||||||
"Vec3dMixin",
|
"Vec3dMixin",
|
||||||
"YggdrasilUserApiServiceMixin",
|
"YggdrasilUserApiServiceMixin",
|
||||||
|
"accessor.ConfirmServerResourcePackScreenAccessor",
|
||||||
|
"accessor.PackAccessor",
|
||||||
"accessor.StatusEffectInstanceAccessor"
|
"accessor.StatusEffectInstanceAccessor"
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
@@ -24,6 +28,7 @@
|
|||||||
},
|
},
|
||||||
"client": [
|
"client": [
|
||||||
"BossBarHudMixin",
|
"BossBarHudMixin",
|
||||||
|
"BufferStorageMixin",
|
||||||
"CameraMixin",
|
"CameraMixin",
|
||||||
"ChatHudLineMixin",
|
"ChatHudLineMixin",
|
||||||
"ChatHudLineVisibleMixin",
|
"ChatHudLineVisibleMixin",
|
||||||
@@ -32,19 +37,23 @@
|
|||||||
"ChatScreenMixin",
|
"ChatScreenMixin",
|
||||||
"ChunkBorderDebugRendererMixin",
|
"ChunkBorderDebugRendererMixin",
|
||||||
"ChunkOcclusionDataBuilderMixin",
|
"ChunkOcclusionDataBuilderMixin",
|
||||||
|
"ClientCommonNetworkHandlerMixin",
|
||||||
"ClientPlayerEntityMixin",
|
"ClientPlayerEntityMixin",
|
||||||
"ClientPlayerInteractionManagerMixin",
|
"ClientPlayerInteractionManagerMixin",
|
||||||
"ClientPlayNetworkHandlerMixin",
|
"ClientPlayNetworkHandlerMixin",
|
||||||
"ClientWorldMixin",
|
"ClientWorldMixin",
|
||||||
"ClientWorldPropertiesMixin",
|
"ClientWorldPropertiesMixin",
|
||||||
|
"ConfirmScreenMixin",
|
||||||
"DamageParticleFactoryMixin",
|
"DamageParticleFactoryMixin",
|
||||||
"DamageParticleMixin",
|
"DamageParticleMixin",
|
||||||
|
"EquipmentRendererMixin",
|
||||||
"FogRendererMixin",
|
"FogRendererMixin",
|
||||||
"GameOptionsMixin",
|
"GameOptionsMixin",
|
||||||
"GameRendererMixin",
|
"GameRendererMixin",
|
||||||
"HeldItemRendererMixin",
|
"HeldItemRendererMixin",
|
||||||
"InGameHudMixin",
|
"InGameHudMixin",
|
||||||
"InGameOverlayRendererMixin",
|
"InGameOverlayRendererMixin",
|
||||||
|
"ItemRendererMixin",
|
||||||
"KeyboardMixin",
|
"KeyboardMixin",
|
||||||
"LightmapTextureManagerMixin",
|
"LightmapTextureManagerMixin",
|
||||||
"LivingEntityRendererMixin",
|
"LivingEntityRendererMixin",
|
||||||
@@ -53,9 +62,12 @@
|
|||||||
"MouseMixin",
|
"MouseMixin",
|
||||||
"OverlayTextureMixin",
|
"OverlayTextureMixin",
|
||||||
"ParticleManagerMixin",
|
"ParticleManagerMixin",
|
||||||
|
"ResourcePackPolicyMixin",
|
||||||
"ScreenMixin",
|
"ScreenMixin",
|
||||||
"ScreenshotRecorderMixin",
|
"ScreenshotRecorderMixin",
|
||||||
|
"ServerInfoMixin",
|
||||||
"SkyRendererMixin",
|
"SkyRendererMixin",
|
||||||
|
"StatusEffectFogModifierMixin",
|
||||||
"StuckArrowsFeatureRendererMixin",
|
"StuckArrowsFeatureRendererMixin",
|
||||||
"TelemetryManagerMixin",
|
"TelemetryManagerMixin",
|
||||||
"TextRendererDrawerMixin",
|
"TextRendererDrawerMixin",
|
||||||
|
|||||||