Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build_all.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
distribution: 'zulu'
java-version: '21'
- name: Build projects
run: chmod 777 gradlew && ./gradlew build
run: chmod 777 gradlew && ./gradlew generateTemplates && ./gradlew build
- name: Copy built jar
run: mkdir build_out && cp Freesia-Velocity/build/libs/*.jar ./build_out && cp Freesia-Worker/build/libs/*.jar ./build_out && cp Freesia-Backend/build/libs/*.jar ./build_out
- name: Upload Artifact
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,12 @@ public void onEnable() {
INSTANCE = this;

// TODO- De-hard-coding?
Bukkit.getMessenger().registerIncomingPluginChannel(this, "freesia:tracker_sync", this.trackerProcessor);
Bukkit.getMessenger().registerOutgoingPluginChannel(this, "freesia:tracker_sync");
Bukkit.getMessenger().registerIncomingPluginChannel(this, TrackerProcessor.CHANNEL_NAME, this.trackerProcessor);
Bukkit.getMessenger().registerOutgoingPluginChannel(this, TrackerProcessor.CHANNEL_NAME);

// TODO- De-hard-coding?
Bukkit.getMessenger().registerIncomingPluginChannel(this, "freesia:virtual_player_management", this.virtualPlayerManager);
Bukkit.getMessenger().registerOutgoingPluginChannel(this, "freesia:virtual_player_management");
Bukkit.getMessenger().registerIncomingPluginChannel(this, VirtualPlayerManager.CHANNEL_NAME, this.virtualPlayerManager);
Bukkit.getMessenger().registerOutgoingPluginChannel(this, VirtualPlayerManager.CHANNEL_NAME);


Bukkit.getPluginManager().registerEvents(this.trackerProcessor, this);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import java.util.function.Consumer;

public class VirtualPlayerManager implements PluginMessageListener, Listener {
private static final String CHANNEL_NAME = "freesia:virtual_player_management";
public static final String CHANNEL_NAME = "freesia:virtual_player_management";

private final AtomicInteger eventIdGenerator = new AtomicInteger(0);
private final Map<Integer, Consumer<Boolean>> pendingCallbacks = new ConcurrentHashMap<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import java.util.*;

public class TrackerProcessor implements PluginMessageListener, Listener {
private static final String CHANNEL_NAME = "freesia:tracker_sync";
public static final String CHANNEL_NAME = "freesia:tracker_sync";

// The default tracker event which is provided by Paper
@EventHandler
Expand Down
5 changes: 3 additions & 2 deletions Freesia-Velocity/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,12 @@ dependencies {
compileOnly("com.github.retrooper:packetevents-velocity:2.5.0")
compileOnly("com.velocitypowered:velocity-api:3.3.0-SNAPSHOT")
compileOnly("net.kyori:adventure-api:4.17.0")

implementation(project(":Freesia-Common"))
implementation("com.electronwill.night-config:toml:3.6.6")
implementation("org.geysermc.mcprotocollib:protocol:1.21-SNAPSHOT")
implementation(project(":Freesia-Common"))
implementation("ca.spottedleaf:concurrentutil:0.0.3")
annotationProcessor("com.velocitypowered:velocity-api:3.3.0-SNAPSHOT")
annotationProcessor("com.velocitypowered:velocity-api:3.4.0-SNAPSHOT")
}

val targetJavaVersion = 21
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@
import com.velocitypowered.api.event.connection.DisconnectEvent;
import com.velocitypowered.api.event.connection.PluginMessageEvent;
import com.velocitypowered.api.event.player.ServerConnectedEvent;
import com.velocitypowered.api.event.player.ServerPostConnectEvent;
import com.velocitypowered.api.event.player.ServerPreConnectEvent;
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
import com.velocitypowered.api.plugin.Dependency;
Expand All @@ -29,7 +28,7 @@
import meow.kikir.freesia.velocity.network.backend.MasterServerMessageHandler;
import meow.kikir.freesia.velocity.network.mc.FreesiaPlayerTracker;
import meow.kikir.freesia.velocity.network.misc.VirtualPlayerManager;
import meow.kikir.freesia.velocity.network.ysm.DefaultYsmPacketProxyImpl;
import meow.kikir.freesia.velocity.network.ysm.RealPlayerYsmPacketProxyImpl;
import meow.kikir.freesia.velocity.network.ysm.VirtualYsmPacketProxyImpl;
import meow.kikir.freesia.velocity.network.ysm.YsmMapperPayloadManager;
import meow.kikir.freesia.velocity.storage.DefaultRealPlayerDataStorageManagerImpl;
Expand All @@ -44,7 +43,7 @@
import java.util.Map;
import java.util.UUID;

@Plugin(id = "freesia", name = "Freesia", version = "2.3.2-universal", authors = {"Earthme", "HappyRespawnanchor", "xiaozhangup"}, dependencies = @Dependency(id = "packetevents"))
@Plugin(id = "freesia", name = "Freesia", version = BuildConstants.VERSION, authors = {"Earthme", "HappyRespawnanchor", "xiaozhangup"}, dependencies = @Dependency(id = "packetevents"))
public class Freesia implements PacketListener {
public static final FreesiaPlayerTracker tracker = new FreesiaPlayerTracker();
public static final IDataStorageManager realPlayerDataStorageManager = new DefaultRealPlayerDataStorageManagerImpl();
Expand All @@ -71,7 +70,7 @@ private static void printLogo() {
PROXY_SERVER.sendMessage(Component.text(" / /_ / ___// _ \\ / _ \\ / ___// // __ `/"));
PROXY_SERVER.sendMessage(Component.text(" / __/ / / / __// __/(__ )/ // /_/ / "));
PROXY_SERVER.sendMessage(Component.text("/_/ /_/ \\___/ \\___//____//_/ \\__,_/ "));
PROXY_SERVER.sendMessage(Component.text("\n Powered by YesSteveModel and all contributors, Version: 2.3.2-universal"));
PROXY_SERVER.sendMessage(Component.text("\n Powered by YesSteveModel and all contributors, Version: " + BuildConstants.VERSION));
PROXY_SERVER.sendMessage(Component.text("----------------------------------------------------------------"));
}

Expand All @@ -96,7 +95,7 @@ public void onProxyStart(ProxyInitializeEvent event) {

LOGGER.info("Registering events and packet listeners.");
// Mapper (Core function)
mapperManager = new YsmMapperPayloadManager(DefaultYsmPacketProxyImpl::new, VirtualYsmPacketProxyImpl::new);
mapperManager = new YsmMapperPayloadManager(RealPlayerYsmPacketProxyImpl::new, VirtualYsmPacketProxyImpl::new);
// Register mc packet listener
PacketEvents.getAPI().getEventManager().registerListener(this, PacketListenerPriority.HIGHEST);
// Attach to ysm channel
Expand Down Expand Up @@ -139,28 +138,33 @@ public EventTask onPlayerConnected(@NotNull ServerConnectedEvent event) {
final Player targetPlayer = event.getPlayer();

return EventTask.async(() -> {
// On first connect
if (!mapperManager.hasPlayer(targetPlayer)) {
this.logger.info("Initiating mapper session for player {}", targetPlayer.getUsername());
this.logger.info("Initiating mapper session for player {}", targetPlayer.getUsername());

// Create mapper session
mapperManager.firstCreateMapper(targetPlayer);
// Create mapper session
mapperManager.autoCreateMapper(targetPlayer);

// Add to client kicker
kickChecker.onPlayerJoin(targetPlayer);
return;
}

// Player might switch its current server
logger.info("Player {} has changed backend server. Reconnecting mapper session", targetPlayer.getUsername());
// So, reconnect mapper session
mapperManager.reconnectWorker(targetPlayer);
// Add to client kicker
kickChecker.onPlayerJoin(targetPlayer);
});
}

@Subscribe
public void onServerPreConnect(@NotNull ServerPreConnectEvent event) {
mapperManager.updateRealPlayerEntityId(event.getPlayer(), -1); // Reset player's entity id to -1 as non initialized to prevent incorrect tracker status update
public EventTask onServerPreConnect(@NotNull ServerPreConnectEvent event) {
//mapperManager.updateRealPlayerEntityId(event.getPlayer(), -1); // Reset player's entity id to -1 as non initialized to prevent incorrect tracker status update
final Player player = event.getPlayer();

// Create mapper processor here
return EventTask.async(() -> {
final boolean potentialDisconnected = mapperManager.disconnectAlreadyConnected(player);

if (potentialDisconnected) {
// Player switched server, do log
logger.info("Player {} has changed backend server. Reconnecting mapper session", player.getUsername());
}

// Re init after removed or init on first connected
mapperManager.initMapperPacketProcessor(event.getPlayer());
});
}

@Subscribe
Expand All @@ -184,17 +188,12 @@ public void onPacketSend(@NotNull PacketSendEvent event) {
final Player target = event.getPlayer();

logger.info("Entity id update for player {} to {}", target.getUsername(), playerSpawnPacket.getEntityId());

// Update id and try notifying update once
mapperManager.updateRealPlayerEntityId(target, playerSpawnPacket.getEntityId());
}
}

// We need to push off the packet process of worker because the player's login packet might still not reached to the client when we create the mapper session
@Subscribe
public void onServerPostConnect(@NotNull ServerPostConnectEvent postConnectEvent) {
final Player target = postConnectEvent.getPlayer();

// Retire callbacks of worker ysm packet processing
mapperManager.onBackendReady(target);
// Finalize callbacks
PROXY_SERVER.getScheduler().buildTask(this, () -> mapperManager.onBackendReady(target)).schedule();
}
}
}
Loading