Skip to content

Commit 4a82dad

Browse files
authored
Add data-driven tooltips about better RLC assembler yield (#1050)
1 parent ac6684c commit 4a82dad

File tree

8 files changed

+126
-13
lines changed

8 files changed

+126
-13
lines changed

src/generated/resources/assets/modern_industrialization/lang/en_us.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1595,6 +1595,7 @@
15951595
"text.modern_industrialization.GunpowderTime": "Overclock: %s",
15961596
"text.modern_industrialization.GunpowderUpgrade": "Double MI Steam Machines speed for 2 minutes",
15971597
"text.modern_industrialization.GunpowderUpgradeMachine": "Use Gunpowder to double this machine speed for 2 minutes",
1598+
"text.modern_industrialization.HasBetterYieldAssemblerRecipe": "Has an Assembler recipe with better yield.",
15981599
"text.modern_industrialization.HeatConduction": "Heat Conduction %s/°kCt",
15991600
"text.modern_industrialization.ItemAutoExtractOff": "Item auto-eject disabled",
16001601
"text.modern_industrialization.ItemAutoExtractOn": "Item auto-eject enabled",
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
{
2+
"values": {
3+
"modern_industrialization:capacitor": {
4+
"components": [
5+
{
6+
"color": "#A9A9A9",
7+
"italic": false,
8+
"translate": "text.modern_industrialization.HasBetterYieldAssemblerRecipe"
9+
}
10+
]
11+
},
12+
"modern_industrialization:inductor": {
13+
"components": [
14+
{
15+
"color": "#A9A9A9",
16+
"italic": false,
17+
"translate": "text.modern_industrialization.HasBetterYieldAssemblerRecipe"
18+
}
19+
]
20+
},
21+
"modern_industrialization:resistor": {
22+
"components": [
23+
{
24+
"color": "#A9A9A9",
25+
"italic": false,
26+
"translate": "text.modern_industrialization.HasBetterYieldAssemblerRecipe"
27+
}
28+
]
29+
}
30+
}
31+
}

src/main/java/aztech/modern_industrialization/MI.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,6 +217,7 @@ public MI(IEventBus modBus, Dist dist) {
217217
event.register(MIDataMaps.FLUID_FUELS);
218218
event.register(MIDataMaps.ITEM_PIPE_UPGRADES);
219219
event.register(MIDataMaps.MACHINE_UPGRADES);
220+
event.register(MIDataMaps.ITEM_TOOLTIPS);
220221
});
221222

222223
if (MIConfig.loadAe2Compat()) {

src/main/java/aztech/modern_industrialization/MIText.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ public enum MIText {
141141
GunpowderTime("Overclock: %s"),
142142
GunpowderUpgrade("Double MI Steam Machines speed for 2 minutes"),
143143
GunpowderUpgradeMachine("Use Gunpowder to double this machine speed for 2 minutes"),
144+
HasBetterYieldAssemblerRecipe("Has an Assembler recipe with better yield."),
144145
HeatConduction("Heat Conduction %s/°kCt"),
145146
ItemAutoExtractOff("Item auto-eject disabled"),
146147
ItemAutoExtractOn("Item auto-eject enabled"),

src/main/java/aztech/modern_industrialization/MITooltips.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -97,20 +97,16 @@ public static Style styleFromProgress(double progress, boolean zeroIsGreen) {
9797
}
9898

9999
public static void attachTooltip(ItemStack stack, List<Component> lines) {
100-
Item item = stack.getItem();
101-
if (item != null) {
102-
boolean hasPrintRequiredShift = false;
103-
for (var tooltip : TOOLTIPS) {
104-
Optional<List<? extends Component>> maybeComponents = tooltip.tooltipLines.apply(stack, stack.getItem());
105-
if (!tooltip.requiresShift || CommonProxy.INSTANCE.hasShiftDown()) {
106-
maybeComponents.ifPresent(lines::addAll);
107-
} else if (tooltip.requiresShift && !hasPrintRequiredShift) {
108-
if (maybeComponents.isPresent()) {
109-
lines.add(MIText.TooltipsShiftRequired.text().setStyle(DEFAULT_STYLE));
110-
hasPrintRequiredShift = true;
111-
}
100+
boolean hasPrintRequiredShift = false;
101+
for (var tooltip : TOOLTIPS) {
102+
Optional<List<? extends Component>> maybeComponents = tooltip.tooltipLines.apply(stack, stack.getItem());
103+
if (!tooltip.requiresShift || CommonProxy.INSTANCE.hasShiftDown()) {
104+
maybeComponents.ifPresent(lines::addAll);
105+
} else if (tooltip.requiresShift && !hasPrintRequiredShift) {
106+
if (maybeComponents.isPresent()) {
107+
lines.add(MIText.TooltipsShiftRequired.text().setStyle(DEFAULT_STYLE));
108+
hasPrintRequiredShift = true;
112109
}
113-
114110
}
115111
}
116112
}
@@ -212,6 +208,16 @@ public Component parse(Double ratio) {
212208

213209
public static final Parser<Component> COMPONENT = state -> state;
214210

211+
// Data-driven tooltips
212+
public static final TooltipAttachment DATA_DRIVEN = TooltipAttachment.ofMultilines((stack, item) -> {
213+
var dataMap = stack.getItemHolder().getData(MIDataMaps.ITEM_TOOLTIPS);
214+
if (dataMap != null) {
215+
return Optional.of(dataMap.components());
216+
} else {
217+
return Optional.empty();
218+
}
219+
}).setPriority(-100);
220+
215221
// Tooltips
216222

217223
public static final TooltipAttachment BATTERIES = TooltipAttachment.of(
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* MIT License
3+
*
4+
* Copyright (c) 2020 Azercoco & Technici4n
5+
*
6+
* Permission is hereby granted, free of charge, to any person obtaining a copy
7+
* of this software and associated documentation files (the "Software"), to deal
8+
* in the Software without restriction, including without limitation the rights
9+
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10+
* copies of the Software, and to permit persons to whom the Software is
11+
* furnished to do so, subject to the following conditions:
12+
*
13+
* The above copyright notice and this permission notice shall be included in all
14+
* copies or substantial portions of the Software.
15+
*
16+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22+
* SOFTWARE.
23+
*/
24+
package aztech.modern_industrialization.api.datamaps;
25+
26+
import com.mojang.serialization.Codec;
27+
import com.mojang.serialization.codecs.RecordCodecBuilder;
28+
import java.util.List;
29+
import net.minecraft.network.chat.Component;
30+
import net.minecraft.network.chat.ComponentSerialization;
31+
32+
public record ItemTooltip(List<Component> components) {
33+
public static final Codec<ItemTooltip> CODEC = RecordCodecBuilder.create(
34+
instance -> instance
35+
.group(
36+
ComponentSerialization.CODEC.listOf(1, Integer.MAX_VALUE).fieldOf("components")
37+
.forGetter(ItemTooltip::components))
38+
.apply(instance, ItemTooltip::new));
39+
}

src/main/java/aztech/modern_industrialization/api/datamaps/MIDataMaps.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,13 @@
2424
package aztech.modern_industrialization.api.datamaps;
2525

2626
import aztech.modern_industrialization.MI;
27+
import java.util.ArrayList;
2728
import net.minecraft.core.registries.Registries;
2829
import net.minecraft.world.item.Item;
2930
import net.minecraft.world.level.material.Fluid;
31+
import net.neoforged.neoforge.registries.datamaps.AdvancedDataMapType;
3032
import net.neoforged.neoforge.registries.datamaps.DataMapType;
33+
import net.neoforged.neoforge.registries.datamaps.DataMapValueRemover;
3134

3235
public final class MIDataMaps {
3336
public static final DataMapType<Fluid, FluidFuel> FLUID_FUELS = DataMapType
@@ -54,6 +57,21 @@ public final class MIDataMaps {
5457
.synced(MachineUpgrade.CODEC, true)
5558
.build();
5659

60+
/**
61+
* Allows attaching a tooltip to arbitrary items.
62+
*/
63+
public static final AdvancedDataMapType<Item, ItemTooltip, DataMapValueRemover.Default<ItemTooltip, Item>> ITEM_TOOLTIPS = AdvancedDataMapType
64+
.builder(
65+
MI.id("item_tooltips"), Registries.ITEM, ItemTooltip.CODEC)
66+
.synced(ItemTooltip.CODEC, true)
67+
.remover(DataMapValueRemover.Default.codec())
68+
.merger((registry, first, firstValue, second, secondValue) -> {
69+
var components = new ArrayList<>(firstValue.components());
70+
components.addAll(secondValue.components());
71+
return new ItemTooltip(components);
72+
})
73+
.build();
74+
5775
private MIDataMaps() {
5876
}
5977
}

src/main/java/aztech/modern_industrialization/datagen/datamap/MIDataMapProvider.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,17 @@
2727
import aztech.modern_industrialization.MIFluids;
2828
import aztech.modern_industrialization.MIItem;
2929
import aztech.modern_industrialization.MIRegistries;
30+
import aztech.modern_industrialization.MIText;
31+
import aztech.modern_industrialization.MITooltips;
3032
import aztech.modern_industrialization.api.datamaps.FluidFuel;
3133
import aztech.modern_industrialization.api.datamaps.ItemPipeUpgrade;
34+
import aztech.modern_industrialization.api.datamaps.ItemTooltip;
3235
import aztech.modern_industrialization.api.datamaps.MIDataMaps;
3336
import aztech.modern_industrialization.api.datamaps.MachineUpgrade;
3437
import aztech.modern_industrialization.datagen.loot.MILootTables;
3538
import aztech.modern_industrialization.definition.FluidDefinition;
3639
import aztech.modern_industrialization.definition.ItemDefinition;
40+
import java.util.List;
3741
import java.util.concurrent.CompletableFuture;
3842
import net.minecraft.core.HolderLookup;
3943
import net.minecraft.data.PackOutput;
@@ -56,6 +60,7 @@ protected void gather() {
5660
gatherFluidFuels();
5761
gatherItemPipeUpgrades();
5862
gatherMachineUpgrades();
63+
gatherItemTooltips();
5964

6065
builder(NeoForgeDataMaps.RAID_HERO_GIFTS)
6166
.add(MIRegistries.INDUSTRIALIST, new RaidHeroGift(MILootTables.INDUSTRIALIST_GIFT), false);
@@ -125,4 +130,15 @@ private void gatherMachineUpgrades() {
125130
private void addMachineUpgrade(ItemDefinition<?> itemDefinition, int extraMaxEu) {
126131
builder(MIDataMaps.MACHINE_UPGRADES).add(itemDefinition.getId(), new MachineUpgrade(extraMaxEu), false);
127132
}
133+
134+
private void gatherItemTooltips() {
135+
addItemTooltip("capacitor", MIText.HasBetterYieldAssemblerRecipe);
136+
addItemTooltip("inductor", MIText.HasBetterYieldAssemblerRecipe);
137+
addItemTooltip("resistor", MIText.HasBetterYieldAssemblerRecipe);
138+
}
139+
140+
private void addItemTooltip(String path, MIText text) {
141+
var component = text.text().setStyle(MITooltips.DEFAULT_STYLE);
142+
builder(MIDataMaps.ITEM_TOOLTIPS).add(MI.id(path), new ItemTooltip(List.of(component)), false);
143+
}
128144
}

0 commit comments

Comments
 (0)