Question

I'm creating a bukkit plugin and it requires lighting to be added and I want to be able to accomplish this server side only so that users don't need special plugins to see the lighting. Could this be done? If I'm not mistaken rendering lighting has been server side before? I would also like this lighting to be colored and lighting sources to be invisible (lighting from coordinates is acceptable since the map will be set)

My fear, can it be done?

Was it helpful?

Solution

You could do this using:

p.sendBlockChange(Location, Material, Byte);
  • Location is the location of the block
  • Material is the material that you want the player to see
  • the Byte is the data, so in the block 43:8, you would use 8. If there is none, just use 0.

So, you could do this to send the block update to all players:

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
  }
}

The only problem is that block changes get reset when a player unloads/loads the chunk that the change is in. So, to fix this, you could schedule a timer:

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)

Then all you need to do is put glowstone in the the invisibleBlocks locations, and it will appear as air, but (should) still emit light.

One problem with this is that if a player tries to walk into the block, they will walk in half way, then get teleported back out. This is because the client thinks there isn't a block there, yet the server knows that there is, and when the player walks into the block, the server teleports them back out, making a jerky kind of motion.

If you put this somewhere where players can't walk into it, you should be good!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top