Advertisement
Rob5Underscores

Untitled

Jul 22nd, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.17 KB | None | 0 0
  1. package net.modrealms.pistonsponge.utils;
  2.  
  3. import static com.google.common.base.Preconditions.checkNotNull;
  4.  
  5. import com.google.common.collect.Maps;
  6. import net.modrealms.pistoncore.data.dao.PistonPlayerDAO;
  7. import net.modrealms.pistoncore.objects.PistonPlayer;
  8. import net.modrealms.pistonsponge.PistonSponge;
  9. import org.spongepowered.api.Platform;
  10. import org.spongepowered.api.Sponge;
  11. import org.spongepowered.api.entity.living.player.Player;
  12. import org.spongepowered.api.network.ChannelBinding;
  13. import org.spongepowered.api.network.ChannelBuf;
  14. import org.spongepowered.api.network.RawDataListener;
  15. import org.spongepowered.api.network.RemoteConnection;
  16. import org.spongepowered.api.text.Text;
  17. import org.spongepowered.api.text.format.TextColors;
  18.  
  19. import java.util.Map;
  20. import java.util.Optional;
  21. import java.util.concurrent.ConcurrentMap;
  22. import java.util.function.Consumer;
  23. import java.util.function.Predicate;
  24.  
  25. /**
  26. * Created by Rob5Underscores on 24/03/2017.
  27. */
  28. public class BungeePluginMessenger {
  29.  
  30. private ChannelBinding.RawDataChannel channel;
  31. private ChannelListener listener;
  32. private static final PistonSponge pistonSponge = PistonSponge.getPistonSponge();
  33.  
  34. public BungeePluginMessenger(ChannelBinding.RawDataChannel rawDataChannel) {
  35. this.channel = rawDataChannel;
  36. this.listener = new ChannelListener();
  37. this.channel.addListener(this.listener);
  38. }
  39.  
  40. private void checkChannel() {
  41. if (channel == null) {
  42. throw new IllegalStateException("The message channel could not be found!");
  43. }
  44. }
  45. public void sendPlayerShard(Player reference) {
  46. PistonPlayerDAO pistonPlayerDAO = pistonSponge.getPistonCore().getDaoManager().getPistonPlayerDAO();
  47. Optional<PistonPlayer> pistonPlayerOptional = pistonPlayerDAO.getOnlinePistonPlayer(reference.getUniqueId());
  48. if(pistonPlayerOptional.isPresent()) {
  49. pistonSponge.getPistonLogger().debug("Sending player "+ reference.getName() +" to shard!");
  50. //PistonPlayer pistonPlayer = pistonPlayerOptional.get();
  51. //pistonPlayer.setRecentInstance(null);
  52. //pistonPlayerDAO.updateOnlinePistonPlayer(pistonPlayer);
  53. checkChannel();
  54. checkNotNull(reference);
  55. channel.sendTo(Sponge.getServer().getOnlinePlayers().iterator().next(), buf -> buf.writeUTF("shard").writeUTF(reference.getName()));
  56. } else {
  57. reference.sendMessage(Text.builder("Your online player instance is not loaded!").color(TextColors.RED).build());
  58. }
  59. }
  60.  
  61.  
  62. private class ChannelListener implements RawDataListener {
  63. ConcurrentMap<Predicate<ChannelBuf>, Consumer<ChannelBuf>> map = Maps.newConcurrentMap();
  64. @Override
  65. public void handlePayload(ChannelBuf data, RemoteConnection connection, Platform.Type side) {
  66. for (Map.Entry<Predicate<ChannelBuf>, Consumer<ChannelBuf>> entry : map.entrySet()) {
  67. if (entry.getKey().test(data)) {
  68. entry.getValue().accept(data);
  69. map.remove(entry.getKey());
  70. return;
  71. }
  72. }
  73. }
  74. }
  75.  
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement