ADAM / Adam /module_utils.py
YuShu
Initial commit
36ba3ef
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")