Список модов залогинившегося игрока

Статус
В этой теме нельзя размещать новые ответы.
Версия Minecraft
1.7.10
78
3
10
Здрасть, товарищи.
Подскажите, где отловить список модов, который клиент посылает серверу при логине? В наличии Bukkit, ProtocolLib и собственный плагин.
 
929
30
66
Сверяет он их скорей всего при подключении к серверу.

Если тебе просто нужно получить моды со стороны клиента
Java:
int sizeMods = 0;//получаем кол-во модов
            File mods = new File("mods/");
            File[] listMods = mods.listFiles();   
            for(File file : listMods) {
                ++sizeMods;
                //String modName = file.getName();//если нужно, то получаем название
                }
            }
 
78
3
10
Нет, нужен именно на сервере список модов, которые присылает клиент - для определения простых чит-модов, когда не комплексный подход через чит-клиент, а просто накидали модов.
Я в принципе разобрался уже сам, отловом CUSTOM_PAYLOAD во время хендшейка, щас портирую форджевский дебильный способ сериализовать строки... Попозже скину код.
 
78
3
10
1 - Лаунчеры на стороне клиента, а значит им верить нет особого смысла. Их постоянно обходят. Если и не сам лаунчер - так JVM кастомную.
2 - Не все сервера используют свой набор модов, я, к примеру, использую существующий в Technic Launcher модпак (западный, так сказать, подход).
 

tox1cozZ

aka Agravaine
8,456
598
2,892
1 - Лаунчеры на стороне клиента, а значит им верить нет особого смысла. Их постоянно обходят. Если и не сам лаунчер - так JVM кастомную.
Ну я инжектну чит в существующий мод, индастриал какой-то например. Толку от твоей проверки на сервере, левых модов-то не будет.
2 - Не все сервера используют свой набор модов, я, к примеру, использую существующий в Technic Launcher модпак (западный, так сказать, подход).
Такое себе решение
 
78
3
10
1 - Да, инжект эта проверка не определит. Как и подмену JVM. И еще кучу вариантов. Я не утверждаю, что это единственная проверка. Просто один из каскадов.
2 - На вкус и цвет, что называется. Я предпочитаю использовать модпак, который куча чуваков из разных стран развивают, адаптируют друг к другу (основано на греге, все моды грегофицированы), правят баги. Имхо, одному разработчику большой модпак поддерживать сложнее.
 
78
3
10
Хватит флейма, раз не можете ответить на необычный вопрос.

Короче сам способ получения модов из клиентского хендшейка. Как и зачем использовать - дело каждого, не вижу смысла усираться что-то объяснять и доказывать.
Всё как обычно. Котлин, кому надо по наитию портанут в джаву.

Kotlin:
        private val login250Client: PacketAdapter = object : PacketAdapter(plugin, ConnectionSide.CLIENT_SIDE, GamePhase.LOGIN, 250) {
            override fun onPacketReceiving(event: PacketEvent) {
                val channel = event.packet.strings.readSafely(0)
                when (channel) {
                    // ...
                    "FML|HS" -> {
                        // https://wiki.vg/Minecraft_Forge_Handshake <-- Forge HandShake protocol
                        val buffer = Unpooled.buffer().writeBytes(event.packet.byteArrays.readSafely(0)).readerIndex(0)
                        val discriminator = buffer.readByte()
                        when (discriminator.toInt()) {
                            // 0x02 = ModList
                            2 -> {
                                // cpw.mods.fml.common.network.ByteBufUtils - этот класс из FML. геморная попытка сэкономить пару байт. при необходимости притащить в плагин.
                                val modCount = ByteBufUtils.readVarInt(buffer, 2)
                                for (i in 0 until modCount) {
                                    val modName = ByteBufUtils.readUTF8String(buffer)
                                    val modVersion = ByteBufUtils.readUTF8String(buffer)
                                    // Здесь уже можно составлять карту модов и сравнивать с эталонной/разрешенной.
                                }
                            }
                        }
                    }
                    // ...
                }
            }
        }
 
78
3
10
Не хотелось писать еще и шлюзовой мод к плагину. У меня термос, проще уж сразу буккитовский плагин и писать. По крайней мере я не нашел вменяемого способа зарегать ивент без регистрации мода.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху