Timelord
Ваш лучший помощник в вопросах настройки времени! На Forge версии 1.16.5 и только. Отдельная благодарность Мсе за большую часть логики, которую я взял у него.
Для личного использования - пожалуйста и сколько угодно, если хотите взять себе на сервер и у вас не донатная помойка, я не против, но ради приличия сообщите мне об этом лично. О багах тоже лучше всего сообщать в личку.
Как это работает
При запуске игры у вас создадутся файлики в ./config/timelord - на каждый дименшен по файлу. В этих файлах, собственно, все и настраивается. Для каждого дименшена файл выглядит как-то так:
{
"active": false,
"rain": {
"endlessRain": false,
"endlessThunder": false,
"income": 0,
"outcome": 0,
"thunder": 0,
"min": 0,
"max": 0,
"dice": 0
},
"time": {
"hours_offset": 0,
"scale": 0.0,
"fixedDayTime": -1
}
}
Для того, чтобы таймлорд работал, вам нужно изменить active на true. По умолчанию он не работает ни для какого дименшена.
Начнем c time.
- Если задан fixedDayTime в пределах от 0 до 24000, то назначается он. Это позволяет сделать в дименшене фиксированное время. Значения остальных полей игнорируются, т.е. если вы не хотите, чтобы было фиксированное время, то сделайте -1 или 24001 и так далее.
- Если scale больше нуля, то считается, что вы хотите именно его. Скейл это ускорение или замедление течения времени относительно обычного времени. Например, если scale 3.0, то время будет идти в три раза быстрее, а если 0.5 - то в 2 раза медленнее. Если активируется scale, то игнорируется hours_offset.
- Наконец, hours_offset. Он может быть от -18 до 18 и выражает собой отступ в часах от текущего серверного времени. Он может быть 0, тогда игровое время будет полностью соответствовать времени сервера. Если вы хотите и его отключить, то сделайте его больше 18 или меньше -18. Таким образом, если у вас hours_offset: 19, scale: 0 и fixed_day_time: -1, то время будет идти как в ванилле. Это может быть полезно, если вам нужно сохранить фичи дождя.
Перейдем к rain.
Дождь работает по следующему принципу - есть условная "ванная", которая у каждого мира своя. В эту замечательную ванную, когда нет дождя, каждый тик добавляется incomе. Если накопленный объем больше min, то каждый тик делается бросок дайса с dice граней. Если выпадает 0, то дайс считается успешным и начинается дождь. То есть, например, если вы хотите, чтобы шанс дождя был 50% (напомню, что чек делается каждый тик, поэтому это скорее всего означает мгновенный дождь), то можете задать dice = 1. Если объем накопленного дождя дошел до maх, а дождь так и не начался, то он случается вне зависимости от результатов ролла. При этом, если в момент начала дождя текущий накопленный дождь был выше thunder, то начнется гроза. Когда дождь начался, то каждый тик он забирает outcome из накопленного запаса "ванны", и когда этот запас доходит до 0, отключает дождь. Может звучать сложно, но вот вам пример:
{
"rain": {
"endlessRain": false,
"endlessThunder": false,
"income": 1,
"outcome": 5,
"thunder": 7500,
"min": 5000,
"max": 10000,
"dice": 5000
}
}
В данной ситуации, каждый тик добавляется по 1 дождю в "ванную", пока оно не дойдет до 5 тысяч. То есть через 5000 тиков каждый тик будет кидаться дайс, и если выпадает 0, то случается дождь. Если при этом дождь должен начаться после того, как его накопилось 7500, то будет гроза. Если дайсик ни разу не прокнул и накопленный дождь дошел до 10000, то он начнется, и это обязательно будет гроза (поскольку 10000 > 7500).
Так же есть endlessRain и endlessThunder. Они отключают всю остальную логику, просто включая дождь или грозу, если они должны быть. Учтите, что технически гроза может быть без дождя, но я не уверен, как именно это работает. Так же учтите, что если вы включили endlessRain, то включение endlessThunder ничего не сделает - их нужно включать одновременно. Поэтому если вам нужны обе эти штуки, то включайте их одновременно.