Исходник PacketEvent для вашего чита

Начинающий
Статус
Оффлайн
Регистрация
7 Мар 2024
Сообщения
45
Реакции[?]
2
Поинты[?]
2K

Перед прочтением основного контента ниже, пожалуйста, обратите внимание на обновление внутри секции Майна на нашем форуме. У нас появились:

  • бесплатные читы для Майнкрафт — любое использование на свой страх и риск;
  • маркетплейс Майнкрафт — абсолютно любая коммерция, связанная с игрой, за исключением продажи читов (аккаунты, предоставления услуг, поиск кодеров читов и так далее);
  • приватные читы для Minecraft — в этом разделе только платные хаки для игры, покупайте группу "Продавец" и выставляйте на продажу свой софт;
  • обсуждения и гайды — всё тот же раздел с вопросами, но теперь модернизированный: поиск нужных хаков, пати с игроками-читерами и другая полезная информация.

Спасибо!

В этой теме я расскажу как сделать PacketEvent и для чего он вам может пригодиться.

Все примеры будут рассматриватся для дефолтного обработчика событий forge(т.е. MinecraftForge.EVENT_BUS).
Вся тема была написана новичком.


1.Что такое PacketEvent?
Проще говоря, PacketEvent — это событие, активирующееся при отправке/получении пакетов между клиентом и сервером. В основном он поделен на два подкласса:
Send (PacketEvent.Send) — Активируется только при отправке пакетов Клиент→Сервер. Такие пакеты помечены буквой C (например CPacketPlayerTryUseItem).
Receive (PacketEvent.Receive) — Активируется только при получении пакетов Клиент←Сервер. Такие пакеты помечены буквой S (например SPacketEntityVelocity).

2.Для чего нужен PacketEvent?
Его можно использовать для отмены и изменения пакетов, эта возможность очень хорошо облегчает создание функций.

3.Как же его сделать?
Для начала в нашей сборке должна быть настроенная система Mixin и хоть малое понимание её работы(есть много гайдов в гугле и ютубе).

Создаем класс PacketEvent и пишем в нём вот это:
PacketEvent:
import net.minecraft.network.Packet;
import net.minecraftforge.fml.common.eventhandler.Cancelable;
import net.minecraftforge.fml.common.eventhandler.Event;

@Cancelable
public class PacketEvent extends Event {
    private Packet<?> packet;

    public PacketEvent(Packet<?> packet) {

        this.packet = packet;
    }

    public final Packet<?> getPacket() {

        return this.packet;
    }


    public final Packet<?> setPacket(Packet<?> packet) {

        return this.packet = packet;
    }

    public static class Send extends PacketEvent {

        public Send(Packet<?> packet) {

            super(packet);
        }
    }

    public static class Receive extends PacketEvent {

        public Receive(Packet<?> packet) {

            super(packet);
        }
    }
}
После создаём MixinNetworkManager и заполняем его:
MixinNetworkManager:
import io.netty.channel.ChannelHandlerContext;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraftforge.common.MinecraftForge;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.io.IOException;

@Mixin(NetworkManager.class)
public class MixinNetworkManager {

    @Inject(method = "sendPacket(Lnet/minecraft/network/Packet;)V", at = @At("HEAD"), cancellable = true)
    private void onSendPacket(Packet<?> packet, CallbackInfo callbackInfo) {
        PacketEvent packetEvent = new PacketEvent.Send(packet);
        MinecraftForge.EVENT_BUS.post(packetEvent);

        if (packetEvent.isCanceled()) {
            callbackInfo.cancel();
        }
    }

    @Inject(method = "channelRead0", at = @At("HEAD"), cancellable = true)
    private void onChannelRead(ChannelHandlerContext channelHandlerContext, Packet<?> packet, CallbackInfo callbackInfo) {
        PacketEvent packetEvent = new PacketEvent.Receive(packet);
        MinecraftForge.EVENT_BUS.post(packetEvent);

        if (packetEvent.isCanceled()) {
            callbackInfo.cancel();
        }
    }
}
(Если посмотреть то можно сразу увидеть где активируется Send, а где Receive. Не забываем зарегестрировать наш миксин в файле миксинов)


Отлично, PacketEvent готов! Давайте посмотрим два примера его работы:

Первый пример:
Предположим, что нам нужно сделать так, что при попытке отправить пакет CPacketConfirmTeleport он отменялся. Тогда код будет выглядеть так:
Java:
@SubscribeEvent
public void onUpdate(PacketEvent.Send e) {
     if (e.getPacket() instanceof CPacketConfirmTeleport) {
         e.setCanceled(true);
     }
}
Второй пример:
Предположим, что нам нужно при получении пакета SPacketEntityVelocity(нацеленого на игрока) изменить данные motionX, motionY, motionZ на 0. Код будет выглядеть примерно так:
Java:
@SubscribeEvent
public void onUpdate(PacketEvent.Receive e) {
    if (e.getPacket() instanceof SPacketEntityVelocity) {
        SPacketEntityVelocity sPacketEntityVelocity = (SPacketEntityVelocity) e.getPacket();
        if (sPacketEntityVelocity.getEntityID() == mc.player.getEntityId()) {
            sPacketEntityVelocity.motionX = 0;
            sPacketEntityVelocity.motionY = 0;
            sPacketEntityVelocity.motionZ = 0;
        }
    }
}


Вот и всё! Теперь вы у вас есть свой PacketEvent и понимание как с ним работать. Теперь всё в руках вашей фантазии.
 
Начинающий
Статус
Оффлайн
Регистрация
23 Сен 2023
Сообщения
56
Реакции[?]
0
Поинты[?]
1K
В этой теме я расскажу как сделать PacketEvent и для чего он вам может пригодиться.

Все примеры будут рассматриватся для дефолтного обработчика событий forge(т.е. MinecraftForge.EVENT_BUS).
Вся тема была написана новичком.


1.Что такое PacketEvent?
Проще говоря, PacketEvent — это событие, активирующееся при отправке/получении пакетов между клиентом и сервером. В основном он поделен на два подкласса:
Send (PacketEvent.Send) — Активируется только при отправке пакетов Клиент→Сервер. Такие пакеты помечены буквой C (например CPacketPlayerTryUseItem).
Receive (PacketEvent.Receive) — Активируется только при получении пакетов Клиент←Сервер. Такие пакеты помечены буквой S (например SPacketEntityVelocity).

2.Для чего нужен PacketEvent?
Его можно использовать для отмены и изменения пакетов, эта возможность очень хорошо облегчает создание функций.

3.Как же его сделать?
Для начала в нашей сборке должна быть настроенная система Mixin и хоть малое понимание её работы(есть много гайдов в гугле и ютубе).

Создаем класс PacketEvent и пишем в нём вот это:
PacketEvent:
import net.minecraft.network.Packet;
import net.minecraftforge.fml.common.eventhandler.Cancelable;
import net.minecraftforge.fml.common.eventhandler.Event;

@Cancelable
public class PacketEvent extends Event {
    private Packet<?> packet;

    public PacketEvent(Packet<?> packet) {

        this.packet = packet;
    }

    public final Packet<?> getPacket() {

        return this.packet;
    }


    public final Packet<?> setPacket(Packet<?> packet) {

        return this.packet = packet;
    }

    public static class Send extends PacketEvent {

        public Send(Packet<?> packet) {

            super(packet);
        }
    }

    public static class Receive extends PacketEvent {

        public Receive(Packet<?> packet) {

            super(packet);
        }
    }
}
После создаём MixinNetworkManager и заполняем его:
MixinNetworkManager:
import io.netty.channel.ChannelHandlerContext;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraftforge.common.MinecraftForge;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.io.IOException;

@Mixin(NetworkManager.class)
public class MixinNetworkManager {

