Начинающий
- Статус
- Оффлайн
- Регистрация
- 10 Янв 2025
- Сообщения
- 101
- Реакции
- 0
- Выберите загрузчик игры
- Прочие моды
писалось 10 минут бралось с еблуды
сс - не нужен тк просто в чат пишет
код -
сс - не нужен тк просто в чат пишет
код -
Код:
package dev.kodek.client.managers.module.impl.player;
import dev.kodek.client.api.events.orbit.EventHandler;
import dev.kodek.client.managers.events.other.PacketEvent;
import dev.kodek.client.managers.events.player.UpdateEvent;
import dev.kodek.client.managers.module.Category;
import dev.kodek.client.managers.module.Module;
import dev.kodek.client.managers.module.ModuleInfo;
import dev.kodek.client.managers.module.impl.combat.utils.FriendManager;
import dev.kodek.client.managers.module.settings.impl.BooleanSetting;
import lombok.Data;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.UseAction;
import net.minecraft.network.play.server.SEntityStatusPacket;
import net.minecraft.util.Hand;
import net.minecraft.util.text.TextFormatting;
import java.util.HashMap;
import java.util.Map;
@ModuleInfo(name = "UseTracker", category = Category.PLAYER, desc = "Кто что использовал")
public class UseTracker extends Module {
private final BooleanSetting friendIgnore = new BooleanSetting(this, "Игнор друзей", true);
private final BooleanSetting showSelf = new BooleanSetting(this, "Показывать свои попы", false);
private final BooleanSetting notifications = new BooleanSetting(this, "Уведомления", true);
private ItemStack lastItem = ItemStack.EMPTY;
private boolean wasUsing = false;
private int lastMaxCount = 0;
private Hand lastHand = Hand.MAIN_HAND;
private final Map<String, PlayerState> states = new HashMap<>();
@Data
static class PlayerState {
ItemStack mainHand = ItemStack.EMPTY;
ItemStack offHand = ItemStack.EMPTY;
boolean mainUsing = false;
boolean offUsing = false;
}
@EventHandler
public void onPacket(PacketEvent event) {
if (mc.player == null) return;
if (event.getPacket() instanceof SEntityStatusPacket) {
SEntityStatusPacket packet = (SEntityStatusPacket) event.getPacket();
if (packet.getOpCode() == 35) {
PlayerEntity player = (PlayerEntity) packet.getEntity(mc.world);
if (player != null) {
if (player == mc.player && !showSelf.getValue()) return;
if (friendIgnore.getValue() && FriendManager.isFriend(player.getName().getString())) {
return;
}
ItemStack totem = getTotem(player);
sendTotemMsg(player.getName().getString(), totem, player == mc.player);
}
}
}
}
@EventHandler
public void onUpdate(UpdateEvent event) {
if (mc.player == null || mc.world == null) return;
// Свои поедалки
if (mc.player.isHandActive()) {
ItemStack item = mc.player.getActiveItemStack();
Hand hand = mc.player.getActiveHand();
if (!wasUsing) {
if (!item.isEmpty()) {
UseAction action = item.getUseAction();
if (action == UseAction.EAT || action == UseAction.DRINK) {
lastItem = item.copy();
lastMaxCount = mc.player.getItemInUseMaxCount();
lastHand = hand;
}
}
wasUsing = true;
}
} else {
if (wasUsing) {
if (!lastItem.isEmpty()) {
ItemStack current = lastHand == Hand.MAIN_HAND
? mc.player.getHeldItemMainhand()
: mc.player.getHeldItemOffhand();
boolean used = false;
if (lastItem.getItem() == Items.MILK_BUCKET && current.getItem() == Items.BUCKET) {
used = true;
} else if (lastItem.getItem() == Items.HONEY_BOTTLE && current.getItem() == Items.GLASS_BOTTLE) {
used = true;
} else if (lastItem.getCount() > current.getCount()) {
used = true;
}
if (used && showSelf.getValue()) {
sendEatMsg(mc.player.getName().getString(), lastItem, true);
}
}
lastItem = ItemStack.EMPTY;
wasUsing = false;
}
}
// Другие игроки
for (PlayerEntity player : mc.world.getPlayers()) {
if (player == mc.player) continue;
if (friendIgnore.getValue() && FriendManager.isFriend(player.getName().getString())) {
continue;
}
String name = player.getName().getString();
PlayerState state = states.computeIfAbsent(name, k -> new PlayerState());
ItemStack main = player.getHeldItemMainhand();
ItemStack off = player.getHeldItemOffhand();
boolean mainUsing = player.isHandActive() && player.getActiveHand() == Hand.MAIN_HAND;
boolean offUsing = player.isHandActive() && player.getActiveHand() == Hand.OFF_HAND;
if (state.mainUsing && !mainUsing) {
if (checkUsed(state.mainHand, main)) {
sendEatMsg(name, state.mainHand, false);
}
}
if (state.offUsing && !offUsing) {
if (checkUsed(state.offHand, off)) {
sendEatMsg(name, state.offHand, false);
}
}
state.mainHand = main.copy();
state.offHand = off.copy();
state.mainUsing = mainUsing;
state.offUsing = offUsing;
}
states.entrySet().removeIf(entry ->
mc.world.getPlayers().stream().noneMatch(p -> p.getName().getString().equals(entry.getKey()))
);
}
private boolean checkUsed(ItemStack before, ItemStack after) {
if (before.isEmpty()) return false;
if (before.getItem() == Items.MILK_BUCKET && after.getItem() == Items.BUCKET) return true;
if (before.getItem() == Items.HONEY_BOTTLE && after.getItem() == Items.GLASS_BOTTLE) return true;
if (before.getCount() > after.getCount()) return true;
return false;
}
private ItemStack getTotem(PlayerEntity player) {
ItemStack main = player.getHeldItemMainhand();
ItemStack off = player.getHeldItemOffhand();
if (main.getItem() == Items.TOTEM_OF_UNDYING) return main;
if (off.getItem() == Items.TOTEM_OF_UNDYING) return off;
return new ItemStack(Items.TOTEM_OF_UNDYING);
}
private void sendTotemMsg(String name, ItemStack totem, boolean self) {
if (!notifications.getValue()) return;
String ench = totem.isEnchanted() ? TextFormatting.GREEN + "✔" : TextFormatting.RED + "✘";
String prefix = self ? TextFormatting.YELLOW + "[Я] " : "";
String msg = String.format(
"%s%s%s %sдернул тотем %s",
prefix,
TextFormatting.WHITE,
name,
TextFormatting.GRAY,
ench
);
print(msg);
}
private void sendEatMsg(String name, ItemStack item, boolean self) {
if (!notifications.getValue()) return;
String prefix = self ? TextFormatting.YELLOW + "[Я] " : "";
String itemName = item.getDisplayName().getString();
String msg = String.format(
"%s%s%s %sсъел/выпил %s%s",
prefix,
TextFormatting.WHITE,
name,
TextFormatting.GRAY,
TextFormatting.YELLOW,
itemName
);
print(msg);
}
private void print(String text) {
if (mc.player != null && mc.ingameGUI != null) {
mc.ingameGUI.getChatGUI().printChatMessage(new net.minecraft.util.text.StringTextComponent(text));
}
}
}