Гайд Хуки Forge 1.16.5

  • Автор темы Автор темы ak1
  • Дата начала Дата начала
Forge Api ;-;
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
3 Май 2023
Сообщения
854
Реакции
19
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Пасани, всем здарова йоу

Сегодня показываю как короче крутые штуки делать да жи ес

Научимся хукать классы и использовать это в своих селфкодах пастах на Forge 1.16.5

Покажу на примере фикса мультиплеера

Для начала, нам нужно скачать срц нашего форж майнкрафта в Intellij

Пишем в любом классе например
Java:
Expand Collapse Copy
Minecraft

Наводимся и нажимаем CTRL+ЛКМ, а далее на Download Sources

После того, как у нас всё скачалось, нам нужно найти класс, который как раз таки отвечает за блокировку мультиплеера и чата
В нашем случае это класс SocialInteractionsService
Java:
Expand Collapse Copy
package com.mojang.authlib.minecraft;

import java.util.UUID;

public interface SocialInteractionsService {
    boolean serversAllowed();

    boolean realmsAllowed();

    boolean chatAllowed();

    boolean isBlockedPlayer(UUID var1);
}

После того, как мы нашли нужный класс, создаём у себя в проекте пекедж hooks (чисто для нашего же удобства)

Далее в этом пекедже создаем класс SocialInteractionsServiceHook

Вставляем туда код из оригинального класса, оверрайдим все булки и возвращаем везде то, что нужно нам
Java:
Expand Collapse Copy
public class SocialInteractionsServiceHook implements SocialInteractionsService {
    @Override
    public boolean serversAllowed() {
        return true;
    }

    @Override
    public boolean realmsAllowed() {
        return false;
    }

    @Override
    public boolean chatAllowed() {
        return true;
    }

    @Override
    public boolean isBlockedPlayer(UUID var1) {
        return false;
    }
}
 
Последнее редактирование:
Пасани, всем здарова йоу

Сегодня показываю как короче крутые штуки делать да жи ес

Научимся хукать классы и использовать это в своих селфкодах пастах на Forge 1.16.5

Покажу на примере фикса мультиплеера

Для начала, нам нужно скачать срц нашего форж майнкрафта в Intellij

Пишем в любом классе например
Java:
Expand Collapse Copy
Minecraft

Наводимся и нажимаем CTRL+ЛКМ, а далее на Download Sources

После того, как у нас всё скачалось, нам нужно найти класс, который как раз таки отвечает за блокировку мультиплеера и чата
В нашем случае это класс SocialInteractionsService
Java:
Expand Collapse Copy
package com.mojang.authlib.minecraft;

import java.util.UUID;

public interface SocialInteractionsService {
    boolean serversAllowed();

    boolean realmsAllowed();

    boolean chatAllowed();

    boolean isBlockedPlayer(UUID var1);
}

После того, как мы нашли нужный класс, создаём у себя в проекте пекедж hooks (чисто для нашего же удобства)

Далее в этом пекедже создаем класс SocialInteractionsServiceHook

Вставляем туда код из оригинального класса, оверрайдим все булки и возвращаем везде то, что нужно нам
Java:
Expand Collapse Copy
public class SocialInteractionsServiceHook implements SocialInteractionsService {
    @Override
    public boolean serversAllowed() {
        return true;
    }

    @Override
    public boolean realmsAllowed() {
        return false;
    }

    @Override
    public boolean chatAllowed() {
        return true;
    }

    @Override
    public boolean isBlockedPlayer(UUID var1) {
        return false;
    }
}

Основная часть уже готова нам осталось только правильно инициализировать наш хук

Для этого создадим незамысловатую утилиту

Java:
Expand Collapse Copy
public class Reflection<T> {

    private final Object Instance;
    private final Class<?> localClass;
    private final Field localField;

    private Reflection(Object Instance, Class<?> clas, Field field) {
        this.Instance = Instance;
        this.localClass = clas;
        localField = field;
    }

    public Reflection(Object Instance, Class<?> from, Class<?> toGet) {
        this(Instance, from, getFromClazz(from, toGet));
    }

    public void setValue(T value) {
        setValue(Instance, value);
    }

    public void setValue(Object instance, T value) {
        try {
            Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe");
            unsafeField.setAccessible(true);
            Unsafe UNSAFE = (Unsafe) unsafeField.get(null);
            long PROFILER_OFFSET = UNSAFE.objectFieldOffset(localField);
            UNSAFE.putObject(instance, PROFILER_OFFSET, value);
        } catch (Exception ignored) {
        }
    }

    private static Field getFromClazz(Class<?> from, Class<?> toGet) {
        Field local = null;
        for (Field tracker : from.getDeclaredFields()) {
            if (tracker.getType().equals(toGet)) {
                local = tracker;
                break;
            }
        }
        return local;
    }
}

Далее заходим в наш метод инита и кумарим

Java:
Expand Collapse Copy
new Reflection(mc, Minecraft.class, SocialInteractionsService.class).setValue(new SocialInteractionsServiceHook());
Где mc - экземпляр нужного нам класса
Minecraft.class, SocialInteractionsService.class то, что мы заменяем АКА

Minecraft.class:
Expand Collapse Copy
/* field */

private final SocialInteractionsService socialInteractionsService;

Ну и соответственно SocialInteractionsServiceHook() - наш хук.

После всех этих действий запускаем майнкрафт и видим чудо, мультиплеер и чат работают!

Пока чумбы, спасибо за внимание.
:CoolCat:
 
Пасани, всем здарова йоу

Сегодня показываю как короче крутые штуки делать да жи ес

Научимся хукать классы и использовать это в своих селфкодах пастах на Forge 1.16.5

Покажу на примере фикса мультиплеера

Для начала, нам нужно скачать срц нашего форж майнкрафта в Intellij

Пишем в любом классе например
Java:
Expand Collapse Copy
Minecraft

Наводимся и нажимаем CTRL+ЛКМ, а далее на Download Sources

После того, как у нас всё скачалось, нам нужно найти класс, который как раз таки отвечает за блокировку мультиплеера и чата
В нашем случае это класс SocialInteractionsService
Java:
Expand Collapse Copy
package com.mojang.authlib.minecraft;

import java.util.UUID;

public interface SocialInteractionsService {
    boolean serversAllowed();

    boolean realmsAllowed();

    boolean chatAllowed();

    boolean isBlockedPlayer(UUID var1);
}

После того, как мы нашли нужный класс, создаём у себя в проекте пекедж hooks (чисто для нашего же удобства)

Далее в этом пекедже создаем класс SocialInteractionsServiceHook

Вставляем туда код из оригинального класса, оверрайдим все булки и возвращаем везде то, что нужно нам
Java:
Expand Collapse Copy
public class SocialInteractionsServiceHook implements SocialInteractionsService {
    @Override
    public boolean serversAllowed() {
        return true;
    }

    @Override
    public boolean realmsAllowed() {
        return false;
    }

    @Override
    public boolean chatAllowed() {
        return true;
    }

    @Override
    public boolean isBlockedPlayer(UUID var1) {
        return false;
    }
}

Основная часть уже готова нам осталось только правильно инициализировать наш хук

Для этого создадим незамысловатую утилиту

Java:
Expand Collapse Copy
public class Reflection<T> {

    private final Object Instance;
    private final Class<?> localClass;
    private final Field localField;

    private Reflection(Object Instance, Class<?> clas, Field field) {
        this.Instance = Instance;
        this.localClass = clas;
        localField = field;
    }

    public Reflection(Object Instance, Class<?> from, Class<?> toGet) {
        this(Instance, from, getFromClazz(from, toGet));
    }

    public void setValue(T value) {
        setValue(Instance, value);
    }

    public void setValue(Object instance, T value) {
        try {
            Field unsafeField = Unsafe.class.getDeclaredField("theUnsafe");
            unsafeField.setAccessible(true);
            Unsafe UNSAFE = (Unsafe) unsafeField.get(null);
            long PROFILER_OFFSET = UNSAFE.objectFieldOffset(localField);
            UNSAFE.putObject(instance, PROFILER_OFFSET, value);
        } catch (Exception ignored) {
        }
    }

    private static Field getFromClazz(Class<?> from, Class<?> toGet) {
        Field local = null;
        for (Field tracker : from.getDeclaredFields()) {
            if (tracker.getType().equals(toGet)) {
                local = tracker;
                break;
            }
        }
        return local;
    }
}

Далее заходим в наш метод инита и кумарим

Java:
Expand Collapse Copy
new Reflection(mc, Minecraft.class, SocialInteractionsService.class).setValue(new SocialInteractionsServiceHook());
Где mc - экземпляр нужного нам класса
Minecraft.class, SocialInteractionsService.class то, что мы заменяем АКА

Minecraft.class:
Expand Collapse Copy
/* field */

private final SocialInteractionsService socialInteractionsService;

Ну и соответственно SocialInteractionsServiceHook() - наш хук.

После всех этих действий запускаем майнкрафт и видим чудо, мультиплеер и чат работают!

Пока чумбы, спасибо за внимание.
загруженное.jpg
 
Пасани, всем здарова йоу

Сегодня показываю как короче крутые штуки делать да жи ес

Научимся хукать классы и использовать это в своих селфкодах пастах на Forge 1.16.5

Покажу на примере фикса мультиплеера

Для начала, нам нужно скачать срц нашего форж майнкрафта в Intellij

Пишем в любом классе например
Java:
Expand Collapse Copy
Minecraft

Наводимся и нажимаем CTRL+ЛКМ, а далее на Download Sources

После того, как у нас всё скачалось, нам нужно найти класс, который как раз таки отвечает за блокировку мультиплеера и чата
В нашем случае это класс SocialInteractionsService
Java:
Expand Collapse Copy
package com.mojang.authlib.minecraft;

import java.util.UUID;

public interface SocialInteractionsService {
    boolean serversAllowed();

    boolean realmsAllowed();

    boolean chatAllowed();

    boolean isBlockedPlayer(UUID var1);
}

После того, как мы нашли нужный класс, создаём у себя в проекте пекедж hooks (чисто для нашего же удобства)

Далее в этом пекедже создаем класс SocialInteractionsServiceHook

Вставляем туда код из оригинального класса, оверрайдим все булки и возвращаем везде то, что нужно нам
Java:
Expand Collapse Copy
public class SocialInteractionsServiceHook implements SocialInteractionsService {
    @Override
    public boolean serversAllowed() {
        return true;
    }

    @Override
    public boolean realmsAllowed() {
        return false;
    }

    @Override
    public boolean chatAllowed() {
        return true;
    }

    @Override
    public boolean isBlockedPlayer(UUID var1) {
        return false;
    }
}
ура я скачал срц и теперь моя паста не запускается!!!
 
Назад
Сверху Снизу