[flowers for ur soul]
-
Автор темы
- #1
Вторая часть гайда. Все как всегда - если заходит и я вижу положительный фидбек, то создаю продолжение.
Первая часть
АХТУНГ!! Тут все на версии 1.8.8
Сегодня мы с вами будем делать модули и хукать их в нужных местах.
2. Теперь создадим конструктор и 3 переменных.
private String name; // название функции
private int key; // клавиша для переключения функции
private boolean state; // стадия функции ( включена / выключена )
public Module( String name, int key )
{
this.name = name; // присваиваем имя функции
this.key = key; // присваиваем клавшиу переключения
this.state = false; // функция выключена по умолчанию
}
private int key; // клавиша для переключения функции
private boolean state; // стадия функции ( включена / выключена )
public Module( String name, int key )
{
this.name = name; // присваиваем имя функции
this.key = key; // присваиваем клавшиу переключения
this.state = false; // функция выключена по умолчанию
}
3. теперь нам надо создать 5 функций для работы с функционалом чита:
1) OnEnable - мы будем вызывать ее при включении функции
2) OnDisable - мы будем вызыввать ее при выключении функции
3) OnUpdate - мы будем вызывать ее при каждом действии в игре ( если вы писали читы для CS:GO, то это некий аналог CreateMove хука )
4) OnRender - мы будем вызывать ее при рендере / обработке объектов
5) Toggle - здесь мы будем включать / выключать функциюх
Также можно сделать GetName, который просто возвращает this.name ( название функции ) и функцию GetCode которая будет возвращать клавишу активации ( this.key )
В некоторые функции можно добавить функционал, который будет общим для всех функций, я решил для примера добавить сообщения о включении / выключении.
public void OnEnable( )
{
Minecraft.getMinecraft( ).thePlayer.addChatMessage( new ChatComponentTranslation( "[" + EnumChatFormatting.BLUE + "ugay" + EnumChatFormatting.WHITE + "] " + EnumChatFormatting.RED + GetName( ) + " has been toggled ON" ) );
}
public void OnDisable( )
{
Minecraft.getMinecraft( ).thePlayer.addChatMessage( new ChatComponentTranslation( "[" + EnumChatFormatting.BLUE + "ugay" + EnumChatFormatting.WHITE + "] " + EnumChatFormatting.RED +GetName( ) + " has been toggled OFF" ) );
}
{
Minecraft.getMinecraft( ).thePlayer.addChatMessage( new ChatComponentTranslation( "[" + EnumChatFormatting.BLUE + "ugay" + EnumChatFormatting.WHITE + "] " + EnumChatFormatting.RED + GetName( ) + " has been toggled ON" ) );
}
public void OnDisable( )
{
Minecraft.getMinecraft( ).thePlayer.addChatMessage( new ChatComponentTranslation( "[" + EnumChatFormatting.BLUE + "ugay" + EnumChatFormatting.WHITE + "] " + EnumChatFormatting.RED +GetName( ) + " has been toggled OFF" ) );
}
Функция Toggle очень проста - мы меняем значение переменной state на противоположное и в зависимости от значения вызываем либо onenable либо onDisable
Код:
public void Toggle( )
{
this.state = !this.state; // переключение
if ( this.state ) // если мы включили функцию, то вызываем OnEnable
this.OnEnable( );
else // если выключили, то вызываем OnDisable
this.OnDisable( );
}
public static Minecraft mc = Minecraft.getMinecraft( );
а теперь можно заменить Minecraft.getMinecraft( ) заменить просто на mc
5. Далее нам надо создать обработчики в главном классе ( MegaHack ), добавим сюда
1) добавим список функций в ArrayList
private static ArrayList< Feature > features;
2) Создадим метод инициализации, его мы будем вызывать при загрузке и инициализировать в нем все функции
Код:
public void Initialize( )
{
this.features = new ArrayList< Feature >( ); // инициализация нашего ArrayList ( списка модулей )
}
Код:
public ArrayList< Feature > GetModules( )
{
return features;
}
Код:
public void OnKey( int code )
{
for ( Feature mod : GetModules( ) ) // перебираем список всех модулей
{
if ( mod.GetCode( ) == code ) // если клавиша, которую мы нажали соответствует клавиши активации модуля, то мы переключаем состояние модуля
{
mod.Toggle( );
}
}
}
Код:
public void OnUpdate( )
{
for ( Feature mod : getModules( ) )
{
mod.OnUpdate( );
}
}
public void OnRender( )
{
for ( Feature mod : getModules( ) )
{
mod.OnRender( );
}
}
1) Хук иницилизации нужно поставить в методе загрузки ( startGame( ) в Minecraft.java ) ставить его надо после присвоения основных переменных
MegaHack.INSTANCE.Initialize( );
2) обрабатываем нажатые клавиши мы каждый тик, а значит вызов должен быть в методе runTick и он опять же в minecraft.java
добавляем вызов в условии if ( this.currentScreen == null )
MegaHack.INSTANCE.OnKey( k ); // передаем параметр, k - переменная которая содержит нажатую клавишу
3) Теперь хук на он апдейт нам надо ставить в обработчике статусов энтити ( onLivingUpdate( ) в EntityPlayerSP.java )
MegaHack.INSTANCE.OnUpdate( );
4) И последнее хук на рендер, вызываем его в самом конце renderWorldPass( ) в EntityRenderer.java
Вот и все. В следующем гайде сделаем какой-нибудь функционал.
credits: violanes
Последнее редактирование: