# -*- coding: utf-8 -*- """ Created on Fri Apr 8 13:44:42 2011 @author: ProfMobius @version: 0.1 """ import csv import srgshandler CLIENT = 0 SERVER = 1 def writesrgsfromcsvs(csvclass, csvmethods, csvfields, outsrgs, side, ignore_classes=None): """Reads 3 CSVs and output a srgs""" if ignore_classes is None: ignore_classes = [] packages = [] classes = [] methods = [] fields = [] # HINT: We are adding the package conversions packages.append(['.', 'net/minecraft/src']) packages.append(['net', 'net']) packages.append(['net/minecraft', 'net/minecraft']) if side == CLIENT: packages.append(['net/minecraft/client', 'net/minecraft/client']) packages.append(['net/minecraft/isom', 'net/minecraft/isom']) elif side == SERVER: packages.append(['net/minecraft/server', 'net/minecraft/server']) else: raise Exception("Side not recognized : %d" % side) # HINT: We append the class elements. We also handle the special case of Minecraft, MinecraftApplet, MinecraftServer with open(csvclass, 'rb') as fh: csvreader = csv.DictReader(fh) for row in csvreader: if int(row['side']) == side: # HINT : Those checks are here to append the proper packages to notch version of the Minecraft, etc. # They are needed since we don't have notch package information (lost during recompilation) # The skip on start is there because of a quirk of the bot updating process # We use recompiled sources, so the bot catches the Start.class which have been added by Searge. if row['notch'] in ['Minecraft', 'MinecraftApplet']: row['notch'] = 'net/minecraft/client/%s' % row['notch'] if row['notch'] in ['IsomPreviewApplet']: row['notch'] = 'net/minecraft/isom/%s' % row['notch'] if row['notch'] in ['MinecraftServer']: row['notch'] = 'net/minecraft/server/%s' % row['notch'] if row['name'] in ignore_classes: continue classes.append([row['notch'], '%s/%s' % (row['package'], row['name'])]) # HINT: We append the method elements with open(csvmethods, 'rb') as fh: csvreader = csv.DictReader(fh) for row in csvreader: if int(row['side']) == side: if row['classnotch'] in ['Minecraft', 'MinecraftApplet']: row['classnotch'] = 'net/minecraft/client/%s' % row['classnotch'] if row['classnotch'] in ['IsomPreviewApplet']: row['classnotch'] = 'net/minecraft/isom/%s' % row['classnotch'] if row['classnotch'] in ['MinecraftServer']: row['classnotch'] = 'net/minecraft/server/%s' % row['classnotch'] if row['classname'] in ignore_classes: continue methods.append(['%s/%s %s' % (row['classnotch'], row['notch'], row['notchsig']), '%s/%s/%s %s' % (row['package'], row['classname'], row['searge'], row['sig'])]) # HINT: We append the field elements with open(csvfields, 'rb') as fh: csvreader = csv.DictReader(fh) for row in csvreader: if int(row['side']) == side: if row['classnotch'] in ['Minecraft', 'MinecraftApplet']: row['classnotch'] = 'net/minecraft/client/%s' % row['classnotch'] if row['classnotch'] in ['IsomPreviewApplet']: row['classnotch'] = 'net/minecraft/isom/%s' % row['classnotch'] if row['classnotch'] in ['MinecraftServer']: row['classnotch'] = 'net/minecraft/server/%s' % row['classnotch'] if row['classname'] in ignore_classes: continue fields.append(['%s/%s' % (row['classnotch'], row['notch']), '%s/%s/%s' % (row['package'], row['classname'], row['searge'])]) srgshandler.writesrgs(outsrgs, {'PK': packages, 'CL': classes, 'FD': fields, 'MD': methods})