Added Translation support and configuration options

This commit is contained in:
IM23a-spirgif
2025-04-28 22:34:35 +02:00
parent a1ae2eebd5
commit 9455b6c442
8 changed files with 68 additions and 34 deletions
@@ -20,7 +20,7 @@ public class CarryManager {
public static void toggleCarry(ServerPlayer carrier) { public static void toggleCarry(ServerPlayer carrier) {
if (KnockedManager.isKnocked(carrier)) { if (KnockedManager.isKnocked(carrier)) {
carrier.sendSystemMessage(Component.literal("You cannot carry others while you are knocked!")); carrier.sendSystemMessage(Component.translatable("message.knockedback.cannot_carry_while_knocked"));
return; return;
} }
Optional<Player> existing = carrier.getPassengers().stream() Optional<Player> existing = carrier.getPassengers().stream()
@@ -54,8 +54,8 @@ public class CarryManager {
if (knocked instanceof ServerPlayer spKnocked) { if (knocked instanceof ServerPlayer spKnocked) {
spKnocked.connection.send(mountPacket); spKnocked.connection.send(mountPacket);
} }
carrier.sendSystemMessage(Component.literal("Picked up " + knocked.getName().getString())); carrier.sendSystemMessage(Component.translatable("message.knockedback.picked_up" + knocked.getName().getString()));
knocked.sendSystemMessage(Component.literal("You are being carried by " + carrier.getName().getString())); knocked.sendSystemMessage(Component.translatable("message.knockedback.being_carried" + carrier.getName().getString()));
} }
@@ -67,8 +67,8 @@ public class CarryManager {
if (knocked instanceof ServerPlayer spKnocked) { if (knocked instanceof ServerPlayer spKnocked) {
spKnocked.connection.send(dismountPacket); spKnocked.connection.send(dismountPacket);
} }
carrier.sendSystemMessage(Component.literal("Dropped " + knocked.getName().getString())); carrier.sendSystemMessage(Component.translatable("message.knockedback.dropped" + knocked.getName().getString()));
knocked.sendSystemMessage(Component.literal("You have been dropped")); knocked.sendSystemMessage(Component.translatable("message.knockedback.been_dropped"));
} }
@SubscribeEvent @SubscribeEvent
@@ -133,8 +133,8 @@ public class MobKillHandler {
new ExecutionProgressPacket(0) new ExecutionProgressPacket(0)
); );
} }
knocked.sendSystemMessage(Component.literal( knocked.sendSystemMessage(Component.translatable(
"You were executed by " + mob.getName().getString() + "!" "message.knockedback.you_were_executed " + mob.getName().getString()
)); ));
} }
@@ -63,19 +63,19 @@ public class PlayerExecutionHandler {
public static void startExecution(ServerPlayer executor, Player target) { public static void startExecution(ServerPlayer executor, Player target) {
if (KnockedManager.isKnocked(executor)) { if (KnockedManager.isKnocked(executor)) {
executor.sendSystemMessage(Component.literal("You cannot execute others while you are knocked!")); executor.sendSystemMessage(Component.translatable("message.knockedback.cannot_carry_while_knocked"));
return; return;
} }
UUID knockedId = target.getUUID(); UUID knockedId = target.getUUID();
if (!KnockedManager.isKnocked(target)) return; if (!KnockedManager.isKnocked(target)) return;
if (CarryManager.isBeingCarried(target.getUUID())) { if (CarryManager.isBeingCarried(target.getUUID())) {
executor.sendSystemMessage(Component.literal("Cannot execute someone you're carrying!")); executor.sendSystemMessage(Component.translatable("message.knockedback.cannot_execute_while_knocked"));
return; return;
} }
if (executionAttempts.containsKey(knockedId)) return; if (executionAttempts.containsKey(knockedId)) return;
executionAttempts.put(knockedId, new PlayerExecutionAttempt(executor.getUUID())); executionAttempts.put(knockedId, new PlayerExecutionAttempt(executor.getUUID()));
executor.sendSystemMessage(Component.literal("Execution started...")); executor.sendSystemMessage(Component.translatable("message.knockedback.execution_started"));
target.sendSystemMessage(Component.literal("You're being executed!")); target.sendSystemMessage(Component.translatable("message.knockedback.being_executed"));
} }
public static void cancelExecution(UUID knockedId) { public static void cancelExecution(UUID knockedId) {
@@ -83,7 +83,7 @@ public class PlayerExecutionHandler {
if (attempt != null) { if (attempt != null) {
ServerPlayer knocked = getPlayerByUuid(knockedId); ServerPlayer knocked = getPlayerByUuid(knockedId);
if (knocked != null) { if (knocked != null) {
knocked.sendSystemMessage(Component.literal("Execution interrupted!")); knocked.sendSystemMessage(Component.translatable("message.knockedback.execution_interrupted"));
NetworkHandler.CHANNEL.send( NetworkHandler.CHANNEL.send(
PacketDistributor.PLAYER.with(() -> knocked), PacketDistributor.PLAYER.with(() -> knocked),
new ExecutionProgressPacket(0) new ExecutionProgressPacket(0)
@@ -91,7 +91,7 @@ public class PlayerExecutionHandler {
} }
ServerPlayer executor = getPlayerByUuid(attempt.executorUuid); ServerPlayer executor = getPlayerByUuid(attempt.executorUuid);
if (executor != null) { if (executor != null) {
executor.sendSystemMessage(Component.literal("Your execution was interrupted!")); executor.sendSystemMessage(Component.translatable("message.knockedback.execution_interrupted_executor"));
NetworkHandler.CHANNEL.send( NetworkHandler.CHANNEL.send(
PacketDistributor.PLAYER.with(() -> executor), PacketDistributor.PLAYER.with(() -> executor),
new ExecutionProgressPacket(0) new ExecutionProgressPacket(0)
@@ -106,7 +106,7 @@ public class PlayerExecutionHandler {
UUID hurtId = hurtPlayer.getUUID(); UUID hurtId = hurtPlayer.getUUID();
boolean wasExecutor = executionAttempts.values().removeIf(attempt -> attempt.executorUuid.equals(hurtId)); boolean wasExecutor = executionAttempts.values().removeIf(attempt -> attempt.executorUuid.equals(hurtId));
if (wasExecutor) { if (wasExecutor) {
hurtPlayer.sendSystemMessage(Component.literal("Execution canceled because you were hit!")); hurtPlayer.sendSystemMessage(Component.translatable("message.knockedback.execution_interrupted"));
} }
} }
@@ -130,9 +130,9 @@ public class PlayerExecutionHandler {
new ExecutionProgressPacket(0) new ExecutionProgressPacket(0)
); );
} }
executor.sendSystemMessage(Component.literal("You executed " + knockedPlayer.getName().getString() + "!")); executor.sendSystemMessage(Component.translatable("message.knockedback.you_executed" + knockedPlayer.getName().getString() + "!"));
if (knockedPlayer instanceof ServerPlayer serverPlayer) { if (knockedPlayer instanceof ServerPlayer serverPlayer) {
serverPlayer.sendSystemMessage(Component.literal("You were executed by " + executor.getName().getString() + "!")); serverPlayer.sendSystemMessage(Component.translatable("message.knockedback.you_were_executed" + executor.getName().getString() + "!"));
} }
} }
@@ -21,24 +21,22 @@ public class ClientKeyHandler {
"key.categories.knockedback" "key.categories.knockedback"
); );
// This event still needs to be registered on the MOD bus for key mapping registration.
@Mod.EventBusSubscriber(modid = "knockedback", value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
public static class KeyMappingRegistration {
@SubscribeEvent
public static void registerKeyMappings(RegisterKeyMappingsEvent event) {
event.register(EXECUTE_KEY);
}
}
public static final KeyMapping CARRY_KEY = new KeyMapping( public static final KeyMapping CARRY_KEY = new KeyMapping(
"key.knockedback.carry", "key.knockedback.carry",
GLFW.GLFW_KEY_V, GLFW.GLFW_KEY_V,
"key.categories.knockedback" "key.categories.knockedback"
); );
@SubscribeEvent @Mod.EventBusSubscriber(modid = "knockedback", value = Dist.CLIENT, bus = Mod.EventBusSubscriber.Bus.MOD)
public static void registerCarryKey(RegisterKeyMappingsEvent e) { public static class KeyMappingRegistration {
e.register(CARRY_KEY); @SubscribeEvent
public static void registerKeyMappings(RegisterKeyMappingsEvent event) {
event.register(EXECUTE_KEY);
}
@SubscribeEvent
public static void registerCarryKey(RegisterKeyMappingsEvent e) {
e.register(CARRY_KEY);
}
} }
@SubscribeEvent @SubscribeEvent
@@ -46,10 +44,6 @@ public class ClientKeyHandler {
if (Minecraft.getInstance().screen != null) return; if (Minecraft.getInstance().screen != null) return;
if (EXECUTE_KEY.consumeClick()) { if (EXECUTE_KEY.consumeClick()) {
if (Minecraft.getInstance().player != null) { if (Minecraft.getInstance().player != null) {
Minecraft.getInstance().player.sendSystemMessage(
Component.literal("Key B pressed! Sending execution request to server.")
);
// Send the packet to the server
NetworkHandler.CHANNEL.sendToServer(new ExecuteKnockedPacket()); NetworkHandler.CHANNEL.sendToServer(new ExecuteKnockedPacket());
} }
} }
@@ -1,6 +1,5 @@
package net.fretux.knockedback.client; package net.fretux.knockedback.client;
import com.mojang.blaze3d.systems.RenderSystem;
import net.fretux.knockedback.KnockedBack; import net.fretux.knockedback.KnockedBack;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiGraphics; import net.minecraft.client.gui.GuiGraphics;
@@ -4,6 +4,7 @@ import net.fretux.knockedback.KnockedBack;
import net.fretux.knockedback.client.ClientKnockedState; 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.minecraft.client.resources.language.I18n;
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;
@@ -16,7 +17,7 @@ public class KnockedTimeOverlay {
if (!ClientKnockedState.isKnocked()) return; if (!ClientKnockedState.isKnocked()) return;
Minecraft mc = Minecraft.getInstance(); Minecraft mc = Minecraft.getInstance();
GuiGraphics guiGraphics = event.getGuiGraphics(); GuiGraphics guiGraphics = event.getGuiGraphics();
String text = "Time until recovery: " + (ClientKnockedState.getTimeLeft() / 20) + " s"; String text = I18n.get("overlay.knockedback.recovery_time", ClientKnockedState.getTimeLeft() / 20);
int screenWidth = mc.getWindow().getGuiScaledWidth(); int screenWidth = mc.getWindow().getGuiScaledWidth();
int x = screenWidth / 2 - mc.font.width(text) / 2; int x = screenWidth / 2 - mc.font.width(text) / 2;
int y = 10; int y = 10;
@@ -0,0 +1,22 @@
{
"key.knockedback.carry": "Tragen",
"key.knockedback.execute": "Hinrichten",
"key.categories.knockedback": "Knockedback-Steuerung",
"message.knockedback.cannot_carry_while_knocked": "Du kannst niemanden tragen, während du betäubt bist!",
"message.knockedback.cannot_execute_while_knocked": "Du kannst niemanden hinrichten, während du betäubt bist!",
"message.knockedback.picked_up": "Hochgehoben %s",
"message.knockedback.being_carried": "Du wirst von %s getragen",
"message.knockedback.dropped": "Abgesetzt %s",
"message.knockedback.been_dropped": "Du wurdest abgesetzt",
"message.knockedback.execution_started": "Hinrichtung gestartet...",
"message.knockedback.being_executed": "Du wirst hingerichtet!",
"message.knockedback.execution_interrupted": "Hinrichtung abgebrochen!",
"message.knockedback.execution_interrupted_executor": "Deine Hinrichtung wurde abgebrochen!",
"message.knockedback.you_executed": "Du hast %s hingerichtet!",
"message.knockedback.you_were_executed": "Du wurdest von %s hingerichtet!",
"overlay.knockedback.recovery_time": "Zeit bis Erholung: %s s"
}
@@ -0,0 +1,18 @@
{
"key.knockedback.carry": "Carry",
"key.knockedback.execute": "Execute",
"key.categories.knockedback": "Knockedback Controls",
"message.knockedback.cannot_carry_while_knocked": "You cannot carry others while you are knocked!",
"message.knockedback.cannot_execute_while_knocked": "You cannot execute others while you are knocked!",
"message.knockedback.picked_up": "Picked up %s",
"message.knockedback.being_carried": "You are being carried by %s",
"message.knockedback.dropped": "Dropped %s",
"message.knockedback.been_dropped": "You have been dropped",
"message.knockedback.execution_started": "Execution started...",
"message.knockedback.being_executed": "You're being executed!",
"message.knockedback.execution_interrupted": "Execution interrupted!",
"message.knockedback.execution_interrupted_executor": "Your execution was interrupted!",
"message.knockedback.you_executed": "You executed %s!",
"message.knockedback.you_were_executed": "You were executed by %s!",
"overlay.knockedback.recovery_time": "Time until recovery: %s s"
}