Дроп опыта при добыче блока

Привет! Недавно я написал гайд по добавлению своей руды. И вроде руда есть, был вариант с блоком и обычным дропом. Но я не учёл одного. Если мы добываем уголь, то получаем кусочек опыта, а так же сам уголь. Если мы добываем угольный блок, то получаем кусочек опыта при переплавке, а так же всё тот же уголь. И опыт при переплавке прописали и мы, а вот при прямой добыче ничего не падает, и это нужно исправлять.

Java часть

На самом деле тут не будет ничего сложного, но несколько новых вещей все же нужно будет затронуть.

При создании блоков мы использовали различных наследников класса Block, а так же сам класс Block. При создании своих классов мы обязательно должны наследовать класс блок. Иначе наши «блоки» не будут ими являться с точки зрения игры.

Так что в папку с вашими исходниками нужно добавить папку blocks (если такой еще нет) и добавим туда класс ExpOreBlock.java. Туда я записал такой код:

Фактически я добавил в конструктор блока два параметра, это максимальный и минимальный опыт, который может выпасть, а так же переопределяю метод getExpDrop. Именно он и отвечает за количество выпадающего опыта. Для всех блоков по умолчанию стоит значение 0, поэтому и нужно её переопределять.

И далее стандартная система. Если кирка зачарована на шёлковое касание, то не выдаём опыт, так как руда не выпала, а блок можно переплавить получив опыт именно так. Если же кирка обычная, то выбрасываем случайное число опыта в промежутке между указанными значениями.

Вроде всё предельно просто. На этом наш собственный блок готов и пора бы заменить Block на ExpOreBlock при регистрации, а так же указать наши значения для опыта.

Где 4 и 20 наши минимум и максимум опыта. Запускаем игру и получаем желанный опыт.

Вон он, летиииит

Примечание. НЕ ДЕЛАЙТЕ ОПЫТ БЛОКАМ, КОТОРЫЕ ДРОПАЮТ СЕБЯ!

Серьезно. Представим, что доски дропают опыт. Вы поставили доски, сломали доски, получили опыт, снова поставили и снова сломали. И знаете что? Да! Получили опыт! Если хотите выдавать опыт при добыче блока, то вам нужно создать два одинаковых блока, один из которых будет генерироваться в мире, выдавать опыт и не иметь способов получения, а второй будет получаемым из первого, а так же не выбрасывающий опыт при разрушении.

Короче, звучит сложно и запутанно. Так что лучше не извращайтесь.

На этом пока всё, спасибо за внимание!

Оставьте комментарий