Skip to content

Commit

Permalink
Preview hot fix
Browse files Browse the repository at this point in the history
  • Loading branch information
Reider745 authored and MaXFeeD committed Aug 23, 2024
1 parent 8055154 commit bc21fd2
Show file tree
Hide file tree
Showing 10 changed files with 125 additions and 96 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ hide_title: true
import NotImplemented from "@site/src/components/NotImplemented"
<NotImplemented />
```
```
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ hide_title: true
import NotImplemented from "@site/src/components/NotImplemented"
<NotImplemented />
```
```
9 changes: 9 additions & 0 deletions docs/libraries/DungeonUtility/loaders/StructureFormats.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
hide_title: true
---

```mdx-code-block
import NotImplemented from "@site/src/components/NotImplemented"
<NotImplemented />
```
2 changes: 1 addition & 1 deletion docs/libraries/DungeonUtility/loaders/StructureLoader.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,4 @@ hide_title: true
import NotImplemented from "@site/src/components/NotImplemented"
<NotImplemented />
```
```
1 change: 0 additions & 1 deletion docusaurus.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,6 @@ const darkCodeTheme = require('prism-react-renderer/themes/vsDark');
const logger = require('@docusaurus/logger');
const path = require('path');
const fs = require('fs');
const sidebars = require('./sidebars');

const baseUrl = process.env.BASE_URL ?? '/';

Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
---
title: Генерация предметов
---
# Генерация предметов

ItemGeneration - класс для создания генераторов предметов и взаимодействия с ними.
Данный класс может работать только с ванильными контейнерами!

## Какие проблемы решает генератор предметов?
:::info Какие проблемы решает генератор предметов?

1. Известная раньше проблема, это пустые сундуки в структурах, DungeonUtility будет по умолчанию генерировать предметы до тех-пор пока не сгенерирует, что очень удобно.
2. Интеграция между модами
3. Просмотр игроком, что ему может выпасть в сундуке
:::

