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")
|