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:
For the ones which prefer forEach or just Java 8 in general:
Enjoy.
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);
});
}
}
}
Last edited:
