Как заменить текстуру прицела?

Код:
    
    @ForgeSubscribe
    public void render(RenderGameOverlayEvent.Pre event){
        if(event.type == ElementType.CROSSHAIRS){
            GL11.glPushMatrix();
            
            GL11.glTranslatef(0.0F, -50.0F, 0.0F);
//не канает            mc.renderEngine.bindTexture(new ResourceLocation(ModInfo.modId,"textures/items/perdoblaster.png"));
       
        }
    }
как заменить текстуру прицела?
 
В общем.
1mc.renderEngine.bindTexture(new ResourceLocation(ModInfo.modId,"textures/items/perdoblaster.png"));
Ключевое слово "perdoblaster.png", посмотри размер этого прицела. (2550х550 пример).
2.Создай в paint.net или в photoshop'e картинку с таким же размером. Нарисую или вырежи прицел с какой-нибудь картинки. и вставь ровно по середине.
3.(ModInfo.modId,"textures/items/perdoblaster.png")); укажи название прицела. и всё.
Ну не знаю, помогла или нет.
 
Хорошо, а как стандартную текстуру убрать? новая ведь поверх старой нарисуется, а не вместо нее?
 
Создай картинку 256х256, в ней нарисуй то что тебе нужно в левом верхем углу, размером  32х32

Код:
@ForgeSubscribe
public void onRenderCrosshairs(RenderGameOverlayEvent.Pre event)
{
    if (event.type.equals(ElementType.CROSSHAIRS))
    {
        Minecraft.getMinecraft().getTextureManager().bindTexture(resLoc); // Биндим текстурку

        int x = event.resolution.getScaledWidth() / 2 - 15; // Получаем ширину экрана, делим её пополам и вычитаем 15
        int y = event.resolution.getScaledHeight() / 2 - 15; // Получаем высоту экрана, делим её пополам и вычитаем 15

        Minecraft.getMinecraft().ingameGUI.drawTexturedModalRect(x, y, 0, 0, 32, 32); // Наложение квадратика размером 32x32 на экран (0, 0 - uv координаты на текстурке)

        event.setCanceled(true); // Отмена рендера ванильного crosshair'са
    }
}
 
Сначала отменять рендер надо, а потом рисовать =)

RenderGameOverlayEvent.Pre - извеняюсь, не заметил Pre


Ресурс локацию лучше так не юзать кстати

Код:
mc.getTextureManager().bindTexture(new ResourceLocation(ModInfo.modId, "/tex/t.png"));

Производительность меньше, так каждый кадр создавать новый класс.
Лучше создать переменную (можно финальную), а потом её вписать в бинд. Моджанг по крайней мере так делают.

Код:
public static final ResourceLocation NEW_CROSSHAIRS = new ResourceLocation(ModInfo.modId, "/tex/t.png")

// mc.getTextureManager().bindTexture(NEW_CROSSHAIRS);
 
BlackCrafter написал(а):
Получается розовый квадрат вместо текстуры.
Неправильно указан путь\размер.
 
>public static final ResourceLocation NEW_CROSSHAIRS = new ResourceLocation(ModInfo.modId, "/tex/t.png")
>new ResourceLocation(ModInfo.modId, "/tex/t.png")
>"/tex/t.png"
..^..
Первый слеш здесь не нужен.
 
у меня там нет слеша, у меня там двоеточие. Без него на экране вообще ничего не появляется, а так хоть розовый квадрат.
 
Ещё,так для сведения,картинка должна быть 256х256 иначе смещение будет(у меня было)
 
Назад
Сверху