Provide a FakePipeline

This commit is contained in:
tanyaofei 2024-08-08 15:55:44 +08:00
parent a06e1d9d19
commit cdd31f646d
13 changed files with 395 additions and 432 deletions

View File

@ -70,6 +70,13 @@
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-transport</artifactId>
<version>4.1.82.Final</version>
<scope>provided</scope>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@ -1,4 +1,4 @@
package io.github.hello09x.fakeplayer.v1_20_R1.network; package io.github.hello09x.fakeplayer.core.network;
import io.netty.channel.*; import io.netty.channel.*;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
@ -11,6 +11,7 @@ import java.net.SocketAddress;
public class FakeChannel extends AbstractChannel { public class FakeChannel extends AbstractChannel {
private final static EventLoop EVENT_LOOP = new DefaultEventLoop(); private final static EventLoop EVENT_LOOP = new DefaultEventLoop();
private final ChannelConfig config = new DefaultChannelConfig(this); private final ChannelConfig config = new DefaultChannelConfig(this);
private final ChannelPipeline pipeline = new FakeChannelPipeline(this);
private final InetAddress address; private final InetAddress address;
public FakeChannel(@Nullable Channel parent, @NotNull InetAddress address) { public FakeChannel(@Nullable Channel parent, @NotNull InetAddress address) {
@ -66,6 +67,11 @@ public class FakeChannel extends AbstractChannel {
return true; return true;
} }
@Override
public ChannelPipeline pipeline() {
return pipeline;
}
@Override @Override
protected SocketAddress localAddress0() { protected SocketAddress localAddress0() {
return new InetSocketAddress(address, 25565); return new InetSocketAddress(address, 25565);

View File

@ -0,0 +1,371 @@
package io.github.hello09x.fakeplayer.core.network;
import io.netty.channel.*;
import io.netty.util.ReferenceCountUtil;
import io.netty.util.concurrent.EventExecutorGroup;
import org.jetbrains.annotations.NotNull;
import java.net.SocketAddress;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
/**
* @author tanyaofei
* @since 2024/8/8
**/
public class FakeChannelPipeline implements ChannelPipeline {
private final Channel channel;
public FakeChannelPipeline(Channel channel) {
this.channel = channel;
}
@Override
public ChannelPipeline addFirst(String name, ChannelHandler handler) {
return this;
}
@Override
public ChannelPipeline addFirst(EventExecutorGroup group, String name, ChannelHandler handler) {
return this;
}
@Override
public ChannelPipeline addLast(String name, ChannelHandler handler) {
return this;
}
@Override
public ChannelPipeline addLast(EventExecutorGroup group, String name, ChannelHandler handler) {
return this;
}
@Override
public ChannelPipeline addBefore(String baseName, String name, ChannelHandler handler) {
return this;
}
@Override
public ChannelPipeline addBefore(EventExecutorGroup group, String baseName, String name, ChannelHandler handler) {
return this;
}
@Override
public ChannelPipeline addAfter(String baseName, String name, ChannelHandler handler) {
return this;
}
@Override
public ChannelPipeline addAfter(EventExecutorGroup group, String baseName, String name, ChannelHandler handler) {
return this;
}
@Override
public ChannelPipeline addFirst(ChannelHandler... handlers) {
return this;
}
@Override
public ChannelPipeline addFirst(EventExecutorGroup group, ChannelHandler... handlers) {
return this;
}
@Override
public ChannelPipeline addLast(ChannelHandler... handlers) {
return this;
}
@Override
public ChannelPipeline addLast(EventExecutorGroup group, ChannelHandler... handlers) {
return this;
}
@Override
public ChannelPipeline remove(ChannelHandler handler) {
return this;
}
@Override
public ChannelHandler remove(String name) {
return null;
}
@Override
public <T extends ChannelHandler> T remove(Class<T> handlerType) {
return null;
}
@Override
public ChannelHandler removeFirst() {
return null;
}
@Override
public ChannelHandler removeLast() {
return null;
}
@Override
public ChannelPipeline replace(ChannelHandler oldHandler, String newName, ChannelHandler newHandler) {
return this;
}
@Override
public ChannelHandler replace(String oldName, String newName, ChannelHandler newHandler) {
return null;
}
@Override
public <T extends ChannelHandler> T replace(Class<T> oldHandlerType, String newName, ChannelHandler newHandler) {
return null;
}
@Override
public ChannelHandler first() {
return null;
}
@Override
public ChannelHandlerContext firstContext() {
return null;
}
@Override
public ChannelHandler last() {
return null;
}
@Override
public ChannelHandlerContext lastContext() {
return null;
}
@Override
public ChannelHandler get(String name) {
return null;
}
@Override
public <T extends ChannelHandler> T get(Class<T> handlerType) {
return null;
}
@Override
public ChannelHandlerContext context(ChannelHandler handler) {
return null;
}
@Override
public ChannelHandlerContext context(String name) {
return null;
}
@Override
public ChannelHandlerContext context(Class<? extends ChannelHandler> handlerType) {
return null;
}
@Override
public Channel channel() {
return this.channel;
}
@Override
public List<String> names() {
return List.of();
}
@Override
public Map<String, ChannelHandler> toMap() {
return Map.of();
}
@Override
public ChannelPipeline fireChannelRegistered() {
return this;
}
@Override
public ChannelPipeline fireChannelUnregistered() {
return this;
}
@Override
public ChannelPipeline fireChannelActive() {
return this;
}
@Override
public ChannelPipeline fireChannelInactive() {
return this;
}
@Override
public ChannelPipeline fireExceptionCaught(Throwable cause) {
return this;
}
@Override
public ChannelPipeline fireUserEventTriggered(Object event) {
return this;
}
@Override
public ChannelPipeline fireChannelRead(Object msg) {
ReferenceCountUtil.release(msg);
return this;
}
@Override
public ChannelPipeline fireChannelReadComplete() {
return this;
}
@Override
public ChannelPipeline fireChannelWritabilityChanged() {
return this;
}
@Override
public ChannelFuture bind(SocketAddress localAddress) {
return newSucceededFuture();
}
@Override
public ChannelFuture connect(SocketAddress remoteAddress) {
return newSucceededFuture();
}
@Override
public ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress) {
return newSucceededFuture();
}
@Override
public ChannelFuture disconnect() {
return newSucceededFuture();
}
@Override
public ChannelFuture close() {
return newSucceededFuture();
}
@Override
public ChannelFuture deregister() {
return newSucceededFuture();
}
@Override
public ChannelFuture bind(SocketAddress localAddress, ChannelPromise promise) {
promise.setSuccess();
return promise;
}
@Override
public ChannelFuture connect(SocketAddress remoteAddress, ChannelPromise promise) {
promise.setSuccess();
return promise;
}
@Override
public ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) {
promise.setSuccess();
return promise;
}
@Override
public ChannelFuture disconnect(ChannelPromise promise) {
promise.setSuccess();
return promise;
}
@Override
public ChannelFuture close(ChannelPromise promise) {
promise.setSuccess();
return promise;
}
@Override
public ChannelFuture deregister(ChannelPromise promise) {
promise.setSuccess();
return promise;
}
@Override
public ChannelOutboundInvoker read() {
return null;
}
@Override
public ChannelFuture write(Object msg) {
ReferenceCountUtil.release(msg);
return newSucceededFuture();
}
@Override
public ChannelFuture write(Object msg, ChannelPromise promise) {
ReferenceCountUtil.release(msg);
promise.setSuccess();
return promise;
}
@Override
public ChannelPipeline flush() {
return this;
}
@Override
public ChannelFuture writeAndFlush(Object msg, ChannelPromise promise) {
ReferenceCountUtil.release(msg);
promise.setSuccess();
return promise;
}
@Override
public ChannelFuture writeAndFlush(Object msg) {
ReferenceCountUtil.release(msg);
return newSucceededFuture();
}
@Override
public ChannelPromise newPromise() {
return new DefaultChannelPromise(this.channel);
}
@Override
public ChannelProgressivePromise newProgressivePromise() {
return null;
}
@Override
public ChannelFuture newSucceededFuture() {
var promise = new DefaultChannelPromise(this.channel);
promise.setSuccess(null);
return promise;
}
@Override
public ChannelFuture newFailedFuture(Throwable cause) {
var promise = new DefaultChannelPromise(this.channel);
promise.setFailure(cause);
return promise;
}
@Override
public ChannelPromise voidPromise() {
var promise = new DefaultChannelPromise(this.channel);
promise.setSuccess(null);
return promise;
}
@NotNull
@Override
public Iterator<Map.Entry<String, ChannelHandler>> iterator() {
return Collections.<String, ChannelHandler>emptyMap().entrySet().iterator();
}
}

View File

@ -99,6 +99,11 @@
<phase>package</phase> <phase>package</phase>
<configuration> <configuration>
<target> <target>
<copy tofile="../server-1.20.1/plugins/fakeplayer.jar">
<fileset dir="${project.build.directory}">
<include name="fakeplayer-${revision}.jar"/>
</fileset>
</copy>
<copy tofile="../server-1.20.2/plugins/fakeplayer.jar"> <copy tofile="../server-1.20.2/plugins/fakeplayer.jar">
<fileset dir="${project.build.directory}"> <fileset dir="${project.build.directory}">
<include name="fakeplayer-${revision}.jar"/> <include name="fakeplayer-${revision}.jar"/>

View File

@ -1,11 +1,10 @@
package io.github.hello09x.fakeplayer.v1_20_R1.network; package io.github.hello09x.fakeplayer.v1_20_R1.network;
import io.netty.channel.ChannelDuplexHandler; import io.github.hello09x.fakeplayer.core.network.FakeChannel;
import net.minecraft.network.Connection; import net.minecraft.network.Connection;
import net.minecraft.network.PacketSendListener; import net.minecraft.network.PacketSendListener;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketFlow; import net.minecraft.network.protocol.PacketFlow;
import org.bukkit.Bukkit;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.net.InetAddress; import java.net.InetAddress;
@ -15,9 +14,6 @@ public class FakeConnection extends Connection {
super(PacketFlow.SERVERBOUND); super(PacketFlow.SERVERBOUND);
this.channel = new FakeChannel(null, address); this.channel = new FakeChannel(null, address);
this.address = this.channel.remoteAddress(); this.address = this.channel.remoteAddress();
if (Bukkit.getServer().getName().contains("Leaves")) {
this.channel.pipeline().addLast("packet_handler", new ChannelDuplexHandler());
}
} }
@Override @Override
@ -35,6 +31,5 @@ public class FakeConnection extends Connection {
@Override @Override
public void handleDisconnection() { public void handleDisconnection() {
super.handleDisconnection();
} }
} }

View File

@ -1,101 +0,0 @@
package io.github.hello09x.fakeplayer.v1_20_R2.network;
import io.netty.channel.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
public class FakeChannel extends AbstractChannel {
private final static EventLoop EVENT_LOOP = new DefaultEventLoop();
private final ChannelConfig config = new DefaultChannelConfig(this);
private final InetAddress address;
public FakeChannel(@Nullable Channel parent, @NotNull InetAddress address) {
super(parent);
this.address = address;
}
@Override
public ChannelConfig config() {
config.setAutoRead(true);
return config;
}
@Override
protected void doBeginRead() throws Exception {
}
@Override
protected void doBind(SocketAddress arg0) throws Exception {
}
@Override
protected void doClose() throws Exception {
}
@Override
protected void doDisconnect() throws Exception {
}
@Override
protected void doWrite(ChannelOutboundBuffer in) throws Exception {
for (;;) {
Object msg = in.current();
if (msg == null) {
break;
}
in.remove();
}
}
@Override
public boolean isActive() {
return true;
}
@Override
protected boolean isCompatible(EventLoop arg0) {
return true;
}
@Override
public boolean isOpen() {
return true;
}
@Override
protected SocketAddress localAddress0() {
return new InetSocketAddress(address, 25565);
}
@Override
public ChannelMetadata metadata() {
return new ChannelMetadata(true);
}
@Override
protected AbstractUnsafe newUnsafe() {
return new AbstractUnsafe() {
@Override
public void connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) {
safeSetSuccess(promise);
}
};
}
@Override
protected SocketAddress remoteAddress0() {
return new InetSocketAddress(address, 25565);
}
@Override
public EventLoop eventLoop() {
return EVENT_LOOP;
}
}

View File

@ -1,12 +1,11 @@
package io.github.hello09x.fakeplayer.v1_20_R2.network; package io.github.hello09x.fakeplayer.v1_20_R2.network;
import io.netty.channel.ChannelDuplexHandler; import io.github.hello09x.fakeplayer.core.network.FakeChannel;
import net.minecraft.network.Connection; import net.minecraft.network.Connection;
import net.minecraft.network.ConnectionProtocol; import net.minecraft.network.ConnectionProtocol;
import net.minecraft.network.PacketSendListener; import net.minecraft.network.PacketSendListener;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketFlow; import net.minecraft.network.protocol.PacketFlow;
import org.bukkit.Bukkit;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.net.InetAddress; import java.net.InetAddress;
@ -18,9 +17,6 @@ public class FakeConnection extends Connection {
this.channel = new FakeChannel(null, address); this.channel = new FakeChannel(null, address);
this.address = this.channel.remoteAddress(); this.address = this.channel.remoteAddress();
Connection.configureSerialization(this.channel.pipeline(), PacketFlow.SERVERBOUND, null); Connection.configureSerialization(this.channel.pipeline(), PacketFlow.SERVERBOUND, null);
if (Bukkit.getServer().getName().contains("Leaves")) {
this.channel.pipeline().addLast("packet_handler", new ChannelDuplexHandler());
}
} }
@Override @Override

