From 92e4439075ea812d84820cf5bd52c3e4ca23b503 Mon Sep 17 00:00:00 2001 From: rtm516 Date: Sat, 27 Apr 2024 00:00:41 +0100 Subject: [PATCH] Get rid of array and preserve original skin data --- .../geysermc/geyser/skin/SkinProvider.java | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java index ecab11e3e..4be5f09a4 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java @@ -261,25 +261,26 @@ 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 SessionSkinApplyEvent(session, entity.getUsername(), entity.getUuid(), data.isAlex(), isBedrock, skinData[0]) { + SkinData skinData = new SkinData(skin, cape, geometry); + final EventSkinData eventSkinData = new EventSkinData(skinData); + GeyserImpl.getInstance().eventBus().fire(new SessionSkinApplyEvent(session, entity.getUsername(), entity.getUuid(), data.isAlex(), isBedrock, skinData) { @Override public void skin(@NonNull Skin newSkin) { - skinData[0] = new SkinData(newSkin, skinData[0].cape(), skinData[0].geometry()); + eventSkinData.skinData(new SkinData(newSkin, skinData.cape(), skinData.geometry())); } @Override public void cape(@NonNull Cape newCape) { - skinData[0] = new SkinData(skinData[0].skin(), newCape, skinData[0].geometry()); + eventSkinData.skinData(new SkinData(skinData.skin(), newCape, skinData.geometry())); } @Override public void geometry(@NonNull SkinGeometry newGeometry) { - skinData[0] = new SkinData(skinData[0].skin(), skinData[0].cape(), newGeometry); + eventSkinData.skinData(new SkinData(skinData.skin(), skinData.cape(), newGeometry)); } }); - return skinData[0]; + return eventSkinData.skinData(); } catch (Exception e) { GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.skin.fail", entity.getUuid()), e); } @@ -614,4 +615,20 @@ public class SkinProvider { public record SkinAndCape(Skin skin, Cape cape) { } + + public static class EventSkinData { + private SkinData skinData; + + public EventSkinData(SkinData skinData) { + this.skinData = skinData; + } + + public SkinData skinData() { + return skinData; + } + + public void skinData(SkinData skinData) { + this.skinData = skinData; + } + } }