• Ищем качественного (не новичок) разработчиков Xenforo для этого форума! В идеале, чтобы ты был фулл стек программистом. Если у тебя есть что показать, то свяжись с нами по контактным данным: https://t.me/DREDD

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

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

-
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 · Просмотры: 158
Последнее редактирование:
нормально мужик токен ебанул
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
нормально мужик токен ебанул
да,мне всеравно на этот токен,я не пользуюсь этим приложением впринципе,поэтому можно и слить) пускай пользуются,интересно что они смогут через него сделать)
 
Лучший, ахуенно всё сделано, теперь сижу в дс показывается нурик альфа)
 
созд поста сигма, работает заебись. работает
ну пока я там не наверну кринжа работает)
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
я бы сделал легче по другим гайдам ну нормис всеравно кста спс что с notnull памог
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Блен вот читаю хочу спастить и тут такие закавырестые слова которые первый раз вижу ._.
а так имба тема :seemsgood:
 
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
А гифкой возможно через апликацию дискорда сделать?
 
нужно в поле largeimagekey ссылку на гифку
Да это я знаю, я имею в виду на сайте дискорд. Но как разобрался, нет. Поэтому я просто сделал ссылкой на картинку
 
Назад
Сверху Снизу