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

Помогите IC2 EX 397build. Дюп с помощью ключа.

Тема в разделе "Помощь", создана пользователем GufRip, 28 дек 2014.

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

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

    Баллы:
    68
    Имя в Minecraft:
    GufRip
    Дорогие форумчане, столкнулся вчера с таким дюпом. Работает на версии ic2 ex 397 билда(последний для 1.6.4)
    Работает в одиночке и на сервере. Другие моды тут точно не при делах, ибо даже на чистом 397 билде оно дюпает.

    Может кто еще сталкивался с такой проблемой, или уже решали как фиксить. Короче, жду советов мудрых.

    PS. Cкрины с инструкцией.
    ScreenShot1.png ScreenShot2.png ScreenShot3.png ScreenShot5.png ScreenShot7.png
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    GufRip

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

    Баллы:
    68
    Имя в Minecraft:
    GufRip
    Вверх
     
  4. troy

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

    Баллы:
    78
    Имя в Minecraft:
    Troy
    Тоже интересен фикс)[DOUBLEPOST=1419951628,1419843518][/DOUBLEPOST]
    Уп ДЮП рабочий и уже проверил на нескольких крупных проектах работает как часы)
     
  5. SkyPrince

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

    Баллы:
    88
    Skype:
    skyprince-2014
    Имя в Minecraft:
    SkyPrince
    Ну что? Пошли ломать экономику конкурентов?

    На 658 (1.7.10) билде не пашет такое.
     
  6. troy

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

    Баллы:
    78
    Имя в Minecraft:
    Troy
    No Я не такой просто интересно) И заодно узнал пофикшен ли у них этот дюп. оказалось что нет)
     
  7. SkyPrince

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

    Баллы:
    88
    Skype:
    skyprince-2014
    Имя в Minecraft:
    SkyPrince
    Я шучу конечно. Хорошо, что проверил, нужно фикс делать.
     
  8. troy

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

    Баллы:
    78
    Имя в Minecraft:
    Troy
    Вверх все еще есть данный дюп
     
  9. DemiuS

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

    Баллы:
    103
    Skype:
    demius.sanya
    Имя в Minecraft:
    DemiuS
    Дюп связан походу с позицией блока, всмысле IC предметы в блоке запоминает, ключём свентил, а предмет всё еще сохранён типо в этом блоке. Тут либо глобально фиксить, либо ключ переделать)
     
  10. troy

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

    Баллы:
    78
    Имя в Minecraft:
    Troy
    кстати на экскалибур крафт(не реклама) уже как то пофиксили)
     
  11. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    В ItemToolWrench.java перед (именно перед, а не после) world.setBlockToAir() добавляете world.removeBlockTileEntity() - вот и вся суть фикса.
     
  12. troy

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

    Баллы:
    78
    Имя в Minecraft:
    Troy
    Сори за нубскую просьбу но вы не могли бы подробнее описать, или выложить готовый фикс
     
  13. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Хрень в том что setBlockToAir() должен сам удалять тайлэнтитю, но этого не происходит. И вот в эту сторону надо копать, иначе этот баг ещё где-нибудь вылезет.
     
  14. troy

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

    Баллы:
    78
    Имя в Minecraft:
    Troy
     
  15. Intern0

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

    Баллы:
    153
    Имя в Minecraft:
    Intern0
    http://rghost.ru/60112781

    Буду благодарен тому кто скомпилит, к сожалению у самого полетел эклипс.[DOUBLEPOST=1420298730,1420283149][/DOUBLEPOST]
    Дело не в world.removeBlockTileEntity(), дюп все равно работает.
     
  16. Konstantin773

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

    Баллы:
    153
    Skype:
    Konstantin77313
    Имя в Minecraft:
    K773
    Ясен пень. Нужно еще подчищать слоты у TileEntity.[DOUBLEPOST=1420299592][/DOUBLEPOST]
    XD, он много где вылез. В IC2 уже 4 случая нашел, в GraviSuite один, в BuildCraft 2.
     
  17. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Сука, как я ненавижу быть правым.
    Вот в том то и говно понимаешь, тупо удалять тайлэнтити и чистить ей слоты это всё равно что пытаться выкачивать воду из пробитой лодки, поможет, но ненадолго.
    Надо выяснить саму причину. Тем более что это этот баг не работает на 1.7.10, а значит проблема где-то в ядре 1.6.4. Впрочем, это уже не моя забота.
     
  18. Konstantin773

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

    Баллы:
    153
    Skype:
    Konstantin77313
    Имя в Minecraft:
    K773
    Дело в том, что если блок устанавливается на ID 0, то не происходит создание нового TileEntity.
    Метод removeTileEntity только вызывает метод invalidate у TileEntity.
    А при установке блока если ядро находит TileEntity с тем же ID и Damage, то оно цепляет его и вызывает метод обновления.

    Вывод: при setBlock надо принудительно вызывать setBlockTileEntity
     
  19. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Понятно, я то теперь с ядром 1.8 работаю, и там тайлэнтити удаляется если айди блока меняется, да и в 1.7.10 собственно тоже.
    Интересно только кто в этом виноват, моджанги или форг.[DOUBLEPOST=1420301641,1420301280][/DOUBLEPOST]Вот же бля
    Код:
            int xz = z << 4 | x;
    
            if (y >= this.precipitationHeightMap[xz] - 1)
            {
                this.precipitationHeightMap[xz] = -999;
            }
    
            int highestY = this.heightMap[xz];
            int oldBlockId = this.getBlockID(x, y, z);
            int oldData = this.getBlockMetadata(x, y, z);
    
            if (oldBlockId == blockID && oldData == data)
            {
                return false;
            }
            else
            {
                ExtendedBlockStorage storage = this.storageArrays[y >> 4];
                boolean var11 = false;
    
                if (storage == null)
                {
                    if (blockID == 0)
                    {
                        return false;
                    }
    
                    storage = this.storageArrays[y >> 4] = new ExtendedBlockStorage(y >> 4 << 4, !this.worldObj.provider.hasNoSky);
                    var11 = y >= highestY;
                }
    
                int worldPosX = this.xPosition * 16 + x;
                int worldPosZ = this.zPosition * 16 + z;
    
                if (oldBlockId != 0 && !this.worldObj.isRemote)
                {
                    Block.blocksList[oldBlockId].onBlockPreDestroy(this.worldObj, worldPosX, y, worldPosZ, oldData);
                }
    
                storage.setExtBlockID(x, y & 15, z, blockID);
    
                if (oldBlockId != 0)
                {
                    if (!this.worldObj.isRemote)
                    {
                        Block.blocksList[oldBlockId].breakBlock(this.worldObj, worldPosX, y, worldPosZ, oldBlockId, oldData);
                    }
                    else if (Block.blocksList[oldBlockId] instanceof ITileEntityProvider && oldBlockId != blockID)
                    {
                        this.worldObj.removeBlockTileEntity(worldPosX, y, worldPosZ);
                    }
                }
    
               ...
    
    [DOUBLEPOST=1420301913][/DOUBLEPOST]Короче вот в чём говно, при удалении блока на сервере у каждого блока вызывается метод breakBlock который собственно и удаляет тайлэнтитю.
    Но разработчики модов как обычно просрали все полимеры и тайлэнтитю не удаляют. А автоматически это сервер не делает.
     
  20. Intern0

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

    Баллы:
    153
    Имя в Minecraft:
    Intern0
    Возможно это как-то внедрить и одним разом фиксануть?
     
  21. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Skype:
    RikkiLooh
    Имя в Minecraft:
    RubukkitDniwe
    И мы наслаждаем лагами. :mad:
     

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