forked from TuxCoding/FastLogin
@ -41,6 +41,10 @@
|
|||||||
<pattern>com.google.gson</pattern>
|
<pattern>com.google.gson</pattern>
|
||||||
<shadedPattern>fastlogin.gson</shadedPattern>
|
<shadedPattern>fastlogin.gson</shadedPattern>
|
||||||
</relocation>
|
</relocation>
|
||||||
|
<relocation>
|
||||||
|
<pattern>io.papermc.lib</pattern>
|
||||||
|
<shadedPattern>fastlogin.paperlib</shadedPattern>
|
||||||
|
</relocation>
|
||||||
</relocations>
|
</relocations>
|
||||||
</configuration>
|
</configuration>
|
||||||
<executions>
|
<executions>
|
||||||
@ -56,14 +60,10 @@
|
|||||||
</build>
|
</build>
|
||||||
|
|
||||||
<repositories>
|
<repositories>
|
||||||
<!-- Bukkit-Server-API -->
|
<!-- PaperSpigot API and PaperLib -->
|
||||||
<repository>
|
<repository>
|
||||||
<id>spigot-repo</id>
|
<id>papermc</id>
|
||||||
<url>https://hub.spigotmc.org/nexus/content/repositories/snapshots/</url>
|
<url>https://papermc.io/repo/repository/maven-public/</url>
|
||||||
<!-- Disable snapshot release policy to speed up, when finding a artifact -->
|
|
||||||
<releases>
|
|
||||||
<enabled>false</enabled>
|
|
||||||
</releases>
|
|
||||||
</repository>
|
</repository>
|
||||||
|
|
||||||
<!-- ProtocolLib -->
|
<!-- ProtocolLib -->
|
||||||
@ -108,14 +108,22 @@
|
|||||||
<version>${project.version}</version>
|
<version>${project.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--Server API-->
|
<!-- PaperSpigot API for correcting usercache usage -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.spigotmc</groupId>
|
<groupId>com.destroystokyo.paper</groupId>
|
||||||
<artifactId>spigot-api</artifactId>
|
<artifactId>paper-api</artifactId>
|
||||||
<version>1.15.2-R0.1-SNAPSHOT</version>
|
<version>1.15.2-R0.1-SNAPSHOT</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- PaperLib for checking if server uses PaperSpigot -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.papermc</groupId>
|
||||||
|
<artifactId>paperlib</artifactId>
|
||||||
|
<version>1.0.6</version>
|
||||||
|
<scope>compile</scope>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!--Library for listening and sending Minecraft packets-->
|
<!--Library for listening and sending Minecraft packets-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.comphenix.protocol</groupId>
|
<groupId>com.comphenix.protocol</groupId>
|
||||||
|
@ -3,6 +3,7 @@ package com.github.games647.fastlogin.bukkit;
|
|||||||
import com.github.games647.fastlogin.bukkit.command.CrackedCommand;
|
import com.github.games647.fastlogin.bukkit.command.CrackedCommand;
|
||||||
import com.github.games647.fastlogin.bukkit.command.PremiumCommand;
|
import com.github.games647.fastlogin.bukkit.command.PremiumCommand;
|
||||||
import com.github.games647.fastlogin.bukkit.listener.ConnectionListener;
|
import com.github.games647.fastlogin.bukkit.listener.ConnectionListener;
|
||||||
|
import com.github.games647.fastlogin.bukkit.listener.PaperPreLoginListener;
|
||||||
import com.github.games647.fastlogin.bukkit.listener.protocollib.ProtocolLibListener;
|
import com.github.games647.fastlogin.bukkit.listener.protocollib.ProtocolLibListener;
|
||||||
import com.github.games647.fastlogin.bukkit.listener.protocollib.SkinApplyListener;
|
import com.github.games647.fastlogin.bukkit.listener.protocollib.SkinApplyListener;
|
||||||
import com.github.games647.fastlogin.bukkit.listener.protocolsupport.ProtocolSupportListener;
|
import com.github.games647.fastlogin.bukkit.listener.protocolsupport.ProtocolSupportListener;
|
||||||
@ -11,6 +12,12 @@ import com.github.games647.fastlogin.core.CommonUtil;
|
|||||||
import com.github.games647.fastlogin.core.PremiumStatus;
|
import com.github.games647.fastlogin.core.PremiumStatus;
|
||||||
import com.github.games647.fastlogin.core.shared.FastLoginCore;
|
import com.github.games647.fastlogin.core.shared.FastLoginCore;
|
||||||
import com.github.games647.fastlogin.core.shared.PlatformPlugin;
|
import com.github.games647.fastlogin.core.shared.PlatformPlugin;
|
||||||
|
import io.papermc.lib.PaperLib;
|
||||||
|
import org.bukkit.command.CommandSender;
|
||||||
|
import org.bukkit.entity.Player;
|
||||||
|
import org.bukkit.plugin.PluginManager;
|
||||||
|
import org.bukkit.plugin.java.JavaPlugin;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
@ -19,12 +26,6 @@ import java.util.UUID;
|
|||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
||||||
|
|
||||||
import org.bukkit.command.CommandSender;
|
|
||||||
import org.bukkit.entity.Player;
|
|
||||||
import org.bukkit.plugin.PluginManager;
|
|
||||||
import org.bukkit.plugin.java.JavaPlugin;
|
|
||||||
import org.slf4j.Logger;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This plugin checks if a player has a paid account and if so tries to skip offline mode authentication.
|
* This plugin checks if a player has a paid account and if so tries to skip offline mode authentication.
|
||||||
*/
|
*/
|
||||||
@ -75,7 +76,11 @@ public class FastLoginBukkit extends JavaPlugin implements PlatformPlugin<Comman
|
|||||||
pluginManager.registerEvents(new ProtocolSupportListener(this, core.getRateLimiter()), this);
|
pluginManager.registerEvents(new ProtocolSupportListener(this, core.getRateLimiter()), this);
|
||||||
} else if (pluginManager.isPluginEnabled("ProtocolLib")) {
|
} else if (pluginManager.isPluginEnabled("ProtocolLib")) {
|
||||||
ProtocolLibListener.register(this, core.getRateLimiter());
|
ProtocolLibListener.register(this, core.getRateLimiter());
|
||||||
pluginManager.registerEvents(new SkinApplyListener(this), this);
|
|
||||||
|
//if server is using paper - we need to set the skin at pre login anyway, so no need for this listener
|
||||||
|
if (!PaperLib.isPaper() && getConfig().getBoolean("forwardSkin")) {
|
||||||
|
pluginManager.registerEvents(new SkinApplyListener(this), this);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
logger.warn("Either ProtocolLib or ProtocolSupport have to be installed if you don't use BungeeCord");
|
logger.warn("Either ProtocolLib or ProtocolSupport have to be installed if you don't use BungeeCord");
|
||||||
}
|
}
|
||||||
@ -86,6 +91,11 @@ public class FastLoginBukkit extends JavaPlugin implements PlatformPlugin<Comman
|
|||||||
|
|
||||||
pluginManager.registerEvents(new ConnectionListener(this), this);
|
pluginManager.registerEvents(new ConnectionListener(this), this);
|
||||||
|
|
||||||
|
//if server is using paper - we need to add one more listener to correct the usercache usage
|
||||||
|
if (PaperLib.isPaper()) {
|
||||||
|
pluginManager.registerEvents(new PaperPreLoginListener(this), this);
|
||||||
|
}
|
||||||
|
|
||||||
//register commands using a unique name
|
//register commands using a unique name
|
||||||
getCommand("premium").setExecutor(new PremiumCommand(this));
|
getCommand("premium").setExecutor(new PremiumCommand(this));
|
||||||
getCommand("cracked").setExecutor(new CrackedCommand(this));
|
getCommand("cracked").setExecutor(new CrackedCommand(this));
|
||||||
|
@ -0,0 +1,41 @@
|
|||||||
|
package com.github.games647.fastlogin.bukkit.listener;
|
||||||
|
|
||||||
|
import com.destroystokyo.paper.profile.ProfileProperty;
|
||||||
|
import com.github.games647.craftapi.model.skin.Textures;
|
||||||
|
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
||||||
|
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
||||||
|
import org.bukkit.event.EventHandler;
|
||||||
|
import org.bukkit.event.EventPriority;
|
||||||
|
import org.bukkit.event.Listener;
|
||||||
|
import org.bukkit.event.player.AsyncPlayerPreLoginEvent;
|
||||||
|
import org.bukkit.event.player.AsyncPlayerPreLoginEvent.Result;
|
||||||
|
|
||||||
|
public class PaperPreLoginListener implements Listener {
|
||||||
|
|
||||||
|
private final FastLoginBukkit plugin;
|
||||||
|
|
||||||
|
public PaperPreLoginListener(final FastLoginBukkit plugin) {
|
||||||
|
this.plugin = plugin;
|
||||||
|
}
|
||||||
|
|
||||||
|
@EventHandler(priority = EventPriority.HIGHEST)
|
||||||
|
//if paper is used - player skin must be set at pre login, otherwise usercache is used
|
||||||
|
//using usercache makes premium name change basically impossible
|
||||||
|
public void onAsyncPlayerPreLogin(AsyncPlayerPreLoginEvent event) {
|
||||||
|
if (event.getLoginResult() != Result.ALLOWED) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// event gives us only IP, not the port, so we need to loop through all the sessions
|
||||||
|
for (BukkitLoginSession session : plugin.getLoginSessions().values()) {
|
||||||
|
if (!event.getName().equals(session.getUsername())) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
session.getSkin().ifPresent(skin -> event.getPlayerProfile().setProperty(new ProfileProperty(Textures.KEY,
|
||||||
|
skin.getValue(), skin.getSignature())));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -9,9 +9,6 @@ import com.comphenix.protocol.wrappers.WrappedSignedProperty;
|
|||||||
import com.github.games647.craftapi.model.skin.Textures;
|
import com.github.games647.craftapi.model.skin.Textures;
|
||||||
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
||||||
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
||||||
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.event.EventHandler;
|
import org.bukkit.event.EventHandler;
|
||||||
import org.bukkit.event.EventPriority;
|
import org.bukkit.event.EventPriority;
|
||||||
@ -19,6 +16,8 @@ import org.bukkit.event.Listener;
|
|||||||
import org.bukkit.event.player.PlayerLoginEvent;
|
import org.bukkit.event.player.PlayerLoginEvent;
|
||||||
import org.bukkit.event.player.PlayerLoginEvent.Result;
|
import org.bukkit.event.player.PlayerLoginEvent.Result;
|
||||||
|
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
|
||||||
public class SkinApplyListener implements Listener {
|
public class SkinApplyListener implements Listener {
|
||||||
|
|
||||||
private static final Class<?> GAME_PROFILE = MinecraftReflection.getGameProfileClass();
|
private static final Class<?> GAME_PROFILE = MinecraftReflection.getGameProfileClass();
|
||||||
@ -39,14 +38,12 @@ public class SkinApplyListener implements Listener {
|
|||||||
|
|
||||||
Player player = loginEvent.getPlayer();
|
Player player = loginEvent.getPlayer();
|
||||||
|
|
||||||
if (plugin.getConfig().getBoolean("forwardSkin")) {
|
//go through every session, because player.getAddress is null
|
||||||
//go through every session, because player.getAddress is null
|
//loginEvent.getAddress is just a InetAddress not InetSocketAddress, so not unique enough
|
||||||
//loginEvent.getAddress is just a InetAddress not InetSocketAddress, so not unique enough
|
for (BukkitLoginSession session : plugin.getLoginSessions().values()) {
|
||||||
for (BukkitLoginSession session : plugin.getLoginSessions().values()) {
|
if (session.getUsername().equals(player.getName())) {
|
||||||
if (session.getUsername().equals(player.getName())) {
|
session.getSkin().ifPresent(skin -> applySkin(player, skin.getValue(), skin.getSignature()));
|
||||||
session.getSkin().ifPresent(skin -> applySkin(player, skin.getValue(), skin.getSignature()));
|
break;
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -127,6 +127,9 @@ nameChangeCheck: false
|
|||||||
# the skin data is included in the Auth-Verification-Response sent by Mojang. If you want to use for other
|
# the skin data is included in the Auth-Verification-Response sent by Mojang. If you want to use for other
|
||||||
# players like cracked player, you have to use other plugins.
|
# players like cracked player, you have to use other plugins.
|
||||||
#
|
#
|
||||||
|
# If you use PaperSpigot - FastLogin will always try to set the skin, even if forwardSkin is set to false
|
||||||
|
# It is needed to allow premium name change to work correctly
|
||||||
|
#
|
||||||
# If you want to use skins for your cracked player, you need an additional plugin like
|
# If you want to use skins for your cracked player, you need an additional plugin like
|
||||||
# ChangeSkin, SkinRestorer, ...
|
# ChangeSkin, SkinRestorer, ...
|
||||||
forwardSkin: true
|
forwardSkin: true
|
||||||
|
Reference in New Issue
Block a user