LanAnY
本帖最后由 sky295 于 2020-7-19 20:16 编辑

@EventHandler
public void onPlayerJoinItem(PlayerJoinEvent event){
    Player player=event.getPlayer();
    int page=getConfig().getStringList("Content").size();
    PlayerInventory inventory=player.getInventory();
    ItemStack item=new ItemStack(Material.WRITTEN_BOOK,1);
    BookMeta meta=(BookMeta) item.getItemMeta();
    meta.setTitle("新手教程");
    meta.setAuthor("SKY");
    for (int i =1;i<page;i++){
        getLogger().info("§e"+i);
        meta.addPage();
        getLogger().info("§e222222222222222222222222");
        meta.setPage(i,getConfig().getStringList("Content").get(i));
        getLogger().info("§e33333333333333333333333333");
    }
    item.setItemMeta(meta);
    if (!inventory.contains(item)){
        inventory.addItem(item);
        player.sendMessage("§6获得你一本新手教程");
    }
}
2021.12 数据,可能有更多内容@EventHandler
public void onPlayerJoinItem(PlayerJoinEvent event){
    Player player=event.getPlayer();
    int page=getConfig().getStringList(&quot;Content&quot;).size();
    PlayerInventory inventory=player.getInventory();
    ItemStack item=new ItemStack(Material.WRITTEN_BOOK,1);
    BookMeta meta=(BookMeta) item.getItemMeta();
    meta.setTitle(&quot;新手教程&quot;);
    meta.setAuthor(&quot;SKY&quot;);
    for (int i =1;i&lt;page;i++){
  getLogger().info(&quot;§e&quot;+i);
  meta.addPage();
  getLogger().info(&quot;§e222222222222222222222222&quot;);
  meta.setPage(i,getConfig().getStringList(&quot;Content&quot;).get(i));
  getLogger().info(&quot;§e33333333333333333333333333&quot;);
    }
    item.setItemMeta(meta);
    if (!inventory.contains(item)){
  inventory.addItem(item);
  player.sendMessage(&quot;§6获得你一本新手教程&quot;);
    }
}

检查你的plugin.yml文件里是否有
commands:
  ji:

Sssss...
你是不是有两个插件用了同一个包名,整个主类路径完全一致?

LanAnY
Sssss... 发表于 2020-6-30 21:55
你是不是有两个插件用了同一个包名,整个主类路径完全一致?

我这是一个插件。。

LanAnY
雨 发表于 2020-6-30 21:53
检查你的plugin.yml文件里是否有
commands:
  ji:

有的。。。。

William_Shi
reload command类 第九行

不要用论坛code插件
截图完整代码,全部,且带上行号

Sssss...
ReloadCommand发一下

LanAnY
本帖最后由 sky295 于 2020-6-30 22:02 编辑

package com.github.sky295.command;

import org.bukkit.command.Command;
import org.bukkit.command.CommandExecutor;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;

public class ReloadCommand extends JavaPlugin implements CommandExecutor {
    @Override
    public boolean onCommand(CommandSender sender, Command command, String s, String[] strings) {
        Player player=(Player) sender;
        if (player.hasPermission("ji.reload")){
            if (command.equals("ji reload")){
                reloadConfig();
                player.sendMessage("§e插件重载完成!");
                return true;
            }
        }else{
            player.sendMessage("§c你没有权限执行reload指令");
            return true;
        }
        return false;
    }
}

LanAnY
Sssss... 发表于 2020-6-30 21:58
ReloadCommand发一下
  1. package com.github.sky295.command;

  2. import org.bukkit.command.Command;
  3. import org.bukkit.command.CommandExecutor;
  4. import org.bukkit.command.CommandSender;
  5. import org.bukkit.entity.Player;
  6. import org.bukkit.plugin.java.JavaPlugin;

  7. public class ReloadCommand extends JavaPlugin implements CommandExecutor {
  8.     @Override
  9.     public boolean onCommand(CommandSender sender, Command command, String s, String[] strings) {
  10.         Player player=(Player) sender;
  11.         if (player.hasPermission("ji.reload")){
  12.             if (command.equals("ji reload")){
  13.                 reloadConfig();
  14.                 player.sendMessage("§e插件重载完成!");
  15.                 return true;
  16.             }
  17.         }else{
  18.             player.sendMessage("§c你没有权限执行reload指令");
  19.             return true;
  20.         }
  21.         return false;
  22.     }
  23. }
复制代码

William_Shi

我再说一遍,不要用论坛code插件
看行号很不方便的
截图代码带行号

William_Shi

不能有两个类继承javaplugin

LanAnY
William_Shi 发表于 2020-6-30 22:02
不能有两个类继承javaplugin

那不继承的话,我reloadConfig这个方法就不能用了呀,这个方法还是JavaPlugin类下的

William_Shi
sky295 发表于 2020-6-30 22:03
那不继承的话,我reloadConfig这个方法就不能用了呀,这个方法还是JavaPlugin类下的 ...

获取主类实例再调用就好了
主类实现了单例化,可以直接static存储实例
听不懂就去学Java基础

LanAnY
William_Shi 发表于 2020-6-30 22:02
不能有两个类继承javaplugin

我输入指令没反应,请问是哪里出了问题

LanAnY
William_Shi 发表于 2020-6-30 22:05
获取主类实例再调用就好了
主类实现了单例化,可以直接static存储实例
听不懂就去学Java基础 ...

明白了。。。。

LanAnY
William_Shi 发表于 2020-6-30 22:05
获取主类实例再调用就好了
主类实现了单例化,可以直接static存储实例
听不懂就去学Java基础 ...

我输入了指令没有反应是什么原因

Karlatemp
for(int i = 1???)

William_Shi
for (int i =1;i<page;i++){

这书是空的啊

Sssss...
看不懂吗?这么明白的报错都看不懂?

i从1开始?你见过哪个java里面的序列是从1开始的(常量池除外)?

LanAnY
Sssss... 发表于 2020-7-1 08:50
看不懂吗?这么明白的报错都看不懂?

i从1开始?你见过哪个java里面的序列是从1开始的(常量池除外)? ...

setPage就是从1开始的

Sssss...
sky295 发表于 2020-7-1 09:08
setPage就是从1开始的

你为什么不试试看0

AdvancedMical
本帖最后由 AdvancedMical 于 2020-7-1 09:37 编辑
sky295 发表于 2020-6-30 22:11
我输入了指令没有反应是什么原因

首先批评一下你的包名

github用户应该用io.github.你的名字
而且,你不写插件名
如果你写的两个插件的主类的位置都是io.github.sky295.Main的话两个插件都无法启动
所以改为io.github.name.pluginname.mainname比较好

你说的问题:

主类做一个返回
private static 主类 instance;

public static 主类 getInstance() {
    return instance;
}

@Override
public void onEnable() {
    instance = this;
}

CommandHandler类的
onCommand方法:
JavaPlugin plugin = 主类.getInstance();

然后就可以用plugin.reloadConfig();了

还有,for (int i = 1; i<page; i++) 这书是空的,为何不试试int i = 0呢


“输入指令没反应”:
你在主类注册了吗
onEnable方法
getServer().getPluginCommand("指令").setExecutor(new 命令类());


我觉得我已经说得很详细了,cv都不懂的话那就别写了

LanAnY
Sssss... 发表于 2020-7-1 09:09
你为什么不试试看0

试过了,后台直接报错

LanAnY
AdvancedMical 发表于 2020-7-1 09:32
首先批评一下你的包名

github用户应该用io.github.你的名字
  1.     private static Main plugin;

  2.     public reloadCommand (Main plugin){
  3.         this.plugin=plugin;
  4.     }
复制代码


我是这样写的,你看可以嘛

AdvancedMical
sky295 发表于 2020-7-1 09:38
我是这样写的,你看可以嘛

你写的啥东西..

我不是跟你很详细地讲过怎么写了吗

cv都不会吗,真的想让我在idea里写完给你cv过来?

William_Shi
pages的确从一开始
但是
你书最开始addpage之后
只有一页
那么你就是这样的代码

for (int i=1 ;i小于1 ;i 加加

你觉得能行吗
我手机实在不方便打字,应该能看

LanAnY
AdvancedMical 发表于 2020-7-1 09:39
你写的啥东西..

我不是跟你很详细地讲过怎么写了吗

我这样写也能调用到reloadConfig方法呀

AdvancedMical
本帖最后由 AdvancedMical 于 2020-7-1 09:45 编辑
sky295 发表于 2020-7-1 09:41
我这样写也能调用到reloadConfig方法呀

可能你能调用

不过我真的看不懂你这是什么操作
我好像看懂你啥意思了,,
不过你这个方法很令人费解而且很麻烦

你直接在主类搞个getInstance,任何类想用都能用

LanAnY
William_Shi 发表于 2020-7-1 09:41
pages的确从一开始
但是
你书最开始addpage之后

        for (int i =1;i<=page;i++){
            meta.addPage("页面"+i);
            meta.setPage(i,getConfig().getStringList("Content").get((i-1)));
        }

我是这样写的

南柯郡守
本帖最后由 南柯郡守 于 2020-7-1 10:09 编辑

addPage的时候  括号里可以直接把要添加的内容写上去 就不用再setPage了