Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Стартап Помощь новичкам и тем, кто мало писал плагины. (+ LifeHack'и)

Спасибо за советы, сейчас все исправлю + добавлю евенты Hanging и Intentory
Зачем переизобретать велосипед? Все есть на jd.bukkit.org. Если все очень плохо с английским - есть гугл транслейт.
Если все очень плохо с английским - есть гугл транслейт.
mvjo.png
 
2. Если у вас есть список имён игроков и вам надо из них получить Player, не используйте getPlayerExact, проитерируйте через список онлайн игроков сами и вытащите нужных.

Ты говоришь именно о списке игроков — чтобы выбрать их за один цикл или тебе не нравится, то что игнорируется регистр?

Код:
public Player getPlayerExact(String name) {            
  Validate.notNull(name, "Name cannot be null");      
                                                      
  String lname = name.toLowerCase();                  
                                                      
  for (Player player : getOnlinePlayers()) {          
    if (player.getName().equalsIgnoreCase(lname)) {    
      return player;                                  
    }                                                  
  }                                                    
  return null;                                        
}
 
Зачем переизобретать велосипед? Все есть на jd.bukkit.org. Если все очень плохо с английским - есть гугл транслейт.
Как по мне там очень неудобно, по два часа ищу нужный ивент
 
Кстати, никто незнает как называется собитие, когда игрок тыкает по рамке и из неё вылетает вещь(в 1,7 ввели)?
 
Ты говоришь именно о списке игроков — чтобы выбрать их за один цикл или тебе не нравится, то что игнорируется регистр?

Код:
public Player getPlayerExact(String name) {        
  Validate.notNull(name, "Name cannot be null");  
                                                  
  String lname = name.toLowerCase();              
                                                  
  for (Player player : getOnlinePlayers()) {      
    if (player.getName().equalsIgnoreCase(lname)) {
      return player;                              
    }                                              
  }                                                
  return null;                                    
}
Чтобы выбрать за 1 цикл, и чтобы контролить регистрозаисимость самому.

Причём больше меня бесит херня с регистронезависиомтью. Твою мать какого хрена они творят вообще? Я уже писал тему о куче проблем с getOfflinePlayer(), но такое у них везде.
Оно конечно хорошо работает для онлайн мода, но в случае оффлайн сервера это всё превращается в адовый пипец.
 
Причём больше меня бесит херня с регистронезависиомтью. Твою мать какого хрена они творят вообще? Я уже писал тему о куче проблем с getOfflinePlayer(), но такое у них везде.
Оно конечно хорошо работает для онлайн мода, но в случае оффлайн сервера это всё превращается в адовый пипец.

Ну собственно ты сам ответил ;) Если сделать соответствующий баг-репорт, тебе ответят, что система авторизации Mojang регистронезависима (т.е там нельзя создать игрока fromgate и Fromgate), а проблемы оффлайн-серверов их не волнуют.
Единственный, выход - это строить систему регистрации пользователей так, чтобы она тоже была регистронезависима.
Чтобы после регистрации пользователя Test нельзя было зарегистрировать test, TEST и т.д.
 
Ну собственно ты сам ответил ;) Если сделать соответствующий баг-репорт, тебе ответят, что система авторизации Mojang регистронезависима (т.е там нельзя создать игрока fromgate и Fromgate), а проблемы оффлайн-серверов их не волнуют.
Единственный, выход - это строить систему регистрации пользователей так, чтобы она тоже была регистронезависима.
Чтобы после регистрации пользователя Test нельзя было зарегистрировать test, TEST и т.д.
И что я должен сказать юзерам? Извините но вы должны следить за регами потому что баккитовцы идиоты? А главное регистронезависимость в документации нигде, нигде не прописана, из-за чего я потратил сука 4 месяца на поиск бага, 4 долбанных месяца.
Благо я мастер костыляний, и конкретно эту проблему я уже решил, благо new CraftOfflinePlayer(CraftServer, имя), регистрозавсим и дёргает именно то что мне нужно, хоть и пришлось поколдовать с рефлексией чтобы быть версионно независимым.
 
Последнее редактирование:
Помогите, как сделать чтобы на табличке писать: [Название плагина] - команду которая должна выполняться - дом? Чтобы при нажатии ЛКМ или ПКМ был эффект выполнения
 
Кстати, никто незнает как называется собитие, когда игрок тыкает по рамке и из неё вылетает вещь(в 1,7 ввели)?
Нет, на сколько я знаю, ещё не ввели. А вообще bukkit-овцы очень медленные существа. Они ещё с 1.4 не могут прикрутить API к спавнерам.
Помогите, как сделать чтобы на табличке писать: [Название плагина] - команду которая должна выполняться - дом? Чтобы при нажатии ЛКМ или ПКМ был эффект выполнения
Ловим событие PlayerInteractEvent, там берём блок, смотрим, что это табличка(e.getClickedBlock().getMaterial()==Material.табличка...), кастуем её к табличке(Sign sing = e.getClickedBlock().getBlockState();), анализируем текст на первой строчке и на остальных, если первая верная.
 
Нет, на сколько я знаю, ещё не ввели. А вообще bukkit-овцы очень медленные существа. Они ещё с 1.4 не могут прикрутить API к спавнерам.

Ловим событие PlayerInteractEvent, там берём блок, смотрим, что это табличка(e.getClickedBlock().getMaterial()==Material.табличка...), кастуем её к табличке(Sign sing = e.getClickedBlock().getBlockState();), анализируем текст на первой строчке и на остальных, если первая верная.
Спасибо. А e.getClickedBlock().getBlockState() это мы получаем текст с таблички? И какой именно строчки?
 
Спасибо. А e.getClickedBlock().getBlockState() это мы получаем текст с таблички? И какой именно строчки?
e.getClickedBlock().getBlockState() это состояния блока, которое мы приводим к табличке
Java:
Sign s = (Sign)e.getClickedBlock().getBlockState();
После чего мы можем взять текст таблички при помощи
Java:
s.get(num);
, где num -- номер строки начиная с 0.
 
помогите пожалуйста
я пишу в чате /sims и мне пишется в чате /sims и ни чего не делается.

вот код

package ru.russia.sims;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.*********ventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

public class main extends JavaPlugin implements Listener{

private static main instance;

public static main instance() {
return instance;
}

public void onEnable() {
Bukkit.getServer().getPluginManager().registerEvents(this, this);
}

public void onDisable() {

}

public boolean checkSender(CommandSender sender)
{
if (sender instanceof Player)
{
return false;
}
return true;
}

public boolean OnCommand(CommandSender sender, Command cmd, String label, String[] args)
{
if (cmd.getName().equalsIgnoreCase("sims"))
{
if (checkSender(sender))
{
sender.sendMessage("Only players can use this command!");
return true;
}
Player p = (Player) sender;

p.getInventory().addItem(new ItemStack(Material.EMERALD));
в
p.sendMessage(ChatColor.GREEN + "Вам выдан предмет SIMS");

return true;
}

return false;
}

@EventHandler
public void onPlayerJoin (PlayerJoinEvent e){
Player p = e.getPlayer();

p.sendMessage(ChatColor.GREEN + "THE Sims loaded");


}
}

а вот plugin.yml

name: The SIMS
main: ru.russia.sims.main
discription: The SIMS in minecraft
version: 1.0
authors:
- Deless503
commands:
sims:
usage: /sims

помогите кто может пожалуйста
 
помогите пожалуйста
я пишу в чате /sims и мне пишется в чате /sims и ни чего не делается.

вот код

package ru.russia.sims;

import org.bukkit.Bukkit;
import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerJoinEvent;
import org.*********ventory.ItemStack;
import org.bukkit.plugin.java.JavaPlugin;

public class main extends JavaPlugin implements Listener{

private static main instance;

public static main instance() {
return instance;
}

public void onEnable() {
Bukkit.getServer().getPluginManager().registerEvents(this, this);
}

public void onDisable() {

}

public boolean checkSender(CommandSender sender)
{
if (sender instanceof Player)
{
return false;
}
return true;
}

public boolean OnCommand(CommandSender sender, Command cmd, String label, String[] args)
{
if (cmd.getName().equalsIgnoreCase("sims"))
{
if (checkSender(sender))
{
sender.sendMessage("Only players can use this command!");
return true;
}
Player p = (Player) sender;

p.getInventory().addItem(new ItemStack(Material.EMERALD));
в
p.sendMessage(ChatColor.GREEN + "Вам выдан предмет SIMS");

return true;
}

return false;
}

@EventHandler
public void onPlayerJoin (PlayerJoinEvent e){
Player p = e.getPlayer();

p.sendMessage(ChatColor.GREEN + "THE Sims loaded");


}
}

а вот plugin.yml

name: The SIMS
main: ru.russia.sims.main
discription: The SIMS in minecraft
version: 1.0
authors:
- Deless503
commands:
sims:
usage: /sims

помогите кто может пожалуйста
Не OnCommand, a onCommand
 

Поделиться этой страницей

Назад
Верх