forked from TuxCoding/FastLogin
Added localization messages (Fixes #20)
This commit is contained in:
@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.github.games647</groupId>
|
<groupId>com.github.games647</groupId>
|
||||||
<artifactId>fastlogin</artifactId>
|
<artifactId>fastlogin</artifactId>
|
||||||
<version>1.4</version>
|
<version>1.5</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
@ -7,6 +7,9 @@ import java.io.File;
|
|||||||
import java.util.concurrent.ThreadFactory;
|
import java.util.concurrent.ThreadFactory;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
|
||||||
|
import org.bukkit.ChatColor;
|
||||||
|
import org.bukkit.configuration.file.YamlConfiguration;
|
||||||
|
|
||||||
public class BukkitCore extends FastLoginCore {
|
public class BukkitCore extends FastLoginCore {
|
||||||
|
|
||||||
private final FastLoginBukkit plugin;
|
private final FastLoginBukkit plugin;
|
||||||
@ -34,4 +37,21 @@ public class BukkitCore extends FastLoginCore {
|
|||||||
.setDaemon(true)
|
.setDaemon(true)
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadMessages() {
|
||||||
|
plugin.saveResource("messages.yml", false);
|
||||||
|
|
||||||
|
File messageFile = new File(plugin.getDataFolder(), "messages.yml");
|
||||||
|
YamlConfiguration messageConfig = YamlConfiguration.loadConfiguration(messageFile);
|
||||||
|
for (String key : messageConfig.getKeys(false)) {
|
||||||
|
String message = ChatColor.translateAlternateColorCodes('&', messageConfig.getString(key));
|
||||||
|
localeMessages.put(key, message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadConfig() {
|
||||||
|
plugin.saveConfig();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.github.games647.fastlogin.bukkit;
|
package com.github.games647.fastlogin.bukkit;
|
||||||
|
|
||||||
|
import com.github.games647.fastlogin.bukkit.tasks.DelayedAuthHook;
|
||||||
import com.avaje.ebeaninternal.api.ClassUtil;
|
import com.avaje.ebeaninternal.api.ClassUtil;
|
||||||
import com.comphenix.protocol.AsynchronousManager;
|
import com.comphenix.protocol.AsynchronousManager;
|
||||||
import com.comphenix.protocol.ProtocolLibrary;
|
import com.comphenix.protocol.ProtocolLibrary;
|
||||||
@ -59,6 +60,9 @@ public class FastLoginBukkit extends JavaPlugin {
|
|||||||
@Override
|
@Override
|
||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
core.setMojangApiConnector(new MojangApiBukkit(core));
|
core.setMojangApiConnector(new MojangApiBukkit(core));
|
||||||
|
|
||||||
|
core.loadConfig();
|
||||||
|
core.loadMessages();
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (ClassUtil.isPresent("org.spigotmc.SpigotConfig")) {
|
if (ClassUtil.isPresent("org.spigotmc.SpigotConfig")) {
|
||||||
@ -69,8 +73,6 @@ public class FastLoginBukkit extends JavaPlugin {
|
|||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|
||||||
saveDefaultConfig();
|
|
||||||
|
|
||||||
if (getServer().getOnlineMode()) {
|
if (getServer().getOnlineMode()) {
|
||||||
//we need to require offline to prevent a session request for a offline player
|
//we need to require offline to prevent a session request for a offline player
|
||||||
getLogger().severe("Server have to be in offline mode");
|
getLogger().severe("Server have to be in offline mode");
|
||||||
|
@ -25,13 +25,13 @@ public class CrackedCommand implements CommandExecutor {
|
|||||||
if (args.length == 0) {
|
if (args.length == 0) {
|
||||||
if (!(sender instanceof Player)) {
|
if (!(sender instanceof Player)) {
|
||||||
//console or command block
|
//console or command block
|
||||||
sender.sendMessage(ChatColor.DARK_RED + "Only players can remove themselves from the premium list");
|
sender.sendMessage(plugin.getCore().getMessage("no-console"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.isBungeeCord()) {
|
if (plugin.isBungeeCord()) {
|
||||||
notifiyBungeeCord(sender, sender.getName());
|
notifiyBungeeCord(sender, sender.getName());
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Sending request...");
|
sender.sendMessage(plugin.getCore().getMessage("wait-on-proxy"));
|
||||||
} else {
|
} else {
|
||||||
//todo: load async if it's not in the cache anymore
|
//todo: load async if it's not in the cache anymore
|
||||||
final PlayerProfile profile = plugin.getCore().getStorage().loadProfile(sender.getName());
|
final PlayerProfile profile = plugin.getCore().getStorage().loadProfile(sender.getName());
|
||||||
@ -53,18 +53,18 @@ public class CrackedCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
if (!sender.hasPermission(command.getPermission() + ".other")) {
|
if (!sender.hasPermission(command.getPermission() + ".other")) {
|
||||||
sender.sendMessage(ChatColor.DARK_RED + "Not enough permissions");
|
sender.sendMessage(plugin.getCore().getMessage("no-permission"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.isBungeeCord()) {
|
if (plugin.isBungeeCord()) {
|
||||||
notifiyBungeeCord(sender, args[0]);
|
notifiyBungeeCord(sender, args[0]);
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Sending request for player " + args[0] + "...");
|
sender.sendMessage(plugin.getCore().getMessage("wait-on-proxy"));
|
||||||
} else {
|
} else {
|
||||||
//todo: load async if it's not in the cache anymore
|
//todo: load async if it's not in the cache anymore
|
||||||
final PlayerProfile profile = plugin.getCore().getStorage().loadProfile(args[0]);
|
final PlayerProfile profile = plugin.getCore().getStorage().loadProfile(args[0]);
|
||||||
if (profile == null) {
|
if (profile == null) {
|
||||||
sender.sendMessage(ChatColor.DARK_RED + "Player not in the database");
|
sender.sendMessage(plugin.getCore().getMessage("player-unknown"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,13 +30,13 @@ public class PremiumCommand implements CommandExecutor {
|
|||||||
if (args.length == 0) {
|
if (args.length == 0) {
|
||||||
if (!(sender instanceof Player)) {
|
if (!(sender instanceof Player)) {
|
||||||
//console or command block
|
//console or command block
|
||||||
sender.sendMessage(ChatColor.DARK_RED + "Only players can add themselves as premium");
|
sender.sendMessage(plugin.getCore().getMessage("no-console"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.isBungeeCord()) {
|
if (plugin.isBungeeCord()) {
|
||||||
notifiyBungeeCord(sender, sender.getName());
|
notifiyBungeeCord(sender, sender.getName());
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Sending request...");
|
sender.sendMessage(plugin.getCore().getMessage("wait-on-proxy"));
|
||||||
} else {
|
} else {
|
||||||
// //todo: load async if it's not in the cache anymore
|
// //todo: load async if it's not in the cache anymore
|
||||||
final PlayerProfile profile = plugin.getCore().getStorage().loadProfile(sender.getName());
|
final PlayerProfile profile = plugin.getCore().getStorage().loadProfile(sender.getName());
|
||||||
@ -59,18 +59,18 @@ public class PremiumCommand implements CommandExecutor {
|
|||||||
return true;
|
return true;
|
||||||
} else {
|
} else {
|
||||||
if (!sender.hasPermission(command.getPermission() + ".other")) {
|
if (!sender.hasPermission(command.getPermission() + ".other")) {
|
||||||
sender.sendMessage(ChatColor.DARK_RED + "Not enough permissions");
|
sender.sendMessage(plugin.getCore().getMessage("no-permission"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (plugin.isBungeeCord()) {
|
if (plugin.isBungeeCord()) {
|
||||||
notifiyBungeeCord(sender, args[0]);
|
notifiyBungeeCord(sender, args[0]);
|
||||||
sender.sendMessage(ChatColor.YELLOW + "Sending request...");
|
sender.sendMessage(plugin.getCore().getMessage("wait-on-proxy"));
|
||||||
} else {
|
} else {
|
||||||
//todo: load async if it's not in the cache anymore
|
//todo: load async if it's not in the cache anymore
|
||||||
final PlayerProfile profile = plugin.getCore().getStorage().loadProfile(args[0]);
|
final PlayerProfile profile = plugin.getCore().getStorage().loadProfile(args[0]);
|
||||||
if (profile == null) {
|
if (profile == null) {
|
||||||
sender.sendMessage(ChatColor.DARK_RED + "Player not in the database");
|
sender.sendMessage(plugin.getCore().getMessage("player-unknown"));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -7,10 +7,10 @@ import de.st_ddt.crazylogin.data.LoginPlayerData;
|
|||||||
import de.st_ddt.crazylogin.databases.CrazyLoginDataDatabase;
|
import de.st_ddt.crazylogin.databases.CrazyLoginDataDatabase;
|
||||||
import de.st_ddt.crazylogin.listener.PlayerListener;
|
import de.st_ddt.crazylogin.listener.PlayerListener;
|
||||||
import de.st_ddt.crazylogin.metadata.Authenticated;
|
import de.st_ddt.crazylogin.metadata.Authenticated;
|
||||||
|
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
|
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
@ -5,14 +5,13 @@ import com.lenis0012.bukkit.ls.LoginSecurity;
|
|||||||
import com.lenis0012.bukkit.ls.data.DataManager;
|
import com.lenis0012.bukkit.ls.data.DataManager;
|
||||||
|
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
|
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.Callable;
|
import java.util.concurrent.Callable;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
import java.util.concurrent.Future;
|
import java.util.concurrent.Future;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
import org.bukkit.Bukkit;
|
|
||||||
|
|
||||||
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -27,6 +26,11 @@ import org.bukkit.entity.Player;
|
|||||||
public class LoginSecurityHook implements BukkitAuthPlugin {
|
public class LoginSecurityHook implements BukkitAuthPlugin {
|
||||||
|
|
||||||
protected final LoginSecurity securityPlugin = LoginSecurity.instance;
|
protected final LoginSecurity securityPlugin = LoginSecurity.instance;
|
||||||
|
// protected final boolean newVersion;
|
||||||
|
|
||||||
|
public LoginSecurityHook() {
|
||||||
|
// this.newVersion = ClassUtil.isPresent("com.lenis0012.bukkit.loginsecurity.session.action.LoginAction");
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean forceLogin(final Player player) {
|
public boolean forceLogin(final Player player) {
|
||||||
|
@ -6,7 +6,6 @@ import java.util.concurrent.Future;
|
|||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
import org.bukkit.plugin.Plugin;
|
import org.bukkit.plugin.Plugin;
|
||||||
|
|
||||||
|
@ -4,7 +4,7 @@ import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
|||||||
import com.comphenix.protocol.wrappers.WrappedSignedProperty;
|
import com.comphenix.protocol.wrappers.WrappedSignedProperty;
|
||||||
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 com.github.games647.fastlogin.bukkit.ForceLoginTask;
|
import com.github.games647.fastlogin.bukkit.tasks.ForceLoginTask;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
package com.github.games647.fastlogin.bukkit.listener;
|
package com.github.games647.fastlogin.bukkit.listener;
|
||||||
|
|
||||||
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
||||||
import com.github.games647.fastlogin.bukkit.ForceLoginTask;
|
import com.github.games647.fastlogin.bukkit.tasks.ForceLoginTask;
|
||||||
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
||||||
import com.github.games647.fastlogin.bukkit.hooks.BukkitAuthPlugin;
|
import com.github.games647.fastlogin.bukkit.hooks.BukkitAuthPlugin;
|
||||||
import com.google.common.base.Charsets;
|
import com.google.common.base.Charsets;
|
||||||
|
@ -89,7 +89,8 @@ public class ProtocolSupportListener implements Listener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void startPremiumSession(String playerName, PlayerLoginStartEvent loginStartEvent, boolean registered, PlayerProfile playerProfile) {
|
private void startPremiumSession(String playerName, PlayerLoginStartEvent loginStartEvent, boolean registered
|
||||||
|
, PlayerProfile playerProfile) {
|
||||||
loginStartEvent.setOnlineMode(true);
|
loginStartEvent.setOnlineMode(true);
|
||||||
InetSocketAddress address = loginStartEvent.getAddress();
|
InetSocketAddress address = loginStartEvent.getAddress();
|
||||||
|
|
||||||
|
@ -9,9 +9,9 @@ import com.comphenix.protocol.injector.server.TemporaryPlayerFactory;
|
|||||||
import com.comphenix.protocol.reflect.FuzzyReflection;
|
import com.comphenix.protocol.reflect.FuzzyReflection;
|
||||||
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
import com.comphenix.protocol.wrappers.WrappedChatComponent;
|
||||||
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
||||||
|
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
||||||
import com.github.games647.fastlogin.bukkit.EncryptionUtil;
|
import com.github.games647.fastlogin.bukkit.EncryptionUtil;
|
||||||
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
||||||
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
|
||||||
|
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.Field;
|
||||||
import java.lang.reflect.InvocationTargetException;
|
import java.lang.reflect.InvocationTargetException;
|
||||||
@ -75,7 +75,7 @@ public class EncryptionPacketListener extends PacketAdapter {
|
|||||||
|
|
||||||
BukkitLoginSession session = plugin.getSessions().get(player.getAddress().toString());
|
BukkitLoginSession session = plugin.getSessions().get(player.getAddress().toString());
|
||||||
if (session == null) {
|
if (session == null) {
|
||||||
disconnect(packetEvent, "Invalid request", Level.FINE
|
disconnect(packetEvent, plugin.getCore().getMessage("invalid-requst"), true
|
||||||
, "Player {0} tried to send encryption response at invalid state", player.getAddress());
|
, "Player {0} tried to send encryption response at invalid state", player.getAddress());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -106,7 +106,7 @@ public class EncryptionPacketListener extends PacketAdapter {
|
|||||||
receiveFakeStartPacket(username, player);
|
receiveFakeStartPacket(username, player);
|
||||||
} else {
|
} else {
|
||||||
//user tried to fake a authentication
|
//user tried to fake a authentication
|
||||||
disconnect(packetEvent, "Invalid session", Level.FINE
|
disconnect(packetEvent, plugin.getCore().getMessage("invalid-session"), true
|
||||||
, "Player {0} ({1}) tried to log in with an invalid session ServerId: {2}"
|
, "Player {0} ({1}) tried to log in with an invalid session ServerId: {2}"
|
||||||
, session.getUsername(), player.getAddress(), serverId);
|
, session.getUsername(), player.getAddress(), serverId);
|
||||||
}
|
}
|
||||||
@ -137,9 +137,8 @@ public class EncryptionPacketListener extends PacketAdapter {
|
|||||||
//https://github.com/bergerkiller/CraftSource/blob/master/net.minecraft.server/LoginListener.java#L182
|
//https://github.com/bergerkiller/CraftSource/blob/master/net.minecraft.server/LoginListener.java#L182
|
||||||
if (!Arrays.equals(requestVerify, EncryptionUtil.decryptData(privateKey, responseVerify))) {
|
if (!Arrays.equals(requestVerify, EncryptionUtil.decryptData(privateKey, responseVerify))) {
|
||||||
//check if the verify token are equal to the server sent one
|
//check if the verify token are equal to the server sent one
|
||||||
disconnect(packetEvent, "Invalid token", Level.FINE
|
disconnect(packetEvent, plugin.getCore().getMessage("invalid-verify-token"), true
|
||||||
, "Player {0} ({1}) tried to login with an invalid verify token. "
|
, "Player {0} ({1}) tried to login with an invalid verify token. Server: {2} Client: {3}"
|
||||||
+ "Server: {2} Client: {3}"
|
|
||||||
, session.getUsername(), packetEvent.getPlayer().getAddress(), requestVerify, responseVerify);
|
, session.getUsername(), packetEvent.getPlayer().getAddress(), requestVerify, responseVerify);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -168,23 +167,28 @@ public class EncryptionPacketListener extends PacketAdapter {
|
|||||||
Object networkManager = getNetworkManager(player);
|
Object networkManager = getNetworkManager(player);
|
||||||
|
|
||||||
//try to detect the method by parameters
|
//try to detect the method by parameters
|
||||||
Method encryptConnectionMethod = FuzzyReflection.fromObject(networkManager)
|
Method encryptConnectionMethod = FuzzyReflection
|
||||||
.getMethodByParameters("a", SecretKey.class);
|
.fromObject(networkManager).getMethodByParameters("a", SecretKey.class);
|
||||||
|
|
||||||
//encrypt/decrypt following packets
|
//encrypt/decrypt following packets
|
||||||
//the client expects this behaviour
|
//the client expects this behaviour
|
||||||
encryptConnectionMethod.invoke(networkManager, loginKey);
|
encryptConnectionMethod.invoke(networkManager, loginKey);
|
||||||
} catch (ReflectiveOperationException ex) {
|
} catch (ReflectiveOperationException ex) {
|
||||||
disconnect(packetEvent, "Error occurred", Level.SEVERE, "Couldn't enable encryption", ex);
|
disconnect(packetEvent, plugin.getCore().getMessage("error-kick"), false, "Couldn't enable encryption", ex);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void disconnect(PacketEvent packetEvent, String kickReason, Level logLevel, String logMessage
|
private void disconnect(PacketEvent packetEvent, String kickReason, boolean debugLevel, String logMessage
|
||||||
, Object... arguments) {
|
, Object... arguments) {
|
||||||
plugin.getLogger().log(logLevel, logMessage, arguments);
|
if (debugLevel) {
|
||||||
|
plugin.getLogger().log(Level.FINE, logMessage, arguments);
|
||||||
|
} else {
|
||||||
|
plugin.getLogger().log(Level.SEVERE, logMessage, arguments);
|
||||||
|
}
|
||||||
|
|
||||||
kickPlayer(packetEvent.getPlayer(), kickReason);
|
kickPlayer(packetEvent.getPlayer(), kickReason);
|
||||||
//cancel the event in order to prevent the server receiving an invalid packet
|
//cancel the event in order to prevent the server receiving an invalid packet
|
||||||
packetEvent.setCancelled(true);
|
packetEvent.setCancelled(true);
|
||||||
@ -219,7 +223,7 @@ public class EncryptionPacketListener extends PacketAdapter {
|
|||||||
} catch (InvocationTargetException | IllegalAccessException ex) {
|
} catch (InvocationTargetException | IllegalAccessException ex) {
|
||||||
plugin.getLogger().log(Level.WARNING, "Failed to fake a new start packet", ex);
|
plugin.getLogger().log(Level.WARNING, "Failed to fake a new start packet", ex);
|
||||||
//cancel the event in order to prevent the server receiving an invalid packet
|
//cancel the event in order to prevent the server receiving an invalid packet
|
||||||
kickPlayer(from, "Error occured");
|
kickPlayer(from, plugin.getCore().getMessage("error-kick"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
package com.github.games647.fastlogin.bukkit;
|
package com.github.games647.fastlogin.bukkit.tasks;
|
||||||
|
|
||||||
|
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
||||||
import com.github.games647.fastlogin.bukkit.hooks.AuthMeHook;
|
import com.github.games647.fastlogin.bukkit.hooks.AuthMeHook;
|
||||||
import com.github.games647.fastlogin.bukkit.hooks.BukkitAuthPlugin;
|
import com.github.games647.fastlogin.bukkit.hooks.BukkitAuthPlugin;
|
||||||
import com.github.games647.fastlogin.bukkit.hooks.CrazyLoginHook;
|
import com.github.games647.fastlogin.bukkit.hooks.CrazyLoginHook;
|
@ -1,5 +1,7 @@
|
|||||||
package com.github.games647.fastlogin.bukkit;
|
package com.github.games647.fastlogin.bukkit.tasks;
|
||||||
|
|
||||||
|
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
||||||
|
import com.github.games647.fastlogin.bukkit.FastLoginBukkit;
|
||||||
import com.github.games647.fastlogin.bukkit.hooks.BukkitAuthPlugin;
|
import com.github.games647.fastlogin.bukkit.hooks.BukkitAuthPlugin;
|
||||||
import com.github.games647.fastlogin.core.PlayerProfile;
|
import com.github.games647.fastlogin.core.PlayerProfile;
|
||||||
import com.github.games647.fastlogin.core.Storage;
|
import com.github.games647.fastlogin.core.Storage;
|
||||||
@ -12,7 +14,6 @@ import java.util.concurrent.Future;
|
|||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
|
|
||||||
import org.bukkit.Bukkit;
|
import org.bukkit.Bukkit;
|
||||||
import org.bukkit.ChatColor;
|
|
||||||
import org.bukkit.entity.Player;
|
import org.bukkit.entity.Player;
|
||||||
|
|
||||||
public class ForceLoginTask implements Runnable {
|
public class ForceLoginTask implements Runnable {
|
||||||
@ -85,15 +86,14 @@ public class ForceLoginTask implements Runnable {
|
|||||||
|
|
||||||
String generatedPassword = plugin.generateStringPassword(player);
|
String generatedPassword = plugin.generateStringPassword(player);
|
||||||
boolean success = authPlugin.forceRegister(player, generatedPassword);
|
boolean success = authPlugin.forceRegister(player, generatedPassword);
|
||||||
player.sendMessage(ChatColor.DARK_GREEN + "Auto registered with password: " + generatedPassword);
|
player.sendMessage(plugin.getCore().getMessage("auto-register").replace("%password", generatedPassword));
|
||||||
player.sendMessage(ChatColor.DARK_GREEN + "You may want change it?");
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean forceLogin(BukkitAuthPlugin authPlugin, Player player) {
|
private boolean forceLogin(BukkitAuthPlugin authPlugin, Player player) {
|
||||||
plugin.getLogger().log(Level.FINE, "Logging player {0} in", player.getName());
|
plugin.getLogger().log(Level.FINE, "Logging player {0} in", player.getName());
|
||||||
boolean success = authPlugin.forceLogin(player);
|
boolean success = authPlugin.forceLogin(player);
|
||||||
player.sendMessage(ChatColor.DARK_GREEN + "Auto logged in");
|
player.sendMessage(plugin.getCore().getMessage("auto-login"));
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.github.games647</groupId>
|
<groupId>com.github.games647</groupId>
|
||||||
<artifactId>fastlogin</artifactId>
|
<artifactId>fastlogin</artifactId>
|
||||||
<version>1.4</version>
|
<version>1.5</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
@ -4,10 +4,18 @@ import com.github.games647.fastlogin.core.FastLoginCore;
|
|||||||
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
import com.google.common.util.concurrent.ThreadFactoryBuilder;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
import java.util.concurrent.ThreadFactory;
|
import java.util.concurrent.ThreadFactory;
|
||||||
|
import java.util.logging.Level;
|
||||||
import java.util.logging.Logger;
|
import java.util.logging.Logger;
|
||||||
|
import net.md_5.bungee.api.ChatColor;
|
||||||
|
|
||||||
import net.md_5.bungee.api.scheduler.GroupedThreadFactory;
|
import net.md_5.bungee.api.scheduler.GroupedThreadFactory;
|
||||||
|
import net.md_5.bungee.config.Configuration;
|
||||||
|
import net.md_5.bungee.config.ConfigurationProvider;
|
||||||
|
import net.md_5.bungee.config.YamlConfiguration;
|
||||||
|
|
||||||
public class BungeeCore extends FastLoginCore {
|
public class BungeeCore extends FastLoginCore {
|
||||||
|
|
||||||
@ -36,4 +44,40 @@ public class BungeeCore extends FastLoginCore {
|
|||||||
.setDaemon(true)
|
.setDaemon(true)
|
||||||
.setThreadFactory(new GroupedThreadFactory(plugin, pluginName)).build();
|
.setThreadFactory(new GroupedThreadFactory(plugin, pluginName)).build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadMessages() {
|
||||||
|
try {
|
||||||
|
saveDefaultFile("messages.yml");
|
||||||
|
|
||||||
|
File messageFile = new File(getDataFolder(), "messages.yml");
|
||||||
|
Configuration messageConfig = ConfigurationProvider.getProvider(YamlConfiguration.class).load(messageFile);
|
||||||
|
for (String key : messageConfig.getKeys()) {
|
||||||
|
String message = ChatColor.translateAlternateColorCodes('&', messageConfig.getString(key));
|
||||||
|
localeMessages.put(key, message);
|
||||||
|
}
|
||||||
|
} catch (IOException ex) {
|
||||||
|
getLogger().log(Level.SEVERE, "Failed to load messages", ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void loadConfig() {
|
||||||
|
if (!getDataFolder().exists()) {
|
||||||
|
getDataFolder().mkdir();
|
||||||
|
}
|
||||||
|
|
||||||
|
saveDefaultFile("config.yml");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void saveDefaultFile(String fileName) {
|
||||||
|
File configFile = new File(getDataFolder(), fileName);
|
||||||
|
if (!configFile.exists()) {
|
||||||
|
try (InputStream in = plugin.getResourceAsStream(fileName)) {
|
||||||
|
Files.copy(in, configFile.toPath());
|
||||||
|
} catch (IOException ioExc) {
|
||||||
|
getLogger().log(Level.SEVERE, "Error saving default " + fileName, ioExc);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,6 @@ import com.google.common.cache.CacheBuilder;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.util.Random;
|
import java.util.Random;
|
||||||
import java.util.concurrent.ConcurrentMap;
|
import java.util.concurrent.ConcurrentMap;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
@ -46,20 +44,11 @@ public class FastLoginBungee extends Plugin {
|
|||||||
public void onEnable() {
|
public void onEnable() {
|
||||||
loginCore.setMojangApiConnector(new MojangApiBungee(loginCore));
|
loginCore.setMojangApiConnector(new MojangApiBungee(loginCore));
|
||||||
|
|
||||||
if (!getDataFolder().exists()) {
|
loginCore.loadConfig();
|
||||||
getDataFolder().mkdir();
|
loginCore.loadMessages();
|
||||||
}
|
|
||||||
|
|
||||||
File configFile = new File(getDataFolder(), "config.yml");
|
|
||||||
if (!configFile.exists()) {
|
|
||||||
try (InputStream in = getResourceAsStream("config.yml")) {
|
|
||||||
Files.copy(in, configFile.toPath());
|
|
||||||
} catch (IOException ioExc) {
|
|
||||||
getLogger().log(Level.SEVERE, "Error saving default config", ioExc);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
File configFile = new File(getDataFolder(), "config.yml");
|
||||||
configuration = ConfigurationProvider.getProvider(YamlConfiguration.class).load(configFile);
|
configuration = ConfigurationProvider.getProvider(YamlConfiguration.class).load(configFile);
|
||||||
|
|
||||||
String driver = configuration.getString("driver");
|
String driver = configuration.getString("driver");
|
||||||
|
@ -3,7 +3,6 @@ package com.github.games647.fastlogin.bungee.tasks;
|
|||||||
import com.github.games647.fastlogin.bungee.FastLoginBungee;
|
import com.github.games647.fastlogin.bungee.FastLoginBungee;
|
||||||
import com.github.games647.fastlogin.core.PlayerProfile;
|
import com.github.games647.fastlogin.core.PlayerProfile;
|
||||||
|
|
||||||
import net.md_5.bungee.api.ChatColor;
|
|
||||||
import net.md_5.bungee.api.chat.TextComponent;
|
import net.md_5.bungee.api.chat.TextComponent;
|
||||||
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
import net.md_5.bungee.api.connection.ProxiedPlayer;
|
||||||
|
|
||||||
@ -34,39 +33,25 @@ public class AsyncToggleMessage implements Runnable {
|
|||||||
private void turnOffPremium() {
|
private void turnOffPremium() {
|
||||||
PlayerProfile playerProfile = plugin.getCore().getStorage().loadProfile(targetPlayer);
|
PlayerProfile playerProfile = plugin.getCore().getStorage().loadProfile(targetPlayer);
|
||||||
if (!playerProfile.isPremium()) {
|
if (!playerProfile.isPremium()) {
|
||||||
if (fromPlayer.isConnected()) {
|
fromPlayer.sendMessage(TextComponent.fromLegacyText(plugin.getCore().getMessage("not-premium")));
|
||||||
TextComponent textComponent = new TextComponent("You are not in the premium list");
|
|
||||||
textComponent.setColor(ChatColor.DARK_RED);
|
|
||||||
fromPlayer.sendMessage(textComponent);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
playerProfile.setPremium(false);
|
playerProfile.setPremium(false);
|
||||||
playerProfile.setUuid(null);
|
playerProfile.setUuid(null);
|
||||||
plugin.getCore().getStorage().save(playerProfile);
|
plugin.getCore().getStorage().save(playerProfile);
|
||||||
TextComponent textComponent = new TextComponent("Removed to the list of premium players");
|
fromPlayer.sendMessage(TextComponent.fromLegacyText(plugin.getCore().getMessage("remove-premium")));
|
||||||
textComponent.setColor(ChatColor.DARK_GREEN);
|
|
||||||
fromPlayer.sendMessage(textComponent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void activatePremium() {
|
private void activatePremium() {
|
||||||
PlayerProfile playerProfile = plugin.getCore().getStorage().loadProfile(targetPlayer);
|
PlayerProfile playerProfile = plugin.getCore().getStorage().loadProfile(targetPlayer);
|
||||||
if (playerProfile.isPremium()) {
|
if (playerProfile.isPremium()) {
|
||||||
if (fromPlayer.isConnected()) {
|
fromPlayer.sendMessage(TextComponent.fromLegacyText(plugin.getCore().getMessage("already-exists")));
|
||||||
TextComponent textComponent = new TextComponent("You are already on the premium list");
|
|
||||||
textComponent.setColor(ChatColor.DARK_RED);
|
|
||||||
fromPlayer.sendMessage(textComponent);
|
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
playerProfile.setPremium(true);
|
playerProfile.setPremium(true);
|
||||||
plugin.getCore().getStorage().save(playerProfile);
|
plugin.getCore().getStorage().save(playerProfile);
|
||||||
TextComponent textComponent = new TextComponent("Added to the list of premium players");
|
fromPlayer.sendMessage(TextComponent.fromLegacyText(plugin.getCore().getMessage("add-premium")));
|
||||||
textComponent.setColor(ChatColor.DARK_GREEN);
|
|
||||||
fromPlayer.sendMessage(textComponent);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.github.games647</groupId>
|
<groupId>com.github.games647</groupId>
|
||||||
<artifactId>fastlogin</artifactId>
|
<artifactId>fastlogin</artifactId>
|
||||||
<version>1.4</version>
|
<version>1.5</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package com.github.games647.fastlogin.core;
|
package com.github.games647.fastlogin.core;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
import java.util.concurrent.ThreadFactory;
|
import java.util.concurrent.ThreadFactory;
|
||||||
import java.util.logging.Level;
|
import java.util.logging.Level;
|
||||||
@ -16,6 +18,7 @@ public abstract class FastLoginCore {
|
|||||||
+ "-" + withoutDashes.substring(20, 32));
|
+ "-" + withoutDashes.substring(20, 32));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected final Map<String, String> localeMessages = new HashMap<>();
|
||||||
private MojangApiConnector mojangApiConnector;
|
private MojangApiConnector mojangApiConnector;
|
||||||
private Storage storage;
|
private Storage storage;
|
||||||
|
|
||||||
@ -37,6 +40,14 @@ public abstract class FastLoginCore {
|
|||||||
|
|
||||||
public abstract ThreadFactory getThreadFactory();
|
public abstract ThreadFactory getThreadFactory();
|
||||||
|
|
||||||
|
public String getMessage(String key) {
|
||||||
|
return localeMessages.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public abstract void loadMessages();
|
||||||
|
|
||||||
|
public abstract void loadConfig();
|
||||||
|
|
||||||
public boolean setupDatabase(String driver, String host, int port, String database, String user, String password) {
|
public boolean setupDatabase(String driver, String host, int port, String database, String user, String password) {
|
||||||
storage = new Storage(this, driver, host, port, database, user, password);
|
storage = new Storage(this, driver, host, port, database, user, password);
|
||||||
try {
|
try {
|
||||||
|
@ -3,6 +3,7 @@ package com.github.games647.fastlogin.core.importer;
|
|||||||
import java.sql.Connection;
|
import java.sql.Connection;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.sql.Statement;
|
import java.sql.Statement;
|
||||||
|
|
||||||
import javax.sql.DataSource;
|
import javax.sql.DataSource;
|
||||||
|
|
||||||
public class ElDziAuthImporter extends Importer {
|
public class ElDziAuthImporter extends Importer {
|
||||||
|
@ -4,15 +4,76 @@
|
|||||||
#
|
#
|
||||||
# You can access the newest locale here:
|
# You can access the newest locale here:
|
||||||
# https://github.com/games647/FastLogin/blob/master/core/src/main/resources/messages.yml
|
# https://github.com/games647/FastLogin/blob/master/core/src/main/resources/messages.yml
|
||||||
|
#
|
||||||
|
# You want to have language template? Visit the Github Wiki here:
|
||||||
|
# https://github.com/games647/FastLogin/wiki/English
|
||||||
|
|
||||||
# ========= Shared (BungeeCord an Bukkit) ============
|
# In order to split a message into seperate lines you could just make a new line, but keep the '
|
||||||
|
# Example:
|
||||||
|
# bla: '&aFirst line
|
||||||
|
# Second line
|
||||||
# ========= Bukkit only ================================
|
# Third line'
|
||||||
|
|
||||||
|
# If you want to disable a message, you can just set it to a empty value.
|
||||||
|
# In this case no message will be sent
|
||||||
# ========= Bungee only ================================
|
# Example:
|
||||||
|
# bla: ''
|
||||||
|
|
||||||
|
# ========= Shared (BungeeCord and Bukkit) ============
|
||||||
|
|
||||||
|
# Player activated premium logins in order to skip offline authentication
|
||||||
|
add-premium: '&2Added to the list of premium players'
|
||||||
|
|
||||||
|
# Player is already set be a paid account
|
||||||
|
already-exists: '&4You are already on the premium list'
|
||||||
|
|
||||||
|
# Player was changed to be cracked
|
||||||
|
remove-premium: '&2Removed from the list of premium players'
|
||||||
|
|
||||||
|
# Player is already set to be cracked
|
||||||
|
not-premium: '&4You are not in the premium list'
|
||||||
|
|
||||||
|
# Admin wanted to change the premium of a user that isn't known to the plugin
|
||||||
|
player-unknown: '&4Player not in the database'
|
||||||
|
|
||||||
|
# ========= Bukkit/Spigot/PaperSpigot/TacoSpigot only ================================
|
||||||
|
|
||||||
|
# The user skipped the authentication, because it was a premium player
|
||||||
|
auto-login: '&2Auto logged in'
|
||||||
|
|
||||||
|
# The user was auto registered on the first join. The user account will be registered to protect it from cracked players
|
||||||
|
# The password can be used if the mojang servers are down and you still want your premium users to login (PLANNED)
|
||||||
|
auto-register: '&2Auto registered with password: %password
|
||||||
|
You may want change it?'
|
||||||
|
|
||||||
|
# Player is not able to toggle the premium state of other players
|
||||||
|
no-permission: '&4Not enough permissions'
|
||||||
|
|
||||||
|
# Although the console can toggle the premium state, it's not possible for the console itself.
|
||||||
|
# Because the console is not a user. (obviously, isn't it?)
|
||||||
|
no-console: '&4You are not a player. You cannot toggle the premium state for YOURSELF as a console'
|
||||||
|
|
||||||
|
# The user wants to toggle premium state, but BungeeCord support is enabled. This means the server have to communicate
|
||||||
|
# with the BungeeCord first which will establish a connection with the database server.
|
||||||
|
wait-on-proxy: '&6Sending request...'
|
||||||
|
|
||||||
|
# When ProtocolLib is enabled and the plugin is unable to continue handling a login request after a requested premium
|
||||||
|
# authentication. In this state the client expects a success packet with a encrypted connection or disconnect packet.
|
||||||
|
# So we kick the player, if we cannot encrypt the connection. In other situation (example: premium name check),
|
||||||
|
# the player will be just authenticated as cracked
|
||||||
|
error-kick: '&4Error occured'
|
||||||
|
|
||||||
|
# The server sents a verify token within the premium authentication reqest. If this doesn't match on response,
|
||||||
|
# it could be another client sending malicious packets
|
||||||
|
invalid-verify-token: '&4Invalid token'
|
||||||
|
|
||||||
|
# The client sent no request join server request to the mojang servers which would proof that it's owner of that
|
||||||
|
# acciunt. Only modified clients would do this.
|
||||||
|
invalid-session: '&4Invalid session'
|
||||||
|
|
||||||
|
# The client sent a malicous packet without a login request packet
|
||||||
|
invalid-requst: '&4Invalid request'
|
||||||
|
|
||||||
|
# ========= Bungee/Waterfall only ================================
|
||||||
|
|
||||||
|
|
||||||
|
2
pom.xml
2
pom.xml
@ -8,7 +8,7 @@
|
|||||||
<packaging>pom</packaging>
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
<name>FastLogin</name>
|
<name>FastLogin</name>
|
||||||
<version>1.4</version>
|
<version>1.5</version>
|
||||||
<inceptionYear>2015</inceptionYear>
|
<inceptionYear>2015</inceptionYear>
|
||||||
<url>https://www.spigotmc.org/resources/fastlogin.14153/</url>
|
<url>https://www.spigotmc.org/resources/fastlogin.14153/</url>
|
||||||
<description>
|
<description>
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>com.github.games647</groupId>
|
<groupId>com.github.games647</groupId>
|
||||||
<artifactId>fastlogin</artifactId>
|
<artifactId>fastlogin</artifactId>
|
||||||
<version>1.4</version>
|
<version>1.5</version>
|
||||||
<relativePath>../pom.xml</relativePath>
|
<relativePath>../pom.xml</relativePath>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user