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

Помогите Вопросы

Статус
Закрыто для дальнейших ответов.

AxmeD

Старожил
Пользователь
Баллы
103
Как мне получить список онлайн игроков, находящихся в опред. группе? Пробовал много чего, но не получилось ничего.
Разобрался

Как сделать cooldown между ивентами? То есть, вот мой код
Разобрался
 
Появился ещё один вопрос. Как удалить предмет из инвентаря.
Код:
PlayerInventory inventory = ((Player)sender).getInventory();
ItemStack trainerkit = new ItemStack(Material.BLAZE_ROD, 1);
inventory.remove(trainerkit);
Этот код удаляет все жезлы, которые лежат по-одиночке в инвентаре, нихарашо.
А также
Код:
  if (!inventory.contains(trainerkit)) {
  sender.sendMessage(ChatColor.RED + "Вам необходим 1 жезл ифрита");
}else{
Срабатывает даже если у меня больше 1 жезла в инвентаре.
 
Здравствуйте.

Мне нужно, чтобы Player мог красть только раз в 30 секунд.

Зафиксируйте время окончания cooldown и в дальнейшем сверяйте с ним.

По поводу остального, в Вашем коде генерируется ItemStack, который никогда не будет равен используемым. Пробегитесь по списку и найдите необходимые предметы по ID и Meta.
 
можно записать время с последнего взаимодействия..
Я новичок, я не знаю как это сделать...
С первыми двумя разобрался, Спасибо Den_Abr и gamelax
Делал плагин дальше и наткнулся на такое:
Мне нужно было, чтобы при входе в игру, игроку в config.yml давался boolean cuffed: false
Вот, что я сделал:
Код:
public class AxmeDRP extends JavaPlugin implements Listener {
    public static final Logger _log = Logger.getLogger("Minecraft");
    private EconomyResponse depositPlayer;
    @Override
    public void onEnable() {
        this.getServer().getPluginManager().registerEvents(new AxmeDRP(), this);
        _log.info("[AxmeD RP] enabled");
        File fileConf = new File(getDataFolder(), "config.yml");
        if(!fileConf.exists()){
            InputStream resourceAsStream = AxmeDRP.class.getResourceAsStream("/config.yml");
            getDataFolder().mkdirs();
            try {
                FileOutputStream fos = new FileOutputStream(fileConf);
                byte[] buff = new byte[65536];
                int n;
                while((n = resourceAsStream.read(buff)) > 0){
                    fos.write(buff, 0, n);
                    fos.flush();
                }
                fos.close();
                buff = null;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        FileConfiguration conf = YamlConfiguration.loadConfiguration(fileConf);
    }
    @EventHandler
    public void onJoin(PlayerJoinEvent e){
        Player player = e.getPlayer();
        if(!this.getConfig().contains(player.getName() + ".cuffed")){
        this.getConfig().set(player.getName() + ".cuffed", false);
        this.saveConfig();
    }else{
        this.getConfig().set(player.getName() + ".cuffed", false);
        this.saveConfig();
    }
    }
и так далее...
Вроде всё нормально, в эклипсе ошибок нет, но консоль выдаёт следующее:
19:13:50 [INFO] Axmedus[/127.0.0.1:61831] logged in with entity id 14 at ([world
] 66.28608488217907, 64.0, 350.2838541977503)
19:13:50 [SEVERE] Could not pass event PlayerJoinEvent to AxmeDRP v1.0
org.bukkit.event.EventException
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:363)
at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.jav
a:62)
at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.j
ava:479)
at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.j
ava:464)
at net.minecraft.server.management.ServerConfigurationManager.func_72377
_c(ServerConfigurationManager.java:308)
at net.minecraft.server.management.ServerConfigurationManager.func_72355
_a(ServerConfigurationManager.java:169)
at net.minecraft.network.NetLoginHandler.completeConnection(NetLoginHand
ler.java:237)
at cpw.mods.fml.common.network.FMLNetworkHandler.handleClientConnection(
FMLNetworkHandler.java:169)
at cpw.mods.fml.common.network.FMLNetworkHandler.onConnectionReceivedFro
mClient(FMLNetworkHandler.java:123)
at net.minecraft.network.NetLoginHandler.func_72529_d(NetLoginHandler.ja
va:213)
at net.minecraft.network.NetLoginHandler.func_72532_c(NetLoginHandler.ja
va:101)
at org.spigotmc.netty.NettyServerConnection.func_71747_b(NettyServerConn
ection.java:73)
at net.minecraft.server.MinecraftServer.func_71190_q(MinecraftServer.jav
a:926)
at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(Dedicated
Server.java:324)
at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.jav
a:794)
at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:678)
at net.minecraft.server.ThreadMinecraftServer.run(SourceFile:573)
Caused by: java.lang.IllegalArgumentException: File cannot be null
at org.apache.commons.lang.Validate.notNull(Validate.java:203)
at org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(Yam
lConfiguration.java:170)
at org.bukkit.plugin.java.JavaPlugin.reloadConfig(JavaPlugin.java:117)
at org.bukkit.plugin.java.JavaPlugin.getConfig(JavaPlugin.java:111)
at ru.axmed.rp.AxmeDRP.onJoin(AxmeDRP.java:89)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.ja
va:361)
... 16 more
 
Зачем фиксировать и проверять "cuffed", если в любой ситуации оно примет значение false?:eek:
Создайте отдельный class для Listener'a, а не создавайте еще один основной класс.
Набросал пример в блокноте:
Код:
public class PlayerListener implements Listener
{
  private AxmeDRP plugin;
 
    public PlayerListener(AxmeDRP plugin)
    {
      this.plugin = plugin;
    }
 
 
    @EventHandler(priority = EventPriority.LOW)
    public void onPlayerJoinEvent(PlayerJoinEvent event)
    {
        Player player = e.getPlayer();
        String Section = new StringBuilder().append(player.getName()).append(".cuffed").toString();
     
          if (!plugin.getConfig().contains(Section))
          {
            plugin.getConfig().set(Section, false);
            plugin.SaveConfig();
          }
          else
          {
            plugin.getConfig().set(Section, false);
            plugin.SaveConfig();
          }
    }
}
 
Зачем фиксировать и проверять "cuffed", если в любой ситуации оно примет значение false?:eek:
Мне нужен этот boolean, чтобы использовать в дальнейшем, то есть, когда я буду "одевать наручники" на игрока.
 
Фиксируйте обратное значение (true), так будет гораздо разумнее.
 
Фиксируйте обратное значение (true), так будет гораздо разумнее.
Все равно ошибка именно из-за this.getConfig(), что бы я ни написал дальше. Странно то, что если использовать подобное не в ивенте, а в команде, то всё норм :confused:
 
Вы вновь создаете дубликат основного класса для прослушивания эвентов...
 
Ты создал переменную conf. Используй ее для работы с конфигом
Ошибка кроется в другом месте, внимательнее приглядитесь к его коду...
Код:
public class AxmeDRP extends JavaPlugin implements Listener
Код:
this.getServer().getPluginManager().registerEvents(new AxmeDRP(), this);
 
Ошибка кроется в другом месте, внимательнее приглядитесь к его коду...
Код:
public class AxmeDRP extends JavaPlugin implements Listener
Код:
this.getServer().getPluginManager().registerEvents(new AxmeDRP(), this);
А ну да, не увидел
 
Ещё раз спасибо Den_Abr и gamelax.
Проблему решил. Тему пока закрывать не буду, оставлю на потом, чтоб новые не создавать, если появятся вопросы. )
Вот ещё проблема возникла. Вот мой код
Код:
    @EventHandler
    public void onPlayerJoin(PlayerJoinEvent e){
        final Player player = e.getPlayer();
        final String playername = player.getName();
        final File fileConf = new File(getDataFolder(), "config.yml");
        final FileConfiguration conf = YamlConfiguration.loadConfiguration(fileConf);
        if(this.getConfig().getInt("Guards.wanted." + player.getName()) == 1){
            player.sendMessage(ChatColor.RED + "Вы находитесь в розыске!");
            this.saveConfig();
            Bukkit.getServer().getScheduler().scheduleAsyncDelayedTask(this, new Runnable(){
                @Override
                public void run(){
                    this.getConfig().set("Guards.wanted." + playername, 0);
                    player.sendMessage(ChatColor.YELLOW + "Lol");
                    try {
                        conf.save(fileConf);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
 
                private MemorySection getConfig() {
                        conf.get("fileConf");
                        return conf;
                    }   
            }, 50 * 10);
}
Так вот, если игрок выйдет, то this.getConfig().set("Guards.wanted." + playername, 0) все равно произойдет. Пробовал if(player.isOnline()), но не помогло. Как сделать проверку на онлайн?

UPD: На самом деле работает, я просто кое-что не исправил ._.
 
Зачем добавляться ко всем девелоперам в скайп а потом продолжать насиловать форум?)
 
На форуме отвечают эти же люди)
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх