Skip to content
Open
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 settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ include(
"messaging",
"bukkit",
//"bungee",
//"velocity",
"velocity",
"examples:shop",
"examples:shop-html",
)
14 changes: 12 additions & 2 deletions velocity/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
plugins {
id("feather-server-api.java-conventions")
id("com.github.johnrengelman.shadow") version "7.1.2"
}

java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}

repositories {
Expand All @@ -10,6 +17,9 @@ repositories {
}

dependencies {
compileOnly("com.velocitypowered:velocity-api:1.1.5")
annotationProcessor("com.velocitypowered:velocity-api:1.1.5")
compileOnly("com.velocitypowered:velocity-api:3.1.1")
annotationProcessor("com.velocitypowered:velocity-api:3.1.1")
implementation(project(":api"))
implementation(project(":common"))
implementation(project(":messaging"))
}
Original file line number Diff line number Diff line change
@@ -1,18 +1,58 @@
package net.digitalingot.feather.serverapi.velocity;

import com.google.inject.Inject;
import com.velocitypowered.api.event.Subscribe;
import com.velocitypowered.api.event.proxy.ProxyInitializeEvent;
import com.velocitypowered.api.event.proxy.ProxyShutdownEvent;
import com.velocitypowered.api.proxy.ProxyServer;
import java.util.logging.Logger;
import net.digitalingot.feather.serverapi.api.FeatherAPI;
import net.digitalingot.feather.serverapi.velocity.event.VelocityEventService;
import net.digitalingot.feather.serverapi.velocity.messaging.VelocityMessagingService;
import net.digitalingot.feather.serverapi.velocity.meta.VelocityMetaService;
import net.digitalingot.feather.serverapi.velocity.player.VelocityPlayerService;
import net.digitalingot.feather.serverapi.velocity.ui.VelocityUIService;
import net.digitalingot.feather.serverapi.velocity.ui.rpc.RpcService;
import net.digitalingot.feather.serverapi.velocity.update.UpdateNotifier;
import org.slf4j.Logger;

public class FeatherVelocityPlugin {

private final ProxyServer server;
private final Logger logger;

@Inject
public FeatherVelocityPlugin(ProxyServer server, Logger logger) {
this.server = server;
this.logger = logger;
}

@Subscribe
public void onProxyInitialize(ProxyInitializeEvent event) {
VelocityEventService eventService = new VelocityEventService(this, server);
VelocityPlayerService playerService = new VelocityPlayerService(this, server);

RpcService rpcService = new RpcService(this, server);
UpdateNotifier updateNotifier = new UpdateNotifier(this, server);
VelocityMessagingService messagingService =
new VelocityMessagingService(this, server, playerService, rpcService, updateNotifier);
VelocityUIService uiService = new VelocityUIService(messagingService, rpcService, server);

VelocityMetaService metaService = new VelocityMetaService(this);
VelocityFeatherService velocityFeatherService =
new VelocityFeatherService(eventService, playerService, uiService, metaService);
FeatherAPI.register(velocityFeatherService);
}

@Subscribe
public void onProxyShutdown(ProxyShutdownEvent event) {

}

public ProxyServer getServer() {
return server;
}

throw new UnsupportedOperationException("Not yet implemented");
public Logger getLogger() {
return logger;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package net.digitalingot.feather.serverapi.velocity;

import net.digitalingot.feather.serverapi.api.FeatherService;
import net.digitalingot.feather.serverapi.api.event.EventService;
import net.digitalingot.feather.serverapi.api.meta.MetaService;
import net.digitalingot.feather.serverapi.api.player.PlayerService;
import net.digitalingot.feather.serverapi.api.ui.UIService;
import net.digitalingot.feather.serverapi.api.waypoint.WaypointService;
import net.digitalingot.feather.serverapi.velocity.event.VelocityEventService;
import net.digitalingot.feather.serverapi.velocity.meta.VelocityMetaService;
import net.digitalingot.feather.serverapi.velocity.player.VelocityPlayerService;
import net.digitalingot.feather.serverapi.velocity.ui.VelocityUIService;
import org.jetbrains.annotations.NotNull;

public class VelocityFeatherService implements FeatherService {

@NotNull
private final VelocityEventService eventService;
@NotNull
private final VelocityPlayerService playerService;
@NotNull
private final VelocityUIService uiService;
@NotNull
private final VelocityMetaService metaService;

public VelocityFeatherService(
@NotNull VelocityEventService eventService,
@NotNull VelocityPlayerService playerService,
@NotNull VelocityUIService uiService,
@NotNull VelocityMetaService metaService) {
this.eventService = eventService;
this.playerService = playerService;
this.uiService = uiService;
this.metaService = metaService;
}

@Override
public @NotNull EventService getEventService() {
return this.eventService;
}

@Override
public @NotNull PlayerService getPlayerService() {
return this.playerService;
}

@Override
public @NotNull UIService getUIService() {
return this.uiService;
}

@Override
public @NotNull WaypointService getWaypointService() {
return null;
}

@Override
public @NotNull MetaService getMetaService() {
return this.metaService;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package net.digitalingot.feather.serverapi.velocity.event;

import com.google.common.collect.ImmutableMap;
import com.velocitypowered.api.event.EventManager;
import com.velocitypowered.api.proxy.ProxyServer;
import java.util.Map;
import java.util.function.Consumer;
import net.digitalingot.feather.serverapi.api.event.EventService;
import net.digitalingot.feather.serverapi.api.event.EventSubscription;
import net.digitalingot.feather.serverapi.api.event.FeatherEvent;
import net.digitalingot.feather.serverapi.api.event.player.PlayerHelloEvent;
import net.digitalingot.feather.serverapi.velocity.FeatherVelocityPlugin;
import net.digitalingot.feather.serverapi.velocity.event.player.VelocityPlayerHelloEvent;
import org.jetbrains.annotations.NotNull;

public class VelocityEventService implements EventService {

private static final Map<Class<? extends FeatherEvent>, Class<? extends VelocityFeatherEvent>>
MAPPING =
ImmutableMap.<Class<? extends FeatherEvent>, Class<? extends VelocityFeatherEvent>>builder()
.put(PlayerHelloEvent.class, VelocityPlayerHelloEvent.class)
.build();

private final FeatherVelocityPlugin plugin;
private final ProxyServer server;

public VelocityEventService(FeatherVelocityPlugin plugin, ProxyServer server) {
this.plugin = plugin;
this.server = server;
}

@Override
public @NotNull <T extends FeatherEvent> EventSubscription<T> subscribe(
@NotNull Class<T> eventClazz, @NotNull Consumer<? super T> handler) {
return subscribe(eventClazz, handler, this.plugin);
}

@SuppressWarnings("unchecked")
@Override
public @NotNull <T extends FeatherEvent> EventSubscription<T> subscribe(
@NotNull Class<T> eventClazz, @NotNull Consumer<? super T> handler, @NotNull Object plugin) {
final Class<? extends VelocityFeatherEvent> velocityEventClass = MAPPING.get(eventClazz);
final EventManager eventManager = server.getEventManager();
final Object listener = new Object();
eventManager.register(
plugin,
velocityEventClass,
event -> {
try {
handler.accept((T) event);
} catch (Throwable throwable) {
throwable.printStackTrace();
}
});

return new VelocityEventSubscription<>(
(Class<T>) velocityEventClass, handler, eventManager, listener);
}


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
package net.digitalingot.feather.serverapi.velocity.event;

import com.velocitypowered.api.event.EventManager;
import java.util.function.Consumer;
import net.digitalingot.feather.serverapi.api.event.EventSubscription;
import net.digitalingot.feather.serverapi.api.event.FeatherEvent;
import org.jetbrains.annotations.NotNull;

public class VelocityEventSubscription<T extends FeatherEvent> implements EventSubscription<T> {

private final Class<T> event;
private final Consumer<? super T> handler;
private final EventManager eventManager;
private final Object listener;

public VelocityEventSubscription(
Class<T> event, Consumer<? super T> handler, EventManager eventManager, Object listener) {
this.event = event;
this.handler = handler;
this.eventManager = eventManager;
this.listener = listener;
}

@Override
public @NotNull Class<T> getEvent() {
return event;
}

@Override
public @NotNull Consumer<? super T> getHandler() {
return handler;
}

@Override
public void unsubscribe() {
eventManager.unregisterListeners(listener);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package net.digitalingot.feather.serverapi.velocity.event;

import net.digitalingot.feather.serverapi.api.event.FeatherEvent;
import net.digitalingot.feather.serverapi.api.player.FeatherPlayer;
import org.jetbrains.annotations.NotNull;

public abstract class VelocityFeatherEvent implements FeatherEvent {

private final FeatherPlayer player;

public VelocityFeatherEvent(@NotNull FeatherPlayer player) {
this.player = player;
}

@NotNull
@Override
public FeatherPlayer getPlayer() {
return this.player;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package net.digitalingot.feather.serverapi.velocity.event.player;

import net.digitalingot.feather.serverapi.api.player.FeatherPlayer;
import net.digitalingot.feather.serverapi.velocity.event.VelocityFeatherEvent;
import org.jetbrains.annotations.NotNull;

public class FeatherPlayerQuitEvent extends VelocityFeatherEvent {

public FeatherPlayerQuitEvent(@NotNull FeatherPlayer player) {
super(player);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package net.digitalingot.feather.serverapi.velocity.event.player;

import java.util.Collection;
import java.util.Collections;
import net.digitalingot.feather.serverapi.api.event.player.PlayerHelloEvent;
import net.digitalingot.feather.serverapi.api.model.FeatherMod;
import net.digitalingot.feather.serverapi.api.model.Platform;
import net.digitalingot.feather.serverapi.api.player.FeatherPlayer;
import net.digitalingot.feather.serverapi.velocity.event.VelocityFeatherEvent;
import org.jetbrains.annotations.NotNull;

public class VelocityPlayerHelloEvent extends VelocityFeatherEvent implements PlayerHelloEvent {

@NotNull
private final Platform platform;
@NotNull
private final Collection<FeatherMod> featherMods;

public VelocityPlayerHelloEvent(
@NotNull FeatherPlayer player,
@NotNull Platform platform,
@NotNull Collection<FeatherMod> featherMods) {
super(player);
this.platform = platform;
this.featherMods = featherMods;
}

@NotNull
@Override
public Platform getPlatform() {
return this.platform;
}

@NotNull
@Override
public Collection<FeatherMod> getFeatherMods() {
return Collections.unmodifiableCollection(this.featherMods);
}
}
Loading