Skip to content

Commit 49cfec1

Browse files
Use capes from the new git repo
1 parent 399ad70 commit 49cfec1

File tree

10 files changed

+121
-21
lines changed

10 files changed

+121
-21
lines changed

src/main/java/net/frozenblock/lib/FrozenClient.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
2424
import net.fabricmc.fabric.api.client.particle.v1.ParticleFactoryRegistry;
2525
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
26-
import net.frozenblock.lib.cape.client.FrozenClientCapeData;
26+
import net.frozenblock.lib.cape.client.impl.ClientCapeData;
2727
import net.frozenblock.lib.config.frozenlib_config.FrozenLibConfig;
2828
import net.frozenblock.lib.debug.client.impl.DebugRenderManager;
2929
import net.frozenblock.lib.debug.networking.StructureDebugRequestPayload;
@@ -66,7 +66,7 @@ public void onInitializeClient() {
6666
particleRegistry.register(FrozenParticleTypes.DEBUG_POS, DebugPosParticle.Provider::new);
6767

6868
Panoramas.addPanorama(ResourceLocation.withDefaultNamespace("textures/gui/title/background/panorama"));
69-
FrozenClientCapeData.init();
69+
ClientCapeData.init();
7070

7171
var resourceLoader = ResourceManagerHelper.get(PackType.CLIENT_RESOURCES);
7272
resourceLoader.registerReloadListener(BlockSoundGroupManager.INSTANCE);

src/main/java/net/frozenblock/lib/cape/api/CapeUtil.java

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,9 +18,24 @@
1818
package net.frozenblock.lib.cape.api;
1919

2020
import com.google.common.collect.ImmutableList;
21+
import com.google.gson.JsonArray;
22+
import com.google.gson.JsonElement;
23+
import com.google.gson.JsonObject;
24+
import com.google.gson.JsonParser;
25+
import java.io.IOException;
26+
import java.io.InputStream;
27+
import java.io.InputStreamReader;
28+
import java.net.URI;
29+
import java.net.URL;
30+
import java.net.URLConnection;
31+
import java.util.ArrayList;
2132
import java.util.List;
2233
import java.util.Optional;
2334
import java.util.UUID;
35+
import net.fabricmc.api.EnvType;
36+
import net.fabricmc.loader.api.FabricLoader;
37+
import net.frozenblock.lib.FrozenSharedConstants;
38+
import net.frozenblock.lib.cape.client.api.ClientCapeUtil;
2439
import net.frozenblock.lib.cape.impl.Cape;
2540
import net.frozenblock.lib.registry.api.FrozenRegistry;
2641
import net.minecraft.core.Registry;
@@ -58,7 +73,56 @@ public static boolean canPlayerUserCape(UUID uuid, @NotNull Cape cape) {
5873
return Registry.register(FrozenRegistry.CAPE, id, new Cape(id, buildCapeTextureLocation(id), Optional.of(ImmutableList.copyOf(uuids))));
5974
}
6075

61-
private static ResourceLocation buildCapeTextureLocation(@NotNull ResourceLocation cape) {
76+
public static void registerCapesFromURL(String urlString) {
77+
try {
78+
URL url = URI.create(urlString).toURL();
79+
URLConnection request = url.openConnection();
80+
request.connect();
81+
82+
JsonElement parsedJson = JsonParser.parseReader(new InputStreamReader((InputStream) request.getContent()));
83+
JsonObject capeDir = parsedJson.getAsJsonObject();
84+
JsonArray capeArray = capeDir.get("capes").getAsJsonArray();
85+
86+
capeArray.forEach(jsonElement -> {
87+
registerCapeFromURL(jsonElement.getAsString());
88+
});
89+
} catch (IOException ignored) {}
90+
}
91+
92+
private static void registerCapeFromURL(String urlString) {
93+
try {
94+
URL url = URI.create(urlString).toURL();
95+
URLConnection request = url.openConnection();
96+
request.connect();
97+
98+
JsonElement parsedJson = JsonParser.parseReader(new InputStreamReader((InputStream) request.getContent())); //Convert the input stream to a json element
99+
JsonObject capeJson = parsedJson.getAsJsonObject();
100+
String capeId = capeJson.get("id").getAsString();
101+
String capeTexture = capeJson.get("texture").getAsString();
102+
JsonArray allowedUUIDs = capeJson.get("allowed_uuids").getAsJsonArray();
103+
104+
ResourceLocation capeLocation = ResourceLocation.tryParse(capeId);
105+
if (capeLocation != null) {
106+
ResourceLocation capeTextureLocation = CapeUtil.buildCapeTextureLocation(capeLocation);
107+
if (FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT) {
108+
ClientCapeUtil.registerCapeTextureFromURL(capeLocation, capeTextureLocation, capeTexture);
109+
}
110+
111+
List<JsonElement> allowedUUIDList = allowedUUIDs.asList();
112+
if (allowedUUIDList.isEmpty()) {
113+
registerCape(capeLocation);
114+
} else {
115+
List<UUID> uuidList = new ArrayList<>();
116+
allowedUUIDList.forEach(jsonElement -> uuidList.add(UUID.fromString(jsonElement.getAsString())));
117+
registerCapeWithWhitelist(capeLocation, ImmutableList.copyOf(uuidList));
118+
}
119+
}
120+
} catch (IOException ignored) {
121+
FrozenSharedConstants.LOGGER.error("Failed to parse Cape from URL: {}", urlString);
122+
}
123+
}
124+
125+
public static ResourceLocation buildCapeTextureLocation(@NotNull ResourceLocation cape) {
62126
return ResourceLocation.tryBuild(cape.getNamespace(), "textures/cape/" + cape.getPath() + ".png");
63127
}
64128
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package net.frozenblock.lib.cape.client.api;
2+
3+
import com.google.gson.JsonIOException;
4+
import java.nio.file.Path;
5+
import java.util.concurrent.CompletableFuture;
6+
import net.fabricmc.api.EnvType;
7+
import net.fabricmc.api.Environment;
8+
import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
9+
import net.fabricmc.fabric.api.resource.SimpleSynchronousResourceReloadListener;
10+
import net.minecraft.client.Minecraft;
11+
import net.minecraft.client.renderer.texture.HttpTexture;
12+
import net.minecraft.client.resources.DefaultPlayerSkin;
13+
import net.minecraft.resources.ResourceLocation;
14+
import net.minecraft.server.packs.PackType;
15+
import net.minecraft.server.packs.resources.ResourceManager;
16+
import org.jetbrains.annotations.NotNull;
17+
18+
@Environment(EnvType.CLIENT)
19+
public class ClientCapeUtil {
20+
public static final Path CAPE_CACHE_PATH = Minecraft.getInstance().gameDirectory.toPath().resolve("frozenlib_cape_cache");
21+
22+
public static void registerCapeTextureFromURL(
23+
@NotNull ResourceLocation capeLocation, ResourceLocation capeTextureLocation, String textureURL
24+
) throws JsonIOException {
25+
ResourceManagerHelper.get(PackType.CLIENT_RESOURCES).registerReloadListener(new SimpleSynchronousResourceReloadListener() {
26+
@Override
27+
public ResourceLocation getFabricId() {
28+
return capeLocation;
29+
}
30+
31+
@Override
32+
public void onResourceManagerReload(@NotNull ResourceManager resourceManager) {
33+
CompletableFuture<ResourceLocation> completableFuture = new CompletableFuture<>();
34+
HttpTexture httpTexture = new HttpTexture(
35+
CAPE_CACHE_PATH.resolve(capeLocation.getNamespace()).resolve(capeLocation.getPath() + ".png").toFile(),
36+
textureURL,
37+
DefaultPlayerSkin.getDefaultTexture(),
38+
false,
39+
() -> completableFuture.complete(capeTextureLocation)
40+
);
41+
Minecraft.getInstance().getTextureManager().register(capeTextureLocation, httpTexture);
42+
}
43+
});
44+
}
45+
}

src/main/java/net/frozenblock/lib/cape/client/FrozenClientCapeData.java renamed to src/main/java/net/frozenblock/lib/cape/client/impl/ClientCapeData.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
* along with this program. If not, see <https://www.gnu.org/licenses/>.
1616
*/
1717

18-
package net.frozenblock.lib.cape.client;
18+
package net.frozenblock.lib.cape.client.impl;
1919

2020
import java.util.HashMap;
2121
import java.util.Map;
@@ -27,7 +27,6 @@
2727
import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
2828
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayConnectionEvents;
2929
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
30-
import net.frozenblock.lib.cape.client.impl.AbstractClientPlayerCapeInterface;
3130
import net.frozenblock.lib.cape.impl.Cape;
3231
import net.frozenblock.lib.cape.impl.networking.CapeCustomizePacket;
3332
import net.frozenblock.lib.config.frozenlib_config.FrozenLibConfig;
@@ -38,7 +37,7 @@
3837
import org.jetbrains.annotations.NotNull;
3938

4039
@Environment(EnvType.CLIENT)
41-
public class FrozenClientCapeData {
40+
public class ClientCapeData {
4241
private static final Map<UUID, Cape> CAPES_IN_SERVER = new HashMap<>();
4342

4443
public static Optional<ResourceLocation> getCapeTexture(UUID uuid) {
@@ -68,7 +67,9 @@ private static void setPlayerCapeTexture(UUID uuid, @NotNull Optional<Cape> cape
6867
}
6968

7069
public static void init() {
71-
ClientLifecycleEvents.CLIENT_STOPPING.register(client -> CAPES_IN_SERVER.clear());
70+
ClientLifecycleEvents.CLIENT_STOPPING.register(client -> {
71+
CAPES_IN_SERVER.clear();
72+
});
7273
ClientPlayConnectionEvents.DISCONNECT.register((clientPacketListener, minecraft) -> CAPES_IN_SERVER.clear());
7374
ClientPlayConnectionEvents.JOIN.register((clientPacketListener, packetSender, minecraft) -> {
7475
ClientPlayNetworking.send(CapeCustomizePacket.createPacket(minecraft.getUser().getProfileId(), ResourceLocation.parse(FrozenLibConfig.get().cape)));

src/main/java/net/frozenblock/lib/cape/impl/ServerCapeData.java

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
package net.frozenblock.lib.cape.impl;
1919

2020
import com.google.common.collect.ImmutableList;
21-
import java.util.ArrayList;
2221
import java.util.HashMap;
2322
import java.util.List;
2423
import java.util.Map;
@@ -27,7 +26,6 @@
2726
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
2827
import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents;
2928
import net.fabricmc.fabric.api.networking.v1.ServerPlayNetworking;
30-
import net.frozenblock.lib.FrozenSharedConstants;
3129
import net.frozenblock.lib.cape.api.CapeUtil;
3230
import net.frozenblock.lib.cape.impl.networking.CapeCustomizePacket;
3331
import net.minecraft.server.level.ServerPlayer;
@@ -90,13 +88,6 @@ public static void init() {
9088
UUID.fromString("3f89b045-9f47-49ac-b9a0-be2c225bd7fa") // Stella
9189
);
9290

93-
ArrayList<UUID> allArray = new ArrayList<>(devs);
94-
allArray.addAll(artists);
95-
allArray.addAll(builders);
96-
allArray.addAll(composers);
97-
allArray.addAll(soundDesigners);
98-
99-
CapeUtil.registerCapeWithWhitelist(FrozenSharedConstants.id("frozenblock"), allArray);
100-
CapeUtil.registerCapeWithWhitelist(FrozenSharedConstants.id("very_blue_cape"), UUID.fromString("ccaa0664-8fd4-4176-96b4-eab6f8c75083")); // Alex
91+
CapeUtil.registerCapesFromURL("https://raw.githubusercontent.com/FrozenBlock/CapeRepo/refs/heads/master/cape_directory.json");
10192
}
10293
}

src/main/java/net/frozenblock/lib/config/frozenlib_config/FrozenLibConfig.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import net.frozenblock.lib.config.api.registry.ConfigRegistry;
2929
import net.frozenblock.lib.config.api.sync.SyncBehavior;
3030
import net.frozenblock.lib.config.api.sync.annotation.EntrySyncData;
31-
import net.minecraft.resources.ResourceLocation;
3231
import org.quiltmc.qsl.frozenblock.misc.datafixerupper.api.QuiltDataFixerBuilder;
3332
import org.quiltmc.qsl.frozenblock.misc.datafixerupper.api.QuiltDataFixes;
3433

src/main/java/net/frozenblock/lib/networking/FrozenClientNetworking.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
import net.fabricmc.fabric.api.client.networking.v1.ClientConfigurationConnectionEvents;
2525
import net.fabricmc.fabric.api.client.networking.v1.ClientPlayNetworking;
2626
import net.fabricmc.fabric.api.networking.v1.PayloadTypeRegistry;
27-
import net.frozenblock.lib.cape.client.FrozenClientCapeData;
27+
import net.frozenblock.lib.cape.client.impl.ClientCapeData;
2828
import net.frozenblock.lib.cape.impl.networking.CapeCustomizePacket;
2929
import net.frozenblock.lib.config.api.instance.Config;
3030
import net.frozenblock.lib.config.api.registry.ConfigRegistry;
@@ -332,9 +332,9 @@ private static void receiveCapePacket() {
332332
ClientPlayNetworking.registerGlobalReceiver(CapeCustomizePacket.PACKET_TYPE, (packet, ctx) -> {
333333
UUID uuid = packet.getPlayerUUID();
334334
if (packet.isEnabled()) {
335-
FrozenClientCapeData.setCapeForUUID(uuid, packet.getCapeId());
335+
ClientCapeData.setCapeForUUID(uuid, packet.getCapeId());
336336
} else {
337-
FrozenClientCapeData.removeCapeForUUID(uuid);
337+
ClientCapeData.removeCapeForUUID(uuid);
338338
}
339339
});
340340
}
142 Bytes
Loading
-512 Bytes
Binary file not shown.
-147 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)