切换风格

默认晚霞 雪山 粉色心情 伦敦 花卉 绿野仙踪 加州 白云 星空 薰衣草 城市 简约黑色 龙珠
回复 1

10

主题

17

帖子

479

积分

大区版主

漫步烟雨

Rank: 7Rank: 7Rank: 7

积分
479
人气
25 点
钻石粒
417 粒
贡献
0 点
论坛币
89 个
爱心
0 点

论坛审核会员论坛注册会员

QQ
[1.12.2][ECMA] Chairs —— 让你坐在人该坐的地方[复制链接]
发表于 2019-9-29 11:56:00 | 显示全部楼层 |阅读模式
脚本例子
脚本版本: 0.1
适用版本: 1.12.2 
编写语言: ECMA
最后更新: 2019-09-29
代码版权: 强版权

请注册论坛会员,已便查看高清图片!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
本帖最后由 Rain_Effect 于 2019-9-29 16:27 编辑

一个半月之后的小作品,
后面开始专心研制大作品,
敬请期待。

这次的作品其实很简单,但说真的做起来就有点心烦了。。。
(毕竟毁了两次存档,我还没备份...)

脚本用途很简单,仅仅只是让玩家可以坐在楼梯上,预览图如下:
360截图20190929115027603.jpg

好了,上代码:
var chairs = [
    "minecraftak_stairs",
    "minecraft:stone_stairs",
    "minecraft:brick_stairs",
    "minecraft:stone_brick_stairs",
    "minecraft:nether_brick_stairs",
    "minecraft:sandstone_stairs",
    "minecraft:spruce_stairs",
    "minecraft:birch_stairs",
    "minecraft:jjungle_stairs",
    "minecraft:quartz_stairs",
    "minecraft:acacia_stairs",
    "minecraft:dark_oak_stairs",
    "minecraft:red_sandstone_stairs",
    "minecraft:purpur_stairs"
];

var chairs_msg = {
    blocked: "你不能坐在被方块挡住的地方",
    sitting: "或许有人已经在这里坐下了",
    higher: "你不能坐在比你高的地方"
}

function interact(e){
    if(e.type == 2 && 
       chairs.indexOf(e.target.name) != -1 && 
       e.target.metadata < 4 &&
       e.player.mainhandItem.name == "minecraft:air" && 
       e.player.offhandItem.name == "minecraft:air" && 
       ! e.player.isSneaking()
      ){
        e.setCanceled(true);
        if(!e.target.world.getBlock(e.target.x, e.target.y+1, e.target.z).isAir()) {
            e.API.executeCommand(e.target.world, "/title " + e.player.name + " actionbar {\"text\":\"" + chairs_msg.blocked + "\"}");
            return;
        }
        if(e.player.world.getNearbyEntities(e.target.pos, 0, -1).length != 0) {
            e.API.executeCommand(e.target.world, "/title " + e.player.name + " actionbar {\"text\":\"" + chairs_msg.sitting + "\"}");
            return;
        }
        if(e.player.y < e.target.y-1) {
            e.API.executeCommand(e.target.world, "/title " + e.player.name + " actionbar {\"text\":\"" + chairs_msg.higher + "\"}");
            return;
        }
        var chair = e.player.world.createEntity("armor_stand");
        chair.setPosition(e.target.x+0.5, e.target.y+0.35, e.target.z+0.5);
        chair.spawn();
        var nbt = chair.getEntityNbt();
        nbt.setByte("Small", 1);
        nbt.setByte("NoBasePlate", 1);
        nbt.setByte("Invulnerable", 1);
        nbt.setByte("FallFlying", 1);
        nbt.setByte("Marker", 1);
        nbt.setByte("NoGravity", 1);
        nbt.setByte("Invisible", 1);
        chair.setEntityNbt(nbt);
        chair.addRider(e.player);
        if(e.player.tempdata.has("chair")) e.player.tempdata.get("chair").despawn();
        e.player.tempdata.put("chair", chair);
    }
}

function tick(e){
    if(e.player.tempdata.has("chair")){
        var temp = e.player.tempdata.get("chair");
        if(temp.getRiders().length == 0 || 
           chairs.indexOf(e.player.world.getBlock(temp.blockX, temp.blockY, temp.blockZ).name)==-1
          ){
            temp.despawn();
            e.player.tempdata.remove("chair");
        }
    }
}

function logout(e){
    if(e.player.tempdata.has("chair")){
        e.player.tempdata.get("chair").despawn();
        e.player.tempdata.remove("chair");
    }
}




声明:
  • 你不能转载本帖。
  • 你不能声称作者是自己。


(存档boom的微笑...)

评分

参与人数 1人气 +2 钻石粒 +50 收起 理由
Hueihuea + 2 + 50 支持一下(这么写还是有点小问题吧).

查看全部评分



回复

使用道具 举报

3

主题

6

帖子

150

积分

大区版主

Rank: 7Rank: 7Rank: 7

积分
150
人气
10 点
钻石粒
125 粒
贡献
0 点
论坛币
24 个
爱心
0 点

论坛审核会员论坛注册会员

发表于 2019-11-30 05:01:15 | 显示全部楼层
可以更简单的方式生成工具人盔甲架
使用stringToNbt和createEntityFromNBT
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|自定义NPC脚本中文论坛 ( 蜀ICP备17005795号-3 )

GMT+8, 2020-9-19 08:13 , Processed in 0.086555 second(s), 33 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

返回顶部