我正在创建一个bukkit插件,它需要添加照明,我只希望能够完成这个服务器端,这样用户就不需要特殊的插件来查看照明了。能办到吗?如果我没有弄错,渲染照明曾经是服务器端的吗?我也希望这种照明是彩色的,光源是看不见的(坐标照明是可以接受的,因为地图将被设置)。
我的恐惧,能做到吗?
发布于 2014-04-17 01:45:57
您可以使用以下方法来完成此操作:
p.sendBlockChange(Location, Material, Byte);43:8中,您将使用8。如果没有,只需使用0。因此,您可以这样做,将块更新发送给所有玩家:
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
}
}唯一的问题是,当播放器卸载/加载更改所在的块时,块更改会被重置。因此,要解决这个问题,您可以安排一个计时器:
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的位置,它会像空气一样出现,但是(应该)仍然发出光。
这样做的一个问题是,如果一个球员试图进入禁区,他们会走一半的路,然后被传送回来。这是因为客户认为那里没有块,但是服务器知道有,当玩家走进块时,服务器将他们传送回来,做出一种不稳定的动作。
如果你把这个放在球员不能进入的地方,你应该是好的!
https://stackoverflow.com/questions/23047590
复制相似问题