mirror of
https://code.chipmunk.land/ChomeNS/chipmunkmod.git
synced 2025-11-13 21:06:16 +00:00
Merge pull request 'More mixin cleanups' (#15) from amy/chomensmod:1.21.4 into 1.21.4
Reviewed-on: https://code.chipmunk.land/ChomeNS/chipmunkmod/pulls/15
This commit is contained in:
commit
6aa61cf724
5 changed files with 20 additions and 105 deletions
|
|
@ -6,15 +6,12 @@ import land.chipmunk.chipmunkmod.data.ChomeNSBotCommand;
|
||||||
import land.chipmunk.chipmunkmod.modules.ChomeNSBotCommandSuggestions;
|
import land.chipmunk.chipmunkmod.modules.ChomeNSBotCommandSuggestions;
|
||||||
import land.chipmunk.chipmunkmod.util.BotValidationUtilities;
|
import land.chipmunk.chipmunkmod.util.BotValidationUtilities;
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.gui.screen.ChatInputSuggestor;
|
import net.minecraft.client.gui.screen.ChatScreen;
|
||||||
import net.minecraft.client.gui.screen.Screen;
|
|
||||||
import net.minecraft.client.gui.widget.TextFieldWidget;
|
|
||||||
import net.minecraft.text.MutableText;
|
|
||||||
import net.minecraft.text.Text;
|
|
||||||
import org.spongepowered.asm.mixin.Mixin;
|
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.At;
|
||||||
|
import org.spongepowered.asm.mixin.injection.Constant;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
|
import org.spongepowered.asm.mixin.injection.ModifyConstant;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
import javax.net.ssl.HttpsURLConnection;
|
import javax.net.ssl.HttpsURLConnection;
|
||||||
|
|
@ -26,49 +23,12 @@ import java.net.URL;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Mixin(value = net.minecraft.client.gui.screen.ChatScreen.class)
|
@Mixin(value = ChatScreen.class)
|
||||||
public abstract class ChatScreenMixin extends Screen {
|
public abstract class ChatScreenMixin {
|
||||||
@Shadow
|
|
||||||
private String originalChatText;
|
|
||||||
|
|
||||||
@Shadow
|
|
||||||
private int messageHistoryIndex;
|
|
||||||
|
|
||||||
@Shadow
|
|
||||||
protected TextFieldWidget chatField;
|
|
||||||
|
|
||||||
@Shadow
|
|
||||||
ChatInputSuggestor chatInputSuggestor;
|
|
||||||
|
|
||||||
@Shadow
|
|
||||||
protected abstract void onChatFieldUpdate(String chatText);
|
|
||||||
|
|
||||||
protected ChatScreenMixin(Text title) {
|
|
||||||
super(title);
|
|
||||||
}
|
|
||||||
|
|
||||||
// infinite chat
|
// infinite chat
|
||||||
@Inject(method = "init", at = @At("HEAD"), cancellable = true)
|
@ModifyConstant(method = "init", constant = @Constant(intValue = 256))
|
||||||
protected void init(CallbackInfo ci) {
|
protected int init$maxLength(final int old) {
|
||||||
final MinecraftClient client = MinecraftClient.getInstance();
|
return Integer.MAX_VALUE;
|
||||||
|
|
||||||
this.messageHistoryIndex = client.inGameHud.getChatHud().getMessageHistory().size();
|
|
||||||
this.chatField = new TextFieldWidget(client.advanceValidatingTextRenderer, 4, this.height - 12, this.width - 4, 12, Text.translatable("chat.editBox")) {
|
|
||||||
protected MutableText getNarrationMessage() {
|
|
||||||
return super.getNarrationMessage().append(ChatScreenMixin.this.chatInputSuggestor.getNarration());
|
|
||||||
}
|
|
||||||
};
|
|
||||||
this.chatField.setMaxLength(Integer.MAX_VALUE);
|
|
||||||
this.chatField.setDrawsBackground(false);
|
|
||||||
this.chatField.setText(this.originalChatText);
|
|
||||||
this.chatField.setChangedListener(this::onChatFieldUpdate);
|
|
||||||
this.chatField.setFocusUnlocked(false);
|
|
||||||
this.addSelectableChild(this.chatField);
|
|
||||||
this.chatInputSuggestor = new ChatInputSuggestor(this.client, this, this.chatField, this.textRenderer, false, false, 1, 10, true, -805306368);
|
|
||||||
this.chatInputSuggestor.setCanLeave(false);
|
|
||||||
this.chatInputSuggestor.refresh();
|
|
||||||
|
|
||||||
ci.cancel();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Inject(method = "sendMessage", at = @At("HEAD"), cancellable = true)
|
@Inject(method = "sendMessage", at = @At("HEAD"), cancellable = true)
|
||||||
|
|
|
||||||
|
|
@ -7,15 +7,8 @@ import land.chipmunk.chipmunkmod.listeners.Listener;
|
||||||
import land.chipmunk.chipmunkmod.listeners.ListenerManager;
|
import land.chipmunk.chipmunkmod.listeners.ListenerManager;
|
||||||
import land.chipmunk.chipmunkmod.modules.*;
|
import land.chipmunk.chipmunkmod.modules.*;
|
||||||
import land.chipmunk.chipmunkmod.modules.custom_chat.CustomChat;
|
import land.chipmunk.chipmunkmod.modules.custom_chat.CustomChat;
|
||||||
import net.minecraft.client.MinecraftClient;
|
|
||||||
import net.minecraft.command.CommandRegistryAccess;
|
import net.minecraft.command.CommandRegistryAccess;
|
||||||
import net.minecraft.command.CommandSource;
|
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.MessageChain;
|
|
||||||
import net.minecraft.network.message.MessageSignatureData;
|
|
||||||
import net.minecraft.network.packet.c2s.play.ChatMessageC2SPacket;
|
|
||||||
import net.minecraft.network.packet.s2c.play.CommandTreeS2CPacket;
|
import net.minecraft.network.packet.s2c.play.CommandTreeS2CPacket;
|
||||||
import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket;
|
import net.minecraft.network.packet.s2c.play.GameJoinS2CPacket;
|
||||||
import net.minecraft.network.packet.s2c.play.GameMessageS2CPacket;
|
import net.minecraft.network.packet.s2c.play.GameMessageS2CPacket;
|
||||||
|
|
@ -31,8 +24,6 @@ import org.spongepowered.asm.mixin.injection.At;
|
||||||
import org.spongepowered.asm.mixin.injection.Inject;
|
import org.spongepowered.asm.mixin.injection.Inject;
|
||||||
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
|
||||||
|
|
||||||
import java.time.Instant;
|
|
||||||
|
|
||||||
@Mixin(value = net.minecraft.client.network.ClientPlayNetworkHandler.class, priority = 1001)
|
@Mixin(value = net.minecraft.client.network.ClientPlayNetworkHandler.class, priority = 1001)
|
||||||
public class ClientPlayNetworkHandlerMixin {
|
public class ClientPlayNetworkHandlerMixin {
|
||||||
@Final
|
@Final
|
||||||
|
|
@ -42,10 +33,6 @@ public class ClientPlayNetworkHandlerMixin {
|
||||||
@Shadow
|
@Shadow
|
||||||
private DynamicRegistryManager.Immutable combinedDynamicRegistries;
|
private DynamicRegistryManager.Immutable combinedDynamicRegistries;
|
||||||
@Shadow
|
@Shadow
|
||||||
private LastSeenMessagesCollector lastSeenMessagesCollector;
|
|
||||||
@Shadow
|
|
||||||
private MessageChain.Packer messagePacker;
|
|
||||||
@Shadow
|
|
||||||
private CommandDispatcher<CommandSource> commandDispatcher;
|
private CommandDispatcher<CommandSource> commandDispatcher;
|
||||||
|
|
||||||
@Inject(method = "onGameJoin", at = @At("TAIL"))
|
@Inject(method = "onGameJoin", at = @At("TAIL"))
|
||||||
|
|
@ -118,29 +105,18 @@ public class ClientPlayNetworkHandlerMixin {
|
||||||
@Inject(method = "sendChatMessage", at = @At("HEAD"), cancellable = true)
|
@Inject(method = "sendChatMessage", at = @At("HEAD"), cancellable = true)
|
||||||
private void sendChatMessage(String chatText, CallbackInfo ci) {
|
private void sendChatMessage(String chatText, CallbackInfo ci) {
|
||||||
final CommandManager commandManager = CommandManager.INSTANCE;
|
final CommandManager commandManager = CommandManager.INSTANCE;
|
||||||
|
|
||||||
final String secret = String.valueOf(Chat.secret);
|
|
||||||
|
|
||||||
if (chatText.startsWith(commandManager.prefix)) {
|
if (chatText.startsWith(commandManager.prefix)) {
|
||||||
commandManager.executeCommand(chatText.substring(commandManager.prefix.length()));
|
commandManager.executeCommand(chatText.substring(commandManager.prefix.length()));
|
||||||
|
|
||||||
ci.cancel();
|
|
||||||
} else if (!chatText.startsWith("/") && !chatText.startsWith(secret)) {
|
|
||||||
CustomChat.INSTANCE.chat(chatText);
|
|
||||||
|
|
||||||
ci.cancel();
|
ci.cancel();
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (chatText.startsWith(secret)) {
|
if (Chat.NEXT_CHAT_PLAYER.get()) {
|
||||||
final String content = chatText.substring(secret.length());
|
Chat.NEXT_CHAT_PLAYER.set(false);
|
||||||
|
return;
|
||||||
Instant instant = Instant.now();
|
|
||||||
long l = NetworkEncryptionUtils.SecureRandomUtil.nextLong();
|
|
||||||
LastSeenMessagesCollector.LastSeenMessages lastSeenMessages = this.lastSeenMessagesCollector.collect();
|
|
||||||
MessageSignatureData messageSignatureData = this.messagePacker.pack(new MessageBody(content, instant, l, lastSeenMessages.lastSeen()));
|
|
||||||
MinecraftClient.getInstance().getNetworkHandler().sendPacket(new ChatMessageC2SPacket(content, instant, l, messageSignatureData, lastSeenMessages.update()));
|
|
||||||
|
|
||||||
ci.cancel();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CustomChat.INSTANCE.chat(chatText);
|
||||||
|
ci.cancel();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,20 +0,0 @@
|
||||||
package land.chipmunk.chipmunkmod.mixin;
|
|
||||||
|
|
||||||
import net.minecraft.client.gui.widget.TextFieldWidget;
|
|
||||||
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;
|
|
||||||
|
|
||||||
@Mixin(TextFieldWidget.class)
|
|
||||||
public class TextFieldWidgetMixin {
|
|
||||||
@Shadow private int maxLength;
|
|
||||||
|
|
||||||
@Inject(method = "setMaxLength", at = @At("HEAD"), cancellable = true)
|
|
||||||
private void setMaxLength (int length, CallbackInfo ci) {
|
|
||||||
this.maxLength = Integer.MAX_VALUE;
|
|
||||||
|
|
||||||
ci.cancel();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -4,15 +4,15 @@ import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
import net.minecraft.client.network.ClientPlayNetworkHandler;
|
||||||
|
|
||||||
public class Chat {
|
public class Chat {
|
||||||
public static double secret = Math.random();
|
public static final ThreadLocal<Boolean> NEXT_CHAT_PLAYER = ThreadLocal.withInitial(() -> false);
|
||||||
|
|
||||||
public static void sendChatMessage (String message) { sendChatMessage(message, false); }
|
public static void sendChatMessage (String message) { sendChatMessage(message, false); }
|
||||||
public static void sendChatMessage (String message, boolean usePlayerChat) {
|
public static void sendChatMessage (String message, boolean usePlayerChat) {
|
||||||
if (message == null) return;
|
if (message == null) return;
|
||||||
|
|
||||||
final ClientPlayNetworkHandler networkHandler = MinecraftClient.getInstance().getNetworkHandler();
|
if (usePlayerChat) NEXT_CHAT_PLAYER.set(true);
|
||||||
|
|
||||||
if (usePlayerChat) networkHandler.sendChatMessage(secret + message);
|
final ClientPlayNetworkHandler networkHandler = MinecraftClient.getInstance().getNetworkHandler();
|
||||||
else networkHandler.sendChatMessage(message);
|
networkHandler.sendChatMessage(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -13,8 +13,7 @@
|
||||||
"MinecraftClientAccessor",
|
"MinecraftClientAccessor",
|
||||||
"StringHelperMixin",
|
"StringHelperMixin",
|
||||||
"ElderGuardianAppearanceParticleMixin",
|
"ElderGuardianAppearanceParticleMixin",
|
||||||
"SoundSystemMixin",
|
"SoundSystemMixin"
|
||||||
"TextFieldWidgetMixin"
|
|
||||||
],
|
],
|
||||||
"injectors": {
|
"injectors": {
|
||||||
"defaultRequire": 1
|
"defaultRequire": 1
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue