aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/cc/woverflow/chatting/mixin/GuiChatMixin.java
diff options
context:
space:
mode:
authorWyvest <45589059+Wyvest@users.noreply.github.com>2022-01-03 11:12:54 +0700
committerWyvest <45589059+Wyvest@users.noreply.github.com>2022-01-03 11:12:54 +0700
commit487709996c22fb0dbcac792076be799a09865600 (patch)
tree5ab6f27a54d673fb057fd3eafd9a5e27816f898c /src/main/java/cc/woverflow/chatting/mixin/GuiChatMixin.java
parentdf895d122a8a2ea249e686578e026c1d0a8b8c47 (diff)
downloadChatting-487709996c22fb0dbcac792076be799a09865600.tar.gz
Chatting-487709996c22fb0dbcac792076be799a09865600.tar.bz2
Chatting-487709996c22fb0dbcac792076be799a09865600.zip
Chattils -> Chatting (1.1.0)
Update images (ty Mo2men) update screenshot line tooltip (ty Mo2men)
Diffstat (limited to 'src/main/java/cc/woverflow/chatting/mixin/GuiChatMixin.java')
-rw-r--r--src/main/java/cc/woverflow/chatting/mixin/GuiChatMixin.java117
1 files changed, 117 insertions, 0 deletions
diff --git a/src/main/java/cc/woverflow/chatting/mixin/GuiChatMixin.java b/src/main/java/cc/woverflow/chatting/mixin/GuiChatMixin.java
new file mode 100644
index 0000000..73b76e7
--- /dev/null
+++ b/src/main/java/cc/woverflow/chatting/mixin/GuiChatMixin.java
@@ -0,0 +1,117 @@
+package cc.woverflow.chatting.mixin;
+
+import cc.woverflow.chatting.chat.ChatSearchingManager;
+import cc.woverflow.chatting.chat.ChatShortcuts;
+import cc.woverflow.chatting.chat.ChatTab;
+import cc.woverflow.chatting.chat.ChatTabs;
+import cc.woverflow.chatting.config.ChattingConfig;
+import cc.woverflow.chatting.gui.components.ScreenshotButton;
+import cc.woverflow.chatting.gui.components.SearchButton;
+import cc.woverflow.chatting.hook.GuiNewChatHook;
+import cc.woverflow.chatting.utils.ModCompatHooks;
+import com.google.common.collect.Lists;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.GuiChat;
+import net.minecraft.client.gui.GuiScreen;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.util.MathHelper;
+import net.minecraftforge.fml.client.config.GuiUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.lwjgl.input.Mouse;
+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.ModifyArg;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+import java.awt.*;
+import java.awt.datatransfer.Transferable;
+import java.util.List;
+
+@Mixin(GuiChat.class)
+public abstract class GuiChatMixin extends GuiScreen {
+
+ @Unique
+ private static final List<String> COPY_TOOLTIP = Lists.newArrayList(
+ "\u00A7e\u00A7lCopy To Clipboard",
+ "\u00A7b\u00A7lNORMAL CLICK\u00A7r \u00A78- \u00A77Full Message",
+ "\u00A7b\u00A7lCTRL CLICK\u00A7r \u00A78- \u00A77Single Line",
+ "\u00A7b\u00A7lSHIFT CLICK\u00A7r \u00A78- \u00A77Screenshot Line",
+ "",
+ "\u00A7e\u00A7lModifiers",
+ "\u00A7b\u00A7lALT\u00A7r \u00A78- \u00A77Formatting Codes");
+
+ private SearchButton searchButton;
+
+ @Inject(method = "initGui", at = @At("TAIL"))
+ private void init(CallbackInfo ci) {
+ if (ChattingConfig.INSTANCE.getChatSearch()) {
+ searchButton = new SearchButton();
+ buttonList.add(searchButton);
+ }
+ buttonList.add(new ScreenshotButton());
+ if (ChattingConfig.INSTANCE.getChatTabs()) {
+ for (ChatTab chatTab : ChatTabs.INSTANCE.getTabs()) {
+ buttonList.add(chatTab.getButton());
+ }
+ }
+ }
+
+ @Inject(method = "updateScreen", at = @At("HEAD"))
+ private void updateScreen(CallbackInfo ci) {
+ if (ChattingConfig.INSTANCE.getChatSearch() && searchButton.isEnabled()) {
+ searchButton.getInputField().updateCursorCounter();
+ }
+ }
+
+ @Inject(method = "keyTyped", at = @At("HEAD"), cancellable = true)
+ private void keyTyped(char typedChar, int keyCode, CallbackInfo ci) {
+ if (ChattingConfig.INSTANCE.getChatSearch() && searchButton.isEnabled()) {
+ ci.cancel();
+ if (keyCode == 1) {
+ searchButton.onMousePress();
+ return;
+ }
+ searchButton.getInputField().textboxKeyTyped(typedChar, keyCode);
+ ChatSearchingManager.setPrevText(searchButton.getInputField().getText());
+ }
+ }
+
+ @Inject(method = "drawScreen", at = @At("HEAD"))
+ private void onDrawScreen(int mouseX, int mouseY, float partialTicks, CallbackInfo ci) {
+ GuiNewChatHook hook = ((GuiNewChatHook) Minecraft.getMinecraft().ingameGUI.getChatGUI());
+ float f = mc.ingameGUI.getChatGUI().getChatScale();
+ int x = MathHelper.floor_float((float) mouseX / f);
+ if (hook.shouldCopy() && (hook.getRight() + ModCompatHooks.getXOffset()) <= x && (hook.getRight() + ModCompatHooks.getXOffset()) + 11 > x) {
+ GuiUtils.drawHoveringText(COPY_TOOLTIP, mouseX, mouseY, width, height, -1, fontRendererObj);
+ GlStateManager.disableLighting();
+ }
+ }
+
+ @Inject(method = "mouseClicked", at = @At("HEAD"))
+ private void mouseClicked(int mouseX, int mouseY, int mouseButton, CallbackInfo ci) {
+ GuiNewChatHook hook = ((GuiNewChatHook) Minecraft.getMinecraft().ingameGUI.getChatGUI());
+ float f = mc.ingameGUI.getChatGUI().getChatScale();
+ int x = MathHelper.floor_float((float) mouseX / f);
+ if (hook.shouldCopy() && (hook.getRight() + ModCompatHooks.getXOffset()) <= x && (hook.getRight() + ModCompatHooks.getXOffset()) + 11 > x) {
+ Transferable message = hook.getChattingChatComponent(Mouse.getY());
+ if (message == null) return;
+ try {
+ Toolkit.getDefaultToolkit().getSystemClipboard().setContents(message, null);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ @ModifyArg(method = "keyTyped", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiChat;sendChatMessage(Ljava/lang/String;)V"), index = 0)
+ private String modifySentMessage(String original) {
+ if (ChattingConfig.INSTANCE.getChatShortcuts()) {
+ if (original.startsWith("/")) {
+ return "/" + ChatShortcuts.INSTANCE.handleSentCommand(StringUtils.substringAfter(original, "/"));
+ }
+ }
+ return original;
+ }
+}