v3.7
This commit is contained in:
1 parent
412fe93a89
commit
4d30a16a6a
48 files changed
+435
-173
No files matched your search
+5
-8
@@ -1,21 +1,18 @@
|
||||
# v3.5
|
||||
# v3.7
|
||||
|
||||
## novedades
|
||||
|
||||
### adiciones
|
||||
|
||||
#### comandos nuevos:
|
||||
|
||||
- repesperar: combinación de \$repetir y \$esperar
|
||||
|
||||
#### módulos nuevos:
|
||||
|
||||
- andamios: coloca bloques a tus pies a medida que caminas
|
||||
- cocaína: hace que todo vaya más rápido o más lento
|
||||
- trazos: dibuja líneas apuntando a entidades cercanas
|
||||
|
||||
### arreglos / mejoras
|
||||
|
||||
- opción para no romper el pico en selección de minado
|
||||
- la config. ya funciona de nuevo
|
||||
- la escucha de eventos ha sido arreglada, arreglando cosas como la ruedita del zoom y algunos comandos
|
||||
- selección de minado ya no crashea al no usar pico
|
||||
|
||||
## problemas reconocidos
|
||||
|
||||
|
||||
+1
-1
@@ -10,6 +10,6 @@ fabric_api_version=0.140.2+1.21.11
|
||||
|
||||
neutrino_version=1.1.0
|
||||
|
||||
mod_version=3.6
|
||||
mod_version=3.7
|
||||
maven_group=me.retucio
|
||||
archives_base_name=sputnik
|
||||
@@ -1,6 +1,7 @@
|
||||
package me.retucio.sputnik;
|
||||
|
||||
import com.github.retucio.neutrino.EventBus;
|
||||
import com.github.retucio.neutrino.EventListener;
|
||||
import me.retucio.sputnik.cape.CapeManager;
|
||||
import me.retucio.sputnik.command.CommandManager;
|
||||
import me.retucio.sputnik.command.commands.BindCommand;
|
||||
@@ -235,6 +236,7 @@ public class Sputnik implements ClientModInitializer {
|
||||
|| mc.currentScreen instanceof AbstractCommandBlockScreen;
|
||||
}
|
||||
|
||||
@EventListener
|
||||
// notificar al usuario de que hay una actualización disponible, si la hay
|
||||
public void onSetScreen(OpenScreenEvent event) {
|
||||
if (VersionChecker.shouldShowScreen && event.getScreen() instanceof TitleScreen) {
|
||||
@@ -244,6 +246,7 @@ public class Sputnik implements ClientModInitializer {
|
||||
}
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onStop(ShutdownEvent event) {
|
||||
ConfigManager.save();
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package me.retucio.sputnik.command.commands;
|
||||
|
||||
import com.github.retucio.neutrino.EventListener;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.event.TickEvent;
|
||||
@@ -34,6 +35,7 @@ public class EnderChestCommand extends Command {
|
||||
});
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onTick(TickEvent.Post event) {
|
||||
if (shouldOpenEchest) {
|
||||
shouldOpenEchest = false;
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package me.retucio.sputnik.command.commands;
|
||||
|
||||
import com.github.retucio.neutrino.EventListener;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.command.args.EntityArgumentType;
|
||||
@@ -37,6 +38,7 @@ public class SpectateCommand extends Command {
|
||||
);
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onKey(KeyEvent event) {
|
||||
if (mc.getCameraEntity() != mc.player && mc.currentScreen == null
|
||||
&& event.getKey() == GLFW.GLFW_KEY_ESCAPE && event.getAction() != GLFW.GLFW_RELEASE ) {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package me.retucio.sputnik.config;
|
||||
|
||||
import com.github.retucio.neutrino.EventListener;
|
||||
import me.retucio.sputnik.event.sputnik.*;
|
||||
import me.retucio.sputnik.module.setting.settings.*;
|
||||
import me.retucio.sputnik.ui.screen.ClickGUI;
|
||||
@@ -43,11 +44,13 @@ public class ClientConfig {
|
||||
EVENT_BUS.subscribe(this);
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onToggleModule(ToggleModuleEvent event) {
|
||||
ConfigManager.setModuleState(event.getModule());
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@EventListener
|
||||
public void onUpdateSetting(UpdateSettingEvent event) {
|
||||
if (mc == null || !event.shouldSave()) return;
|
||||
|
||||
@@ -68,20 +71,24 @@ public class ClientConfig {
|
||||
ConfigManager.setSetting(event.getSetting(), value);
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onOpenSettingsFrame(SettingsFrameEvent.Open event) {
|
||||
ConfigManager.setFramePosition(event.getFrame());
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onCloseSettingsFrame(SettingsFrameEvent.Close event) {
|
||||
settingsFrames.remove(event.getFrame().getModule().getName());
|
||||
ConfigManager.save();
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onMoveSettingsFrame(SettingsFrameEvent.Move event) {
|
||||
settingsFrames.replace(event.getFrame().getModule().getName(), new int[]{event.getFrame().getX(), event.getFrame().getY()});
|
||||
ConfigManager.save();
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onExtendModuleFrame(ModuleFrameEvent.Extend event) {
|
||||
extendableFrames.put("M", new FrameData(
|
||||
ClickGUI.INSTANCE.getModulesFrame().getX(),
|
||||
@@ -89,6 +96,7 @@ public class ClientConfig {
|
||||
ClickGUI.INSTANCE.getModulesFrame().extended));
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onMoveModuleFrame(ModuleFrameEvent.Move event) {
|
||||
extendableFrames.replace("M", new FrameData(
|
||||
ClickGUI.INSTANCE.getModulesFrame().getX(),
|
||||
@@ -96,6 +104,7 @@ public class ClientConfig {
|
||||
ClickGUI.INSTANCE.getModulesFrame().extended));
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onExtendGUISettingsFrame(GUISettingsFrameEvent.Extend event) {
|
||||
extendableFrames.put("S", new FrameData(
|
||||
ClickGUI.INSTANCE.getGuiSettingsFrame().getX(),
|
||||
@@ -103,6 +112,7 @@ public class ClientConfig {
|
||||
ClickGUI.INSTANCE.getGuiSettingsFrame().extended));
|
||||
}
|
||||
|
||||
@EventListener
|
||||
public void onMoveGUISettingsFrame(GUISettingsFrameEvent.Move event) {
|
||||
extendableFrames.replace("S", new FrameData(
|
||||
ClickGUI.INSTANCE.getGuiSettingsFrame().getX(),
|
||||
|
||||
+2
-4
@@ -2,9 +2,9 @@ package me.retucio.sputnik.mixin.mixins.screen;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import me.retucio.sputnik.mixin.accessors.KeyBindingAccessor;
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.inventory.CreativeInventoryHotbarKeybinds;
|
||||
import me.retucio.sputnik.util.KeyUtil;
|
||||
import net.minecraft.client.gui.screen.ingame.CreativeInventoryScreen;
|
||||
import net.minecraft.client.input.KeyInput;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
@@ -20,9 +20,7 @@ public abstract class CreativeInventoryScreenMixin {
|
||||
@ModifyExpressionValue(method = "keyPressed", at = @At(value = "INVOKE", target = "Ljava/util/OptionalInt;isPresent()Z"))
|
||||
private boolean makeHotkeysWork(boolean original, @Local(argsOnly = true) KeyInput input) {
|
||||
if (ModuleManager.INSTANCE.getModuleByClass(CreativeInventoryHotbarKeybinds.class).isEnabled())
|
||||
return Arrays.stream(mc.options.hotbarKeys).anyMatch(
|
||||
keyBinding -> ((KeyBindingAccessor) keyBinding).getBoundKey().getCode() == input.getKeycode()
|
||||
);
|
||||
return Arrays.stream(mc.options.hotbarKeys).anyMatch(keyBinding -> KeyUtil.getKey(keyBinding) == input.getKeycode());
|
||||
return original;
|
||||
}
|
||||
}
|
||||
@@ -159,6 +159,7 @@ public class ModuleManager {
|
||||
add(new Nametags());
|
||||
add(new NoRender());
|
||||
add(new Particles());
|
||||
add(new Tracers());
|
||||
}
|
||||
|
||||
private void addWorld() {
|
||||
|
||||
@@ -8,6 +8,11 @@ import me.retucio.sputnik.module.setting.settings.EnumSetting;
|
||||
import me.retucio.sputnik.module.setting.settings.NumberSetting;
|
||||
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
|
||||
|
||||
|
||||
/**
|
||||
* @author retucio
|
||||
*/
|
||||
|
||||
public class Autism extends Module {
|
||||
|
||||
private final NumberSetting interval = sgGeneral.add(new NumberSetting(
|
||||
|
||||
@@ -47,6 +47,8 @@ import org.lwjgl.glfw.GLFW;
|
||||
* @see KeyInputMixin
|
||||
* @see LivingEntityRendererMixin
|
||||
* @see WorldRendererMixin
|
||||
*
|
||||
* @author retucio
|
||||
*/
|
||||
|
||||
public class Freecam extends Module {
|
||||
|
||||
@@ -14,6 +14,8 @@ import org.lwjgl.glfw.GLFW;
|
||||
/** continúa en:
|
||||
* @see CameraMixin
|
||||
* @see EntityMixin
|
||||
*
|
||||
* @author retucio
|
||||
*/
|
||||
|
||||
public class Freelook extends Module {
|
||||
|
||||
@@ -15,13 +15,24 @@ import java.awt.*;
|
||||
|
||||
/** continúa en:
|
||||
* @see LightmapTextureManagerMixin
|
||||
*
|
||||
* @author retucio
|
||||
*/
|
||||
|
||||
public class Fullbright extends Module {
|
||||
|
||||
public final EnumSetting<Modes> mode = sgGeneral.add(new EnumSetting<>("modo", "qué modo de iluminación emplear (usar poción con shaders)", Modes.class, Modes.GAMMA));
|
||||
public final EnumSetting<Modes> mode = sgGeneral.add(new EnumSetting<>(
|
||||
"modo",
|
||||
"qué modo de iluminación emplear (usar poción con shaders)",
|
||||
Modes.class, Modes.GAMMA
|
||||
));
|
||||
|
||||
public final ColorSetting color = sgGeneral.add(new ColorSetting("filtro", "filtro de color", new Color(255, 255, 255, 255), false));
|
||||
public final ColorSetting color = sgGeneral.add(new ColorSetting(
|
||||
"filtro",
|
||||
"filtro de color",
|
||||
new Color(255, 255, 255, 255),
|
||||
false
|
||||
)).visibility(() -> mode.is(Modes.GAMMA));
|
||||
|
||||
public Fullbright() {
|
||||
super("brilli brilli",
|
||||
@@ -32,7 +43,6 @@ public class Fullbright extends Module {
|
||||
mode.onUpdate(mode -> { if (mode != Modes.POTION) disableNightVision(); });
|
||||
mode.onUpdate(mode -> {
|
||||
boolean v = mode.equals(Modes.GAMMA);
|
||||
color.setVisible(v);
|
||||
if (v) disableNightVision();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -11,7 +11,13 @@ import me.retucio.sputnik.module.setting.settings.KeySetting;
|
||||
import me.retucio.sputnik.module.setting.settings.NumberSetting;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
// continúa en CameraMixin
|
||||
|
||||
/** continúa en:
|
||||
* @see me.retucio.sputnik.mixin.mixins.render.CameraMixin
|
||||
*
|
||||
* @author retucio
|
||||
*/
|
||||
|
||||
public class PerspectivePlus extends Module {
|
||||
|
||||
// ajustes
|
||||
|
||||
@@ -8,6 +8,10 @@ import me.retucio.sputnik.module.setting.settings.BooleanSetting;
|
||||
import me.retucio.sputnik.module.setting.settings.NumberSetting;
|
||||
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
|
||||
|
||||
/**
|
||||
* @author retucio
|
||||
*/
|
||||
|
||||
public class Rotations extends Module {
|
||||
|
||||
private final NumberSetting yaw = sgGeneral.add(new NumberSetting("guiñada", "eje vertical - giro horizontal (yaw)", 0, -180, 180, 1));
|
||||
|
||||
@@ -11,7 +11,13 @@ import me.retucio.sputnik.module.setting.settings.KeySetting;
|
||||
import me.retucio.sputnik.module.setting.settings.NumberSetting;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
// continúa en GameRendererMixin
|
||||
|
||||
/** continúa en:
|
||||
* @see me.retucio.sputnik.mixin.mixins.render.GameRendererMixin
|
||||
*
|
||||
* @author retucio
|
||||
*/
|
||||
|
||||
public class Zoom extends Module {
|
||||
|
||||
private final SettingGroup sgVisual = addSg(new SettingGroup("visual", true));
|
||||
@@ -87,6 +93,7 @@ public class Zoom extends Module {
|
||||
mc.options.getMouseSensitivity().setValue(prevMouseSens * mouseSensMultiplier.getValue());
|
||||
}
|
||||
|
||||
@EventListener
|
||||
private void onMouseScroll(MouseScrollEvent event) {
|
||||
boolean key = scrollKey.getValue() == GLFW.GLFW_KEY_UNKNOWN || scrollKey.isDown();
|
||||
if (isEnabled() && scrollSens.getValue() > 0 && key) {
|
||||
|
||||
@@ -17,6 +17,10 @@ import me.retucio.sputnik.module.setting.settings.StringSetting;
|
||||
import me.retucio.sputnik.util.ChatUtil;
|
||||
|
||||
|
||||
/**
|
||||
* @author retucio
|
||||
*/
|
||||
|
||||
public class DiscordRPC extends Module {
|
||||
|
||||
private final SettingGroup sgImage = addSg(new SettingGroup("imágenes", false));
|
||||
|
||||
@@ -21,7 +21,11 @@ import org.lwjgl.glfw.GLFW;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
// módulo no visible solo para los ajustes de la interfaz (y del cliente en general)
|
||||
|
||||
/** módulo no visible solo para los ajustes del mod
|
||||
* @author retucio
|
||||
*/
|
||||
|
||||
public class GUI extends Module {
|
||||
|
||||
private final SettingGroup sgWidgets = addSg(new SettingGroup("widgets", true));
|
||||
@@ -62,7 +66,7 @@ public class GUI extends Module {
|
||||
"distinguir mayúsculas",
|
||||
"la búsqueda es sensible a mayúsculas y minúsculas",
|
||||
false
|
||||
));
|
||||
)).visibility(searchBar::getValue);
|
||||
// ^^^ no sé de qué sirve porque está todo en minúsculas pero bueno
|
||||
|
||||
public final BooleanSetting blur = sgUi.add(new BooleanSetting(
|
||||
@@ -112,9 +116,9 @@ public class GUI extends Module {
|
||||
GLFW.GLFW_KEY_RIGHT_SHIFT);
|
||||
|
||||
Sputnik.EVENT_BUS.subscribe(this);
|
||||
keyMode.setVisible(false);
|
||||
notify.setVisible(false);
|
||||
searchBar.onUpdate(v -> matchCase.setVisible(v));
|
||||
|
||||
keyMode.visibility(false);
|
||||
notify.visibility(false);
|
||||
}
|
||||
|
||||
@EventListener
|
||||
|
||||
@@ -12,10 +12,13 @@ import org.lwjgl.glfw.GLFW;
|
||||
|
||||
import java.awt.*;
|
||||
|
||||
|
||||
/** lógica del HUD manejada en:
|
||||
* @see HudRenderer
|
||||
* @see HudElement
|
||||
* @see HudEditorScreen
|
||||
*
|
||||
* @author retucio
|
||||
*/
|
||||
|
||||
public class HUD extends Module {
|
||||
@@ -30,11 +33,13 @@ public class HUD extends Module {
|
||||
"tecla asignada al editor de elementos del hud",
|
||||
GLFW.GLFW_KEY_PAGE_UP
|
||||
));
|
||||
|
||||
public BooleanSetting axialMovement = sgEditor.add(new BooleanSetting(
|
||||
"movimiento axial",
|
||||
"te permite mover los elementos sobre los ejes más fácilmente",
|
||||
true
|
||||
));
|
||||
|
||||
public NumberSetting axisOffset = sgEditor.add(new NumberSetting(
|
||||
"offset de los ejes",
|
||||
"offset a tener en cuenta al usar el movimiento axial",
|
||||
@@ -42,12 +47,14 @@ public class HUD extends Module {
|
||||
0,
|
||||
50,
|
||||
1
|
||||
));
|
||||
)).visibility(axialMovement::getValue);
|
||||
|
||||
public BooleanSetting arrowMovement = sgEditor.add(new BooleanSetting(
|
||||
"movimiento con flechas",
|
||||
"te permite mover el elemento seleccionado con las teclas de las flechas",
|
||||
true
|
||||
));
|
||||
|
||||
public NumberSetting arrowOffset = sgEditor.add(new NumberSetting(
|
||||
"cuánto mover con las flechas",
|
||||
"cuántos píxeles mover el elemento seleccionado al usar las flechas",
|
||||
@@ -55,7 +62,7 @@ public class HUD extends Module {
|
||||
1,
|
||||
20,
|
||||
1
|
||||
));
|
||||
)).visibility(arrowMovement::getValue);
|
||||
|
||||
// renderizado
|
||||
public ColorSetting color = sgDisplay.add(new ColorSetting(
|
||||
@@ -63,16 +70,19 @@ public class HUD extends Module {
|
||||
"color del texto de los elementos del HUD",
|
||||
new Color(255, 255, 255, 255), false)
|
||||
);
|
||||
|
||||
public BooleanSetting shadow = sgDisplay.add(new BooleanSetting(
|
||||
"sombra",
|
||||
"texto con sombra",
|
||||
true
|
||||
));
|
||||
|
||||
public BooleanSetting showOnF3 = sgDisplay.add(new BooleanSetting(
|
||||
"mostrar en F3",
|
||||
"renderizar HUD en el menú de debug",
|
||||
false
|
||||
));
|
||||
|
||||
public BooleanSetting showOnChat = sgDisplay.add(new BooleanSetting(
|
||||
"mostrar en chat",
|
||||
"renderizar HUD en la pantalla del chat",
|
||||
@@ -88,24 +98,28 @@ public class HUD extends Module {
|
||||
6,
|
||||
1
|
||||
));
|
||||
|
||||
public EnumSetting<TimeFormat> timeFormat = sgElements.add(new EnumSetting<>(
|
||||
"formato de la hora",
|
||||
"12h o 24h",
|
||||
TimeFormat.class,
|
||||
TimeFormat.TWENTY_FOUR_HOUR
|
||||
));
|
||||
|
||||
public StringSetting customText = sgElements.add(new StringSetting(
|
||||
"texto custom",
|
||||
"marca de agua (dejar vacío para quitar)",
|
||||
"adolf jitler inshtagram feishbuc twiter",
|
||||
40
|
||||
));
|
||||
|
||||
public EnumSetting<CoordsMode> coordsMode = sgElements.add(new EnumSetting<>(
|
||||
"modo de coordenadas",
|
||||
"qué coordenadas mostrar",
|
||||
CoordsMode.class,
|
||||
CoordsMode.OVERWORLD
|
||||
));
|
||||
|
||||
public EnumSetting<Dynosaurs> dyno = sgElements.add(new EnumSetting<>(
|
||||
"dinosaurio",
|
||||
"qué dinosaurio mostrar",
|
||||
@@ -119,9 +133,6 @@ public class HUD extends Module {
|
||||
GLFW.GLFW_KEY_F12
|
||||
);
|
||||
|
||||
axialMovement.onUpdate(v -> axisOffset.setVisible(v));
|
||||
arrowMovement.onUpdate(v -> arrowOffset.setVisible(v));
|
||||
|
||||
dyno.onUpdate(v -> {
|
||||
DynoElement element = (DynoElement) HudRenderer.getElement(DynoElement.class);
|
||||
if (element != null) element.reloadTexture();
|
||||
|
||||
@@ -7,11 +7,30 @@ import me.retucio.sputnik.module.Module;
|
||||
import me.retucio.sputnik.module.setting.settings.BooleanSetting;
|
||||
import me.retucio.sputnik.module.setting.settings.NumberSetting;
|
||||
|
||||
|
||||
/**
|
||||
* @author retucio
|
||||
*/
|
||||
|
||||
public class AttributeSwapper extends Module {
|
||||
|
||||
private final NumberSetting slot = sgGeneral.add(new NumberSetting("slot", "slot al que cambiar", 1, 1, 9, 1));
|
||||
private final BooleanSetting swap = sgGeneral.add(new BooleanSetting("cambiar de vuelta", "volver al slot inicial tras haber aplicado el swapping", true));
|
||||
private final NumberSetting swapDelay = sgGeneral.add(new NumberSetting("delay de cambio de vuelta", "tiempo que se tarda en volver al slot inicial", 1, 1, 20, 1));
|
||||
private final NumberSetting slot = sgGeneral.add(new NumberSetting(
|
||||
"slot",
|
||||
"slot al que cambiar",
|
||||
1, 1, 9, 1
|
||||
));
|
||||
|
||||
private final BooleanSetting swap = sgGeneral.add(new BooleanSetting(
|
||||
"cambiar de vuelta",
|
||||
"volver al slot inicial tras haber aplicado el swapping",
|
||||
true
|
||||
));
|
||||
|
||||
private final NumberSetting swapDelay = sgGeneral.add(new NumberSetting(
|
||||
"delay de cambio de vuelta",
|
||||
"tiempo que se tarda en volver al slot inicial",
|
||||
1, 1, 20, 1
|
||||
));
|
||||
|
||||
private int delay = 0;
|
||||
private int prevSlot = -1;
|
||||
|
||||
@@ -17,7 +17,12 @@ import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
|
||||
// https://github.com/etianl/Trouser-Streak/blob/ce27abd30435ca2b43a5e5546f5b070c07c6291a/src/main/java/pwn/noobs/trouserstreak/modules/MaceKill.java
|
||||
/**
|
||||
* @link <a href="https://github.com/etianl/Trouser-Streak/blob/ce27abd30435ca2b43a5e5546f5b070c07c6291a/src/main/java/pwn/noobs/trouserstreak/modules/MaceKill.java">créditos a etianl</a>
|
||||
*
|
||||
* @"author" retucio
|
||||
*/
|
||||
|
||||
public class MaceKill extends Module {
|
||||
|
||||
private final BooleanSetting max = sgGeneral.add(new BooleanSetting(
|
||||
@@ -33,7 +38,7 @@ public class MaceKill extends Module {
|
||||
1,
|
||||
170,
|
||||
1
|
||||
));
|
||||
)).visibility(() -> !max.getValue());
|
||||
|
||||
private final BooleanSetting preventDeath = sgGeneral.add(new BooleanSetting(
|
||||
"prevenir muerte",
|
||||
@@ -43,11 +48,10 @@ public class MaceKill extends Module {
|
||||
|
||||
public MaceKill() {
|
||||
super("estampaescrotos", "estampa escrotos ajenos", Category.COMBAT);
|
||||
max.onUpdate(v -> height.setVisible(!v));
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
@EventListener
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
private void onPacketSend(PacketEvent.Send event) {
|
||||
if (mc.player == null) return;
|
||||
if (mc.player.getMainHandStack().getItem() == Items.MACE
|
||||
|
||||
@@ -35,7 +35,12 @@ import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
|
||||
// https://github.com/maDU59/ProjectilesTrajectoryPreview
|
||||
/**
|
||||
* @link <a href="https://github.com/maDU59/ProjectilesTrajectoryPreview">créditos a maDU59</a>
|
||||
*
|
||||
* @"author" retucio
|
||||
*/
|
||||
|
||||
public class ProjectileTrajectories extends Module {
|
||||
|
||||
private final SettingGroup sgTrajectory = addSg(new SettingGroup("trayectoria", true));
|
||||
@@ -114,10 +119,10 @@ public class ProjectileTrajectories extends Module {
|
||||
public ProjectileTrajectories() {
|
||||
super("trayectoria", "muestra la trayectoria de los proyectiles", Category.COMBAT);
|
||||
|
||||
fillingTargets.onUpdate(v -> fillingColor.setVisible(v != TrajectoryTargets.NONE));
|
||||
fillingTargets.onUpdate(v -> fillingColor.visibility(v != TrajectoryTargets.NONE));
|
||||
outlineTargets.onUpdate(v -> {
|
||||
outlineColor.setVisible(v != TrajectoryTargets.NONE);
|
||||
outlineWidth.setVisible(v != TrajectoryTargets.NONE);
|
||||
outlineColor.visibility(v != TrajectoryTargets.NONE);
|
||||
outlineWidth.visibility(v != TrajectoryTargets.NONE);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -15,7 +15,13 @@ import net.minecraft.world.RaycastContext;
|
||||
import java.util.Comparator;
|
||||
import java.util.List;
|
||||
|
||||
// https://github.com/etianl/spearHax/blob/main/src/main/java/things/haxHandler.java
|
||||
|
||||
/**
|
||||
* @link <a href="https://github.com/etianl/spearHax/blob/main/src/main/java/things/haxHandler.java">créditos a etianl</a>
|
||||
*
|
||||
* @"author" retucio
|
||||
*/
|
||||
|
||||
public class SpearKill extends Module {
|
||||
|
||||
private final BooleanSetting onlyPlayers = sgGeneral.add(new BooleanSetting(
|
||||
|
||||
+4
-2
@@ -5,10 +5,12 @@ import me.retucio.sputnik.module.Category;
|
||||
import me.retucio.sputnik.module.Module;
|
||||
|
||||
|
||||
/**
|
||||
* continúa en
|
||||
/** continúa en
|
||||
* @see CreativeInventoryScreenMixin
|
||||
*
|
||||
* @author retucio
|
||||
*/
|
||||
|
||||
public class CreativeInventoryHotbarKeybinds extends Module {
|
||||
|
||||
public CreativeInventoryHotbarKeybinds() {
|
||||
|
||||
@@ -14,6 +14,10 @@ import net.minecraft.client.gui.screen.ingame.HandledScreen;
|
||||
import net.minecraft.screen.slot.Slot;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
/**
|
||||
* @author retucio
|
||||
*/
|
||||
|
||||
public class InventoryPlus extends Module {
|
||||
|
||||
private final KeySetting row1key = sgGeneral.add(new KeySetting("fila 1", "tecla para mover items a la primera fila", GLFW.GLFW_KEY_A));
|
||||
|
||||
@@ -14,6 +14,10 @@ import net.minecraft.screen.slot.SlotActionType;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
|
||||
/**
|
||||
* @author retucio
|
||||
*/
|
||||
|
||||
public class Offhand extends Module {
|
||||
|
||||
private final OptionSetting<Item> item = sgGeneral.add(new OptionSetting<>(
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
package me.retucio.sputnik.module.modules.inventory;
|
||||
|
||||
import me.retucio.sputnik.mixin.accessors.KeyBindingAccessor;
|
||||
import me.retucio.sputnik.module.Category;
|
||||
import me.retucio.sputnik.module.Module;
|
||||
import me.retucio.sputnik.module.setting.settings.ListSetting;
|
||||
@@ -78,8 +77,7 @@ public class UIMove extends Module {
|
||||
if (handler == null || !screens.isEnabled(handler)) return;
|
||||
|
||||
for (KeyBinding kb : movementKeys) {
|
||||
kb.setPressed(KeyUtil.isKeyDown((
|
||||
(KeyBindingAccessor) kb).getBoundKey().getCode()));
|
||||
kb.setPressed(KeyUtil.isKeyDown(KeyUtil.getKey(kb)));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -67,7 +67,7 @@ public class ChatPlus extends Module {
|
||||
Category.MISC);
|
||||
updateDateFormat();
|
||||
updateClientName();
|
||||
timestamps.onUpdate(v -> timestampSecs.setVisible(v));
|
||||
timestamps.onUpdate(v -> timestampSecs.visibility(v));
|
||||
timestampSecs.onUpdate(x -> updateDateFormat());
|
||||
}
|
||||
|
||||
|
||||
@@ -172,19 +172,19 @@ public class Scaffold extends Module {
|
||||
public Scaffold() {
|
||||
super("andamios", "pone bloques bajo tus pies de manera automática", Category.MOVEMENT);
|
||||
|
||||
extend.onUpdate(extendDistance::setVisible);
|
||||
extend.onUpdate(extendDistance::visibility);
|
||||
|
||||
tower.onUpdate(v -> {
|
||||
towerSpeed.setVisible(v);
|
||||
towerWhileMoving.setVisible(v);
|
||||
towerSpeed.visibility(v);
|
||||
towerWhileMoving.visibility(v);
|
||||
});
|
||||
|
||||
outlines.onUpdate(v -> {
|
||||
outlineColor.setVisible(v);
|
||||
lineWidth.setVisible(v);
|
||||
outlineColor.visibility(v);
|
||||
lineWidth.visibility(v);
|
||||
});
|
||||
|
||||
fillings.onUpdate(fillingColor::setVisible);
|
||||
fillings.onUpdate(fillingColor::visibility);
|
||||
}
|
||||
|
||||
|
||||
@@ -330,7 +330,7 @@ public class Scaffold extends Module {
|
||||
|
||||
public enum ListMode {
|
||||
WHITELIST("lista blanca (incluir)"),
|
||||
BLACKLIST("lista negra (excluir");
|
||||
BLACKLIST("lista negra (excluir)");
|
||||
|
||||
private final String name;
|
||||
ListMode(String name) { this.name = name; }
|
||||
|
||||
@@ -60,13 +60,13 @@ public class LogoutSpots extends Module {
|
||||
Category.NETWORK);
|
||||
|
||||
outlines.onUpdate(v -> {
|
||||
outlineColor.setVisible(v);
|
||||
fullHeight.setVisible(v || filling.getValue());
|
||||
outlineColor.visibility(v);
|
||||
fullHeight.visibility(v || filling.getValue());
|
||||
});
|
||||
|
||||
filling.onUpdate(v -> {
|
||||
fillingColor.setVisible(v);
|
||||
fullHeight.setVisible(v || outlines.getValue());
|
||||
fillingColor.visibility(v);
|
||||
fullHeight.visibility(v || outlines.getValue());
|
||||
});
|
||||
|
||||
dummy.onUpdate(v -> {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
package me.retucio.sputnik.module.modules.network;
|
||||
|
||||
import com.github.retucio.neutrino.EventListener;
|
||||
import it.unimi.dsi.fastutil.booleans.BooleanSet;
|
||||
import me.retucio.sputnik.event.interact.AttackBlockEvent;
|
||||
import me.retucio.sputnik.event.render.Render3DEvent;
|
||||
import me.retucio.sputnik.module.Category;
|
||||
@@ -11,10 +12,16 @@ import me.retucio.sputnik.module.setting.settings.ColorSetting;
|
||||
import me.retucio.sputnik.module.setting.settings.EnumSetting;
|
||||
import me.retucio.sputnik.module.setting.settings.NumberSetting;
|
||||
import me.retucio.sputnik.util.ChatUtil;
|
||||
import me.retucio.sputnik.util.EntityUtil;
|
||||
import me.retucio.sputnik.util.MiscUtil;
|
||||
import me.retucio.sputnik.util.render.RenderUtil;
|
||||
import net.minecraft.command.argument.EntityAnchorArgumentType;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.network.packet.c2s.play.PlayerActionC2SPacket;
|
||||
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.util.shape.VoxelShape;
|
||||
|
||||
import java.awt.*;
|
||||
@@ -66,6 +73,12 @@ public class PacketMine extends Module {
|
||||
false
|
||||
));
|
||||
|
||||
private final EnumSetting<RotateMode> rotate = sgGeneral.add(new EnumSetting<>(
|
||||
"rotar",
|
||||
"rotar al minar bloques mediante el módulo",
|
||||
RotateMode.class, RotateMode.NONE
|
||||
));
|
||||
|
||||
private final BooleanSetting render = sgRender.add(new BooleanSetting(
|
||||
"renderizar",
|
||||
"renderizar un contorno alrededor de los bloques que están siendo minados",
|
||||
@@ -89,7 +102,7 @@ public class PacketMine extends Module {
|
||||
));
|
||||
|
||||
private final BooleanSetting dontBreak = sgGeneral.add(new BooleanSetting(
|
||||
"no romper",
|
||||
"no romper pico",
|
||||
"evita romper el pico",
|
||||
true
|
||||
));
|
||||
@@ -100,8 +113,8 @@ public class PacketMine extends Module {
|
||||
Category.NETWORK);
|
||||
|
||||
render.onUpdate(v -> {
|
||||
color.setVisible(v);
|
||||
lineWidth.setVisible(v);
|
||||
color.visibility(v);
|
||||
lineWidth.visibility(v);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -139,9 +152,7 @@ public class PacketMine extends Module {
|
||||
if (clickAction.is(ClickAction.ADD_PRIORITY)) {
|
||||
miningBlocks.sort(Comparator.comparingInt(block -> -block.clicks));
|
||||
for (MiningBlock block : miningBlocks) {
|
||||
if (processBlock(block)) {
|
||||
break;
|
||||
}
|
||||
processBlock(block);
|
||||
}
|
||||
} else {
|
||||
if (inOrder.getValue()) {
|
||||
@@ -260,12 +271,16 @@ public class PacketMine extends Module {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (dontBreak.getValue() && mc.player.getMainHandStack().getMaxDamage() - mc.player.getMainHandStack().getDamage() <= 1) {
|
||||
if (dontBreak.getValue()
|
||||
&& mc.player.isHolding(ItemStack::isDamageable)
|
||||
&& mc.player.getMainHandStack().getMaxDamage() - mc.player.getMainHandStack().getDamage() <= 1) {
|
||||
ChatUtil.warn("pico por romperse");
|
||||
toggle();
|
||||
return false;
|
||||
}
|
||||
|
||||
rotate();
|
||||
|
||||
mc.interactionManager.sendSequencedPacket(mc.world, sequence ->
|
||||
new PlayerActionC2SPacket(PlayerActionC2SPacket.Action.START_DESTROY_BLOCK, pos, dir, sequence));
|
||||
mining = true;
|
||||
@@ -289,6 +304,15 @@ public class PacketMine extends Module {
|
||||
);
|
||||
}
|
||||
|
||||
private void rotate() {
|
||||
Vec3d pos = Vec3d.of(this.pos);
|
||||
switch (rotate.getValue()) {
|
||||
case CLIENT -> EntityUtil.lookAtClient(pos);
|
||||
case SERVER -> EntityUtil.lookAtServer(pos);
|
||||
case BOTH -> EntityUtil.lookAt(pos);
|
||||
}
|
||||
}
|
||||
|
||||
public boolean shouldRetry() {
|
||||
return mining && (System.currentTimeMillis() - startTime >= retryTime.getValue());
|
||||
}
|
||||
@@ -303,4 +327,15 @@ public class PacketMine extends Module {
|
||||
ClickAction(String name) { this.name = name; }
|
||||
@Override public String toString() { return name; }
|
||||
}
|
||||
|
||||
private enum RotateMode {
|
||||
CLIENT("cámara"),
|
||||
SERVER("mediante paquetes"),
|
||||
BOTH("ambos"),
|
||||
NONE("no");
|
||||
|
||||
private final String name;
|
||||
RotateMode(String name) { this.name = name; }
|
||||
@Override public String toString() { return name; }
|
||||
}
|
||||
}
|
||||
@@ -67,12 +67,12 @@ public class AutoFish extends Module {
|
||||
public AutoFish() {
|
||||
super("auto pesca", "pesca por ti", Category.PLAYER);
|
||||
autoRecast.onUpdate(v -> {
|
||||
recastDelay.setVisible(v);
|
||||
onlyRecastIfLookingAtWater.setVisible(v);
|
||||
recastRaycastDistance.setVisible(v);
|
||||
recastDelay.visibility(v);
|
||||
onlyRecastIfLookingAtWater.visibility(v);
|
||||
recastRaycastDistance.visibility(v);
|
||||
});
|
||||
|
||||
onlyRecastIfLookingAtWater.onUpdate(v -> recastRaycastDistance.setVisible(v));
|
||||
onlyRecastIfLookingAtWater.onUpdate(v -> recastRaycastDistance.visibility(v));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -61,8 +61,8 @@ public class FastUse extends Module {
|
||||
Category.PLAYER,
|
||||
GLFW.GLFW_KEY_F6);
|
||||
|
||||
items.onUpdate(v -> itemCooldown.setVisible(v));
|
||||
blocks.onUpdate(v -> blockCooldown.setVisible(v));
|
||||
items.onUpdate(v -> itemCooldown.visibility(v));
|
||||
blocks.onUpdate(v -> blockCooldown.visibility(v));
|
||||
}
|
||||
|
||||
public int getCooldown(ItemStack stack) {
|
||||
|
||||
@@ -45,9 +45,9 @@ public class WarnLowDurability extends Module {
|
||||
Category.PLAYER);
|
||||
|
||||
playSound.onUpdate(v -> {
|
||||
sound.setVisible(v);
|
||||
volume.setVisible(v);
|
||||
pitch.setVisible(v);
|
||||
sound.visibility(v);
|
||||
volume.visibility(v);
|
||||
pitch.visibility(v);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -111,12 +111,12 @@ public class BlockESP extends Module {
|
||||
);
|
||||
|
||||
outlines.onUpdate(v -> {
|
||||
outlineColor.setVisible(v);
|
||||
lineWidth.setVisible(v);
|
||||
outlineColor.visibility(v);
|
||||
lineWidth.visibility(v);
|
||||
});
|
||||
|
||||
fillings.onUpdate(v ->
|
||||
fillingColor.setVisible(v)
|
||||
fillingColor.visibility(v)
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -71,15 +71,15 @@ public class EntityESP extends Module {
|
||||
public EntityESP() {
|
||||
super("resaltado de entidades", "resalta el contorno de las entidades seleccionadas a través de bloques", Category.RENDER);
|
||||
mode.onUpdate(v -> {
|
||||
glowColor.setVisible(v == ESPMode.GLOW);
|
||||
outlines.setVisible(v == ESPMode.BOX);
|
||||
filling.setVisible(v == ESPMode.BOX);
|
||||
outlineColor.setVisible(outlines.isVisible());
|
||||
fillingColor.setVisible(filling.isVisible());
|
||||
glowColor.visibility(v == ESPMode.GLOW);
|
||||
outlines.visibility(v == ESPMode.BOX);
|
||||
filling.visibility(v == ESPMode.BOX);
|
||||
outlineColor.visibility(outlines.isVisible());
|
||||
fillingColor.visibility(filling.isVisible());
|
||||
});
|
||||
|
||||
outlines.onUpdate(v -> outlineColor.setVisible(v));
|
||||
filling.onUpdate(v -> fillingColor.setVisible(v));
|
||||
outlines.onUpdate(v -> outlineColor.visibility(v));
|
||||
filling.onUpdate(v -> fillingColor.visibility(v));
|
||||
}
|
||||
|
||||
@EventListener
|
||||
|
||||
@@ -82,17 +82,17 @@ public class Nametags extends Module {
|
||||
defaultEntities.replace(EntityType.TNT, true);
|
||||
entities.setDefaultValue(defaultEntities);
|
||||
|
||||
health.onUpdate(v -> healthMode.setVisible(v));
|
||||
health.onUpdate(v -> healthMode.visibility(v));
|
||||
|
||||
entities.onUpdate(entities -> {
|
||||
items.setVisible(entities.get(EntityType.ITEM));
|
||||
items.visibility(entities.get(EntityType.ITEM));
|
||||
|
||||
boolean anyProjectile = entities.get(EntityType.TRIDENT)
|
||||
|| entities.get(EntityType.ARROW)
|
||||
|| entities.get(EntityType.SPECTRAL_ARROW);
|
||||
showProjectileDamage.setVisible(anyProjectile);
|
||||
showProjectileDamage.visibility(anyProjectile);
|
||||
|
||||
tntPrime.setVisible(entities.get(EntityType.TNT));
|
||||
tntPrime.visibility(entities.get(EntityType.TNT));
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,119 @@
|
||||
package me.retucio.sputnik.module.modules.render;
|
||||
|
||||
import com.github.retucio.neutrino.EventListener;
|
||||
import com.ibm.icu.impl.TimeZoneGenericNames;
|
||||
import me.retucio.sputnik.event.render.Render3DEvent;
|
||||
import me.retucio.sputnik.module.Category;
|
||||
import me.retucio.sputnik.module.Module;
|
||||
import me.retucio.sputnik.module.setting.SettingGroup;
|
||||
import me.retucio.sputnik.module.setting.settings.BooleanSetting;
|
||||
import me.retucio.sputnik.module.setting.settings.ColorSetting;
|
||||
import me.retucio.sputnik.module.setting.settings.ListSetting;
|
||||
import me.retucio.sputnik.module.setting.settings.NumberSetting;
|
||||
import me.retucio.sputnik.util.Colors;
|
||||
import me.retucio.sputnik.util.Lists;
|
||||
import me.retucio.sputnik.util.render.RenderUtil;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.EntityType;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.Map;
|
||||
|
||||
public class Tracers extends Module {
|
||||
|
||||
private final SettingGroup sgColors = addSg(new SettingGroup("colores", false));
|
||||
|
||||
private final Map<EntityType<?>, Boolean> defaultEntities = Lists.allFalse(Lists.entityList);
|
||||
private final ListSetting<EntityType<?>> entities = sgGeneral.add(new ListSetting<>(
|
||||
"entidades",
|
||||
"entidades a las que apuntar",
|
||||
Lists.entityList,
|
||||
defaultEntities,
|
||||
Lists.entityNames
|
||||
));
|
||||
|
||||
private final NumberSetting lineWidth = sgGeneral.add(new NumberSetting(
|
||||
"grosor de línea",
|
||||
"grosor de las líneas",
|
||||
1.5,
|
||||
0.1,
|
||||
10,
|
||||
0.2
|
||||
));
|
||||
|
||||
private final BooleanSetting self = sgGeneral.add(new BooleanSetting(
|
||||
"uno mismo",
|
||||
"apuntarse a uno mismo en cámara libre o así",
|
||||
true
|
||||
));
|
||||
|
||||
private final ColorSetting playerColor= sgColors.add(new ColorSetting(
|
||||
"jugadores",
|
||||
"color para jugadores",
|
||||
Colors.RED, false
|
||||
));
|
||||
|
||||
private final ColorSetting animalsColor = sgColors.add(new ColorSetting(
|
||||
"animales",
|
||||
"color para animales pasivos",
|
||||
Colors.YELLOW, false
|
||||
));
|
||||
|
||||
private final ColorSetting monstersColor = sgColors.add(new ColorSetting(
|
||||
"monstruos",
|
||||
"color para monstruos",
|
||||
Colors.BROWN, false
|
||||
));
|
||||
|
||||
private final ColorSetting ambientColor = sgColors.add(new ColorSetting(
|
||||
"ambiente",
|
||||
"color para entidades ambiente",
|
||||
Colors.SILVER, false
|
||||
));
|
||||
|
||||
private final ColorSetting waterColor = sgColors.add(new ColorSetting(
|
||||
"agua",
|
||||
"color para bichos del agua",
|
||||
Colors.BLUE, false
|
||||
));
|
||||
|
||||
private final ColorSetting miscColor = sgColors.add(new ColorSetting(
|
||||
"misc.",
|
||||
"color para entidades misceláneas",
|
||||
Colors.BROWN, false
|
||||
));
|
||||
|
||||
public Tracers() {
|
||||
super("trazos", "trazar líneas de la cámara a las entidades seleccionadas", Category.RENDER);
|
||||
defaultEntities.replace(EntityType.PLAYER, true);
|
||||
entities.setDefaultValue(defaultEntities);
|
||||
}
|
||||
|
||||
@EventListener
|
||||
private void onRenderWorld(Render3DEvent event) {
|
||||
for (Entity entity : mc.world.getEntities()) {
|
||||
Color color = getColor(entity);
|
||||
if (color == null) continue;
|
||||
Vec3d interpolatedPos = entity.getLerpedPos(event.getTickDelta());
|
||||
RenderUtil.drawTracer(event.getMatrices(), interpolatedPos, color, lineWidth.getFloatValue());
|
||||
}
|
||||
}
|
||||
|
||||
private Color getColor(Entity entity) {
|
||||
if (!entities.isEnabled(entity.getType())) return null;
|
||||
if (!self.getValue() && mc.player == entity) return null;
|
||||
if (entity instanceof PlayerEntity) return playerColor.getValue();
|
||||
|
||||
return switch (entity.getType().getSpawnGroup()) {
|
||||
case CREATURE -> animalsColor.getValue().getAlpha() > 0 ? animalsColor.getValue() : null;
|
||||
case MONSTER -> monstersColor.getValue().getAlpha() > 0 ? monstersColor.getValue() : null;
|
||||
case AMBIENT, WATER_AMBIENT -> ambientColor.getValue().getAlpha() > 0 ? ambientColor.getValue() : null;
|
||||
case WATER_CREATURE, UNDERGROUND_WATER_CREATURE -> waterColor.getValue().getAlpha() > 0 ? waterColor.getValue() : null;
|
||||
case MISC -> miscColor.getValue().getAlpha() > 0 ? miscColor.getValue() : null;
|
||||
default -> null;
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -3,12 +3,12 @@ package me.retucio.sputnik.module.modules.world;
|
||||
import com.github.retucio.neutrino.EventListener;
|
||||
import me.retucio.sputnik.event.input.KeyEvent;
|
||||
import me.retucio.sputnik.event.input.MouseClickEvent;
|
||||
import me.retucio.sputnik.mixin.accessors.KeyBindingAccessor;
|
||||
import me.retucio.sputnik.module.Category;
|
||||
import me.retucio.sputnik.module.Module;
|
||||
import me.retucio.sputnik.module.setting.settings.BooleanSetting;
|
||||
import me.retucio.sputnik.module.setting.settings.NumberSetting;
|
||||
import me.retucio.sputnik.util.InventoryUtil;
|
||||
import me.retucio.sputnik.util.KeyUtil;
|
||||
import me.retucio.sputnik.util.MiscUtil;
|
||||
|
||||
import net.minecraft.block.BlockState;
|
||||
@@ -59,7 +59,7 @@ public class AutoTool extends Module {
|
||||
|
||||
public AutoTool() {
|
||||
super("auto herramienta", "cambia a la herramienta adecuada automáticamente", Category.WORLD);
|
||||
switchBack.onUpdate(v -> switchBackDelaySetting.setVisible(v));
|
||||
switchBack.onUpdate(v -> switchBackDelaySetting.visibility(v));
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -117,7 +117,7 @@ public class AutoTool extends Module {
|
||||
|
||||
private void handle(int key, int action) {
|
||||
if (mc.player == null || mc.player.getInventory() == null) return;
|
||||
if (key != ((KeyBindingAccessor) mc.options.attackKey).getBoundKey().getCode()) return;
|
||||
if (key != KeyUtil.getKey(mc.options.attackKey)) return;
|
||||
|
||||
if (action == GLFW.GLFW_PRESS) {
|
||||
onStartMining();
|
||||
|
||||
@@ -97,7 +97,7 @@ public class LightOverlay extends Module {
|
||||
"te muestra el nivel de luz en bloques, para prevenir mob spawns",
|
||||
Category.WORLD);
|
||||
|
||||
onWater.onUpdate(v -> dontCullWater.setVisible(v));
|
||||
onWater.onUpdate(v -> dontCullWater.visibility(v));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -35,7 +35,7 @@ public class TimeChanger extends Module {
|
||||
"te deja cambiar visualmente el progreso del día, entre otras cosas",
|
||||
Category.WORLD);
|
||||
|
||||
renderMoon.onUpdate(v -> moonPhase.setVisible(v));
|
||||
renderMoon.onUpdate(v -> moonPhase.visibility(v));
|
||||
}
|
||||
|
||||
private long realTime;
|
||||
|
||||
@@ -4,6 +4,7 @@ import me.retucio.sputnik.Sputnik;
|
||||
import me.retucio.sputnik.event.sputnik.UpdateSettingEvent;
|
||||
import me.retucio.sputnik.module.Module;
|
||||
|
||||
import java.util.function.BooleanSupplier;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
// base para los tipos de ajustes
|
||||
@@ -17,6 +18,7 @@ public abstract class Setting<T> {
|
||||
|
||||
protected Consumer<T> updateListener;
|
||||
|
||||
protected BooleanSupplier visibilityCondition = null;
|
||||
protected boolean visible = true;
|
||||
protected boolean searchMatch = true;
|
||||
|
||||
@@ -30,11 +32,21 @@ public abstract class Setting<T> {
|
||||
}
|
||||
|
||||
public boolean isVisible() {
|
||||
if (visibilityCondition != null) {
|
||||
return visibilityCondition.getAsBoolean();
|
||||
}
|
||||
return visible;
|
||||
}
|
||||
|
||||
public void setVisible(boolean visible) {
|
||||
public void visibility(boolean visible) {
|
||||
this.visible = visible;
|
||||
this.visibilityCondition = null;
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
public <S extends Setting<T>> S visibility(BooleanSupplier condition) {
|
||||
this.visibilityCondition = condition;
|
||||
return (S) this;
|
||||
}
|
||||
|
||||
public boolean isSearchMatch() {
|
||||
|
||||
@@ -32,9 +32,9 @@ public class ChooseButton<T> extends SettingButton<OptionSetting<T>> {
|
||||
};
|
||||
|
||||
// ocultar cosas innecesarias
|
||||
dummy.getSettings().get(0).setVisible(false);
|
||||
dummy.getSettings().get(1).setVisible(false);
|
||||
dummy.getSettings().get(2).setVisible(false);
|
||||
dummy.getSettings().get(0).visibility(false);
|
||||
dummy.getSettings().get(1).visibility(false);
|
||||
dummy.getSettings().get(2).visibility(false);
|
||||
dummy.shouldSaveSettings(false);
|
||||
}
|
||||
|
||||
|
||||
@@ -33,9 +33,9 @@ public class ListButton<T> extends SettingButton<ListSetting<T>> {
|
||||
};
|
||||
|
||||
// ocultar cosas innecesarias
|
||||
dummy.getSettings().get(0).setVisible(false);
|
||||
dummy.getSettings().get(1).setVisible(false);
|
||||
dummy.getSettings().get(2).setVisible(false);
|
||||
dummy.getSettings().get(0).visibility(false);
|
||||
dummy.getSettings().get(1).visibility(false);
|
||||
dummy.getSettings().get(2).visibility(false);
|
||||
dummy.shouldSaveSettings(false);
|
||||
}
|
||||
|
||||
|
||||
@@ -53,7 +53,7 @@ public class ColorPickerFrame extends SettingsFrame {
|
||||
};
|
||||
|
||||
// ocultar ajustes innecesarios
|
||||
dummyModule.getSettings().forEach(s -> s.setVisible(false));
|
||||
dummyModule.getSettings().forEach(s -> s.visibility(false));
|
||||
dummyModule.shouldSaveSettings(false);
|
||||
|
||||
// ajustes de color
|
||||
@@ -80,12 +80,12 @@ public class ColorPickerFrame extends SettingsFrame {
|
||||
setting.onUpdate(v -> updateColorFromSettings());
|
||||
rainbowSetting.onUpdate(v -> {
|
||||
updateColorFromSettings();
|
||||
redSetting.setVisible(!v);
|
||||
greenSetting.setVisible(!v);
|
||||
blueSetting.setVisible(!v);
|
||||
rainbowSpeedSetting.setVisible(v);
|
||||
saturationSetting.setVisible(v);
|
||||
brightnessSetting.setVisible(v);
|
||||
redSetting.visibility(!v);
|
||||
greenSetting.visibility(!v);
|
||||
blueSetting.visibility(!v);
|
||||
rainbowSpeedSetting.visibility(v);
|
||||
saturationSetting.visibility(v);
|
||||
brightnessSetting.visibility(v);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package me.retucio.sputnik.util;
|
||||
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.projectile.ProjectileUtil;
|
||||
import net.minecraft.network.packet.c2s.play.PlayerMoveC2SPacket;
|
||||
import net.minecraft.util.hit.EntityHitResult;
|
||||
import net.minecraft.util.hit.HitResult;
|
||||
import net.minecraft.util.math.Box;
|
||||
@@ -95,7 +96,26 @@ public class EntityUtil {
|
||||
return mc.player.getPitch() + MathHelper.wrapDegrees((float) -Math.toDegrees(Math.atan2(diffY, diffXZ)) - mc.player.getPitch());
|
||||
}
|
||||
|
||||
public static enum Target {
|
||||
public static void lookAt(Vec3d pos) {
|
||||
lookAtClient(pos);
|
||||
lookAtServer(pos);
|
||||
}
|
||||
|
||||
public static void lookAtClient(Vec3d pos) {
|
||||
mc.player.setYaw((float) getYaw(pos));
|
||||
mc.player.setPitch((float) getPitch(pos));
|
||||
}
|
||||
|
||||
public static void lookAtServer(Vec3d pos) {
|
||||
mc.getNetworkHandler().sendPacket(new PlayerMoveC2SPacket.LookAndOnGround(
|
||||
(float) getYaw(pos),
|
||||
(float) getPitch(pos),
|
||||
mc.player.isOnGround(),
|
||||
mc.player.horizontalCollision
|
||||
));
|
||||
}
|
||||
|
||||
public enum Target {
|
||||
HEAD,
|
||||
BODY,
|
||||
FEET;
|
||||
|
||||
@@ -2,7 +2,6 @@ package me.retucio.sputnik.util;
|
||||
|
||||
import me.retucio.sputnik.event.network.DisconnectEvent;
|
||||
import me.retucio.sputnik.event.interact.OpenScreenEvent;
|
||||
import me.retucio.sputnik.mixin.accessors.KeyBindingAccessor;
|
||||
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
|
||||
import net.minecraft.client.gui.screen.ingame.HandledScreen;
|
||||
import net.minecraft.component.ComponentType;
|
||||
@@ -325,8 +324,11 @@ public class InventoryUtil {
|
||||
}
|
||||
|
||||
public static int getSlotNumberFromKey(int key) {
|
||||
for (int i = 0; i < 9; i++)
|
||||
if (((KeyBindingAccessor) (mc.options.hotbarKeys[i])).getBoundKey().getCode() == key) return i;
|
||||
for (int i = 0; i < 9; i++) {
|
||||
if (KeyUtil.getKey(mc.options.hotbarKeys[i]) == key) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
@@ -5,7 +5,6 @@ import net.minecraft.client.input.KeyInput;
|
||||
import net.minecraft.client.option.KeyBinding;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
import java.util.List;
|
||||
import java.awt.*;
|
||||
import java.awt.event.KeyEvent;
|
||||
import java.awt.im.InputContext;
|
||||
@@ -20,24 +19,24 @@ public class KeyUtil {
|
||||
return GLFW.glfwGetKey(mc.getWindow().getHandle(), key);
|
||||
}
|
||||
|
||||
public static boolean isKeyDown(KeyBinding key) {
|
||||
return isKeyDown(getKey(key));
|
||||
}
|
||||
|
||||
public static boolean isKeyDown(int key) {
|
||||
return GLFW.glfwGetKey(
|
||||
mc.getWindow().getHandle(),
|
||||
key) != GLFW.GLFW_RELEASE;
|
||||
}
|
||||
|
||||
public static boolean isKeyDown(KeyBinding key) {
|
||||
return GLFW.glfwGetKey(
|
||||
mc.getWindow().getHandle(),
|
||||
((KeyBindingAccessor) key).getBoundKey().getCode()
|
||||
) != GLFW.GLFW_RELEASE;
|
||||
}
|
||||
|
||||
public static boolean isShiftDown() {
|
||||
return isKeyDown(GLFW.GLFW_KEY_LEFT_SHIFT)
|
||||
|| isKeyDown(GLFW.GLFW_KEY_RIGHT_SHIFT);
|
||||
}
|
||||
|
||||
public static int getKey(KeyBinding kb) {
|
||||
return ((KeyBindingAccessor) kb).getBoundKey().getCode();
|
||||
}
|
||||
|
||||
public static boolean isCapsLockOn() throws HeadlessException {
|
||||
return Toolkit.getDefaultToolkit().getLockingKeyState(KeyEvent.VK_CAPS_LOCK);
|
||||
|
||||
@@ -14,69 +14,34 @@ import java.awt.*;
|
||||
public class RenderUtil {
|
||||
|
||||
private static final MinecraftClient mc = MinecraftClient.getInstance();
|
||||
private static final Tessellator tesselator = Tessellator.getInstance();
|
||||
private static final Tessellator tessellator = Tessellator.getInstance();
|
||||
|
||||
|
||||
// líneas
|
||||
/* líneas */
|
||||
|
||||
public static void drawLine(MatrixStack matrices, Vec3d start, Vec3d end, Color color, float lineWidth) {
|
||||
Camera camera = mc.gameRenderer.getCamera();
|
||||
Vec3d cameraPos = camera.getCameraPos();
|
||||
// https://github.com/TheF1xer/GateClient-1.12.2/blob/main/src/main/java/me/thef1xer/gateclient/util/RenderUtil.java
|
||||
public static void drawTracer(MatrixStack matrices, Vec3d pos, Color color, float lineWidth) {
|
||||
BufferBuilder buffer = tessellator.begin(VertexFormat.DrawMode.LINES, VertexFormats.POSITION_COLOR_NORMAL_LINE_WIDTH);
|
||||
Camera cam = mc.gameRenderer.getCamera();
|
||||
|
||||
float startX = (float) (start.x - cameraPos.x);
|
||||
float startY = (float) (start.y - cameraPos.y);
|
||||
float startZ = (float) (start.z - cameraPos.z);
|
||||
float endX = (float) (end.x - cameraPos.x);
|
||||
float endY = (float) (end.y - cameraPos.y);
|
||||
float endZ = (float) (end.z - cameraPos.z);
|
||||
|
||||
BufferBuilder buffer = tesselator.begin(VertexFormat.DrawMode.LINES, VertexFormats.POSITION_COLOR_NORMAL_LINE_WIDTH);
|
||||
|
||||
float nx = -1.0f, ny = -1f, nz = -1.0f;
|
||||
|
||||
buffer.vertex(matrices.peek().getPositionMatrix(), startX, startY, startZ)
|
||||
.color(color.getRGB())
|
||||
.normal(nx, ny, nz)
|
||||
.lineWidth(lineWidth);
|
||||
buffer.vertex(matrices.peek().getPositionMatrix(), endX, endY, endZ)
|
||||
.color(color.getRGB())
|
||||
.normal(nx, ny, nz)
|
||||
.lineWidth(lineWidth);
|
||||
|
||||
Layers.lines().draw(buffer.end());
|
||||
}
|
||||
|
||||
public static void drawLine2D(MatrixStack matrices, float x1, float y1, float x2, float y2, Color color, float lineWidth) {
|
||||
float r = color.getRed() / 255f;
|
||||
float g = color.getGreen() / 255f;
|
||||
float b = color.getBlue() / 255f;
|
||||
float a = color.getAlpha() / 255f;
|
||||
|
||||
BufferBuilder buffer = tesselator.begin(VertexFormat.DrawMode.LINES, VertexFormats.POSITION_COLOR_NORMAL_LINE_WIDTH);
|
||||
float nx = 0, ny = 0, nz = 1; // normals not used
|
||||
|
||||
buffer.vertex(matrices.peek().getPositionMatrix(), x1, y1, 0)
|
||||
.color(r, g, b, a)
|
||||
.normal(nx, ny, nz)
|
||||
.lineWidth(lineWidth);
|
||||
buffer.vertex(matrices.peek().getPositionMatrix(), x2, y2, 0)
|
||||
.color(r, g, b, a)
|
||||
.normal(nx, ny, nz)
|
||||
.lineWidth(lineWidth);
|
||||
Vector3f cameraVector = new Vector3f(0, 0, 1)
|
||||
.rotateX((float) Math.toRadians(cam.getPitch()))
|
||||
.rotateY((float) -Math.toRadians(cam.getYaw()));
|
||||
|
||||
buffer.vertex(matrices.peek(), cameraVector.x, cameraVector.y, cameraVector.z).color(color.getRGB()).normal(-1, -1, -1).lineWidth(lineWidth);
|
||||
buffer.vertex(matrices.peek(), (float) (pos.x - cam.getCameraPos().x), (float) (pos.y - cam.getCameraPos().y), (float) (pos.z - cam.getCameraPos().z)).color(color.getRGB()).normal(-1, -1, -1).lineWidth(lineWidth);
|
||||
Layers.lines().draw(buffer.end());
|
||||
}
|
||||
|
||||
public static void drawVector(MatrixStack matrices, Vector3f start, Vec3d direction, Color c, float lineWidth) {
|
||||
BufferBuilder buffer = tesselator.begin(VertexFormat.DrawMode.LINES, VertexFormats.POSITION_COLOR_NORMAL_LINE_WIDTH);
|
||||
|
||||
BufferBuilder buffer = tessellator.begin(VertexFormat.DrawMode.LINES, VertexFormats.POSITION_COLOR_NORMAL_LINE_WIDTH);
|
||||
MatrixStack.Entry pose = matrices.peek();
|
||||
|
||||
int color = c.getRGB();
|
||||
float a = ((color >> 24) & 0xFF) / 255f;
|
||||
float r = ((color >> 16) & 0xFF) / 255f;
|
||||
float g = ((color >> 8) & 0xFF) / 255f;
|
||||
float b = (color & 0xFF) / 255f;
|
||||
float a = ((color >> 24) & 0xFF) / 255f;
|
||||
float b = ((color >> 0) & 0xFF) / 255f;
|
||||
|
||||
float endX = start.x() + (float) direction.x;
|
||||
float endY = start.y() + (float) direction.y;
|
||||
@@ -107,7 +72,7 @@ public class RenderUtil {
|
||||
matrices.push();
|
||||
matrices.translate(0, 0, 0);
|
||||
|
||||
BufferBuilder buffer = tesselator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR);
|
||||
BufferBuilder buffer = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR);
|
||||
|
||||
buffer.vertex(matrices.peek().getPositionMatrix(), x, y + height, 0).color(r, g, b, a);
|
||||
buffer.vertex(matrices.peek().getPositionMatrix(), x + width, y + height, 0).color(r, g, b, a);
|
||||
@@ -128,7 +93,7 @@ public class RenderUtil {
|
||||
float maxY = minY + 1;
|
||||
float maxZ = minZ + 1;
|
||||
|
||||
BufferBuilder buffer = tesselator.begin(VertexFormat.DrawMode.LINES, VertexFormats.POSITION_COLOR_NORMAL_LINE_WIDTH);
|
||||
BufferBuilder buffer = tessellator.begin(VertexFormat.DrawMode.LINES, VertexFormats.POSITION_COLOR_NORMAL_LINE_WIDTH);
|
||||
|
||||
switch (face) {
|
||||
case UP:
|
||||
@@ -253,7 +218,7 @@ public class RenderUtil {
|
||||
}
|
||||
}
|
||||
|
||||
BufferBuilder buffer = tesselator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR);
|
||||
BufferBuilder buffer = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR);
|
||||
|
||||
switch (face) {
|
||||
case DOWN:
|
||||
@@ -310,7 +275,7 @@ public class RenderUtil {
|
||||
float b = color.getBlue() / 255f;
|
||||
float a = color.getAlpha() / 255f;
|
||||
|
||||
BufferBuilder buffer = tesselator.begin(VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION_COLOR);
|
||||
BufferBuilder buffer = tessellator.begin(VertexFormat.DrawMode.TRIANGLES, VertexFormats.POSITION_COLOR);
|
||||
buffer.vertex(matrices.peek().getPositionMatrix(), x1, y1, 0).color(r, g, b, a);
|
||||
buffer.vertex(matrices.peek().getPositionMatrix(), x2, y2, 0).color(r, g, b, a);
|
||||
buffer.vertex(matrices.peek().getPositionMatrix(), x3, y3, 0).color(r, g, b, a);
|
||||
@@ -329,7 +294,7 @@ public class RenderUtil {
|
||||
float maxY = (float) (box.maxY - cameraPos.y);
|
||||
float maxZ = (float) (box.maxZ - cameraPos.z);
|
||||
|
||||
BufferBuilder buffer = tesselator.begin(VertexFormat.DrawMode.LINES, VertexFormats.POSITION_COLOR_NORMAL_LINE_WIDTH);
|
||||
BufferBuilder buffer = tessellator.begin(VertexFormat.DrawMode.LINES, VertexFormats.POSITION_COLOR_NORMAL_LINE_WIDTH);
|
||||
|
||||
// parte inferior
|
||||
buffer.vertex(matrices.peek(), minX, minY, minZ).color(color.getRGB()).normal(-1, -1, -1).lineWidth(lineWidth);
|
||||
@@ -384,7 +349,7 @@ public class RenderUtil {
|
||||
float maxY = (float) (box.maxY - cameraPos.y);
|
||||
float maxZ = (float) (box.maxZ - cameraPos.z);
|
||||
|
||||
BufferBuilder buffer = tesselator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR);
|
||||
BufferBuilder buffer = tessellator.begin(VertexFormat.DrawMode.QUADS, VertexFormats.POSITION_COLOR);
|
||||
|
||||
buffer.vertex(matrices.peek().getPositionMatrix(), minX, minY, minZ).color(color.getRGB());
|
||||
buffer.vertex(matrices.peek().getPositionMatrix(), maxX, minY, minZ).color(color.getRGB());
|
||||
|
||||
Reference in new issue
Block a user