Разберем базовые методы данного класса, в отдельности разберем создание генератора, на данный момент содержится даже проблема, чтто и в StructureLoader!
**Поэтому очень важно позаботиться об уникальности имени генератора!**
Expand All @@ -21,48 +20,52 @@ ItemGeneration - класс для создания генераторов пр
ItemGeneration.newGenerator("example_name");
```

Теперь разберем данный метод
Теперь разберем данный метод:

```ts
ItemGeneration.addItem("example_name", VanillaItemID.diamond, .1, {min: 1, max:5});
ItemGeneration.addItem("example_name", VanillaItemID.diamond, .1, {min: 1, max: 5});
```

Мы обращаемся к генератору по имени example_name и добавляем предмет с id из VanillaItemID.diamond, с шансом спавна .1(это 10%) и следующим параметром мы устанавливаем количество падающих предметов, а именно от 1 до 5.
> Помните, что метод использует [**вероятность**](https://ru.wikipedia.org/wiki/Вероятность) спавна, коротко говоря это шанс спавнв деленный на 100(например 1/100 = 1%)
Мы обращаемся к генератору по имени example_name и добавляем предмет с идентификатором VanillaItemID.diamond, шансом спавна .1 (это 10%), а последним параметром мы устанавливаем количество падающих предметов (от 1 до 5).
:::tip
Помните, что метод использует [**вероятность**](https://ru.wikipedia.org/wiki/Вероятность) спавна, коротко говоря это шанс спавнв деленный на 100(например 1/100 = 1%)
:::

Теперь разберем метод заполнения сундука
Теперь разберем метод заполнения сундука:

```ts
ItemGeneration.fill("example_name", x, y, z, region);
```

Данный метод заполняет сундук на координатах x, y, z и в измерении region(BlockSource)
Данный метод заполняет сундук на координатах x, y, z, [region](https://nernar.github.io/ru/docs/environment/modifying-region)

## Интеграция с другими модами

Для того, чтобы не добавлять свои предметы в ручную в каждый мод на структуры был добавлен метод
Для того, чтобы не добавлять свои предметы вручную в каждый мод на структуры был добавлен метод:

```ts
ItemGeneration.setItemIntegration(VanillaItemID.diamond_axe, .1, {min: 1, max: 1});
```
Тут мы добавляем предмет с id из VanillaItemID.diamond_axe, с шансом спавна .1(это 10%) и следующим параметром мы устанавливаем количество падающих предметов, а именно от 1 до 1.

Тут мы добавляем предмет с идентификатором VanillaItemID.diamond_axe, шансом спавна .1 (это 10%) и следующим параметром мы устанавливаем количество падающих предметов (от 1 до 1).

## Recipe Viewer

Данный метод создаст интеграцию с RecipeViewer за вас!
Данный метод создаст интеграцию с Recipe Viewer за вас.

```ts
ItemGeneration.registerRecipeViewer("example_generator", "Title generator");
```

Разберем данный метод, данный метод позводит просматрировать игроку предметы в Recipe Viewer которые он может получить с данжей.
Данный метод позволит игроку просматрировать предметы в Recipe Viewer, которые он сможет получить с данжей.

## Как заставить генерироваться лут в своей структуре?

```ts
examplePool.setGlobalPrototype("test_structure", Structure.getPrototypeDefault("example_generator"));
```

Разберем данный код, мы обращаемся к экземпляру StructurePool и устанавливаем ей генерацию предметов example_generator
Мы обращаемся к экземпляру StructurePool и устанавливаем ему генерацию предметов `example_generator`.

## Примеры

Expand All @@ -80,20 +83,20 @@ Item.registerUseFunction(VanillaItemID.stick, (coords, item, block, player) => {
ItemGeneration.fill("example_generator", coords.x, coords.y, coords.z, BlockSource.getDefaultForActor(player));
});

// Добавляем предмет вовсе другие моды
// Добавляем предмет во все другие моды
ItemGeneration.setItemIntegration(VanillaItemID.diamond_axe, .1, {min: 1, max: 1});

// Создаем интеграцию с RecipeViewer
// Создаем интеграцию с Recipe Viewer
ItemGeneration.registerRecipeViewer("example_generator", "Title generator");


// Создаем StructurePool, обратите внимание, что у каждого мода должен быть свое уникальное имя StructurePool!!!!!!!!!
// Создаем StructurePool, ОБРАТИТЕ ВНИМАНИЕ, что у каждого мода должно быть свое уникальное имя!
let examplePool = new StructurePool("example_pool");

// Устанавливаем путь к папке со структурами, в данном случае папка structures в главное директории мода
// Устанавливаем путь к папке со структурами, в данном случае папка structures в главной директории мода
examplePool.setPathStructures(__dir__+"structures");

// Загружаем структуру test_structure.struct из папки указаной выше, структура будет доступна по имени test_structure
// Загружаем структуру 'test_structure.struct' из папки указаной выше, структура будет доступна по имени test_structure
examplePool.upload("test_structure");

// Устанавливаем генерацию предметов в структуре test_structure
Expand Down
Original file line number Diff line number Diff line change
@@ -1,30 +1,29 @@
---
title: Генерация структуры
---
# Генерация структуры

DefaultGenerationDescription - класс обеспечит качественную генерацию, которая создается очень просто

## Какие проблемы решает генератор структур DungeonUtility?
::info Какие проблемы решает генератор структур DungeonUtility?

1. Частые появления структуры, раньше могло запсавнится несколько структур в одном месте, что выглидит очень не очень
2. Половинчитые структуры, структуры могли половинчиться из разных причин, DungeonUtility также предлагает исправление данной проблемы
:::

## Генерация структур

Начнем пожалуй сразу с примера
Начнем, пожалуй, сразу с примера:

```ts
let examplePool = new StructurePool("example_pool");

// Устанавливаем путь к папке со структурами, в данном случае папка structures в главное директории мода
// Устанавливаем путь к папке со структурами, в данном случае папка structures в главной директории мода
examplePool.setPathStructures(__dir__+"structures");

// Загружаем структуру test_structure.struct из папки указаной выше, структура будет доступна по имени test_structure
// Загружаем структуру 'test_structure.struct' из папки указаной выше, структура будет доступна по имени test_structure
examplePool.upload("test_structure");

