mirror of
https://github.com/ViaVersion/ViaVersion.git
synced 2025-11-18 19:04:15 +01:00
Don't run movement transmitter provider in netty thread
This commit is contained in:
parent
16ba011243
commit
695534e8a8
@ -114,14 +114,23 @@ public class BukkitViaMovementTransmitter extends MovementTransmitterProvider {
|
||||
}
|
||||
} else {
|
||||
ChannelHandlerContext context = PipelineUtil.getContextBefore("decoder", info.getChannel().pipeline());
|
||||
if (context != null) {
|
||||
if (info.get(MovementTracker.class).isGround()) {
|
||||
if (context == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
info.getChannel().eventLoop().execute(() -> {
|
||||
MovementTracker movementTracker = info.get(MovementTracker.class);
|
||||
if (movementTracker == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (movementTracker.isGround()) {
|
||||
context.fireChannelRead(getGroundPacket());
|
||||
} else {
|
||||
context.fireChannelRead(getFlyingPacket());
|
||||
}
|
||||
info.get(MovementTracker.class).incrementIdlePacket();
|
||||
}
|
||||
movementTracker.incrementIdlePacket();
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -31,19 +31,21 @@ import java.util.logging.Level;
|
||||
public class MovementTransmitterProvider implements Provider {
|
||||
|
||||
public void sendPlayer(UserConnection userConnection) {
|
||||
if (userConnection.getProtocolInfo().getClientState() != State.PLAY || !userConnection.getEntityTracker(Protocol1_8To1_9.class).hasClientEntityId()) {
|
||||
return;
|
||||
}
|
||||
userConnection.getChannel().eventLoop().execute(() -> {
|
||||
if (userConnection.getProtocolInfo().getClientState() != State.PLAY || !userConnection.getEntityTracker(Protocol1_8To1_9.class).hasClientEntityId()) {
|
||||
return;
|
||||
}
|
||||
|
||||
final MovementTracker movementTracker = userConnection.get(MovementTracker.class);
|
||||
movementTracker.incrementIdlePacket();
|
||||
final MovementTracker movementTracker = userConnection.get(MovementTracker.class);
|
||||
movementTracker.incrementIdlePacket();
|
||||
|
||||
try {
|
||||
final PacketWrapper playerMovement = PacketWrapper.create(ServerboundPackets1_8.MOVE_PLAYER_STATUS_ONLY, userConnection);
|
||||
playerMovement.write(Types.BOOLEAN, movementTracker.isGround()); // on ground
|
||||
playerMovement.sendToServer(Protocol1_8To1_9.class);
|
||||
} catch (Throwable e) {
|
||||
Via.getPlatform().getLogger().log(Level.WARNING, "Failed to send player movement packet", e);
|
||||
}
|
||||
try {
|
||||
final PacketWrapper playerMovement = PacketWrapper.create(ServerboundPackets1_8.MOVE_PLAYER_STATUS_ONLY, userConnection);
|
||||
playerMovement.write(Types.BOOLEAN, movementTracker.isGround()); // on ground
|
||||
playerMovement.sendToServer(Protocol1_8To1_9.class);
|
||||
} catch (Throwable e) {
|
||||
Via.getPlatform().getLogger().log(Level.WARNING, "Failed to send player movement packet", e);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,21 +19,27 @@ package com.viaversion.viaversion.protocols.v1_8to1_9.task;
|
||||
|
||||
import com.viaversion.viaversion.api.Via;
|
||||
import com.viaversion.viaversion.api.connection.UserConnection;
|
||||
import com.viaversion.viaversion.connection.StorableObjectTask;
|
||||
import com.viaversion.viaversion.protocols.v1_8to1_9.provider.MovementTransmitterProvider;
|
||||
import com.viaversion.viaversion.protocols.v1_8to1_9.storage.MovementTracker;
|
||||
|
||||
public final class IdlePacketTask extends StorableObjectTask<MovementTracker> {
|
||||
|
||||
public IdlePacketTask() {
|
||||
super(MovementTracker.class);
|
||||
}
|
||||
public final class IdlePacketTask implements Runnable {
|
||||
|
||||
@Override
|
||||
public void run(final UserConnection connection, final MovementTracker storableObject) {
|
||||
final long nextIdleUpdate = storableObject.getNextIdlePacket();
|
||||
if (nextIdleUpdate <= System.currentTimeMillis()) {
|
||||
Via.getManager().getProviders().get(MovementTransmitterProvider.class).sendPlayer(connection);
|
||||
public void run() {
|
||||
for (final UserConnection connection : Via.getManager().getConnectionManager().getConnections()) {
|
||||
if (!connection.isActive()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final MovementTracker tracker = connection.get(MovementTracker.class);
|
||||
if (tracker == null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
final long nextIdleUpdate = tracker.getNextIdlePacket();
|
||||
if (nextIdleUpdate <= System.currentTimeMillis()) {
|
||||
Via.getManager().getProviders().get(MovementTransmitterProvider.class).sendPlayer(connection);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user