Гайд Гайд на адекватное Discord RPC с отображением гифок,сервера.

  • Автор темы Автор темы chooo
  • Дата начала Дата начала
Забаненный
Забаненный
Статус
Оффлайн
Регистрация
29 Апр 2023
Сообщения
986
Реакции
16
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.

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

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

Спасибо!

Привет еще раз,обитатели раздела.
Сейчас дропаю вам гайд на дискорд РПС

-
1735305011259.png
-

Расписываю по шагам для удобства
1.Нужно скачать библиотеки для discord RPC(в случае с базой expensive, библиотека от club.minnced - установлена)
2.Создать класс где будет хранится наш RPC ( у меня это Client Util в которой храняться все нужные переменные для работы с клиентом)
3.Когда создали класс,нужно имплементировать в него IMinecraft ,чтоб использовать пэкетж mc.
это выглядит так:
-
1735305318500.png
-
*так же нужно добавить аннотацию UtilityClass, которая подразумевает то,что класс является утилитным
4.Далее же мы инициализируем переменные для работы с RPC
-
1735305395819.png
-
5.Далее нам нужно создать метод startRPC(), в котором будем делать саму логику интеграции дискорд
-
1735305483755.png
-
6.Теперь же нам нужно инициализировать сюда данные о нашем приложении
-
1735305526554.png
-
7. У некоторых может всплыть вопрос, откуда мы берем id в 2 строке?
  • Нужно зайти на
    Пожалуйста, авторизуйтесь для просмотра ссылки.
  • Создать приложение
