-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCobblemonGens.py
157 lines (133 loc) · 5.18 KB
/
CobblemonGens.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
import os
import json
import tkinter as tk
from tkinter import filedialog, messagebox
import re
LEVEL_MAPPING = {
1: "wooden",
2: "cobblestone",
3: "iron",
4: "gold",
5: "diamond",
6: "netherite",
7: "adamantite",
8: "fault"
}
DISPLAY_SETTINGS = {
"thirdperson_righthand": {
"rotation": [24, 0, 0],
"translation": [0, 0.75, -0.5],
"scale": [0.6, 0.6, 0.6]
},
"thirdperson_lefthand": {
"rotation": [24, 0, 0],
"translation": [0, 0.75, -0.5],
"scale": [0.6, 0.6, 0.6]
},
"firstperson_righthand": {
"rotation": [0, 109, 5],
"translation": [2.75, 6.5, 0],
"scale": [0.83, 0.83, 0.83]
},
"firstperson_lefthand": {
"rotation": [0, 109, 5],
"translation": [2.75, 6.5, 0],
"scale": [0.83, 0.83, 0.83]
},
"ground": {
"translation": [0, 3.5, 0],
"scale": [0.65, 0.65, 0.65]
},
"gui": {
"rotation": [25, 151, 0],
"translation": [0.25, 2.25, 0],
"scale": [0.72, 0.72, 0.72]
},
"head": {
"translation": [0, 14.4, 0]
},
"fixed": {
"rotation": [-90, 0, 0],
"translation": [0, -1, -15.5],
"scale": [1.92, 1.92, 1.92]
}
}
RENDER_TYPE = "minecraft:cutout"
def get_level_from_registry_line(line):
match = re.search(r"TIERA(\d+)_BLOCK", line)
if match:
return int(match.group(1))
raise ValueError(f"Не удалось извлечь уровень из строки: {line}")
def update_textures_with_level(template_data, level_number):
level_name = LEVEL_MAPPING.get(level_number)
if not level_name:
raise ValueError(f"Неверный уровень: {level_number}")
# Игнорируем текущие цифры в `textures` и заменяем содержимое
template_data["textures"] = {
"0": f"cobblemon_generators:block/generator_arable_land_{level_name}",
"particle": f"cobblemon_generators:block/generator_arable_land_{level_name}"
}
def add_display_and_render_type(template_data):
template_data["display"] = DISPLAY_SETTINGS
template_data["render_type"] = RENDER_TYPE
def generate_files_from_template(template_file, texture_files, output_folder, levels):
with open(template_file, 'r', encoding='utf-8') as f:
try:
template_data = json.load(f)
except json.JSONDecodeError:
messagebox.showerror("Ошибка", "Невозможно прочитать файл шаблона")
return
for level in levels:
try:
updated_data = template_data.copy()
update_textures_with_level(updated_data, level)
add_display_and_render_type(updated_data)
save_file(updated_data, output_folder, f"tier_arable_{level}.json")
except ValueError as e:
messagebox.showerror("Ошибка", str(e))
def save_file(data, output_folder, file_name):
os.makedirs(output_folder, exist_ok=True)
with open(os.path.join(output_folder, file_name), 'w', encoding='utf-8') as f:
json.dump(data, f, indent=4)
def read_registry_file(file_path):
registry_lines = []
with open(file_path, 'r', encoding='utf-8') as file:
for line in file:
line = line.strip()
if line and not line.startswith("#"):
registry_lines.append(line)
return registry_lines
def select_files():
return filedialog.askopenfilenames(title="Выберите файлы текстур", filetypes=[("Все файлы", "*.*")])
def select_folder():
return filedialog.askdirectory(title="Выберите папку для сохранения")
def create_main_window():
def handle_task():
registry_file = filedialog.askopenfilename(title="Выберите файл с регистрацией блоков", filetypes=[("Текстовые файлы", "*.txt")])
if not registry_file:
return
try:
registry_lines = read_registry_file(registry_file)
levels = [get_level_from_registry_line(line) for line in registry_lines]
except ValueError as e:
messagebox.showerror("Ошибка", str(e))
return
template_file = filedialog.askopenfilename(title="Выберите файл шаблона", filetypes=[("JSON файлы", "*.json")])
if not template_file:
return
texture_files = select_files()
if not texture_files:
return
output_folder = select_folder()
if not output_folder:
return
generate_files_from_template(template_file, texture_files, output_folder, levels)
messagebox.showinfo("Успех", "Операция выполнена успешно!")
root = tk.Tk()
root.title("Minecraft JSON Tool")
root.geometry("600x400")
btn = tk.Button(root, text="Сгенерировать файлы models/block", command=handle_task)
btn.pack(pady=10)
root.mainloop()
if __name__ == "__main__":
create_main_window()