blob: 9180cca69f31b7751e45fcc9aa92bbfec274e52a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
package io.github.moulberry.notenoughupdates.miscfeatures;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.AbstractClientPlayer;
import net.minecraft.client.resources.IResourceManager;
import net.minecraft.client.resources.IResourceManagerReloadListener;
import net.minecraft.util.ResourceLocation;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
public class NPCRetexturing implements IResourceManagerReloadListener {
private static final NPCRetexturing INSTANCE = new NPCRetexturing();
private static final ResourceLocation npcRetexturingJson = new ResourceLocation("notenoughupdates:npccustomtextures/config.json");
private final Gson gson = new GsonBuilder().create();
public static class Skin {
public ResourceLocation skinLocation;
public boolean skinny;
public Skin(ResourceLocation skinLocation, boolean skinny) {
this.skinLocation = skinLocation;
this.skinny = skinny;
}
}
private final HashMap<AbstractClientPlayer, Skin> skinOverrideCache = new HashMap<>();
private final HashMap<String, Skin> skinMap = new HashMap<>();
private boolean gettingSkin = false;
public Skin getSkin(AbstractClientPlayer player) {
if (gettingSkin) return null;
if (player.getUniqueID().version() == 4) return null;
if (skinOverrideCache.containsKey(player)) {
return skinOverrideCache.get(player);
}
gettingSkin = true;
ResourceLocation loc = player.getLocationSkin();
gettingSkin = false;
if (skinMap.containsKey(loc.getResourcePath()) && !NotEnoughUpdates.INSTANCE.config.misc.disableNPCRetexturing) {
Skin skin = skinMap.get(loc.getResourcePath());
skinOverrideCache.put(player, skin);
return skin;
}
skinOverrideCache.put(player, null);
return null;
}
public void tick() {
skinOverrideCache.clear();
}
@Override
public void onResourceManagerReload(IResourceManager resourceManager) {
skinMap.clear();
try (BufferedReader reader = new BufferedReader(new InputStreamReader(
Minecraft.getMinecraft().getResourceManager().getResource(npcRetexturingJson).getInputStream(), StandardCharsets.UTF_8))) {
JsonObject json = gson.fromJson(reader, JsonObject.class);
if (json == null) return;
for (Map.Entry<String, JsonElement> entry : json.entrySet()) {
if (entry.getValue().isJsonObject()) {
JsonObject val = entry.getValue().getAsJsonObject();
Skin skin = new Skin(new ResourceLocation(val.get("skin").getAsString()), val.get("skinny").getAsBoolean());
skinMap.put("skins/" + entry.getKey(), skin);
}
}
} catch (Exception ignored) {}
}
public static NPCRetexturing getInstance() {
return INSTANCE;
}
}
|