View File

@ -1,100 +0,0 @@
package io.github.hello09x.fakeplayer.v1_20_R3_R4.network;
import io.netty.channel.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
public class FakeChannel extends AbstractChannel {
private final static EventLoop EVENT_LOOP = new DefaultEventLoop();
private final ChannelConfig config = new DefaultChannelConfig(this);
private final InetAddress address;
public FakeChannel(@Nullable Channel parent, @NotNull InetAddress address) {
super(parent);
this.address = address;
}
@Override
public ChannelConfig config() {
config.setAutoRead(true);
return config;
}
@Override
protected void doBeginRead() throws Exception {
}
@Override
protected void doBind(SocketAddress arg0) throws Exception {
}
@Override
protected void doClose() throws Exception {
}
@Override
protected void doDisconnect() throws Exception {
}
@Override
protected void doWrite(ChannelOutboundBuffer in) throws Exception {
for (;;) {
Object msg = in.current();
if (msg == null) {
break;
}
in.remove();
}
}
@Override
public boolean isActive() {
return true;
}
@Override
protected boolean isCompatible(EventLoop arg0) {
return true;
}
@Override
public boolean isOpen() {
return true;
}
@Override
protected SocketAddress localAddress0() {
return new InetSocketAddress(address, 25565);
}
@Override
public ChannelMetadata metadata() {
return new ChannelMetadata(true);
}
@Override
protected AbstractUnsafe newUnsafe() {
return new AbstractUnsafe() {
@Override
public void connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) {
safeSetSuccess(promise);
}
};
}
@Override
protected SocketAddress remoteAddress0() {
return new InetSocketAddress(address, 25565);
}
@Override
public EventLoop eventLoop() {
return EVENT_LOOP;
}
}

View File

@ -1,12 +1,11 @@
package io.github.hello09x.fakeplayer.v1_20_R3_R4.network; package io.github.hello09x.fakeplayer.v1_20_R3_R4.network;
import io.netty.channel.ChannelDuplexHandler; import io.github.hello09x.fakeplayer.core.network.FakeChannel;
import net.minecraft.network.Connection; import net.minecraft.network.Connection;
import net.minecraft.network.ConnectionProtocol; import net.minecraft.network.ConnectionProtocol;
import net.minecraft.network.PacketSendListener; import net.minecraft.network.PacketSendListener;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketFlow; import net.minecraft.network.protocol.PacketFlow;
import org.bukkit.Bukkit;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.net.InetAddress; import java.net.InetAddress;
@ -18,9 +17,6 @@ public class FakeConnection extends Connection {
this.channel = new FakeChannel(null, address); this.channel = new FakeChannel(null, address);
this.address = this.channel.remoteAddress(); this.address = this.channel.remoteAddress();
Connection.configureSerialization(this.channel.pipeline(), PacketFlow.SERVERBOUND, null); Connection.configureSerialization(this.channel.pipeline(), PacketFlow.SERVERBOUND, null);
if (Bukkit.getServer().getName().contains("Leaves")) {
this.channel.pipeline().addLast("packet_handler", new ChannelDuplexHandler());
}
} }
@Override @Override

View File

@ -1,100 +0,0 @@
package io.github.hello09x.fakeplayer.v1_20_R5_R6.network;
import io.netty.channel.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
public class FakeChannel extends AbstractChannel {
private final static EventLoop EVENT_LOOP = new DefaultEventLoop();
private final ChannelConfig config = new DefaultChannelConfig(this);
private final InetAddress address;
public FakeChannel(@Nullable Channel parent, @NotNull InetAddress address) {
super(parent);
this.address = address;
}
@Override
public ChannelConfig config() {
config.setAutoRead(true);
return config;
}
@Override
protected void doBeginRead() throws Exception {
}
@Override
protected void doBind(SocketAddress arg0) throws Exception {
}
@Override
protected void doClose() throws Exception {
}
@Override
protected void doDisconnect() throws Exception {
}
@Override
protected void doWrite(ChannelOutboundBuffer in) throws Exception {
for (;;) {
Object msg = in.current();
if (msg == null) {
break;
}
in.remove();
}
}
@Override
public boolean isActive() {
return true;
}
@Override
protected boolean isCompatible(EventLoop arg0) {
return true;
}
@Override
public boolean isOpen() {
return true;
}
@Override
protected SocketAddress localAddress0() {
return new InetSocketAddress(address, 25565);
}
@Override
public ChannelMetadata metadata() {
return new ChannelMetadata(true);
}
@Override
protected AbstractUnsafe newUnsafe() {
return new AbstractUnsafe() {
@Override
public void connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) {
safeSetSuccess(promise);
}
};
}
@Override
protected SocketAddress remoteAddress0() {
return new InetSocketAddress(address, 25565);
}
@Override
public EventLoop eventLoop() {
return EVENT_LOOP;
}
}

View File

@ -1,11 +1,10 @@
package io.github.hello09x.fakeplayer.v1_20_R5_R6.network; package io.github.hello09x.fakeplayer.v1_20_R5_R6.network;
import io.netty.channel.ChannelDuplexHandler; import io.github.hello09x.fakeplayer.core.network.FakeChannel;
import net.minecraft.network.Connection; import net.minecraft.network.Connection;
import net.minecraft.network.PacketSendListener; import net.minecraft.network.PacketSendListener;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketFlow; import net.minecraft.network.protocol.PacketFlow;
import org.bukkit.Bukkit;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import java.net.InetAddress; import java.net.InetAddress;
@ -17,9 +16,6 @@ public class FakeConnection extends Connection {
this.channel = new FakeChannel(null, address); this.channel = new FakeChannel(null, address);
this.address = this.channel.remoteAddress(); this.address = this.channel.remoteAddress();
Connection.configureSerialization(this.channel.pipeline(), PacketFlow.SERVERBOUND, false, null); Connection.configureSerialization(this.channel.pipeline(), PacketFlow.SERVERBOUND, false, null);
if (Bukkit.getServer().getName().contains("Leaves")) {
this.channel.pipeline().addLast("packet_handler", new ChannelDuplexHandler());
}
} }
@Override @Override