// Добавляем событие StructureLoadOne, чтобы работать со структурой
Callback.addCallback("StructureLoadOne", () => {
// Создаем DefaultGenerationDescription, даем ему структуру которую будем генерировать, с шансом 1 к 80(примерно 1 структура на 80 чанков)
// Создаем DefaultGenerationDescription, даем ему структуру, которую будем генерировать с шансом 1 к 80 (примерно 1 структура на 80 чанков)
let example_generation = new DefaultGenerationDescription(examplePool.get("test_structure"), 80);

example_generation.setIdentifier("my_mod:test_structure");// Задаем уникальный индитификатор, для структуры
Expand All @@ -41,21 +40,34 @@ Callback.addCallback("StructureLoadOne", () => {
Для регистрации генерации структуры используется класс DefaultGenerationDescription
Он принимает структуру, которая будет генерироваться и шанс

> В шансе спана указывается делитель для получения [**вероятности**](https://ru.wikipedia.org/wiki/Вероятность) спавна структуры
:::info
В шансе спана указывается делитель для получения [**вероятности**](https://ru.wikipedia.org/wiki/Вероятность) спавна структуры
:::
Дальше мы устанавливаем уникальный индитификатор мода, это требуется для исправления половинчитых структур
> **Если ваша структура генерируется очень часто, не рекомендую это делать**
> example_generation.setIdentifier("my_mod:test_structure");
:::info
Если ваша структура генерируется очень часто, не рекомендуется это делать
:::

```ts
example_generation.setIdentifier("my_mod:test_structure");
```

Затем мы установили поверхности на которых будет генерироваться структура, в где true - это переключатель между белым списком и черным, в примере белый список
> example_generation.setSurface(true, [VanillaBlockID.grass]);
```ts
example_generation.setSurface(true, [VanillaBlockID.grass]);
```

Дальше мы задали групу к которой принадлежит структура и минимальное растояние до ближайшей структуры данной группы(что-бы структуры не спавнились слишком часто)
> example_generation.setDistance(90, "my_mod_group");

```ts
example_generation.setDistance(90, "my_mod_group");
```

Ну и на последок мы зарегистрировали генерацию структуры

> example_generation.register();
```ts
example_generation.register();
```

## Пример с генерацией предметов

Expand All @@ -67,15 +79,15 @@ ItemGeneration.newGenerator("example_generator");
ItemGeneration.addItem("example_generator", VanillaItemID.iron_ingot, .5, {min: 1, max: 3});
ItemGeneration.addItem("example_generator", VanillaItemID.diamond, .1, {min: 1, max: 1});

// Создаем интеграцию с RecipeViewer
// Создаем интеграцию с Recipe Viewer
ItemGeneration.registerRecipeViewer("example_generator", "Title generator");


// Создаем StructurePool, обратите внимание, что у каждого мода должен быть свое уникальное имя StructurePool!!!!!!!!!
// Создаем StructurePool, ОБРАТИТЕ ВНИМАНИЕ, что у каждого мода должно быть свое уникальное имя StructurePool!
let examplePool = new StructurePool("example_pool");
// Устанавливаем путь к папке со структурами, в данном случае папка structures в главное директории мода
// Устанавливаем путь к папке со структурами, в данном случае папка structures в главной директории мода
examplePool.setPathStructures(__dir__+"structures");
// Загружаем структуру test_structure.struct из папки указаной выше, структура будет доступна по имени test_structure
// Загружаем структуру 'test_structure.struct' из папки указаной выше, структура будет доступна по имени test_structure
examplePool.upload("test_structure");

// Устанавливаем генерацию предметов в структуре test_structure
Expand All @@ -90,7 +102,7 @@ Callback.addCallback("StructureLoadOne", () => {
example_generation.setSurface(true, [VanillaBlockID.grass]);// Задаем блоки на которых будет спавниться структура
example_generation.setDistance(90, "my_mod_group");// Задаем минимальное расстояния между структурами my_mod_group

// Регистрируем генерацию структур, по выше описаным параметрам
// Регистрируем генерацию структур, по раннее описанным параметрам
example_generation.register();
});
```
Loading

0 comments on commit bc21fd2

Please sign in to comment.