Skip to content

Commit

Permalink
Support server bound protocols on bukkit/fabric/velocity
Browse files Browse the repository at this point in the history
  • Loading branch information
FlorianMichael committed Jul 21, 2024
1 parent 124f914 commit 3e2533f
Show file tree
Hide file tree
Showing 6 changed files with 95 additions and 4 deletions.
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,20 @@ Via.getManager().addEnableListener(ViaAprilFoolsPlatformImpl::new);
```
Make sure to add the enable listener before the Via manager is initialized (``((ViaManagerImpl) Via.getManager()).init();``).

#### Note
If you want your platform to support the client protocols, you need the override the ``getClientProtocol`` function in your version provider:
```java
@Override
public ProtocolVersion getClientProtocol(UserConnection connection) {
final ProtocolVersion version = connection.getProtocolInfo().protocolVersion();
if (version.getVersionType() == VersionType.SPECIAL) {
return ProtocolVersion.getProtocol(VersionType.SPECIAL, version.getOriginalVersion());
} else {
return delegate.getClientProtocol(connection);
}
}
```

## Contact
If you encounter any issues, please report them on the
[issue tracker](https://github.com/ViaVersion/ViaAprilFools/issues).
Expand Down
4 changes: 2 additions & 2 deletions build-logic/src/main/groovy/vaf.base-conventions.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ base {
}

dependencies {
compileOnly "com.viaversion:viaversion-common:5.0.0"
compileOnly "com.viaversion:viabackwards-common:5.0.0"
compileOnly "com.viaversion:viaversion-common:5.0.2-SNAPSHOT"
compileOnly "com.viaversion:viabackwards-common:5.0.2-SNAPSHOT"
}

publishing {
Expand Down
12 changes: 11 additions & 1 deletion bukkit/src/main/java/net/raphimc/viaaprilfools/BukkitPlugin.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,9 @@
package net.raphimc.viaaprilfools;

import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.ViaManager;
import com.viaversion.viaversion.api.protocol.version.VersionProvider;
import net.raphimc.viaaprilfools.api.VAFServerVersionProvider;
import net.raphimc.viaaprilfools.platform.ViaAprilFoolsPlatform;
import org.bukkit.plugin.java.JavaPlugin;

Expand All @@ -26,7 +29,14 @@
public class BukkitPlugin extends JavaPlugin implements ViaAprilFoolsPlatform {

public BukkitPlugin() {
Via.getManager().addEnableListener(() -> this.init(new File(getDataFolder(), "config.yml")));
final ViaManager manager = Via.getManager();

manager.addEnableListener(() -> {
final VersionProvider delegate = manager.getProviders().get(VersionProvider.class);
manager.getProviders().use(VersionProvider.class, new VAFServerVersionProvider(delegate));

this.init(new File(getDataFolder(), "config.yml"));
});
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/*
* This file is part of ViaAprilFools - https://github.com/RaphiMC/ViaAprilFools
* Copyright (C) 2021-2024 RK_01/RaphiMC and contributors
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package net.raphimc.viaaprilfools.api;

import com.viaversion.viaversion.api.connection.UserConnection;
import com.viaversion.viaversion.api.protocol.version.ProtocolVersion;
import com.viaversion.viaversion.api.protocol.version.VersionProvider;
import com.viaversion.viaversion.api.protocol.version.VersionType;

public class VAFServerVersionProvider implements VersionProvider {

private final VersionProvider delegate;

public VAFServerVersionProvider(final VersionProvider delegate) {
this.delegate = delegate;
}

@Override
public ProtocolVersion getClientProtocol(UserConnection connection) {
final ProtocolVersion version = connection.getProtocolInfo().protocolVersion();
if (version.getVersionType() == VersionType.SPECIAL) {
return ProtocolVersion.getProtocol(VersionType.SPECIAL, version.getOriginalVersion());
} else {
return delegate.getClientProtocol(connection);
}
}

@Override
public ProtocolVersion getClosestServerProtocol(UserConnection connection) throws Exception {
return delegate.getClosestServerProtocol(connection);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,11 @@
*/
package net.raphimc.viaaprilfools;

import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.ViaManager;
import com.viaversion.viaversion.api.protocol.version.VersionProvider;
import net.fabricmc.loader.api.FabricLoader;
import net.raphimc.viaaprilfools.api.VAFServerVersionProvider;
import net.raphimc.viaaprilfools.fabric.util.LoggerWrapper;
import net.raphimc.viaaprilfools.platform.ViaAprilFoolsPlatform;
import org.apache.logging.log4j.LogManager;
Expand All @@ -36,6 +40,11 @@ public void run() {
final Path configDirPath = FabricLoader.getInstance().getConfigDir().resolve("ViaAprilFools");
this.configDir = configDirPath.toFile();
this.init(new File(getDataFolder(), "config.yml"));

final ViaManager manager = Via.getManager();

final VersionProvider delegate = manager.getProviders().get(VersionProvider.class);
manager.getProviders().use(VersionProvider.class, new VAFServerVersionProvider(delegate));
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@
import com.velocitypowered.api.plugin.Plugin;
import com.velocitypowered.api.plugin.annotation.DataDirectory;
import com.viaversion.viaversion.api.Via;
import com.viaversion.viaversion.api.ViaManager;
import com.viaversion.viaversion.api.protocol.version.VersionProvider;
import com.viaversion.viaversion.velocity.providers.VelocityVersionProvider;
import com.viaversion.viaversion.velocity.util.LoggerWrapper;
import net.raphimc.viaaprilfools.api.VAFServerVersionProvider;
import net.raphimc.viaaprilfools.platform.ViaAprilFoolsPlatform;

import java.io.File;
Expand Down Expand Up @@ -57,7 +61,13 @@ public class VelocityPlugin implements ViaAprilFoolsPlatform {
@Subscribe(order = PostOrder.LATE)
public void onProxyStart(ProxyInitializeEvent e) {
this.logger = new LoggerWrapper(loggerSlf4j);
Via.getManager().addEnableListener(() -> this.init(new File(getDataFolder(), "config.yml")));
final ViaManager manager = Via.getManager();

manager.addEnableListener(() -> {
this.init(new File(getDataFolder(), "config.yml"));

manager.getProviders().use(VersionProvider.class, new VAFServerVersionProvider(new VelocityVersionProvider()));
});
}

@Override
Expand Down

0 comments on commit 3e2533f

Please sign in to comment.