Add customization of text color through resourcepack meta

This commit is contained in:
raoulvdberge
2019-11-27 16:40:52 +01:00
parent 2fd489f128
commit 0024c4a6aa
14 changed files with 154 additions and 16 deletions

View File

@@ -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)

View File

@@ -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;
}
}

View File

@@ -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;
}
}

View File

@@ -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<RSResourcePackSection> {
@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);
}
}

View File

@@ -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<RSResourcePackSection> {
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);
}
}
}

View File

@@ -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<T extends Container> 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);

View File

@@ -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<T extends Container> extends ContainerScreen<T>
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<T extends Container> extends ContainerScreen<T>
}
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<T extends Container> extends ContainerScreen<T>
}
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) {

View File

@@ -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<DetectorContainer> {
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);

View File

@@ -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<FilterContainer> {
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);

View File

@@ -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";

View File

@@ -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";

View File

@@ -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() {

View File

@@ -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"),

View File

@@ -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) {