Копируйте большие регионы с помощью Spigot
В настоящее время я работаю над обучающим плагином, в котором каждый игрок получит свой регион, например, для изучения бриджа. Поэтому, когда игрок присоединяется, плагин должен автоматически генерировать новую область для этого игрока и удалять ее, когда он уходит.
Я создал SetupCommand, в котором вы должны установить начало и конец копируемой области.
Теперь остается только скопировать регион и телепортировать в него игрока, однако я не нашел хороших способов сделать это. Единственное решение, которое я нашел до сих пор, - это перебрать все блоки и скопировать их один за другим. Но я могу себе представить, что это не лучшее решение и приведет к лагам не только на стороне сервера, но и на стороне клиента.
Есть ли лучшие способы клонирования региона, чем этот? Я читал, что вы должны использовать схемы, но они не вдавались в подробности.
2 ответа
Если у вас есть опыт работы с java и вы чувствуете себя комфортно в своих навыках, вы можете попытаться получить блоки в списке как список и сохранить его как base64 в своей базе данных или как-то еще. Вы можете каждый раз анализировать его обратно в список блоков и заменять его. Я бы скорее порекомендовал вам создать собственный блочный класс с инструментами.
Serializeable
а затем добавьте некоторые значения, такие как
Location
,
Material
а также
BlockData
к этому.
Используйте FAWE или WorldEdit для копирования/вставки разделов.
Если вы используете Block#setType, производительность будет очень низкой, поэтому, если вы не хотите использовать API, вам следует использовать NMS, но использование NMS не рекомендуется.
Недостатки NMS: Большинство методов NMS запутаны. В одной версии метод называется f(), в следующей может быть c().
Как копировать/вставлять с помощью FAWE:https://www.spigotmc.org/threads/how-to-paste-a-schematic-with-fawe.402950/
Как скопировать/вставить с помощью worldedit:https://www.spigotmc.org/threads/worldedit-api-schematic-copy-save-load-and-paste.498476/
В заключение рекомендуется использовать API