Domanda

Sto creando un plugin Bukkit e richiede un'illuminazione da aggiungere e voglio essere in grado di eseguire solo il lato server solo in modo che gli utenti non abbiano bisogno di plugin speciali per vedere l'illuminazione.Potrebbe essere fatto?Se non ho sbagliato il rendering l'illuminazione è stato un lato server prima?Mi piacerebbe anche che questa illuminazione sia colorata e le fonti di illuminazione da essere invisibili (l'illuminazione dalle coordinate è accettabile poiché la mappa sarà impostata)

La mia paura, può essere fatto?

È stato utile?

Soluzione

Potresti farlo usando:

p.sendBlockChange(Location, Material, Byte);
.

    .
  • Posizione è la posizione del blocco
  • Materiale è il materiale che vuoi che il giocatore vedesse
  • Il byte è i dati, quindi nel blocco 43:8, utilizzare 8. Se non c'è nessuno, usa solo 0.

Quindi, potresti farlo per inviare l'aggiornamento del blocco a tutti i giocatori:

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

L'unico problema è che le modifiche a blocchi vengono ripristinate quando un giocatore scarica / carica il pezzo in cui si trova il cambio. Quindi, per risolvere questo problema, è possibile pianificare un 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)
.

Allora tutto ciò che devi fare è mettere glowstone nelle posizioni invisibleBlocks, e apparirà come aria, ma (dovrebbe) ancora emettere luce.

Un problema con questo è che se un giocatore cerca di entrare nel blocco, cammineranno a metà strada, poi si allontanterà il teletrasporto. Questo perché il cliente pensa che non ci sia un blocco lì, ma il server sa che c'è, e quando il giocatore entra nel blocco, il server li teletrasporta, facendo un tipo a scatti di movimento.

Se metti questo da qualche parte dove i giocatori non possono entrare in esso, dovresti essere buono!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top