From e34d22adea31de68cf9bf081fa51dd652219e254 Mon Sep 17 00:00:00 2001
From: Vixid <52578495+VixidDev@users.noreply.github.com>
Date: Wed, 27 Sep 2023 13:24:19 +0100
Subject: Default Armor Colour Feature (#825)
---
.../miscfeatures/DefaultArmorColour.java | 83 ++++++++++++++++++++++
.../mixins/MixinLayerArmorBase.java | 6 ++
.../options/seperateSections/Misc.java | 8 +++
3 files changed, 97 insertions(+)
create mode 100644 src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DefaultArmorColour.java
(limited to 'src/main/java/io')
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DefaultArmorColour.java b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DefaultArmorColour.java
new file mode 100644
index 00000000..9d50e8ac
--- /dev/null
+++ b/src/main/java/io/github/moulberry/notenoughupdates/miscfeatures/DefaultArmorColour.java
@@ -0,0 +1,83 @@
+/*
+ * Copyright (C) 2023 NotEnoughUpdates contributors
+ *
+ * This file is part of NotEnoughUpdates.
+ *
+ * NotEnoughUpdates is free software: you can redistribute it
+ * and/or modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation, either
+ * version 3 of the License, or (at your option) any later version.
+ *
+ * NotEnoughUpdates is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with NotEnoughUpdates. If not, see .
+ */
+
+package io.github.moulberry.notenoughupdates.miscfeatures;
+
+import com.google.gson.JsonObject;
+import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
+import io.github.moulberry.notenoughupdates.autosubscribe.NEUAutoSubscribe;
+import net.minecraft.item.ItemArmor;
+import net.minecraft.item.ItemStack;
+import net.minecraft.nbt.JsonToNBT;
+import net.minecraft.nbt.NBTException;
+import net.minecraft.nbt.NBTTagCompound;
+import net.minecraftforge.event.world.WorldEvent;
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+@NEUAutoSubscribe
+public class DefaultArmorColour {
+
+ private static Map armorColourCache = new HashMap<>();
+ private static Set erroredItems = new HashSet<>();
+
+ public static int getDefaultArmorColour(ItemArmor item, ItemStack stack) {
+ JsonObject itemJson = NotEnoughUpdates.INSTANCE.manager
+ .createItemResolutionQuery()
+ .withItemStack(stack)
+ .resolveToItemListJson();
+
+ if (itemJson == null) return item.getColor(stack);
+
+ String internalname = itemJson.get("internalname").getAsString();
+ if (armorColourCache.containsKey(internalname)) return armorColourCache.get(internalname);
+ if (erroredItems.contains(internalname)) return item.getColor(stack);
+
+ if (itemJson.has("nbttag")) {
+ try {
+ NBTTagCompound nbt = JsonToNBT.getTagFromJson(itemJson.get("nbttag").getAsString());
+ NBTTagCompound display;
+
+ if (nbt.hasKey("display") && (display = nbt.getCompoundTag("display")).hasKey("color")) {
+ int colour = display.getInteger("color");
+
+ if (colour != 0) {
+ armorColourCache.put(internalname, colour);
+ return colour;
+ }
+ }
+ } catch (NBTException exception) {
+ erroredItems.add(internalname);
+ System.out.println("[NEU] Ran into NBTException whilst converting Json into NBT with the JsonObject: " + itemJson);
+ exception.printStackTrace();
+ }
+ }
+
+ return item.getColor(stack);
+ }
+
+ @SubscribeEvent
+ public void onWorldChange(WorldEvent.Unload event) {
+ armorColourCache.clear();
+ }
+}
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinLayerArmorBase.java b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinLayerArmorBase.java
index 0a5acedf..a50e5394 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinLayerArmorBase.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/mixins/MixinLayerArmorBase.java
@@ -19,7 +19,9 @@
package io.github.moulberry.notenoughupdates.mixins;
+import io.github.moulberry.notenoughupdates.NotEnoughUpdates;
import io.github.moulberry.notenoughupdates.core.ChromaColour;
+import io.github.moulberry.notenoughupdates.miscfeatures.DefaultArmorColour;
import io.github.moulberry.notenoughupdates.miscfeatures.ItemCustomizeManager;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.renderer.entity.layers.LayerArmorBase;
@@ -75,6 +77,10 @@ public abstract class MixinLayerArmorBase {
)
)
public int renderItem_getColor(ItemArmor item, ItemStack stack) {
+ if (NotEnoughUpdates.INSTANCE.config.misc.defaultArmorColour) {
+ return DefaultArmorColour.getDefaultArmorColour(item, stack);
+ }
+
ItemCustomizeManager.ItemData data = ItemCustomizeManager.getDataForItem(stack);
if (data != null && data.customLeatherColour != null && ItemCustomizeManager.shouldRenderLeatherColour(stack)) {
return ChromaColour.specialToChromaRGB(data.customLeatherColour);
diff --git a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java
index 02630df9..10e835ba 100644
--- a/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java
+++ b/src/main/java/io/github/moulberry/notenoughupdates/options/seperateSections/Misc.java
@@ -319,4 +319,12 @@ public class Misc {
)
@ConfigEditorBoolean
public boolean oldSkyBlockMenu = false;
+
+ @Expose
+ @ConfigOption(
+ name = "Default Armor Colour",
+ desc = "Changes all armor, on self and others, to the default item colour. Overwrites any /neucustomize changes also."
+ )
+ @ConfigEditorBoolean
+ public boolean defaultArmorColour = false;
}
--
cgit