Add UUID version changing to support Chinese servers
This commit is contained in:
parent
19d3053201
commit
be153d8ac6
@ -68,6 +68,15 @@ public class DisguiseConfig {
|
|||||||
private static boolean warnScoreboardConflict;
|
private static boolean warnScoreboardConflict;
|
||||||
private static boolean explicitDisguisePermissions;
|
private static boolean explicitDisguisePermissions;
|
||||||
private static boolean disableCommands;
|
private static boolean disableCommands;
|
||||||
|
private static int uuidGeneratedVersion;
|
||||||
|
|
||||||
|
public static int getUUIDGeneratedVersion() {
|
||||||
|
return uuidGeneratedVersion;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setUUIDGeneratedVersion(int uuidVersion) {
|
||||||
|
uuidGeneratedVersion = uuidVersion;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* No setter provided as this cannot be changed after startup
|
* No setter provided as this cannot be changed after startup
|
||||||
@ -245,6 +254,7 @@ public class DisguiseConfig {
|
|||||||
setWarnScoreboardConflict(config.getBoolean("Scoreboard.WarnConflict"));
|
setWarnScoreboardConflict(config.getBoolean("Scoreboard.WarnConflict"));
|
||||||
disableCommands = config.getBoolean("DisableCommands");
|
disableCommands = config.getBoolean("DisableCommands");
|
||||||
setExplicitDisguisePermissions(config.getBoolean("Permissions.ExplictDisguises"));
|
setExplicitDisguisePermissions(config.getBoolean("Permissions.ExplictDisguises"));
|
||||||
|
setUUIDGeneratedVersion(config.getInt("UUIDVersion"));
|
||||||
|
|
||||||
if (!LibsPremium.isPremium() && (isSavePlayerDisguises() || isSaveEntityDisguises())) {
|
if (!LibsPremium.isPremium() && (isSavePlayerDisguises() || isSaveEntityDisguises())) {
|
||||||
DisguiseUtilities.getLogger().warning("You must purchase the plugin to use saved disguises!");
|
DisguiseUtilities.getLogger().warning("You must purchase the plugin to use saved disguises!");
|
||||||
|
@ -6,6 +6,7 @@ import com.comphenix.protocol.wrappers.WrappedDataWatcher.Registry;
|
|||||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher.Serializer;
|
import com.comphenix.protocol.wrappers.WrappedDataWatcher.Serializer;
|
||||||
import com.comphenix.protocol.wrappers.WrappedDataWatcher.WrappedDataWatcherObject;
|
import com.comphenix.protocol.wrappers.WrappedDataWatcher.WrappedDataWatcherObject;
|
||||||
import com.comphenix.protocol.wrappers.nbt.NbtWrapper;
|
import com.comphenix.protocol.wrappers.nbt.NbtWrapper;
|
||||||
|
import me.libraryaddict.disguise.DisguiseConfig;
|
||||||
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
import me.libraryaddict.disguise.disguisetypes.DisguiseType;
|
||||||
import org.bukkit.*;
|
import org.bukkit.*;
|
||||||
import org.bukkit.entity.*;
|
import org.bukkit.entity.*;
|
||||||
@ -14,6 +15,7 @@ import org.bukkit.inventory.ItemStack;
|
|||||||
import org.bukkit.potion.PotionEffect;
|
import org.bukkit.potion.PotionEffect;
|
||||||
|
|
||||||
import java.lang.reflect.*;
|
import java.lang.reflect.*;
|
||||||
|
import java.nio.ByteBuffer;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@ -384,7 +386,7 @@ public class ReflectionManager {
|
|||||||
|
|
||||||
public static WrappedGameProfile getGameProfile(UUID uuid, String playerName) {
|
public static WrappedGameProfile getGameProfile(UUID uuid, String playerName) {
|
||||||
try {
|
try {
|
||||||
return new WrappedGameProfile(uuid != null ? uuid : UUID.randomUUID(), playerName);
|
return new WrappedGameProfile(uuid != null ? uuid : getRandomUUID(), playerName);
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
catch (Exception ex) {
|
||||||
ex.printStackTrace();
|
ex.printStackTrace();
|
||||||
@ -399,8 +401,7 @@ public class ReflectionManager {
|
|||||||
public static WrappedGameProfile getGameProfileWithThisSkin(UUID uuid, String playerName,
|
public static WrappedGameProfile getGameProfileWithThisSkin(UUID uuid, String playerName,
|
||||||
WrappedGameProfile profileWithSkin) {
|
WrappedGameProfile profileWithSkin) {
|
||||||
try {
|
try {
|
||||||
WrappedGameProfile gameProfile = new WrappedGameProfile(uuid != null ? uuid : UUID.randomUUID(),
|
WrappedGameProfile gameProfile = new WrappedGameProfile(uuid != null ? uuid : getRandomUUID(), playerName);
|
||||||
playerName);
|
|
||||||
|
|
||||||
if (profileWithSkin != null) {
|
if (profileWithSkin != null) {
|
||||||
gameProfile.getProperties().putAll(profileWithSkin.getProperties());
|
gameProfile.getProperties().putAll(profileWithSkin.getProperties());
|
||||||
@ -415,6 +416,32 @@ public class ReflectionManager {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Used for generating a UUID with a custom version instead of the default 4. Workaround for China's NetEase servers
|
||||||
|
*/
|
||||||
|
private static UUID getRandomUUID() {
|
||||||
|
UUID uuid = UUID.randomUUID();
|
||||||
|
|
||||||
|
if (DisguiseConfig.getUUIDGeneratedVersion() == 4) {
|
||||||
|
return uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
|
||||||
|
|
||||||
|
bb.putLong(uuid.getMostSignificantBits());
|
||||||
|
bb.putLong(uuid.getLeastSignificantBits());
|
||||||
|
|
||||||
|
bb.put(6, (byte) (bb.get(6) & 0x0f)); // clear version
|
||||||
|
bb.put(6, (byte) (bb.get(6) | DisguiseConfig.getUUIDGeneratedVersion())); // set to version X (Default 4)
|
||||||
|
|
||||||
|
bb.position(0);
|
||||||
|
|
||||||
|
long firstLong = bb.getLong();
|
||||||
|
long secondLong = bb.getLong();
|
||||||
|
|
||||||
|
return new UUID(firstLong, secondLong);
|
||||||
|
}
|
||||||
|
|
||||||
public static Class getNmsClass(String className) {
|
public static Class getNmsClass(String className) {
|
||||||
try {
|
try {
|
||||||
return Class.forName("net.minecraft.server." + getBukkitVersion() + "." + className);
|
return Class.forName("net.minecraft.server." + getBukkitVersion() + "." + className);
|
||||||
|
@ -213,4 +213,8 @@ PacketsEnabled:
|
|||||||
# Disable this if you don't mind crashing everytime you see someone riding something disguised as a non-living entity
|
# Disable this if you don't mind crashing everytime you see someone riding something disguised as a non-living entity
|
||||||
Riding: true
|
Riding: true
|
||||||
# When disguised as a wither skull, it sends a look packet every tick so that the wither skull is facing the right way.
|
# When disguised as a wither skull, it sends a look packet every tick so that the wither skull is facing the right way.
|
||||||
WitherSkull: true
|
WitherSkull: true
|
||||||
|
|
||||||
|
# Added to support a Chinese Minecraft Server which uses their own skin server unless the UUID is not version 4.
|
||||||
|
# Changing this from 4 to say, 3. Means their server will fetch skins from Mojang instead.
|
||||||
|
UUIDVersion: 4
|
Loading…
Reference in New Issue
Block a user