minecraft-src/net/minecraft/world/level/Spawner.java
2025-07-04 01:41:11 +03:00

52 lines
2.1 KiB
Java

package net.minecraft.world.level;
import java.util.List;
import net.minecraft.ChatFormatting;
import net.minecraft.core.component.DataComponents;
import net.minecraft.core.registries.BuiltInRegistries;
import net.minecraft.nbt.CompoundTag;
import net.minecraft.network.chat.CommonComponents;
import net.minecraft.network.chat.Component;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.RandomSource;
import net.minecraft.world.entity.EntityType;
import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.component.CustomData;
import org.jetbrains.annotations.Nullable;
public interface Spawner {
void setEntityId(EntityType<?> entityType, RandomSource random);
static void appendHoverText(ItemStack stack, List<Component> tooltipLines, String spawnDataKey) {
Component component = getSpawnEntityDisplayName(stack, spawnDataKey);
if (component != null) {
tooltipLines.add(component);
} else {
tooltipLines.add(CommonComponents.EMPTY);
tooltipLines.add(Component.translatable("block.minecraft.spawner.desc1").withStyle(ChatFormatting.GRAY));
tooltipLines.add(CommonComponents.space().append(Component.translatable("block.minecraft.spawner.desc2").withStyle(ChatFormatting.BLUE)));
}
}
@Nullable
static Component getSpawnEntityDisplayName(ItemStack stack, String spawnDataKey) {
CompoundTag compoundTag = stack.getOrDefault(DataComponents.BLOCK_ENTITY_DATA, CustomData.EMPTY).getUnsafe();
ResourceLocation resourceLocation = getEntityKey(compoundTag, spawnDataKey);
return resourceLocation != null
? (Component)BuiltInRegistries.ENTITY_TYPE
.getOptional(resourceLocation)
.map(entityType -> Component.translatable(entityType.getDescriptionId()).withStyle(ChatFormatting.GRAY))
.orElse(null)
: null;
}
@Nullable
private static ResourceLocation getEntityKey(CompoundTag tag, String spawnDataKey) {
if (tag.contains(spawnDataKey, 10)) {
String string = tag.getCompound(spawnDataKey).getCompound("entity").getString("id");
return ResourceLocation.tryParse(string);
} else {
return null;
}
}
}