View File

@ -1,99 +0,0 @@
package io.github.hello09x.fakeplayer.v1_21_R1.network;
import io.netty.channel.*;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
public class FakeChannel extends AbstractChannel {
private final static EventLoop EVENT_LOOP = new DefaultEventLoop();
private final ChannelConfig config = new DefaultChannelConfig(this);
private final InetAddress address;
public FakeChannel(@Nullable Channel parent, @NotNull InetAddress address) {
super(parent);
this.address = address;
}
@Override
public ChannelConfig config() {
config.setAutoRead(true);
return config;
}
@Override
protected void doBeginRead() throws Exception {
}
@Override
protected void doBind(SocketAddress arg0) throws Exception {
}
@Override
protected void doClose() throws Exception {
}
@Override
protected void doDisconnect() throws Exception {
}
@Override
protected void doWrite(ChannelOutboundBuffer in) throws Exception {
for (;;) {
Object msg = in.current();
if (msg == null) {
break;
}
in.remove();
}
}
@Override
public boolean isActive() {
return true;
}
@Override
protected boolean isCompatible(EventLoop arg0) {
return true;
}
@Override
public boolean isOpen() {
return true;
}
@Override
protected SocketAddress localAddress0() {
return new InetSocketAddress(address, 25565);
}
@Override
public ChannelMetadata metadata() {
return new ChannelMetadata(true);
}
@Override
protected AbstractUnsafe newUnsafe() {
return new AbstractUnsafe() {
@Override
public void connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) {
safeSetSuccess(promise);
}
};
}
@Override
protected SocketAddress remoteAddress0() {
return new InetSocketAddress(address, 25565);
}
@Override
public EventLoop eventLoop() {
return EVENT_LOOP;
}
}

View File

@ -2,12 +2,11 @@ package io.github.hello09x.fakeplayer.v1_21_R1.network;
import io.github.hello09x.fakeplayer.core.Main; import io.github.hello09x.fakeplayer.core.Main;
import io.github.hello09x.fakeplayer.core.manager.FakeplayerManager; import io.github.hello09x.fakeplayer.core.manager.FakeplayerManager;
import io.netty.channel.ChannelDuplexHandler; import io.github.hello09x.fakeplayer.core.network.FakeChannel;
import net.minecraft.network.Connection; import net.minecraft.network.Connection;
import net.minecraft.network.PacketSendListener; import net.minecraft.network.PacketSendListener;
import net.minecraft.network.protocol.Packet; import net.minecraft.network.protocol.Packet;
import net.minecraft.network.protocol.PacketFlow; import net.minecraft.network.protocol.PacketFlow;
import org.bukkit.Bukkit;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
@ -24,9 +23,6 @@ public class FakeConnection extends Connection {
this.channel = new FakeChannel(null, address); this.channel = new FakeChannel(null, address);
this.address = this.channel.remoteAddress(); this.address = this.channel.remoteAddress();
Connection.configureSerialization(this.channel.pipeline(), PacketFlow.SERVERBOUND, false, null); Connection.configureSerialization(this.channel.pipeline(), PacketFlow.SERVERBOUND, false, null);
if (Bukkit.getServer().getName().contains("Leaves")) {
this.channel.pipeline().addLast("packet_handler", new ChannelDuplexHandler());
}
} }
@Override @Override
@ -44,9 +40,4 @@ public class FakeConnection extends Connection {
} }
// public void setProtocolAttr(@NotNull ConnectionProtocol protocol) {
// this.channel.attr(Connection.ATTRIBUTE_SERVERBOUND_PROTOCOL).set(protocol.codec(PacketFlow.SERVERBOUND));
// this.channel.attr(Connection.ATTRIBUTE_CLIENTBOUND_PROTOCOL).set(protocol.codec(PacketFlow.CLIENTBOUND));
// }
} }