#!/usr/bin/python # -*- coding: utf-8 -*- """ Minecraft Starter for hosting and playing different versions of Minecraft How to use: Copy Minecraft-Starter into the same directory like Minecraft.exe. Start the program and save the current version of Minecraft under a different name like minecraft_1.1.jar or minecraft_1.2.5.jar or minecraft_1.2.5_xray.jar etc. You can do this by going to File-Save or hit the button Archive last minecraft version. If another new version of minecraft is published, you can save it under its version name and the next time you start Minecraft Starter you can choose it. Maybe you want to use a modfile instead of the regular minecraft you can choose the version you want from the start menu if you saved the modfile under a different name. Have fun! This program has been developed on the needs of my son Jonas. If you do not have Python installed you can download the Minecraft-Starter.exe from http://www.homoeopathie-online.com/Minecraft_Starter.exe """ import glob, os, sys, time, win32file, wx from win32com.shell import shellcon, shell class MineCraftStarter(wx.Frame): def __init__(self, *args, **kwargs): super(MineCraftStarter, self).__init__(*args, **kwargs) self.appdatadir = os.path.join(shell.SHGetFolderPath(0, shellcon.CSIDL_APPDATA, 0, 0), ".minecraft/bin") # print self.appdatadir self.InitUI() def InitUI(self): self.program = os.path.join(os.getcwd(), "Minecraft.exe") self.starter = os.path.join(os.getcwd(), "Minecraft_Starter_english.py") self.pathname = self.appdatadir minecraft_files = glob.glob(os.path.join(self.pathname, '*.jar')) # print minecraft_files self.id = 0 self.sampleList = [] for file in minecraft_files: # print "file", file basefilename = os.path.basename(file) if "minecraft" == basefilename[:len("minecraft")] and basefilename != "minecraft.jar": self.sampleList.append(basefilename) if self.sampleList == []: self.sampleList.append("minecraft.jar") menubar = wx.MenuBar() fileMenu = wx.Menu() open = wx.MenuItem(fileMenu, wx.ID_OPEN, '&Open\tCtrl+O') fileMenu.AppendItem(open) self.Bind(wx.EVT_MENU, self.StartMinecraft, open) save = wx.MenuItem(fileMenu, wx.ID_SAVE, '&Save') fileMenu.AppendItem(save) self.Bind(wx.EVT_MENU, self.SaveMinecraft, save) fileMenu.AppendSeparator() qmi = wx.MenuItem(fileMenu, wx.ID_EXIT, '&Exit\tCtrl+E') fileMenu.AppendItem(qmi) self.Bind(wx.EVT_MENU, self.OnQuit, qmi) menubar.Append(fileMenu, '&File') self.SetMenuBar(menubar) self.size = (500, 500) self.panel = wx.Panel(self, size=self.size) # print self.sampleList sizer = wx.BoxSizer(wx.VERTICAL) rb = wx.RadioBox(self.panel, -1, "Minecraft Versions", wx.DefaultPosition, wx.DefaultSize, self.sampleList, 2) self.Bind(wx.EVT_RADIOBOX, self.EvtRadioBox, rb) rb.SetToolTip(wx.ToolTip("Please select Minecraft Version")) sizer.Add(rb, 0, wx.ALL, 20) sizerh = wx.BoxSizer(wx.HORIZONTAL) start = wx.Button(self.panel, 100, "Start Minecraft Version") wx.EVT_BUTTON(self, 100, self.StartMinecraft) sizerh.Add(start, 0, wx.ALL, 10) save = wx.Button(self.panel, 110, "Archive last Minecraft Version") wx.EVT_BUTTON(self, 110, self.SaveMinecraft) sizerh.Add(save, 0, wx.ALL, 10) sizer.Add(sizerh, 0, wx.ALL, 20) self.SetSizer(sizer) self.SetSize(self.size) self.SetTitle('Minecraft-Starter 1.0') self.Centre() self.Show(True) def EvtRadioBox(self, event): self.id = event.GetInt() # print "self.id", self.id def SaveMinecraft(self, event): dlg = wx.FileDialog(self, message="Save the last played Minecraft-Version as...", defaultDir=self.appdatadir, defaultFile="", wildcard="*.jar", style=wx.SAVE) if dlg.ShowModal() == wx.ID_OK: path = dlg.GetPath() dlg.Destroy() if os.path.isfile(path): dlg= wx.MessageDialog(self, u'The file already exists! Overwrite?', u'Overwrite File', wx.YES_NO | wx.NO_DEFAULT | wx.CANCEL | wx.ICON_QUESTION) answer = dlg.ShowModal() else: answer = wx.ID_YES if answer == wx.ID_YES: filename = os.path.join(self.appdatadir, "minecraft.jar") # print filename path = path.replace("\\\\", "/") # print path win32file.CopyFile(filename, path, 0) else: dlg.Destroy() def StartMinecraft(self, event): if event.GetId() == wx.ID_OPEN: dlg = wx.FileDialog(self, message="Open Minecraft-Version for playing...", defaultDir=self.appdatadir, defaultFile="", wildcard="*.jar", style=wx.OPEN) if dlg.ShowModal() == wx.ID_OK: filename = dlg.GetPath() dlg.Destroy() else: dlg.Destroy() return else: filename = os.path.join(self.pathname, self.sampleList[self.id]) # print "filename", filename, ":" if os.path.isfile(filename): if self.sampleList != ["minecraft.jar"]: destfile = os.path.join(self.pathname, "minecraft.jar") # print destfile destfile = destfile.replace("\\\\", "/") # print destfile # os.remove(destfile) win32file.CopyFile (filename, destfile, 0) # print "Starting ", filename, "as", destfile # print self.program os.execvp(self.program, (self.program,)) sys.exit() def OnQuit(self, e): # print "quit" self.Close() def main(): ex = wx.App() MineCraftStarter(None) ex.MainLoop() if __name__ == '__main__': main()