From 3bf428dc26f1292fa4c25bb076237dcaa36f5609 Mon Sep 17 00:00:00 2001 From: Light_Quanta Date: Tue, 21 May 2024 19:59:44 +0800 Subject: [PATCH] =?UTF-8?q?=E9=87=8D=E5=86=99=E6=B6=88=E5=A4=B1=E5=8A=A8?= =?UTF-8?q?=E7=94=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../client/screens/KillMessageOverlay.java | 26 ++++++++++++++++--- .../target/event/KillMessageHandler.java | 16 +++++++----- .../target/tools/PlayerKillRecord.java | 2 ++ 3 files changed, 34 insertions(+), 10 deletions(-) diff --git a/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java b/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java index eb797a063..fee68afc5 100644 --- a/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java +++ b/src/main/java/net/mcreator/target/client/screens/KillMessageOverlay.java @@ -54,10 +54,29 @@ public class KillMessageOverlay { } float totalTop = 5; - for (PlayerKillRecord record : KillMessageHandler.QUEUE) { - totalTop = renderKillMessages(record, event, totalTop); + + var arr = KillMessageHandler.QUEUE.toArray(new PlayerKillRecord[0]); + var record = arr[0]; + + if (record.freeze) { + for (var playerKillRecord : arr) { + playerKillRecord.freeze = false; + } } + if (record.tick >= 80) { + if (arr.length > 1 && record.tick - arr[1].tick < (record.fastRemove ? 2 : 20)) { + arr[1].fastRemove = true; + record.fastRemove = true; + for (int j = 1; j < arr.length; j++) { + arr[j].freeze = true; + } + } + } + + for (PlayerKillRecord r : KillMessageHandler.QUEUE) { + totalTop = renderKillMessages(r, event, totalTop); + } } private static float renderKillMessages(PlayerKillRecord record, RenderGuiEvent.Pre event, float baseTop) { @@ -101,7 +120,8 @@ public class KillMessageOverlay { // 4s后开始消失 if (record.tick >= 80) { - float rate = (float) Math.pow((record.tick + event.getPartialTick() - 80) / 20, 5); + int animationTickCount = record.fastRemove ? 2 : 20; + float rate = (float) Math.pow((record.tick + event.getPartialTick() - 80) / animationTickCount, 5); gui.pose().translate(rate * 100, 0, 0); gui.setColor(1, 1, 1, 1 - rate); baseTop += 10 * (1 - rate); diff --git a/src/main/java/net/mcreator/target/event/KillMessageHandler.java b/src/main/java/net/mcreator/target/event/KillMessageHandler.java index 4dce4a61e..51e2a5abd 100644 --- a/src/main/java/net/mcreator/target/event/KillMessageHandler.java +++ b/src/main/java/net/mcreator/target/event/KillMessageHandler.java @@ -17,14 +17,16 @@ public class KillMessageHandler { @SubscribeEvent public static void onClientTick(TickEvent.ClientTickEvent event) { - if (event.phase == TickEvent.Phase.END) { - for (PlayerKillRecord record : QUEUE) { - record.tick++; - if (record.tick >= 100) { - QUEUE.poll(); - } + if (event.phase != TickEvent.Phase.END) return; + + for (PlayerKillRecord record : QUEUE) { + if (record.freeze && record.tick >= 3) { + continue; + } + record.tick++; + if (record.fastRemove && record.tick >= 82 || record.tick >= 100) { + QUEUE.poll(); } } } - } diff --git a/src/main/java/net/mcreator/target/tools/PlayerKillRecord.java b/src/main/java/net/mcreator/target/tools/PlayerKillRecord.java index 3b5ff8f0b..c6f8f2697 100644 --- a/src/main/java/net/mcreator/target/tools/PlayerKillRecord.java +++ b/src/main/java/net/mcreator/target/tools/PlayerKillRecord.java @@ -12,6 +12,8 @@ public class PlayerKillRecord { public ItemStack stack; public boolean headshot; public int tick; + public boolean freeze; + public boolean fastRemove; public ResourceKey damageType; public PlayerKillRecord(Player attacker, Entity target, ItemStack stack, boolean headshot, ResourceKey damageType) {