Skip to content

Commit

Permalink
Fix reading player textures in >=1.20.2
Browse files Browse the repository at this point in the history
  • Loading branch information
Konicai committed Dec 28, 2023
1 parent 3dcb802 commit c619f16
Show file tree
Hide file tree
Showing 14 changed files with 97 additions and 21 deletions.
7 changes: 6 additions & 1 deletion build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,14 @@ allprojects{
group = "dev.kejona"
version = "1.5.0"

java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(8))
}
}

tasks.withType<JavaCompile> {
options.encoding = "UTF-8"
options.release.set(8)
}

tasks.withType<Test>().configureEach {
Expand Down
2 changes: 1 addition & 1 deletion bungeecord/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ plugins {

dependencies {
compileOnly("net.md-5:bungeecord-api:1.19-R0.1-SNAPSHOT")
compileOnly("com.github.SpigotMC.BungeeCord:bungeecord-proxy:6324c7d") // For getting skins (dependency through jitpack)
compileOnly("com.github.SpigotMC.BungeeCord:bungeecord-proxy:b23a518") // For getting skins (dependency through jitpack)
api("cloud.commandframework:cloud-bungee:1.8.3")
api("net.kyori:adventure-platform-bungeecord:4.3.0")
implementation("org.bstats:bstats-bungeecord:3.0.2")
Expand Down
3 changes: 1 addition & 2 deletions core/src/main/java/dev/kejona/crossplatforms/SkinCache.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@

import javax.annotation.Nonnull;
import java.util.UUID;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

public class SkinCache {
Expand All @@ -29,7 +28,7 @@ public String getAvatarUrl(FormPlayer player) {
UUID uuid = player.getUuid();
try {
return avatars.get(uuid, () -> getAvatarUrl(uuid, player.getEncodedSkinData()));
} catch (ExecutionException e) {
} catch (Throwable e) {
LOGGER.warn("Exception while computing avatar url of " + player.getName());
e.printStackTrace();
return null;
Expand Down
10 changes: 9 additions & 1 deletion core/src/main/resources/bedrock-forms.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ forms:

minigames:
type: simple_form
command: minigames
title: "Minigames"
content: "Click on a minigame of choice."
buttons:
Expand Down Expand Up @@ -146,5 +145,14 @@ forms:
actions:
- message: "You entered: '%result_0%' '%result_1%' '%result_2%' '%result_3%' '%result_4%' '%result_5%'"

players:
type: simple_form
title: Players
fillers:
- type: player
format:
actions:
- commands: "You selected %raw_text%"

# Don't touch this
config-version: 5
3 changes: 3 additions & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -57,3 +57,6 @@ findProject(":spigot-common:v1_13_R2")?.name = "v1_13_R2"

include(":spigot-common:v1_14_R1")
findProject(":spigot-common:v1_14_R1")?.name = "v1_14_R1"

include(":spigot-common:v1_20_R2")
findProject(":spigot-common:v1_20_R2")?.name = "v1_20_R2"
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public void onEnable() {
metrics = new Metrics(this, METRICS_ID);

Versioned<SpigotAdapter> result = findVersionAdapter();
result.betterVersion().ifPresent(v -> logger.warn("Consider using server version " + v + " instead."));
result.betterVersion().ifPresent(v -> logger.warn("Consider using server version " + v + " or higher instead."));
if (result.value().isPresent()) {
spigotAdapter = result.value().get();
} else {
Expand Down Expand Up @@ -235,6 +235,10 @@ private boolean brigadierAvailable() {
return false;
}

public SpigotAdapter adapter() {
return spigotAdapter;
}

public abstract Versioned<SpigotAdapter> findVersionAdapter();

public static SpigotBase getInstance() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package dev.kejona.crossplatforms.spigot.adapter;

import com.mojang.authlib.properties.Property;
import dev.kejona.crossplatforms.handler.FormPlayer;
import dev.kejona.crossplatforms.spigot.SpigotAccessItems;
import org.bukkit.Material;
Expand Down Expand Up @@ -28,5 +29,7 @@ default void setSkullProfile(SkullMeta meta, FormPlayer player) {

NbtAccessor nbtAccessor(Plugin plugin);

String propertyValue(Property property);

void registerAuxiliaryEvents(Plugin plugin, SpigotAccessItems items);
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import dev.kejona.crossplatforms.handler.FormPlayer;
import dev.kejona.crossplatforms.spigot.ClassNames;
import dev.kejona.crossplatforms.spigot.SpigotBase;
import dev.kejona.crossplatforms.spigot.adapter.SpigotAdapter;
import dev.kejona.crossplatforms.utils.ReflectionUtils;
import net.kyori.adventure.text.Component;
import org.bukkit.entity.Player;
Expand All @@ -21,6 +22,7 @@
public class SpigotPlayer implements FormPlayer {

private static final SpigotBase PLUGIN = SpigotBase.getInstance();
private static final SpigotAdapter ADAPTER = PLUGIN.adapter();

private final Player handle;

Expand Down Expand Up @@ -56,7 +58,7 @@ public String getEncodedSkinData() {
// Need to be careful here - getProperties() returns an authlib PropertyMap, which extends
// MultiMap from Guava. On spigot-legacy, Guava is shaded and relocated.
for (Property textures : profile.getProperties().get("textures")) {
String value = textures.getValue();
String value = ADAPTER.propertyValue(textures);
if (!value.isEmpty()) {
return value;
}
Expand Down
12 changes: 12 additions & 0 deletions spigot-common/v1_20_R2/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@

java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17))
}
}

dependencies {
compileOnly("org.spigotmc:spigot-api:1.20.2-R0.1-SNAPSHOT")
compileOnly("com.mojang:authlib:5.0.47") // see https://www.nathaan.com/explorer/?package=com.mojang&name=authlib
api(projects.spigotCommon.v114R1)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package dev.kejona.crossplatforms.spigot.v1_20_R2;

import com.mojang.authlib.properties.Property;
import dev.kejona.crossplatforms.spigot.v1_14_R1.Adapter_v1_14_R1;

public class Adapter_v1_20_R2 extends Adapter_v1_14_R1 {

@Override
public String propertyValue(Property property) {
// Property was changed to a record in the version of authlib that 1.20.2 bumped to
return property.value();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,11 @@ public NbtAccessor nbtAccessor(Plugin plugin) {
return new LegacyNbtAccessor(plugin);
}

@Override
public String propertyValue(Property property) {
return property.getValue();
}

@Override
public void registerAuxiliaryEvents(Plugin plugin, SpigotAccessItems items) {
plugin.getServer().getPluginManager().registerEvents(new PlayerPickupItemListener(items), plugin);
Expand Down
8 changes: 7 additions & 1 deletion spigot/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,13 @@ plugins {

dependencies {
compileOnly("org.spigotmc:spigot-api:1.8.8-R0.1-SNAPSHOT")
api(projects.spigotCommon.v114R1)
api(projects.spigotCommon.v120R2) {
attributes {
// hack - need to *include* the newer implementations
// but still need this module to target the oldest java version (8)
attribute(TargetJvmVersion.TARGET_JVM_VERSION_ATTRIBUTE, 17)
}
}
}

tasks.withType<ShadowJar> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,9 @@
package dev.kejona.crossplatforms.spigot;

import dev.kejona.crossplatforms.spigot.adapter.Version;
import dev.kejona.crossplatforms.spigot.adapter.SpigotAdapter;
import dev.kejona.crossplatforms.spigot.adapter.Version;
import dev.kejona.crossplatforms.spigot.adapter.VersionMap;
import dev.kejona.crossplatforms.spigot.adapter.Versioned;
import dev.kejona.crossplatforms.spigot.v1_12_R1.Adapter_v1_12_R1;
import dev.kejona.crossplatforms.spigot.v1_13_R2.Adapter_v1_13_R2;
import dev.kejona.crossplatforms.spigot.v1_14_R1.Adapter_v1_14_R1;
import dev.kejona.crossplatforms.spigot.v1_8_R3.Adapter_v1_8_R3;
import dev.kejona.crossplatforms.spigot.v1_9_R2.Adapter_v1_9_R2;

import java.util.function.Supplier;

Expand All @@ -18,11 +13,13 @@ public class CrossplatFormsSpigot extends SpigotBase {
private static final VersionMap<Supplier<SpigotAdapter>> INDEXER = new VersionMap<>(SUPPORTED_MAJOR_VERSION);

static {
INDEXER.put(new Version("1_8_R3"), Adapter_v1_8_R3::new);
INDEXER.put(new Version("1_9_R2"), Adapter_v1_9_R2::new);
INDEXER.put(new Version("1_12_R1"), Adapter_v1_12_R1::new);
INDEXER.put(new Version("1_13_R2"), Adapter_v1_13_R2::new);
INDEXER.put(new Version("1_14_R1"), Adapter_v1_14_R1::new);
registerVersion("1_8_R3");
registerVersion("1_9_R2");
registerVersion("1_12_R1");
registerVersion("1_13_R2");
registerVersion("1_14_R1");
registerFallback("1_20_R1", "1_14_R1"); // authlib changes in 1_20_R2 - use the older adapter instead
registerVersion("1_20_R2");
}

@Override
Expand All @@ -31,4 +28,21 @@ public Versioned<SpigotAdapter> findVersionAdapter() {
Versioned<Supplier<SpigotAdapter>> adapterSupplier = INDEXER.lenientSearch(ClassNames.NMS_VERSION.substring(1));
return Versioned.convertSupplierType(adapterSupplier);
}

private static void registerVersion(String version) {
INDEXER.put(new Version(version), () -> createAdapter(version));
}

private static void registerFallback(String version, String fallback) {
INDEXER.put(new Version(version), () -> createAdapter(fallback));
}

private static SpigotAdapter createAdapter(String version) throws IllegalStateException {
try {
Class<?> adapterVersion = Class.forName("dev.kejona.crossplatforms.spigot.v" + version + ".Adapter_v" + version);
return (SpigotAdapter) adapterVersion.getConstructor().newInstance();
} catch (Throwable e) {
throw new IllegalStateException("Failed to create adapter for " + version, e);
}
}
}
6 changes: 4 additions & 2 deletions velocity/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ dependencies {
api(projects.core)
}

tasks.withType<JavaCompile> {
options.release.set(11)
java {
toolchain {
languageVersion.set(JavaLanguageVersion.of(17)) // velocity's minimum
}
}

tasks.withType<ShadowJar> {
Expand Down

0 comments on commit c619f16

Please sign in to comment.