MineLittlePony/src/main/java/com/minelittlepony/client/hdskins/MineLPHDSkins.java

123 lines
4.4 KiB
Java
Raw Normal View History

package com.minelittlepony.client.hdskins;
2019-05-28 12:41:06 +02:00
import com.minelittlepony.api.pony.IPony;
import com.minelittlepony.api.pony.meta.Wearable;
import com.minelittlepony.client.MineLittlePony;
import com.minelittlepony.client.SkinsProxy;
import com.minelittlepony.common.client.gui.ScrollContainer;
import com.minelittlepony.common.client.gui.element.Button;
import com.minelittlepony.common.event.ClientReadyCallback;
import com.minelittlepony.hdskins.client.*;
import com.minelittlepony.hdskins.client.dummy.DummyPlayer;
import com.minelittlepony.hdskins.client.dummy.PlayerSkins.PlayerSkin;
2020-01-28 11:40:44 +01:00
import com.minelittlepony.hdskins.client.gui.GuiSkins;
2020-03-27 19:14:50 +01:00
import com.minelittlepony.hdskins.profile.SkinType;
2020-06-21 00:41:51 +02:00
2019-12-09 16:44:47 +01:00
import com.mojang.authlib.GameProfile;
2019-11-23 18:28:42 +01:00
import java.util.*;
2021-06-10 19:32:21 +02:00
import org.jetbrains.annotations.Nullable;
2019-12-09 16:44:47 +01:00
import net.fabricmc.api.ClientModInitializer;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.gui.screen.Screen;
import net.minecraft.client.network.AbstractClientPlayerEntity;
import net.minecraft.entity.Entity;
import net.minecraft.item.Items;
2019-12-09 16:44:47 +01:00
import net.minecraft.util.Identifier;
import com.minelittlepony.client.pony.PonyManager;
import com.minelittlepony.client.render.entity.PlayerSeaponyRenderer;
2019-05-28 12:41:06 +02:00
/**
* All the interactions with HD Skins.
*/
2019-12-09 16:44:47 +01:00
public class MineLPHDSkins extends SkinsProxy implements ClientModInitializer {
2019-05-28 12:41:06 +02:00
static SkinType seaponySkinType;
static final Map<SkinType, Wearable> wearableTypes = new HashMap<>();
2019-12-09 16:44:47 +01:00
@Override
public void onInitializeClient() {
SkinsProxy.instance = this;
seaponySkinType = SkinType.register(PlayerSeaponyRenderer.SKIN_TYPE_ID, Items.COD_BUCKET.getDefaultStack());
Wearable.VALUES.forEach(wearable -> {
if (wearable != Wearable.NONE) {
wearableTypes.put(SkinType.register(wearable.getId(), Items.BUNDLE.getDefaultStack()), wearable);
}
});
2019-12-09 16:44:47 +01:00
ClientReadyCallback.EVENT.register(client -> {
// Clear ponies when skins are cleared
PonyManager ponyManager = (PonyManager) MineLittlePony.getInstance().getManager();
SkinCacheClearCallback.EVENT.register(ponyManager::clearCache);
2019-12-09 16:44:47 +01:00
// Ponify the skins GUI.
2020-01-28 11:40:44 +01:00
GuiSkins.setSkinsGui(GuiSkinsMineLP::new);
2019-12-09 16:44:47 +01:00
});
}
@Override
public void renderOption(Screen screen, @Nullable Screen parent, int row, int RIGHT, ScrollContainer content) {
content.addButton(new Button(RIGHT, row += 20, 150, 20))
2021-11-24 23:09:34 +01:00
.onClick(button -> MinecraftClient.getInstance().setScreen(
parent instanceof GuiSkins ? parent : GuiSkins.create(screen, HDSkins.getInstance().getSkinServerList())
))
.getStyle()
.setText("minelp.options.skins.hdskins.open");
}
@Override
public Optional<Identifier> getSkin(Identifier skinTypeId, AbstractClientPlayerEntity player) {
return SkinType.REGISTRY.getOrEmpty(skinTypeId).flatMap(type -> getSkin(type, player));
}
public Set<Identifier> getAvailableSkins(Entity entity) {
if (entity instanceof DummyPlayer dummy) {
2022-12-10 22:16:37 +01:00
return dummy.getTextures().getProvidedSkinTypes();
}
if (entity instanceof AbstractClientPlayerEntity player) {
2022-12-10 22:16:37 +01:00
PlayerSkins skins = PlayerSkins.of(player);
if (skins != null) {
return skins.getProvidedSkinTypes();
}
}
return Set.of();
}
private Optional<Identifier> getSkin(SkinType type, AbstractClientPlayerEntity player) {
if (player instanceof DummyPlayer dummy) {
PlayerSkin skin = dummy.getTextures().get(type);
if (skin.isReady()) {
return Optional.of(skin.getId());
}
PlayerSkin main = dummy.getTextures().get(SkinType.SKIN);
if (IPony.getManager().getPony(main.getId()).metadata().isWearing(Wearable.REGISTRY.getOrDefault(type.getId(), Wearable.NONE))) {
return Optional.of(main.getId());
}
}
2022-12-10 22:16:37 +01:00
return Optional.of(player).map(PlayerSkins::of).map(skins -> skins.getSkin(type));
}
2019-12-09 16:44:47 +01:00
@Override
public Identifier getSkinTexture(GameProfile profile) {
Identifier skin = HDSkins.getInstance().getProfileRepository().getTextures(profile).get(SkinType.SKIN);
2019-05-28 12:41:06 +02:00
2019-12-09 16:44:47 +01:00
if (skin != null) {
return skin;
}
2019-12-09 16:44:47 +01:00
return super.getSkinTexture(profile);
2019-05-28 12:41:06 +02:00
}
}