4.1 (broken)
This commit is contained in:
1 parent
05c5300cd8
commit
1d22ec5176
324 files changed
+5375
-5234
No files matched your search
@@ -1,6 +1,6 @@
|
||||
# jenny's mod 2 100% real
|
||||
|
||||
mod para Minecraft Fabric 1.21.11 que añade algunas cosas QOL, mayormente relacionadas a la cámara.
|
||||
mod para Minecraft Fabric 26.1 que añade algunas cosas QOL, mayormente relacionadas a la cámara.
|
||||
|
||||
## instalación
|
||||
|
||||
@@ -10,7 +10,7 @@ mod para Minecraft Fabric 1.21.11 que añade algunas cosas QOL, mayormente relac
|
||||
3. descargar el .jar
|
||||
4. moverlo a tu directorio de mods (probablemente `%appdata%/.minecraft/mods`)
|
||||
|
||||
asegúrate de tener una version de Minecraft y Fabric compatibles con el mod (MC `1.21.11`; Fabric `0.17.3`)
|
||||
asegúrate de tener una version de Minecraft y Fabric compatibles con el mod (MC `26.1`; Fabric `0.18.5`)
|
||||
es posible que haya problemas al usarlo junto a otros mods, especialmente junto a otros clientes, pues pueden conflictar entre ellos.
|
||||
|
||||
### para frikis de 200 de iq
|
||||
|
||||
+8
-11
@@ -1,5 +1,5 @@
|
||||
plugins {
|
||||
id 'fabric-loom' version "${loom_version}"
|
||||
id "net.fabricmc.fabric-loom" version "${loom_version}"
|
||||
id 'maven-publish'
|
||||
}
|
||||
|
||||
@@ -23,18 +23,15 @@ dependencies {
|
||||
// mc
|
||||
minecraft "com.mojang:minecraft:${project.minecraft_version}"
|
||||
|
||||
// mappings
|
||||
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
|
||||
|
||||
// fabric & su api
|
||||
modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
|
||||
modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"
|
||||
implementation "net.fabricmc:fabric-loader:${project.loader_version}"
|
||||
implementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_api_version}"
|
||||
|
||||
// sistema de eventos
|
||||
include(modImplementation "com.github.retuci0:neutrino:${project.neutrino_version}")
|
||||
include(implementation "com.github.retuci0:neutrino:${project.neutrino_version}")
|
||||
|
||||
// rpc de discord
|
||||
include(modImplementation "dev.firstdark.discordrpc:discord-rpc:1.0.3")
|
||||
include(implementation "dev.firstdark.discordrpc:discord-rpc:1.0.3")
|
||||
}
|
||||
|
||||
loom {
|
||||
@@ -50,12 +47,12 @@ processResources {
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile).configureEach {
|
||||
it.options.release = 21
|
||||
it.options.release = 25
|
||||
}
|
||||
|
||||
java {
|
||||
sourceCompatibility = JavaVersion.VERSION_21
|
||||
targetCompatibility = JavaVersion.VERSION_21
|
||||
sourceCompatibility = JavaVersion.VERSION_25
|
||||
targetCompatibility = JavaVersion.VERSION_25
|
||||
}
|
||||
|
||||
jar {
|
||||
|
||||
+5
-3
@@ -1,16 +1,18 @@
|
||||
# v4.0
|
||||
# v4.1
|
||||
|
||||
## novedades
|
||||
|
||||
- actualizado a 26.1
|
||||
|
||||
### adiciones
|
||||
|
||||
#### módulos nuevos:
|
||||
|
||||
- aura de cristales: hace cpvp por ti (muy mejorable, estoy en ello)
|
||||
- autopechera: equipa una pechera antes de atacar con el mazo
|
||||
|
||||
### arreglos / mejoras
|
||||
|
||||
- `$echest` ya funciona y tal
|
||||
- arreglado el cálculo de anchura de los marcos de ajustes para tener en cuenta los botones de los ajustes de colores
|
||||
|
||||
## problemas reconocidos
|
||||
|
||||
|
||||
+5
-6
@@ -1,15 +1,14 @@
|
||||
org.gradle.jvmargs=-Xmx2G
|
||||
org.gradle.parallel=true
|
||||
|
||||
minecraft_version=1.21.11
|
||||
yarn_mappings=1.21.11+build.3
|
||||
loader_version=0.18.4
|
||||
loom_version=1.13-SNAPSHOT
|
||||
minecraft_version=26.1.2
|
||||
loader_version=0.19.2
|
||||
loom_version=1.16-SNAPSHOT
|
||||
|
||||
fabric_api_version=0.140.2+1.21.11
|
||||
fabric_api_version=0.146.0+26.1.2
|
||||
|
||||
neutrino_version=1.1.0
|
||||
|
||||
mod_version=4.0
|
||||
mod_version=4.1
|
||||
maven_group=me.retucio
|
||||
archives_base_name=sputnik
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.2-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.0-bin.zip
|
||||
networkTimeout=10000
|
||||
validateDistributionUrl=true
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
||||
@@ -32,6 +32,8 @@ import me.retucio.sputnik.ui.widgets.Button;
|
||||
|
||||
import me.retucio.sputnik.util.*;
|
||||
import me.retucio.sputnik.util.KeyUtil;
|
||||
import me.retucio.sputnik.util.misc.BlockIterator;
|
||||
import me.retucio.sputnik.util.misc.VersionChecker;
|
||||
import me.retucio.sputnik.util.render.DrawUtil;
|
||||
import me.retucio.sputnik.util.render.RenderUtil;
|
||||
|
||||
@@ -40,13 +42,13 @@ import net.fabricmc.api.ClientModInitializer;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
|
||||
import net.minecraft.SharedConstants;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gui.screen.ChatScreen;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.client.gui.screen.TitleScreen;
|
||||
import net.minecraft.client.gui.screen.ingame.AbstractCommandBlockScreen;
|
||||
import net.minecraft.client.gui.screen.ingame.AbstractSignEditScreen;
|
||||
import net.minecraft.client.gui.screen.ingame.AnvilScreen;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.gui.screens.ChatScreen;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.client.gui.screens.TitleScreen;
|
||||
import net.minecraft.client.gui.screens.inventory.AbstractCommandBlockEditScreen;
|
||||
import net.minecraft.client.gui.screens.inventory.AbstractSignEditScreen;
|
||||
import net.minecraft.client.gui.screens.inventory.AnvilScreen;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
@@ -60,7 +62,7 @@ public class Sputnik implements ClientModInitializer {
|
||||
public static final EventBus EVENT_BUS = new EventBus();
|
||||
public static final Logger LOGGER = LogManager.getLogger(Sputnik.class);
|
||||
public static final long LAUNCH_TIME = System.currentTimeMillis();
|
||||
public static MinecraftClient mc;
|
||||
public static Minecraft mc;
|
||||
|
||||
// id y versión
|
||||
public static final String MOD_ID = "sputnik";
|
||||
@@ -81,7 +83,7 @@ public class Sputnik implements ClientModInitializer {
|
||||
|
||||
@Override
|
||||
public void onInitializeClient() {
|
||||
mc = MinecraftClient.getInstance();
|
||||
mc = Minecraft.getInstance();
|
||||
ConfigManager.load();
|
||||
|
||||
VersionChecker.check();
|
||||
@@ -99,7 +101,6 @@ public class Sputnik implements ClientModInitializer {
|
||||
EVENT_BUS.subscribe(BlockIterator.class);
|
||||
|
||||
Lists.init();
|
||||
Textures.init();
|
||||
|
||||
CapeManager.INSTANCE = new CapeManager();
|
||||
EVENT_BUS.post(new LoadCapeManagerEvent());
|
||||
@@ -110,11 +111,13 @@ public class Sputnik implements ClientModInitializer {
|
||||
CommandManager.INSTANCE = new CommandManager();
|
||||
EVENT_BUS.post(new LoadCommandManagerEvent());
|
||||
|
||||
ClickGUI.INSTANCE = new ClickGUI();
|
||||
HudEditorScreen.INSTANCE = new HudEditorScreen();
|
||||
EVENT_BUS.post(new LoadClickGUIEvent());
|
||||
|
||||
mc.execute(HudRenderer::init);
|
||||
mc.execute(() -> {
|
||||
Textures.init();
|
||||
ClickGUI.INSTANCE = new ClickGUI();
|
||||
HudEditorScreen.INSTANCE = new HudEditorScreen();
|
||||
EVENT_BUS.post(new LoadClickGUIEvent());
|
||||
HudRenderer.init();
|
||||
});
|
||||
|
||||
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
|
||||
EVENT_BUS.post(new ShutdownEvent());
|
||||
@@ -169,7 +172,7 @@ public class Sputnik implements ClientModInitializer {
|
||||
|
||||
// se ocupa de la lógica de encendido y apagado de los módulos
|
||||
private void handleModuleToggle(int key, boolean anyFocused) {
|
||||
if (mc.currentScreen != null && mc.currentScreen != ClickGUI.INSTANCE) return;
|
||||
if (mc.screen != null && mc.screen != ClickGUI.INSTANCE) return;
|
||||
|
||||
for (Module module : ModuleManager.INSTANCE.getModules()) {
|
||||
if (key != module.getKey() || anyFocused || KeyUtil.isKeyDown(GLFW.GLFW_KEY_F3)) continue; // evitar interrumpir combinaciones de teclas del F3
|
||||
@@ -196,11 +199,11 @@ public class Sputnik implements ClientModInitializer {
|
||||
if (key != ClientSettingsFrame.guiSettings.getKey() || anyFocused || isOnTypingScreen())
|
||||
return;
|
||||
|
||||
if (mc.currentScreen != ClickGUI.INSTANCE) {
|
||||
prevScreen = mc.currentScreen;
|
||||
if (mc.screen != ClickGUI.INSTANCE) {
|
||||
prevScreen = mc.screen;
|
||||
mc.setScreen(ClickGUI.INSTANCE);
|
||||
} else {
|
||||
ClickGUI.INSTANCE.close();
|
||||
ClickGUI.INSTANCE.onClose();
|
||||
mc.setScreen(prevScreen);
|
||||
}
|
||||
}
|
||||
@@ -210,22 +213,22 @@ public class Sputnik implements ClientModInitializer {
|
||||
HUD hud = ModuleManager.INSTANCE.getModuleByClass(HUD.class);
|
||||
if (key != hud.editorKey.getValue() || anyFocused || isOnTypingScreen()) return;
|
||||
|
||||
if (mc.currentScreen != HudEditorScreen.INSTANCE) {
|
||||
if (mc.screen != HudEditorScreen.INSTANCE) {
|
||||
if (!hud.isEnabled()) {
|
||||
ChatUtil.warn("HUD está desactivado, lumbreras");
|
||||
return;
|
||||
}
|
||||
prevScreen = mc.currentScreen;
|
||||
prevScreen = mc.screen;
|
||||
mc.setScreen(HudEditorScreen.INSTANCE);
|
||||
} else {
|
||||
HudEditorScreen.INSTANCE.close();
|
||||
HudEditorScreen.INSTANCE.onClose();
|
||||
mc.setScreen(prevScreen);
|
||||
}
|
||||
}
|
||||
|
||||
// se ocupa de apagar los módulos que tengan configurado hacerlo tras soltar su tecla
|
||||
private void handleModuleRelease(int key) {
|
||||
if (mc.currentScreen != null && mc.currentScreen != ClickGUI.INSTANCE) return;
|
||||
if (mc.screen != null && mc.screen != ClickGUI.INSTANCE) return;
|
||||
|
||||
for (Module module : ModuleManager.INSTANCE.getEnabledModules())
|
||||
if (module.shouldToggleOnBindRelease() && key == module.getKey())
|
||||
@@ -233,10 +236,10 @@ public class Sputnik implements ClientModInitializer {
|
||||
}
|
||||
|
||||
private boolean isOnTypingScreen() {
|
||||
return mc.currentScreen instanceof ChatScreen
|
||||
|| mc.currentScreen instanceof AnvilScreen
|
||||
|| mc.currentScreen instanceof AbstractSignEditScreen
|
||||
|| mc.currentScreen instanceof AbstractCommandBlockScreen;
|
||||
return mc.screen instanceof ChatScreen
|
||||
|| mc.screen instanceof AnvilScreen
|
||||
|| mc.screen instanceof AbstractSignEditScreen
|
||||
|| mc.screen instanceof AbstractCommandBlockEditScreen;
|
||||
}
|
||||
|
||||
@EventListener
|
||||
@@ -245,7 +248,7 @@ public class Sputnik implements ClientModInitializer {
|
||||
if (VersionChecker.shouldShowScreen && event.getScreen() instanceof TitleScreen) {
|
||||
event.cancel();
|
||||
VersionChecker.shouldShowScreen = false;
|
||||
mc.execute(() -> mc.currentScreen = new UpdateScreen());
|
||||
mc.execute(() -> mc.screen = new UpdateScreen());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -255,6 +258,6 @@ public class Sputnik implements ClientModInitializer {
|
||||
}
|
||||
|
||||
public static String getVersionName() {
|
||||
return MOD_ID + "_v" + MOD_VERSION + "_" + SharedConstants.getGameVersion().name();
|
||||
return MOD_ID + "_v" + MOD_VERSION + "_" + SharedConstants.getCurrentVersion().name();
|
||||
}
|
||||
}
|
||||
@@ -1,26 +1,27 @@
|
||||
package me.retucio.sputnik.cape;
|
||||
|
||||
import me.retucio.sputnik.Sputnik;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.texture.NativeImage;
|
||||
import net.minecraft.client.texture.NativeImageBackedTexture;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import com.mojang.blaze3d.platform.NativeImage;
|
||||
import net.minecraft.client.renderer.texture.DynamicTexture;
|
||||
import net.minecraft.client.renderer.texture.ReloadableTexture;
|
||||
import net.minecraft.resources.Identifier;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
|
||||
public class Cape {
|
||||
|
||||
private final MinecraftClient mc = MinecraftClient.getInstance();
|
||||
private final Minecraft mc = Minecraft.getInstance();
|
||||
|
||||
private final String name;
|
||||
private final Identifier id;
|
||||
private NativeImage img;
|
||||
private NativeImageBackedTexture texture;
|
||||
private DynamicTexture texture;
|
||||
|
||||
public Cape(String name) {
|
||||
this.name = name;
|
||||
this.id = Identifier.of(Sputnik.MOD_ID, "textures/capes/" + name + ".png");
|
||||
this.id = Identifier.fromNamespaceAndPath(Sputnik.MOD_ID, "textures/capes/" + name + ".png");
|
||||
}
|
||||
|
||||
public void load() {
|
||||
@@ -28,7 +29,7 @@ public class Cape {
|
||||
}
|
||||
|
||||
public NativeImage loadTexture(Identifier id) {
|
||||
try (InputStream inputStream = mc.getResourceManager().getResource(id).get().getInputStream()) {
|
||||
try (InputStream inputStream = mc.getResourceManager().getResource(id).get().open()) {
|
||||
return NativeImage.read(inputStream);
|
||||
} catch (IOException e) {
|
||||
Sputnik.LOGGER.error("ups: {}", e.getMessage());
|
||||
@@ -37,8 +38,8 @@ public class Cape {
|
||||
}
|
||||
|
||||
public void register() {
|
||||
texture = new NativeImageBackedTexture(null, img);
|
||||
mc.getTextureManager().registerTexture(id, texture);
|
||||
texture = new DynamicTexture(null, img);
|
||||
mc.getTextureManager().register(id, texture);
|
||||
img = null;
|
||||
}
|
||||
|
||||
@@ -50,7 +51,7 @@ public class Cape {
|
||||
return id;
|
||||
}
|
||||
|
||||
public NativeImageBackedTexture getTexture() {
|
||||
public DynamicTexture getTexture() {
|
||||
return texture;
|
||||
}
|
||||
|
||||
|
||||
@@ -4,21 +4,21 @@ import com.mojang.brigadier.CommandDispatcher;
|
||||
import com.mojang.brigadier.arguments.ArgumentType;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import com.mojang.brigadier.builder.RequiredArgumentBuilder;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.command.CommandRegistryAccess;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.registry.BuiltinRegistries;
|
||||
import net.minecraft.server.command.CommandManager;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.commands.CommandBuildContext;
|
||||
import net.minecraft.commands.Commands;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
import net.minecraft.data.registries.VanillaRegistries;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public abstract class Command {
|
||||
|
||||
// utilizar los "registries" ya existentes de Brigadier para el autocompletado
|
||||
protected static final CommandRegistryAccess REGISTRY_ACCESS = CommandManager.createRegistryAccess(BuiltinRegistries.createWrapperLookup());
|
||||
protected static final CommandBuildContext REGISTRY_ACCESS = Commands.createValidationContext(VanillaRegistries.createLookup());
|
||||
protected static final int SUCCESS = com.mojang.brigadier.Command.SINGLE_SUCCESS;
|
||||
|
||||
protected static final MinecraftClient mc = MinecraftClient.getInstance();
|
||||
protected static final Minecraft mc = Minecraft.getInstance();
|
||||
|
||||
private final String name, description;
|
||||
private final List<String> aliases;
|
||||
@@ -30,27 +30,27 @@ public abstract class Command {
|
||||
}
|
||||
|
||||
// métodos "helper" para reducir el "boilerplate"
|
||||
protected static <T> RequiredArgumentBuilder<CommandSource, T> argument(final String name, final ArgumentType<T> type) {
|
||||
protected static <T> RequiredArgumentBuilder<SharedSuggestionProvider, T> argument(final String name, final ArgumentType<T> type) {
|
||||
return RequiredArgumentBuilder.argument(name, type);
|
||||
}
|
||||
|
||||
protected static LiteralArgumentBuilder<CommandSource> literal(final String name) {
|
||||
protected static LiteralArgumentBuilder<SharedSuggestionProvider> literal(final String name) {
|
||||
return LiteralArgumentBuilder.literal(name);
|
||||
}
|
||||
|
||||
// para registrar comandos
|
||||
public final void registerTo(CommandDispatcher<CommandSource> dispatcher) {
|
||||
public final void registerTo(CommandDispatcher<SharedSuggestionProvider> dispatcher) {
|
||||
register(dispatcher, name);
|
||||
for (String alias : aliases) register(dispatcher, alias);
|
||||
}
|
||||
|
||||
public void register(CommandDispatcher<CommandSource> dispatcher, String name) {
|
||||
LiteralArgumentBuilder<CommandSource> builder = LiteralArgumentBuilder.literal(name);
|
||||
public void register(CommandDispatcher<SharedSuggestionProvider> dispatcher, String name) {
|
||||
LiteralArgumentBuilder<SharedSuggestionProvider> builder = LiteralArgumentBuilder.literal(name);
|
||||
build(builder);
|
||||
dispatcher.register(builder);
|
||||
}
|
||||
|
||||
public abstract void build(LiteralArgumentBuilder<CommandSource> builder);
|
||||
public abstract void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder);
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
|
||||
@@ -5,8 +5,8 @@ import com.mojang.brigadier.CommandDispatcher;
|
||||
import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||
import me.retucio.sputnik.Sputnik;
|
||||
import me.retucio.sputnik.command.commands.*;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.ArrayList;
|
||||
@@ -22,9 +22,9 @@ public class CommandManager {
|
||||
private String prefix = "$";
|
||||
|
||||
public static final List<Command> commands = new ArrayList<>();
|
||||
public static final CommandDispatcher<CommandSource> dispatcher = new CommandDispatcher<>();
|
||||
public static final CommandDispatcher<SharedSuggestionProvider> dispatcher = new CommandDispatcher<>();
|
||||
|
||||
private static final MinecraftClient mc = MinecraftClient.getInstance();
|
||||
private static final Minecraft mc = Minecraft.getInstance();
|
||||
|
||||
public CommandManager() {
|
||||
registerCommands();
|
||||
@@ -68,7 +68,7 @@ public class CommandManager {
|
||||
}
|
||||
|
||||
public static void dispatch(String message) throws CommandSyntaxException {
|
||||
dispatcher.execute(message, Objects.requireNonNull(mc.getNetworkHandler()).getCommandSource());
|
||||
dispatcher.execute(message, Objects.requireNonNull(mc.getConnection()).getSuggestionsProvider());
|
||||
}
|
||||
|
||||
public static Command getCommandByName(String name) {
|
||||
|
||||
@@ -9,9 +9,9 @@ import com.mojang.brigadier.suggestion.Suggestions;
|
||||
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
|
||||
|
||||
import me.retucio.sputnik.util.EntityUtil;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -25,7 +25,7 @@ public class EntityArgumentType implements ArgumentType<Entity> {
|
||||
|
||||
public static final EntityArgumentType INSTANCE = new EntityArgumentType();
|
||||
private static final DynamicCommandExceptionType NO_SUCH_ENTITY = new DynamicCommandExceptionType(
|
||||
name -> Text.literal("Entidad \"" + name + "\" no encontrada"));
|
||||
name -> Component.literal("Entidad \"" + name + "\" no encontrada"));
|
||||
|
||||
private static final Collection<String> EXAMPLES = List.of(
|
||||
"AdlerHitdolf",
|
||||
@@ -42,7 +42,7 @@ public class EntityArgumentType implements ArgumentType<Entity> {
|
||||
public Entity parse(StringReader reader) throws CommandSyntaxException {
|
||||
String argument = reader.readString();
|
||||
|
||||
if (mc.world == null)
|
||||
if (mc.level == null)
|
||||
throw NO_SUCH_ENTITY.create(argument);
|
||||
|
||||
if (argument.startsWith("@"))
|
||||
@@ -83,13 +83,13 @@ public class EntityArgumentType implements ArgumentType<Entity> {
|
||||
}
|
||||
|
||||
private Entity findNearestPlayer() throws CommandSyntaxException {
|
||||
PlayerEntity nearest = null;
|
||||
Player nearest = null;
|
||||
double nearestDistance = Double.MAX_VALUE;
|
||||
|
||||
for (PlayerEntity player : mc.world.getPlayers()) {
|
||||
for (Player player : mc.level.players()) {
|
||||
if (player == mc.player) continue;
|
||||
|
||||
double distance = mc.player.squaredDistanceTo(player);
|
||||
double distance = mc.player.distanceToSqr(player);
|
||||
if (distance < nearestDistance) {
|
||||
nearestDistance = distance;
|
||||
nearest = player;
|
||||
@@ -103,7 +103,7 @@ public class EntityArgumentType implements ArgumentType<Entity> {
|
||||
}
|
||||
|
||||
private Entity findRandomPlayer() throws CommandSyntaxException {
|
||||
List<PlayerEntity> players = new ArrayList<>(mc.world.getPlayers());
|
||||
List<Player> players = new ArrayList<>(mc.level.players());
|
||||
if (players.isEmpty()) throw NO_SUCH_ENTITY.create("@r");
|
||||
|
||||
players.remove(mc.player);
|
||||
@@ -116,8 +116,8 @@ public class EntityArgumentType implements ArgumentType<Entity> {
|
||||
private Entity parseEntitySelector(String selector) throws CommandSyntaxException {
|
||||
if (selector.equals("@e")) {
|
||||
List<Entity> entities = new ArrayList<>();
|
||||
for (Entity entity : mc.world.getEntities())
|
||||
if (!(entity instanceof PlayerEntity))
|
||||
for (Entity entity : mc.level.getEntities().getAll())
|
||||
if (!(entity instanceof Player))
|
||||
entities.add(entity);
|
||||
|
||||
if (entities.isEmpty()) throw NO_SUCH_ENTITY.create(selector);
|
||||
@@ -141,8 +141,8 @@ public class EntityArgumentType implements ArgumentType<Entity> {
|
||||
private Entity findEntityByType(String type) throws CommandSyntaxException {
|
||||
List<Entity> matchingEntities = new ArrayList<>();
|
||||
|
||||
for (Entity entity : mc.world.getEntities()) {
|
||||
String entityType = entity.getType().getTranslationKey();
|
||||
for (Entity entity : mc.level.getEntities().getAll()) {
|
||||
String entityType = entity.getType().getDescriptionId();
|
||||
if (entityType.contains(type.toLowerCase().replace("minecraft:", "")))
|
||||
matchingEntities.add(entity);
|
||||
}
|
||||
@@ -153,7 +153,7 @@ public class EntityArgumentType implements ArgumentType<Entity> {
|
||||
double nearestDistance = Double.MAX_VALUE;
|
||||
|
||||
for (Entity entity : matchingEntities) {
|
||||
double distance = mc.player.squaredDistanceTo(entity);
|
||||
double distance = mc.player.distanceToSqr(entity);
|
||||
if (distance < nearestDistance) {
|
||||
nearestDistance = distance;
|
||||
nearest = entity;
|
||||
@@ -164,15 +164,15 @@ public class EntityArgumentType implements ArgumentType<Entity> {
|
||||
}
|
||||
|
||||
private Entity findEntityByUUID(UUID uuid) throws CommandSyntaxException {
|
||||
for (Entity entity : mc.world.getEntities())
|
||||
if (entity.getUuid().equals(uuid))
|
||||
for (Entity entity : mc.level.getEntities().getAll())
|
||||
if (entity.getUUID().equals(uuid))
|
||||
return entity;
|
||||
|
||||
throw NO_SUCH_ENTITY.create(uuid.toString());
|
||||
}
|
||||
|
||||
private PlayerEntity findPlayerByName(String name) throws CommandSyntaxException {
|
||||
for (PlayerEntity player : mc.world.getPlayers())
|
||||
private Player findPlayerByName(String name) throws CommandSyntaxException {
|
||||
for (Player player : mc.level.players())
|
||||
if (player.getName().getString().equalsIgnoreCase(name))
|
||||
return player;
|
||||
|
||||
@@ -181,8 +181,8 @@ public class EntityArgumentType implements ArgumentType<Entity> {
|
||||
|
||||
@Override
|
||||
public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) {
|
||||
if (mc.world != null)
|
||||
for (PlayerEntity player : mc.world.getPlayers())
|
||||
if (mc.level != null)
|
||||
for (Player player : mc.level.players())
|
||||
builder.suggest(player.getName().getString());
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@ public class EntityArgumentType implements ArgumentType<Entity> {
|
||||
|
||||
Entity lookingAt = EntityUtil.getEntityPlayerIsLookingAt();
|
||||
if (lookingAt != null)
|
||||
builder.suggest(lookingAt.getUuid().toString());
|
||||
builder.suggest(lookingAt.getUUID().toString());
|
||||
|
||||
return builder.buildFuture();
|
||||
}
|
||||
|
||||
@@ -7,15 +7,15 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
|
||||
import com.mojang.brigadier.suggestion.Suggestions;
|
||||
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
|
||||
public class EnumArgumentType<T extends Enum<T>> implements ArgumentType<T> {
|
||||
|
||||
private static final DynamicCommandExceptionType NO_SUCH_TYPE = new DynamicCommandExceptionType((value) -> Text.of(" argumento inválido: " + value));
|
||||
private static final DynamicCommandExceptionType NO_SUCH_TYPE = new DynamicCommandExceptionType((value) -> Component.nullToEmpty(" argumento inválido: " + value));
|
||||
|
||||
private final T[] values;
|
||||
|
||||
@@ -41,6 +41,6 @@ public class EnumArgumentType<T extends Enum<T>> implements ArgumentType<T> {
|
||||
}
|
||||
|
||||
public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) {
|
||||
return CommandSource.suggestMatching(Arrays.stream(this.values).map(e -> e.toString().toLowerCase()), builder);
|
||||
return SharedSuggestionProvider.suggest(Arrays.stream(this.values).map(e -> e.toString().toLowerCase()), builder);
|
||||
}
|
||||
}
|
||||
@@ -10,8 +10,8 @@ import com.mojang.brigadier.suggestion.SuggestionsBuilder;
|
||||
import me.retucio.sputnik.module.Module;
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.util.MiscUtil;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.concurrent.CompletableFuture;
|
||||
@@ -22,7 +22,7 @@ public class ModuleArgumentType implements ArgumentType<Module> {
|
||||
public static final ModuleArgumentType INSTANCE = new ModuleArgumentType();
|
||||
|
||||
private static final DynamicCommandExceptionType UNKNOWN_MODULE = new DynamicCommandExceptionType(
|
||||
name -> Text.literal("módulo \"" + name + "\" no encontrado"));
|
||||
name -> Component.literal("módulo \"" + name + "\" no encontrado"));
|
||||
|
||||
private static final Collection<String> examples = ModuleManager.INSTANCE.getModules()
|
||||
.stream().limit(3).map(module -> module.getName().replace(" ", "_")).toList();
|
||||
@@ -37,7 +37,7 @@ public class ModuleArgumentType implements ArgumentType<Module> {
|
||||
|
||||
@Override
|
||||
public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) {
|
||||
return CommandSource.suggestMatching(ModuleManager.INSTANCE.getModules()
|
||||
return SharedSuggestionProvider.suggest(ModuleManager.INSTANCE.getModules()
|
||||
.stream().map(module -> MiscUtil.removeAccentMarks(module.getName().replace(" ", "_"))), builder);
|
||||
}
|
||||
|
||||
@@ -46,7 +46,7 @@ public class ModuleArgumentType implements ArgumentType<Module> {
|
||||
return examples;
|
||||
}
|
||||
|
||||
public static Module get(CommandContext<CommandSource> ctx) {
|
||||
public static Module get(CommandContext<SharedSuggestionProvider> ctx) {
|
||||
return ctx.getArgument("módulo", Module.class);
|
||||
}
|
||||
}
|
||||
@@ -7,9 +7,9 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException;
|
||||
import com.mojang.brigadier.exceptions.DynamicCommandExceptionType;
|
||||
import com.mojang.brigadier.suggestion.Suggestions;
|
||||
import com.mojang.brigadier.suggestion.SuggestionsBuilder;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
@@ -18,21 +18,21 @@ import java.util.concurrent.CompletableFuture;
|
||||
import static me.retucio.sputnik.Sputnik.mc;
|
||||
|
||||
// para autocompletar nombres de jugadores
|
||||
public class PlayerArgumentType implements ArgumentType<PlayerEntity> {
|
||||
public class PlayerArgumentType implements ArgumentType<Player> {
|
||||
|
||||
public static final PlayerArgumentType INSTANCE = new PlayerArgumentType();
|
||||
private static final DynamicCommandExceptionType NO_SUCH_PLAYER = new DynamicCommandExceptionType(name -> Text.literal("Player with name " + name + " doesn't exist."));
|
||||
private static final DynamicCommandExceptionType NO_SUCH_PLAYER = new DynamicCommandExceptionType(name -> Component.literal("Player with name " + name + " doesn't exist."));
|
||||
|
||||
private static final Collection<String> EXAMPLES = List.of("retucio", "prepucio", "postpucio", "pucio", "adler hitdolf");
|
||||
|
||||
private PlayerArgumentType() {}
|
||||
|
||||
@Override
|
||||
public PlayerEntity parse(StringReader reader) throws CommandSyntaxException {
|
||||
public Player parse(StringReader reader) throws CommandSyntaxException {
|
||||
String argument = reader.readString();
|
||||
PlayerEntity playerEntity = null;
|
||||
Player playerEntity = null;
|
||||
|
||||
for (PlayerEntity p : mc.world.getPlayers())
|
||||
for (Player p : mc.level.players())
|
||||
if (p.getName().getString().equalsIgnoreCase(argument)) {
|
||||
playerEntity = p;
|
||||
break;
|
||||
@@ -45,7 +45,7 @@ public class PlayerArgumentType implements ArgumentType<PlayerEntity> {
|
||||
|
||||
@Override
|
||||
public <S> CompletableFuture<Suggestions> listSuggestions(CommandContext<S> context, SuggestionsBuilder builder) {
|
||||
return CommandSource.suggestMatching(mc.world.getPlayers().stream().map(
|
||||
return SharedSuggestionProvider.suggest(mc.level.players().stream().map(
|
||||
abstractClientPlayerEntity -> abstractClientPlayerEntity.getName().getString()), builder);
|
||||
}
|
||||
|
||||
@@ -54,8 +54,8 @@ public class PlayerArgumentType implements ArgumentType<PlayerEntity> {
|
||||
return EXAMPLES;
|
||||
}
|
||||
|
||||
public static PlayerEntity get(CommandContext<?> context) {
|
||||
return context.getArgument("jugador", PlayerEntity.class);
|
||||
public static Player get(CommandContext<?> context) {
|
||||
return context.getArgument("jugador", Player.class);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -8,14 +8,13 @@ import me.retucio.sputnik.module.setting.settings.KeySetting;
|
||||
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
|
||||
import me.retucio.sputnik.util.ChatUtil;
|
||||
import me.retucio.sputnik.util.KeyUtil;
|
||||
import net.minecraft.client.input.KeyInput;
|
||||
import net.minecraft.client.option.KeyBinding;
|
||||
import net.minecraft.client.resource.language.I18n;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Formatting;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.client.KeyMapping;
|
||||
import net.minecraft.client.input.KeyEvent;
|
||||
import net.minecraft.client.resources.language.I18n;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
||||
import javax.swing.text.JTextComponent;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@@ -29,19 +28,20 @@ public class BindCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder
|
||||
.then(argument("módulo", ModuleArgumentType.INSTANCE)
|
||||
.executes(ctx -> {
|
||||
Module module = ctx.getArgument("módulo", Module.class);
|
||||
listeningModule = module;
|
||||
ChatUtil.info("presiona una tecla para asignarla al módulo " + Formatting.GREEN + module.getName());
|
||||
ChatUtil.info("presiona una tecla para asignarla al módulo " + ChatFormatting.GREEN + module.getName());
|
||||
return SUCCESS;
|
||||
})
|
||||
.then(literal("reset").executes(ctx -> {
|
||||
Module module = ctx.getArgument("módulo", Module.class);
|
||||
module.getBind().reset();
|
||||
ChatUtil.info("tecla para el módulo " + Formatting.GREEN + module.getName() + " restablecida a " + Formatting.AQUA + KeyUtil.getKeyName(module.getKey()));
|
||||
ChatUtil.info("tecla para el módulo " + ChatFormatting.GREEN + module.getName()
|
||||
+ " restablecida a " + ChatFormatting.AQUA + KeyUtil.getKeyName(module.getKey()));
|
||||
return SUCCESS;
|
||||
}))
|
||||
);
|
||||
@@ -52,16 +52,16 @@ public class BindCommand extends Command {
|
||||
KeySetting bind = listeningModule.getBind();
|
||||
|
||||
if (ClientSettingsFrame.guiSettings.multipleKeybinds.getValue()) {
|
||||
List<KeyBinding> keys = new ArrayList<>(List.of(mc.options.allKeys));
|
||||
List<KeyMapping> keys = new ArrayList<>(List.of(mc.options.keyMappings));
|
||||
keys.removeAll(List.of(mc.options.debugKeys));
|
||||
|
||||
for (KeyBinding kb : keys) {
|
||||
boolean keyAlreadyBound = kb.matchesKey(new KeyInput(key, 0, 0));
|
||||
for (KeyMapping kb : keys) {
|
||||
boolean keyAlreadyBound = kb.matches(new KeyEvent(key, 0, 0));
|
||||
boolean allowMultiple = ClientSettingsFrame.guiSettings.multipleKeybinds.getValue();
|
||||
|
||||
if (keyAlreadyBound && !allowMultiple) {
|
||||
ChatUtil.warn("esa tecla ya está cogida por "
|
||||
+ Formatting.GREEN + "\"" + I18n.translate(kb.getId()) + "\"");
|
||||
+ ChatFormatting.GREEN + "\"" + I18n.get(kb.getName() + "\""));
|
||||
listeningModule = null;
|
||||
return true;
|
||||
}
|
||||
@@ -71,8 +71,8 @@ public class BindCommand extends Command {
|
||||
if (bind != null) bind.setValue(key);
|
||||
|
||||
ChatUtil.info(
|
||||
Text.of("la tecla " + Formatting.AQUA + KeyUtil.getKeyName(key) + Formatting.RESET +
|
||||
" ha sido asignada al módulo " + Formatting.GREEN + listeningModule.getName())
|
||||
Component.nullToEmpty("la tecla " + ChatFormatting.AQUA + KeyUtil.getKeyName(key) + ChatFormatting.RESET +
|
||||
" ha sido asignada al módulo " + ChatFormatting.GREEN + listeningModule.getName())
|
||||
);
|
||||
|
||||
listeningModule = null;
|
||||
|
||||
@@ -4,10 +4,10 @@ import com.mojang.brigadier.arguments.IntegerArgumentType;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.command.args.EnumArgumentType;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import net.minecraft.client.gui.screen.ingame.GenericContainerScreen;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.screen.slot.SlotActionType;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.client.gui.screens.inventory.ContainerScreen;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
import net.minecraft.world.inventory.ContainerInput;
|
||||
|
||||
// https://cdn.discordapp.com/attachments/1456079799045980400/1457154232737206375/dupersunited-public-addon-1.21.11-3.1.3.jar?ex=69735be1&is=69720a61&hm=77fb6faee49762e0a812661f0d98931e89cb725db711c45722249d0efe3b91e4&
|
||||
public class ClickSlotCommand extends Command {
|
||||
@@ -16,16 +16,17 @@ public class ClickSlotCommand extends Command {
|
||||
super("clickslot", "simula un clic a un slot");
|
||||
}
|
||||
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder.then(argument("slot", IntegerArgumentType.integer())
|
||||
.then(argument("botón", IntegerArgumentType.integer())
|
||||
.then(argument("acción", EnumArgumentType.enumArgument(SlotActionType.SWAP))
|
||||
.then(argument("acción", EnumArgumentType.enumArgument(ContainerInput.SWAP))
|
||||
.executes(context -> {
|
||||
int slot = context.getArgument("slot", Integer.class), button = context.getArgument("botón", Integer.class);
|
||||
SlotActionType action = context.getArgument("acción", SlotActionType.class);
|
||||
Screen screen = mc.currentScreen;
|
||||
int syncId = (screen instanceof GenericContainerScreen gcScreen) ? gcScreen.getScreenHandler().syncId : 0;
|
||||
mc.interactionManager.clickSlot(syncId, slot, button, action, mc.player);
|
||||
ContainerInput action = context.getArgument("acción", ContainerInput.class);
|
||||
Screen screen = mc.screen;
|
||||
int syncId = (screen instanceof ContainerScreen cScreen) ? cScreen.getMenu().containerId : 0;
|
||||
if (mc.gameMode == null) return 0;
|
||||
mc.gameMode.handleContainerInput(syncId, slot, button, action, mc.player);
|
||||
return SUCCESS;
|
||||
})
|
||||
)
|
||||
|
||||
@@ -7,7 +7,7 @@ import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.command.args.ModuleArgumentType;
|
||||
import me.retucio.sputnik.ui.screen.ClickGUI;
|
||||
import me.retucio.sputnik.ui.widgets.frames.SettingsFrame;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
import me.retucio.sputnik.module.Module;
|
||||
|
||||
public class ConfigCommand extends Command {
|
||||
@@ -17,7 +17,7 @@ public class ConfigCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder
|
||||
.then(argument("módulo", ModuleArgumentType.INSTANCE)
|
||||
.executes(ctx -> {
|
||||
@@ -38,20 +38,20 @@ public class ConfigCommand extends Command {
|
||||
}
|
||||
|
||||
|
||||
private void openSf(CommandContext<CommandSource> ctx) {
|
||||
private void openSf(CommandContext<SharedSuggestionProvider> ctx) {
|
||||
Module module = ctx.getArgument("módulo", Module.class);
|
||||
mc.setScreen(ClickGUI.INSTANCE);
|
||||
|
||||
if (ClickGUI.INSTANCE.isSettingsFrameOpen(module)) return;
|
||||
|
||||
SettingsFrame sf = ClickGUI.INSTANCE.getSfOfModule(module);
|
||||
int x = mc.getWindow().getScaledWidth() / 2 - sf.getW() / 2;
|
||||
int x = mc.getWindow().getGuiScaledWidth() / 2 - sf.getW() / 2;
|
||||
int y = 67;
|
||||
|
||||
ClickGUI.INSTANCE.openSettingsFrame(module, x, y);
|
||||
}
|
||||
|
||||
private void openSfWithPos(CommandContext<CommandSource> ctx, int x, int y) {
|
||||
private void openSfWithPos(CommandContext<SharedSuggestionProvider> ctx, int x, int y) {
|
||||
Module module = ctx.getArgument("módulo", Module.class);
|
||||
mc.setScreen(ClickGUI.INSTANCE);
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.misc.ScreenshotPlus;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
|
||||
// se usa principalmente para el módulo ScreenshotPlus, pero también se puede usar sin él supongo
|
||||
public class CopyScreenshotCommand extends Command {
|
||||
@@ -14,7 +14,7 @@ public class CopyScreenshotCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder.executes(ctx -> {
|
||||
ScreenshotPlus screenshotPlus = ModuleManager.INSTANCE.getModuleByClass(ScreenshotPlus.class);
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ import me.retucio.sputnik.event.TickEvent;
|
||||
import me.retucio.sputnik.ui.screen.PreviewScreen;
|
||||
import me.retucio.sputnik.util.ChatUtil;
|
||||
import me.retucio.sputnik.util.InventoryUtil;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
|
||||
// accede a los contenidos de tu enderchest
|
||||
public class EnderChestCommand extends Command {
|
||||
@@ -19,7 +19,7 @@ public class EnderChestCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder.executes(ctx -> {
|
||||
mc.execute(() -> {
|
||||
if (mc.player == null) return;
|
||||
|
||||
@@ -3,8 +3,8 @@ package me.retucio.sputnik.command.commands;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.util.ChatUtil;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
||||
public class GarbageCleanerCommand extends Command {
|
||||
|
||||
@@ -13,10 +13,10 @@ public class GarbageCleanerCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder.executes(context -> {
|
||||
System.gc();
|
||||
ChatUtil.info(Text.of("basura recolectada"));
|
||||
ChatUtil.info(Component.nullToEmpty("basura recolectada"));
|
||||
return SUCCESS;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -4,8 +4,8 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.command.args.PlayerArgumentType;
|
||||
import me.retucio.sputnik.util.MiscUtil;
|
||||
import net.minecraft.client.gui.screen.ingame.InventoryScreen;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.client.gui.screens.inventory.InventoryScreen;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
|
||||
// comando que debería de mostrar el inventario de un jugador, pero por cómo funcionan los servers, solo te deja ver el ítem que tenga en la mano
|
||||
public class PeekCommand extends Command {
|
||||
@@ -15,7 +15,7 @@ public class PeekCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder
|
||||
.then(argument("jugador", PlayerArgumentType.INSTANCE)
|
||||
.executes(ctx -> {
|
||||
|
||||
@@ -9,10 +9,10 @@ import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.event.network.PacketEvent;
|
||||
import me.retucio.sputnik.util.ChatUtil;
|
||||
|
||||
import net.minecraft.client.network.ClientCommandSource;
|
||||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.network.packet.s2c.play.CommandTreeS2CPacket;
|
||||
import net.minecraft.client.multiplayer.ClientPacketListener;
|
||||
import net.minecraft.client.multiplayer.ClientSuggestionProvider;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
import net.minecraft.network.protocol.game.ClientboundCommandsPacket;
|
||||
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
@@ -28,9 +28,9 @@ public class PluginsCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder.executes(context -> {
|
||||
if (mc.isIntegratedServerRunning()) {
|
||||
if (mc.hasSingleplayerServer()) {
|
||||
ChatUtil.error("estás en un solo jugador");
|
||||
return SUCCESS;
|
||||
}
|
||||
@@ -51,12 +51,12 @@ public class PluginsCommand extends Command {
|
||||
|
||||
private void findNamespaces() {
|
||||
try {
|
||||
ClientPlayNetworkHandler networkHandler = mc.getNetworkHandler();
|
||||
if (networkHandler == null || networkHandler.getCommandDispatcher() == null) {
|
||||
ClientPacketListener networkHandler = mc.getConnection();
|
||||
if (networkHandler == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
RootCommandNode<ClientCommandSource> root = networkHandler.getCommandDispatcher().getRoot();
|
||||
RootCommandNode<ClientSuggestionProvider> root = networkHandler.getCommands().getRoot();
|
||||
root.getChildren().forEach(this::checkNodeForPlugins);
|
||||
|
||||
if (!plugins.isEmpty()) {
|
||||
@@ -73,7 +73,7 @@ public class PluginsCommand extends Command {
|
||||
}
|
||||
}
|
||||
|
||||
private void checkNodeForPlugins(CommandNode<ClientCommandSource> node) {
|
||||
private void checkNodeForPlugins(CommandNode<ClientSuggestionProvider> node) {
|
||||
String name = node.getName();
|
||||
|
||||
if (name.contains(":")) {
|
||||
@@ -92,7 +92,7 @@ public class PluginsCommand extends Command {
|
||||
private void onPacketReceive(PacketEvent.Receive event) {
|
||||
if (!scanning) return;
|
||||
|
||||
if (event.getPacket() instanceof CommandTreeS2CPacket) {
|
||||
if (event.getPacket() instanceof ClientboundCommandsPacket) {
|
||||
findNamespaces();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,9 +5,9 @@ import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
|
||||
import me.retucio.sputnik.util.ChatUtil;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Formatting;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
||||
// también se puede hacer desde los ajustes de la interfaz
|
||||
public class PrefixCommand extends Command {
|
||||
@@ -17,12 +17,12 @@ public class PrefixCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder
|
||||
.then(argument("prefijo", StringArgumentType.word()).executes(ctx -> {
|
||||
String prefix = ctx.getArgument("prefijo", String.class);
|
||||
ClientSettingsFrame.guiSettings.commandPrefix.setValue(prefix);
|
||||
ChatUtil.info(Text.literal("prefijo cambiado a " + Formatting.AQUA + prefix));
|
||||
ChatUtil.info(Component.literal("prefijo cambiado a " + ChatFormatting.AQUA + prefix));
|
||||
return SUCCESS;
|
||||
}));
|
||||
}
|
||||
|
||||
@@ -3,10 +3,10 @@ package me.retucio.sputnik.command.commands;
|
||||
import com.mojang.brigadier.arguments.IntegerArgumentType;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.util.interfaces.IChatHud;
|
||||
import net.minecraft.client.gui.hud.ChatHud;
|
||||
import net.minecraft.client.gui.hud.ChatHudLine;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import me.retucio.sputnik.util.interfaces.IChatComponent;
|
||||
import net.minecraft.client.gui.components.ChatComponent;
|
||||
import net.minecraft.client.multiplayer.chat.GuiMessage;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@@ -17,7 +17,7 @@ public class PurgeCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder.then(argument("cantidad", IntegerArgumentType.integer(1))
|
||||
.executes(context -> {
|
||||
int amount = IntegerArgumentType.getInteger(context, "cantidad");
|
||||
@@ -28,10 +28,10 @@ public class PurgeCommand extends Command {
|
||||
}
|
||||
|
||||
private void purgeMessages(int amount) {
|
||||
ChatHud chatHud = mc.inGameHud.getChatHud();
|
||||
ChatComponent chatHud = mc.gui.getChat();
|
||||
|
||||
synchronized (chatHud) {
|
||||
List<ChatHudLine.Visible> visibleMessages = ((IChatHud) chatHud).sputnik$getVisibleMessages();
|
||||
List<GuiMessage.Line> visibleMessages = ((IChatComponent) chatHud).sputnik$getVisibleMessages();
|
||||
int toRemove = Math.min(amount, visibleMessages.size());
|
||||
for (int i = 0; i < toRemove; i++)
|
||||
visibleMessages.removeFirst();
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.mojang.brigadier.arguments.StringArgumentType;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.util.ChatUtil;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
|
||||
public class RepeatCommand extends Command {
|
||||
|
||||
@@ -14,7 +14,7 @@ public class RepeatCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder
|
||||
.then(argument("veces", IntegerArgumentType.integer(1))
|
||||
.then(argument("comando", StringArgumentType.greedyString())
|
||||
|
||||
@@ -5,7 +5,7 @@ import com.mojang.brigadier.arguments.StringArgumentType;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.util.ChatUtil;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
@@ -17,7 +17,7 @@ public class RepeatWaitCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder.then(argument("ms", IntegerArgumentType.integer(1))
|
||||
.then(argument("veces", IntegerArgumentType.integer(1))
|
||||
.then(argument("comando", StringArgumentType.greedyString())
|
||||
|
||||
@@ -5,7 +5,7 @@ import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.misc.ScreenshotPlus;
|
||||
import me.retucio.sputnik.util.ChatUtil;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
@@ -17,7 +17,7 @@ public class SaveScreenshotCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder.executes(ctx -> {
|
||||
ScreenshotPlus screenshotPlus = ModuleManager.INSTANCE.getModuleByClass(ScreenshotPlus.class);
|
||||
|
||||
|
||||
@@ -3,18 +3,18 @@ package me.retucio.sputnik.command.commands;
|
||||
import com.mojang.brigadier.arguments.StringArgumentType;
|
||||
import com.mojang.brigadier.builder.LiteralArgumentBuilder;
|
||||
import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.mixin.accessors.ClientPlayNetworkHandlerAccessor;
|
||||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.network.encryption.NetworkEncryptionUtils;
|
||||
import net.minecraft.network.message.LastSeenMessagesCollector;
|
||||
import net.minecraft.network.message.MessageBody;
|
||||
import net.minecraft.network.message.MessageSignatureData;
|
||||
import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket;
|
||||
import me.retucio.sputnik.mixin.accessors.ClientPacketListenerAccessor;
|
||||
import net.minecraft.client.multiplayer.ClientPacketListener;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
import net.minecraft.network.chat.LastSeenMessagesTracker;
|
||||
import net.minecraft.network.chat.MessageSignature;
|
||||
import net.minecraft.network.chat.SignedMessageBody;
|
||||
import net.minecraft.network.protocol.game.ServerboundChatPacket;
|
||||
import net.minecraft.util.Crypt;
|
||||
|
||||
import java.time.Instant;
|
||||
|
||||
// uso principal: protección de coordenadas de ChatPlus, que ni siquiera funciona
|
||||
// uso principal: protección de coordenadas de ChatPlus
|
||||
public class SendCommand extends Command {
|
||||
|
||||
public SendCommand() {
|
||||
@@ -22,31 +22,35 @@ public class SendCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder.then(argument("message", StringArgumentType.greedyString()).executes(context -> {
|
||||
String message = context.getArgument("message", String.class);
|
||||
|
||||
if (message != null && !message.isEmpty()) {
|
||||
Instant instant = Instant.now();
|
||||
long salt = NetworkEncryptionUtils.SecureRandomUtil.nextLong();
|
||||
ClientPlayNetworkHandler handler = mc.getNetworkHandler();
|
||||
long salt = Crypt.SaltSupplier.getLong();
|
||||
ClientPacketListener handler = mc.getConnection();
|
||||
|
||||
// obtener últimos mensajes vistos para la firma
|
||||
LastSeenMessagesCollector.LastSeenMessages lastSeenMessages =
|
||||
((ClientPlayNetworkHandlerAccessor) handler).getLastSeenMessagesCollector().collect();
|
||||
ClientPacketListenerAccessor listener = ((ClientPacketListenerAccessor) handler);
|
||||
if (listener == null) return 0;
|
||||
LastSeenMessagesTracker tracker = ((ClientPacketListenerAccessor) handler).getLastSeenMessagesTracker();
|
||||
LastSeenMessagesTracker.Update lastSeenMessages = tracker.generateAndApplyUpdate();
|
||||
|
||||
// empacar firma para un chat seguro
|
||||
MessageSignatureData messageSignatureData =
|
||||
((ClientPlayNetworkHandlerAccessor) handler).getMessagePacker().pack(
|
||||
new MessageBody(message, instant, salt, lastSeenMessages.lastSeen())
|
||||
);
|
||||
MessageSignature messageSignature = ((ClientPacketListenerAccessor) handler)
|
||||
.getSignedMessageEncoder()
|
||||
.pack(new SignedMessageBody(
|
||||
message, instant, salt, lastSeenMessages.lastSeen()
|
||||
)
|
||||
);
|
||||
|
||||
// enviar paquete para enviar mensaje
|
||||
handler.sendPacket(new ChatMessageC2SPacket(
|
||||
handler.send(new ServerboundChatPacket(
|
||||
message,
|
||||
instant,
|
||||
salt,
|
||||
messageSignatureData,
|
||||
messageSignature,
|
||||
lastSeenMessages.update()
|
||||
));
|
||||
}
|
||||
|
||||
@@ -6,8 +6,8 @@ import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.command.args.EntityArgumentType;
|
||||
import me.retucio.sputnik.event.input.KeyEvent;
|
||||
import me.retucio.sputnik.util.EntityUtil;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import org.lwjgl.glfw.GLFW;
|
||||
|
||||
public class SpectateCommand extends Command {
|
||||
@@ -17,7 +17,7 @@ public class SpectateCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder
|
||||
.executes(ctx -> { // If no argument, use the entity player is looking at
|
||||
mc.execute(() -> {
|
||||
@@ -40,7 +40,7 @@ public class SpectateCommand extends Command {
|
||||
|
||||
@EventListener
|
||||
public void onKey(KeyEvent event) {
|
||||
if (mc.getCameraEntity() != mc.player && mc.currentScreen == null
|
||||
if (mc.getCameraEntity() != mc.player && mc.screen == null
|
||||
&& event.getKey() == GLFW.GLFW_KEY_ESCAPE && event.getAction() != GLFW.GLFW_RELEASE ) {
|
||||
event.cancel();
|
||||
mc.setCameraEntity(mc.player);
|
||||
|
||||
@@ -5,7 +5,7 @@ import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.command.args.ModuleArgumentType;
|
||||
import me.retucio.sputnik.module.Module;
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
|
||||
// porque usar el ratón es más lento que escribir, a menos que tengas toque con el teclado como yo
|
||||
public class ToggleCommand extends Command {
|
||||
@@ -15,7 +15,7 @@ public class ToggleCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder
|
||||
.then(literal("todos")
|
||||
.then(literal("on")
|
||||
|
||||
@@ -8,7 +8,7 @@ import me.retucio.sputnik.command.Command;
|
||||
import me.retucio.sputnik.command.CommandManager;
|
||||
import me.retucio.sputnik.ui.widgets.frames.settings.ClientSettingsFrame;
|
||||
import me.retucio.sputnik.util.ChatUtil;
|
||||
import net.minecraft.command.CommandSource;
|
||||
import net.minecraft.commands.SharedSuggestionProvider;
|
||||
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||
@@ -23,18 +23,18 @@ public class WaitCommand extends Command {
|
||||
}
|
||||
|
||||
@Override
|
||||
public void build(LiteralArgumentBuilder<CommandSource> builder) {
|
||||
public void build(LiteralArgumentBuilder<SharedSuggestionProvider> builder) {
|
||||
builder
|
||||
.then(argument("delay", IntegerArgumentType.integer(0))
|
||||
.then(argument("comando", StringArgumentType.greedyString())
|
||||
.executes(ctx -> {
|
||||
int delay = ctx.getArgument("delay", Integer.class);
|
||||
String command = ctx.getArgument("comando", String.class);
|
||||
.then(argument("delay", IntegerArgumentType.integer(0))
|
||||
.then(argument("comando", StringArgumentType.greedyString())
|
||||
.executes(ctx -> {
|
||||
int delay = ctx.getArgument("delay", Integer.class);
|
||||
String command = ctx.getArgument("comando", String.class);
|
||||
|
||||
DELAYED_EXECUTOR.schedule(() -> ChatUtil.simulateChatMessage(command), delay, TimeUnit.MILLISECONDS);
|
||||
return SUCCESS;
|
||||
})
|
||||
)
|
||||
);
|
||||
DELAYED_EXECUTOR.schedule(() -> ChatUtil.simulateChatMessage(command), delay, TimeUnit.MILLISECONDS);
|
||||
return SUCCESS;
|
||||
})
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
@@ -1,11 +1,11 @@
|
||||
package me.retucio.sputnik.event;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.misc.MinecraftClientMixin;
|
||||
import me.retucio.sputnik.mixin.mixins.misc.MinecraftMixin;
|
||||
|
||||
|
||||
/**
|
||||
* @see MinecraftClientMixin#onStop
|
||||
* @see MinecraftMixin#onStop
|
||||
*/
|
||||
public class ShutdownEvent extends Event {
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package me.retucio.sputnik.event;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.misc.MinecraftClientMixin;
|
||||
import me.retucio.sputnik.mixin.mixins.misc.MinecraftMixin;
|
||||
|
||||
|
||||
/**
|
||||
* @see MinecraftClientMixin#onTickPre
|
||||
* @see MinecraftClientMixin#onTickPost
|
||||
* @see MinecraftMixin#onTickPre
|
||||
* @see MinecraftMixin#onTickPost
|
||||
*/
|
||||
public class TickEvent {
|
||||
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package me.retucio.sputnik.event.input;
|
||||
|
||||
import me.retucio.sputnik.module.modules.misc.ChatPlus;
|
||||
import net.minecraft.text.ClickEvent;
|
||||
import net.minecraft.network.chat.ClickEvent;
|
||||
import org.jspecify.annotations.NonNull;
|
||||
|
||||
|
||||
/** este evento es solo para asegurarse de que comandos del mod se puedan ejecutar solo desde el lado del cliente
|
||||
* @see ChatPlus#getSendButton
|
||||
*/
|
||||
|
||||
public class ClientClickEvent implements ClickEvent {
|
||||
|
||||
private final String value;
|
||||
@@ -20,7 +22,7 @@ public class ClientClickEvent implements ClickEvent {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Action getAction() {
|
||||
public @NonNull Action action() {
|
||||
return Action.RUN_COMMAND;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package me.retucio.sputnik.event.input;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.io.KeyboardMixin;
|
||||
import me.retucio.sputnik.mixin.mixins.io.KeyboardHandlerMixin;
|
||||
|
||||
|
||||
/**
|
||||
* @see KeyboardMixin#onKeyPress
|
||||
* @see KeyboardHandlerMixin#onKeyPress
|
||||
*/
|
||||
public class KeyEvent extends Event {
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package me.retucio.sputnik.event.input;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.io.MouseMixin;
|
||||
import me.retucio.sputnik.mixin.mixins.io.MouseHandlerMixin;
|
||||
|
||||
|
||||
/**
|
||||
* @see MouseMixin#onMouseButton
|
||||
* @see MouseHandlerMixin#onMouseButton
|
||||
*/
|
||||
public class MouseClickEvent extends Event {
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package me.retucio.sputnik.event.input;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.io.MouseMixin;
|
||||
import me.retucio.sputnik.mixin.mixins.io.MouseHandlerMixin;
|
||||
|
||||
|
||||
/**
|
||||
* @see MouseMixin#onMouseScroll
|
||||
* @see MouseHandlerMixin#onMouseScroll
|
||||
*/
|
||||
public class MouseScrollEvent extends Event {
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package me.retucio.sputnik.event.interact;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Direction;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.core.Direction;
|
||||
|
||||
public class AttackBlockEvent extends Event {
|
||||
|
||||
|
||||
@@ -1,13 +1,14 @@
|
||||
package me.retucio.sputnik.event.interact;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.player.ClientPlayerInteractionManagerMixin;
|
||||
import net.minecraft.entity.Entity;
|
||||
import me.retucio.sputnik.mixin.mixins.player.MultiPlayerGameModeMixin;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
|
||||
|
||||
/**
|
||||
* @see ClientPlayerInteractionManagerMixin#onAttackEntity
|
||||
* @see MultiPlayerGameModeMixin#onAttackEntity
|
||||
*/
|
||||
|
||||
public class AttackEntityEvent extends Event {
|
||||
|
||||
private final Entity entity;
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
package me.retucio.sputnik.event.interact;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import net.minecraft.block.BlockState;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.shape.VoxelShape;
|
||||
import net.minecraft.core.BlockPos;
|
||||
import net.minecraft.world.level.block.state.BlockState;
|
||||
import net.minecraft.world.phys.shapes.VoxelShape;
|
||||
|
||||
public class BlockShapeEvent extends Event {
|
||||
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
package me.retucio.sputnik.event.interact;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import net.minecraft.entity.vehicle.AbstractBoatEntity;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.entity.vehicle.boat.AbstractBoat;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
|
||||
public class BoatMoveEvent extends Event {
|
||||
|
||||
private final AbstractBoatEntity boat;
|
||||
private Vec3d pos;
|
||||
private final AbstractBoat boat;
|
||||
private Vec3 pos;
|
||||
|
||||
public BoatMoveEvent(AbstractBoatEntity boat, Vec3d pos) {
|
||||
public BoatMoveEvent(AbstractBoat boat, Vec3 pos) {
|
||||
this.boat = boat;
|
||||
this.pos = pos;
|
||||
}
|
||||
|
||||
public AbstractBoatEntity getBoat() {
|
||||
public AbstractBoat getBoat() {
|
||||
return boat;
|
||||
}
|
||||
|
||||
public Vec3d getPos() {
|
||||
public Vec3 getPos() {
|
||||
return pos;
|
||||
}
|
||||
|
||||
public void setPos(Vec3d pos) {
|
||||
public void setPos(Vec3 pos) {
|
||||
this.pos = pos;
|
||||
}
|
||||
}
|
||||
@@ -1,13 +1,14 @@
|
||||
package me.retucio.sputnik.event.interact;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.player.ClientPlayerInteractionManagerMixin;
|
||||
import net.minecraft.util.math.BlockPos;
|
||||
import me.retucio.sputnik.mixin.mixins.player.MultiPlayerGameModeMixin;
|
||||
import net.minecraft.core.BlockPos;
|
||||
|
||||
|
||||
/**
|
||||
* @see ClientPlayerInteractionManagerMixin#onBlockBreak
|
||||
* @see MultiPlayerGameModeMixin#onBlockBreak
|
||||
*/
|
||||
|
||||
public class BreakBlockEvent extends Event {
|
||||
|
||||
private BlockPos pos;
|
||||
|
||||
@@ -2,7 +2,7 @@ package me.retucio.sputnik.event.interact;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.item.ItemStackMixin;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
|
||||
/**
|
||||
|
||||
@@ -1,20 +1,21 @@
|
||||
package me.retucio.sputnik.event.interact;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.player.ClientPlayerInteractionManagerMixin;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.util.Hand;
|
||||
import me.retucio.sputnik.mixin.mixins.player.MultiPlayerGameModeMixin;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
|
||||
|
||||
/**
|
||||
* @see ClientPlayerInteractionManagerMixin#onEntityInteract
|
||||
* @see MultiPlayerGameModeMixin#onEntityInteract
|
||||
*/
|
||||
|
||||
public class InteractEntityEvent extends Event {
|
||||
|
||||
private final Entity entity;
|
||||
private Hand hand;
|
||||
private InteractionHand hand;
|
||||
|
||||
public InteractEntityEvent(Entity entity, Hand hand) {
|
||||
public InteractEntityEvent(Entity entity, InteractionHand hand) {
|
||||
this.entity = entity;
|
||||
this.hand = hand;
|
||||
}
|
||||
@@ -23,11 +24,11 @@ public class InteractEntityEvent extends Event {
|
||||
return entity;
|
||||
}
|
||||
|
||||
public Hand getHand() {
|
||||
public InteractionHand getHand() {
|
||||
return hand;
|
||||
}
|
||||
|
||||
public void setHand(Hand hand) {
|
||||
public void setHand(InteractionHand hand) {
|
||||
this.hand = hand;
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
package me.retucio.sputnik.event.interact;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
|
||||
public class KnockbackEvent extends Event {
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package me.retucio.sputnik.event.interact;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.misc.MinecraftClientMixin;
|
||||
import net.minecraft.client.gui.screen.Screen;
|
||||
import me.retucio.sputnik.mixin.mixins.misc.MinecraftMixin;
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
|
||||
|
||||
/**
|
||||
* @see MinecraftClientMixin#onOpenScreen
|
||||
* @see MinecraftMixin#onOpenScreen
|
||||
*/
|
||||
public class OpenScreenEvent extends Event {
|
||||
|
||||
|
||||
@@ -1,29 +1,29 @@
|
||||
package me.retucio.sputnik.event.interact;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.player.ClientPlayerInteractionManagerMixin;
|
||||
import net.minecraft.util.Hand;
|
||||
import net.minecraft.util.hit.BlockHitResult;
|
||||
import me.retucio.sputnik.mixin.mixins.player.MultiPlayerGameModeMixin;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.phys.BlockHitResult;
|
||||
|
||||
|
||||
/**
|
||||
* @see ClientPlayerInteractionManagerMixin#onBlockPlace
|
||||
* @see MultiPlayerGameModeMixin#onBlockPlace
|
||||
*/
|
||||
public class PlaceBlockEvent extends Event {
|
||||
|
||||
private Hand hand;
|
||||
private InteractionHand hand;
|
||||
private BlockHitResult result;
|
||||
|
||||
public PlaceBlockEvent(Hand hand, BlockHitResult result) {
|
||||
public PlaceBlockEvent(InteractionHand hand, BlockHitResult result) {
|
||||
this.hand = hand;
|
||||
this.result = result;
|
||||
}
|
||||
|
||||
public Hand getHand() {
|
||||
public InteractionHand getHand() {
|
||||
return hand;
|
||||
}
|
||||
|
||||
public void setHand(Hand hand) {
|
||||
public void setHand(InteractionHand hand) {
|
||||
this.hand = hand;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,20 +1,21 @@
|
||||
package me.retucio.sputnik.event.interact;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.misc.MinecraftClientMixin;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.Hand;
|
||||
import me.retucio.sputnik.mixin.mixins.misc.MinecraftMixin;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
|
||||
|
||||
/**
|
||||
* @see MinecraftClientMixin#onUseItem
|
||||
* @see MinecraftMixin#onUseItem
|
||||
*/
|
||||
public class UseItemEvent extends Event {
|
||||
|
||||
private ItemStack stack;
|
||||
private Hand hand;
|
||||
private InteractionHand hand;
|
||||
|
||||
public UseItemEvent(ItemStack stack, Hand hand) {
|
||||
public UseItemEvent(ItemStack stack, InteractionHand hand) {
|
||||
this.stack = stack;
|
||||
this.hand = hand;
|
||||
}
|
||||
@@ -27,11 +28,15 @@ public class UseItemEvent extends Event {
|
||||
this.stack = stack;
|
||||
}
|
||||
|
||||
public Hand getHand() {
|
||||
public Item getItem() {
|
||||
return stack.getItem();
|
||||
}
|
||||
|
||||
public InteractionHand getHand() {
|
||||
return hand;
|
||||
}
|
||||
|
||||
public void setHand(Hand hand) {
|
||||
public void setHand(InteractionHand hand) {
|
||||
this.hand = hand;
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,12 @@
|
||||
package me.retucio.sputnik.event.network;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.world.ClientWorldMixin;
|
||||
import net.minecraft.entity.Entity;
|
||||
import me.retucio.sputnik.mixin.mixins.world.ClientLevelMixin;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
|
||||
|
||||
/**
|
||||
* @see ClientWorldMixin#onAddEntity
|
||||
* @see ClientLevelMixin#onAddEntity
|
||||
*/
|
||||
public class AddEntityEvent extends Event {
|
||||
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
package me.retucio.sputnik.event.network;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.world.ChunkOcclusionDataBuilderMixin;
|
||||
import me.retucio.sputnik.mixin.mixins.world.VisGraphMixin;
|
||||
|
||||
|
||||
/**
|
||||
* @see ChunkOcclusionDataBuilderMixin#onChunkOcclusion
|
||||
* @see VisGraphMixin#onChunkOcclusion
|
||||
*/
|
||||
public class ChunkOcclusionEvent extends Event {}
|
||||
@@ -1,29 +1,29 @@
|
||||
package me.retucio.sputnik.event.network;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.network.ClientConnectionMixin;
|
||||
import net.minecraft.client.network.ServerInfo;
|
||||
import net.minecraft.network.DisconnectionInfo;
|
||||
import me.retucio.sputnik.mixin.mixins.network.ConnectionMixin;
|
||||
import net.minecraft.client.multiplayer.ServerData;
|
||||
import net.minecraft.network.DisconnectionDetails;
|
||||
|
||||
|
||||
/**
|
||||
* @see ClientConnectionMixin#onDisconnect
|
||||
* @see ConnectionMixin#onDisconnect
|
||||
*/
|
||||
public class DisconnectEvent extends Event {
|
||||
|
||||
private final DisconnectionInfo info;
|
||||
private final ServerInfo server;
|
||||
private final DisconnectionDetails details;
|
||||
private final ServerData server;
|
||||
|
||||
public DisconnectEvent(DisconnectionInfo info, ServerInfo server) {
|
||||
this.info = info;
|
||||
public DisconnectEvent(DisconnectionDetails details, ServerData server) {
|
||||
this.details = details;
|
||||
this.server = server;
|
||||
}
|
||||
|
||||
public DisconnectionInfo getInfo() {
|
||||
return info;
|
||||
public DisconnectionDetails getDetails() {
|
||||
return details;
|
||||
}
|
||||
|
||||
public ServerInfo getServer() {
|
||||
public ServerData getServer() {
|
||||
return server;
|
||||
}
|
||||
}
|
||||
@@ -1,22 +1,23 @@
|
||||
package me.retucio.sputnik.event.network;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.misc.MinecraftClientMixin;
|
||||
import net.minecraft.client.world.ClientWorld;
|
||||
import me.retucio.sputnik.mixin.mixins.misc.MinecraftMixin;
|
||||
import net.minecraft.client.multiplayer.ClientLevel;
|
||||
|
||||
|
||||
/**
|
||||
* @see MinecraftClientMixin#onJoinWorld
|
||||
* @see MinecraftMixin#onJoinWorld
|
||||
*/
|
||||
|
||||
public class JoinWorldEvent extends Event {
|
||||
|
||||
private final ClientWorld world;
|
||||
private final ClientLevel world;
|
||||
|
||||
public JoinWorldEvent(ClientWorld world) {
|
||||
public JoinWorldEvent(ClientLevel world) {
|
||||
this.world = world;
|
||||
}
|
||||
|
||||
public ClientWorld getWorld() {
|
||||
public ClientLevel getWorld() {
|
||||
return world;
|
||||
}
|
||||
}
|
||||
@@ -1,14 +1,14 @@
|
||||
package me.retucio.sputnik.event.network;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.network.ClientConnectionMixin;
|
||||
import net.minecraft.network.packet.Packet;
|
||||
import me.retucio.sputnik.mixin.mixins.network.ConnectionMixin;
|
||||
import net.minecraft.network.protocol.Packet;
|
||||
|
||||
|
||||
/**
|
||||
* @see ClientConnectionMixin#onSendPacketPre
|
||||
* @see ClientConnectionMixin#onSendPacketPost
|
||||
* @see ClientConnectionMixin#onReceivePacket
|
||||
* @see ConnectionMixin#onSendPacketPre
|
||||
* @see ConnectionMixin#onSendPacketPost
|
||||
* @see ConnectionMixin#onReceivePacket
|
||||
*/
|
||||
public class PacketEvent {
|
||||
|
||||
|
||||
@@ -1,41 +1,43 @@
|
||||
package me.retucio.sputnik.event.network;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.hud.ChatHudMixin;
|
||||
import net.minecraft.client.gui.hud.MessageIndicator;
|
||||
import net.minecraft.text.Text;
|
||||
import me.retucio.sputnik.mixin.mixins.hud.ChatComponentMixin;
|
||||
import net.minecraft.client.multiplayer.chat.GuiMessageTag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
|
||||
|
||||
/**
|
||||
* @see ChatHudMixin#onAddMessage
|
||||
* @see ChatComponentMixin#onAddMessage
|
||||
*/
|
||||
|
||||
public class ReceiveMessageEvent extends Event {
|
||||
|
||||
private Text text;
|
||||
private MessageIndicator indicator;
|
||||
private Component text;
|
||||
private GuiMessageTag tag;
|
||||
private final int id;
|
||||
private boolean modified = false;
|
||||
|
||||
public ReceiveMessageEvent(Text text, MessageIndicator indicator, int id) {
|
||||
public ReceiveMessageEvent(Component text, GuiMessageTag tag, int id) {
|
||||
this.text = text;
|
||||
this.indicator = indicator;
|
||||
this.tag = tag;
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Text getMessage() {
|
||||
public Component getMessage() {
|
||||
return text;
|
||||
}
|
||||
|
||||
public MessageIndicator getIndicator() {
|
||||
return indicator;
|
||||
public GuiMessageTag getTag() {
|
||||
return tag;
|
||||
}
|
||||
|
||||
public void setMessage(Text message) {
|
||||
public void setMessage(Component message) {
|
||||
this.text = message;
|
||||
this.modified = true;
|
||||
}
|
||||
|
||||
public void setIndicator(MessageIndicator indicator) {
|
||||
this.indicator = indicator;
|
||||
public void setTag(GuiMessageTag tag) {
|
||||
this.tag = tag;
|
||||
this.modified = true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package me.retucio.sputnik.event.network;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.world.ClientWorldMixin;
|
||||
import net.minecraft.entity.Entity;
|
||||
import me.retucio.sputnik.mixin.mixins.world.ClientLevelMixin;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
|
||||
|
||||
/**
|
||||
* @see ClientWorldMixin#onRemoveEntity
|
||||
* @see ClientLevelMixin#onRemoveEntity
|
||||
*/
|
||||
public class RemoveEntityEvent extends Event {
|
||||
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
package me.retucio.sputnik.event.network;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.network.ClientPlayNetworkHandlerMixin;
|
||||
import me.retucio.sputnik.mixin.mixins.network.ClientPacketListenerMixin;
|
||||
|
||||
|
||||
/**
|
||||
* @see ClientPlayNetworkHandlerMixin#onSendMessage
|
||||
* @see ClientPacketListenerMixin#onSendMessage
|
||||
*/
|
||||
public class SendMessageEvent extends Event {
|
||||
|
||||
|
||||
@@ -1,26 +1,26 @@
|
||||
package me.retucio.sputnik.event.render;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.misc.GameOptionsMixin;
|
||||
import net.minecraft.client.option.Perspective;
|
||||
import me.retucio.sputnik.mixin.mixins.misc.OptionsMixin;
|
||||
import net.minecraft.client.CameraType;
|
||||
|
||||
|
||||
/**
|
||||
* @see GameOptionsMixin#changePerspective
|
||||
* @see OptionsMixin#changePerspective
|
||||
*/
|
||||
public class PerspectiveChangeEvent extends Event {
|
||||
|
||||
private Perspective perspective;
|
||||
private CameraType perspective;
|
||||
|
||||
public PerspectiveChangeEvent(Perspective perspective) {
|
||||
public PerspectiveChangeEvent(CameraType perspective) {
|
||||
this.perspective = perspective;
|
||||
}
|
||||
|
||||
public Perspective getPerspective() {
|
||||
public CameraType getPerspective() {
|
||||
return perspective;
|
||||
}
|
||||
|
||||
public void setPerspective(Perspective perspective) {
|
||||
public void setPerspective(CameraType perspective) {
|
||||
this.perspective = perspective;
|
||||
}
|
||||
}
|
||||
@@ -1,24 +1,26 @@
|
||||
package me.retucio.sputnik.event.render;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.render.RenderTickCounter;
|
||||
|
||||
import net.minecraft.client.DeltaTracker;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
|
||||
|
||||
public class Render2DEvent extends Event {
|
||||
|
||||
private final DrawContext ctx;
|
||||
private final RenderTickCounter tc;
|
||||
private final GuiGraphicsExtractor gui;
|
||||
private final DeltaTracker dt;
|
||||
|
||||
public Render2DEvent(DrawContext ctx, RenderTickCounter tc) {
|
||||
this.ctx = ctx;
|
||||
this.tc = tc;
|
||||
public Render2DEvent(GuiGraphicsExtractor gui, DeltaTracker dt) {
|
||||
this.gui = gui;
|
||||
this.dt = dt;
|
||||
}
|
||||
|
||||
public DrawContext getCtx() {
|
||||
return ctx;
|
||||
public GuiGraphicsExtractor getGui() {
|
||||
return gui;
|
||||
}
|
||||
|
||||
public RenderTickCounter getTc() {
|
||||
return tc;
|
||||
public DeltaTracker getDt() {
|
||||
return dt;
|
||||
}
|
||||
}
|
||||
@@ -1,40 +1,42 @@
|
||||
package me.retucio.sputnik.event.render;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.render.WorldRendererMixin;
|
||||
import net.minecraft.client.render.Camera;
|
||||
import net.minecraft.client.render.RenderTickCounter;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import me.retucio.sputnik.mixin.mixins.render.LevelRendererMixin;
|
||||
import net.minecraft.client.Camera;
|
||||
import net.minecraft.client.DeltaTracker;
|
||||
import net.minecraft.client.renderer.state.level.CameraRenderState;
|
||||
|
||||
|
||||
/**
|
||||
* @see WorldRendererMixin#render
|
||||
* @see LevelRendererMixin#renderLevel
|
||||
*/
|
||||
|
||||
public class Render3DEvent extends Event {
|
||||
|
||||
private final MatrixStack matrices;
|
||||
private final RenderTickCounter tc;
|
||||
private final Camera camera;
|
||||
private final PoseStack matrices;
|
||||
private final DeltaTracker dt;
|
||||
private final CameraRenderState cameraState;
|
||||
|
||||
public Render3DEvent(MatrixStack matrices, RenderTickCounter tc, Camera camera) {
|
||||
public Render3DEvent(PoseStack matrices, DeltaTracker dt, CameraRenderState cameraState) {
|
||||
this.matrices = matrices;
|
||||
this.tc = tc;
|
||||
this.camera = camera;
|
||||
this.dt = dt;
|
||||
this.cameraState = cameraState;
|
||||
}
|
||||
|
||||
public MatrixStack getMatrices() {
|
||||
public PoseStack getMatrices() {
|
||||
return matrices;
|
||||
}
|
||||
|
||||
public RenderTickCounter getTickCounter() {
|
||||
return tc;
|
||||
public DeltaTracker getDeltaTracker() {
|
||||
return dt;
|
||||
}
|
||||
|
||||
public Camera getCamera() {
|
||||
return camera;
|
||||
public CameraRenderState getCamera() {
|
||||
return cameraState;
|
||||
}
|
||||
|
||||
public float getTickDelta() {
|
||||
return tc.getDynamicDeltaTicks();
|
||||
return dt.getGameTimeDeltaTicks();
|
||||
}
|
||||
}
|
||||
@@ -1,37 +1,37 @@
|
||||
package me.retucio.sputnik.event.render;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.render.HeldItemRendererMixin;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.util.Hand;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import me.retucio.sputnik.mixin.mixins.render.ItemInHandRendererMixin;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
|
||||
|
||||
/**
|
||||
* @see HeldItemRendererMixin#onRenderArm
|
||||
* @see ItemInHandRendererMixin#onRenderArm
|
||||
*/
|
||||
public class RenderArmEvent extends Event {
|
||||
|
||||
private MatrixStack matrices;
|
||||
private Hand hand;
|
||||
private PoseStack matrices;
|
||||
private InteractionHand hand;
|
||||
|
||||
public RenderArmEvent(MatrixStack matrices, Hand hand) {
|
||||
public RenderArmEvent(PoseStack matrices, InteractionHand hand) {
|
||||
this.matrices = matrices;
|
||||
this.hand = hand;
|
||||
}
|
||||
|
||||
public MatrixStack getMatrices() {
|
||||
public PoseStack getMatrices() {
|
||||
return matrices;
|
||||
}
|
||||
|
||||
public void setMatrices(MatrixStack matrices) {
|
||||
public void setMatrices(PoseStack matrices) {
|
||||
this.matrices = matrices;
|
||||
}
|
||||
|
||||
public Hand getHand() {
|
||||
public InteractionHand getHand() {
|
||||
return hand;
|
||||
}
|
||||
|
||||
public void setHand(Hand hand) {
|
||||
public void setHand(InteractionHand hand) {
|
||||
this.hand = hand;
|
||||
}
|
||||
}
|
||||
@@ -2,9 +2,10 @@ package me.retucio.sputnik.event.render;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.hud.BossBarHudMixin;
|
||||
import net.minecraft.client.gui.hud.ClientBossBar;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.gui.components.LerpingBossEvent;
|
||||
import net.minecraft.network.chat.MutableComponent;
|
||||
|
||||
import java.awt.*;
|
||||
import java.util.Iterator;
|
||||
|
||||
|
||||
@@ -17,27 +18,27 @@ public class RenderBossbarEvent {
|
||||
|
||||
public static class BossText extends Event {
|
||||
|
||||
private ClientBossBar bossBar;
|
||||
private Text name;
|
||||
private LerpingBossEvent bossBar;
|
||||
private MutableComponent name;
|
||||
|
||||
public BossText(ClientBossBar bossBar, Text name) {
|
||||
public BossText(LerpingBossEvent bossBar, MutableComponent name) {
|
||||
this.bossBar = bossBar;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public ClientBossBar getBossBar() {
|
||||
public LerpingBossEvent getBossBar() {
|
||||
return bossBar;
|
||||
}
|
||||
|
||||
public void setBossBar(ClientBossBar bossBar) {
|
||||
public void setBossBar(LerpingBossEvent bossBar) {
|
||||
this.bossBar = bossBar;
|
||||
}
|
||||
|
||||
public Text getName() {
|
||||
public MutableComponent getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(Text name) {
|
||||
public void setName(MutableComponent name) {
|
||||
this.name = name;
|
||||
}
|
||||
}
|
||||
@@ -61,17 +62,17 @@ public class RenderBossbarEvent {
|
||||
|
||||
public static class BossIterator extends Event {
|
||||
|
||||
private Iterator<ClientBossBar> iterator;
|
||||
private Iterator<LerpingBossEvent> iterator;
|
||||
|
||||
public BossIterator(Iterator<ClientBossBar> iterator) {
|
||||
public BossIterator(Iterator<LerpingBossEvent> iterator) {
|
||||
this.iterator = iterator;
|
||||
}
|
||||
|
||||
public Iterator<ClientBossBar> getIterator() {
|
||||
public Iterator<LerpingBossEvent> getIterator() {
|
||||
return iterator;
|
||||
}
|
||||
|
||||
public void setIterator(Iterator<ClientBossBar> iterator) {
|
||||
public void setIterator(Iterator<LerpingBossEvent> iterator) {
|
||||
this.iterator = iterator;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,37 +1,38 @@
|
||||
package me.retucio.sputnik.event.render;
|
||||
|
||||
import com.github.retucio.neutrino.Event;
|
||||
import me.retucio.sputnik.mixin.mixins.render.HeldItemRendererMixin;
|
||||
import net.minecraft.client.util.math.MatrixStack;
|
||||
import net.minecraft.util.Hand;
|
||||
import com.mojang.blaze3d.vertex.PoseStack;
|
||||
import me.retucio.sputnik.mixin.mixins.render.ItemInHandRendererMixin;
|
||||
import net.minecraft.world.InteractionHand;
|
||||
|
||||
|
||||
/**
|
||||
* @see HeldItemRendererMixin#onRenderItem
|
||||
* @see ItemInHandRendererMixin#onRenderItem
|
||||
*/
|
||||
|
||||
public class RenderHeldItemEvent extends Event {
|
||||
|
||||
private MatrixStack matrices;
|
||||
private Hand hand;
|
||||
private PoseStack matrices;
|
||||
private InteractionHand hand;
|
||||
|
||||
public RenderHeldItemEvent(MatrixStack matrices, Hand hand) {
|
||||
public RenderHeldItemEvent(PoseStack matrices, InteractionHand hand) {
|
||||
this.matrices = matrices;
|
||||
this.hand = hand;
|
||||
}
|
||||
|
||||
public MatrixStack getMatrices() {
|
||||
public PoseStack getMatrices() {
|
||||
return matrices;
|
||||
}
|
||||
|
||||
public void setMatrices(MatrixStack matrices) {
|
||||
public void setMatrices(PoseStack matrices) {
|
||||
this.matrices = matrices;
|
||||
}
|
||||
|
||||
public Hand getHand() {
|
||||
public InteractionHand getHand() {
|
||||
return hand;
|
||||
}
|
||||
|
||||
public void setHand(Hand hand) {
|
||||
public void setHand(InteractionHand hand) {
|
||||
this.hand = hand;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen;
|
||||
import net.minecraft.world.inventory.Slot;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(AbstractContainerScreen.class)
|
||||
public interface AbstractContainerScreenAccessor {
|
||||
|
||||
@Accessor("hoveredSlot")
|
||||
Slot getHoveredSlot();
|
||||
|
||||
@Accessor("doubleclick")
|
||||
void setDoubleClicking(boolean doubleClicking);
|
||||
}
|
||||
+3
-3
@@ -1,13 +1,13 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.block.entity.SignBlockEntity;
|
||||
import net.minecraft.client.gui.screen.ingame.AbstractSignEditScreen;
|
||||
import net.minecraft.client.gui.screens.inventory.AbstractSignEditScreen;
|
||||
import net.minecraft.world.level.block.entity.SignBlockEntity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(AbstractSignEditScreen.class)
|
||||
public interface AbstractSignEditScreenAccessor {
|
||||
|
||||
@Accessor("blockEntity")
|
||||
@Accessor("sign")
|
||||
SignBlockEntity getBlockEntity();
|
||||
}
|
||||
@@ -1,16 +1,16 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.client.gui.screen.ingame.AnvilScreen;
|
||||
import net.minecraft.client.gui.widget.TextFieldWidget;
|
||||
import net.minecraft.client.gui.components.EditBox;
|
||||
import net.minecraft.client.gui.screens.inventory.AnvilScreen;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(AnvilScreen.class)
|
||||
public interface AnvilScreenAccessor {
|
||||
|
||||
@Accessor("nameField")
|
||||
TextFieldWidget getNameField();
|
||||
@Accessor("name")
|
||||
EditBox getNameField();
|
||||
|
||||
@Accessor("nameField")
|
||||
void setNameField(TextFieldWidget nameField);
|
||||
@Accessor("name")
|
||||
void setNameField(EditBox nameField);
|
||||
}
|
||||
+4
-4
@@ -1,13 +1,13 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.block.AbstractBlock;
|
||||
import net.minecraft.world.level.block.state.BlockBehaviour;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Mutable;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(AbstractBlock.class)
|
||||
public interface AbstractBlockAccessor {
|
||||
@Mixin(BlockBehaviour.class)
|
||||
public interface BlockBehaviourAccessor {
|
||||
|
||||
@Mutable @Accessor("slipperiness")
|
||||
@Mutable @Accessor("friction")
|
||||
void setSlipperiness(float slipperiness);
|
||||
}
|
||||
@@ -0,0 +1,17 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.client.multiplayer.ClientPacketListener;
|
||||
import net.minecraft.network.chat.LastSeenMessagesTracker;
|
||||
import net.minecraft.network.chat.SignedMessageChain;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(ClientPacketListener.class)
|
||||
public interface ClientPacketListenerAccessor {
|
||||
|
||||
@Accessor("lastSeenMessages")
|
||||
LastSeenMessagesTracker getLastSeenMessagesTracker();
|
||||
|
||||
@Accessor("signedMessageEncoder")
|
||||
SignedMessageChain.Encoder getSignedMessageEncoder();
|
||||
}
|
||||
-17
@@ -1,17 +0,0 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||
import net.minecraft.network.message.LastSeenMessagesCollector;
|
||||
import net.minecraft.network.message.MessageChain;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(ClientPlayNetworkHandler.class)
|
||||
public interface ClientPlayNetworkHandlerAccessor {
|
||||
|
||||
@Accessor("lastSeenMessagesCollector")
|
||||
LastSeenMessagesCollector getLastSeenMessagesCollector();
|
||||
|
||||
@Accessor("messagePacker")
|
||||
MessageChain.Packer getMessagePacker();
|
||||
}
|
||||
+5
-5
@@ -1,16 +1,16 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.network.packet.s2c.play.ExplosionS2CPacket;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.network.protocol.game.ClientboundExplodePacket;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Mutable;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
@Mixin(ExplosionS2CPacket.class)
|
||||
public interface ExplosionS2CPacketAccessor {
|
||||
@Mixin(ClientboundExplodePacket.class)
|
||||
public interface ClientboundExplodePacketAccessor {
|
||||
|
||||
@Mutable @Accessor("playerKnockback")
|
||||
void setKnockback(Optional<Vec3d> kb);
|
||||
void setKnockback(Optional<Vec3> kb);
|
||||
}
|
||||
+15
@@ -0,0 +1,15 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.network.protocol.game.ClientboundSetEntityMotionPacket;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Mutable;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
|
||||
@Mixin(ClientboundSetEntityMotionPacket.class)
|
||||
public interface ClientboundSetEntityMotionPacketAccessor {
|
||||
|
||||
@Mutable @Accessor("movement")
|
||||
void setVelocity(Vec3 velocity);
|
||||
}
|
||||
-18
@@ -1,18 +0,0 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
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();
|
||||
}
|
||||
-14
@@ -1,14 +0,0 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.network.packet.s2c.play.EntityVelocityUpdateS2CPacket;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Mutable;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(EntityVelocityUpdateS2CPacket.class)
|
||||
public interface EntityVelocityUpdateS2CPacketAccessor {
|
||||
|
||||
@Mutable @Accessor("velocity")
|
||||
void setVelocity(Vec3d velocity);
|
||||
}
|
||||
@@ -1,15 +0,0 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.entity.projectile.FishingBobberEntity;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(FishingBobberEntity.class)
|
||||
public interface FishingBobberEntityAccessor {
|
||||
|
||||
@Accessor("caughtFish")
|
||||
boolean caughtFish();
|
||||
|
||||
@Accessor("state")
|
||||
FishingBobberEntity.State getState();
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.world.entity.projectile.FishingHook;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
|
||||
@Mixin(FishingHook.class)
|
||||
public interface FishingHookAccessor {
|
||||
|
||||
@Accessor("biting")
|
||||
boolean caughtFish();
|
||||
|
||||
@Accessor("currentState")
|
||||
FishingHook.FishHookState getState();
|
||||
}
|
||||
@@ -1,16 +0,0 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.client.gui.screen.ingame.HandledScreen;
|
||||
import net.minecraft.screen.slot.Slot;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(HandledScreen.class)
|
||||
public interface HandledScreenAccessor {
|
||||
|
||||
@Accessor("focusedSlot")
|
||||
Slot getFocusedSlot();
|
||||
|
||||
@Accessor("doubleClicking")
|
||||
void setDoubleClicking(boolean doubleClicking);
|
||||
}
|
||||
@@ -1,13 +1,13 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.client.option.KeyBinding;
|
||||
import net.minecraft.client.util.InputUtil;
|
||||
import com.mojang.blaze3d.platform.InputConstants;
|
||||
import net.minecraft.client.KeyMapping;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(KeyBinding.class)
|
||||
@Mixin(KeyMapping.class)
|
||||
public interface KeyBindingAccessor {
|
||||
|
||||
@Accessor("boundKey")
|
||||
InputUtil.Key getBoundKey();
|
||||
@Accessor("key")
|
||||
InputConstants.Key getKey();
|
||||
}
|
||||
+4
-3
@@ -1,11 +1,12 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.entity.effect.StatusEffectInstance;
|
||||
import net.minecraft.world.effect.MobEffectInstance;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
@Mixin(StatusEffectInstance.class)
|
||||
public interface StatusEffectInstanceAccessor {
|
||||
|
||||
@Mixin(MobEffectInstance.class)
|
||||
public interface MobEffectInstanceAccessor {
|
||||
|
||||
@Accessor("duration")
|
||||
void setDuration(int duration);
|
||||
@@ -1,7 +1,7 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.client.render.OverlayTexture;
|
||||
import net.minecraft.client.texture.NativeImageBackedTexture;
|
||||
import net.minecraft.client.renderer.texture.DynamicTexture;
|
||||
import net.minecraft.client.renderer.texture.OverlayTexture;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Mutable;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
@@ -10,5 +10,5 @@ import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
public interface OverlayTextureAccessor {
|
||||
|
||||
@Mutable @Accessor("texture")
|
||||
void setTexture(NativeImageBackedTexture texture);
|
||||
void setTexture(DynamicTexture texture);
|
||||
}
|
||||
@@ -0,0 +1,19 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.client.gui.screens.Screen;
|
||||
import net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Mixin(ClientCommonPacketListenerImpl.PackConfirmScreen.class)
|
||||
public interface PackConfirmScreenAccessor {
|
||||
|
||||
@Accessor("parentScreen")
|
||||
Screen getParentScreen();
|
||||
|
||||
@Accessor("requests")
|
||||
List<? extends PendingRequestAccessor> getRequests();
|
||||
}
|
||||
+4
-3
@@ -1,13 +1,14 @@
|
||||
package me.retucio.sputnik.mixin.accessors;
|
||||
|
||||
import net.minecraft.client.network.ClientCommonNetworkHandler;
|
||||
import net.minecraft.client.multiplayer.ClientCommonPacketListenerImpl;
|
||||
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 {
|
||||
|
||||
@Mixin(ClientCommonPacketListenerImpl.PackConfirmScreen.PendingRequest.class)
|
||||
public interface PendingRequestAccessor {
|
||||
|
||||
@Invoker
|
||||
UUID callId();
|
||||
+10
-10
@@ -4,25 +4,25 @@ import me.retucio.sputnik.Sputnik;
|
||||
import me.retucio.sputnik.event.interact.BoatMoveEvent;
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.movement.BoatFly;
|
||||
import net.minecraft.entity.MovementType;
|
||||
import net.minecraft.entity.vehicle.AbstractBoatEntity;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.entity.MoverType;
|
||||
import net.minecraft.world.entity.vehicle.boat.AbstractBoat;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
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.Redirect;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
@Mixin(AbstractBoatEntity.class)
|
||||
public abstract class AbstractBoatEntityMixin {
|
||||
@Mixin(AbstractBoat.class)
|
||||
public abstract class AbstractBoatMixin {
|
||||
|
||||
@Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/vehicle/AbstractBoatEntity;move(Lnet/minecraft/entity/MovementType;Lnet/minecraft/util/math/Vec3d;)V"))
|
||||
private void onMove(AbstractBoatEntity instance, MovementType movementType, Vec3d vec3d) {
|
||||
BoatMoveEvent event = Sputnik.EVENT_BUS.post(new BoatMoveEvent(instance, vec3d));
|
||||
if(!event.isCancelled()) instance.move(movementType, event.getPos());
|
||||
@Redirect(method = "tick", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/vehicle/boat/AbstractBoat;move(Lnet/minecraft/world/entity/MoverType;Lnet/minecraft/world/phys/Vec3;)V"))
|
||||
private void onMove(AbstractBoat instance, MoverType moverType, Vec3 vec3) {
|
||||
BoatMoveEvent event = Sputnik.EVENT_BUS.post(new BoatMoveEvent(instance, vec3));
|
||||
if (!event.isCancelled()) instance.move(moverType, event.getPos());
|
||||
}
|
||||
|
||||
@Inject(method = "updatePaddles", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "controlBoat", at = @At("HEAD"), cancellable = true)
|
||||
private void onPaddle(CallbackInfo ci) {
|
||||
if (ModuleManager.INSTANCE.getModuleByClass(BoatFly.class).isEnabled()) {
|
||||
ci.cancel();
|
||||
@@ -1,8 +1,8 @@
|
||||
package me.retucio.sputnik.mixin.mixins.entity;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
|
||||
import me.retucio.sputnik.Sputnik;
|
||||
import me.retucio.sputnik.event.render.ChangeRotationEvent;
|
||||
import me.retucio.sputnik.module.Module;
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.camera.Freecam;
|
||||
import me.retucio.sputnik.module.modules.camera.Freelook;
|
||||
@@ -11,35 +11,43 @@ import me.retucio.sputnik.module.modules.misc.AntiInvis;
|
||||
import me.retucio.sputnik.module.modules.movement.BoatFly;
|
||||
import me.retucio.sputnik.module.modules.movement.Velocity;
|
||||
import me.retucio.sputnik.module.modules.render.Nametags;
|
||||
import net.minecraft.entity.*;
|
||||
import net.minecraft.entity.passive.TameableEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.entity.projectile.PersistentProjectileEntity;
|
||||
import net.minecraft.entity.vehicle.AbstractBoatEntity;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Formatting;
|
||||
import net.minecraft.world.World;
|
||||
import me.retucio.sputnik.util.interfaces.IVec3;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.EntityType;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.entity.TamableAnimal;
|
||||
import net.minecraft.world.entity.item.ItemEntity;
|
||||
import net.minecraft.world.entity.item.PrimedTnt;
|
||||
import net.minecraft.world.entity.player.Player;
|
||||
import net.minecraft.world.entity.projectile.arrow.AbstractArrow;
|
||||
import net.minecraft.world.entity.vehicle.boat.AbstractBoat;
|
||||
import net.minecraft.world.phys.HitResult;
|
||||
import org.joml.Vector3d;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.gen.Accessor;
|
||||
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.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import static me.retucio.sputnik.Sputnik.EVENT_BUS;
|
||||
import static me.retucio.sputnik.Sputnik.mc;
|
||||
|
||||
@Mixin(Entity.class)
|
||||
public abstract class EntityMixin {
|
||||
|
||||
@Shadow public abstract Text getName();
|
||||
@Unique boolean freecamDone;
|
||||
|
||||
@Shadow public abstract Component getName();
|
||||
@Shadow public abstract EntityType<?> getType();
|
||||
|
||||
@Shadow private float yaw;
|
||||
@Shadow private float pitch;
|
||||
@Shadow private float yRot;
|
||||
@Shadow private float xRot;
|
||||
|
||||
@Shadow
|
||||
public abstract HitResult pick(double range, float a, boolean withLiquids);
|
||||
|
||||
@Unique
|
||||
Freecam freecam;
|
||||
@@ -50,30 +58,74 @@ public abstract class EntityMixin {
|
||||
@Unique
|
||||
Rotations rotations;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@Inject(method = "<init>", at = @At("TAIL"))
|
||||
private void getModules(EntityType type, World world, CallbackInfo ci) {
|
||||
private void getModules(CallbackInfo ci) {
|
||||
freecam = ModuleManager.INSTANCE.getModuleByClass(Freecam.class);
|
||||
freelook = ModuleManager.INSTANCE.getModuleByClass(Freelook.class);
|
||||
nametags = ModuleManager.INSTANCE.getModuleByClass(Nametags.class);
|
||||
rotations = ModuleManager.INSTANCE.getModuleByClass(Rotations.class);
|
||||
}
|
||||
|
||||
@Inject(method = "pick", at = @At("HEAD"), cancellable = true)
|
||||
private void updateTargetedEntityInvoke(double range, float a, boolean withLiquids, CallbackInfoReturnable<HitResult> cir) {
|
||||
Minecraft mc = Minecraft.getInstance();
|
||||
if ((freecam.isEnabled()) && mc.getCameraEntity() != null && !freecamDone) {
|
||||
cir.cancel();
|
||||
|
||||
Entity cameraEntity = mc.getCameraEntity();
|
||||
Vector3d pos = freecam.getPos();
|
||||
Vector3d prevPos = freecam.getPrevPos();
|
||||
|
||||
double x = cameraEntity.getX();
|
||||
double y = cameraEntity.getY();
|
||||
double z = cameraEntity.getZ();
|
||||
double lastX = cameraEntity.xo;
|
||||
double lastY = cameraEntity.yo;
|
||||
double lastZ = cameraEntity.zo;
|
||||
float yaw = cameraEntity.getYRot();
|
||||
float pitch = cameraEntity.getXRot();
|
||||
float lastYaw = cameraEntity.yRotO;
|
||||
float lastPitch = cameraEntity.xRotO;
|
||||
|
||||
((IVec3) cameraEntity.position()).sputnik$set(pos.x, pos.y - cameraEntity.getEyeHeight(cameraEntity.getPose()), pos.z);
|
||||
cameraEntity.xo = prevPos.x;
|
||||
cameraEntity.yo = prevPos.y - cameraEntity.getEyeHeight(cameraEntity.getPose());
|
||||
cameraEntity.zo = prevPos.z;
|
||||
cameraEntity.setYRot(freecam.getYaw());
|
||||
cameraEntity.setXRot(freecam.getPitch());
|
||||
cameraEntity.yRotO = freecam.getPrevYaw();
|
||||
cameraEntity.xRotO = freecam.getPrevPitch();
|
||||
|
||||
freecamDone = true;
|
||||
pick(range, a, withLiquids);
|
||||
freecamDone = false;
|
||||
|
||||
((IVec3) cameraEntity.position()).sputnik$set(x, y, z);
|
||||
cameraEntity.xo = lastX;
|
||||
cameraEntity.yo = lastY;
|
||||
cameraEntity.zo = lastZ;
|
||||
cameraEntity.setYRot(yaw);
|
||||
cameraEntity.setXRot(pitch);
|
||||
cameraEntity.yRotO = lastYaw;
|
||||
cameraEntity.xRotO = lastPitch;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// cámara libre & perspectiva libre
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
@Inject(method = "changeLookDirection", at = @At("HEAD"), cancellable = true)
|
||||
private void onChangeLookDirection(double cursorDeltaX, double cursorDeltaY, CallbackInfo ci) {
|
||||
if ((Object) this != mc.player) return;
|
||||
@Inject(method = "turn", at = @At("HEAD"), cancellable = true)
|
||||
private void onChangeLookDirection(double xo, double yo, CallbackInfo ci) {
|
||||
if ((Object) this != Sputnik.mc.player) return;
|
||||
|
||||
if (freecam.isEnabled()) {
|
||||
freecam.changeLookDirection(cursorDeltaX * 0.15, cursorDeltaY * 0.15);
|
||||
freecam.changeLookDirection(xo * 0.15, yo * 0.15);
|
||||
ci.cancel();
|
||||
|
||||
} else if (freelook.isEnabled() && freelook.mode.is(Freelook.CameraMode.CAMERA)) {
|
||||
freelook.setYaw(freelook.getYaw() + (float) (cursorDeltaX * freelook.mouseSens.getFloatValue()));
|
||||
freelook.setPitch(freelook.getPitch() + (float) (cursorDeltaY * freelook.mouseSens.getFloatValue()));
|
||||
freelook.setYaw(freelook.getYaw() + (float) (xo * freelook.mouseSens.getFloatValue()));
|
||||
freelook.setPitch(freelook.getPitch() + (float) (yo * freelook.mouseSens.getFloatValue()));
|
||||
|
||||
if (Math.abs(freelook.getPitch()) > 90) freelook.setPitch(freelook.getPitch() > 0 ? 90 : -90);
|
||||
ci.cancel();
|
||||
@@ -87,39 +139,39 @@ public abstract class EntityMixin {
|
||||
@ModifyReturnValue(method = "isCustomNameVisible", at = @At("RETURN"))
|
||||
private boolean renderEntityNametags(boolean original) {
|
||||
if (!nametags.isEnabled()) return original;
|
||||
if ((Object) this instanceof PersistentProjectileEntity p && p.isOnGround()) return false;
|
||||
if ((Object) this instanceof ItemEntity i && !nametags.items.isEnabled(i.getStack().getItem())) return false;
|
||||
if ((Object) this instanceof AbstractArrow p && p.onGround()) return false;
|
||||
if ((Object) this instanceof ItemEntity i && !nametags.items.isEnabled(i.getItem().getItem())) return false;
|
||||
return nametags.entities.isEnabled((this.getType()));
|
||||
}
|
||||
|
||||
@ModifyReturnValue(method = "getName", at = @At("RETURN"))
|
||||
private Text showProjectileDamage(Text original) {
|
||||
private Component showProjectileDamage(Component original) {
|
||||
if (!nametags.isEnabled() || !nametags.showProjectileDamage.getValue()) return original;
|
||||
|
||||
if ((Object) this instanceof PersistentProjectileEntity arrow) { // aunque lo llame "arrow", también cubre flechas espectrales y tridentes
|
||||
if ((Object) this instanceof AbstractArrow arrow) { // aunque se llame "arrow", también cubre flechas espectrales y tridentes
|
||||
String damage = nametags.getArrowDamage(arrow);
|
||||
if (!damage.equals("0")) return original.copy().append(Text.literal(" (" + damage + ")").formatted(Formatting.RED));
|
||||
if (!damage.equals("0")) return original.copy().append(Component.literal(" (" + damage + ")").withStyle(ChatFormatting.RED));
|
||||
}
|
||||
|
||||
return original;
|
||||
}
|
||||
|
||||
@ModifyReturnValue(method = "getName", at = @At("RETURN"))
|
||||
private Text showTntPrimeTime(Text original) {
|
||||
private Component showTntPrimeTime(Component original) {
|
||||
if (!nametags.isEnabled() || !nametags.tntPrime.getValue()) return original;
|
||||
if ((Object) this instanceof TntEntity tnt) {
|
||||
return Text.of(nametags.getTntPrimeTime(tnt));
|
||||
if ((Object) this instanceof PrimedTnt tnt) {
|
||||
return Component.nullToEmpty(nametags.getTntPrimeTime(tnt));
|
||||
}
|
||||
return original;
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
@ModifyReturnValue(method = "getCustomName", at = @At("RETURN"))
|
||||
private Text displayEntityOwner(Text original) {
|
||||
private Component displayEntityOwner(Component original) {
|
||||
if (!nametags.isEnabled() || !nametags.petOwner.getValue()) return original;
|
||||
if ((Object) this instanceof TameableEntity entity && entity.getOwnerReference() != null) {
|
||||
if ((Object) this instanceof TamableAnimal entity && entity.getOwnerReference() != null) {
|
||||
if (original != null) return original.copy().append(" (de " + nametags.getOwnerName(entity.getOwnerReference()) + ")");
|
||||
else return Text.of(nametags.getOwnerName(entity.getOwnerReference()));
|
||||
else return Component.nullToEmpty(nametags.getOwnerName(entity.getOwnerReference()));
|
||||
}
|
||||
return original;
|
||||
}
|
||||
@@ -127,7 +179,7 @@ public abstract class EntityMixin {
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
@ModifyReturnValue(method = "getName", at = @At("RETURN"))
|
||||
private Text showBabies(Text original) {
|
||||
private Component showBabies(Component original) {
|
||||
if (!nametags.isEnabled() || !nametags.distinguishBabies.getValue()) return original;
|
||||
if ((Object) this instanceof LivingEntity entity && entity.isBaby()) return original.copy().append(" (baby)");
|
||||
return original;
|
||||
@@ -136,24 +188,24 @@ public abstract class EntityMixin {
|
||||
|
||||
// rotaciones
|
||||
|
||||
@Inject(method = "setRotation", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "setRot", at = @At("HEAD"), cancellable = true)
|
||||
private void onRotation(float yaw, float pitch, CallbackInfo ci) {
|
||||
if ((Object) this != mc.player) return;
|
||||
ChangeRotationEvent event = EVENT_BUS.post(new ChangeRotationEvent(yaw, pitch));
|
||||
if ((Object) this != Sputnik.mc.player) return;
|
||||
ChangeRotationEvent event = Sputnik.EVENT_BUS.post(new ChangeRotationEvent(yaw, pitch));
|
||||
if (event.isCancelled()) ci.cancel();
|
||||
}
|
||||
|
||||
@Inject(method = "setYaw", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "setYRot", at = @At("HEAD"), cancellable = true)
|
||||
private void onChangeYaw(float yaw, CallbackInfo ci) {
|
||||
if ((Object) this != mc.player) return;
|
||||
ChangeRotationEvent event = EVENT_BUS.post(new ChangeRotationEvent(yaw, this.pitch));
|
||||
if ((Object) this != Sputnik.mc.player) return;
|
||||
ChangeRotationEvent event = Sputnik.EVENT_BUS.post(new ChangeRotationEvent(yaw, this.xRot));
|
||||
if (event.isCancelled()) ci.cancel();
|
||||
}
|
||||
|
||||
@Inject(method = "setPitch", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "setXRot", at = @At("HEAD"), cancellable = true)
|
||||
private void onChangePitch(float pitch, CallbackInfo ci) {
|
||||
if ((Object) this != mc.player) return;
|
||||
ChangeRotationEvent event = EVENT_BUS.post(new ChangeRotationEvent(this.yaw, pitch));
|
||||
if ((Object) this != Sputnik.mc.player) return;
|
||||
ChangeRotationEvent event = Sputnik.EVENT_BUS.post(new ChangeRotationEvent(this.yRot, pitch));
|
||||
if (event.isCancelled()) ci.cancel();
|
||||
}
|
||||
|
||||
@@ -161,22 +213,23 @@ public abstract class EntityMixin {
|
||||
// otros
|
||||
|
||||
@Inject(method = "isInvisibleTo", at = @At("RETURN"), cancellable = true)
|
||||
private void renderInvisPlayers(PlayerEntity player, CallbackInfoReturnable<Boolean> cir) {
|
||||
private void renderInvisPlayers(Player player, CallbackInfoReturnable<Boolean> cir) {
|
||||
if (ModuleManager.INSTANCE.getModuleByClass(AntiInvis.class).isEnabled()) cir.setReturnValue(false);
|
||||
}
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
@Inject(method = "getStepHeight", at = @At("RETURN"), cancellable = true)
|
||||
@Inject(method = "maxUpStep", at = @At("RETURN"), cancellable = true)
|
||||
private void modifyBoatStepHeight(CallbackInfoReturnable<Float> cir) {
|
||||
BoatFly boatFly = ModuleManager.INSTANCE.getModuleByClass(BoatFly.class);
|
||||
if (((Object) this) instanceof AbstractBoatEntity && boatFly.isEnabled()) {
|
||||
if (((Object) this) instanceof AbstractBoat && boatFly.isEnabled()) {
|
||||
cir.setReturnValue(boatFly.stepHeight.getFloatValue());
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "pushAwayFrom", at = @At("HEAD"), cancellable = true)
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
@Inject(method = "push(Lnet/minecraft/world/entity/Entity;)V", at = @At("HEAD"), cancellable = true)
|
||||
private void onPushed(Entity entity, CallbackInfo ci) {
|
||||
Velocity velocity = ModuleManager.INSTANCE.getModuleByClass(Velocity.class);
|
||||
if (velocity.isEnabled() && !velocity.push.getValue() && (Object) this == mc.player) ci.cancel();
|
||||
if (velocity.isEnabled() && !velocity.push.getValue() && (Object) this == Sputnik.mc.player) ci.cancel();
|
||||
}
|
||||
}
|
||||
@@ -4,15 +4,15 @@ import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.render.EntityESP;
|
||||
import net.minecraft.client.render.entity.EntityRenderer;
|
||||
import net.minecraft.client.render.entity.EntityRendererFactory;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.client.renderer.entity.EntityRenderer;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
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.callback.CallbackInfo;
|
||||
|
||||
|
||||
@Mixin(EntityRenderer.class)
|
||||
public abstract class EntityRendererMixin {
|
||||
|
||||
@@ -20,16 +20,16 @@ public abstract class EntityRendererMixin {
|
||||
private EntityESP esp;
|
||||
|
||||
@Inject(method = "<init>", at = @At("TAIL"))
|
||||
private void getModules(EntityRendererFactory.Context context, CallbackInfo ci) {
|
||||
private void getModules(CallbackInfo ci) {
|
||||
esp = ModuleManager.INSTANCE.getModuleByClass(EntityESP.class);
|
||||
}
|
||||
|
||||
@ModifyExpressionValue(method = "updateRenderState", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/MinecraftClient;hasOutline(Lnet/minecraft/entity/Entity;)Z"))
|
||||
@ModifyExpressionValue(method = "extractRenderState", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/Minecraft;shouldEntityAppearGlowing(Lnet/minecraft/world/entity/Entity;)Z"))
|
||||
private boolean renderGlowESP(boolean original, @Local(argsOnly = true) Entity entity) {
|
||||
return (esp.isEnabled() && esp.mode.is(EntityESP.ESPMode.GLOW) && esp.entities.isEnabled(entity.getType())) || original;
|
||||
}
|
||||
|
||||
@ModifyExpressionValue(method = "updateRenderState", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/Entity;getTeamColorValue()I"))
|
||||
@ModifyExpressionValue(method = "extractRenderState", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/Entity;getTeamColor()I"))
|
||||
private int setGlowESPColor(int original, @Local(argsOnly = true) Entity entity) {
|
||||
if (esp.isEnabled() && esp.mode.is(EntityESP.ESPMode.GLOW) && esp.entities.isEnabled(entity.getType())) return esp.glowColor.getRGB();
|
||||
return original;
|
||||
|
||||
@@ -3,11 +3,11 @@ package me.retucio.sputnik.mixin.mixins.entity;
|
||||
import com.llamalad7.mixinextras.injector.ModifyReturnValue;
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.render.Nametags;
|
||||
import net.minecraft.entity.ItemEntity;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.text.MutableText;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Formatting;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.chat.MutableComponent;
|
||||
import net.minecraft.world.entity.item.ItemEntity;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
@@ -16,17 +16,17 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||
public abstract class ItemEntityMixin {
|
||||
|
||||
@Shadow
|
||||
public abstract ItemStack getStack();
|
||||
public abstract ItemStack getItem();
|
||||
|
||||
@ModifyReturnValue(method = "getName", at = @At("RETURN"))
|
||||
private Text showItemCount(Text original) {
|
||||
private Component showItemCount(Component original) {
|
||||
Nametags nametags = ModuleManager.INSTANCE.getModuleByClass(Nametags.class);
|
||||
if (!nametags.isEnabled()) return original;
|
||||
|
||||
int count = this.getStack().getCount();
|
||||
MutableText name = this.getStack().getCustomName() != null ? this.getStack().getCustomName().copyContentOnly() : original.copyContentOnly();
|
||||
int count = this.getItem().getCount();
|
||||
MutableComponent name = this.getItem().getCustomName() != null ? this.getItem().getCustomName().plainCopy() : original.plainCopy();
|
||||
|
||||
if (!name.equals(original)) name = name.formatted(Formatting.ITALIC);
|
||||
if (!name.equals(original)) name = name.withStyle(ChatFormatting.ITALIC);
|
||||
|
||||
if (nametags.countItems.getValue()) {
|
||||
if (count > 1) return name.copy().append(" x" + count);
|
||||
|
||||
@@ -5,12 +5,12 @@ import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.movement.ElytraBounce;
|
||||
import me.retucio.sputnik.module.modules.movement.Step;
|
||||
import me.retucio.sputnik.module.modules.movement.Velocity;
|
||||
import net.minecraft.client.network.ClientPlayerEntity;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.sound.SoundCategory;
|
||||
import net.minecraft.sound.SoundEvents;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.client.player.LocalPlayer;
|
||||
import net.minecraft.sounds.SoundEvents;
|
||||
import net.minecraft.sounds.SoundSource;
|
||||
import net.minecraft.world.entity.Entity;
|
||||
import net.minecraft.world.entity.LivingEntity;
|
||||
import net.minecraft.world.phys.Vec3;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
@@ -21,6 +21,7 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
import static me.retucio.sputnik.Sputnik.mc;
|
||||
|
||||
|
||||
@Mixin(LivingEntity.class)
|
||||
public abstract class LivingEntityMixin {
|
||||
|
||||
@@ -28,50 +29,49 @@ public abstract class LivingEntityMixin {
|
||||
@Unique private boolean awaitingElytra = false;
|
||||
|
||||
@Shadow
|
||||
public abstract boolean isGliding();
|
||||
public abstract boolean isFallFlying();
|
||||
|
||||
@SuppressWarnings("ConstantConditions")
|
||||
@Inject(method = "tickMovement", at = @At("TAIL"))
|
||||
@Inject(method = "aiStep", at = @At("TAIL"))
|
||||
private void recastIfLanded(CallbackInfo ci) {
|
||||
ElytraBounce bounce = ModuleManager.INSTANCE.getModuleByClass(ElytraBounce.class);
|
||||
ElytraBounce ebounce = ModuleManager.INSTANCE.getModuleByClass(ElytraBounce.class);
|
||||
|
||||
if (!((Object) this instanceof ClientPlayerEntity)
|
||||
if (!((Object) this instanceof LocalPlayer)
|
||||
|| mc.player == null
|
||||
|| bounce == null)
|
||||
|| ebounce == null)
|
||||
return;
|
||||
|
||||
boolean elytra = isGliding();
|
||||
boolean elytra = isFallFlying();
|
||||
|
||||
if (awaitingElytra) {
|
||||
if (elytra) awaitingElytra = false;
|
||||
|
||||
} else if (!elytra && prevElytra) {
|
||||
mc.getSoundManager().stopSounds(SoundEvents.ITEM_ELYTRA_FLYING.id(), SoundCategory.PLAYERS);
|
||||
bounce.bounce();
|
||||
awaitingElytra = bounce.canUseElytra();
|
||||
mc.getSoundManager().stop(SoundEvents.ELYTRA_FLYING.location(), SoundSource.PLAYERS); // armor equip elytra??
|
||||
ebounce.bounce();
|
||||
awaitingElytra = ebounce.canUseElytra();
|
||||
}
|
||||
|
||||
prevElytra = elytra;
|
||||
}
|
||||
|
||||
|
||||
@Inject(method = "getStepHeight", at = @At("RETURN"), cancellable = true)
|
||||
@Inject(method = "maxUpStep", at = @At("RETURN"), cancellable = true)
|
||||
private void step(CallbackInfoReturnable<Float> cir) {
|
||||
Step step = ModuleManager.INSTANCE.getModuleByClass(Step.class);
|
||||
if (step.isEnabled()) cir.setReturnValue(step.height.getFloatValue());
|
||||
}
|
||||
|
||||
@Inject(method = "takeKnockback", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/LivingEntity;setVelocity(DDD)V"), cancellable = true)
|
||||
private void onTakeKb(double strength, double x, double z, CallbackInfo ci, @Local(ordinal = 0) Vec3d vec3d, @Local(ordinal = 1) Vec3d vec3d2) {
|
||||
@Inject(method = "knockback", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/LivingEntity;setDeltaMovement(DDD)V"), cancellable = true)
|
||||
private void onTakeKb(double strength, double x, double z, CallbackInfo ci, @Local(name = "deltaMovement") Vec3 dm, @Local(name = "deltaVector") Vec3 dv) {
|
||||
Velocity velocity = ModuleManager.INSTANCE.getModuleByClass(Velocity.class);
|
||||
if (!velocity.isEnabled() || velocity.hits.getValue()) return;
|
||||
boolean onGround = ((LivingEntity) (Object) this).isOnGround();
|
||||
boolean onGround = ((LivingEntity) (Object) this).onGround();
|
||||
|
||||
double kbX = (velocity.xPercentage.getValue() / 100) * (vec3d.x / 2 - vec3d2.x);
|
||||
double kbY = (velocity.yPercentage.getValue() / 100) * ((onGround ? Math.min(0.4, vec3d.y / 2 + strength) : vec3d.y));
|
||||
double kbZ = (velocity.zPercentage.getValue() / 100) * (vec3d.z / 2 - vec3d2.z);
|
||||
double kbX = (velocity.xPercentage.getValue() / 100) * (dm.x / 2 - dv.x);
|
||||
double kbY = (velocity.yPercentage.getValue() / 100) * ((onGround ? Math.min(0.4, dm.y / 2 + strength) : dm.y));
|
||||
double kbZ = (velocity.zPercentage.getValue() / 100) * (dm.z / 2 - dv.z);
|
||||
|
||||
ci.cancel();
|
||||
((Entity) (Object) this).addVelocity(kbX, kbY, kbZ);
|
||||
((Entity) (Object) this).addDeltaMovement(new Vec3(kbX, kbY, kbZ));
|
||||
}
|
||||
}
|
||||
@@ -2,10 +2,12 @@ package me.retucio.sputnik.mixin.mixins.hud;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import me.retucio.sputnik.Sputnik;
|
||||
import me.retucio.sputnik.event.render.RenderBossbarEvent;
|
||||
import net.minecraft.client.gui.hud.BossBarHud;
|
||||
import net.minecraft.client.gui.hud.ClientBossBar;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.gui.components.BossHealthOverlay;
|
||||
import net.minecraft.client.gui.components.LerpingBossEvent;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.chat.MutableComponent;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Constant;
|
||||
@@ -13,28 +15,26 @@ import org.spongepowered.asm.mixin.injection.ModifyConstant;
|
||||
|
||||
import java.util.Iterator;
|
||||
|
||||
import static me.retucio.sputnik.Sputnik.EVENT_BUS;
|
||||
|
||||
|
||||
@Mixin(value = BossBarHud.class)
|
||||
@Mixin(value = BossHealthOverlay.class)
|
||||
public abstract class BossBarHudMixin {
|
||||
|
||||
@ModifyExpressionValue(method = "render", at = @At(value = "INVOKE", target = "Ljava/util/Collection;iterator()Ljava/util/Iterator;"))
|
||||
public Iterator<ClientBossBar> modifyBossBarIterator(Iterator<ClientBossBar> original) {
|
||||
RenderBossbarEvent.BossIterator event = EVENT_BUS.post(new RenderBossbarEvent.BossIterator(original));
|
||||
@ModifyExpressionValue(method = "extractRenderState", at = @At(value = "INVOKE", target = "Ljava/util/Collection;iterator()Ljava/util/Iterator;"))
|
||||
private Iterator<LerpingBossEvent> modifyBossBarIterator(Iterator<LerpingBossEvent> original) {
|
||||
RenderBossbarEvent.BossIterator event = Sputnik.EVENT_BUS.post(new RenderBossbarEvent.BossIterator(original));
|
||||
return event.getIterator();
|
||||
}
|
||||
|
||||
@ModifyExpressionValue(method = "render", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/ClientBossBar;getName()Lnet/minecraft/text/Text;"))
|
||||
public Text modifyBossBarName(Text original, @Local ClientBossBar clientBossBar) {
|
||||
RenderBossbarEvent.BossText event = EVENT_BUS.post(new RenderBossbarEvent.BossText(clientBossBar, original));
|
||||
@ModifyExpressionValue(method = "extractRenderState", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/LerpingBossEvent;getName()Lnet/minecraft/network/chat/Component;"))
|
||||
private Component modifyBossBarName(Component original, @Local(name = "event") LerpingBossEvent clientBossBar) {
|
||||
RenderBossbarEvent.BossText event = Sputnik.EVENT_BUS.post(new RenderBossbarEvent.BossText(clientBossBar, (MutableComponent) original));
|
||||
return event.getName();
|
||||
}
|
||||
|
||||
// require = 0 para meteor
|
||||
@ModifyConstant(method = "render", constant = @Constant(intValue = 9, ordinal = 1), require = 0)
|
||||
public int modifySpacingConstant(int constant) {
|
||||
RenderBossbarEvent.BossSpacing event = EVENT_BUS.post(new RenderBossbarEvent.BossSpacing(constant));
|
||||
// require = 0 para compat. con meteor
|
||||
@ModifyConstant(method = "extractRenderState", constant = @Constant(intValue = 9, ordinal = 1), require = 0)
|
||||
private int modifySpacingConstant(int constant) {
|
||||
RenderBossbarEvent.BossSpacing event = Sputnik.EVENT_BUS.post(new RenderBossbarEvent.BossSpacing(constant));
|
||||
return event.getSpacing();
|
||||
}
|
||||
}
|
||||
+4
-4
@@ -2,17 +2,17 @@ package me.retucio.sputnik.mixin.mixins.hud;
|
||||
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.misc.ChatPlus;
|
||||
import net.minecraft.client.gui.hud.ChatHudLine;
|
||||
import net.minecraft.client.multiplayer.chat.GuiMessage;
|
||||
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(targets = "net.minecraft.client.gui.hud.ChatHud$1", remap = false)
|
||||
public abstract class ChatHudLineConsumerMixin {
|
||||
@Mixin(targets = "net.minecraft.client.gui.components.ChatComponent$1", remap = false)
|
||||
public abstract class ChatComponentLineConsumerMixin {
|
||||
|
||||
@Inject(method = "accept", at = @At("HEAD"))
|
||||
private void setLine(ChatHudLine.Visible line, int y, float opacity, CallbackInfo ci) {
|
||||
private void setLine(GuiMessage.Line line, int lineIndex, float alpha, CallbackInfo ci) {
|
||||
ModuleManager.INSTANCE.getModuleByClass(ChatPlus.class).line = line;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,187 @@
|
||||
package me.retucio.sputnik.mixin.mixins.hud;
|
||||
|
||||
import me.retucio.sputnik.Sputnik;
|
||||
import me.retucio.sputnik.event.network.ReceiveMessageEvent;
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.misc.ChatPlus;
|
||||
|
||||
import me.retucio.sputnik.util.interfaces.IChatComponent;
|
||||
import me.retucio.sputnik.util.interfaces.IGuiMessage;
|
||||
import me.retucio.sputnik.util.interfaces.IGuiMessageLine;
|
||||
import me.retucio.sputnik.util.interfaces.IChatListener;
|
||||
|
||||
import net.minecraft.client.gui.components.ChatComponent;
|
||||
import net.minecraft.client.multiplayer.chat.GuiMessage;
|
||||
import net.minecraft.client.multiplayer.chat.GuiMessageSource;
|
||||
import net.minecraft.client.multiplayer.chat.GuiMessageTag;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.network.chat.MessageSignature;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import net.minecraft.util.FormattedCharSequence;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
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.CallbackInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@Mixin(ChatComponent.class)
|
||||
public abstract class ChatComponentMixin implements IChatComponent {
|
||||
|
||||
@Unique
|
||||
private boolean skipOnAddMessage;
|
||||
|
||||
@Unique
|
||||
private int nextId;
|
||||
|
||||
@Unique
|
||||
ChatPlus chatPlus;
|
||||
|
||||
@Shadow @Final
|
||||
private List<GuiMessage> allMessages;
|
||||
|
||||
@Shadow @Final
|
||||
private List<GuiMessage.Line> trimmedMessages;
|
||||
|
||||
@Shadow
|
||||
public abstract void addClientSystemMessage(Component message);
|
||||
|
||||
@Shadow
|
||||
protected abstract void addMessage(final Component contents, final @Nullable MessageSignature signature, final GuiMessageSource source, final @Nullable GuiMessageTag tag);
|
||||
|
||||
@Inject(method = "<init>", at = @At("TAIL"))
|
||||
private void getModules(CallbackInfo ci) {
|
||||
chatPlus = ModuleManager.INSTANCE.getModuleByClass(ChatPlus.class);
|
||||
}
|
||||
|
||||
|
||||
// métodos relacionados con las interfaces IChatHud, IChatHudLine, IChadHudLineVisible y IMessageHandler
|
||||
|
||||
@Override
|
||||
public void sputnik$add(Component message, int id) {
|
||||
nextId = id;
|
||||
addClientSystemMessage(message);
|
||||
nextId = 0;
|
||||
}
|
||||
|
||||
@Inject(method = "addMessageToDisplayQueue", at = @At(value = "INVOKE", target = "Ljava/util/List;addFirst(Ljava/lang/Object;)V", shift = At.Shift.AFTER))
|
||||
private void onAddMessageAfterNewChatHudLineVisible(GuiMessage message, CallbackInfo ci) {
|
||||
((IGuiMessage) (Object) trimmedMessages.getFirst()).sputnik$setId(nextId);
|
||||
}
|
||||
|
||||
@Inject(method = "addMessageToQueue", at = @At(value = "INVOKE", target = "Ljava/util/List;addFirst(Ljava/lang/Object;)V", shift = At.Shift.AFTER))
|
||||
private void onAddMessageAfterNewChatHudLine(GuiMessage message, CallbackInfo ci) {
|
||||
((IGuiMessage) (Object) allMessages.getFirst()).sputnik$setId(nextId);
|
||||
}
|
||||
|
||||
@ModifyExpressionValue(method = "addMessageToDisplayQueue", at = @At(value = "NEW", target = "(Lnet/minecraft/client/multiplayer/chat/GuiMessage;Lnet/minecraft/util/FormattedCharSequence;Z)Lnet/minecraft/client/multiplayer/chat/GuiMessage$Line;"))
|
||||
private GuiMessage.Line onAddMessage_modifyChatHudLineVisible(GuiMessage.Line line, @Local(name = "i") int i) {
|
||||
IChatListener iListener = (IChatListener) Sputnik.mc.getChatListener();
|
||||
IGuiMessageLine iLine = (IGuiMessageLine) (Object) line;
|
||||
|
||||
iLine.sputnik$setSender(iListener.sputnik$getSender());
|
||||
iLine.sputnik$setStartOfEntry(i == 0);
|
||||
|
||||
return line;
|
||||
}
|
||||
|
||||
@ModifyExpressionValue(method = "addMessage", at = @At(value = "NEW", target = "(ILnet/minecraft/network/chat/Component;Lnet/minecraft/network/chat/MessageSignature;Lnet/minecraft/client/multiplayer/chat/GuiMessageSource;Lnet/minecraft/client/multiplayer/chat/GuiMessageTag;)Lnet/minecraft/client/multiplayer/chat/GuiMessage;"))
|
||||
private GuiMessage onAddMessage_modifyChatHudLine(GuiMessage line) {
|
||||
IChatListener iListener = (IChatListener) Sputnik.mc.getChatListener();
|
||||
((IGuiMessage) (Object) line).sputnik$setSender(iListener.sputnik$getSender());
|
||||
return line;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<GuiMessage.Line> sputnik$getVisibleMessages() {
|
||||
return trimmedMessages;
|
||||
}
|
||||
|
||||
|
||||
// modificar contenido del mensaje
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "addMessage", cancellable = true)
|
||||
private void onAddMessage(Component contents, MessageSignature signature, GuiMessageSource source, GuiMessageTag tag, CallbackInfo ci) {
|
||||
if (skipOnAddMessage) return;
|
||||
|
||||
ReceiveMessageEvent event = Sputnik.EVENT_BUS.post(new ReceiveMessageEvent(contents, tag, nextId));
|
||||
|
||||
if (event.isCancelled()) {
|
||||
ci.cancel();
|
||||
} else {
|
||||
trimmedMessages.removeIf(msg -> ((IGuiMessage) (Object) msg).sputnik$getId() == nextId && nextId != 0);
|
||||
|
||||
for (int i = allMessages.size() - 1; i > -1; i--) {
|
||||
if (((IGuiMessage) (Object) allMessages.get(i)).sputnik$getId() == nextId && nextId != 0) {
|
||||
allMessages.remove(i);
|
||||
chatPlus.removeLine(i);
|
||||
}
|
||||
}
|
||||
|
||||
if (event.wasModified()) {
|
||||
ci.cancel();
|
||||
|
||||
skipOnAddMessage = true;
|
||||
addMessage(event.getMessage(), signature, source, event.getTag());
|
||||
skipOnAddMessage = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// cabezas
|
||||
|
||||
@ModifyExpressionValue(method = "extractRenderState(Lnet/minecraft/client/gui/components/ChatComponent$ChatGraphicsAccess;IILnet/minecraft/client/gui/components/ChatComponent$DisplayMode;)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/Mth;ceil(F)I"))
|
||||
private int onRender_modifyWidth(int width) {
|
||||
return (chatPlus.isEnabled() && chatPlus.showHeads.getValue()) ? width + 10 : width;
|
||||
}
|
||||
|
||||
|
||||
// historial (registro) del chat
|
||||
|
||||
@ModifyExpressionValue(method = "addMessageToQueue", at = @At(value = "CONSTANT", args = "intValue=100"))
|
||||
private int maxLength(int size) {
|
||||
if (!chatPlus.isEnabled()) return size;
|
||||
return size + chatPlus.chatHistoryExtraLength.getIntValue();
|
||||
}
|
||||
|
||||
@ModifyExpressionValue(method = "addMessageToDisplayQueue", at = @At(value = "CONSTANT", args = "intValue=100"))
|
||||
private int maxLengthVisible(int size) {
|
||||
if (!chatPlus.isEnabled()) return size;
|
||||
return size + chatPlus.chatHistoryExtraLength.getIntValue();
|
||||
}
|
||||
|
||||
@Inject(method = "addMessageToDisplayQueue", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/ChatComponent;isChatFocused()Z"))
|
||||
private void onBreakChatMessageLines(GuiMessage message, CallbackInfo ci, @Local(name = "lines") List<FormattedCharSequence> lines) {
|
||||
chatPlus.lines.addFirst(lines.size());
|
||||
}
|
||||
|
||||
@Inject(method = "addMessageToDisplayQueue", at = @At(value = "INVOKE", target = "Ljava/util/List;removeLast()Ljava/lang/Object;"))
|
||||
private void onRemoveMessage(GuiMessage message, CallbackInfo ci) {
|
||||
int extra = chatPlus.chatHistoryExtraLength.getIntValue();
|
||||
int size = chatPlus.lines.size();
|
||||
|
||||
while (size > 100 + extra) {
|
||||
chatPlus.lines.removeLast();
|
||||
size--;
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "clearMessages", at = @At("HEAD"))
|
||||
private void onClear(boolean history, CallbackInfo ci) {
|
||||
chatPlus.lines.clear();
|
||||
}
|
||||
|
||||
@Inject(method = "refreshTrimmedMessages", at = @At("HEAD"))
|
||||
private void onRefresh(CallbackInfo ci) {
|
||||
chatPlus.lines.clear();
|
||||
}
|
||||
}
|
||||
@@ -1,52 +0,0 @@
|
||||
package me.retucio.sputnik.mixin.mixins.hud;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.ModifyReceiver;
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.misc.ChatPlus;
|
||||
import net.minecraft.client.font.Alignment;
|
||||
import net.minecraft.client.font.DrawnTextConsumer;
|
||||
import net.minecraft.client.font.TextRenderer;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.hud.ChatHud;
|
||||
import net.minecraft.text.OrderedText;
|
||||
import net.minecraft.util.math.ColorHelper;
|
||||
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.ModifyArg;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
@Mixin(ChatHud.Interactable.class)
|
||||
public abstract class ChatHudInteractableMixin {
|
||||
|
||||
@Unique
|
||||
private static ChatPlus chatPlus;
|
||||
|
||||
@Shadow @Final
|
||||
private DrawContext context;
|
||||
|
||||
@Inject(method = "<init>", at = @At("TAIL"))
|
||||
private void getModules(DrawContext context, TextRenderer textRenderer, int mouseX, int mouseY, boolean bl, CallbackInfo ci) {
|
||||
chatPlus = ModuleManager.INSTANCE.getModuleByClass(ChatPlus.class);
|
||||
}
|
||||
|
||||
@ModifyReceiver(method = "text", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/font/DrawnTextConsumer;text(Lnet/minecraft/client/font/Alignment;IILnet/minecraft/client/font/DrawnTextConsumer$Transformation;Lnet/minecraft/text/OrderedText;)V"))
|
||||
private DrawnTextConsumer onRender_beforeDrawTextWithShadow(DrawnTextConsumer instance, Alignment alignment, int x, int y, DrawnTextConsumer.Transformation transformation, OrderedText orderedText) {
|
||||
chatPlus.beforeDrawMessage(context, y, ColorHelper.getWhite(transformation.opacity()));
|
||||
return instance;
|
||||
}
|
||||
|
||||
@ModifyArg(method = "text", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/font/DrawnTextConsumer;text(Lnet/minecraft/client/font/Alignment;IILnet/minecraft/client/font/DrawnTextConsumer$Transformation;Lnet/minecraft/text/OrderedText;)V"), index = 1)
|
||||
private int modifyX(int x) {
|
||||
return (chatPlus.isEnabled() && chatPlus.showHeads.getValue()) ? x + 10 : x;
|
||||
}
|
||||
|
||||
@Inject(method = "text", at = @At("TAIL"))
|
||||
private void onRender_afterDrawTextWithShadow(int y, float f, OrderedText text, CallbackInfoReturnable<Boolean> cir) {
|
||||
chatPlus.afterDrawMessage();
|
||||
}
|
||||
}
|
||||
@@ -1,189 +0,0 @@
|
||||
package me.retucio.sputnik.mixin.mixins.hud;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
|
||||
import com.llamalad7.mixinextras.sugar.Local;
|
||||
import me.retucio.sputnik.event.network.ReceiveMessageEvent;
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.misc.ChatPlus;
|
||||
import me.retucio.sputnik.util.interfaces.IChatHud;
|
||||
import me.retucio.sputnik.util.interfaces.IChatHudLine;
|
||||
import me.retucio.sputnik.util.interfaces.IChatHudLineVisible;
|
||||
import me.retucio.sputnik.util.interfaces.IMessageHandler;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gui.hud.ChatHud;
|
||||
import net.minecraft.client.gui.hud.ChatHudLine;
|
||||
import net.minecraft.client.gui.hud.MessageIndicator;
|
||||
import net.minecraft.network.message.MessageSignatureData;
|
||||
import net.minecraft.text.OrderedText;
|
||||
import net.minecraft.text.Text;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
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.CallbackInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static me.retucio.sputnik.Sputnik.*;
|
||||
|
||||
@Mixin(ChatHud.class)
|
||||
public abstract class ChatHudMixin implements IChatHud {
|
||||
|
||||
@Unique
|
||||
private boolean skipOnAddMessage;
|
||||
|
||||
@Unique
|
||||
private int nextId;
|
||||
|
||||
@Unique
|
||||
ChatPlus chatPlus;
|
||||
|
||||
@Shadow @Final
|
||||
private List<ChatHudLine> messages;
|
||||
|
||||
@Shadow @Final
|
||||
private List<ChatHudLine.Visible> visibleMessages;
|
||||
|
||||
@Shadow
|
||||
public abstract void addMessage(Text message);
|
||||
|
||||
@Shadow
|
||||
public abstract void addMessage(Text message, @Nullable MessageSignatureData signatureData, @Nullable MessageIndicator indicator);
|
||||
|
||||
@Inject(method = "<init>", at = @At("TAIL"))
|
||||
private void getModules(MinecraftClient client, CallbackInfo ci) {
|
||||
chatPlus = ModuleManager.INSTANCE.getModuleByClass(ChatPlus.class);
|
||||
}
|
||||
|
||||
|
||||
// métodos relacionados a las interfaces IChatHud, IChatHudLine, IChadHudLineVisible y IMessageHandler
|
||||
|
||||
@Override
|
||||
public void sputnik$add(Text message, int id) {
|
||||
nextId = id;
|
||||
addMessage(message);
|
||||
nextId = 0;
|
||||
}
|
||||
|
||||
@Inject(method = "addVisibleMessage", at = @At(value = "INVOKE", target = "Ljava/util/List;addFirst(Ljava/lang/Object;)V", shift = At.Shift.AFTER))
|
||||
private void onAddMessageAfterNewChatHudLineVisible(ChatHudLine message, CallbackInfo ci) {
|
||||
((IChatHudLine) (Object) visibleMessages.getFirst()).sputnik$setId(nextId);
|
||||
}
|
||||
|
||||
@Inject(method = "addMessage(Lnet/minecraft/client/gui/hud/ChatHudLine;)V", at = @At(value = "INVOKE", target = "Ljava/util/List;addFirst(Ljava/lang/Object;)V", shift = At.Shift.AFTER))
|
||||
private void onAddMessageAfterNewChatHudLine(ChatHudLine message, CallbackInfo ci) {
|
||||
((IChatHudLine) (Object) messages.getFirst()).sputnik$setId(nextId);
|
||||
}
|
||||
|
||||
@SuppressWarnings("DataFlowIssue")
|
||||
@ModifyExpressionValue(method = "addVisibleMessage", at = @At(value = "NEW", target = "(ILnet/minecraft/text/OrderedText;Lnet/minecraft/client/gui/hud/MessageIndicator;Z)Lnet/minecraft/client/gui/hud/ChatHudLine$Visible;"))
|
||||
private ChatHudLine.Visible onAddMessage_modifyChatHudLineVisible(ChatHudLine.Visible line, @Local(ordinal = 1) int j) {
|
||||
IMessageHandler handler = (IMessageHandler) mc.getMessageHandler();
|
||||
if (handler == null) return line;
|
||||
|
||||
IChatHudLineVisible iLine = (IChatHudLineVisible) (Object) line;
|
||||
|
||||
iLine.sputnik$setSender(handler.sputnik$getSender());
|
||||
iLine.sputnik$setStartOfEntry(j == 0);
|
||||
|
||||
return line;
|
||||
}
|
||||
|
||||
@ModifyExpressionValue(method = "addMessage(Lnet/minecraft/text/Text;Lnet/minecraft/network/message/MessageSignatureData;Lnet/minecraft/client/gui/hud/MessageIndicator;)V", at = @At(value = "NEW", target = "(ILnet/minecraft/text/Text;Lnet/minecraft/network/message/MessageSignatureData;Lnet/minecraft/client/gui/hud/MessageIndicator;)Lnet/minecraft/client/gui/hud/ChatHudLine;"))
|
||||
private ChatHudLine onAddMessage_modifyChatHudLine(ChatHudLine line) {
|
||||
IMessageHandler handler = (IMessageHandler) mc.getMessageHandler();
|
||||
if (handler == null) return line;
|
||||
|
||||
((IChatHudLine) (Object) line).sputnik$setSender(handler.sputnik$getSender());
|
||||
return line;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<ChatHudLine.Visible> sputnik$getVisibleMessages() {
|
||||
return visibleMessages;
|
||||
}
|
||||
|
||||
|
||||
// modificar contenido del mensaje
|
||||
|
||||
@Inject(at = @At("HEAD"), method = "addMessage(Lnet/minecraft/text/Text;Lnet/minecraft/network/message/MessageSignatureData;Lnet/minecraft/client/gui/hud/MessageIndicator;)V", cancellable = true)
|
||||
private void onAddMessage(Text message, MessageSignatureData signatureData, MessageIndicator indicator, CallbackInfo ci) {
|
||||
if (skipOnAddMessage) return;
|
||||
|
||||
ReceiveMessageEvent event = EVENT_BUS.post(new ReceiveMessageEvent(message, indicator, nextId));
|
||||
|
||||
if (event.isCancelled()) {
|
||||
ci.cancel();
|
||||
} else {
|
||||
visibleMessages.removeIf(msg -> ((IChatHudLine) (Object) msg).sputnik$getId() == nextId && nextId != 0);
|
||||
|
||||
for (int i = messages.size() - 1; i > -1; i--) {
|
||||
if (((IChatHudLine) (Object) messages.get(i)).sputnik$getId() == nextId && nextId != 0) {
|
||||
messages.remove(i);
|
||||
chatPlus.removeLine(i);
|
||||
}
|
||||
}
|
||||
|
||||
if (event.wasModified()) {
|
||||
ci.cancel();
|
||||
|
||||
skipOnAddMessage = true;
|
||||
addMessage(event.getMessage(), signatureData, event.getIndicator());
|
||||
skipOnAddMessage = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// cabezas
|
||||
|
||||
@ModifyExpressionValue(method = "render(Lnet/minecraft/client/gui/hud/ChatHud$Backend;IIZ)V", at = @At(value = "INVOKE", target = "Lnet/minecraft/util/math/MathHelper;ceil(F)I"))
|
||||
private int onRender_modifyWidth(int width) {
|
||||
return (chatPlus.isEnabled() && chatPlus.showHeads.getValue()) ? width + 10 : width;
|
||||
}
|
||||
|
||||
|
||||
// historial (registro) del chat
|
||||
|
||||
@ModifyExpressionValue(method = "addMessage(Lnet/minecraft/client/gui/hud/ChatHudLine;)V", at = @At(value = "CONSTANT", args = "intValue=100"))
|
||||
private int maxLength(int size) {
|
||||
if (!chatPlus.isEnabled()) return size;
|
||||
return size + chatPlus.chatHistoryExtraLength.getIntValue();
|
||||
}
|
||||
|
||||
@ModifyExpressionValue(method = "addVisibleMessage", at = @At(value = "CONSTANT", args = "intValue=100"))
|
||||
private int maxLengthVisible(int size) {
|
||||
if (!chatPlus.isEnabled()) return size;
|
||||
return size + chatPlus.chatHistoryExtraLength.getIntValue();
|
||||
}
|
||||
|
||||
@Inject(method = "addVisibleMessage", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/ChatHud;isChatFocused()Z"))
|
||||
private void onBreakChatMessageLines(ChatHudLine message, CallbackInfo ci, @Local List<OrderedText> list) {
|
||||
chatPlus.lines.addFirst(list.size());
|
||||
}
|
||||
|
||||
@Inject(method = "addMessage(Lnet/minecraft/client/gui/hud/ChatHudLine;)V", at = @At(value = "INVOKE", target = "Ljava/util/List;removeLast()Ljava/lang/Object;"))
|
||||
private void onRemoveMessage(ChatHudLine message, CallbackInfo ci) {
|
||||
int extra = chatPlus.chatHistoryExtraLength.getIntValue();
|
||||
int size = chatPlus.lines.size();
|
||||
|
||||
while (size > 100 + extra) {
|
||||
chatPlus.lines.removeLast();
|
||||
size--;
|
||||
}
|
||||
}
|
||||
|
||||
@Inject(method = "clear", at = @At("HEAD"))
|
||||
private void onClear(boolean clearHistory, CallbackInfo ci) {
|
||||
chatPlus.lines.clear();
|
||||
}
|
||||
|
||||
@Inject(method = "refresh", at = @At("HEAD"))
|
||||
private void onRefresh(CallbackInfo ci) {
|
||||
chatPlus.lines.clear();
|
||||
}
|
||||
}
|
||||
+54
@@ -0,0 +1,54 @@
|
||||
package me.retucio.sputnik.mixin.mixins.hud;
|
||||
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.misc.ChatPlus;
|
||||
|
||||
import net.minecraft.client.gui.ActiveTextCollector;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.client.gui.TextAlignment;
|
||||
import net.minecraft.client.gui.components.ChatComponent;
|
||||
import net.minecraft.util.ARGB;
|
||||
import net.minecraft.util.FormattedCharSequence;
|
||||
|
||||
import com.llamalad7.mixinextras.injector.ModifyReceiver;
|
||||
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.ModifyArg;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
|
||||
|
||||
|
||||
@Mixin(ChatComponent.DrawingFocusedGraphicsAccess.class)
|
||||
public abstract class DrawingFocusedGraphicsAccessMixin {
|
||||
|
||||
@Unique
|
||||
private static ChatPlus chatPlus;
|
||||
|
||||
@Shadow @Final
|
||||
private GuiGraphicsExtractor graphics;
|
||||
|
||||
@Inject(method = "<init>", at = @At("TAIL"))
|
||||
private void getModules(CallbackInfo ci) {
|
||||
chatPlus = ModuleManager.INSTANCE.getModuleByClass(ChatPlus.class);
|
||||
}
|
||||
|
||||
@ModifyReceiver(method = "handleMessage", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ActiveTextCollector;accept(Lnet/minecraft/client/gui/TextAlignment;IILnet/minecraft/client/gui/ActiveTextCollector$Parameters;Lnet/minecraft/util/FormattedCharSequence;)V"))
|
||||
private ActiveTextCollector onRender_beforeDrawTextWithShadow(ActiveTextCollector instance, TextAlignment textAlignment, int x, int y, ActiveTextCollector.Parameters parameters, FormattedCharSequence formattedCharSequence) {
|
||||
chatPlus.beforeDrawMessage(graphics, y, ARGB.white(parameters.opacity()));
|
||||
return instance;
|
||||
}
|
||||
|
||||
@ModifyArg(method = "handleMessage", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/ActiveTextCollector;accept(Lnet/minecraft/client/gui/TextAlignment;IILnet/minecraft/client/gui/ActiveTextCollector$Parameters;Lnet/minecraft/util/FormattedCharSequence;)V"), index = 1)
|
||||
private int modifyX(int x) {
|
||||
return (chatPlus.isEnabled() && chatPlus.showHeads.getValue()) ? x + 10 : x;
|
||||
}
|
||||
|
||||
@Inject(method = "handleMessage", at = @At("TAIL"))
|
||||
private void onRender_afterDrawTextWithShadow(int textTop, float opacity, FormattedCharSequence message, CallbackInfoReturnable<Boolean> cir) {
|
||||
chatPlus.afterDrawMessage();
|
||||
}
|
||||
}
|
||||
+6
-6
@@ -1,19 +1,19 @@
|
||||
package me.retucio.sputnik.mixin.mixins.hud;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import me.retucio.sputnik.util.interfaces.IChatHudLineVisible;
|
||||
import net.minecraft.client.gui.hud.ChatHudLine;
|
||||
import net.minecraft.text.OrderedText;
|
||||
import me.retucio.sputnik.util.interfaces.IGuiMessageLine;
|
||||
import net.minecraft.client.multiplayer.chat.GuiMessage;
|
||||
import net.minecraft.util.FormattedCharSequence;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
|
||||
@Mixin(ChatHudLine.Visible.class)
|
||||
public class ChatHudLineVisibleMixin implements IChatHudLineVisible {
|
||||
@Mixin(GuiMessage.Line.class)
|
||||
public class GuiMessageLineMixin implements IGuiMessageLine {
|
||||
|
||||
@Shadow @Final
|
||||
private OrderedText content;
|
||||
private FormattedCharSequence content;
|
||||
|
||||
@Unique
|
||||
private int id;
|
||||
+6
-6
@@ -1,19 +1,19 @@
|
||||
package me.retucio.sputnik.mixin.mixins.hud;
|
||||
|
||||
import com.mojang.authlib.GameProfile;
|
||||
import me.retucio.sputnik.util.interfaces.IChatHudLine;
|
||||
import net.minecraft.client.gui.hud.ChatHudLine;
|
||||
import net.minecraft.text.Text;
|
||||
import me.retucio.sputnik.util.interfaces.IGuiMessage;
|
||||
import net.minecraft.client.multiplayer.chat.GuiMessage;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
|
||||
@Mixin(ChatHudLine.class)
|
||||
public class ChatHudLineMixin implements IChatHudLine {
|
||||
@Mixin(GuiMessage.class)
|
||||
public class GuiMessageMixin implements IGuiMessage {
|
||||
|
||||
@Shadow @Final
|
||||
private Text content;
|
||||
private Component content;
|
||||
|
||||
@Unique
|
||||
private int id;
|
||||
@@ -8,80 +8,79 @@ import me.retucio.sputnik.module.modules.misc.ChatPlus;
|
||||
import me.retucio.sputnik.module.modules.camera.Freecam;
|
||||
import me.retucio.sputnik.module.modules.render.NoRender;
|
||||
import me.retucio.sputnik.ui.hud.HudRenderer;
|
||||
import net.minecraft.client.MinecraftClient;
|
||||
import net.minecraft.client.gui.DrawContext;
|
||||
import net.minecraft.client.gui.hud.InGameHud;
|
||||
import net.minecraft.client.render.RenderTickCounter;
|
||||
import net.minecraft.util.Identifier;
|
||||
import net.minecraft.client.DeltaTracker;
|
||||
import net.minecraft.client.gui.Gui;
|
||||
import net.minecraft.client.gui.GuiGraphicsExtractor;
|
||||
import net.minecraft.resources.Identifier;
|
||||
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.callback.CallbackInfo;
|
||||
|
||||
@Mixin(InGameHud.class)
|
||||
@Mixin(Gui.class)
|
||||
public abstract class InGameHudMixin {
|
||||
|
||||
@Unique
|
||||
NoRender noRender;
|
||||
|
||||
@Inject(method = "<init>", at = @At("TAIL"))
|
||||
private void getModules(MinecraftClient client, CallbackInfo ci) {
|
||||
private void getModules(CallbackInfo ci) {
|
||||
noRender = ModuleManager.INSTANCE.getModuleByClass(NoRender.class);
|
||||
}
|
||||
|
||||
@Inject(method = "render", at = @At("TAIL"))
|
||||
private void onRenderHud(DrawContext ctx, RenderTickCounter tc, CallbackInfo ci) {
|
||||
Sputnik.EVENT_BUS.post(new Render2DEvent(ctx, tc));
|
||||
@Inject(method = "extractRenderState", at = @At("TAIL"))
|
||||
private void onRenderHud(GuiGraphicsExtractor gui, DeltaTracker dt, CallbackInfo ci) {
|
||||
Sputnik.EVENT_BUS.post(new Render2DEvent(gui, dt));
|
||||
}
|
||||
|
||||
|
||||
// norender
|
||||
|
||||
@Inject(method = "renderScoreboardSidebar*", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "extractScoreboardSidebar", at = @At("HEAD"), cancellable = true)
|
||||
private void noRenderScoreboard(CallbackInfo ci) {
|
||||
if (noRender.isEnabled() && !noRender.scoreboard.getValue()) ci.cancel();
|
||||
}
|
||||
|
||||
@Inject(method = "renderTitleAndSubtitle", at = @At("HEAD"), cancellable = true)
|
||||
private void noRenderTitles(DrawContext context, RenderTickCounter tickCounter, CallbackInfo ci) {
|
||||
@Inject(method = "extractTitle", at = @At("HEAD"), cancellable = true)
|
||||
private void noRenderTitles(GuiGraphicsExtractor graphics, DeltaTracker deltaTracker, CallbackInfo ci) {
|
||||
if (noRender.isEnabled() && !noRender.titles.getValue()) ci.cancel();
|
||||
}
|
||||
|
||||
@Inject(method = "renderNauseaOverlay", at = @At("HEAD"), cancellable = true)
|
||||
private void noRenderNausea(DrawContext context, float nauseaStrength, CallbackInfo ci) {
|
||||
@Inject(method = "extractConfusionOverlay", at = @At("HEAD"), cancellable = true)
|
||||
private void noRenderNausea(GuiGraphicsExtractor graphics, float strength, CallbackInfo ci) {
|
||||
if (noRender.isEnabled() && !noRender.nauseaEffect.getValue()) ci.cancel();
|
||||
}
|
||||
|
||||
@Inject(method = "renderSpyglassOverlay", at = @At("HEAD"), cancellable = true)
|
||||
private void noRenderSpyglass(DrawContext context, float scale, CallbackInfo ci) {
|
||||
@Inject(method = "extractSpyglassOverlay", at = @At("HEAD"), cancellable = true)
|
||||
private void noRenderSpyglass(GuiGraphicsExtractor graphics, float scale, CallbackInfo ci) {
|
||||
if (noRender.isEnabled() && !noRender.spyglassOverlay.getValue()) ci.cancel();
|
||||
}
|
||||
|
||||
@Inject(method = "renderPortalOverlay", at = @At("HEAD"), cancellable = true)
|
||||
private void noRenderPortal(DrawContext context, float nauseaStrength, CallbackInfo ci) {
|
||||
@Inject(method = "extractPortalOverlay", at = @At("HEAD"), cancellable = true)
|
||||
private void noRenderPortal(GuiGraphicsExtractor graphics, float alpha, CallbackInfo ci) {
|
||||
if (noRender.isEnabled() && !noRender.portalOverlay.getValue()) ci.cancel();
|
||||
}
|
||||
|
||||
@Inject(method = "renderOverlay", at = @At("HEAD"), cancellable = true)
|
||||
private void noRenderPumpkinBlur(DrawContext context, Identifier texture, float opacity, CallbackInfo ci) {
|
||||
@Inject(method = "extractTextureOverlay", at = @At("HEAD"), cancellable = true)
|
||||
private void noRenderPumpkinBlur(GuiGraphicsExtractor graphics, Identifier texture, float alpha, CallbackInfo ci) {
|
||||
if (noRender.isEnabled() && !noRender.pumpkinOverlay.getValue() && texture.getPath().equals("textures/misc/pumpkinblur.png")) ci.cancel();
|
||||
}
|
||||
|
||||
|
||||
// otros
|
||||
|
||||
@Inject(method = "render", at = @At("RETURN"))
|
||||
private void renderHUD(DrawContext ctx, RenderTickCounter tc, CallbackInfo ci) {
|
||||
HudRenderer.render(ctx, tc);
|
||||
@Inject(method = "extractRenderState", at = @At("RETURN"))
|
||||
private void renderHUD(GuiGraphicsExtractor gui, DeltaTracker dt, CallbackInfo ci) {
|
||||
HudRenderer.render(gui, dt);
|
||||
}
|
||||
|
||||
@ModifyExpressionValue(method = "renderCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/option/Perspective;isFirstPerson()Z"))
|
||||
@ModifyExpressionValue(method = "extractCrosshair", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/CameraType;isFirstPerson()Z"))
|
||||
private boolean alwaysRenderCrosshairInFreecam(boolean firstPerson) {
|
||||
return ModuleManager.INSTANCE.getModuleByClass(Freecam.class).isEnabled() || firstPerson;
|
||||
}
|
||||
|
||||
@Inject(method = "clear", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/hud/ChatHud;clear(Z)V"), cancellable = true)
|
||||
@Inject(method = "onDisconnected", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/components/ChatComponent;clearMessages(Z)V"), cancellable = true)
|
||||
private void onClear(CallbackInfo ci) {
|
||||
ChatPlus chatPlus = ModuleManager.INSTANCE.getModuleByClass(ChatPlus.class);
|
||||
if (chatPlus.isEnabled() && chatPlus.keepHistory.getValue()) ci.cancel();
|
||||
|
||||
+6
-8
@@ -2,23 +2,21 @@ package me.retucio.sputnik.mixin.mixins.io;
|
||||
|
||||
import me.retucio.sputnik.Sputnik;
|
||||
import me.retucio.sputnik.event.input.KeyEvent;
|
||||
import net.minecraft.client.Keyboard;
|
||||
import net.minecraft.client.input.KeyInput;
|
||||
import net.minecraft.client.KeyboardHandler;
|
||||
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.sputnik.Sputnik.EVENT_BUS;
|
||||
|
||||
@Mixin(Keyboard.class)
|
||||
public abstract class KeyboardMixin {
|
||||
@Mixin(KeyboardHandler.class)
|
||||
public abstract class KeyboardHandlerMixin {
|
||||
|
||||
@Inject(method = "onKey", at = @At("HEAD"), cancellable = true)
|
||||
private void onKeyPress(long window, int action, KeyInput input, CallbackInfo ci) {
|
||||
@Inject(method = "keyPress", at = @At("HEAD"), cancellable = true)
|
||||
private void onKeyPress(long handle, int action, net.minecraft.client.input.KeyEvent input, CallbackInfo ci) {
|
||||
if (input.key() == -1) return;
|
||||
Sputnik.INSTANCE.onInput(input.key(), action);
|
||||
KeyEvent event = EVENT_BUS.post(new KeyEvent(input.key(), input.scancode(), action));
|
||||
KeyEvent event = Sputnik.EVENT_BUS.post(new KeyEvent(input.key(), input.scancode(), action));
|
||||
if (event.isCancelled()) ci.cancel();
|
||||
}
|
||||
}
|
||||
+11
-11
@@ -2,27 +2,27 @@ package me.retucio.sputnik.mixin.mixins.io;
|
||||
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.camera.Freecam;
|
||||
import net.minecraft.client.input.Input;
|
||||
import net.minecraft.client.input.KeyboardInput;
|
||||
import net.minecraft.util.PlayerInput;
|
||||
import net.minecraft.client.player.ClientInput;
|
||||
import net.minecraft.client.player.KeyboardInput;
|
||||
import net.minecraft.world.entity.player.Input;
|
||||
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(KeyboardInput.class)
|
||||
public abstract class KeyInputMixin extends Input {
|
||||
public abstract class KeyboardInputMixin extends ClientInput {
|
||||
|
||||
@Inject(method = "tick", at = @At("TAIL"))
|
||||
private void isPressed(CallbackInfo ci) {
|
||||
Freecam freecam = ModuleManager.INSTANCE.getModuleByClass(Freecam.class);
|
||||
if (freecam.isEnabled() && freecam.stayCrouching.getValue() && freecam.isCrouching())
|
||||
playerInput = new PlayerInput(
|
||||
false, false,
|
||||
false, false,
|
||||
false,
|
||||
true, // siempre agachado
|
||||
false
|
||||
);
|
||||
keyPresses = new Input(
|
||||
false, false,
|
||||
false, false,
|
||||
false,
|
||||
true, // siempre agachado
|
||||
false
|
||||
);
|
||||
}
|
||||
}
|
||||
+9
-10
@@ -3,28 +3,27 @@ package me.retucio.sputnik.mixin.mixins.io;
|
||||
import me.retucio.sputnik.Sputnik;
|
||||
import me.retucio.sputnik.event.input.MouseClickEvent;
|
||||
import me.retucio.sputnik.event.input.MouseScrollEvent;
|
||||
import net.minecraft.client.Mouse;
|
||||
import net.minecraft.client.input.MouseInput;
|
||||
import net.minecraft.client.MouseHandler;
|
||||
import net.minecraft.client.input.MouseButtonInfo;
|
||||
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.sputnik.Sputnik.EVENT_BUS;
|
||||
|
||||
@Mixin(Mouse.class)
|
||||
public abstract class MouseMixin {
|
||||
@Mixin(MouseHandler.class)
|
||||
public abstract class MouseHandlerMixin {
|
||||
|
||||
@Inject(method = "onMouseButton", at = @At("HEAD"), cancellable = true)
|
||||
private void onMouseButton(long window, MouseInput input, int action, CallbackInfo ci) {
|
||||
@Inject(method = "onButton", at = @At("HEAD"), cancellable = true)
|
||||
private void onMouseButton(long handle, MouseButtonInfo input, int action, CallbackInfo ci) {
|
||||
Sputnik.INSTANCE.onInput(input.button(), action);
|
||||
MouseClickEvent event = EVENT_BUS.post(new MouseClickEvent(action, input.button()));
|
||||
MouseClickEvent event = Sputnik.EVENT_BUS.post(new MouseClickEvent(action, input.button()));
|
||||
if (event.isCancelled()) ci.cancel();
|
||||
}
|
||||
|
||||
@Inject(method = "onMouseScroll", at = @At("HEAD"), cancellable = true)
|
||||
@Inject(method = "onScroll", at = @At("HEAD"), cancellable = true)
|
||||
private void onMouseScroll(long window, double horizontal, double vertical, CallbackInfo ci) {
|
||||
MouseScrollEvent event = EVENT_BUS.post(new MouseScrollEvent(horizontal, vertical));
|
||||
MouseScrollEvent event = Sputnik.EVENT_BUS.post(new MouseScrollEvent(horizontal, vertical));
|
||||
if (event.isCancelled()) ci.cancel();
|
||||
}
|
||||
}
|
||||
+12
-14
@@ -1,10 +1,10 @@
|
||||
package me.retucio.sputnik.mixin.mixins.io;
|
||||
|
||||
import com.mojang.blaze3d.platform.NativeImage;
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.misc.ScreenshotPlus;
|
||||
import net.minecraft.client.texture.NativeImage;
|
||||
import net.minecraft.client.util.ScreenshotRecorder;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.Screenshot;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Unique;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
@@ -15,33 +15,31 @@ import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import static me.retucio.sputnik.Sputnik.mc;
|
||||
|
||||
@Mixin(ScreenshotRecorder.class)
|
||||
public abstract class ScreenshotRecorderMixin {
|
||||
@Mixin(Screenshot.class)
|
||||
public abstract class ScreenshotMixin {
|
||||
|
||||
// "method_22691" es la lambda de la función "saveScreenshot()" (por lo menos en 1.21.6)
|
||||
@Inject(method = "method_22691", at = @At(value = "INVOKE", target = "Ljava/util/function/Consumer;accept(Ljava/lang/Object;)V"), cancellable = true)
|
||||
private static void sendActionsMessage(NativeImage nativeImage, File file, Consumer<Text> consumer, CallbackInfo ci) {
|
||||
@Inject(method = "lambda$grab$1", at = @At(value = "INVOKE", target = "Ljava/util/function/Consumer;accept(Ljava/lang/Object;)V"), cancellable = true)
|
||||
private static void sendActionsMessage(NativeImage image, File file, Consumer<?> callback, CallbackInfo ci) {
|
||||
ScreenshotPlus screenshotPlus = getScreenshotPlus();
|
||||
if (screenshotPlus.isEnabled()) ci.cancel();
|
||||
}
|
||||
|
||||
@Inject(method = "method_22691", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/texture/NativeImage;writeTo(Ljava/io/File;)V"), cancellable = true)
|
||||
private static void interceptScreenshotFile(NativeImage nativeImage, File file, Consumer<Text> consumer, CallbackInfo ci) throws IOException {
|
||||
@Inject(method = "lambda$grab$1", at = @At(value = "INVOKE", target = "Lcom/mojang/blaze3d/platform/NativeImage;writeToFile(Ljava/io/File;)V"), cancellable = true)
|
||||
private static void interceptScreenshotFile(NativeImage image, File file, Consumer<?> callback, CallbackInfo ci) throws IOException {
|
||||
ScreenshotPlus screenshotPlus = getScreenshotPlus();
|
||||
|
||||
// aunque el módulo esté apagado, pasar las referencias para poder usar los comandos para las capturas
|
||||
screenshotPlus.setScreenshot(nativeImage);
|
||||
screenshotPlus.setScreenshot(image);
|
||||
screenshotPlus.setScreenshotFile(file);
|
||||
|
||||
if (!screenshotPlus.isEnabled()) return;
|
||||
|
||||
// por los threads o lo que sea
|
||||
mc.execute(screenshotPlus::sendScreenshotMessage);
|
||||
Minecraft.getInstance().execute(screenshotPlus::sendScreenshotMessage);
|
||||
|
||||
switch (screenshotPlus.defaultAction.getValue()) {
|
||||
case COPY -> screenshotPlus.copyScreenshot(nativeImage);
|
||||
case COPY -> screenshotPlus.copyScreenshot(image);
|
||||
case SAVE -> screenshotPlus.saveScreenshot();
|
||||
case NONE -> ci.cancel();
|
||||
}
|
||||
@@ -2,14 +2,14 @@ package me.retucio.sputnik.mixin.mixins.item;
|
||||
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.inventory.ShulkerPeek;
|
||||
import net.minecraft.block.ShulkerBoxBlock;
|
||||
import net.minecraft.component.type.TooltipDisplayComponent;
|
||||
import net.minecraft.item.BlockItem;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.item.tooltip.TooltipType;
|
||||
import net.minecraft.text.Text;
|
||||
import net.minecraft.util.Formatting;
|
||||
import net.minecraft.ChatFormatting;
|
||||
import net.minecraft.network.chat.Component;
|
||||
import net.minecraft.world.item.BlockItem;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import net.minecraft.world.item.TooltipFlag;
|
||||
import net.minecraft.world.item.component.TooltipDisplay;
|
||||
import net.minecraft.world.level.block.ShulkerBoxBlock;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
@@ -20,21 +20,21 @@ import java.util.function.Consumer;
|
||||
@Mixin(Item.class)
|
||||
public abstract class ItemMixin {
|
||||
|
||||
@Inject(method = "appendTooltip", at = @At("HEAD"))
|
||||
private void onAppendTooltip(ItemStack stack, Item.TooltipContext context, TooltipDisplayComponent displayComponent, Consumer<Text> textConsumer, TooltipType type, CallbackInfo ci) {
|
||||
@Inject(method = "appendHoverText", at = @At("HEAD"))
|
||||
private void onAppendTooltip(ItemStack stack, Item.TooltipContext context, TooltipDisplay display, Consumer<Component> builder, TooltipFlag tooltipFlag, CallbackInfo ci) {
|
||||
ShulkerPeek shulkerPeek = ModuleManager.INSTANCE.getModuleByClass(ShulkerPeek.class);
|
||||
if (!shulkerPeek.isEnabled() || !shulkerPeek.showTooltips.getValue()) return;
|
||||
|
||||
if (stack.getItem() instanceof BlockItem blockItem && blockItem.getBlock() instanceof ShulkerBoxBlock) {
|
||||
if (ShulkerPeek.isShulkerEmpty(stack)) {
|
||||
textConsumer.accept(Text.literal("vacío").formatted(Formatting.GRAY, Formatting.ITALIC));
|
||||
builder.accept(Component.literal("vacío").withStyle(ChatFormatting.GRAY, ChatFormatting.ITALIC));
|
||||
} else {
|
||||
textConsumer.accept(
|
||||
Text.literal("mantén ")
|
||||
.append(Text.literal(shulkerPeek.previewKey.getKeyName())
|
||||
.formatted(Formatting.GOLD, Formatting.BOLD))
|
||||
builder.accept(
|
||||
Component.literal("mantén ")
|
||||
.append(Component.literal(shulkerPeek.previewKey.getKeyName())
|
||||
.withStyle(ChatFormatting.GOLD, ChatFormatting.BOLD))
|
||||
.append(" para previsualizar")
|
||||
.formatted(Formatting.GRAY)
|
||||
.withStyle(ChatFormatting.GRAY)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,28 +1,28 @@
|
||||
package me.retucio.sputnik.mixin.mixins.item;
|
||||
|
||||
import me.retucio.sputnik.Sputnik;
|
||||
import me.retucio.sputnik.event.interact.DamageItemEvent;
|
||||
import net.minecraft.item.Item;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.server.network.ServerPlayerEntity;
|
||||
import net.minecraft.server.level.ServerPlayer;
|
||||
import net.minecraft.world.item.Item;
|
||||
import net.minecraft.world.item.ItemStack;
|
||||
import org.jspecify.annotations.Nullable;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.Inject;
|
||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||
|
||||
import java.util.function.Consumer;
|
||||
|
||||
import static me.retucio.sputnik.Sputnik.EVENT_BUS;
|
||||
|
||||
@Mixin(ItemStack.class)
|
||||
public abstract class ItemStackMixin {
|
||||
|
||||
@Shadow
|
||||
public abstract int getDamage();
|
||||
public abstract int getDamageValue();
|
||||
|
||||
@Inject(method = "onDurabilityChange", at = @At("TAIL"))
|
||||
private void onDamage(int damage, ServerPlayerEntity player, Consumer<Item> breakCallback, CallbackInfo ci) {
|
||||
@Inject(method = "applyDamage", at = @At("TAIL"))
|
||||
private void onDamage(int newDamage, @Nullable ServerPlayer player, Consumer<Item> onBreak, CallbackInfo ci) {
|
||||
ItemStack stack = (ItemStack) (Object) this;
|
||||
EVENT_BUS.post(new DamageItemEvent(getDamage(), stack));
|
||||
Sputnik.EVENT_BUS.post(new DamageItemEvent(getDamageValue(), stack));
|
||||
}
|
||||
}
|
||||
@@ -3,16 +3,17 @@ package me.retucio.sputnik.mixin.mixins.item;
|
||||
import com.llamalad7.mixinextras.injector.ModifyExpressionValue;
|
||||
import me.retucio.sputnik.module.ModuleManager;
|
||||
import me.retucio.sputnik.module.modules.movement.TridentBoost;
|
||||
import net.minecraft.item.TridentItem;
|
||||
import net.minecraft.world.item.TridentItem;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.injection.At;
|
||||
import org.spongepowered.asm.mixin.injection.ModifyArgs;
|
||||
import org.spongepowered.asm.mixin.injection.invoke.arg.Args;
|
||||
|
||||
|
||||
@Mixin(TridentItem.class)
|
||||
public abstract class TridentItemMixin {
|
||||
|
||||
@ModifyArgs(method = "onStoppedUsing", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;addVelocity(DDD)V"))
|
||||
@ModifyArgs(method = "releaseUsing", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;push(DDD)V"))
|
||||
private void modifyVelocity(Args args) {
|
||||
TridentBoost tridentBoost = ModuleManager.INSTANCE.getModuleByClass(TridentBoost.class);
|
||||
if (!tridentBoost.isEnabled()) return;
|
||||
@@ -21,13 +22,13 @@ public abstract class TridentItemMixin {
|
||||
args.set(2, (double) args.get(2) * tridentBoost.multiplier.getValue());
|
||||
}
|
||||
|
||||
@ModifyExpressionValue(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;isTouchingWaterOrRain()Z"))
|
||||
@ModifyExpressionValue(method = "use", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;isInWaterOrRain()Z"))
|
||||
private boolean allowUseOutOfWaterPre(boolean original) {
|
||||
TridentBoost tridentBoost = ModuleManager.INSTANCE.getModuleByClass(TridentBoost.class);
|
||||
return (tridentBoost.outOfWater.getValue() && tridentBoost.isEnabled()) || original;
|
||||
}
|
||||
|
||||
@ModifyExpressionValue(method = "onStoppedUsing", at = @At(value = "INVOKE", target = "Lnet/minecraft/entity/player/PlayerEntity;isTouchingWaterOrRain()Z"))
|
||||
@ModifyExpressionValue(method = "releaseUsing", at = @At(value = "INVOKE", target = "Lnet/minecraft/world/entity/player/Player;isInWaterOrRain()Z"))
|
||||
private boolean allowUseOutOfWaterPost(boolean original) {
|
||||
TridentBoost tridentBoost = ModuleManager.INSTANCE.getModuleByClass(TridentBoost.class);
|
||||
return (tridentBoost.outOfWater.getValue() && tridentBoost.isEnabled()) || original;
|
||||
|
||||
Loaded 100 of 324 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user