790859937
我想制作一个插件 功能是
输入/test 启动闪电模式
当我手中持有钻石剑时,右键某地则闪电 闪击某处

监听器可以实现,但是 监听器不知道如何设置权限,意味着任何人都能用
但是用命令的话我不知道该如何做到,我现在只能实现将钻石剑拿在手上然后输入test 他只是发出电击一下 甚至不用右键
命令该如何配合监听器实现?
package cn.jediking;

import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;

public class PlayerJoinWorld extends JavaPlugin {
    @Override
    public void onEnable()
    {
        getServer().getPluginManager().registerEvents(new Listeners(),this);
        getLogger().info("插件启用成功");
        //启用插件
    }
   
    public void onDisable()
    {
        HandlerList.unregisterAll();
        getLogger().info("插件卸载成功");
        //关闭插件
    }
      
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
        if(cmd.getName().equalsIgnoreCase("test")){ //如果输入"test"则返回true
                sender.sendMessage("闪电模式启动");
                return true;
        }
        // 如果不是test,则返回false,如果你没有添加这个命令,系统就会显示:“没有这个命令”
        return false;
    }
}

package cn.jediking;

import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;

import net.minecraft.server.v1_7_R4.PlayerAbilities;

public class Listeners implements Listener {
    @EventHandler
    public void listenjoin (PlayerJoinEvent event){
        Bukkit.broadcastMessage("欢迎 "+event.getPlayer().getName()+" 进入游戏");
        
        
    }
   
    @EventHandler
    public void Lighting (PlayerInteractEvent event){
        Player player = event.getPlayer();
        if (player.getItemInHand().getType()==Material.DIAMOND_SWORD){
            player.getWorld().strikeLightning(player.getTargetBlock(null, 300).getLocation());
        }
    }

}

顺便请教一下该如何找一些对我有益处的教程




2021.12 数据,可能有更多内容我想制作一个插件 功能是
输入/test 启动闪电模式
当我手中持有钻石剑时,右键某地则闪电 闪击某处


监听器可以实现,但是 监听器不知道如何设置权限,意味着任何人都能用
但是用命令的话我不知道该如何做到,我现在只能实现将钻石剑拿在手上然后输入test 他只是发出电击一下 甚至不用右键
命令该如何配合监听器实现?
package cn.jediking;


import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.event.HandlerList;
import org.bukkit.event.Listener;
import org.bukkit.plugin.java.JavaPlugin;


public class PlayerJoinWorld extends JavaPlugin {
    @Override
    public void onEnable()
    {
  getServer().getPluginManager().registerEvents(new Listeners(),this);
  getLogger().info("插件启用成功");
  //启用插件
    }
   
    public void onDisable()
    {
  HandlerList.unregisterAll();
  getLogger().info("插件卸载成功");
  //关闭插件
    }
   
    @Override
    public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args){
  if(cmd.getName().equalsIgnoreCase("test")){ //如果输入"test"则返回true
    sender.sendMessage("闪电模式启动");
    return true;
  }
  // 如果不是test,则返回false,如果你没有添加这个命令,系统就会显示:“没有这个命令”
  return false;
    }
}


package cn.jediking;


import org.bukkit.Bukkit;
import org.bukkit.Material;
import org.bukkit.entity.Player;
import org.bukkit.event.EventHandler;
import org.bukkit.event.Listener;
import org.bukkit.event.player.PlayerInteractEvent;
import org.bukkit.event.player.PlayerJoinEvent;


import net.minecraft.server.v1_7_R4.PlayerAbilities;


public class Listeners implements Listener {
    @EventHandler
    public void listenjoin (PlayerJoinEvent event){
  Bukkit.broadcastMessage("欢迎 "+event.getPlayer().getName()+" 进入游戏");
 
 
    }
   
    @EventHandler
    public void Lighting (PlayerInteractEvent event){
  Player player = event.getPlayer();
  if (player.getItemInHand().getType()==Material.DIAMOND_SWORD){
   player.getWorld().strikeLightning(player.getTargetBlock(null, 300).getLocation());
  }
    }


}


顺便请教一下该如何找一些对我有益处的教程



zhanshi123
用hasPermission方法判断是否有指定权限 或 使用Vault判断权限

根据你的代码,用hasPermission方法的示例,vault的自己去查wiki
    @EventHandler
    public void Lighting (PlayerInteractEvent event){
        Player player = event.getPlayer();
        if(!player.hasPermission("xxx.xx")){
            return;
        }
        if (player.getItemInHand().getType()==Material.DIAMOND_SWORD){
            player.getWorld().strikeLightning(player.getTargetBlock(null, 300).getLocation());
        }
    }
另外 你所写的代码 没有判断手中物品是否为空
有NPE风险

服务端所有方法都在javadoc里面 地址
https://hub.spigotmc.org/javadoc ... erview-summary.html
在这个里面可以找到相应方法的用法和说明

790859937
zhanshi123 发表于 2018-6-4 22:48
用hasPermission方法判断是否有指定权限 或 使用Vault判断权限

根据你的代码,用hasPermission方法的示例 ...

NPE风险是什么?可以加QQ交流下吗

790859937
zhanshi123 发表于 2018-6-4 22:48
用hasPermission方法判断是否有指定权限 或 使用Vault判断权限

根据你的代码,用hasPermission方法的示例 ...

还有就是请教一下配置的读写修改

我的文件格式大概是这样 我的主类在PlyerJoinWorld
关于配置文件读写 我在主类文件可以使用getconfig 但是在我监听器这里不行,怎么引用它?

轻光233
790859937 发表于 2018-6-5 09:47
还有就是请教一下配置的读写修改

我的文件格式大概是这样 我的主类在PlyerJoinWorld

居然还有过期方法

第一页 上一页 下一页 最后一页