Skip to content

Commit

Permalink
Refactor player join handling into Player class
Browse files Browse the repository at this point in the history
Moved player join logic from SpawnResponsePacketHandler to Player class, encapsulating it in the new `doFirstSpawn` method. Ensured `PlayerJoinEvent` uses `@NonNull` annotations for better null safety. This improves code maintainability and separation of concerns.
  • Loading branch information
AzaleeX committed Dec 14, 2024
1 parent 8204abf commit 3e25ee4
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 28 deletions.
8 changes: 5 additions & 3 deletions src/main/java/org/sculk/event/player/PlayerJoinEvent.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package org.sculk.event.player;


import lombok.NonNull;
import org.sculk.player.Player;

/*
Expand All @@ -20,18 +21,19 @@
*/
public class PlayerJoinEvent extends PlayerEvent {

@NonNull
protected String joinMessage;

public PlayerJoinEvent(Player player, String joinMessage) {
public PlayerJoinEvent(Player player, @NonNull String joinMessage) {
super(player);
this.joinMessage = joinMessage;
}

public String getJoinMessage() {
public @NonNull String getJoinMessage() {
return joinMessage;
}

public void setJoinMessage(String joinMessage) {
public void setJoinMessage(@NonNull String joinMessage) {
this.joinMessage = joinMessage;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,8 @@
import org.cloudburstmc.protocol.bedrock.packet.SetLocalPlayerAsInitializedPacket;
import org.cloudburstmc.protocol.common.PacketSignal;
import org.sculk.Server;
import org.sculk.event.player.PlayerJoinEvent;
import org.sculk.lang.LanguageKeys;
import org.sculk.network.session.SculkServerSession;
import org.sculk.utils.TextFormat;

import java.util.List;
import java.util.function.Consumer;

/*
Expand Down Expand Up @@ -46,17 +42,6 @@ public PacketSignal handlePacket(BedrockPacket packet) {
public PacketSignal handle(SetLocalPlayerAsInitializedPacket packet) {
this.responseCallback.accept(null);
Server.getInstance().getLogger().info("§b" + session.getPlayer().getName() + "[/" + session.getPlayerInfo().getServerAddress() + "] logged in with uuid " + session.getPlayer().getUniqueId());

PlayerJoinEvent playerJoinEvent = new PlayerJoinEvent(session.getPlayer(), session.getPlayer().getLanguage().translate(LanguageKeys.MINECRAFT_PLAYER_JOIN, List.of(session.getPlayer().getName())));
playerJoinEvent.call();
String joinMessage = playerJoinEvent.getJoinMessage();
if (joinMessage.isEmpty()) {
Server.getInstance().broadcastMessage(joinMessage);
} else {
String defaultJoinMessage = session.getPlayer().getLanguage().translate(LanguageKeys.MINECRAFT_PLAYER_JOIN, List.of(session.getPlayer().getName()));
System.out.println(defaultJoinMessage);
Server.getInstance().broadcastMessage(TextFormat.YELLOW + defaultJoinMessage + TextFormat.RESET);
}
return PacketSignal.HANDLED;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,15 @@
import lombok.Getter;
import lombok.Setter;
import org.checkerframework.checker.nullness.qual.NonNull;
import org.cloudburstmc.protocol.bedrock.BedrockPeer;
import org.cloudburstmc.protocol.bedrock.BedrockServerSession;
import org.cloudburstmc.protocol.bedrock.packet.*;
import org.sculk.Server;
import org.sculk.lang.Translatable;
import org.sculk.network.BedrockInterface;
import org.sculk.network.broadcaster.EntityEventBroadcaster;
import org.sculk.network.broadcaster.PacketBroadcaster;
import org.sculk.player.Player;
import org.sculk.Server;
import org.sculk.network.BedrockInterface;
import org.sculk.network.handler.*;
import org.sculk.player.Player;
import org.sculk.player.client.ClientChainData;
import org.sculk.player.text.RawTextBuilder;
import org.sculk.utils.SkinUtils;
Expand Down Expand Up @@ -134,6 +133,8 @@ private void notifyTerrainReady(Object e) {

private void onClientSpawnResponse(Object e) {
this.setPacketHandler(new InGamePacketHandler(this.getPlayer(),this));
assert this.player != null;
this.player.doFirstSpawn();
}


Expand Down
25 changes: 19 additions & 6 deletions src/main/java/org/sculk/player/Player.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,12 @@
import lombok.Setter;
import org.cloudburstmc.protocol.bedrock.data.AttributeData;
import org.cloudburstmc.protocol.bedrock.data.DisconnectFailReason;
import org.cloudburstmc.protocol.bedrock.data.command.*;
import org.cloudburstmc.protocol.bedrock.data.command.CommandData;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataMap;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes;
import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag;
import org.cloudburstmc.protocol.bedrock.data.skin.SerializedSkin;
import org.cloudburstmc.protocol.bedrock.packet.*;
import org.cloudburstmc.protocol.common.PacketSignal;
import org.sculk.Server;
import org.sculk.command.Command;
import org.sculk.command.CommandSender;
Expand All @@ -23,20 +22,23 @@
import org.sculk.entity.data.SyncedEntityData;
import org.sculk.event.player.PlayerChangeSkinEvent;
import org.sculk.event.player.PlayerChatEvent;
import org.sculk.event.player.PlayerJoinEvent;
import org.sculk.form.Form;
import org.sculk.lang.Language;
import org.sculk.lang.LanguageKeys;
import org.sculk.lang.Translatable;
import org.sculk.network.handler.PlayerSkinHandler;
import org.sculk.network.session.SculkServerSession;
import org.sculk.player.chat.StandardChatFormatter;
import org.sculk.player.client.ClientChainData;
import org.sculk.player.client.LoginChainData;
import org.sculk.player.skin.Skin;
import org.sculk.player.text.RawTextBuilder;
import org.sculk.utils.SkinUtils;
import org.sculk.utils.TextFormat;

import java.lang.ref.WeakReference;
import java.util.*;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;

Expand Down Expand Up @@ -102,6 +104,17 @@ public void initEntity() {
super.initEntity();
}

public void doFirstSpawn() {
PlayerJoinEvent playerJoinEvent = new PlayerJoinEvent(this, this.getLanguage().translate(LanguageKeys.MINECRAFT_PLAYER_JOIN, List.of(this.getName())));
playerJoinEvent.call();
String joinMessage = playerJoinEvent.getJoinMessage();
if (!joinMessage.isEmpty()) {
String defaultJoinMessage = this.getLanguage().translate(LanguageKeys.MINECRAFT_PLAYER_JOIN, List.of(this.getName()));
System.out.println(defaultJoinMessage);
Server.getInstance().broadcastMessage(TextFormat.YELLOW + defaultJoinMessage + TextFormat.RESET);
}
}

/**
* Called when a player changes their skin.
* Plugin developers should not use this, use setSkin() and sendSkin() instead.
Expand Down

0 comments on commit 3e25ee4

Please sign in to comment.