Comments (13)
-
Последний параметр в createLight (async) всегда ставьте false. Асинхронный режим работает некорректно
-
createLight/deleteLight только создает/удаляет свет на сервере. Клиент об этом не знает, т.к. сервер не посылает сообщения клиенту об этом. Поэтому игрок увидит изменения только если он отбежит очень далеко и вернется обратно (даже перезагрузка чанков не поможет F3+A)
Это сделано специально, т.к. после каждого вызова этой функции посылать уведомления клиенту не рационально и это нагрузит сервер и клиент. Для оптимизации быстродействия клиенту посылается уведомления отдельной функцией updateLight, которая за раз отправляет пакет с информацией по всему чанку, указывая какие секции чанка (16х16х16) следует обновить.
В результате алгоритм использования API примерно следующий:
- Создаем/удаляем свет в блоках и тут же запоминаем в хэше (HashSet) список затронутых секций и чанков (свет одного блока распространяется с затуханием и может затрагивать несклько секций/чанков). Получить список потенциально затронутых секций/чанков можно функцией collectChunks.
- Далее в цикле по этому списку посылаем пакеты клиентам (игрокам) командой updateLight с информацией об обновленных чанках. Клиент перерисовывает на своей стороне свет в этих секциях/чанках. (updateLight всегда работает в асинхронном режиме)
Пример кода можно посмотреть тут:
https://www.spigotmc.org/threads/lightapi-fork.278321/page-9#post-4228780
Первый пример без оптимизации. Он создает/удаляет свет в блоке и тут же отправляет клиентам пакеты об изменениях. Второй пример показывает принцип оптимизации. Он создает/удаляет свет сразу во многих блоках и коллекционирует список затронутых секций/чанков. А в конце уже отправляет пакеты клиентам.
Класс ChunkInfo в примере имеет кривое название (исторически сложилось). Он на самом деле означает инфу по секции чанка (16х16х16), а не по всему чанку (16х256х16). Т.е. updateLight на вход получает инфу по секции чанка и запоминает в своем внутреннем буфере.
Далее уже плагин с указанной в конфиге периодичностью обрабатывает этот буфер. Берет от туда секции, агрегирует их по чанкам и уже потом отправляет клиентам пакеты об изменении в чанках.
from lightapi.
Ок, есть вопрос по второму примеру, так как в Java я почти полный ноль:
Как создать Collection и засунуть в него locations?
про существование гугла знаю, но там не нашел
'Collection' is abstract; cannot be instantiated
Если по подсказкам IntelijIdea делать, то
Incompatible types. Found: 'boolean', required: 'java.util.Collection<org.bukkit.Location>'
from lightapi.
Первый способ работал, но когда я его перенес на другой сервер, он не заработал ._.
Возможно проблема в ядре Patina
from lightapi.
Скорее всего в подобных ядрах используется движок освещения Starlight вместо стандартного. Starlight не поддерживает кастомные уровни освещения, только от блоков.
from lightapi.
ок, тогда попробую заменить на Paper
from lightapi.
Да, проблема была в этом.
from lightapi.
Collection это не класс, а интерфейс. Т.е. на вход во вторую функцию передается экземпляр класса, который реализует интерфейс "Collection". Есть много классов, которые реализуют этот интерфейс. Например ArrayList, HashSet, Vector и т.п.
https://docs.oracle.com/javase/8/docs/api/java/util/Collection.html
Полный перечень классов, которые реализуют данный интерфейс, смотри под заголовком "All Known Implementing Classes".
В угловых скобочках Collection<Location> указывается тип каждого элемента коллекции.
Т.е. снаружи пишешь например так:
List<Location> list= new ArrayList<>(); // Интерфейс List тоже включает в себя итерфейс Collection
list.add(new Location(...));
list.add(new Location(...));
list.add(new Location(...));
setLight(list, 15, LightType.BLOCK);;
from lightapi.
Да, со StarLight полная беда. Его сначала воткнули в Tuinity. Потом в Purpur. Вроде где то слышал что его собираются скоро воткнуть и в Paper.
from lightapi.
В общем, как я и предполагал, StarLight уже воткнули в Paper.
#37
from lightapi.
вобщем я к счастью на 1.16.5, жаль что на Paper плагин на машины работает отвратительно.
from lightapi.
кажись придется рыться в исходниках и пересобирать ядро
from lightapi.
На скорую руку сделал патч для Starlight на 1.17:
BeYkeRYkt/Paper@48c517f
Патч содержит код только для блоков
И немного переписал плагин для проверки:
https://github.com/BeYkeRYkt/LightAPI/tree/temp/5.0.0-starlight
Плагин содержит обратную совместимость со старым интерфейсом. Также проект содержит тестовый плагин для проверок с помощью блоков: красный блок, обсидиан и бедрок. На первый взгляд вроде работает, но могут быть некоторые приколы с переосвещением чанков.
from lightapi.
o_O
это надо курить))
from lightapi.
Related Issues (20)
- Error when loading LightAPI on 1.15.2 Paper HOT 1
- How to implement LightAPI to a plugin? HOT 4
- Lights disappear on block update HOT 1
- Lighting only updates after a server restart HOT 2
- Performance HOT 6
- 1.17 HOT 3
- Error stopped chunks from loading HOT 10
- Tunity Starlight Support. HOT 21
- java.lang.ClassCastException: ca.spottedleaf.starlight.light.StarLightInterface$2 incompatible with net.minecraft.world.level.lighting.LightEngineBlock
- Can someone give plugin? HOT 2
- 1.17.1 Pupur Issue HOT 2
- [WARN] LightAPIFork on paper 1.17.1-233 HOT 4
- No LightAPI implementations was found for Paper v1_17_R1 HOT 8
- [BUG] starlight.light.StarLightInterface HOT 1
- Error on StartUp
- Добавить поддержку starlight(в виде светлых блоков) для 1.17
- Update to support java 17 and mc 1.18
- Warn flood to console PufferFish core
- Classnotfoundexception on 1.18.2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from lightapi.