File size: 3,880 Bytes
36ba3ef
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import json
from datetime import datetime
import Adam.util_info
import utils as U
from functools import cmp_to_key


def compare_keys(key1, key2):
    if len(key1) < len(key2):
        return -1
    elif len(key1) > len(key2):
        return 1
    else:
        if key1 < key2:
            return -1
        elif key1 > key2:
            return 1
        else:
            return 0


key_cmp_func = cmp_to_key(compare_keys)


def generate_next_key(current_key):
    if current_key[-1] != 'z':
        return current_key[:-1] + chr(ord(current_key[-1]) + 1)
    else:
        if current_key == 'z':
            return 'aa'
        else:
            return generate_next_key(current_key[:-1]) + 'a'


def rename_item(item: str):
    if 'log' in item:
        return 'log'
    elif 'planks' in item:
        return 'planks'
    elif 'fence_gate' in item:
        return 'fence_gate'
    elif 'fence' in item:
        return 'fence'
    else:
        return item


def rename_item_rev(item: str):
    if 'log' in item:
        return 'oak_log'
    elif 'planks' in item:
        return 'oak_planks'
    elif 'fence_gate' in item:
        return 'oak_fence_gate'
    elif 'fence' in item:
        return 'oak_fence'
    else:
        return item


def translate_item_name_to_letter(name: str):
    return Adam.util_info.material_names_rev_dict[rename_item(name)]


def translate_item_name_list_to_letter(name_list: list):
    return [translate_item_name_to_letter(item) for item in name_list]


def translate_item_letter_to_name(letter: str):
    return Adam.util_info.material_names_dict[letter]


def translate_action_name_to_letter(name: str):
    return Adam.util_info.action_names_rev_dict[name]


def translate_action_letter_to_name(letter: str):
    if letter[:4] == 'move':
        return letter
    return Adam.util_info.action_names_dict[letter]


def check_in_material(added_items: list, effect: str):
    for added_item in added_items:
        if translate_item_letter_to_name(effect) == rename_item(added_item):
            return True
    return False


def check_len_valid(materials: list):
    for item in materials:
        if len(item) > 2:
            return False
    return True


def get_inventory_number(inventory: dict, material: str):
    material_name = rename_item_rev(translate_item_letter_to_name(material))
    if material_name in ['oak_log', 'oak_planks', 'stick', 'cobblestone', 'raw_iron', 'iron_ingot', 'diamond',
                         'raw_gold', 'gold_ingot']:
        inventory[material_name] = 32
    else:
        inventory[material_name] = 1
    return inventory


def get_item_changes(start_item: dict, end_item: dict):
    consumed_items = []
    added_items = []

    for item, quantity in start_item.items():
        if item not in end_item or end_item[item] < quantity:
            consumed_items.append(item)

    for item, quantity in end_item.items():
        if item not in start_item or start_item[item] < quantity:
            added_items.append(item)

    return consumed_items, added_items


def recorder(start_item: dict, end_item: dict, consumed_items: list, added_items: list, action_type: str,
             file_path: str):
    log_json_path = U.f_join(file_path, "log_data", action_type + ".json")
    log_dict = {
        'Start item': start_item,
        'End item': end_item,
        'Action type': action_type,
        'Consumed items': consumed_items,
        'Added items': added_items,
    }

    try:
        with open(log_json_path, 'r') as file:
            try:
                logs = json.load(file)
            except json.JSONDecodeError:
                logs = []
    except FileNotFoundError:
        logs = []
    logs.append(log_dict)
    with open(log_json_path, 'w') as file:
        json.dump(logs, file, indent=4)


def get_time():
    now = datetime.now()
    return now.strftime("%Y-%m-%d-%H-%M-%S")