mcpywrap 0.2.1__tar.gz → 0.2.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/PKG-INFO +1 -1
  2. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/builders/file_merge.py +6 -0
  3. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/builders/project_builder.py +22 -5
  4. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/commands/build_cmd.py +6 -4
  5. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap.egg-info/PKG-INFO +1 -1
  6. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/pyproject.toml +1 -1
  7. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/README.md +0 -0
  8. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/__init__.py +0 -0
  9. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/__main__.py +0 -0
  10. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/builders/AddonsPack.py +0 -0
  11. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/builders/MapPack.py +0 -0
  12. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/builders/__init__.py +0 -0
  13. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/builders/dependency_manager.py +0 -0
  14. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/builders/watcher.py +0 -0
  15. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/cli.py +0 -0
  16. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/commands/__init__.py +0 -0
  17. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/commands/add_cmd.py +0 -0
  18. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/commands/default_cmd.py +0 -0
  19. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/commands/dev_cmd.py +0 -0
  20. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/commands/edit_cmd.py +0 -0
  21. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/commands/init_cmd.py +0 -0
  22. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/commands/mod_cmd.py +0 -0
  23. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/commands/modsdk_cmd.py +0 -0
  24. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/commands/publish_cmd.py +0 -0
  25. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/commands/remove_cmd.py +0 -0
  26. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/commands/run_cmd.py +0 -0
  27. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/commands/ui_cmd.py +0 -0
  28. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/config.py +0 -0
  29. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/custom_packaging.py +0 -0
  30. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/mcstudio/SimpleMonitor.py +0 -0
  31. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/mcstudio/__init__.py +0 -0
  32. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/mcstudio/editor.py +0 -0
  33. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/mcstudio/game.py +0 -0
  34. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/mcstudio/mcs.py +0 -0
  35. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/mcstudio/runtime_cppconfig.py +0 -0
  36. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/mcstudio/studio_server.py +0 -0
  37. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/mcstudio/studio_server_ui.py +0 -0
  38. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/mcstudio/symlink_helper_global.py +0 -0
  39. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/mcstudio/symlink_helper_map.py +0 -0
  40. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/mcstudio/symlinks.py +0 -0
  41. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/minecraft/__init__.py +0 -0
  42. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/minecraft/addons.py +0 -0
  43. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/minecraft/level_dat.py +0 -0
  44. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/minecraft/map.py +0 -0
  45. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/minecraft/netease_modsdk.py +0 -0
  46. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/minecraft/template/generate_mod_files.py +0 -0
  47. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/minecraft/template/mod_template.py +0 -0
  48. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/ui/__init__.py +0 -0
  49. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/ui/project_ui.py +0 -0
  50. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/utils/__init__.py +0 -0
  51. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/utils/print_guide.py +0 -0
  52. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/utils/project_setup.py +0 -0
  53. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/utils/py3to2_util.py +0 -0
  54. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap/utils/utils.py +0 -0
  55. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap.egg-info/SOURCES.txt +0 -0
  56. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap.egg-info/dependency_links.txt +0 -0
  57. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap.egg-info/entry_points.txt +0 -0
  58. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap.egg-info/requires.txt +0 -0
  59. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/mcpywrap.egg-info/top_level.txt +0 -0
  60. {mcpywrap-0.2.1 → mcpywrap-0.2.2}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcpywrap
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: A wrapper for Minecraft China Edition Addons management
5
5
  Author-email: boybook <boybook@easecation.net>
6
6
  License: MIT
@@ -121,6 +121,12 @@ def try_merge_file(source_file, target_file, source_dependency_name=None) -> Tup
121
121
  _write_lang_file(target_file, merged_lang)
122
122
  return True, f"成功合并 {base_name} 到 {os.path.basename(target_file)}"
123
123
 
124
+ if base_name.endswith('.png') or base_name.endswith('.jpg') or base_name.endswith('.jpeg') or base_name.endswith('.tga'):
125
+ # 直接覆盖,并给出警告
126
+ shutil.copy2(source_file, target_file)
127
+ click.secho(f"⚠️ 警告: {base_name} 图片文件重复,正在覆盖", fg="yellow")
128
+ return True, f"强制覆盖 {base_name} 到 {os.path.basename(target_file)}"
129
+
124
130
  # 读取源文件和目标文件的JSON内容
125
131
  source_json = _read_json_file(source_file)
126
132
  target_json = _read_json_file(target_file)
@@ -127,9 +127,10 @@ class AddonProjectBuilder:
127
127
 
128
128
  class MapProjectBuilder:
129
129
  """项目构建器"""
130
- def __init__(self, source_dir: str, target_dir: str):
130
+ def __init__(self, source_dir: str, target_dir: str, merge: bool = False):
131
131
  self.source_dir = source_dir
132
132
  self.target_dir = target_dir
133
+ self.merge = merge
133
134
  self.config = read_config(os.path.join(source_dir, CONFIG_FILE))
134
135
  self.project_name = self.config.get('project', {}).get('name', 'current_project')
135
136
  self.dependency_manager = DependencyManager()
@@ -189,11 +190,19 @@ class MapProjectBuilder:
189
190
  # 复制地图核心数据
190
191
  click.secho('📦 复制地图核心数据...', fg="yellow")
191
192
  source_map.copy_level_data_to(self.target_dir)
193
+
194
+ main_behavior_pack_dir = None
195
+ main_resource_pack_dir = None
192
196
 
193
197
  # 复制原始行为包和资源包
194
198
  click.secho('📦 复制地图行为包和资源包...', fg="yellow")
195
199
  source_map.copy_behavior_packs_to(self.target_dir)
196
200
  source_map.copy_resource_packs_to(self.target_dir)
201
+
202
+ if source_map.behavior_packs:
203
+ main_behavior_pack_dir = os.path.join(self.target_dir, "behavior_packs", os.path.basename(source_map.behavior_packs[0]))
204
+ if source_map.resource_packs:
205
+ main_resource_pack_dir = os.path.join(self.target_dir, "resource_packs", os.path.basename(source_map.resource_packs[0]))
197
206
 
198
207
  # 处理依赖
199
208
  dependencies = self.dependency_manager.get_all_dependencies()
@@ -219,10 +228,18 @@ class MapProjectBuilder:
219
228
  click.secho(f" 📦 {dep_node.name}: {dep_addon.path}", fg="green")
220
229
  # 合并到地图特定的包目录结构
221
230
  # 避免重名
222
- rename_behavior = os.path.basename(dep_addon.behavior_pack_dir) + "_" + dep_addon.pkg_name if os.path.basename(dep_addon.behavior_pack_dir) == "behavior_pack" or os.path.basename(dep_addon.behavior_pack_dir) == "BehaviorPack" else None
223
- dep_addon.copy_behavior_to(target_map.behavior_packs_dir, rename=rename_behavior)
224
- rename_resource = os.path.basename(dep_addon.resource_pack_dir) + "_" + dep_addon.pkg_name if os.path.basename(dep_addon.resource_pack_dir) == "resource_pack" or os.path.basename(dep_addon.resource_pack_dir) == "ResourcePack" else None
225
- dep_addon.copy_resource_to(target_map.resource_packs_dir, rename=rename_resource)
231
+ if self.merge and main_behavior_pack_dir:
232
+ dep_addon.merge_behavior_into(main_behavior_pack_dir)
233
+ else:
234
+ rename_behavior = os.path.basename(dep_addon.behavior_pack_dir) + "_" + dep_addon.pkg_name if os.path.basename(dep_addon.behavior_pack_dir) == "behavior_pack" or os.path.basename(dep_addon.behavior_pack_dir) == "BehaviorPack" else None
235
+ dep_addon.copy_behavior_to(target_map.behavior_packs_dir, rename=rename_behavior)
236
+ main_behavior_pack_dir = os.path.join(target_map.behavior_packs_dir, rename_behavior if rename_behavior else os.path.basename(dep_addon.behavior_pack_dir))
237
+ if self.merge and main_resource_pack_dir:
238
+ dep_addon.merge_resource_into(main_resource_pack_dir)
239
+ else:
240
+ rename_resource = os.path.basename(dep_addon.resource_pack_dir) + "_" + dep_addon.pkg_name if os.path.basename(dep_addon.resource_pack_dir) == "resource_pack" or os.path.basename(dep_addon.resource_pack_dir) == "ResourcePack" else None
241
+ dep_addon.copy_resource_to(target_map.resource_packs_dir, rename=rename_resource)
242
+ main_resource_pack_dir = os.path.join(target_map.resource_packs_dir, rename_resource if rename_resource else os.path.basename(dep_addon.resource_pack_dir))
226
243
  else:
227
244
  # 如果没有依赖树(异常情况),则按照扁平方式处理
228
245
  click.secho(f"⚠️ 警告: 无法构建依赖树,将按扁平方式处理依赖", fg="yellow")
@@ -11,7 +11,8 @@ from ..builders.project_builder import AddonProjectBuilder, MapProjectBuilder
11
11
  base_dir = os.getcwd()
12
12
 
13
13
  @click.command()
14
- def build_cmd():
14
+ @click.option('--merge', '-m', is_flag=True, help='强制合并所有资源文件')
15
+ def build_cmd(merge):
15
16
  """构建为 MCStudio 工程"""
16
17
  if not config_exists():
17
18
  click.secho('❌ 错误: 未找到配置文件。请先运行 `mcpywrap init` 初始化项目。', fg="red")
@@ -30,16 +31,17 @@ def build_cmd():
30
31
  target_dir = os.path.normpath(os.path.join(base_dir, target_dir))
31
32
 
32
33
  # 实际构建
33
- build(base_dir, target_dir)
34
+ build(base_dir, target_dir, force_merge=merge)
34
35
 
35
36
 
36
- def build(source_dir, target_dir):
37
+ def build(source_dir, target_dir, force_merge: bool = False):
37
38
  """
38
39
  执行项目构建
39
40
 
40
41
  Args:
41
42
  source_dir: 源代码目录
42
43
  target_dir: 目标目录
44
+ force_merge: 是否强制合并资源文件
43
45
 
44
46
  Returns:
45
47
  bool: 是否构建成功
@@ -55,7 +57,7 @@ def build(source_dir, target_dir):
55
57
  builder = AddonProjectBuilder(source_dir, target_dir)
56
58
  success, error = builder.build()
57
59
  elif project_type == "map":
58
- builder = MapProjectBuilder(source_dir, target_dir)
60
+ builder = MapProjectBuilder(source_dir, target_dir, force_merge)
59
61
  success, error = builder.build()
60
62
  else:
61
63
  click.secho('❌ 暂未支持: 当前仅支持Addons和Map项目的构建', fg="red")
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: mcpywrap
3
- Version: 0.2.1
3
+ Version: 0.2.2
4
4
  Summary: A wrapper for Minecraft China Edition Addons management
5
5
  Author-email: boybook <boybook@easecation.net>
6
6
  License: MIT
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "mcpywrap"
7
- version = "0.2.1"
7
+ version = "0.2.2"
8
8
  description = "A wrapper for Minecraft China Edition Addons management"
9
9
  readme = "README.md"
10
10
  authors = [{name = "boybook", email = "boybook@easecation.net"}]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes