diff --git a/api/src/main/java/com/viaversion/viaversion/api/ViaAPI.java b/api/src/main/java/com/viaversion/viaversion/api/ViaAPI.java index 39fdea8a3..52aa3358a 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/ViaAPI.java +++ b/api/src/main/java/com/viaversion/viaversion/api/ViaAPI.java @@ -52,7 +52,7 @@ public interface ViaAPI { * @return API version incremented with meaningful API changes */ default int apiVersion() { - return 1; + return 2; } /** diff --git a/api/src/main/java/com/viaversion/viaversion/api/connection/UserConnection.java b/api/src/main/java/com/viaversion/viaversion/api/connection/UserConnection.java index 19fb593e0..e35990000 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/connection/UserConnection.java +++ b/api/src/main/java/com/viaversion/viaversion/api/connection/UserConnection.java @@ -96,21 +96,18 @@ public interface UserConnection { void clearStoredObjects(); /** - * Send a raw packet to the player. + * Sends a raw packet to the connection on the current thread. * - * @param packet The raw packet to send - * @param currentThread Should it run in the same thread + * @param packet raw packet to send */ - void sendRawPacket(ByteBuf packet, boolean currentThread); + void sendRawPacket(ByteBuf packet); /** - * Send a raw packet to the player (netty thread). + * Send a raw packet to the player, submitted to the netty event loop. * - * @param packet The packet to send + * @param packet raw packet to send */ - default void sendRawPacket(ByteBuf packet) { - sendRawPacket(packet, false); - } + void scheduleSendRawPacket(ByteBuf packet); /** * Send a raw packet to the player with returning the future. @@ -135,21 +132,18 @@ public interface UserConnection { void disconnect(String reason); /** - * Sends a raw packet to the server. + * Sends a raw packet to the server on the current thread. * - * @param packet Raw packet to be sent - * @param currentThread If {@code true} executes immediately, {@code false} submits a task to EventLoop + * @param packet raw packet to be sent */ - void sendRawPacketToServer(ByteBuf packet, boolean currentThread); + void sendRawPacketToServer(ByteBuf packet); /** - * Sends a raw packet to the server. It will submit a task to EventLoop. + * Sends a raw packet to the server, submitted to the netty event loop. * - * @param packet Raw packet to be sent + * @param packet raw packet to be sent */ - default void sendRawPacketToServer(ByteBuf packet) { - sendRawPacketToServer(packet, false); - } + void scheduleSendRawPacketToServer(ByteBuf packet); /** * Monitors serverbound packets and returns whether a packet can/should be processed. diff --git a/api/src/main/java/com/viaversion/viaversion/api/protocol/packet/PacketWrapper.java b/api/src/main/java/com/viaversion/viaversion/api/protocol/packet/PacketWrapper.java index 4c12750db..5a3b1a0e9 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/protocol/packet/PacketWrapper.java +++ b/api/src/main/java/com/viaversion/viaversion/api/protocol/packet/PacketWrapper.java @@ -168,38 +168,50 @@ public interface PacketWrapper { void clearPacket(); /** - * Send this packet to the associated user. - * Be careful not to send packets twice. - * (Sends it after current) + * Send this packet to the connection on the current thread, skipping the current protocol. * - * @param packetProtocol The protocol version of the packet. - * @param skipCurrentPipeline Skip the current pipeline + * @param protocol protocol to be sent through * @throws Exception if it fails to write */ - void send(Class packetProtocol, boolean skipCurrentPipeline) throws Exception; + default void send(Class protocol) throws Exception { + send(protocol, true); + } /** - * Send this packet to the associated user. - * Be careful not to send packets twice. - * (Sends it after current) + * Send this packet to the connection on the current thread. * - * @param packetProtocol The protocol version of the packet. - * @param skipCurrentPipeline Skip the current pipeline - * @param currentThread Run in the same thread + * @param protocol protocol to be sent through + * @param skipCurrentPipeline whether transformation of the current protocol should be skipped * @throws Exception if it fails to write */ - void send(Class packetProtocol, boolean skipCurrentPipeline, boolean currentThread) throws Exception; + void send(Class protocol, boolean skipCurrentPipeline) throws Exception; /** - * Send this packet to the associated user. - * Be careful not to send packets twice. - * (Sends it after current) + * Send this packet to the connection, submitted to netty's event loop and skipping the current protocol. * - * @param packetProtocol The protocol version of the packet. + * @param protocol protocol to be sent through * @throws Exception if it fails to write */ - default void send(Class packetProtocol) throws Exception { - send(packetProtocol, true); + default void scheduleSend(Class protocol) throws Exception { + scheduleSend(protocol, true); + } + + /** + * Send this packet to the connection, submitted to netty's event loop. + * + * @param protocol protocol to be sent through + * @param skipCurrentPipeline whether transformation of the current protocol should be skipped + * @throws Exception if it fails to write + */ + void scheduleSend(Class protocol, boolean skipCurrentPipeline) throws Exception; + + @Deprecated + default void send(Class protocol, boolean skipCurrentPipeline, boolean currentThread) throws Exception { + if (currentThread) { + send(protocol, skipCurrentPipeline); + } else { + scheduleSend(protocol, skipCurrentPipeline); + } } /** @@ -303,21 +315,50 @@ public interface PacketWrapper { void sendToServer() throws Exception; /** - * Send this packet to the server. + * Send this packet to the server on the current thread, skipping the current protocol. * - * @param packetProtocol The protocol version of the packet. - * @param skipCurrentPipeline Skip the current pipeline - * @param currentThread Run in the same thread + * @param protocol protocol to be sent through * @throws Exception if it fails to write */ - void sendToServer(Class packetProtocol, boolean skipCurrentPipeline, boolean currentThread) throws Exception; - - default void sendToServer(Class packetProtocol, boolean skipCurrentPipeline) throws Exception { - sendToServer(packetProtocol, skipCurrentPipeline, false); + default void sendToServer(Class protocol) throws Exception { + sendToServer(protocol, true); } - default void sendToServer(Class packetProtocol) throws Exception { - sendToServer(packetProtocol, true); + /** + * Send this packet to the server on the current thread. + * + * @param protocol protocol to be sent through + * @param skipCurrentPipeline whether transformation of the current protocol should be skipped + * @throws Exception if it fails to write + */ + void sendToServer(Class protocol, boolean skipCurrentPipeline) throws Exception; + + /** + * Send this packet to the server, submitted to netty's event loop and skipping the current protocol. + * + * @param protocol protocol to be sent through + * @throws Exception if it fails to write + */ + default void scheduleSendToServer(Class protocol) throws Exception { + scheduleSendToServer(protocol, true); + } + + /** + * Send this packet to the server, submitted to netty's event loop. + * + * @param protocol protocol to be sent through + * @param skipCurrentPipeline whether transformation of the current protocol should be skipped + * @throws Exception if it fails to write + */ + void scheduleSendToServer(Class protocol, boolean skipCurrentPipeline) throws Exception; + + @Deprecated + default void sendToServer(Class protocol, boolean skipCurrentPipeline, boolean currentThread) throws Exception { + if (currentThread) { + sendToServer(protocol, skipCurrentPipeline); + } else { + scheduleSendToServer(protocol, skipCurrentPipeline); + } } /** diff --git a/bukkit-legacy/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_9to1_8/ArmorListener.java b/bukkit-legacy/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_9to1_8/ArmorListener.java index ca94f7c3b..46ec0df0e 100644 --- a/bukkit-legacy/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_9to1_8/ArmorListener.java +++ b/bukkit-legacy/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_9to1_8/ArmorListener.java @@ -69,7 +69,7 @@ public class ArmorListener extends ViaBukkitListener { wrapper.write(Type.DOUBLE, (double) armor); // the modifier value wrapper.write(Type.BYTE, (byte) 0);// the modifier operation, 0 is add number - wrapper.send(Protocol1_9To1_8.class); + wrapper.scheduleSend(Protocol1_9To1_8.class); } catch (Exception e) { e.printStackTrace(); } diff --git a/bukkit-legacy/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_9to1_8/DeathListener.java b/bukkit-legacy/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_9to1_8/DeathListener.java index 8920867fa..43eec8cb1 100644 --- a/bukkit-legacy/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_9to1_8/DeathListener.java +++ b/bukkit-legacy/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_9to1_8/DeathListener.java @@ -65,7 +65,7 @@ public class DeathListener extends ViaBukkitListener { wrapper.write(Type.INT, p.getEntityId()); // Entity ID Protocol1_9To1_8.FIX_JSON.write(wrapper, msg); // Message - wrapper.send(Protocol1_9To1_8.class); + wrapper.scheduleSend(Protocol1_9To1_8.class); } catch (Exception e) { e.printStackTrace(); } diff --git a/bukkit/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_15to1_14_4/EntityToggleGlideListener.java b/bukkit/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_15to1_14_4/EntityToggleGlideListener.java index b89f2df03..3734f1fe6 100644 --- a/bukkit/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_15to1_14_4/EntityToggleGlideListener.java +++ b/bukkit/src/main/java/com/viaversion/viaversion/bukkit/listeners/protocol1_15to1_14_4/EntityToggleGlideListener.java @@ -83,7 +83,7 @@ public class EntityToggleGlideListener extends ViaBukkitListener { // leave 0x80 as 0 to stop gliding packet.write(Types1_14.METADATA_LIST, Arrays.asList(new Metadata(0, MetaType1_14.Byte, bitmask))); - packet.send(Protocol1_15To1_14_4.class); + packet.scheduleSend(Protocol1_15To1_14_4.class); } catch (Exception e) { e.printStackTrace(); } diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeServerHandler.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeServerHandler.java index d5e13288a..accffa530 100644 --- a/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeServerHandler.java +++ b/bungee/src/main/java/com/viaversion/viaversion/bungee/handlers/BungeeServerHandler.java @@ -172,7 +172,7 @@ public class BungeeServerHandler implements Listener { PacketWrapper wrapper = PacketWrapper.create(0x0C, null, user); wrapper.write(Type.UUID, uuid); wrapper.write(Type.VAR_INT, 1); // remove - wrapper.send(Protocol1_9To1_8.class, true, true); + wrapper.send(Protocol1_9To1_8.class); } } storage.getBossbar().clear(); diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/listeners/ElytraPatch.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/listeners/ElytraPatch.java index fee202dd5..af76b06e0 100644 --- a/bungee/src/main/java/com/viaversion/viaversion/bungee/listeners/ElytraPatch.java +++ b/bungee/src/main/java/com/viaversion/viaversion/bungee/listeners/ElytraPatch.java @@ -53,7 +53,7 @@ public class ElytraPatch implements Listener { wrapper.write(Type.VAR_INT, entityId); wrapper.write(Types1_9.METADATA_LIST, Collections.singletonList(new Metadata(0, MetaType1_9.Byte, (byte) 0))); - wrapper.send(Protocol1_9To1_8.class); + wrapper.scheduleSend(Protocol1_9To1_8.class); } } catch (Exception e) { e.printStackTrace(); diff --git a/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeMovementTransmitter.java b/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeMovementTransmitter.java index 0909bb78a..d49031ab4 100644 --- a/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeMovementTransmitter.java +++ b/bungee/src/main/java/com/viaversion/viaversion/bungee/providers/BungeeMovementTransmitter.java @@ -41,7 +41,7 @@ public class BungeeMovementTransmitter extends MovementTransmitterProvider { PacketWrapper wrapper = PacketWrapper.create(0x03, null, userConnection); wrapper.write(Type.BOOLEAN, userConnection.get(MovementTracker.class).isGround()); try { - wrapper.sendToServer(Protocol1_9To1_8.class); + wrapper.scheduleSendToServer(Protocol1_9To1_8.class); } catch (Exception e) { e.printStackTrace(); } diff --git a/common/src/main/java/com/viaversion/viaversion/ViaAPIBase.java b/common/src/main/java/com/viaversion/viaversion/ViaAPIBase.java index efa182515..243f90485 100644 --- a/common/src/main/java/com/viaversion/viaversion/ViaAPIBase.java +++ b/common/src/main/java/com/viaversion/viaversion/ViaAPIBase.java @@ -67,7 +67,7 @@ public abstract class ViaAPIBase implements ViaAPI { } UserConnection user = Via.getManager().getConnectionManager().getConnectedClient(uuid); - user.sendRawPacket(packet); + user.scheduleSendRawPacket(packet); } @Override diff --git a/common/src/main/java/com/viaversion/viaversion/connection/UserConnectionImpl.java b/common/src/main/java/com/viaversion/viaversion/connection/UserConnectionImpl.java index 04c678ad0..ce94d0127 100644 --- a/common/src/main/java/com/viaversion/viaversion/connection/UserConnectionImpl.java +++ b/common/src/main/java/com/viaversion/viaversion/connection/UserConnectionImpl.java @@ -117,7 +117,16 @@ public class UserConnectionImpl implements UserConnection { } @Override - public void sendRawPacket(final ByteBuf packet, boolean currentThread) { + public void sendRawPacket(ByteBuf packet) { + sendRawPacket(packet, true); + } + + @Override + public void scheduleSendRawPacket(ByteBuf packet) { + sendRawPacket(packet, false); + } + + private void sendRawPacket(final ByteBuf packet, boolean currentThread) { Runnable act; if (clientSide) { // We'll just assume that Via decoder isn't wrapping the original decoder @@ -141,22 +150,14 @@ public class UserConnectionImpl implements UserConnection { @Override public ChannelFuture sendRawPacketFuture(final ByteBuf packet) { if (clientSide) { - return sendRawPacketFutureClientSide(packet); + // Assume that decoder isn't wrapping + getChannel().pipeline().context(Via.getManager().getInjector().getDecoderName()).fireChannelRead(packet); + return getChannel().newSucceededFuture(); } else { - return sendRawPacketFutureServerSide(packet); + return channel.pipeline().context(Via.getManager().getInjector().getEncoderName()).writeAndFlush(packet); } } - private ChannelFuture sendRawPacketFutureServerSide(final ByteBuf packet) { - return channel.pipeline().context(Via.getManager().getInjector().getEncoderName()).writeAndFlush(packet); - } - - private ChannelFuture sendRawPacketFutureClientSide(final ByteBuf packet) { - // Assume that decoder isn't wrapping - getChannel().pipeline().context(Via.getManager().getInjector().getDecoderName()).fireChannelRead(packet); - return getChannel().newSucceededFuture(); - } - @Override public PacketTracker getPacketTracker() { return packetTracker; @@ -175,11 +176,20 @@ public class UserConnectionImpl implements UserConnection { } @Override - public void sendRawPacketToServer(final ByteBuf packet, boolean currentThread) { + public void sendRawPacketToServer(ByteBuf packet) { if (clientSide) { - sendRawPacketToServerClientSide(packet, currentThread); + sendRawPacketToServerClientSide(packet, true); } else { - sendRawPacketToServerServerSide(packet, currentThread); + sendRawPacketToServerServerSide(packet, true); + } + } + + @Override + public void scheduleSendRawPacketToServer(ByteBuf packet) { + if (clientSide) { + sendRawPacketToServerClientSide(packet, false); + } else { + sendRawPacketToServerServerSide(packet, false); } } diff --git a/common/src/main/java/com/viaversion/viaversion/legacy/bossbar/CommonBoss.java b/common/src/main/java/com/viaversion/viaversion/legacy/bossbar/CommonBoss.java index 9e23f652e..848a21ff2 100644 --- a/common/src/main/java/com/viaversion/viaversion/legacy/bossbar/CommonBoss.java +++ b/common/src/main/java/com/viaversion/viaversion/legacy/bossbar/CommonBoss.java @@ -227,7 +227,7 @@ public class CommonBoss implements BossBar { return; } try { - wrapper.send(Protocol1_9To1_8.class); + wrapper.scheduleSend(Protocol1_9To1_8.class); } catch (Exception e) { e.printStackTrace(); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocol/packet/PacketWrapperImpl.java b/common/src/main/java/com/viaversion/viaversion/protocol/packet/PacketWrapperImpl.java index 5a12da332..fede3ab16 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocol/packet/PacketWrapperImpl.java +++ b/common/src/main/java/com/viaversion/viaversion/protocol/packet/PacketWrapperImpl.java @@ -228,20 +228,28 @@ public class PacketWrapperImpl implements PacketWrapper { } @Override - public void send(Class packetProtocol, boolean skipCurrentPipeline) throws Exception { - send(packetProtocol, skipCurrentPipeline, false); + public void send(Class protocol, boolean skipCurrentPipeline) throws Exception { + send0(protocol, skipCurrentPipeline, true); } @Override - public void send(Class packetProtocol, boolean skipCurrentPipeline, boolean currentThread) throws Exception { - if (!isCancelled()) { - try { - ByteBuf output = constructPacket(packetProtocol, skipCurrentPipeline, Direction.CLIENTBOUND); - user().sendRawPacket(output, currentThread); - } catch (Exception e) { - if (!PipelineUtil.containsCause(e, CancelException.class)) { - throw e; - } + public void scheduleSend(Class protocol, boolean skipCurrentPipeline) throws Exception { + send0(protocol, skipCurrentPipeline, false); + } + + private void send0(Class protocol, boolean skipCurrentPipeline, boolean currentThread) throws Exception { + if (isCancelled()) return; + + try { + ByteBuf output = constructPacket(protocol, skipCurrentPipeline, Direction.CLIENTBOUND); + if (currentThread) { + user().sendRawPacket(output); + } else { + user().scheduleSendRawPacket(output); + } + } catch (Exception e) { + if (!PipelineUtil.containsCause(e, CancelException.class)) { + throw e; } } } @@ -301,15 +309,15 @@ public class PacketWrapperImpl implements PacketWrapper { @Override @Deprecated public void send() throws Exception { - if (!isCancelled()) { - // Send - ByteBuf output = inputBuffer == null ? user().getChannel().alloc().buffer() : inputBuffer.alloc().buffer(); - try { - writeToBuffer(output); - user().sendRawPacket(output.retain()); - } finally { - output.release(); - } + if (isCancelled()) return; + + // Send + ByteBuf output = inputBuffer == null ? user().getChannel().alloc().buffer() : inputBuffer.alloc().buffer(); + try { + writeToBuffer(output); + user().sendRawPacket(output.retain()); + } finally { + output.release(); } } @@ -384,28 +392,40 @@ public class PacketWrapperImpl implements PacketWrapper { @Override @Deprecated public void sendToServer() throws Exception { - if (!isCancelled()) { - ByteBuf output = inputBuffer == null ? user().getChannel().alloc().buffer() : inputBuffer.alloc().buffer(); - try { - writeToBuffer(output); + if (isCancelled()) return; - user().sendRawPacketToServer(output.retain(), true); - } finally { - output.release(); - } + ByteBuf output = inputBuffer == null ? user().getChannel().alloc().buffer() : inputBuffer.alloc().buffer(); + try { + writeToBuffer(output); + user().sendRawPacketToServer(output.retain()); + } finally { + output.release(); } } @Override - public void sendToServer(Class packetProtocol, boolean skipCurrentPipeline, boolean currentThread) throws Exception { - if (!isCancelled()) { - try { - ByteBuf output = constructPacket(packetProtocol, skipCurrentPipeline, Direction.SERVERBOUND); - user().sendRawPacketToServer(output, currentThread); - } catch (Exception e) { - if (!PipelineUtil.containsCause(e, CancelException.class)) { - throw e; - } + public void sendToServer(Class protocol, boolean skipCurrentPipeline) throws Exception { + sendToServer0(protocol, skipCurrentPipeline, true); + } + + @Override + public void scheduleSendToServer(Class protocol, boolean skipCurrentPipeline) throws Exception { + sendToServer0(protocol, skipCurrentPipeline, false); + } + + private void sendToServer0(Class protocol, boolean skipCurrentPipeline, boolean currentThread) throws Exception { + if (isCancelled()) return; + + try { + ByteBuf output = constructPacket(protocol, skipCurrentPipeline, Direction.SERVERBOUND); + if (currentThread) { + user().sendRawPacketToServer(output); + } else { + user().scheduleSendRawPacketToServer(output); + } + } catch (Exception e) { + if (!PipelineUtil.containsCause(e, CancelException.class)) { + throw e; } } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/Protocol1_13To1_12_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/Protocol1_13To1_12_2.java index aa6141f9f..c2d607332 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/Protocol1_13To1_12_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/Protocol1_13To1_12_2.java @@ -561,7 +561,7 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol { // Manually send the packet - wrapper.send(Protocol1_14To1_13_2.class, true, true); + wrapper.send(Protocol1_14To1_13_2.class); wrapper.cancel(); // View distance has to be sent after the join packet @@ -388,7 +388,7 @@ public class WorldPackets { }); handler(wrapper -> { // Manually send the packet and update the viewdistance after - wrapper.send(Protocol1_14To1_13_2.class, true, true); + wrapper.send(Protocol1_14To1_13_2.class); wrapper.cancel(); sendViewDistancePacket(wrapper.user()); }); @@ -406,7 +406,7 @@ public class WorldPackets { private static void sendViewDistancePacket(UserConnection connection) throws Exception { PacketWrapper setViewDistance = PacketWrapper.create(ClientboundPackets1_14.UPDATE_VIEW_DISTANCE, null, connection); setViewDistance.write(Type.VAR_INT, WorldPackets.SERVERSIDE_VIEW_DISTANCE); - setViewDistance.send(Protocol1_14To1_13_2.class, true, true); + setViewDistance.send(Protocol1_14To1_13_2.class); } private static long[] encodeHeightMap(int[] heightMap) { diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/packets/EntityPackets.java index 26ef1d8f0..85c1bf5e8 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/packets/EntityPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/packets/EntityPackets.java @@ -88,7 +88,7 @@ public class EntityPackets { List metadata = wrapper.read(Types1_14.METADATA_LIST); // Send the spawn packet manually - wrapper.send(Protocol1_15To1_14_4.class, true, true); + wrapper.send(Protocol1_15To1_14_4.class); wrapper.cancel(); // Handle meta @@ -97,7 +97,7 @@ public class EntityPackets { PacketWrapper metadataPacket = PacketWrapper.create(ClientboundPackets1_15.ENTITY_METADATA, wrapper.user()); metadataPacket.write(Type.VAR_INT, entityId); metadataPacket.write(Types1_14.METADATA_LIST, metadata); - metadataPacket.send(Protocol1_15To1_14_4.class, true, true); + metadataPacket.send(Protocol1_15To1_14_4.class); } public static int getNewEntityId(int oldId) { diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/packets/WorldPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/packets/WorldPackets.java index a8848f1a4..a3384e08d 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/packets/WorldPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/packets/WorldPackets.java @@ -101,7 +101,7 @@ public class WorldPackets { newPacket.write(Type.LONG, chunkPosition | (chunkY & 0xFFFFFL)); newPacket.write(Type.BOOLEAN, false); // Ignore light updates newPacket.write(Type.VAR_LONG_BLOCK_CHANGE_RECORD_ARRAY, sectionRecord.toArray(EMPTY_RECORDS)); - newPacket.send(Protocol1_16_2To1_16_1.class, true, true); + newPacket.send(Protocol1_16_2To1_16_1.class); } }); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java index cb034c0fc..0a340a4e5 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java @@ -53,7 +53,7 @@ public class EntityPackets { // Send individual remove packets PacketWrapper newPacket = wrapper.create(ClientboundPackets1_17.REMOVE_ENTITY); newPacket.write(Type.VAR_INT, entityId); - newPacket.send(Protocol1_17To1_16_4.class, true, true); + newPacket.send(Protocol1_17To1_16_4.class); } }); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/InventoryPackets.java index e7cfe7360..278707001 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/InventoryPackets.java @@ -105,7 +105,7 @@ public class InventoryPackets { PacketWrapper pingPacket = wrapper.create(ClientboundPackets1_17.PING); pingPacket.write(Type.INT, id); - pingPacket.send(Protocol1_17To1_16_4.class, true, true); + pingPacket.send(Protocol1_17To1_16_4.class); } wrapper.cancel(); @@ -128,7 +128,7 @@ public class InventoryPackets { packet.write(Type.UNSIGNED_BYTE, (short) inventoryId); packet.write(Type.SHORT, (short) confirmationId); packet.write(Type.BYTE, (byte) 1); // Accept - packet.sendToServer(Protocol1_17To1_16_4.class, true, true); + packet.sendToServer(Protocol1_17To1_16_4.class); } wrapper.cancel(); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/WorldPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/WorldPackets.java index 19376b8d8..17a5a2ba0 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/WorldPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/WorldPackets.java @@ -231,7 +231,7 @@ public class WorldPackets { } blockChangePacket.write(Type.VAR_LONG_BLOCK_CHANGE_RECORD_ARRAY, blockChangeRecords); - blockChangePacket.send(Protocol1_17To1_16_4.class, true, true); + blockChangePacket.send(Protocol1_17To1_16_4.class); } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/PlayerPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/PlayerPackets.java index a5cc4caaa..5966bab7e 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/PlayerPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/PlayerPackets.java @@ -148,7 +148,7 @@ public class PlayerPackets { if (mode == 4) { // since removing add to auto team // Workaround for packet order issue - wrapper.send(Protocol1_9To1_8.class, true, true); + wrapper.send(Protocol1_9To1_8.class); wrapper.cancel(); entityTracker.sendTeamPacket(true, true); entityTracker.setCurrentTeam("viaversion"); @@ -168,7 +168,7 @@ public class PlayerPackets { && teamName.equals(entityTracker.getCurrentTeam())) { // team was removed // Workaround for packet order issue - wrapper.send(Protocol1_9To1_8.class, true, true); + wrapper.send(Protocol1_9To1_8.class); wrapper.cancel(); entityTracker.sendTeamPacket(true, true); entityTracker.setCurrentTeam("viaversion"); @@ -226,7 +226,7 @@ public class PlayerPackets { if (Via.getConfig().isAutoTeam()) { entityTracker.setAutoTeam(true); // Workaround for packet order issue - wrapper.send(Protocol1_9To1_8.class, true, true); + wrapper.send(Protocol1_9To1_8.class); wrapper.cancel(); entityTracker.sendTeamPacket(true, true); entityTracker.setCurrentTeam("viaversion"); @@ -437,7 +437,7 @@ public class PlayerPackets { (short) (wrapper.get(Type.UNSIGNED_BYTE, 0).intValue() | 0x80) ); } - wrapper.sendToServer(Protocol1_9To1_8.class, true, true); + wrapper.sendToServer(Protocol1_9To1_8.class); wrapper.cancel(); Via.getManager().getProviders().get(MainHandProvider.class).setMainHand(wrapper.user(), hand); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/SpawnPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/SpawnPackets.java index 56a89895b..1e78f7006 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/SpawnPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/SpawnPackets.java @@ -311,7 +311,7 @@ public class SpawnPackets { packet.write(Type.VAR_INT, 0); packet.write(Type.ITEM, new Item(item, (byte) 1, (short) 0, null)); try { - packet.send(Protocol1_9To1_8.class, true, true); + packet.send(Protocol1_9To1_8.class); } catch (Exception e) { e.printStackTrace(); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/WorldPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/WorldPackets.java index fca13b6ca..ef9ed9583 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/WorldPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/packets/WorldPackets.java @@ -189,7 +189,7 @@ public class WorldPackets { // Send through this protocol again PacketWrapper chunkPacket = PacketWrapper.create(ClientboundPackets1_8.CHUNK_DATA, buffer, wrapper.user()); - chunkPacket.send(Protocol1_9To1_8.class, false, true); + chunkPacket.send(Protocol1_9To1_8.class, false); } finally { if (buffer != null) { buffer.release(); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/providers/CommandBlockProvider.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/providers/CommandBlockProvider.java index f4209bf19..c2bf6647e 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/providers/CommandBlockProvider.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/providers/CommandBlockProvider.java @@ -63,7 +63,7 @@ public class CommandBlockProvider implements Provider { wrapper.write(Type.INT, tracker.getProvidedEntityId()); // Entity ID wrapper.write(Type.BYTE, (byte) 26); // Hardcoded op permission level - wrapper.send(Protocol1_9To1_8.class); + wrapper.scheduleSend(Protocol1_9To1_8.class); user.get(CommandBlockStorage.class).setPermissions(true); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java index d8d33347b..485674909 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/storage/EntityTracker1_9.java @@ -93,7 +93,7 @@ public class EntityTracker1_9 extends EntityTrackerBase { wrapper.write(Type.VAR_INT, 1); // slot wrapper.write(Type.ITEM, this.itemInSecondHand = item); try { - wrapper.send(Protocol1_9To1_8.class); + wrapper.scheduleSend(Protocol1_9To1_8.class); } catch (Exception e) { e.printStackTrace(); } @@ -239,7 +239,7 @@ public class EntityTracker1_9 extends EntityTrackerBase { wrapper.write(Type.SHORT, (short) (128D * (Via.getConfig().getHologramYOffset() * 32D))); wrapper.write(Type.SHORT, (short) 0); wrapper.write(Type.BOOLEAN, true); - wrapper.send(Protocol1_9To1_8.class, true, false); + wrapper.scheduleSend(Protocol1_9To1_8.class); } catch (Exception ignored) { } } @@ -317,7 +317,11 @@ public class EntityTracker1_9 extends EntityTrackerBase { } teamExists = add; try { - wrapper.send(Protocol1_9To1_8.class, true, now); + if (now) { + wrapper.send(Protocol1_9To1_8.class); + } else { + wrapper.scheduleSend(Protocol1_9To1_8.class); + } } catch (Exception e) { e.printStackTrace(); } @@ -343,7 +347,7 @@ public class EntityTracker1_9 extends EntityTrackerBase { handleMetadata(entityId, metadataList); if (!metadataList.isEmpty()) { try { - wrapper.send(Protocol1_9To1_8.class); + wrapper.scheduleSend(Protocol1_9To1_8.class); } catch (Exception e) { e.printStackTrace(); } diff --git a/sponge-legacy/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/sponge4/Sponge4ArmorListener.java b/sponge-legacy/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/sponge4/Sponge4ArmorListener.java index a89745ab9..a898450b2 100644 --- a/sponge-legacy/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/sponge4/Sponge4ArmorListener.java +++ b/sponge-legacy/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/sponge4/Sponge4ArmorListener.java @@ -71,7 +71,7 @@ public class Sponge4ArmorListener extends ViaListener { wrapper.write(Type.DOUBLE, (double) armor); // the modifier value wrapper.write(Type.BYTE, (byte) 0);// the modifier operation, 0 is add number - wrapper.send(Protocol1_9To1_8.class); + wrapper.scheduleSend(Protocol1_9To1_8.class); } catch (Exception e) { e.printStackTrace(); } diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/DeathListener.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/DeathListener.java index 9270b2b36..2f7b4b521 100644 --- a/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/DeathListener.java +++ b/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/DeathListener.java @@ -72,7 +72,7 @@ public class DeathListener extends ViaSpongeListener { wrapper.write(Type.INT, entityId); // Entity ID Protocol1_9To1_8.FIX_JSON.write(wrapper, msg); // Message - wrapper.send(Protocol1_9To1_8.class); + wrapper.scheduleSend(Protocol1_9To1_8.class); } catch (Exception e) { e.printStackTrace(); } diff --git a/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/sponge5/Sponge5ArmorListener.java b/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/sponge5/Sponge5ArmorListener.java index 69421c852..49328c550 100644 --- a/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/sponge5/Sponge5ArmorListener.java +++ b/sponge/src/main/java/com/viaversion/viaversion/sponge/listeners/protocol1_9to1_8/sponge5/Sponge5ArmorListener.java @@ -69,7 +69,7 @@ public class Sponge5ArmorListener extends ViaSpongeListener { wrapper.write(Type.DOUBLE, (double) armor); // the modifier value wrapper.write(Type.BYTE, (byte) 0);// the modifier operation, 0 is add number - wrapper.send(Protocol1_9To1_8.class); + wrapper.scheduleSend(Protocol1_9To1_8.class); } catch (Exception e) { e.printStackTrace(); } diff --git a/velocity/src/main/java/com/viaversion/viaversion/velocity/providers/VelocityMovementTransmitter.java b/velocity/src/main/java/com/viaversion/viaversion/velocity/providers/VelocityMovementTransmitter.java index d60503a5d..e986accd9 100644 --- a/velocity/src/main/java/com/viaversion/viaversion/velocity/providers/VelocityMovementTransmitter.java +++ b/velocity/src/main/java/com/viaversion/viaversion/velocity/providers/VelocityMovementTransmitter.java @@ -41,7 +41,7 @@ public class VelocityMovementTransmitter extends MovementTransmitterProvider { PacketWrapper wrapper = PacketWrapper.create(0x03, null, userConnection); wrapper.write(Type.BOOLEAN, userConnection.get(MovementTracker.class).isGround()); try { - wrapper.sendToServer(Protocol1_9To1_8.class); + wrapper.scheduleSendToServer(Protocol1_9To1_8.class); } catch (Exception e) { e.printStackTrace(); }