Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-11-19 22:40:18 +01:00
Remove old sneaking/crawling workarounds
Since Bedrock implements these natively, there's no need for extra checks. :)
Dieser Commit ist enthalten in:
Ursprung
0094fa1418
Commit
f7b026d61b
@ -31,7 +31,6 @@ import org.checkerframework.checker.nullness.qual.Nullable;
|
|||||||
import org.cloudburstmc.math.vector.Vector3f;
|
import org.cloudburstmc.math.vector.Vector3f;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.AttributeData;
|
import org.cloudburstmc.protocol.bedrock.data.AttributeData;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
|
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
|
||||||
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
|
|
||||||
import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket;
|
import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket;
|
||||||
import org.geysermc.geyser.entity.attribute.GeyserAttributeType;
|
import org.geysermc.geyser.entity.attribute.GeyserAttributeType;
|
||||||
import org.geysermc.geyser.item.Items;
|
import org.geysermc.geyser.item.Items;
|
||||||
@ -60,10 +59,6 @@ public class SessionPlayerEntity extends PlayerEntity {
|
|||||||
*/
|
*/
|
||||||
@Getter
|
@Getter
|
||||||
protected final Map<GeyserAttributeType, AttributeData> attributes = new Object2ObjectOpenHashMap<>();
|
protected final Map<GeyserAttributeType, AttributeData> attributes = new Object2ObjectOpenHashMap<>();
|
||||||
/**
|
|
||||||
* Whether to check for updated speed after all entity metadata has been processed
|
|
||||||
*/
|
|
||||||
private boolean refreshSpeed = false;
|
|
||||||
/**
|
/**
|
||||||
* Used in PlayerInputTranslator for movement checks.
|
* Used in PlayerInputTranslator for movement checks.
|
||||||
*/
|
*/
|
||||||
@ -120,9 +115,7 @@ public class SessionPlayerEntity extends PlayerEntity {
|
|||||||
// TODO: proper fix, BDS somehow does it? https://paste.gg/p/anonymous/3adfb7612f1540be80fa03a2281f93dc (BDS 1.20.13)
|
// TODO: proper fix, BDS somehow does it? https://paste.gg/p/anonymous/3adfb7612f1540be80fa03a2281f93dc (BDS 1.20.13)
|
||||||
if (!this.session.getGameMode().equals(GameMode.SPECTATOR)) {
|
if (!this.session.getGameMode().equals(GameMode.SPECTATOR)) {
|
||||||
super.setFlags(entityMetadata);
|
super.setFlags(entityMetadata);
|
||||||
session.setSwimmingInWater((entityMetadata.getPrimitiveValue() & 0x10) == 0x10 && getFlag(EntityFlag.SPRINTING));
|
|
||||||
}
|
}
|
||||||
refreshSpeed = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -150,7 +143,6 @@ public class SessionPlayerEntity extends PlayerEntity {
|
|||||||
public void setPose(Pose pose) {
|
public void setPose(Pose pose) {
|
||||||
super.setPose(pose);
|
super.setPose(pose);
|
||||||
session.setPose(pose);
|
session.setPose(pose);
|
||||||
refreshSpeed = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public float getMaxHealth() {
|
public float getMaxHealth() {
|
||||||
@ -199,21 +191,6 @@ public class SessionPlayerEntity extends PlayerEntity {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public void updateBedrockMetadata() {
|
|
||||||
super.updateBedrockMetadata();
|
|
||||||
if (refreshSpeed) {
|
|
||||||
AttributeData speedAttribute = session.adjustSpeed();
|
|
||||||
if (speedAttribute != null) {
|
|
||||||
UpdateAttributesPacket attributesPacket = new UpdateAttributesPacket();
|
|
||||||
attributesPacket.setRuntimeEntityId(geyserId);
|
|
||||||
attributesPacket.setAttributes(Collections.singletonList(speedAttribute));
|
|
||||||
session.sendUpstreamPacket(attributesPacket);
|
|
||||||
}
|
|
||||||
refreshSpeed = false;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void updateAttribute(Attribute javaAttribute, List<AttributeData> newAttributes) {
|
protected void updateAttribute(Attribute javaAttribute, List<AttributeData> newAttributes) {
|
||||||
if (javaAttribute.getType() == AttributeType.Builtin.GENERIC_ATTACK_SPEED) {
|
if (javaAttribute.getType() == AttributeType.Builtin.GENERIC_ATTACK_SPEED) {
|
||||||
@ -226,17 +203,6 @@ public class SessionPlayerEntity extends PlayerEntity {
|
|||||||
@Override
|
@Override
|
||||||
protected AttributeData calculateAttribute(Attribute javaAttribute, GeyserAttributeType type) {
|
protected AttributeData calculateAttribute(Attribute javaAttribute, GeyserAttributeType type) {
|
||||||
AttributeData attributeData = super.calculateAttribute(javaAttribute, type);
|
AttributeData attributeData = super.calculateAttribute(javaAttribute, type);
|
||||||
|
|
||||||
if (javaAttribute.getType() == AttributeType.Builtin.GENERIC_MOVEMENT_SPEED) {
|
|
||||||
session.setOriginalSpeedAttribute(attributeData.getValue());
|
|
||||||
AttributeData speedAttribute = session.adjustSpeed();
|
|
||||||
if (speedAttribute != null) {
|
|
||||||
// Overwrite the attribute with our own
|
|
||||||
this.attributes.put(type, speedAttribute);
|
|
||||||
return speedAttribute;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
this.attributes.put(type, attributeData);
|
this.attributes.put(type, attributeData);
|
||||||
return attributeData;
|
return attributeData;
|
||||||
}
|
}
|
||||||
|
@ -317,22 +317,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
|||||||
@Setter
|
@Setter
|
||||||
private boolean sprinting;
|
private boolean sprinting;
|
||||||
|
|
||||||
/**
|
|
||||||
* Whether the player is swimming in water.
|
|
||||||
* Used to update speed when crawling.
|
|
||||||
*/
|
|
||||||
@Setter
|
|
||||||
private boolean swimmingInWater;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Tracks the original speed attribute.
|
|
||||||
* <p>
|
|
||||||
* We need to do this in order to emulate speeds when sneaking under 1.5-blocks-tall areas if the player isn't sneaking,
|
|
||||||
* and when crawling.
|
|
||||||
*/
|
|
||||||
@Setter
|
|
||||||
private float originalSpeedAttribute;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The dimension of the player.
|
* The dimension of the player.
|
||||||
* As all entities are in the same world, this can be safely applied to all other entities.
|
* As all entities are in the same world, this can be safely applied to all other entities.
|
||||||
@ -1283,21 +1267,11 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
|||||||
this.sneaking = sneaking;
|
this.sneaking = sneaking;
|
||||||
|
|
||||||
// Update pose and bounding box on our end
|
// Update pose and bounding box on our end
|
||||||
AttributeData speedAttribute;
|
|
||||||
if (!sneaking && (speedAttribute = adjustSpeed()) != null) {
|
|
||||||
// Update attributes since we're still "sneaking" under a 1.5-block-tall area
|
|
||||||
UpdateAttributesPacket attributesPacket = new UpdateAttributesPacket();
|
|
||||||
attributesPacket.setRuntimeEntityId(playerEntity.getGeyserId());
|
|
||||||
attributesPacket.setAttributes(Collections.singletonList(speedAttribute));
|
|
||||||
sendUpstreamPacket(attributesPacket);
|
|
||||||
// the server *should* update our pose once it has returned to normal
|
|
||||||
} else {
|
|
||||||
if (!flying) {
|
if (!flying) {
|
||||||
// The pose and bounding box should not be updated if the player is flying
|
// The pose and bounding box should not be updated if the player is flying
|
||||||
setSneakingPose(sneaking);
|
setSneakingPose(sneaking);
|
||||||
}
|
}
|
||||||
collisionManager.updateScaffoldingFlags(false);
|
collisionManager.updateScaffoldingFlags(false);
|
||||||
}
|
|
||||||
|
|
||||||
playerEntity.updateBedrockMetadata();
|
playerEntity.updateBedrockMetadata();
|
||||||
|
|
||||||
@ -1340,30 +1314,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Adjusts speed if the player is crawling.
|
|
||||||
*
|
|
||||||
* @return not null if attributes should be updated.
|
|
||||||
*/
|
|
||||||
public @Nullable AttributeData adjustSpeed() {
|
|
||||||
AttributeData currentPlayerSpeed = playerEntity.getAttributes().get(GeyserAttributeType.MOVEMENT_SPEED);
|
|
||||||
if (currentPlayerSpeed != null) {
|
|
||||||
if ((pose.equals(Pose.SNEAKING) && !sneaking && collisionManager.mustPlayerSneakHere()) ||
|
|
||||||
(!swimmingInWater && playerEntity.getFlag(EntityFlag.SWIMMING) && !collisionManager.isPlayerInWater())) {
|
|
||||||
// Either of those conditions means that Bedrock goes zoom when they shouldn't be
|
|
||||||
AttributeData speedAttribute = GeyserAttributeType.MOVEMENT_SPEED.getAttribute(originalSpeedAttribute / 3.32f);
|
|
||||||
playerEntity.getAttributes().put(GeyserAttributeType.MOVEMENT_SPEED, speedAttribute);
|
|
||||||
return speedAttribute;
|
|
||||||
} else if (originalSpeedAttribute != currentPlayerSpeed.getValue()) {
|
|
||||||
// Speed has reset to normal
|
|
||||||
AttributeData speedAttribute = GeyserAttributeType.MOVEMENT_SPEED.getAttribute(originalSpeedAttribute);
|
|
||||||
playerEntity.getAttributes().put(GeyserAttributeType.MOVEMENT_SPEED, speedAttribute);
|
|
||||||
return speedAttribute;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks to see if a shield is in either hand to activate blocking. If so, it sets the Bedrock client to display
|
* Checks to see if a shield is in either hand to activate blocking. If so, it sets the Bedrock client to display
|
||||||
* blocking and sends a packet to the Java server.
|
* blocking and sends a packet to the Java server.
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren