Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем TheMrQuake, 3 ноя 2015.

Статус темы:
Закрыта.
  1. Автор темы
    TheMrQuake

    TheMrQuake Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TheMrQuake
    Подскажите как сделать так чтобы когда игрок ломал блок и выполнялось какое то действие например выдача предмета. Но при этом выполнялась проверка что блок был сгенерирован а не поставлен игроком.
     
  2. Хостинг MineCraft
    <
  3. alekseichik

    alekseichik Активный участник Пользователь

    Баллы:
    76
    Имя в Minecraft:
    maxicraft2020
    можно,конечно, записывать в конфиг локацию каждого поставленного блока , но это очень плохая идея)
     
  4. CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Смотря какой промежуток времени нужно помнить о происхождении блока...
     
  5. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Чую я пахнет неправильным подходом.
    Для начала давай ты расскажешь что хочешь делать с ним)
     
  6. TheBlacK.Z

    TheBlacK.Z Активный участник Пользователь

    Баллы:
    78
    Самое премитивное, когда игрок ставит блок записываем в конфиг дату блока(содержит его имя,расположение и т.д), далее если игрок ломает блок, то при помощи BlockBreakEvent делаем обратное действие, теперь выгружаем дату этого блока и ищем совпадающие в конфиге при помощи .contains(blockData)

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

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    фу. фу. фу.
    фу. фу. фу.
    фу. фу. фу

    Как можно такое советовать то?
    Ладно бы еще в БД, но в конфиг...
    Извращенцы...
     
  8. LomNar

    LomNar Активный участник Пользователь

    Баллы:
    78
    Skype:
    radius981
    Имя в Minecraft:
    LomNar
    Садомаза
     
  9. TheBlacK.Z

    TheBlacK.Z Активный участник Пользователь

    Баллы:
    78
    это лишь пример для новичков, если вы такой тру девелопер то будьте любезны помочь автору этой темы.
     
  10. Автор темы
    TheMrQuake

    TheMrQuake Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TheMrQuake
    Я хочу сделать так чтобы когда игрок ломал руду ему давалась валюта. Руда не должна быть поставлена игроком.
     
  11. mifort

    mifort Новичок Пользователь

    Баллы:
    16
    Если не жалко места на жестком диске, тогда просто записывать всю установленную руду в БД, ну и соответственно удалять ее, когда игрок ее сломает.
    Если же жалко, тогда можно отрегенить чанк и проверить была ли там руда, а потом все вернуть. Но опять же придется писать в БД - либо координаты откуда она была сломана(чтобы избежать повторной установки в тоже место и получение за это прибыли).

    Но как по мне и первый вариант нормальный, ни так уж и много БД ест.
     
  12. kirill2011s

    kirill2011s Старожил Пользователь

    Баллы:
    103
    Кажется, в Jobs было что-то подобное, когда за работу добытчика давали деньги только если сломанный блок был сгенерирован. Можете посмотреть, как там устроено.
     
  13. Автор темы
    TheMrQuake

    TheMrQuake Активный участник Пользователь

    Баллы:
    66
    Имя в Minecraft:
    TheMrQuake
    Нет там по другому. Там когда игрок ставит блок у него снимаются деньги.[DOUBLEPOST=1446628515,1446628485][/DOUBLEPOST]
    Спасибо. Обязательно попробую.
     
  14. kirill2011s

    kirill2011s Старожил Пользователь

    Баллы:
    103
    Там есть именно профессия добытчика, а есть строителя.
     
  15. baksovic111

    baksovic111 Активный участник Пользователь

    Баллы:
    88
    Skype:
    Baksovic2
    Имя в Minecraft:
    Baksovic
    Я делал подобную хрень таким образом.
    Дабы добиться максимальной производительности, хранил блоки в памяти сервера.
    При отключении сервера записывал в конфиг.
    При включении сервера, подгружал в память.

    Думаю лучший способ.
     
  16. mifort

    mifort Новичок Пользователь

    Баллы:
    16
    Ну вот только когда у тебя сломают 100кк+ руды ты поймешь что на это уходит много оперативной памяти, скорее тогда уже при загрузке чанка подгружать то что в нем ломали и соответственно выгружать.
     
  17. _EnderWorld_

    _EnderWorld_ Активный участник Пользователь

    Баллы:
    78
    Имя в Minecraft:
    Steve
    Где хоть ты столько игроков возьмешь? У тебя проект лучше Hypixel'я
     
  18. baksovic111

    baksovic111 Активный участник Пользователь

    Баллы:
    88
    Skype:
    Baksovic2
    Имя в Minecraft:
    Baksovic
    Блок у меня записывался в таком формате X;Y;Z
    Примерно выглядело так 1785;75;-98788
    1 символ кушает примерно 1 байт(точно не знаю)
    100.000.000 блоков, по нашему примеру - это примерно 1.400.000.000 байт
    Перевести в мегабайты - выйдет 1400мб(1.4G) - что собственно не так уж и много при таком кол-во блоков..
    На нормальном сервере где установлен сервер с 16G-~ 32G+ памяти, эти цифры копейки..
     
  19. Larin

    Larin Старожил Пользователь

    Баллы:
    103
    Поставить logblock на сервер и использовать его API. Как я понял, сервер на выживание?(hi-tech там, или магия?) Если это мини игры, то лучше самому написать логгер блоков.
     
  20. mifort

    mifort Новичок Пользователь

    Баллы:
    16
    К примеру 400 уникальных людей в день, каждый идет в шахту и добывает 10 стаков руды в день, что выходит 256000 руды в день или около 7кк за месяц, за год работы сервера это число приблизится к 100кк.


    Ну так хранить - не очень, можно использовать байтовую запись в файл и хранить все int;byte;int, тем самым на одну руду уйдет всегда 9 байт, а если мир меньше 32к блоков то можно использовать short;byte;short, уменьшив количество байт до 5. Все дело не в занимаемой памяти, ну точнее не только в ней, если у тебя наберется хотя бы 10кк сломанной руды ты будешь выполнять поиск по координатам долго, около секунды.
     
  21. baksovic111

    baksovic111 Активный участник Пользователь

    Баллы:
    88
    Skype:
    Baksovic2
    Имя в Minecraft:
    Baksovic
    В любом случае это лучше чем чекать блок из Базы данных или уж тем более конфига..
    Тем более это дело можно выполнять в отдельном потоке не нагружая главный поток.
     
Статус темы:
Закрыта.

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