diff --git a/CHANGELOG.md b/CHANGELOG.md index 85f99f05e..03541d739 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,8 @@ # Refined Storage Changelog +### 1.7.2 +- Resource packs can now define the font colors that Refined Storage GUIs need to use (raoulvdberge) + ### 1.7.1 - Exact mode for processing patterns no longer exist, you can now define per-slot which item/fluid tags are allowed to be used by autocrafting, by using CTRL + click on the filter slot in the Pattern Grid (raoulvdberge) - The Pattern Grid now switches automatically between crafting pattern and processing pattern mode when using JEI transfer (raoulvdberge) diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/RenderSettings.java b/src/main/java/com/raoulvdberge/refinedstorage/render/RenderSettings.java new file mode 100644 index 000000000..a869e008f --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/RenderSettings.java @@ -0,0 +1,36 @@ +package com.raoulvdberge.refinedstorage.render; + +import net.minecraft.util.text.TextFormatting; + +public class RenderSettings { + public static final RenderSettings INSTANCE = new RenderSettings(); + + private int primaryColor; + private int secondaryColor; + + public RenderSettings() { + setColors(-1, -1); + } + + public void setColors(int primaryColor, int secondaryColor) { + if (primaryColor == -1) { + this.primaryColor = 4210752; + } else { + this.primaryColor = primaryColor; + } + + if (secondaryColor == -1) { + this.secondaryColor = TextFormatting.WHITE.getColor(); + } else { + this.secondaryColor = secondaryColor; + } + } + + public int getPrimaryColor() { + return primaryColor; + } + + public int getSecondaryColor() { + return secondaryColor; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/resourcepack/RSResourcePackSection.java b/src/main/java/com/raoulvdberge/refinedstorage/render/resourcepack/RSResourcePackSection.java new file mode 100644 index 000000000..aa05ccdfc --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/resourcepack/RSResourcePackSection.java @@ -0,0 +1,21 @@ +package com.raoulvdberge.refinedstorage.render.resourcepack; + +public class RSResourcePackSection { + public static final RSResourcePackSectionDeserializer DESERIALIZER = new RSResourcePackSectionDeserializer(); + + private final int primaryColor; + private final int secondaryColor; + + public RSResourcePackSection(int primaryColor, int secondaryColor) { + this.primaryColor = primaryColor; + this.secondaryColor = secondaryColor; + } + + public int getPrimaryColor() { + return primaryColor; + } + + public int getSecondaryColor() { + return secondaryColor; + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/resourcepack/RSResourcePackSectionDeserializer.java b/src/main/java/com/raoulvdberge/refinedstorage/render/resourcepack/RSResourcePackSectionDeserializer.java new file mode 100644 index 000000000..14908cd03 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/resourcepack/RSResourcePackSectionDeserializer.java @@ -0,0 +1,27 @@ +package com.raoulvdberge.refinedstorage.render.resourcepack; + +import com.google.gson.JsonObject; +import net.minecraft.resources.data.IMetadataSectionSerializer; + +public class RSResourcePackSectionDeserializer implements IMetadataSectionSerializer { + @Override + public String getSectionName() { + return "refinedstorage"; + } + + @Override + public RSResourcePackSection deserialize(JsonObject json) { + int primaryColor = -1; + int secondaryColor = -1; + + if (json.has("primary_color")) { + primaryColor = json.getAsJsonPrimitive("primary_color").getAsInt(); + } + + if (json.has("secondary_color")) { + secondaryColor = json.getAsJsonPrimitive("secondary_color").getAsInt(); + } + + return new RSResourcePackSection(primaryColor, secondaryColor); + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/render/resourcepack/ResourcePackListener.java b/src/main/java/com/raoulvdberge/refinedstorage/render/resourcepack/ResourcePackListener.java new file mode 100644 index 000000000..fb832f7e6 --- /dev/null +++ b/src/main/java/com/raoulvdberge/refinedstorage/render/resourcepack/ResourcePackListener.java @@ -0,0 +1,43 @@ +package com.raoulvdberge.refinedstorage.render.resourcepack; + +import com.raoulvdberge.refinedstorage.render.RenderSettings; +import net.minecraft.client.Minecraft; +import net.minecraft.client.resources.ClientResourcePackInfo; +import net.minecraft.client.resources.ReloadListener; +import net.minecraft.profiler.IProfiler; +import net.minecraft.resources.IResourceManager; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import javax.annotation.Nullable; +import java.io.IOException; + +public class ResourcePackListener extends ReloadListener { + private final Logger logger = LogManager.getLogger(getClass()); + + @Override + protected RSResourcePackSection prepare(IResourceManager resourceManager, IProfiler profiler) { + for (ClientResourcePackInfo info : Minecraft.getInstance().getResourcePackList().getEnabledPacks()) { + try { + RSResourcePackSection section = info.getResourcePack().getMetadata(RSResourcePackSection.DESERIALIZER); + + if (section != null) { + return section; + } + } catch (IOException e) { + logger.error("Could not read Refined Storage resource pack section", e); + } + } + + return null; + } + + @Override + protected void apply(@Nullable RSResourcePackSection section, IResourceManager resourceManager, IProfiler profiler) { + if (section != null) { + RenderSettings.INSTANCE.setColors(section.getPrimaryColor(), section.getSecondaryColor()); + } else { + RenderSettings.INSTANCE.setColors(-1, -1); + } + } +} diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/AmountSpecifyingScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/AmountSpecifyingScreen.java index 4d3f58406..f308a72e4 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/AmountSpecifyingScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/AmountSpecifyingScreen.java @@ -1,7 +1,7 @@ package com.raoulvdberge.refinedstorage.screen; import com.raoulvdberge.refinedstorage.RS; -import com.raoulvdberge.refinedstorage.util.RenderUtils; +import com.raoulvdberge.refinedstorage.render.RenderSettings; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.gui.widget.button.Button; import net.minecraft.client.resources.I18n; @@ -59,7 +59,7 @@ public abstract class AmountSpecifyingScreen extends BaseSc amountField.setEnableBackgroundDrawing(false); amountField.setVisible(true); amountField.setText(String.valueOf(getDefaultAmount())); - amountField.setTextColor(RenderUtils.DEFAULT_COLOR); + amountField.setTextColor(RenderSettings.INSTANCE.getSecondaryColor()); amountField.setCanLoseFocus(false); amountField.changeFocus(true); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/BaseScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/BaseScreen.java index 84865f55f..2b51f4178 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/BaseScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/BaseScreen.java @@ -7,6 +7,7 @@ import com.raoulvdberge.refinedstorage.container.slot.filter.FilterSlot; import com.raoulvdberge.refinedstorage.container.slot.filter.FluidFilterSlot; import com.raoulvdberge.refinedstorage.integration.craftingtweaks.CraftingTweaksIntegration; import com.raoulvdberge.refinedstorage.render.FluidRenderer; +import com.raoulvdberge.refinedstorage.render.RenderSettings; import com.raoulvdberge.refinedstorage.screen.grid.AlternativesScreen; import com.raoulvdberge.refinedstorage.screen.widget.CheckBoxWidget; import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.SideButton; @@ -131,7 +132,7 @@ public abstract class BaseScreen extends ContainerScreen FluidRenderer.INSTANCE.render(guiLeft + slot.xPos, guiTop + slot.yPos, stack); if (((FluidFilterSlot) slot).isSizeAllowed()) { - renderQuantity(guiLeft + slot.xPos, guiTop + slot.yPos, API.instance().getQuantityFormatter().formatInBucketForm(stack.getAmount()), RenderUtils.DEFAULT_COLOR); + renderQuantity(guiLeft + slot.xPos, guiTop + slot.yPos, API.instance().getQuantityFormatter().formatInBucketForm(stack.getAmount()), RenderSettings.INSTANCE.getSecondaryColor()); GL11.glDisable(GL11.GL_LIGHTING); } @@ -272,7 +273,7 @@ public abstract class BaseScreen extends ContainerScreen } public void renderItem(int x, int y, ItemStack stack) { - renderItem(x, y, stack, false, null, RenderUtils.DEFAULT_COLOR); + renderItem(x, y, stack, false, null, RenderSettings.INSTANCE.getSecondaryColor()); } public void renderItem(int x, int y, ItemStack stack, boolean overlay, @Nullable String text, int textColor) { @@ -323,7 +324,7 @@ public abstract class BaseScreen extends ContainerScreen } public void renderString(int x, int y, String message) { - renderString(x, y, message, 4210752); + renderString(x, y, message, RenderSettings.INSTANCE.getPrimaryColor()); } public void renderString(int x, int y, String message, int color) { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/DetectorScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/DetectorScreen.java index 8d1d1ed92..81de43c19 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/DetectorScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/DetectorScreen.java @@ -2,12 +2,12 @@ package com.raoulvdberge.refinedstorage.screen; import com.raoulvdberge.refinedstorage.RS; import com.raoulvdberge.refinedstorage.container.DetectorContainer; +import com.raoulvdberge.refinedstorage.render.RenderSettings; import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.DetectorModeSideButton; import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.ExactModeSideButton; import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.TypeSideButton; import com.raoulvdberge.refinedstorage.tile.DetectorTile; import com.raoulvdberge.refinedstorage.tile.data.TileDataManager; -import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.resources.I18n; import net.minecraft.entity.player.PlayerInventory; @@ -35,7 +35,7 @@ public class DetectorScreen extends BaseScreen { amountField.setVisible(true); amountField.setCanLoseFocus(true); amountField.setFocused2(false); - amountField.setTextColor(RenderUtils.DEFAULT_COLOR); + amountField.setTextColor(RenderSettings.INSTANCE.getSecondaryColor()); amountField.func_212954_a(value -> { try { int result = Integer.parseInt(value); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/FilterScreen.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/FilterScreen.java index ed34afd25..1568f95c4 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/FilterScreen.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/FilterScreen.java @@ -6,8 +6,8 @@ import com.raoulvdberge.refinedstorage.api.util.IFilter; import com.raoulvdberge.refinedstorage.container.FilterContainer; import com.raoulvdberge.refinedstorage.item.FilterItem; import com.raoulvdberge.refinedstorage.network.FilterUpdateMessage; +import com.raoulvdberge.refinedstorage.render.RenderSettings; import com.raoulvdberge.refinedstorage.screen.widget.sidebutton.FilterTypeSideButton; -import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.gui.widget.TextFieldWidget; import net.minecraft.client.gui.widget.button.Button; import net.minecraft.client.resources.I18n; @@ -72,7 +72,7 @@ public class FilterScreen extends BaseScreen { nameField.setVisible(true); nameField.setCanLoseFocus(true); nameField.setFocused2(false); - nameField.setTextColor(RenderUtils.DEFAULT_COLOR); + nameField.setTextColor(RenderSettings.INSTANCE.getSecondaryColor()); nameField.func_212954_a(name -> sendUpdate()); addButton(nameField); diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java index 738ae0528..580e814c1 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/FluidGridStack.java @@ -3,8 +3,8 @@ package com.raoulvdberge.refinedstorage.screen.grid.stack; import com.raoulvdberge.refinedstorage.api.storage.tracker.StorageTrackerEntry; import com.raoulvdberge.refinedstorage.apiimpl.API; import com.raoulvdberge.refinedstorage.render.FluidRenderer; +import com.raoulvdberge.refinedstorage.render.RenderSettings; import com.raoulvdberge.refinedstorage.screen.BaseScreen; -import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.resources.I18n; import net.minecraft.tags.FluidTags; import net.minecraft.util.ResourceLocation; @@ -159,7 +159,7 @@ public class FluidGridStack implements IGridStack { FluidRenderer.INSTANCE.render(x, y, stack); String text; - int color = RenderUtils.DEFAULT_COLOR; + int color = RenderSettings.INSTANCE.getSecondaryColor(); if (zeroed) { text = "0"; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java index e092e4a13..3ca9ec63f 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/grid/stack/ItemGridStack.java @@ -2,6 +2,7 @@ package com.raoulvdberge.refinedstorage.screen.grid.stack; import com.raoulvdberge.refinedstorage.api.storage.tracker.StorageTrackerEntry; import com.raoulvdberge.refinedstorage.apiimpl.API; +import com.raoulvdberge.refinedstorage.render.RenderSettings; import com.raoulvdberge.refinedstorage.screen.BaseScreen; import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.resources.I18n; @@ -169,7 +170,7 @@ public class ItemGridStack implements IGridStack { @Override public void draw(BaseScreen gui, int x, int y) { String text = null; - int color = RenderUtils.DEFAULT_COLOR; + int color = RenderSettings.INSTANCE.getSecondaryColor(); if (zeroed) { text = "0"; diff --git a/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/SearchWidget.java b/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/SearchWidget.java index 805e64dc4..53ea5b975 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/SearchWidget.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/screen/widget/SearchWidget.java @@ -4,8 +4,8 @@ import com.raoulvdberge.refinedstorage.RSKeyBindings; import com.raoulvdberge.refinedstorage.api.network.grid.IGrid; import com.raoulvdberge.refinedstorage.integration.jei.JeiIntegration; import com.raoulvdberge.refinedstorage.integration.jei.RSJeiPlugin; +import com.raoulvdberge.refinedstorage.render.RenderSettings; import com.raoulvdberge.refinedstorage.screen.BaseScreen; -import com.raoulvdberge.refinedstorage.util.RenderUtils; import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.widget.TextFieldWidget; import org.lwjgl.glfw.GLFW; @@ -24,7 +24,7 @@ public class SearchWidget extends TextFieldWidget { this.setEnableBackgroundDrawing(false); this.setVisible(true); - this.setTextColor(RenderUtils.DEFAULT_COLOR); + this.setTextColor(RenderSettings.INSTANCE.getSecondaryColor()); } public void updateJei() { diff --git a/src/main/java/com/raoulvdberge/refinedstorage/setup/ClientSetup.java b/src/main/java/com/raoulvdberge/refinedstorage/setup/ClientSetup.java index c58e06bf7..6aa907a60 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/setup/ClientSetup.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/setup/ClientSetup.java @@ -11,6 +11,7 @@ import com.raoulvdberge.refinedstorage.container.slot.CrafterManagerSlot; import com.raoulvdberge.refinedstorage.render.BakedModelOverrideRegistry; import com.raoulvdberge.refinedstorage.render.color.PatternItemColor; import com.raoulvdberge.refinedstorage.render.model.*; +import com.raoulvdberge.refinedstorage.render.resourcepack.ResourcePackListener; import com.raoulvdberge.refinedstorage.render.tesr.StorageMonitorTileRenderer; import com.raoulvdberge.refinedstorage.screen.*; import com.raoulvdberge.refinedstorage.screen.factory.CrafterManagerScreenFactory; @@ -21,6 +22,8 @@ import net.minecraft.client.gui.ScreenManager; import net.minecraft.client.gui.screen.Screen; import net.minecraft.inventory.container.Container; import net.minecraft.inventory.container.Slot; +import net.minecraft.resources.IReloadableResourceManager; +import net.minecraft.resources.IResourceManager; import net.minecraft.util.ResourceLocation; import net.minecraftforge.client.event.ModelBakeEvent; import net.minecraftforge.client.model.ModelLoader; @@ -34,6 +37,11 @@ public class ClientSetup { private BakedModelOverrideRegistry bakedModelOverrideRegistry = new BakedModelOverrideRegistry(); public ClientSetup() { + IResourceManager resourceManager = Minecraft.getInstance().getResourceManager(); + if (resourceManager instanceof IReloadableResourceManager) { + ((IReloadableResourceManager) resourceManager).addReloadListener(new ResourcePackListener()); + } + bakedModelOverrideRegistry.add(new ResourceLocation(RS.ID, "controller"), (base, registry) -> new FullbrightBakedModel( base, new ResourceLocation(RS.ID, "block/controller/cutouts/nearly_off"), diff --git a/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java b/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java index f1e49b974..67733b557 100644 --- a/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java +++ b/src/main/java/com/raoulvdberge/refinedstorage/util/RenderUtils.java @@ -27,8 +27,6 @@ import java.util.List; import java.util.Set; public final class RenderUtils { - public static final int DEFAULT_COLOR = 16777215; - private static final VertexFormat ITEM_FORMAT_WITH_LIGHTMAP = new VertexFormat(DefaultVertexFormats.ITEM).addElement(DefaultVertexFormats.TEX_2S); public static String shorten(String text, int length) {