mirror of
https://git.webmc.xyz/Starlike-Client/Starlike-Client
synced 2025-06-04 01:42:01 -09:00
174 lines
7.2 KiB
Python
174 lines
7.2 KiB
Python
import os
|
|
import shutil
|
|
import json
|
|
|
|
base_path = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
|
|
|
source_folder = os.path.join(base_path,"EaglerTools", "makeBlock")
|
|
block_texture_folder = os.path.join(base_path, "desktopRuntime", "resources", "assets", "starlike", "textures", "blocks")
|
|
block_model_folder = os.path.join(base_path, "desktopRuntime", "resources", "assets", "starlike", "models", "block")
|
|
item_model_folder = os.path.join(base_path, "desktopRuntime", "resources", "assets", "starlike", "models", "item")
|
|
blockstate_folder = os.path.join(base_path,"desktopRuntime", "resources", "assets","starlike", "blockstates")
|
|
lang_file_path = os.path.join(base_path,"desktopRuntime", "resources", "assets","starlike", "lang", "en_US.lang")
|
|
|
|
os.makedirs(block_texture_folder, exist_ok=True)
|
|
os.makedirs(block_model_folder, exist_ok=True)
|
|
os.makedirs(item_model_folder, exist_ok=True)
|
|
os.makedirs(blockstate_folder, exist_ok=True)
|
|
|
|
|
|
items_starlike_java_path = os.path.join(
|
|
base_path, "src", "main", "java", "net", "starlikeclient", "minecraft", "init", "ItemsStarlike.java"
|
|
)
|
|
blocks_java_path = os.path.join(base_path,"src", "game", "java", "net", "minecraft", "init", "Blocks.java")
|
|
|
|
blockId = 695; #replace with next id
|
|
def insert_in_file(file_path, search_text, insert_text, insert_after=True, tab_before=False):
|
|
try:
|
|
with open(file_path, 'r') as file:
|
|
lines = file.readlines()
|
|
except Exception as e:
|
|
print(f"Error reading {file_path}: {e}")
|
|
return False
|
|
|
|
for i, line in enumerate(lines):
|
|
if search_text in line:
|
|
insert_line = insert_text + '\n'
|
|
if tab_before:
|
|
insert_line = '\t' + insert_line
|
|
if insert_after:
|
|
lines.insert(i + 1, insert_line)
|
|
else:
|
|
lines.insert(i, insert_line)
|
|
break
|
|
|
|
try:
|
|
with open(file_path, 'w') as file:
|
|
file.writelines(lines)
|
|
print(f"Updated {file_path} successfully.")
|
|
return True
|
|
except Exception as e:
|
|
print(f"Error writing to {file_path}: {e}")
|
|
return False
|
|
|
|
def append_to_file(file_path, new_line):
|
|
try:
|
|
with open(file_path, 'a') as file:
|
|
file.write(new_line + '\n')
|
|
print(f"Appended to {file_path} successfully.")
|
|
except Exception as e:
|
|
print(f"Error appending to {file_path}: {e}")
|
|
|
|
print("Welcome to GenerateBlocks (EaglerTools)")
|
|
print("Drag the texture of the FULL block into the ")
|
|
for filename in os.listdir(source_folder):
|
|
if filename.endswith(".png"):
|
|
|
|
block_name = os.path.splitext(filename)[0]
|
|
|
|
source_image = os.path.join(source_folder, filename)
|
|
dest_image = os.path.join(block_texture_folder, filename)
|
|
|
|
try:
|
|
shutil.move(source_image, dest_image)
|
|
print(f"Moved image: {filename} to {dest_image}")
|
|
except Exception as e:
|
|
print(f"Error moving file {filename}: {e}")
|
|
continue
|
|
|
|
blockstate_data = {
|
|
"parent": "block/cube_all",
|
|
"textures": {
|
|
"all": f"starlike:blocks/{block_name}"
|
|
}
|
|
}
|
|
blockstate_path = os.path.join(block_model_folder, f"{block_name}.json")
|
|
try:
|
|
with open(blockstate_path, 'w') as blockstate_file:
|
|
json.dump(blockstate_data, blockstate_file, indent=4)
|
|
print(f"Created blockstate JSON: {blockstate_path}")
|
|
except Exception as e:
|
|
print(f"Error writing blockstate JSON for {block_name}: {e}")
|
|
continue
|
|
|
|
item_model_data = {
|
|
"parent": f"starlike:block/{block_name}",
|
|
"display": {
|
|
"thirdperson": {
|
|
"rotation": [10, -45, 170],
|
|
"translation": [0, 1.5, -2.75],
|
|
"scale": [0.375, 0.375, 0.375]
|
|
}
|
|
}
|
|
}
|
|
item_model_path = os.path.join(item_model_folder, f"{block_name}.json")
|
|
try:
|
|
with open(item_model_path, 'w') as item_model_file:
|
|
json.dump(item_model_data, item_model_file, indent=4)
|
|
print(f"Created item model JSON: {item_model_path}")
|
|
except Exception as e:
|
|
print(f"Error writing item model JSON for {block_name}: {e}")
|
|
continue
|
|
|
|
blockstate_json_data = {
|
|
"variants": {
|
|
"normal": {
|
|
"model": f"starlike:{block_name}"
|
|
}
|
|
}
|
|
}
|
|
blockstate_json_path = os.path.join(blockstate_folder, f"{block_name}.json")
|
|
try:
|
|
with open(blockstate_json_path, 'w') as blockstate_json_file:
|
|
json.dump(blockstate_json_data, blockstate_json_file, indent=4)
|
|
print(f"Created blockstate JSON: {blockstate_json_path}")
|
|
except Exception as e:
|
|
print(f"Error writing blockstate JSON for {block_name}: {e}")
|
|
continue
|
|
|
|
material_type = "Material.wood"
|
|
hardness = "0.5f"
|
|
resistance = "5.0f"
|
|
soundType = "soundTypePiston"
|
|
if any(keyword in block_name for keyword in ["log", "planks", "wood"]):
|
|
material_type = "Material.wood"
|
|
hardness = "0.5f"
|
|
resistance = "10.0f"
|
|
soundType = "soundTypeWood"
|
|
elif any(keyword in block_name for keyword in ["steel", "iron", "grate", "bar", "copper", "gold"]):
|
|
material_type = "Material.iron"
|
|
hardness = "5f"
|
|
resistance = "10.0f"
|
|
soundType = "soundTypeMetal"
|
|
elif any(keyword in block_name for keyword in ["dirt", "grass"]):
|
|
material_type = "Material.ground"
|
|
hardness = "0.5f"
|
|
resistance = "1f"
|
|
soundType = "soundTypeGround"
|
|
else:
|
|
material_type = "Material.rock"
|
|
hardness = "1.5f"
|
|
resistance = "10.0f"
|
|
soundType = "soundTypePiston"
|
|
|
|
registration_line = (
|
|
f"Block.registerBlock({blockId}, \"starlike:{block_name}\", "
|
|
f"(new Block({material_type}, MapColor.purpleColor)).setHardness({hardness}).setResistance({resistance}) "
|
|
f".setStepSound(Block.{soundType}).setUnlocalizedName(\"{block_name}\").setCreativeTab(CreativeTabs.tabStarlike));"
|
|
)
|
|
insert_in_file(items_starlike_java_path, "//autogenerateequals", registration_line)
|
|
|
|
block_declaration = f" public static Block {block_name};"
|
|
get_registered_line = f" {block_name} = getRegisteredBlock(\"starlike:{block_name}\");"
|
|
insert_in_file(blocks_java_path, "//autogeneratevar", block_declaration)
|
|
insert_in_file(blocks_java_path, "//autogenerateequals", get_registered_line)
|
|
|
|
item_block_registration = f"Item.registerItemBlock(Blocks.{block_name});"
|
|
insert_in_file(items_starlike_java_path, "//autogenerateregisterblock", item_block_registration, tab_before=True)
|
|
item_block_render_registration = f'e.registerBlock(Blocks.{block_name},"starlike:{block_name}");'
|
|
insert_in_file(items_starlike_java_path, "//autogeneraterender", item_block_render_registration, tab_before=True)
|
|
lang_entry = f"tile.{block_name}.name={block_name.replace('_', ' ').capitalize()}"
|
|
append_to_file(lang_file_path, lang_entry)
|
|
blockId += 1
|
|
|