Added information about online files (favorites, author etc.) to GuiReplayListEntry

This commit is contained in:
CrushedPixel
2015-06-04 16:14:03 +02:00
parent 9c01db6fe1
commit d15011eff6
5 changed files with 66 additions and 25 deletions

View File

@@ -19,7 +19,7 @@ public enum Category {
return this.id; return this.id;
} }
public Category fromId(int id) { public static Category fromId(int id) {
for(Category c : values()) { for(Category c : values()) {
if(c.id == id) return c; if(c.id == id) return c;
} }

View File

@@ -1,7 +1,10 @@
package eu.crushedpixel.replaymod.gui.elements; 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.api.replay.holders.FileInfo;
import eu.crushedpixel.replaymod.registry.ResourceHelper; import eu.crushedpixel.replaymod.registry.ResourceHelper;
import eu.crushedpixel.replaymod.utils.DurationUtils;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.Gui; import net.minecraft.client.gui.Gui;
import net.minecraft.client.gui.GuiListExtended.IGuiListEntry; import net.minecraft.client.gui.GuiListExtended.IGuiListEntry;
@@ -15,16 +18,13 @@ import java.awt.image.BufferedImage;
import java.io.File; import java.io.File;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date; import java.util.Date;
import java.util.List;
import java.util.concurrent.TimeUnit;
public class GuiReplayListEntry implements IGuiListEntry { public class GuiReplayListEntry implements IGuiListEntry {
private final DateFormat dateFormat = new SimpleDateFormat(); private final DateFormat dateFormat = new SimpleDateFormat();
boolean registered = false; boolean registered = false;
private Minecraft minecraft = Minecraft.getMinecraft(); private Minecraft mc = Minecraft.getMinecraft();
private FileInfo fileInfo; private FileInfo fileInfo;
private ResourceLocation textureResource; private ResourceLocation textureResource;
private DynamicTexture dynTex = null; private DynamicTexture dynTex = null;
@@ -45,11 +45,15 @@ public class GuiReplayListEntry implements IGuiListEntry {
@Override @Override
public void drawEntry(int slotIndex, int x, int y, int listWidth, int slotHeight, int mouseX, int mouseY, boolean isSelected) { 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 { try {
if(fileInfo.getName() == null || fileInfo.getName().length() < 1) { if(fileInfo.getName() == null || fileInfo.getName().length() < 1) {
fileInfo.setName("No Name"); 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(y < -slotHeight || y > parent.height) {
if(registered) { if(registered) {
@@ -69,36 +73,63 @@ public class GuiReplayListEntry implements IGuiListEntry {
image = ImageIO.read(imageFile); image = ImageIO.read(imageFile);
} }
dynTex = new DynamicTexture(image); dynTex = new DynamicTexture(image);
minecraft.getTextureManager().loadTexture(textureResource, dynTex); mc.getTextureManager().loadTexture(textureResource, dynTex);
dynTex.updateDynamicTexture(); dynTex.updateDynamicTexture();
ResourceHelper.registerResource(textureResource); ResourceHelper.registerResource(textureResource);
registered = true; registered = true;
} }
minecraft.getTextureManager().bindTexture(textureResource); mc.getTextureManager().bindTexture(textureResource);
Gui.drawScaledCustomSizeModalRect(x - 60, y, 0, 0, 1280, 720, 57, 32, 1280, 720); Gui.drawScaledCustomSizeModalRect(x - (int)(slotHeight*(16/9f)) + thumbnailOffset, y, 0, 0, 1280, 720, (int)(slotHeight*(16/9f)), slotHeight, 1280, 720);
} }
List<String> list = new ArrayList<String>(); 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(); String serverName = fileInfo.getMetadata().getServerName();
list.add((serverName == null ? I18n.format("replaymod.gui.iphidden") : serverName) if(serverName == null) serverName = ChatFormatting.DARK_RED.toString()+I18n.format("replaymod.gui.iphidden");
+ " (" + dateFormat.format(new Date(fileInfo.getMetadata().getDate())) + ")");
list.add(String.format("%02dm%02ds", mc.fontRendererObj.drawStringWithShadow(serverName, x + 3, y + (online ? 25 : 13), Color.LIGHT_GRAY.getRGB());
TimeUnit.MILLISECONDS.toMinutes(fileInfo.getMetadata().getDuration()),
TimeUnit.MILLISECONDS.toSeconds(fileInfo.getMetadata().getDuration()) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes(fileInfo.getMetadata().getDuration()))
));
for(int l1 = 0; l1 < Math.min(list.size(), 2); ++l1) { String dateRecorded = dateFormat.format(new Date(fileInfo.getMetadata().getDate()));
minecraft.fontRendererObj.drawString((String) list.get(l1), x + 3, y + 12 + minecraft.fontRendererObj.FONT_HEIGHT * l1, 8421504); 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) { if(fileInfo.getRatings() != null) {
String thumbsString = "§a+" + fileInfo.getRatings().getPositive() + " §4-" + fileInfo.getRatings().getNegative(); String thumbsString = ChatFormatting.GOLD.toString()+""+fileInfo.getFavorites()+ChatFormatting.GREEN.toString()+""
int stringWidth = minecraft.fontRendererObj.getStringWidth(thumbsString); + 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) { } catch(Exception e) {
e.printStackTrace(); e.printStackTrace();

View File

@@ -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;
}
} }

View File

@@ -354,7 +354,7 @@ public class GuiReplayCenter extends GuiScreen implements GuiYesNoCallback {
private void updateCurrentList(Pagination pagination) { private void updateCurrentList(Pagination pagination) {
elementSelected(-1); 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); loadingListEntry = new GuiLoadingListEntry(currentList);
currentList.addEntry(loadingListEntry); currentList.addEntry(loadingListEntry);

View File

@@ -8,8 +8,8 @@ public class ReplayFileList extends GuiReplayListExtended {
private GuiReplayCenter parent; private GuiReplayCenter parent;
public ReplayFileList(Minecraft mcIn, int p_i45010_2_, int p_i45010_3_, 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) { int p_i45010_4_, int p_i45010_5_, GuiReplayCenter parent) {
super(mcIn, p_i45010_2_, p_i45010_3_, p_i45010_4_, p_i45010_5_, p_i45010_6_); super(mcIn, p_i45010_2_, p_i45010_3_, p_i45010_4_, p_i45010_5_, 50);
this.parent = parent; this.parent = parent;
} }