From d15011eff6a6f7ee2eebca4d777fa37ad3295437 Mon Sep 17 00:00:00 2001 From: CrushedPixel Date: Thu, 4 Jun 2015 16:14:03 +0200 Subject: [PATCH] Added information about online files (favorites, author etc.) to GuiReplayListEntry --- .../api/replay/holders/Category.java | 2 +- .../gui/elements/GuiReplayListEntry.java | 73 +++++++++++++------ .../gui/elements/GuiReplayListExtended.java | 10 +++ .../replaymod/gui/online/GuiReplayCenter.java | 2 +- .../replaymod/gui/online/ReplayFileList.java | 4 +- 5 files changed, 66 insertions(+), 25 deletions(-) diff --git a/src/main/java/eu/crushedpixel/replaymod/api/replay/holders/Category.java b/src/main/java/eu/crushedpixel/replaymod/api/replay/holders/Category.java index 7ea24fd0..51d04754 100755 --- a/src/main/java/eu/crushedpixel/replaymod/api/replay/holders/Category.java +++ b/src/main/java/eu/crushedpixel/replaymod/api/replay/holders/Category.java @@ -19,7 +19,7 @@ public enum Category { return this.id; } - public Category fromId(int id) { + public static Category fromId(int id) { for(Category c : values()) { if(c.id == id) return c; } diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiReplayListEntry.java b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiReplayListEntry.java index 1b060e5c..1f85bd03 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiReplayListEntry.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiReplayListEntry.java @@ -1,7 +1,10 @@ package eu.crushedpixel.replaymod.gui.elements; +import com.mojang.realmsclient.gui.ChatFormatting; +import eu.crushedpixel.replaymod.api.replay.holders.Category; import eu.crushedpixel.replaymod.api.replay.holders.FileInfo; import eu.crushedpixel.replaymod.registry.ResourceHelper; +import eu.crushedpixel.replaymod.utils.DurationUtils; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.GuiListExtended.IGuiListEntry; @@ -15,16 +18,13 @@ import java.awt.image.BufferedImage; import java.io.File; import java.text.DateFormat; import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Date; -import java.util.List; -import java.util.concurrent.TimeUnit; public class GuiReplayListEntry implements IGuiListEntry { private final DateFormat dateFormat = new SimpleDateFormat(); boolean registered = false; - private Minecraft minecraft = Minecraft.getMinecraft(); + private Minecraft mc = Minecraft.getMinecraft(); private FileInfo fileInfo; private ResourceLocation textureResource; private DynamicTexture dynTex = null; @@ -45,11 +45,15 @@ public class GuiReplayListEntry implements IGuiListEntry { @Override public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected) { + boolean online = fileInfo.getDownloads() >= 0; + try { if(fileInfo.getName() == null || fileInfo.getName().length() < 1) { fileInfo.setName("No Name"); } - minecraft.fontRendererObj.drawString(fileInfo.getName(), x + 3, y + 1, 16777215); + mc.fontRendererObj.drawString(ChatFormatting.UNDERLINE.toString()+fileInfo.getName(), x + 3, y + 1, 16777215); + + int thumbnailOffset = -5; if(y < -slotHeight || y > parent.height) { if(registered) { @@ -69,36 +73,63 @@ public class GuiReplayListEntry implements IGuiListEntry { image = ImageIO.read(imageFile); } dynTex = new DynamicTexture(image); - minecraft.getTextureManager().loadTexture(textureResource, dynTex); + mc.getTextureManager().loadTexture(textureResource, dynTex); dynTex.updateDynamicTexture(); ResourceHelper.registerResource(textureResource); registered = true; } - minecraft.getTextureManager().bindTexture(textureResource); - Gui.drawScaledCustomSizeModalRect(x - 60, y, 0, 0, 1280, 720, 57, 32, 1280, 720); + mc.getTextureManager().bindTexture(textureResource); + Gui.drawScaledCustomSizeModalRect(x - (int)(slotHeight*(16/9f)) + thumbnailOffset, y, 0, 0, 1280, 720, (int)(slotHeight*(16/9f)), slotHeight, 1280, 720); } - List list = new ArrayList(); + if(online) { + String downloads = fileInfo.getDownloads() + " ⬇"; + int downloadsWidth = mc.fontRendererObj.getStringWidth(downloads); + + Gui.drawRect(x + thumbnailOffset - 2 - downloadsWidth - 1, y + slotHeight - (mc.fontRendererObj.FONT_HEIGHT + 2) * 2, + x + thumbnailOffset, y + slotHeight - (mc.fontRendererObj.FONT_HEIGHT + 2), 0x80000000); + + mc.fontRendererObj.drawStringWithShadow(downloads, x + thumbnailOffset - 1 - downloadsWidth, + y + slotHeight - (mc.fontRendererObj.FONT_HEIGHT) * 2 - 2, Color.WHITE.getRGB()); + } + + String duration = DurationUtils.convertSecondsToShortString(fileInfo.getMetadata().getDuration() / 1000); + int durationWidth = mc.fontRendererObj.getStringWidth(duration); + + Gui.drawRect(x + thumbnailOffset - 2 - durationWidth - 1, y + slotHeight - mc.fontRendererObj.FONT_HEIGHT - 2, x + thumbnailOffset, y + slotHeight, + 0x80000000); + + mc.fontRendererObj.drawStringWithShadow(duration, x + thumbnailOffset - 1 - durationWidth, + y + slotHeight - mc.fontRendererObj.FONT_HEIGHT, Color.WHITE.getRGB()); + String serverName = fileInfo.getMetadata().getServerName(); - list.add((serverName == null ? I18n.format("replaymod.gui.iphidden") : serverName) - + " (" + dateFormat.format(new Date(fileInfo.getMetadata().getDate())) + ")"); + if(serverName == null) serverName = ChatFormatting.DARK_RED.toString()+I18n.format("replaymod.gui.iphidden"); - list.add(String.format("%02dm%02ds", - TimeUnit.MILLISECONDS.toMinutes(fileInfo.getMetadata().getDuration()), - TimeUnit.MILLISECONDS.toSeconds(fileInfo.getMetadata().getDuration()) - - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(fileInfo.getMetadata().getDuration())) - )); + mc.fontRendererObj.drawStringWithShadow(serverName, x + 3, y + (online ? 25 : 13), Color.LIGHT_GRAY.getRGB()); - for(int l1 = 0; l1 < Math.min(list.size(), 2); ++l1) { - minecraft.fontRendererObj.drawString((String) list.get(l1), x + 3, y + 12 + minecraft.fontRendererObj.FONT_HEIGHT * l1, 8421504); + String dateRecorded = dateFormat.format(new Date(fileInfo.getMetadata().getDate())); + int dateWidth = mc.fontRendererObj.getStringWidth(dateRecorded); + mc.fontRendererObj.drawStringWithShadow(dateRecorded, x + (online ? listWidth - 9 - dateWidth : 3), y + (online ? 13 : 23), Color.LIGHT_GRAY.getRGB()); + + if(online) { + String owner = I18n.format("replaymod.gui.center.author", ChatFormatting.GRAY.toString()+ChatFormatting.ITALIC, fileInfo.getOwner()); + + mc.fontRendererObj.drawStringWithShadow(ChatFormatting.RESET.toString()+owner, x + 3, y + 13, Color.WHITE.getRGB()); + } + + if(online) { + Category category = Category.fromId(fileInfo.getCategory()); + + mc.fontRendererObj.drawStringWithShadow(ChatFormatting.ITALIC.toString()+category.toNiceString(), x + 3, y + slotHeight - mc.fontRendererObj.FONT_HEIGHT, Color.GRAY.getRGB()); } if(fileInfo.getRatings() != null) { - String thumbsString = "§a+" + fileInfo.getRatings().getPositive() + " §4-" + fileInfo.getRatings().getNegative(); - int stringWidth = minecraft.fontRendererObj.getStringWidth(thumbsString); + String thumbsString = ChatFormatting.GOLD.toString()+"⭑"+fileInfo.getFavorites()+ChatFormatting.GREEN.toString()+" ⬆" + + fileInfo.getRatings().getPositive() + ChatFormatting.RED.toString()+" ⬇" + fileInfo.getRatings().getNegative(); + int stringWidth = mc.fontRendererObj.getStringWidth(thumbsString); - minecraft.fontRendererObj.drawString(thumbsString, x + listWidth - stringWidth - 5, y + slotHeight - minecraft.fontRendererObj.FONT_HEIGHT, Color.GREEN.getRGB()); + mc.fontRendererObj.drawString(thumbsString, x + listWidth - stringWidth - 5, y + slotHeight - mc.fontRendererObj.FONT_HEIGHT, Color.GREEN.getRGB()); } } catch(Exception e) { e.printStackTrace(); diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiReplayListExtended.java b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiReplayListExtended.java index 502dc3fb..94df9c6f 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiReplayListExtended.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiReplayListExtended.java @@ -172,4 +172,14 @@ public abstract class GuiReplayListExtended extends GuiListExtended { } + @Override + public int getSlotIndexFromScreenCoords(int p_148124_1_, int p_148124_2_) { + int k = this.left + this.width / 2 - this.getListWidth() / 2 - (int)(slotHeight*(16/9f)); + int l = this.left + this.width / 2 + this.getListWidth() / 2; + int i1 = p_148124_2_ - this.top - this.headerPadding + (int)this.amountScrolled - 4; + int j1 = i1 / this.slotHeight; + return p_148124_1_ < this.getScrollBarX() && p_148124_1_ >= k && p_148124_1_ <= l && j1 >= 0 && i1 >= 0 && j1 < this.getSize() ? j1 : -1; + } + + } diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java b/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java index db38253d..4ddbd612 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/online/GuiReplayCenter.java @@ -354,7 +354,7 @@ public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback { private void updateCurrentList(Pagination pagination) { elementSelected(-1); - currentList = new ReplayFileList(mc, width, height, 50, height - 60, 36, this); + currentList = new ReplayFileList(mc, width, height, 50, height - 60, this); loadingListEntry = new GuiLoadingListEntry(currentList); currentList.addEntry(loadingListEntry); diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/online/ReplayFileList.java b/src/main/java/eu/crushedpixel/replaymod/gui/online/ReplayFileList.java index 57fe175c..1be7644a 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/online/ReplayFileList.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/online/ReplayFileList.java @@ -8,8 +8,8 @@ public class ReplayFileList extends GuiReplayListExtended { private GuiReplayCenter parent; public ReplayFileList(Minecraft mcIn, int p_i45010_2_, int p_i45010_3_, - int p_i45010_4_, int p_i45010_5_, int p_i45010_6_, GuiReplayCenter parent) { - super(mcIn, p_i45010_2_, p_i45010_3_, p_i45010_4_, p_i45010_5_, p_i45010_6_); + int p_i45010_4_, int p_i45010_5_, GuiReplayCenter parent) { + super(mcIn, p_i45010_2_, p_i45010_3_, p_i45010_4_, p_i45010_5_, 50); this.parent = parent; }