Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нём некорректно. Вам необходимо обновить браузер или попробовать использовать другой.
Не проще кинуть ссылку на какой-нибудь гайд по написанию читов с ютуба, чем писать целую огромную тему после которой все равно у новичков останутся вопросы... Понимаю гайд по написанию длл для подгрузки классов читпука в сам миникруфт это уже другое дело.
Итак,всем привет.Некоторые очень хотят написать хакес на майнкрафт(с модами тем более),но на ру просторах про это нет не слова.Что ж,вы нашли то что нужно.В первом треде мы напишем мод который можно будет поставить на проекты с модами(ебать умно однако),но и это не всё.
Советую не листать иначе вы нихуя не поймете.
Начнем с самого первого вопроса:
На чём будем писать то ебана? - Eclipse IDEA
На какую версию? - 1.7.10(самая оптимальная для модов.не вижу смысла суваться дальше)
Мы обойдем анти чит? - Да.В следуйщем треде(если он будет) обойдем kinetic говно анти чит который сделан для бомже проектов.
Какие функции будут в нашем говне? - WH,KillAura,Fly,Step.
Ладно,приступим.
1.7.10)
Step 3:
Делаем среду разработки.
*Про сетап IDE можно найти всё тут
Step 4: Делаем мейн класс
*Небольшое отступление*
Я вам разжую всё по максимуму.Если и после этого у вас будут вопросы,то лучше не пишите читы пока что..
Итак у нас есть IDE и полностью декомпилированный Minecraft.
И что теперь нам делать с этой информацией?
Заходим в Eclipse и делаем Package(обычно ваш регион(ru).ваш ник(sharlize).Ваш чит(simplecheat).*В java принято имя package писать исключительно в нижнем регистре.у вас не полетят ерроры если будет апперкейс,но всё же лучше не выебыватся*
Создаем класс Main *В java классы называются с апперкейс буквы*
Итак,у нас есть главный класс.Что с ним можно сделать?
Ну например мы хотим зарегестрировать наш хак(я не написал Event класс ибо вы бы нихуя не поняли)
Мы свапаем строку после пакета и пишем
Java:
package ru.sharlize.simplecheat;
import cpw.mods.fml.common.Mod;
@Mod(modid = "SimpleCheat", name = "SC", version = "1.0.0")
public class MainC {
}
Что ж,мы сделали наш Mod и теперь Forge видит наш хак.Что дальше то блять?мы делаем *абстрактный главный класс функции от которого в скоре будет наследованы наши другие функции.
*нахуя мне это надо?*
Я не буду затирать про ооп,просто хочу сказать что это будет очень удобно в итоговой реализации.
Итак,вот "структура" нашего чита:
Java:
package ru.sharlize.simplecheat;
public abstract class SimpleFunc {
public SimpleFunc(String name, int keybind)
{
this.name = name;
this.keybind = keybind;
}
private boolean active;
private String name;
private int keybind;
public String getName()
{
return name;
}
public int getKeyBind()
{
return keybind;
}
public boolean getActive()
{
return active;
}
public void setToggle()
{
if(active)
{
onDisable();
} else {
onEnable();
}
this.active = !active;
}
public void setStatus(boolean value)
{
this.active = value;
}
public void setKeyBind(int keybind)
{
this.keybind = keybind;
}
/*on Event*/
public void onTick() {}
public void onPreRender() {}
public void onPostRender() {}
public void onDisable() {}
public void onEnable() {}
}
Что же это значит?Пробежимся с самого начала.Если вы не знаете Java хоть чуть чуть(конструктор класса хотя бы),то закрывайте тред и идите учить жабу.Это очень легко и полезно.
В конструкторе класса мы указали типы "String" и "int".Значит у класса наследника(? extends SimpleFunc) должен быть такой же конструктор с такими же параметрами.
В качестве параметра String идет название функции,а int -*Отступление почему int идет как кнопка бинда
В Java есть класс KeyBoard в котором все "кнопки" идут типом int.*
KeyBind нашей функции.
Теперь когда у нас есть Simple функция можно сделать ArrayList(лист с классами функций).
Делаем вот такой вот "код"
public static ArrayList<SimpleFunc> func = new ArrayList<SimpleFunc>();
и пихаем его в главный класс.
Теперь можно вызывать ВСЕ наши функции которые добавлены в лист "func".
Зачем это нам?
Допустим мы хотим вызывать в TickEvent(в тик майна) все наши функции.
Делаем класс с эвентами + проверку на нажатие кнопки *active | noactive.
Код:
package ru.sharlize.simplecheat;
import org.lwjgl.input.Keyboard;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
import net.minecraft.client.Minecraft;
public class SimpleEvent {
@SubscribeEvent
public void onTick(TickEvent.ClientTickEvent event)
{
if(Minecraft.getMinecraft().thePlayer == null)
{
return;
}
for(SimpleFunc sf : MainC.func)
{
if(sf.getActive())
{
sf.onTick();
}
if(isKeyBindDown(sf.getKeyBind()))
{
if(Minecraft.getMinecraft().currentScreen != null)
{
return;
}
sf.setToggle();
break;
}
}
}
public boolean isKeyBindDown(int key) {
if (Keyboard.isKeyDown(key) != keyStates[key])
{
return keyStates[key] = !keyStates[key];
} else {
return false;
}
}
private boolean keyStates[] = new boolean[256];
@SubscribeEvent
public void onPost(RenderPlayerEvent.Post event)
{
for(SimpleFunc sf : MainC.func)
{
if(sf.getActive())
{
sf.onPostRender();
}
}
}
@SubscribeEvent
public void onPost(RenderPlayerEvent.Pre event)
{
for(SimpleFunc sf : MainC.func)
{
if(sf.getActive())
{
sf.onPreRender();
}
}
}
}
Можете поразбирать код,всё должно быть максимально понятным.
Ну ладно,перейдем к самому сладкому,к функциям.
Первым думаю сделать Step как самое легкое.
Создаем класс *функцию*
Код:
package ru.sharlize.simplecheat;
import org.lwjgl.input.Keyboard;
import net.minecraft.client.Minecraft;
public class Step extends SimpleFunc {
public Step()
{
super("Step", Keyboard.KEY_I);
}
}
Оверрайдим метод из супер класса("перехватываем" метод из класса SimpleFunc)
И слушаем внимательно.
Так как нам нужно заменить параметр stepHeight в игроке это нам нужно вызвать всего лишь 1 раз.
@Override
public void onEnable()
{
Minecraft.getMinecraft().thePlayer.stepHeight = 150;
}
@Override
public void onDisable()
{
Minecraft.getMinecraft().thePlayer.stepHeight = 1;
}
*Опять же отступление*
Вообще в майнкрафте очень много чего можно разрыть если интересно.
Для получения всех методов и полей допустим из мира(кроме private,и то java#Reflect и на это хуй ложил) нужно написать
Minecraft.getMinecraft().theWorld
Допустим вам нужно получить всех прогруженных энтити.
Пишите Minecraft.getMinecraft().theWorld.loadedEntityList и все прогруженные энтити у вас в ваших руках в формате пнг(List).
Ладно,вот наша первая функция и готова.
Теперь перейдем к флаю.У флая в майнкрафте очень много реализаций,но я покажу две.
Самая легкая:
Код:
package ru.sharlize.simplecheat;
import org.lwjgl.input.Keyboard;
import net.minecraft.client.Minecraft;
public class Fly extends SimpleFunc {
public Fly()
{
super("Fly", Keyboard.KEY_K);
}
@Override
public void onEnable()
{
Minecraft.getMinecraft().thePlayer.capabilities.allowFlying = true;
}
@Override
public void onDisable()
{
Minecraft.getMinecraft().thePlayer.capabilities.allowFlying = false;
}
}
Потруднее это когда нужно сделать обход для проекта.
public class WallHack extends SimpleFunc {
public WallHack()
{
super("WH", Keyboard.KEY_M);
}
@Override
public void onPostRender()
{
GL11.glDisable(32823);
GL11.glPolygonOffset(1.0F, 1100000.0F);
GL11.glEnable(2896);
}
@Override
public void onPreRender()
{
GL11.glEnable(32823);
GL11.glPolygonOffset(1.0F, -1100000.0F);
GL11.glDisable(2896);
}
}
Тут думаю просто вам нужно почитать про GL11,ибо по другому тут не объяснить.
И наконец легендарная строчка(и) кода в Main классе
Итак,всем привет.Некоторые очень хотят написать хакес на майнкрафт(с модами тем более),но на ру просторах про это нет не слова.Что ж,вы нашли то что нужно.В первом треде мы напишем мод который можно будет поставить на проекты с модами(ебать умно однако),но и это не всё.
Советую не листать иначе вы нихуя не поймете.
Начнем с самого первого вопроса:
На чём будем писать то ебана? - Eclipse IDEA
На какую версию? - 1.7.10(самая оптимальная для модов.не вижу смысла суваться дальше)
Мы обойдем анти чит? - Да.В следуйщем треде(если он будет) обойдем kinetic говно анти чит который сделан для бомже проектов.
Какие функции будут в нашем говне? - WH,KillAura,Fly,Step.
Ладно,приступим.
1.7.10)
Step 3:
Делаем среду разработки.
*Про сетап IDE можно найти всё тут
Step 4: Делаем мейн класс
*Небольшое отступление*
Я вам разжую всё по максимуму.Если и после этого у вас будут вопросы,то лучше не пишите читы пока что..
Итак у нас есть IDE и полностью декомпилированный Minecraft.
И что теперь нам делать с этой информацией?
Заходим в Eclipse и делаем Package(обычно ваш регион(ru).ваш ник(sharlize).Ваш чит(simplecheat).*В java принято имя package писать исключительно в нижнем регистре.у вас не полетят ерроры если будет апперкейс,но всё же лучше не выебыватся*
Создаем класс Main *В java классы называются с апперкейс буквы*
Итак,у нас есть главный класс.Что с ним можно сделать?
Ну например мы хотим зарегестрировать наш хак(я не написал Event класс ибо вы бы нихуя не поняли)
Мы свапаем строку после пакета и пишем
Java:
package ru.sharlize.simplecheat;
import cpw.mods.fml.common.Mod;
@Mod(modid = "SimpleCheat", name = "SC", version = "1.0.0")
public class MainC {
}
Что ж,мы сделали наш Mod и теперь Forge видит наш хак.Что дальше то блять?мы делаем *абстрактный главный класс функции от которого в скоре будет наследованы наши другие функции.
*нахуя мне это надо?*
Я не буду затирать про ооп,просто хочу сказать что это будет очень удобно в итоговой реализации.
Итак,вот "структура" нашего чита:
Java:
package ru.sharlize.simplecheat;
public abstract class SimpleFunc {
public SimpleFunc(String name, int keybind)
{
this.name = name;
this.keybind = keybind;
}
private boolean active;
private String name;
private int keybind;
public String getName()
{
return name;
}
public int getKeyBind()
{
return keybind;
}
public boolean getActive()
{
return active;
}
public void setToggle()
{
if(active)
{
onDisable();
} else {
onEnable();
}
this.active = !active;
}
public void setStatus(boolean value)
{
this.active = value;
}
public void setKeyBind(int keybind)
{
this.keybind = keybind;
}
/*on Event*/
public void onTick() {}
public void onPreRender() {}
public void onPostRender() {}
public void onDisable() {}
public void onEnable() {}
}
Что же это значит?Пробежимся с самого начала.Если вы не знаете Java хоть чуть чуть(конструктор класса хотя бы),то закрывайте тред и идите учить жабу.Это очень легко и полезно.
В конструкторе класса мы указали типы "String" и "int".Значит у класса наследника(? extends SimpleFunc) должен быть такой же конструктор с такими же параметрами.
В качестве параметра String идет название функции,а int -*Отступление почему int идет как кнопка бинда
В Java есть класс KeyBoard в котором все "кнопки" идут типом int.*
KeyBind нашей функции.
Теперь когда у нас есть Simple функция можно сделать ArrayList(лист с классами функций).
Делаем вот такой вот "код"
public static ArrayList<SimpleFunc> func = new ArrayList<SimpleFunc>();
и пихаем его в главный класс.
Теперь можно вызывать ВСЕ наши функции которые добавлены в лист "func".
Зачем это нам?
Допустим мы хотим вызывать в TickEvent(в тик майна) все наши функции.
Делаем класс с эвентами + проверку на нажатие кнопки *active | noactive.
Код:
package ru.sharlize.simplecheat;
import org.lwjgl.input.Keyboard;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import cpw.mods.fml.common.gameevent.TickEvent;
import net.minecraft.client.Minecraft;
public class SimpleEvent {
@SubscribeEvent
public void onTick(TickEvent.ClientTickEvent event)
{
if(Minecraft.getMinecraft().thePlayer == null)
{
return;
}
for(SimpleFunc sf : MainC.func)
{
if(sf.getActive())
{
sf.onTick();
}
if(isKeyBindDown(sf.getKeyBind()))
{
if(Minecraft.getMinecraft().currentScreen != null)
{
return;
}
sf.setToggle();
break;
}
}
}
public boolean isKeyBindDown(int key) {
if (Keyboard.isKeyDown(key) != keyStates[key])
{
return keyStates[key] = !keyStates[key];
} else {
return false;
}
}
private boolean keyStates[] = new boolean[256];
@SubscribeEvent
public void onPost(RenderPlayerEvent.Post event)
{
for(SimpleFunc sf : MainC.func)
{
if(sf.getActive())
{
sf.onPostRender();
}
}
}
@SubscribeEvent
public void onPost(RenderPlayerEvent.Pre event)
{
for(SimpleFunc sf : MainC.func)
{
if(sf.getActive())
{
sf.onPreRender();
}
}
}
}
Можете поразбирать код,всё должно быть максимально понятным.
Ну ладно,перейдем к самому сладкому,к функциям.
Первым думаю сделать Step как самое легкое.
Создаем класс *функцию*
Код:
package ru.sharlize.simplecheat;
import org.lwjgl.input.Keyboard;
import net.minecraft.client.Minecraft;
public class Step extends SimpleFunc {
public Step()
{
super("Step", Keyboard.KEY_I);
}
}
Оверрайдим метод из супер класса("перехватываем" метод из класса SimpleFunc)
И слушаем внимательно.
Так как нам нужно заменить параметр stepHeight в игроке это нам нужно вызвать всего лишь 1 раз.
@Override
public void onEnable()
{
Minecraft.getMinecraft().thePlayer.stepHeight = 150;
}
@Override
public void onDisable()
{
Minecraft.getMinecraft().thePlayer.stepHeight = 1;
}
*Опять же отступление*
Вообще в майнкрафте очень много чего можно разрыть если интересно.
Для получения всех методов и полей допустим из мира(кроме private,и то java#Reflect и на это хуй ложил) нужно написать
Minecraft.getMinecraft().theWorld
Допустим вам нужно получить всех прогруженных энтити.
Пишите Minecraft.getMinecraft().theWorld.loadedEntityList и все прогруженные энтити у вас в ваших руках в формате пнг(List).
Ладно,вот наша первая функция и готова.
Теперь перейдем к флаю.У флая в майнкрафте очень много реализаций,но я покажу две.
Самая легкая:
Код:
package ru.sharlize.simplecheat;
import org.lwjgl.input.Keyboard;
import net.minecraft.client.Minecraft;
public class Fly extends SimpleFunc {
public Fly()
{
super("Fly", Keyboard.KEY_K);
}
@Override
public void onEnable()
{
Minecraft.getMinecraft().thePlayer.capabilities.allowFlying = true;
}
@Override
public void onDisable()
{
Minecraft.getMinecraft().thePlayer.capabilities.allowFlying = false;
}
}
Потруднее это когда нужно сделать обход для проекта.
public class WallHack extends SimpleFunc {
public WallHack()
{
super("WH", Keyboard.KEY_M);
}
@Override
public void onPostRender()
{
GL11.glDisable(32823);
GL11.glPolygonOffset(1.0F, 1100000.0F);
GL11.glEnable(2896);
}
@Override
public void onPreRender()
{
GL11.glEnable(32823);
GL11.glPolygonOffset(1.0F, -1100000.0F);
GL11.glDisable(2896);
}
}
Тут думаю просто вам нужно почитать про GL11,ибо по другому тут не объяснить.
И наконец легендарная строчка(и) кода в Main классе