Объекты блоков
This page was last verified for Vintage Story version 1.9.
Введение
Block entity - это конструкция, которую вы можете прикрепить к существующему блоку, чтобы придать ему дополнительную функциональность. Всякий раз, когда блок должен что-то делать через регулярные промежутки времени или хранить дополнительную информацию, такую как содержимое сундука, вам нужна Block entity. Настоятельно рекомендуется прочитать руководство по Basic Blocks и Block Class, чтобы правильно понять это руководство.
Флиппер текстуры
Давайте создадим блок, который переключает свою текстуру каждые 3 секунды. У него должно быть два варианта: "on"
и "off"
. Дополнительно нам нужно определить класс blockentity следующим образом:
entityClass: "tickingcounter",
Вы можете скачать ресурсы здесь и поместить их в свой каталог модов.
BlockEntity
Теперь нам нужно зарегистрировать наш класс blockentity и, следовательно, нам нужно создать новый файл * .cs в нашем проекте. Давайте назовем это Ticking.cs
.
Прежде всего вам нужно создать сам класс blockentity. Поэтому вам нужно расширить BlockEntity
:
public class TickingBlockEntity : BlockEntity
{
}
Этот класс должен иметь таймер, как только таймер достигает 3 секунд, он должен заменить текущий блок другим состоянием.
Чтобы создать таймер, нам нужно зарегистрировать тиковый счетчик. Поэтому нам нужно переопределить Initialize (ICoreAPI)
:
public override void Initialize(ICoreAPI api)
{
base.Initialize(api);
}
добавить счетчик (который должен увеличиваться за тик) ...
public int timer;
... and the actual ticking method ...
public void onTick(float par)
{
}
Чтобы зарегистрировать метод тика, мы можем использовать RegisterGameTickListener
в Inizialize
public override void Initialize(ICoreAPI api)
{
base.Initialize(api);
RegisterGameTickListener(onTick, 20);
}
Сам таймер должен увеличиваться за такт. Он тикает 20 раз в секунду, что означает, что прошло 3 секунды после того, как таймер достиг 60. Поэтому, если он больше 60, он должен заменить блок:
public void onTick(float par)
{
timer++;
if(timer > 60)
{
Block block = api.World.BlockAccessor.GetBlock(pos);
if (block.Code.Path.EndsWith("-on"))
block = api.World.GetBlock(block.CodeWithParts("off"));
else
block = api.World.GetBlock(block.CodeWithParts("on"));
api.World.BlockAccessor.SetBlock(block.BlockId, pos);
}
}
Кроме того, нам нужно сохранить текущее время:
public override void ToTreeAttributes(ITreeAttribute tree)
{
base.ToTreeAttributes(tree);
tree.SetInt("timer", timer);
}
public override void FromTreeAtributes(ITreeAttribute tree)
{
base.FromTreeAtributes(tree);
timer = tree.GetInt("timer");
}
Регистрация Block Entity
Зарегистрировать Block Entity довольно просто (довольно похоже на регистрацию block class). Вам нужен класс мода и переопределить Start (ICoreAPI)
:
public class Ticking : ModSystem
{
public override void Start(ICoreAPI api)
{
base.Start(api);
api.RegisterBlockEntityClass("tickingcounter", typeof(TickingBlockEntity));
}
}
Тестирование
Теперь все готово для запуска первого теста:
Распределение
Чтобы закончить все, откройте modtools и введите pack <ваш mod id>
. Теперь вы можете взять zip-файл и поделиться им с другими людьми. Он будет работать так же, как и обычные моды, вы можете установить его, скопировав его в папку модов.
Скачать мод
- Для VS 1.9: Ticking_v1.0.0.zip
- Для VS 1.6: Ticking.zip
Wondering where some links have gone?
The modding navbox is going through some changes! Check out Navigation Box Updates for more info and help finding specific pages.
Modding | |
---|---|
Modding Introduction | Getting Started • Theme Pack |
Content Modding | Content Mods • Developing a Content Mod • Basic Tutorials • Intermediate Tutorials • Advanced Tutorials |
Code Modding | Code Mods • Setting up your Development Environment |
Property Overview | Item • Entity • Block • Block Behaviors • Block Classes • Block Entities • Block Entity Behaviors • World properties |
Workflows & Infrastructure | Modding Efficiency Tips • Mod-engine compatibility • Mod Extensibility • VS Engine |
Additional Resources | Community Resources • List of server commands • List of client commands • Client startup parameters • Server startup parameters Example Mods • API Docs • GitHub Repository |