Block-Game-Client/runtime/filehandling/srgsexport.py

93 lines
4.1 KiB
Python
Raw Permalink Normal View History

2019-11-17 17:55:58 +01:00
# -*- 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})