Auto Totem Replacer
Влияние на механику Minecraft
Отслеживает слот второй руки (offhand). Как только тотем активируется и сгорает, модуль мгновенно (за 0 тиков) находит запасной тотем в инвентаре и помещает его во вторую руку через пакеты clickSlot.
Анализируемые функции и API
ClientPlayerInteractionManager.clickSlot
Отправка пакетов взаимодействия со слотами инвентаря (method_2906).
Items.TOTEM_OF_UNDYING
Константа предмета «Тотем бессмертия» (field_8288).
PlayerEntity.getOffHandStack
Проверка предмета, находящегося во второй руке игрока (method_6079).
Реализация в моде (Исходный код)
// Developer Source (Fabric / Yarn mappings)
public class AutoTotem {
public static void update(MinecraftClient client) {
if (client.player.getOffHandStack().getItem() != Items.TOTEM_OF_UNDYING) {
int slot = findTotemSlot(client.player.getInventory());
if (slot != -1) {
client.interactionManager.clickSlot(client.player.currentScreenHandler.syncId, slot, 0, SlotActionType.PICKUP, client.player);
client.interactionManager.clickSlot(client.player.currentScreenHandler.syncId, 45, 0, SlotActionType.PICKUP, client.player);
}
}
}
}
Декомпилированный вид (Vineflower)
// Decompiled with Vineflower 1.12 (Intermediary mappings)
public class AutoTotem {
public static void update(class_310 client) {
if (client.field_1724.method_6079().method_7909() != class_1802.field_8288) {
int slot = findTotemSlot(client.field_1724.method_31548());
if (slot != -1) {
client.field_1761.method_2906(client.field_1724.field_7512.field_7763, slot, 0, class_1713.field_7790, client.field_1724);
client.field_1761.method_2906(client.field_1724.field_7512.field_7763, 45, 0, class_1713.field_7790, client.field_1724);
}
}
}
}
Сигнатура байткода и статический детект
Совпадение Items.TOTEM_OF_UNDYING (field_8288) в сочетании с ClientPlayerInteractionManager.clickSlot (method_2906), направленным в слот 45.