замена скина и изображение на экране

Версия Minecraft
1.7.10
1,976
68
221
Доброго всем! о/
Два вопроса, один в духе "как сделать?", а второй "что не так?" :D
1. Как отрендерить текстуру вместо скина игрока, чтобы она была видна и от третьего лица и от первого, а в инвизе - нет? Накопал что-то вот такое, но мне кажется, что это не всё (ведь оно не работает).
Код:
@SubscribeEvent
 public void renderPlayer(RenderPlayerEvent event) {
 if (mc.thePlayer.isPotionActive(PotionRegistry.potionCrystalID)) {
 GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture(new ResourceLocation(ModInfo.MODID + ":/textures/blocks/InfectionCrystal.png")).getGlTextureId());
 }
 }
2. Рендерю текстуру на весь экран, но мне нужно, чтобы сначала рисовалась она, а потом хотбар и крестик, иначе их не видно.
Взял из этой темы
timaxa007 написал(а):
Ну было лень писать более правильнее. Сделал плохой пример. У этого примера вроде нету таких проблем:
Код:
static Minecraft mc = Minecraft.getMinecraft();

static final ResourceLocation furnaceGuiTextures = new ResourceLocation("textures/gui/container/furnace.png");
int xSize = 176;
int ySize = 166;

@SubscribeEvent
public void render(RenderGameOverlayEvent event) {
 switch(event.type) {
 case ALL:{
 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
 mc.getTextureManager().bindTexture(furnaceGuiTextures);
 int posX = (event.resolution.getScaledWidth() - xSize) / 2;
 int posY = (event.resolution.getScaledHeight() - ySize) / 2;
 mc.ingameGUI.drawTexturedModalRect(posX, posY, 0, 0, xSize, ySize);
 break;
 }
 default:break;
 }
}
Заранее спасибо :D

UPD: Первый метод нужен не только для скина игрока, но и вообще для любого моба
 
2. Не поможет приоритет, так как сначала рендериться ваниль, а затем от эвента.
Тут вроде можно двумя способами:
0. (для всех случаях) RenderGameOverlayEvent приписать ".Post" или иначе он будет рендериться в pre и post случаи. В pre не рендериться ни чего, по крайней мере не получилось с элементом ALL.
1. Рендерить в элементе HELMET тогда он большинстве случаях будет позади, кроме текстуры надетой тыквы.
2. Либо создать класс унаследовать от GuiIngameForge и Minecraft.getMinecraft().ingameGUI заменить на наш созданный класс. В нашем созданном классе в нужном месте зарендерить нашу текстуру.
Есть третий, но он не сработал как надо.


По-тестировал на Pre нашёл подходящий элемент HOTBAR, в котором зарендерилась текстура, за хот баром, но не за крестеком.


Ещё по-тестировал, рендерить эти тексткра за крестиком и хотбаром, но перед текстурой шлема тыквы:
Код:
@SubscribeEvent
public void render(RenderGameOverlayEvent.Pre event) {
 switch(event.type) {
 case CROSSHAIRS:{
 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
 mc.getTextureManager().bindTexture(furnaceGuiTextures);
 int posX = (event.resolution.getScaledWidth() - xSize) / 2;
 int posY = event.resolution.getScaledHeight() - ySize;
 mc.ingameGUI.drawTexturedModalRect(posX, posY, 0, 0, xSize, ySize);
 break;
 }
 default:break;
 }
}
Думаю, что подойдёт. Но если какой-то мод будет заменять текстуру прицела, то возможно и твоя текстура пропадёт.
 
Про "альфа канал", у меня не было проблем (вроде), но если ты используешь полу-прозрачную текстуру, то нужно использовать:
Код:
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
//текстура и её отрисовка
GL11.glDisable(GL11.GL_BLEND);
 
Оффтоп:
Тимаха, а тебе вот не лень спектатить каждый день форум и отвечать "одинаковыми" сообщениями?) Сочувствую тебе...
 
Назад
Сверху