Fix fishing rod behavior on Geyser players

Fixes #2716
This commit is contained in:
Camotoy 2021-12-19 19:15:53 -05:00
parent 71a975b805
commit 15522aed52
2 changed files with 5 additions and 11 deletions

View file

@ -50,7 +50,7 @@ public class FishingHookEntity extends ThrowableEntity {
private boolean inWater = false;
@Getter
private final boolean isOwnerSessionPlayer;
private final long bedrockOwnerId;
@Getter
private long bedrockTargetId;
@ -66,14 +66,8 @@ public class FishingHookEntity extends ThrowableEntity {
// so that it can be handled by moveAbsoluteImmediate.
setBoundingBoxHeight(128);
isOwnerSessionPlayer = owner.getGeyserId() == session.getPlayerEntity().getGeyserId();
this.dirtyMetadata.put(EntityData.OWNER_EID, owner.getGeyserId());
}
@Override
public void spawnEntity() {
super.spawnEntity();
this.bedrockOwnerId = owner.getGeyserId();
this.dirtyMetadata.put(EntityData.OWNER_EID, this.bedrockOwnerId);
}
public void setHookedEntity(IntEntityMetadata entityMetadata) {

View file

@ -119,8 +119,8 @@ public class JavaEntityEventTranslator extends PacketTranslator<ClientboundEntit
// Player is pulled from a fishing rod
// The physics of this are clientside on Java
FishingHookEntity fishingHook = (FishingHookEntity) entity;
if (fishingHook.isOwnerSessionPlayer()) {
Entity hookOwner = session.getEntityCache().getEntityByGeyserId(fishingHook.getBedrockTargetId());
if (fishingHook.getBedrockTargetId() == session.getPlayerEntity().getGeyserId()) {
Entity hookOwner = session.getEntityCache().getEntityByGeyserId(fishingHook.getBedrockOwnerId());
if (hookOwner != null) {
// https://minecraft.gamepedia.com/Fishing_Rod#Hooking_mobs_and_other_entities
SetEntityMotionPacket motionPacket = new SetEntityMotionPacket();