Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[TiempoReal] Que la brújula muestre las coordenadas #18

Open
MiguelDreamer opened this issue Jun 21, 2020 · 2 comments
Open

[TiempoReal] Que la brújula muestre las coordenadas #18

MiguelDreamer opened this issue Jun 21, 2020 · 2 comments
Assignees
Labels
propuesta Propone cambios, pero sin implementarlos. Aplicable de no haber otra etiqueta más específica.

Comments

@MiguelDreamer
Copy link
Member

MiguelDreamer commented Jun 21, 2020

Al igual que el reloj tiene una utilidad, estaría bien también que la brújula mostrara lo siguiente en la barra de acción al tenerla en la mano:

Coordenadas: X= ??, Y= ??, Z= ??. Mirando al (norte/sur/este/oeste)

De ser así, se activaría la gamerule de reducedDebugInfo para que no se mostraran las coordenadas al pulsar F3 y la brújula cumpliese su propósito.

@MiguelDreamer MiguelDreamer added the propuesta Propone cambios, pero sin implementarlos. Aplicable de no haber otra etiqueta más específica. label Jun 21, 2020
@MiguelDreamer MiguelDreamer added this to the TiempoReal v5.0.0 milestone Jun 21, 2020
@AlexTMjugador
Copy link
Member

Perfecto. Como hemos comentado y has añadido en la incidencia, el plugin debería de activar esa regla de juego para que la brújula sea un ítem necesario para poder ver las coordenadas y orientación geográfica. Y, aunque Bukkit no ofrece una API para ello, podría usarse ProtocolLib para que los administradores y desarrolladores del servidor siguiesen viendo esa información, que es bastante útil a nivel técnico, filtrando los paquetes de "Join Game" enviados por el servidor: https://wiki.vg/Protocol#Join_Game

@AlexTMjugador
Copy link
Member

AlexTMjugador commented Jun 28, 2020

Continuando el esbozo de idea anterior para filtrar selectivamente información de depuración del F3, he estado mirando cómo lo maneja el servidor vanilla de Minecraft. Lo que hace dicho servidor cuando se cambia el valor de la regla de juego de reducedDebugInfo es enviar un paquete de evento de entidad a todos los jugadores:

RULE_REDUCEDDEBUGINFO = GameRules.<GameRules.BooleanValue>register("reducedDebugInfo", GameRules.Category.MISC, create(false, (minecraftServer, booleanValue) -> {
	byte3 = (booleanValue.get() ? 22 : 23);
	minecraftServer.getPlayerList().getPlayers().iterator();
	while (iterator4.hasNext()) {
		serverPlayer5 = iterator4.next();
		serverPlayer5.connection.send(new ClientboundEntityEventPacket(serverPlayer5, (byte)byte3));
	}
	return;
}));

Por otro lado, cuando un jugador se conecta, por motivos de efienciencia, Minecraft no envía el paquete anterior para informarle al cliente de si debe de ocultar la información de depuración. En su lugar, envía un byte más en el ClientboundLoginPacket (llamado "Join Game" en wiki.vg) indicando el estado actual de la regla de juego:

boolean boolean17 = gameRules15.getBoolean(GameRules.RULE_REDUCEDDEBUGINFO);
serverGamePacketListenerImpl14.send(new ClientboundLoginPacket(serverPlayer.getId(), serverPlayer.gameMode.getGameModeForPlayer(), serverPlayer.gameMode.getPreviousGameModeForPlayer(), BiomeManager.obfuscateSeed(serverLevel11.getSeed()), levelData13.isHardcore(), this.server.levelKeys(), this.registryHolder, serverLevel11.dimensionTypeKey(), serverLevel11.dimension(), this.getMaxPlayers(), this.viewDistance, boolean17, !boolean16, serverLevel11.isDebug(), serverLevel11.isFlat()));

Por tanto, un plugin que maneje apropiadamente una muestra selectiva de esta información de depuración a cada jugador debería de manejar correctamente ambos tipos de paquete. Los plugins públicos que he visto que hacen esto solo se centran en el primer tipo de paquete.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
propuesta Propone cambios, pero sin implementarlos. Aplicable de no haber otra etiqueta más específica.
Projects
None yet
Development

No branches or pull requests

2 participants