我想制作一个插件 功能是
输入/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());
}
}
}
顺便请教一下该如何找一些对我有益处的教程
输入/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());
}
}
}
顺便请教一下该如何找一些对我有益处的教程
输入/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());
}
}
}
顺便请教一下该如何找一些对我有益处的教程
用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
在这个里面可以找到相应方法的用法和说明
根据你的代码,用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
在这个里面可以找到相应方法的用法和说明
zhanshi123 发表于 2018-6-4 22:48
用hasPermission方法判断是否有指定权限 或 使用Vault判断权限
根据你的代码,用hasPermission方法的示例 ...
NPE风险是什么?可以加QQ交流下吗
zhanshi123 发表于 2018-6-4 22:48
用hasPermission方法判断是否有指定权限 或 使用Vault判断权限
根据你的代码,用hasPermission方法的示例 ...
还有就是请教一下配置的读写修改

我的文件格式大概是这样 我的主类在PlyerJoinWorld
关于配置文件读写 我在主类文件可以使用getconfig 但是在我监听器这里不行,怎么引用它?
790859937 发表于 2018-6-5 09:47
还有就是请教一下配置的读写修改
我的文件格式大概是这样 我的主类在PlyerJoinWorld
居然还有过期方法
轻光233 发表于 2018-6-7 07:05
居然还有过期方法
我不知道新方法啊。。。很惨
790859937 发表于 2018-6-5 08:16
NPE风险是什么?可以加QQ交流下吗
NPE就是NullPointerException,即空指针
当你手上没有东西的时候player.getItemInHand()会返回null
然后就会造成让null使用方法getType()然后出错233
一般情况下我都是使用命令然后把这个玩家加到某个List里,然后用监听检测有List里的玩家使用钻石剑时就会放闪电233
轻光233 发表于 2018-6-7 07:05
居然还有过期方法
可以看注解啊,看不懂就翻译一下,大概就知道什么意思了
790859937 发表于 2018-6-5 09:47
还有就是请教一下配置的读写修改
我的文件格式大概是这样 我的主类在PlyerJoinWorld
getConfig();方法是在org.bukkit.plugin.java.JavaPlugin类中的方法 你的主类继承了该类 所以可以使用 但是你的监听器类没有继承 所以不可用
790859937 发表于 2018-6-5 09:47
还有就是请教一下配置的读写修改
我的文件格式大概是这样 我的主类在PlyerJoinWorld
你可以在主类注册一个字段来供插件使用
public static Main plugin;
在其他类调用就是Main.plugin.xxxxxxx;
比如Main.plugin.getConfig():