Часть функционала PotionLogger | UseTraker | 3.1 | Evcalipse

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
16 Авг 2025
Сообщения
38
Реакции
0
Выберите загрузчик игры
  1. OptiFine
  2. ForgeOptiFine
  3. Прочие моды
Знаю что сливали, но код мой с допами
(
Пожалуйста, авторизуйтесь для просмотра ссылки.
)
code:

JavaScript:
Expand Collapse Copy
package log.evcalipse.modules.impl.misc;

import com.google.common.eventbus.Subscribe;
import log.evcalipse.config.FriendStorage;
import log.evcalipse.events.EventUpdate;
import log.evcalipse.modules.api.Module;
import log.evcalipse.modules.api.ModuleRegister;
import log.evcalipse.modules.api.Category;
import log.evcalipse.modules.settings.impl.BooleanSetting;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.potion.Effect;
import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.Effects;
import net.minecraft.util.text.TextFormatting;

import java.util.HashMap;
import java.util.Map;

@ModuleRegister(name = "UseTracker", category = Category.Misc, description = "Отслеживание эффектов и тотемов")
public class PotionLogger extends Module {

    private static final Map<Effect, String> EFFECT_TRANSLATIONS = new HashMap<>() {{
        put(Effects.SPEED, "Скорость");
        put(Effects.SLOWNESS, "Медлительность");
        put(Effects.STRENGTH, "Сила");
        put(Effects.WEAKNESS, "Слабость");
        put(Effects.INSTANT_HEALTH, "Мгновенное Исцеление");
        put(Effects.INSTANT_DAMAGE, "Мгновенный Урон");
        put(Effects.RESISTANCE, "Сопротивление");
        put(Effects.HASTE, "Спешка");
        put(Effects.MINING_FATIGUE, "Утомление");
        put(Effects.REGENERATION, "Регенерация");
        put(Effects.WITHER, "Иссушение");
        put(Effects.POISON, "Отравление");
        put(Effects.FIRE_RESISTANCE, "Огнеупорность");
        put(Effects.ABSORPTION, "Поглощение");
        put(Effects.INVISIBILITY, "Невидимость");
        put(Effects.GLOWING, "Свечение");
        put(Effects.HUNGER, "Голод");
        put(Effects.JUMP_BOOST, "Прыгучесть");
        put(Effects.NAUSEA, "Тошнота");
        put(Effects.NIGHT_VISION, "Ночное Зрение");
        put(Effects.BLINDNESS, "Слепота");
        put(Effects.WATER_BREATHING, "Подводное Дыхание");
        put(Effects.LEVITATION, "Левитация");
        put(Effects.SLOW_FALLING, "Медленное Падение");
        put(Effects.LUCK, "Удача");
        put(Effects.UNLUCK, "Неудача");
        put(Effects.CONDUIT_POWER, "Сила Кондуита");
        put(Effects.DOLPHINS_GRACE, "Грация Дельфина");
        put(Effects.BAD_OMEN, "Плохое Знамение");
        put(Effects.HERO_OF_THE_VILLAGE, "Герой Деревни");
        put(Effects.HEALTH_BOOST, "Прилив Здоровья");
    }};