-
1735305634832.png
-
- Скопировать тот самый айди​
-
1735305669191.png
-
- Вставить его в поле для него​
8. Далее же мы реализовываем логику строки playing on: сервер
Прикреплю код как я ее реализовал ,через thread и замену state`ов

Код:
Expand Collapse Copy
new Thread(() -> {
            while (true) {
                try {
                    if (mc.currentScreen instanceof MainMenuScreen || mc.currentScreen instanceof MainScreen) {
                        state = "In main menu";
                    } else if (mc.currentScreen instanceof MultiplayerScreen) {
                        state = "Choosing Server";
                    } else if (mc.isSingleplayer()) {
                        state = "In single player";
                    } else if (mc.getCurrentServerData() != null) {
                        state = "Playing on " + mc.getCurrentServerData().serverIP.replace("mc.", "").replace("play.", "").replace("gg.", "").replace("go.", "").replace("join.", "").replace("creative.", "")
                                .replace(".top", "").replace(".ru", "").replace(".cc", "").replace(".space", "").replace(".eu", "").replace(".com", "").replace(".net", "").replace(".xyz", "").replace(".gg", "").replace(".me", "").replace(".su", "").replace(".fun", "").replace(".org", "").replace(".host", "")
                                .replace("localhost", "LocalServer").replace(":25565", "" )

                        ;
                    } else if (mc.currentScreen instanceof OptionsScreen) {
                        state = "On settings";
                    } else if (mc.currentScreen instanceof WorldSelectionScreen) {
                        state = "Choosing world";
                    } else if (mc.currentScreen instanceof AltScreen) {
                        state = "Choosing alt";
                    } else if (mc.currentScreen instanceof GreetingScreen) {
                        state = "Just loaded";
                    } else {
                        state = "Loading...";
                    }

                    discordRichPresence.largeImageKey = "ng";
                    discordRichPresence.details = state;
                    discordRichPresence.state = "Happy New Year!";
                    discordRPC.Discord_UpdatePresence(discordRichPresence);

                    Thread.sleep(2000);
                } catch (InterruptedException ignored) {

                }
            }
        }).start();
    }
9. Далее же ,у вас возникает вопрос,откуда брать значения для строк ниже?
-
1735305810199.png
-
largeimagekey - это непосредственно сама картинка которая будет видна в дискорде
как же ее установить?
  • Заходим на все тот же
    Пожалуйста, авторизуйтесь для просмотра ссылки.
  • Заходим в приложение ,которое создали ранее
  • Заходим в вкладку RPC
-
1735305915334.png
-
- Жмем кнопочку add image
-
1735305961426.png
-
  • После того как добавили, изменяем название,у меня это ng
  • И в поле largeImageKey вводим название своего ассета изображения
10.Логика выключения РПС
Нужно создать метод stopRPC()
и прописать там 2 строки ,чтоб выключить РПС
-
1735306074660.png
-

11. Финальный шаг - инициализация в мейн классе
- На месте подгрузки FriendStorage, StaffStorage
пишем ClientUtil.startRPC();

-
1735306141601.png
-
:frog-wow:Вот и все! наше улучшенное рпс готово!:frog-wow:

Код для тех,кому в кайф пастить,а не разбираться - ниже:

1:
Expand Collapse Copy
@UtilityClass
public class ClientUtil implements IMinecraft {

    public static String getUsername() {
        return System.getProperty("user.name");
    }

 

    private static Clip currentClip = null;
    private static boolean pvpMode;
    private static UUID uuid;

    public static String state = "";
    public static String alt = "";
    public static DiscordRichPresence discordRichPresence = new DiscordRichPresence();
    public static DiscordRPC discordRPC = DiscordRPC.INSTANCE;
    public static HitAura aura;

    public static void startRPC() {
        DiscordEventHandlers eventHandlers = new DiscordEventHandlers();
        discordRPC.Discord_Initialize("1308751341245562932", eventHandlers, true, null);
        discordRichPresence.startTimestamp = System.currentTimeMillis() / 1000L;
        discordRichPresence.largeImageText = "Version: " + Main.version + " | Build: " + Main.build;
        discordRPC.Discord_UpdatePresence(discordRichPresence);


        new Thread(() -> {
            while (true) {
                try {
                    if (mc.currentScreen instanceof MainMenuScreen || mc.currentScreen instanceof MainScreen) {
                        state = "In main menu";
                    } else if (mc.currentScreen instanceof MultiplayerScreen) {
                        state = "Choosing Server";
                    } else if (mc.isSingleplayer()) {
                        state = "In single player";
                    } else if (mc.getCurrentServerData() != null) {
                        state = "Playing on " + mc.getCurrentServerData().serverIP.replace("mc.", "").replace("play.", "").replace("gg.", "").replace("go.", "").replace("join.", "").replace("creative.", "")
                                .replace(".top", "").replace(".ru", "").replace(".cc", "").replace(".space", "").replace(".eu", "").replace(".com", "").replace(".net", "").replace(".xyz", "").replace(".gg", "").replace(".me", "").replace(".su", "").replace(".fun", "").replace(".org", "").replace(".host", "")
                                .replace("localhost", "LocalServer").replace(":25565", "" )

                        ;
                    } else if (mc.currentScreen instanceof OptionsScreen) {
                        state = "On settings";
                    } else if (mc.currentScreen instanceof WorldSelectionScreen) {
                        state = "Choosing world";
                    } else if (mc.currentScreen instanceof AltScreen) {
                        state = "Choosing alt";
                    } else if (mc.currentScreen instanceof GreetingScreen) {
                        state = "Just loaded";
                    } else {
                        state = "Loading...";
                    }

                    discordRichPresence.largeImageKey = "ng";
                    discordRichPresence.details = state;
                    discordRichPresence.state = "Happy New Year!";
                    discordRPC.Discord_UpdatePresence(discordRichPresence);

                    Thread.sleep(2000);
                } catch (InterruptedException ignored) {

                }
            }
        }).start();
    }

    public static void stopRPC() {
        discordRPC.Discord_Shutdown();
        discordRPC.Discord_ClearPresence();
    }

    public void updateBossInfo(SUpdateBossInfoPacket packet) {
        if (packet.getOperation() == SUpdateBossInfoPacket.Operation.ADD) {
            if (StringUtils.stripControlCodes(packet.getName().getString()).toLowerCase().contains("pvp")) {
                pvpMode = true;
                uuid = packet.getUniqueId();
            }
        } else if (packet.getOperation() == SUpdateBossInfoPacket.Operation.REMOVE) {
            if (packet.getUniqueId().equals(uuid))
                pvpMode = false;
        }
    }
    public boolean isConnectedToServer(String ip) {
        return mc.getCurrentServerData() != null && mc.getCurrentServerData().serverIP != null && mc.getCurrentServerData().serverIP.contains(ip);
    }
    public boolean isPvP() {
        return pvpMode;
    }

    public void playSound(String sound, float value, boolean nonstop) {
        if (currentClip != null && currentClip.isRunning()) {
            currentClip.stop();
        }
        try {
            currentClip = AudioSystem.getClip();
            InputStream is = mc.getResourceManager().getResource(new ResourceLocation("aurum/sounds/" + sound + ".wav")).getInputStream();
            BufferedInputStream bis = new BufferedInputStream(is);
            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(bis);
            if (audioInputStream == null) {
                System.out.println("Sound not found!");
                return;
            }

            currentClip.open(audioInputStream);
            currentClip.start();
            FloatControl floatControl = (FloatControl) currentClip.getControl(FloatControl.Type.MASTER_GAIN);
            float min = floatControl.getMinimum();
            float max = floatControl.getMaximum();
            float volumeInDecibels = (float) (min * (1 - (value / 100.0)) + max * (value / 100.0));
            floatControl.setValue(volumeInDecibels);
            if (nonstop) {
                currentClip.addLineListener(event -> {
                    if (event.getType() == LineEvent.Type.STOP) {
                        currentClip.setFramePosition(0);
                        currentClip.start();
                    }
                });
            }
        } catch (Exception exception) {
            // Обработка исключения
            exception.printStackTrace();
        }
    }

    public void stopSound() {
        if (currentClip != null) {
            currentClip.stop();
            currentClip.close();
            currentClip = null;
        }
    }

    public int calc(int value) {
        MainWindow rs = mc.getMainWindow();
        return (int) (value * rs.getGuiScaleFactor() / 2);
    }

    public Vec2i getMouse(int mouseX, int mouseY) {
        return new Vec2i((int) (mouseX * Minecraft.getInstance().getMainWindow().getGuiScaleFactor() / 2), (int) (mouseY * Minecraft.getInstance().getMainWindow().getGuiScaleFactor() / 2));
    }
}
Всем спасибо за внимание,пишите , на что еще сделать гайды!
 

Вложения

  • 1735305629035.png
    1735305629035.png
    59.8 KB · Просмотры: 143
Последнее редактирование:
нормально мужик токен ебанул
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
нормально мужик токен ебанул
да,мне всеравно на этот токен,я не пользуюсь этим приложением впринципе,поэтому можно и слить) пускай пользуются,интересно что они смогут через него сделать)
 
Лучший, ахуенно всё сделано, теперь сижу в дс показывается нурик альфа)
 
созд поста сигма, работает заебись. работает
ну пока я там не наверну кринжа работает)
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
я бы сделал легче по другим гайдам ну нормис всеравно кста спс что с notnull памог
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Блен вот читаю хочу спастить и тут такие закавырестые слова которые первый раз вижу ._.
а так имба тема :seemsgood:
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А гифкой возможно через апликацию дискорда сделать?
 
нужно в поле largeimagekey ссылку на гифку
Да это я знаю, я имею в виду на сайте дискорд. Но как разобрался, нет. Поэтому я просто сделал ссылкой на картинку
 
Назад
Сверху Снизу