package vazkii.minetunes.gui; import java.util.ArrayList; import java.util.List; import java.util.Random; import javax.swing.JFileChooser; import net.minecraft.client.gui.GuiButton; import net.minecraft.client.resources.I18n; import net.minecraft.util.text.TextFormatting; import vazkii.minetunes.MineTunes; import vazkii.minetunes.player.chooser.FileSelector; import vazkii.minetunes.player.chooser.action.ActionDebug; import vazkii.minetunes.player.chooser.action.ActionMakePlaylist; import vazkii.minetunes.player.chooser.action.ActionPlayMp3; import vazkii.minetunes.player.chooser.filter.MusicFilter; import vazkii.minetunes.player.chooser.filter.PlaylistFilter; public class GuiDevTools extends GuiMineTunes { private static final int max = 35; private volatile static List<String> debugOut = new ArrayList(max); Random rand = new Random(); @Override public void initGui() { buttonList.clear(); buttonList.add(new GuiButton(-1, width - 102, height - 22, 100, 20, I18n.format("minetunes.gui.exit"))); buttonList.add(new GuiButton(0, 10, 30, 200, 20, I18n.format("minetunes.guidev.clear"))); buttonList.add(new GuiButton(1, 10, 55, 200, 20, I18n.format("minetunes.guidev.resetThread"))); buttonList.add(new GuiButton(2, 10, 80, 200, 20, I18n.format("minetunes.guidev.chooser"))); buttonList.add(new GuiButton(3, 10, 105, 200, 20, I18n.format("minetunes.guidev.playMp3"))); buttonList.add(new GuiButton(4, 10, 130, 200, 20, I18n.format("minetunes.guidev.playLast"))); buttonList.add(new GuiButton(5, 10, 155, 200, 20, I18n.format("minetunes.guidev.playPause"))); buttonList.add(new GuiButton(6, 10, 180, 200, 20, I18n.format("minetunes.guidev.volumeControl"))); buttonList.add(new GuiButton(7, 10, 205, 200, 20, I18n.format("minetunes.guidev.generatePlaylist"))); MineTunes.DEBUG_MODE = true; } @Override public void drawScreen(int mx, int my, float partialTicks) { int boxHeight = (buttonList.size() - 1) * 25 + 50; drawBox(-4, -4, 224, boxHeight); for(int i = 0; i < debugOut.size(); i++) fontRendererObj.drawStringWithShadow(debugOut.get(debugOut.size() - i - 1), 240, (i + 1) * 10, 0xFFFFFF); fontRendererObj.drawStringWithShadow(I18n.format("minetunes.guidev.warning1"), 10, 5, 0xFFFFFF); fontRendererObj.drawStringWithShadow(I18n.format("minetunes.guidev.warning2"), 10, 15, 0xFFFFFF); super.drawScreen(mx, my, partialTicks); } @Override protected void actionPerformed(GuiButton button) { switch(button.id) { case -1: mc.displayGuiScreen(new GuiPlaylistManager()); break; case 0: debugOut.clear(); break; case 1: if(MineTunes.musicPlayerThread != null) MineTunes.musicPlayerThread.forceKill(); MineTunes.startMusicPlayerThread(); debugLog("Reset Thread: " + MineTunes.musicPlayerThread); break; case 2: new FileSelector(PlaylistFilter.instance, JFileChooser.FILES_AND_DIRECTORIES, ActionDebug.instance); break; case 3: new FileSelector(MusicFilter.instance, JFileChooser.FILES_ONLY, ActionPlayMp3.instance); break; case 4: ActionPlayMp3.instance.playLast(); break; case 5: if(MineTunes.musicPlayerThread != null) MineTunes.musicPlayerThread.pauseOrPlay(); break; case 6: if(MineTunes.musicPlayerThread != null) { float gainVal = 0.5F; MineTunes.musicPlayerThread.addGain(isShiftKeyDown() ? -gainVal : gainVal); float gain = MineTunes.musicPlayerThread.getGain(); debugLog("Audio Gain: " + gain + " (Relative Volume: " + MineTunes.musicPlayerThread.getRelativeVolume(gain) + ")"); } break; case 7: new FileSelector(PlaylistFilter.instance, JFileChooser.FILES_AND_DIRECTORIES, ActionMakePlaylist.instance.withName(randomPlaylistName())); break; } } private String randomPlaylistName() { char[] chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789".toCharArray(); String name = ""; for(int i = 0; i < 6; i++) name += chars[rand.nextInt(chars.length)]; return name; } public static void debugLog(String s) { debugLog(s, true); } public static void debugLog(String s, boolean print) { if(MineTunes.DEBUG_MODE) { debugOut.add(s); if(print) System.out.println(s); while(debugOut.size() > max) debugOut.remove(0); } } public static void logThrowable(Throwable e) { e.printStackTrace(); for(int i = e.getStackTrace().length - 1; i >= 0; i--) debugLog(TextFormatting.DARK_RED + e.getStackTrace()[i].toString(), false); } }