    private static final Map<Effect, TextFormatting> EFFECT_COLORS = new HashMap<>() {{
        put(Effects.SPEED, TextFormatting.AQUA);
        put(Effects.SLOWNESS, TextFormatting.DARK_AQUA);
        put(Effects.STRENGTH, TextFormatting.RED);
        put(Effects.WEAKNESS, TextFormatting.DARK_RED);
        put(Effects.INSTANT_HEALTH, TextFormatting.RED);
        put(Effects.INSTANT_DAMAGE, TextFormatting.DARK_RED);
        put(Effects.RESISTANCE, TextFormatting.GRAY);
        put(Effects.HASTE, TextFormatting.YELLOW);
        put(Effects.REGENERATION, TextFormatting.LIGHT_PURPLE);
        put(Effects.WITHER, TextFormatting.DARK_GRAY);
        put(Effects.POISON, TextFormatting.GREEN);
        put(Effects.FIRE_RESISTANCE, TextFormatting.GOLD);
        put(Effects.ABSORPTION, TextFormatting.YELLOW);
        put(Effects.INVISIBILITY, TextFormatting.GRAY);
        put(Effects.GLOWING, TextFormatting.WHITE);
        put(Effects.HUNGER, TextFormatting.DARK_GREEN);
        put(Effects.JUMP_BOOST, TextFormatting.GREEN);
        put(Effects.NAUSEA, TextFormatting.DARK_PURPLE);
        put(Effects.NIGHT_VISION, TextFormatting.DARK_BLUE);
        put(Effects.BLINDNESS, TextFormatting.DARK_GRAY);
        put(Effects.WATER_BREATHING, TextFormatting.BLUE);
        put(Effects.LEVITATION, TextFormatting.LIGHT_PURPLE);
        put(Effects.SLOW_FALLING, TextFormatting.WHITE);
        put(Effects.LUCK, TextFormatting.GREEN);
        put(Effects.UNLUCK, TextFormatting.DARK_GRAY);
        put(Effects.CONDUIT_POWER, TextFormatting.AQUA);
        put(Effects.DOLPHINS_GRACE, TextFormatting.AQUA);
        put(Effects.BAD_OMEN, TextFormatting.DARK_RED);
        put(Effects.HERO_OF_THE_VILLAGE, TextFormatting.GREEN);
    }};

    private final BooleanSetting trackSelf = new BooleanSetting("Отмечать себя", false);
    private final BooleanSetting skipFriends = new BooleanSetting("Пропускать друзей", true);
    private final BooleanSetting totemPop = new BooleanSetting("Отслеживать тотемы", true);
    private final BooleanSetting useEffectColors = new BooleanSetting("Цветные эффекты", true);
    private final BooleanSetting onlyExplosive = new BooleanSetting("Только взрывные", false);

    private final Map<String, Map<Effect, Integer>> playerPotionEffects = new HashMap<>();
    private final Map<String, Integer> playerTotemCount = new HashMap<>();
    private final Map<String, ItemStack> lastTotemStack = new HashMap<>();

    public PotionLogger() {
        addSettings(trackSelf, skipFriends, totemPop, useEffectColors, onlyExplosive);
    }

    @Subscribe
    public void onUpdate(EventUpdate event) {
        if (mc.world == null || mc.player == null) return;

        for (PlayerEntity player : mc.world.getPlayers()) {
            String playerName = player.getName().getString();
            if (!trackSelf.get() && player == mc.player) continue;
            if (skipFriends.get() && FriendStorage.isFriend(playerName)) continue;

            int currentTotemCount = countTotems(player);
            Integer lastCount = playerTotemCount.get(playerName);

            Map<Effect, Integer> previousEffects = playerPotionEffects.getOrDefault(playerName, new HashMap<>());
            Map<Effect, Integer> currentEffects = new HashMap<>();
            StringBuilder effectMessage = new StringBuilder();

            for (EffectInstance instance : player.getActivePotionEffects()) {
                Effect effect = instance.getPotion();
                // Проверяем, является ли эффект мгновенным, если включен onlyExplosive
                if (onlyExplosive.get() && !effect.isInstant()) continue;

                int level = instance.getAmplifier() + 1;
                currentEffects.put(effect, level);

                if (!previousEffects.containsKey(effect)) {
                    String name = EFFECT_TRANSLATIONS.getOrDefault(effect, effect.getName());
                    String duration = formatDuration(instance.getDuration());
                    TextFormatting color = useEffectColors.get() ? EFFECT_COLORS.getOrDefault(effect, TextFormatting.GRAY) : TextFormatting.GRAY;

                    effectMessage.append(String.format("%s- %s %d (%s)\n", color, name, level, duration));
                }
            }

            // === Снос тотема ===
            if (totemPop.get() && lastCount != null && currentTotemCount < lastCount) {
                ItemStack usedTotem = lastTotemStack.get(playerName);
                String totemName = "Тотем Бессмертия";
                boolean enchanted = false;

                if (usedTotem != null && !usedTotem.isEmpty()) {
                    totemName = usedTotem.getDisplayName().getString();
                    enchanted = usedTotem.isEnchanted();
                }

                int pops = lastCount - currentTotemCount;

                print(String.format("%s%s: %s x%d (%s)",
                        TextFormatting.WHITE, // Имя игрока теперь белое
                        playerName,
                        totemName,
                        pops,
                        enchanted ? "Зачарован" : "Не зачарован"));
            }

            // === Новые эффекты ===
            if (effectMessage.length() > 0) {
                print(String.format("%s[%s] Получил эффекты:\n%s",
                        TextFormatting.WHITE, // Имя игрока теперь белое
                        playerName,
                        effectMessage.toString().trim()));
            }

            playerPotionEffects.put(playerName, currentEffects);
            playerTotemCount.put(playerName, currentTotemCount);

            // === Сохраняем стек тотема для следующего тика ===
            ItemStack totemStack = null;
            for (ItemStack stack : player.inventory.mainInventory) {
                if (stack.getItem() == Items.TOTEM_OF_UNDYING) {
                    totemStack = stack.copy();
                    break;
                }
            }

            if (totemStack == null && player.getHeldItemOffhand().getItem() == Items.TOTEM_OF_UNDYING) {
                totemStack = player.getHeldItemOffhand().copy();
            }

            lastTotemStack.put(playerName, totemStack);
        }
    }

