- Выберите загрузчик игры
- OptiFine
- ForgeOptiFine
- Прочие моды
Знаю что сливали, но код мой с допами
(
code:
(
Пожалуйста, авторизуйтесь для просмотра ссылки.
)code:
JavaScript:
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);
}
}
}