Skip to content

Commit 7dd79e0

Browse files
committed
name and tooltip
1 parent 90f23f1 commit 7dd79e0

5 files changed

Lines changed: 65 additions & 3 deletions

File tree

common/src/main/java/one/devos/nautical/losing_my_marbles/content/marble/MarbleItem.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,15 @@
11
package one.devos.nautical.losing_my_marbles.content.marble;
22

33
import java.util.Optional;
4+
import java.util.function.Consumer;
45

56
import net.minecraft.core.BlockPos;
7+
import net.minecraft.network.chat.Component;
68
import net.minecraft.world.InteractionResult;
79
import net.minecraft.world.item.Item;
810
import net.minecraft.world.item.ItemStack;
11+
import net.minecraft.world.item.TooltipFlag;
12+
import net.minecraft.world.item.component.TooltipDisplay;
913
import net.minecraft.world.item.context.UseOnContext;
1014
import net.minecraft.world.level.Level;
1115
import net.minecraft.world.phys.AABB;
@@ -47,4 +51,10 @@ public InteractionResult useOn(UseOnContext context) {
4751

4852
return InteractionResult.SUCCESS_SERVER;
4953
}
54+
55+
@Override
56+
@SuppressWarnings("deprecation") // this method
57+
public void appendHoverText(ItemStack stack, TooltipContext context, TooltipDisplay display, Consumer<Component> output, TooltipFlag flag) {
58+
stack.addToTooltip(LosingMyMarblesDataComponents.MARBLE, context, display, output, flag);
59+
}
5060
}

common/src/main/java/one/devos/nautical/losing_my_marbles/content/marble/StoredMarble.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,30 +2,49 @@
22

33
import java.util.Locale;
44
import java.util.Optional;
5+
import java.util.function.Consumer;
56

67
import com.mojang.serialization.Codec;
78
import com.mojang.serialization.MapCodec;
89
import com.mojang.serialization.codecs.RecordCodecBuilder;
910

11+
import net.minecraft.ChatFormatting;
1012
import net.minecraft.core.HolderLookup;
13+
import net.minecraft.core.component.DataComponentGetter;
1114
import net.minecraft.network.RegistryFriendlyByteBuf;
15+
import net.minecraft.network.chat.CommonComponents;
16+
import net.minecraft.network.chat.Component;
1217
import net.minecraft.network.codec.StreamCodec;
1318
import net.minecraft.resources.ResourceKey;
1419
import net.minecraft.util.StringRepresentable;
1520
import net.minecraft.world.item.EitherHolder;
21+
import net.minecraft.world.item.Item;
22+
import net.minecraft.world.item.TooltipFlag;
23+
import net.minecraft.world.item.component.TooltipProvider;
1624
import one.devos.nautical.losing_my_marbles.content.LosingMyMarblesRegistries;
1725
import one.devos.nautical.losing_my_marbles.content.marble.data.MarbleInstance;
1826
import one.devos.nautical.losing_my_marbles.content.marble.data.MarbleType;
1927
import one.devos.nautical.losing_my_marbles.framework.network.LosingMyMarblesStreamCodecs;
2028

21-
public sealed interface StoredMarble {
29+
public sealed interface StoredMarble extends TooltipProvider {
2230
Codec<StoredMarble> CODEC = StorageType.CODEC.dispatch(StoredMarble::type, type -> type.codec);
2331
StreamCodec<RegistryFriendlyByteBuf, StoredMarble> STREAM_CODEC = StorageType.STREAM_CODEC.dispatch(StoredMarble::type, type -> type.streamCodec);
2432

33+
Component TOOLTIP_HEADER = Component.translatable("item.losing_my_marbles.stored_marble.tooltip").withStyle(ChatFormatting.GRAY);
34+
String INVALID_KEY = "item.losing_my_marbles.stored_marble.invalid";
35+
2536
Optional<MarbleInstance> get(HolderLookup.Provider registries);
2637

38+
Component nameForTooltip(HolderLookup.Provider registries);
39+
2740
StorageType type();
2841

42+
@Override
43+
default void addToTooltip(Item.TooltipContext context, Consumer<Component> output, TooltipFlag flag, DataComponentGetter components) {
44+
output.accept(TOOLTIP_HEADER);
45+
output.accept(CommonComponents.space().append(this.nameForTooltip(context.registries())));
46+
}
47+
2948
record Type(EitherHolder<MarbleType> holder) implements StoredMarble {
3049
public static final MapCodec<Type> CODEC = RecordCodecBuilder.mapCodec(i -> i.group(
3150
EitherHolder.codec(LosingMyMarblesRegistries.MARBLE_TYPE, MarbleType.CODEC).fieldOf("holder").forGetter(Type::holder)
@@ -45,6 +64,16 @@ public Optional<MarbleInstance> get(HolderLookup.Provider registries) {
4564
return this.holder.unwrap(registries).map(MarbleInstance::new);
4665
}
4766

67+
@Override
68+
public Component nameForTooltip(HolderLookup.Provider registries) {
69+
return this.holder.contents().map(
70+
holder -> holder.value().name(),
71+
key -> registries.get(key)
72+
.map(holder -> holder.value().name())
73+
.orElseGet(() -> Component.translatable(INVALID_KEY).withStyle(ChatFormatting.RED))
74+
);
75+
}
76+
4877
@Override
4978
public StorageType type() {
5079
return StorageType.TYPE;
@@ -66,6 +95,11 @@ public Optional<MarbleInstance> get(HolderLookup.Provider registries) {
6695
return Optional.of(this.instance.copy());
6796
}
6897

98+
@Override
99+
public Component nameForTooltip(HolderLookup.Provider registries) {
100+
return this.instance.type().name();
101+
}
102+
69103
@Override
70104
public StorageType type() {
71105
return StorageType.INSTANCE;

common/src/main/java/one/devos/nautical/losing_my_marbles/content/marble/data/MarbleType.java

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,23 +4,32 @@
44
import com.mojang.serialization.codecs.RecordCodecBuilder;
55

66
import net.minecraft.core.Holder;
7+
import net.minecraft.core.component.DataComponentHolder;
78
import net.minecraft.core.component.DataComponentMap;
89
import net.minecraft.network.RegistryFriendlyByteBuf;
10+
import net.minecraft.network.chat.Component;
11+
import net.minecraft.network.chat.ComponentSerialization;
912
import net.minecraft.network.codec.ByteBufCodecs;
1013
import net.minecraft.network.codec.StreamCodec;
1114
import net.minecraft.resources.RegistryFileCodec;
1215
import net.minecraft.resources.ResourceKey;
1316
import one.devos.nautical.losing_my_marbles.LosingMyMarbles;
1417
import one.devos.nautical.losing_my_marbles.content.LosingMyMarblesRegistries;
1518

16-
public record MarbleType(DataComponentMap components) {
19+
public record MarbleType(Component name, DataComponentMap components) implements DataComponentHolder {
1720
// TODO: change when more are implemented
1821
public static final ResourceKey<MarbleType> DEFAULT = ResourceKey.create(LosingMyMarblesRegistries.MARBLE_TYPE, LosingMyMarbles.id("slime"));
1922

2023
public static final Codec<MarbleType> DIRECT_CODEC = RecordCodecBuilder.create(i -> i.group(
24+
ComponentSerialization.CODEC.fieldOf("name").forGetter(MarbleType::name),
2125
DataComponentMap.CODEC.fieldOf("components").forGetter(MarbleType::components)
2226
).apply(i, MarbleType::new));
2327

2428
public static final Codec<Holder<MarbleType>> CODEC = RegistryFileCodec.create(LosingMyMarblesRegistries.MARBLE_TYPE, DIRECT_CODEC);
2529
public static final StreamCodec<RegistryFriendlyByteBuf, Holder<MarbleType>> STREAM_CODEC = ByteBufCodecs.holderRegistry(LosingMyMarblesRegistries.MARBLE_TYPE);
30+
31+
@Override
32+
public DataComponentMap getComponents() {
33+
return this.components;
34+
}
2635
}

common/src/main/resources/assets/losing_my_marbles/lang/en_us.json

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@
88

99
"block.losing_my_marbles.straight_piece": "Straight Marble Track Piece",
1010
"block.losing_my_marbles.corner_piece": "Corner Marble Track Piece",
11-
"block.losing_my_marbles.intersection_piece": "Intersection Marble Track Piece"
11+
"block.losing_my_marbles.intersection_piece": "Intersection Marble Track Piece",
1212

13+
"item.losing_my_marbles.marble": "Marble",
14+
15+
"item.losing_my_marbles.stored_marble.tooltip": "Type: ",
16+
"item.losing_my_marbles.stored_marble.invalid": "Invalid: %s",
17+
18+
"marble_type.losing_my_marbles.slime": "Slime"
1319
}

common/src/main/resources/data/losing_my_marbles/losing_my_marbles/marble_type/slime.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
11
{
2+
"name": {
3+
"translate": "marble_type.losing_my_marbles.slime"
4+
},
25
"components": {
36
"losing_my_marbles:friction": 0.6,
47
"losing_my_marbles:restitution": 0.8,

0 commit comments

Comments
 (0)