Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Проверка на то что блок сгенерировался а не поставлен игроком.

Статус
Закрыто для дальнейших ответов.

TheMrQuake

Активный участник
Пользователь
Баллы
66
Имя в Minecraft
TheMrQuake
Подскажите как сделать так чтобы когда игрок ломал блок и выполнялось какое то действие например выдача предмета. Но при этом выполнялась проверка что блок был сгенерирован а не поставлен игроком.
 
можно,конечно, записывать в конфиг локацию каждого поставленного блока , но это очень плохая идея)
 
Смотря какой промежуток времени нужно помнить о происхождении блока...
 
Чую я пахнет неправильным подходом.
Для начала давай ты расскажешь что хочешь делать с ним)
 
Самое премитивное, когда игрок ставит блок записываем в конфиг дату блока(содержит его имя,расположение и т.д), далее если игрок ломает блок, то при помощи BlockBreakEvent делаем обратное действие, теперь выгружаем дату этого блока и ищем совпадающие в конфиге при помощи .contains(blockData)

Дальше если есть совпадение то выполняем нужное действие...
Java:
if (config().getString("четатам").contains(blockData) == true) {
// Выполняем нужное нам действие!
}
фу. фу. фу.
фу. фу. фу.
фу. фу. фу

Как можно такое советовать то?
Ладно бы еще в БД, но в конфиг...
Извращенцы...
 
Чую я пахнет неправильным подходом.
Для начала давай ты расскажешь что хочешь делать с ним)
Я хочу сделать так чтобы когда игрок ломал руду ему давалась валюта. Руда не должна быть поставлена игроком.
 
Если не жалко места на жестком диске, тогда просто записывать всю установленную руду в БД, ну и соответственно удалять ее, когда игрок ее сломает.
Если же жалко, тогда можно отрегенить чанк и проверить была ли там руда, а потом все вернуть. Но опять же придется писать в БД - либо координаты откуда она была сломана(чтобы избежать повторной установки в тоже место и получение за это прибыли).

Но как по мне и первый вариант нормальный, ни так уж и много БД ест.
 
Кажется, в Jobs было что-то подобное, когда за работу добытчика давали деньги только если сломанный блок был сгенерирован. Можете посмотреть, как там устроено.
 
Кажется, в Jobs было что-то подобное, когда за работу добытчика давали деньги только если сломанный блок был сгенерирован. Можете посмотреть, как там устроено.
Нет там по другому. Там когда игрок ставит блок у него снимаются деньги.
Кажется, в Jobs было что-то подобное, когда за работу добытчика давали деньги только если сломанный блок был сгенерирован. Можете посмотреть, как там устроено.
Спасибо. Обязательно попробую.
 
Я делал подобную хрень таким образом.
Дабы добиться максимальной производительности, хранил блоки в памяти сервера.
При отключении сервера записывал в конфиг.
При включении сервера, подгружал в память.

Думаю лучший способ.
 
Ну вот только когда у тебя сломают 100кк+ руды ты поймешь что на это уходит много оперативной памяти, скорее тогда уже при загрузке чанка подгружать то что в нем ломали и соответственно выгружать.
 
тебя сломают 100кк+ руды ты поймешь что на это уходит много оперативной памяти, скорее тогда уже при загрузке чанка подгружать то что в нем ломали и соответственно выгружать.
Где хоть ты столько игроков возьмешь? У тебя проект лучше Hypixel'я
 
Ну вот только когда у тебя сломают 100кк+ руды ты поймешь что на это уходит много оперативной памяти, скорее тогда уже при загрузке чанка подгружать то что в нем ломали и соответственно выгружать.
Блок у меня записывался в таком формате X;Y;Z
Примерно выглядело так 1785;75;-98788
1 символ кушает примерно 1 байт(точно не знаю)
100.000.000 блоков, по нашему примеру - это примерно 1.400.000.000 байт
Перевести в мегабайты - выйдет 1400мб(1.4G) - что собственно не так уж и много при таком кол-во блоков..
На нормальном сервере где установлен сервер с 16G-~ 32G+ памяти, эти цифры копейки..
 
Поставить logblock на сервер и использовать его API. Как я понял, сервер на выживание?(hi-tech там, или магия?) Если это мини игры, то лучше самому написать логгер блоков.
 
Где хоть ты столько игроков возьмешь? У тебя проект лучше Hypixel'я
К примеру 400 уникальных людей в день, каждый идет в шахту и добывает 10 стаков руды в день, что выходит 256000 руды в день или около 7кк за месяц, за год работы сервера это число приблизится к 100кк.


Блок у меня записывался в таком формате X;Y;Z
Примерно выглядело так 1785;75;-98788
1 символ кушает примерно 1 байт(точно не знаю)
100.000.000 блоков, по нашему примеру - это примерно 1.400.000.000 байт
Перевести в мегабайты - выйдет 1400мб(1.4G) - что собственно не так уж и много при таком кол-во блоков..
На нормальном сервере где установлен сервер с 16G-~ 32G+ памяти, эти цифры копейки..
Ну так хранить - не очень, можно использовать байтовую запись в файл и хранить все int;byte;int, тем самым на одну руду уйдет всегда 9 байт, а если мир меньше 32к блоков то можно использовать short;byte;short, уменьшив количество байт до 5. Все дело не в занимаемой памяти, ну точнее не только в ней, если у тебя наберется хотя бы 10кк сломанной руды ты будешь выполнять поиск по координатам долго, около секунды.
 
Если у тебя наберется хотя бы 10кк сломанной руды ты будешь выполнять поиск по координатам долго, около секунды.
В любом случае это лучше чем чекать блок из Базы данных или уж тем более конфига..
Тем более это дело можно выполнять в отдельном потоке не нагружая главный поток.
 
Конфиг точно нет, БД весьма неплохой вариант. А вот отдельный поток может и не будет грузить основной, но процессор он займет не слабо. А если человек сломает 3 блока руды? А если 10 человек сломают по 3 блока руды? У тебя будет неделями искать. Так что самый выгодный способ это, как по мне, записать в БД чанки и грузить их координаты при прогрузке.
 
Статус
Закрыто для дальнейших ответов.

Поделиться этой страницей

Назад
Верх