本帖最后由 181133567 于 2015-8-2 16:27 编辑
又是一个周末时~
废话就不多说了 直接进入主题
先上效果图:

先拿出我们珍藏的小木棍 然后对准一个方块 之后鼠标左键

然后我们选中的方块就变成金砖了!
实现:
现在来回想一下这个神奇的法术:
1.小木棍 2.左键点击 3.施法成功!
不难想到,既然有点击那么就一定有玩家点击事件,所以就会有 @EventHandler:
复制代码既然施法道具小木棍,那么就会有一个判断:
复制代码evt着这里是这个点击事件 evt.getPlayer()就是触发这个事件的玩家 evt.getPlayer().getItemInHand()则是触发这个事件的玩家手上的物品
evt.getPlayer().getItemInHand().getType()就是触发这个事件的玩家手上的物品的类型了~
Material是所有材料的类 所以这段code的意思就是【如果玩家手上的物品是小木棍 那么便执行接下来的code】
仔细思考一下刚才的施法过程 好像还有一个左键点击 也就是说要进行像 ↑↑↑上面↑↑↑ 那样进行判断咯:
复制代码同理,获得时间的具体行为 判断是否是 左键单击砖块 如果是 执行接下来的code。
复制代码这里就是获得一个Block实例并取名叫block。
使block 等于 玩家的目标砖块 施法距离为4格
获得目标砖块之后再用setType()来改变目标砖块的类型就好了~
应为一开始我们用到了@EventHandler 要使用它的话必须先对事件进行注册,而祖册一般都是在最早的时候执行的,所以注册事件的code就应该放在
onEnable()里咯
复制代码
既然有注册 那么对应的就有注销:
复制代码之后只需要简单的配置一下yml文件就好~(这里就不在赘述了= =。)
附上源码一份:
复制代码



怎么做的前文都有说过,这里直接附上核心code:
复制代码这里要注意的是stored_block这个变量。 在一开始创建一个私有变量 private Material stored_block ;
以供在onPlayerInteractBlock(PlayerInteractEvent evt)中使用
【虽然这样破坏了函数良好的封装性= =。。不过无所谓了 我们可是大法师!】
最后:
之后的加强法术我没有仔细说明 不过原理前文都有提到过 大家可以自己独立思考一下 毕竟强大的力量总是要付出些什么不是么~
又是一个周末时~
废话就不多说了 直接进入主题
先上效果图:

先拿出我们珍藏的小木棍 然后对准一个方块 之后鼠标左键

然后我们选中的方块就变成金砖了!
实现:
现在来回想一下这个神奇的法术:
1.小木棍 2.左键点击 3.施法成功!
不难想到,既然有点击那么就一定有玩家点击事件,所以就会有 @EventHandler:
- @EventHandler
- public void onPlayerInteractBlock(PlayerInteractEvent evt){
- }
- if(evt.getPlayer().getItemInHand().getType() == Material.STICK){
- }
evt.getPlayer().getItemInHand().getType()就是触发这个事件的玩家手上的物品的类型了~
Material是所有材料的类 所以这段code的意思就是【如果玩家手上的物品是小木棍 那么便执行接下来的code】
仔细思考一下刚才的施法过程 好像还有一个左键点击 也就是说要进行像 ↑↑↑上面↑↑↑ 那样进行判断咯:
- if(evt.getAction() == Action.LEFT_CLICK_BLOCK){
- }
- Block block = (Block) evt.getPlayer().getTargetBlock(null, 4);
- block.setType(Material.GOLD_BLOCK);
使block 等于 玩家的目标砖块 施法距离为4格
获得目标砖块之后再用setType()来改变目标砖块的类型就好了~
应为一开始我们用到了@EventHandler 要使用它的话必须先对事件进行注册,而祖册一般都是在最早的时候执行的,所以注册事件的code就应该放在
onEnable()里咯
- @Override
- public void onEnable() {
- getLogger().info(getName()+"已启动");
- getServer().getPluginManager().registerEvents(this, this);//注册事件
- super.onEnable();
- }
既然有注册 那么对应的就有注销:
- @Override
- public void onDisable() {
-
- HandlerList.unregisterAll();//注销所有事件
- getLogger().info(getName()+"已关闭");
- super.onDisable();
- }
附上源码一份:
- package theGoldenTouch;
- import org.bukkit.Material;
- import org.bukkit.block.Block;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.HandlerList;
- import org.bukkit.event.Listener;
- import org.bukkit.event.block.Action;
- import org.bukkit.event.player.PlayerInteractEvent;
- import org.bukkit.plugin.java.JavaPlugin;
- public class main extends JavaPlugin implements Listener{
-
- @Override
- public void onEnable() {
- getLogger().info(getName()+"已启动");
- getServer().getPluginManager().registerEvents(this, this);//注册事件
- super.onEnable();
- }
-
- @EventHandler
- public void onPlayerInteractBlock(PlayerInteractEvent evt){
- if(evt.getPlayer().getItemInHand().getType() == Material.STICK){
- if(evt.getAction() == Action.LEFT_CLICK_BLOCK){
- Block block = evt.getPlayer().getTargetBlock(null, 4);
- block.setType(Material.GOLD_BLOCK);
- }
-
- }
- }
-
-
-
- @Override
- public void onDisable() {
-
- HandlerList.unregisterAll();//注销所有事件
- getLogger().info(getName()+"已关闭");
- super.onDisable();
- }
- }
*******************************************华丽丽的分割线*******************************************
渴望力量的我们是不会满足于小小的点金术上的!!!
我们想要的是更强大的力量!!



怎么做的前文都有说过,这里直接附上核心code:
- @EventHandler
- public void onPlayerInteractBlock(PlayerInteractEvent evt){
- if(evt.getPlayer().getItemInHand().getType() == Material.STICK){
- Block block = evt.getPlayer().getTargetBlock(null, 4);
- if(evt.getAction() == Action.LEFT_CLICK_BLOCK){
- if(stored_block == null){
- block.setType(Material.GOLD_BLOCK);
- }else{
- block.setType(stored_block);
- }
- }
- if(evt.getAction() == Action.RIGHT_CLICK_BLOCK){
- stored_block = evt.getPlayer().getTargetBlock(null, 4).getType();
- evt.getPlayer().sendMessage("成功获取当前的方块。");
- }
-
- }
- }
以供在onPlayerInteractBlock(PlayerInteractEvent evt)中使用
【虽然这样破坏了函数良好的封装性= =。。不过无所谓了 我们可是大法师!】
最后:
之后的加强法术我没有仔细说明 不过原理前文都有提到过 大家可以自己独立思考一下 毕竟强大的力量总是要付出些什么不是么~
抱歉····粘代码的时候落了几个 } 各位亲们就将就一下吧 = =。。。。
{:10_508:}又见到楼主发帖了.
有机会交流下插件开发呀{:10_512:}
有机会交流下插件开发呀{:10_512:}
caifuniao 发表于 2015-8-2 23:57
又见到楼主发帖了.
有机会交流下插件开发呀
好的好的~加一下q呗 【我ID就是号····】