- 51
- 8
- 5
Привет, я делал интерфейс для своего мода и столкнулся с проблемой. Мой оверлей с красной стрелкой ужасно отображается поверх оверлея с приборами и тд, как мне это исправить? Причем без оверлея с приборами все нормально выглядит
Вот оверлей со стрелкой:
Вот оверлей с приборами:
Вот оверлей со стрелкой:
Java:
package net.mcreator.falloutarmor.gui.overlay;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraft.world.World;
import net.minecraft.util.ResourceLocation;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.Minecraft;
import org.lwjgl.opengl.GL11;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import javax.imageio.ImageIO;
import java.io.IOException;
import net.mcreator.falloutarmor.ElementsFalloutArmorMod;
@ElementsFalloutArmorMod.ModElement.Tag
public class OverlayPadisplay extends ElementsFalloutArmorMod.ModElement {
private static int radius = 20;
private static boolean displayCircle = true;
private static float[] arrowColor = {176.0F, 0.0F, 0.0F, 1.0F};
private static int arrowWidth = 2;
private static int arrowHeight = 19;
private static int relativePosX = 3;
private static int relativePosY = 19;
private static float initialDegrees = 0;
private static float maxRotationDegrees = 360;
public OverlayPadisplay(ElementsFalloutArmorMod instance) {
super(instance, 232);
}
@Override
@SideOnly(Side.CLIENT)
public void init(FMLInitializationEvent event) {
MinecraftForge.EVENT_BUS.register(new GUIRenderEventClass());
}
public static class GUIRenderEventClass {
@SubscribeEvent(priority = EventPriority.LOWEST)
@SideOnly(Side.CLIENT)
public void eventHandler(RenderGameOverlayEvent event) {
if (!event.isCancelable() && event.getType() == RenderGameOverlayEvent.ElementType.HELMET) {
EntityPlayer entity = Minecraft.getMinecraft().player;
if (entity != null) {
int posX = (event.getResolution().getScaledWidth() * relativePosX / 37);
int posY = (event.getResolution().getScaledHeight() * relativePosY / 22);
float health = entity.getHealth();
float maxHealth = entity.getMaxHealth();
float rotationDegrees = initialDegrees + ((maxHealth - health) / maxHealth) * (maxRotationDegrees - initialDegrees);
if (displayCircle) {
drawCircle(posX, posY, radius);
}
drawArrow(posX, posY, rotationDegrees);
}
}
}
private void drawCircle(int x, int y, int radius) {
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GL11.glBegin(GL11.GL_LINE_LOOP);
for (int i = 0; i < 360; i++) {
double angle = Math.toRadians(i);
double dx = x + Math.cos(angle) * radius;
double dy = y + Math.sin(angle) * radius;
GL11.glVertex2d(dx, dy);
}
GL11.glEnd();
}
private void drawArrow(int x, int y, float rotationDegrees) {
GlStateManager.pushMatrix();
GlStateManager.translate(x, y, 0);
GlStateManager.rotate(-rotationDegrees, 0.0F, 0.0F, 1.0F);
GlStateManager.color(arrowColor[0], arrowColor[1], arrowColor[2], arrowColor[3]);
int arrowOffsetX = -arrowWidth / 2;
int arrowOffsetY = -arrowHeight;
Minecraft.getMinecraft().ingameGUI.drawModalRectWithCustomSizedTexture(
arrowOffsetX, arrowOffsetY, 0, 0, arrowWidth, arrowHeight, arrowWidth, arrowHeight
);
GlStateManager.popMatrix();
}
}
}
Java:
package net.mcreator.falloutarmor.gui.overlay;
import net.minecraftforge.fml.relauncher.SideOnly;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.eventhandler.EventPriority;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraft.world.World;
import net.minecraft.util.ResourceLocation;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.Minecraft;
import net.mcreator.falloutarmor.procedure.ProcedurePadisplayDisplayOverlayIngame;
import net.mcreator.falloutarmor.ElementsFalloutArmorMod;
import com.google.common.collect.ImmutableMap;
@ElementsFalloutArmorMod.ModElement.Tag
public class OverlayHpArrow extends ElementsFalloutArmorMod.ModElement {
public OverlayHpArrow(ElementsFalloutArmorMod instance) {
super(instance, 231);
}
@Override
@SideOnly(Side.CLIENT)
public void init(FMLInitializationEvent event) {
MinecraftForge.EVENT_BUS.register(new GUIRenderEventClass());
}
public static class GUIRenderEventClass {
@SubscribeEvent(priority = EventPriority.LOW)
@SideOnly(Side.CLIENT)
public void eventHandler(RenderGameOverlayEvent event) {
if (!event.isCancelable() && event.getType() == RenderGameOverlayEvent.ElementType.HELMET) {
int posX = (event.getResolution().getScaledWidth()) / 2;
int posY = (event.getResolution().getScaledHeight()) / 2;
EntityPlayer entity = Minecraft.getMinecraft().player;
World world = entity.world;
int x = (int) entity.posX;
int y = (int) entity.posY;
int z = (int) entity.posZ;
if (ProcedurePadisplayDisplayOverlayIngame.executeProcedure(ImmutableMap.of("entity", entity))) {
GlStateManager.disableDepth();
GlStateManager.depthMask(false);
GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA,
GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
GlStateManager.disableAlpha();
Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation("fallout_armor:textures/pa_display.png"));
Minecraft.getMinecraft().ingameGUI.drawModalRectWithCustomSizedTexture(0, 0, 0, 0, event.getResolution().getScaledWidth(),
event.getResolution().getScaledHeight(), event.getResolution().getScaledWidth(), event.getResolution().getScaledHeight());
GlStateManager.depthMask(true);
GlStateManager.enableDepth();
GlStateManager.enableAlpha();
GlStateManager.color(1.0F, 1.0F, 1.0F, 1.0F);
}
}
}
}
}