Hot Summer Deals are Here!
Celebrate with up to 99% off on 17,300 resources
02
Days
20
Hours
39
Mins
47
Secs

Post-Passenger client sync fail fixer [For devs]

Status
This thread has been locked.

VawkeNetty

github.com/vawkeio/
Banned
Feedback score
0
Posts
377
Reactions
191
Resources
0
So, I stumbled upon this while messing with some assembly stuff in Minecraft. Passengers on servers don't properly sync with clients, which basically means that if a player goes too far away from an entity with a passenger, the passenger drops off.

Simple fix:
Code:
import net.minecraft.server.v1_9_R2.PacketPlayOutMount;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_9_R2.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;

/**
* Created by Giovanni on 12-7-2016.
*/
public class PassengerPatcher implements Runnable
{

    @Override
    public void run()
    {
        for (Player player : Bukkit.getOnlinePlayers())
        {
            for (Entity entity : player.getEntities())
            {
                if (entity.getPassenger() != null)
                {
                    PacketPlayOutMount packetPlayOutMount = new PacketPlayOutMount(((CraftEntity) entity).getHandle());
                    ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMount);
                }
            }
        }
    }
}

For the ones which prefer forEach or just Java 8 in general:
Code:
import net.minecraft.server.v1_9_R2.PacketPlayOutMount;
import org.bukkit.Bukkit;
import org.bukkit.craftbukkit.v1_9_R2.entity.CraftEntity;
import org.bukkit.craftbukkit.v1_9_R2.entity.CraftPlayer;
import org.bukkit.entity.Entity;
import org.bukkit.entity.Player;

/**
* Created by Giovanni on 12-7-2016.
*/
public class PassengerPatcher implements Runnable
{

    @Override
    public void run()
    {
        for (Player player : Bukkit.getOnlinePlayers())
        {
            player.getWorld().getEntities().stream().filter(entity -> entity.getPassenger() != null).forEach(entity -> {
                PacketPlayOutMount packetPlayOutMount = new PacketPlayOutMount(((CraftEntity) entity).getHandle());
                ((CraftPlayer) player).getHandle().playerConnection.sendPacket(packetPlayOutMount);
            });
        }

    }
}
Enjoy.
 
Last edited:
Status
This thread has been locked.
Top