mirror of
https://github.com/TuxCoding/FastLogin.git
synced 2025-07-30 10:47:33 +02:00
Fix default message loading, because default values are ignored by .getKeys()
This commit is contained in:
21
README.md
21
README.md
@ -3,7 +3,7 @@
|
|||||||
Checks if a Minecraft player has a paid account (premium). If so, they can skip offline authentication (auth plugins).
|
Checks if a Minecraft player has a paid account (premium). If so, they can skip offline authentication (auth plugins).
|
||||||
So they don't need to enter passwords. This is also called auto login (auto-login).
|
So they don't need to enter passwords. This is also called auto login (auto-login).
|
||||||
|
|
||||||
### Features:
|
## Features
|
||||||
|
|
||||||
* Detect paid accounts from others
|
* Detect paid accounts from others
|
||||||
* Automatically login paid accounts (premium)
|
* Automatically login paid accounts (premium)
|
||||||
@ -36,18 +36,21 @@ https://ci.codemc.org/job/Games647/job/FastLogin/changes
|
|||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### Commands:
|
## Commands
|
||||||
|
|
||||||
/premium [player] Label the invoker or the argument as paid account
|
/premium [player] Label the invoker or the argument as paid account
|
||||||
/cracked [player] Label the invoker or the argument as cracked account
|
/cracked [player] Label the invoker or the argument as cracked account
|
||||||
|
|
||||||
### Permissions:
|
## Permissions
|
||||||
|
|
||||||
fastlogin.bukkit.command.premium
|
fastlogin.bukkit.command.premium
|
||||||
fastlogin.bukkit.command.cracked
|
fastlogin.bukkit.command.cracked
|
||||||
fastlogin.command.premium.other
|
fastlogin.command.premium.other
|
||||||
fastlogin.command.cracked.other
|
fastlogin.command.cracked.other
|
||||||
fastlogin.command.import
|
fastlogin.command.import
|
||||||
|
|
||||||
### Requirements:
|
## Requirements
|
||||||
|
|
||||||
* Plugin:
|
* Plugin:
|
||||||
* [ProtocolLib](https://www.spigotmc.org/resources/protocollib.1997/) or
|
* [ProtocolLib](https://www.spigotmc.org/resources/protocollib.1997/) or
|
||||||
* [ProtocolSupport](https://www.spigotmc.org/resources/protocolsupport.7201/)
|
* [ProtocolSupport](https://www.spigotmc.org/resources/protocolsupport.7201/)
|
||||||
@ -56,7 +59,7 @@ https://ci.codemc.org/job/Games647/job/FastLogin/changes
|
|||||||
* Run Spigot and/or BungeeCord/Waterfall in offline mode (see server.properties or config.yml)
|
* Run Spigot and/or BungeeCord/Waterfall in offline mode (see server.properties or config.yml)
|
||||||
* An auth plugin. Supported plugins
|
* An auth plugin. Supported plugins
|
||||||
|
|
||||||
#### Bukkit/Spigot/Paper
|
### Bukkit/Spigot/Paper
|
||||||
|
|
||||||
* [AuthMe (5.X)](https://dev.bukkit.org/bukkit-plugins/authme-reloaded/)
|
* [AuthMe (5.X)](https://dev.bukkit.org/bukkit-plugins/authme-reloaded/)
|
||||||
* [xAuth](https://dev.bukkit.org/bukkit-plugins/xauth/)
|
* [xAuth](https://dev.bukkit.org/bukkit-plugins/xauth/)
|
||||||
@ -66,21 +69,21 @@ https://ci.codemc.org/job/Games647/job/FastLogin/changes
|
|||||||
* [LoginSecurity](https://dev.bukkit.org/bukkit-plugins/loginsecurity/)
|
* [LoginSecurity](https://dev.bukkit.org/bukkit-plugins/loginsecurity/)
|
||||||
* [UltraAuth](https://dev.bukkit.org/bukkit-plugins/ultraauth-aa/)
|
* [UltraAuth](https://dev.bukkit.org/bukkit-plugins/ultraauth-aa/)
|
||||||
|
|
||||||
#### BungeeCord/Waterfall
|
### BungeeCord/Waterfall
|
||||||
|
|
||||||
* [BungeeAuth](https://www.spigotmc.org/resources/bungeeauth.493/)
|
* [BungeeAuth](https://www.spigotmc.org/resources/bungeeauth.493/)
|
||||||
|
|
||||||
***
|
***
|
||||||
|
|
||||||
### How to install
|
## How to install
|
||||||
|
|
||||||
#### Bukkit/Spigot/Paper
|
### Bukkit/Spigot/Paper
|
||||||
|
|
||||||
1. Download and install ProtocolLib/ProtocolSupport
|
1. Download and install ProtocolLib/ProtocolSupport
|
||||||
2. Download and install FastLogin (or FastLoginBukkit for newer versions)
|
2. Download and install FastLogin (or FastLoginBukkit for newer versions)
|
||||||
3. Set your server in offline mode by setting the value onlinemode in your server.properties to false
|
3. Set your server in offline mode by setting the value onlinemode in your server.properties to false
|
||||||
|
|
||||||
#### BungeeCord/Waterfall
|
### BungeeCord/Waterfall
|
||||||
|
|
||||||
1. Activate BungeeCord in the Spigot configuration
|
1. Activate BungeeCord in the Spigot configuration
|
||||||
2. Restart your server
|
2. Restart your server
|
||||||
|
@ -130,7 +130,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>me.clip</groupId>
|
<groupId>me.clip</groupId>
|
||||||
<artifactId>placeholderapi</artifactId>
|
<artifactId>placeholderapi</artifactId>
|
||||||
<version>2.8.4</version>
|
<version>2.8.5</version>
|
||||||
<scope>provided</scope>
|
<scope>provided</scope>
|
||||||
<optional>true</optional>
|
<optional>true</optional>
|
||||||
<exclusions>
|
<exclusions>
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.github.games647.fastlogin.bukkit;
|
package com.github.games647.fastlogin.bukkit;
|
||||||
|
|
||||||
import com.github.games647.craftapi.model.skin.SkinProperty;
|
import com.github.games647.craftapi.model.skin.Property;
|
||||||
import com.github.games647.fastlogin.core.StoredProfile;
|
import com.github.games647.fastlogin.core.StoredProfile;
|
||||||
import com.github.games647.fastlogin.core.shared.LoginSession;
|
import com.github.games647.fastlogin.core.shared.LoginSession;
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ public class BukkitLoginSession extends LoginSession {
|
|||||||
|
|
||||||
private boolean verified;
|
private boolean verified;
|
||||||
|
|
||||||
private SkinProperty skinProperty;
|
private Property skinProperty;
|
||||||
|
|
||||||
public BukkitLoginSession(String username, String serverId, byte[] verifyToken, boolean registered
|
public BukkitLoginSession(String username, String serverId, byte[] verifyToken, boolean registered
|
||||||
, StoredProfile profile) {
|
, StoredProfile profile) {
|
||||||
@ -54,7 +54,7 @@ public class BukkitLoginSession extends LoginSession {
|
|||||||
/**
|
/**
|
||||||
* @return premium skin if available
|
* @return premium skin if available
|
||||||
*/
|
*/
|
||||||
public synchronized Optional<SkinProperty> getSkin() {
|
public synchronized Optional<Property> getSkin() {
|
||||||
return Optional.ofNullable(skinProperty);
|
return Optional.ofNullable(skinProperty);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +62,7 @@ public class BukkitLoginSession extends LoginSession {
|
|||||||
* Sets the premium skin property which was retrieved by the session server
|
* Sets the premium skin property which was retrieved by the session server
|
||||||
* @param skinProperty premium skin
|
* @param skinProperty premium skin
|
||||||
*/
|
*/
|
||||||
public synchronized void setSkinProperty(SkinProperty skinProperty) {
|
public synchronized void setSkinProperty(Property skinProperty) {
|
||||||
this.skinProperty = skinProperty;
|
this.skinProperty = skinProperty;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,7 @@ import com.comphenix.protocol.reflect.accessors.MethodAccessor;
|
|||||||
import com.comphenix.protocol.utility.MinecraftReflection;
|
import com.comphenix.protocol.utility.MinecraftReflection;
|
||||||
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
import com.comphenix.protocol.wrappers.WrappedGameProfile;
|
||||||
import com.comphenix.protocol.wrappers.WrappedSignedProperty;
|
import com.comphenix.protocol.wrappers.WrappedSignedProperty;
|
||||||
import com.github.games647.craftapi.model.skin.SkinProperty;
|
import com.github.games647.craftapi.model.skin.Property;
|
||||||
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;
|
||||||
|
|
||||||
@ -54,14 +54,14 @@ public class SkinApplyListener implements Listener {
|
|||||||
private void applySkin(Player player, String skinData, String signature) {
|
private void applySkin(Player player, String skinData, String signature) {
|
||||||
WrappedGameProfile gameProfile = WrappedGameProfile.fromPlayer(player);
|
WrappedGameProfile gameProfile = WrappedGameProfile.fromPlayer(player);
|
||||||
|
|
||||||
WrappedSignedProperty skin = WrappedSignedProperty.fromValues(SkinProperty.TEXTURE_KEY, skinData, signature);
|
WrappedSignedProperty skin = WrappedSignedProperty.fromValues(Property.TEXTURE_KEY, skinData, signature);
|
||||||
try {
|
try {
|
||||||
gameProfile.getProperties().put(SkinProperty.TEXTURE_KEY, skin);
|
gameProfile.getProperties().put(Property.TEXTURE_KEY, skin);
|
||||||
} catch (ClassCastException castException) {
|
} catch (ClassCastException castException) {
|
||||||
//Cauldron, MCPC, Thermos, ...
|
//Cauldron, MCPC, Thermos, ...
|
||||||
Object map = GET_PROPERTIES.invoke(gameProfile.getHandle());
|
Object map = GET_PROPERTIES.invoke(gameProfile.getHandle());
|
||||||
try {
|
try {
|
||||||
MethodUtils.invokeMethod(map, "put", new Object[]{SkinProperty.TEXTURE_KEY, skin.getHandle()});
|
MethodUtils.invokeMethod(map, "put", new Object[]{Property.TEXTURE_KEY, skin.getHandle()});
|
||||||
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) {
|
} catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) {
|
||||||
plugin.getLog().error("Error setting premium skin of: {}", player, ex);
|
plugin.getLog().error("Error setting premium skin of: {}", player, ex);
|
||||||
}
|
}
|
||||||
|
@ -9,7 +9,7 @@ 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.craftapi.model.auth.Verification;
|
import com.github.games647.craftapi.model.auth.Verification;
|
||||||
import com.github.games647.craftapi.model.skin.SkinProperty;
|
import com.github.games647.craftapi.model.skin.Property;
|
||||||
import com.github.games647.craftapi.resolver.MojangResolver;
|
import com.github.games647.craftapi.resolver.MojangResolver;
|
||||||
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
import com.github.games647.fastlogin.bukkit.BukkitLoginSession;
|
||||||
import com.github.games647.fastlogin.bukkit.EncryptionUtil;
|
import com.github.games647.fastlogin.bukkit.EncryptionUtil;
|
||||||
@ -108,7 +108,7 @@ public class VerifyResponseTask implements Runnable {
|
|||||||
if (response.isPresent()) {
|
if (response.isPresent()) {
|
||||||
plugin.getLog().info("GameProfile {} has a verified premium account", username);
|
plugin.getLog().info("GameProfile {} has a verified premium account", username);
|
||||||
|
|
||||||
SkinProperty[] properties = response.get().getProperties();
|
Property[] properties = response.get().getProperties();
|
||||||
if (properties.length > 0) {
|
if (properties.length > 0) {
|
||||||
session.setSkinProperty(properties[0]);
|
session.setSkinProperty(properties[0]);
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,7 @@
|
|||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.zaxxer</groupId>
|
<groupId>com.zaxxer</groupId>
|
||||||
<artifactId>HikariCP</artifactId>
|
<artifactId>HikariCP</artifactId>
|
||||||
<version>2.7.8</version>
|
<version>3.0.0</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--Logging framework implements slf4j which is required by hikari-->
|
<!--Logging framework implements slf4j which is required by hikari-->
|
||||||
|
@ -11,6 +11,7 @@ import com.google.common.net.HostAndPort;
|
|||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.io.Reader;
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.InetSocketAddress;
|
import java.net.InetSocketAddress;
|
||||||
import java.net.Proxy;
|
import java.net.Proxy;
|
||||||
@ -103,15 +104,26 @@ public class FastLoginCore<P extends C, C, T extends PlatformPlugin<C>> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private Configuration loadFile(String fileName) throws IOException {
|
private Configuration loadFile(String fileName) throws IOException {
|
||||||
Configuration defaults;
|
|
||||||
|
|
||||||
ConfigurationProvider configProvider = ConfigurationProvider.getProvider(YamlConfiguration.class);
|
ConfigurationProvider configProvider = ConfigurationProvider.getProvider(YamlConfiguration.class);
|
||||||
|
|
||||||
|
Configuration defaults;
|
||||||
try (InputStream defaultStream = getClass().getClassLoader().getResourceAsStream(fileName)) {
|
try (InputStream defaultStream = getClass().getClassLoader().getResourceAsStream(fileName)) {
|
||||||
defaults = configProvider.load(defaultStream);
|
defaults = configProvider.load(defaultStream);
|
||||||
}
|
}
|
||||||
|
|
||||||
Path file = plugin.getPluginFolder().resolve(fileName);
|
Path file = plugin.getPluginFolder().resolve(fileName);
|
||||||
return configProvider.load(Files.newBufferedReader(file), defaults);
|
|
||||||
|
Configuration config;
|
||||||
|
try (Reader reader = Files.newBufferedReader(file)) {
|
||||||
|
config = configProvider.load(reader);
|
||||||
|
}
|
||||||
|
|
||||||
|
//explicitly add keys here, because Configuration.getKeys doesn't return the keys from the default configuration
|
||||||
|
for (String key : defaults.getKeys()) {
|
||||||
|
config.set(key, defaults.get(key));
|
||||||
|
}
|
||||||
|
|
||||||
|
return config;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MojangResolver getResolver() {
|
public MojangResolver getResolver() {
|
||||||
|
Reference in New Issue
Block a user