mirror of
https://github.com/Minestom/Minestom.git
synced 2025-01-16 05:02:19 +01:00
Prevent infinite load screen when not teleporting the player on spawning
This commit is contained in:
parent
ea6981c4b0
commit
1d1e82aeb3
@ -616,6 +616,16 @@ public class Player extends LivingEntity implements CommandSender {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Changes the player instance and load surrounding chunks if needed.
|
||||||
|
* <p>
|
||||||
|
* Be aware that because chunk operations are expensive,
|
||||||
|
* it is possible for this method to be non-blocking when retrieving chunks is required.
|
||||||
|
* <p>
|
||||||
|
* When this method is called for the first time (during player login), the player will be teleport at {@link #getRespawnPoint()}.
|
||||||
|
*
|
||||||
|
* @param instance the new instance of the player
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void setInstance(@NotNull Instance instance) {
|
public void setInstance(@NotNull Instance instance) {
|
||||||
Check.notNull(instance, "instance cannot be null!");
|
Check.notNull(instance, "instance cannot be null!");
|
||||||
@ -683,6 +693,11 @@ public class Player extends LivingEntity implements CommandSender {
|
|||||||
private void spawnPlayer(Instance instance, boolean firstSpawn) {
|
private void spawnPlayer(Instance instance, boolean firstSpawn) {
|
||||||
this.viewableEntities.forEach(entity -> entity.removeViewer(this));
|
this.viewableEntities.forEach(entity -> entity.removeViewer(this));
|
||||||
super.setInstance(instance);
|
super.setInstance(instance);
|
||||||
|
|
||||||
|
if (firstSpawn) {
|
||||||
|
teleport(getRespawnPoint());
|
||||||
|
}
|
||||||
|
|
||||||
PlayerSpawnEvent spawnEvent = new PlayerSpawnEvent(this, instance, firstSpawn);
|
PlayerSpawnEvent spawnEvent = new PlayerSpawnEvent(this, instance, firstSpawn);
|
||||||
callEvent(PlayerSpawnEvent.class, spawnEvent);
|
callEvent(PlayerSpawnEvent.class, spawnEvent);
|
||||||
}
|
}
|
||||||
|
@ -35,7 +35,7 @@ public class PlayerLoginEvent extends Event {
|
|||||||
* <p>
|
* <p>
|
||||||
* WARNING: this must NOT be null, otherwise the player cannot spawn.
|
* WARNING: this must NOT be null, otherwise the player cannot spawn.
|
||||||
*
|
*
|
||||||
* @return the spawning instance
|
* @return the spawning instance, null if not already defined
|
||||||
*/
|
*/
|
||||||
@Nullable
|
@Nullable
|
||||||
public Instance getSpawningInstance() {
|
public Instance getSpawningInstance() {
|
||||||
|
@ -18,6 +18,8 @@ public final class OptifineSupport {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Enables optifine support by registering the required biomes.
|
* Enables optifine support by registering the required biomes.
|
||||||
|
*
|
||||||
|
* @throws IllegalStateException if optifine support is already enabled
|
||||||
*/
|
*/
|
||||||
public static void enable() {
|
public static void enable() {
|
||||||
Check.stateCondition(enabled, "Optifine support is already enabled!");
|
Check.stateCondition(enabled, "Optifine support is already enabled!");
|
||||||
|
@ -17,7 +17,7 @@ import java.util.concurrent.atomic.AtomicInteger;
|
|||||||
@EqualsAndHashCode
|
@EqualsAndHashCode
|
||||||
public class Biome {
|
public class Biome {
|
||||||
|
|
||||||
public static final AtomicInteger idCounter = new AtomicInteger(0);
|
public static final AtomicInteger ID_COUNTER = new AtomicInteger(0);
|
||||||
|
|
||||||
private static final BiomeEffects DEFAULT_EFFECTS = BiomeEffects.builder()
|
private static final BiomeEffects DEFAULT_EFFECTS = BiomeEffects.builder()
|
||||||
.fog_color(0xC0D8FF)
|
.fog_color(0xC0D8FF)
|
||||||
@ -37,7 +37,7 @@ public class Biome {
|
|||||||
.effects(DEFAULT_EFFECTS)
|
.effects(DEFAULT_EFFECTS)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
private final int id = idCounter.getAndIncrement();
|
private final int id = ID_COUNTER.getAndIncrement();
|
||||||
|
|
||||||
private final NamespaceID name;
|
private final NamespaceID name;
|
||||||
@Builder.Default
|
@Builder.Default
|
||||||
|
@ -15,7 +15,7 @@ import java.util.Collections;
|
|||||||
* <p>
|
* <p>
|
||||||
* Contains {@link Biome#PLAINS} by default but can be removed.
|
* Contains {@link Biome#PLAINS} by default but can be removed.
|
||||||
*/
|
*/
|
||||||
public class BiomeManager {
|
public final class BiomeManager {
|
||||||
|
|
||||||
private final Int2ObjectMap<Biome> biomes = new Int2ObjectOpenHashMap<>();
|
private final Int2ObjectMap<Biome> biomes = new Int2ObjectOpenHashMap<>();
|
||||||
|
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
package demo;
|
package demo;
|
||||||
|
|
||||||
import net.minestom.server.MinecraftServer;
|
import net.minestom.server.MinecraftServer;
|
||||||
import net.minestom.server.entity.GameMode;
|
|
||||||
import net.minestom.server.event.player.PlayerLoginEvent;
|
import net.minestom.server.event.player.PlayerLoginEvent;
|
||||||
import net.minestom.server.event.player.PlayerSpawnEvent;
|
|
||||||
import net.minestom.server.instance.*;
|
import net.minestom.server.instance.*;
|
||||||
import net.minestom.server.instance.batch.ChunkBatch;
|
import net.minestom.server.instance.batch.ChunkBatch;
|
||||||
import net.minestom.server.instance.block.Block;
|
import net.minestom.server.instance.block.Block;
|
||||||
@ -34,13 +32,7 @@ public class MainDemo {
|
|||||||
// Set the spawning instance
|
// Set the spawning instance
|
||||||
player.addEventCallback(PlayerLoginEvent.class, event -> {
|
player.addEventCallback(PlayerLoginEvent.class, event -> {
|
||||||
event.setSpawningInstance(instanceContainer);
|
event.setSpawningInstance(instanceContainer);
|
||||||
player.setRespawnPoint(new Position(0,45,0));
|
player.setRespawnPoint(new Position(0, 45, 0));
|
||||||
});
|
|
||||||
|
|
||||||
// Teleport the player at spawn
|
|
||||||
player.addEventCallback(PlayerSpawnEvent.class, event -> {
|
|
||||||
player.teleport(new Position(0, 45, 0));
|
|
||||||
player.setGameMode(GameMode.CREATIVE);
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user