aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/cc/woverflow/chatting/mixin/EntityPlayerSPMixin.java5
-rw-r--r--src/main/java/cc/woverflow/chatting/mixin/GuiNewChatMixin_Scrolling.java3
-rw-r--r--src/main/java/cc/woverflow/chatting/mixin/GuiNewChatMixin_SmoothMessages.java36
-rw-r--r--src/main/kotlin/cc/woverflow/chatting/Chatting.kt7
-rw-r--r--src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt14
-rw-r--r--src/main/kotlin/cc/woverflow/chatting/utils/EaseOutQuart.kt7
6 files changed, 52 insertions, 20 deletions
diff --git a/src/main/java/cc/woverflow/chatting/mixin/EntityPlayerSPMixin.java b/src/main/java/cc/woverflow/chatting/mixin/EntityPlayerSPMixin.java
index b253fe1..fa125cb 100644
--- a/src/main/java/cc/woverflow/chatting/mixin/EntityPlayerSPMixin.java
+++ b/src/main/java/cc/woverflow/chatting/mixin/EntityPlayerSPMixin.java
@@ -24,11 +24,16 @@ public class EntityPlayerSPMixin {
return;
}
if (ChattingConfig.INSTANCE.getChatTabs() && !ChatTabs.INSTANCE.getCurrentTabs().isEmpty()) {
+ boolean sent = false;
for (ChatTab tab : ChatTabs.INSTANCE.getCurrentTabs()) {
if (tab.getPrefix() != null && !tab.getPrefix().isEmpty()) {
sendQueue.addToSendQueue(new C01PacketChatMessage(tab.getPrefix() + value));
+ sent = true;
}
}
+ if (!sent) {
+ sendQueue.addToSendQueue(packet);
+ }
} else {
sendQueue.addToSendQueue(packet);
}
diff --git a/src/main/java/cc/woverflow/chatting/mixin/GuiNewChatMixin_Scrolling.java b/src/main/java/cc/woverflow/chatting/mixin/GuiNewChatMixin_Scrolling.java
index 8598a94..c87ec6f 100644
--- a/src/main/java/cc/woverflow/chatting/mixin/GuiNewChatMixin_Scrolling.java
+++ b/src/main/java/cc/woverflow/chatting/mixin/GuiNewChatMixin_Scrolling.java
@@ -43,7 +43,6 @@ public abstract class GuiNewChatMixin_Scrolling extends Gui {
scrollPos = (int) chatting$scrollingAnimation.get(Chatting.INSTANCE.getDeltaTicks());
}
}
- Chatting.INSTANCE.setDeltaTicks(0);
}
@Redirect(method = "drawChat", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/gui/GuiNewChat;drawRect(IIIII)V", ordinal = 1))
@@ -66,7 +65,7 @@ public abstract class GuiNewChatMixin_Scrolling extends Gui {
ci.cancel();
ChatScrollingHook.INSTANCE.setShouldSmooth(false);
int result = (int) MathUtils.clamp(scrollPos + amount, 0, Math.max(drawnChatLines.size() - getLineCount() - 1, 0));
- chatting$scrollingAnimation = new EaseOutQuad(150, scrollPos, result, false);
+ chatting$scrollingAnimation = new EaseOutQuad((int) (ChattingConfig.INSTANCE.getScrollingSpeed() * 1000), scrollPos, result, false);
}
}
}
diff --git a/src/main/java/cc/woverflow/chatting/mixin/GuiNewChatMixin_SmoothMessages.java b/src/main/java/cc/woverflow/chatting/mixin/GuiNewChatMixin_SmoothMessages.java
index 65140aa..ee94a35 100644
--- a/src/main/java/cc/woverflow/chatting/mixin/GuiNewChatMixin_SmoothMessages.java
+++ b/src/main/java/cc/woverflow/chatting/mixin/GuiNewChatMixin_SmoothMessages.java
@@ -1,9 +1,10 @@
package cc.woverflow.chatting.mixin;
-import cc.polyfrost.oneconfig.utils.MathUtils;
+import cc.woverflow.chatting.Chatting;
import cc.woverflow.chatting.chat.ChatSearchingManager;
import cc.woverflow.chatting.chat.ChatTabs;
import cc.woverflow.chatting.config.ChattingConfig;
+import cc.woverflow.chatting.utils.EaseOutQuart;
import net.minecraft.client.gui.GuiNewChat;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.util.EnumChatFormatting;
@@ -20,6 +21,10 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.List;
import java.util.Locale;
+/**
+ * Taken from BetterChat under LGPL 3.0
+ * <a href="https://github.com/LlamaLad7/Better-Chat/blob/1.8.9/LICENSE">https://github.com/LlamaLad7/Better-Chat/blob/1.8.9/LICENSE</a>
+ */
@Mixin(GuiNewChat.class)
public abstract class GuiNewChatMixin_SmoothMessages {
@Shadow
@@ -27,30 +32,25 @@ public abstract class GuiNewChatMixin_SmoothMessages {
@Shadow
public abstract float getChatScale();
-
- private float chatting$percentComplete; //be nice and allow other mods to access this :)
@Unique
private int chatting$newLines;
- @Unique
- private long chatting$prevMillis = System.currentTimeMillis();
- @Unique
+
+ private EaseOutQuart chatting$easeOutQuart;
private float chatting$animationPercent;
@Unique
private int chatting$lineBeingDrawn;
- private void updatePercentage(long diff) {
- if (chatting$percentComplete < 1) chatting$percentComplete += 0.004f * diff;
- chatting$percentComplete = MathUtils.clamp(chatting$percentComplete, 0, 1);
- }
-
@Inject(method = "drawChat", at = @At("HEAD"))
private void modifyChatRendering(CallbackInfo ci) {
- long current = System.currentTimeMillis();
- long diff = current - chatting$prevMillis;
- chatting$prevMillis = current;
- updatePercentage(diff);
- float t = chatting$percentComplete;
- chatting$animationPercent = MathUtils.clamp(1 - (--t) * t * t * t, 0, 1);
+ if (chatting$easeOutQuart != null) {
+ if (chatting$easeOutQuart.isFinished()) {
+ chatting$easeOutQuart = null;
+ } else {
+ chatting$animationPercent = chatting$easeOutQuart.get(Chatting.INSTANCE.getDeltaTicks());
+ }
+ } else {
+ chatting$animationPercent = 1;
+ }
}
@Inject(method = "drawChat", at = @At(value = "INVOKE", target = "Lnet/minecraft/client/renderer/GlStateManager;pushMatrix()V", ordinal = 0, shift = At.Shift.AFTER))
@@ -88,7 +88,7 @@ public abstract class GuiNewChatMixin_SmoothMessages {
ChatTabs.INSTANCE.setHasCancelledAnimation(false);
return;
}
- chatting$percentComplete = 0;
+ chatting$easeOutQuart = new EaseOutQuart(ChattingConfig.INSTANCE.getMessageSpeed() * 1000f, 0f, 1f, false);
}
@ModifyVariable(method = "setChatLine", at = @At("STORE"), ordinal = 0)
diff --git a/src/main/kotlin/cc/woverflow/chatting/Chatting.kt b/src/main/kotlin/cc/woverflow/chatting/Chatting.kt
index 7560537..85204d8 100644
--- a/src/main/kotlin/cc/woverflow/chatting/Chatting.kt
+++ b/src/main/kotlin/cc/woverflow/chatting/Chatting.kt
@@ -155,6 +155,13 @@ object Chatting {
}
@SubscribeEvent
+ fun onRenderTickEnd(event: RenderTickEvent) {
+ if (event.phase == TickEvent.Phase.END) {
+ deltaTicks = 0f
+ }
+ }
+
+ @SubscribeEvent
fun onTickEvent(event: TickEvent.ClientTickEvent) {
if (event.phase == TickEvent.Phase.START && Minecraft.getMinecraft().theWorld != null && Minecraft.getMinecraft().thePlayer != null && (Minecraft.getMinecraft().currentScreen == null || Minecraft.getMinecraft().currentScreen is GuiChat)) {
if (doTheThing) {
diff --git a/src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt b/src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt
index 599f101..9fa67ed 100644
--- a/src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt
+++ b/src/main/kotlin/cc/woverflow/chatting/config/ChattingConfig.kt
@@ -60,12 +60,26 @@ object ChattingConfig : Config(
)
var smoothChat = true
+ @Slider(
+ name = "Message Animation Speed",
+ category = "Animations", subcategory = "Messages",
+ min = 0.0f, max = 1.0f
+ )
+ var messageSpeed = 0.5f
+
@Switch(
name = "Smooth Chat Scrolling",
category = "Animations", subcategory = "Scrolling"
)
var smoothScrolling = true
+ @Slider(
+ name = "Scrolling Animation Speed",
+ category = "Animations", subcategory = "Scrolling",
+ min = 0.0f, max = 1.0f
+ )
+ var scrollingSpeed = 0.15f
+
@Switch(
name = "Remove Scroll Bar",
category = "Animations", subcategory = "Scrolling"
diff --git a/src/main/kotlin/cc/woverflow/chatting/utils/EaseOutQuart.kt b/src/main/kotlin/cc/woverflow/chatting/utils/EaseOutQuart.kt
new file mode 100644
index 0000000..7943b4d
--- /dev/null
+++ b/src/main/kotlin/cc/woverflow/chatting/utils/EaseOutQuart.kt
@@ -0,0 +1,7 @@
+package cc.woverflow.chatting.utils
+
+import cc.polyfrost.oneconfig.gui.animations.Animation
+
+class EaseOutQuart(duration: Float, start: Float, end: Float, reverse: Boolean) : Animation(duration, start, end, reverse) {
+ override fun animate(x: Float) = -1 * (x - 1) * (x - 1) * (x - 1) * (x - 1) + 1
+} \ No newline at end of file