mirror of
https://github.com/ViaVersion/ViaFabric.git
synced 2024-11-22 11:45:47 +01:00
Updated CommonTransformer, cleaned up client-side UserConnection, issue template
This commit is contained in:
parent
322fee616b
commit
d72d30f0a0
26
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
26
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: Create a bug report so we can fix it
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Describe the bug, provide any errors**
|
||||||
|
A clear and concise description of what the bug is. Can you https://hastebin.com the error?
|
||||||
|
|
||||||
|
**How can we reproduce it?**
|
||||||
|
Steps to reproduce the behavior:
|
||||||
|
1. Login on 1.12'
|
||||||
|
2. Click on '....'
|
||||||
|
3. The '....' is displayed wrong
|
||||||
|
|
||||||
|
**Expected behaviour**
|
||||||
|
A clear and concise description of what you expected to happen.
|
||||||
|
|
||||||
|
**Screenshots**
|
||||||
|
If applicable, add screenshots to help explain your problem.
|
||||||
|
|
||||||
|
**ViaVersion Dump:**
|
||||||
|
- Type /viaversion dump, and put the link here.
|
||||||
|
|
||||||
|
**Additional server info**
|
||||||
|
Do you use a proxy (eg. BungeeCord)? What software do you use and what plugins?
|
17
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
17
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
---
|
||||||
|
name: Feature request
|
||||||
|
about: Suggest an idea for ViaVersion
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**Is your feature request related to a problem? Please describe.**
|
||||||
|
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
|
||||||
|
|
||||||
|
**Describe the solution you'd like**
|
||||||
|
A clear and concise description of what you want to happen.
|
||||||
|
|
||||||
|
**Describe alternatives you've considered**
|
||||||
|
A clear and concise description of any alternative solutions or features you've considered.
|
||||||
|
|
||||||
|
**Which versions is this for?**
|
||||||
|
Does the feature apply to any specific versions? If so put them here.
|
@ -28,37 +28,52 @@ import io.netty.buffer.ByteBuf;
|
|||||||
import us.myles.ViaVersion.api.PacketWrapper;
|
import us.myles.ViaVersion.api.PacketWrapper;
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.type.Type;
|
import us.myles.ViaVersion.api.type.Type;
|
||||||
|
import us.myles.ViaVersion.exception.CancelException;
|
||||||
import us.myles.ViaVersion.packets.Direction;
|
import us.myles.ViaVersion.packets.Direction;
|
||||||
import us.myles.ViaVersion.protocols.base.ProtocolInfo;
|
import us.myles.ViaVersion.protocols.base.ProtocolInfo;
|
||||||
|
|
||||||
|
import java.util.function.Function;
|
||||||
|
|
||||||
|
// TODO delete this when https://github.com/ViaVersion/ViaVersion/pull/1505 is merged
|
||||||
public class CommonTransformer {
|
public class CommonTransformer {
|
||||||
public static final String HANDLER_DECODER_NAME = "viafabric_decoder_handler";
|
public static final String HANDLER_DECODER_NAME = "via-decoder";
|
||||||
public static final String HANDLER_ENCODER_NAME = "viafabric_encoder_handler";
|
public static final String HANDLER_ENCODER_NAME = "via-encoder";
|
||||||
|
|
||||||
public static void transformClientbound(ByteBuf draft, UserConnection user) throws Exception {
|
public static boolean preServerboundCheck(UserConnection user) {
|
||||||
if (!draft.isReadable()) return;
|
|
||||||
// Increment sent
|
|
||||||
user.incrementSent();
|
|
||||||
transform(draft, user, Direction.OUTGOING);
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void transformServerbound(ByteBuf draft, UserConnection user) throws Exception {
|
|
||||||
if (!draft.isReadable()) return;
|
|
||||||
// Ignore if pending disconnect
|
// Ignore if pending disconnect
|
||||||
if (user.isPendingDisconnect()) return;
|
if (user.isPendingDisconnect()) return true;
|
||||||
// Increment received + Check PPS
|
// Increment received + Check PPS
|
||||||
if (user.incrementReceived() && user.handlePPS()) return;
|
return user.incrementReceived() && user.handlePPS();
|
||||||
transform(draft, user, Direction.INCOMING);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void transform(ByteBuf draft, UserConnection user, Direction direction) throws Exception {
|
public static void preClientbound(UserConnection user) {
|
||||||
if (!user.isActive()) return;
|
user.incrementSent();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean willTransformPacket(UserConnection user) {
|
||||||
|
return user.isActive();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void transformClientbound(ByteBuf draft, UserConnection user, Function<Throwable, Exception> cancelSupplier) throws Exception {
|
||||||
|
if (!draft.isReadable()) return;
|
||||||
|
transform(draft, user, Direction.OUTGOING, cancelSupplier);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void transformServerbound(ByteBuf draft, UserConnection user, Function<Throwable, Exception> cancelSupplier) throws Exception {
|
||||||
|
if (!draft.isReadable()) return;
|
||||||
|
transform(draft, user, Direction.INCOMING, cancelSupplier);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static void transform(ByteBuf draft, UserConnection user, Direction direction, Function<Throwable, Exception> cancelSupplier) throws Exception {
|
||||||
int id = Type.VAR_INT.read(draft);
|
int id = Type.VAR_INT.read(draft);
|
||||||
if (id == PacketWrapper.PASSTHROUGH_ID) return;
|
if (id == PacketWrapper.PASSTHROUGH_ID) return;
|
||||||
PacketWrapper wrapper = new PacketWrapper(id, draft, user);
|
PacketWrapper wrapper = new PacketWrapper(id, draft, user);
|
||||||
ProtocolInfo protInfo = user.get(ProtocolInfo.class);
|
ProtocolInfo protInfo = user.get(ProtocolInfo.class);
|
||||||
protInfo.getPipeline().transform(direction, protInfo.getState(), wrapper);
|
try {
|
||||||
|
protInfo.getPipeline().transform(direction, protInfo.getState(), wrapper);
|
||||||
|
} catch (CancelException ex) {
|
||||||
|
throw cancelSupplier.apply(ex);
|
||||||
|
}
|
||||||
ByteBuf transformed = draft.alloc().buffer();
|
ByteBuf transformed = draft.alloc().buffer();
|
||||||
try {
|
try {
|
||||||
wrapper.writeToBuffer(transformed);
|
wrapper.writeToBuffer(transformed);
|
||||||
@ -67,4 +82,4 @@ public class CommonTransformer {
|
|||||||
transformed.release();
|
transformed.release();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -45,9 +45,14 @@ public class VRDecodeHandler extends ByteToMessageDecoder {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception {
|
protected void decode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception {
|
||||||
|
CommonTransformer.preClientbound(user);
|
||||||
|
if (!CommonTransformer.willTransformPacket(user)) {
|
||||||
|
out.add(msg.readRetainedSlice(msg.readableBytes()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
ByteBuf draft = msg.alloc().buffer().writeBytes(msg);
|
ByteBuf draft = msg.alloc().buffer().writeBytes(msg);
|
||||||
try {
|
try {
|
||||||
CommonTransformer.transformClientbound(draft, user);
|
CommonTransformer.transformClientbound(draft, user, ignored -> CancelException.CACHED);
|
||||||
out.add(draft.retain());
|
out.add(draft.retain());
|
||||||
} finally {
|
} finally {
|
||||||
draft.release();
|
draft.release();
|
||||||
|
@ -27,13 +27,14 @@ package com.github.creeper123123321.viafabric.handler.clientside;
|
|||||||
import com.github.creeper123123321.viafabric.handler.CommonTransformer;
|
import com.github.creeper123123321.viafabric.handler.CommonTransformer;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import io.netty.handler.codec.EncoderException;
|
import io.netty.handler.codec.MessageToMessageEncoder;
|
||||||
import io.netty.handler.codec.MessageToByteEncoder;
|
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.exception.CancelException;
|
import us.myles.ViaVersion.exception.CancelException;
|
||||||
import us.myles.ViaVersion.util.PipelineUtil;
|
import us.myles.ViaVersion.util.PipelineUtil;
|
||||||
|
|
||||||
public class VREncodeHandler extends MessageToByteEncoder {
|
import java.util.List;
|
||||||
|
|
||||||
|
public class VREncodeHandler extends MessageToMessageEncoder<ByteBuf> {
|
||||||
private UserConnection user;
|
private UserConnection user;
|
||||||
|
|
||||||
public VREncodeHandler(UserConnection user) {
|
public VREncodeHandler(UserConnection user) {
|
||||||
@ -41,9 +42,21 @@ public class VREncodeHandler extends MessageToByteEncoder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void encode(ChannelHandlerContext ctx, Object msg, ByteBuf out) throws Exception {
|
protected void encode(ChannelHandlerContext ctx, ByteBuf msg, List<Object> out) throws Exception {
|
||||||
out.writeBytes((ByteBuf) msg);
|
if (CommonTransformer.preServerboundCheck(user)) {
|
||||||
CommonTransformer.transformServerbound(out, user);
|
throw CancelException.CACHED; // Theoretically a server with m2m decoder would hold this packet, but we'll just cancel for now and this is used for kicking packet spamming
|
||||||
|
}
|
||||||
|
if (!CommonTransformer.willTransformPacket(user)) {
|
||||||
|
out.add(msg.readRetainedSlice(msg.readableBytes()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ByteBuf draft = ctx.alloc().buffer().writeBytes(msg);
|
||||||
|
try {
|
||||||
|
CommonTransformer.transformServerbound(draft, user, ignored -> CancelException.CACHED);
|
||||||
|
out.add(draft.retain());
|
||||||
|
} finally {
|
||||||
|
draft.release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -45,9 +45,14 @@ public class FabricDecodeHandler extends ByteToMessageDecoder {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
|
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
|
||||||
|
if (CommonTransformer.preServerboundCheck(user)) return;
|
||||||
|
if (!CommonTransformer.willTransformPacket(user)) {
|
||||||
|
out.add(in.readRetainedSlice(in.readableBytes()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
ByteBuf draft = ctx.alloc().buffer().writeBytes(in);
|
ByteBuf draft = ctx.alloc().buffer().writeBytes(in);
|
||||||
try {
|
try {
|
||||||
CommonTransformer.transformServerbound(draft, user);
|
CommonTransformer.transformServerbound(draft, user, ignored -> CancelException.CACHED);
|
||||||
out.add(draft.retain());
|
out.add(draft.retain());
|
||||||
} finally {
|
} finally {
|
||||||
draft.release();
|
draft.release();
|
||||||
|
@ -27,13 +27,14 @@ package com.github.creeper123123321.viafabric.handler.serverside;
|
|||||||
import com.github.creeper123123321.viafabric.handler.CommonTransformer;
|
import com.github.creeper123123321.viafabric.handler.CommonTransformer;
|
||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.channel.ChannelHandlerContext;
|
import io.netty.channel.ChannelHandlerContext;
|
||||||
import io.netty.handler.codec.EncoderException;
|
import io.netty.handler.codec.MessageToMessageEncoder;
|
||||||
import io.netty.handler.codec.MessageToByteEncoder;
|
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.exception.CancelException;
|
import us.myles.ViaVersion.exception.CancelException;
|
||||||
import us.myles.ViaVersion.util.PipelineUtil;
|
import us.myles.ViaVersion.util.PipelineUtil;
|
||||||
|
|
||||||
public class FabricEncodeHandler extends MessageToByteEncoder {
|
import java.util.List;
|
||||||
|
|
||||||
|
public class FabricEncodeHandler extends MessageToMessageEncoder<ByteBuf> {
|
||||||
private final UserConnection user;
|
private final UserConnection user;
|
||||||
|
|
||||||
public FabricEncodeHandler(UserConnection user) {
|
public FabricEncodeHandler(UserConnection user) {
|
||||||
@ -41,9 +42,19 @@ public class FabricEncodeHandler extends MessageToByteEncoder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void encode(final ChannelHandlerContext ctx, Object in, final ByteBuf out) throws Exception {
|
protected void encode(final ChannelHandlerContext ctx, ByteBuf in, final List<Object> out) throws Exception {
|
||||||
out.writeBytes((ByteBuf) in);
|
CommonTransformer.preClientbound(user);
|
||||||
CommonTransformer.transformClientbound(out, user);
|
if (!CommonTransformer.willTransformPacket(user)) {
|
||||||
|
out.add(in.readRetainedSlice(in.readableBytes()));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
ByteBuf draft = ctx.alloc().buffer().writeBytes(in);
|
||||||
|
try {
|
||||||
|
CommonTransformer.transformClientbound(draft, user, ignored -> CancelException.CACHED);
|
||||||
|
out.add(draft.retain());
|
||||||
|
} finally {
|
||||||
|
draft.release();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -28,11 +28,7 @@ import com.github.creeper123123321.viafabric.handler.CommonTransformer;
|
|||||||
import io.netty.buffer.ByteBuf;
|
import io.netty.buffer.ByteBuf;
|
||||||
import io.netty.channel.Channel;
|
import io.netty.channel.Channel;
|
||||||
import io.netty.channel.ChannelFuture;
|
import io.netty.channel.ChannelFuture;
|
||||||
import us.myles.ViaVersion.api.PacketWrapper;
|
|
||||||
import us.myles.ViaVersion.api.data.UserConnection;
|
import us.myles.ViaVersion.api.data.UserConnection;
|
||||||
import us.myles.ViaVersion.api.type.Type;
|
|
||||||
import us.myles.ViaVersion.util.PipelineUtil;
|
|
||||||
|
|
||||||
|
|
||||||
public class VRClientSideUserConnection extends UserConnection {
|
public class VRClientSideUserConnection extends UserConnection {
|
||||||
public VRClientSideUserConnection(Channel socketChannel) {
|
public VRClientSideUserConnection(Channel socketChannel) {
|
||||||
@ -42,37 +38,19 @@ public class VRClientSideUserConnection extends UserConnection {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendRawPacket(final ByteBuf packet, boolean currentThread) {
|
public void sendRawPacket(final ByteBuf packet, boolean currentThread) {
|
||||||
ByteBuf copy = packet.alloc().buffer();
|
Runnable act = () -> getChannel().pipeline().context(CommonTransformer.HANDLER_DECODER_NAME)
|
||||||
try {
|
.fireChannelRead(packet);
|
||||||
Type.VAR_INT.write(copy, PacketWrapper.PASSTHROUGH_ID);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
copy.writeBytes(packet);
|
|
||||||
packet.release();
|
|
||||||
final Channel channel = this.getChannel();
|
|
||||||
if (currentThread) {
|
if (currentThread) {
|
||||||
PipelineUtil.getPreviousContext(CommonTransformer.HANDLER_DECODER_NAME, channel.pipeline()).fireChannelRead(copy);
|
act.run();
|
||||||
} else {
|
} else {
|
||||||
channel.eventLoop().submit(() -> {
|
getChannel().eventLoop().execute(act);
|
||||||
PipelineUtil.getPreviousContext(CommonTransformer.HANDLER_DECODER_NAME, channel.pipeline()).fireChannelRead(copy);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ChannelFuture sendRawPacketFuture(ByteBuf packet) {
|
public ChannelFuture sendRawPacketFuture(ByteBuf packet) {
|
||||||
ByteBuf copy = packet.alloc().buffer();
|
getChannel().pipeline().context(CommonTransformer.HANDLER_DECODER_NAME).fireChannelRead(packet);
|
||||||
try {
|
return getChannel().newSucceededFuture();
|
||||||
Type.VAR_INT.write(copy, PacketWrapper.PASSTHROUGH_ID);
|
|
||||||
} catch (Exception e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
copy.writeBytes(packet);
|
|
||||||
packet.release();
|
|
||||||
final Channel channel = this.getChannel();
|
|
||||||
PipelineUtil.getPreviousContext(CommonTransformer.HANDLER_DECODER_NAME, channel.pipeline()).fireChannelRead(copy);
|
|
||||||
return channel.newSucceededFuture();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
Loading…
Reference in New Issue
Block a user