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

Помогите Как заставить блок излучать сигнал?

Тема в разделе "Разработка плагинов для новичков", создана пользователем Kill1001, 18 май 2013.

  1. Автор темы
    Kill1001

    Kill1001 Активный участник

    Баллы:
    63
    Есть некий блок (Любой)
    У него есть свойство
    Код:
    block.isBlockPowered();
    Которое показывает излучает ли блок сигнал.
    Если на нем рычаг и включен то true иначе false.
    Но мне понадобилось сделать так что бы блок излучал и без рычага. Возможно ли это?
    И если да то как?
    Пробовал
    Код:
            for (int i = -1; i <= 1; i++)
            {
                for (int j = -1; j <= 1; j++)
                {
                    for (int k = -1; k <= 1; k++)
                    {
                        LOG.info(block.getRelative(i, j, k).getType().name());
                        switch (block.getRelative(i, j, k).getType())
                        {
                            case LEVER:
                            case REDSTONE:
                            case DISPENSER:
                            case POWERED_RAIL:
                            case REDSTONE_LAMP_OFF:
                            case REDSTONE_WIRE:
                            {
                                block.getRelative(i, j, k).setData((byte) 8, true);
                            }
                            break;
                        }
                    }
                }
            }
    И пробовал
    Код:
      int i1 = ((CraftWorld) block.getWorld()).getHandle().getData(block.getX(), block.getY(), block.getZ());
    int j1 = i1 & 7;
    int k1 = 8 - (i1 & 8);
    // CraftBukkit start - Interact Lever
    Block block1 = block.getWorld().getBlockAt(block.getX(), block.getY(), block.getZ());
    int old = (k1 != 8) ? 15 : 0;
    int current = (k1 == 8) ? 15 : 0;
    BlockRedstoneEvent eventRedstone = new BlockRedstoneEvent(block1, old, current);
    ((CraftWorld) block1.getWorld()).getHandle().getServer().getPluginManager().callEvent(eventRedstone);
    ((CraftWorld) block.getWorld()).getHandle().setData(block.getX(), block.getY(), block.getZ(), j1 + k1, 3);
    Но это не помогает.
    В первом случае я ищу редстоун блоки во круг и пытаюсь их сделать активными. Во втором сделать событие редстоуна на сам блок.
    В третьем решить проблему в лоб.
    Код:
    net.minecraft.server.v1_5_R2.Block.byId[block.getTypeId()].interact(((CraftWorld)block.getWorld()).getHandle(), block.getX(), block.getY(), block.getZ(), ((CraftPlayer)player).getHandle(), 12, block.getX(), block.getY(), block.getZ());
    И всё безуспешно.
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    Kill1001

    Kill1001 Активный участник

    Баллы:
    63
    Печаль тоска. То есть только ставить факела :( ???
     
  4. vvswarhead

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

    Баллы:
    173
    а нельзя ли просто поставить пыль активироманного редстоуна , на месте контакта
     
  5. Автор темы
    Kill1001

    Kill1001 Активный участник

    Баллы:
    63
    Пробовал поставить id 55:14 но вот в чем проблема, она не горит. Если она в цепи горящей то она становится ярче, но все рядом все равно темнее.
    А Если в цепи выключенной то она да же не загорается.[DOUBLEPOST=1368884943,1368884843][/DOUBLEPOST]Сей час пока что так. Но это костыль.
    Код:
        public void poweredEnable(Block block)
        {
                    for (int i = -1; i <= 1; i++)
            {
                for (int k = -1; k <= 1; k++)
                {
                    switch (block.getRelative(i, 0, k).getType())
                    {
                        case REDSTONE_WIRE:
                        {
                            block.getRelative(i, 0, k).setType(Material.REDSTONE_TORCH_ON);
                        }
                        break;
                        case SIGN:
                        case SIGN_POST:
                        case WALL_SIGN:
                        {
                            switch (block.getRelative(i, 0, k).getData())
                            {
                                case (byte) 2:
                                    block.getRelative(i, 0, k - 1).setType(Material.REDSTONE_TORCH_ON);
                                    break;
                                case (byte) 3:
                                    block.getRelative(i, 0, k + 1).setType(Material.REDSTONE_TORCH_ON);
                                    break;
                                case (byte) 4:
                                    block.getRelative(i - 1, 0, k).setType(Material.REDSTONE_TORCH_ON);
                                    break;
                                case (byte) 5:
                                    block.getRelative(i + 1, 0, k).setType(Material.REDSTONE_TORCH_ON);
                                    break;
                            }
                        }
                    }
                }
            }
        }
        
     
  6. Jampire

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

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    http://www.rubukkit.org/threads/Редстоун-из-обычного-блока.35875/
    Неужели так трудно увидеть тему которая была буквально вчера?)

    А в друг словах - можно заставить клиент думать что стоит табличка, а на самом деле стоит блок редстоуна. Хранить список фейковых блоков и при рендере всем выдавать фейки.

    Прямого решения видимо нет и пока не будет.
     
  7. Автор темы
    Kill1001

    Kill1001 Активный участник

    Баллы:
    63
    Чел я видел, но она закрыта. Так что создал новую.
    Так как чёткого ответа я там не увидел.
    А на счет махинаций м пакетами итд, у меня не вариант так как на серваке потом идёт работа с самим блоком. Да и геморно это. Если других вариантов нету, то просто буду заменять ред блоками.
     

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