|
15 | 15 | import net.minecraft.entity.player.PlayerEntity; |
16 | 16 | import net.minecraft.nbt.NbtCompound; |
17 | 17 | import net.minecraft.server.MinecraftServer; |
| 18 | +import net.minecraft.server.network.ServerPlayerEntity; |
18 | 19 | import net.minecraft.util.math.BlockPos; |
19 | 20 | import net.minecraft.util.math.Box; |
20 | 21 | import net.minecraft.world.LocalDifficulty; |
@@ -45,6 +46,8 @@ public abstract class BasePawnEntity extends HungryEntity implements IFortressAw |
45 | 46 | private static final TrackedData<Integer> BODY_TEXTURE_ID = DataTracker.registerData(BasePawnEntity.class, TrackedDataHandlerRegistry.INTEGER); |
46 | 47 | private static final TrackedData<PawnSkin> PAWN_SKIN = DataTracker.registerData(BasePawnEntity.class, MineFortressMod.PAWN_SKIN_TRACKED_DATA_HANDLER); |
47 | 48 |
|
| 49 | + private volatile ServerPlayerEntity serverPlayer; |
| 50 | + |
48 | 51 | protected BasePawnEntity(EntityType<? extends BasePawnEntity> entityType, World world, boolean enableHunger) { |
49 | 52 | super(entityType, world, enableHunger); |
50 | 53 | } |
@@ -111,10 +114,15 @@ public BlockPos getFortressPos() { |
111 | 114 |
|
112 | 115 | @Override |
113 | 116 | public final @Nullable PlayerEntity getPlayer() { |
| 117 | + if (this.serverPlayer != null && !this.serverPlayer.isDisconnected()) { |
| 118 | + return this.serverPlayer; |
| 119 | + } |
| 120 | + |
114 | 121 | final var server = this.getServer(); |
115 | 122 | final var fortressPos = this.getFortressPos(); |
116 | 123 | if (fortressPos == null) return null; |
117 | | - return ServerExtensionsKt.getFortressOwner(server, fortressPos); |
| 124 | + server.submit(() -> ServerExtensionsKt.getFortressOwner(server, fortressPos)).thenAccept(it -> this.serverPlayer = it); |
| 125 | + return serverPlayer; |
118 | 126 | } |
119 | 127 |
|
120 | 128 | @Override |
|
0 commit comments