From b5e03fc5135c444faf11f1e64377f9da9ca7059d Mon Sep 17 00:00:00 2001 From: IM23a-spirgif Date: Fri, 28 Mar 2025 20:51:41 +0100 Subject: [PATCH] Initial Commit --- build.gradle | 1 - .../knockedback/ExecuteKnockedPacket.java | 4 +- .../fretux/knockedback/KnockedManager.java | 21 +- .../fretux/knockedback/KnockedTimePacket.java | 2 - .../fretux/knockedback/NetworkHandler.java | 5 + .../client/KnockedTimeOverlay.java | 7 +- .../animations/model.animation.json | 353 ++++++++++++++++++ src/main/resources/en_us.json | 4 - 8 files changed, 375 insertions(+), 22 deletions(-) create mode 100644 src/main/resources/assets/knockedback/animations/model.animation.json delete mode 100644 src/main/resources/en_us.json diff --git a/build.gradle b/build.gradle index 5fa3a32..5c3034f 100644 --- a/build.gradle +++ b/build.gradle @@ -135,7 +135,6 @@ dependencies { // compileOnly fg.deobf("mezz.jei:jei-${mc_version}-common-api:${jei_version}") // compileOnly fg.deobf("mezz.jei:jei-${mc_version}-forge-api:${jei_version}") // runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}-forge:${jei_version}") - // Example mod dependency using a mod jar from ./libs with a flat dir repository // This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar // The group id is ignored when searching -- in this case, it is "blank" diff --git a/src/main/java/net/fretux/knockedback/ExecuteKnockedPacket.java b/src/main/java/net/fretux/knockedback/ExecuteKnockedPacket.java index 1a6588c..cb7967f 100644 --- a/src/main/java/net/fretux/knockedback/ExecuteKnockedPacket.java +++ b/src/main/java/net/fretux/knockedback/ExecuteKnockedPacket.java @@ -32,7 +32,9 @@ public class ExecuteKnockedPacket { private static LivingEntity findNearestKnockedEntity(ServerPlayer executor) { return KnockedManager.getKnockedUuids().stream() .map(uuid -> NetworkHandlerHelper.getPlayerByUuid(executor.getServer(), uuid)) - .filter(player -> player != null && player.distanceTo(executor) <= (float) PlayerExecutionHandler.EXECUTION_RANGE) + .filter(player -> player != null + && !player.getUUID().equals(executor.getUUID()) + && player.distanceTo(executor) <= (float) PlayerExecutionHandler.EXECUTION_RANGE) .findFirst() .orElse(null); } diff --git a/src/main/java/net/fretux/knockedback/KnockedManager.java b/src/main/java/net/fretux/knockedback/KnockedManager.java index 0a52a0e..8a47ad7 100644 --- a/src/main/java/net/fretux/knockedback/KnockedManager.java +++ b/src/main/java/net/fretux/knockedback/KnockedManager.java @@ -11,7 +11,7 @@ import net.minecraftforge.network.PacketDistributor; import java.util.*; -@Mod.EventBusSubscriber +@Mod.EventBusSubscriber(modid = KnockedBack.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE) public class KnockedManager { private static final Map knockedEntities = new HashMap<>(); private static final Set grippedEntities = new HashSet<>(); @@ -56,8 +56,13 @@ public class KnockedManager { Map.Entry entry = it.next(); UUID entityId = entry.getKey(); int timeLeft = entry.getValue(); - // If the player is not gripped, update the countdown - if (!grippedEntities.contains(entityId)) { + + // If the player is gripped, force the timer to 0 + if (grippedEntities.contains(entityId)) { + entry.setValue(0); + timeLeft = 0; + } else { + // If not gripped, decrease normally timeLeft--; if (timeLeft <= 0) { it.remove(); @@ -66,23 +71,21 @@ public class KnockedManager { entry.setValue(timeLeft); } } + // Send the updated time to the knocked player ServerPlayer knockedPlayer = NetworkHandlerHelper.getPlayerByUuid( net.minecraftforge.server.ServerLifecycleHooks.getCurrentServer(), entityId); if (knockedPlayer != null) { NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> knockedPlayer), - new net.fretux.knockedback.KnockedTimePacket(timeLeft)); + new KnockedTimePacket(timeLeft)); } } } - @SubscribeEvent public static void onLivingHurt(LivingHurtEvent event) { LivingEntity entity = event.getEntity(); if (!isKnocked(entity)) return; - - // Always reset the timer regardless of other conditions knockedEntities.put(entity.getUUID(), KNOCKED_DURATION); DamageSource source = event.getSource(); @@ -100,11 +103,9 @@ public class KnockedManager { if ((damageType.equals("fall") || damageType.equals("explosion") || damageType.equals("explosion.player")) && event.getAmount() >= entity.getHealth()) { entity.setHealth(0.0F); - removeKnockedState(entity); + removeKnockedState(entity); return; } - - // Still cancel damage for non-lethal hits, but **reset timer** event.setCanceled(true); } } \ No newline at end of file diff --git a/src/main/java/net/fretux/knockedback/KnockedTimePacket.java b/src/main/java/net/fretux/knockedback/KnockedTimePacket.java index d417147..fd0985b 100644 --- a/src/main/java/net/fretux/knockedback/KnockedTimePacket.java +++ b/src/main/java/net/fretux/knockedback/KnockedTimePacket.java @@ -3,8 +3,6 @@ package net.fretux.knockedback; import net.fretux.knockedback.client.ClientKnockedState; import net.minecraft.network.FriendlyByteBuf; import net.minecraftforge.network.NetworkEvent; -import net.minecraftforge.network.PacketDistributor; -import net.fretux.knockedback.KnockedBack; import java.util.function.Supplier; public class KnockedTimePacket { diff --git a/src/main/java/net/fretux/knockedback/NetworkHandler.java b/src/main/java/net/fretux/knockedback/NetworkHandler.java index ab99b5b..7482d33 100644 --- a/src/main/java/net/fretux/knockedback/NetworkHandler.java +++ b/src/main/java/net/fretux/knockedback/NetworkHandler.java @@ -22,5 +22,10 @@ public class NetworkHandler { ExecuteKnockedPacket::encode, ExecuteKnockedPacket::decode, ExecuteKnockedPacket::handle); + CHANNEL.registerMessage(id++, + KnockedTimePacket.class, + KnockedTimePacket::encode, + KnockedTimePacket::decode, + KnockedTimePacket::handle); } } \ No newline at end of file diff --git a/src/main/java/net/fretux/knockedback/client/KnockedTimeOverlay.java b/src/main/java/net/fretux/knockedback/client/KnockedTimeOverlay.java index 8abab21..9a0100c 100644 --- a/src/main/java/net/fretux/knockedback/client/KnockedTimeOverlay.java +++ b/src/main/java/net/fretux/knockedback/client/KnockedTimeOverlay.java @@ -1,14 +1,14 @@ package net.fretux.knockedback.client; import net.fretux.knockedback.KnockedBack; +import net.fretux.knockedback.client.ClientKnockedState; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiGraphics; -import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.RenderGuiOverlayEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod; -@Mod.EventBusSubscriber(modid = KnockedBack.MOD_ID, value = Dist.CLIENT) +@Mod.EventBusSubscriber(modid = KnockedBack.MOD_ID, value = net.minecraftforge.api.distmarker.Dist.CLIENT) public class KnockedTimeOverlay { @SubscribeEvent @@ -23,7 +23,6 @@ public class KnockedTimeOverlay { int x = screenWidth / 2 - mc.font.width(text) / 2; int y = 10; // 10 pixels from the top - // Draw the text with a drop shadow (true = drop shadow) guiGraphics.drawString(mc.font, text, x, y, 0xFFFFFF, true); } -} \ No newline at end of file +} diff --git a/src/main/resources/assets/knockedback/animations/model.animation.json b/src/main/resources/assets/knockedback/animations/model.animation.json new file mode 100644 index 0000000..12da131 --- /dev/null +++ b/src/main/resources/assets/knockedback/animations/model.animation.json @@ -0,0 +1,353 @@ +{ + "format_version": "1.8.0", + "animations": { + "animation.model.gripping": { + "animation_length": 1.6667, + "bones": { + "head": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [17.5, 0, 0] + }, + "0.75": { + "vector": [17.5, 0, 0] + }, + "1.0": { + "vector": [27.5, 0, 0] + }, + "1.1667": { + "vector": [17.5, 0, 0] + }, + "1.3333": { + "vector": [27.5, 0, 0] + }, + "1.5": { + "vector": [17.5, 0, 0] + }, + "1.6667": { + "vector": [27.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, -10, 0] + }, + "1.0": { + "vector": [0, -10, 0] + }, + "1.1667": { + "vector": [0, -10, 0] + }, + "1.3333": { + "vector": [0, -10, 0] + }, + "1.5": { + "vector": [0, -10, 0] + }, + "1.6667": { + "vector": [0, -10, 0] + } + } + }, + "headwear": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [20, 0, 0] + }, + "0.75": { + "vector": [20, 0, 0] + }, + "1.0": { + "vector": [30, 0, 0] + }, + "1.1667": { + "vector": [20, 0, 0] + }, + "1.3333": { + "vector": [30, 0, 0] + }, + "1.5": { + "vector": [20, 0, 0] + }, + "1.6667": { + "vector": [30, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, -10, 0] + }, + "1.0": { + "vector": [0, -10, 0] + }, + "1.1667": { + "vector": [0, -10, 0] + }, + "1.3333": { + "vector": [0, -10, 0] + }, + "1.5": { + "vector": [0, -10, 0] + }, + "1.6667": { + "vector": [0, -10, 0] + } + } + }, + "body": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [10, 0, 0] + }, + "0.75": { + "vector": [10, 0, 0] + }, + "1.0": { + "vector": [20, 0, 0] + }, + "1.1667": { + "vector": [10, 0, 0] + }, + "1.3333": { + "vector": [20, 0, 0] + }, + "1.5": { + "vector": [10, 0, 0] + }, + "1.6667": { + "vector": [25, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, -10, 0] + }, + "1.0": { + "vector": [0, -10, -1] + }, + "1.1667": { + "vector": [0, -10, 0] + }, + "1.3333": { + "vector": [0, -10, -1] + }, + "1.5": { + "vector": [0, -10, 0] + }, + "1.6667": { + "vector": [0, -10, 0] + } + } + }, + "left_arm": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [-15, 0, 0] + }, + "0.75": { + "vector": [-109.72644, 22.52101, -11.14843] + }, + "1.0": { + "vector": [-48.06937, 32.13921, -2.14046] + }, + "1.1667": { + "vector": [-109.72644, 22.52101, -11.14843] + }, + "1.3333": { + "vector": [-48.06937, 32.13921, -2.14046] + }, + "1.5": { + "vector": [-109.72644, 22.52101, -11.14843] + }, + "1.6667": { + "vector": [-48.06937, 32.13921, -2.14046] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, -10, 0] + }, + "1.0": { + "vector": [0, -10, 0] + }, + "1.1667": { + "vector": [0, -10, 0] + }, + "1.3333": { + "vector": [0, -10, 0] + }, + "1.5": { + "vector": [0, -10, 0] + }, + "1.6667": { + "vector": [0, -10, 0] + } + } + }, + "right_arm": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [-15, 0, 0] + }, + "0.75": { + "vector": [-109.0667, -17.2294, 10.3141] + }, + "1.0": { + "vector": [-50.09964, -29.09555, 0.30408] + }, + "1.1667": { + "vector": [-109.0667, -17.2294, 10.3141] + }, + "1.3333": { + "vector": [-50.09964, -29.09555, 0.30408] + }, + "1.5": { + "vector": [-109.0667, -17.2294, 10.3141] + }, + "1.6667": { + "vector": [-50.09964, -29.09555, 0.30408] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, -10, 0] + }, + "1.0": { + "vector": [0, -10, 0] + }, + "1.1667": { + "vector": [0, -10, 0] + }, + "1.3333": { + "vector": [0, -10, 0] + }, + "1.5": { + "vector": [0, -10, 0] + }, + "1.6667": { + "vector": [0, -10, 0] + } + } + }, + "left_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [67.5, 0, 0] + }, + "0.75": { + "vector": [67.5, 0, 0] + }, + "1.1667": { + "vector": [67.5, 0, 0] + }, + "1.5": { + "vector": [67.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, -10, 0] + }, + "1.1667": { + "vector": [0, -10, 0] + }, + "1.5": { + "vector": [0, -10, 0] + } + } + }, + "right_leg": { + "rotation": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [67.5, 0, 0] + }, + "0.75": { + "vector": [67.5, 0, 0] + }, + "1.1667": { + "vector": [67.5, 0, 0] + }, + "1.5": { + "vector": [67.5, 0, 0] + } + }, + "position": { + "0.0": { + "vector": [0, 0, 0] + }, + "0.5": { + "vector": [0, -10, 0] + }, + "0.75": { + "vector": [0, -10, 0] + }, + "1.1667": { + "vector": [0, -10, 0] + }, + "1.5": { + "vector": [0, -10, 0] + } + } + } + } + } + }, + "geckolib_format_version": 2 +} \ No newline at end of file diff --git a/src/main/resources/en_us.json b/src/main/resources/en_us.json deleted file mode 100644 index d314129..0000000 --- a/src/main/resources/en_us.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "key.knockedback.execute": "Execute Knocked Player", - "key.categories.knockedback": "KnockedBack" -} \ No newline at end of file