Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package net.modrealms.pistonsponge.utils;
- import static com.google.common.base.Preconditions.checkNotNull;
- import com.google.common.collect.Maps;
- import net.modrealms.pistoncore.data.dao.PistonPlayerDAO;
- import net.modrealms.pistoncore.objects.PistonPlayer;
- import net.modrealms.pistonsponge.PistonSponge;
- import org.spongepowered.api.Platform;
- import org.spongepowered.api.Sponge;
- import org.spongepowered.api.entity.living.player.Player;
- import org.spongepowered.api.network.ChannelBinding;
- import org.spongepowered.api.network.ChannelBuf;
- import org.spongepowered.api.network.RawDataListener;
- import org.spongepowered.api.network.RemoteConnection;
- import org.spongepowered.api.text.Text;
- import org.spongepowered.api.text.format.TextColors;
- import java.util.Map;
- import java.util.Optional;
- import java.util.concurrent.ConcurrentMap;
- import java.util.function.Consumer;
- import java.util.function.Predicate;
- /**
- * Created by Rob5Underscores on 24/03/2017.
- */
- public class BungeePluginMessenger {
- private ChannelBinding.RawDataChannel channel;
- private ChannelListener listener;
- private static final PistonSponge pistonSponge = PistonSponge.getPistonSponge();
- public BungeePluginMessenger(ChannelBinding.RawDataChannel rawDataChannel) {
- this.channel = rawDataChannel;
- this.listener = new ChannelListener();
- this.channel.addListener(this.listener);
- }
- private void checkChannel() {
- if (channel == null) {
- throw new IllegalStateException("The message channel could not be found!");
- }
- }
- public void sendPlayerShard(Player reference) {
- PistonPlayerDAO pistonPlayerDAO = pistonSponge.getPistonCore().getDaoManager().getPistonPlayerDAO();
- Optional<PistonPlayer> pistonPlayerOptional = pistonPlayerDAO.getOnlinePistonPlayer(reference.getUniqueId());
- if(pistonPlayerOptional.isPresent()) {
- pistonSponge.getPistonLogger().debug("Sending player "+ reference.getName() +" to shard!");
- //PistonPlayer pistonPlayer = pistonPlayerOptional.get();
- //pistonPlayer.setRecentInstance(null);
- //pistonPlayerDAO.updateOnlinePistonPlayer(pistonPlayer);
- checkChannel();
- checkNotNull(reference);
- channel.sendTo(Sponge.getServer().getOnlinePlayers().iterator().next(), buf -> buf.writeUTF("shard").writeUTF(reference.getName()));
- } else {
- reference.sendMessage(Text.builder("Your online player instance is not loaded!").color(TextColors.RED).build());
- }
- }
- private class ChannelListener implements RawDataListener {
- ConcurrentMap<Predicate<ChannelBuf>, Consumer<ChannelBuf>> map = Maps.newConcurrentMap();
- @Override
- public void handlePayload(ChannelBuf data, RemoteConnection connection, Platform.Type side) {
- for (Map.Entry<Predicate<ChannelBuf>, Consumer<ChannelBuf>> entry : map.entrySet()) {
- if (entry.getKey().test(data)) {
- entry.getValue().accept(data);
- map.remove(entry.getKey());
- return;
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement