10 декабря 2019 года планируется обновление программного обеспечения сайта, MediaWiki, до версии 1.33. В ходе обновления сайт будет временно доступен только для чтения. Подробная информация об этом обновлении доступна на Справочной вики Gamepedia.

We are currently performing an upgrade to our software. This upgrade will bring MediaWiki from version 1.31 to 1.33. While the upgrade is being performed on your wiki it will be in read-only mode. For more information check here.

Обсуждение:Создание модификаций с помощью Forge

Материал из Minecraft Wiki
Перейти к: навигация, поиск

Заполнение статьи[править код]

А почему бы вам не взять и не начать заполнять эту статью как статью с модлоадером! А то она как бы пустая немного...

Спасибо автору![править код]

С вашим руководством для 1.6.4 я сделал свой первый мод - RecipesPlus.
На 1.7.2 я уже сам портировал :)
С уважением, тот самый DragonX24 (обсуждение) 11:03, 1 марта 2014 (UTC)

Поздравляю!!! Круто. Если хотите, создайте в подпространстве страницу о нём со всеми рецептами, как я сделал. --C уважением, PlatonCrafter. 11:51, 1 марта 2014 (UTC)

Туториалы на 1.6+[править код]

Я один не понимаю, зачем писать туториал для 1.6+ когда уже можно создавать туториалы для 1.7+? --C уважением, PlatonCrafter. 17:54, 4 августа 2014 (UTC)

Да, уже рекомендованный Forge на 1.7.10 вышел, а какой-то аноним решил написать руководство о генерации руды и собственных моделях блоков на 1.6. Кстати, PlatonCrafter, не видел ни где хорошего руководства по Techne? Я сам знаю как им пользоваться, просто писать лень. --Dand0 (обс.) 07:44, 5 августа 2014 (UTC)
Ну, пусть развлекается. Всё равно его туториал никому кроме него не нужен. Нет, не видел. Сам про такое писать не буду, полная фигня, возможностей почти ноль. Я щас пытаюсь научится в obj-формате модели загрузить. Чужие загрузил, а свои не могу сделать даже, как надо и с ними всё вылетает. Не знаете куда копать? --C уважением, PlatonCrafter. 20:05, 5 августа 2014 (UTC)
Ну, у Techne возможности такие же, что и у рендеринга Minecraft. Насчёт .obj моделей не знаю, их практически никто не делает в Minecraft, только создание модели в Techne и потом конвертация в .java. Хотя, знаю статью на 1.5.2, покопайтесь в пакете net.minecraftforge.client.model и его подпакетах. В исходниках EE3 покопайся. Вот, кстати, статья. --Dand0 (обс.) 04:24, 6 августа 2014 (UTC)
Вот что делает EE3: в главном файле мода в метод с аргументами FMLInitializationEvent event добавь такой код:
proxy.registerModels; //метод назови как хочешь

В CommonProxy добавь пустой абстрактный не возвращающий ничего метод (я назвал его registerModels) В ClientProxy добавь метод registerModels, объяви статичное числовое поле и добавь такой код

Поле = RenderingRegistry.getNextAvailableRenderId();

MinecraftForgeClient.registerItemRenderer(Item.getItemFromBlock(ФайлМода.блок), new ItemRendererКласс()); //для блока в руках

ClientRegistry.bindTileEntitySpecialRenderer(TileEntityБлок.class, new TileEntityRendererБлок()); //для блока в мире. Обязателен Tile Entity

Создай новый класс ModelБлок и сделай классу аннотацию @SideOnly(Side.CLIENT) и этот код

private IModelCustom modelБлок;
public static final ResourceLocation БЛОК = ResourceLocationHelper.getResourceLocation("models/файл.obj"); //obj файл должен находиться в assets/idмода/models (не textures!)

    public ModelБлок()
    {
        modelБлок = AdvancedModelLoader.loadModel(БЛОК);
    }

    public void render()
    {
        modelБлок.renderPart("Base");
    }

