HotBar #2

Версия Minecraft
1.7.10
1,417
44
594
Добрый день.
Подскажите, пожалуйста, как можно создать что-то на подобии второго горячего инвентаря.
Как создать свой кастомный инвентарь - знаю, но как можно вытянуть из него строчку, как это делает майнкрафт, и взаимодействовать с ней.
Глядел в моде Multi-Hotbar но что-то не очень понял
 
1,976
68
220
Если хочешь расширить хотбар - просто замени инвентарь на свой и вкинь хуки в места выбора слота, чтобы они включали и твой.
Если же тебе нужен отдельный инвентарь, из которого можно выбирать предметы не прокруткой, то просто сделай его, добавь игроку каким-нибудь IEEP'ом и юзай нужными кейбиндами. Профит
 
7,099
324
1,510
Можно просто сетать слоты для переключения
 
1,417
44
594
@Vmani что? Что бы получить сорцы мода не надо в гугле писать "open source". Свои 5 копеек, пожалуйста, не ставь куда попало...

Можно просто сетать слоты для переключения
Мне интересно, а как именно происходит вывод на экран слотов и содержимое в них
 
212
8
29
@Vmani что? Что бы получить сорцы мода не надо в гугле писать "open source". Свои 5 копеек, пожалуйста, не ставь куда попало...


Мне интересно, а как именно происходит вывод на экран слотов и содержимое в них
Как рендерить слоты могу кинуть, а вот как их юзать, я хз.
 
212
8
29
Java:
protected void renderInventorySlot(int p_73832_1_, int p_73832_2_, int p_73832_3_, float p_73832_4_) {
    ItemStack itemstack = this.mc.thePlayer.inventory.mainInventory[p_73832_1_];
    if(itemstack != null) {
       float f1 = (float)itemstack.animationsToGo - p_73832_4_;
       if(f1 > 0.0F) {
          GL11.glPushMatrix();
          float f2 = 1.0F + f1 / 5.0F;
          GL11.glTranslatef((float)(p_73832_2_ + 8), (float)(p_73832_3_ + 12), 0.0F);
          GL11.glScalef(1.0F / f2, (f2 + 1.0F) / 2.0F, 1.0F);
          GL11.glTranslatef((float)(-(p_73832_2_ + 8)), (float)(-(p_73832_3_ + 12)), 0.0F);
       }

       itemRenderer.renderItemIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), itemstack, p_73832_2_, p_73832_3_);
       if(f1 > 0.0F) {
          GL11.glPopMatrix();
       }

       itemRenderer.renderItemOverlayIntoGUI(this.mc.fontRenderer, this.mc.getTextureManager(), itemstack, p_73832_2_, p_73832_3_);
    }

 }
Код:
     // glPushMatrix или glPopMatrix могут быть лишними
  private void drawHotBar(RenderGameOverlayEvent e) {
              if(e.type == ElementType.ALL) {
                 GL11.glPushMatrix();
                      GL11.glPushMatrix();
                 GL11.glTranslatef((float)(e.resolution.getScaledWidth() / 2 - 110), (float)(e.resolution.getScaledHeight() - 19), 0.0F);
                 Tessellator t = Tessellator.instance;
                 GL11.glBindTexture(3553, TextureMap.get("slot1").getGlTextureId());//Текстура
                 GL11.glEnable(3042);
                 if(this.mc.thePlayer.inventory.currentItem >= 0 && this.mc.thePlayer.inventory.currentItem <= 9) {
                      GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                     RenderHelper.disableStandardItemLighting();
                    t.startDrawingQuads();
                    t.addVertexWithUV((double)(-2 + this.mc.thePlayer.inventory.currentItem * 18), 0.0D, 0.0D, 0.0D, 0.0D);
                    t.addVertexWithUV((double)(-2 + this.mc.thePlayer.inventory.currentItem * 18), 16.0D, 0.0D, 0.0D, 1.0D);
                    t.addVertexWithUV((double)(16 + this.mc.thePlayer.inventory.currentItem * 18), 16.0D, 0.0D, 1.0D, 1.0D);
                    t.addVertexWithUV((double)(16 + this.mc.thePlayer.inventory.currentItem * 18), 0.0D, 0.0D, 1.0D, 0.0D);
                    t.draw();
                        GL11.glPopMatrix();
                 }

                     GL11.glPushMatrix();
                 for(int i = 0; i < 9; ++i) {
                    GL11.glBindTexture(3553, TextureMap.get("slot").getGlTextureId());
                    GL11.glEnable(3042);
                    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                    RenderHelper.disableStandardItemLighting();
                    t.startDrawingQuads();
                    t.addVertexWithUV((double)(-2 + i * 18), 0.0D, 0.0D, 0.0D, 0.0D);
                    t.addVertexWithUV((double)(-2 + i * 18), 18.0D, 0.0D, 0.0D, 1.0D);
                    t.addVertexWithUV((double)(16 + i * 18), 18.0D, 0.0D, 1.0D, 1.0D);
                    t.addVertexWithUV((double)(16 + i * 18), 0.0D, 0.0D, 1.0D, 0.0D);
                    t.draw();
                    this.renderInventorySlot(i, i * 18, 0, 0.0F);
                 }
                 GL11.glPopMatrix();
                 GL11.glPushMatrix();
                 for(int i = 9; i < 18; ++i) {
                  GL11.glTranslatef((float)(e.resolution.getScaledWidth() / 2 - 110), (float)(e.resolution.getScaledHeight() - 40), 0.0F);
                    GL11.glBindTexture(3553, TextureMap.get("slot").getGlTextureId());
                    GL11.glEnable(3042);
                    GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                    RenderHelper.disableStandardItemLighting();
                    t.startDrawingQuads();
                    t.addVertexWithUV((double)(-2 + i * 18), 0.0D, 0.0D, 0.0D, 0.0D);
                    t.addVertexWithUV((double)(-2 + i * 18), 18.0D, 0.0D, 0.0D, 1.0D);
                    t.addVertexWithUV((double)(16 + i * 18), 18.0D, 0.0D, 1.0D, 1.0D);
                    t.addVertexWithUV((double)(16 + i * 18), 0.0D, 0.0D, 1.0D, 0.0D);
                    t.draw();
                    this.renderInventorySlot(i, i * 18, 0, 0.0F);
                    GL11.glPopMatrix();
                 }

                 RenderHelper.disableStandardItemLighting();
                 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
                 GL11.glPopMatrix();
              }

           }
 
7,099
324
1,510
Последнее редактирование:
Как вариант можешь декомпильнуть данный мод: Dual Hotbar, и в нем посмотреть как сделана реализация(декомпилил, там все вполне понятно).
А если вкратце – смена слотов происходит двойным нажатием клавиш(если не ошибаюсь это тоже можно менять в настройках) 1-9 и еще есть возможность менять количество хотбаров(4 максимум) ибо все предметы в хотбар берутся с инвентаря.
 
Сверху