此bounty已结束。回答此问题可获得+200声望奖励。赏金宽限期17小时后结束。CaseyB希望吸引更多的注意力这个问题:我正在寻找帮助,让这个工作。第一个实现正确行为的解决方案将获得奖励。
我想创建一个模式,覆盖默认的重生机制。我希望每个球员开始100,000块从产卵在不同的方向,并有这是他们的默认重生位置。我试着用这个行为覆盖ServerPlayerEntity,看起来它可能起作用了,但是我找不到一种方法让服务器用我的子类替换默认的ServerPlayerEntity。
这就是我想做的
public class Server100KMPlayerEntity extends ServerPlayerEntity {
public Server100KMPlayerEntity(MinecraftServer server, ServerWorld world, GameProfile profile) {
super(server, world, profile);
}
@Override
public void setSpawnPoint(RegistryKey<World> dimension, @Nullable BlockPos pos, float angle, boolean forced, boolean sendMessage) {
if (pos != null) {
super.setSpawnPoint(dimension, pos, angle, forced, sendMessage);
} else {
BlockPos newPos = PlayerPositions.valueOf(getEntityName()).getPosition(getServer().getWorld(World.OVERWORLD));
super.setSpawnPoint(World.OVERWORLD, newPos, 0f, false, sendMessage);
}
}
enum PlayerPositions {
Player1(-70711, -70711),
Player2(70711, -70711),
Player3(-70711, 70711),
Player4(70711, 70711);
private final int x, z;
PlayerPositions(int x, int z) {
this.x = x;
this.z = z;
}
public BlockPos getPosition(World world) {
for (int d = world.getTopY(); d > world.getBottomY(); --d) {
if (!world.isSpaceEmpty(new Box(new BlockPos(x, d, z)))) {
return new BlockPos(x, d - 1, z);
}
}
return null;
}
}
}
我还研究了S2 C和C2 S事件,但没有看到任何看起来有帮助的东西。任何建议将不胜感激。
2条答案
按热度按时间xhv8bpkk1#
您可以将Mixin注入到
PlayerManager
类中的respawnPlayer
方法中,每次在玩家生成之前,您都可以在其中设置玩家的生成点。下面是一个例子:
有一点需要注意:当你把Y轴传递给
setSpawnPoint
时,Y轴很重要,如果有块出现在玩家要出生的地方,它会默认回到世界出生点。地面以上的位置,甚至在空中应该工作得很好。ffscu2ro2#
示例实现