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

居然还有过期方法

790859937
轻光233 发表于 2018-6-7 07:05
居然还有过期方法

我不知道新方法啊。。。很惨

@@Leo
790859937 发表于 2018-6-5 08:16
NPE风险是什么?可以加QQ交流下吗

NPE就是NullPointerException,即空指针
当你手上没有东西的时候player.getItemInHand()会返回null
然后就会造成让null使用方法getType()然后出错233

一般情况下我都是使用命令然后把这个玩家加到某个List里,然后用监听检测有List里的玩家使用钻石剑时就会放闪电233

轻光233
轻光233 发表于 2018-6-7 07:05
居然还有过期方法

可以看注解啊,看不懂就翻译一下,大概就知道什么意思了

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

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

getConfig();方法是在org.bukkit.plugin.java.JavaPlugin类中的方法 你的主类继承了该类 所以可以使用 但是你的监听器类没有继承 所以不可用

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

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

你可以在主类注册一个字段来供插件使用
public static Main plugin;
在其他类调用就是Main.plugin.xxxxxxx;
比如Main.plugin.getConfig():

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