    private int countTotems(PlayerEntity player) {
        int count = 0;
        for (ItemStack stack : player.inventory.mainInventory) {
            if (stack.getItem() == Items.TOTEM_OF_UNDYING) {
                count += stack.getCount();
            }
        }

        if (player.getHeldItemOffhand().getItem() == Items.TOTEM_OF_UNDYING) {
            count += player.getHeldItemOffhand().getCount();
        }

        return count;
    }

    private String formatDuration(int ticks) {
        int seconds = ticks / 20;
        int minutes = seconds / 60;
        seconds %= 60;
        if (minutes > 0) {
            return String.format("%dм %02dс", minutes, seconds);
        } else {
            return String.format("%dс", seconds);
        }
    }
}
 
Знаю что сливали, но код мой с допами
(
Пожалуйста, авторизуйтесь для просмотра ссылки.
)
code:

JavaScript:
Expand Collapse Copy
package log.evcalipse.modules.impl.misc;

import com.google.common.eventbus.Subscribe;
import log.evcalipse.config.FriendStorage;
import log.evcalipse.events.EventUpdate;
import log.evcalipse.modules.api.Module;
import log.evcalipse.modules.api.ModuleRegister;
import log.evcalipse.modules.api.Category;
import log.evcalipse.modules.settings.impl.BooleanSetting;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.potion.Effect;
import net.minecraft.potion.EffectInstance;
import net.minecraft.potion.Effects;
import net.minecraft.util.text.TextFormatting;

import java.util.HashMap;
import java.util.Map;

@ModuleRegister(name = "UseTracker", category = Category.Misc, description = "Отслеживание эффектов и тотемов")
public class PotionLogger extends Module {

    private static final Map<Effect, String> EFFECT_TRANSLATIONS = new HashMap<>() {{
        put(Effects.SPEED, "Скорость");
        put(Effects.SLOWNESS, "Медлительность");
        put(Effects.STRENGTH, "Сила");
        put(Effects.WEAKNESS, "Слабость");
        put(Effects.INSTANT_HEALTH, "Мгновенное Исцеление");
        put(Effects.INSTANT_DAMAGE, "Мгновенный Урон");
        put(Effects.RESISTANCE, "Сопротивление");
        put(Effects.HASTE, "Спешка");
        put(Effects.MINING_FATIGUE, "Утомление");
        put(Effects.REGENERATION, "Регенерация");
        put(Effects.WITHER, "Иссушение");
        put(Effects.POISON, "Отравление");
        put(Effects.FIRE_RESISTANCE, "Огнеупорность");
        put(Effects.ABSORPTION, "Поглощение");
        put(Effects.INVISIBILITY, "Невидимость");
        put(Effects.GLOWING, "Свечение");
        put(Effects.HUNGER, "Голод");
        put(Effects.JUMP_BOOST, "Прыгучесть");
        put(Effects.NAUSEA, "Тошнота");
        put(Effects.NIGHT_VISION, "Ночное Зрение");
        put(Effects.BLINDNESS, "Слепота");
        put(Effects.WATER_BREATHING, "Подводное Дыхание");
        put(Effects.LEVITATION, "Левитация");
        put(Effects.SLOW_FALLING, "Медленное Падение");
        put(Effects.LUCK, "Удача");
        put(Effects.UNLUCK, "Неудача");
        put(Effects.CONDUIT_POWER, "Сила Кондуита");
        put(Effects.DOLPHINS_GRACE, "Грация Дельфина");
        put(Effects.BAD_OMEN, "Плохое Знамение");
        put(Effects.HERO_OF_THE_VILLAGE, "Герой Деревни");
        put(Effects.HEALTH_BOOST, "Прилив Здоровья");
    }};

    private static final Map<Effect, TextFormatting> EFFECT_COLORS = new HashMap<>() {{
        put(Effects.SPEED, TextFormatting.AQUA);
        put(Effects.SLOWNESS, TextFormatting.DARK_AQUA);
        put(Effects.STRENGTH, TextFormatting.RED);
        put(Effects.WEAKNESS, TextFormatting.DARK_RED);
        put(Effects.INSTANT_HEALTH, TextFormatting.RED);
        put(Effects.INSTANT_DAMAGE, TextFormatting.DARK_RED);
        put(Effects.RESISTANCE, TextFormatting.GRAY);
        put(Effects.HASTE, TextFormatting.YELLOW);
        put(Effects.REGENERATION, TextFormatting.LIGHT_PURPLE);
        put(Effects.WITHER, TextFormatting.DARK_GRAY);
        put(Effects.POISON, TextFormatting.GREEN);
        put(Effects.FIRE_RESISTANCE, TextFormatting.GOLD);
        put(Effects.ABSORPTION, TextFormatting.YELLOW);
        put(Effects.INVISIBILITY, TextFormatting.GRAY);
        put(Effects.GLOWING, TextFormatting.WHITE);
        put(Effects.HUNGER, TextFormatting.DARK_GREEN);
        put(Effects.JUMP_BOOST, TextFormatting.GREEN);
        put(Effects.NAUSEA, TextFormatting.DARK_PURPLE);
        put(Effects.NIGHT_VISION, TextFormatting.DARK_BLUE);
        put(Effects.BLINDNESS, TextFormatting.DARK_GRAY);
        put(Effects.WATER_BREATHING, TextFormatting.BLUE);
        put(Effects.LEVITATION, TextFormatting.LIGHT_PURPLE);
        put(Effects.SLOW_FALLING, TextFormatting.WHITE);
        put(Effects.LUCK, TextFormatting.GREEN);
        put(Effects.UNLUCK, TextFormatting.DARK_GRAY);
        put(Effects.CONDUIT_POWER, TextFormatting.AQUA);
        put(Effects.DOLPHINS_GRACE, TextFormatting.AQUA);
        put(Effects.BAD_OMEN, TextFormatting.DARK_RED);
        put(Effects.HERO_OF_THE_VILLAGE, TextFormatting.GREEN);
    }};

    private final BooleanSetting trackSelf = new BooleanSetting("Отмечать себя", false);
    private final BooleanSetting skipFriends = new BooleanSetting("Пропускать друзей", true);
    private final BooleanSetting totemPop = new BooleanSetting("Отслеживать тотемы", true);
    private final BooleanSetting useEffectColors = new BooleanSetting("Цветные эффекты", true);
    private final BooleanSetting onlyExplosive = new BooleanSetting("Только взрывные", false);

    private final Map<String, Map<Effect, Integer>> playerPotionEffects = new HashMap<>();
    private final Map<String, Integer> playerTotemCount = new HashMap<>();
    private final Map<String, ItemStack> lastTotemStack = new HashMap<>();

    public PotionLogger() {
        addSettings(trackSelf, skipFriends, totemPop, useEffectColors, onlyExplosive);
    }

    @Subscribe
    public void onUpdate(EventUpdate event) {
        if (mc.world == null || mc.player == null) return;

        for (PlayerEntity player : mc.world.getPlayers()) {
            String playerName = player.getName().getString();
            if (!trackSelf.get() && player == mc.player) continue;
            if (skipFriends.get() && FriendStorage.isFriend(playerName)) continue;

            int currentTotemCount = countTotems(player);
            Integer lastCount = playerTotemCount.get(playerName);

            Map<Effect, Integer> previousEffects = playerPotionEffects.getOrDefault(playerName, new HashMap<>());
            Map<Effect, Integer> currentEffects = new HashMap<>();
            StringBuilder effectMessage = new StringBuilder();

            for (EffectInstance instance : player.getActivePotionEffects()) {
                Effect effect = instance.getPotion();
                // Проверяем, является ли эффект мгновенным, если включен onlyExplosive
                if (onlyExplosive.get() && !effect.isInstant()) continue;

                int level = instance.getAmplifier() + 1;
                currentEffects.put(effect, level);

                if (!previousEffects.containsKey(effect)) {
                    String name = EFFECT_TRANSLATIONS.getOrDefault(effect, effect.getName());
                    String duration = formatDuration(instance.getDuration());
                    TextFormatting color = useEffectColors.get() ? EFFECT_COLORS.getOrDefault(effect, TextFormatting.GRAY) : TextFormatting.GRAY;

                    effectMessage.append(String.format("%s- %s %d (%s)\n", color, name, level, duration));
                }
            }

            // === Снос тотема ===
            if (totemPop.get() && lastCount != null && currentTotemCount < lastCount) {
                ItemStack usedTotem = lastTotemStack.get(playerName);
                String totemName = "Тотем Бессмертия";
                boolean enchanted = false;

                if (usedTotem != null && !usedTotem.isEmpty()) {
                    totemName = usedTotem.getDisplayName().getString();
                    enchanted = usedTotem.isEnchanted();
                }

                int pops = lastCount - currentTotemCount;

                print(String.format("%s%s: %s x%d (%s)",
                        TextFormatting.WHITE, // Имя игрока теперь белое
                        playerName,
                        totemName,
                        pops,
                        enchanted ? "Зачарован" : "Не зачарован"));
            }

            // === Новые эффекты ===
            if (effectMessage.length() > 0) {
                print(String.format("%s[%s] Получил эффекты:\n%s",
                        TextFormatting.WHITE, // Имя игрока теперь белое
                        playerName,
                        effectMessage.toString().trim()));
            }

            playerPotionEffects.put(playerName, currentEffects);
            playerTotemCount.put(playerName, currentTotemCount);

            // === Сохраняем стек тотема для следующего тика ===
            ItemStack totemStack = null;
            for (ItemStack stack : player.inventory.mainInventory) {
                if (stack.getItem() == Items.TOTEM_OF_UNDYING) {
                    totemStack = stack.copy();
                    break;
                }
            }

            if (totemStack == null && player.getHeldItemOffhand().getItem() == Items.TOTEM_OF_UNDYING) {
                totemStack = player.getHeldItemOffhand().copy();
            }

            lastTotemStack.put(playerName, totemStack);
        }
    }

    private int countTotems(PlayerEntity player) {
        int count = 0;
        for (ItemStack stack : player.inventory.mainInventory) {
            if (stack.getItem() == Items.TOTEM_OF_UNDYING) {
                count += stack.getCount();
            }
        }

        if (player.getHeldItemOffhand().getItem() == Items.TOTEM_OF_UNDYING) {
            count += player.getHeldItemOffhand().getCount();
        }

        return count;
    }

    private String formatDuration(int ticks) {
        int seconds = ticks / 20;
        int minutes = seconds / 60;
        seconds %= 60;
        if (minutes > 0) {
            return String.format("%dм %02dс", minutes, seconds);
        } else {
            return String.format("%dс", seconds);
        }
    }
}
ура чат гпт спс я спастил
 
Назад
Сверху Снизу