Minecraft(我的世界)中文论坛

标题: 插件教程第五章 —— 自定义一个更多背包插件(监听,Vault)

作者: a8105    时间: 2014-6-14 18:27
标题: 插件教程第五章 —— 自定义一个更多背包插件(监听,Vault)
本帖最后由 810587921 于 2014-8-3 16:52 编辑

这次的图片有点模糊,推荐直接下载word..





































Vault的3个API方法为银行的方法,并非玩家本身金钱的方法,因此需要改下:
点我
这里也证明了有没有认真看帖的事实←_←

word下载:
点我

作者: 1277832129    时间: 2014-6-14 18:28
更新很快嘛··
作者: 1713560198    时间: 2014-6-14 18:31
lz   你  太帅了  啊
!!!!
作者: zhong19981221    时间: 2014-6-14 18:43
好霸气{:10_492:}
作者: 猥琐张尼玛    时间: 2014-7-1 12:20
这么好的帖子居然没多少顶  不科学{:10_523:}
作者: 敏感词好多    时间: 2014-7-23 17:38
第一章开始的 在哪?
作者: a8105    时间: 2014-7-23 18:43
敏感词好多 发表于 2014-7-23 17:38
第一章开始的 在哪?

http://www.mcbbs.net/thread-283190-1-1.html这里
作者: syx330679663    时间: 2014-8-3 16:48
本帖最后由 syx330679663 于 2014-8-3 18:32 编辑

a8大神我来了:
别用Vault的 bankHas、bankDeposit和bankWithdraw
应该为去掉bank的has、depositPlayer、withdrawPlayer方法0.0
http://milkbowl.github.io/VaultAPI/ 具体参看vault的文档

还有 少了注册监听器的部分,在onEnable方法里面加上getServer().getPluginManager().registerEvents(new XXXListener(this),this);
不懂得请参看倒霉の忍着的教程http://www.mcbbs.net/thread-48069-1-1.html

作者: sujiw    时间: 2014-11-9 18:29
提示: 作者被禁止或删除 内容自动屏蔽
作者: 墨尔本夕夜    时间: 2015-4-12 22:22
有点混乱这一章 有些地方跳着 变量还要找回去定义的地方理解
作者: ykl522    时间: 2015-4-19 18:57
新手来学习
作者: 擦拭    时间: 2015-10-11 21:38
提示: 作者被禁止或删除 内容自动屏蔽
作者: 494308843    时间: 2016-1-24 21:56
http://jd.bukkit.org/rb/doxygen
打不开
作者: wawk    时间: 2016-3-6 10:43
楼主,想问下plugin.yml的permission具体是怎么个写法?我写得有错
  1. name: MonsterDrops
  2. main: com.MonsterDrops.MonsterDrops
  3. version: 1.0
  4. author: Synchronized
  5. commands:
  6.   MonsterDrops:
  7.     description: Define the Monster Drops
  8.     usage: /MonsterDrops
  9.     permission: MonsterDrops.admin
  10.     permission-message: §cYou don't have permission to do this!
  11. permissions:
  12.   MonsterDrops.admin:
  13.     description: All permissions for MonsterDrops
  14.     default: op
复制代码

作者: a8105    时间: 2016-3-6 17:27
wawk 发表于 2016-3-6 10:43
楼主,想问下plugin.yml的permission具体是怎么个写法?我写得有错

信息包含特殊符号需要用‘’包起来
permission-message: '§cYou don't have permission to do this!'
作者: wawk    时间: 2016-3-13 20:44
810587921 发表于 2016-3-6 17:27
信息包含特殊符号需要用‘’包起来
permission-message: '§cYou don't have permission to do this!' ...

我后来处理了一下是因为plugin.yml的编码必须是UT8,现在好了谢谢
作者: Little_seven    时间: 2016-4-2 17:43
请问如何判断玩家捡起的物品
作者: a8105    时间: 2016-4-2 17:54
Little_seven 发表于 2016-4-2 17:43
请问如何判断玩家捡起的物品

PlayerPickupItemEvent
作者: Little_seven    时间: 2016-4-2 23:39
该怎么用呢  如何判断玩家捡起物品的id或者英文代号
作者: q513902026    时间: 2016-4-2 23:45
Little_seven 发表于 2016-4-2 23:39
该怎么用呢  如何判断玩家捡起物品的id或者英文代号

event.getItem().getItemStack().getType()  ---Material
作者: Little_seven    时间: 2016-4-3 09:54
原谅我问题多   怎么播放游戏中的声音
作者: q513902026    时间: 2016-4-3 12:33
Little_seven 发表于 2016-4-3 09:54
原谅我问题多   怎么播放游戏中的声音

getWorld().playSound(loc,sound,vol,pitch)
作者: Little_seven    时间: 2016-4-3 13:22
本帖最后由 Little_seven 于 2016-4-3 13:34 编辑

event.getItem().getItemStack().getType()    得到物品id后 如果为指定物品 把它删除该怎么弄
作者: Little_seven    时间: 2016-4-3 13:24
大神 求加qq
作者: Little_seven    时间: 2016-4-3 22:39
q513902026 发表于 2016-4-3 12:33
getWorld().playSound(loc,sound,vol,pitch)

我的意思是点击一个物品后有提示音 只有点击物品的玩家才能听到
作者: q513902026    时间: 2016-4-4 06:08
本帖最后由 q513902026 于 2016-4-4 06:17 编辑
Little_seven 发表于 2016-4-3 22:39
我的意思是点击一个物品后有提示音 只有点击物品的玩家才能听到

你可能需要发送一个数据包
通过ProtocolLib对这个玩家单独发送包
http://www.mcbbs.net/forum.php?m ... 68714&highlight=pro
作者: Little_seven    时间: 2016-4-4 08:34
本帖最后由 Little_seven 于 2016-4-4 08:41 编辑
q513902026 发表于 2016-4-4 06:08
你可能需要发送一个数据包
通过ProtocolLib对这个玩家单独发送包
http://www.mcbbs.net/forum.php?m ... 6 ...

大神 可以再回答我两个问题吗怎么删除玩家捡起的物品

怎么使用经验条显示指定数字


我不会搜索doc。。。原谅我

作者: q513902026    时间: 2016-4-4 17:12
Little_seven 发表于 2016-4-4 08:34
大神 可以再回答我两个问题吗怎么删除玩家捡起的物品

怎么使用经验条显示指定数字

PlayerPickupItemEvent
getItem().remove
Player player;
player.setLevel(int num);
作者: Little_seven    时间: 2016-4-5 20:52
q513902026 发表于 2016-4-4 17:12
PlayerPickupItemEvent
getItem().remove
Player player;

大神getItem().remove 还是没有删除物品 该怎么弄 可以加qq吗 大神
作者: comnzy    时间: 2016-4-5 21:16
lz你的图床挂了
作者: q513902026    时间: 2016-4-5 22:31
Little_seven 发表于 2016-4-5 20:52
大神getItem().remove 还是没有删除物品 该怎么弄 可以加qq吗 大神

void        setItemStack(ItemStack stack)
new ItemStack(Material.AIR);
作者: Little_seven    时间: 2016-4-6 13:49
q513902026 发表于 2016-4-5 22:31
void        setItemStack(ItemStack stack)
new ItemStack(Material.AIR);

大神 还是不行
作者: q513902026    时间: 2016-4-6 17:07
Little_seven 发表于 2016-4-6 13:49
大神 还是不行

代码有空贴出来 别不好意思 不然我无法判断问题出在哪
作者: Little_seven    时间: 2016-4-9 23:25
q513902026 发表于 2016-4-5 22:31
void        setItemStack(ItemStack stack)
new ItemStack(Material.AIR);

import org.bukkit.event.player.PlayerPickupItemEvent;
public class Game extends JavaPlugin implements Listener
{
        public void onEnable() {
                  getServer().getPluginManager().registerEvents(this, this);
                  getLogger().info("启用咯~");

    }
          @EventHandler
          public void Pick(PlayerPickupItemEvent evt)
          {
                  Player p=evt.getPlayer();
                  int id = evt.getItem().getItemStack().getTypeId();
if (id==1)
{
evt.getItem().remove();
}
}
}
我只是想判断捡起的物品是否为石头 如果为石头 则捡起后清除
作者: Little_seven    时间: 2016-4-9 23:39
q513902026 发表于 2016-4-6 17:07
代码有空贴出来 别不好意思 不然我无法判断问题出在哪

大神 怎么做到这样显示
作者: Little_seven    时间: 2016-4-10 10:14
q513902026 发表于 2016-4-6 17:07
代码有空贴出来 别不好意思 不然我无法判断问题出在哪

import org.bukkit.event.player.PlayerPickupItemEvent;
public class Game extends JavaPlugin implements Listener
{
        public void onEnable() {
                  getServer().getPluginManager().registerEvents(this, this);
                  getLogger().info("启用咯~");

    }
          @EventHandler
          public void Pick(PlayerPickupItemEvent evt)
          {
                  Player p=evt.getPlayer();
                  int id = evt.getItem().getItemStack().getTypeId();
if (id==1)
{
evt.getItem().remove();
}
}
}
我只是想判断捡起的物品是否为石头 如果为石头 则捡起后清除
作者: q513902026    时间: 2016-4-10 10:19
Little_seven 发表于 2016-4-10 10:14
import org.bukkit.event.player.PlayerPickupItemEvent;
public class Game extends JavaPlugin impleme ...

先取消事件 然后再清除物品
作者: Little_seven    时间: 2016-4-10 10:22
q513902026 发表于 2016-4-10 10:19
先取消事件 然后再清除物品

大神 具体怎么做
作者: Little_seven    时间: 2016-4-10 10:32
q513902026 发表于 2016-4-10 10:19
先取消事件 然后再清除物品

我看了DOC evt.getItem().remove()是移除实体
作者: q513902026    时间: 2016-4-10 12:12
Little_seven 发表于 2016-4-10 10:32
我看了DOC evt.getItem().remove()是移除实体

首先取消事件
evt.setCancelled(true);
其次清除实体
evt.getItem().remove();
作者: Little_seven    时间: 2016-4-10 12:16
q513902026 发表于 2016-4-10 12:12
首先取消事件
evt.setCancelled(true);
其次清除实体

谢谢了我在Bukkit Forums找到了答案 和你答案一样

大神 怎么这样显示文字
作者: q513902026    时间: 2016-4-10 12:56
本帖最后由 q513902026 于 2016-4-10 15:10 编辑
Little_seven 发表于 2016-4-10 12:16
谢谢了我在Bukkit Forums找到了答案 和你答案一样

大神 怎么这样显示文字

发送actionBar  Only 1.9 (but also 1.8?
https://www.spigotmc.org/resources/api-titlemc.18114/

作者: Little_seven    时间: 2016-4-10 13:04
本帖最后由 Little_seven 于 2016-4-10 13:28 编辑
q513902026 发表于 2016-4-10 12:56
发送actionBar  Only 1.9
https://www.spigotmc.org/resources/api-titlemc.18114/

大神 I need 1.8
作者: q513902026    时间: 2016-4-10 15:06
Little_seven 发表于 2016-4-10 13:04
大神 I need 1.8

这方法也能兼容1.8
作者: Little_seven    时间: 2016-4-11 17:51
q513902026 发表于 2016-4-10 15:06
这方法也能兼容1.8

需要下载 titleAPI吗
作者: q513902026    时间: 2016-4-11 18:18
Little_seven 发表于 2016-4-11 17:51
需要下载 titleAPI吗

这是静态方法 请放置在一个类中 然后就可以调用
作者: Little_seven    时间: 2016-4-12 17:08
q513902026 发表于 2016-4-11 18:18
这是静态方法 请放置在一个类中 然后就可以调用

把那段代码复制过去 有错误  一些变量下面有红色波浪线
作者: Little_seven    时间: 2016-4-12 17:54
q513902026 发表于 2016-4-11 18:18
这是静态方法 请放置在一个类中 然后就可以调用

有变量类型为
  1. public static void sendActionbar(Player player, String message)
  2.           {
  3.             String nmsver = Bukkit.getServer().getClass().getPackage().getName().substring(nmsver.lastIndexOf(".") + 1);
  4.             try
  5.             {
  6.               Class c1 = Class.forName("org.bukkit.craftbukkit." + nmsver + ".entity.CraftPlayer");
  7.               Object p = c1.cast(player);
  8.               Object ppoc = null;
  9.               Class c4 = Class.forName("net.minecraft.server." + nmsver + ".PacketPlayOutChat");
  10.               Class c5 = Class.forName("net.minecraft.server." + nmsver + ".Packet");

  11.               if ((nmsver.equalsIgnoreCase("v1_9_R1")) || (!nmsver.startsWith("v1_9_")))
  12.               {
  13.                 Class c2 = Class.forName("net.minecraft.server." + nmsver + ".ChatSerializer");
  14.                 Class c3 = Class.forName("net.minecraft.server." + nmsver + ".IChatBaseComponent");
  15.                 Method m3 = c2.getDeclaredMethod("a", new Class[] { String.class });
  16.                 Object cbc = c3.cast(m3.invoke(c2, new Object[] { "{"text": "" + message.replace("&", "§").replace("%player", new StringBuilder(String.valueOf(player.getName())).append(""}").toString()) }));
  17.                 ppoc = c4.getConstructor(new Class[] { c3, Byte.TYPE }).newInstance(new Object[] { cbc, Byte.valueOf(2) });
  18.               }
  19.               else
  20.               {
  21.                 Class c2 = Class.forName("net.minecraft.server." + nmsver + ".ChatComponentText");
  22.                 Class c3 = Class.forName("net.minecraft.server." + nmsver + ".IChatBaseComponent");
  23.                 Object o = c2.getConstructor(new Class[] { String.class }).newInstance(new Object[] { message.replace("&", "§").replace("%player", player.getName()) });
  24.                 ppoc = c4.getConstructor(new Class[] { c3, Byte.TYPE }).newInstance(new Object[] { o, Byte.valueOf(2) });
  25.               }
  26.               Method m1 = c1.getDeclaredMethod("getHandle", new Class[0]);
  27.               Object h = m1.invoke(p, new Object[0]);
  28.               Field f1 = h.getClass().getDeclaredField("playerConnection");
  29.               Object pc = f1.get(h);
  30.               Method m5 = pc.getClass().getDeclaredMethod("sendPacket", new Class[] { c5 });
  31.               m5.invoke(pc, new Object[] { ppoc });
  32.             }
  33.             catch (Exception e)
  34.             {
  35.               e.printStackTrace();
  36.             }
  37.           }
  38.        
复制代码
Method 需要导入什么
作者: q513902026    时间: 2016-4-12 19:43
Little_seven 发表于 2016-4-12 17:54
有变量类型为Method 需要导入什么

这里导入的都是java.lang.reflect包的类
作者: sofa    时间: 2016-4-14 13:27
求开个索引啊或者加个上一张的贴
作者: Little_seven    时间: 2016-4-16 18:50
q513902026 发表于 2016-4-12 19:43
这里导入的都是java.lang.reflect包的类

这个错误呢 The method valueOf(byte) in the type Byte is not applicable for the arguments (int) 整数不适用于字节

作者: q513902026    时间: 2016-4-16 22:42
本帖最后由 q513902026 于 2016-4-16 22:49 编辑
Little_seven 发表于 2016-4-16 18:50
这个错误呢 The method valueOf(byte) in the type Byte is not applicable for the arguments (int) 整 ...

我整理了一下代码 so
ChatHelper.java


注意一下 里面关于ModHelper的内容可以删除 然后ChatHelper的包请自行更改
BiliBS.getInstance() 是获取插件的实例 请自行更改


作者: Little_seven    时间: 2016-4-17 00:54
q513902026 发表于 2016-4-16 22:42
我整理了一下代码 so
ChatHelper.java

看不懂 。。。 大神 我换了1.9的api 这样好弄吗
作者: Kugana    时间: 2017-9-21 13:14
樓主 想問一下 如果我要自創一個RPG的裝備欄 用背包介面的方式 我要怎麼定義使格子有裝備的效果