Mirror von
https://github.com/GeyserMC/Geyser.git
synchronisiert 2024-11-19 22:40:18 +01:00
Address some reviews
Dieser Commit ist enthalten in:
Ursprung
97c42d34d5
Commit
d49a3ec5dd
@ -40,7 +40,6 @@ import org.geysermc.geyser.api.entity.type.GeyserEntity;
|
|||||||
import org.geysermc.geyser.entity.EntityDefinition;
|
import org.geysermc.geyser.entity.EntityDefinition;
|
||||||
import org.geysermc.geyser.entity.GeyserDirtyMetadata;
|
import org.geysermc.geyser.entity.GeyserDirtyMetadata;
|
||||||
import org.geysermc.geyser.entity.properties.GeyserEntityPropertyManager;
|
import org.geysermc.geyser.entity.properties.GeyserEntityPropertyManager;
|
||||||
import org.geysermc.geyser.entity.vehicle.ClientVehicle;
|
|
||||||
import org.geysermc.geyser.item.Items;
|
import org.geysermc.geyser.item.Items;
|
||||||
import org.geysermc.geyser.session.GeyserSession;
|
import org.geysermc.geyser.session.GeyserSession;
|
||||||
import org.geysermc.geyser.translator.text.MessageTranslator;
|
import org.geysermc.geyser.translator.text.MessageTranslator;
|
||||||
@ -224,13 +223,6 @@ public class Entity implements GeyserEntity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void moveRelative(double relX, double relY, double relZ, float yaw, float pitch, float headYaw, boolean isOnGround) {
|
public void moveRelative(double relX, double relY, double relZ, float yaw, float pitch, float headYaw, boolean isOnGround) {
|
||||||
if (this instanceof ClientVehicle clientVehicle) {
|
|
||||||
if (clientVehicle.isClientControlled()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
clientVehicle.getVehicleComponent().moveRelative(relX, relY, relZ);
|
|
||||||
}
|
|
||||||
|
|
||||||
position = Vector3f.from(position.getX() + relX, position.getY() + relY, position.getZ() + relZ);
|
position = Vector3f.from(position.getX() + relX, position.getY() + relY, position.getZ() + relZ);
|
||||||
|
|
||||||
MoveEntityDeltaPacket moveEntityPacket = new MoveEntityDeltaPacket();
|
MoveEntityDeltaPacket moveEntityPacket = new MoveEntityDeltaPacket();
|
||||||
@ -466,10 +458,6 @@ public class Entity implements GeyserEntity {
|
|||||||
dirtyMetadata.put(EntityDataTypes.HEIGHT, boundingBoxHeight);
|
dirtyMetadata.put(EntityDataTypes.HEIGHT, boundingBoxHeight);
|
||||||
|
|
||||||
updatePassengerOffsets();
|
updatePassengerOffsets();
|
||||||
|
|
||||||
if (valid && this instanceof ClientVehicle clientVehicle) {
|
|
||||||
clientVehicle.getVehicleComponent().setHeight(boundingBoxHeight);
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
@ -479,10 +467,6 @@ public class Entity implements GeyserEntity {
|
|||||||
if (width != boundingBoxWidth) {
|
if (width != boundingBoxWidth) {
|
||||||
boundingBoxWidth = width;
|
boundingBoxWidth = width;
|
||||||
dirtyMetadata.put(EntityDataTypes.WIDTH, boundingBoxWidth);
|
dirtyMetadata.put(EntityDataTypes.WIDTH, boundingBoxWidth);
|
||||||
|
|
||||||
if (valid && this instanceof ClientVehicle clientVehicle) {
|
|
||||||
clientVehicle.getVehicleComponent().setWidth(boundingBoxWidth);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,6 +289,36 @@ public class LivingEntity extends Entity {
|
|||||||
return super.interact(hand);
|
return super.interact(hand);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void moveRelative(double relX, double relY, double relZ, float yaw, float pitch, float headYaw, boolean isOnGround) {
|
||||||
|
if (this instanceof ClientVehicle clientVehicle) {
|
||||||
|
if (clientVehicle.isClientControlled()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
clientVehicle.getVehicleComponent().moveRelative(relX, relY, relZ);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.moveRelative(relX, relY, relZ, yaw, pitch, headYaw, isOnGround);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean setBoundingBoxHeight(float height) {
|
||||||
|
if (valid && this instanceof ClientVehicle clientVehicle) {
|
||||||
|
clientVehicle.getVehicleComponent().setHeight(height);
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.setBoundingBoxHeight(height);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBoundingBoxWidth(float width) {
|
||||||
|
if (valid && this instanceof ClientVehicle clientVehicle) {
|
||||||
|
clientVehicle.getVehicleComponent().setWidth(width);
|
||||||
|
}
|
||||||
|
|
||||||
|
super.setBoundingBoxWidth(width);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks to see if a nametag interaction would go through.
|
* Checks to see if a nametag interaction would go through.
|
||||||
*/
|
*/
|
||||||
|
@ -38,6 +38,7 @@ import org.geysermc.erosion.util.BlockPositionIterator;
|
|||||||
import org.geysermc.geyser.entity.EntityDefinitions;
|
import org.geysermc.geyser.entity.EntityDefinitions;
|
||||||
import org.geysermc.geyser.entity.type.Entity;
|
import org.geysermc.geyser.entity.type.Entity;
|
||||||
import org.geysermc.geyser.entity.type.player.PlayerEntity;
|
import org.geysermc.geyser.entity.type.player.PlayerEntity;
|
||||||
|
import org.geysermc.geyser.entity.vehicle.ClientVehicle;
|
||||||
import org.geysermc.geyser.level.block.BlockStateValues;
|
import org.geysermc.geyser.level.block.BlockStateValues;
|
||||||
import org.geysermc.geyser.level.block.Blocks;
|
import org.geysermc.geyser.level.block.Blocks;
|
||||||
import org.geysermc.geyser.level.block.property.Properties;
|
import org.geysermc.geyser.level.block.property.Properties;
|
||||||
@ -132,6 +133,21 @@ public class CollisionManager {
|
|||||||
playerBoundingBox.setSizeY(playerHeight);
|
playerBoundingBox.setSizeY(playerHeight);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the bounding box to use for player movement.
|
||||||
|
* <p>
|
||||||
|
* This will return either the bounding box of a {@link ClientVehicle}, or the player's own bounding box.
|
||||||
|
*
|
||||||
|
* @return the bounding box to use for movement calculations
|
||||||
|
*/
|
||||||
|
public BoundingBox getActiveBoundingBox() {
|
||||||
|
if (session.getPlayerEntity().getVehicle() instanceof ClientVehicle clientVehicle && clientVehicle.isClientControlled()) {
|
||||||
|
return clientVehicle.getVehicleComponent().getBoundingBox();
|
||||||
|
}
|
||||||
|
|
||||||
|
return playerBoundingBox;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adjust the Bedrock position before sending to the Java server to account for inaccuracies in movement between
|
* Adjust the Bedrock position before sending to the Java server to account for inaccuracies in movement between
|
||||||
* the two versions. Will also send corrected movement packets back to Bedrock if they collide with pistons.
|
* the two versions. Will also send corrected movement packets back to Bedrock if they collide with pistons.
|
||||||
@ -154,6 +170,15 @@ public class CollisionManager {
|
|||||||
Vector3d position = Vector3d.from(Double.parseDouble(Float.toString(bedrockPosition.getX())), javaY,
|
Vector3d position = Vector3d.from(Double.parseDouble(Float.toString(bedrockPosition.getX())), javaY,
|
||||||
Double.parseDouble(Float.toString(bedrockPosition.getZ())));
|
Double.parseDouble(Float.toString(bedrockPosition.getZ())));
|
||||||
|
|
||||||
|
// Don't correct position if controlling a vehicle
|
||||||
|
if (session.getPlayerEntity().getVehicle() instanceof ClientVehicle clientVehicle && clientVehicle.isClientControlled()) {
|
||||||
|
playerBoundingBox.setMiddleX(position.getX());
|
||||||
|
playerBoundingBox.setMiddleY(position.getY() + playerBoundingBox.getSizeY() / 2);
|
||||||
|
playerBoundingBox.setMiddleZ(position.getZ());
|
||||||
|
|
||||||
|
return playerBoundingBox.getBottomCenter();
|
||||||
|
}
|
||||||
|
|
||||||
Vector3d startingPos = playerBoundingBox.getBottomCenter();
|
Vector3d startingPos = playerBoundingBox.getBottomCenter();
|
||||||
Vector3d movement = position.sub(startingPos);
|
Vector3d movement = position.sub(startingPos);
|
||||||
Vector3d adjustedMovement = correctPlayerMovement(movement, false, teleported);
|
Vector3d adjustedMovement = correctPlayerMovement(movement, false, teleported);
|
||||||
|
@ -167,10 +167,17 @@ public class BlockCollision {
|
|||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isBelow(double y, BoundingBox boundingBox) {
|
/**
|
||||||
|
* Checks if this block collision is below the given bounding box.
|
||||||
|
*
|
||||||
|
* @param blockY the y position of the block in the world
|
||||||
|
* @param boundingBox the bounding box to compare
|
||||||
|
* @return true if this block collision is below the bounding box
|
||||||
|
*/
|
||||||
|
public boolean isBelow(int blockY, BoundingBox boundingBox) {
|
||||||
double minY = boundingBox.getMiddleY() - boundingBox.getSizeY() / 2;
|
double minY = boundingBox.getMiddleY() - boundingBox.getSizeY() / 2;
|
||||||
for (BoundingBox b : boundingBoxes) {
|
for (BoundingBox b : boundingBoxes) {
|
||||||
double offset = y + b.getMiddleY() + b.getSizeY() / 2 - minY;
|
double offset = blockY + b.getMiddleY() + b.getSizeY() / 2 - minY;
|
||||||
if (offset > CollisionManager.COLLISION_TOLERANCE) {
|
if (offset > CollisionManager.COLLISION_TOLERANCE) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -601,14 +601,7 @@ public class PistonBlockEntity {
|
|||||||
movingBlockMap.put(getPistonHeadPos(), this);
|
movingBlockMap.put(getPistonHeadPos(), this);
|
||||||
|
|
||||||
Vector3i movement = getMovement();
|
Vector3i movement = getMovement();
|
||||||
|
BoundingBox playerBoundingBox = session.getCollisionManager().getActiveBoundingBox().clone();
|
||||||
BoundingBox playerBoundingBox;
|
|
||||||
if (session.getPlayerEntity().getVehicle() instanceof ClientVehicle clientVehicle && clientVehicle.isClientControlled()) {
|
|
||||||
playerBoundingBox = clientVehicle.getVehicleComponent().getBoundingBox().clone();
|
|
||||||
} else {
|
|
||||||
playerBoundingBox = session.getCollisionManager().getPlayerBoundingBox().clone();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (orientation == Direction.UP) {
|
if (orientation == Direction.UP) {
|
||||||
// Extend the bounding box down, to catch collisions when the player is falling down
|
// Extend the bounding box down, to catch collisions when the player is falling down
|
||||||
playerBoundingBox.extend(0, -256, 0);
|
playerBoundingBox.extend(0, -256, 0);
|
||||||
@ -653,14 +646,8 @@ public class PistonBlockEntity {
|
|||||||
}
|
}
|
||||||
placedFinalBlocks = true;
|
placedFinalBlocks = true;
|
||||||
|
|
||||||
BoundingBox playerBoundingBox;
|
|
||||||
if (session.getPlayerEntity().getVehicle() instanceof ClientVehicle clientVehicle && clientVehicle.isClientControlled()) {
|
|
||||||
playerBoundingBox = clientVehicle.getVehicleComponent().getBoundingBox().clone();
|
|
||||||
} else {
|
|
||||||
playerBoundingBox = session.getCollisionManager().getPlayerBoundingBox().clone();
|
|
||||||
}
|
|
||||||
|
|
||||||
Vector3i movement = getMovement();
|
Vector3i movement = getMovement();
|
||||||
|
BoundingBox playerBoundingBox = session.getCollisionManager().getActiveBoundingBox().clone();
|
||||||
attachedBlocks.forEach((blockPos, state) -> {
|
attachedBlocks.forEach((blockPos, state) -> {
|
||||||
blockPos = blockPos.add(movement);
|
blockPos = blockPos.add(movement);
|
||||||
// Don't place blocks that collide with the player
|
// Don't place blocks that collide with the player
|
||||||
|
Laden…
In neuem Issue referenzieren
Einen Benutzer sperren