Initial Commit
This commit is contained in:
@@ -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}-common-api:${jei_version}")
|
||||||
// compileOnly fg.deobf("mezz.jei:jei-${mc_version}-forge-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}")
|
// 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
|
// Example mod dependency using a mod jar from ./libs with a flat dir repository
|
||||||
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
|
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
|
||||||
// The group id is ignored when searching -- in this case, it is "blank"
|
// The group id is ignored when searching -- in this case, it is "blank"
|
||||||
|
|||||||
@@ -32,7 +32,9 @@ public class ExecuteKnockedPacket {
|
|||||||
private static LivingEntity findNearestKnockedEntity(ServerPlayer executor) {
|
private static LivingEntity findNearestKnockedEntity(ServerPlayer executor) {
|
||||||
return KnockedManager.getKnockedUuids().stream()
|
return KnockedManager.getKnockedUuids().stream()
|
||||||
.map(uuid -> NetworkHandlerHelper.getPlayerByUuid(executor.getServer(), uuid))
|
.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()
|
.findFirst()
|
||||||
.orElse(null);
|
.orElse(null);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import net.minecraftforge.network.PacketDistributor;
|
|||||||
|
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
@Mod.EventBusSubscriber
|
@Mod.EventBusSubscriber(modid = KnockedBack.MOD_ID, bus = Mod.EventBusSubscriber.Bus.FORGE)
|
||||||
public class KnockedManager {
|
public class KnockedManager {
|
||||||
private static final Map<UUID, Integer> knockedEntities = new HashMap<>();
|
private static final Map<UUID, Integer> knockedEntities = new HashMap<>();
|
||||||
private static final Set<UUID> grippedEntities = new HashSet<>();
|
private static final Set<UUID> grippedEntities = new HashSet<>();
|
||||||
@@ -56,8 +56,13 @@ public class KnockedManager {
|
|||||||
Map.Entry<UUID, Integer> entry = it.next();
|
Map.Entry<UUID, Integer> entry = it.next();
|
||||||
UUID entityId = entry.getKey();
|
UUID entityId = entry.getKey();
|
||||||
int timeLeft = entry.getValue();
|
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--;
|
timeLeft--;
|
||||||
if (timeLeft <= 0) {
|
if (timeLeft <= 0) {
|
||||||
it.remove();
|
it.remove();
|
||||||
@@ -66,23 +71,21 @@ public class KnockedManager {
|
|||||||
entry.setValue(timeLeft);
|
entry.setValue(timeLeft);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Send the updated time to the knocked player
|
// Send the updated time to the knocked player
|
||||||
ServerPlayer knockedPlayer = NetworkHandlerHelper.getPlayerByUuid(
|
ServerPlayer knockedPlayer = NetworkHandlerHelper.getPlayerByUuid(
|
||||||
net.minecraftforge.server.ServerLifecycleHooks.getCurrentServer(), entityId);
|
net.minecraftforge.server.ServerLifecycleHooks.getCurrentServer(), entityId);
|
||||||
if (knockedPlayer != null) {
|
if (knockedPlayer != null) {
|
||||||
NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> knockedPlayer),
|
NetworkHandler.CHANNEL.send(PacketDistributor.PLAYER.with(() -> knockedPlayer),
|
||||||
new net.fretux.knockedback.KnockedTimePacket(timeLeft));
|
new KnockedTimePacket(timeLeft));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
public static void onLivingHurt(LivingHurtEvent event) {
|
public static void onLivingHurt(LivingHurtEvent event) {
|
||||||
LivingEntity entity = event.getEntity();
|
LivingEntity entity = event.getEntity();
|
||||||
if (!isKnocked(entity)) return;
|
if (!isKnocked(entity)) return;
|
||||||
|
|
||||||
// Always reset the timer regardless of other conditions
|
|
||||||
knockedEntities.put(entity.getUUID(), KNOCKED_DURATION);
|
knockedEntities.put(entity.getUUID(), KNOCKED_DURATION);
|
||||||
|
|
||||||
DamageSource source = event.getSource();
|
DamageSource source = event.getSource();
|
||||||
@@ -100,11 +103,9 @@ public class KnockedManager {
|
|||||||
if ((damageType.equals("fall") || damageType.equals("explosion") || damageType.equals("explosion.player")) &&
|
if ((damageType.equals("fall") || damageType.equals("explosion") || damageType.equals("explosion.player")) &&
|
||||||
event.getAmount() >= entity.getHealth()) {
|
event.getAmount() >= entity.getHealth()) {
|
||||||
entity.setHealth(0.0F);
|
entity.setHealth(0.0F);
|
||||||
removeKnockedState(entity);
|
removeKnockedState(entity);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Still cancel damage for non-lethal hits, but **reset timer**
|
|
||||||
event.setCanceled(true);
|
event.setCanceled(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3,8 +3,6 @@ package net.fretux.knockedback;
|
|||||||
import net.fretux.knockedback.client.ClientKnockedState;
|
import net.fretux.knockedback.client.ClientKnockedState;
|
||||||
import net.minecraft.network.FriendlyByteBuf;
|
import net.minecraft.network.FriendlyByteBuf;
|
||||||
import net.minecraftforge.network.NetworkEvent;
|
import net.minecraftforge.network.NetworkEvent;
|
||||||
import net.minecraftforge.network.PacketDistributor;
|
|
||||||
import net.fretux.knockedback.KnockedBack;
|
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
public class KnockedTimePacket {
|
public class KnockedTimePacket {
|
||||||
|
|||||||
@@ -22,5 +22,10 @@ public class NetworkHandler {
|
|||||||
ExecuteKnockedPacket::encode,
|
ExecuteKnockedPacket::encode,
|
||||||
ExecuteKnockedPacket::decode,
|
ExecuteKnockedPacket::decode,
|
||||||
ExecuteKnockedPacket::handle);
|
ExecuteKnockedPacket::handle);
|
||||||
|
CHANNEL.registerMessage(id++,
|
||||||
|
KnockedTimePacket.class,
|
||||||
|
KnockedTimePacket::encode,
|
||||||
|
KnockedTimePacket::decode,
|
||||||
|
KnockedTimePacket::handle);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,14 +1,14 @@
|
|||||||
package net.fretux.knockedback.client;
|
package net.fretux.knockedback.client;
|
||||||
|
|
||||||
import net.fretux.knockedback.KnockedBack;
|
import net.fretux.knockedback.KnockedBack;
|
||||||
|
import net.fretux.knockedback.client.ClientKnockedState;
|
||||||
import net.minecraft.client.Minecraft;
|
import net.minecraft.client.Minecraft;
|
||||||
import net.minecraft.client.gui.GuiGraphics;
|
import net.minecraft.client.gui.GuiGraphics;
|
||||||
import net.minecraftforge.api.distmarker.Dist;
|
|
||||||
import net.minecraftforge.client.event.RenderGuiOverlayEvent;
|
import net.minecraftforge.client.event.RenderGuiOverlayEvent;
|
||||||
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
import net.minecraftforge.eventbus.api.SubscribeEvent;
|
||||||
import net.minecraftforge.fml.common.Mod;
|
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 {
|
public class KnockedTimeOverlay {
|
||||||
|
|
||||||
@SubscribeEvent
|
@SubscribeEvent
|
||||||
@@ -23,7 +23,6 @@ public class KnockedTimeOverlay {
|
|||||||
int x = screenWidth / 2 - mc.font.width(text) / 2;
|
int x = screenWidth / 2 - mc.font.width(text) / 2;
|
||||||
int y = 10; // 10 pixels from the top
|
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);
|
guiGraphics.drawString(mc.font, text, x, y, 0xFFFFFF, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
}
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"key.knockedback.execute": "Execute Knocked Player",
|
|
||||||
"key.categories.knockedback": "KnockedBack"
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user