mirror of https://github.com/GeyserMC/Geyser.git
Make SkinApplyEvent a ConnectionEvent
This commit is contained in:
parent
f1dfe1ae24
commit
2c8e4fefff
|
@ -23,10 +23,11 @@
|
|||
* @link https://github.com/GeyserMC/Geyser
|
||||
*/
|
||||
|
||||
package org.geysermc.geyser.api.event.lifecycle;
|
||||
package org.geysermc.geyser.api.event.bedrock;
|
||||
|
||||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.geysermc.event.Event;
|
||||
import org.geysermc.geyser.api.connection.GeyserConnection;
|
||||
import org.geysermc.geyser.api.event.connection.ConnectionEvent;
|
||||
import org.geysermc.geyser.api.skin.Cape;
|
||||
import org.geysermc.geyser.api.skin.Skin;
|
||||
import org.geysermc.geyser.api.skin.SkinData;
|
||||
|
@ -39,7 +40,7 @@ import java.util.UUID;
|
|||
* <p>
|
||||
* Won't be called when a fake player is spawned for a player skull.
|
||||
*/
|
||||
public abstract class SkinApplyEvent implements Event {
|
||||
public abstract class SessionSkinApplyEvent extends ConnectionEvent {
|
||||
|
||||
private final String username;
|
||||
private final UUID uuid;
|
||||
|
@ -47,7 +48,8 @@ public abstract class SkinApplyEvent implements Event {
|
|||
private final boolean isBedrock;
|
||||
private final SkinData skinData;
|
||||
|
||||
public SkinApplyEvent(String username, UUID uuid, boolean slim, boolean isBedrock, SkinData skinData) {
|
||||
public SessionSkinApplyEvent(@NonNull GeyserConnection connection, String username, UUID uuid, boolean slim, boolean isBedrock, SkinData skinData) {
|
||||
super(connection);
|
||||
this.username = username;
|
||||
this.uuid = uuid;
|
||||
this.slim = slim;
|
|
@ -63,7 +63,7 @@ public class FakeHeadProvider {
|
|||
.build(new CacheLoader<>() {
|
||||
@Override
|
||||
public SkinData load(@NonNull FakeHeadEntry fakeHeadEntry) throws Exception {
|
||||
SkinData skinData = SkinProvider.getOrDefault(SkinProvider.requestSkinData(fakeHeadEntry.getEntity()), null, 5);
|
||||
SkinData skinData = SkinProvider.getOrDefault(SkinProvider.requestSkinData(fakeHeadEntry.getEntity(), fakeHeadEntry.getSession()), null, 5);
|
||||
|
||||
if (skinData == null) {
|
||||
throw new Exception("Couldn't load player's original skin");
|
||||
|
@ -140,7 +140,7 @@ public class FakeHeadProvider {
|
|||
String texturesProperty = entity.getTexturesProperty();
|
||||
SkinProvider.getExecutorService().execute(() -> {
|
||||
try {
|
||||
SkinData mergedSkinData = MERGED_SKINS_LOADING_CACHE.get(new FakeHeadEntry(texturesProperty, fakeHeadSkinUrl, entity));
|
||||
SkinData mergedSkinData = MERGED_SKINS_LOADING_CACHE.get(new FakeHeadEntry(texturesProperty, fakeHeadSkinUrl, entity, session));
|
||||
SkinManager.sendSkinPacket(session, entity, mergedSkinData);
|
||||
} catch (ExecutionException e) {
|
||||
GeyserImpl.getInstance().getLogger().error("Couldn't merge skin of " + entity.getUsername() + " with head skin url " + fakeHeadSkinUrl, e);
|
||||
|
@ -157,7 +157,7 @@ public class FakeHeadProvider {
|
|||
return;
|
||||
}
|
||||
|
||||
SkinProvider.requestSkinData(entity).whenCompleteAsync((skinData, throwable) -> {
|
||||
SkinProvider.requestSkinData(entity, session).whenCompleteAsync((skinData, throwable) -> {
|
||||
if (throwable != null) {
|
||||
GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.skin.fail", entity.getUuid()), throwable);
|
||||
return;
|
||||
|
@ -174,6 +174,7 @@ public class FakeHeadProvider {
|
|||
private final String texturesProperty;
|
||||
private final String fakeHeadSkinUrl;
|
||||
private PlayerEntity entity;
|
||||
private GeyserSession session;
|
||||
|
||||
@Override
|
||||
public boolean equals(Object o) {
|
||||
|
|
|
@ -173,7 +173,7 @@ public class SkinManager {
|
|||
|
||||
public static void requestAndHandleSkinAndCape(PlayerEntity entity, GeyserSession session,
|
||||
Consumer<SkinProvider.SkinAndCape> skinAndCapeConsumer) {
|
||||
SkinProvider.requestSkinData(entity).whenCompleteAsync((skinData, throwable) -> {
|
||||
SkinProvider.requestSkinData(entity, session).whenCompleteAsync((skinData, throwable) -> {
|
||||
if (skinData == null) {
|
||||
if (skinAndCapeConsumer != null) {
|
||||
skinAndCapeConsumer.accept(null);
|
||||
|
|
|
@ -35,7 +35,7 @@ import lombok.NoArgsConstructor;
|
|||
import org.checkerframework.checker.nullness.qual.NonNull;
|
||||
import org.checkerframework.checker.nullness.qual.Nullable;
|
||||
import org.geysermc.geyser.GeyserImpl;
|
||||
import org.geysermc.geyser.api.event.lifecycle.SkinApplyEvent;
|
||||
import org.geysermc.geyser.api.event.bedrock.SessionSkinApplyEvent;
|
||||
import org.geysermc.geyser.api.network.AuthType;
|
||||
import org.geysermc.geyser.api.skin.Cape;
|
||||
import org.geysermc.geyser.api.skin.Skin;
|
||||
|
@ -232,7 +232,7 @@ public class SkinProvider {
|
|||
return CACHED_JAVA_CAPES.getIfPresent(capeUrl);
|
||||
}
|
||||
|
||||
static CompletableFuture<SkinData> requestSkinData(PlayerEntity entity) {
|
||||
static CompletableFuture<SkinData> requestSkinData(PlayerEntity entity, GeyserSession session) {
|
||||
SkinManager.GameProfileData data = SkinManager.GameProfileData.from(entity);
|
||||
if (data == null) {
|
||||
// This player likely does not have a textures property
|
||||
|
@ -257,8 +257,7 @@ public class SkinProvider {
|
|||
// Call event to allow extensions to modify the skin, cape and geo
|
||||
boolean isBedrock = GeyserImpl.getInstance().connectionByUuid(entity.getUuid()) != null;
|
||||
final SkinData[] skinData = {new SkinData(skin, cape, geometry)};
|
||||
GeyserImpl.getInstance().eventBus().fire(new SkinApplyEvent(entity.getUsername(), entity.getUuid(), data.isAlex(), isBedrock, skinData[0]) {
|
||||
|
||||
GeyserImpl.getInstance().eventBus().fire(new SessionSkinApplyEvent(session, entity.getUsername(), entity.getUuid(), data.isAlex(), isBedrock, skinData[0]) {
|
||||
@Override
|
||||
public void skin(@NonNull Skin newSkin) {
|
||||
skinData[0] = new SkinData(newSkin, skinData[0].cape(), skinData[0].geometry());
|
||||
|
|
Loading…
Reference in New Issue