TeyvatCraft/scripts/ore_manager/block_gen.py

167 lines
5.4 KiB
Python

import sys
import os
import shutil
def ReadListFromFile(filename, listInstance):
f = open(filename, 'r', encoding='utf-8')
while True:
cache = f.readline()
if cache == '':
break;
cache = cache.strip()
if cache == '':
listInstance.append('')
continue
if cache.startswith('//'):
continue
listInstance.append(cache)
f.close()
def GetUnderlineName(strl):
return strl.lower().replace(',', '').replace('& ', '').replace('é', 'e').replace('-', '_').replace("'", '').replace('"', '').replace(' ', '_')
# folder creation
if not os.path.isdir('data/teyvatcraft/loot_tables/blocks'):
os.makedirs('data/teyvatcraft/loot_tables/blocks')
if not os.path.isdir('assets/teyvatcraft/models/block'):
os.makedirs('assets/teyvatcraft/models/block')
if not os.path.isdir('assets/teyvatcraft/models/item'):
os.makedirs('assets/teyvatcraft/models/item')
if not os.path.isdir('assets/teyvatcraft/blockstates'):
os.makedirs('assets/teyvatcraft/blockstates')
if not os.path.isdir('assets/teyvatcraft/textures/block'):
os.makedirs('assets/teyvatcraft/textures/block')
# read file
enList = []
zhList = []
ReadListFromFile('zh.txt', zhList)
ReadListFromFile('en.txt', enList)
if len(zhList) != len(enList):
print('2 files item is not matched')
sys.exit(0)
javaDeclareFile = open('declare.block.java', 'w', encoding='utf-8')
javaRegisterFile = open('register.block.java', 'w', encoding='utf-8')
langZhFile = open('zh_cn.block.json', 'w', encoding='utf-8')
langEnFile = open('en_us.block.json', 'w', encoding='utf-8')
for index in range(len(enList)):
if enList[index] == '':
# keep blank line in register & declare
javaDeclareFile.write('\n')
javaRegisterFile.write('\n')
langZhFile.write('\n')
langEnFile.write('\n')
continue
(droppedName, oreName) = enList[index].split('#')
dropped_underlineName = GetUnderlineName(droppedName)
ore_underlineName = GetUnderlineName(oreName)
ore_upperName = ore_underlineName.upper()
flootTables = open('data/teyvatcraft/loot_tables/blocks/' + ore_underlineName + '.json', 'w', encoding='utf-8')
fblockstates = open('assets/teyvatcraft/blockstates/' + ore_underlineName + '.json', 'w', encoding='utf-8')
fmodel = open('assets/teyvatcraft/models/block/{}.json'.format(ore_underlineName), 'w', encoding='utf-8')
fmodelItem = open('assets/teyvatcraft/models/item/{}.json'.format(ore_underlineName), 'w', encoding='utf-8')
flootTables.write('''{{
"type": "minecraft:block",
"pools": [
{{
"rolls": 1,
"entries": [
{{
"type": "minecraft:alternatives",
"children": [
{{
"type": "minecraft:item",
"conditions": [
{{
"condition": "minecraft:match_tool",
"predicate": {{
"enchantments": [
{{
"enchantment": "minecraft:silk_touch",
"levels": {{
"min": 1
}}
}}
]
}}
}}
],
"name": "teyvatcraft:{}"
}},
{{
"type": "minecraft:item",
"functions": [
{{
"function": "minecraft:set_count",
"count": {{
"min": 1.0,
"max": 2.0,
"type": "minecraft:uniform"
}}
}},
{{
"function": "minecraft:apply_bonus",
"enchantment": "minecraft:fortune",
"formula": "minecraft:uniform_bonus_count",
"parameters": {{
"bonusMultiplier": 1
}}
}},
{{
"function": "minecraft:explosion_decay"
}}
],
"name": "teyvatcraft:{}"
}}
]
}}
]
}}
]
}}'''.format(ore_underlineName, dropped_underlineName))
fblockstates.write('''{{
"variants": {{
"": {{
"model": "teyvatcraft:block/{}"
}}
}}
}}'''.format(ore_underlineName))
fmodel.write('''{{
"parent": "minecraft:block/cube_all",
"textures": {{
"all": "teyvatcraft:block/{}"
}}
}}'''.format(ore_underlineName))
fmodelItem.write('''{{
"parent": "teyvatcraft:block/{}"
}}'''.format(ore_underlineName))
flootTables.close()
fblockstates.close()
fmodel.close()
fmodelItem.close()
javaDeclareFile.write('public static final Block {} = new OreBlock(getOreBlockSettings(1, 3.0f));\n'.format(ore_upperName))
javaRegisterFile.write('Registry.register(Registry.BLOCK, new Identifier("teyvatcraft", "{}"), {});\n'.format(ore_underlineName, ore_upperName))
langZhFile.write('"block.teyvatcraft.{}": "{}",\n'.format(ore_underlineName, zhList[index].split('#')[1]))
langEnFile.write('"block.teyvatcraft.{}": "{}",\n'.format(ore_underlineName, enList[index].split('#')[1].replace('"', '')))
shutil.copyfile('stone.png', 'assets/teyvatcraft/textures/block/{}.png'.format(ore_underlineName))
javaDeclareFile.close()
javaRegisterFile.close()
langZhFile.close()
langEnFile.close()