Проверяй. Я расчитывал, что ты хочешь специальный рендер для блока в руке или в мире. Если для предмета, скажи. Извини, что на "ты". --Dand0 (обс.) 07:19, 6 августа 2014 (UTC) Забыл код для рендера в мире :0 Создай класс TileEntityRenderБлок и сделай его суперкласс TileEntitySpecialRenderer и добавь классу аннотацию @SideOnly(Side.CLIENT). Вот сам код:

private final ModelAludel modelAludel = new ModelAludel();
    private final RenderItem customRenderItem;

    public TileEntityRendererAludel()
    {
        customRenderItem = new RenderItem()
        {
            @Override
            public boolean shouldBob()
            {
                return false;
            }
        };

        customRenderItem.setRenderManager(RenderManager.instance);
    }

    @Override
    public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float tick)
    {
        if (tileEntity instanceof TileEntityAludel)
        {
            TileEntityAludel tileEntityAludel = (TileEntityAludel) tileEntity;

            GL11.glPushMatrix();

            // Scale, Translate, Rotate
            scaleTranslateRotate(x, y, z, tileEntityAludel.getOrientation());

            // Текстура
            this.bindTexture(Textures.Model.ALUDEL);

            // Рендер
            modelAludel.render();

            GL11.glPopMatrix();

            /**
             * Render the ghost item inside of the Aludel, slowly spinning
             */
            GL11.glPushMatrix();

            TileEntity tileGlassBell = tileEntityAludel.getWorldObj().getTileEntity(tileEntityAludel.xCoord, tileEntityAludel.yCoord + 1, tileEntityAludel.zCoord);

            if (tileGlassBell instanceof TileEntityGlassBell)
            {
                if (tileEntityAludel.outputItemStack != null)
                {
                    float scaleFactor = getGhostItemScaleFactor(tileEntityAludel.outputItemStack);
                    float rotationAngle = (float) (720.0 * (System.currentTimeMillis() & 0x3FFFL) / 0x3FFFL);

                    EntityItem ghostEntityItem = new EntityItem(tileEntityAludel.getWorldObj());
                    ghostEntityItem.hoverStart = 0.0F;
                    ghostEntityItem.setEntityItemStack(tileEntityAludel.outputItemStack);

                    GL11.glTranslatef((float) x + 0.5F, (float) y + 1.25F, (float) z + 0.5F);
                    GL11.glScalef(scaleFactor, scaleFactor, scaleFactor);
                    GL11.glRotatef(rotationAngle, 0.0F, 1.0F, 0.0F);

                    customRenderItem.doRender(ghostEntityItem, 0, 0, 0, 0, 0);
                }
            }

            GL11.glPopMatrix();
        }
    }

    private void scaleTranslateRotate(double x, double y, double z, ForgeDirection orientation) //Тут всё с OpenGL
    {
        if (orientation == ForgeDirection.NORTH)
        {
            GL11.glTranslated(x + 1, y, z);
            GL11.glRotatef(180F, 0F, 1F, 0F);
            GL11.glRotatef(-90F, 1F, 0F, 0F);
        }
        else if (orientation == ForgeDirection.EAST)
        {
            GL11.glTranslated(x + 1, y, z + 1);
            GL11.glRotatef(90F, 0F, 1F, 0F);
            GL11.glRotatef(-90F, 1F, 0F, 0F);
        }
        else if (orientation == ForgeDirection.SOUTH)
        {
            GL11.glTranslated(x, y, z + 1);
            GL11.glRotatef(0F, 0F, 1F, 0F);
            GL11.glRotatef(-90F, 1F, 0F, 0F);
        }
        else if (orientation == ForgeDirection.WEST)
        {
            GL11.glTranslated(x, y, z);
            GL11.glRotatef(-90F, 0F, 1F, 0F);
            GL11.glRotatef(-90F, 1F, 0F, 0F);
        }
    }

    private float getGhostItemScaleFactor(ItemStack itemStack)
    {
        float scaleFactor = 1.0F;

        if (itemStack != null)
        {
            byte numBlocks = 1;
            if (itemStack.stackSize > 1)
            {
                numBlocks = 2;
            }
            else if (itemStack.stackSize > 5)
            {
                numBlocks = 3;
            }
            else if (itemStack.stackSize > 20)
            {
                numBlocks = 4;
            }
            else if (itemStack.stackSize > 40)
            {
                numBlocks = 5;
            }

            if (itemStack.getItem() instanceof ItemBlock)
            {
                switch (numBlocks)
                {
                    case 1:
                        return 0.90F;
                    case 2:
                        return 0.90F;
                    case 3:
                        return 0.90F;
                    case 4:
                        return 0.90F;
                    case 5:
                        return 0.80F;
                    default:
                        return 0.90F;
                }
            }
            else
            {
                switch (numBlocks)
                {
                    case 1:
                        return 0.65F;
                    case 2:
                        return 0.65F;
                    case 3:
                        return 0.65F;
                    case 4:
                        return 0.65F;
                    default:
                        return 0.65F;
                }
            }
        }

        return scaleFactor;

Мне поля заменять лень, думаю сам догадаешься. Ещё раз извини за "ты". −Надеясь, что у вас всё получится,Dand0 (обс.) 07:39, 6 августа 2014 (UTC)

Да не, спасибо, уже почти сам разобрался, точнее узнал откуда ошибка. Мне нужно просто в норм проге эту модель сделать. Код я уже давно наладил. Раз никто obj не пользуется, в чём вы кстати в корне не правы, большинство модов которые я знаю используют obj. Просто в techne даже треугольники нельзя создавать и много еще чего. А с помощью obj можно АБСОЛЮТНО любую модель запихнуть в игру, хоть машину, хоть нано-костюм. Видимо я буду первым, кто напишет на русском туториал по obj. Главное модель сделать, остальное готово. Простите, видимо зря вас побеспокоил. --C уважением, PlatonCrafter. 20:37, 6 августа 2014 (UTC)
Прошу назвать эти моды. Вот я на GitHub зашёл. EE3 - OBJ. BuildCraft - Techne (конвертированный в java). ICBM - .tcn (собственный формат Techne). Electromagnet Coherence -.tcn. BiblioCraft - obj и java (если obj по каким-либо причинам загрузить не получилось, то грузит Techne). Pokemon (сам с ним никогда не играл) - Techne. IC2 - Techne. Ещё раз прошу назвать ваши моды. А вообще, OBJ классно детализированы, мне нравится (но ведь Minecraft не такой). Сейчас последний BiblioCraft запустил и увидел. --Dand0 (обс.) 06:16, 7 августа 2014 (UTC)
Посмотрите любые RPG и магические моды. В электрических используется в основном techne, потому что создаются в основном кубы, разные провода, дробители, экстракторы и прочее кубическое. лично я брал модели из Galacticrafta, они там .obj --C уважением, PlatonCrafter. 19:39, 14 августа 2014 (UTC)
Как вы думаете, моб — это основной урок или дополнительный? --Dand0 (обс.) 06:25, 15 августа 2014 (UTC)
Конечно же, основной! --C уважением, PlatonCrafter. 09:40, 15 августа 2014 (UTC)

Кто нибудь собирается создавать новые руководства?[править код]

Кто нибудь собирается создавать новые руководства? Всегда ваш, Ivan 111 Vasilyevich (обс. | вклад) 07:15, 19 июня 2017 (UTC)

Special:Diff/588960 Qdone два дня назад добавил кое-что. А вообще, за последние несколько лет я не видел, чтобы в где-то на вики задавались вопросы по созданию модов. Не нужно, видимо. --Dand0 (обс.) 07:34, 19 июня 2017 (UTC)