de.pewpewproject.lasertag.events.callback.PlayerJoinEventHandler   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 55
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 23
dl 0
loc 55
rs 10
c 0
b 0
f 0
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A sendPlayerJoinedNetworkEvent(MinecraftServer,UUID,String) 0 9 1
A onPlayerJoin(ServerPlayNetworkHandler,PacketSender,MinecraftServer) 0 43 4
1
package de.pewpewproject.lasertag.events.callback;
2
3
import de.pewpewproject.lasertag.lasertaggame.settings.SettingDescription;
4
import de.pewpewproject.lasertag.networking.NetworkingConstants;
5
import de.pewpewproject.lasertag.networking.server.ServerEventSending;
6
import io.netty.buffer.Unpooled;
7
import net.fabricmc.fabric.api.networking.v1.PacketSender;
8
import net.minecraft.network.PacketByteBuf;
9
import net.minecraft.server.MinecraftServer;
10
import net.minecraft.server.network.ServerPlayNetworkHandler;
11
import net.minecraft.server.network.ServerPlayerEntity;
12
import net.minecraft.util.math.BlockPos;
13
import net.minecraft.world.GameMode;
14
import net.minecraft.world.World;
15
16
import java.util.UUID;
17
18
/**
19
 * Event handler for the player join event
20
 *
21
 * @author Étienne Muser
22
 */
23
public class PlayerJoinEventHandler {
24
    public static void onPlayerJoin(ServerPlayNetworkHandler handler, PacketSender ignoredSender, MinecraftServer server) {
25
26
        // Get the player
27
        ServerPlayerEntity player = handler.getPlayer();
28
29
        // Get the game managers
30
        var gameManager = server.getOverworld().getServerLasertagManager();
31
        var playerNamesState = gameManager.getSyncedState().getPlayerNamesState();
32
        var settingsManager = gameManager.getSettingsManager();
33
        var teamsManager = gameManager.getTeamsManager();
34
35
        // Add player to player manager
36
        playerNamesState.savePlayerUsername(player.getUuid(), player.getLasertagUsername());
37
38
        // Sync state to the client
39
        gameManager.syncStateToClient(player);
40
41
        // Send player joined event
42
        sendPlayerJoinedNetworkEvent(server, player.getUuid(), player.getLasertagUsername());
43
44
        // If player is already in a team and game is running (he got disconnected)
45
        if (teamsManager.isPlayerInTeam(player.getUuid()) &&
46
            gameManager.isGameRunning()) {
47
48
            // Dont teleport him to origin and dont set him to adventure game mode
49
            return;
50
        }
51
52
        // If origin spawn setting is disabled
53
        if (!settingsManager.<Boolean>get(SettingDescription.DO_ORIGIN_SPAWN)) {
54
55
            // Dont teleport him to origin
56
            return;
57
        }
58
59
        // Set to adventure game mode
60
        player.changeGameMode(GameMode.ADVENTURE);
61
62
        // Teleport to spawn
63
        player.requestTeleport(0.5F, 1, 0.5F);
64
65
        // Set players spawnpoint
66
        player.setSpawnPoint(World.OVERWORLD, new BlockPos(0, 1, 0), 0.0F, true, false);
67
    }
68
69
    private static void sendPlayerJoinedNetworkEvent(MinecraftServer server, UUID playerUuid, String playerName) {
70
71
        // Create packet byte buffer
72
        PacketByteBuf buf = new PacketByteBuf(Unpooled.buffer());
73
74
        buf.writeUuid(playerUuid);
75
        buf.writeString(playerName);
76
77
        ServerEventSending.sendToEveryone(server, NetworkingConstants.PLAYER_JOINED, buf);
78
    }
79
}
80