aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com')
-rw-r--r--src/main/java/com/raeids/stratus/hook/GuiNewChatHook.java4
-rw-r--r--src/main/java/com/raeids/stratus/mixin/GuiChatMixin.java35
-rw-r--r--src/main/java/com/raeids/stratus/mixin/GuiNewChatAccessor.java4
-rw-r--r--src/main/java/com/raeids/stratus/mixin/GuiNewChatMixin.java33
4 files changed, 56 insertions, 20 deletions
diff --git a/src/main/java/com/raeids/stratus/hook/GuiNewChatHook.java b/src/main/java/com/raeids/stratus/hook/GuiNewChatHook.java
index e37995a..aaa182e 100644
--- a/src/main/java/com/raeids/stratus/hook/GuiNewChatHook.java
+++ b/src/main/java/com/raeids/stratus/hook/GuiNewChatHook.java
@@ -2,10 +2,12 @@ package com.raeids.stratus.hook;
import net.minecraft.client.gui.ChatLine;
+import java.awt.datatransfer.Transferable;
+
public interface GuiNewChatHook {
int getRight();
boolean shouldCopy();
- String getStratusChatComponent(int mouseY);
+ Transferable getStratusChatComponent(int mouseY);
default ChatLine getFullMessage(ChatLine line) {
throw new AssertionError("getFullMessage not overridden on GuiNewChat");
}
diff --git a/src/main/java/com/raeids/stratus/mixin/GuiChatMixin.java b/src/main/java/com/raeids/stratus/mixin/GuiChatMixin.java
index 4b8142c..37fb0f3 100644
--- a/src/main/java/com/raeids/stratus/mixin/GuiChatMixin.java
+++ b/src/main/java/com/raeids/stratus/mixin/GuiChatMixin.java
@@ -1,27 +1,43 @@
package com.raeids.stratus.mixin;
+import com.google.common.collect.Lists;
import com.raeids.stratus.Stratus;
import com.raeids.stratus.config.StratusConfig;
import com.raeids.stratus.hook.*;
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.StringSelection;
+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(
+ "\u00A73\u00A7l\u00A7nCopy To Clipboard",
+ "\u00A7lNORMAL CLICK\u00A7r - Full Message",
+ "\u00A7lCTRL CLICK\u00A7r - Single Line",
+ "\u00A7lSHIFT CLICK\u00A7r - Screenshot Line",
+ "",
+ "\u00A73\u00A7l\u00A7nModifiers",
+ "\u00A7lALT\u00A7r - Formatting Codes");
+
private CleanSearchButton searchButton;
+ private ScreenshotButton screenshotButton;
@Inject(method = "initGui", at = @At("TAIL"))
private void init(CallbackInfo ci) {
@@ -29,6 +45,8 @@ public abstract class GuiChatMixin extends GuiScreen {
searchButton = new CleanSearchButton();
buttonList.add(searchButton);
}
+ screenshotButton = new ScreenshotButton();
+ buttonList.add(screenshotButton);
if (StratusConfig.INSTANCE.getChatTabs()) {
for (ChatTab chatTab : ChatTabs.INSTANCE.getTabs()) {
buttonList.add(chatTab.getButton());
@@ -56,14 +74,27 @@ public abstract class GuiChatMixin extends GuiScreen {
}
}
+ @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() + (Stratus.INSTANCE.isBetterChat() ? ModCompatHooks.getXOffset() : 0)) <= x && (hook.getRight() + (Stratus.INSTANCE.isBetterChat() ? ModCompatHooks.getXOffset() : 0)) + 9 > 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() + (Stratus.INSTANCE.isBetterChat() ? ModCompatHooks.getXOffset() : 0)) <= x && (hook.getRight() + (Stratus.INSTANCE.isBetterChat() ? ModCompatHooks.getXOffset() : 0)) + 9 > x) {
+ Transferable message = hook.getStratusChatComponent(Mouse.getY());
+ if (message == null) return;
try {
- Toolkit.getDefaultToolkit().getSystemClipboard().setContents(new StringSelection(hook.getStratusChatComponent(Mouse.getY())), null);
+ Toolkit.getDefaultToolkit().getSystemClipboard().setContents(message, null);
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/src/main/java/com/raeids/stratus/mixin/GuiNewChatAccessor.java b/src/main/java/com/raeids/stratus/mixin/GuiNewChatAccessor.java
index cc697d0..9b68d48 100644
--- a/src/main/java/com/raeids/stratus/mixin/GuiNewChatAccessor.java
+++ b/src/main/java/com/raeids/stratus/mixin/GuiNewChatAccessor.java
@@ -1,7 +1,6 @@
package com.raeids.stratus.mixin;
import net.minecraft.client.gui.ChatLine;
-import net.minecraft.client.gui.GuiChat;
import net.minecraft.client.gui.GuiNewChat;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Accessor;
@@ -12,4 +11,7 @@ import java.util.List;
public interface GuiNewChatAccessor {
@Accessor
List<ChatLine> getDrawnChatLines();
+
+ @Accessor
+ int getScrollPos();
}
diff --git a/src/main/java/com/raeids/stratus/mixin/GuiNewChatMixin.java b/src/main/java/com/raeids/stratus/mixin/GuiNewChatMixin.java
index 8d2602b..09c464b 100644
--- a/src/main/java/com/raeids/stratus/mixin/GuiNewChatMixin.java
+++ b/src/main/java/com/raeids/stratus/mixin/GuiNewChatMixin.java
@@ -1,12 +1,12 @@
package com.raeids.stratus.mixin;
-import com.google.common.collect.Lists;
import com.raeids.stratus.Stratus;
import com.raeids.stratus.config.StratusConfig;
import com.raeids.stratus.hook.ChatSearchingKt;
import com.raeids.stratus.hook.ChatTabs;
import com.raeids.stratus.hook.GuiNewChatHook;
import com.raeids.stratus.hook.ModCompatHooks;
+import com.raeids.stratus.utils.RenderHelper;
import gg.essential.universal.UMouse;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.*;
@@ -15,7 +15,6 @@ import net.minecraft.util.EnumChatFormatting;
import net.minecraft.util.IChatComponent;
import net.minecraft.util.MathHelper;
import net.minecraft.util.ResourceLocation;
-import net.minecraftforge.fml.client.config.GuiUtils;
import org.spongepowered.asm.lib.Opcodes;
import org.spongepowered.asm.mixin.Final;
import org.spongepowered.asm.mixin.Mixin;
@@ -25,6 +24,9 @@ import org.spongepowered.asm.mixin.injection.*;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import org.spongepowered.asm.mixin.injection.invoke.arg.Args;
+import java.awt.datatransfer.StringSelection;
+import java.awt.datatransfer.Transferable;
+import java.awt.image.BufferedImage;
import java.util.List;
@Mixin(value = GuiNewChat.class, priority = Integer.MIN_VALUE)
@@ -51,14 +53,6 @@ public abstract class GuiNewChatMixin extends Gui implements GuiNewChatHook {
@Unique private static final ResourceLocation COPY = new ResourceLocation("stratus:copy.png");
- @Unique private static final List<String> COPY_TOOLTIP = Lists.newArrayList(
- "\u00A73\u00A7l\u00A7nCopy To Clipboard",
- "\u00A7lNORMAL CLICK\u00A7r - Full Message",
- "\u00A7lCTRL CLICK\u00A7r - Single Line",
- "",
- "\u00A73\u00A7l\u00A7nModifiers",
- "\u00A7lALT\u00A7r - Formatting Codes");
-
@Inject(method = "printChatMessageWithOptionalDeletion", at = @At("HEAD"), cancellable = true)
private void handlePrintChatMessage(IChatComponent chatComponent, int chatLineId, CallbackInfo ci) {
handleChatTabMessage(chatComponent, chatLineId, mc.ingameGUI.getUpdateCounter(), false, ci);
@@ -104,7 +98,7 @@ public abstract class GuiNewChatMixin extends Gui implements GuiNewChatHook {
mouseY = -(MathHelper.floor_float((float)mouseY / f)); //WHY DO I NEED TO DO THIS
if (mouseX >= (left + (Stratus.INSTANCE.isBetterChat() ? ModCompatHooks.getXOffset() : 0)) && mouseY < bottom && mouseX < (right + 9 + (Stratus.INSTANCE.isBetterChat() ? ModCompatHooks.getXOffset() : 0)) && mouseY >= top) {
stratus$shouldCopy = true;
- drawCopyChatBox(right, top, mouseX, mouseY);
+ drawCopyChatBox(right, top);
}
}
}
@@ -150,7 +144,7 @@ public abstract class GuiNewChatMixin extends Gui implements GuiNewChatHook {
}
}
- private void drawCopyChatBox(int right, int top, int mouseX, int mouseY) {
+ private void drawCopyChatBox(int right, int top) {
stratus$chatCheck = true;
GlStateManager.enableRescaleNormal();
GlStateManager.enableBlend();
@@ -166,7 +160,6 @@ public abstract class GuiNewChatMixin extends Gui implements GuiNewChatHook {
GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
stratus$right = right;
Gui.drawModalRectWithCustomSizedTexture(right, top, 0f, 0f, 9, 9, 9, 9);
- if (mouseX >= right) GuiUtils.drawHoveringText(COPY_TOOLTIP, mouseX, mouseY, mc.currentScreen.width, mc.currentScreen.height, 300, mc.fontRendererObj);
GlStateManager.disableAlpha();
GlStateManager.disableRescaleNormal();
GlStateManager.disableLighting();
@@ -174,7 +167,7 @@ public abstract class GuiNewChatMixin extends Gui implements GuiNewChatHook {
}
@Override
- public String getStratusChatComponent(int mouseY) {
+ public Transferable getStratusChatComponent(int mouseY) {
if (this.getChatOpen()) {
ScaledResolution scaledresolution = new ScaledResolution(this.mc);
int i = scaledresolution.getScaleFactor();
@@ -190,9 +183,17 @@ public abstract class GuiNewChatMixin extends Gui implements GuiNewChatHook {
if (i1 >= 0 && i1 < this.drawnChatLines.size()) {
ChatLine subLine = this.drawnChatLines.get(i1);
- ChatLine line = GuiScreen.isCtrlKeyDown() ? subLine : this.getFullMessage(subLine);
+ ChatLine fullLine = this.getFullMessage(subLine);
+ if (GuiScreen.isShiftKeyDown()) {
+ if (fullLine != null) {
+ BufferedImage image = Stratus.INSTANCE.screenshotLine(fullLine);
+ if (image != null) RenderHelper.INSTANCE.copyBufferedImageToClipboard(image);
+ }
+ return null;
+ }
+ ChatLine line = GuiScreen.isCtrlKeyDown() ? subLine : fullLine;
String message = line == null ? "Could not find chat message." : line.getChatComponent().getFormattedText();
- return GuiScreen.isAltKeyDown() ? message : EnumChatFormatting.getTextWithoutFormattingCodes(message);
+ return new StringSelection(GuiScreen.isAltKeyDown() ? message : EnumChatFormatting.getTextWithoutFormattingCodes(message));
}
}