首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从服务器创建在我的世界内的照明?

从服务器创建在我的世界内的照明?
EN

Stack Overflow用户
提问于 2014-04-13 19:45:34
回答 1查看 979关注 0票数 1

我正在创建一个bukkit插件,它需要添加照明,我只希望能够完成这个服务器端,这样用户就不需要特殊的插件来查看照明了。能办到吗?如果我没有弄错,渲染照明曾经是服务器端的吗?我也希望这种照明是彩色的,光源是看不见的(坐标照明是可以接受的,因为地图将被设置)。

我的恐惧,能做到吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-17 01:45:57

您可以使用以下方法来完成此操作:

代码语言:javascript
复制
p.sendBlockChange(Location, Material, Byte);
  • 位置是块的位置。
  • 材料是你想让玩家看到的材料。
  • 字节是数据,所以在块43:8中,您将使用8。如果没有,只需使用0。

因此,您可以这样做,将块更新发送给所有玩家:

代码语言:javascript
复制
Location[] invisibleBlocks; //all Invisible locations    

for(Player p : Bukkit.getOnlinePlayers()){ //get all online players
  for(Location l : invisibleBlocks){ //get all invisible blocks
    p.sendBlockChange(l, Material.AIR, 0); //send block change of AIR to the player
  }
}

唯一的问题是,当播放器卸载/加载更改所在的块时,块更改会被重置。因此,要解决这个问题,您可以安排一个计时器:

代码语言:javascript
复制
Location[] invisibleBlocks; //set this to the locations of all of the blocks you want to make invisible

plugin.getServer().getScheduler().scheduleSyncDelayedTask(plugin, new Runnable(){
  public void run(){
    for(Player p : Bukkit.getOnlinePlayers()){ //get all online players
      for(Location l : invisibleBlocks){ //get all invisible blocks
        p.sendBlockChange(l, Material.AIR, 0); //send block change of AIR to the player
      }
    }
  }
},100);//delay time is 5 seconds (5 seconds * 20 ticks per second)

然后你要做的就是把萤石放在invisibleBlocks的位置,它会像空气一样出现,但是(应该)仍然发出光。

这样做的一个问题是,如果一个球员试图进入禁区,他们会走一半的路,然后被传送回来。这是因为客户认为那里没有块,但是服务器知道有,当玩家走进块时,服务器将他们传送回来,做出一种不稳定的动作。

如果你把这个放在球员不能进入的地方,你应该是好的!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23047590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档