🇰🇷 한국어 (Korean - South Korea)
🇰🇷 한국어 (Korean - South Korea)
모양
🇰🇷 한국어 (Korean - South Korea)
🇰🇷 한국어 (Korean - South Korea)
모양
이 페이지는 다음 버전에 맞게 작성되었습니다:
1.21.4
이 페이지는 다음 버전에 맞게 작성되었습니다:
1.21.4
이 페이지에서는 아이템과 관련된 주요 개념과 등록 방법, 그리고 어떻게 텍스처와 모델, 이름을 적용하는지 설명합니다.
모르셨을 수도 있지만, Minecraft의 모든 것은 레지스트리에 저장되며, 아이템도 예외는 아닙니다.
아이템의 등록을 단순화하기 위하여, 아이템의 인스턴스와 문자열 식별자를 입력받는 메소드를 만들 수 있습니다.
이 메소드는 입력된 식별자로 아이템을 만들어 게임의 아이템 레지스트리에 등록할 것입니다.
이 메소드를 ModItems
클래스에 한 번 추가해 봅시다. (클래스 이름은 마음대로 지어도 됩니다)
Mojang에서도 아이템에 이러한 작업을 수행합니다! 영감을 얻으려면 Items
클래스를 참조하세요.
public class ModItems {
public static Item register(String name, Function<Item.Settings, Item> itemFactory, Item.Settings settings) {
// Create the item key.
RegistryKey<Item> itemKey = RegistryKey.of(RegistryKeys.ITEM, Identifier.of(FabricDocsReference.MOD_ID, name));
// Create the item instance.
Item item = itemFactory.apply(settings.registryKey(itemKey));
// Register the item.
Registry.register(Registries.ITEM, itemKey, item);
return item;
}
이제 메소드를 사용하여 아이템을 등록할 수 있습니다.
아이템 생성자는 Items.Settings
클래스의 인스턴스를 매개변수로 입력받습니다. 이 클래스는 다양한 빌더 메소드를 사용하여 아이템의 속성을 구성할 수 있도록 합니다.
TIP
If you want to change your item's stack size, you can use the maxCount
method in the Items.Settings
/FabricItemSettings
class.
다만 아이템을 손상 가능하게(damageable) 설정하면 작동하지 않습니다. 손상 가능한 아이템은 복사 취약점을 막기 위하여 항상 최대 스택 크기가 1로 고정되기 때문입니다.
public static final Item SUSPICIOUS_SUBSTANCE = register("suspicious_substance", Item::new, new Item.Settings());
하지만, 변경 사항이 적용된 클라이언트를 실행하려고 해도, 아직 아이템이 게임에 존재하지 않는 것을 확인할 수 있을 것입니다! 이는 클래스가 정적으로 초기화되지 않았기 때문입니다.
이를 위해선, 아이템 클래스에 정적 초기화 메소드를 추가하고 모드 진입점 클래스에서 호출해야 합니다. 지금은, 이 메소드는 내부에 아무것도 필요로 하지 않습니다.
public static void initialize() {
}
public class FabricDocsReferenceItems implements ModInitializer {
@Override
public void onInitialize() {
ModItems.initialize();
}
}
이전에 로드되지 않은 클래스의 메소드를 호출하면 클래스가 정적으로 초기화됩니다. 다시 말하자면 모든 static
필드가 실행되게 됩니다. 이것이 더미 initialize
메소드가 필요한 이유입니다.
INFO
아이템을 사용자 지정 ItemGroup
에 추가하고자 한다면, 자세한 내용은 사용자 지정 아이템 그룹을 참조하십시오.
예제에서는 아이템을 재료 ItemGroup
에 추가할 것이며, 이를 위해선 Fabric API 아이템 그룹 이벤트(정확히는 ItemGroupEvents.modifyEntriesEvent
)를 이용해야 합니다.
이는 아이템 클래스의 initialize
메소드에서 실행될 수 있습니다.
// Get the event for modifying entries in the ingredients group.
// And register an event handler that adds our suspicious item to the ingredients group.
ItemGroupEvents.modifyEntriesEvent(ItemGroups.INGREDIENTS)
.register((itemGroup) -> itemGroup.add(ModItems.SUSPICIOUS_SUBSTANCE));
게임을 실행하면, 아이템에 등록되고 재료 아이템 그룹에 추가된 것을 확인할 수 있을 것입니다.
하지만, 몇 가지 빠진 것을 확인할 수 있습니다:
아이템에 아직 번역이 없기 때문에, 번역을 추가해야 합니다. 번역 키는 이미 Minecraft에서 제공하고 있으며, 예제의 경우에는 item.mod_id.suspicious_substance
입니다.
src/main/resources/assets/mod-id/lang/en_us.json
에 새로운 JSON 파일을 생성하고, 다음과 같이 번역 키를 추가합니다:
{
"item.mod_id.suspicious_substance": "Suspicious Substance"
}
게임을 재시작하거나 모드를 빌드한 다음 F3 + T키를 눌러 변경 사항을 적용할 수 있습니다.
아이템에 텍스처와 모델을 적용하려면, 간단히 16x16 텍스처 이미지를 만든 다음 src/main/resources/assets/mod-id/textures/item
폴더에 저장합니다. 텍스처 파일의 이름을 아이템의 식별자와 같게 지정하고, 파일 확장자는 .png
로 설정합니다.
예제에서는, 텍스처 파일의 이름을 suspicious_substance.png
로 설정하였습니다.
게임을 재시작/다시로드 하더라도 아이템에 텍스처가 적용되지 않은 것을 확인할 수 있습니다. 텍스처를 사용하기 위해서는 모델이 필요하기 때문입니다.
텍스처 입력만 받는, 간단한 item/generated
모델을 만들어 봅시다.
src/main/resources/assets/mod-id/models/item
폴더에, 아이템과 같은 식별자(예제의 경우 suspicious_substance.json
) 이름의 JSON 파일을 생성한 다음 아래와 같이 입력합니다:
{
"parent": "minecraft:item/generated",
"textures": {
"layer0": "fabric-docs-reference:item/suspicious_substance"
}
}
parent
: 이 모델이 상속받은 부모 모델의 식별자. 예제의 경우에는, item/generated
모델을 사용합니다.textures
: 모델에 사용할 텍스처. 예제의 경우에는, layer0
이 모델에서 사용할 텍스처입니다.대부분의 아이템은 부모 모델로 item/generated
모델을 사용하며, 이는 텍스처를 표시하기만 하는 간단한 모델입니다.
도구와 같이, 플레이어의 손에 "들어지는" 아이템에 사용되는 item/handheld
모델과 같이, 다른 모델도 사용할 수 있습니다.
마인크래프트는 아이템의 모델 파일을 어디서 찾는지 자동으로 알지 못하므로, 아이템 모델 설명을 만들어야 합니다.
src/main/resources/assets/mod-id/items
폴더에, 아이템과 같은 식별자(suspicious_substance.json
)를 이름으로 가지는 아이템 설명 JSON 파일을 생성한 다음, 다음과 같이 입력합니다:
{
"model": {
"type": "minecraft:model",
"model": "fabric-docs-reference:item/suspicious_substance"
}
}
model
: 모델에 대한 리퍼런스가 포함되는 속성. type
: 모델의 형태. 대부분의 아이템은, minecraft:model
이어야 합니다.model
: 모델 식별자. mod_id:item/item_name
과 같은 형태여야 합니다.이제 인게임에서 아래와 같이 아이템이 표시될 것입니다:
Fabric API는 아이템 속성에 추가적인 속성을 적용할 수 있는 다양한 레지스트리를 제공하고 있습니다.
예를 들어, 아이템을 퇴비통에 사용할 수 있게 만들고 싶다면, 다음과 같이 CompostableItemRegistry
를 사용할 수 있습니다:
// Add the suspicious substance to the composting registry with a 30% chance of increasing the composter's level.
CompostingChanceRegistry.INSTANCE.add(ModItems.SUSPICIOUS_SUBSTANCE, 0.3f);
또는, 아이템을 연료로 사용할 수 있게 만드려면, 다음과 같이 FuelRegistryEvents.BUILD
이벤트를 사용할 수도 있습니다:
// Add the suspicious substance to the registry of fuels, with a burn time of 30 seconds.
// Remember, Minecraft deals with logical based-time using ticks.
// 20 ticks = 1 second.
FuelRegistryEvents.BUILD.register((builder, context) -> {
builder.add(ModItems.SUSPICIOUS_SUBSTANCE, 30 * 20);
});
아이템에 제작법을 추가하고자 한다면, src/main/resources/data/mod-id/recipe
폴더에 제작법 JSON을 추가해야 합니다.
제작법 포맷에 관한 자세한 내용은 다음 리소스를 참조하여 주십시오:
아이템에 사용자 지정 도구 설명을 추가하려면, Item
클래스를 상속하는 클래스를 만들고 appendTooltip
메소드를 오버라이드(Override)해야 합니다.
INFO
이 예제에서는 사용자 지정 아이템 상호 작용에서 만든 LightningStick
클래스를 사용합니다.
@Override
public void appendTooltip(ItemStack stack, TooltipContext context, List<Text> tooltip, TooltipType type) {
tooltip.add(Text.translatable("itemTooltip.fabric-docs-reference.lightning_stick").formatted(Formatting.GOLD));
}
add()
메소드를 호출하며 도구 설명에 새로운 줄을 추가할 수 있습니다.