// Наш сервер
MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance();
// Кол-во игроков на нём
int count = server.getPlayerList().getPlayers().size();
// Сугубо для понимания что такое rand
Random rand = new Random();
// Берём случайного
EntityPlayerMP player = server.getPlayerList().getPlayers().get(rand.nextInt(count));
// Получаем его ник
String name = player.getDisplayNameString();
Я сделал все почти тоже самое, но получил bound must be positive, я уже стер код, скинуть не смогу. Там в еррей лист короче добавлялись игроки. Точнее, должны были добавляться, но не добавлялись, т.к сайз был равен нулю, отсюда и ошибка. В твоем (а теперь и моем тоже, НАШЕМ!) коде коунт == нулю видимо. А почему я не знаю1. Получить список игроков
2. Взять из него случайное значение
3. Посмотреть на мой аватар
4. Если всё ещё трудности, то код ниже
Java:// Наш сервер MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance(); // Кол-во игроков на нём int count = server.getPlayerList().getPlayers().size(); // Сугубо для понимания что такое rand Random rand = new Random(); // Берём случайного EntityPlayerMP player = server.getPlayerList().getPlayers().get(rand.nextInt(count)); // Получаем его ник String name = player.getDisplayNameString();
String name = FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getOnlinePlayerNames()[new Random().nextInt(FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getOnlinePlayerNames().length)];
@Mod.EventBusSubscriber
public class EventHandler {
@SubscribeEvent
public static void lol(BlockEvent.BreakEvent event) {
String name = FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getOnlinePlayerNames()[new Random().nextInt(FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getOnlinePlayerNames().length)];
FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().sendMessage(new TextComponentString(name));
}
}
player.getDisplayNameString();
я использовал сразу масив имён getPlayerList().getOnlinePlayerNames()
// Автоматически регистрируеем слушателей событий
@Mod.EventBusSubscriber
public class EventHandler {
// Подписываемся на событие ломания блока
@SubscribeEvent
public static void lol(BlockEvent.BreakEvent event) {
// Получаем сервер
MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance();
// Получаем массив имён игроков, которые сейчас онлайн на сервере
String[] names = server.getPlayerList().getOnlinePlayerNames();
// Создаём генератор случайных чисел
Random random = new Random();
// Получаем длину массива имён
int size = names.length;
// Получаем случайное имя из массива
String name = names[random.nextInt(size)];
// Отправляем имя всем игрокам
server.getPlayerList().sendMessage(new TextComponentString(name));
}
}
Так даже корректней, даЕсли расписать мой код, получится такой же, какой у @VeniVidiVici за исключением того, что вместо player.getDisplayNameString(); я использовал сразу масив имён getPlayerList().getOnlinePlayerNames()
Рекомендую сюда заглянуть: MCreator - The Best Minecraft Mod Maker EverС днем нуллпоинтера на 4 строчке!!!
Не совсем понимаю, как может не работать.
Написал вот такой код (всё в одну строчку)
Запихнул в ивент ломания блока (чисто для проверки) и добавил сообщение в чатJava:String name = FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getOnlinePlayerNames()[new Random().nextInt(FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getOnlinePlayerNames().length)];
И всё работает Если расписать мой код, получится такой же, какой у @VeniVidiVici за исключением того, что вместоJava:@Mod.EventBusSubscriber public class EventHandler { @SubscribeEvent public static void lol(BlockEvent.BreakEvent event) { String name = FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getOnlinePlayerNames()[new Random().nextInt(FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getOnlinePlayerNames().length)]; FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().sendMessage(new TextComponentString(name)); } }
player.getDisplayNameString();
я использовал сразу масив имёнgetPlayerList().getOnlinePlayerNames()
Edit:
Расписал немного код для понятности:Java:// Автоматически регистрируеем слушателей событий @Mod.EventBusSubscriber public class EventHandler { // Подписываемся на событие ломания блока @SubscribeEvent public static void lol(BlockEvent.BreakEvent event) { // Получаем сервер MinecraftServer server = FMLCommonHandler.instance().getMinecraftServerInstance(); // Получаем массив имён игроков, которые сейчас онлайн на сервере String[] names = server.getPlayerList().getOnlinePlayerNames(); // Создаём генератор случайных чисел Random random = new Random(); // Получаем длину массива имён int size = names.length; // Получаем случайное имя из массива String name = names[random.nextInt(size)]; // Отправляем имя всем игрокам server.getPlayerList().sendMessage(new TextComponentString(name)); } }
String name = FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getOnlinePlayerNames()[new Random().nextInt(FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getOnlinePlayerNames().length)];
- нуллпоинтер как в ивенте, так и без него. Я не знаю почему.ну так напиши код адекватно, с вынесением getMinecraftServerInstance в переменную и т.п.Я не знаю почему.