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

Помогите Не работают ивенты .Помогите

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

TorwaldOswarld

Активный участник
Пользователь
Баллы
78
Имя в Minecraft
PuxTa4
Добрый день , дорогие форумчане . Я столкнулся с такой проблемой , я написал плагин (мне не много помоги с кодом) . Дело в том , что не работают ивенты . То есть , при съедании золотого яблока игрок должен получать сообщение , и далее он вноситься в список на время (3 минуты) , теперь игрок сможет съесть яблоко , только через 3 минуты . Но ничего не пишет и игрок может есть яблоко . Помогите пожалуйста найти ошибку . Вот весь код http://pastebin.com/dxJYy6S7 . Лог инфо работает , в консоль пишет цифру 1 . Заранее спасибо !
 
Зачем ты проверяешь, что у него в руке?
Java:
if(event.getItem().getType() != Material.GOLDEN_APPLE){return;}
Может, так?
 
неа , не помогло
И не поможет, это я так.
А по вопросу, сделай лист не имен игроков, а игроков.
Java:
 List<Player> players
Это раз.
А главное (это и есть твоя ошибка) - ты не добавил строку, в которой ты добавляешь игроков в этот список.
Что-то вроде:
Java:
players.add(player);
 
И не поможет, это я так.
А по вопросу, сделай лист не имен игроков, а игроков.
Java:
 List<Player> players
Это раз.
А главное (это и есть твоя ошибка) - ты не добавил строку, в которой ты добавляешь игроков в этот список.
Что-то вроде:
Java:
players.add(player);
Спасибо , сейчас по пробую
 
И фраза у тебя некорректная. Она всегда говорит, что через три минуты можно будет. А на самом деле это не так. И фраза будет логичнее, если писать так: "Золотое яблоко можно использовать не чаще раза в три минуты." Впрочем, это тоже не идеальное решение.
 
И не поможет, это я так.
А по вопросу, сделай лист не имен игроков, а игроков.
Java:
 List<Player> players
Это раз.
А главное (это и есть твоя ошибка) - ты не добавил строку, в которой ты добавляешь игроков в этот список.
Что-то вроде:
Java:
players.add(player);
а это не то ? if (players.contains(player.getName())) , и я не понял куда этот ( players.add(player); ) код нужно вставить ?
 
а это не то ? if (players.contains(player.getName())) , и я не понял куда этот ( players.add(player); ) код нужно вставить ?
Ты свой код видел? Ты проверяешь есть ли игрок в списке, но список пуст т.к. ты ни где не добавляешь в него игрока! Вот и решение. Думаю сдесь больше нечего обсуждать...
 
Последнее редактирование:
Подскажи как надо сделать , чтобы всё работало . Пожалуйста
Ты свой код видел? Ты проверяешь если игрок в списке, но список пуст т.к. ты ни где не добавляешь в него игрока! Вот и решение. Думаю сдесь больше нечего обсуждать...
я только начинаю в этом разбираться , и поэтому по просил помощи у более опытных людей
 
Подскажи как надо сделать , чтобы всё работало . Пожалуйста

я только начинаю в этом разбираться , и поэтому по просил помощи у более опытных людей
Никогда нигде не храните объект игрока.
 
Регистрация события правильное, сообщение что плагин запущен вылазит? Если нет, то возможно проблема в plugin.yml
 
В любом случае, так должно работать:
Java:
package NoGoldenApple;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener {

Logger log = getLogger();
public void onEnable()
{
getLogger().info("plugin has been Enabled");
getServer().getPluginManager().registerEvents(this, this);
}

List<Player> players = new ArrayList<Player>();

@EventHandler
public void onItemConsume(PlayerItemConsumeEvent event){
   
    final Player player = event.getPlayer();
    if (event.getItem().getType() != Material.GOLDEN_APPLE) return;
    if (players.contains(player)){
    player.sendMessage(ChatColor.GOLD + "Золотое яблоко можно использовать не чаще раза в три минуты.");
    event.setCancelled(true);
    return;
    }
    players.add(player);
    getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable()
    {
        public void run()
        {
        players.remove(player);
        }
    }, 180L);
}
}
 
В любом случае, так должно работать:
Java:
package NoGoldenApple;

import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;

import org.bukkit.ChatColor;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerItemConsumeEvent;
import org.bukkit.plugin.java.JavaPlugin;

public class Main extends JavaPlugin implements Listener {

Logger log = getLogger();
public void onEnable()
{
getLogger().info("plugin has been Enabled");
getServer().getPluginManager().registerEvents(this, this);
}

List<Player> players = new ArrayList<Player>();

@EventHandler
public void onItemConsume(PlayerItemConsumeEvent event){
  
    final Player player = event.getPlayer();
    if (event.getItem().getType() != Material.GOLDEN_APPLE) return;
    if (players.contains(player)){
    player.sendMessage(ChatColor.GOLD + "Золотое яблоко можно использовать не чаще раза в три минуты.");
    event.setCancelled(true);
    return;
    }
    players.add(player);
    getServer().getScheduler().scheduleSyncDelayedTask(this, new Runnable()
    {
        public void run()
        {
        players.remove(player);
        }
    }, 180L);
}
}
Пожалуйста, не надо так делать.
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх