Minecraft(我的世界)中文论坛

标题: Day'水桶插件开发教程 第三章 命令

作者: whatafcukday    时间: 2015-5-1 08:22
标题: Day'水桶插件开发教程 第三章 命令
本帖最后由 whatafcukday 于 2015-5-3 09:22 编辑
Day’s 水桶插件开发教程第三章 命令
讲的不好欢迎指正

在一个插件中,我们要创建一个能被玩家使用的命令,需要以下步骤:
1.plugin.yml中注册我们的命令,注意不要与市面上插件重复。
2.创建一个命令执行器 (可以单独新建一个类,推荐新手直接在主类中创建)。
3.在命令执行器中写你需要的代码,处理各种情况,如:有权限,无权限等。


1.plugin.yml中创建命令
2,创建一个命令执行器
在主类中创建一个方法:
public boolean onCommand(CommandSender sender,Command cmd,String label,String[] args)  {}
他在玩家输入命令时被调用!
参数说明 看好了!


这个方法必须使用return返回一个boolean值,当返回为false时会对发送者输出plugin.yml中你定义的usage栏,为真时什么也不做。 在这个方法的末尾加上return false是良好的习惯。使用return直接退出本方法


3.在命令执行器中写代码 (实在不会下面有提示 其实我也没指望你们看懂。。)
密密麻麻的,考验你们的耐心咯~

再总结一下
本来想再写个私聊的示范,发现太简单了。。
所以,
作业:
写出/day msg命令 并实现私聊
提示
请判断参数长度是否等于3 args.length==3 (0,1,2)
请判断想私聊的玩家是否存在
请判断发送者是否有day.msg权限
使用 p.hasPermission(day.msg) 来判断玩家p是否有day.msg权限,有返回true
day.msg权限不需要在plugin.yml中注册
算了直接撒tp代码框架提示吧: (记得回帖! 我不欢迎伸手党 这是改过的! 正确的!)



撒下金币 人气吧! 我才1级。。。QAQ有问题就直接回帖问,什么叫不耻上问~


回到索引





作者: 914554688wyt    时间: 2015-5-2 16:52
[at]有些地方好像错了,内个代码框架提示那里 别告诉我你是特意的[/at]
作者: whatafcukday    时间: 2015-5-2 17:30
本帖最后由 whatafcukday 于 2015-5-2 20:14 编辑

程序框架  收着收着
[attach]756860[/attach


第三章提示.txt

1.06 KB, 下载次数: 354


作者: wodeshijieglq    时间: 2015-5-2 18:23
为啥么只有这个帖子有回到索引.
作者: whatafcukday    时间: 2015-5-2 18:25
本帖最后由 whatafcukday 于 2015-5-2 18:26 编辑
wodeshijieglq 发表于 2015-5-2 18:23
为啥么只有这个帖子有回到索引.

。。其他懒得改了,审核又得一天多{:10_512:} 更新的话 第四章已经写了一半了,预计今晚更新{:10_494:} 不过你们就等着审核吧 你觉得我教程如何? 看懂了吗?
作者: whatafcukday    时间: 2015-5-2 18:27
914554688wyt 发表于 2015-5-2 16:52
[at]有些地方好像错了,内个代码框架提示那里 别告诉我你是特意的[/at] ...

。。我真的是特意的{:10_492:} 真的
作者: wodeshijieglq    时间: 2015-5-2 18:27
whatafcukday 发表于 2015-5-2 18:25
。。其他懒得改了,审核又得一天多 更新的话 第四章已经写了一半了,预计今晚更新 不 ...

我没发过贴.为啥么这么慢.汗!
作者: whatafcukday    时间: 2015-5-2 18:28
wodeshijieglq 发表于 2015-5-2 18:27
我没发过贴.为啥么这么慢.汗!

开发板不知道什么时候要审核了。。。{:10_494:}
作者: wodeshijieglq    时间: 2015-5-2 18:29
whatafcukday 发表于 2015-5-2 18:25
。。其他懒得改了,审核又得一天多 更新的话 第四章已经写了一半了,预计今晚更新 不 ...

问LZ一个问题.craftbukkit库.是只有1.7.2版本才能使用这个插件.那我想1.6.2到1.7.2的版本都可以使用呢{:10_512:}
作者: whatafcukday    时间: 2015-5-2 18:31
本帖最后由 whatafcukday 于 2015-5-2 18:42 编辑
wodeshijieglq 发表于 2015-5-2 18:29
问LZ一个问题.craftbukkit库.是只有1.7.2版本才能使用这个插件.那我想1.6.2到1.7.2的版本都可以使用呢{:1 ...

要是只使用1.72bukkit库的话,是1.6~1.7通用,不排除例外,当然1.5 1.4神马的你也可以试一试,1.8新特性较多,不一定能支持
作者: wodeshijieglq    时间: 2015-5-2 20:02
我也是醉了...看了半天..请发框架和提示给我吧
作者: whatafcukday    时间: 2015-5-2 20:08
本帖最后由 whatafcukday 于 2015-5-2 20:14 编辑
wodeshijieglq 发表于 2015-5-2 20:02
我也是醉了...看了半天..请发框架和提示给我吧

我就知道会这样的 就是为了烦死你们而存在 看沙发还是板凳
作者: 914554688wyt    时间: 2015-5-2 20:18
whatafcukday 发表于 2015-5-2 17:30
程序框架  收着收着
[attach]756860[/attach

已懂。
作者: wyhyrf123    时间: 2015-6-10 20:42
whatafcukday 发表于 2015-5-2 09:31
要是只使用1.72bukkit库的话,是1.6~1.7通用,不排除例外,当然1.5 1.4神马的你也可以试一试,1.8新特性较 ...

长姿势了{:10_492:}
作者: ExplodingCreepr    时间: 2015-7-5 17:13
Commandsender如果是命令方块会怎么样,求详细解释
作者: whatafcukday    时间: 2015-7-9 08:03
ExplodingCreepr 发表于 2015-7-5 17:13
Commandsender如果是命令方块会怎么样,求详细解释

命令方块的命令实际上就是控制台执行的
作者: SmartZombie    时间: 2015-7-9 10:14
这个帖子比我看过的教程帖中最好懂得一个
作者: zyguyi    时间: 2015-7-9 10:43
楼主,你用的那个版本的bukkit,为什么我用的1.7.10的,里面提示getSever.getPlayer(),这个getPlayer()被弃用了?
作者: zyguyi    时间: 2015-7-9 10:45
zyguyi 发表于 2015-7-9 10:43
楼主,你用的那个版本的bukkit,为什么我用的1.7.10的,里面提示getSever.getPlayer(),这个getPlayer() ...

或者楼主有没有1.7.10的API文档,我在网上找不到bukkit的API文档了,也不暴利现在getPlayer()可以用哪个去实现
作者: whatafcukday    时间: 2015-7-9 11:56
zyguyi 发表于 2015-7-9 10:43
楼主,你用的那个版本的bukkit,为什么我用的1.7.10的,里面提示getSever.getPlayer(),这个getPlayer() ...

Player        getPlayer(String name)
Deprecated.
Use getPlayer(UUID) as player names are no longer guaranteed to be unique


Player        getPlayer(UUID id)
Gets the player with the given UUID.


他没有被取消 只是换成使用UUID了而已
作者: whatafcukday    时间: 2015-7-9 11:59
本帖最后由 whatafcukday 于 2015-7-9 12:14 编辑
zyguyi 发表于 2015-7-9 10:45
或者楼主有没有1.7.10的API文档,我在网上找不到bukkit的API文档了,也不暴利现在getPlayer()可以用哪个 ...

那个单词不是弃用的意思,而是不建议使用的意思

static UUID        fromString(String name)
Creates a UUID from the string standard representation as described in the toString() method.
你可以尝试使用这个方法获取UUID
UUID uid = UUID.fromString(玩家名)
因为是静态的所以可以直接调用不用new

作者: zyguyi    时间: 2015-7-9 12:43
whatafcukday 发表于 2015-7-9 11:59
那个单词不是弃用的意思,而是不建议使用的意思

static UUID        fromString(String name)

我试试,
作者: ExplodingCreepr    时间: 2015-7-9 21:10
whatafcukday 发表于 2015-7-9 08:03
命令方块的命令实际上就是控制台执行的

明白了,谢谢                                                     
作者: 小神PP    时间: 2015-7-16 07:22
2333{:10_512:}不错
作者: tskdsb    时间: 2015-7-16 11:06
我用的是1.8.7spigot API 出现了错误
  1. public boolean onCommand(CommandSender sender,Command cmd,String lable,String[] args){
  2.                 if(lable.equalsIgnoreCase("fly")){
  3.                         {                               
  4.                                 if(sender instanceof Player){
  5.                                         if (Bukkit.getServer().getPlayer(args[0])!=null) {
  6.                                                 Player p=Bukkit.getServer().getPlayer(args[0]);
  7.                                                 if(p.getAllowFlight()==false){
  8.                                                         p.setAllowFlight(true);
  9.                                                         p.sendMessage("§2你现在可以飞了");
  10.                                                 }
  11.                                                 else {
  12.                                                         p.setAllowFlight(false);
  13.                                                         p.sendMessage("§c你已被取消飞行");
  14.                                                 }
  15.                                         }
  16.                                         else {
  17.                                                 getLogger().info("=null");
  18.                                                 Player p=(Player)sender;
  19.                                                 if(p.getAllowFlight()==false){
  20.                                                         p.setAllowFlight(true);
  21.                                                         p.sendMessage("§2你现在可以飞了");
  22.                                                 }
  23.                                                 else {
  24.                                                         p.setAllowFlight(false);
  25.                                                         p.sendMessage("§c你已被取消飞行");
  26.                                                 }
  27.                                         }                                                                               
  28.                                 }
  29.                                 else{
  30.                                         if (Bukkit.getServer().getPlayer(args[0])!=null) {
  31.                                                 Player p=Bukkit.getServer().getPlayer(args[0]);
  32.                                                 if(p.getAllowFlight()==false){
  33.                                                         p.setAllowFlight(true);
  34.                                                         p.sendMessage("§2你现在可以飞了");
  35.                                                 }
  36.                                                 else {
  37.                                                         p.setAllowFlight(false);
  38.                                                         p.sendMessage("§c你已被取消飞行");
  39.                                                 }
  40.                                         }
  41.                                         else {               
  42.                                                 getLogger().info("控制台无法使用此命令");
  43.                                         }                                       
  44.                                 }
  45.                         }
  46.                         return true;
  47.                 }
  48.                 return false
  49. }
复制代码


当在控制台或游戏中输入flyde时候,就是没有args[0]的时候 , 就会报null的错误,错误如下:

>fly
[10:59:19 WARN]: Unexpected exception while parsing console command "fly"
org.bukkit.command.CommandException: Unhandled exception executing command 'fly'
in plugin tskplug1 v1.0
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:46) ~[spi
got-1.8.7-R0.1-SNAPSHOT.jar:git-Spigot-44c59bf-25554dc]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:14
1) ~[spigot-1.8.7-R0.1-SNAPSHOT.jar:git-Spigot-44c59bf-25554dc]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServe
r.java:642) ~[spigot-1.8.7-R0.1-SNAPSHOT.jar:git-Spigot-44c59bf-25554dc]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(Craf
tServer.java:628) [spigot-1.8.7-R0.1-SNAPSHOT.jar:git-Spigot-44c59bf-25554dc]
        at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:
404) [spigot-1.8.7-R0.1-SNAPSHOT.jar:git-Spigot-44c59bf-25554dc]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:3
68) [spigot-1.8.7-R0.1-SNAPSHOT.jar:git-Spigot-44c59bf-25554dc]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:6
57) [spigot-1.8.7-R0.1-SNAPSHOT.jar:git-Spigot-44c59bf-25554dc]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java
:560) [spigot-1.8.7-R0.1-SNAPSHOT.jar:git-Spigot-44c59bf-25554dc]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_45]
Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
        at com.github.tskdsb.tskplug1.onCommand(tskplug1.java:69) ~[?:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) ~[spi
got-1.8.7-R0.1-SNAPSHOT.jar:git-Spigot-44c59bf-25554dc]
        ... 8 more

我的插件名叫tsk1,还请大哥解答
作者: whatafcukday    时间: 2015-7-16 13:02
tskdsb 发表于 2015-7-16 11:06
我用的是1.8.7spigot API 出现了错误

所以说你要判断参数长度啊
if (args.length > 1) {
  .....
}

作者: tskdsb    时间: 2015-7-16 19:16
whatafcukday 发表于 2015-7-16 13:02
所以说你要判断参数长度啊
if (args.length > 1) {
  .....

谢谢,已解决
顺便请教一下,怪物头顶血量和所受伤害的显示怎么做?用到哪些方法?如果大神有空请教教我
作者: whatafcukday    时间: 2015-7-18 10:28
tskdsb 发表于 2015-7-16 19:16
谢谢,已解决
顺便请教一下,怪物头顶血量和所受伤害的显示怎么做?用到哪些方法?如果大神有空请教教我 ...

怪物头顶血量? 。。。。 有这东西吗。。  那是插件/ MOD的效果吧
作者: Little_Grass    时间: 2015-8-22 11:43
本帖最后由 Little_Grass 于 2015-8-22 11:44 编辑

3.在命令执行器中写代码 (实在不会下面有提示 其实我也没指望你们看懂。。)
密密麻麻的,考验你们的耐心咯~

下面的隐藏内容里你的英文双引号全是中文双引号
    如:            if (label.equalsIgnoreCase("day")) {
这个day旁边的双引号你的是中文的

我人懒直接复制,我说怎么报错大半天
作者: MIP_COMMOM    时间: 2015-12-25 13:22
插件无法加载的原因有哪一些?
作者: 情已死    时间: 2016-1-7 00:17
没看明白,那么如何获取被tp的人的名字?
作者: plgkm6    时间: 2016-1-11 15:05
name: MC_Test
main: com.github.plgkm6.MC_Test
version: 1.0
author: plgkm6
commands:
mct:
  description: Print a message.
  usage: "Usage:'/mct goto 玩家名' 或者 '/mct msg 玩家名 消息'"
  permission: MC_Test.player
  permission-message: You have no permission.
permission:
MC_Test.player:
  default: true

但是无论是命令行还是游戏里都提示权限不够,就算是改成op也不行
作者: yanjiaqin    时间: 2016-1-11 20:52
制作插件,这简直就是技术玩家的梦想啊!帖子别删!我好好学学!
作者: mopolun520    时间: 2016-2-21 23:00
作业:


作者: 呵呵呵哈aa    时间: 2016-3-26 18:35
楼主,其他的触发器有的看吗
作者: 360导航    时间: 2016-4-4 13:18
在if(!(sender instanceof Player))
                                {
                                        Player p=(Player)sender;
                                }else
                                {
                                        getLogger().info("你tm在逗我,控制台能传送?");
                                }
这里的Player p=(Player)sender;有错误警报,应该点哪一个,老师

作者: jipok之王    时间: 2016-4-17 17:16
楼主真帅!!!楼主真帅!!!楼主真帅!!!楼主真帅!!!
作者: 孤独的帅逼    时间: 2016-4-17 17:18
大爱楼楼谢教程了
作者: 飞泉瀑布    时间: 2016-4-17 17:24
提示: 作者被禁止或删除 内容自动屏蔽
作者: 空88200    时间: 2016-4-18 16:23
提示: 作者被禁止或删除 内容自动屏蔽
作者: 923100020    时间: 2016-4-22 01:44
参考我的作业呵呵达
import org.bukkit.Bukkit;
import org.bukkit.command.Command;
import org.bukkit.command.CommandSender;
import org.bukkit.entity.Player;
import org.bukkit.plugin.java.JavaPlugin;
import org.bukkit.Location;

public class myno1plugin extends JavaPlugin {
        public void onEnable() {
                getLogger().info("§amyno1plugin插件加载");
        }

        public void onDisable() {
                getLogger().info("§cmyno1plugin插件卸载");
        }

        public boolean onCommand(CommandSender sender, Command command, java.lang.String label, java.lang.String[] args) {
                if (label.equalsIgnoreCase("tes")) {
                        if (args[0].equalsIgnoreCase("tp")) {
                                if (sender instanceof Player) {
                                        Player me = (Player) sender;
                                        Player ta = Bukkit.getServer().getPlayer(args[1]);
                                        Location xyz = ta.getLocation();
                                        me.teleport(xyz);
                                        me.sendMessage("您的命令使用成功,你成功飞到了" + ta.getName() + "的身边");
                                } else {
                                        sender.sendMessage("操你吗B!你是玩家了吗?控制台想传送....");
                                }
                        }
                        if(args[0].equalsIgnoreCase("msg")){
                                if (sender instanceof Player) {
                                        Player me = (Player) sender;
                                        Player ta = Bukkit.getServer().getPlayer(args[1]);
                                        String Msg=args[2];
                                        me.sendMessage("你对"+ta.getName()+"说:"+Msg);
                                        ta.sendMessage(me.getName()+"对你说:"+Msg);
                                }else{
                                        Player ta = Bukkit.getServer().getPlayer(args[1]);
                                        String Msg=args[2];
                                        ta.sendMessage("控制台对你说:"+Msg);
                                }
                        }
                }
                return false;
        }
}
作者: 小0w0卡    时间: 2016-5-2 10:14
教程很棒!但有些地方看不懂,不知道怎么编哎。。
在获取p2那里,到底应该用什么命令,什么意思?
求解答!
作者: whatafcukday    时间: 2016-5-7 15:53
小0w0卡 发表于 2016-5-2 10:14
教程很棒!但有些地方看不懂,不知道怎么编哎。。
在获取p2那里,到底应该用什么命令,什么意思?
求解答! ...

Player p2 = Bukkit.getServer().getPlayer(args[1]);
根据String name获取玩家实例
作者: 小0w0卡    时间: 2016-5-7 20:49
whatafcukday 发表于 2016-5-7 15:53
Player p2 = Bukkit.getServer().getPlayer(args[1]);
根据String name获取玩家实例

谢谢,刚发完这个回复我就懂了。。。。不好意思打扰到了
不过我getlacotion的时候却出错,不知为何,也没有导入的地方
作者: 747051577    时间: 2016-7-23 17:13
没事回帖。发完收工...
作者: yanjiaqin    时间: 2016-7-23 17:14
楼主 我自己写的插件完全没有被读取,求检查哪里出错了(总之输入/ns就直接提示未知指令)
Plugins文件内容:

name: APL
main: com.github.alls.APL
version: 1.0
Author: anice
commands:
  ns:
    description: APL
    usage: /ns
    permission: ns.use
    permission-message: 您没有权限这样做!
permissions:
  ns.use:
    default: op


其中 anice , ns , /ns , op 被Ecplise画了波浪线并注明: the word 'XX' is not correctly spelled

我的java项目名:APL  包名:com.github.alls  类名:APL.java  plugin.yml的编码: UTF-8

作者: yanjiaqin    时间: 2016-7-23 17:16
yanjiaqin 发表于 2016-7-23 17:14
楼主 我自己写的插件完全没有被读取,求检查哪里出错了(总之输入/ns就直接提示未知指令)
Plugins文件内容:
...

APL.java如果出错了应该不会导致插件读取的吧?如果会,我附加上代码
作者: yanjiaqin    时间: 2016-7-23 22:08
360导航 发表于 2016-4-4 13:18
在if(!(sender instanceof Player))
                                {
                                        Player p=(Player)sender;

sender instanceof Player 如果的是实例不是输出true吗 true的话就执行Player p=(Player)sender
但是!(sender instanceof Player)就反过来了,如果不是实例就执行Player p=(Player)sender
岂不是就报错了......[我也不确定的,仅供参考=.=]
作者: yanjiaqin    时间: 2016-7-23 22:13
情已死 发表于 2016-1-7 00:17
没看明白,那么如何获取被tp的人的名字?

被tp的人的名字是你输入进去的  你输入的参数在字符串组args[]中,所以调用args[玩家名所在的下标]就可以了
作者: yanjiaqin    时间: 2016-7-24 15:22
yanjiaqin 发表于 2016-7-23 17:14
楼主 我自己写的插件完全没有被读取,求检查哪里出错了(总之输入/ns就直接提示未知指令)
Plugins文件内容:
...


已经找到原因了,我只想问问我的plugin.yml到底哪错了(绝对是UTF-8格式)

作者: yanjiaqin    时间: 2016-7-24 15:51
yanjiaqin 发表于 2016-7-23 17:14
楼主 我自己写的插件完全没有被读取,求检查哪里出错了(总之输入/ns就直接提示未知指令)
Plugins文件内容:
...

呼,在自己的摸索下解决了问题,也为后辈们说一句:unsupported major.minor version 52.0
如果出现这个错误,把Ecplise的jre和jdk都降低版本= =
作者: 七海八千代    时间: 2016-7-24 17:05
yanjiaqin 发表于 2016-7-23 17:14
楼主 我自己写的插件完全没有被读取,求检查哪里出错了(总之输入/ns就直接提示未知指令)
Plugins文件内容:
...

表示没看懂。。。
作者: 360导航    时间: 2016-7-28 23:06
yanjiaqin 发表于 2016-7-23 22:08
sender instanceof Player 如果的是实例不是输出true吗 true的话就执行Player p=(Player)sender
但是!(se ...

嗯,谢谢
作者: 2571612311    时间: 2016-7-30 17:39
[17:31:48 ERROR]: Could not load 'plugins\demo.jar' in folder 'plugins'
org.bukkit.plugin.InvalidDescriptionException: Invalid plugin.yml
        at org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPlug
inLoader.java:164) ~[spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at org.bukkit.plugin.SimplePluginManager.loadPlugins(SimplePluginManager
.java:133) [spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.loadPlugins(CraftServer.ja
va:291) [spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.reload(CraftServer.java:74
0) [spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at org.bukkit.Bukkit.reload(Bukkit.java:534) [spigot-1.8.7.jar:git-Spigo
t-b3c0272-7723b90]
        at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:
25) [spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:14
1) [spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchCommand(CraftServe
r.java:642) [spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at org.bukkit.craftbukkit.v1_8_R3.CraftServer.dispatchServerCommand(Craf
tServer.java:628) [spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at net.minecraft.server.v1_8_R3.DedicatedServer.aO(DedicatedServer.java:
404) [spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at net.minecraft.server.v1_8_R3.DedicatedServer.B(DedicatedServer.java:3
68) [spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at net.minecraft.server.v1_8_R3.MinecraftServer.A(MinecraftServer.java:6
57) [spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at net.minecraft.server.v1_8_R3.MinecraftServer.run(MinecraftServer.java
:560) [spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at java.lang.Thread.run(Unknown Source) [?:1.8.0_91]
Caused by: org.yaml.snakeyaml.error.YAMLException: java.nio.charset.MalformedInp
utException: Input length = 1
        at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:200)
~[spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:60) ~
[spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at org.yaml.snakeyaml.Yaml.load(Yaml.java:381) ~[spigot-1.8.7.jar:git-Sp
igot-b3c0272-7723b90]
        at org.bukkit.plugin.PluginDescriptionFile.<init>(PluginDescriptionFile.
java:232) ~[spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPlug
inLoader.java:159) ~[spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        ... 13 more
Caused by: java.nio.charset.MalformedInputException: Input length = 1
        at java.nio.charset.CoderResult.throwException(Unknown Source) ~[?:1.8.0
_91]
        at sun.nio.cs.StreamDecoder.implRead(Unknown Source) ~[?:1.8.0_91]
        at sun.nio.cs.StreamDecoder.read(Unknown Source) ~[?:1.8.0_91]
        at java.io.InputStreamReader.read(Unknown Source) ~[?:1.8.0_91]
        at org.yaml.snakeyaml.reader.UnicodeReader.read(UnicodeReader.java:123)
~[spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at java.io.Reader.read(Unknown Source) ~[?:1.8.0_91]
        at org.yaml.snakeyaml.reader.StreamReader.update(StreamReader.java:184)
~[spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at org.yaml.snakeyaml.reader.StreamReader.<init>(StreamReader.java:60) ~
[spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at org.yaml.snakeyaml.Yaml.load(Yaml.java:381) ~[spigot-1.8.7.jar:git-Sp
igot-b3c0272-7723b90]
        at org.bukkit.plugin.PluginDescriptionFile.<init>(PluginDescriptionFile.
java:232) ~[spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        at org.bukkit.plugin.java.JavaPluginLoader.getPluginDescription(JavaPlug
inLoader.java:159) ~[spigot-1.8.7.jar:git-Spigot-b3c0272-7723b90]
        ... 13 more
这是报错,为什么不能加载
作者: 沙瘪列夫斯    时间: 2016-7-30 20:13
很受用,很好
作者: 梓铭君~    时间: 2016-9-30 07:55
不明白的地方是  args后面跟着的参数 什么时候是[0] 什么时候是[1]   求解答。。。
作者: hdswr    时间: 2016-9-30 09:30
请问LZ 如果想在传送的后面让接受传送的人输入/accept才能接受传送该如何做到呢
作者: Emp丶海岸线    时间: 2016-9-30 11:38
写的很好,加油,挺你
作者: IFEN1993    时间: 2016-11-14 17:23
权限给所有人怎么写呢?*吗?
作者: wodeshijieglq    时间: 2016-12-1 17:18
  1. package com.yc.huya;

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

  8. public class JC extends JavaPlugin{
  9.         public void onEnable()
  10.         {
  11.                 getLogger().info("启动了!");
  12.         }
  13.         public boolean onCommand(CommandSender sender,Command cmd,String label,String[] args){
  14.                 if (args.length == 0){
  15.                         sender.sendMessage("§c/hyp msg 玩家 悄悄话");
  16.                         sender.sendMessage("§c/hyp tp 玩家");
  17.                         return true;
  18.                 }
  19.                 if (cmd.getName().equalsIgnoreCase("hyp")){
  20.                         if(args[0].equalsIgnoreCase("msg")){
  21.                                 if (args.length != 3){
  22.                                         sender.sendMessage("§c请输入/hyp msg 玩家 悄悄话");
  23.                                         return true;
  24.                                 }else {
  25.                                            if (Bukkit.getServer().getPlayer(args[1]) != null){
  26.                                                    Player me = (Player)sender;
  27.                                                    String msg = args[2];
  28.                                                     Player ta = Bukkit.getServer().getPlayer(args[1]);
  29.                                                    me.sendMessage("§c你对"+ta+"说了悄悄话");
  30.                                                    ta.sendMessage(me+"§c对你说了悄悄话:"+msg);
  31.                                                    } else {
  32.                                                            sender.sendMessage("§c你要说悄悄话的人已经下线啦!");
  33.                                                            return true;
  34.                                                            }
  35.                                 }
  36.                         }

  37.                 }
  38.                 if (cmd.getName().equalsIgnoreCase("hyp")){
  39.                         if (args[0].equalsIgnoreCase("tp")){
  40.                                 if (args.length != 2){
  41.                                         sender.sendMessage("§c请输入/hyp tp 玩家");
  42.                                         return true;
  43.                                 } else {
  44.                                         if (sender instanceof Player) {
  45.                                                Player p = (Player)sender;
  46.                                                Player p2 = Bukkit.getServer().getPlayer(args[1]);
  47.                                                if (Bukkit.getServer().getPlayer(args[1]) != null){
  48.                                                        Location wz = p2.getLocation();
  49.                                                        p.teleport(wz);
  50.                                                        p.sendMessage("§c传送成功");
  51.                                                        return true;
  52.                                                        }
  53.                                         } else {
  54.                                                 sender.sendMessage("§c控制台不可以输入");
  55.                                                 return true;
  56.                                         }
  57.                                 }
  58.                                
  59.                         }
  60.                         return true;
  61.                 }
  62.                 return true;
  63.         }
  64.                }
复制代码

做了许久的作业,你们参考吧,有些没讲的
作者: 莲华酱    时间: 2017-2-6 23:38
本帖最后由 619815617 于 2018-11-30 19:43 编辑

1111111111111111111
作者: [email protected]    时间: 2017-5-21 22:11
楼主亮色+小字体=看着眼睛疼
作者: [email protected]    时间: 2017-5-21 22:32
yanjiaqin 发表于 2016-7-23 22:08
sender instanceof Player 如果的是实例不是输出true吗 true的话就执行Player p=(Player)sender
但是!(se ...

因为楼主写这句话的时候有些误导
(因为控制台是不可能传送的,所以我们要判断特殊情况:
If (!(sender instanceof Player)) {} else {getLogger().info(“控制台无法使用此命令”)};)
if(sender instanceof Player){}是玩家发送的时候会判断为true,走括号中的代码,但是如果加了一个!的话,反而为false了,也就是说玩家输入指令反而不会执行If (!(sender instanceof Player)) {}大括号中的代码,控制台输入指令才会执行因为!false=true或者null,这种情况下null基本不可能,所以反而控制台输入变成true了。
作者: kqn3    时间: 2017-6-25 09:33
为什么很多if的判断句要加取反号,比如说   If (!(sender instanceof Player)) {} else {getLogger().info(“控制台无法使用此命令”)};

作者: fuzu_anxue    时间: 2017-6-26 21:49
wodeshijieglq 发表于 2015-5-2 18:23
为啥么只有这个帖子有回到索引.

这个是什么啊!
作者: Soul-Tude    时间: 2017-10-23 21:12
我来交一下作业,希望楼主帮我看下有没有语法错误,我用的else if 吧 tp的也写进来了,不知道有没有错误= =
  1. package tubbti.tubbti;


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


  7. public class text extends JavaPlugin {
  8.     public void onEnable() {

  9.         getLogger().info("Text插件已加载!");
  10.     }

  11.     public void onDisable() {

  12.         getLogger().info("Text插件已卸载!");
  13.     }

  14.     public boolean onCommand(CommandSender sender, Command cmd, String label, String[] args) {

  15.         if (label.equalsIgnoreCase("text")) {


  16.             if (args[0].equalsIgnoreCase("tp")) {


  17.                 if ((sender instanceof Player)) {


  18.                     Player p = (Player) sender;

  19.                     if (args.length != 2) {

  20.                         p.sendMessage("命令使用错误!");


  21.                     } else {

  22.                         if (Bukkit.getServer().getPlayer(args[1]) != null) {

  23.                             Player p2 = Bukkit.getServer().getPlayer(args[1]);
  24.                             Location wz = p2.getLocation();
  25.                             p.teleport(wz);
  26.                             p.sendMessage("传送成功!");

  27.                         } else { p.sendMessage("该玩家不存在"); }

  28.                     }

  29.                 } else { getLogger().info("控制台无法使用"); }

  30.             }
  31.             else if (args[0].equalsIgnoreCase("msg")) {


  32.                 if ((sender instanceof Player)){

  33.                     Player p = (Player)sender;

  34.                     if(p.hasPermission("text.msg")) {
  35.                         if (args.length == 3) {

  36.                             if (Bukkit.getServer().getPlayer(args[1]) != null) {

  37.                                 String player1 = sender.getName();
  38.                                 String player2 = args[1];
  39.                                 Player p1= Bukkit.getPlayer(player1);
  40.                                 Player target=Bukkit.getPlayer(player2);
  41.                                 String mes= args[2];
  42.                                 target.sendMessage(p1+"→ me :"+mes);



  43.                             } else {
  44.                                 p.sendMessage("玩家不存在");
  45.                             }


  46.                         } else {
  47.                             p.sendMessage("命令错误!请使用/text msg 玩家名 说的话");
  48.                         }


  49.                     }
  50.                 }else {getLogger().info("我不想让控制台私聊人233");}




  51.             }

  52.         }
  53.         return false;
  54.     }
  55. }
复制代码






作者: tang_wenqi    时间: 2018-7-31 12:04
弃坑了?还是支持作者的文风的:-)
作者: Fang_Mengshi    时间: 2020-5-19 08:56
学习ing......神奇的知识增加了awa!
作者: 7548854987    时间: 2020-5-19 08:57
eeeeeeeeeeeeeeee