From e064fcb10eb9dd7cea39657c9ae6cfffda012b28 Mon Sep 17 00:00:00 2001 From: vorlie Date: Tue, 14 Jan 2025 23:55:42 +0100 Subject: [PATCH 1/5] feat: Add useful links to the "fabric.mod.json", update checker and refactor logger strings --- gradle.properties | 2 +- .../vorlie/lifedrain/LifeDrainClient.java | 16 ++- .../vorlie/lifedrain/ModMenuIntegration.java | 2 +- .../vorlie/lifedrain/utils/UpdateChecker.java | 135 ++++++++++++++++++ src/main/java/vorlie/lifedrain/LifeDrain.java | 6 +- .../commands/ConfigCheckCommand.java | 4 +- .../lifedrain/config/ConfigManager.java | 16 +-- src/main/resources/fabric.mod.json | 12 +- 8 files changed, 173 insertions(+), 20 deletions(-) create mode 100644 src/client/java/vorlie/lifedrain/utils/UpdateChecker.java diff --git a/gradle.properties b/gradle.properties index 99bf39a..8fdac22 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ yarn_mappings=1.21+build.9 loader_version=0.16.10 # Mod Properties -mod_version=1.0.5 +mod_version=1.0.6-dev maven_group=vorlie.lifedrain archives_base_name=lifedrain diff --git a/src/client/java/vorlie/lifedrain/LifeDrainClient.java b/src/client/java/vorlie/lifedrain/LifeDrainClient.java index 95e22bd..618cb1c 100644 --- a/src/client/java/vorlie/lifedrain/LifeDrainClient.java +++ b/src/client/java/vorlie/lifedrain/LifeDrainClient.java @@ -1,22 +1,25 @@ package vorlie.lifedrain; import net.fabricmc.api.ClientModInitializer; - +import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.player.AttackEntityCallback; + import net.minecraft.client.MinecraftClient; -import net.minecraft.entity.mob.HostileEntity; -import net.minecraft.particle.ParticleTypes; import net.minecraft.client.world.ClientWorld; +import net.minecraft.entity.mob.HostileEntity; import net.minecraft.entity.player.PlayerEntity; +import net.minecraft.particle.ParticleTypes; import net.minecraft.util.ActionResult; import net.minecraft.util.math.random.Random; import vorlie.lifedrain.config.ConfigManager; +import vorlie.lifedrain.utils.UpdateChecker; public class LifeDrainClient implements ClientModInitializer { private long lastLifestealTime = 0; // Time of the last lifesteal private long COOLDOWN_TIME; // Cooldown time in milliseconds (1 second) + private boolean updateChecked = false; @Override public void onInitializeClient() { @@ -37,6 +40,13 @@ public void onInitializeClient() { ConfigManager.load(); COOLDOWN_TIME = ConfigManager.CONFIG.lifestealCooldown; }); + + ClientTickEvents.END_CLIENT_TICK.register(client -> { + if (client.world != null && !updateChecked) { + UpdateChecker.checkForUpdates(); + updateChecked = true; + } + }); } private void handleLifesteal(PlayerEntity player, HostileEntity mob) { diff --git a/src/client/java/vorlie/lifedrain/ModMenuIntegration.java b/src/client/java/vorlie/lifedrain/ModMenuIntegration.java index 17e120c..714486c 100644 --- a/src/client/java/vorlie/lifedrain/ModMenuIntegration.java +++ b/src/client/java/vorlie/lifedrain/ModMenuIntegration.java @@ -23,7 +23,7 @@ public class ModMenuIntegration implements ModMenuApi { @Override public ConfigScreenFactory getModConfigScreenFactory() { - LOGGER.info("Lifesteal: ModMenuIntegration loaded successfully."); + LOGGER.info("[LifeDrain] ModMenuIntegration loaded successfully."); return parent -> { ConfigBuilder builder = ConfigBuilder.create() diff --git a/src/client/java/vorlie/lifedrain/utils/UpdateChecker.java b/src/client/java/vorlie/lifedrain/utils/UpdateChecker.java new file mode 100644 index 0000000..5dbf6b7 --- /dev/null +++ b/src/client/java/vorlie/lifedrain/utils/UpdateChecker.java @@ -0,0 +1,135 @@ +package vorlie.lifedrain.utils; + +import net.fabricmc.loader.api.FabricLoader; +import net.fabricmc.loader.api.ModContainer; + +import net.minecraft.client.MinecraftClient; +import net.minecraft.text.ClickEvent; +import net.minecraft.text.MutableText; +import net.minecraft.text.Text; +import net.minecraft.util.Formatting; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.net.HttpURLConnection; +import java.net.URI; +import java.util.Scanner; + +public class UpdateChecker { + private static final String MOD_ID = "lifedrain"; + public static final Logger LOGGER = LoggerFactory.getLogger(MOD_ID); + private static final String GITHUB_RELEASES_URL = "https://api.github.com/repos/vorlie/Lifedrain/releases/latest"; + private static final String MODRINTH_URL_FORMAT = "https://modrinth.com/mod/lifedrain/version/%s"; + + public static String getCurrentVersion() { + return FabricLoader.getInstance() + .getModContainer(MOD_ID) + .map(ModContainer::getMetadata) + .map(metadata -> metadata.getVersion().getFriendlyString()) + .orElse("Unknown"); + } + + public static void checkForUpdates() { + Thread updateThread = new Thread(() -> { + try { + LOGGER.info("[LifeDrain] Checking for updates..."); + String latestVersion = fetchLatestVersionFromGitHub(); + String currentVersion = getCurrentVersion(); + + // Only notify if the current version is less than the latest version and not a dev version + if (isNewVersionAvailable(currentVersion, latestVersion)) { + LOGGER.info("[LifeDrain] A new version is available: {}", latestVersion); + notifyPlayer(latestVersion, currentVersion); + } else { + LOGGER.info("[LifeDrain] No update found. Current version is up-to-date."); + } + } catch (Exception e) { + LOGGER.error("[LifeDrain] Error checking for updates: {}", e.getMessage(), e); + } + }); + + // Set the name of the thread + updateThread.setName("LifeDrain thread"); + + // Start the thread + updateThread.start(); + } + + private static String fetchLatestVersionFromGitHub() throws IOException { + LOGGER.debug("[LifeDrain] Fetching latest version from GitHub..."); + try { + URI githubApiUri = new URI(GITHUB_RELEASES_URL); + HttpURLConnection connection = (HttpURLConnection) githubApiUri.toURL().openConnection(); + connection.setRequestMethod("GET"); + connection.setRequestProperty("User-Agent", "LifeDrain-UpdateChecker"); + + Scanner scanner = new Scanner(connection.getInputStream()); + StringBuilder jsonResponse = new StringBuilder(); + while (scanner.hasNext()) { + jsonResponse.append(scanner.nextLine()); + } + scanner.close(); + + // Parse the "tag_name" field from the JSON response + String response = jsonResponse.toString(); + return response.split("\"tag_name\":\"")[1].split("\"")[0]; + } catch (Exception e) { + throw new IOException("[LifeDrain] Failed to fetch the latest version from GitHub: " + e.getMessage(), e); + } + } + + private static boolean isNewVersionAvailable(String currentVersion, String latestVersion) { + // If the current version is development or higher than the latest release, skip the update message + return !currentVersion.equals(latestVersion) && !currentVersion.toLowerCase().contains("-dev") + && compareVersions(currentVersion, latestVersion) < 0; + } + + private static int compareVersions(String currentVersion, String latestVersion) { + // Compare version strings + String[] currentParts = currentVersion.split("-"); + String[] latestParts = latestVersion.split("-"); + + // Compare the numeric parts (before the dash) + String[] currentVersionParts = currentParts[0].split("\\."); + String[] latestVersionParts = latestParts[0].split("\\."); + + for (int i = 0; i < Math.min(currentVersionParts.length, latestVersionParts.length); i++) { + int currentPart = Integer.parseInt(currentVersionParts[i]); + int latestPart = Integer.parseInt(latestVersionParts[i]); + if (currentPart < latestPart) { + return -1; // current version is lower + } else if (currentPart > latestPart) { + return 1; // current version is higher + } + } + return 0; // versions are equal + } + + private static void notifyPlayer(String latestVersion, String currentVersion) { + MinecraftClient client = MinecraftClient.getInstance(); + if (client.player != null) { + String modrinthLink = String.format(MODRINTH_URL_FORMAT, latestVersion); // Create the Modrinth link based on the latest version + + // Prepare the base message with the version number and Modrinth link + MutableText message = Text.literal("[LifeDrain] A new version is available: ") + .formatted(Formatting.GREEN) + .append(Text.literal(latestVersion).formatted(Formatting.AQUA)) + .append(Text.literal(". Download it from ")) + .append(Text.literal("Modrinth") + .styled(style -> style.withColor(Formatting.BLUE) + .withClickEvent(new ClickEvent(ClickEvent.Action.OPEN_URL, modrinthLink)))); + + // If current version contains "dev", notify the player that it's a dev version + if (currentVersion.toLowerCase().contains("-dev")) { + message.append(Text.literal(" (Development version, things may not work properly!)").formatted(Formatting.RED)); + } + + // Send the update notification to the player + client.player.sendMessage(message, false); + + LOGGER.info("[LifeDrain] Update message sent to player."); + } + } +} diff --git a/src/main/java/vorlie/lifedrain/LifeDrain.java b/src/main/java/vorlie/lifedrain/LifeDrain.java index 47a4d7e..246e7fb 100644 --- a/src/main/java/vorlie/lifedrain/LifeDrain.java +++ b/src/main/java/vorlie/lifedrain/LifeDrain.java @@ -23,7 +23,7 @@ public class LifeDrain implements ModInitializer { @Override public void onInitialize() { - LOGGER.info("Lifesteal: LifeDrain mod initialized!"); + LOGGER.info("[LifeDrain] LifeDrain mod initialized!"); ConfigManager.load(); // Load configuration COOLDOWN_TIME = ConfigManager.CONFIG.lifestealCooldown; @@ -40,7 +40,7 @@ public void onInitialize() { // Register the config reload event ServerLifecycleEvents.END_DATA_PACK_RELOAD.register((server, resourceManager, success) -> { ConfigManager.load(); - LOGGER.info("Lifesteal: LifeDrain config reloaded."); + LOGGER.info("[LifeDrain] LifeDrain config reloaded."); COOLDOWN_TIME = ConfigManager.CONFIG.lifestealCooldown; }); @@ -67,7 +67,7 @@ private void handleLifesteal(PlayerEntity player, HostileEntity mob) { float totalHeal = baseHeal + bonusHeal; player.heal(totalHeal); - LOGGER.info("Lifesteal: {} healed {} (Base: {}, Bonus: {}).", + LOGGER.info("[LifeDrain] {} healed {} (Base: {}, Bonus: {}).", player.getName().getString(), totalHeal, baseHeal, bonusHeal); // Update last lifesteal activation time diff --git a/src/main/java/vorlie/lifedrain/commands/ConfigCheckCommand.java b/src/main/java/vorlie/lifedrain/commands/ConfigCheckCommand.java index 0f5fbc3..4f34c5c 100644 --- a/src/main/java/vorlie/lifedrain/commands/ConfigCheckCommand.java +++ b/src/main/java/vorlie/lifedrain/commands/ConfigCheckCommand.java @@ -24,7 +24,7 @@ public static void register(CommandDispatcher dispatcher) { // Execute the command public static int executeCheckConfigCommand(CommandContext context) { - LOGGER.info("Checking config for missing values..."); + LOGGER.info("[LifeDrain] Checking config for missing values..."); // Check and add missing values in the config ConfigManager.load(); // Reload the config file @@ -32,7 +32,7 @@ public static int executeCheckConfigCommand(CommandContext // Send feedback to the player (command source) context.getSource().sendFeedback(() -> Text.literal( - "LifeDrain: Config file has been checked and updated. " + "To apply changes, run /reload." + "[LifeDrain] Config file has been checked and updated. " + "To apply changes, run /reload." ), false); // Save the updated config back to the file diff --git a/src/main/java/vorlie/lifedrain/config/ConfigManager.java b/src/main/java/vorlie/lifedrain/config/ConfigManager.java index 95bce88..da77f0a 100644 --- a/src/main/java/vorlie/lifedrain/config/ConfigManager.java +++ b/src/main/java/vorlie/lifedrain/config/ConfigManager.java @@ -33,7 +33,7 @@ public static void load() { // Now convert the JsonObject to our config class CONFIG = GSON.fromJson(configJson, LifeDrainConfig.class); } catch (IOException e) { - LOGGER.error("Error reading config: ", e); + LOGGER.error("[LifeDrain] Error reading config: ", e); } } else { save(); // Save defaults if the config file doesn't exist @@ -56,32 +56,32 @@ public static JsonObject getConfigJson() { public static void addMissingFields(JsonObject configJson) { // Add new fields if they don't exist if (!configJson.has("lifestealCooldown")) { - LOGGER.info("Missing 'lifestealCooldown', adding default value."); + LOGGER.info("[LifeDrain] Missing 'lifestealCooldown', adding default value."); configJson.addProperty("lifestealCooldown", LifeDrainConfig.DEFAULT_LIFESTEAL_COOLDOWN); } if (!configJson.has("enableParticles")) { - LOGGER.info("Missing 'enableParticles', adding default value."); + LOGGER.info("[LifeDrain] Missing 'enableParticles', adding default value."); configJson.addProperty("enableParticles", LifeDrainConfig.DEFAULT_ENABLE_PARTICLES); } if (!configJson.has("baseHealEasy")) { - LOGGER.info("Missing 'baseHealEasy', adding default value."); + LOGGER.info("[LifeDrain] Missing 'baseHealEasy', adding default value."); configJson.addProperty("baseHealEasy", LifeDrainConfig.DEFAULT_BASE_HEAL_EASY); } if (!configJson.has("baseHealNormal")) { - LOGGER.info("Missing 'baseHealNormal', adding default value."); + LOGGER.info("[LifeDrain] Missing 'baseHealNormal', adding default value."); configJson.addProperty("baseHealNormal", LifeDrainConfig.DEFAULT_BASE_HEAL_NORMAL); } if (!configJson.has("baseHealHard")) { - LOGGER.info("Missing 'baseHealHard', adding default value."); + LOGGER.info("[LifeDrain] Missing 'baseHealHard', adding default value."); configJson.addProperty("baseHealHard", LifeDrainConfig.DEFAULT_BASE_HEAL_HARD); } if (!configJson.has("bonusHealMultiplier")) { - LOGGER.info("Missing 'bonusHealMultiplier', adding default value."); + LOGGER.info("[LifeDrain] Missing 'bonusHealMultiplier', adding default value."); configJson.addProperty("bonusHealMultiplier", LifeDrainConfig.DEFAULT_BONUS_HEAL_MULTIPLIER); } } @@ -90,7 +90,7 @@ public static void save() { try (FileWriter writer = new FileWriter(CONFIG_FILE)) { GSON.toJson(CONFIG, writer); } catch (IOException e) { - LOGGER.error("Error saving config: ", e); + LOGGER.error("[LifeDrain] Error saving config: ", e); } } } diff --git a/src/main/resources/fabric.mod.json b/src/main/resources/fabric.mod.json index e3f974a..4d831d8 100644 --- a/src/main/resources/fabric.mod.json +++ b/src/main/resources/fabric.mod.json @@ -8,7 +8,9 @@ "vorlie" ], "contact": { - "sources": "https://github.com/vorlie/Lifedrain" + "sources": "https://github.com/vorlie/Lifedrain", + "issues": "https://github.com/vorlie/Lifedrain/issues", + "homepage": "https://modrinth.com/mod/lifedrain" }, "license": "MIT", "icon": "assets/lifedrain/icon.png", @@ -45,6 +47,12 @@ "modmenu": "11.0.3" }, "custom": { - "modmenu:api": true + "modmenu:api": true, + "modmenu": { + "links": { + "modmenu.discord": "https://discord.gg/yUueAFyAmN" + }, + "update_checker": true + } } } \ No newline at end of file From d6c3d4f9a172d7e69bc7ce24e3cc30ef9bb89b91 Mon Sep 17 00:00:00 2001 From: vorlie Date: Thu, 16 Jan 2025 15:56:53 +0100 Subject: [PATCH 2/5] feat: Add Mob Healing Mixin based on the world difficulty. Include new strings for translations for mod menu config screen. --- .../vorlie/lifedrain/ModMenuIntegration.java | 41 ++++++++++++- .../lifedrain/config/ConfigManager.java | 20 +++++++ .../lifedrain/config/LifeDrainConfig.java | 11 +++- .../lifedrain/mixin/MobHealHandlerMixin.java | 58 +++++++++++++++++++ .../assets/lifedrain/lang/cs_cz.json | 30 +++++----- .../assets/lifedrain/lang/de_de.json | 12 ++-- .../assets/lifedrain/lang/en_us.json | 12 ++-- .../assets/lifedrain/lang/es_es.json | 12 ++-- .../assets/lifedrain/lang/es_mx.json | 12 ++-- .../assets/lifedrain/lang/fr_fr.json | 12 ++-- .../assets/lifedrain/lang/ja_jp.json | 12 ++-- .../assets/lifedrain/lang/ko_kr.json | 12 ++-- .../assets/lifedrain/lang/pl_pl.json | 12 ++-- .../assets/lifedrain/lang/ru_ru.json | 12 ++-- .../assets/lifedrain/lang/zh_cn.json | 12 ++-- src/main/resources/lifedrain.mixins.json | 17 +++--- 16 files changed, 232 insertions(+), 65 deletions(-) create mode 100644 src/main/java/vorlie/lifedrain/mixin/MobHealHandlerMixin.java diff --git a/src/client/java/vorlie/lifedrain/ModMenuIntegration.java b/src/client/java/vorlie/lifedrain/ModMenuIntegration.java index 714486c..243e768 100644 --- a/src/client/java/vorlie/lifedrain/ModMenuIntegration.java +++ b/src/client/java/vorlie/lifedrain/ModMenuIntegration.java @@ -41,6 +41,41 @@ public ConfigScreenFactory getModConfigScreenFactory() { .setTooltip(Text.translatable("config.lifedrain.enableParticles.tooltip")) .build()); + // Enable Mob Healing + general.addEntry(entryBuilder + .startBooleanToggle(Text.translatable("config.lifedrain.mobsHealOnHit"), ConfigManager.CONFIG.mobsHealOnHit) + .setDefaultValue(true) + .setSaveConsumer(value -> ConfigManager.CONFIG.mobsHealOnHit = value) + .setTooltip(Text.translatable("config.lifedrain.mobsHealOnHit.tooltip")) + .build()); + + // Mob Heal Amount (Easy) + general.addEntry(entryBuilder + .startFloatField(Text.translatable("config.lifedrain.mobHealAmountEasy"), ConfigManager.CONFIG.mobHealAmountEasy) + .setDefaultValue(0.5F) + .setMin(0.0F) + .setSaveConsumer(value -> ConfigManager.CONFIG.mobHealAmountEasy = value) + .setTooltip(Text.translatable("config.lifedrain.mobHealAmount.tooltip")) + .build()); + + // Mob Heal Amount (Normal) + general.addEntry(entryBuilder + .startFloatField(Text.translatable("config.lifedrain.mobHealAmountNormal"), ConfigManager.CONFIG.mobHealAmountNormal) + .setDefaultValue(1.0F) + .setMin(0.0F) + .setSaveConsumer(value -> ConfigManager.CONFIG.mobHealAmountNormal = value) + .setTooltip(Text.translatable("config.lifedrain.mobHealAmount.tooltip")) + .build()); + + // Mob Heal Amount (Hard) + general.addEntry(entryBuilder + .startFloatField(Text.translatable("config.lifedrain.mobHealAmountHard"), ConfigManager.CONFIG.mobHealAmountHard) + .setDefaultValue(4.0F) + .setMin(0.0F) + .setSaveConsumer(value -> ConfigManager.CONFIG.mobHealAmountHard = value) + .setTooltip(Text.translatable("config.lifedrain.mobHealAmount.tooltip")) + .build()); + // Lifesteal Cooldown general.addEntry(entryBuilder .startIntField(Text.translatable("config.lifedrain.lifestealCooldown"), ConfigManager.CONFIG.lifestealCooldown) @@ -56,7 +91,7 @@ public ConfigScreenFactory getModConfigScreenFactory() { .setDefaultValue(2.0F) .setMin(0.0F) .setSaveConsumer(value -> ConfigManager.CONFIG.baseHealEasy = value) - .setTooltip(Text.translatable("config.lifedrain.baseHealEasy.tooltip")) + .setTooltip(Text.translatable("config.lifedrain.baseHeal.tooltip")) .build()); // Base Heal (Normal) @@ -65,7 +100,7 @@ public ConfigScreenFactory getModConfigScreenFactory() { .setDefaultValue(1.0F) .setMin(0.0F) .setSaveConsumer(value -> ConfigManager.CONFIG.baseHealNormal = value) - .setTooltip(Text.translatable("config.lifedrain.baseHealNormal.tooltip")) + .setTooltip(Text.translatable("config.lifedrain.baseHeal.tooltip")) .build()); // Base Heal (Hard) @@ -74,7 +109,7 @@ public ConfigScreenFactory getModConfigScreenFactory() { .setDefaultValue(0.5F) .setMin(0.0F) .setSaveConsumer(value -> ConfigManager.CONFIG.baseHealHard = value) - .setTooltip(Text.translatable("config.lifedrain.baseHealHard.tooltip")) + .setTooltip(Text.translatable("config.lifedrain.baseHeal.tooltip")) .build()); // Bonus Heal Multiplier diff --git a/src/main/java/vorlie/lifedrain/config/ConfigManager.java b/src/main/java/vorlie/lifedrain/config/ConfigManager.java index da77f0a..af9092a 100644 --- a/src/main/java/vorlie/lifedrain/config/ConfigManager.java +++ b/src/main/java/vorlie/lifedrain/config/ConfigManager.java @@ -84,6 +84,26 @@ public static void addMissingFields(JsonObject configJson) { LOGGER.info("[LifeDrain] Missing 'bonusHealMultiplier', adding default value."); configJson.addProperty("bonusHealMultiplier", LifeDrainConfig.DEFAULT_BONUS_HEAL_MULTIPLIER); } + + if (!configJson.has("mobsHealOnHit")) { + LOGGER.info("[LifeDrain] Missing 'mobsHealOnHit', adding default value."); + configJson.addProperty("mobsHealOnHit", LifeDrainConfig.DEFAULT_ENABLE_MOB_HEAL); + } + + if (!configJson.has("mobHealAmountEasy")) { + LOGGER.info("[LifeDrain] Missing 'mobHealAmountEasy', adding default value."); + configJson.addProperty("mobHealAmountEasy", LifeDrainConfig.DEFAULT_MOB_HEAL_AMOUNT_EASY); + } + + if (!configJson.has("mobHealAmountNormal")) { + LOGGER.info("[LifeDrain] Missing 'mobHealAmountNormal', adding default value."); + configJson.addProperty("mobHealAmountNormal", LifeDrainConfig.DEFAULT_MOB_HEAL_AMOUNT_NORMAL); + } + + if (!configJson.has("mobHealAmountHard")) { + LOGGER.info("[LifeDrain] Missing 'mobHealAmountHard', adding default value."); + configJson.addProperty("mobHealAmountHard", LifeDrainConfig.DEFAULT_MOB_HEAL_AMOUNT_HARD); + } } public static void save() { diff --git a/src/main/java/vorlie/lifedrain/config/LifeDrainConfig.java b/src/main/java/vorlie/lifedrain/config/LifeDrainConfig.java index f4dd094..7cbc19c 100644 --- a/src/main/java/vorlie/lifedrain/config/LifeDrainConfig.java +++ b/src/main/java/vorlie/lifedrain/config/LifeDrainConfig.java @@ -2,13 +2,22 @@ public class LifeDrainConfig { public static final int DEFAULT_LIFESTEAL_COOLDOWN = 1000; // Default cooldown time in milliseconds - public static final boolean DEFAULT_ENABLE_PARTICLES = true; // Default for enabling particles + public static final boolean DEFAULT_ENABLE_PARTICLES = true; public static final float DEFAULT_BASE_HEAL_EASY = 2.0F; public static final float DEFAULT_BASE_HEAL_NORMAL = 1.0F; public static final float DEFAULT_BASE_HEAL_HARD = 0.5F; public static final float DEFAULT_BONUS_HEAL_MULTIPLIER = 0.2F; + public static final boolean DEFAULT_ENABLE_MOB_HEAL = true; + public static final float DEFAULT_MOB_HEAL_AMOUNT_EASY = 0.5F; + public static final float DEFAULT_MOB_HEAL_AMOUNT_NORMAL = 1.0F; + public static final float DEFAULT_MOB_HEAL_AMOUNT_HARD = 4.0F; + public boolean enableParticles = DEFAULT_ENABLE_PARTICLES; + public boolean mobsHealOnHit = DEFAULT_ENABLE_MOB_HEAL; + public float mobHealAmountEasy = DEFAULT_MOB_HEAL_AMOUNT_EASY; + public float mobHealAmountNormal = DEFAULT_MOB_HEAL_AMOUNT_NORMAL; + public float mobHealAmountHard = DEFAULT_MOB_HEAL_AMOUNT_HARD; public float baseHealEasy = DEFAULT_BASE_HEAL_EASY; public float baseHealNormal = DEFAULT_BASE_HEAL_NORMAL; public float baseHealHard = DEFAULT_BASE_HEAL_HARD; diff --git a/src/main/java/vorlie/lifedrain/mixin/MobHealHandlerMixin.java b/src/main/java/vorlie/lifedrain/mixin/MobHealHandlerMixin.java new file mode 100644 index 0000000..b8627e0 --- /dev/null +++ b/src/main/java/vorlie/lifedrain/mixin/MobHealHandlerMixin.java @@ -0,0 +1,58 @@ +package vorlie.lifedrain.mixin; + +import net.minecraft.entity.LivingEntity; +import net.minecraft.entity.mob.HostileEntity; +import net.minecraft.entity.damage.DamageSource; +import net.minecraft.particle.ParticleTypes; +import net.minecraft.server.world.ServerWorld; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import vorlie.lifedrain.config.ConfigManager; + +@Mixin(LivingEntity.class) +public abstract class MobHealHandlerMixin { + + @Inject(method = "damage", at = @At("HEAD")) + private void onDamage(DamageSource source, float amount, CallbackInfoReturnable cir) { + // Ensure the entity taking damage is a player + if ((Object) this instanceof net.minecraft.entity.player.PlayerEntity player) { + // Check if the damage source is a hostile mob + if (source.getAttacker() instanceof HostileEntity mob && mob.isAlive()) { + handleMobHeal(mob); + } + } + } + + @Unique + private void handleMobHeal(HostileEntity mob) { + if (!ConfigManager.CONFIG.mobsHealOnHit) { + return; // Skip if the feature is disabled + } + + float mobHeal = switch (mob.getWorld().getDifficulty()) { + case EASY -> ConfigManager.CONFIG.mobHealAmountEasy; + case NORMAL -> ConfigManager.CONFIG.mobHealAmountNormal; + case HARD -> ConfigManager.CONFIG.mobHealAmountHard; + default -> 0.0F; + }; + + // Heal the mob + mob.heal(mobHeal); + + // Spawn particle effects if the mob's world is a server world + if (mob.getWorld() instanceof ServerWorld world) { + world.spawnParticles( + ParticleTypes.HEART, + mob.getX() + mob.getRandom().nextDouble() - 0.5, + mob.getY() + mob.getRandom().nextDouble(), + mob.getZ() + mob.getRandom().nextDouble() - 0.5, + 5, // Count + 0.5, 0.5, 0.5, 0 // Spread and speed + ); + } + + } +} diff --git a/src/main/resources/assets/lifedrain/lang/cs_cz.json b/src/main/resources/assets/lifedrain/lang/cs_cz.json index 466a687..02395fd 100644 --- a/src/main/resources/assets/lifedrain/lang/cs_cz.json +++ b/src/main/resources/assets/lifedrain/lang/cs_cz.json @@ -1,16 +1,20 @@ { - "config.lifedrain.title": "Nastavení pro Lifedrain", - "config.lifedrain.general": "Hlavní", + "config.lifedrain.title": "Nastavení pro LifeDrain", + "config.lifedrain.general": "Obecné", "config.lifedrain.enableParticles": "Zapnout Partikly", - "config.lifedrain.lifestealCooldown": "Cooldown na lifesteal (ms)", - "config.lifedrain.baseHealEasy": "Základní léčení (Jednoduchá Obtíž.)", - "config.lifedrain.baseHealNormal": "Základní léčení (Střední Obtíž.)", - "config.lifedrain.baseHealHard": "Základní léčení (Těžká Obtíž.)", + "config.lifedrain.lifestealCooldown": "Cooldown na Lifesteal (ms)", + "config.lifedrain.baseHealEasy": "Základní léčení (Snadná obtížnost)", + "config.lifedrain.baseHealNormal": "Základní léčení (Střední obtížnost)", + "config.lifedrain.baseHealHard": "Základní léčení (Těžká obtížnost)", "config.lifedrain.bonusHealMultiplier": "Bonusový násobitel léčení", - "config.lifedrain.enableParticles.tooltip": "toto nastavení je pouze pro klient. Server jej může změnit. Ve hře pro jednoho hráče fungujou tyto nastavení.", - "config.lifedrain.lifestealCooldown.tooltip": "Cooldown pro stranu server, nastavení v klientu je ignorováno, ve hře pro jednoho hráče jsou použity tyto nastavení.", - "config.lifedrain.baseHealEasy.tooltip": "Server rozhoduje o základních hodnotách léčení, ve hře pro jednoho hráče je použita tato možnost.", - "config.lifedrain.baseHealNormal.tooltip": "Server rozhoduje o základních hodnotách léčení, ve hře pro jednoho hráče je použita tato možnost.", - "config.lifedrain.baseHealHard.tooltip": "Server rozhoduje o základních hodnotách léčení, ve hře pro jednoho hráče je použita tato možnost.", - "config.lifedrain.bonusHealMultiplier.tooltip": "Server rozhoduje o násobiteli léčení, ve hře pro jednoho hráče je použita tato možnost." -} \ No newline at end of file + "config.lifedrain.mobsHealOnHit": "Zapnout léčení mobů při útoku na hráče", + "config.lifedrain.mobHealAmountEasy": "Množství léčení pro moby (Snadná obtížnost)", + "config.lifedrain.mobHealAmountNormal": "Množství léčení pro moby (Střední obtížnost)", + "config.lifedrain.mobHealAmountHard": "Množství léčení pro moby (Těžká obtížnost)", + "config.lifedrain.enableParticles.tooltip": "Toto nastavení je pouze pro klienta. Server může toto nastavení přepsat. Ve hře pro jednoho hráče tato nastavení platí.", + "config.lifedrain.lifestealCooldown.tooltip": "Cooldown nastavení pro server. Nastavení klienta je ignorováno. Ve hře pro jednoho hráče toto nastavení platí.", + "config.lifedrain.baseHeal.tooltip": "Server určuje základní hodnoty léčení. Ve hře pro jednoho hráče tato možnost platí.", + "config.lifedrain.bonusHealMultiplier.tooltip": "Server určuje násobitel léčení. Ve hře pro jednoho hráče tato možnost platí.", + "config.lifedrain.mobsHealOnHit.tooltip": "Umožňuje mobům léčit se, když úspěšně zaútočí na hráče.", + "config.lifedrain.mobHealAmount.tooltip": "Určuje množství zdraví, které se mobům obnoví při útoku na hráče." +} diff --git a/src/main/resources/assets/lifedrain/lang/de_de.json b/src/main/resources/assets/lifedrain/lang/de_de.json index b133dc7..e8ff72c 100644 --- a/src/main/resources/assets/lifedrain/lang/de_de.json +++ b/src/main/resources/assets/lifedrain/lang/de_de.json @@ -7,10 +7,14 @@ "config.lifedrain.baseHealNormal": "Basisheilung (Normal)", "config.lifedrain.baseHealHard": "Basisheilung (Schwierig)", "config.lifedrain.bonusHealMultiplier": "Bonus Heilungs Multiplikator", + "config.lifedrain.mobsHealOnHit": "Mob-Heilung bei Spielerangriff aktivieren", + "config.lifedrain.mobHealAmountEasy": "Heilungsmenge für Mobs (Einfach)", + "config.lifedrain.mobHealAmountNormal": "Heilungsmenge für Mobs (Normal)", + "config.lifedrain.mobHealAmountHard": "Heilungsmenge für Mobs (Schwer)", "config.lifedrain.enableParticles.tooltip": "Diese Einstellung betrifft nur den Client. Der Server kann sie überschreiben. Im Einzelspieler-Modus funktionieren die Werte lokal.", "config.lifedrain.lifestealCooldown.tooltip": "Der Cooldown-Wert des Servers wird verwendet, und die Client-Einstellungen werden ignoriert. Im Einzelspieler-Modus funktionieren die Werte lokal.", - "config.lifedrain.baseHealEasy.tooltip": "Der Server bestimmt die Grundheilungswerte. Im Einzelspieler-Modus funktionieren die Werte lokal.", - "config.lifedrain.baseHealNormal.tooltip": "Der Server bestimmt die Grundheilungswerte. Im Einzelspieler-Modus funktionieren die Werte lokal.", - "config.lifedrain.baseHealHard.tooltip": "Der Server bestimmt die Grundheilungswerte. Im Einzelspieler-Modus funktionieren die Werte lokal.", - "config.lifedrain.bonusHealMultiplier.tooltip": "Der Server bestimmt den Bonusheilungs-Multiplikator. Im Einzelspieler-Modus funktionieren die Werte lokal." + "config.lifedrain.baseHeal.tooltip": "Der Server bestimmt die Grundheilungswerte. Im Einzelspieler-Modus funktionieren die Werte lokal.", + "config.lifedrain.bonusHealMultiplier.tooltip": "Der Server bestimmt den Bonusheilungs-Multiplikator. Im Einzelspieler-Modus funktionieren die Werte lokal.", + "config.lifedrain.mobsHealOnHit.tooltip": "Ermöglicht Mobs, sich zu heilen, wenn sie erfolgreich einen Spieler angreifen.", + "config.lifedrain.mobHealAmount.tooltip": "Legt die Menge an Gesundheit fest, die Mobs heilen, wenn sie einen Spieler angreifen." } \ No newline at end of file diff --git a/src/main/resources/assets/lifedrain/lang/en_us.json b/src/main/resources/assets/lifedrain/lang/en_us.json index 9912611..388fe46 100644 --- a/src/main/resources/assets/lifedrain/lang/en_us.json +++ b/src/main/resources/assets/lifedrain/lang/en_us.json @@ -7,10 +7,14 @@ "config.lifedrain.baseHealNormal": "Base Heal (Normal)", "config.lifedrain.baseHealHard": "Base Heal (Hard)", "config.lifedrain.bonusHealMultiplier": "Bonus Heal Multiplier", + "config.lifedrain.mobsHealOnHit": "Enable Mob Healing on Player Hit", + "config.lifedrain.mobHealAmountEasy": "Amount Healed by Mobs (Easy)", + "config.lifedrain.mobHealAmountNormal": "Amount Healed by Mobs (Normal)", + "config.lifedrain.mobHealAmountHard": "Amount Healed by Mobs (Hard)", "config.lifedrain.enableParticles.tooltip": "This setting only affects the client. The server may override it. In single-player, values will work locally.", "config.lifedrain.lifestealCooldown.tooltip": "Server-side cooldown value is used, and client settings are ignored. In single-player, values will work locally.", - "config.lifedrain.baseHealEasy.tooltip": "Server determines the base healing values. In single-player, values will work locally.", - "config.lifedrain.baseHealNormal.tooltip": "Server determines the base healing values. In single-player, values will work locally.", - "config.lifedrain.baseHealHard.tooltip": "Server determines the base healing values. In single-player, values will work locally.", - "config.lifedrain.bonusHealMultiplier.tooltip": "Server determines the bonus healing multiplier. In single-player, values will work locally." + "config.lifedrain.baseHeal.tooltip": "Server determines the base healing values. In single-player, values will work locally.", + "config.lifedrain.bonusHealMultiplier.tooltip": "Server determines the bonus healing multiplier. In single-player, values will work locally.", + "config.lifedrain.mobsHealOnHit.tooltip": "Allows mobs to heal themselves when they successfully attack a player.", + "config.lifedrain.mobHealAmount.tooltip": "Specifies the amount of health mobs heal when they attack a player." } \ No newline at end of file diff --git a/src/main/resources/assets/lifedrain/lang/es_es.json b/src/main/resources/assets/lifedrain/lang/es_es.json index de1ae22..61e3a73 100644 --- a/src/main/resources/assets/lifedrain/lang/es_es.json +++ b/src/main/resources/assets/lifedrain/lang/es_es.json @@ -7,10 +7,14 @@ "config.lifedrain.baseHealNormal": "Curación base (Normal)", "config.lifedrain.baseHealHard": "Curación base (Difícil)", "config.lifedrain.bonusHealMultiplier": "Multiplicador de curación adicional", + "config.lifedrain.mobsHealOnHit": "Habilitar curación de mobs al golpear jugadores", + "config.lifedrain.mobHealAmountEasy": "Cantidad curada por mobs (Fácil)", + "config.lifedrain.mobHealAmountNormal": "Cantidad curada por mobs (Normal)", + "config.lifedrain.mobHealAmountHard": "Cantidad curada por mobs (Difícil)", "config.lifedrain.enableParticles.tooltip": "Esta opción solo afecta al cliente. El servidor puede sobrescribirla. En single-player, los valores funcionarán localmente.", "config.lifedrain.lifestealCooldown.tooltip": "El valor de cooldown del servidor se usa, y los ajustes del cliente son ignorados. En single-player, los valores funcionarán localmente.", - "config.lifedrain.baseHealEasy.tooltip": "El servidor determina los valores base de curación. En single-player, los valores funcionarán localmente.", - "config.lifedrain.baseHealNormal.tooltip": "El servidor determina los valores base de curación. En single-player, los valores funcionarán localmente.", - "config.lifedrain.baseHealHard.tooltip": "El servidor determina los valores base de curación. En single-player, los valores funcionarán localmente.", - "config.lifedrain.bonusHealMultiplier.tooltip": "El servidor determina el multiplicador de curación adicional. En single-player, los valores funcionarán localmente." + "config.lifedrain.baseHeal.tooltip": "El servidor determina los valores base de curación. En single-player, los valores funcionarán localmente.", + "config.lifedrain.bonusHealMultiplier.tooltip": "El servidor determina el multiplicador de curación adicional. En single-player, los valores funcionarán localmente.", + "config.lifedrain.mobsHealOnHit.tooltip": "Permite a los mobs curarse cuando atacan exitosamente a un jugador.", + "config.lifedrain.mobHealAmount.tooltip": "Especifica la cantidad de salud que curan los mobs al atacar a un jugador." } \ No newline at end of file diff --git a/src/main/resources/assets/lifedrain/lang/es_mx.json b/src/main/resources/assets/lifedrain/lang/es_mx.json index 0c94eed..5e2ecc7 100644 --- a/src/main/resources/assets/lifedrain/lang/es_mx.json +++ b/src/main/resources/assets/lifedrain/lang/es_mx.json @@ -7,10 +7,14 @@ "config.lifedrain.baseHealNormal": "Curación base (Normal)", "config.lifedrain.baseHealHard": "Curación base (Difícil)", "config.lifedrain.bonusHealMultiplier": "Multiplicador de curación extra", + "config.lifedrain.mobsHealOnHit": "Habilitar curación de mobs al golpear jugadores", + "config.lifedrain.mobHealAmountEasy": "Cantidad sanada por mobs (Fácil)", + "config.lifedrain.mobHealAmountNormal": "Cantidad sanada por mobs (Normal)", + "config.lifedrain.mobHealAmountHard": "Cantidad sanada por mobs (Difícil)", "config.lifedrain.enableParticles.tooltip": "Esta opción solo afecta al cliente. El servidor puede sobrescribirla. En single-player, los valores funcionarán localmente.", "config.lifedrain.lifestealCooldown.tooltip": "El valor de cooldown del servidor se usa, y los ajustes del cliente son ignorados. En single-player, los valores funcionarán localmente.", - "config.lifedrain.baseHealEasy.tooltip": "El servidor determina los valores base de curación. En single-player, los valores funcionarán localmente.", - "config.lifedrain.baseHealNormal.tooltip": "El servidor determina los valores base de curación. En single-player, los valores funcionarán localmente.", - "config.lifedrain.baseHealHard.tooltip": "El servidor determina los valores base de curación. En single-player, los valores funcionarán localmente.", - "config.lifedrain.bonusHealMultiplier.tooltip": "El servidor determina el multiplicador de curación adicional. En single-player, los valores funcionarán localmente." + "config.lifedrain.baseHeal.tooltip": "El servidor determina los valores base de curación. En single-player, los valores funcionarán localmente.", + "config.lifedrain.bonusHealMultiplier.tooltip": "El servidor determina el multiplicador de curación adicional. En single-player, los valores funcionarán localmente.", + "config.lifedrain.mobsHealOnHit.tooltip": "Permite a los mobs curarse cuando atacan exitosamente a un jugador.", + "config.lifedrain.mobHealAmount.tooltip": "Especifica la cantidad de salud que curan los mobs al atacar a un jugador." } \ No newline at end of file diff --git a/src/main/resources/assets/lifedrain/lang/fr_fr.json b/src/main/resources/assets/lifedrain/lang/fr_fr.json index 2ac98ea..6084e27 100644 --- a/src/main/resources/assets/lifedrain/lang/fr_fr.json +++ b/src/main/resources/assets/lifedrain/lang/fr_fr.json @@ -7,10 +7,14 @@ "config.lifedrain.baseHealNormal": "Guérison de base (Normal)", "config.lifedrain.baseHealHard": "Guérison de base (Difficile)", "config.lifedrain.bonusHealMultiplier": "Multiplicateur de guérison bonus", + "config.lifedrain.mobsHealOnHit": "Activer la guérison des mobs lors d'une attaque sur un joueur", + "config.lifedrain.mobHealAmountEasy": "Quantité soignée par les mobs (Facile)", + "config.lifedrain.mobHealAmountNormal": "Quantité soignée par les mobs (Normal)", + "config.lifedrain.mobHealAmountHard": "Quantité soignée par les mobs (Difficile)", "config.lifedrain.enableParticles.tooltip": "Cette option n'affecte que le client. Le serveur peut la remplacer. En single-player, les valeurs fonctionneront localement.", "config.lifedrain.lifestealCooldown.tooltip": "La valeur de cooldown du serveur est utilisée, les paramètres du client sont ignorés. En single-player, les valeurs fonctionneront localement.", - "config.lifedrain.baseHealEasy.tooltip": "Le serveur détermine les valeurs de guérison de base. En single-player, les valeurs fonctionneront localement.", - "config.lifedrain.baseHealNormal.tooltip": "Le serveur détermine les valeurs de guérison de base. En single-player, les valeurs fonctionneront localement.", - "config.lifedrain.baseHealHard.tooltip": "Le serveur détermine les valeurs de guérison de base. En single-player, les valeurs fonctionneront localement.", - "config.lifedrain.bonusHealMultiplier.tooltip": "Le serveur détermine le multiplicateur de guérison bonus. En single-player, les valeurs fonctionneront localement." + "config.lifedrain.baseHeal.tooltip": "Le serveur détermine les valeurs de guérison de base. En single-player, les valeurs fonctionneront localement.", + "config.lifedrain.bonusHealMultiplier.tooltip": "Le serveur détermine le multiplicateur de guérison bonus. En single-player, les valeurs fonctionneront localement.", + "config.lifedrain.mobsHealOnHit.tooltip": "Permet aux mobs de se soigner lorsqu'ils attaquent avec succès un joueur.", + "config.lifedrain.mobHealAmount.tooltip": "Spécifie la quantité de santé que les mobs récupèrent lorsqu'ils attaquent un joueur." } \ No newline at end of file diff --git a/src/main/resources/assets/lifedrain/lang/ja_jp.json b/src/main/resources/assets/lifedrain/lang/ja_jp.json index d32098b..eaa0a32 100644 --- a/src/main/resources/assets/lifedrain/lang/ja_jp.json +++ b/src/main/resources/assets/lifedrain/lang/ja_jp.json @@ -7,10 +7,14 @@ "config.lifedrain.baseHealNormal": "基本回復 (ノーマル)", "config.lifedrain.baseHealHard": "基本回復 (ハード)", "config.lifedrain.bonusHealMultiplier": "ボーナス回復乗数", + "config.lifedrain.mobsHealOnHit": "プレイヤー攻撃時のモブ回復を有効化", + "config.lifedrain.mobHealAmountEasy": "モブの回復量(イージー)", + "config.lifedrain.mobHealAmountNormal": "モブの回復量(ノーマル)", + "config.lifedrain.mobHealAmountHard": "モブの回復量(ハード)", "config.lifedrain.enableParticles.tooltip": "この設定はクライアントにのみ影響します。サーバーが上書きする可能性があります。シングルプレイヤーでは値がローカルで適用されます。", "config.lifedrain.lifestealCooldown.tooltip": "サーバー側のクールダウン値が使用され、クライアント設定は無視されます。シングルプレイヤーでは値がローカルで適用されます。", - "config.lifedrain.baseHealEasy.tooltip": "サーバーが基本的な回復値を決定します。シングルプレイヤーでは値がローカルで適用されます。", - "config.lifedrain.baseHealNormal.tooltip": "サーバーが基本的な回復値を決定します。シングルプレイヤーでは値がローカルで適用されます。", - "config.lifedrain.baseHealHard.tooltip": "サーバーが基本的な回復値を決定します。シングルプレイヤーでは値がローカルで適用されます。", - "config.lifedrain.bonusHealMultiplier.tooltip": "サーバーがボーナス回復倍率を決定します。シングルプレイヤーでは値がローカルで適用されます。" + "config.lifedrain.baseHeal.tooltip": "サーバーが基本的な回復値を決定します。シングルプレイヤーでは値がローカルで適用されます。", + "config.lifedrain.bonusHealMultiplier.tooltip": "サーバーがボーナス回復倍率を決定します。シングルプレイヤーでは値がローカルで適用されます。", + "config.lifedrain.mobsHealOnHit.tooltip": "モブがプレイヤーを攻撃した際に自身を回復することを許可します。", + "config.lifedrain.mobHealAmount.tooltip": "モブがプレイヤーを攻撃した際に回復する体力の量を指定します。" } \ No newline at end of file diff --git a/src/main/resources/assets/lifedrain/lang/ko_kr.json b/src/main/resources/assets/lifedrain/lang/ko_kr.json index 255b20e..b0f7a05 100644 --- a/src/main/resources/assets/lifedrain/lang/ko_kr.json +++ b/src/main/resources/assets/lifedrain/lang/ko_kr.json @@ -7,10 +7,14 @@ "config.lifedrain.baseHealNormal": "기본 치유 (일반)", "config.lifedrain.baseHealHard": "기본 치유 (어려움)", "config.lifedrain.bonusHealMultiplier": "보너스 치유 배율", + "config.lifedrain.mobsHealOnHit": "플레이어를 공격한 몹 치유 활성화", + "config.lifedrain.mobHealAmountEasy": "몹의 회복량 (쉬움)", + "config.lifedrain.mobHealAmountNormal": "몹의 회복량 (보통)", + "config.lifedrain.mobHealAmountHard": "몹의 회복량 (어려움)", "config.lifedrain.enableParticles.tooltip": "이 설정은 클라이언트에만 영향을 미칩니다. 서버에서 덮어쓸 수 있습니다. 싱글 플레이어에서 값은 로컬로 적용됩니다.", "config.lifedrain.lifestealCooldown.tooltip": "서버 측 쿨다운 값이 사용되며, 클라이언트 설정은 무시됩니다. 싱글 플레이어에서 값은 로컬로 적용됩니다.", - "config.lifedrain.baseHealEasy.tooltip": "서버가 기본 치유 값을 결정합니다. 싱글 플레이어에서 값은 로컬로 적용됩니다.", - "config.lifedrain.baseHealNormal.tooltip": "서버가 기본 치유 값을 결정합니다. 싱글 플레이어에서 값은 로컬로 적용됩니다.", - "config.lifedrain.baseHealHard.tooltip": "서버가 기본 치유 값을 결정합니다. 싱글 플레이어에서 값은 로컬로 적용됩니다.", - "config.lifedrain.bonusHealMultiplier.tooltip": "서버가 보너스 치유 배율을 결정합니다. 싱글 플레이어에서 값은 로컬로 적용됩니다." + "config.lifedrain.baseHeal.tooltip": "서버가 기본 치유 값을 결정합니다. 싱글 플레이어에서 값은 로컬로 적용됩니다.", + "config.lifedrain.bonusHealMultiplier.tooltip": "서버가 보너스 치유 배율을 결정합니다. 싱글 플레이어에서 값은 로컬로 적용됩니다.", + "config.lifedrain.mobsHealOnHit.tooltip": "몹이 플레이어를 성공적으로 공격할 때 자신을 치유할 수 있도록 허용합니다.", + "config.lifedrain.mobHealAmount.tooltip": "몹이 플레이어를 공격할 때 치유되는 체력량을 지정합니다." } \ No newline at end of file diff --git a/src/main/resources/assets/lifedrain/lang/pl_pl.json b/src/main/resources/assets/lifedrain/lang/pl_pl.json index 2f1002c..449c619 100644 --- a/src/main/resources/assets/lifedrain/lang/pl_pl.json +++ b/src/main/resources/assets/lifedrain/lang/pl_pl.json @@ -7,10 +7,14 @@ "config.lifedrain.baseHealNormal": "Podstawowe Leczenie (Normalny)", "config.lifedrain.baseHealHard": "Podstawowe Leczenie (Trudny)", "config.lifedrain.bonusHealMultiplier": "Mnożnik Leczenia Bonusowego", + "config.lifedrain.mobsHealOnHit": "Włącz leczenie mobów po trafieniu gracza", + "config.lifedrain.mobHealAmountEasy": "Ilość leczenia przez moby (Łatwy)", + "config.lifedrain.mobHealAmountNormal": "Ilość leczenia przez moby (Normalny)", + "config.lifedrain.mobHealAmountHard": "Ilość leczenia przez moby (Trudny)", "config.lifedrain.enableParticles.tooltip": "To ustawienie wpływa tylko na klienta. Serwer może je nadpisać. W trybie single-player wartości będą działały lokalnie.", "config.lifedrain.lifestealCooldown.tooltip": "Wartość cooldownu serwera jest używana, a ustawienia klienta są ignorowane. W trybie single-player wartości będą działały lokalnie.", - "config.lifedrain.baseHealEasy.tooltip": "Serwer ustala podstawowe wartości leczenia. W trybie single-player wartości będą działały lokalnie.", - "config.lifedrain.baseHealNormal.tooltip": "Serwer ustala podstawowe wartości leczenia. W trybie single-player wartości będą działały lokalnie.", - "config.lifedrain.baseHealHard.tooltip": "Serwer ustala podstawowe wartości leczenia. W trybie single-player wartości będą działały lokalnie.", - "config.lifedrain.bonusHealMultiplier.tooltip": "Serwer ustala mnożnik bonusowego leczenia. W trybie single-player wartości będą działały lokalnie." + "config.lifedrain.baseHeal.tooltip": "Serwer ustala podstawowe wartości leczenia. W trybie single-player wartości będą działały lokalnie.", + "config.lifedrain.bonusHealMultiplier.tooltip": "Serwer ustala mnożnik bonusowego leczenia. W trybie single-player wartości będą działały lokalnie.", + "config.lifedrain.mobsHealOnHit.tooltip": "Pozwala mobom leczyć się po udanym ataku na gracza.", + "config.lifedrain.mobHealAmount.tooltip": "Określa ilość zdrowia, którą moby leczą, gdy atakują gracza." } \ No newline at end of file diff --git a/src/main/resources/assets/lifedrain/lang/ru_ru.json b/src/main/resources/assets/lifedrain/lang/ru_ru.json index 9ec19f0..d6bf14a 100644 --- a/src/main/resources/assets/lifedrain/lang/ru_ru.json +++ b/src/main/resources/assets/lifedrain/lang/ru_ru.json @@ -7,10 +7,14 @@ "config.lifedrain.baseHealNormal": "Основное исцеление (Нормальный)", "config.lifedrain.baseHealHard": "Основное исцеление (Трудный)", "config.lifedrain.bonusHealMultiplier": "Множитель бонусного исцеления", + "config.lifedrain.mobsHealOnHit": "Включить восстановление здоровья у мобов при ударе по игроку", + "config.lifedrain.mobHealAmountEasy": "Количество лечения мобов (Легкий)", + "config.lifedrain.mobHealAmountNormal": "Количество лечения мобов (Нормальный)", + "config.lifedrain.mobHealAmountHard": "Количество лечения мобов (Трудный)", "config.lifedrain.enableParticles.tooltip": "Эта настройка влияет только на клиент. Сервер может её переопределить. В синглплеере значения будут работать локально.", "config.lifedrain.lifestealCooldown.tooltip": "Значение времени восстановления на сервере используется, а настройки клиента игнорируются. В синглплеере значения будут работать локально.", - "config.lifedrain.baseHealEasy.tooltip": "Сервер определяет основные значения исцеления. В синглплеере значения будут работать локально.", - "config.lifedrain.baseHealNormal.tooltip": "Сервер определяет основные значения исцеления. В синглплеере значения будут работать локально.", - "config.lifedrain.baseHealHard.tooltip": "Сервер определяет основные значения исцеления. В синглплеере значения будут работать локально.", - "config.lifedrain.bonusHealMultiplier.tooltip": "Сервер определяет множитель дополнительного исцеления. В синглплеере значения будут работать локально." + "config.lifedrain.baseHeal.tooltip": "Сервер определяет основные значения исцеления. В синглплеере значения будут работать локально.", + "config.lifedrain.bonusHealMultiplier.tooltip": "Сервер определяет множитель дополнительного исцеления. В синглплеере значения будут работать локально.", + "config.lifedrain.mobsHealOnHit.tooltip": "Позволяет мобам восстанавливать здоровье при успешной атаке на игрока.", + "config.lifedrain.mobHealAmount.tooltip": "Указывает объём здоровья, восстанавливаемый мобами при атаке на игрока." } \ No newline at end of file diff --git a/src/main/resources/assets/lifedrain/lang/zh_cn.json b/src/main/resources/assets/lifedrain/lang/zh_cn.json index c93a795..93b0199 100644 --- a/src/main/resources/assets/lifedrain/lang/zh_cn.json +++ b/src/main/resources/assets/lifedrain/lang/zh_cn.json @@ -7,10 +7,14 @@ "config.lifedrain.baseHealNormal": "基础治疗 (正常)", "config.lifedrain.baseHealHard": "基础治疗 (困难)", "config.lifedrain.bonusHealMultiplier": "额外治疗倍增", + "config.lifedrain.mobsHealOnHit": "启用怪物攻击玩家时恢复生命", + "config.lifedrain.mobHealAmountEasy": "怪物治疗量(简单)", + "config.lifedrain.mobHealAmountNormal": "怪物治疗量(普通)", + "config.lifedrain.mobHealAmountHard": "怪物治疗量(困难)", "config.lifedrain.enableParticles.tooltip": "此设置仅影响客户端。服务器可能会覆盖它。在单人游戏中,值将本地生效。", "config.lifedrain.lifestealCooldown.tooltip": "服务器的冷却时间值会被使用,客户端设置将被忽略。在单人游戏中,值将本地生效。", - "config.lifedrain.baseHealEasy.tooltip": "服务器决定基础治疗值。在单人游戏中,值将本地生效。", - "config.lifedrain.baseHealNormal.tooltip": "服务器决定基础治疗值。在单人游戏中,值将本地生效。", - "config.lifedrain.baseHealHard.tooltip": "服务器决定基础治疗值。在单人游戏中,值将本地生效。", - "config.lifedrain.bonusHealMultiplier.tooltip": "服务器决定额外治疗倍数。在单人游戏中,值将本地生效。" + "config.lifedrain.baseHeal.tooltip": "服务器决定基础治疗值。在单人游戏中,值将本地生效。", + "config.lifedrain.bonusHealMultiplier.tooltip": "服务器决定额外治疗倍数。在单人游戏中,值将本地生效。", + "config.lifedrain.mobsHealOnHit.tooltip": "允许怪物在成功攻击玩家时恢复生命值。", + "config.lifedrain.mobHealAmount.tooltip": "指定怪物攻击玩家时恢复的生命值数量。" } \ No newline at end of file diff --git a/src/main/resources/lifedrain.mixins.json b/src/main/resources/lifedrain.mixins.json index 02959ac..b600f2f 100644 --- a/src/main/resources/lifedrain.mixins.json +++ b/src/main/resources/lifedrain.mixins.json @@ -1,11 +1,12 @@ { - "required": true, - "package": "vorlie.lifedrain.mixin", - "compatibilityLevel": "JAVA_21", - "mixins": [ - "ExampleMixin" - ], - "injectors": { - "defaultRequire": 1 + "required": true, + "package": "vorlie.lifedrain.mixin", + "compatibilityLevel": "JAVA_21", + "mixins": [ + "ExampleMixin", + "MobHealHandlerMixin" + ], + "injectors": { + "defaultRequire": 1 } } \ No newline at end of file From 04e5fbeff40ae6b33579bba7a57b391299225af0 Mon Sep 17 00:00:00 2001 From: vorlie Date: Thu, 16 Jan 2025 18:09:55 +0100 Subject: [PATCH 3/5] chore: update mob heal amount for harder difficulty --- src/main/java/vorlie/lifedrain/config/LifeDrainConfig.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/vorlie/lifedrain/config/LifeDrainConfig.java b/src/main/java/vorlie/lifedrain/config/LifeDrainConfig.java index 7cbc19c..6c4682b 100644 --- a/src/main/java/vorlie/lifedrain/config/LifeDrainConfig.java +++ b/src/main/java/vorlie/lifedrain/config/LifeDrainConfig.java @@ -11,7 +11,7 @@ public class LifeDrainConfig { public static final boolean DEFAULT_ENABLE_MOB_HEAL = true; public static final float DEFAULT_MOB_HEAL_AMOUNT_EASY = 0.5F; public static final float DEFAULT_MOB_HEAL_AMOUNT_NORMAL = 1.0F; - public static final float DEFAULT_MOB_HEAL_AMOUNT_HARD = 4.0F; + public static final float DEFAULT_MOB_HEAL_AMOUNT_HARD = 2.0F; public boolean enableParticles = DEFAULT_ENABLE_PARTICLES; public boolean mobsHealOnHit = DEFAULT_ENABLE_MOB_HEAL; From 06ea8c82d5ab8c253c5a6ef3995ff31e237eeb56 Mon Sep 17 00:00:00 2001 From: vorlie Date: Thu, 16 Jan 2025 18:11:11 +0100 Subject: [PATCH 4/5] forgot to update this as well --- src/client/java/vorlie/lifedrain/ModMenuIntegration.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/client/java/vorlie/lifedrain/ModMenuIntegration.java b/src/client/java/vorlie/lifedrain/ModMenuIntegration.java index 243e768..71486cd 100644 --- a/src/client/java/vorlie/lifedrain/ModMenuIntegration.java +++ b/src/client/java/vorlie/lifedrain/ModMenuIntegration.java @@ -70,7 +70,7 @@ public ConfigScreenFactory getModConfigScreenFactory() { // Mob Heal Amount (Hard) general.addEntry(entryBuilder .startFloatField(Text.translatable("config.lifedrain.mobHealAmountHard"), ConfigManager.CONFIG.mobHealAmountHard) - .setDefaultValue(4.0F) + .setDefaultValue(2.0F) .setMin(0.0F) .setSaveConsumer(value -> ConfigManager.CONFIG.mobHealAmountHard = value) .setTooltip(Text.translatable("config.lifedrain.mobHealAmount.tooltip")) From 6cb1eecbca439d9b8ec475dded8734785e12f8dd Mon Sep 17 00:00:00 2001 From: vorlie Date: Thu, 16 Jan 2025 18:12:02 +0100 Subject: [PATCH 5/5] change version to stable --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 8fdac22..1437acb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,7 +9,7 @@ yarn_mappings=1.21+build.9 loader_version=0.16.10 # Mod Properties -mod_version=1.0.6-dev +mod_version=1.0.6 maven_group=vorlie.lifedrain archives_base_name=lifedrain