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

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

Статус
Закрыто для дальнейших ответов.
В любом случае, так должно работать:
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);
}
}
Не храни игрока в списке лучше UUID или ник
 
В любом случае, так должно работать:
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);
}
}
сообщение есть , но яблоко есть можно :(
 
Не храни игрока в списке лучше UUID или ник
Хорошо, не буду хранить.
В любом случае, сейчас нужно заставить плагин работать - и я, в отличие от некоторых критиков тут, пытаюсь это сделать. Когда он заработает - можно будет поговорить об оптимизации кода и поиске лучших решений одной и той же задачи. Не вижу здесь пока ничьих предложений, кроме своих.
Если уж говорить о том, как не нужно делать, я бы сделал этот плагин вообще по-другому.
 
Хорошо, не буду хранить.
В любом случае, сейчас нужно заставить плагин работать - и я, в отличие от некоторых критиков тут, пытаюсь это сделать. Когда он заработает - можно будет поговорить об оптимизации кода и поиске лучших решений одной и той же задачи. Не вижу здесь пока ничьих предложений, кроме своих.
Если уж говорить о том, как не нужно делать, я бы сделал этот плагин вообще по-другому.
сообщение есть , но яблоко есть можно
 
Надо подумать.
Яблоко съедается, эффект игрок получает, верно?
Яблоко съедается и пишет сообщение , но яблоко также можно есть
Яблоко съедается и пишет сообщение , но яблоко также можно есть , как исправить ? Помогите
 
Java:
@EventHandler(priority = EventPriority.MONITOR)
public void onItemConsume(PlayerItemConsumeEvent event){
Смотри , игрок есть яблоко , ему пишет сообщение . Если игрок есть одно яблоко и с разу же второе , то второе яблоко нельзя есть , а если подождать где то 2-3 секунды , то можно
 
А, всё, я понял. Это твоя ошибка. Ты выставил 180L. - это тики, а не секунды. Нужно писать 3600L.
 
Я с шедулерами не дружу, но вроде один умный человек тут писал, что оно должно выглядеть так:
Java:
    getServer().getScheduler().runTaskLater(this, new Runnable() {
          @Override
          public void run() {players.remove(player);}
        }, 3600L);
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх