Взаимодействие с ближайшими блоками (1.7.10)

4,167
68
693
Подскажите пожалуйста, как сделать, что бы блок взаимодействовал с прилегающими к нему блоками?
Например: таяние льда, если рядом лава или впитывание воды, если рядом губка.

Может быть, где-нибудь уже есть туторы по этому вопросу?

Спасибо.
 
Так, окэ... Я б с удовольствием, но с eclipse-ом знаком 3-й день только ) Подскажите, как добраться до огня? Когда просматриваю файлы самого МК, вижу там только кучу классов и названием из 3-х букв...
 
Напиши, типо объявление экземпляра огня, выдели класс, пкм, открыть объявление(Open Declaration). Потом созданное поле в своем классе удали...
 
Перевод: напиши Blocks.Fire, зажми ctrl, нажми на Fire и перейдёшь к нему, а строку удали потом.
 
О! Нашёл такую вот конструкцию:

public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
   {
    super.randomDisplayTick(par1World, par2, par3, par4, par5Random);

    if (par5Random.nextInt(10) == 0)
    {
if(par1World.getBlock(par2, par3+1, par4) == Blocks.ice)
{
       par1World.setBlock(par2, par3+1, par4, Blocks.water);
       }
    }

Превращает лёд, находящийся сверху от блока в воду...
Как я понял, если пробить все координаты вокруг, то все указанные блоки, если это лёд, будут таять.

Строка if (par5Random.nextInt(10) == 0), по всей видимости, задаёт длительность этого самого рандома... То есть без неё лёд таял практически мгновенно. С ней, через определённый промежуток времени (разный).
Как она работает тоже не разобрался. Может, кто подскажет?

НО! Беда в следующем:
Что с этой строкой, что без неё, стоит один раз льду растаять и на его место уже нельзя поставить другой блок. Он тут же заменяется сперва льдом, а потом и водой...
Более того, эта вода не растекается, и на неё нельзя встать (начинаешь дрожать).
Такое ощущение, что создаётся постоянный цикл обновлений блока... Как это исправить - ХЗ!

Очень хелп!
Спасибо )
 
Ибо randomDisplayTick - клиентский метод и для такого его нельзя использовать.
random.nextInt(x) генерит рандомное число от 0 до x.
 
А если так?
public void updateTick(World par1World, int par2, int par3, int par4, Random par5Random)
{

if(par1World.getBlock(par2, par3+1, par4) == Blocks.ice)
{
       par1World.setBlock(par2, par3+1, par4, Blocks.water);
       }
    }

Всё работает, но оооочень медленно... Как бы заставить блок обновляться быстрее?
 
А нет, часом, какого-нибудь метода типа onNeighborBlockUpdate ??? Чтобы, когда обновляются ближайшие соседи данного блока и если эти соседи - лёд, он заменял их на воду. Очень облегчило бы ситуацию.

Просто, я боюсь, что если задать setTickRate для всех этих блоков, это начнёт грузить игру... Может быть, я и ошибаюсь.

И ещё, есть ли где-нибудь полный список рабочих методов с описанием функций?
 
тоже интересует этот вопрос.Хочу к каждому блоку из майна дописать параметр что то вроде огня.Только он будет не воспламлять блоки а заменять.Никто не знает как дописать свойство?
Материал будет иметь те же свойства.Ну например есть материал stone,wood и т.д.А я создаю материал mod_stone и он будет иметь те же свойства что и stone.С материалом я как то сам "наколдую" а вот как переназначить материал блокам из ванильки это я хз.Думаю автор в том же направлении работает,просто цели разные
[merge_posts_bbcode]Добавлено: 31.03.2015 20:29:03[/merge_posts_bbcode]

может я не совсем понял: это блоки реагируют на то есть ли рядом блок огня и превращаются в другой блок или огонь ищет блоки и сам их превращает?
Liahim написал(а):
О! Нашёл такую вот конструкцию:

public void randomDisplayTick(World par1World, int par2, int par3, int par4, Random par5Random)
   {
    super.randomDisplayTick(par1World, par2, par3, par4, par5Random);

    if (par5Random.nextInt(10) == 0)
    {
if(par1World.getBlock(par2, par3+1, par4) == Blocks.ice)
{
        par1World.setBlock(par2, par3+1, par4, Blocks.water);
        }
    }

Превращает лёд, находящийся сверху от блока в воду...
Как я понял, если пробить все координаты вокруг, то все указанные блоки, если это лёд, будут таять.

Строка if (par5Random.nextInt(10) == 0), по всей видимости, задаёт длительность этого самого рандома... То есть без неё лёд таял практически мгновенно. С ней, через определённый промежуток времени (разный).
Как она работает тоже не разобрался. Может, кто подскажет?

НО! Беда в следующем:
Что с этой строкой, что без неё, стоит один раз льду растаять и на его место уже нельзя поставить другой блок. Он тут же заменяется сперва льдом, а потом и водой...
Более того, эта вода не растекается, и на неё нельзя встать (начинаешь дрожать).
Такое ощущение, что создаётся постоянный цикл обновлений блока... Как это исправить - ХЗ!

Очень хелп!
Спасибо )
 
Задрал со своими цитатами. Во-первых, цитаты ставятся над ответом, а не под. Во-вторых, цитировать большие сообщения не нужно.
 
Назад
Сверху