Skip to content

Commit deda03e

Browse files
committed
Reimplement support for the custom name data component, closes #627
1 parent 6dcebac commit deda03e

File tree

5 files changed

+47
-52
lines changed

5 files changed

+47
-52
lines changed

neoforge-datagen/src/main/java/dev/compactmods/machines/datagen/base/loot/BlockLootGenerator.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import dev.compactmods.machines.machine.Machines;
55
import dev.compactmods.machines.room.Rooms;
66
import net.minecraft.core.HolderLookup;
7+
import net.minecraft.core.component.DataComponents;
78
import net.minecraft.data.loot.BlockLootSubProvider;
89
import net.minecraft.world.flag.FeatureFlags;
910
import net.minecraft.world.level.block.Block;
@@ -43,6 +44,7 @@ protected void generate() {
4344
.setRolls(ConstantValue.exactly(1))
4445
.when(ExplosionCondition.survivesExplosion())
4546
.apply(CopyComponentsFunction.copyComponents(CopyComponentsFunction.Source.BLOCK_ENTITY)
47+
.include(DataComponents.CUSTOM_NAME)
4648
.include(CMDataComponents.MACHINE_COLOR.get())
4749
.include(CMDataComponents.ROOM_TEMPLATE_ID.get()))
4850
.add(LootItem.lootTableItem(Machines.Items.UNBOUND_MACHINE.get()))));
@@ -51,6 +53,7 @@ protected void generate() {
5153
.setRolls(ConstantValue.exactly(1))
5254
.when(ExplosionCondition.survivesExplosion())
5355
.apply(CopyComponentsFunction.copyComponents(CopyComponentsFunction.Source.BLOCK_ENTITY)
56+
.include(DataComponents.CUSTOM_NAME)
5457
.include(CMDataComponents.MACHINE_COLOR.get())
5558
.include(CMDataComponents.BOUND_ROOM_CODE.get()))
5659
.add(LootItem.lootTableItem(Machines.Items.BOUND_MACHINE.get()))));

neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlock.java

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import dev.compactmods.machines.util.PlayerUtil;
1717
import net.minecraft.core.BlockPos;
1818
import net.minecraft.core.GlobalPos;
19+
import net.minecraft.core.component.DataComponents;
1920
import net.minecraft.server.level.ServerLevel;
2021
import net.minecraft.server.level.ServerPlayer;
2122
import net.minecraft.world.InteractionHand;
@@ -46,7 +47,13 @@ public BoundCompactMachineBlock(Properties props) {
4647
public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelReader level, BlockPos pos, Player player) {
4748
try {
4849
if (level.getBlockEntity(pos) instanceof BoundCompactMachineBlockEntity be) {
49-
return Machines.Items.boundToRoom(be.connectedRoom(), be.getData(CMDataAttachments.MACHINE_COLOR));
50+
final var stack = Machines.Items.boundToRoom(be.connectedRoom(), be.getData(CMDataAttachments.MACHINE_COLOR));
51+
52+
be.getCustomName().ifPresent(cn -> {
53+
stack.set(DataComponents.CUSTOM_NAME, cn);
54+
});
55+
56+
return stack;
5057
}
5158

5259
return Machines.Items.unbound();

neoforge-main/src/main/java/dev/compactmods/machines/machine/block/BoundCompactMachineBlockEntity.java

Lines changed: 12 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,12 @@
1111
import net.minecraft.core.BlockPos;
1212
import net.minecraft.core.GlobalPos;
1313
import net.minecraft.core.HolderLookup;
14+
import net.minecraft.core.UUIDUtil;
1415
import net.minecraft.core.component.DataComponentMap;
16+
import net.minecraft.core.component.DataComponents;
1517
import net.minecraft.nbt.CompoundTag;
1618
import net.minecraft.network.chat.Component;
19+
import net.minecraft.network.chat.ComponentSerialization;
1720
import net.minecraft.server.level.ServerLevel;
1821
import net.minecraft.world.item.DyeColor;
1922
import net.minecraft.world.level.block.Block;
@@ -41,6 +44,7 @@ public BoundCompactMachineBlockEntity(BlockPos pos, BlockState state) {
4144
protected void applyImplicitComponents(DataComponentInput components) {
4245
super.applyImplicitComponents(components);
4346
this.roomCode = components.get(CMDataComponents.BOUND_ROOM_CODE);
47+
this.customName = components.get(DataComponents.CUSTOM_NAME);
4448

4549
final var desiredColor = components.get(CMDataComponents.MACHINE_COLOR);
4650
if (desiredColor != null) {
@@ -51,76 +55,42 @@ protected void applyImplicitComponents(DataComponentInput components) {
5155
@Override
5256
protected void collectImplicitComponents(DataComponentMap.Builder builder) {
5357
super.collectImplicitComponents(builder);
58+
builder.set(DataComponents.CUSTOM_NAME, this.customName);
5459
builder.set(CMDataComponents.BOUND_ROOM_CODE, this.roomCode);
5560
builder.set(CMDataComponents.MACHINE_COLOR, this.getData(CMDataAttachments.MACHINE_COLOR));
5661
}
5762

5863
@Override
5964
public void removeComponentsFromTag(CompoundTag tag) {
6065
super.removeComponentsFromTag(tag);
66+
tag.remove("CustomName");
6167
tag.remove(CMDataComponents.KEY_ROOM_CODE);
6268
tag.remove(CMDataComponents.KEY_MACHINE_COLOR);
6369
}
6470

6571
@Override
6672
protected void loadAdditional(CompoundTag nbt, HolderLookup.Provider holders) {
6773
super.loadAdditional(nbt, holders);
68-
if (nbt.contains(NBT_ROOM_CODE)) {
69-
this.roomCode = nbt.getString(NBT_ROOM_CODE);
70-
}
71-
72-
if (nbt.contains(NBT_OWNER)) {
73-
owner = nbt.getUUID(NBT_OWNER);
74-
} else {
75-
owner = null;
76-
}
74+
this.customName = nbt.read("CustomName", ComponentSerialization.CODEC).orElse(null);
75+
this.roomCode = nbt.read(NBT_ROOM_CODE, Codec.STRING).orElse(null);
76+
this.owner = nbt.read(NBT_OWNER, UUIDUtil.CODEC).orElse(null);
7777
}
7878

7979
@Override
8080
protected void saveAdditional(@NotNull CompoundTag nbt, HolderLookup.Provider holders) {
8181
super.saveAdditional(nbt, holders);
82-
83-
if (owner != null) {
84-
nbt.putUUID(NBT_OWNER, this.owner);
85-
}
86-
87-
if (roomCode != null)
88-
nbt.putString(NBT_ROOM_CODE, roomCode);
82+
nbt.storeNullable("CustomName", ComponentSerialization.CODEC, this.customName);
83+
nbt.storeNullable(NBT_ROOM_CODE, Codec.STRING, this.roomCode);
84+
nbt.storeNullable(NBT_OWNER, UUIDUtil.CODEC, this.owner);
8985
}
9086

9187
@Override
9288
public CompoundTag getUpdateTag(HolderLookup.Provider provider) {
9389
var data = super.getUpdateTag(provider);
9490
saveAdditional(data, provider);
95-
96-
if (this.roomCode != null) {
97-
// data.putString(ROOM_POS_NBT, room);
98-
data.putString(NBT_ROOM_CODE, roomCode);
99-
}
100-
101-
if (this.owner != null)
102-
data.putUUID("owner", this.owner);
103-
10491
return data;
10592
}
10693

107-
@Override
108-
public void handleUpdateTag(CompoundTag tag, HolderLookup.Provider provider) {
109-
super.handleUpdateTag(tag, provider);
110-
111-
if (tag.contains(NBT_ROOM_CODE))
112-
this.roomCode = tag.getString(NBT_ROOM_CODE);
113-
114-
if (tag.contains("players")) {
115-
CompoundTag players = tag.getCompound("players");
116-
// playerData = CompactMachinePlayerData.fromNBT(players);
117-
118-
}
119-
120-
if (tag.contains("owner"))
121-
owner = tag.getUUID("owner");
122-
}
123-
12494
public Optional<UUID> getOwnerUUID() {
12595
return Optional.ofNullable(this.owner);
12696
}

neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineBlock.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import dev.compactmods.machines.shrinking.PersonalShrinkingDevice;
1616
import dev.compactmods.machines.shrinking.Shrinking;
1717
import net.minecraft.core.BlockPos;
18+
import net.minecraft.core.component.DataComponents;
1819
import net.minecraft.server.MinecraftServer;
1920
import net.minecraft.server.level.ServerLevel;
2021
import net.minecraft.server.level.ServerPlayer;
@@ -50,6 +51,10 @@ public ItemStack getCloneItemStack(BlockState state, HitResult target, LevelRead
5051
item.set(CMDataComponents.MACHINE_COLOR, color);
5152
});
5253

54+
final var cn = be.customName();
55+
if(cn != null)
56+
item.set(DataComponents.CUSTOM_NAME, cn);
57+
5358
return item;
5459
}
5560
}

neoforge-main/src/main/java/dev/compactmods/machines/machine/block/UnboundCompactMachineEntity.java

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package dev.compactmods.machines.machine.block;
22

3+
import com.mojang.serialization.Codec;
34
import dev.compactmods.machines.api.attachment.CMDataAttachments;
45
import dev.compactmods.machines.api.component.CMDataComponents;
56
import dev.compactmods.machines.api.machine.block.IUnboundCompactMachineBlockEntity;
@@ -8,7 +9,10 @@
89
import net.minecraft.core.BlockPos;
910
import net.minecraft.core.HolderLookup;
1011
import net.minecraft.core.component.DataComponentMap;
12+
import net.minecraft.core.component.DataComponents;
1113
import net.minecraft.nbt.CompoundTag;
14+
import net.minecraft.network.chat.Component;
15+
import net.minecraft.network.chat.ComponentSerialization;
1216
import net.minecraft.resources.ResourceLocation;
1317
import net.minecraft.world.level.block.entity.BlockEntity;
1418
import net.minecraft.world.level.block.state.BlockState;
@@ -20,6 +24,7 @@
2024
public class UnboundCompactMachineEntity extends BlockEntity implements IUnboundCompactMachineBlockEntity {
2125

2226
private @Nullable ResourceLocation templateId;
27+
private @Nullable Component customName;
2328

2429
public UnboundCompactMachineEntity(BlockPos pos, BlockState state) {
2530
super(Machines.BlockEntities.UNBOUND_MACHINE.get(), pos, state);
@@ -30,6 +35,7 @@ public UnboundCompactMachineEntity(BlockPos pos, BlockState state) {
3035
protected void applyImplicitComponents(DataComponentInput components) {
3136
super.applyImplicitComponents(components);
3237
this.templateId = components.get(CMDataComponents.ROOM_TEMPLATE_ID);
38+
this.customName = components.get(DataComponents.CUSTOM_NAME);
3339

3440
final var desiredColor = components.get(CMDataComponents.MACHINE_COLOR);
3541
if (desiredColor != null) {
@@ -42,46 +48,45 @@ protected void collectImplicitComponents(DataComponentMap.Builder builder) {
4248
super.collectImplicitComponents(builder);
4349
builder.set(CMDataComponents.ROOM_TEMPLATE_ID, this.templateId);
4450
builder.set(CMDataComponents.MACHINE_COLOR, this.getData(CMDataAttachments.MACHINE_COLOR));
51+
builder.set(DataComponents.CUSTOM_NAME, this.customName);
4552
}
4653

4754
@Override
4855
public void removeComponentsFromTag(CompoundTag tag) {
4956
super.removeComponentsFromTag(tag);
5057
tag.remove(CMDataComponents.KEY_ROOM_TEMPLATE);
5158
tag.remove(CMDataComponents.KEY_MACHINE_COLOR);
59+
tag.remove("CustomName");
5260
}
5361

5462
@Override
5563
public void loadAdditional(@NotNull CompoundTag nbt, HolderLookup.Provider holders) {
5664
super.loadAdditional(nbt, holders);
5765
if (nbt.contains(NBT_TEMPLATE_ID))
5866
this.templateId = ResourceLocation.parse(nbt.getString(NBT_TEMPLATE_ID));
67+
68+
this.customName = nbt.read("CustomName", ComponentSerialization.CODEC).orElse(null);
5969
}
6070

6171
@Override
6272
protected void saveAdditional(@NotNull CompoundTag nbt, HolderLookup.Provider holders) {
6373
super.saveAdditional(nbt, holders);
64-
if (templateId != null)
65-
nbt.putString(NBT_TEMPLATE_ID, templateId.toString());
74+
nbt.storeNullable(NBT_TEMPLATE_ID, ResourceLocation.CODEC, templateId);
75+
nbt.storeNullable("CustomName", ComponentSerialization.CODEC, this.customName);
6676
}
6777

6878
@Override
6979
public CompoundTag getUpdateTag(HolderLookup.Provider holders) {
7080
CompoundTag data = super.getUpdateTag(holders);
7181
saveAdditional(data, holders);
72-
73-
if (templateId != null)
74-
data.putString(NBT_TEMPLATE_ID, templateId.toString());
75-
7682
return data;
7783
}
7884

7985
@Override
8086
public void handleUpdateTag(CompoundTag tag, HolderLookup.Provider lookupProvider) {
8187
super.handleUpdateTag(tag, lookupProvider);
82-
83-
if (tag.contains(NBT_TEMPLATE_ID))
84-
templateId = ResourceLocation.parse(tag.getString(NBT_TEMPLATE_ID));
88+
this.templateId = tag.read(NBT_TEMPLATE_ID, ResourceLocation.CODEC).orElse(RoomTemplate.NO_TEMPLATE);
89+
this.customName = tag.read("CustomName", ComponentSerialization.CODEC).orElse(null);
8590
}
8691

8792
public void setTemplate(ResourceLocation template) {
@@ -93,4 +98,9 @@ public void setTemplate(ResourceLocation template) {
9398
public ResourceLocation templateId() {
9499
return templateId;
95100
}
101+
102+
@Nullable
103+
public Component customName() {
104+
return customName;
105+
}
96106
}

0 commit comments

Comments
 (0)