1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Скрыть объявление

Мод [1.7.10] 3D OBJ Armor / 3Д ОБЖ Броня [source] 0.0.2a

Тема в разделе "Модификации клиента", создана пользователем Fr0Le, 20 мар 2020.

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

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

    Баллы:
    66
    Имя в Minecraft:
    Fr0Le
    В этом ресурсе Вы узнаете:
    • Как добавить OBJ модель брони в игру;
    • Как отрендерить модель в инвентаре, руках, когда она одета или дропнута.
    Плюсы:
    - Работает с модом SmartMoving;
    - Добавлено ускорение рендера, спасибо @Dahaka и @timaxa007;
    2020-05-24_22.35.15.png
    2020-05-24_22.36.25.png

    Скачать исходники
    Скачать мод

    Что нам нужно:
    Модель формата *.obj
    obj.png

    Разделение всех элементов модели
    obj2.png

    Текстура формата *.png
    armor.png

    Немного кода:
    Регистрируем нужные ресурсы
    Resources.java
    PHP:
    public class Resources {

       public static final 
    ResourceLocation customArmorTexture = new ResourceLocation(Info.modid"textures/models/armor/customArmorTexture.png");

    }
    Создаем свой новый сет брони
    LoadItemArmor.java
    PHP:
    public static ItemArmor customHelmetcustomBodycustomPantscustomBoots;

       public static 
    ArmorMaterial CUSTOMARMOR;

       public static 
    void registerItems() {
           
    CUSTOMARMOR EnumHelper.addArmorMaterial("ARMOR"100, new int[] {4763}, 0);

           
    customHelmet = new CustomItemArmor.Helmet(LoadItemArmor.CUSTOMARMOR00);
           
    customBody = new CustomItemArmor.Body(LoadItemArmor.CUSTOMARMOR11);
           
    customPants = new CustomItemArmor.Pants(LoadItemArmor.CUSTOMARMOR22);
           
    customBoots = new CustomItemArmor.Boots(LoadItemArmor.CUSTOMARMOR33);

           
    GameRegistry.registerItem(customHelmetcustomHelmet.getUnlocalizedName());
           
    GameRegistry.registerItem(customBodycustomBody.getUnlocalizedName());
           
    GameRegistry.registerItem(customPantscustomPants.getUnlocalizedName());
           
    GameRegistry.registerItem(customBootscustomBoots.getUnlocalizedName());
       }
    Присваиваем пустые текстуры брони и предмета, конкретно там где :null и :textures/items/null.png (на примере нагрудника)
    Armor.java
    PHP:
    public static class Body extends ItemArmor implements customArmorarmorTypeBody {
       public 
    Body(ArmorMaterial armorMaterialint par3int par4) {
           
    super(armorMaterialpar3par4);
           
    this.setCreativeTab(LoadTab.tabArmor);
           
    this.setUnlocalizedName("customBody");
           
    this.setTextureName(Info.modid ":null");
       }

       @
    SideOnly(Side.CLIENT)
       public 
    void addInformation(final ItemStack stack, final EntityPlayer player, final List lineboolean advanced) {
           
    ArmorType.getDefence(linethis.damageReduceAmount);
       }

       @
    SideOnly(Side.CLIENT)
       @
    Override
       
    public String getArmorTexture(ItemStack armorEntity entityint slotString type) {
           return 
    Info.modid ":textures/items/null.png";
       }

    }
    Регистрация рендера предмета
    ClientProxy.java
    PHP:
    public void renderIcons() {
        
    MinecraftForgeClient.registerItemRenderer(LoadItemArmor.customHelmet, new RenderItemArmor.renderItemHelmet());
        
    MinecraftForgeClient.registerItemRenderer(LoadItemArmor.customBody, new RenderItemArmor.renderItemBody());
        
    MinecraftForgeClient.registerItemRenderer(LoadItemArmor.customPants, new RenderItemArmor.renderItemPants());
        
    MinecraftForgeClient.registerItemRenderer(LoadItemArmor.customBoots, new RenderItemArmor.renderItemBoots());     
    }

    public 
    void renderModels() { 
        
    //при условии что все *.obj модели будут иметь одинаковую структуру
        
    for(int i 1<= 1i++) {
            
    String model "";
            
    //тут добавляем название моделей
            
    switch(i) {
            case(
    1):
                
    model "customArmorModel";
            break;
            default:             
                break;
            }

            for(
    int j 1<= 8j++) {
                
    String part "";
                
    //тут добавляем название частей модели
                
    switch(j) {
                case(
    1):
                    
    part "head";
                break;
                case(
    2):
                    
    part "body";
                break;
                case(
    3):
                    
    part "bodyHandLeft";
                break;
                case(
    4):
                    
    part "bodyHandRight";
                break; 
                case(
    5):
                    
    part "legLeft";
                break;
                case(
    6):
                    
    part "legRight";
                break;
                case(
    7):
                    
    part "bootLeft";
                break;
                case(
    8):
                    
    part "bootRight";
                break;
                default:
                    break;
                }

                
    GL11.glCallList(ClientProxy.getRenderPart(modelpart));
            }
        }
    }

    public static 
    int getRenderPart(String modelString partName) {
        if(
    hash.containsKey(model "_" partName))
            return 
    hash.get(model "_" partName);

        
    int displayList GLAllocation.generateDisplayLists(1);
        
    GL11.glNewList(displayListGL11.GL_COMPILE);
        
    AdvancedModelLoader.loadModel(new ResourceLocation(Info.modid"models/armor/" model ".obj")).renderPart(partName);
        
    GL11.glEndList();
        
    hash.put(model "_" partNamedisplayList);
        return 
    displayList;
    }
    Рендер брони в руках, инвентаре, на земле (на примере нагрудника)
    RenderItemArmor.java
    PHP:
    public static class renderItemBody implements IItemRenderer {

       @
    Override
       
    public boolean handleRenderType(ItemStack itemItemRenderType type) {
           return 
    true;
       }

       @
    Override
       
    public boolean shouldUseRenderHelper(ItemRenderType typeItemStack itemItemRendererHelper helper) {
           return 
    true;
       }

       @
    Override
       
    public void renderItem(ItemRenderType typeItemStack itemObject... data) {
           
    setResources(item);

           if (
    type == ItemRenderType.INVENTORY) {
               
    GL11.glPushMatrix();
               
    Minecraft.getMinecraft().renderEngine.bindTexture(texture);
               
    GL11.glTranslatef(0F, -1.75F0F);
               
    GL11.glScalef(0.75F0.75F0.9F);
               
    GL11.glCallList(ClientProxy.getRenderPart(model"body"));
               
    GL11.glCallList(ClientProxy.getRenderPart(model"bodyHandLeft"));
               
    GL11.glCallList(ClientProxy.getRenderPart(model"bodyHandRight"));

               
    GL11.glPopMatrix();
           } else if (
    type == ItemRenderType.EQUIPPED) {
               
    GL11.glPushMatrix();
               
    Minecraft.getMinecraft().renderEngine.bindTexture(texture);
               
    GL11.glTranslatef(-0.25F, -2F0.75F);
               
    GL11.glCallList(ClientProxy.getRenderPart(model"body"));
               
    GL11.glCallList(ClientProxy.getRenderPart(model"bodyHandLeft"));
               
    GL11.glCallList(ClientProxy.getRenderPart(model"bodyHandRight"));
               
    GL11.glPopMatrix();
           } else {
               
    GL11.glPushMatrix();
               
    Minecraft.getMinecraft().renderEngine.bindTexture(texture);
               
    GL11.glTranslatef(0F, -0.5F0F);
               
    GL11.glScalef(0.5F0.5F0.5F);
               
    GL11.glCallList(ClientProxy.getRenderPart(model"body"));
               
    GL11.glCallList(ClientProxy.getRenderPart(model"bodyHandLeft"));
               
    GL11.glCallList(ClientProxy.getRenderPart(model"bodyHandRight"));
               
    GL11.glPopMatrix();
           }
       }
    }
    Рендер в инвентаре
    2020-03-20_13.04.31.png

    Рендер в руках
    obj2.png

    Рендер в руках от 3-го лица
    2020-03-20_13.05.45.png

    Вызов рендера, когда броня одета на игрока
    PlayerRenderHandler.java
    PHP:
    @SubscribeEvent
    public void onPlayerRenderTick(RenderPlayerEvent.Specials.Post event) {
       if(
    event.entityPlayer == null) {
           return;
       }

       
    EntityPlayer player = (EntityPlayerevent.entityLiving;
       if(
    player.getCurrentArmor(3) != nullrenderHelmet.render(playerevent.renderer);
       if(
    player.getCurrentArmor(2) != nullrenderBody.render(playerevent.renderer);
       if(
    player.getCurrentArmor(1) != nullrenderPants.render(playerevent.renderer);
       if(
    player.getCurrentArmor(0) != nullrenderBoots.render(playerevent.renderer);
    }
    Сам рендер, когда броня одета на игрока (на примере нагрудника)
    RenderEquipArmor.java
    PHP:
    public static void renderBody(RenderPlayer renderModelItem equip) {
       
    setResources(equip);

       
    GL11.glPushMatrix();
       
    Minecraft.getMinecraft().renderEngine.bindTexture(texture);
       
    renderModel.modelBipedMain.bipedBody.postRender(0.0625F);
       
    GL11.glRotatef(180.0f1F0F0F);
       
    GL11.glTranslatef(0F, -1.51F0.0F);
       
    GL11.glScalef(0.51F0.51F0.51F);
       
    GL11.glCallList(ClientProxy.getRenderPart(model"body"));
       
    GL11.glPopMatrix();

       
    GL11.glPushMatrix();
       
    Minecraft.getMinecraft().renderEngine.bindTexture(texture);
       
    renderModel.modelBipedMain.bipedLeftArm.postRender(0.0625F);
       
    GL11.glRotatef(180.0f1F0F0F);
       
    GL11.glTranslatef(-.32F, -1.4F0F);
       
    GL11.glScalef(0.51F0.51F0.51F);
       
    GL11.glCallList(ClientProxy.getRenderPart(model"bodyHandLeft"));
       
    GL11.glPopMatrix();

       
    GL11.glPushMatrix();
       
    Minecraft.getMinecraft().renderEngine.bindTexture(texture);
       
    renderModel.modelBipedMain.bipedRightArm.postRender(0.0625F);
       
    GL11.glRotatef(180.0f1F0F0F);
       
    GL11.glTranslatef(.32F, -1.4F0F);
       
    GL11.glScalef(0.51F0.51F0.51F);
       
    GL11.glCallList(ClientProxy.getRenderPart(model"bodyHandRight"));
       
    GL11.glPopMatrix();
    }
    Результат:
    ico.png
     

    Вложения:

    Последнее редактирование: 18 июн 2020
  2. Быстрая раскрутка сервера Minecraft
  3. Автор темы
    Fr0Le

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

    Баллы:
    66
    Имя в Minecraft:
    Fr0Le
    Обновление 0.0.2
    Добавления:

    • Добавлено ускорение рендера, спасибо @Dahaka и @timaxa007;
    2020-05-24_22.35.15.png
    2020-05-24_22.36.25.png
     

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