[Гайд] Бронь с моделью 1.7.10

329
13
wilah написал(а):
Неа, просто всё это писать не рационально. *ко-ко-ко, сделай лучше*
Хочешь писать плагины - учи Bukkit API.
Хочешь писать моды - учи Forge API.
Хочешь писать дополнения для IC2 - учи его API.
Хочешь красивую анимацию - учи Render Player API.

- "Ко-ко-ко, чтобы сделать красиво надо выучить больше разных API".
- Нужно больше API?! Серьезно? А вот хер! Дайте мне МЕНЬШЕ API! Я хочу писать так, чтобы не думать потом:

- а вдруг я там метод забыл
- а вдруг я аргумент не тот вставил
- а вдруг документация устарела
- а вдруг две API между собой конфликтуют
- в вдруг API сделает не то, что я от него хотел
- а вдруг в API баг
- а вдруг не то
- а вдруг не так
- а вдруг...

/me кончил.
 
1,137
5
3
Твоё дело. Но такое апи может быть стандартом других модах. И все это "а вдруг" - абсурд, такого не может быть(ну если только айкью меньше 100). Не нравится - пиши свой апи для себя
 
1,470
19
189
В ClientProxy
Код:
The constructor StarsetModel(float) is undefined
И 
Код:
The method getArmorModel(int) of type ClientProxy must override or implement a supertype method
 
212
0
Итак, пришло время править баги - шифт, лук, предмет в руке заставляют модель рендериться не правильно, а так, будто этого не происходить. 
Решение в getArmorModel():
Код:
model.isSneak = entityLiving.isSneaking();
model.isRiding = entityLiving.isRiding();
model.heldItemRight = (((EntityPlayer) entityLiving).getCurrentEquippedItem() != null && ((EntityPlayer) entityLiving).getCurrentEquippedItem().stackSize > 0) ? 1 : 0;
model.aimedBow = ((EntityPlayer) entityLiving).getItemInUse() != null && ((EntityPlayer) entityLiving).getItemInUse().getItem() instanceof ItemBow && ((EntityPlayer) entityLiving).getItemInUseDuration() > 1;
 
1,137
5
3
Tuborg написал(а):
Итак, пришло время править баги - шифт, лук, предмет в руке заставляют модель рендериться не правильно, а так, будто этого не происходить. 
Решение в getArmorModel():
Код:
model.isSneak = entityLiving.isSneaking();
model.isRiding = entityLiving.isRiding();
model.heldItemRight = (((EntityPlayer) entityLiving).getCurrentEquippedItem() != null && ((EntityPlayer) entityLiving).getCurrentEquippedItem().stackSize > 0) ? 1 : 0;
model.aimedBow = ((EntityPlayer) entityLiving).getItemInUse() != null && ((EntityPlayer) entityLiving).getItemInUse().getItem() instanceof ItemBow && ((EntityPlayer) entityLiving).getItemInUseDuration() > 1;
Неплохо б ещё на EnumAction проверить, не только лук.
 
1,137
5
3
Код:
val stack = ...
if (stack?.item?.getItemUseAction(stack) == EnumAction.bow) {}

Проверка под enum action.
 
212
0
wilah написал(а):
Код:
val stack = ...
if (stack?.item?.getItemUseAction(stack) == EnumAction.bow) {}

Проверка под enum action.
Крут.

А вот на Java -
Код:
            model.aimedBow = ((EntityPlayer) entityLiving).getItemInUse() != null && ((EntityPlayer) entityLiving).getItemInUse().getItem().getItemUseAction(((EntityPlayer) entityLiving).getItemInUse()) == EnumAction.bow && ((EntityPlayer) entityLiving).getItemInUseDuration() > 1;
 
1,239
2
24
Эта тема от старого хирурга который был альтруистом. щас он ничё исправлять не хочет
 

Icosider

Kotliner
Администратор
3,603
99
664
Код:
public void setRotationAngles(float f, float f1, float f2, float f3, float f4, float f5,Entity entity)
{
 super.setRotationAngles(f, f1, f2, f3, f4, f5, entity);
}

^ Не нужно ^

И где ты из своего public modelTest(float f) f применяешь?
Вот в "addBox(0F, 0F, 0F, 4, 1, 2, f);", 
ещё значения:
textureWidth = 64;
textureHeight = 32;
можно обернуть в super(f, 0, 64, 32);
 

Icosider

Kotliner
Администратор
3,603
99
664
Делаем так:
//В класс с бронёй
Код:
    @Override
    @SideOnly(Side.CLIENT)
    public ModelBiped getArmorModel (EntityLivingBase entityLiving, ItemStack itemstack, int armorSlot){

        ModelBiped armorModel = ClientProxy.armorModels.get(this);

        if(armorModel != null){
            armorModel.bipedHead.showModel = armorSlot == 0;
            armorModel.bipedHeadwear.showModel = false;
            armorModel.bipedBody.showModel = armorSlot == 1 || armorSlot == 2;
            armorModel.bipedRightArm.showModel = armorSlot == 1;
            armorModel.bipedLeftArm.showModel = armorSlot == 1;
            armorModel.bipedRightLeg.showModel = armorSlot == 2 || armorSlot == 3;
            armorModel.bipedLeftLeg.showModel = armorSlot == 2 || armorSlot == 3;

            armorModel.isSneak = entityLiving.isSneaking();
            armorModel.isRiding = entityLiving.isRiding();
            armorModel.isChild = entityLiving.isChild();

            if(entityLiving instanceof EntityPlayer){
                armorModel.aimedBow =((EntityPlayer)entityLiving).getItemInUseDuration() > 2;
            }
        }
        return armorModel;
    }
//В proxy:
Код:
public static final Map<Item, ModelBiped> armorModels = new HashMap<Item, ModelBiped>();

        /*
        Данные 4 поля нужны для предачи в ArmorModel экспанда, 
        т.е. мы можем использовать f для определённой части шейпа, 
        которую хотим увеличить на f. Так же можно прописать и проверку для брони.
        */
        ArmorModel HelmetM = new ArmorModel(-1.0F);
        ArmorModel ChestM = new ArmorModel(-1.0F);
        ArmorModel LeggsM = new ArmorModel(-1.0F);
        ArmorModel BootsM = new ArmorModel(-1.0F);
        
        //Присвоение для брони своей модели или экспанда
        armorModels.put(Helmet, HelmetM);
        armorModels.put(Chest, ChestM);
        armorModels.put(Leggs, LeggsM);
        armorModels.put(Boots, BootsM);
        
        //** Дополнительно **//
        //Проверка брони:
        ArmorModel HelmetM = new ArmorModel(-1.0F, "Helmet");//ClientProxy
        ArmorModel ChestM = new ArmorModel(-1.0F, "Chest");//ClientProxy
        
        //Добавить в класс модели брони
        if(type == "Helmet") 
        {
            Тут ваши шейпы для шлема
        } 
        else if(type == "Chest") 
        {
            Тут ваши шейпы для брони
        }
//Если у вас вместо модели брони какие то розовые квадраты:
Код:
        //Добавить к себе в класс модели брони
        this.bipedHead.cubeList.clear();
        this.bipedBody.cubeList.clear();
        this.bipedLeftArm.cubeList.clear();
        this.bipedRightArm.cubeList.clear();
        this.bipedLeftLeg.cubeList.clear();
        this.bipedRightLeg.cubeList.clear();
 
А как сделать так что надеваешь 1 предмет т.е допустим нагрудник а рендерится все части брони
 
86
4
19
А как сделать так что надеваешь 1 предмет т.е допустим нагрудник а рендерится все части брони
а) не поднимать некропосты, ибо есть нормальные гайды от Fr0Le

б) выучить Java


с) объединить отдельные части рендера в один.. :.facepalm.:
 
Сверху