PlanetTeamSpeak Posted August 25, 2017 Share Posted August 25, 2017 (edited) I have made an overlay gui with some information of the player but when you hover over an entity it dissapears. InfoOverlay.class: package com.ptsmods.morecommands.miscellaneous; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; import net.minecraft.util.math.MathHelper; import net.minecraft.util.text.TextFormatting; import net.minecraft.world.EnumSkyBlock; import net.minecraftforge.fml.common.FMLCommonHandler; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class InfoOverlay extends Gui { private Minecraft mc; public InfoOverlay() { this.mc = Minecraft.getMinecraft(); this.zLevel = Float.MAX_VALUE; try { Reference.loadInfoOverlayConfig(); } catch (IOException e) { e.printStackTrace(); } drawStrings(parseInfoOverlayConfig(Reference.getInfoOverlayConfig()).toArray(new String[0])); } private void drawString(String string, int row) { int defaultHeight = 2; int defaultWidth = 2; if (Reference.setVariables.containsKey("defaultHeight") && Reference.isInteger(Reference.setVariables.get("defaultHeight"))) defaultHeight = Integer.parseInt(Reference.setVariables.get("defaultHeight")); if (Reference.setVariables.containsKey("defaultWidth") && Reference.isInteger(Reference.setVariables.get("defaultWidth"))) defaultWidth = Integer.parseInt(Reference.setVariables.get("defaultWidth")); drawString(this.mc.fontRenderer, string, defaultWidth, row*10 + defaultHeight, Integer.parseInt("FFFFFF", 16)); } private void drawStrings(String... strings) { for (int x = 0; x < strings.length; x++) { drawString(strings[x], x); } } private TextFormatting getRandomColor() { if (Reference.Random.randInt(101) == 0) { Reference.lastColor = Reference.getRandomColor("WHITE"); } return Reference.lastColor; } private List<String> parseInfoOverlayConfig(List<String> config) { Minecraft mc = Minecraft.getMinecraft(); List<String> output = new ArrayList<String>(); Reference.setVariables = new HashMap<String, String>(); try { for (String line : config) { if (line.startsWith("var ")) { if (line.split(" ").length == 4) Reference.setVariables.put(line.split(" ")[1], line.split(" ")[3]); } else { line = line.replaceAll("\\{playerName\\}", mc.player.getName()) .replaceAll("\\{x\\}", String.format("%f", mc.player.getPositionVector().x)) .replaceAll("\\{y\\}", String.format("%f", mc.player.getPositionVector().y)) .replaceAll("\\{z\\}", String.format("%f", mc.player.getPositionVector().z)) .replaceAll("\\{chunkX\\}", "" + mc.player.chunkCoordX) .replaceAll("\\{chunkY\\}", "" + mc.player.chunkCoordY) .replaceAll("\\{chunkZ\\}", "" + mc.player.chunkCoordZ) .replaceAll("\\{yaw\\}", "" + MathHelper.wrapDegrees(mc.player.rotationYaw)) .replaceAll("\\{pitch\\}", "" + MathHelper.wrapDegrees(mc.player.rotationPitch)) .replaceAll("\\{biome\\}", mc.world.getBiome(mc.player.getPosition()).getBiomeName()) .replaceAll("\\{difficulty\\}", mc.world.getWorldInfo().getDifficulty().name()) .replaceAll("\\{blocksPerSec\\}", String.format("%f", Reference.blocksPerSecond)) .replaceAll("\\{toggleKey\\}", Reference.getKeyBindingByName("toggleOverlay").getDisplayName()) .replaceAll("\\{configFile\\}", new File("config/MoreCommands/infoOverlay.txt").getAbsolutePath().replaceAll("\\\\", "\\\\\\\\")) // replacing 1 backslash with 2 so backslashes actually show .replaceAll("\\{facing\\}", Reference.getLookDirectionFromLookVec(mc.player.getLookVec())) .replaceAll("\\{time\\}", Reference.parseTime(FMLCommonHandler.instance().getMinecraftServerInstance().getWorld(mc.player.dimension).getWorldTime() % 24000L, false)) .replaceAll("\\{UUID\\}", mc.player.getUniqueID().toString()) .replaceAll("\\{holding\\}", Reference.getLocalizedName(mc.player.getHeldItemMainhand().getItem())) .replaceAll("\\{rainbow\\}", "" + getRandomColor()) .replaceAll("\\{easterEgg\\}", ":O, you found the easter egg!") .replaceAll("\\{xp\\}", "" + mc.player.experienceTotal) .replaceAll("\\{xpLevel\\}", "" + mc.player.experienceLevel) .replaceAll("\\{gamemode\\}", FMLCommonHandler.instance().getMinecraftServerInstance().getPlayerList().getPlayerByUsername(mc.player.getName()).interactionManager.getGameType().getName()) .replaceAll("\\{fps\\}", "" + mc.getDebugFPS()) .replaceAll("\\{blockLight\\}", "" + mc.world.getChunkFromBlockCoords(mc.player.getPosition()).getLightFor(EnumSkyBlock.BLOCK, mc.player.getPosition())) .replaceAll("\\{skyLight\\}", "" + mc.world.getChunkFromBlockCoords(mc.player.getPosition()).getLightFor(EnumSkyBlock.SKY, mc.player.getPosition())) .replaceAll("\\{lookingAtX\\}", "" + mc.objectMouseOver.getBlockPos().getX()) .replaceAll("\\{lookingAtY\\}", "" + mc.objectMouseOver.getBlockPos().getY()) .replaceAll("\\{lookingAtZ\\}", "" + mc.objectMouseOver.getBlockPos().getZ()) .replaceAll("\\{lookingAt\\}", "" + Reference.getLocalizedName(mc.world.getBlockState(mc.objectMouseOver.getBlockPos()).getBlock())) .replaceAll("\\{isSingleplayer\\}", "" + FMLCommonHandler.instance().getMinecraftServerInstance().isSinglePlayer()); if (line.equals("") || !line.split("//")[0].equals("")) output.add(line.split("//")[0]); } } } catch (NullPointerException e) {} return output; } } How I render it (in ClientEventHandler.class): @SubscribeEvent public void onRenderGui(RenderGameOverlayEvent.Post event) { if (event.getType() == ElementType.EXPERIENCE && Reference.isInfoOverlayEnabled()) new InfoOverlay(); } Edited August 25, 2017 by PlanetTeamSpeak Added how I render it Quote Link to comment Share on other sites More sharing options...
PlanetTeamSpeak Posted August 27, 2017 Author Share Posted August 27, 2017 Bump Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.