es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede leer el paquete de Minecraft correctamente en Golang.

Soy un principiante en Golang. Y últimamente he tenido un problema con la lectura de paquetes de los clientes de Minecraft.

Mi programa lee los paquetes de la conexión de la siguiente manera.

    jugador := &Jugador{
        conn:     conn,
        estado:    MANO,
        io: &ConnReadWrite{
            rdr: bufio.NewReader(conn),
            wtr: bufio.NewWriter(conn),
        },
        inaddr: InAddr{
            "",
            0,
        },
        mantenerVivo:    0,
        compresión:  false
    }

func (jugador *Jugador) LeerVarInt() (i int, err error) {
    val, _ := binary.ReadUvarint(jugador.io)
    return int(val), nil
}

Funcionaba correctamente cuando la conexión se establecía, pero luego no puede leer correctamente el ID del paquete.

He estado trabajando durante días, y he intentado reescribirlo siguiendo la solución de wiki.vg, pero parece que no funciona.

PD: Mi copia y la original

    val, length := 0, 0
    for {
        actual, err := jugador.io.ReadByte()
        if err != nil {
            return 0, err
        }

        val |= int((actual & 0x7F) << (length * 7))
        length += 1
        if length > 5 {
            return 0, errors.New(fmt.Sprintf("El VarInt es demasiado grande", jugador.nombre))
        }

        if val&0x80 != 0x80 {
            break
        }
    }
    return int(val), nil
    int valor = 0;
    int longitud = 0;
    byte byteActual;

    while (true) {
        byteActual = leerByte();
        valor |= (byteActual & 0x7F) << (longitud * 7);

        longitud += 1;
        if (longitud > 5) {
            throw new RuntimeException("El VarInt es demasiado grande");
        }

        if ((valor & 0x80) != 0x80) {
            break;
        }
    }
    return valor;

“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Como experto en TI especializado en Golang, TCP y Minecraft, sugeriría verificar la longitud de los paquetes que estás tratando de leer. Es posible que el tamaño del paquete sea mayor que el tamaño del búfer definido en tu lector, lo que podría estar causando el problema.

    Otra cosa a tener en cuenta es el tipo de paquetes que estás intentando leer. Minecraft tiene diferentes tipos de paquetes con diferentes tamaños, que requieren diferentes métodos de lectura. Por lo tanto, es importante asegurarse de que el método que estás utilizando para leer el paquete sea apropiado para el tipo de paquete.

    Por último, se recomienda utilizar la solución original de wiki.vg, ya que es un método ampliamente aceptado y probado para leer paquetes en Minecraft. Asegúrate de copiar el código correctamente y, si hay errores, intenta depurar para identificar y solucionar el problema.

    En general, solucionar problemas de lectura de paquetes en Minecraft requiere un profundo conocimiento de Golang, TCP y paquetes de Minecraft. Por lo tanto, si eres un principiante en Golang, buscar ayuda de desarrolladores más experimentados puede ser beneficioso.

Comments are closed.