3
0
Mirror von https://github.com/GeyserMC/Geyser.git synchronisiert 2024-12-26 16:12:46 +01:00

Re-implement steering indicators

Dieser Commit ist enthalten in:
Camotoy 2024-10-26 01:41:23 -04:00
Ursprung 774d3670c5
Commit 9d2d12b87b
Es konnte kein GPG-Schlüssel zu dieser Signatur gefunden werden
GPG-Schlüssel-ID: 7EEFB66FE798081F
3 geänderte Dateien mit 111 neuen und 115 gelöschten Zeilen

Datei anzeigen

@ -39,6 +39,7 @@ import org.geysermc.geyser.util.InteractionResult;
import org.geysermc.geyser.util.InteractiveTag; import org.geysermc.geyser.util.InteractiveTag;
import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import org.geysermc.mcprotocollib.protocol.data.game.entity.metadata.type.BooleanEntityMetadata;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand; import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundPaddleBoatPacket;
import java.util.UUID; import java.util.UUID;
@ -182,6 +183,12 @@ public class BoatEntity extends Entity implements Leashable, Tickable {
@Override @Override
public void tick() { public void tick() {
// Java sends simply "true" and "false" (is_paddling_left), Bedrock keeps sending packets as you're rowing // Java sends simply "true" and "false" (is_paddling_left), Bedrock keeps sending packets as you're rowing
if (session.getPlayerEntity().getVehicle() == this) {
// For packet timing accuracy, we'll send the packets here, as that's what Java Edition 1.21.3 does.
ServerboundPaddleBoatPacket steerPacket = new ServerboundPaddleBoatPacket(session.isSteeringLeft(), session.isSteeringRight());
session.sendDownstreamGamePacket(steerPacket);
return;
}
doTick = !doTick; // Run every 100 ms doTick = !doTick; // Run every 100 ms
if (!doTick || passengers.isEmpty()) { if (!doTick || passengers.isEmpty()) {
return; return;

Datei anzeigen

@ -25,13 +25,12 @@
package org.geysermc.geyser.translator.protocol.bedrock; package org.geysermc.geyser.translator.protocol.bedrock;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.level.ServerboundPaddleBoatPacket;
import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundSwingPacket;
import org.cloudburstmc.protocol.bedrock.packet.AnimatePacket; import org.cloudburstmc.protocol.bedrock.packet.AnimatePacket;
import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.GeyserSession;
import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.PacketTranslator;
import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.translator.protocol.Translator;
import org.geysermc.mcprotocollib.protocol.data.game.entity.player.Hand;
import org.geysermc.mcprotocollib.protocol.packet.ingame.serverbound.player.ServerboundSwingPacket;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -45,8 +44,8 @@ public class BedrockAnimateTranslator extends PacketTranslator<AnimatePacket> {
return; return;
} }
switch (packet.getAction()) { System.out.println("wewewewewewewewewewewe");
case SWING_ARM -> { if (packet.getAction() == AnimatePacket.Action.SWING_ARM) {
session.armSwingPending(); session.armSwingPending();
// Delay so entity damage can be processed first // Delay so entity damage can be processed first
session.scheduleInEventLoop(() -> { session.scheduleInEventLoop(() -> {
@ -72,18 +71,5 @@ public class BedrockAnimateTranslator extends PacketTranslator<AnimatePacket> {
TimeUnit.MILLISECONDS TimeUnit.MILLISECONDS
); );
} }
// These two might need to be flipped, but my recommendation is getting moving working first
case ROW_LEFT -> {
// Packet value is a float of how long one has been rowing, so we convert that into a boolean
session.setSteeringLeft(packet.getRowingTime() > 0.0);
ServerboundPaddleBoatPacket steerLeftPacket = new ServerboundPaddleBoatPacket(session.isSteeringLeft(), session.isSteeringRight());
session.sendDownstreamGamePacket(steerLeftPacket);
}
case ROW_RIGHT -> {
session.setSteeringRight(packet.getRowingTime() > 0.0);
ServerboundPaddleBoatPacket steerRightPacket = new ServerboundPaddleBoatPacket(session.isSteeringLeft(), session.isSteeringRight());
session.sendDownstreamGamePacket(steerRightPacket);
}
}
} }
} }

Datei anzeigen

@ -78,7 +78,6 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla
BedrockMovePlayerTranslator.translate(session, packet); BedrockMovePlayerTranslator.translate(session, packet);
Set<PlayerAuthInputData> inputData = packet.getInputData(); Set<PlayerAuthInputData> inputData = packet.getInputData();
if (!inputData.isEmpty()) {
for (PlayerAuthInputData input : inputData) { for (PlayerAuthInputData input : inputData) {
switch (input) { switch (input) {
case PERFORM_ITEM_INTERACTION -> processItemUseTransaction(session, packet.getItemUseTransaction()); case PERFORM_ITEM_INTERACTION -> processItemUseTransaction(session, packet.getItemUseTransaction());
@ -154,7 +153,11 @@ public final class BedrockPlayerAuthInputTranslator extends PacketTranslator<Pla
case STOP_GLIDING -> sendPlayerGlideToggle(session, entity); case STOP_GLIDING -> sendPlayerGlideToggle(session, entity);
} }
} }
} boolean up = inputData.contains(PlayerAuthInputData.UP);
// Yes. These are flipped. It's always been an issue with Geyser. That's what it's like working with this codebase.
// Hi random stranger. I am six days into updating for 1.21.3. How's it going?
session.setSteeringLeft(up || inputData.contains(PlayerAuthInputData.PADDLE_RIGHT));
session.setSteeringRight(up || inputData.contains(PlayerAuthInputData.PADDLE_LEFT));
} }
private static void sendPlayerGlideToggle(GeyserSession session, Entity entity) { private static void sendPlayerGlideToggle(GeyserSession session, Entity entity) {