    @Inject(method = "sendPacket(Lnet/minecraft/network/Packet;)V", at = @At("HEAD"), cancellable = true)
    private void onSendPacket(Packet<?> packet, CallbackInfo callbackInfo) {
        PacketEvent packetEvent = new PacketEvent.Send(packet);
        MinecraftForge.EVENT_BUS.post(packetEvent);

        if (packetEvent.isCanceled()) {
            callbackInfo.cancel();
        }
    }

    @Inject(method = "channelRead0", at = @At("HEAD"), cancellable = true)
    private void onChannelRead(ChannelHandlerContext channelHandlerContext, Packet<?> packet, CallbackInfo callbackInfo) {
        PacketEvent packetEvent = new PacketEvent.Receive(packet);
        MinecraftForge.EVENT_BUS.post(packetEvent);

        if (packetEvent.isCanceled()) {
            callbackInfo.cancel();
        }
    }
}
(Если посмотреть то можно сразу увидеть где активируется Send, а где Receive. Не забываем зарегестрировать наш миксин в файле миксинов)


Отлично, PacketEvent готов! Давайте посмотрим два примера его работы:

Первый пример:
Предположим, что нам нужно сделать так, что при попытке отправить пакет CPacketConfirmTeleport он отменялся. Тогда код будет выглядеть так:
Java:
@SubscribeEvent
public void onUpdate(PacketEvent.Send e) {
     if (e.getPacket() instanceof CPacketConfirmTeleport) {
         e.setCanceled(true);
     }
}
Второй пример:
Предположим, что нам нужно при получении пакета SPacketEntityVelocity(нацеленого на игрока) изменить данные motionX, motionY, motionZ на 0. Код будет выглядеть примерно так:
Java:
@SubscribeEvent
public void onUpdate(PacketEvent.Receive e) {
    if (e.getPacket() instanceof SPacketEntityVelocity) {
        SPacketEntityVelocity sPacketEntityVelocity = (SPacketEntityVelocity) e.getPacket();
        if (sPacketEntityVelocity.getEntityID() == mc.player.getEntityId()) {
            sPacketEntityVelocity.motionX = 0;
            sPacketEntityVelocity.motionY = 0;
            sPacketEntityVelocity.motionZ = 0;
        }
    }
}


Вот и всё! Теперь вы у вас есть свой PacketEvent и понимание как с ним работать. Теперь всё в руках вашей фантазии.
:seemsgood:
 
Начинающий
Статус
Оффлайн
Регистрация
25 Фев 2024
Сообщения
224
Реакции[?]
4
Поинты[?]
1K
В этой теме я расскажу как сделать PacketEvent и для чего он вам может пригодиться.

Все примеры будут рассматриватся для дефолтного обработчика событий forge(т.е. MinecraftForge.EVENT_BUS).
Вся тема была написана новичком.


1.Что такое PacketEvent?
Проще говоря, PacketEvent — это событие, активирующееся при отправке/получении пакетов между клиентом и сервером. В основном он поделен на два подкласса:
Send (PacketEvent.Send) — Активируется только при отправке пакетов Клиент→Сервер. Такие пакеты помечены буквой C (например CPacketPlayerTryUseItem).
Receive (PacketEvent.Receive) — Активируется только при получении пакетов Клиент←Сервер. Такие пакеты помечены буквой S (например SPacketEntityVelocity).

2.Для чего нужен PacketEvent?
Его можно использовать для отмены и изменения пакетов, эта возможность очень хорошо облегчает создание функций.

3.Как же его сделать?
Для начала в нашей сборке должна быть настроенная система Mixin и хоть малое понимание её работы(есть много гайдов в гугле и ютубе).

Создаем класс PacketEvent и пишем в нём вот это:
PacketEvent:
import net.minecraft.network.Packet;
import net.minecraftforge.fml.common.eventhandler.Cancelable;
import net.minecraftforge.fml.common.eventhandler.Event;

@Cancelable
public class PacketEvent extends Event {
    private Packet<?> packet;

    public PacketEvent(Packet<?> packet) {

        this.packet = packet;
    }

    public final Packet<?> getPacket() {

        return this.packet;
    }


