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

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

Discussion in 'Разработка плагинов для новичков' started by Kill1001, May 18, 2013.

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

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

    Trophy Points:
    63
    Есть некий блок (Любой)
    У него есть свойство
    Code:
    block.isBlockPowered();
    Которое показывает излучает ли блок сигнал.
    Если на нем рычаг и включен то true иначе false.
    Но мне понадобилось сделать так что бы блок излучал и без рычага. Возможно ли это?
    И если да то как?
    Пробовал
    Code:
            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;
                        }
                    }
                }
            }
    И пробовал
    Code:
      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);
    Но это не помогает.
    В первом случае я ищу редстоун блоки во круг и пытаюсь их сделать активными. Во втором сделать событие редстоуна на сам блок.
    В третьем решить проблему в лоб.
    Code:
    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 Активный участник

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

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

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

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

    Trophy Points:
    63
    Пробовал поставить id 55:14 но вот в чем проблема, она не горит. Если она в цепи горящей то она становится ярче, но все рядом все равно темнее.
    А Если в цепи выключенной то она да же не загорается.[DOUBLEPOST=1368884943,1368884843][/DOUBLEPOST]Сей час пока что так. Но это костыль.
    Code:
        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 Старожил Пользователь

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

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

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

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

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

Share This Page