Skip to content

Commit

Permalink
New Crowdin updates (#218)
Browse files Browse the repository at this point in the history
* New translations potions.md (Korean)

* New translations crash-reports.md (Korean)

* New translations first-block.md (Korean)

* New translations uploading-logs.md (Korean)

* New translations updating-fabric.md (Chinese Simplified)
  • Loading branch information
FabricMCBot authored Nov 25, 2024
1 parent 75bedd1 commit 804c3f2
Show file tree
Hide file tree
Showing 5 changed files with 245 additions and 24 deletions.
170 changes: 170 additions & 0 deletions translated/ko_kr/develop/blocks/first-block.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
---
title: 첫 번째 블록 만들기
description: Minecraft에서의 첫 번째 블록을 만드는 법을 알아봅시다.
authors:
- IMB11
- xEobardThawne
- its-miroma
---

# 첫 번째 블록 만들기 {#creating-your-first-block}

블록은 Minecraft에서의 건축 블록입니다 (말장난 아님). Minecraft의 다른 모든 것들처럼, 마찬가지로 레지스트리에 저장됩니다.

## 블록 클래스 준비하기 {#preparing-your-blocks-class}

만약 [첫 번째 블록 만들기](../items/first-item) 페이지를 성공했다면, 이 과정은 아주 친숙하게 느껴질 것입니다. 블록과 그 아이템을 등록하는 메서드를 만들어야 합니다.

이 메서드를 `ModBlocks`이라 불리는 클래스에 넣어야 합니다. (아니면 마음대로 이름 지으세요).

Mojang은 바닐라 블록과 매우 비슷한 무언가를 수행합니다. `Blocks` 클래스를 참조해 어떻게 했는지 참고해도 됩니다.

@[code transcludeWith=:::1](@/reference/latest/src/main/java/com/example/docs/block/ModBlocks.java)

---

아이템처럼, 블록 인스턴스가 포함된 모든 정적 필드가 초기화되도록 클래스가 불러와졌음을 확인해야 합니다.

이것을 정적 초기화를 트리거하기 위해 모드 이니셜라이저에서 호출될 수 있는 더미 `initialize` 메서드를 만듦으로써 할 수도 있습니다.

:::info
만약 정적 초기화가 무엇인지 모르겠다면, 이는 클래스에서 정적 필드를 초기화하는 과정입니다. 이는 JVM에 의해 클래스가 로드될 때 끝나며, 어느 클래스의 인스턴스가 만들어지기 전에 끝납니다.
:::

```java
public class ModBlocks {
// ...

public static void initialize() {}
}
```

@[code transcludeWith=:::1](@/reference/latest/src/main/java/com/example/docs/block/FabricDocsReferenceBlocks.java)

## 블록을 추가하고 등록하기 {#creating-and-registering-your-block}

아이템처럼, 블록은 생성자에서 `Blocks.Settings` 클래스를 이용해 소리 효과와 채굴 단계와 같은 블록의 속성을 지정합니다.

여기선 모든 옵션을 다루지는 않습니다. 클래스를 직접 보면 자명한 다양한 옵션을 볼 수 있습니다.

예시로, 흙의 속성을 가지고 있지만, 다른 재질의 간단한 블록을 만들어 볼 것입니다.

:::tip
또한 이미 존재하는 블록의 설정을 복사하기 위해 `AbstractBlock.Settings.copy(AbstractBlock block)을 사용할 수 있습니다. 이 상황에서, 흙의 설정을 복사하기 위해 `Blocks.DIRT\`를 사용할 수도 있지만 예시를 위해 빌더를 사용할 것입니다.
:::

@[code transcludeWith=:::2](@/reference/latest/src/main/java/com/example/docs/block/ModBlocks.java)

자동으로 블록 아이템을 만들기 위해, 이전 단계에서 만든 `register` 메서드의 `shouldRegisterItem` 매개변수를 `true`를 전달하면 됩니다.

### 아이템 그룹에 블록 추가하기 {#adding-your-block-to-an-item-group}

`BlockItem` 이 자동으로 만들어졌고 등록되었기 때문에, 아이템 그룹에 추가시키기 위해, `Block.asItem()` 메서드를 사용해 `BlockItem` 인스턴스를 가져올 것입니다.

예시로, [사용자 지정 아이템 그룹](../items/custom-item-groups) 페이지에서 만든 사용자 지정 그룹을 사용할 것입니다.

@[code transcludeWith=:::3](@/reference/latest/src/main/java/com/example/docs/block/ModBlocks.java)

---

이제 크리에이티브 인벤토리에 블록이 있고, 세계에 설치할 수 있음을 알 수 있습니다!

![적합한 모델이나 텍스처가 없는 세계의 블록](/assets/develop/blocks/first_block_0.png).

여기엔 몇가지 문제가 있습니다. 블록의 이름이 없으며, 텍스처도 없고 블록 모델이나 아이템 모델도 없습니다.

## 블록 번역 추가하기 {#adding-block-translations}

번역을 추가하기 위해, 번역 파일 (`assets/<mod id here>/lang/en_us.json`)에 번역 키를 만들어야 합니다.

Minecraft는 이 번역을 크리에이티브 인벤토리나 명령어 피드백과 같은 블록의 이름이 표시되는 다른 곳에 사용할 것입니다.

```json
{
"block.mod_id.condensed_dirt": "Condensed Dirt"
}
```

모드를 빌드하기 위해 게임을 다시 시작하거나 <kbd>F3</kbd> + <kbd>T</kbd>를 눌러 변경 사항을 적용할 수 있습니다. 그러면 크리에이티브 인벤토리나 통계 화면과 같은 다른 곳에 블록의 이름이 있는 것이 보일 것입니다.

## 모델 및 텍스처 {#models-and-textures}

모든 블록의 텍스처는 `assets/<mod id here>/textures/block` 폴더에서 찾을 수 있습니다. 예시 텍스처인 "거친 흙" 블록은 무료로 사용할 수 있습니다.

<DownloadEntry type="Texture" visualURL="/assets/develop/blocks/first_block_1.png" downloadURL="/assets/develop/blocks/first_block_1_small.png" />

텍스처가 게임 안에서 보이게 하려면, "거친 흙" 블록의 다음 위치에서 찾을 수 있는 블록 및 아이템 모델을 만들어야 합니다:

- `assets/<mod id here>/models/block/condensed_dirt.json`
- `assets/<mod id here>/models/item/condensed_dirt.json`

이 아이템 모델은 꽤 단순합니다. 대부분의 블록 모델이 GUI에서 렌더되는 것을 지원하기 때문에그저 상위 모델로 블록 모델을 사용할 수 있습니다:

@[code](@/reference/latest/src/main/resources/assets/fabric-docs-reference/models/item/condensed_dirt.json)

하지만, 이 블록 모델은, 이 상황에서, `block/cube_all` 모델의 상위 모델이어야 합니다:

@[code](@/reference/latest/src/main/resources/assets/fabric-docs-reference/models/block/condensed_dirt.json)

게임으로 불러왔을 때, 여전히 텍스처가 없을 수도 있습니다. 왜냐하면 블록 상태 정의를 추가해야 하기 때문입니다.

## 블록 상태 정의 만들기 {#creating-the-block-state-definition}

블록 상태 정의는 현재 상태의 블록을 기반으로 어떤 모델을 렌더할지 게임에게 지시하는 데 쓰입니다.

이 복잡한 상태 정의가 없는 예시 블록의 경우, 오직 한 개의 항목만이 정의에 필요합니다.

파일은 `assets/mod_id/blockstates` 폴더에 위치해야 하며, 이름은 `ModBlocks` 클래스를 등록했을 때 사용한 블록 ID와 일치해야 합니다. 예시로, 만약 블록 ID가 `condensed_dirt`라면, 파일 이름은 `condensed_dirt.json`이 되어야 합니다.

@[code](@/reference/latest/src/main/resources/assets/fabric-docs-reference/blockstates/condensed_dirt.json)

블록 상태는 정말 복잡합니다. 그러므로, [블록 상태](./blockstates) 페이지에서 다루겠습니다.

게임을 다시 시작하거나, <kbd>F3</kbd> + <kbd>T</kbd>을 통해 다시 불러와 변경 사항을 적용하세요. 블록 텍스처가 인벤토리 안과 실제 세계에서 볼 수 있을 것입니다.

![적합한 모델이나 텍스처가 있는 세계의 블록](/assets/develop/blocks/first_block_4.png)

## 블록 떨굼 추가하기 {#adding-block-drops}

서바이벌 모드에서 블록을 부쉈을 때, 블록이 떨어지지 않는 것을 봤을 수도 있습니다. 아마 이 기능을 원했을 수도 있습니다. 하지만 블록을 부숴서 떨어지게 만들기 위해 전리품 테이블블록을 부쉈을 때, 블록이 떨어지지 않는 것을 봤을 수도 있습니다. 아마 이 기능을 원했을 수도 있습니다. 하지만 블록을 부숴서 떨어지게 만들기 위해 노획물 목록을 구현해야 합니다. 노획물 목록은 `data/<mod id here>/loot_table/blocks/` 폴더에 위치해야 합니다.

:::info
노획물 목록에 대해 더 자세히 알고 싶으면, [Minecraft 위키 - 노획물 목록](https://ko.minecraft.wiki/w/%EB%85%B8%ED%9A%8D%EB%AC%BC_%EB%AA%A9%EB%A1%9D) 페이지를 참고할 수 있습니다.
:::

@[code](@/reference/latest/src/main/resources/data/fabric-docs-reference/loot_tables/blocks/condensed_dirt.json)

이 노획물 목록은 블록이 부서질 때나 폭발할 때 단일 블록 아이템의 떨굼을 제공합니다.

## 부술 도구 추천하기 {#recommending-a-harvesting-tool}

아마 특정한 도구만을 이용해 블록을 부술 수 있도록 하고 싶을 수 있습니다. 예시로 삽을 이용해 블록을 더 빠르게 부술 수 있도록 하고 싶게 할 수 있습니다.

모든 도구 태그는 `data/minecraft/tags/block/mineable/` 폴더에 있을 것입니다. 파일 이름은 사용한 도구에 따라 다르며, 다음을 따라 달라집니다:

- `hoe.json` (괭이)
- `axe.json` (도끼)
- `pickaxe.json` (곡괭이)
- `shovel.json` (삽)

이 파일의 내용은 꽤 단순합니다. 태그에 추가되어야 할 아이템의 목록입니다.

이 예시는 "거친 흙" (Condensed Dirt) 블록을 `shovel` (삽) 태그에 추가시킵니다.

@[code](@/reference/latest/src/main/resources/data/minecraft/tags/mineable/shovel.json)

만약 블록을 부수기 위해 특정한 도구를 사용해야 하게 하길 원한다면, 블록 설정에 `.requiresTool()`을 추가하고 적절한 채굴 태그를 추가해야 합니다.

## 채굴 단계 {#mining-levels}

비슷하게, 채굴 단계 태그는 `data/minecraft/tags/block/` 폴더에서 찾을 수 있고, 다음 형식을 따릅니다:

- `needs_stone_tool.json` - 최소 단계가 돌 도구
- `needs_iron_tool.json` - 최소 단계가 철 도구
- `needs_diamond_tool.json` - 최소 단계가 다이아몬드 도구

이 파일은 부술 도구 파일과 같은 형식을 가지고 있습니다. 태그에 추가되어야 할 아이템의 목록입니다.

## 추가 사항 {#extra-notes}

만약 많은 블록을 추가하려 한다면, 아마도 블록 및 아이템 모델을 만드는 과정, 블록 상태 정의, 노획물 목록 등을 자동화하기 위하여 [데이터 생성](https://fabricmc.net/wiki/tutorial:datagen_setup)을 사용하는 것을 고려하여 볼만 합니다.
49 changes: 49 additions & 0 deletions translated/ko_kr/develop/items/potions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
---
title: 물약
description: 여러 상태 효과를 부여하는 사용자 정의 물약을 만드는 방법을 알아보세요.
authors:
- dicedpixels
- PandoricaVi
- Drakonkinst
- JaaiDead
---

# 물약 {#potions}

물약은 엔티티에게 효과를 주는 소모품입니다. 플레이어는 양조대에서 물약을 제조하거나 여러 게임 메커니즘을 통해 아이템을 얻을 수 있습니다.

## 사용자 정의 물약 {#custom-potions}

아이템과 블록들처럼, 물약도 등록이 필요합니다.

### 물약 만들기 {#creating-the-potion}

`Potion` 인스턴스를 저장할 필드를 만들며 시작해 봅시다. 클래스의 생성자를 사용해 바로 저장할 것입니다.

@[code lang=java transclude={18-27}](@/reference/latest/src/main/java/com/example/docs/potion/FabricDocsReferencePotions.java)

`StatusEffectInstance` 인스턴스에는 세 가지 매개 변수를 입력해야 합니다.

- `RegistryEntry<StatusEffect> type` - 효과. 여기에선 사용자 정의 효과를 사용해볼 것입니다. 대신, 바닐라의 `StatusEffects` 클래스를 통해 바닐라 효과에 접근할 수도 있습니다.
- `int duration` - 효과의 지속 시간(틱).
- `int amplifier` - 효과의 세기. 예를 들어, 성급함 II는 1을 세기로 가지게 됩니다.

:::info
사용자 정의 물약 효과를 만드려면, [상태 효과](../entities/effects) 가이드를 참조하세요.
:::

### 물약 등록하기 {#registering-the-potion}

이니셜라이저에서 `BrewingRecipeRegistry.registerPotionRecipe` 메서드를 사용해 물약 효과를 등록하기 위해 `FabricBrewingRecipeRegistryBuilder.BUILD` 이벤트를 사용할 것입니다.

@[code lang=java transclude={29-42}](@/reference/latest/src/main/java/com/example/docs/potion/FabricDocsReferencePotions.java)

`registerPotionRecipe`는 세 가지 매개변수를 가집니다.

- `RegistryEntry<Potion> input` - 시작 물약의 레지스트리 항목. 일반적으로 물병 또는 어색한 물약이 사용됩니다.
- `Item item` - 물약의 기본 재료가 될 아이템.
- `RegistryEntry<Potion> output` - 결과 물약의 레지스트리 항목.

등록을 완료했다면, 이제 감자를 통해 Tater 물약을 만들 수 있습니다.

![플레이어 인벤토리에서 보여지는 효과](/assets/develop/tater-potion.png)
36 changes: 19 additions & 17 deletions translated/ko_kr/players/troubleshooting/crash-reports.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@ authors:
- IMB11
---

# 충돌 보고서 분해하기
# 충돌 보고서 {#crash-reports}

:::tip
충돌의 원인을 찾는 데 어려움이 있으시다면, [Fabric Discord (영어)](https://discord.gg/v6v4pMv)`#player-support` 또는 `#server-admin-support` 채널에 도움을 요청할 수 있습니다.
:::

충돌 보고서는 게임 또는 서버의 문제를 해결하기 위해 굉장히 중요한 부분 중 하나입니다. 이러한 충돌 보고서는 충돌에 관련된 많은 정보를 포함하고 있으며, 충돌의 원인을 찾는 데 도움이 됩니다.

## 충돌 보고서 찾기
## 충돌 보고서 찾기 {#finding-crash-reports}

충돌 보고서는 게임 디렉토리의 `crash-reports` 폴더에 저장됩니다. 서버의 경우, 서버 디렉토리의 `crash-reports` 폴더에 저장됩니다.

Expand All @@ -37,7 +37,7 @@ authors:

:::

## 충돌 보고서 읽기
## 충돌 보고서 읽기 {#reading-crash-reports}

충돌 보고서는 매우 길고, 읽기 매우 어려울 수 있습니다. 하지만, 충돌에 관련된 많은 정보를 포함하고 있고, 충돌의 원인을 찾는데 유용합니다.

Expand All @@ -49,7 +49,7 @@ authors:

:::

### 충돌 보고서의 목차
### 충돌 보고서의 목차 {#crash-report-sections}

충돌 보고서는 여러 목차로 이루어져 있으며, 각 목차는 다음 제목을 가집니다.

Expand All @@ -58,43 +58,45 @@ authors:
- 운영체제, Java 버전, 게임에 할당된 메모리의 양 등이 기록됩니다. 게임에 적당한 양의 메모리가 할당되었는지, 올바른 Java 버전을 사용했는지 등을 확인할 때 유용합니다.
- Fabric의 경우, 여기에 설치된 모드가 기록되는 `Fabric Mods:` 가 추가됩니다. 모드 간 충돌을 파악할 때 유용합니다.

### 충돌 보고서로 할 수 있는 것
### 충돌 보고서로 할 수 있는 것 {#breaking-down-the-crash-report}

이제 충돌 보고서의 목차를 알았으니, 충돌 보고서를 분해해서 충돌의 원인이 무엇인지 파악할 수 있게 되었습니다.

아래에 링크된 예시를 통해, 충돌 보고서를 분석하고 충돌을 일으킨 원인과 모드를 찾아봅시다.

이 예시에서는 `---- Minecraft Crash Report ----` 의 스택트레이스에 충돌을 일으킨 주요 오류가 기록되어 있으므로, 가장 중요한 부분이라 할 수 있습니다. 예시에서 발생한 오류는 `java.lang.NullPointerException: Cannot invoke "net.minecraft.class_2248.method_9539()" because "net.minecraft.class_2248.field_10540" is null` 입니다.
이 예시에서는 `---- Minecraft Crash Report ----` 안 목차의 스택트레이스에서 충돌을 일으킨 주요 오류가 기록되어 있어 가장 중요한 부분이라고 할 수 있습니다.

스택트레이스에 언급된 모드의 개수에 따라, 정확히 지목하기 어려울 수 있지만, 가장 먼저 해야 할 일은 충돌을 일으킨 모드를 찾는 것입니다.
:::details 오류 표시

<<< @/public/assets/players/crash-report-example.txt{7 log}

<!-- TODO: show part of this file -->
:::

<<< @/public/assets/players/crash-report-example.txt{8-9,14-15 log}
스택트레이스에 언급된 모드의 개수에 따라, 정확히 지목하기 어려울 수 있지만, 가장 먼저 해야 할 일은 충돌을 일으킨 모드를 찾는 것입니다.

이 예시에서는, 스택트레이스에서 처음으로 언급 된 `snownee` 충돌을 일으킨 모드입니다.
이 예시에서는, `snownee`스택트레이스에서 처음으로 언급되었기 때문에 충돌을 일으킨 모드입니다.

하지만, 여러 모드가 비슷한 비율로 언급되었다면, 모드 호환성 문제일 있으며, 충돌을 일으킨 모드의 코드는 문제가 없을 가능성도 있습니다. 이런 경우에는, 모드 개발자에서 충돌을 신고하고, 개발자가 충돌을 파악하도록 하는 것이 최고의 선택입니다.
하지만, 여러 모드가 언급되었다면, 모드 간의 호환성 문제일 수도 있으며, 충돌을 일으킨 모드에는 문제가 없을 가능성도 있습니다. 이러한 경우에는, 모드 개발자에게 충돌을 신고하고, 충돌을 조사할 수 있도록 하는 것이 최선책입니다.

## Mixin 충돌
## Mixin 충돌 {#mixin-crashes}

:::info
Mixin은 게임의 소스 코드를 수정하지 않고 게임을 수정하는 방법 중 하나입니다. 이는 여러 모드에서 사용되고, 개발자에게 가장 강력한 도구가 됩니다.
Mixin은 모드가 게임의 소스 코드를 수정하지 않고도 게임을 수정할 수 있도록 하는 방법 중 하나입니다. 이는 많은 모드에서 사용되고, 개발자에게 매우 강력한 도구입니다.
:::

Mixin이 충돌하면, 스택 트레이스에는 충돌이 발생한 Mixin과, Mixin을 수정하려고 시도한 모드가 기록됩니다.
Mixin이 충돌하면, 스택트레이스에는 충돌한 Mixin과 그 Mixin이 수정하려고 한 클래스가 기록됩니다.

메소드 Mixin은 스택트레이스에 `modId$handlerName` 로 기록되는데, `modId`는 모드의 아이디, `handlerName`은 Mixin 처리기의 이름입니다.
메소드 Mixin은 스택트레이스에 `modid$handlerName`로 기록되는데, `modid`는 모드의 ID, `handlerName`은 Mixin 처리기의 이름입니다.

```:no-line-numbers
... net.minecraft.class_2248.method_3821$$$modid$handlerName() ... // [!code focus]
```

이 정보를 통해 충돌을 일으킨 모드를 찾고, 모드 개발자에게 충돌을 신고할 수 있게 됩니다.

## 모드 간 충돌을 파악할 때 유용합니다.
## 충돌 보고서로 뭘 하나요 {#what-to-do-with-crash-reports}

충돌 보고서로 할 수 있는 최고의 행동은 보고서를 기록(Paste) 사이트에 업로드 하고, 이슈 트래커 또는 커뮤니티에 게시하여 모드 개발자에게 공유하는 것입니다.
충돌 보고서로 할 수 있는 최고의 행동은 보고서를 Paste에 업로드하고, 이슈 트래커 또는 커뮤니티 (Discord 등)에 게시하여 모드 개발자에게 공유하는 것입니다.

이는 모드 개발자가 충돌을 재현하는 등 분석하고, 충돌을 해결할 수 있게 합니다.

Expand Down
Loading

0 comments on commit 804c3f2

Please sign in to comment.