    public final Packet<?> setPacket(Packet<?> packet) {

        return this.packet = packet;
    }

    public static class Send extends PacketEvent {

        public Send(Packet<?> packet) {

            super(packet);
        }
    }

    public static class Receive extends PacketEvent {

        public Receive(Packet<?> packet) {

            super(packet);
        }
    }
}
После создаём MixinNetworkManager и заполняем его:
MixinNetworkManager:
import io.netty.channel.ChannelHandlerContext;
import net.minecraft.network.NetworkManager;
import net.minecraft.network.Packet;
import net.minecraftforge.common.MinecraftForge;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;

import java.io.IOException;

@Mixin(NetworkManager.class)
public class MixinNetworkManager {

    @Inject(method = "sendPacket(Lnet/minecraft/network/Packet;)V", at = @At("HEAD"), cancellable = true)
    private void onSendPacket(Packet<?> packet, CallbackInfo callbackInfo) {
        PacketEvent packetEvent = new PacketEvent.Send(packet);
        MinecraftForge.EVENT_BUS.post(packetEvent);

        if (packetEvent.isCanceled()) {
            callbackInfo.cancel();
        }
    }

    @Inject(method = "channelRead0", at = @At("HEAD"), cancellable = true)
    private void onChannelRead(ChannelHandlerContext channelHandlerContext, Packet<?> packet, CallbackInfo callbackInfo) {
        PacketEvent packetEvent = new PacketEvent.Receive(packet);
        MinecraftForge.EVENT_BUS.post(packetEvent);

        if (packetEvent.isCanceled()) {
            callbackInfo.cancel();
        }
    }
}
(Если посмотреть то можно сразу увидеть где активируется Send, а где Receive. Не забываем зарегестрировать наш миксин в файле миксинов)


Отлично, PacketEvent готов! Давайте посмотрим два примера его работы:

Первый пример:
Предположим, что нам нужно сделать так, что при попытке отправить пакет CPacketConfirmTeleport он отменялся. Тогда код будет выглядеть так:
Java:
@SubscribeEvent
public void onUpdate(PacketEvent.Send e) {
     if (e.getPacket() instanceof CPacketConfirmTeleport) {
         e.setCanceled(true);
     }
}
Второй пример:
Предположим, что нам нужно при получении пакета SPacketEntityVelocity(нацеленого на игрока) изменить данные motionX, motionY, motionZ на 0. Код будет выглядеть примерно так:
Java:
@SubscribeEvent
public void onUpdate(PacketEvent.Receive e) {
    if (e.getPacket() instanceof SPacketEntityVelocity) {
        SPacketEntityVelocity sPacketEntityVelocity = (SPacketEntityVelocity) e.getPacket();
        if (sPacketEntityVelocity.getEntityID() == mc.player.getEntityId()) {
            sPacketEntityVelocity.motionX = 0;
            sPacketEntityVelocity.motionY = 0;
            sPacketEntityVelocity.motionZ = 0;
        }
    }
}


Вот и всё! Теперь вы у вас есть свой PacketEvent и понимание как с ним работать. Теперь всё в руках вашей фантазии.
А не легче через перечисление делать?
 
Пользователь
Статус
Оффлайн
Регистрация
23 Авг 2021
Сообщения
521
Реакции[?]
53
Поинты[?]
20K
Начинающий
Статус
Оффлайн
Регистрация
13 Мар 2024
Сообщения
58
Реакции[?]
1
Поинты[?]
0
топ для типов как я которые ток начинают пастить и делать селф код
 
Начинающий
Статус
Оффлайн
Регистрация
16 Ноя 2023
Сообщения
78
Реакции[?]
0
Поинты[?]
0
Вообще нужная вещь но я одного не понимаю, вы евенты будете по одному хуячить?:seemsgood:
 
Забаненный
Статус
Оффлайн
Регистрация
17 Фев 2024
Сообщения
21
Реакции[?]
0
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
ну и хуйня
 
Сверху Снизу