Skip to content

Commit 4ce94fb

Browse files
committed
Add configurable crate colours
This adds configurable colours from CivianMod. In addition, the item settings screen has been switched over to owo-lib.
1 parent 97bd5a5 commit 4ce94fb

20 files changed

Lines changed: 534 additions & 360 deletions

build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,10 @@ plugins {
66
//alias(libs.plugins.shadow)
77
}
88

9+
loom {
10+
accessWidenerPath = file("src/main/resources/civmodern.accesswidener")
11+
}
12+
913
dependencies {
1014
minecraft(libs.minecraft)
1115
mappings(loom.layered() {

src/main/java/sh/okx/civmodern/common/CivMapConfig.java

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import java.util.Properties;
77
import org.apache.logging.log4j.LogManager;
88
import org.apache.logging.log4j.Logger;
9+
import sh.okx.civmodern.common.features.CompactedItem;
910
import sh.okx.civmodern.common.gui.Alignment;
1011

1112
public class CivMapConfig {
@@ -16,7 +17,6 @@ public class CivMapConfig {
1617
public static final int DEFAULT_CHEVRON_COLOUR = 0xFF0000;
1718
public static final int DEFAULT_BORDER_COLOUR = 0x7a7a7a;
1819
private final File file;
19-
private int compactedColour;
2020
private int radarCircles;
2121
private int radarSize;
2222
private float iconSize;
@@ -47,15 +47,14 @@ public class CivMapConfig {
4747
private int minimapSize;
4848
private boolean playerWaypointsEnabled;
4949
private float minimapZoom;
50-
private boolean cratesAreCompacted;
5150
private boolean showRepairCost;
5251
private boolean radarLogarithm;
5352
private boolean showMinimapCoords;
5453
private int borderColour;
5554

5655
public CivMapConfig(File file, Properties properties) {
5756
this.file = file;
58-
this.compactedColour = Integer.parseInt(properties.getProperty("compacted_colour", "16777048"));
57+
CompactedItem.COMPACTED.setRBG(Integer.parseInt(properties.getProperty("compacted_colour", Integer.toString(CompactedItem.COMPACTED.defaultColour))));
5958
this.radarCircles = Integer.parseInt(properties.getProperty("radar_circles", "4"));
6059
this.radarSize = Integer.parseInt(properties.getProperty("radar_size", "80"));
6160
this.alignment = Alignment.valueOf(properties.getProperty("alignment", "top_left").toUpperCase());
@@ -86,17 +85,17 @@ public CivMapConfig(File file, Properties properties) {
8685
this.minimapSize = Integer.parseInt(properties.getProperty("minimap_size", "100"));
8786
this.playerWaypointsEnabled = Boolean.parseBoolean(properties.getProperty("player_waypoints_enabled", "true"));
8887
this.minimapZoom = Float.parseFloat(properties.getProperty("minimap_zoom", "4"));
89-
this.cratesAreCompacted = Boolean.parseBoolean(properties.getProperty("crates_are_compacted", "true"));
9088
this.showRepairCost = Boolean.parseBoolean(properties.getProperty("show_repair_cost", "true"));
9189
this.radarLogarithm = Boolean.parseBoolean(properties.getProperty("radar_logarithm", "false"));
9290
this.showMinimapCoords = Boolean.parseBoolean(properties.getProperty("show_minimap_coords", "true"));
9391
this.borderColour = Integer.parseInt(properties.getProperty("border_colour", Integer.toString(DEFAULT_BORDER_COLOUR)));
92+
CompactedItem.CRATE.setRBG(Integer.parseInt(properties.getProperty("crate_colour", Integer.toString(CompactedItem.CRATE.defaultColour))));
9493
}
9594

9695
public void save() {
9796
try {
9897
Properties properties = new Properties();
99-
properties.setProperty("compacted_colour", Integer.toString(compactedColour));
98+
properties.setProperty("compacted_colour", Integer.toString(CompactedItem.COMPACTED.getRBG()));
10099
properties.setProperty("radar_circles", Integer.toString(radarCircles));
101100
properties.setProperty("radar_size", Integer.toString(radarSize));
102101
properties.setProperty("alignment", alignment.name().toLowerCase());
@@ -126,11 +125,11 @@ public void save() {
126125
properties.setProperty("minimap_size", Integer.toString(minimapSize));
127126
properties.setProperty("player_waypoints_enabled", Boolean.toString(playerWaypointsEnabled));
128127
properties.setProperty("minimap_zoom", Float.toString(minimapZoom));
129-
properties.setProperty("crates_are_compacted", Boolean.toString(cratesAreCompacted));
130128
properties.setProperty("show_repair_cost", Boolean.toString(showRepairCost));
131129
properties.setProperty("radar_logarithm", Boolean.toString(radarLogarithm));
132130
properties.setProperty("show_minimap_coords", Boolean.toString(showMinimapCoords));
133131
properties.setProperty("border_colour", Integer.toString(borderColour));
132+
properties.setProperty("crate_colour", Integer.toString(CompactedItem.CRATE.getRBG()));
134133

135134
try (FileOutputStream output = new FileOutputStream(file)) {
136135
properties.store(output, null);
@@ -149,14 +148,6 @@ public void setShowItems(boolean showItems) {
149148
this.showItems = showItems;
150149
}
151150

152-
public int getColour() {
153-
return compactedColour;
154-
}
155-
156-
public void setColour(int compactedColour) {
157-
this.compactedColour = compactedColour;
158-
}
159-
160151
public void setRadarCircles(int radarCircles) {
161152
this.radarCircles = radarCircles;
162153
}
@@ -389,14 +380,6 @@ public void setMinimapZoom(float minimapZoom) {
389380
this.minimapZoom = minimapZoom;
390381
}
391382

392-
public boolean isCratesAreCompacted() {
393-
return cratesAreCompacted;
394-
}
395-
396-
public void setCratesAreCompacted(boolean cratesAreCompacted) {
397-
this.cratesAreCompacted = cratesAreCompacted;
398-
}
399-
400383
public boolean isShowRepairCost() {
401384
return showRepairCost;
402385
}

src/main/java/sh/okx/civmodern/common/ColourProvider.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,13 @@ public class ColourProvider {
77
private final CivMapConfig config;
88
private Integer radarFg;
99
private Integer radarBg;
10-
private Integer compacted;
1110
private Integer chevron;
1211
private Integer border;
1312

1413
public ColourProvider(CivMapConfig config) {
1514
this.config = config;
1615
}
1716

18-
public int getCompactedColour() {
19-
return Objects.requireNonNullElseGet(compacted, config::getColour);
20-
}
21-
2217
public int getForegroundColour() {
2318
return Objects.requireNonNullElseGet(radarFg, config::getRadarColour);
2419
}
@@ -43,10 +38,6 @@ public void setTemporaryRadarBackgroundColour(Integer colour) {
4338
radarBg = colour;
4439
}
4540

46-
public void setTemporaryCompactedColour(Integer colour) {
47-
compacted = colour;
48-
}
49-
5041
public void setTemporaryChevronColour(Integer colour) {
5142
chevron = colour;
5243
}
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
package sh.okx.civmodern.common.features;
2+
3+
import java.awt.Color;
4+
import java.util.List;
5+
import java.util.NoSuchElementException;
6+
import net.minecraft.core.component.DataComponentPatch;
7+
import net.minecraft.core.component.DataComponents;
8+
import net.minecraft.network.chat.Component;
9+
import net.minecraft.network.chat.Style;
10+
import net.minecraft.world.item.ItemStack;
11+
import net.minecraft.world.item.Items;
12+
import net.minecraft.world.item.component.ItemLore;
13+
import org.jetbrains.annotations.NotNull;
14+
import org.jetbrains.annotations.Nullable;
15+
16+
public enum CompactedItem {
17+
CRATE(0xFF_41_41),
18+
COMPACTED(0xFF_FF_58),
19+
;
20+
21+
public final int defaultColour;
22+
public final Color defaultAwtColor;
23+
private volatile int colour;
24+
25+
CompactedItem(
26+
final int defaultColour
27+
) {
28+
this.defaultColour = defaultColour;
29+
this.defaultAwtColor = new Color(defaultColour);
30+
this.colour = defaultColour;
31+
}
32+
33+
public int getRBG() {
34+
return 0xFF_00_00_00 | this.colour;
35+
}
36+
37+
public void setRBG(
38+
final int colour
39+
) {
40+
this.colour = colour;
41+
}
42+
43+
private static final String CRATE_LORE = "Crate";
44+
private static final String COMPACTED_LORE = "Compacted Item";
45+
46+
public static @Nullable CompactedItem determineCompactedItemType(
47+
final @NotNull ItemStack item
48+
) {
49+
if (CompactedItem.isCrate(item)) {
50+
return CompactedItem.CRATE;
51+
}
52+
else if (CompactedItem.isCompacted(item)) {
53+
return CompactedItem.COMPACTED;
54+
}
55+
else {
56+
return null;
57+
}
58+
}
59+
60+
private static boolean isCrate(
61+
final @NotNull ItemStack item
62+
) {
63+
return item.getItem() == Items.CHEST
64+
&& hasLastPlainLoreLine(item, CRATE_LORE, true);
65+
}
66+
67+
private static boolean isCompacted(
68+
final @NotNull ItemStack item
69+
) {
70+
return hasLastPlainLoreLine(item, COMPACTED_LORE, true);
71+
}
72+
73+
private static boolean hasLastPlainLoreLine(
74+
final @NotNull ItemStack item,
75+
final @NotNull String expected,
76+
final boolean caseSensitive
77+
) {
78+
final ItemLore lore = item.getComponents().get(DataComponents.LORE);
79+
if (lore == null) {
80+
return false;
81+
}
82+
final Component line;
83+
try {
84+
line = lore.lines().getLast();
85+
}
86+
catch (final NoSuchElementException ignored) {
87+
return false;
88+
}
89+
final var content = new StringBuilder();
90+
for (final Component child : line.toFlatList()) {
91+
if (!Style.EMPTY.equals(child.getStyle())) {
92+
return false;
93+
}
94+
content.append(child.getString());
95+
}
96+
return caseSensitive
97+
? expected.contentEquals(content)
98+
: expected.equalsIgnoreCase(content.toString());
99+
}
100+
101+
public static @NotNull ItemStack createExampleCrate() {
102+
return new ItemStack(
103+
Items.CHEST.builtInRegistryHolder(),
104+
64,
105+
DataComponentPatch.builder()
106+
.set(DataComponents.LORE, new ItemLore(List.of(
107+
Component.literal(CompactedItem.CRATE_LORE)
108+
)))
109+
.build()
110+
);
111+
}
112+
113+
public static @NotNull ItemStack createExampleCompacted() {
114+
return new ItemStack(
115+
Items.STONE.builtInRegistryHolder(),
116+
64,
117+
DataComponentPatch.builder()
118+
.set(DataComponents.LORE, new ItemLore(List.of(
119+
Component.literal(CompactedItem.COMPACTED_LORE)
120+
)))
121+
.build()
122+
);
123+
}
124+
}

src/main/java/sh/okx/civmodern/common/features/ExtendedItemStack.java

Lines changed: 0 additions & 6 deletions
This file was deleted.

0 commit comments

Comments
 (0)