это что ты несешь в данный раздел? для чего нужны Лоудеры для бесплатных читов?что ты несешь
это что ты несешь в данный раздел? для чего нужны Лоудеры для бесплатных читов?что ты несешь
А чем ты отличаешься от него братан? Использованием Chat-GPT?
а нахуй ты сюда тогда вообще зашел пастер
Нравится же тебе на радном писатьА чем ты отличаешься от него братан? Использованием Chat-GPT?
Да, а ты что-то против русского языка имеешь или что? У тебя даже проблемы с правописанием, и пишешь с ошибками братан)Нравится же тебе на радном писать
Я не с России, и уроков русского языка у нас нету. От куда мне учится граматики? И какое тебе нахуй дело до моего правописание, речь шла про кодинг. Ты кидаешь вбросы и всем говоришь, что чат гпт за всех пишет.Да, а ты что-то против русского языка имеешь или что? У тебя даже проблемы с правописанием, и пишешь с ошибками братан)
Так факт в том, что ты ничего не знаешь и оскорбляешь людей пастерами, хоть сам 100% не умнее их будешь) Если ты сидишь пишешь, что пастерам сойдет и считаешь, что ЛОАДЕР НА JAVA это нормально, то у тебя точно проблемы какие то, а не у людей, которых ты называешь ПАСТЕРАМИ блять)Я не с России, и уроков русского языка у нас нету. От куда мне учится граматики? И какое тебе нахуй дело до моего правописание, речь шла про кодинг. Ты кидаешь вбросы и всем говоришь, что чат гпт за всех пишет.
ты ебнутый?Так факт в том, что ты ничего не знаешь и оскорбляешь людей пастерами, хоть сам 100% не умнее их будешь) Если ты сидишь пишешь, что пастерам сойдет и считаешь, что ЛОАДЕР НА JAVA это нормально, то у тебя точно проблемы какие то, а не у людей, которых ты называешь ПАСТЕРАМИ блять)
ты сам то из себя что представляешь? Или ты только писать коменты можешь? У тебя не чуть не меньше кринжовые посты, на безы экспы 2.0 клик гуи xdd, умный чест стилер xddТак факт в том, что ты ничего не знаешь и оскорбляешь людей пастерами, хоть сам 100% не умнее их будешь) Если ты сидишь пишешь, что пастерам сойдет и считаешь, что ЛОАДЕР НА JAVA это нормально, то у тебя точно проблемы какие то, а не у людей, которых ты называешь ПАСТЕРАМИ блять)
Ты че больной? Где я сливал чет под базу экспенсива и какой нибудь умный чест стиллер под экспенсив?) Ты реально типуля пытаешься оправдать свой спащенный код xDты ебнутый?
1. где я писал, что лоудер на джава это нормально?
2. Почему лоудер на джава у DoomsDay это нормально, а если кто-то другой сделает, то это не нормально
3. ты меня вообще не знаешь как ты можешь судить о чем либо еблан
ты сам то из себя что представляешь? Или ты только писать коменты можешь? У тебя не чуть не меньше кринжовые посты, на безы экспы 2.0 клик гуи xdd, умный чест стилер xdd
Я тебя перепутал с RenekuHUI, хотя тебя тоже все хуесосят. И код не спащен ни у кого, ты просто бомж который обиделся на весь форумТы че больной? Где я сливал чет под базу экспенсива и какой нибудь умный чест стиллер под экспенсив?) Ты реально типуля пытаешься оправдать свой спащенный код xD
Бомж? Такие как ты даже на форуме этом состоять не должны. Иди джаву учи, а не сливай свою хуйню с Chat-GPT.Я тебя перепутал с RenekuHUI, хотя тебя тоже все хуесосят. И код не спащен ни у кого, ты просто бомж который обиделся на весь форум
пруфоф не будетБомж? Такие как ты даже на форуме этом состоять не должны, неадекватный ребенок. Иди джаву учи, а не сливай свою хуйню с Chat-GPT.
Да братан) Доказательств не будет, тут и так все видно xDпруфоф не будет
что тебе видно? Мне кажется у тебя глаз нетуДа братан) Доказательств не будет, тут и так все видно xD
В дискорд пошли, разберёмся кто там пастерок, и чей хуй у тебя в деревне как символ божий стоит (не намекаю, но МОЙ))тебе не похуй же, пишешь и пишешь мне. ты клоун ты сам из себя ничего не представялешь. Иди java учи школьница пастерская
пиши дсВ дискорд пошли, разберёмся кто там пастерок, и чей хуй у тебя в деревне как символ божий стоит (не намекаю, но МОЙ))
Пиши сам , и так уже хуяку принял на душу :Dпиши дс
ты название не такое поставил. Не "для пастеров", а "от пастера для пастеров". metafaze для кого распинался писать про пересбор jdk?Запасайтесь чипсами, ведь если вы пастер, то вы здесь на долго.
Специально для новичков каждый блок был обозначен, если вам не знакомы некоторые слова советую почитать о них в интернете.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
видео с игрой с лоудера
Создаем новый проект с использованием java 17 если у вас чит экспенсив/экселлент и т.д.
1. Создание приложения с инициализацией всего необходимого.
После создание проекта вам нужно добавить в ваш Main класс всю основу
2. Создание рендера/конструкторовJava:package loader.starter; import loader.objects.SettingObject; import loader.objects.SquareObject; import javax.swing.*; import java.awt.*; /** @author BossThisGame for product tense * <p> * Version 1.0 * <p> * Minecraft loader */ public class Main { /** * Главный класс * Добавление классов */ public static void main(String[] args) { ImageIcon icon = new ImageIcon(Main.class.getResource("/loader/assets/logo.png")); SwingUtilities.invokeLater(() -> { JFrame frame = new JFrame("Loader"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setIconImage(icon.getImage()); frame.setSize(707, 509); frame.setLocationRelativeTo(null); frame.setResizable(false); JPanel parentPanel = new JPanel(new CardLayout()); CardLayout cardLayout = (CardLayout) parentPanel.getLayout(); SquareObject mainPanel = new SquareObject(cardLayout, parentPanel); SettingObject settingsPanel = new SettingObject(cardLayout, parentPanel); parentPanel.add(mainPanel, "mainPanel"); parentPanel.add(settingsPanel, "settingsPanel"); frame.add(parentPanel); frame.setVisible(true); }); } }
Для начала нужно создать класс с цветами которые мы будем использовать, чтобы каждый раз не искать нужный цвет.
Объект рендера главного менюJava:package loader.utils; import javax.swing.*; import java.awt.*; /** @author BossThisGame for product tense * <p> * Version 1.0 * <p> * Minecraft loader */ /** * Класс, содержащий все цвета которые можно заюзать */ public class ColorUtil extends JPanel { public static Color background = new Color(45, 45, 45); public static Color headerColor = new Color(29, 29, 31); public static Color buttonColor1 = new Color(66, 91, 129); public static Color buttonColor2 = new Color(14, 93, 213); }
Создание класса объекта меню настроекJava:package loader.objects; import loader.objects.buttons.StartButton; import loader.utils.ColorUtil; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; /** @author BossThisGame for product tense * <p> * Version 1.0 * <p> * Minecraft loader */ /** * Класс от части всего рендера */ public class SquareObject extends JPanel { private StartButton startButton; private ImageIcon settingsIcon; private CardLayout cardLayout; private JPanel parentPanel; private boolean isRunning = false; private boolean isHovered = false; /** * Конструктор инициализирует главное меню с кнопкой запуска и иконкой настроек * * @param cardLayout макет для переключения меню * @param parentPanel панель для переключения */ public SquareObject(CardLayout cardLayout, JPanel parentPanel) { this.cardLayout = cardLayout; this.parentPanel = parentPanel; /** * Рендер заднего фона */ setBackground(ColorUtil.background); setLayout(null); /** * Рендер кнопки "Запустить" */ startButton = new StartButton("Запустить"); startButton.setBackground(ColorUtil.buttonColor1); startButton.setForeground(Color.WHITE); startButton.setFont(new Font("Arial", Font.BOLD, 20)); startButton.setPreferredSize(new Dimension(200, 50)); startButton.setBounds((707 - 200) / 2, (509 - 50) / 2 + 50, 200, 50); add(startButton); startButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (!isRunning) { startButton.setBackground(Color.GREEN); startButton.setText("Ожидайте"); /** * Запуск майнкрафт в отдельном потоке */ new Thread(() -> { loader.starter.Start.main(new String[]{}); }).start(); isRunning = true; /** * Закрытие лоудера через минуту * Можете поменять значение как вам угодно */ Timer timer = new Timer(60000, evt -> { Window window = SwingUtilities.getWindowAncestor(SquareObject.this); if (window != null) { window.dispose(); } }); timer.setRepeats(false); timer.start(); } } @Override public void mouseEntered(MouseEvent e) { isHovered = true; updateButtonAppearance(); } @Override public void mouseExited(MouseEvent e) { isHovered = false; updateButtonAppearance(); } }); settingsIcon = new ImageIcon(SquareObject.class.getResource("/loader/assets/setting.png")); addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { int iconX = getWidth() - 50; int iconY = 4; int iconWidth = 47; int iconHeight = 43; if (e.getX() >= iconX && e.getX() <= iconX + iconWidth && e.getY() >= iconY && e.getY() <= iconY + iconHeight) { SwingUtilities.invokeLater(() -> cardLayout.show(parentPanel, "settingsPanel")); } } }); } /** * Отрисовка компонентов * * @param g объект Graphics для защиты */ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); /** * Рендер полосы сверху */ g.setColor(ColorUtil.headerColor); g.fillRect(0, 0, getWidth(), 50); /** * Рендер текста */ String versionText = "v1.0"; String text = "Minecraft Loader"; g.setColor(Color.WHITE); g.setFont(new Font("Arial", Font.BOLD, 40)); FontMetrics titleMetrics = g.getFontMetrics(g.getFont()); int titleX = (getWidth() - titleMetrics.stringWidth(text)) / 2 + 15; int titleY = titleMetrics.getHeight() - 6; g.drawString(text, titleX, titleY); g.setFont(new Font("Arial", Font.BOLD, 20)); FontMetrics metrics = g.getFontMetrics(g.getFont()); int x = getWidth() - metrics.stringWidth(versionText) - 10; int y = getHeight() - metrics.getHeight() + metrics.getAscent() - 10; g.drawString(versionText, x, y); if (settingsIcon != null) { int iconX = getWidth() - 50; int iconY = 4; g.drawImage(settingsIcon.getImage(), iconX, iconY, 47, 43, this); } } private void updateButtonAppearance() { if (isRunning) { startButton.setBackground(Color.GREEN); startButton.setText("Ожидайте"); } else { if (isHovered) { startButton.setBackground(ColorUtil.buttonColor2); } else { startButton.setBackground(ColorUtil.buttonColor1); } } } }
Класс кнопки стартаJava:package loader.objects; import loader.utils.ColorUtil; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.net.URI; /** @author BossThisGame for product tense * <p> * Version 1.0 * <p> * Minecraft loader */ /** * Объект настроек с возможностью возврата к главному меню */ public class SettingObject extends JPanel { private CardLayout cardLayout; private JPanel parentPanel; private int clickableTextX = 20; private int clickableTextY = 150; private int clickableTextWidth = 300; private int clickableTextHeight = 20; /** * Отрисовка меню */ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); /** * Рендер фона и элементов интерфейса */ setBackground(ColorUtil.background); setLayout(null); g.setColor(ColorUtil.headerColor); g.fillRect(0, 0, getWidth(), 50); g.setColor(Color.WHITE); g.setFont(new Font("Arial", Font.PLAIN, 20)); int textX = 20; int textY = 100; g.drawString("Информация", textX, textY); g.drawString("Данный лоудер просто прототип", textX, textY + 30); g.drawString("Вы можете наложить свою обфускацию по желанию", textX, textY + 60); FontMetrics fm = g.getFontMetrics(); String clickableText = "Ссылка на канал Tense client"; int textWidth = fm.stringWidth(clickableText); g.setColor(Color.WHITE); g.drawString(clickableText, clickableTextX, clickableTextY + 35); Rectangle clickableArea = new Rectangle(clickableTextX, clickableTextY - fm.getAscent() + 35, textWidth, fm.getHeight()); addClickableArea(clickableArea); } /** * Добавляет область кликабельной зоны * * @param clickableArea кликабельная область */ private void addClickableArea(Rectangle clickableArea) { addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (clickableArea.contains(e.getPoint())) { openBrowser("https://www.youtube.com/@rarchik/videos"); } } }); } /** * Открывает браузер с указанной ссылкой * * @param url URL для открытия в браузере */ private void openBrowser(String url) { try { Desktop.getDesktop().browse(new URI(url)); } catch (Exception ex) { ex.printStackTrace(); } } /** * Конструктор кнопки возврата * * @param cardLayout макет для переключения панелей * @param parentPanel панель для переключения */ public SettingObject(CardLayout cardLayout, JPanel parentPanel) { this.cardLayout = cardLayout; this.parentPanel = parentPanel; JLabel backButton = new JLabel(new ImageIcon(SettingObject.class.getResource("/loader/assets/back_arrow.png"))); backButton.setBounds(10, 10, 100, 100); backButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { SwingUtilities.invokeLater(() -> cardLayout.show(parentPanel, "mainPanel")); } }); add(backButton); JLabel settingsLabel = new JLabel("Настройки", SwingConstants.CENTER); settingsLabel.setFont(new Font("Arial", Font.BOLD, 40)); settingsLabel.setForeground(Color.WHITE); settingsLabel.setBounds(0, 50, getWidth(), 50); add(settingsLabel); } }
Java:package loader.objects.buttons; import loader.utils.ColorUtil; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.geom.RoundRectangle2D; /** @author BossThisGame for product tense * <p> * Version 1.0 * <p> * Minecraft loader */ /** * Добавление кнопки "Запуск" */ public class StartButton extends JButton { public StartButton(String text) { super(text); setContentAreaFilled(false); setFocusPainted(false); /** * Установка стандартных цветов фона и текста */ setBackground(ColorUtil.buttonColor1); setForeground(Color.WHITE); /** * Обработчик событий мыши для эффекта наведения */ addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { setBackground(ColorUtil.buttonColor2); } @Override public void mouseExited(MouseEvent e) { setBackground(ColorUtil.buttonColor1); } }); /** * Установка шрифта для текста кнопки */ setFont(new Font("Arial", Font.BOLD, 20)); } /** * Кастомное рисование компонента кнопки * * @param g объект Graphics для защиты */ @Override protected void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g.create(); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setColor(getBackground()); g2.fill(new RoundRectangle2D.Float(0, 0, getWidth(), getHeight(), 30, 30)); super.paintComponent(g2); g2.dispose(); } /** * Обновление свойств кнопки */ @Override public void updateUI() { super.updateUI(); setOpaque(false); setBorder(BorderFactory.createEmptyBorder(5, 15, 5, 15)); } }
3. Нужно создать папку с ресурсами (png)Java:package loader.starter; import java.util.Arrays; import net.minecraft.client.main.Main; /** @author BossThisGame for product tense * <p> * Version 1.0 * <p> * Minecraft loader */ public class Start { public static void main(String[] args) { String assets = System.getenv().containsKey("assetDirectory") ? System.getenv("assetDirectory") : "assets"; Main.main(concat(new String[] {"--version", "mcp", "--accessToken", "0", "--assetsDir", assets, "--assetIndex", "1.16", "--userProperties", "{}"}, args)); } public static <T> T[] concat(T[] first, T[] second) { T[] result = Arrays.copyOf(first, first.length + second.length); System.arraycopy(second, 0, result, first.length, second.length); return result; } }
Можете сделать как у меня
Посмотреть вложение 280336
Дальше обязательно нужно сделать манифест чтобы лоудер можно было запускать как исполняемый файл
Посмотреть вложение 280338
Дальше нужно создать директорию где будет хранится ваш чит. У меня это будет здесь (Не забудьте про нативки)Код:Manifest-Version: 1.0 Can-Retransform-Classes: true Main-Class: loader.starter.Main SplashScreen-Image: l.png
Посмотреть вложение 280339
Дальше использую imgur так как на форуме лимит загрузки изображений
Нужно добавить вашу джарку в библиотекуПожалуйста, авторизуйтесь для просмотра ссылки.
Теперь осталось забилдить проект. Заходим вПожалуйста, авторизуйтесь для просмотра ссылки.
Создаем новыйПожалуйста, авторизуйтесь для просмотра ссылки.
Дальше можно выбрать название с каким названием будет сохранятся ваша джарка (НЕ ОБЯЗАТЕЛЬНО)
И делаем как наПожалуйста, авторизуйтесь для просмотра ссылки.
Важно: С какой джавы вы билдили проект с такой джавы и нужно запускать джарку
Сохраняем,Пожалуйста, авторизуйтесь для просмотра ссылки.Build - Build Artifacts и выбираем наш артифакт
После билда можете запускать ваш лоудер.
Так же не пишите мне за ассетсы майнкрафта, к примеру в Экселленте ассесты грузятся из диска C, а добавить их самостоятельно вы и сами сможете.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Я вам не скинул целый уже готовый проект чтобы вы поняли как это делать. Удачи. Так же вы должны учесть, что это не протект лоудер. Здесь нету проверки хвида и т.д. Систему хвида сделать не сложно, поэтому используйте лоудер как хотите
ждём калестиал лоадер от легендарного леня12831938 который делает свой EXSWIRI XYINA EDTITIONЗапасайтесь чипсами, ведь если вы пастер, то вы здесь на долго.
Специально для новичков каждый блок был обозначен, если вам не знакомы некоторые слова советую почитать о них в интернете.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Пожалуйста, авторизуйтесь для просмотра ссылки.
видео с игрой с лоудера
Создаем новый проект с использованием java 17 если у вас чит экспенсив/экселлент и т.д.
1. Создание приложения с инициализацией всего необходимого.
После создание проекта вам нужно добавить в ваш Main класс всю основу
2. Создание рендера/конструкторовJava:package loader.starter; import loader.objects.SettingObject; import loader.objects.SquareObject; import javax.swing.*; import java.awt.*; /** @author BossThisGame for product tense * <p> * Version 1.0 * <p> * Minecraft loader */ public class Main { /** * Главный класс * Добавление классов */ public static void main(String[] args) { ImageIcon icon = new ImageIcon(Main.class.getResource("/loader/assets/logo.png")); SwingUtilities.invokeLater(() -> { JFrame frame = new JFrame("Loader"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setIconImage(icon.getImage()); frame.setSize(707, 509); frame.setLocationRelativeTo(null); frame.setResizable(false); JPanel parentPanel = new JPanel(new CardLayout()); CardLayout cardLayout = (CardLayout) parentPanel.getLayout(); SquareObject mainPanel = new SquareObject(cardLayout, parentPanel); SettingObject settingsPanel = new SettingObject(cardLayout, parentPanel); parentPanel.add(mainPanel, "mainPanel"); parentPanel.add(settingsPanel, "settingsPanel"); frame.add(parentPanel); frame.setVisible(true); }); } }
Для начала нужно создать класс с цветами которые мы будем использовать, чтобы каждый раз не искать нужный цвет.
Объект рендера главного менюJava:package loader.utils; import javax.swing.*; import java.awt.*; /** @author BossThisGame for product tense * <p> * Version 1.0 * <p> * Minecraft loader */ /** * Класс, содержащий все цвета которые можно заюзать */ public class ColorUtil extends JPanel { public static Color background = new Color(45, 45, 45); public static Color headerColor = new Color(29, 29, 31); public static Color buttonColor1 = new Color(66, 91, 129); public static Color buttonColor2 = new Color(14, 93, 213); }
Создание класса объекта меню настроекJava:package loader.objects; import loader.objects.buttons.StartButton; import loader.utils.ColorUtil; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; /** @author BossThisGame for product tense * <p> * Version 1.0 * <p> * Minecraft loader */ /** * Класс от части всего рендера */ public class SquareObject extends JPanel { private StartButton startButton; private ImageIcon settingsIcon; private CardLayout cardLayout; private JPanel parentPanel; private boolean isRunning = false; private boolean isHovered = false; /** * Конструктор инициализирует главное меню с кнопкой запуска и иконкой настроек * * @param cardLayout макет для переключения меню * @param parentPanel панель для переключения */ public SquareObject(CardLayout cardLayout, JPanel parentPanel) { this.cardLayout = cardLayout; this.parentPanel = parentPanel; /** * Рендер заднего фона */ setBackground(ColorUtil.background); setLayout(null); /** * Рендер кнопки "Запустить" */ startButton = new StartButton("Запустить"); startButton.setBackground(ColorUtil.buttonColor1); startButton.setForeground(Color.WHITE); startButton.setFont(new Font("Arial", Font.BOLD, 20)); startButton.setPreferredSize(new Dimension(200, 50)); startButton.setBounds((707 - 200) / 2, (509 - 50) / 2 + 50, 200, 50); add(startButton); startButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (!isRunning) { startButton.setBackground(Color.GREEN); startButton.setText("Ожидайте"); /** * Запуск майнкрафт в отдельном потоке */ new Thread(() -> { loader.starter.Start.main(new String[]{}); }).start(); isRunning = true; /** * Закрытие лоудера через минуту * Можете поменять значение как вам угодно */ Timer timer = new Timer(60000, evt -> { Window window = SwingUtilities.getWindowAncestor(SquareObject.this); if (window != null) { window.dispose(); } }); timer.setRepeats(false); timer.start(); } } @Override public void mouseEntered(MouseEvent e) { isHovered = true; updateButtonAppearance(); } @Override public void mouseExited(MouseEvent e) { isHovered = false; updateButtonAppearance(); } }); settingsIcon = new ImageIcon(SquareObject.class.getResource("/loader/assets/setting.png")); addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { int iconX = getWidth() - 50; int iconY = 4; int iconWidth = 47; int iconHeight = 43; if (e.getX() >= iconX && e.getX() <= iconX + iconWidth && e.getY() >= iconY && e.getY() <= iconY + iconHeight) { SwingUtilities.invokeLater(() -> cardLayout.show(parentPanel, "settingsPanel")); } } }); } /** * Отрисовка компонентов * * @param g объект Graphics для защиты */ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); /** * Рендер полосы сверху */ g.setColor(ColorUtil.headerColor); g.fillRect(0, 0, getWidth(), 50); /** * Рендер текста */ String versionText = "v1.0"; String text = "Minecraft Loader"; g.setColor(Color.WHITE); g.setFont(new Font("Arial", Font.BOLD, 40)); FontMetrics titleMetrics = g.getFontMetrics(g.getFont()); int titleX = (getWidth() - titleMetrics.stringWidth(text)) / 2 + 15; int titleY = titleMetrics.getHeight() - 6; g.drawString(text, titleX, titleY); g.setFont(new Font("Arial", Font.BOLD, 20)); FontMetrics metrics = g.getFontMetrics(g.getFont()); int x = getWidth() - metrics.stringWidth(versionText) - 10; int y = getHeight() - metrics.getHeight() + metrics.getAscent() - 10; g.drawString(versionText, x, y); if (settingsIcon != null) { int iconX = getWidth() - 50; int iconY = 4; g.drawImage(settingsIcon.getImage(), iconX, iconY, 47, 43, this); } } private void updateButtonAppearance() { if (isRunning) { startButton.setBackground(Color.GREEN); startButton.setText("Ожидайте"); } else { if (isHovered) { startButton.setBackground(ColorUtil.buttonColor2); } else { startButton.setBackground(ColorUtil.buttonColor1); } } } }
Класс кнопки стартаJava:package loader.objects; import loader.utils.ColorUtil; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.net.URI; /** @author BossThisGame for product tense * <p> * Version 1.0 * <p> * Minecraft loader */ /** * Объект настроек с возможностью возврата к главному меню */ public class SettingObject extends JPanel { private CardLayout cardLayout; private JPanel parentPanel; private int clickableTextX = 20; private int clickableTextY = 150; private int clickableTextWidth = 300; private int clickableTextHeight = 20; /** * Отрисовка меню */ @Override protected void paintComponent(Graphics g) { super.paintComponent(g); /** * Рендер фона и элементов интерфейса */ setBackground(ColorUtil.background); setLayout(null); g.setColor(ColorUtil.headerColor); g.fillRect(0, 0, getWidth(), 50); g.setColor(Color.WHITE); g.setFont(new Font("Arial", Font.PLAIN, 20)); int textX = 20; int textY = 100; g.drawString("Информация", textX, textY); g.drawString("Данный лоудер просто прототип", textX, textY + 30); g.drawString("Вы можете наложить свою обфускацию по желанию", textX, textY + 60); FontMetrics fm = g.getFontMetrics(); String clickableText = "Ссылка на канал Tense client"; int textWidth = fm.stringWidth(clickableText); g.setColor(Color.WHITE); g.drawString(clickableText, clickableTextX, clickableTextY + 35); Rectangle clickableArea = new Rectangle(clickableTextX, clickableTextY - fm.getAscent() + 35, textWidth, fm.getHeight()); addClickableArea(clickableArea); } /** * Добавляет область кликабельной зоны * * @param clickableArea кликабельная область */ private void addClickableArea(Rectangle clickableArea) { addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { if (clickableArea.contains(e.getPoint())) { openBrowser("https://www.youtube.com/@rarchik/videos"); } } }); } /** * Открывает браузер с указанной ссылкой * * @param url URL для открытия в браузере */ private void openBrowser(String url) { try { Desktop.getDesktop().browse(new URI(url)); } catch (Exception ex) { ex.printStackTrace(); } } /** * Конструктор кнопки возврата * * @param cardLayout макет для переключения панелей * @param parentPanel панель для переключения */ public SettingObject(CardLayout cardLayout, JPanel parentPanel) { this.cardLayout = cardLayout; this.parentPanel = parentPanel; JLabel backButton = new JLabel(new ImageIcon(SettingObject.class.getResource("/loader/assets/back_arrow.png"))); backButton.setBounds(10, 10, 100, 100); backButton.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { SwingUtilities.invokeLater(() -> cardLayout.show(parentPanel, "mainPanel")); } }); add(backButton); JLabel settingsLabel = new JLabel("Настройки", SwingConstants.CENTER); settingsLabel.setFont(new Font("Arial", Font.BOLD, 40)); settingsLabel.setForeground(Color.WHITE); settingsLabel.setBounds(0, 50, getWidth(), 50); add(settingsLabel); } }
Java:package loader.objects.buttons; import loader.utils.ColorUtil; import javax.swing.*; import java.awt.*; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.geom.RoundRectangle2D; /** @author BossThisGame for product tense * <p> * Version 1.0 * <p> * Minecraft loader */ /** * Добавление кнопки "Запуск" */ public class StartButton extends JButton { public StartButton(String text) { super(text); setContentAreaFilled(false); setFocusPainted(false); /** * Установка стандартных цветов фона и текста */ setBackground(ColorUtil.buttonColor1); setForeground(Color.WHITE); /** * Обработчик событий мыши для эффекта наведения */ addMouseListener(new MouseAdapter() { @Override public void mouseEntered(MouseEvent e) { setBackground(ColorUtil.buttonColor2); } @Override public void mouseExited(MouseEvent e) { setBackground(ColorUtil.buttonColor1); } }); /** * Установка шрифта для текста кнопки */ setFont(new Font("Arial", Font.BOLD, 20)); } /** * Кастомное рисование компонента кнопки * * @param g объект Graphics для защиты */ @Override protected void paintComponent(Graphics g) { Graphics2D g2 = (Graphics2D) g.create(); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g2.setColor(getBackground()); g2.fill(new RoundRectangle2D.Float(0, 0, getWidth(), getHeight(), 30, 30)); super.paintComponent(g2); g2.dispose(); } /** * Обновление свойств кнопки */ @Override public void updateUI() { super.updateUI(); setOpaque(false); setBorder(BorderFactory.createEmptyBorder(5, 15, 5, 15)); } }
3. Нужно создать папку с ресурсами (png)Java:package loader.starter; import java.util.Arrays; import net.minecraft.client.main.Main; /** @author BossThisGame for product tense * <p> * Version 1.0 * <p> * Minecraft loader */ public class Start { public static void main(String[] args) { String assets = System.getenv().containsKey("assetDirectory") ? System.getenv("assetDirectory") : "assets"; Main.main(concat(new String[] {"--version", "mcp", "--accessToken", "0", "--assetsDir", assets, "--assetIndex", "1.16", "--userProperties", "{}"}, args)); } public static <T> T[] concat(T[] first, T[] second) { T[] result = Arrays.copyOf(first, first.length + second.length); System.arraycopy(second, 0, result, first.length, second.length); return result; } }
Можете сделать как у меня
Посмотреть вложение 280336
Дальше обязательно нужно сделать манифест чтобы лоудер можно было запускать как исполняемый файл
Посмотреть вложение 280338
Дальше нужно создать директорию где будет хранится ваш чит. У меня это будет здесь (Не забудьте про нативки)Код:Manifest-Version: 1.0 Can-Retransform-Classes: true Main-Class: loader.starter.Main SplashScreen-Image: l.png
Посмотреть вложение 280339
Дальше использую imgur так как на форуме лимит загрузки изображений
Нужно добавить вашу джарку в библиотекуПожалуйста, авторизуйтесь для просмотра ссылки.
Теперь осталось забилдить проект. Заходим вПожалуйста, авторизуйтесь для просмотра ссылки.
Создаем новыйПожалуйста, авторизуйтесь для просмотра ссылки.
Дальше можно выбрать название с каким названием будет сохранятся ваша джарка (НЕ ОБЯЗАТЕЛЬНО)
И делаем как наПожалуйста, авторизуйтесь для просмотра ссылки.
Важно: С какой джавы вы билдили проект с такой джавы и нужно запускать джарку
Сохраняем,Пожалуйста, авторизуйтесь для просмотра ссылки.Build - Build Artifacts и выбираем наш артифакт
После билда можете запускать ваш лоудер.
Так же не пишите мне за ассетсы майнкрафта, к примеру в Экселленте ассесты грузятся из диска C, а добавить их самостоятельно вы и сами сможете.
Пожалуйста, авторизуйтесь для просмотра ссылки.
Я вам не скинул целый уже готовый проект чтобы вы поняли как это делать. Удачи. Так же вы должны учесть, что это не протект лоудер. Здесь нету проверки хвида и т.д. Систему хвида сделать не сложно, поэтому используйте лоудер как хотите
у тебя всё образуется, не волнуйсяобиженный на жизнь хуесос.
Проект предоставляет различный материал, относящийся к сфере киберспорта, программирования, ПО для игр, а также позволяет его участникам общаться на многие другие темы. Почта для жалоб: admin@yougame.biz